` موجودة ولكن ليس لديها تصميم مرئي بعد – هذا قادم في الدرس التالي!
+**اختبار فهمك**: حاول فتح ملف HTML الخاص بك في متصفح مع تعطيل JavaScript وإزالة CSS. هذا يظهر لك الهيكل الدلالي النقي الذي أنشأته!
---
-## تحدي وكيل GitHub Copilot
+## تحدي وكيل GitHub Copilot
-استخدم وضع الوكيل لإكمال التحدي التالي:
+استخدم وضع الوكيل لإكمال التحدي التالي:
-**الوصف:** قم بإنشاء هيكل HTML دلالي لقسم دليل العناية بالنباتات الذي يمكن إضافته إلى مشروع التيراريوم.
-**الموجه:** قم بإنشاء قسم HTML دلالي يتضمن عنوانًا رئيسيًا "دليل العناية بالنباتات"، وثلاثة أقسام فرعية بعناوين "الري"، "متطلبات الضوء"، و"العناية بالتربة"، يحتوي كل منها على فقرة من معلومات العناية بالنباتات. استخدم علامات HTML الدلالية المناسبة مثل `
`، ``، ``، و ` ` لتنظيم المحتوى بشكل صحيح.
+**الوصف:** قم بإنشاء هيكل HTML دلالي لقسم دليل العناية بالنباتات يمكن إضافته إلى مشروع التيراريوم.
-تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
+**المهمة:** قم بإنشاء قسم HTML دلالي يتضمن عنوانًا رئيسيًا "دليل العناية بالنباتات"، وثلاثة أقسام فرعية مع عناوين "الري"، "متطلبات الضوء"، و"العناية بالتربة"، يحتوي كل منها على فقرة من معلومات العناية بالنباتات. استخدم علامات HTML الدلالية المناسبة مثل ``، ``، ``، و` ` لتنظيم المحتوى بشكل مناسب.
-## تحدي استكشاف تاريخ HTML
+تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
-**التعرف على تطور الويب**
+## تحدي استكشاف تاريخ HTML
-لقد تطور HTML بشكل كبير منذ أن أنشأ تيم بيرنرز لي أول متصفح ويب في CERN عام 1990. بعض العلامات القديمة مثل `` أصبحت الآن مهملة لأنها لا تتوافق جيدًا مع معايير الوصول الحديثة ومبادئ التصميم المتجاوب.
+**التعرف على تطور الويب**
-**جرب هذه التجربة:**
-1. قم مؤقتًا بتغليف عنوان `` الخاص بك داخل علامة ``: `My Terrarium `
-2. افتح صفحتك في متصفح ولاحظ تأثير التمرير
-3. فكر في سبب إهمال هذه العلامة (تلميح: فكر في تجربة المستخدم وإمكانية الوصول)
-4. قم بإزالة علامة `` وعد إلى الترميز الدلالي
+لقد تطور HTML بشكل كبير منذ أن أنشأ تيم بيرنرز لي أول متصفح ويب في CERN عام 1990. بعض العلامات القديمة مثل `` أصبحت الآن مهملة لأنها لا تعمل بشكل جيد مع معايير الوصول الحديثة ومبادئ التصميم المتجاوب.
-**أسئلة للتفكير:**
-- كيف يمكن أن يؤثر عنوان متحرك على المستخدمين الذين يعانون من ضعف البصر أو حساسية الحركة؟
-- ما هي تقنيات CSS الحديثة التي يمكن أن تحقق تأثيرات بصرية مشابهة بشكل أكثر سهولة؟
-- لماذا من المهم استخدام معايير الويب الحالية بدلاً من العناصر المهملة؟
+**جرب هذا التمرين:**
+1. قم مؤقتًا بتغليف عنوان `` الخاص بك داخل علامة ``: `تيراريومي `
+2. افتح صفحتك في متصفح ولاحظ تأثير التمرير
+3. فكر في سبب إهمال هذه العلامة (تلميح: فكر في تجربة المستخدم وإمكانية الوصول)
+4. قم بإزالة علامة `` وارجع إلى الترميز الدلالي
-استكشف المزيد حول [عناصر HTML المهملة والمستبعدة](https://developer.mozilla.org/docs/Web/HTML/Element#Obsolete_and_deprecated_elements) لفهم كيف تتطور معايير الويب لتحسين تجربة المستخدم.
+**أسئلة للتفكير:**
+- كيف يمكن أن يؤثر عنوان متحرك على المستخدمين ذوي الإعاقات البصرية أو حساسية الحركة؟
+- ما هي تقنيات CSS الحديثة التي يمكن أن تحقق تأثيرات بصرية مشابهة بشكل أكثر سهولة؟
+- لماذا من المهم استخدام معايير الويب الحالية بدلاً من العناصر المهملة؟
+استكشف المزيد حول [عناصر HTML المهملة والقديمة](https://developer.mozilla.org/docs/Web/HTML/Element#Obsolete_and_deprecated_elements) لفهم كيف تتطور معايير الويب لتحسين تجربة المستخدم.
-## اختبار ما بعد المحاضرة
+## اختبار ما بعد المحاضرة
[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/16)
-## المراجعة والدراسة الذاتية
-
-**تعميق معرفتك بـ HTML**
-
-HTML كان أساس الويب لأكثر من 30 عامًا، حيث تطور من لغة ترميز وثائق بسيطة إلى منصة متطورة لبناء تطبيقات تفاعلية. فهم هذا التطور يساعدك على تقدير معايير الويب الحديثة واتخاذ قرارات تطوير أفضل.
-
-**مسارات التعلم الموصى بها:**
-
-1. **تاريخ وتطور HTML**
- - ابحث في الجدول الزمني من HTML 1.0 إلى HTML5
- - استكشف سبب إهمال بعض العلامات (الوصول، ملاءمة الأجهزة المحمولة، سهولة الصيانة)
- - تحقق من ميزات HTML الناشئة والمقترحات
-
-2. **التعمق في HTML الدلالي**
- - ادرس القائمة الكاملة لعناصر [HTML5 الدلالية](https://developer.mozilla.org/docs/Web/HTML/Element)
- - مارس تحديد متى تستخدم ``، ``، ``، و ``
- - تعرف على سمات ARIA لتحسين إمكانية الوصول
-
-3. **تطوير الويب الحديث**
- - استكشف [بناء مواقع ويب متجاوبة](https://docs.microsoft.com/learn/modules/build-simple-website/?WT.mc_id=academic-77807-sagibbon) على Microsoft Learn
- - فهم كيفية دمج HTML مع CSS و JavaScript
- - تعلم أفضل الممارسات لأداء الويب وتحسين محركات البحث
+## المراجعة والدراسة الذاتية
+
+**تعميق معرفتك بـ HTML**
+
+HTML كان أساس الويب لأكثر من 30 عامًا، تطور من لغة ترميز بسيطة للمستندات إلى منصة متطورة لبناء التطبيقات التفاعلية. فهم هذا التطور يساعدك على تقدير معايير الويب الحديثة واتخاذ قرارات تطوير أفضل.
+
+**مسارات التعلم الموصى بها:**
+
+1. **تاريخ وتطور HTML**
+ - ابحث في الجدول الزمني من HTML 1.0 إلى HTML5
+ - استكشف سبب إهمال بعض العلامات (إمكانية الوصول، ملاءمة الأجهزة المحمولة، سهولة الصيانة)
+ - تحقق من ميزات HTML الناشئة والمقترحات
+
+2. **الغوص العميق في HTML الدلالي**
+ - ادرس القائمة الكاملة لعناصر [HTML5 الدلالية](https://developer.mozilla.org/docs/Web/HTML/Element)
+ - تدرب على تحديد متى تستخدم ``، ``، ``، و``
+ - تعلم عن سمات ARIA لتحسين إمكانية الوصول
+
+3. **تطوير الويب الحديث**
+ - استكشف [بناء مواقع ويب متجاوبة](https://docs.microsoft.com/learn/modules/build-simple-website/?WT.mc_id=academic-77807-sagibbon) على Microsoft Learn
+ - فهم كيفية دمج HTML مع CSS وJavaScript
+ - تعلم عن أفضل ممارسات أداء الويب وتحسين محركات البحث
+
+**أسئلة للتفكير:**
+- ما هي علامات HTML المهملة التي اكتشفتها، ولماذا تم إزالتها؟
+- ما هي ميزات HTML الجديدة التي يتم اقتراحها للإصدارات المستقبلية؟
+- كيف يساهم HTML الدلالي في إمكانية الوصول وتحسين محركات البحث؟
+
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] افتح أدوات المطور (F12) وتحقق من هيكل HTML لموقعك المفضل
+- [ ] أنشئ ملف HTML بسيطًا يحتوي على علامات أساسية: ``، ` `، و` `
+- [ ] تحقق من صحة HTML الخاص بك باستخدام أداة التحقق من HTML عبر الإنترنت من W3C
+- [ ] حاول إضافة تعليق إلى HTML الخاص بك باستخدام ``
+
+### 🎯 **ما يمكنك إنجازه خلال الساعة**
+- [ ] أكمل اختبار ما بعد الدرس وراجع مفاهيم HTML الدلالية
+- [ ] قم ببناء صفحة ويب بسيطة عن نفسك باستخدام هيكل HTML صحيح
+- [ ] جرب مستويات العناوين المختلفة وعلامات تنسيق النص
+- [ ] أضف صور وروابط لممارسة دمج الوسائط المتعددة
+- [ ] ابحث عن ميزات HTML5 التي لم تجربها بعد
+
+### 📅 **رحلتك الأسبوعية مع HTML**
+- [ ] أكمل مهمة مشروع التيراريوم باستخدام الترميز الدلالي
+- [ ] أنشئ صفحة ويب قابلة للوصول باستخدام تسميات وأدوار ARIA
+- [ ] تدرب على إنشاء النماذج باستخدام أنواع الإدخال المختلفة
+- [ ] استكشف واجهات برمجة تطبيقات HTML5 مثل localStorage أو geolocation
+- [ ] ادرس أنماط HTML المتجاوبة وتصميم الأولوية للجوال
+- [ ] راجع أكواد HTML الخاصة بالمطورين الآخرين للحصول على أفضل الممارسات
+
+### 🌟 **رحلتك الشهرية لإتقان أساسيات الويب**
+- [ ] قم ببناء موقع ويب للملف الشخصي يعرض إتقانك لـ HTML
+- [ ] تعلم قوالب HTML باستخدام إطار عمل مثل Handlebars
+- [ ] ساهم في مشاريع مفتوحة المصدر من خلال تحسين وثائق HTML
+- [ ] أتقن مفاهيم HTML المتقدمة مثل العناصر المخصصة
+- [ ] دمج HTML مع أطر CSS ومكتبات JavaScript
+- [ ] قم بتوجيه الآخرين الذين يتعلمون أساسيات HTML
+
+## 🎯 جدول زمني لإتقان HTML
+
+```mermaid
+timeline
+ title HTML Learning Progression
+
+ section Foundation (5 minutes)
+ Document Structure: DOCTYPE declaration
+ : HTML root element
+ : Head vs Body understanding
+
+ section Metadata (10 minutes)
+ Essential Meta Tags: Character encoding
+ : Viewport configuration
+ : Browser compatibility
+
+ section Content Creation (15 minutes)
+ Image Integration: Proper file paths
+ : Alt text importance
+ : Self-closing tags
+
+ section Layout Organization (20 minutes)
+ Container Strategy: Div elements for structure
+ : Class and ID naming
+ : Nested element hierarchy
+
+ section Semantic Mastery (30 minutes)
+ Meaningful Markup: Heading hierarchy
+ : Screen reader navigation
+ : Accessibility best practices
+
+ section Advanced Concepts (1 hour)
+ HTML5 Features: Modern semantic elements
+ : ARIA attributes
+ : Performance considerations
+
+ section Professional Skills (1 week)
+ Code Organization: File structure patterns
+ : Maintainable markup
+ : Team collaboration
+
+ section Expert Level (1 month)
+ Modern Web Standards: Progressive enhancement
+ : Cross-browser compatibility
+ : HTML specification updates
+```
+
+### 🛠️ ملخص أدوات HTML الخاصة بك
-**أسئلة للتفكير:**
-- ما هي علامات HTML المهملة التي اكتشفتها، ولماذا تم إزالتها؟
-- ما هي ميزات HTML الجديدة التي يتم اقتراحها للإصدارات المستقبلية؟
-- كيف يساهم HTML الدلالي في إمكانية الوصول إلى الويب وتحسين محركات البحث؟
+بعد إكمال هذا الدرس، لديك الآن:
+- **هيكل المستند**: أساس HTML5 كامل مع DOCTYPE صحيح
+- **الترميز الدلالي**: علامات ذات معنى تعزز إمكانية الوصول وتحسين محركات البحث
+- **دمج الصور**: ممارسات تنظيم الملفات والنص البديل بشكل صحيح
+- **حاويات التخطيط**: استخدام استراتيجي للعناصر div مع أسماء فئات وصفية
+- **وعي إمكانية الوصول**: فهم التنقل باستخدام قارئات الشاشة
+- **المعايير الحديثة**: ممارسات HTML5 الحالية ومعرفة العلامات المهملة
+- **أساس المشروع**: قاعدة صلبة لتنسيق CSS وتفاعل JavaScript
+**الخطوات التالية**: هيكل HTML الخاص بك جاهز لتنسيق CSS! الأساس الدلالي الذي بنيته سيجعل الدرس التالي أسهل بكثير للفهم.
-## الواجب
+## المهمة
-[مارس HTML الخاص بك: قم ببناء نموذج مدونة](assignment.md)
+[تمرن على HTML: قم ببناء نموذج مدونة](assignment.md)
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسير خاطئ ينشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/3-terrarium/2-intro-to-css/README.md b/translations/ar/3-terrarium/2-intro-to-css/README.md
index ac4f1c3a53..3fac97dc87 100644
--- a/translations/ar/3-terrarium/2-intro-to-css/README.md
+++ b/translations/ar/3-terrarium/2-intro-to-css/README.md
@@ -1,24 +1,80 @@
-# مشروع التيراريوم الجزء الثاني: مقدمة إلى CSS
+# مشروع التيراريوم الجزء الثاني: مقدمة في CSS
+
+```mermaid
+journey
+ title Your CSS Styling Journey
+ section Foundation
+ Link CSS file: 3: Student
+ Understand cascade: 4: Student
+ Learn inheritance: 4: Student
+ section Selectors
+ Element targeting: 4: Student
+ Class patterns: 5: Student
+ ID specificity: 5: Student
+ section Layout
+ Position elements: 4: Student
+ Create containers: 5: Student
+ Build terrarium: 5: Student
+ section Polish
+ Add visual effects: 5: Student
+ Responsive design: 5: Student
+ Glass reflections: 5: Student
+```
-
+
> رسم توضيحي بواسطة [Tomomi Imura](https://twitter.com/girlie_mac)
-هل تتذكر كيف كان شكل التيراريوم الخاص بك باستخدام HTML؟ CSS هو المكان الذي نحول فيه هذا الهيكل البسيط إلى شيء جذاب بصريًا.
-
-إذا كان HTML يشبه بناء إطار المنزل، فإن CSS هو كل ما يجعل المنزل يبدو وكأنه منزل - ألوان الطلاء، ترتيب الأثاث، الإضاءة، وكيفية تدفق الغرف معًا. فكر في كيف بدأ قصر فرساي كمنزل صيد بسيط، ولكن الاهتمام الدقيق بالديكور والتصميم حوله إلى واحد من أعظم المباني في العالم.
-
-اليوم، سنحول التيراريوم الخاص بك من عملي إلى مصقول. ستتعلم كيفية وضع العناصر بدقة، إنشاء تخطيطات تستجيب لأحجام الشاشات المختلفة، وإضافة الجاذبية البصرية التي تجعل المواقع الإلكترونية ممتعة.
-
-بحلول نهاية هذا الدرس، سترى كيف يمكن أن يحسن CSS الاستراتيجي مشروعك بشكل كبير. دعونا نضيف بعض الأناقة إلى التيراريوم الخاص بك.
+هل تتذكر كيف كان شكل التيراريوم الخاص بك بسيطًا جدًا؟ CSS هو المكان الذي نحول فيه هذا الهيكل البسيط إلى شيء جذاب بصريًا.
+
+إذا كان HTML يشبه بناء إطار المنزل، فإن CSS هو كل ما يجعل المنزل يبدو وكأنه منزل - ألوان الطلاء، ترتيب الأثاث، الإضاءة، وكيفية تدفق الغرف معًا. فكر في كيف بدأ قصر فرساي ككوخ صيد بسيط، ولكن الاهتمام الدقيق بالديكور والتصميم حوله إلى واحد من أعظم المباني في العالم.
+
+اليوم، سنحول التيراريوم الخاص بك من عملي إلى مصقول. ستتعلم كيفية وضع العناصر بدقة، وإنشاء تخطيطات تستجيب لأحجام الشاشات المختلفة، وخلق الجاذبية البصرية التي تجعل المواقع الإلكترونية ممتعة.
+
+بحلول نهاية هذا الدرس، سترى كيف يمكن للتنسيق الاستراتيجي باستخدام CSS أن يحسن مشروعك بشكل كبير. دعونا نضيف بعض الأناقة إلى التيراريوم الخاص بك.
+
+```mermaid
+mindmap
+ root((CSS Fundamentals))
+ Cascade
+ Specificity Rules
+ Inheritance
+ Priority Order
+ Conflict Resolution
+ Selectors
+ Element Tags
+ Classes (.class)
+ IDs (#id)
+ Combinators
+ Box Model
+ Margin
+ Border
+ Padding
+ Content
+ Layout
+ Positioning
+ Display Types
+ Flexbox
+ Grid
+ Visual Effects
+ Colors
+ Shadows
+ Transitions
+ Animations
+ Responsive Design
+ Media Queries
+ Flexible Units
+ Viewport Meta
+ Mobile First
+```
## اختبار ما قبل المحاضرة
@@ -26,11 +82,11 @@ CO_OP_TRANSLATOR_METADATA:
## البدء مع CSS
-غالبًا ما يُعتقد أن CSS مجرد "جعل الأشياء جميلة"، لكنه يخدم غرضًا أوسع بكثير. CSS يشبه أن تكون مخرج فيلم - تتحكم ليس فقط في كيفية ظهور كل شيء، ولكن أيضًا كيف يتحرك، يستجيب للتفاعل، ويتكيف مع المواقف المختلفة.
+غالبًا ما يُعتقد أن CSS مجرد "جعل الأشياء جميلة"، لكنها تخدم غرضًا أوسع بكثير. CSS تشبه المخرج في فيلم - تتحكم ليس فقط في كيفية ظهور كل شيء، ولكن أيضًا في كيفية تحركه، استجابته للتفاعل، وتكيفه مع المواقف المختلفة.
-CSS الحديث قادر بشكل ملحوظ. يمكنك كتابة كود يقوم تلقائيًا بتعديل التخطيطات للهواتف، الأجهزة اللوحية، وأجهزة الكمبيوتر المكتبية. يمكنك إنشاء رسوم متحركة سلسة توجه انتباه المستخدمين حيثما كان ذلك ضروريًا. يمكن أن تكون النتائج مثيرة للإعجاب عندما يعمل كل شيء معًا.
+CSS الحديثة قادرة بشكل ملحوظ. يمكنك كتابة كود يقوم بضبط التخطيطات تلقائيًا للهواتف، الأجهزة اللوحية، وأجهزة الكمبيوتر المكتبية. يمكنك إنشاء رسوم متحركة سلسة توجه انتباه المستخدمين حيثما كان ذلك ضروريًا. يمكن أن تكون النتائج مثيرة للإعجاب عندما تعمل كل هذه العناصر معًا.
-> 💡 **نصيحة احترافية**: CSS يتطور باستمرار مع ميزات وقدرات جديدة. تحقق دائمًا من [CanIUse.com](https://caniuse.com) للتحقق من دعم المتصفح للميزات الجديدة قبل استخدامها في المشاريع الإنتاجية.
+> 💡 **نصيحة احترافية**: CSS تتطور باستمرار مع ميزات وقدرات جديدة. تحقق دائمًا من [CanIUse.com](https://caniuse.com) للتحقق من دعم المتصفح للميزات الجديدة في CSS قبل استخدامها في المشاريع الإنتاجية.
**ما سنحققه في هذا الدرس:**
- **إنشاء** تصميم بصري كامل للتيراريوم الخاص بك باستخدام تقنيات CSS الحديثة
@@ -42,13 +98,13 @@ CSS الحديث قادر بشكل ملحوظ. يمكنك كتابة كود يق
يجب أن تكون قد أكملت هيكل HTML للتيراريوم الخاص بك من الدرس السابق وأن يكون جاهزًا للتنسيق.
-> 📺 **مصدر فيديو**: تحقق من هذا الفيديو المفيد
+> 📺 **مصدر فيديو**: تحقق من هذا الفيديو التوضيحي المفيد
>
> [](https://www.youtube.com/watch?v=6yIdOIV9p1I)
### إعداد ملف CSS الخاص بك
-قبل أن نبدأ في التنسيق، نحتاج إلى ربط CSS بـ HTML الخاص بنا. هذا الاتصال يخبر المتصفح بمكان العثور على تعليمات التنسيق للتيراريوم الخاص بنا.
+قبل أن نبدأ في التنسيق، نحتاج إلى ربط CSS بـ HTML. هذا الاتصال يخبر المتصفح بمكان العثور على تعليمات التنسيق للتيراريوم الخاص بنا.
في مجلد التيراريوم الخاص بك، قم بإنشاء ملف جديد يسمى `style.css`، ثم قم بربطه في قسم `
` من مستند HTML الخاص بك:
@@ -58,7 +114,7 @@ CSS الحديث قادر بشكل ملحوظ. يمكنك كتابة كود يق
**ما يفعله هذا الكود:**
- **إنشاء** اتصال بين ملفات HTML وCSS الخاصة بك
-- **إخبار** المتصفح بتحميل وتطبيق الأنماط من `style.css`
+- **إخبار** المتصفح بتحميل وتطبيق التنسيقات من `style.css`
- **استخدام** السمة `rel="stylesheet"` لتحديد أن هذا ملف CSS
- **الإشارة** إلى مسار الملف باستخدام `href="./style.css"`
@@ -66,7 +122,7 @@ CSS الحديث قادر بشكل ملحوظ. يمكنك كتابة كود يق
هل تساءلت يومًا لماذا يُطلق على CSS اسم "أوراق الأنماط المتسلسلة"؟ الأنماط تتسلسل مثل الشلال، وأحيانًا تتعارض مع بعضها البعض.
-فكر في كيفية عمل هيكل القيادة العسكرية - قد يقول أمر عام "يرتدي جميع الجنود اللون الأخضر"، ولكن قد يقول أمر محدد لوحدتك "ارتدِ الأزرق الرسمي للحفل". التعليمات الأكثر تحديدًا لها الأولوية. CSS يتبع منطقًا مشابهًا، وفهم هذا التسلسل يجعل تصحيح الأخطاء أكثر سهولة.
+فكر في كيفية عمل هياكل القيادة العسكرية - قد يقول أمر عام "يرتدي جميع الجنود اللون الأخضر"، ولكن قد يقول أمر محدد لوحدتك "ارتدِ الأزرق الرسمي للحفل". التعليمات الأكثر تحديدًا لها الأولوية. CSS تتبع منطقًا مشابهًا، وفهم هذا التسلسل يجعل تصحيح الأخطاء أكثر سهولة.
### تجربة أولوية التسلسل
@@ -94,7 +150,29 @@ h1 {
- **تعيين** لون النص إلى الأزرق باستخدام ورقة أنماط خارجية
- **إنشاء** قاعدة ذات أولوية أقل مقارنة بالأنماط الداخلية
-✅ **اختبار المعرفة**: أي لون يظهر في تطبيق الويب الخاص بك؟ لماذا يفوز هذا اللون؟ هل يمكنك التفكير في سيناريوهات قد ترغب فيها في تجاوز الأنماط؟
+✅ **اختبار المعرفة**: ما اللون الذي يظهر في تطبيق الويب الخاص بك؟ لماذا يفوز هذا اللون؟ هل يمكنك التفكير في سيناريوهات قد ترغب فيها في تجاوز الأنماط؟
+
+```mermaid
+flowchart TD
+ A["Browser encounters h1 element"] --> B{"Check for inline styles"}
+ B -->|Found| C["style='color: red'"]
+ B -->|None| D{"Check for ID rules"}
+ C --> E["Apply red color (1000 points)"]
+ D -->|Found| F["#heading { color: green }"]
+ D -->|None| G{"Check for class rules"}
+ F --> H["Apply green color (100 points)"]
+ G -->|Found| I[".title { color: blue }"]
+ G -->|None| J{"Check element rules"}
+ I --> K["Apply blue color (10 points)"]
+ J -->|Found| L["h1 { color: purple }"]
+ J -->|None| M["Use browser default"]
+ L --> N["Apply purple color (1 point)"]
+
+ style C fill:#ff6b6b
+ style F fill:#51cf66
+ style I fill:#339af0
+ style L fill:#9775fa
+```
> 💡 **ترتيب أولوية CSS (من الأعلى إلى الأدنى):**
> 1. **الأنماط الداخلية** (سمة style)
@@ -105,13 +183,13 @@ h1 {
## وراثة CSS في العمل
-وراثة CSS تعمل مثل الوراثة الجينية - العناصر ترث خصائص معينة من عناصرها الأم. إذا قمت بتعيين عائلة الخط على عنصر body، فإن كل النصوص بداخله تستخدم تلقائيًا نفس الخط. يشبه ذلك كيف ظهر الفك المميز لعائلة هابسبورغ عبر الأجيال دون أن يتم تحديده لكل فرد.
+وراثة CSS تعمل مثل الوراثة الجينية - العناصر ترث خصائص معينة من عناصرها الأم. إذا قمت بتعيين نوع الخط على عنصر body، فإن كل النصوص داخله تستخدم نفس الخط تلقائيًا. يشبه ذلك كيف ظهر فك عائلة هابسبورغ المميز عبر الأجيال دون تحديده لكل فرد.
ومع ذلك، ليس كل شيء يتم وراثته. أنماط النصوص مثل الخطوط والألوان يتم وراثتها، ولكن خصائص التخطيط مثل الهوامش والحدود لا يتم وراثتها. تمامًا مثلما قد يرث الأطفال السمات الجسدية ولكن ليس اختيارات الموضة لوالديهم.
-### مراقبة وراثة الخطوط
+### ملاحظة وراثة الخطوط
-دعونا نرى الوراثة في العمل من خلال تعيين عائلة الخط على عنصر ``:
+دعونا نرى الوراثة في العمل من خلال تعيين نوع الخط على عنصر ``:
```css
body {
@@ -120,26 +198,41 @@ body {
```
**تفصيل ما يحدث هنا:**
-- **تعيين** عائلة الخط للصفحة بأكملها عن طريق استهداف عنصر ``
-- **استخدام** مجموعة خطوط احتياطية لتحسين توافق المتصفح
+- **تعيين** نوع الخط للصفحة بأكملها عن طريق استهداف عنصر ``
+- **استخدام** مجموعة خطوط مع خيارات احتياطية لتحسين توافق المتصفح
- **تطبيق** خطوط نظام حديثة تبدو رائعة عبر أنظمة تشغيل مختلفة
- **ضمان** أن جميع العناصر الفرعية ترث هذا الخط ما لم يتم تجاوزه بشكل محدد
-افتح أدوات المطور في المتصفح الخاص بك (F12)، انتقل إلى علامة التبويب العناصر، وقم بفحص عنصر `` الخاص بك. سترى أنه يرث عائلة الخط من body:
+افتح أدوات المطور في المتصفح (F12)، انتقل إلى علامة التبويب العناصر، وقم بفحص عنصر `` الخاص بك. سترى أنه يرث نوع الخط من body:

✅ **وقت التجربة**: حاول تعيين خصائص أخرى قابلة للوراثة على `` مثل `color`، `line-height`، أو `text-align`. ماذا يحدث لعناوينك والعناصر الأخرى؟
-> 📝 **الخصائص القابلة للوراثة تشمل**: `color`، `font-family`، `font-size`، `line-height`، `text-align`، `visibility`
+> 📝 **الخصائص القابلة للوراثة تشمل**: `color`, `font-family`, `font-size`, `line-height`, `text-align`, `visibility`
>
-> **الخصائص غير القابلة للوراثة تشمل**: `margin`، `padding`، `border`، `width`، `height`، `position`
+> **الخصائص غير القابلة للوراثة تشمل**: `margin`, `padding`, `border`, `width`, `height`, `position`
+
+### 🔄 **تقييم تربوي**
+**فهم أساسيات CSS**: قبل الانتقال إلى المحددات، تأكد من أنك تستطيع:
+- ✅ شرح الفرق بين التسلسل والوراثة
+- ✅ التنبؤ بالنمط الذي سيفوز في تعارض التحديد
+- ✅ تحديد الخصائص التي ترث من العناصر الأم
+- ✅ ربط ملفات CSS بـ HTML بشكل صحيح
+
+**اختبار سريع**: إذا كان لديك هذه الأنماط، ما اللون الذي سيكون عليه `` داخل ` `؟
+```css
+div { color: blue; }
+.special { color: green; }
+h1 { color: red; }
+```
+*الإجابة: أحمر (محدد العنصر يستهدف h1 مباشرة)*
## إتقان محددات CSS
-محددات CSS هي طريقتك لاستهداف عناصر محددة للتنسيق. إنها تعمل مثل إعطاء توجيهات دقيقة - بدلاً من قول "المنزل"، قد تقول "المنزل الأزرق ذو الباب الأحمر في شارع مابل".
+محددات CSS هي طريقتك لاستهداف عناصر محددة للتنسيق. تعمل مثل إعطاء توجيهات دقيقة - بدلاً من قول "المنزل"، قد تقول "المنزل الأزرق ذو الباب الأحمر في شارع مابل".
-CSS يوفر طرقًا مختلفة لتكون محددًا، واختيار المحدد الصحيح يشبه اختيار الأداة المناسبة للمهمة. أحيانًا تحتاج إلى تنسيق كل الأبواب في الحي، وأحيانًا باب واحد فقط.
+CSS توفر طرقًا مختلفة لتكون محددًا، واختيار المحدد الصحيح يشبه اختيار الأداة المناسبة للمهمة. أحيانًا تحتاج إلى تنسيق كل الأبواب في الحي، وأحيانًا تحتاج إلى باب واحد فقط.
### محددات العناصر (العلامات)
@@ -163,16 +256,16 @@ h1 {
**فهم هذه الأنماط:**
- **تعيين** طباعة متسقة عبر الصفحة بأكملها باستخدام محدد `body`
- **إزالة** الهوامش والتعبئة الافتراضية للمتصفح لتحكم أفضل
-- **تنسيق** جميع عناصر العنوان بالألوان، المحاذاة، والتباعد
+- **تنسيق** جميع عناصر العناوين بالألوان، المحاذاة، والتباعد
- **استخدام** وحدات `rem` لتحديد حجم الخط القابل للتوسع والوصول
بينما تعمل محددات العناصر بشكل جيد للتنسيق العام، ستحتاج إلى محددات أكثر تحديدًا لتنسيق المكونات الفردية مثل النباتات في التيراريوم الخاص بك.
### محددات المعرفات للعناصر الفريدة
-محددات المعرفات تستخدم الرمز `#` وتستهدف العناصر ذات سمات `id` المحددة. نظرًا لأن المعرفات يجب أن تكون فريدة في الصفحة، فهي مثالية لتنسيق العناصر الفردية والخاصة مثل حاويات النباتات الجانبية في التيراريوم الخاص بنا.
+محددات المعرفات تستخدم رمز `#` وتستهدف العناصر ذات سمات `id` المحددة. نظرًا لأن المعرفات يجب أن تكون فريدة في الصفحة، فهي مثالية لتنسيق العناصر الفردية والخاصة مثل حاويات النباتات الجانبية في التيراريوم الخاص بنا.
-دعونا ننشئ تنسيقًا لحاويات الجوانب في التيراريوم حيث ستعيش النباتات:
+دعونا ننشئ التنسيق لحاويات الجوانب في التيراريوم حيث ستعيش النباتات:
```css
#left-container {
@@ -203,7 +296,7 @@ h1 {
- **استخدام** وحدات `vh` (ارتفاع نافذة العرض) لتحديد ارتفاع استجابة يتكيف مع حجم الشاشة
- **تطبيق** `box-sizing: border-box` بحيث يتم تضمين التعبئة في العرض الإجمالي
- **إزالة** وحدات `px` غير الضرورية من القيم الصفرية للحصول على كود أنظف
-- **تعيين** لون خلفية خفيف أسهل على العين من الرمادي الفاتح
+- **تعيين** لون خلفية خفيف أسهل على العين من الرمادي القاسي
✅ **تحدي جودة الكود**: لاحظ كيف ينتهك هذا CSS مبدأ DRY (لا تكرر نفسك). هل يمكنك إعادة صياغته باستخدام كل من المعرف والفئة؟
@@ -233,11 +326,11 @@ h1 {
}
```
-### محددات الفئات للأنماط القابلة لإعادة الاستخدام
+### محددات الفئات لأنماط قابلة لإعادة الاستخدام
محددات الفئات تستخدم الرمز `.` وهي مثالية عندما تريد تطبيق نفس الأنماط على عناصر متعددة. على عكس المعرفات، يمكن إعادة استخدام الفئات في جميع أنحاء HTML الخاص بك، مما يجعلها مثالية لأنماط التنسيق المتسقة.
-في التيراريوم الخاص بنا، تحتاج كل نبتة إلى تنسيق مشابه ولكن أيضًا تحتاج إلى وضع فردي. سنستخدم مزيجًا من الفئات للأنماط المشتركة والمعرفات للوضع الفردي.
+في التيراريوم الخاص بنا، تحتاج كل نبتة إلى تنسيق مشابه ولكن أيضًا تحتاج إلى وضع فردي. سنستخدم مزيجًا من الفئات لأنماط مشتركة والمعرفات لوضع فردي.
**إليك هيكل HTML لكل نبتة:**
```html
@@ -246,11 +339,11 @@ h1 {
```
-**العناصر الرئيسية الموضحة:**
-- **استخدام** `class="plant-holder"` لتنسيق الحاوية المتسق عبر جميع النباتات
-- **تطبيق** `class="plant"` لتنسيق السلوك والمظهر المشترك للصورة
-- **تضمين** معرف فريد `id="plant1"` للوضع الفردي وتفاعل JavaScript
-- **توفير** نص بديل وصفي لإمكانية الوصول لقارئات الشاشة
+**العناصر الرئيسية المفسرة:**
+- **استخدام** `class="plant-holder"` لتنسيق الحاوية بشكل متسق عبر جميع النباتات
+- **تطبيق** `class="plant"` لتنسيق الصورة المشتركة والسلوك
+- **تضمين** `id="plant1"` الفريد لوضع فردي وتفاعل JavaScript
+- **توفير** نص بديل وصفي لإمكانية الوصول لقراء الشاشة
الآن أضف هذه الأنماط إلى ملف `style.css` الخاص بك:
@@ -275,14 +368,14 @@ h1 {
```
**تفصيل هذه الأنماط:**
-- **إنشاء** وضع نسبي لحامل النبات لإنشاء سياق وضع
-- **تعيين** كل حامل نبات إلى ارتفاع 13%، مما يضمن أن جميع النباتات تناسب عموديًا دون التمرير
-- **تحريك** الحوامل قليلاً إلى اليسار لتوسيط النباتات بشكل أفضل داخل الحاويات
+- **إنشاء** وضع نسبي لحامل النبات لتأسيس سياق الوضع
+- **تعيين** كل حامل نبات إلى ارتفاع 13%، مما يضمن أن جميع النباتات تتناسب عموديًا دون التمرير
+- **تحريك** الحوامل قليلاً إلى اليسار لتوسيط النباتات بشكل أفضل داخل حاوياتها
- **السماح** للنباتات بالتوسع بشكل استجابة باستخدام خصائص `max-width` و`max-height`
- **استخدام** `z-index` لتكديس النباتات فوق العناصر الأخرى في التيراريوم
-- **إضافة** تأثير تحويم خفيف مع انتقالات CSS لتحسين تفاعل المستخدم
+- **إضافة** تأثير تحويم خفيف مع انتقالات CSS لتحسين التفاعل مع المستخدم
-✅ **التفكير النقدي**: لماذا نحتاج إلى كل من محددات `.plant-holder` و`.plant`؟ ماذا سيحدث إذا حاولنا استخدام واحد فقط؟
+✅ **التفكير النقدي**: لماذا نحتاج إلى كل من `.plant-holder` و`.plant`؟ ماذا سيحدث إذا حاولنا استخدام واحد فقط؟
> 💡 **نمط التصميم**: الحاوية (`.plant-holder`) تتحكم في التخطيط والوضع، بينما المحتوى (`.plant`) يتحكم في المظهر والتوسع. هذا الفصل يجعل الكود أكثر قابلية للصيانة والمرونة.
@@ -290,14 +383,115 @@ h1 {
وضع CSS يشبه أن تكون مخرج المسرح - توجه مكان وقوف كل ممثل وكيف يتحركون على المسرح. بعض الممثلين يتبعون التشكيل القياسي، بينما يحتاج الآخرون إلى وضع محدد لتأثير درامي.
-بمجرد فهم الوضع، تصبح العديد من تحديات التخطيط قابلة للإدارة. هل تحتاج إلى شريط تنقل يبقى في الأعلى أثناء التمرير؟ الوضع يتعامل مع ذلك. هل تريد نافذة منبثقة تظهر في موقع محدد؟ هذا أيضًا من خلال الوضع.
+بمجرد فهم الوضع، تصبح العديد من تحديات التخطيط قابلة للإدارة. هل تحتاج إلى شريط تنقل يبقى في الأعلى أثناء التمرير؟ الوضع يتعامل مع ذلك. هل تريد نافذة منبثقة تظهر في موقع معين؟ هذا أيضًا من خلال الوضع.
### القيم الخمس للوضع
+```mermaid
+quadrantChart
+ title CSS Positioning Strategy
+ x-axis Document Flow --> Removed from Flow
+ y-axis Static Position --> Precise Control
+ quadrant-1 Absolute
+ quadrant-2 Fixed
+ quadrant-3 Static
+ quadrant-4 Sticky
+
+ Static: [0.2, 0.2]
+ Relative: [0.3, 0.6]
+ Absolute: [0.8, 0.8]
+ Fixed: [0.9, 0.7]
+ Sticky: [0.5, 0.9]
+```
+
| قيمة الوضع | السلوك | حالة الاستخدام |
|------------|--------|----------------|
-| `static` | التدفق الافتر
-لنقم ببناء جرة التيراريوم خطوة بخطوة. كل جزء يستخدم التمركز المطلق وأبعاد تعتمد على النسب المئوية لتصميم متجاوب:
+| `static` | التدفق الافتراضي، يتجاهل القيم العلوية/اليسرى/اليمنى/السفلية | تخطيط المستند العادي |
+| `relative` | يتم وضعه بالنسبة إلى موضعه الطبيعي | تعديلات صغيرة، إنشاء سياق الوضع |
+| `absolute` | يتم وضعه بالنسبة إلى أقرب عنصر ذو وضع محدد | وضع دقيق، تراكبات |
+| `fixed` | يتم وضعه بالنسبة إلى نافذة العرض | أشرطة التنقل، العناصر العائمة |
+| `sticky` | يتحول بين الوضع النسبي والثابت بناءً على التمرير | رؤوس تلتصق أثناء التمرير |
+
+### الوضع في التيراريوم الخاص بنا
+
+يستخدم التيراريوم الخاص بنا مزيجًا استراتيجيًا من أنواع الوضع لإنشاء التخطيط المطلوب:
+
+```css
+/* Container positioning */
+.container {
+ position: absolute; /* Removes from normal flow */
+ /* ... other styles ... */
+}
+
+/* Plant holder positioning */
+.plant-holder {
+ position: relative; /* Creates positioning context */
+ /* ... other styles ... */
+}
+
+/* Plant positioning */
+.plant {
+ position: absolute; /* Allows precise placement within holder */
+ /* ... other styles ... */
+}
+```
+
+**فهم استراتيجية الوضع:**
+- **الحاويات المطلقة** يتم إزالتها من تدفق المستند العادي وتثبيتها على حواف الشاشة
+- **حاملات النباتات النسبية** تنشئ سياق وضع بينما تبقى في تدفق المستند
+- **النباتات المطلقة** يمكن وضعها بدقة داخل حاوياتها النسبية
+- **هذا المزيج** يسمح للنباتات بالتكدس عموديًا بينما تكون قابلة للوضع الفردي
+
+> 🎯 **لماذا هذا مهم**: عناصر `plant` تحتاج إلى وضع مطلق لتصبح قابلة للسحب في الدرس التالي. الوضع المطلق يزيلها من تدفق التخطيط العادي، مما يجعل تفاعلات السحب والإفلات ممكنة.
+
+✅ **وقت التجربة**: حاول تغيير قيم الوضع ولاحظ النتائج:
+- ماذا يحدث إذا قمت بتغيير `.container` من `absolute` إلى `relative`؟
+- كيف يتغير التخطيط إذا استخدمت `.plant-holder` خاصية `absolute` بدلاً من `relative`؟
+- ماذا يحدث عند تغيير وضعية `.plant` إلى `relative`؟
+
+### 🔄 **مراجعة تعليمية**
+**إتقان تحديد المواقع باستخدام CSS**: توقف للتحقق من فهمك:
+- ✅ هل يمكنك شرح سبب حاجة النباتات إلى وضعية مطلقة للسحب والإفلات؟
+- ✅ هل تفهم كيف تخلق الحاويات النسبية سياقًا لتحديد المواقع؟
+- ✅ لماذا تستخدم الحاويات الجانبية وضعية مطلقة؟
+- ✅ ماذا سيحدث إذا أزلت التصريحات الخاصة بالوضعية تمامًا؟
+
+**صلة بالعالم الحقيقي**: فكر في كيفية تشابه تحديد المواقع باستخدام CSS مع التخطيط في العالم الحقيقي:
+- **Static**: الكتب على رف (ترتيب طبيعي)
+- **Relative**: تحريك كتاب قليلاً مع بقائه في مكانه
+- **Absolute**: وضع إشارة مرجعية على صفحة معينة
+- **Fixed**: ملاحظة لاصقة تبقى مرئية أثناء تقليب الصفحات
+
+## بناء التيراريوم باستخدام CSS
+
+الآن سنقوم ببناء جرة زجاجية باستخدام CSS فقط - دون الحاجة إلى صور أو برامج تصميم.
+
+إن إنشاء زجاج واقعي المظهر، الظلال، وتأثيرات العمق باستخدام تحديد المواقع والشفافية يظهر قدرات CSS البصرية. هذه التقنية تشبه كيف استخدم المعماريون في حركة باوهاوس أشكالًا هندسية بسيطة لإنشاء هياكل معقدة وجميلة. بمجرد فهم هذه المبادئ، ستتعرف على تقنيات CSS وراء العديد من تصميمات الويب.
+
+```mermaid
+flowchart LR
+ A[Jar Top] --> E[Complete Terrarium]
+ B[Jar Walls] --> E
+ C[Dirt Layer] --> E
+ D[Jar Bottom] --> E
+ F[Glass Effects] --> E
+
+ A1["50% width 5% height Top position"] --> A
+ B1["60% width 80% height Rounded corners 0.5 opacity"] --> B
+ C1["60% width 5% height Dark brown Bottom layer"] --> C
+ D1["50% width 1% height Bottom position"] --> D
+ F1["Subtle shadows Transparency Z-index layering"] --> F
+
+ style E fill:#d1e1df,stroke:#3a241d
+ style A fill:#e8f5e8
+ style B fill:#e8f5e8
+ style C fill:#8B4513
+ style D fill:#e8f5e8
+```
+
+### إنشاء مكونات الجرة الزجاجية
+
+لنقم ببناء جرة التيراريوم قطعةً قطعة. كل جزء يستخدم تحديد المواقع المطلق وأبعادًا تعتمد على النسب المئوية لتصميم متجاوب:
```css
.jar-walls {
@@ -350,15 +544,15 @@ h1 {
```
**فهم بناء التيراريوم:**
-- **يستخدم** أبعاد تعتمد على النسب المئوية لتناسب جميع أحجام الشاشات
-- **يضع** العناصر بشكل مطلق لتكديسها ومحاذاتها بدقة
-- **يطبق** قيم شفافية مختلفة لإظهار تأثير الزجاج
+- **يستخدم** أبعادًا تعتمد على النسب المئوية لتناسب جميع أحجام الشاشات
+- **يحدد** العناصر بشكل مطلق لتكديسها ومحاذاتها بدقة
+- **يطبق** قيم شفافية مختلفة لإنشاء تأثير شفافية الزجاج
- **ينفذ** طبقات `z-index` بحيث تظهر النباتات داخل الجرة
-- **يضيف** ظل خفيف وحواف منحنية للحصول على مظهر أكثر واقعية
+- **يضيف** ظلالًا خفيفة وزوايا دائرية محسنة لمظهر أكثر واقعية
### التصميم المتجاوب باستخدام النسب المئوية
-لاحظ كيف أن جميع الأبعاد تستخدم النسب المئوية بدلاً من القيم الثابتة بالبكسل:
+لاحظ كيف تستخدم جميع الأبعاد النسب المئوية بدلاً من القيم الثابتة بالبكسل:
**لماذا هذا مهم:**
- **يضمن** أن التيراريوم يتناسب بشكل متناسب مع أي حجم شاشة
@@ -368,39 +562,51 @@ h1 {
### وحدات CSS قيد التنفيذ
-نستخدم وحدات `rem` للحواف المنحنية، والتي تتناسب مع حجم الخط الأساسي. هذا يخلق تصاميم أكثر سهولة تحترم تفضيلات المستخدم للخطوط. تعرف على المزيد حول [وحدات CSS النسبية](https://www.w3.org/TR/css-values-3/#font-relative-lengths) في المواصفات الرسمية.
+نستخدم وحدات `rem` للزوايا الدائرية، والتي تتناسب مع حجم الخط الأساسي. هذا يخلق تصميمات أكثر سهولة تحترم تفضيلات المستخدم للخطوط. تعرف على المزيد حول [وحدات CSS النسبية](https://www.w3.org/TR/css-values-3/#font-relative-lengths) في المواصفات الرسمية.
-✅ **تجربة بصرية**: جرب تعديل هذه القيم ولاحظ التأثيرات:
+✅ **تجربة بصرية**: حاول تعديل هذه القيم وراقب التأثيرات:
- قم بتغيير شفافية الجرة من 0.5 إلى 0.8 – كيف يؤثر ذلك على مظهر الزجاج؟
-- عدّل لون التراب من `#3a241d` إلى `#8B4513` – ما التأثير البصري لهذا التغيير؟
-- قم بتغيير `z-index` للتراب إلى 2 – ماذا يحدث للطبقات؟
+- عدّل لون التراب من `#3a241d` إلى `#8B4513` – ما التأثير البصري لهذا؟
+- غيّر `z-index` للتراب إلى 2 – ماذا يحدث للطبقات؟
+
+### 🔄 **مراجعة تعليمية**
+**فهم التصميم البصري باستخدام CSS**: تأكد من استيعابك لتصميم CSS البصري:
+- ✅ كيف تخلق الأبعاد القائمة على النسب المئوية تصميمًا متجاوبًا؟
+- ✅ لماذا تخلق الشفافية تأثير شفافية الزجاج؟
+- ✅ ما دور `z-index` في ترتيب الطبقات؟
+- ✅ كيف تساهم قيم الزوايا الدائرية في تشكيل الجرة؟
+
+**مبدأ التصميم**: لاحظ كيف نبني تصاميم معقدة من أشكال بسيطة:
+1. **مستطيلات** → **مستطيلات دائرية** → **مكونات الجرة**
+2. **ألوان مسطحة** → **شفافية** → **تأثير الزجاج**
+3. **عناصر فردية** → **تركيب طبقي** → **مظهر ثلاثي الأبعاد**
---
-## تحدي GitHub Copilot Agent 🚀
+## تحدي وكيل GitHub Copilot 🚀
-استخدم وضع Agent لإكمال التحدي التالي:
+استخدم وضع الوكيل لإكمال التحدي التالي:
-**الوصف:** قم بإنشاء حركة CSS تجعل نباتات التيراريوم تتمايل بلطف ذهابًا وإيابًا، مما يحاكي تأثير النسيم الطبيعي. سيساعدك هذا على ممارسة الحركات، التحويلات، والإطارات الرئيسية في CSS مع تحسين الجاذبية البصرية للتيراريوم.
+**الوصف:** قم بإنشاء حركة CSS تجعل نباتات التيراريوم تتأرجح بلطف ذهابًا وإيابًا، مما يحاكي تأثير النسيم الطبيعي. سيساعدك هذا على ممارسة الحركات باستخدام CSS، التحويلات، والإطارات الرئيسية مع تحسين الجاذبية البصرية للتيراريوم.
-**المهمة:** أضف حركات إطارات رئيسية في CSS لجعل النباتات في التيراريوم تتمايل بلطف من جانب إلى آخر. قم بإنشاء حركة تمايل تدور كل نبات قليلاً (2-3 درجات) يمينًا ويسارًا لمدة 3-4 ثوانٍ، وطبقها على الفئة `.plant`. تأكد من أن الحركة تتكرر بلا نهاية وتستخدم وظيفة تخفيف للحركة الطبيعية.
+**المهمة:** أضف حركات CSS باستخدام الإطارات الرئيسية لجعل النباتات في التيراريوم تتأرجح بلطف من جانب إلى آخر. قم بإنشاء حركة تأرجح تدور كل نبات قليلاً (2-3 درجات) يمينًا ويسارًا لمدة 3-4 ثوانٍ، وطبقها على فئة `.plant`. تأكد من أن الحركة تتكرر بلا نهاية وتحتوي على وظيفة تخفيف للحركة الطبيعية.
-تعرف على المزيد حول [وضع Agent](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
+تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
## 🚀 تحدي: إضافة انعكاسات الزجاج
-هل أنت مستعد لتحسين التيراريوم بإضافة انعكاسات زجاجية واقعية؟ ستضيف هذه التقنية عمقًا وواقعية للتصميم.
+هل أنت مستعد لتعزيز التيراريوم بإضافة انعكاسات زجاجية واقعية؟ ستضيف هذه التقنية عمقًا وواقعية للتصميم.
-ستقوم بإنشاء لمسات خفيفة تحاكي كيفية انعكاس الضوء على الأسطح الزجاجية. هذه الطريقة مشابهة لتقنيات الرسامين في عصر النهضة مثل جان فان إيك الذين استخدموا الضوء والانعكاس لجعل الزجاج المرسوم يبدو ثلاثي الأبعاد. إليك ما تهدف إليه:
+ستقوم بإنشاء لمسات خفيفة تحاكي كيفية انعكاس الضوء على الأسطح الزجاجية. هذه الطريقة مشابهة لكيفية استخدام رسامي عصر النهضة مثل جان فان إيك الضوء والانعكاس لجعل الزجاج المرسوم يبدو ثلاثي الأبعاد. إليك ما تهدف إليه:

**تحديك:**
-- **إنشاء** أشكال بيضاوية بيضاء أو فاتحة اللون للانعكاسات الزجاجية
-- **وضعها** بشكل استراتيجي على الجانب الأيسر من الجرة
-- **تطبيق** تأثيرات شفافية وضبابية مناسبة لانعكاس الضوء الواقعي
-- **استخدام** `border-radius` لإنشاء أشكال عضوية تشبه الفقاعات
-- **التجربة** باستخدام التدرجات أو الظلال لتحسين الواقعية
+- **قم بإنشاء** أشكال بيضاوية بيضاء أو فاتحة اللون للانعكاسات الزجاجية
+- **ضعها** بشكل استراتيجي على الجانب الأيسر من الجرة
+- **طبق** تأثيرات شفافية وضبابية مناسبة لانعكاس الضوء الواقعي
+- **استخدم** `border-radius` لإنشاء أشكال عضوية تشبه الفقاعات
+- **جرب** التدرجات أو الظلال لتحسين الواقعية
## اختبار ما بعد المحاضرة
@@ -418,20 +624,116 @@ h1 {
### موارد تعليمية تفاعلية
-مارس هذه المفاهيم مع هذه الألعاب العملية الممتعة:
+مارس هذه المفاهيم مع هذه الألعاب الممتعة والتفاعلية:
- 🐸 [Flexbox Froggy](https://flexboxfroggy.com/) - أتقن Flexbox من خلال تحديات ممتعة
- 🌱 [Grid Garden](https://codepip.com/games/grid-garden/) - تعلم CSS Grid عن طريق زراعة الجزر الافتراضي
- 🎯 [CSS Battle](https://cssbattle.dev/) - اختبر مهاراتك في CSS مع تحديات البرمجة
### تعلم إضافي
-للحصول على أساسيات CSS شاملة، أكمل هذا الوحدة التعليمية من Microsoft: [صمم تطبيق HTML الخاص بك باستخدام CSS](https://docs.microsoft.com/learn/modules/build-simple-website/4-css-basics/?WT.mc_id=academic-77807-sagibbon)
+للحصول على أساسيات CSS شاملة، أكمل هذا الوحدة التعليمية من Microsoft Learn: [قم بتنسيق تطبيق HTML الخاص بك باستخدام CSS](https://docs.microsoft.com/learn/modules/build-simple-website/4-css-basics/?WT.mc_id=academic-77807-sagibbon)
+
+### ⚡ **ما يمكنك فعله في الدقائق الخمس القادمة**
+- [ ] افتح أدوات المطور وافحص أنماط CSS على أي موقع باستخدام لوحة العناصر
+- [ ] أنشئ ملف CSS بسيط واربطه بصفحة HTML
+- [ ] حاول تغيير الألوان باستخدام طرق مختلفة: hex، RGB، وأسماء الألوان
+- [ ] مارس نموذج الصندوق بإضافة الحشو والهامش إلى div
+
+### 🎯 **ما يمكنك إنجازه خلال الساعة**
+- [ ] أكمل اختبار ما بعد الدرس وراجع أساسيات CSS
+- [ ] قم بتنسيق صفحة HTML الخاصة بك باستخدام الخطوط، الألوان، والمسافات
+- [ ] أنشئ تخطيطًا بسيطًا باستخدام flexbox أو grid
+- [ ] جرب انتقالات CSS للحصول على تأثيرات سلسة
+- [ ] مارس التصميم المتجاوب باستخدام استعلامات الوسائط
+
+### 📅 **مغامرتك الأسبوعية مع CSS**
+- [ ] أكمل مهمة تصميم التيراريوم بإبداع
+- [ ] أتقن CSS Grid من خلال إنشاء تخطيط معرض صور
+- [ ] تعلم حركات CSS لإضفاء الحياة على تصميماتك
+- [ ] استكشف معالجات CSS مثل Sass أو Less
+- [ ] ادرس مبادئ التصميم وطبقها على CSS الخاص بك
+- [ ] قم بتحليل وإعادة إنشاء تصميمات مثيرة للاهتمام تجدها عبر الإنترنت
+
+### 🌟 **إتقان التصميم خلال شهر**
+- [ ] قم ببناء نظام تصميم موقع ويب كامل متجاوب
+- [ ] تعلم CSS-in-JS أو أطر العمل مثل Tailwind
+- [ ] ساهم في مشاريع مفتوحة المصدر بتحسينات CSS
+- [ ] أتقن مفاهيم CSS المتقدمة مثل الخصائص المخصصة والاحتواء
+- [ ] أنشئ مكتبات مكونات قابلة لإعادة الاستخدام باستخدام CSS المعياري
+- [ ] قم بتوجيه الآخرين الذين يتعلمون CSS وشارك معرفتك في التصميم
+
+## 🎯 جدول زمني لإتقان CSS
+
+```mermaid
+timeline
+ title CSS Learning Progression
+
+ section Foundation (10 minutes)
+ File Connection: Link CSS to HTML
+ : Understand cascade rules
+ : Learn inheritance basics
+
+ section Selectors (15 minutes)
+ Targeting Elements: Element selectors
+ : Class patterns
+ : ID specificity
+ : Combinators
+
+ section Box Model (20 minutes)
+ Layout Fundamentals: Margin and padding
+ : Border properties
+ : Content sizing
+ : Box-sizing behavior
+
+ section Positioning (25 minutes)
+ Element Placement: Static vs relative
+ : Absolute positioning
+ : Z-index layering
+ : Responsive units
+
+ section Visual Design (30 minutes)
+ Styling Mastery: Colors and opacity
+ : Shadows and effects
+ : Transitions
+ : Transform properties
+
+ section Responsive Design (45 minutes)
+ Multi-Device Support: Media queries
+ : Flexible layouts
+ : Mobile-first approach
+ : Viewport optimization
+
+ section Advanced Techniques (1 week)
+ Modern CSS: Flexbox layouts
+ : CSS Grid systems
+ : Custom properties
+ : Animation keyframes
+
+ section Professional Skills (1 month)
+ CSS Architecture: Component patterns
+ : Maintainable code
+ : Performance optimization
+ : Cross-browser compatibility
+```
+
+### 🛠️ ملخص أدوات CSS الخاصة بك
+
+بعد إكمال هذا الدرس، لديك الآن:
+- **فهم التدرج**: كيف ترث الأنماط وتتجاوز بعضها البعض
+- **إتقان التحديد**: استهداف دقيق باستخدام العناصر، الفئات، والمعرفات
+- **مهارات تحديد المواقع**: وضع العناصر بشكل استراتيجي وترتيبها
+- **تصميم بصري**: إنشاء تأثيرات الزجاج، الظلال، والشفافية
+- **تقنيات متجاوبة**: تخطيطات تعتمد على النسب المئوية تتكيف مع أي شاشة
+- **تنظيم الكود**: هيكل CSS نظيف وقابل للصيانة
+- **ممارسات حديثة**: استخدام الوحدات النسبية وأنماط التصميم السهلة الوصول
+
+**الخطوات التالية**: أصبح التيراريوم الخاص بك الآن يحتوي على الهيكل (HTML) والأسلوب (CSS). الدرس الأخير سيضيف التفاعل باستخدام JavaScript!
-## الواجب
+## المهمة
[إعادة هيكلة CSS](assignment.md)
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/3-terrarium/3-intro-to-DOM-and-closures/README.md b/translations/ar/3-terrarium/3-intro-to-DOM-and-closures/README.md
index 5c53c16865..27a4c298e4 100644
--- a/translations/ar/3-terrarium/3-intro-to-DOM-and-closures/README.md
+++ b/translations/ar/3-terrarium/3-intro-to-DOM-and-closures/README.md
@@ -1,22 +1,69 @@
# مشروع التيراريوم الجزء الثالث: التلاعب بـ DOM والإغلاق في JavaScript
+```mermaid
+journey
+ title Your JavaScript DOM Journey
+ section Foundation
+ Understand DOM: 3: Student
+ Learn closures: 4: Student
+ Connect elements: 4: Student
+ section Interaction
+ Setup drag events: 4: Student
+ Track coordinates: 5: Student
+ Handle movement: 5: Student
+ section Polish
+ Add cleanup: 4: Student
+ Test functionality: 5: Student
+ Complete terrarium: 5: Student
+```
+

> رسم توضيحي بواسطة [Tomomi Imura](https://twitter.com/girlie_mac)
-مرحبًا بك في أحد أكثر جوانب تطوير الويب إثارة - جعل الأشياء تفاعلية! نموذج كائن المستند (DOM) هو بمثابة جسر بين HTML وJavaScript، واليوم سنستخدمه لإحياء التيراريوم الخاص بك. عندما أنشأ Tim Berners-Lee أول متصفح ويب، كان يتصور شبكة يمكن أن تكون ديناميكية وتفاعلية - وDOM يجعل هذا التصور ممكنًا.
+مرحبًا بكم في أحد أكثر جوانب تطوير الويب إثارة - جعل الأشياء تفاعلية! نموذج كائن المستند (DOM) هو بمثابة جسر بين HTML و JavaScript، واليوم سنستخدمه لإضفاء الحياة على التيراريوم الخاص بك. عندما أنشأ Tim Berners-Lee أول متصفح ويب، كان يتصور شبكة يمكن أن تكون ديناميكية وتفاعلية - و DOM يجعل هذا التصور ممكنًا.
سنستكشف أيضًا الإغلاق في JavaScript، والذي قد يبدو مخيفًا في البداية. فكر في الإغلاق كإنشاء "جيوب ذاكرة" حيث يمكن لوظائفك تذكر معلومات مهمة. إنه مثل كل نبات في التيراريوم الخاص بك لديه سجل بيانات خاص به لتتبع موقعه. بنهاية هذا الدرس، ستفهم مدى طبيعتها وفائدتها.
-إليك ما سنبنيه: تيراريوم يمكن للمستخدمين فيه سحب وإفلات النباتات في أي مكان يريدونه. ستتعلم تقنيات التلاعب بـ DOM التي تدعم كل شيء بدءًا من تحميل الملفات بالسحب والإفلات إلى الألعاب التفاعلية. دعنا نجعل التيراريوم الخاص بك ينبض بالحياة.
+إليك ما سنبنيه: تيراريوم يمكن للمستخدمين فيه سحب وإفلات النباتات في أي مكان يريدونه. ستتعلم تقنيات التلاعب بـ DOM التي تشغل كل شيء بدءًا من تحميل الملفات بالسحب والإفلات إلى الألعاب التفاعلية. دعونا نجعل التيراريوم الخاص بك ينبض بالحياة.
+
+```mermaid
+mindmap
+ root((DOM & JavaScript))
+ DOM Tree
+ Element Selection
+ Property Access
+ Event Handling
+ Dynamic Updates
+ Events
+ Pointer Events
+ Mouse Events
+ Touch Events
+ Event Listeners
+ Closures
+ Private Variables
+ Function Scope
+ Memory Persistence
+ State Management
+ Drag & Drop
+ Position Tracking
+ Coordinate Math
+ Event Lifecycle
+ User Interaction
+ Modern Patterns
+ Event Delegation
+ Performance
+ Cross-Device
+ Accessibility
+```
## اختبار ما قبل المحاضرة
@@ -26,13 +73,43 @@ CO_OP_TRANSLATOR_METADATA:
نموذج كائن المستند (DOM) هو الطريقة التي يتواصل بها JavaScript مع عناصر HTML الخاصة بك. عندما يقوم متصفحك بتحميل صفحة HTML، فإنه ينشئ تمثيلًا منظمًا لتلك الصفحة في الذاكرة - هذا هو DOM. فكر فيه كشجرة عائلية حيث كل عنصر HTML هو عضو في العائلة يمكن لـ JavaScript الوصول إليه أو تعديله أو إعادة ترتيبه.
-التلاعب بـ DOM يحول الصفحات الثابتة إلى مواقع ويب تفاعلية. في كل مرة ترى فيها زرًا يغير لونه عند التمرير، أو تحديث المحتوى دون إعادة تحميل الصفحة، أو عناصر يمكنك سحبها، فهذا هو عمل DOM.
+التلاعب بـ DOM يحول الصفحات الثابتة إلى مواقع ويب تفاعلية. في كل مرة ترى فيها زرًا يغير لونه عند التمرير، أو تحديث المحتوى دون إعادة تحميل الصفحة، أو عناصر يمكنك سحبها، فهذا هو عمل التلاعب بـ DOM.
+
+```mermaid
+flowchart TD
+ A["Document"] --> B["HTML"]
+ B --> C["Head"]
+ B --> D["Body"]
+ C --> E["Title"]
+ C --> F["Meta Tags"]
+ D --> G["H1: My Terrarium"]
+ D --> H["Div: Page Container"]
+ H --> I["Div: Left Container"]
+ H --> J["Div: Right Container"]
+ H --> K["Div: Terrarium"]
+ I --> L["Plant Elements 1-7"]
+ J --> M["Plant Elements 8-14"]
+
+ L --> N["img#plant1"]
+ L --> O["img#plant2"]
+ M --> P["img#plant8"]
+ M --> Q["img#plant9"]
+
+ style A fill:#e1f5fe
+ style B fill:#f3e5f5
+ style D fill:#e8f5e8
+ style H fill:#fff3e0
+ style N fill:#ffebee
+ style O fill:#ffebee
+ style P fill:#ffebee
+ style Q fill:#ffebee
+```

> تمثيل لـ DOM وعلامات HTML التي تشير إليه. من [Olfa Nasraoui](https://www.researchgate.net/publication/221417012_Profile-Based_Focused_Crawler_for_Social_Media-Sharing_Websites)
-**ما الذي يجعل DOM قويًا:**
+**ما يجعل DOM قويًا:**
- **يوفر** طريقة منظمة للوصول إلى أي عنصر في صفحتك
- **يمكن** من تحديث المحتوى الديناميكي دون إعادة تحميل الصفحة
- **يسمح** بالاستجابة الفورية لتفاعلات المستخدم مثل النقرات والسحب
@@ -40,11 +117,38 @@ CO_OP_TRANSLATOR_METADATA:
## الإغلاق في JavaScript: إنشاء كود منظم وقوي
-الإغلاق في [JavaScript](https://developer.mozilla.org/docs/Web/JavaScript/Closures) يشبه إعطاء وظيفة مساحة عمل خاصة بها مع ذاكرة مستمرة. فكر في كيفية تطوير طيور داروين في جزر غالاباغوس مناقير متخصصة بناءً على بيئتها المحددة - يعمل الإغلاق بطريقة مشابهة، حيث ينشئ وظائف متخصصة "تتذكر" سياقها المحدد حتى بعد انتهاء وظيفة الوالد.
+[الإغلاق في JavaScript](https://developer.mozilla.org/docs/Web/JavaScript/Closures) يشبه إعطاء وظيفة مساحة عمل خاصة بها مع ذاكرة مستمرة. فكر في كيفية تطوير طيور داروين في جزر غالاباغوس مناقير متخصصة بناءً على بيئتها المحددة - يعمل الإغلاق بطريقة مشابهة، حيث ينشئ وظائف متخصصة "تتذكر" سياقها المحدد حتى بعد انتهاء وظيفة الوالد.
في التيراريوم الخاص بنا، يساعد الإغلاق كل نبات على تذكر موقعه الخاص بشكل مستقل. يظهر هذا النمط في جميع أنحاء تطوير JavaScript الاحترافي، مما يجعله مفهومًا قيمًا لفهمه.
-> 💡 **فهم الإغلاق**: الإغلاق موضوع مهم في JavaScript، ويستخدمه العديد من المطورين لسنوات قبل أن يفهموا جميع الجوانب النظرية بالكامل. اليوم، نركز على التطبيق العملي - سترى الإغلاق يظهر بشكل طبيعي أثناء بناء ميزاتنا التفاعلية. الفهم سيتطور عندما ترى كيف يحل المشاكل الحقيقية.
+```mermaid
+flowchart LR
+ A["dragElement(plant1)"] --> B["Creates Closure"]
+ A2["dragElement(plant2)"] --> B2["Creates Closure"]
+
+ B --> C["Private Variables"]
+ B2 --> C2["Private Variables"]
+
+ C --> D["pos1, pos2, pos3, pos4"]
+ C --> E["pointerDrag function"]
+ C --> F["elementDrag function"]
+ C --> G["stopElementDrag function"]
+
+ C2 --> D2["pos1, pos2, pos3, pos4"]
+ C2 --> E2["pointerDrag function"]
+ C2 --> F2["elementDrag function"]
+ C2 --> G2["stopElementDrag function"]
+
+ H["Plant 1 remembers its position"] --> B
+ H2["Plant 2 remembers its position"] --> B2
+
+ style B fill:#e8f5e8
+ style B2 fill:#e8f5e8
+ style C fill:#fff3e0
+ style C2 fill:#fff3e0
+```
+
+> 💡 **فهم الإغلاق**: الإغلاق موضوع مهم في JavaScript، ويستخدمه العديد من المطورين لسنوات قبل أن يفهموا جميع الجوانب النظرية بالكامل. اليوم، نركز على التطبيق العملي - سترى الإغلاق يظهر بشكل طبيعي أثناء بناء ميزاتنا التفاعلية. الفهم سيتطور عندما ترى كيف يحل مشاكل حقيقية.

@@ -54,7 +158,7 @@ CO_OP_TRANSLATOR_METADATA:
## قبل أن نبدأ: الإعداد للنجاح
-ستحتاج إلى ملفات HTML وCSS الخاصة بك من دروس التيراريوم السابقة - نحن على وشك جعل هذا التصميم الثابت تفاعليًا. إذا كنت تنضم لأول مرة، فإن إكمال تلك الدروس أولاً سيوفر سياقًا مهمًا.
+ستحتاج إلى ملفات HTML و CSS الخاصة بك من دروس التيراريوم السابقة - نحن على وشك جعل هذا التصميم الثابت تفاعليًا. إذا كنت تنضم لأول مرة، فإن إكمال تلك الدروس أولاً سيوفر سياقًا مهمًا.
إليك ما سنبنيه:
- **سحب وإفلات سلس** لجميع نباتات التيراريوم
@@ -92,7 +196,7 @@ CO_OP_TRANSLATOR_METADATA:
قبل أن نتمكن من جعل العناصر قابلة للسحب، يحتاج JavaScript إلى تحديد موقعها في DOM. فكر في هذا كنظام فهرسة مكتبة - بمجرد أن تحصل على رقم الفهرس، يمكنك العثور على الكتاب الذي تحتاجه والوصول إلى جميع محتوياته.
-سنستخدم طريقة `document.getElementById()` لإجراء هذه الاتصالات. إنها مثل وجود نظام تصنيف دقيق - تقدم معرفًا، ويحدد بالضبط العنصر الذي تحتاجه في HTML الخاص بك.
+سنستخدم طريقة `document.getElementById()` لإجراء هذه الاتصالات. إنها مثل وجود نظام تصنيف دقيق - تقدم معرفًا، ويحدد بالضبط العنصر الذي تحتاجه في HTML.
### تمكين وظيفة السحب لجميع النباتات
@@ -116,22 +220,32 @@ dragElement(document.getElementById('plant13'));
dragElement(document.getElementById('plant14'));
```
-**ما الذي يحققه هذا الكود:**
+**ما يحققه هذا الكود:**
- **يحدد** كل عنصر نبات في DOM باستخدام معرفه الفريد
- **يسترجع** مرجع JavaScript لكل عنصر HTML
- **يمرر** كل عنصر إلى وظيفة `dragElement` (التي سننشئها لاحقًا)
- **يجهز** كل نبات للتفاعل بالسحب والإفلات
- **يربط** هيكل HTML الخاص بك بوظائف JavaScript
-> 🎯 **لماذا نستخدم المعرفات بدلاً من الفئات؟** توفر المعرفات معرفات فريدة لعناصر محددة، بينما تم تصميم الفئات CSS لتنسيق مجموعات من العناصر. عندما يحتاج JavaScript إلى التلاعب بعناصر فردية، توفر المعرفات الدقة والأداء الذي نحتاجه.
+> 🎯 **لماذا نستخدم المعرفات بدلاً من الفئات؟** توفر المعرفات معرفات فريدة لعناصر محددة، بينما تم تصميم الفئات CSS لتنسيق مجموعات من العناصر. عندما يحتاج JavaScript إلى التلاعب بالعناصر الفردية، توفر المعرفات الدقة والأداء الذي نحتاجه.
+
+> 💡 **نصيحة احترافية**: لاحظ كيف نقوم باستدعاء `dragElement()` لكل نبات بشكل فردي. يضمن هذا النهج أن يحصل كل نبات على سلوك سحب مستقل خاص به، وهو أمر ضروري لتفاعل المستخدم السلس.
+
+### 🔄 **توقف تربوي**
+**فهم اتصال DOM**: قبل الانتقال إلى وظيفة السحب، تحقق من أنك تستطيع:
+- ✅ شرح كيف يحدد `document.getElementById()` عناصر HTML
+- ✅ فهم لماذا نستخدم معرفات فريدة لكل نبات
+- ✅ وصف الغرض من خاصية `defer` في علامات السكربت
+- ✅ التعرف على كيفية اتصال JavaScript و HTML عبر DOM
-> 💡 **نصيحة احترافية**: لاحظ كيف نقوم باستدعاء `dragElement()` لكل نبات بشكل فردي. يضمن هذا النهج أن يحصل كل نبات على سلوك سحب مستقل، وهو أمر ضروري لتفاعل المستخدم السلس.
+**اختبار ذاتي سريع**: ماذا سيحدث إذا كان هناك عنصران لهما نفس المعرف؟ لماذا يعيد `getElementById()` عنصرًا واحدًا فقط؟
+*الإجابة: يجب أن تكون المعرفات فريدة؛ إذا تكررت، يتم إرجاع العنصر الأول فقط*
---
## بناء إغلاق وظيفة السحب
-الآن سننشئ قلب وظيفة السحب: إغلاق يدير سلوك السحب لكل نبات. يحتوي هذا الإغلاق على وظائف داخلية متعددة تعمل معًا لتتبع حركات الماوس وتحديث مواقع العناصر.
+الآن سننشئ قلب وظيفة السحب الخاصة بنا: إغلاق يدير سلوك السحب لكل نبات. يحتوي هذا الإغلاق على وظائف داخلية متعددة تعمل معًا لتتبع حركات الماوس وتحديث مواقع العناصر.
الإغلاق مثالي لهذه المهمة لأنه يسمح لنا بإنشاء متغيرات "خاصة" تستمر بين استدعاءات الوظائف، مما يمنح كل نبات نظام تتبع إحداثيات مستقل.
@@ -156,11 +270,11 @@ console.log(myCounter()); // 1
console.log(myCounter()); // 2
```
-**ما الذي يحدث في هذا النمط من الإغلاق:**
+**ما يحدث في هذا النمط من الإغلاق:**
- **ينشئ** متغير `count` خاصًا موجودًا فقط داخل هذا الإغلاق
- **يمكن للوظيفة الداخلية** الوصول إلى هذا المتغير الخارجي وتعديله (آلية الإغلاق)
- **عندما نعيد** الوظيفة الداخلية، فإنها تحافظ على اتصالها بالبيانات الخاصة
-- **حتى بعد** انتهاء `createCounter()`، يستمر `count` ويتذكر قيمته
+- **حتى بعد** انتهاء تنفيذ `createCounter()`، يستمر `count` ويتذكر قيمته
### لماذا الإغلاق مثالي لوظيفة السحب
@@ -170,13 +284,41 @@ console.log(myCounter()); // 2
- **يحافظ** على متغيرات الموقع الخاصة لكل نبات بشكل مستقل
- **يحفظ** بيانات الإحداثيات بين أحداث السحب
- **يمنع** تعارض المتغيرات بين العناصر القابلة للسحب المختلفة
-- **يخلق** هيكل كود نظيف ومنظم
+- **ينشئ** هيكل كود نظيف ومنظم
> 🎯 **هدف التعلم**: لا تحتاج إلى إتقان كل جانب من جوانب الإغلاق الآن. ركز على رؤية كيف تساعدنا في تنظيم الكود والحفاظ على الحالة لوظيفة السحب.
+```mermaid
+stateDiagram-v2
+ [*] --> Ready: Page loads
+ Ready --> DragStart: User presses down (pointerdown)
+ DragStart --> Dragging: Mouse/finger moves (pointermove)
+ Dragging --> Dragging: Continue moving
+ Dragging --> DragEnd: User releases (pointerup)
+ DragEnd --> Ready: Reset for next drag
+
+ state DragStart {
+ [*] --> CapturePosition
+ CapturePosition --> SetupListeners
+ SetupListeners --> [*]
+ }
+
+ state Dragging {
+ [*] --> CalculateMovement
+ CalculateMovement --> UpdatePosition
+ UpdatePosition --> [*]
+ }
+
+ state DragEnd {
+ [*] --> RemoveListeners
+ RemoveListeners --> CleanupState
+ CleanupState --> [*]
+ }
+```
+
### إنشاء وظيفة dragElement
-الآن دعونا نبني الوظيفة الرئيسية التي ستتعامل مع كل منطق السحب. أضف هذه الوظيفة أسفل تعريفات عناصر النبات:
+الآن دعونا نبني الوظيفة الرئيسية التي ستتعامل مع كل منطق السحب. أضف هذه الوظيفة أسفل تعريفات عناصر النبات الخاصة بك:
```javascript
function dragElement(terrariumElement) {
@@ -191,20 +333,182 @@ function dragElement(terrariumElement) {
}
```
-**فهم نظام تتبع المواقع:**
+**فهم نظام تتبع الموقع:**
- **`pos1` و `pos2`**: تخزن الفرق بين مواقع الماوس القديمة والجديدة
-- **`pos3` و `pos4`**: تتبع إحداثيات الما
-- **`pos3` و `pos4`**: تخزين موقع الماوس الحالي للحساب التالي
-- **`offsetTop` و `offsetLeft`**: الحصول على الموقع الحالي للعنصر على الصفحة
-- **منطق الطرح**: يحرك العنصر بنفس مقدار حركة الماوس
+- **`pos3` و `pos4`**: تتبع إحداثيات الماوس الحالية
+- **`terrariumElement`**: العنصر النباتي المحدد الذي نجعله قابلًا للسحب
+- **`onpointerdown`**: الحدث الذي يتم تشغيله عندما يبدأ المستخدم السحب
+
+**كيف يعمل نمط الإغلاق:**
+- **ينشئ** متغيرات موقع خاصة لكل عنصر نباتي
+- **يحافظ** على هذه المتغيرات طوال دورة حياة السحب
+- **يضمن** أن كل نبات يتتبع إحداثياته بشكل مستقل
+- **يوفر** واجهة نظيفة من خلال وظيفة `dragElement`
+
+### لماذا نستخدم أحداث المؤشر؟
+
+قد تتساءل لماذا نستخدم `onpointerdown` بدلاً من `onclick` الأكثر شيوعًا. إليك السبب:
+
+| نوع الحدث | الأفضل لـ | العائق |
+|-----------|-----------|--------|
+| `onclick` | نقرات الأزرار البسيطة | لا يمكنه التعامل مع السحب (فقط النقر والإفلات) |
+| `onpointerdown` | الماوس واللمس معًا | أحدث، لكنه مدعوم بشكل جيد هذه الأيام |
+| `onmousedown` | الماوس المكتبي فقط | يترك مستخدمي الهواتف المحمولة خارج الحساب |
+
+**لماذا أحداث المؤشر مثالية لما نبنيه:**
+- **تعمل بشكل رائع** سواء كان شخص يستخدم الماوس أو الإصبع أو حتى القلم
+- **تشعر بنفس الطريقة** على الكمبيوتر المحمول أو الجهاز اللوحي أو الهاتف
+- **تتعامل** مع حركة السحب الفعلية (ليس فقط النقر والانتهاء)
+- **تخلق** تجربة سلسة يتوقعها المستخدمون من تطبيقات الويب الحديثة
+
+> 💡 **التحديث للمستقبل**: أحداث المؤشر هي الطريقة الحديثة للتعامل مع تفاعلات المستخدم. بدلاً من كتابة كود منفصل للماوس واللمس، تحصل على كلاهما مجانًا. رائع، أليس كذلك؟
+
+### 🔄 **توقف تربوي**
+**فهم التعامل مع الأحداث**: توقف لتأكيد فهمك للأحداث:
+- ✅ لماذا نستخدم أحداث المؤشر بدلاً من أحداث الماوس؟
+- ✅ كيف تستمر متغيرات الإغلاق بين استدعاءات الوظائف؟
+- ✅ ما دور `preventDefault()` في السحب السلس؟
+- ✅ لماذا نربط المستمعين بالمستند بدلاً من العناصر الفردية؟
+
+**اتصال بالعالم الحقيقي**: فكر في واجهات السحب والإفلات التي تستخدمها يوميًا:
+- **تحميل الملفات**: سحب الملفات إلى نافذة المتصفح
+- **لوحات كانبان**: نقل المهام بين الأعمدة
+- **معارض الصور**: إعادة ترتيب ترتيب الصور
+- **واجهات الهواتف المحمولة**: السحب والإفلات على الشاشات التي تعمل باللمس
+
+---
+
+## وظيفة pointerDrag: التقاط بداية السحب
+
+عندما يضغط المستخدم على نبات (سواء بنقرة الماوس أو لمسة الإصبع)، تبدأ وظيفة `pointerDrag` في العمل. تلتقط هذه الوظيفة الإحداثيات الأولية وتعد نظام السحب.
+
+أضف هذه الوظيفة داخل إغلاق `dragElement`، مباشرة بعد السطر `terrariumElement.onpointerdown = pointerDrag;`:
+
+```javascript
+function pointerDrag(e) {
+ // Prevent default browser behavior (like text selection)
+ e.preventDefault();
+
+ // Capture the initial mouse/touch position
+ pos3 = e.clientX; // X coordinate where drag started
+ pos4 = e.clientY; // Y coordinate where drag started
+
+ // Set up event listeners for the dragging process
+ document.onpointermove = elementDrag;
+ document.onpointerup = stopElementDrag;
+}
+```
+
+**خطوة بخطوة، إليك ما يحدث:**
+- **يمنع** سلوكيات المتصفح الافتراضية التي قد تتداخل مع السحب
+- **يسجل** الإحداثيات الدقيقة حيث بدأ المستخدم إيماءة السحب
+- **يؤسس** مستمعي الأحداث لحركة السحب المستمرة
+- **يجهز** النظام لتتبع حركة الماوس/الإصبع عبر المستند بأكمله
+
+### فهم منع الأحداث
+
+السطر `e.preventDefault()` ضروري للسحب السلس:
+
+**بدون المنع، قد تقوم المتصفحات بـ:**
+- **تحديد** النص عند السحب عبر الصفحة
+- **تشغيل** قوائم السياق عند السحب بالنقر الأيمن
+- **التداخل** مع سلوك السحب المخصص الخاص بنا
+- **إنشاء** آثار بصرية أثناء عملية السحب
+
+> 🔍 **تجربة**: بعد إكمال هذا الدرس، حاول إزالة `e.preventDefault()` وشاهد كيف يؤثر ذلك على تجربة السحب. ستفهم بسرعة لماذا هذا السطر ضروري!
+
+### نظام تتبع الإحداثيات
+
+تعطينا خصائص `e.clientX` و `e.clientY` إحداثيات الماوس/اللمس الدقيقة:
-**تفصيل حساب الحركة:**
-1. **قياس** الفرق بين مواقع الماوس القديمة والجديدة
-2. **حساب** مقدار حركة العنصر بناءً على حركة الماوس
-3. **تحديث** خصائص موقع CSS للعنصر في الوقت الفعلي
-4. **تخزين** الموقع الجديد كقاعدة للحساب التالي
+| الخاصية | ما تقيسه | حالة الاستخدام |
+|---------|----------|----------------|
+| `clientX` | الموقع الأفقي بالنسبة إلى نافذة العرض | تتبع الحركة يمينًا ويسارًا |
+| `clientY` | الموقع العمودي بالنسبة إلى نافذة العرض | تتبع الحركة لأعلى وأسفل |
+**فهم هذه الإحداثيات:**
+- **توفر** معلومات دقيقة عن موضع البكسل
+- **تتحدث** في الوقت الفعلي مع تحرك المؤشر
+- **تظل** متسقة عبر أحجام الشاشات ومستويات التكبير المختلفة
+- **تمكن** من تفاعلات السحب السلسة والاستجابة
-### تمثيل مرئي للرياضيات
+### إعداد مستمعي الأحداث على مستوى المستند
+
+لاحظ كيف نقوم بإرفاق أحداث الحركة والتوقف بكامل `document`، وليس فقط بعنصر النبات:
+
+```javascript
+document.onpointermove = elementDrag;
+document.onpointerup = stopElementDrag;
+```
+
+**لماذا نرفقها بالمستند:**
+- **تستمر** في التتبع حتى عندما يغادر الماوس عنصر النبات
+- **تمنع** انقطاع السحب إذا تحرك المستخدم بسرعة
+- **توفر** سحبًا سلسًا عبر الشاشة بأكملها
+- **تتعامل** مع الحالات الخاصة عندما يتحرك المؤشر خارج نافذة المتصفح
+
+> ⚡ **ملاحظة أداء**: سنقوم بتنظيف مستمعي الأحداث على مستوى المستند عند توقف السحب لتجنب تسرب الذاكرة ومشاكل الأداء.
+
+## إكمال نظام السحب: الحركة والتنظيف
+
+الآن سنضيف الوظيفتين المتبقيتين اللتين تتعاملان مع حركة السحب الفعلية وتنظيف الأحداث عند توقف السحب. تعمل هذه الوظائف معًا لإنشاء حركة نبات سلسة واستجابة عبر التيراريوم الخاص بك.
+
+### وظيفة elementDrag: تتبع الحركة
+
+أضف وظيفة `elementDrag` بعد القوس المغلق لـ `pointerDrag`:
+
+```javascript
+function elementDrag(e) {
+ // Calculate the distance moved since the last event
+ pos1 = pos3 - e.clientX; // Horizontal distance moved
+ pos2 = pos4 - e.clientY; // Vertical distance moved
+
+ // Update the current position tracking
+ pos3 = e.clientX; // New current X position
+ pos4 = e.clientY; // New current Y position
+
+ // Apply the movement to the element's position
+ terrariumElement.style.top = (terrariumElement.offsetTop - pos2) + 'px';
+ terrariumElement.style.left = (terrariumElement.offsetLeft - pos1) + 'px';
+}
+```
+
+**فهم رياضيات الإحداثيات:**
+- **`pos1` و `pos2`**: تحسب المسافة التي تحركها الماوس منذ التحديث الأخير
+- **`pos3` و `pos4`**: تخزن موضع الماوس الحالي للحساب التالي
+- **`offsetTop` و `offsetLeft`**: تحصل على موضع العنصر الحالي على الصفحة
+- **منطق الطرح**: يحرك العنصر بنفس مقدار حركة الماوس
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Mouse
+ participant JavaScript
+ participant Plant
+
+ User->>Mouse: Start drag at (100, 50)
+ Mouse->>JavaScript: pointerdown event
+ JavaScript->>JavaScript: Store initial position (pos3=100, pos4=50)
+ JavaScript->>JavaScript: Setup move/up listeners
+
+ User->>Mouse: Move to (110, 60)
+ Mouse->>JavaScript: pointermove event
+ JavaScript->>JavaScript: Calculate: pos1=10, pos2=10
+ JavaScript->>Plant: Update: left += 10px, top += 10px
+ Plant->>Plant: Render at new position
+
+ User->>Mouse: Release at (120, 65)
+ Mouse->>JavaScript: pointerup event
+ JavaScript->>JavaScript: Remove listeners
+ JavaScript->>JavaScript: Reset for next drag
+```
+
+**تفصيل حساب الحركة:**
+1. **يقيس** الفرق بين مواضع الماوس القديمة والجديدة
+2. **يحسب** مقدار حركة العنصر بناءً على حركة الماوس
+3. **يحدث** خصائص موضع CSS للعنصر في الوقت الفعلي
+4. **يخزن** الموضع الجديد كمرجع للحساب التالي
+
+### التمثيل البصري للرياضيات
```mermaid
sequenceDiagram
@@ -217,10 +521,10 @@ sequenceDiagram
JavaScript->>Plant: Update position by +10px right, +10px down
Plant->>Plant: Render at new position
```
-
-### وظيفة stopElementDrag: التنظيف
-أضف وظيفة التنظيف بعد القوس المغلق لـ `elementDrag`:
+### وظيفة stopElementDrag: التنظيف
+
+أضف وظيفة التنظيف بعد القوس المغلق لـ `elementDrag`:
```javascript
function stopElementDrag() {
@@ -229,136 +533,245 @@ function stopElementDrag() {
document.onpointermove = null;
}
```
-
-**لماذا التنظيف ضروري:**
-- **يمنع** تسرب الذاكرة الناتج عن مستمعي الأحداث المتبقين
-- **يوقف** سلوك السحب عند إفلات المستخدم للنبات
-- **يسمح** بسحب عناصر أخرى بشكل مستقل
-- **يعيد** النظام للعملية التالية للسحب
-**ما الذي يحدث بدون التنظيف:**
-- مستمعو الأحداث يستمرون في العمل حتى بعد توقف السحب
-- أداء النظام يتدهور مع تراكم المستمعين غير المستخدمين
-- سلوك غير متوقع عند التفاعل مع عناصر أخرى
-- موارد المتصفح تُهدر على معالجة أحداث غير ضرورية
+**لماذا التنظيف ضروري:**
+- **يمنع** تسرب الذاكرة الناتج عن مستمعي الأحداث المتبقين
+- **يوقف** سلوك السحب عند إفلات المستخدم للنبات
+- **يسمح** بسحب عناصر أخرى بشكل مستقل
+- **يعيد ضبط** النظام لعملية السحب التالية
+
+**ما الذي يحدث بدون التنظيف:**
+- تستمر مستمعات الأحداث في العمل حتى بعد توقف السحب
+- يتدهور الأداء مع تراكم المستمعين غير المستخدمين
+- سلوك غير متوقع عند التفاعل مع عناصر أخرى
+- يتم استهلاك موارد المتصفح في معالجة أحداث غير ضرورية
+
+### فهم خصائص موضع CSS
-### فهم خصائص موقع CSS
+نظام السحب الخاص بنا يتلاعب بخصائص CSS الرئيسية التالية:
-نظام السحب الخاص بنا يتعامل مع خاصيتين رئيسيتين في CSS:
+| الخاصية | ما تتحكم به | كيف نستخدمها |
+|---------|-------------|--------------|
+| `top` | المسافة من الحافة العلوية | تحديد الموضع العمودي أثناء السحب |
+| `left` | المسافة من الحافة اليسرى | تحديد الموضع الأفقي أثناء السحب |
-| الخاصية | ما تتحكم به | كيف نستخدمها |
-|---------|-------------|--------------|
-| `top` | المسافة من الحافة العلوية | تحديد الموقع العمودي أثناء السحب |
-| `left` | المسافة من الحافة اليسرى | تحديد الموقع الأفقي أثناء السحب |
+**أفكار رئيسية حول خصائص الإزاحة:**
+- **`offsetTop`**: المسافة الحالية من الحافة العلوية للعنصر الأب المحدد
+- **`offsetLeft`**: المسافة الحالية من الحافة اليسرى للعنصر الأب المحدد
+- **سياق التمركز**: هذه القيم نسبية إلى أقرب عنصر أب محدد
+- **تحديثات في الوقت الفعلي**: تتغير فورًا عند تعديل خصائص CSS
-**أهم النقاط حول خصائص الإزاحة:**
-- **`offsetTop`**: المسافة الحالية من الحافة العلوية للعنصر الأب المتموضع
-- **`offsetLeft`**: المسافة الحالية من الحافة اليسرى للعنصر الأب المتموضع
-- **سياق التمركز**: هذه القيم تكون نسبية بالنسبة لأقرب عنصر أب متموضع
-- **تحديثات في الوقت الفعلي**: تتغير فورًا عند تعديل خصائص CSS
+> 🎯 **فلسفة التصميم**: تم تصميم نظام السحب هذا ليكون مرنًا عن قصد – لا توجد "مناطق إسقاط" أو قيود. يمكن للمستخدمين وضع النباتات في أي مكان، مما يمنحهم تحكمًا إبداعيًا كاملاً في تصميم التيراريوم الخاص بهم.
-> 🎯 **فلسفة التصميم**: نظام السحب هذا مرن للغاية – لا توجد "مناطق إسقاط" أو قيود. يمكن للمستخدمين وضع النباتات في أي مكان، مما يمنحهم تحكمًا إبداعيًا كاملًا في تصميم التيراريوم الخاص بهم.
+## جمع كل شيء معًا: نظام السحب الكامل الخاص بك
-## جمع كل شيء معًا: نظام السحب الكامل الخاص بك
+تهانينا! لقد قمت ببناء نظام سحب وإفلات متطور باستخدام JavaScript الأساسي. يحتوي الآن دالة `dragElement` الكاملة الخاصة بك على إغلاق قوي يدير:
-تهانينا! لقد قمت ببناء نظام سحب وإفلات متطور باستخدام JavaScript الأساسي. وظيفة `dragElement` الكاملة لديك الآن تحتوي على إغلاق قوي يدير:
+**ما يحققه الإغلاق الخاص بك:**
+- **يحافظ** على متغيرات الموضع الخاصة لكل نبات بشكل مستقل
+- **يتعامل** مع دورة السحب الكاملة من البداية إلى النهاية
+- **يوفر** حركة سلسة واستجابة عبر الشاشة بأكملها
+- **ينظف** الموارد بشكل صحيح لمنع تسرب الذاكرة
+- **يخلق** واجهة إبداعية وبديهية لتصميم التيراريوم
-**ما يحققه الإغلاق الخاص بك:**
-- **يحافظ** على متغيرات الموقع الخاصة لكل نبات بشكل مستقل
-- **يتعامل** مع دورة السحب الكاملة من البداية إلى النهاية
-- **يوفر** حركة سلسة واستجابة عبر الشاشة بأكملها
-- **ينظف** الموارد بشكل صحيح لمنع تسرب الذاكرة
-- **يخلق** واجهة إبداعية وبديهية لتصميم التيراريوم
+### اختبار التيراريوم التفاعلي الخاص بك
-### اختبار التيراريوم التفاعلي الخاص بك
+الآن اختبر التيراريوم التفاعلي الخاص بك! افتح ملف `index.html` الخاص بك في متصفح الويب وجرب الوظائف:
-الآن قم باختبار التيراريوم التفاعلي الخاص بك! افتح ملف `index.html` في متصفح الويب وجرب الوظائف:
+1. **انقر واستمر بالضغط** على أي نبات لبدء السحب
+2. **حرك الماوس أو الإصبع** وشاهد النبات يتبع الحركة بسلاسة
+3. **أفلت** لإسقاط النبات في موضعه الجديد
+4. **جرب** ترتيبات مختلفة لاستكشاف الواجهة
-1. **انقر واستمر بالضغط** على أي نبات لبدء السحب
-2. **حرك الماوس أو الإصبع** وشاهد النبات يتبع الحركة بسلاسة
-3. **أفلت** لوضع النبات في موقعه الجديد
-4. **جرب** ترتيبات مختلفة لاستكشاف الواجهة
+🥇 **إنجاز**: لقد أنشأت تطبيق ويب تفاعلي بالكامل باستخدام مفاهيم أساسية يستخدمها المطورون المحترفون يوميًا. تعتمد وظيفة السحب والإفلات هذه على نفس المبادئ المستخدمة في تحميل الملفات، ولوحات كانبان، والعديد من الواجهات التفاعلية الأخرى.
-🥇 **إنجاز**: لقد أنشأت تطبيق ويب تفاعلي بالكامل باستخدام مفاهيم أساسية يستخدمها المطورون المحترفون يوميًا. وظيفة السحب والإفلات هذه تعتمد على نفس المبادئ المستخدمة في تحميل الملفات، لوحات كانبان، والعديد من الواجهات التفاعلية الأخرى.
+### 🔄 **تقييم تعليمي**
+**فهم النظام الكامل**: تحقق من إتقانك للنظام الكامل للسحب:
+- ✅ كيف تحافظ الإغلاقات على حالة مستقلة لكل نبات؟
+- ✅ لماذا تكون رياضيات حساب الإحداثيات ضرورية للحركة السلسة؟
+- ✅ ماذا سيحدث إذا نسينا تنظيف مستمعي الأحداث؟
+- ✅ كيف يمكن أن يتوسع هذا النمط ليشمل تفاعلات أكثر تعقيدًا؟
-
+**مراجعة جودة الكود**: راجع الحل الكامل الخاص بك:
+- **تصميم معياري**: يحصل كل نبات على مثيل إغلاق خاص به
+- **كفاءة الأحداث**: إعداد وتنظيف صحيح لمستمعي الأحداث
+- **دعم عبر الأجهزة**: يعمل على أجهزة الكمبيوتر المكتبية والجوال
+- **وعي بالأداء**: لا يوجد تسرب للذاكرة أو حسابات زائدة
+
+
---
-## تحدي GitHub Copilot Agent 🚀
+## تحدي GitHub Copilot Agent 🚀
+
+استخدم وضع الوكيل لإكمال التحدي التالي:
+
+**الوصف:** قم بتحسين مشروع التيراريوم عن طريق إضافة وظيفة إعادة تعيين تعيد جميع النباتات إلى مواقعها الأصلية مع رسوم متحركة سلسة.
-استخدم وضع Agent لإكمال التحدي التالي:
+**المهمة:** قم بإنشاء زر إعادة تعيين، عند النقر عليه، يعيد جميع النباتات إلى مواقعها الأصلية في الشريط الجانبي باستخدام انتقالات CSS سلسة. يجب أن تقوم الوظيفة بتخزين المواقع الأصلية عند تحميل الصفحة وتعيد النباتات بسلاسة إلى تلك المواقع خلال ثانية واحدة عند الضغط على زر إعادة التعيين.
-**الوصف:** تحسين مشروع التيراريوم بإضافة وظيفة إعادة تعيين تعيد جميع النباتات إلى مواقعها الأصلية مع تأثيرات حركة سلسة.
+تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
-**المهمة:** قم بإنشاء زر إعادة تعيين، عند النقر عليه، يعيد جميع النباتات إلى مواقعها الأصلية في الشريط الجانبي باستخدام انتقالات CSS. يجب أن تخزن الوظيفة المواقع الأصلية عند تحميل الصفحة وتعيد النباتات إلى تلك المواقع بسلاسة خلال ثانية واحدة عند الضغط على زر إعادة التعيين.
+## 🚀 تحدي إضافي: توسيع مهاراتك
-تعرف على المزيد حول [وضع Agent](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
+هل أنت مستعد لنقل التيراريوم الخاص بك إلى المستوى التالي؟ جرب تنفيذ هذه التحسينات:
-## 🚀 تحدي إضافي: توسيع مهاراتك
+**إضافات إبداعية:**
+- **انقر مرتين** على نبات لجعله يظهر في المقدمة (تلاعب بـ z-index)
+- **أضف تأثيرات بصرية** مثل توهج خفيف عند تمرير الماوس فوق النباتات
+- **تنفيذ حدود** لمنع النباتات من السحب خارج التيراريوم
+- **إنشاء وظيفة حفظ** تتذكر مواقع النباتات باستخدام localStorage
+- **إضافة تأثيرات صوتية** عند التقاط ووضع النباتات
-هل أنت مستعد لأخذ التيراريوم الخاص بك إلى المستوى التالي؟ جرب تنفيذ هذه التحسينات:
+> 💡 **فرصة للتعلم**: كل واحد من هذه التحديات سيعلمك جوانب جديدة من التلاعب بـ DOM، ومعالجة الأحداث، وتصميم تجربة المستخدم.
-**امتدادات إبداعية:**
-- **النقر المزدوج** على النبات لجعله في المقدمة (تلاعب بـ z-index)
-- **إضافة ردود فعل بصرية** مثل توهج خفيف عند تمرير المؤشر فوق النباتات
-- **تنفيذ حدود** لمنع النباتات من السحب خارج التيراريوم
-- **إنشاء وظيفة حفظ** تتذكر مواقع النباتات باستخدام localStorage
-- **إضافة مؤثرات صوتية** عند التقاط ووضع النباتات
+## اختبار ما بعد المحاضرة
-> 💡 **فرصة تعلم**: كل تحدٍ من هذه التحديات سيعلمك جوانب جديدة من التلاعب بـ DOM، التعامل مع الأحداث، وتصميم تجربة المستخدم.
+[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/20)
-## اختبار ما بعد المحاضرة
+## المراجعة والدراسة الذاتية: تعميق فهمك
-[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/20)
+لقد أتقنت أساسيات التلاعب بـ DOM والإغلاقات، ولكن هناك دائمًا المزيد لاستكشافه! إليك بعض المسارات لتوسيع معرفتك ومهاراتك.
-## المراجعة والدراسة الذاتية: تعميق فهمك
+### طرق بديلة للسحب والإفلات
-لقد أتقنت أساسيات التلاعب بـ DOM والإغلاق، ولكن هناك دائمًا المزيد لاستكشافه! إليك بعض المسارات لتوسيع معرفتك ومهاراتك.
+لقد استخدمنا أحداث المؤشر لتحقيق أقصى قدر من المرونة، ولكن تطوير الويب يقدم العديد من الأساليب:
-### طرق بديلة للسحب والإفلات
+| الطريقة | الأفضل لـ | قيمة التعلم |
+|---------|------------|-------------|
+| [واجهة برمجة تطبيقات السحب والإفلات HTML](https://developer.mozilla.org/docs/Web/API/HTML_Drag_and_Drop_API) | تحميل الملفات، مناطق السحب الرسمية | فهم قدرات المتصفح الأصلية |
+| [أحداث اللمس](https://developer.mozilla.org/docs/Web/API/Touch_events) | التفاعلات الخاصة بالجوال | أنماط تطوير تركز على الجوال |
+| خصائص CSS `transform` | الرسوم المتحركة السلسة | تقنيات تحسين الأداء |
-استخدمنا أحداث المؤشر لتحقيق أقصى قدر من المرونة، ولكن تطوير الويب يقدم طرقًا متعددة:
+### مواضيع متقدمة في التلاعب بـ DOM
-| الطريقة | الأفضل لـ | قيمة التعلم |
-|---------|------------|-------------|
-| [HTML Drag and Drop API](https://developer.mozilla.org/docs/Web/API/HTML_Drag_and_Drop_API) | تحميل الملفات، مناطق السحب الرسمية | فهم قدرات المتصفح الأصلية |
-| [Touch Events](https://developer.mozilla.org/docs/Web/API/Touch_events) | التفاعلات الخاصة بالجوال | أنماط تطوير الجوال أولاً |
-| خصائص CSS `transform` | الحركات السلسة | تقنيات تحسين الأداء |
+**الخطوات التالية في رحلتك التعليمية:**
+- **تفويض الأحداث**: التعامل مع الأحداث بكفاءة لعناصر متعددة
+- **مراقب التقاطع**: اكتشاف متى تدخل العناصر/تخرج من نافذة العرض
+- **مراقب التغيير**: مراقبة التغييرات في بنية DOM
+- **مكونات الويب**: إنشاء عناصر واجهة مستخدم قابلة لإعادة الاستخدام ومغلقة
+- **مفاهيم DOM الافتراضية**: فهم كيفية تحسين الأطر لتحديثات DOM
-### مواضيع متقدمة في التلاعب بـ DOM
+### موارد أساسية لمواصلة التعلم
-**الخطوات التالية في رحلة تعلمك:**
-- **تفويض الأحداث**: التعامل مع الأحداث بكفاءة لعناصر متعددة
-- **مراقب التقاطع**: اكتشاف دخول/خروج العناصر من نافذة العرض
-- **مراقب التغييرات**: مراقبة التغييرات في هيكل DOM
-- **مكونات الويب**: إنشاء عناصر واجهة مستخدم قابلة لإعادة الاستخدام ومغلقة
-- **مفاهيم DOM الافتراضي**: فهم كيفية تحسين الإطارات لتحديثات DOM
+**الوثائق التقنية:**
+- [دليل أحداث المؤشر من MDN](https://developer.mozilla.org/docs/Web/API/Pointer_events) - مرجع شامل لأحداث المؤشر
+- [مواصفات أحداث المؤشر من W3C](https://www.w3.org/TR/pointerevents1/) - وثائق المعايير الرسمية
+- [دليل متعمق حول إغلاقات JavaScript](https://developer.mozilla.org/docs/Web/JavaScript/Closures) - أنماط الإغلاق المتقدمة
-### موارد أساسية لمواصلة التعلم
+**توافق المتصفح:**
+- [CanIUse.com](https://caniuse.com/) - تحقق من دعم الميزات عبر المتصفحات
+- [بيانات توافق المتصفح من MDN](https://github.com/mdn/browser-compat-data) - معلومات تفصيلية عن التوافق
+
+**فرص الممارسة:**
+- **إنشاء** لعبة ألغاز باستخدام ميكانيكيات السحب المماثلة
+- **إنشاء** لوحة كانبان مع إدارة المهام بالسحب والإفلات
+- **تصميم** معرض صور مع ترتيبات صور قابلة للسحب
+- **التجربة** مع إيماءات اللمس لواجهات الجوال
+
+> 🎯 **استراتيجية التعلم**: أفضل طريقة لترسيخ هذه المفاهيم هي من خلال الممارسة. حاول بناء أشكال مختلفة من الواجهات القابلة للسحب – كل مشروع سيعلمك شيئًا جديدًا عن التفاعل مع المستخدم والتلاعب بـ DOM.
+
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] افتح أدوات المطور في المتصفح واكتب `document.querySelector('body')` في وحدة التحكم
+- [ ] جرب تغيير نص صفحة ويب باستخدام `innerHTML` أو `textContent`
+- [ ] أضف مستمع حدث النقر إلى أي زر أو رابط في صفحة ويب
+- [ ] استعرض بنية شجرة DOM باستخدام لوحة العناصر
+
+### 🎯 **ما يمكنك تحقيقه خلال هذه الساعة**
+- [ ] أكمل اختبار ما بعد الدرس وراجع مفاهيم التلاعب بـ DOM
+- [ ] أنشئ صفحة ويب تفاعلية تستجيب لنقرات المستخدم
+- [ ] تدرب على التعامل مع الأحداث بأنواع مختلفة من الأحداث (النقر، التمرير، الضغط على المفاتيح)
+- [ ] قم ببناء قائمة مهام بسيطة أو عداد باستخدام التلاعب بـ DOM
+- [ ] استكشف العلاقة بين عناصر HTML وكائنات JavaScript
+
+### 📅 **رحلة إتقان JavaScript الخاصة بك لمدة أسبوع**
+- [ ] أكمل مشروع التيراريوم التفاعلي مع وظيفة السحب والإفلات
+- [ ] أتقن تفويض الأحداث للتعامل مع الأحداث بكفاءة
+- [ ] تعرف على حلقة الأحداث وجافا سكريبت غير المتزامنة
+- [ ] تدرب على الإغلاقات من خلال بناء وحدات ذات حالة خاصة
+- [ ] استكشف واجهات برمجة التطبيقات الحديثة لـ DOM مثل مراقب التقاطع
+- [ ] قم ببناء مكونات تفاعلية بدون استخدام الأطر
+
+### 🌟 **إتقان JavaScript خلال شهر**
+- [ ] أنشئ تطبيقًا معقدًا بصفحة واحدة باستخدام JavaScript الأساسي
+- [ ] تعلم إطار عمل حديث (React، Vue، أو Angular) وقارنه بـ DOM الأساسي
+- [ ] ساهم في مشاريع JavaScript مفتوحة المصدر
+- [ ] أتقن المفاهيم المتقدمة مثل مكونات الويب والعناصر المخصصة
+- [ ] قم ببناء تطبيقات ويب عالية الأداء باستخدام أنماط DOM المثلى
+- [ ] علم الآخرين عن التلاعب بـ DOM وأساسيات JavaScript
+
+## 🎯 جدول زمني لإتقان JavaScript DOM
+
+```mermaid
+timeline
+ title DOM & JavaScript Learning Progression
+
+ section Foundation (15 minutes)
+ DOM Understanding: Element selection methods
+ : Tree structure navigation
+ : Property access patterns
+
+ section Event Handling (20 minutes)
+ User Interaction: Pointer event basics
+ : Event listener setup
+ : Cross-device compatibility
+ : Event prevention techniques
+
+ section Closures (25 minutes)
+ Scope Management: Private variable creation
+ : Function persistence
+ : State management patterns
+ : Memory efficiency
+
+ section Drag System (30 minutes)
+ Interactive Features: Coordinate tracking
+ : Position calculation
+ : Movement mathematics
+ : Cleanup procedures
+
+ section Advanced Patterns (45 minutes)
+ Professional Skills: Event delegation
+ : Performance optimization
+ : Error handling
+ : Accessibility considerations
+
+ section Framework Understanding (1 week)
+ Modern Development: Virtual DOM concepts
+ : State management libraries
+ : Component architectures
+ : Build tool integration
+
+ section Expert Level (1 month)
+ Advanced DOM APIs: Intersection Observer
+ : Mutation Observer
+ : Custom Elements
+ : Web Components
+```
-**الوثائق التقنية:**
-- [دليل MDN لأحداث المؤشر](https://developer.mozilla.org/docs/Web/API/Pointer_events) - مرجع شامل لأحداث المؤشر
-- [مواصفات W3C لأحداث المؤشر](https://www.w3.org/TR/pointerevents1/) - وثائق المعايير الرسمية
-- [الغوص العميق في إغلاقات JavaScript](https://developer.mozilla.org/docs/Web/JavaScript/Closures) - أنماط الإغلاق المتقدمة
+### 🛠️ ملخص أدوات JavaScript الخاصة بك
-**توافق المتصفح:**
-- [CanIUse.com](https://caniuse.com/) - تحقق من دعم الميزات عبر المتصفحات
-- [بيانات توافق المتصفح من MDN](https://github.com/mdn/browser-compat-data) - معلومات توافق مفصلة
+بعد إكمال هذا الدرس، لديك الآن:
+- **إتقان DOM**: اختيار العناصر، التلاعب بالخصائص، والتنقل في الشجرة
+- **خبرة في الأحداث**: التعامل مع التفاعلات عبر الأجهزة باستخدام أحداث المؤشر
+- **فهم الإغلاقات**: إدارة الحالة الخاصة واستمرارية الوظائف
+- **أنظمة تفاعلية**: تنفيذ كامل للسحب والإفلات من الصفر
+- **وعي بالأداء**: تنظيف الأحداث بشكل صحيح وإدارة الذاكرة
+- **أنماط حديثة**: تقنيات تنظيم الكود المستخدمة في التطوير المهني
+- **تجربة المستخدم**: إنشاء واجهات بديهية واستجابة
-**فرص الممارسة:**
-- **إنشاء** لعبة ألغاز باستخدام ميكانيكيات السحب المشابهة
-- **تصميم** لوحة كانبان مع إدارة المهام بالسحب والإفلات
-- **إنشاء** معرض صور مع ترتيبات الصور القابلة للسحب
-- **التجربة** مع إيماءات اللمس لواجهات الجوال
+**المهارات المهنية المكتسبة**: لقد قمت ببناء ميزات باستخدام نفس التقنيات مثل:
+- **لوحات Trello/كانبان**: سحب البطاقات بين الأعمدة
+- **أنظمة تحميل الملفات**: التعامل مع الملفات بالسحب والإفلات
+- **معارض الصور**: واجهات ترتيب الصور
+- **تطبيقات الجوال**: أنماط التفاعل القائمة على اللمس
-> 🎯 **استراتيجية التعلم**: أفضل طريقة لتثبيت هذه المفاهيم هي من خلال الممارسة. حاول بناء تنويعات من واجهات السحب – كل مشروع سيعلمك شيئًا جديدًا عن التفاعل مع المستخدم والتلاعب بـ DOM.
+**المستوى التالي**: أنت جاهز لاستكشاف الأطر الحديثة مثل React، Vue، أو Angular التي تعتمد على هذه المفاهيم الأساسية للتلاعب بـ DOM!
-## الواجب
+## الواجب
-[اعمل قليلاً مع DOM](assignment.md)
+[اعمل قليلاً مع DOM](assignment.md)
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/4-typing-game/README.md b/translations/ar/4-typing-game/README.md
index f46dae2ddc..39b75451a2 100644
--- a/translations/ar/4-typing-game/README.md
+++ b/translations/ar/4-typing-game/README.md
@@ -1,46 +1,293 @@
-# البرمجة القائمة على الأحداث - بناء لعبة كتابة
+# البرمجة القائمة على الأحداث - بناء لعبة الكتابة
+
+```mermaid
+journey
+ title Your Typing Game Development Journey
+ section Foundation
+ Plan game structure: 3: Student
+ Design user interface: 4: Student
+ Setup HTML elements: 4: Student
+ section Functionality
+ Handle user input: 4: Student
+ Track timing: 5: Student
+ Calculate accuracy: 5: Student
+ section Features
+ Add visual feedback: 5: Student
+ Implement game logic: 5: Student
+ Polish experience: 5: Student
+```
## المقدمة
-هناك شيء يعرفه كل مطور ولكنه نادراً ما يتحدث عنه: الكتابة بسرعة هي قوة خارقة! 🚀 فكر في الأمر - كلما كنت أسرع في نقل أفكارك من عقلك إلى محرر الأكواد، زادت قدرتك على الإبداع. إنه مثل وجود خط مباشر بين أفكارك والشاشة.
+هناك شيء يعرفه كل مطور ولكنه نادرًا ما يتحدث عنه: الكتابة بسرعة هي قوة خارقة! 🚀 فكر في الأمر - كلما كنت أسرع في نقل أفكارك من عقلك إلى محرر الكود، زادت قدرتك على الإبداع. إنه مثل وجود خط مباشر بين أفكارك والشاشة.
+
+```mermaid
+pie title Game Features
+ "Real-time Feedback" : 25
+ "Performance Tracking" : 20
+ "Interactive UI" : 20
+ "Timer System" : 15
+ "Quote Management" : 10
+ "Results Display" : 10
+```
+
+هل تريد معرفة واحدة من أفضل الطرق لتحسين هذه المهارة؟ لقد خمنت ذلك - سنقوم ببناء لعبة!
-هل تريد معرفة واحدة من أفضل الطرق لتحسين هذه المهارة؟ نعم، لقد خمنت - سنقوم ببناء لعبة!
+```mermaid
+flowchart LR
+ A[Player starts game] --> B[Random quote displayed]
+ B --> C[Player types characters]
+ C --> D{Character correct?}
+ D -->|Yes| E[Green highlight]
+ D -->|No| F[Red highlight]
+ E --> G[Update accuracy]
+ F --> G
+ G --> H{Quote complete?}
+ H -->|No| C
+ H -->|Yes| I[Calculate WPM]
+ I --> J[Display results]
+ J --> K[Play again?]
+ K -->|Yes| B
+ K -->|No| L[Game over]
+
+ style A fill:#e1f5fe
+ style D fill:#fff3e0
+ style E fill:#e8f5e8
+ style F fill:#ffebee
+ style I fill:#f3e5f5
+```
> لنقم معًا بإنشاء لعبة كتابة رائعة!
-هل أنت مستعد لتوظيف كل مهارات JavaScript وHTML وCSS التي تعلمتها؟ سنقوم ببناء لعبة كتابة ستتحداك بعبارات عشوائية من المحقق الأسطوري [شيرلوك هولمز](https://en.wikipedia.org/wiki/Sherlock_Holmes). ستقوم اللعبة بتتبع مدى سرعتك ودقتك في الكتابة - وصدقني، إنها أكثر إدمانًا مما قد تتوقع!
+هل أنت مستعد لتوظيف كل مهارات JavaScript وHTML وCSS التي تعلمتها؟ سنقوم ببناء لعبة كتابة ستتحداك بعبارات عشوائية من المحقق الأسطوري [شيرلوك هولمز](https://en.wikipedia.org/wiki/Sherlock_Holmes). ستقوم اللعبة بتتبع مدى سرعتك ودقتك في الكتابة - وصدقني، إنها أكثر إدمانًا مما قد تتصور!
+
+```mermaid
+mindmap
+ root((Typing Game Development))
+ User Interface
+ Input Elements
+ Visual Feedback
+ Responsive Design
+ Accessibility
+ Game Logic
+ Quote Selection
+ Timer Management
+ Accuracy Tracking
+ Score Calculation
+ Event Handling
+ Keyboard Input
+ Button Clicks
+ Real-time Updates
+ Game State Changes
+ Performance Metrics
+ Words Per Minute
+ Character Accuracy
+ Error Tracking
+ Progress Display
+ User Experience
+ Immediate Feedback
+ Clear Instructions
+ Engaging Content
+ Achievement System
+```

## ما الذي تحتاج إلى معرفته
+```mermaid
+flowchart TD
+ A[User Action] --> B{Event Type?}
+ B -->|Key Press| C[Keyboard Event]
+ B -->|Button Click| D[Mouse Event]
+ B -->|Timer| E[Time Event]
+
+ C --> F[Check Character]
+ D --> G[Start/Reset Game]
+ E --> H[Update Timer]
+
+ F --> I{Correct?}
+ I -->|Yes| J[Highlight Green]
+ I -->|No| K[Highlight Red]
+
+ J --> L[Update Score]
+ K --> L
+ L --> M[Check Game State]
+
+ G --> N[Generate New Quote]
+ H --> O[Display Time]
+
+ M --> P{Game Complete?}
+ P -->|Yes| Q[Show Results]
+ P -->|No| R[Continue Game]
+
+ style A fill:#e1f5fe
+ style F fill:#e8f5e8
+ style I fill:#fff3e0
+ style Q fill:#f3e5f5
+```
+
قبل أن نبدأ، تأكد من أنك مرتاح مع هذه المفاهيم (لا تقلق إذا كنت بحاجة إلى مراجعة سريعة - كلنا مررنا بذلك!):
- إنشاء إدخال نصي وأزرار التحكم
-- CSS وتحديد الأنماط باستخدام الفئات
+- CSS وتعيين الأنماط باستخدام الفئات
- أساسيات JavaScript
- إنشاء مصفوفة
- إنشاء رقم عشوائي
- الحصول على الوقت الحالي
-إذا شعرت أن أيًا من هذه المفاهيم غير واضح، فلا بأس بذلك! أحيانًا تكون أفضل طريقة لتثبيت معرفتك هي القفز إلى مشروع واكتشاف الأمور أثناء العمل.
+إذا شعرت أن أيًا من هذه المفاهيم غير واضحة، فلا بأس بذلك! أحيانًا تكون أفضل طريقة لتثبيت معرفتك هي القفز إلى مشروع واكتشاف الأمور أثناء العمل.
-## لنقم ببناء هذه اللعبة!
+### 🔄 **تقييم تربوي**
+**تقييم الأساسيات**: قبل بدء التطوير، تأكد من فهمك:
+- ✅ كيفية عمل نماذج HTML وعناصر الإدخال
+- ✅ الفئات في CSS والتنسيق الديناميكي
+- ✅ مستمعي الأحداث ومعالجيها في JavaScript
+- ✅ التلاعب بالمصفوفات والاختيار العشوائي
+- ✅ قياس الوقت وإجراء الحسابات
+
+**اختبار سريع ذاتي**: هل يمكنك شرح كيفية عمل هذه المفاهيم معًا في لعبة تفاعلية؟
+- **الأحداث** تُطلق عند تفاعل المستخدمين مع العناصر
+- **المعالجات** تعالج هذه الأحداث وتحدث حالة اللعبة
+- **CSS** يوفر ردود فعل بصرية لتفاعلات المستخدم
+- **الوقت** يتيح قياس الأداء وتقدم اللعبة
+
+```mermaid
+quadrantChart
+ title Typing Game Skills Development
+ x-axis Beginner --> Expert
+ y-axis Static --> Interactive
+ quadrant-1 Advanced Games
+ quadrant-2 Real-time Apps
+ quadrant-3 Basic Pages
+ quadrant-4 Interactive Sites
+
+ HTML Forms: [0.3, 0.2]
+ CSS Styling: [0.4, 0.3]
+ Event Handling: [0.7, 0.8]
+ Game Logic: [0.8, 0.9]
+ Performance Tracking: [0.9, 0.7]
+```
+
+## لنبدأ ببناء اللعبة!
[إنشاء لعبة كتابة باستخدام البرمجة القائمة على الأحداث](./typing-game/README.md)
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] افتح وحدة التحكم في المتصفح وجرب الاستماع لأحداث لوحة المفاتيح باستخدام `addEventListener`
+- [ ] أنشئ صفحة HTML بسيطة تحتوي على حقل إدخال واختبر الكشف عن الكتابة
+- [ ] تدرب على معالجة النصوص بمقارنة النص المكتوب بالنص المستهدف
+- [ ] جرب استخدام `setTimeout` لفهم وظائف التوقيت
+
+### 🎯 **ما يمكنك تحقيقه خلال الساعة القادمة**
+- [ ] أكمل اختبار ما بعد الدرس وافهم البرمجة القائمة على الأحداث
+- [ ] قم ببناء نسخة أساسية من لعبة الكتابة مع التحقق من الكلمات
+- [ ] أضف ردود فعل بصرية للكتابة الصحيحة والخاطئة
+- [ ] قم بتنفيذ نظام تسجيل بسيط يعتمد على السرعة والدقة
+- [ ] قم بتصميم لعبتك باستخدام CSS لجعلها جذابة بصريًا
+
+### 📅 **تطوير اللعبة خلال أسبوع**
+- [ ] أكمل لعبة الكتابة بالكامل مع جميع الميزات والتحسينات
+- [ ] أضف مستويات صعوبة مع تعقيد الكلمات المتفاوت
+- [ ] قم بتنفيذ تتبع إحصائيات المستخدم (الكلمات في الدقيقة، الدقة مع مرور الوقت)
+- [ ] أضف تأثيرات صوتية ورسوم متحركة لتحسين تجربة المستخدم
+- [ ] اجعل لعبتك متجاوبة مع الأجهزة المحمولة التي تعمل باللمس
+- [ ] شارك لعبتك عبر الإنترنت واجمع آراء المستخدمين
+
+### 🌟 **تطوير تفاعلي خلال شهر**
+- [ ] قم ببناء ألعاب متعددة تستكشف أنماط تفاعل مختلفة
+- [ ] تعلم عن حلقات الألعاب وإدارة الحالة وتحسين الأداء
+- [ ] ساهم في مشاريع تطوير الألعاب مفتوحة المصدر
+- [ ] أتقن مفاهيم التوقيت المتقدمة والرسوم المتحركة السلسة
+- [ ] أنشئ ملفًا شخصيًا يعرض تطبيقات تفاعلية متنوعة
+- [ ] قم بتوجيه الآخرين المهتمين بتطوير الألعاب والتفاعل مع المستخدم
+
+## 🎯 جدول زمني لإتقان لعبة الكتابة
+
+```mermaid
+timeline
+ title Game Development Learning Progression
+
+ section Setup (10 minutes)
+ Project Structure: HTML foundation
+ : CSS styling setup
+ : JavaScript file creation
+
+ section User Interface (20 minutes)
+ Interactive Elements: Input fields
+ : Button controls
+ : Display areas
+ : Responsive layout
+
+ section Event Handling (25 minutes)
+ User Interaction: Keyboard events
+ : Mouse events
+ : Real-time feedback
+ : State management
+
+ section Game Logic (30 minutes)
+ Core Functionality: Quote generation
+ : Character comparison
+ : Accuracy calculation
+ : Timer implementation
+
+ section Performance Tracking (35 minutes)
+ Metrics & Analytics: WPM calculation
+ : Error tracking
+ : Progress visualization
+ : Results display
+
+ section Polish & Enhancement (45 minutes)
+ User Experience: Visual feedback
+ : Sound effects
+ : Animations
+ : Accessibility features
+
+ section Advanced Features (1 week)
+ Extended Functionality: Difficulty levels
+ : Leaderboards
+ : Custom quotes
+ : Multiplayer options
+
+ section Professional Skills (1 month)
+ Game Development: Performance optimization
+ : Code architecture
+ : Testing strategies
+ : Deployment patterns
+```
+
+### 🛠️ ملخص أدوات تطوير اللعبة
+
+بعد إكمال هذا المشروع، ستتقن:
+- **البرمجة القائمة على الأحداث**: واجهات مستخدم تفاعلية تستجيب للإدخال
+- **ردود الفعل الفورية**: تحديثات بصرية وأداء فورية
+- **قياس الأداء**: أنظمة توقيت وتسجيل دقيقة
+- **إدارة حالة اللعبة**: التحكم في تدفق التطبيق وتجربة المستخدم
+- **التصميم التفاعلي**: إنشاء تجارب مستخدم جذابة وممتعة
+- **واجهات برمجة التطبيقات الحديثة**: استخدام قدرات المتصفح للتفاعلات الغنية
+- **أنماط الوصول**: تصميم شامل لجميع المستخدمين
+
+**التطبيقات الواقعية**: هذه المهارات تنطبق مباشرة على:
+- **تطبيقات الويب**: أي واجهة تفاعلية أو لوحة تحكم
+- **البرامج التعليمية**: منصات التعلم وأدوات تقييم المهارات
+- **أدوات الإنتاجية**: محررات النصوص، بيئات التطوير، وبرامج التعاون
+- **صناعة الألعاب**: ألعاب المتصفح والترفيه التفاعلي
+- **تطوير الأجهزة المحمولة**: واجهات تعمل باللمس ومعالجة الإيماءات
+
+**المستوى التالي**: أنت جاهز لاستكشاف أطر الألعاب المتقدمة، أنظمة اللعب متعددة اللاعبين في الوقت الفعلي، أو التطبيقات التفاعلية المعقدة!
+
## الشكر
-كتبت بحب ♥️ بواسطة [كريستوفر هاريسون](http://www.twitter.com/geektrainer)
+كتبه بكل ♥️ بواسطة [كريستوفر هاريسون](http://www.twitter.com/geektrainer)
---
diff --git a/translations/ar/4-typing-game/typing-game/README.md b/translations/ar/4-typing-game/typing-game/README.md
index a4f4521547..ad0abdbd5a 100644
--- a/translations/ar/4-typing-game/typing-game/README.md
+++ b/translations/ar/4-typing-game/typing-game/README.md
@@ -1,17 +1,17 @@
# إنشاء لعبة باستخدام الأحداث
-هل تساءلت يومًا كيف تعرف المواقع الإلكترونية أنك ضغطت على زر أو كتبت في مربع نص؟ هذه هي روعة البرمجة القائمة على الأحداث! وما الطريقة الأفضل لتعلم هذه المهارة الأساسية من بناء شيء مفيد - لعبة سرعة الكتابة التي تتفاعل مع كل ضغطة مفتاح تقوم بها.
+هل تساءلت يومًا كيف تعرف المواقع الإلكترونية أنك ضغطت على زر أو كتبت في مربع نص؟ هذه هي روعة البرمجة القائمة على الأحداث! ما الطريقة الأفضل لتعلم هذه المهارة الأساسية من خلال بناء شيء مفيد - لعبة سرعة الكتابة التي تتفاعل مع كل ضغطة مفتاح تقوم بها.
-ستتعرف بنفسك على كيفية "تحدث" متصفحات الويب مع كود JavaScript الخاص بك. في كل مرة تنقر، تكتب، أو تحرك الماوس، يقوم المتصفح بإرسال رسائل صغيرة (نسميها أحداث) إلى الكود الخاص بك، وأنت تقرر كيفية الرد!
+ستتعرف بنفسك على كيفية "تحدث" متصفحات الويب مع كود JavaScript الخاص بك. في كل مرة تنقر أو تكتب أو تحرك الماوس، يرسل المتصفح رسائل صغيرة (نسميها أحداث) إلى الكود الخاص بك، وأنت تقرر كيفية الرد!
بحلول الوقت الذي ننتهي فيه هنا، ستكون قد أنشأت لعبة كتابة حقيقية تتبع سرعتك ودقتك. والأهم من ذلك، ستفهم المفاهيم الأساسية التي تشغل كل موقع تفاعلي استخدمته من قبل. لنبدأ!
@@ -23,7 +23,7 @@ CO_OP_TRANSLATOR_METADATA:
فكر في تطبيقك أو موقعك المفضل - ما الذي يجعله يبدو حيًا وتفاعليًا؟ الأمر كله يتعلق بكيفية تفاعله مع ما تفعله! كل نقرة، ضغط، سحب، أو ضغطة مفتاح تخلق ما نسميه "حدث"، وهنا تحدث روعة تطوير الويب.
-ما يجعل البرمجة للويب مثيرة للاهتمام هو أننا لا نعرف أبدًا متى سيضغط شخص ما على ذلك الزر أو يبدأ الكتابة في مربع النص. قد ينقرون فورًا، ينتظرون خمس دقائق، أو ربما لا ينقرون أبدًا! هذه الطبيعة غير المتوقعة تعني أننا بحاجة إلى التفكير بشكل مختلف حول كيفية كتابة الكود الخاص بنا.
+ما يجعل البرمجة للويب مثيرة للاهتمام هو أننا لا نعرف أبدًا متى سيضغط شخص ما على ذلك الزر أو يبدأ الكتابة في مربع النص. قد ينقر فورًا، ينتظر خمس دقائق، أو ربما لا ينقر أبدًا! هذه الطبيعة غير المتوقعة تعني أننا بحاجة إلى التفكير بشكل مختلف حول كيفية كتابة الكود الخاص بنا.
بدلاً من كتابة كود يعمل من الأعلى إلى الأسفل مثل وصفة، نكتب كودًا ينتظر بصبر حدوث شيء ما. يشبه ذلك كيف كان مشغلو التلغراف في القرن التاسع عشر يجلسون بجانب أجهزتهم، مستعدين للرد بمجرد وصول رسالة عبر السلك.
@@ -31,40 +31,40 @@ CO_OP_TRANSLATOR_METADATA:
البرمجة القائمة على الأحداث تتيح لنا إعداد الكود الخاص بنا للاستماع والرد. نقوم بإنشاء وظائف خاصة تسمى **مستمعي الأحداث** التي تنتظر بصبر حدوث أشياء معينة، ثم تنطلق إلى العمل عندما تحدث.
-فكر في مستمعي الأحداث مثل وجود جرس باب لكودك. تقوم بإعداد جرس الباب (`addEventListener()`)، تخبره بالصوت الذي يجب أن يستمع إليه (مثل 'click' أو 'keypress')، ثم تحدد ما يجب أن يحدث عندما يرن أحدهم الجرس (وظيفتك المخصصة).
+فكر في مستمعي الأحداث مثل وجود جرس باب للكود الخاص بك. تقوم بإعداد جرس الباب (`addEventListener()`)، تخبره بالصوت الذي يجب الاستماع إليه (مثل 'click' أو 'keypress')، ثم تحدد ما يجب أن يحدث عندما يرن شخص ما الجرس (وظيفتك المخصصة).
-**كيف يعمل مستمعو الأحداث:**
-- **يستمعون** إلى إجراءات المستخدم المحددة مثل النقرات، ضغطات المفاتيح، أو حركات الماوس
-- **ينفذون** الكود المخصص الخاص بك عندما يحدث الحدث المحدد
-- **يستجيبون** فورًا لتفاعلات المستخدم، مما يخلق تجربة سلسة
-- **يتعاملون** مع أحداث متعددة على نفس العنصر باستخدام مستمعين مختلفين
+**كيف تعمل مستمعات الأحداث:**
+- **تستمع** إلى إجراءات المستخدم المحددة مثل النقرات أو ضغطات المفاتيح أو حركات الماوس
+- **تنفذ** الكود المخصص الخاص بك عندما يحدث الحدث المحدد
+- **تستجيب** فورًا لتفاعلات المستخدم، مما يخلق تجربة سلسة
+- **تتعامل** مع أحداث متعددة على نفس العنصر باستخدام مستمعين مختلفين
-> **NOTE:** من الجدير بالذكر أن هناك طرقًا عديدة لإنشاء مستمعي الأحداث. يمكنك استخدام وظائف مجهولة، أو إنشاء وظائف مسماة. يمكنك استخدام اختصارات مختلفة، مثل تعيين خاصية `click`، أو استخدام `addEventListener()`. في تمريننا سنركز على `addEventListener()` والوظائف المجهولة، لأنها على الأرجح التقنية الأكثر شيوعًا التي يستخدمها مطورو الويب. كما أنها الأكثر مرونة، حيث تعمل `addEventListener()` لجميع الأحداث، ويمكن تقديم اسم الحدث كمعامل.
+> **NOTE:** من الجدير بالذكر أن هناك طرقًا عديدة لإنشاء مستمعي الأحداث. يمكنك استخدام وظائف مجهولة، أو إنشاء وظائف مسماة. يمكنك استخدام اختصارات مختلفة، مثل تعيين خاصية `click`، أو استخدام `addEventListener()`. في تمريننا، سنركز على `addEventListener()` والوظائف المجهولة، لأنها التقنية الأكثر شيوعًا التي يستخدمها مطورو الويب. كما أنها الأكثر مرونة، حيث تعمل `addEventListener()` لجميع الأحداث، ويمكن تقديم اسم الحدث كمعامل.
### الأحداث الشائعة
-بينما تقدم متصفحات الويب عشرات الأحداث المختلفة التي يمكنك الاستماع إليها، تعتمد معظم التطبيقات التفاعلية على عدد قليل فقط من الأحداث الأساسية. فهم هذه الأحداث الأساسية سيمنحك الأساس لبناء تفاعلات مستخدم متقدمة.
+بينما تقدم متصفحات الويب عشرات الأحداث المختلفة التي يمكنك الاستماع إليها، تعتمد معظم التطبيقات التفاعلية على مجموعة صغيرة من الأحداث الأساسية. فهم هذه الأحداث الأساسية سيمنحك الأساس لبناء تفاعلات مستخدم متقدمة.
-هناك [عشرات الأحداث](https://developer.mozilla.org/docs/Web/Events) المتاحة للاستماع إليها عند إنشاء تطبيق. في الأساس، أي شيء يفعله المستخدم على الصفحة يثير حدثًا، مما يمنحك الكثير من القوة لضمان حصولهم على التجربة التي ترغب بها. لحسن الحظ، ستحتاج عادةً إلى عدد قليل فقط من الأحداث. إليك بعض الأحداث الشائعة (بما في ذلك الاثنين الذين سنستخدمهما عند إنشاء لعبتنا):
+هناك [عشرات الأحداث](https://developer.mozilla.org/docs/Web/Events) المتاحة للاستماع إليها عند إنشاء تطبيق. في الأساس، أي شيء يفعله المستخدم على الصفحة يثير حدثًا، مما يمنحك الكثير من القوة لضمان حصولهم على التجربة التي ترغب بها. لحسن الحظ، ستحتاج عادةً إلى عدد قليل من الأحداث فقط. إليك بعض الأحداث الشائعة (بما في ذلك اثنان سنستخدمهما عند إنشاء لعبتنا):
| الحدث | الوصف | الاستخدامات الشائعة |
-|-------|-------------|------------------|
+|-------|-------|------------------|
| `click` | ضغط المستخدم على شيء ما | الأزرار، الروابط، العناصر التفاعلية |
| `contextmenu` | ضغط المستخدم على زر الماوس الأيمن | قوائم النقر بزر الماوس الأيمن المخصصة |
-| `select` | قام المستخدم بتحديد نص | تحرير النص، عمليات النسخ |
-| `input` | أدخل المستخدم نصًا | التحقق من صحة النماذج، البحث في الوقت الحقيقي |
+| `select` | قام المستخدم بتحديد نص | تحرير النصوص، عمليات النسخ |
+| `input` | أدخل المستخدم نصًا | التحقق من صحة النماذج، البحث في الوقت الفعلي |
**فهم أنواع الأحداث هذه:**
-- **تُثار** عندما يتفاعل المستخدمون مع عناصر محددة على صفحتك
-- **تُوفر** معلومات تفصيلية حول إجراء المستخدم من خلال كائنات الأحداث
-- **تُمكنك** من إنشاء تطبيقات ويب تفاعلية وسريعة الاستجابة
+- **تُفعل** عند تفاعل المستخدمين مع عناصر محددة على صفحتك
+- **توفر** معلومات تفصيلية حول إجراء المستخدم من خلال كائنات الأحداث
+- **تمكنك** من إنشاء تطبيقات ويب تفاعلية وسريعة الاستجابة
- **تعمل** بشكل متسق عبر المتصفحات والأجهزة المختلفة
## إنشاء اللعبة
الآن بعد أن فهمت كيفية عمل الأحداث، دعنا نضع هذه المعرفة موضع التنفيذ من خلال بناء شيء مفيد. سنقوم بإنشاء لعبة سرعة الكتابة التي توضح التعامل مع الأحداث بينما تساعدك على تطوير مهارة مهمة للمطورين.
-سنقوم بإنشاء لعبة لاستكشاف كيفية عمل الأحداث في JavaScript. لعبتنا ستختبر مهارة الكتابة لدى اللاعب، وهي واحدة من المهارات التي لا تحظى بالتقدير الكافي والتي يجب أن يمتلكها جميع المطورين. معلومة ممتعة: تم تصميم تخطيط لوحة المفاتيح QWERTY الذي نستخدمه اليوم في سبعينيات القرن التاسع عشر للآلات الكاتبة - وما زالت مهارات الكتابة الجيدة ذات قيمة كبيرة للمبرمجين اليوم! ستبدو تدفق اللعبة بشكل عام كما يلي:
+سنقوم بإنشاء لعبة لاستكشاف كيفية عمل الأحداث في JavaScript. ستختبر لعبتنا مهارة الكتابة لدى اللاعب، وهي واحدة من المهارات الأكثر تقليلًا من قيمتها التي يجب أن يمتلكها جميع المطورين. معلومة ممتعة: تم تصميم تخطيط لوحة المفاتيح QWERTY الذي نستخدمه اليوم في سبعينيات القرن التاسع عشر للآلات الكاتبة - وما زالت مهارات الكتابة الجيدة ذات قيمة كبيرة للمبرمجين حتى اليوم! ستبدو تدفق اللعبة بشكل عام كما يلي:
```mermaid
flowchart TD
@@ -84,18 +84,18 @@ flowchart TD
**كيف ستعمل لعبتنا:**
- **تبدأ** عندما يضغط اللاعب على زر البدء وتعرض اقتباسًا عشوائيًا
-- **تتبع** تقدم اللاعب في الكتابة كلمة بكلمة في الوقت الحقيقي
+- **تتبع** تقدم اللاعب في الكتابة كلمة بكلمة في الوقت الفعلي
- **تُبرز** الكلمة الحالية لتوجيه تركيز اللاعب
-- **تُوفر** ردود فعل بصرية فورية لأخطاء الكتابة
+- **توفر** ملاحظات بصرية فورية لأخطاء الكتابة
- **تحسب** وتعرض الوقت الإجمالي عند اكتمال الاقتباس
لنقم ببناء لعبتنا، ونتعلم عن الأحداث!
### هيكل الملفات
-قبل أن نبدأ في البرمجة، دعنا ننظم الأمور! وجود هيكل ملفات نظيف من البداية سيوفر عليك الكثير من المتاعب لاحقًا ويجعل مشروعك أكثر احترافية. 😊
+قبل أن نبدأ في البرمجة، دعونا ننظم الأمور! وجود هيكل ملفات نظيف منذ البداية سيوفر عليك الكثير من المتاعب لاحقًا ويجعل مشروعك أكثر احترافية. 😊
-سنحافظ على الأمور بسيطة بثلاثة ملفات فقط: `index.html` لهيكل الصفحة، `script.js` لكل منطق اللعبة، و `style.css` لجعل كل شيء يبدو رائعًا. هذه الثلاثية الكلاسيكية هي التي تشغل معظم الويب!
+سنحافظ على الأمور بسيطة مع ثلاثة ملفات فقط: `index.html` لهيكل الصفحة، `script.js` لجميع منطق اللعبة، و `style.css` لجعل كل شيء يبدو رائعًا. هذه هي الثلاثية الكلاسيكية التي تشغل معظم الويب!
**قم بإنشاء مجلد جديد لعملك عن طريق فتح نافذة وحدة التحكم أو الطرفية وإصدار الأمر التالي:**
@@ -108,8 +108,8 @@ md typing-game && cd typing-game
```
**ما الذي تفعله هذه الأوامر:**
-- **تُنشئ** دليلًا جديدًا يسمى `typing-game` لملفات مشروعك
-- **تتنقل** تلقائيًا إلى الدليل الذي تم إنشاؤه حديثًا
+- **تنشئ** دليلًا جديدًا يسمى `typing-game` لملفات مشروعك
+- **تنتقل** إلى الدليل الذي تم إنشاؤه حديثًا تلقائيًا
- **تُعد** مساحة عمل نظيفة لتطوير لعبتك
**افتح Visual Studio Code:**
@@ -119,35 +119,35 @@ code .
```
**هذا الأمر:**
-- **يُطلق** Visual Studio Code في الدليل الحالي
+- **يشغل** Visual Studio Code في الدليل الحالي
- **يفتح** مجلد مشروعك في المحرر
- **يوفر** الوصول إلى جميع أدوات التطوير التي ستحتاجها
**أضف ثلاثة ملفات إلى المجلد في Visual Studio Code بالأسماء التالية:**
- `index.html` - يحتوي على هيكل ومحتوى لعبتك
- `script.js` - يتعامل مع كل منطق اللعبة ومستمعي الأحداث
-- `style.css` - يُحدد المظهر البصري والتصميم
+- `style.css` - يحدد المظهر البصري والتصميم
## إنشاء واجهة المستخدم
-الآن دعنا نبني المسرح حيث ستحدث كل أحداث لعبتنا! فكر في هذا كتصميم لوحة التحكم لمركبة فضائية - نحتاج إلى التأكد من أن كل ما يحتاجه اللاعبون موجود حيث يتوقعونه.
+الآن دعونا نبني المسرح حيث ستحدث كل أحداث لعبتنا! فكر في هذا كتصميم لوحة التحكم لمركبة فضائية - نحتاج إلى التأكد من أن كل ما يحتاجه اللاعبون موجود حيث يتوقعونه.
-دعنا نحدد ما تحتاجه لعبتنا بالفعل. إذا كنت تلعب لعبة كتابة، ماذا تريد أن ترى على الشاشة؟ إليك ما سنحتاجه:
+دعونا نحدد ما تحتاجه لعبتنا بالفعل. إذا كنت تلعب لعبة كتابة، ماذا تريد أن ترى على الشاشة؟ إليك ما سنحتاجه:
| عنصر واجهة المستخدم | الغرض | عنصر HTML |
-|------------|---------|-------------|
-| عرض الاقتباس | يعرض النص المطلوب كتابته | ` ` مع `id="quote"` |
+|---------------------|-------|-----------|
+| عرض الاقتباس | يعرض النص للكتابة | `
` مع `id="quote"` |
| منطقة الرسائل | تعرض الرسائل والحالة | `
` مع `id="message"` |
| إدخال النص | حيث يكتب اللاعبون الاقتباس | ` ` مع `id="typed-value"` |
| زر البدء | يبدأ اللعبة | `` مع `id="start"` |
**فهم هيكل واجهة المستخدم:**
-- **ينظم** المحتوى منطقيًا من الأعلى إلى الأسفل
-- **يُعين** معرفات فريدة للعناصر لاستهدافها في JavaScript
-- **يوفر** تسلسلًا بصريًا واضحًا لتجربة مستخدم أفضل
+- **ينظم** المحتوى بشكل منطقي من الأعلى إلى الأسفل
+- **يخصص** معرفات فريدة للعناصر لاستهدافها باستخدام JavaScript
+- **يوفر** تسلسلًا بصريًا واضحًا لتحسين تجربة المستخدم
- **يتضمن** عناصر HTML دلالية لتحسين الوصول
-كل هذه العناصر ستحتاج إلى معرفات حتى نتمكن من العمل معها في JavaScript الخاص بنا. سنضيف أيضًا مراجع إلى ملفات CSS وJavaScript التي سنقوم بإنشائها.
+كل هذه العناصر ستحتاج إلى معرفات حتى نتمكن من العمل معها في JavaScript الخاص بنا. سنضيف أيضًا روابط إلى ملفات CSS و JavaScript التي سنقوم بإنشائها.
قم بإنشاء ملف جديد باسم `index.html`. أضف HTML التالي:
@@ -172,50 +172,50 @@ code .
```
-**تفصيل ما يحققه هيكل HTML هذا:**
+**تفصيل ما يحققه هذا الهيكل HTML:**
- **يربط** ملف CSS في `` للتصميم
-- **يُنشئ** عنوانًا واضحًا وتعليمات للمستخدمين
-- **يُنشئ** فقرات مؤقتة بمعرفات محددة للمحتوى الديناميكي
+- **ينشئ** عنوانًا واضحًا وتعليمات للمستخدمين
+- **يؤسس** فقرات مؤقتة بمعرفات محددة للمحتوى الديناميكي
- **يتضمن** حقل إدخال مع سمات الوصول
- **يوفر** زر بدء لتشغيل اللعبة
-- **يُحمل** ملف JavaScript في النهاية لتحسين الأداء
+- **يحمل** ملف JavaScript في النهاية لتحسين الأداء
### تشغيل التطبيق
-اختبار تطبيقك بشكل متكرر أثناء التطوير يساعدك على اكتشاف المشكلات مبكرًا ورؤية تقدمك في الوقت الحقيقي. Live Server هو أداة لا تقدر بثمن تقوم بتحديث متصفحك تلقائيًا كلما حفظت التغييرات، مما يجعل التطوير أكثر كفاءة.
+اختبار تطبيقك بشكل متكرر أثناء التطوير يساعدك على اكتشاف المشكلات مبكرًا ورؤية تقدمك في الوقت الفعلي. Live Server هو أداة لا تقدر بثمن تقوم بتحديث متصفحك تلقائيًا كلما قمت بحفظ التغييرات، مما يجعل التطوير أكثر كفاءة.
-من الأفضل دائمًا التطوير بشكل تدريجي لرؤية كيف تبدو الأمور. دعنا نطلق تطبيقنا. هناك إضافة رائعة لـ Visual Studio Code تسمى [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) التي ستقوم باستضافة تطبيقك محليًا وتحديث المتصفح في كل مرة تحفظ فيها.
+من الأفضل دائمًا التطوير بشكل تدريجي لرؤية كيف تبدو الأمور. دعونا نطلق تطبيقنا. هناك إضافة رائعة لـ Visual Studio Code تسمى [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) التي ستقوم باستضافة تطبيقك محليًا وتحديث المتصفح في كل مرة تحفظ فيها.
**قم بتثبيت [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) باتباع الرابط والنقر على تثبيت:**
**ما يحدث أثناء التثبيت:**
-- **يُطالب** متصفحك بفتح Visual Studio Code
-- **يُرشدك** خلال عملية تثبيت الإضافة
+- **يفتح** متصفحك Visual Studio Code
+- **يرشدك** خلال عملية تثبيت الإضافة
- **قد يتطلب** إعادة تشغيل Visual Studio Code لإكمال الإعداد
-**بمجرد التثبيت، في Visual Studio Code، اضغط Ctrl-Shift-P (أو Cmd-Shift-P) لفتح لوحة الأوامر:**
+**بمجرد التثبيت، في Visual Studio Code، اضغط على Ctrl-Shift-P (أو Cmd-Shift-P) لفتح لوحة الأوامر:**
**فهم لوحة الأوامر:**
- **يوفر** وصولًا سريعًا إلى جميع أوامر VS Code
- **يبحث** عن الأوامر أثناء الكتابة
-- **يُقدم** اختصارات لوحة المفاتيح لتطوير أسرع
+- **يقدم** اختصارات لوحة المفاتيح لتطوير أسرع
**اكتب "Live Server: Open with Live Server":**
**ما يفعله Live Server:**
- **يبدأ** خادم تطوير محلي لمشروعك
-- **يُحدث** المتصفح تلقائيًا عند حفظ الملفات
-- **يُقدم** ملفاتك من عنوان URL محلي (عادةً `localhost:5500`)
+- **يحدث** المتصفح تلقائيًا عند حفظ الملفات
+- **يخدم** ملفاتك من عنوان URL محلي (عادةً `localhost:5500`)
**افتح متصفحًا وانتقل إلى `https://localhost:5500`:**
-يجب أن ترى الآن الصفحة التي أنشأتها! دعنا نضيف بعض الوظائف.
+يجب أن ترى الآن الصفحة التي أنشأتها! دعونا نضيف بعض الوظائف.
## إضافة CSS
-الآن دعنا نجعل الأمور تبدو جيدة! كان رد الفعل البصري ضروريًا لواجهات المستخدم منذ الأيام الأولى للحوسبة. في الثمانينيات، اكتشف الباحثون أن رد الفعل البصري الفوري يحسن أداء المستخدم بشكل كبير ويقلل الأخطاء. هذا بالضبط ما سنقوم بإنشائه.
+الآن دعونا نجعل الأمور تبدو جيدة! كان ردود الفعل البصرية أمرًا حيويًا لواجهات المستخدم منذ الأيام الأولى للحوسبة. في الثمانينيات، اكتشف الباحثون أن ردود الفعل البصرية الفورية تحسن أداء المستخدم بشكل كبير وتقلل الأخطاء. هذا بالضبط ما سنقوم بإنشائه.
-تحتاج لعبتنا إلى أن تكون واضحة تمامًا بشأن ما يحدث. يجب أن يعرف اللاعبون فورًا الكلمة التي يجب عليهم كتابتها، وإذا ارتكبوا خطأ، يجب أن يروا ذلك على الفور. دعنا ننشئ تصميمًا بسيطًا ولكنه فعال:
+تحتاج لعبتنا إلى أن تكون واضحة تمامًا بشأن ما يحدث. يجب أن يعرف اللاعبون فورًا الكلمة التي يجب عليهم كتابتها، وإذا ارتكبوا خطأ، يجب أن يروا ذلك على الفور. دعونا ننشئ بعض التصميمات البسيطة ولكن الفعالة:
قم بإنشاء ملف جديد باسم `style.css` وأضف الصياغة التالية.
@@ -231,33 +231,33 @@ code .
}
```
-**فهم هذه الفئات في CSS:**
-- **يُبرز** الكلمة الحالية بخلفية صفراء لتوجيه بصري واضح
-- **يُشير** إلى أخطاء الكتابة بلون خلفية مرجاني فاتح
-- **يوفر** ردود فعل فورية دون تعطيل تدفق كتابة المستخدم
-- **يستخدم** ألوانًا متباينة لتحسين الوصول والتواصل البصري الواضح
+**فهم هذه الفئات CSS:**
+- **تُبرز** الكلمة الحالية بخلفية صفراء لتوجيه بصري واضح
+- **تشير** إلى أخطاء الكتابة بلون خلفية وردي فاتح
+- **توفر** ردود فعل فورية دون تعطيل تدفق الكتابة للمستخدم
+- **تستخدم** ألوانًا متباينة لتحسين الوصول والتواصل البصري الواضح
-✅ عندما يتعلق الأمر بـ CSS يمكنك تصميم صفحتك بالطريقة التي ترغب بها. خذ بعض الوقت واجعل الصفحة تبدو أكثر جاذبية:
+✅ عندما يتعلق الأمر بـ CSS، يمكنك تصميم صفحتك بالطريقة التي تريدها. خذ بعض الوقت واجعل الصفحة تبدو أكثر جاذبية:
- اختر خطًا مختلفًا
-- لون العناوين
+- أضف ألوانًا إلى العناوين
- قم بتغيير حجم العناصر
## JavaScript
-هنا تصبح الأمور مثيرة! 🎉 لدينا هيكل HTML الخاص بنا وتصميم CSS، ولكن الآن لعبتنا مثل سيارة جميلة بدون محرك. JavaScript سيكون ذلك المحرك - هو ما يجعل كل شيء يعمل فعليًا ويستجيب لما يفعله اللاعبون.
+هنا تصبح الأمور مثيرة! 🎉 لدينا هيكل HTML الخاص بنا وتصميم CSS، ولكن الآن لعبتنا مثل سيارة جميلة بدون محرك. JavaScript سيكون هذا المحرك - هو ما يجعل كل شيء يعمل فعليًا ويستجيب لما يفعله اللاعبون.
-هنا سترى إبداعك ينبض بالحياة. سنقوم بمعالجة هذا خطوة بخطوة حتى لا يبدو الأمر مربكًا:
+هنا سترى إبداعك ينبض بالحياة. سنقوم بمعالجة هذا خطوة بخطوة حتى لا تشعر بالإرهاق:
| الخطوة | الغرض | ما ستتعلمه |
-|------|---------|------------------|
+|--------|-------|------------|
| [إنشاء الثوابت](../../../../4-typing-game/typing-game) | إعداد الاقتباسات ومراجع DOM | إدارة المتغيرات واختيار DOM |
| [مستمع الحدث لبدء اللعبة](../../../../4-typing-game/typing-game) | التعامل مع تهيئة اللعبة | التعامل مع الأحداث وتحديث واجهة المستخدم |
-| [مستمع الحدث للكتابة](../../../../4-typing-game/typing-game) | معالجة إدخال المستخدم في الوقت الحقيقي | التحقق من صحة الإدخال وردود الفعل الديناميكية |
+| [مستمع الحدث للكتابة](../../../../4-typing-game/typing-game) | معالجة إدخال المستخدم في الوقت الفعلي | التحقق من صحة الإدخال وردود الفعل الديناميكية |
**يساعدك هذا النهج المنظم على:**
- **تنظيم** الكود الخاص بك في أقسام منطقية وقابلة للإدارة
-- **بناء** الوظائف تدريجيًا لتسهيل تصحيح الأخطاء
+- **بناء** الوظائف تدريجيًا لتسهيل التصحيح
- **فهم** كيفية عمل أجزاء مختلفة من تطبيقك معًا
- **إنشاء** أنماط قابلة لإعادة الاستخدام للمشاريع المستقبلية
@@ -265,21 +265,21 @@ code .
### إضافة الثوابت
-قبل أن نغوص في العمل، دعنا نجمع كل مواردنا! تمامًا مثل كيفية إعداد مركز التحكم في ناسا جميع أنظمة المراقبة الخاصة بهم قبل الإطلاق، يكون الأمر أسهل بكثير عندما يكون لديك كل شيء جاهز ومعد. هذا يوفر علينا البحث عن الأشياء لاحقًا ويساعد في منع الأخطاء الإملائية.
+قبل أن نغوص في العمل، دعونا نجمع كل مواردنا! تمامًا مثل كيفية إعداد مركز التحكم في ناسا جميع أنظمة المراقبة قبل الإطلاق، يكون الأمر أسهل بكثير عندما يكون لديك كل شيء جاهزًا. هذا يوفر علينا البحث عن الأشياء لاحقًا ويساعد في منع الأخطاء.
إليك ما نحتاج إلى إعداده أولاً:
-| نوع البيانات | الغرض | مثال |
-|-----------|---------|--------|
+| نوع البيانات | الغرض | المثال |
+|--------------|-------|--------|
| مجموعة الاقتباسات | تخزين جميع الاقتباسات الممكنة للعبة | `['Quote 1', 'Quote 2', ...]` |
| مصفوفة الكلمات | تقسيم الاقتباس الحالي إلى كلمات فردية | `['When', 'you', 'have', ...]` |
| مؤشر الكلمة | تتبع الكلمة التي يكتبها اللاعب | `0, 1, 2, 3...` |
-| وقت البدء | حساب الوقت المنقضي للتسجيل | `Date.now()` |
+| وقت البدء | حساب الوقت المنقضي لتسجيل النقاط | `Date.now()` |
**سنحتاج أيضًا إلى مراجع لعناصر واجهة المستخدم الخاصة بنا:**
| العنصر | المعرف | الغرض |
-|--------|-------|-------|
-| إدخال النص | `typed-value` | حيث يكتب اللاعبون |
+|--------|--------|-------|
+| حقل الإدخال النصي | `typed-value` | المكان الذي يكتب فيه اللاعبون |
| عرض الاقتباس | `quote` | يعرض الاقتباس المطلوب كتابته |
| منطقة الرسائل | `message` | تعرض تحديثات الحالة |
@@ -307,23 +307,23 @@ const typedValueElement = document.getElementById('typed-value');
```
**تفصيل ما يحققه هذا الكود الإعدادي:**
-- **يخزن** مجموعة من اقتباسات شيرلوك هولمز باستخدام `const` لأن الاقتباسات لن تتغير
-- **يُهيئ** متغيرات التتبع باستخدام `let` لأن هذه القيم ستتغير أثناء اللعب
-- **يُلتقط** مراجع لعناصر DOM باستخدام `document.getElementById()` للوصول الفعال
-- **يُعد** الأساس لجميع وظائف اللعبة بأسماء متغيرات واضحة وموصوفة
-- **ينظم** البيانات والعناصر ذات الصلة بشكل منطقي لتسهيل صيانة الكود
+- **تخزين** مجموعة من اقتباسات شيرلوك هولمز باستخدام `const` لأن الاقتباسات لن تتغير
+- **تهيئة** متغيرات التتبع باستخدام `let` لأن هذه القيم ستتغير أثناء اللعب
+- **التقاط** مراجع لعناصر DOM باستخدام `document.getElementById()` للوصول الفعال
+- **إعداد** الأساس لجميع وظائف اللعبة بأسماء متغيرات واضحة وموصوفة
+- **تنظيم** البيانات والعناصر ذات الصلة بشكل منطقي لتسهيل صيانة الكود
✅ يمكنك الآن إضافة المزيد من الاقتباسات إلى لعبتك
-> 💡 **نصيحة احترافية**: يمكننا استرجاع العناصر في أي وقت في الكود باستخدام `document.getElementById()`. نظرًا لأننا سنشير إلى هذه العناصر بشكل منتظم، سنتجنب الأخطاء الإملائية مع النصوص الحرفية باستخدام الثوابت. يمكن أن تساعدك أطر العمل مثل [Vue.js](https://vuejs.org/) أو [React](https://reactjs.org/) في إدارة مركزية الكود بشكل أفضل.
+> 💡 **نصيحة احترافية**: يمكننا استرجاع العناصر في أي وقت في الكود باستخدام `document.getElementById()`. نظرًا لأننا سنشير إلى هذه العناصر بانتظام، سنتجنب الأخطاء الإملائية مع النصوص باستخدام الثوابت. يمكن أن تساعدك أطر العمل مثل [Vue.js](https://vuejs.org/) أو [React](https://reactjs.org/) في إدارة مركزية الكود بشكل أفضل.
>
**لماذا تعمل هذه الطريقة بشكل جيد:**
- **تمنع** الأخطاء الإملائية عند الإشارة إلى العناصر عدة مرات
-- **تحسن** قابلية قراءة الكود بأسماء ثوابت موصوفة
+- **تحسن** قابلية قراءة الكود بأسماء ثوابت وصفية
- **تمكن** دعم أفضل من بيئة التطوير المتكاملة مع الإكمال التلقائي وفحص الأخطاء
-- **تسهل** إعادة هيكلة الكود إذا تغيرت معرفات العناصر لاحقًا
+- **تسهل** إعادة الهيكلة إذا تغيرت معرفات العناصر لاحقًا
-خذ دقيقة لمشاهدة فيديو عن استخدام `const`، `let` و `var`
+خذ دقيقة لمشاهدة فيديو حول استخدام `const`، `let` و `var`
[](https://youtube.com/watch?v=JNIXfGiDWM8 "أنواع المتغيرات")
@@ -333,9 +333,9 @@ const typedValueElement = document.getElementById('typed-value');
هنا حيث يبدأ كل شيء بالعمل! 🚀 أنت على وشك كتابة أول مستمع حدث حقيقي، وهناك شيء مرضٍ للغاية في رؤية الكود الخاص بك يستجيب لنقرة زر.
-فكر في الأمر: في مكان ما، سيقوم لاعب بالنقر على زر "ابدأ"، ويجب أن يكون الكود الخاص بك جاهزًا له. ليس لدينا فكرة متى سيضغط عليه - قد يكون فورًا، أو بعد أن يأخذ فنجان قهوة - ولكن عندما يفعل، ستبدأ لعبتك في العمل.
+فكر في الأمر: في مكان ما، سيقوم لاعب بالنقر على زر "ابدأ"، ويجب أن يكون الكود الخاص بك جاهزًا لهم. ليس لدينا فكرة متى سيضغطون عليه - قد يكون فورًا، أو بعد أن يأخذوا فنجان قهوة - ولكن عندما يفعلون ذلك، ستبدأ لعبتك في العمل.
-عندما ينقر المستخدم على `start`، نحتاج إلى اختيار اقتباس، إعداد واجهة المستخدم، وإعداد التتبع للكلمة الحالية والتوقيت. أدناه يوجد كود JavaScript الذي تحتاج إلى إضافته؛ سنناقشه بعد كتلة الكود.
+عندما ينقر المستخدم على `start`، نحتاج إلى اختيار اقتباس، إعداد واجهة المستخدم، وإعداد التتبع للكلمة الحالية والتوقيت. أدناه هو الكود الذي تحتاج إلى إضافته؛ سنناقشه بعد كتلة الكود.
```javascript
// at the end of script.js
@@ -370,35 +370,35 @@ document.getElementById('start').addEventListener('click', () => {
});
```
-**دعونا نفصل الكود إلى أقسام منطقية:**
+**لنقسم الكود إلى أقسام منطقية:**
**📊 إعداد تتبع الكلمات:**
- **يختار** اقتباسًا عشوائيًا باستخدام `Math.floor()` و `Math.random()` للتنوع
- **يحول** الاقتباس إلى مصفوفة من الكلمات الفردية باستخدام `split(' ')`
-- **يعيد تعيين** `wordIndex` إلى 0 لأن اللاعبين يبدأون بالكلمة الأولى
-- **يُجهز** حالة اللعبة لجولة جديدة
+- **يعيد ضبط** `wordIndex` إلى 0 لأن اللاعبين يبدأون بالكلمة الأولى
+- **يجهز** حالة اللعبة لجولة جديدة
**🎨 إعداد واجهة المستخدم والعرض:**
- **ينشئ** مصفوفة من عناصر ``، يلف كل كلمة لتنسيق فردي
-- **يجمع** عناصر span في سلسلة واحدة لتحديث DOM بكفاءة
+- **يجمع** عناصر الـ span في سلسلة واحدة لتحديث DOM بكفاءة
- **يسلط الضوء** على الكلمة الأولى بإضافة فئة CSS `highlight`
-- **يمسح** أي رسائل لعبة سابقة لتوفير بداية نظيفة
+- **يمسح** أي رسائل لعبة سابقة لتوفير صفحة نظيفة
-**⌨️ إعداد مربع النص:**
+**⌨️ إعداد حقل الإدخال النصي:**
- **يمسح** أي نص موجود في حقل الإدخال
-- **يركز** على مربع النص حتى يتمكن اللاعبون من البدء في الكتابة فورًا
-- **يُجهز** منطقة الإدخال لجلسة اللعبة الجديدة
+- **يضع التركيز** على حقل الإدخال حتى يتمكن اللاعبون من البدء في الكتابة فورًا
+- **يجهز** منطقة الإدخال لجلسة اللعبة الجديدة
**⏱️ تهيئة المؤقت:**
- **يلتقط** الطابع الزمني الحالي باستخدام `new Date().getTime()`
-- **يمكن** من حساب دقيق لسرعة الكتابة ووقت الإكمال
+- **يمكن** حساب دقيق لسرعة الكتابة ووقت الإكمال
- **يبدأ** تتبع الأداء لجلسة اللعبة
### إضافة منطق الكتابة
-هنا نتعامل مع قلب لعبتنا! لا تقلق إذا بدا هذا كثيرًا في البداية - سنمر بكل جزء، وفي النهاية سترى كيف أن كل شيء منطقي.
+هنا حيث نتعامل مع قلب لعبتنا! لا تقلق إذا بدا هذا كثيرًا في البداية - سنمر بكل جزء، وبنهاية الأمر سترى كيف أن كل شيء منطقي.
-ما نبنيه هنا متطور للغاية: في كل مرة يكتب فيها شخص حرفًا، سيقوم الكود الخاص بنا بالتحقق مما كتبه، ويعطيه ملاحظات، ويقرر ما يجب أن يحدث بعد ذلك. إنه مشابه لكيفية تقديم معالجات النصوص المبكرة مثل WordStar في السبعينيات ملاحظات فورية للكتّاب.
+ما نبنيه هنا متقدم جدًا: في كل مرة يكتب فيها شخص حرفًا، سيقوم الكود الخاص بنا بالتحقق مما كتبه، ويعطيه ملاحظات، ويقرر ما يجب أن يحدث بعد ذلك. إنه مشابه لكيفية تقديم برامج معالجة النصوص المبكرة مثل WordStar في السبعينيات ملاحظات فورية للكتّاب.
```javascript
// at the end of script.js
@@ -439,7 +439,7 @@ typedValueElement.addEventListener('input', () => {
**فهم تدفق منطق الكتابة:**
-يستخدم هذا الوظيفة نهج الشلال، حيث يتم التحقق من الشروط من الأكثر تحديدًا إلى الأكثر عمومية. دعونا نفصل كل سيناريو:
+تستخدم هذه الوظيفة نهج الشلال، حيث يتم التحقق من الشروط من الأكثر تحديدًا إلى الأكثر عمومية. لنقسم كل سيناريو:
```mermaid
flowchart TD
@@ -456,7 +456,7 @@ flowchart TD
**🏁 اكتمال الاقتباس (السيناريو 1):**
- **يتحقق** إذا كانت القيمة المكتوبة تطابق الكلمة الحالية ونحن في الكلمة الأخيرة
- **يحسب** الوقت المنقضي بطرح وقت البدء من الوقت الحالي
-- **يحول** الميلي ثانية إلى ثوانٍ عن طريق القسمة على 1,000
+- **يحول** الملي ثانية إلى ثوانٍ عن طريق القسمة على 1,000
- **يعرض** رسالة تهنئة مع وقت الإكمال
**✅ اكتمال الكلمة (السيناريو 2):**
@@ -469,10 +469,10 @@ flowchart TD
**📝 تقدم الكتابة (السيناريو 3):**
- **يتحقق** من أن الكلمة الحالية تبدأ بما تم كتابته حتى الآن
- **يزيل** أي تنسيق خطأ لإظهار أن الإدخال صحيح
-- **يسمح** بمواصلة الكتابة دون انقطاع
+- **يسمح** بالاستمرار في الكتابة دون انقطاع
**❌ حالة الخطأ (السيناريو 4):**
-- **يُشغل** عندما لا يتطابق النص المكتوب مع بداية الكلمة المتوقعة
+- **يتم تشغيله** عندما لا يتطابق النص المكتوب مع بداية الكلمة المتوقعة
- **يطبق** فئة CSS للخطأ لتوفير ملاحظات بصرية فورية
- **يساعد** اللاعبين على تحديد وتصحيح الأخطاء بسرعة
@@ -482,22 +482,22 @@ flowchart TD
الآن يأتي مرحلة الاختبار! هل ستعمل كما هو متوقع؟ هل فاتنا شيء؟ إليك الأمر: إذا لم يعمل شيء بشكل مثالي على الفور، فهذا أمر طبيعي تمامًا. حتى المطورين ذوي الخبرة يجدون أخطاء في الكود الخاص بهم بانتظام. هذا جزء من عملية التطوير!
-انقر على `start`، وابدأ الكتابة! يجب أن يبدو الأمر مشابهًا قليلاً للرسوم المتحركة التي رأيناها من قبل.
+انقر على `start`، وابدأ الكتابة! يجب أن يبدو الأمر مشابهًا للرسوم المتحركة التي رأيناها من قبل.

**ما يجب اختباره في تطبيقك:**
-- **يتحقق** من أن النقر على زر البدء يعرض اقتباسًا عشوائيًا
+- **يتحقق** من أن النقر على Start يعرض اقتباسًا عشوائيًا
- **يؤكد** أن الكتابة تسلط الضوء على الكلمة الحالية بشكل صحيح
- **يتحقق** من ظهور تنسيق الخطأ عند الكتابة غير الصحيحة
-- **يضمن** أن إكمال الكلمات ينقل التسليط بشكل صحيح
+- **يضمن** أن اكتمال الكلمات ينقل التسليط بشكل صحيح
- **يختبر** أن إنهاء الاقتباس يعرض رسالة الإكمال مع التوقيت
**نصائح شائعة لتصحيح الأخطاء:**
- **تحقق** من وحدة التحكم في المتصفح (F12) للحصول على أخطاء JavaScript
- **تأكد** من أن جميع أسماء الملفات تتطابق تمامًا (حساسة لحالة الأحرف)
- **تأكد** من تشغيل Live Server وتحديثه بشكل صحيح
-- **اختبر** اقتباسات مختلفة للتحقق من عمل الاختيار العشوائي
+- **اختبر** اقتباسات مختلفة للتحقق من أن الاختيار العشوائي يعمل
---
@@ -514,21 +514,21 @@ flowchart TD
4. ينفذ عداد سلسلة يزيد الصعوبة بعد 3 أداءات جيدة متتالية
5. يضيف ملاحظات بصرية (ألوان، رسوم متحركة) للإشارة إلى تغييرات الصعوبة
-أضف العناصر اللازمة لـ HTML، أنماط CSS، ووظائف JavaScript لتنفيذ هذه الميزة. قم بتضمين معالجة الأخطاء المناسبة وتأكد من أن اللعبة تظل قابلة للوصول مع تسميات ARIA المناسبة.
+أضف العناصر اللازمة في HTML، أنماط CSS، ووظائف JavaScript لتنفيذ هذه الميزة. قم بتضمين معالجة الأخطاء المناسبة وتأكد من أن اللعبة تظل قابلة للوصول مع تسميات ARIA المناسبة.
تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
## 🚀 التحدي
-هل أنت مستعد لنقل لعبة الكتابة الخاصة بك إلى المستوى التالي؟ حاول تنفيذ هذه الميزات المتقدمة لتعميق فهمك للتعامل مع الأحداث ومعالجة DOM:
+هل أنت مستعد لنقل لعبة الكتابة الخاصة بك إلى المستوى التالي؟ حاول تنفيذ هذه الميزات المتقدمة لتعميق فهمك للتعامل مع الأحداث والتعامل مع DOM:
-**أضف المزيد من الوظائف:**
+**إضافة المزيد من الوظائف:**
| الميزة | الوصف | المهارات التي ستتمرن عليها |
-|--------|-------|----------------------------|
+|--------|-------|-----------------------------|
| **التحكم في الإدخال** | تعطيل مستمع حدث `input` عند الإكمال، وإعادة تمكينه عند النقر على الزر | إدارة الأحداث والتحكم في الحالة |
-| **إدارة حالة واجهة المستخدم** | تعطيل مربع النص عندما يكمل اللاعب الاقتباس | معالجة خصائص DOM |
-| **مربع حوار** | عرض مربع حوار مع رسالة النجاح | أنماط واجهة المستخدم المتقدمة وإمكانية الوصول |
+| **إدارة حالة واجهة المستخدم** | تعطيل حقل الإدخال عندما يكمل اللاعب الاقتباس | التلاعب بخصائص DOM |
+| **مربع حوار مودال** | عرض مربع حوار مودال مع رسالة النجاح | أنماط واجهة المستخدم المتقدمة وإمكانية الوصول |
| **نظام أعلى الدرجات** | تخزين أعلى الدرجات باستخدام `localStorage` | واجهات برمجة التطبيقات لتخزين المتصفح واستمرارية البيانات |
**نصائح التنفيذ:**
@@ -541,15 +541,20 @@ flowchart TD
[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/22)
-## المراجعة والدراسة الذاتية
+---
-اقرأ عن [جميع الأحداث المتاحة](https://developer.mozilla.org/docs/Web/Events) للمطور عبر متصفح الويب، وفكر في السيناريوهات التي قد تستخدم فيها كل منها.
+## 🚀 جدول إتقان لعبة الكتابة الخاصة بك
-## الواجب
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] اختبر لعبة الكتابة الخاصة بك مع اقتباسات مختلفة للتأكد من أنها تعمل بسلاسة
+- [ ] جرب تنسيق CSS - حاول تغيير ألوان التسليط والخطأ
+- [ ] افتح أدوات المطور في المتصفح (F12) وشاهد وحدة التحكم أثناء اللعب
+- [ ] تحدى نفسك لإكمال اقتباس بأسرع وقت ممكن
-[قم بإنشاء لعبة لوحة مفاتيح جديدة](assignment.md)
+### ⏰ **ما يمكنك تحقيقه خلال هذه الساعة**
+- [ ] أضف المزيد من الاقتب
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/5-browser-extension/1-about-browsers/README.md b/translations/ar/5-browser-extension/1-about-browsers/README.md
index 76d6c89259..c7ae8d655f 100644
--- a/translations/ar/5-browser-extension/1-about-browsers/README.md
+++ b/translations/ar/5-browser-extension/1-about-browsers/README.md
@@ -1,14 +1,31 @@
# مشروع إضافة المتصفح الجزء الأول: كل شيء عن المتصفحات
+```mermaid
+journey
+ title Your Browser Extension Development Journey
+ section Foundation
+ Understand browsers: 3: Student
+ Learn extension types: 4: Student
+ Setup development: 4: Student
+ section Development
+ Build interface: 4: Student
+ Add functionality: 5: Student
+ Handle data: 5: Student
+ section Integration
+ Test in browser: 5: Student
+ Debug issues: 4: Student
+ Polish experience: 5: Student
+```
+

> رسم توضيحي بواسطة [وسيم شغام](https://dev.to/wassimchegham/ever-wondered-what-happens-when-you-type-in-a-url-in-an-address-bar-in-a-browser-3dob)
@@ -18,19 +35,49 @@ CO_OP_TRANSLATOR_METADATA:
### المقدمة
-إضافات المتصفح هي تطبيقات صغيرة تعزز تجربة التصفح على الإنترنت. مثل رؤية تيم بيرنرز لي الأصلية للويب التفاعلي، تعمل الإضافات على توسيع قدرات المتصفح إلى ما هو أبعد من مجرد عرض المستندات. من مديري كلمات المرور الذين يحافظون على أمان حساباتك إلى أدوات اختيار الألوان التي تساعد المصممين في اختيار الظلال المثالية، تحل الإضافات تحديات التصفح اليومية.
+إضافات المتصفح هي تطبيقات صغيرة تعزز تجربة التصفح على الإنترنت. مثل رؤية تيم بيرنرز لي الأصلية للويب التفاعلي، تعمل الإضافات على توسيع قدرات المتصفح إلى ما هو أبعد من مجرد عرض المستندات. من مديري كلمات المرور الذين يحافظون على أمان حساباتك إلى أدوات اختيار الألوان التي تساعد المصممين في اختيار الألوان المثالية، تحل الإضافات تحديات التصفح اليومية.
-قبل أن نبني أول إضافة لك، دعنا نفهم كيف تعمل المتصفحات. تمامًا كما احتاج ألكسندر غراهام بيل إلى فهم نقل الصوت قبل اختراع الهاتف، فإن معرفة أساسيات المتصفح ستساعدك في إنشاء إضافات تتكامل بسلاسة مع أنظمة المتصفح الحالية.
+قبل أن نبني أول إضافة لك، دعنا نفهم كيف تعمل المتصفحات. تمامًا كما احتاج ألكسندر غراهام بيل إلى فهم نقل الصوت قبل اختراع الهاتف، فإن معرفة أساسيات المتصفح ستساعدك على إنشاء إضافات تتكامل بسلاسة مع أنظمة المتصفح الحالية.
بنهاية هذه الدرس، ستفهم بنية المتصفح وستبدأ في بناء أول إضافة لك.
+```mermaid
+mindmap
+ root((Browser Architecture))
+ Core Components
+ Rendering Engine
+ JavaScript Engine
+ Network Stack
+ Storage APIs
+ User Interface
+ Address Bar
+ Tab Management
+ Bookmarks
+ Extension Icons
+ Extension System
+ Manifest Files
+ Content Scripts
+ Background Pages
+ Popup Windows
+ Security Model
+ Same-Origin Policy
+ Permissions API
+ Content Security
+ Isolated Worlds
+ Development Tools
+ DevTools Integration
+ Debug Console
+ Performance Monitor
+ Extension Inspector
+```
+
## فهم متصفحات الويب
-المتصفح هو في الأساس مترجم مستندات متقدم. عندما تكتب "google.com" في شريط العنوان، يقوم المتصفح بسلسلة معقدة من العمليات - طلب المحتوى من الخوادم حول العالم، ثم تحليل وعرض هذا الكود إلى صفحات ويب تفاعلية تراها.
+المتصفح هو في الأساس مترجم مستندات متطور. عندما تكتب "google.com" في شريط العنوان، يقوم المتصفح بسلسلة معقدة من العمليات - طلب المحتوى من الخوادم حول العالم، ثم تحليل وعرض هذا الكود إلى صفحات ويب تفاعلية تراها.
-هذه العملية تشبه كيف تم تصميم أول متصفح ويب، WorldWideWeb، بواسطة تيم بيرنرز لي في عام 1990 لجعل المستندات المرتبطة متاحة للجميع.
+هذه العملية تشبه كيفية تصميم أول متصفح ويب، WorldWideWeb، بواسطة تيم بيرنرز لي في عام 1990 لجعل المستندات المرتبطة متاحة للجميع.
-✅ **قليل من التاريخ**: أول متصفح كان يسمى "WorldWideWeb" وتم إنشاؤه بواسطة السير تيموثي بيرنرز لي في عام 1990.
+✅ **قليل من التاريخ**: أول متصفح كان يسمى 'WorldWideWeb' وتم إنشاؤه بواسطة السير تيموثي بيرنرز لي في عام 1990.

> بعض المتصفحات القديمة، عبر [كارين ماكجرين](https://www.slideshare.net/KMcGrane/week-4-ixd-history-personal-computing)
@@ -43,15 +90,21 @@ CO_OP_TRANSLATOR_METADATA:
sequenceDiagram
participant User
participant Browser
+ participant Extension
participant DNS
participant Server
User->>Browser: Types URL and presses Enter
+ Browser->>Extension: Trigger beforeRequest event
+ Extension->>Extension: Check if URL needs modification
Browser->>DNS: Looks up server IP address
DNS->>Browser: Returns IP address
Browser->>Server: Requests web page content
Server->>Browser: Sends HTML, CSS, and JavaScript
+ Browser->>Extension: Trigger beforeResponse event
+ Extension->>Extension: Modify content if needed
Browser->>User: Renders complete web page
+ Extension->>User: Show extension UI updates
```
**ما تحققه هذه العملية:**
@@ -67,7 +120,7 @@ sequenceDiagram
| الميزة | الغرض | فرص الإضافة |
|---------|---------|------------------------|
-| **محرك العرض** | يعرض HTML، CSS، و JavaScript | تعديل المحتوى، حقن الأنماط |
+| **محرك العرض** | يعرض HTML، CSS، وJavaScript | تعديل المحتوى، حقن الأنماط |
| **محرك JavaScript** | ينفذ كود JavaScript | سكربتات مخصصة، تفاعلات API |
| **التخزين المحلي** | يحفظ البيانات محليًا | تفضيلات المستخدم، البيانات المؤقتة |
| **الشبكة** | يتعامل مع طلبات الويب | مراقبة الطلبات، تحليل البيانات |
@@ -75,92 +128,146 @@ sequenceDiagram
**فهم هذه الميزات يساعدك على:**
- **تحديد** أين يمكن لإضافتك أن تضيف أكبر قيمة
-- **اختيار** واجهات برمجة التطبيقات المناسبة لإضافتك
+- **اختيار** واجهات برمجة التطبيقات المناسبة لإضافة المتصفح الخاصة بك
- **تصميم** إضافات تعمل بكفاءة مع أنظمة المتصفح
-- **ضمان** أن إضافتك تتبع أفضل ممارسات أمان المتصفح
+- **ضمان** أن تتبع إضافتك أفضل ممارسات أمان المتصفح
### اعتبارات تطوير الإضافات عبر المتصفحات
-تقوم المتصفحات المختلفة بتنفيذ المعايير مع اختلافات طفيفة، مثل كيفية تعامل لغات البرمجة المختلفة مع نفس الخوارزمية بشكل مختلف. يتمتع Chrome وFirefox وSafari بخصائص فريدة يجب على المطورين أخذها في الاعتبار أثناء تطوير الإضافات.
+تقوم المتصفحات المختلفة بتنفيذ المعايير مع اختلافات طفيفة، مثل كيفية تعامل لغات البرمجة المختلفة مع نفس الخوارزمية بشكل مختلف. Chrome، Firefox، وSafari لديهم خصائص فريدة يجب على المطورين أخذها في الاعتبار أثناء تطوير الإضافات.
-> 💡 **نصيحة احترافية**: استخدم [caniuse.com](https://www.caniuse.com) للتحقق من دعم تقنيات الويب عبر المتصفحات المختلفة. هذا لا يقدر بثمن عند التخطيط لميزات إضافتك!
+> 💡 **نصيحة احترافية**: استخدم [caniuse.com](https://www.caniuse.com) للتحقق من دعم تقنيات الويب عبر المتصفحات المختلفة. هذا مفيد جدًا عند التخطيط لميزات إضافتك!
**الاعتبارات الرئيسية لتطوير الإضافات:**
-- **اختبار** إضافتك عبر متصفحات Chrome وFirefox وEdge
-- **التكيف** مع واجهات برمجة التطبيقات المختلفة للإضافات وتنسيقات الملفات
+- **اختبار** إضافتك عبر متصفحات Chrome، Firefox، وEdge
+- **التكيف** مع واجهات برمجة التطبيقات المختلفة للإضافات وصيغ الملفات
- **التعامل** مع خصائص الأداء المختلفة والقيود
- **توفير** حلول بديلة للميزات الخاصة بالمتصفح التي قد لا تكون متاحة
-✅ **رؤية تحليلية**: يمكنك تحديد المتصفحات التي يفضلها المستخدمون لديك من خلال تثبيت حزم التحليل في مشاريع تطوير الويب الخاصة بك. تساعدك هذه البيانات على تحديد أولويات المتصفحات التي يجب دعمها أولاً.
+✅ **رؤية تحليلية**: يمكنك تحديد المتصفحات التي يفضلها المستخدمون لديك عن طريق تثبيت حزم التحليل في مشاريع تطوير الويب الخاصة بك. تساعدك هذه البيانات في تحديد أولويات المتصفحات التي يجب دعمها أولاً.
## فهم إضافات المتصفح
تحل إضافات المتصفح تحديات التصفح الشائعة من خلال إضافة وظائف مباشرة إلى واجهة المتصفح. بدلاً من الحاجة إلى تطبيقات منفصلة أو سير عمل معقد، توفر الإضافات وصولاً فوريًا إلى الأدوات والميزات.
-هذا المفهوم يشبه كيف تصور رواد الحوسبة الأوائل مثل دوغلاس إنجلبارت تعزيز القدرات البشرية بالتكنولوجيا - الإضافات تعزز الوظائف الأساسية للمتصفح.
+هذا المفهوم يعكس كيف تصور رواد الحوسبة الأوائل مثل دوغلاس إنجلبارت تعزيز القدرات البشرية بالتكنولوجيا - الإضافات تعزز الوظائف الأساسية للمتصفح.
+
+```mermaid
+quadrantChart
+ title Browser Extension Categories
+ x-axis Simple --> Complex
+ y-axis Personal Use --> Professional Tools
+ quadrant-1 Developer Tools
+ quadrant-2 Enterprise Solutions
+ quadrant-3 Personal Utilities
+ quadrant-4 Productivity Apps
+
+ Ad Blockers: [0.3, 0.2]
+ Password Managers: [0.7, 0.3]
+ Color Pickers: [0.4, 0.8]
+ Code Formatters: [0.8, 0.9]
+ Note Taking: [0.6, 0.5]
+ Video Downloaders: [0.5, 0.2]
+ Time Trackers: [0.7, 0.6]
+ Screenshot Tools: [0.4, 0.4]
+```
**فئات الإضافات الشائعة وفوائدها:**
- **أدوات الإنتاجية**: مديري المهام، تطبيقات تدوين الملاحظات، ومتعقبي الوقت التي تساعدك على التنظيم
-- **تحسينات الأمان**: مديري كلمات المرور، حاصرات الإعلانات، وأدوات الخصوصية التي تحمي بياناتك
-- **أدوات المطورين**: أدوات تنسيق الكود، أدوات اختيار الألوان، وأدوات التصحيح التي تبسط التطوير
-- **تحسين المحتوى**: أوضاع القراءة، أدوات تنزيل الفيديو، وأدوات التقاط الشاشة التي تحسن تجربتك على الويب
-
-✅ **سؤال للتفكير**: ما هي إضافات المتصفح المفضلة لديك؟ ما هي المهام المحددة التي تؤديها، وكيف تحسن تجربتك في التصفح؟
+- **تعزيزات الأمان**: مديري كلمات المرور، حاصرات الإعلانات، وأدوات الخصوصية التي تحمي بياناتك
+- **أدوات المطورين**: منسقي الأكواد، أدوات اختيار الألوان، وأدوات تصحيح الأخطاء التي تسهل التطوير
+- **تحسين المحتوى**: أوضاع القراءة، أدوات تنزيل الفيديو، وأدوات التقاط الشاشة التي تحسن تجربة الويب الخاصة بك
+
+✅ **سؤال للتفكير**: ما هي إضافات المتصفح المفضلة لديك؟ ما هي المهام المحددة التي تؤديها، وكيف تحسن تجربة التصفح الخاصة بك؟
+
+### 🔄 **تقييم تربوي**
+**فهم بنية المتصفح**: قبل الانتقال إلى تطوير الإضافات، تأكد من أنك تستطيع:
+- ✅ شرح كيفية معالجة المتصفحات لطلبات الويب وعرض المحتوى
+- ✅ تحديد المكونات الرئيسية لبنية المتصفح
+- ✅ فهم كيفية تكامل الإضافات مع وظائف المتصفح
+- ✅ التعرف على نموذج الأمان الذي يحمي المستخدمين
+
+**اختبار ذاتي سريع**: هل يمكنك تتبع المسار من كتابة عنوان URL إلى رؤية صفحة ويب؟
+1. **البحث في DNS** يحول عنوان URL إلى عنوان IP
+2. **طلب HTTP** يجلب المحتوى من الخادم
+3. **التحليل** يعالج HTML، CSS، وJavaScript
+4. **العرض** يظهر صفحة الويب النهائية
+5. **الإضافات** يمكنها تعديل المحتوى في عدة خطوات
## تثبيت وإدارة الإضافات
فهم عملية تثبيت الإضافات يساعدك على توقع تجربة المستخدم عندما يقوم الأشخاص بتثبيت إضافتك. عملية التثبيت موحدة عبر المتصفحات الحديثة، مع اختلافات طفيفة في تصميم الواجهة.
-
+
+
+> **هام**: تأكد من تفعيل وضع المطور والسماح بالإضافات من المتاجر الأخرى عند اختبار إضافاتك الخاصة.
-> **مهم**: تأكد من تفعيل وضع المطور والسماح بالإضافات من المتاجر الأخرى عند اختبار إضافاتك الخاصة.
+### عملية تثبيت الإضافات أثناء التطوير
-### عملية تثبيت إضافات التطوير
+عند تطوير واختبار إضافاتك الخاصة، اتبع هذا سير العمل:
-عندما تقوم بتطوير واختبار إضافاتك الخاصة، اتبع هذا سير العمل:
+```mermaid
+flowchart TD
+ A[Write Code] --> B[Build Extension]
+ B --> C{First Install?}
+ C -->|Yes| D[Load Unpacked]
+ C -->|No| E[Reload Extension]
+ D --> F[Test Functionality]
+ E --> F
+ F --> G{Working Correctly?}
+ G -->|No| H[Debug Issues]
+ G -->|Yes| I[Ready for Users]
+ H --> A
+ I --> J[Publish to Store]
+
+ style A fill:#e1f5fe
+ style F fill:#e8f5e8
+ style I fill:#f3e5f5
+ style J fill:#fff3e0
+```
```bash
# Step 1: Build your extension
npm run build
```
-**ما يحققه هذا الأمر:**
-- **يجمع** كود المصدر الخاص بك إلى ملفات جاهزة للمتصفح
-- **يجمع** وحدات JavaScript في حزم محسنة
-- **ينشئ** ملفات الإضافة النهائية في مجلد `/dist`
-- **يجهز** إضافتك للتثبيت والاختبار
+**ما تحققه هذه الأوامر:**
+- **تجميع** الكود المصدري إلى ملفات جاهزة للمتصفح
+- **تجميع** وحدات JavaScript في حزم محسنة
+- **إنشاء** ملفات الإضافة النهائية في مجلد `/dist`
+- **تحضير** إضافتك للتثبيت والاختبار
-**الخطوة 2: الانتقال إلى إضافات المتصفح**
+**الخطوة 2: الانتقال إلى إدارة إضافات المتصفح**
1. **افتح** صفحة إدارة الإضافات في متصفحك
2. **انقر** على زر "الإعدادات والمزيد" (رمز `...`) في الزاوية العلوية اليمنى
3. **اختر** "الإضافات" من القائمة المنسدلة
**الخطوة 3: تحميل إضافتك**
-- **للتثبيت الجديد**: اختر `load unpacked` وحدد مجلد `/dist` الخاص بك
+- **للتثبيت الجديد**: اختر `load unpacked` وحدد مجلد `/dist`
- **للتحديثات**: انقر على `reload` بجانب الإضافة المثبتة بالفعل
-- **للاختبار**: قم بتفعيل "وضع المطور" للوصول إلى ميزات التصحيح الإضافية
+- **للاختبار**: قم بتفعيل "وضع المطور" للوصول إلى ميزات تصحيح إضافية
-### تثبيت الإضافات للإنتاج
+### تثبيت الإضافات في الإنتاج
-> ✅ **ملاحظة**: هذه التعليمات الخاصة بالتطوير مخصصة للإضافات التي تقوم ببنائها بنفسك. لتثبيت الإضافات المنشورة، قم بزيارة المتاجر الرسمية لإضافات المتصفح مثل [متجر إضافات Microsoft Edge](https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home).
+> ✅ **ملاحظة**: هذه التعليمات الخاصة بالتطوير مخصصة للإضافات التي تقوم ببنائها بنفسك. لتثبيت الإضافات المنشورة، قم بزيارة متاجر إضافات المتصفح الرسمية مثل [متجر إضافات Microsoft Edge](https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home).
**فهم الفرق:**
- **تثبيت التطوير** يسمح لك باختبار الإضافات غير المنشورة أثناء التطوير
- **تثبيت المتجر** يوفر إضافات منشورة ومراجعة مع تحديثات تلقائية
-- **التثبيت الجانبي** يسمح بتثبيت الإضافات من خارج المتاجر الرسمية (يتطلب وضع المطور)
+- **التثبيت اليدوي** يسمح بتثبيت الإضافات من خارج المتاجر الرسمية (يتطلب وضع المطور)
-## بناء إضافة بصمة الكربون الخاصة بك
+## بناء إضافة بصمة الكربون
سنقوم بإنشاء إضافة متصفح تعرض بصمة الكربون لاستخدام الطاقة في منطقتك. يوضح هذا المشروع مفاهيم تطوير الإضافات الأساسية أثناء إنشاء أداة عملية لزيادة الوعي البيئي.
-يتبع هذا النهج مبدأ "التعلم من خلال العمل" الذي أثبت فعاليته منذ نظريات التعليم لجون ديوي - الجمع بين المهارات التقنية والتطبيقات الواقعية ذات المعنى.
+يتبع هذا النهج مبدأ "التعلم من خلال العمل" الذي أثبت فعاليته منذ نظريات التعليم لجون ديوي - الجمع بين المهارات التقنية والتطبيقات الواقعية ذات المغزى.
### متطلبات المشروع
قبل بدء التطوير، دعنا نجمع الموارد والاعتماديات المطلوبة:
**الوصول إلى واجهات برمجة التطبيقات المطلوبة:**
-- **[مفتاح API لإشارة CO2](https://www.co2signal.com/)**: أدخل عنوان بريدك الإلكتروني للحصول على مفتاح API مجاني
+- **[مفتاح API لـ CO2 Signal](https://www.co2signal.com/)**: أدخل عنوان بريدك الإلكتروني للحصول على مفتاح API مجاني
- **[رمز المنطقة](http://api.electricitymap.org/v3/zones)**: ابحث عن رمز منطقتك باستخدام [خريطة الكهرباء](https://www.electricitymap.org/map) (على سبيل المثال، تستخدم بوسطن 'US-NEISO')
**أدوات التطوير:**
@@ -171,7 +278,7 @@ npm run build
### فهم هيكل المشروع
-فهم هيكل المشروع يساعد على تنظيم العمل التطويري بكفاءة. مثل كيفية تنظيم مكتبة الإسكندرية لاسترجاع المعرفة بسهولة، فإن قاعدة كود منظمة جيدًا تجعل التطوير أكثر كفاءة:
+فهم هيكل المشروع يساعد في تنظيم العمل التطويري بكفاءة. مثل كيفية تنظيم مكتبة الإسكندرية لاسترجاع المعرفة بسهولة، فإن قاعدة الكود المنظمة جيدًا تجعل التطوير أكثر كفاءة:
```
project-root/
@@ -180,12 +287,14 @@ project-root/
│ ├── index.html # User interface markup
│ ├── background.js # Background script functionality
│ └── main.js # Compiled JavaScript bundle
-└── src/ # Source development files
- └── index.js # Your main JavaScript code
+├── src/ # Source development files
+│ └── index.js # Your main JavaScript code
+├── package.json # Project dependencies and scripts
+└── webpack.config.js # Build configuration
```
**تفصيل ما يحققه كل ملف:**
-- **`manifest.json`**: **يحدد** بيانات التعريف للإضافة، الأذونات، ونقاط الدخول
+- **`manifest.json`**: **يحدد** بيانات الإضافة، الأذونات، ونقاط الدخول
- **`index.html`**: **ينشئ** واجهة المستخدم التي تظهر عند نقر المستخدمين على الإضافة
- **`background.js`**: **يتعامل** مع المهام الخلفية ومستمعي أحداث المتصفح
- **`main.js`**: **يحتوي** على كود JavaScript النهائي بعد عملية البناء
@@ -193,13 +302,13 @@ project-root/
> 💡 **نصيحة تنظيمية**: قم بتخزين مفتاح API ورمز المنطقة في ملاحظة آمنة للرجوع إليها بسهولة أثناء التطوير. ستحتاج إلى هذه القيم لاختبار وظائف الإضافة.
-✅ **ملاحظة أمان**: لا تقم أبدًا بإضافة مفاتيح API أو بيانات اعتماد حساسة إلى مستودع الكود الخاص بك. سنوضح لك كيفية التعامل مع هذه الأمور بأمان في الخطوات التالية.
+✅ **ملاحظة أمنية**: لا تقم أبدًا بإضافة مفاتيح API أو بيانات اعتماد حساسة إلى مستودع الكود الخاص بك. سنوضح لك كيفية التعامل مع هذه الأمور بأمان في الخطوات التالية.
## إنشاء واجهة الإضافة
-الآن سنقوم ببناء مكونات واجهة المستخدم. تستخدم الإضافة نهج الشاشتين: شاشة الإعداد للتكوين الأولي وشاشة النتائج لعرض البيانات.
+الآن سنقوم ببناء مكونات واجهة المستخدم. تستخدم الإضافة نهج الشاشة الثنائية: شاشة الإعداد للتكوين الأولي وشاشة النتائج لعرض البيانات.
-يتبع هذا مبدأ الكشف التدريجي المستخدم في تصميم الواجهات منذ الأيام الأولى للحوسبة - الكشف عن المعلومات والخيارات بتسلسل منطقي لتجنب إرباك المستخدمين.
+يتبع هذا مبدأ الكشف التدريجي المستخدم في تصميم الواجهات منذ الأيام الأولى للحوسبة - الكشف عن المعلومات والخيارات بترتيب منطقي لتجنب إرباك المستخدمين.
### نظرة عامة على شاشات الإضافة
@@ -207,11 +316,11 @@ project-root/

**شاشة النتائج** - عرض بيانات بصمة الكربون:
-
+
### بناء نموذج التكوين
-يجمع نموذج الإعداد بيانات تكوين المستخدم أثناء الاستخدام الأولي. بمجرد التكوين، يتم الاحتفاظ بهذه المعلومات في تخزين المتصفح للجلسات المستقبلية.
+يجمع نموذج الإعداد بيانات تكوين المستخدم أثناء الاستخدام الأول. بمجرد التكوين، تبقى هذه المعلومات في تخزين المتصفح للجلسات المستقبلية.
في ملف `/dist/index.html`، أضف هيكل النموذج التالي:
@@ -233,15 +342,15 @@ project-root/
```
**ما يحققه هذا النموذج:**
-- **ينشئ** هيكل نموذج دلالي مع تسميات ومدخلات مناسبة
-- **يمكن** وظيفة الإكمال التلقائي للمتصفح لتحسين تجربة المستخدم
-- **يتطلب** ملء كلا الحقلين قبل الإرسال باستخدام خاصية `required`
-- **ينظم** المدخلات بأسماء صفوص وصفية لتسهيل التصميم واستهداف JavaScript
-- **يوفر** تعليمات واضحة للمستخدمين الذين يقومون بإعداد الإضافة لأول مرة
+- **إنشاء** هيكل نموذج دلالي مع تسميات ومدخلات مناسبة
+- **تمكين** وظيفة الإكمال التلقائي للمتصفح لتحسين تجربة المستخدم
+- **طلب** ملء كلا الحقلين قبل الإرسال باستخدام خاصية `required`
+- **تنظيم** المدخلات بأسماء فئات وصفية لتسهيل التخصيص والاستهداف باستخدام JavaScript
+- **توفير** تعليمات واضحة للمستخدمين الذين يقومون بإعداد الإضافة لأول مرة
### بناء عرض النتائج
-بعد ذلك، قم بإنشاء منطقة النتائج التي ستعرض بيانات بصمة الكربون. أضف هذا الكود HTML أسفل النموذج:
+بعد ذلك، قم بإنشاء منطقة النتائج التي ستعرض بيانات بصمة الكربون. أضف هذا HTML أسفل النموذج:
```html
@@ -259,14 +368,14 @@ project-root/
**تفصيل ما يوفره هذا الهيكل:**
- **`loading`**: **يعرض** رسالة تحميل أثناء جلب بيانات API
-- **`errors`**: **يعرض** رسائل خطأ إذا فشلت طلبات API أو كانت البيانات غير صالحة
+- **`errors`**: **يعرض** رسائل خطأ إذا فشلت مكالمات API أو كانت البيانات غير صالحة
- **`data`**: **يحتوي** على بيانات خام لأغراض التصحيح أثناء التطوير
- **`result-container`**: **يقدم** معلومات بصمة الكربون بشكل منسق للمستخدمين
- **`clear-btn`**: **يسمح** للمستخدمين بتغيير منطقتهم وإعادة تكوين الإضافة
### إعداد عملية البناء
-الآن دعونا نقوم بتثبيت اعتماديات المشروع واختبار عملية البناء:
+الآن دعنا نقوم بتثبيت اعتماديات المشروع واختبار عملية البناء:
```bash
npm install
@@ -275,60 +384,176 @@ npm install
**ما تحققه عملية التثبيت هذه:**
- **تنزيل** Webpack واعتماديات التطوير الأخرى المحددة في `package.json`
- **تكوين** سلسلة أدوات البناء لتجميع JavaScript الحديث
-- **إعداد** بيئة التطوير لبناء واختبار الإضافات
+- **تحضير** بيئة التطوير لبناء الإضافات واختبارها
- **تمكين** تجميع الكود، التحسين، وميزات التوافق عبر المتصفحات
-> 💡 **رؤية عملية البناء**: يقوم Webpack بتجميع كود المصدر الخاص بك من `/src/index.js` إلى `/dist/main.js`. تعمل هذه العملية على تحسين الكود للإنتاج وتضمن توافق المتصفح.
+> 💡 **رؤية حول عملية البناء**: يقوم Webpack بتجميع الكود المصدري الخاص بك من `/src/index.js` إلى `/dist/main.js`. هذه العملية تحسن الكود الخاص بك للإنتاج وتضمن توافق المتصفح.
### اختبار تقدمك
-في هذه المرحلة، يمكنك اختبار إضافتك:
+في هذه المرحلة، يمكنك اختبار الإضافة الخاصة بك:
+1. **قم بتشغيل** أمر البناء لتجميع الكود الخاص بك
+2. **قم بتحميل** الامتداد في متصفحك باستخدام وضع المطور
+3. **تحقق** من أن النموذج يظهر بشكل صحيح ويبدو احترافيًا
+4. **افحص** أن جميع عناصر النموذج متناسقة وتعمل بشكل جيد
-1. **قم بتشغيل** أمر البناء لتجميع الكود الخاص بك
-2. **قم بتحميل** الإضافة إلى متصفحك باستخدام وضع المطور
-3. **تحقق** من أن النموذج يظهر بشكل صحيح ويبدو احترافيًا
-4. **افحص** أن جميع عناصر النموذج مصفوفة بشكل صحيح وتعمل
+**ما الذي أنجزته:**
+- **بنيت** الهيكل الأساسي لـ HTML الخاص بامتدادك
+- **أنشأت** واجهات التكوين والنتائج باستخدام علامات دلالية صحيحة
+- **أعددت** سير عمل تطوير حديث باستخدام أدوات قياسية في الصناعة
+- **جهزت** الأساس لإضافة وظائف JavaScript التفاعلية
-**ما أنجزته:**
-- **بنيت** الهيكل الأساسي لـ HTML لإضافتك
-- **أنشأت** واجهات التكوين والنتائج مع ترميز دلالي مناسب
-- **أعددت** سير عمل تطوير حديث باستخدام أدوات قياسية في الصناعة
-- **جهزت** الأساس لإضافة وظائف JavaScript التفاعلية
+### 🔄 **مراجعة تعليمية**
+**تقدم تطوير الامتداد**: تحقق من فهمك قبل المتابعة:
+- ✅ هل يمكنك شرح الغرض من كل ملف في هيكل المشروع؟
+- ✅ هل تفهم كيف يحول عملية البناء الكود المصدر الخاص بك؟
+- ✅ لماذا نفصل بين التكوين والنتائج في أقسام واجهة مستخدم مختلفة؟
+- ✅ كيف يدعم هيكل النموذج سهولة الاستخدام وإمكانية الوصول؟
-لقد أكملت المرحلة الأولى من تطوير إضافات المتصفح. مثلما احتاج الأخوان رايت إلى فهم الديناميكا الهوائية قبل تحقيق الطيران، فإن فهم هذه المفاهيم الأساسية يجهزك لبناء ميزات تفاعلية أكثر تعقيدًا في الدرس التالي.
+**فهم سير العمل التطويري**: يجب أن تكون الآن قادرًا على:
+1. **تعديل** HTML وCSS لواجهة امتدادك
+2. **تشغيل** أمر البناء لتجميع التعديلات
+3. **إعادة تحميل** الامتداد في متصفحك لاختبار التحديثات
+4. **تصحيح الأخطاء** باستخدام أدوات المطور في المتصفح
-## تحدي وكيل GitHub Copilot 🚀
+لقد أكملت المرحلة الأولى من تطوير امتداد المتصفح. كما احتاج الأخوان رايت لفهم الديناميكا الهوائية قبل تحقيق الطيران، فإن فهم هذه المفاهيم الأساسية يجهزك لبناء ميزات تفاعلية أكثر تعقيدًا في الدرس التالي.
-استخدم وضع الوكيل لإكمال التحدي التالي:
-**الوصف:** تحسين امتداد المتصفح عن طريق إضافة ميزات التحقق من صحة النماذج وتقديم ملاحظات للمستخدم لتحسين تجربة المستخدم عند إدخال مفاتيح API وأكواد المناطق.
+## تحدي وكيل GitHub Copilot 🚀
-**المهمة:** قم بإنشاء وظائف تحقق في JavaScript للتحقق مما إذا كان حقل مفتاح API يحتوي على 20 حرفًا على الأقل وإذا كان رمز المنطقة يتبع التنسيق الصحيح (مثل 'US-NEISO'). أضف ملاحظات مرئية عن طريق تغيير ألوان حدود الإدخال إلى الأخضر للإدخالات الصحيحة والأحمر للإدخالات غير الصحيحة. كما أضف ميزة تبديل لعرض/إخفاء مفتاح API لأغراض الأمان.
+استخدم وضع الوكيل لإكمال التحدي التالي:
-تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
+**الوصف:** قم بتحسين امتداد المتصفح عن طريق إضافة ميزات التحقق من صحة النموذج وردود فعل المستخدم لتحسين تجربة المستخدم عند إدخال مفاتيح API ورموز المناطق.
-## 🚀 التحدي
+**المهمة:** قم بإنشاء وظائف تحقق في JavaScript للتحقق من أن حقل مفتاح API يحتوي على 20 حرفًا على الأقل وأن رمز المنطقة يتبع التنسيق الصحيح (مثل 'US-NEISO'). أضف ردود فعل مرئية عن طريق تغيير ألوان حدود الإدخال إلى الأخضر للإدخالات الصحيحة والأحمر للإدخالات غير الصحيحة. أضف أيضًا ميزة تبديل لإظهار/إخفاء مفتاح API لأغراض الأمان.
-قم بإلقاء نظرة على متجر امتدادات المتصفح وقم بتثبيت أحد الامتدادات على متصفحك. يمكنك فحص ملفاته بطرق مثيرة للاهتمام. ماذا تكتشف؟
+تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
-## اختبار ما بعد المحاضرة
+## 🚀 التحدي
-[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/24)
+قم بإلقاء نظرة على متجر امتدادات المتصفح وقم بتثبيت واحد في متصفحك. يمكنك فحص ملفاته بطرق مثيرة للاهتمام. ماذا تكتشف؟
-## المراجعة والدراسة الذاتية
+## اختبار ما بعد المحاضرة
-في هذا الدرس تعلمت قليلاً عن تاريخ متصفح الويب؛ اغتنم هذه الفرصة لتتعرف على كيفية تصور مخترعي الشبكة العالمية لاستخدامها من خلال قراءة المزيد عن تاريخها. بعض المواقع المفيدة تشمل:
+[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/24)
+
+## المراجعة والدراسة الذاتية
+
+في هذا الدرس تعلمت قليلاً عن تاريخ متصفح الويب؛ اغتنم هذه الفرصة لتتعرف على كيفية تصور مخترعي الشبكة العالمية لاستخدامها من خلال قراءة المزيد عن تاريخها. بعض المواقع المفيدة تشمل:
+
+[تاريخ متصفحات الويب](https://www.mozilla.org/firefox/browsers/browser-history/)
+
+[تاريخ الشبكة](https://webfoundation.org/about/vision/history-of-the-web/)
+
+[مقابلة مع تيم بيرنرز لي](https://www.theguardian.com/technology/2019/mar/12/tim-berners-lee-on-30-years-of-the-web-if-we-dream-a-little-we-can-get-the-web-we-want)
+
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] افتح صفحة امتدادات Chrome/Edge (chrome://extensions) واستكشف ما لديك مثبت
+- [ ] انظر إلى علامة الشبكة في أدوات المطور في المتصفح أثناء تحميل صفحة ويب
+- [ ] حاول عرض مصدر الصفحة (Ctrl+U) لرؤية هيكل HTML
+- [ ] افحص أي عنصر في صفحة ويب وعدل CSS الخاص به في أدوات المطور
+
+### 🎯 **ما يمكنك إنجازه خلال الساعة**
+- [ ] أكمل اختبار ما بعد الدرس وافهم أساسيات المتصفح
+- [ ] أنشئ ملف manifest.json أساسي لامتداد المتصفح
+- [ ] قم ببناء امتداد بسيط "Hello World" يظهر نافذة منبثقة
+- [ ] اختبر تحميل امتدادك في وضع المطور
+- [ ] استكشف وثائق امتدادات المتصفح للمتصفح المستهدف
+
+### 📅 **رحلة تطوير الامتداد الخاصة بك لمدة أسبوع**
+- [ ] أكمل امتداد متصفح وظيفي ذو فائدة حقيقية
+- [ ] تعلم عن نصوص المحتوى، والنصوص الخلفية، وتفاعلات النوافذ المنبثقة
+- [ ] أتقن واجهات برمجة التطبيقات الخاصة بالمتصفح مثل التخزين، وعلامات التبويب، والرسائل
+- [ ] صمم واجهات مستخدم سهلة الاستخدام لامتدادك
+- [ ] اختبر امتدادك عبر مواقع وسيناريوهات مختلفة
+- [ ] انشر امتدادك في متجر امتدادات المتصفح
+
+### 🌟 **رحلة تطوير المتصفح الخاصة بك لمدة شهر**
+- [ ] قم ببناء امتدادات متعددة تحل مشاكل المستخدمين المختلفة
+- [ ] تعلم واجهات برمجة التطبيقات المتقدمة وأفضل ممارسات الأمان
+- [ ] ساهم في مشاريع امتدادات المتصفح مفتوحة المصدر
+- [ ] أتقن التوافق عبر المتصفحات والتحسين التدريجي
+- [ ] أنشئ أدوات تطوير الامتدادات وقوالب للآخرين
+- [ ] كن خبيرًا في امتدادات المتصفح يساعد المطورين الآخرين
+
+## 🎯 جدول زمني لإتقان امتدادات المتصفح
+
+```mermaid
+timeline
+ title Browser Extension Development Progression
+
+ section Foundation (15 minutes)
+ Browser Understanding: Core architecture
+ : Rendering process
+ : Extension integration points
+
+ section Setup (20 minutes)
+ Development Environment: Project structure
+ : Build tools configuration
+ : Browser developer mode
+ : Extension loading process
+
+ section Interface Design (25 minutes)
+ User Experience: HTML structure
+ : CSS styling
+ : Form validation
+ : Responsive design
+
+ section Core Functionality (35 minutes)
+ JavaScript Integration: Event handling
+ : API interactions
+ : Data storage
+ : Error handling
+
+ section Browser APIs (45 minutes)
+ Platform Integration: Permissions system
+ : Storage APIs
+ : Tab management
+ : Context menus
+
+ section Advanced Features (1 week)
+ Professional Extensions: Background scripts
+ : Content scripts
+ : Cross-browser compatibility
+ : Performance optimization
+
+ section Publishing (2 weeks)
+ Distribution: Store submission
+ : Review process
+ : User feedback
+ : Update management
+
+ section Expert Level (1 month)
+ Extension Ecosystem: Advanced APIs
+ : Security best practices
+ : Enterprise features
+ : Framework integration
+```
+
+### 🛠️ ملخص أدوات تطوير الامتداد الخاصة بك
-[تاريخ متصفحات الويب](https://www.mozilla.org/firefox/browsers/browser-history/)
+بعد إكمال هذا الدرس، لديك الآن:
+- **معرفة بنية المتصفح**: فهم محركات العرض، نماذج الأمان، وتكامل الامتدادات
+- **بيئة تطوير**: سلسلة أدوات حديثة مع Webpack، NPM، وإمكانيات التصحيح
+- **أساسيات واجهة المستخدم/تجربة المستخدم**: هيكل HTML دلالي مع أنماط الكشف التدريجي
+- **وعي أمني**: فهم أذونات المتصفح وممارسات التطوير الآمن
+- **مفاهيم عبر المتصفحات**: معرفة اعتبارات التوافق ونهج الاختبار
+- **تكامل API**: أساس للعمل مع مصادر البيانات الخارجية
+- **سير عمل احترافي**: إجراءات تطوير واختبار قياسية في الصناعة
-[تاريخ الشبكة العالمية](https://webfoundation.org/about/vision/history-of-the-web/)
+**تطبيقات العالم الحقيقي**: هذه المهارات تنطبق مباشرة على:
+- **تطوير الويب**: تطبيقات الصفحة الواحدة وتطبيقات الويب التقدمية
+- **تطبيقات سطح المكتب**: برامج سطح المكتب المستندة إلى الويب وElectron
+- **تطوير الجوال**: التطبيقات الهجينة وحلول الجوال المستندة إلى الويب
+- **أدوات المؤسسات**: تطبيقات الإنتاجية الداخلية وأتمتة سير العمل
+- **المصادر المفتوحة**: المساهمة في مشاريع امتدادات المتصفح ومعايير الويب
-[مقابلة مع تيم بيرنرز-لي](https://www.theguardian.com/technology/2019/mar/12/tim-berners-lee-on-30-years-of-the-web-if-we-dream-a-little-we-can-get-the-web-we-want)
+**المستوى التالي**: أنت جاهز لإضافة وظائف تفاعلية، العمل مع واجهات برمجة التطبيقات الخاصة بالمتصفح، وإنشاء امتدادات تحل مشاكل المستخدمين الحقيقية!
-## الواجب
+## المهمة
-[أعد تصميم امتدادك](assignment.md)
+[أعد تصميم امتدادك](assignment.md)
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/5-browser-extension/2-forms-browsers-local-storage/README.md b/translations/ar/5-browser-extension/2-forms-browsers-local-storage/README.md
index f5283b56e1..169dea464e 100644
--- a/translations/ar/5-browser-extension/2-forms-browsers-local-storage/README.md
+++ b/translations/ar/5-browser-extension/2-forms-browsers-local-storage/README.md
@@ -1,13 +1,30 @@
-# مشروع إضافة المتصفح الجزء الثاني: استدعاء API واستخدام التخزين المحلي
+# مشروع إضافة المتصفح الجزء الثاني: الاتصال بـ API واستخدام التخزين المحلي
+
+```mermaid
+journey
+ title Your API Integration & Storage Journey
+ section Foundation
+ Setup DOM references: 3: Student
+ Add event listeners: 4: Student
+ Handle form submission: 4: Student
+ section Data Management
+ Implement local storage: 4: Student
+ Build API calls: 5: Student
+ Handle async operations: 5: Student
+ section User Experience
+ Add error handling: 5: Student
+ Create loading states: 4: Student
+ Polish interactions: 5: Student
+```
## اختبار ما قبل المحاضرة
@@ -15,21 +32,78 @@ CO_OP_TRANSLATOR_METADATA:
## المقدمة
-هل تتذكر إضافة المتصفح التي بدأت في بنائها؟ في الوقت الحالي لديك نموذج جميل المظهر، لكنه ثابت إلى حد كبير. اليوم سنجعلها تنبض بالحياة من خلال ربطها ببيانات حقيقية ومنحها ذاكرة.
-
-فكر في أجهزة التحكم في مهمة أبولو - لم تكن تعرض معلومات ثابتة فقط. بل كانت تتواصل باستمرار مع المركبة الفضائية، وتُحدث البيانات التليمترية، وتحتفظ بمعايير المهمة الحرجة. هذا هو النوع الديناميكي من السلوك الذي سنبنيه اليوم. ستتمكن إضافتك من الوصول إلى الإنترنت، وجلب بيانات بيئية حقيقية، وتذكر إعداداتك للمرة القادمة.
-
-قد يبدو دمج API معقدًا، لكنه في الحقيقة مجرد تعليم الكود كيفية التواصل مع خدمات أخرى. سواء كنت تستخرج بيانات الطقس، أو خلاصات وسائل التواصل الاجتماعي، أو معلومات البصمة الكربونية كما سنفعل اليوم، الأمر كله يتعلق بإنشاء هذه الروابط الرقمية. سنستكشف أيضًا كيف يمكن للمتصفحات الاحتفاظ بالمعلومات - مثلما استخدمت المكتبات فهارس البطاقات لتذكر أماكن الكتب.
-
-بنهاية هذا الدرس، ستكون لديك إضافة متصفح تجلب بيانات حقيقية، تخزن تفضيلات المستخدم، وتوفر تجربة سلسة. لنبدأ!
+هل تتذكر إضافة المتصفح التي بدأت في بنائها؟ في الوقت الحالي لديك نموذج جميل المظهر، لكنه في الأساس ثابت. اليوم سنجعلها تنبض بالحياة من خلال الاتصال ببيانات حقيقية ومنحها ذاكرة.
+
+فكر في أجهزة الكمبيوتر الخاصة بمهمة أبولو - لم تكن تعرض معلومات ثابتة فقط. بل كانت تتواصل باستمرار مع المركبة الفضائية، وتُحدث البيانات التليمترية، وتحتفظ بمعايير المهمة الحرجة. هذا هو نوع السلوك الديناميكي الذي نبنيه اليوم. ستقوم الإضافة الخاصة بك بالاتصال بالإنترنت، وجلب بيانات بيئية حقيقية، وتذكر إعداداتك للمرة القادمة.
+
+قد يبدو تكامل API معقدًا، لكنه في الحقيقة مجرد تعليم الكود الخاص بك كيفية التواصل مع الخدمات الأخرى. سواء كنت تجلب بيانات الطقس، أو خلاصات وسائل التواصل الاجتماعي، أو معلومات البصمة الكربونية كما سنفعل اليوم، فإن الأمر كله يتعلق بإنشاء هذه الروابط الرقمية. سنستكشف أيضًا كيف يمكن للمتصفحات الاحتفاظ بالمعلومات - مثلما استخدمت المكتبات بطاقات الفهرسة لتذكر مكان الكتب.
+
+بنهاية هذا الدرس، سيكون لديك إضافة متصفح تجلب بيانات حقيقية، تخزن تفضيلات المستخدم، وتوفر تجربة سلسة. لنبدأ!
+
+```mermaid
+mindmap
+ root((Dynamic Extensions))
+ DOM Manipulation
+ Element Selection
+ Event Handling
+ State Management
+ UI Updates
+ Local Storage
+ Data Persistence
+ Key-Value Pairs
+ Session Management
+ User Preferences
+ API Integration
+ HTTP Requests
+ Authentication
+ Data Parsing
+ Error Handling
+ Async Programming
+ Promises
+ Async/Await
+ Error Catching
+ Non-blocking Code
+ User Experience
+ Loading States
+ Error Messages
+ Smooth Transitions
+ Data Validation
+```
-✅ اتبع الأجزاء المرقمة في الملفات المناسبة لمعرفة أين تضع الكود الخاص بك.
+✅ اتبع الأجزاء المرقمة في الملفات المناسبة لمعرفة مكان وضع الكود الخاص بك
## إعداد العناصر للتعامل معها في الإضافة
-قبل أن يتمكن JavaScript من التعامل مع الواجهة، يحتاج إلى مراجع لعناصر HTML محددة. فكر في الأمر مثل التلسكوب الذي يحتاج إلى أن يتم توجيهه نحو نجوم معينة - قبل أن يتمكن غاليليو من دراسة أقمار المشتري، كان عليه تحديد موقع المشتري والتركيز عليه.
-
-في ملف `index.js` الخاص بك، سنقوم بإنشاء متغيرات `const` تلتقط مراجع لكل عنصر مهم في النموذج. هذا مشابه لكيفية قيام العلماء بتسمية معداتهم - بدلاً من البحث في المختبر بأكمله في كل مرة، يمكنهم الوصول مباشرة إلى ما يحتاجونه.
+قبل أن يتمكن JavaScript الخاص بك من التعامل مع الواجهة، يحتاج إلى مراجع لعناصر HTML محددة. فكر في الأمر مثل التلسكوب الذي يحتاج إلى أن يتم توجيهه نحو نجوم معينة - قبل أن يتمكن غاليليو من دراسة أقمار المشتري، كان عليه أن يحدد موقع المشتري نفسه ويركز عليه.
+
+في ملف `index.js` الخاص بك، سنقوم بإنشاء متغيرات `const` تلتقط مراجع لكل عنصر مهم في النموذج. هذا مشابه لكيفية تسمية العلماء لمعداتهم - بدلاً من البحث في المختبر بأكمله في كل مرة، يمكنهم الوصول مباشرة إلى ما يحتاجونه.
+
+```mermaid
+flowchart LR
+ A[JavaScript Code] --> B[document.querySelector]
+ B --> C[CSS Selectors]
+ C --> D[HTML Elements]
+
+ D --> E[".form-data"]
+ D --> F[".region-name"]
+ D --> G[".api-key"]
+ D --> H[".loading"]
+ D --> I[".errors"]
+ D --> J[".result-container"]
+
+ E --> K[Form Element]
+ F --> L[Input Field]
+ G --> M[Input Field]
+ H --> N[UI Element]
+ I --> O[UI Element]
+ J --> P[UI Element]
+
+ style A fill:#e1f5fe
+ style D fill:#e8f5e8
+ style K fill:#fff3e0
+ style L fill:#fff3e0
+ style M fill:#fff3e0
+```
```javascript
// form fields
@@ -47,16 +121,39 @@ const myregion = document.querySelector('.my-region');
const clearBtn = document.querySelector('.clear-btn');
```
-**ما يفعله هذا الكود:**
+**ما الذي يفعله هذا الكود:**
- **يلتقط** عناصر النموذج باستخدام `document.querySelector()` مع محددات CSS
-- **ينشئ** مراجع لحقول الإدخال الخاصة باسم المنطقة ومفتاح API
-- **يؤسس** روابط لعناصر عرض النتائج لبيانات استخدام الكربون
+- **ينشئ** مراجع لحقول الإدخال لاسم المنطقة ومفتاح API
+- **يؤسس** اتصالات لعناصر عرض النتائج لبيانات استخدام الكربون
- **يُعد** الوصول إلى عناصر واجهة المستخدم مثل مؤشرات التحميل ورسائل الخطأ
-- **يخزن** كل مرجع عنصر في متغير `const` لإعادة استخدامه بسهولة في الكود الخاص بك
+- **يخزن** كل مرجع عنصر في متغير `const` لإعادة الاستخدام بسهولة في الكود الخاص بك
## إضافة مستمعي الأحداث
-الآن سنجعل الإضافة تستجيب لإجراءات المستخدم. مستمعو الأحداث هم طريقة الكود الخاص بك لمراقبة تفاعلات المستخدم. فكر فيهم مثل مشغلي الهواتف في التبادلات الهاتفية المبكرة - كانوا يستمعون للمكالمات الواردة ويصلون الدوائر الصحيحة عندما يريد شخص ما إجراء اتصال.
+الآن سنجعل الإضافة الخاصة بك تستجيب لإجراءات المستخدم. مستمعو الأحداث هم طريقة الكود الخاص بك لمراقبة تفاعلات المستخدم. فكر فيهم مثل مشغلي الهواتف في التبادلات الهاتفية المبكرة - كانوا يستمعون للمكالمات الواردة ويصلون الدوائر الصحيحة عندما يريد شخص ما إجراء اتصال.
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Form
+ participant JavaScript
+ participant API
+ participant Storage
+
+ User->>Form: Fills out region/API key
+ User->>Form: Clicks submit
+ Form->>JavaScript: Triggers submit event
+ JavaScript->>JavaScript: handleSubmit(e)
+ JavaScript->>Storage: Save user preferences
+ JavaScript->>API: Fetch carbon data
+ API->>JavaScript: Returns data
+ JavaScript->>Form: Update UI with results
+
+ User->>Form: Clicks clear button
+ Form->>JavaScript: Triggers click event
+ JavaScript->>Storage: Clear saved data
+ JavaScript->>Form: Reset to initial state
+```
```javascript
form.addEventListener('submit', (e) => handleSubmit(e));
@@ -66,17 +163,27 @@ init();
**فهم هذه المفاهيم:**
- **يربط** مستمع إرسال بالنموذج الذي يتم تشغيله عندما يضغط المستخدمون على Enter أو ينقرون على إرسال
-- **يربط** مستمع نقر بزر المسح لإعادة تعيين النموذج
+- **يتصل** بمستمع النقر على زر المسح لإعادة تعيين النموذج
- **يمرر** كائن الحدث `(e)` إلى وظائف المعالجة للتحكم الإضافي
-- **يستدعي** وظيفة `init()` فورًا لإعداد الحالة الأولية للإضافة
+- **يستدعي** وظيفة `init()` فورًا لإعداد الحالة الأولية للإضافة الخاصة بك
✅ لاحظ اختصار صيغة وظيفة السهم المستخدمة هنا. هذا النهج الحديث في JavaScript أنظف من تعبيرات الوظائف التقليدية، لكن كلاهما يعمل بشكل جيد!
+### 🔄 **توقف تربوي**
+**فهم التعامل مع الأحداث**: قبل الانتقال إلى التهيئة، تأكد من أنك تستطيع:
+- ✅ شرح كيف يربط `addEventListener` إجراءات المستخدم بوظائف JavaScript
+- ✅ فهم لماذا نمرر كائن الحدث `(e)` إلى وظائف المعالجة
+- ✅ التعرف على الفرق بين أحداث `submit` و `click`
+- ✅ وصف متى تعمل وظيفة `init()` ولماذا
+
+**اختبار ذاتي سريع**: ماذا سيحدث إذا نسيت `e.preventDefault()` في إرسال النموذج؟
+*الإجابة: ستتم إعادة تحميل الصفحة، مما يؤدي إلى فقدان حالة JavaScript بالكامل وتعطيل تجربة المستخدم*
+
## بناء وظائف التهيئة وإعادة التعيين
-لنقم بإنشاء منطق التهيئة للإضافة الخاصة بك. وظيفة `init()` تشبه نظام الملاحة للسفينة الذي يتحقق من أدواته - تحدد الحالة الحالية وتضبط الواجهة وفقًا لذلك. تتحقق مما إذا كان شخص ما قد استخدم الإضافة من قبل وتحمل إعداداته السابقة.
+لنقم بإنشاء منطق التهيئة للإضافة الخاصة بك. وظيفة `init()` تشبه نظام الملاحة للسفينة الذي يتحقق من أدواته - تحدد الحالة الحالية وتضبط الواجهة وفقًا لذلك. تتحقق مما إذا كان شخص ما قد استخدم الإضافة الخاصة بك من قبل وتحمل إعداداته السابقة.
-وظيفة `reset()` توفر للمستخدمين بداية جديدة - مشابهة لكيفية قيام العلماء بإعادة تعيين أدواتهم بين التجارب لضمان بيانات نظيفة.
+وظيفة `reset()` توفر للمستخدمين بداية جديدة - مشابهة لكيفية إعادة العلماء ضبط أدواتهم بين التجارب لضمان بيانات نظيفة.
```javascript
function init() {
@@ -125,17 +232,41 @@ function reset(e) {
- **يعيد** `null` عندما لا توجد بيانات لمفتاح معين
- **يوفر** طريقة بسيطة لتذكر تفضيلات وإعدادات المستخدم
-> 💡 **فهم تخزين المتصفح**: [LocalStorage](https://developer.mozilla.org/docs/Web/API/Window/localStorage) يشبه إعطاء الإضافة ذاكرة دائمة. فكر في كيفية تخزين مكتبة الإسكندرية القديمة لللفائف - ظلت المعلومات متاحة حتى عندما غادر العلماء وعادوا.
+> 💡 **فهم تخزين المتصفح**: [LocalStorage](https://developer.mozilla.org/docs/Web/API/Window/localStorage) يشبه إعطاء الإضافة الخاصة بك ذاكرة دائمة. فكر في كيفية تخزين مكتبة الإسكندرية القديمة لللفائف - المعلومات ظلت متاحة حتى عندما غادر العلماء وعادوا.
>
> **خصائص رئيسية:**
> - **يحافظ** على البيانات حتى بعد إغلاق المتصفح
-> - **يبقى** بعد إعادة تشغيل الكمبيوتر وتعطل المتصفح
+> - **ينجو** من إعادة تشغيل الكمبيوتر وتعطل المتصفح
> - **يوفر** مساحة تخزين كبيرة لتفضيلات المستخدم
-> - **يتيح** الوصول الفوري دون تأخير الشبكة
-
-> **ملاحظة مهمة**: تحتوي إضافة المتصفح الخاصة بك على تخزين محلي معزول خاص بها منفصل عن صفحات الويب العادية. هذا يوفر الأمان ويمنع التعارض مع مواقع الويب الأخرى.
-
-يمكنك عرض البيانات المخزنة لديك عن طريق فتح أدوات المطور في المتصفح (F12)، والانتقال إلى علامة التبويب **Application**، وتوسيع قسم **Local Storage**.
+> - **يقدم** وصولًا فوريًا بدون تأخير الشبكة
+
+> **ملاحظة مهمة**: الإضافة الخاصة بك لديها تخزين محلي معزول خاص بها منفصل عن صفحات الويب العادية. هذا يوفر الأمان ويمنع التعارض مع مواقع الويب الأخرى.
+
+يمكنك عرض البيانات المخزنة الخاصة بك عن طريق فتح أدوات المطور في المتصفح (F12)، الانتقال إلى علامة التبويب **Application**، وتوسيع قسم **Local Storage**.
+
+```mermaid
+stateDiagram-v2
+ [*] --> CheckStorage: Extension starts
+ CheckStorage --> FirstTime: No stored data
+ CheckStorage --> Returning: Data found
+
+ FirstTime --> ShowForm: Display setup form
+ ShowForm --> UserInput: User enters data
+ UserInput --> SaveData: Store in localStorage
+ SaveData --> FetchAPI: Get carbon data
+
+ Returning --> LoadData: Read from localStorage
+ LoadData --> FetchAPI: Get carbon data
+
+ FetchAPI --> ShowResults: Display data
+ ShowResults --> UserAction: User interacts
+
+ UserAction --> Reset: Clear button clicked
+ UserAction --> ShowResults: View data
+
+ Reset --> ClearStorage: Remove saved data
+ ClearStorage --> FirstTime: Back to setup
+```

@@ -145,7 +276,7 @@ function reset(e) {
الآن سنتعامل مع ما يحدث عندما يرسل شخص ما النموذج الخاص بك. بشكل افتراضي، تقوم المتصفحات بإعادة تحميل الصفحة عند إرسال النماذج، لكننا سنعترض هذا السلوك لإنشاء تجربة أكثر سلاسة.
-يشبه هذا النهج كيفية تعامل مركز التحكم مع اتصالات المركبة الفضائية - بدلاً من إعادة ضبط النظام بالكامل لكل عملية إرسال، يحافظون على التشغيل المستمر أثناء معالجة المعلومات الجديدة.
+يشبه هذا النهج كيفية تعامل مركز التحكم مع اتصالات المركبة الفضائية - بدلاً من إعادة ضبط النظام بالكامل لكل إرسال، يحافظون على التشغيل المستمر أثناء معالجة المعلومات الجديدة.
قم بإنشاء وظيفة تلتقط حدث إرسال النموذج وتستخرج إدخال المستخدم:
@@ -160,13 +291,13 @@ function handleSubmit(e) {
- **منع** السلوك الافتراضي لإرسال النموذج الذي كان سيؤدي إلى تحديث الصفحة
- **استخراج** قيم إدخال المستخدم من حقول مفتاح API والمنطقة
- **تمرير** بيانات النموذج إلى وظيفة `setUpUser()` للمعالجة
-- **الحفاظ** على سلوك تطبيق الصفحة الواحدة عن طريق تجنب إعادة تحميل الصفحة
+- **الحفاظ** على سلوك تطبيق الصفحة الواحدة عن طريق تجنب تحديث الصفحة
-✅ تذكر أن حقول النموذج في HTML الخاص بك تتضمن السمة `required`، لذا يقوم المتصفح تلقائيًا بالتحقق من أن المستخدمين يقدمون مفتاح API والمنطقة قبل تشغيل هذه الوظيفة.
+✅ تذكر أن حقول النموذج HTML الخاصة بك تتضمن السمة `required`، لذا يقوم المتصفح تلقائيًا بالتحقق من أن المستخدمين يقدمون مفتاح API والمنطقة قبل تشغيل هذه الوظيفة.
## إعداد تفضيلات المستخدم
-وظيفة `setUpUser` مسؤولة عن حفظ بيانات اعتماد المستخدم وبدء أول استدعاء API. هذا يخلق انتقالًا سلسًا من الإعداد إلى عرض النتائج.
+وظيفة `setUpUser` مسؤولة عن حفظ بيانات اعتماد المستخدم وبدء أول اتصال API. هذا يخلق انتقالًا سلسًا من الإعداد إلى عرض النتائج.
```javascript
function setUpUser(apiKey, regionName) {
@@ -184,32 +315,62 @@ function setUpUser(apiKey, regionName) {
}
```
-**خطوة بخطوة، ما يحدث هنا:**
+**خطوة بخطوة، إليك ما يحدث:**
- **يحفظ** مفتاح API واسم المنطقة في التخزين المحلي للاستخدام المستقبلي
-- **يعرض** مؤشر تحميل لإعلام المستخدمين بأن البيانات يتم جلبها
+- **يعرض** مؤشر التحميل لإعلام المستخدمين بأن البيانات يتم جلبها
- **يمسح** أي رسائل خطأ سابقة من العرض
- **يكشف** زر المسح للمستخدمين لإعادة تعيين إعداداتهم لاحقًا
-- **يبدأ** استدعاء API لجلب بيانات استخدام الكربون الحقيقية
+- **يبدأ** اتصال API لجلب بيانات استخدام الكربون الحقيقية
هذه الوظيفة تخلق تجربة مستخدم سلسة من خلال إدارة كل من استمرارية البيانات وتحديثات واجهة المستخدم في إجراء واحد منسق.
## عرض بيانات استخدام الكربون
-الآن سنربط الإضافة الخاصة بك بمصادر البيانات الخارجية عبر APIs. هذا يحول الإضافة الخاصة بك من أداة مستقلة إلى شيء يمكنه الوصول إلى معلومات الوقت الفعلي من جميع أنحاء الإنترنت.
+الآن سنقوم بربط الإضافة الخاصة بك بمصادر البيانات الخارجية عبر APIs. هذا يحول الإضافة الخاصة بك من أداة مستقلة إلى شيء يمكنه الوصول إلى معلومات الوقت الفعلي من جميع أنحاء الإنترنت.
**فهم APIs**
-[APIs](https://www.webopedia.com/TERM/A/API.html) هي الطريقة التي تتواصل بها التطبيقات المختلفة مع بعضها البعض. فكر فيها مثل نظام التلغراف الذي ربط المدن البعيدة في القرن التاسع عشر - كان المشغلون يرسلون طلبات إلى محطات بعيدة ويتلقون الردود بالمعلومات المطلوبة. كل مرة تتحقق فيها من وسائل التواصل الاجتماعي، تسأل مساعد صوتي سؤالًا، أو تستخدم تطبيق توصيل، APIs تسهل هذه التبادلات البيانات.
+[APIs](https://www.webopedia.com/TERM/A/API.html) هي الطريقة التي تتواصل بها التطبيقات المختلفة مع بعضها البعض. فكر فيها مثل نظام التلغراف الذي ربط المدن البعيدة في القرن التاسع عشر - كان المشغلون يرسلون طلبات إلى المحطات البعيدة ويتلقون الردود بالمعلومات المطلوبة. كل مرة تتحقق فيها من وسائل التواصل الاجتماعي، تسأل مساعد صوتي سؤالًا، أو تستخدم تطبيق توصيل، فإن APIs تسهل هذه التبادلات البيانات.
+
+```mermaid
+flowchart TD
+ A[Your Extension] --> B[HTTP Request]
+ B --> C[CO2 Signal API]
+ C --> D{Valid Request?}
+ D -->|Yes| E[Query Database]
+ D -->|No| F[Return Error]
+ E --> G[Carbon Data]
+ G --> H[JSON Response]
+ H --> I[Your Extension]
+ F --> I
+ I --> J[Update UI]
+
+ subgraph "API Request"
+ K[Headers: auth-token]
+ L[Parameters: countryCode]
+ M[Method: GET]
+ end
+
+ subgraph "API Response"
+ N[Carbon Intensity]
+ O[Fossil Fuel %]
+ P[Timestamp]
+ end
+
+ style C fill:#e8f5e8
+ style G fill:#fff3e0
+ style I fill:#e1f5fe
+```
**مفاهيم رئيسية حول REST APIs:**
-- **REST** تعني "نقل الحالة التمثيلية"
+- **REST** تعني 'نقل الحالة التمثيلية'
- **تستخدم** طرق HTTP القياسية (GET, POST, PUT, DELETE) للتفاعل مع البيانات
- **تعيد** البيانات بتنسيقات متوقعة، عادة JSON
- **توفر** نقاط نهاية متسقة تعتمد على URL لأنواع مختلفة من الطلبات
-✅ [API إشارة CO2](https://www.co2signal.com/) الذي سنستخدمه يوفر بيانات كثافة الكربون في الوقت الفعلي من شبكات الكهرباء حول العالم. هذا يساعد المستخدمين على فهم التأثير البيئي لاستخدامهم للكهرباء!
+✅ [CO2 Signal API](https://www.co2signal.com/) الذي سنستخدمه يوفر بيانات كثافة الكربون في الوقت الفعلي من شبكات الكهرباء حول العالم. هذا يساعد المستخدمين على فهم تأثير استخدامهم للكهرباء على البيئة!
-> 💡 **فهم JavaScript غير المتزامن**: الكلمة المفتاحية [`async`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/async_function) تمكن الكود الخاص بك من التعامل مع عمليات متعددة في وقت واحد. عندما تطلب بيانات من خادم، لا تريد أن تتجمد الإضافة الخاصة بك بالكامل - سيكون ذلك مثل توقف التحكم في حركة الطائرات عن جميع العمليات أثناء انتظار استجابة طائرة واحدة.
+> 💡 **فهم JavaScript غير المتزامن**: الكلمة المفتاحية [`async`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/async_function) تمكن الكود الخاص بك من التعامل مع عمليات متعددة في وقت واحد. عندما تطلب بيانات من خادم، لا تريد أن تتجمد الإضافة الخاصة بك بالكامل - سيكون ذلك مثل توقف مراقبة الحركة الجوية عن جميع العمليات أثناء انتظار استجابة طائرة واحدة.
>
> **فوائد رئيسية:**
> - **يحافظ** على استجابة الإضافة أثناء تحميل البيانات
@@ -223,6 +384,33 @@ function setUpUser(apiKey, regionName) {
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو عن async/await.
+### 🔄 **توقف تربوي**
+**فهم البرمجة غير المتزامنة**: قبل الغوص في وظيفة API، تحقق من أنك تفهم:
+- ✅ لماذا نستخدم `async/await` بدلاً من تجميد الإضافة بالكامل
+- ✅ كيف تتعامل كتل `try/catch` مع أخطاء الشبكة بشكل سلس
+- ✅ الفرق بين العمليات المتزامنة وغير المتزامنة
+- ✅ لماذا يمكن أن تفشل طلبات API وكيفية التعامل مع تلك الفشل
+
+**اتصال بالعالم الحقيقي**: فكر في هذه الأمثلة غير المتزامنة اليومية:
+- **طلب الطعام**: لا تنتظر بجانب المطبخ - تحصل على إيصال وتواصل أنشطتك الأخرى
+- **إرسال البريد الإلكتروني**: تطبيق البريد الإلكتروني الخاص بك لا يتجمد أثناء الإرسال - يمكنك كتابة المزيد من الرسائل
+- **تحميل صفحات الويب**: الصور يتم تحميلها تدريجيًا بينما يمكنك بالفعل قراءة النص
+
+**تدفق المصادقة API**:
+```mermaid
+sequenceDiagram
+ participant Ext as Extension
+ participant API as CO2 Signal API
+ participant DB as Database
+
+ Ext->>API: Request with auth-token
+ API->>API: Validate token
+ API->>DB: Query carbon data
+ DB->>API: Return data
+ API->>Ext: JSON response
+ Ext->>Ext: Update UI
+```
+
قم بإنشاء الوظيفة لجلب وعرض بيانات استخدام الكربون:
```javascript
@@ -278,21 +466,53 @@ async function displayCarbonUsage(apiKey, region) {
- **يستخدم** API `fetch()` الحديث بدلاً من المكتبات الخارجية مثل Axios للحصول على كود أنظف وخالي من التبعيات
- **ينفذ** فحص الأخطاء المناسب باستخدام `response.ok` لالتقاط فشل API مبكرًا
- **يتعامل** مع العمليات غير المتزامنة باستخدام `async/await` لتدفق كود أكثر قابلية للقراءة
-- **يُصادق** مع API إشارة CO2 باستخدام رأس `auth-token`
-- **يُحلل** بيانات JSON المستجيبة ويستخرج معلومات كثافة الكربون
-- **يُحدث** عناصر واجهة المستخدم المتعددة ببيانات بيئية مهيأة
-- **يوفر** رسائل خطأ سهلة الاستخدام عند فشل استدعاءات API
+- **يصادق** مع CO2 Signal API باستخدام رأس `auth-token`
+- **يحلل** بيانات استجابة JSON ويستخرج معلومات كثافة الكربون
+- **يحدث** عناصر واجهة المستخدم المتعددة ببيانات بيئية مهيأة
+- **يوفر** رسائل خطأ سهلة الاستخدام عندما تفشل طلبات API
**مفاهيم JavaScript الحديثة الرئيسية التي تم توضيحها:**
-- **القوالب النصية** مع صياغة `${}` لتنسيق النصوص بشكل أنظف
-- **التعامل مع الأخطاء** باستخدام كتل try/catch لتطبيقات قوية
+- **القوالب النصية** باستخدام صياغة `${}` لتنسيق النصوص النظيفة
+- **التعامل مع الأخطاء** باستخدام كتل try/catch للتطبيقات القوية
- **نمط async/await** للتعامل مع طلبات الشبكة بشكل سلس
- **تفكيك الكائنات** لاستخراج بيانات محددة من استجابات API
-- **سلسلة الطرق** للتعامل مع DOM المتعددة
+- **تسلسل الطرق** للعديد من التلاعبات DOM
+
+✅ هذه الوظيفة توضح العديد من مفاهيم تطوير الويب المهمة - التواصل مع الخوادم الخارجية، التعامل مع المصادقة، معالجة البيانات، تحديث الواجهات، وإدارة الأخطاء بشكل سلس. هذه مهارات أساسية يستخدمها المطورون المحترفون بانتظام.
+
+```mermaid
+flowchart TD
+ A[Start API Call] --> B[Fetch Request]
+ B --> C{Network Success?}
+ C -->|No| D[Network Error]
+ C -->|Yes| E{Response OK?}
+ E -->|No| F[API Error]
+ E -->|Yes| G[Parse JSON]
+ G --> H{Valid Data?}
+ H -->|No| I[Data Error]
+ H -->|Yes| J[Update UI]
+
+ D --> K[Show Error Message]
+ F --> K
+ I --> K
+ J --> L[Hide Loading]
+ K --> L
+
+ style A fill:#e1f5fe
+ style J fill:#e8f5e8
+ style K fill:#ffebee
+ style L fill:#f3e5f5
+```
-✅ هذه الوظيفة توضح العديد من المفاهيم المهمة لتطوير الويب - التواصل مع الخوادم الخارجية، التعامل مع المصادقة، معالجة البيانات، تحديث الواجهات، وإدارة الأخطاء بشكل سلس. هذه مهارات أساسية يستخدمها المطورون المحترفون بانتظام.
+### 🔄 **توقف تربوي**
+**فهم النظام بالكامل**: تحقق من إتقانك للتدفق الكامل:
+- ✅ كيف تمكن مراجع DOM JavaScript من التحكم في الواجهة
+- ✅ لماذا يخلق التخزين المحلي استمرارية بين جلسات المتصفح
+- ✅ كيف يجعل async/await طلبات API دون تجميد الإضافة
+- ✅ ماذا يحدث عندما تفشل طلبات API وكيفية التعامل مع الأخطاء
+- ✅ لماذا تتضمن تجربة المستخدم حالات التحميل ورسائل الخطأ
-🎉 **ما أنجزته:** لقد أنشأت إضافة متصفح:
+🎉 **ما الذي أنجزته:** لقد أنشأت إضافة متصفح:
- **تتصل** بالإنترنت وتجلب بيانات بيئية حقيقية
- **تحافظ** على إعدادات المستخدم بين الجلسات
- **تتعامل** مع الأخطاء بشكل سلس بدلاً من التعطل
@@ -302,44 +522,147 @@ async function displayCarbonUsage(apiKey, region) {
---
-## تحدي وكيل GitHub Copilot 🚀
+## تحدي GitHub Copilot Agent 🚀
استخدم وضع الوكيل لإكمال التحدي التالي:
+**الوصف:** تحسين امتداد المتصفح من خلال إضافة تحسينات في معالجة الأخطاء وميزات تجربة المستخدم. سيساعدك هذا التحدي على ممارسة العمل مع واجهات برمجة التطبيقات (APIs)، التخزين المحلي، والتعامل مع DOM باستخدام أنماط JavaScript الحديثة.
-**الوصف:** قم بتحسين إضافة المتصفح عن طريق إضافة تحسينات في التعامل مع الأخطاء وميزات تجربة المستخدم. سيساعدك هذا التحدي على ممارسة العمل مع APIs، التخزين المحلي، ومعالجة DOM باستخدام أنماط JavaScript الحديثة.
-
-**المهمة:** قم بإنشاء نسخة محسنة من وظيفة displayCarbonUsage تتضمن: 1) آلية إعادة المحاولة لاستدعاءات API الفاشلة مع تراجع أسي، 2) التحقق من صحة الإدخال لرمز المنطقة قبل إجراء استدعاء API، 3) رسوم تحميل مع مؤشرات تقدم، 4) تخزين مؤقت لاستجابات API في التخزين المحلي مع طوابع انتهاء الصلاحية (تخزين لمدة 30 دقيقة)، و5) ميزة لعرض البيانات التاريخية من استدعاءات API السابقة. أضف أيضًا تعليقات JSDoc بأسلوب TypeScript لتوثيق جميع معلمات الوظائف وأنواع الإرجاع.
+**المهمة:** قم بإنشاء نسخة محسّنة من وظيفة displayCarbonUsage تتضمن: 1) آلية إعادة المحاولة لاستدعاءات API الفاشلة باستخدام التراجع الأسي، 2) التحقق من صحة إدخال رمز المنطقة قبل إجراء استدعاء API، 3) رسوم متحركة للتحميل مع مؤشرات تقدم، 4) تخزين استجابات API في localStorage مع طوابع زمنية لانتهاء الصلاحية (التخزين لمدة 30 دقيقة)، و5) ميزة لعرض البيانات التاريخية من استدعاءات API السابقة. أضف أيضًا تعليقات JSDoc بأسلوب TypeScript لتوثيق جميع معلمات الوظائف وأنواع الإرجاع.
تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
## 🚀 التحدي
-وسع فهمك لـ APIs من خلال استكشاف ثروة APIs المستندة إلى المتصفح المتاحة لتطوير الويب. اختر واحدة من هذه APIs وقم ببناء عرض صغير:
+وسع فهمك لواجهات برمجة التطبيقات (APIs) من خلال استكشاف الثروة المتاحة من واجهات برمجة التطبيقات المستندة إلى المتصفح لتطوير الويب. اختر واحدة من هذه الواجهات وقم ببناء عرض صغير:
-- [API تحديد الموقع الجغرافي](https://developer.mozilla.org/docs/Web/API/Geolocation_API) - الحصول على موقع المستخدم الحالي
-- [API الإشعارات](https://developer.mozilla.org/docs/Web/API/Notifications_API) - إرسال إشعارات سطح المكتب
-- [API السحب والإفلات في HTML](https://developer.mozilla.org/docs/Web/API/HTML_Drag_and_Drop_API) - إنشاء واجهات سحب تفاعلية
-- [API تخزين الويب](https://developer.mozilla.org/docs/Web/API/Web_Storage_API) - تقنيات التخزين المحلي المتقدمة
-- [API الجلب](https://developer.mozilla.org/docs/Web/API/Fetch_API) - بديل حديث لـ XMLHttpRequest
+- [واجهة Geolocation API](https://developer.mozilla.org/docs/Web/API/Geolocation_API) - الحصول على الموقع الحالي للمستخدم
+- [واجهة Notification API](https://developer.mozilla.org/docs/Web/API/Notifications_API) - إرسال إشعارات سطح المكتب
+- [واجهة HTML Drag and Drop API](https://developer.mozilla.org/docs/Web/API/HTML_Drag_and_Drop_API) - إنشاء واجهات سحب تفاعلية
+- [واجهة Web Storage API](https://developer.mozilla.org/docs/Web/API/Web_Storage_API) - تقنيات تخزين محلية متقدمة
+- [واجهة Fetch API](https://developer.mozilla.org/docs/Web/API/Fetch_API) - بديل حديث لـ XMLHttpRequest
**أسئلة البحث التي يجب مراعاتها:**
-- ما المشاكل الحقيقية التي يحلها هذا API؟
-- كيف يتعامل API مع الأخطاء والحالات الحافة؟
-- ما الاعتبارات الأمنية الموجودة عند استخدام هذا API؟
-- ما مدى دعم هذا API عبر المتصفحات المختلفة؟
+- ما هي المشاكل الواقعية التي تحلها هذه الواجهة؟
+- كيف تتعامل الواجهة مع الأخطاء والحالات الحافة؟
+- ما هي الاعتبارات الأمنية عند استخدام هذه الواجهة؟
+- ما مدى دعم هذه الواجهة عبر المتصفحات المختلفة؟
-بعد البحث الخاص بك، حدد ما هي الخصائص التي تجعل API سهل الاستخدام وموثوقًا للمطورين.
+بعد البحث، حدد الخصائص التي تجعل واجهة برمجة التطبيقات سهلة الاستخدام وموثوقة للمطورين.
## اختبار ما بعد المحاضرة
[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/26)
## المراجعة والدراسة الذاتية
-لقد تعلمت عن LocalStorage وواجهات برمجة التطبيقات (APIs) في هذا الدرس، وكلاهما مفيد جدًا لمطوري الويب المحترفين. هل يمكنك التفكير في كيفية عمل هذين العنصرين معًا؟ فكر في كيفية تصميم موقع ويب يقوم بتخزين العناصر ليتم استخدامها بواسطة واجهة برمجة التطبيقات.
+
+تعلمت عن LocalStorage وواجهات برمجة التطبيقات (APIs) في هذا الدرس، وكلاهما مفيد جدًا للمطورين المحترفين. هل يمكنك التفكير في كيفية عمل هذين العنصرين معًا؟ فكر في كيفية تصميم موقع ويب يقوم بتخزين العناصر لاستخدامها بواسطة واجهة برمجة التطبيقات.
+
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] افتح علامة تبويب DevTools Application واستكشف localStorage على أي موقع ويب
+- [ ] أنشئ نموذج HTML بسيطًا واختبر التحقق من صحة النموذج في المتصفح
+- [ ] جرب تخزين واسترجاع البيانات باستخدام localStorage في وحدة التحكم بالمتصفح
+- [ ] قم بفحص بيانات النموذج التي يتم إرسالها باستخدام علامة تبويب الشبكة
+
+### 🎯 **ما يمكنك إنجازه خلال الساعة**
+- [ ] أكمل اختبار ما بعد الدرس وافهم مفاهيم التعامل مع النماذج
+- [ ] قم ببناء نموذج امتداد متصفح يحفظ تفضيلات المستخدم
+- [ ] نفذ التحقق من صحة النموذج على الجانب العميل مع رسائل خطأ مفيدة
+- [ ] مارس استخدام واجهة chrome.storage لتخزين بيانات الامتداد
+- [ ] أنشئ واجهة مستخدم تستجيب لإعدادات المستخدم المحفوظة
+
+### 📅 **ما يمكنك إنجازه خلال أسبوع**
+- [ ] أكمل امتداد متصفح كامل الميزات مع وظائف النموذج
+- [ ] أتقن خيارات التخزين المختلفة: التخزين المحلي، التخزين المتزامن، والتخزين المؤقت
+- [ ] نفذ ميزات نموذج متقدمة مثل الإكمال التلقائي والتحقق من الصحة
+- [ ] أضف وظيفة استيراد/تصدير لبيانات المستخدم
+- [ ] اختبر امتدادك بدقة عبر المتصفحات المختلفة
+- [ ] قم بتحسين تجربة المستخدم ومعالجة الأخطاء في امتدادك
+
+### 🌟 **ما يمكنك إنجازه خلال شهر**
+- [ ] قم ببناء تطبيقات معقدة باستخدام واجهات تخزين المتصفح المختلفة
+- [ ] تعلم أنماط التطوير التي تعتمد على العمل دون اتصال
+- [ ] ساهم في مشاريع مفتوحة المصدر تتعلق باستمرارية البيانات
+- [ ] أتقن تطوير الخصوصية والامتثال لـ GDPR
+- [ ] أنشئ مكتبات قابلة لإعادة الاستخدام للتعامل مع النماذج وإدارة البيانات
+- [ ] شارك المعرفة حول واجهات برمجة التطبيقات وتطوير الامتدادات
+
+## 🎯 جدول زمني لإتقان تطوير الامتدادات
+
+```mermaid
+timeline
+ title API Integration & Storage Learning Progression
+
+ section DOM Fundamentals (15 minutes)
+ Element References: querySelector mastery
+ : Event listener setup
+ : State management basics
+
+ section Local Storage (20 minutes)
+ Data Persistence: Key-value storage
+ : Session management
+ : User preference handling
+ : Storage inspection tools
+
+ section Form Handling (25 minutes)
+ User Input: Form validation
+ : Event prevention
+ : Data extraction
+ : UI state transitions
+
+ section API Integration (35 minutes)
+ External Communication: HTTP requests
+ : Authentication patterns
+ : JSON data parsing
+ : Response handling
+
+ section Async Programming (40 minutes)
+ Modern JavaScript: Promise handling
+ : Async/await patterns
+ : Error management
+ : Non-blocking operations
+
+ section Error Handling (30 minutes)
+ Robust Applications: Try/catch blocks
+ : User-friendly messages
+ : Graceful degradation
+ : Debugging techniques
+
+ section Advanced Patterns (1 week)
+ Professional Development: Caching strategies
+ : Rate limiting
+ : Retry mechanisms
+ : Performance optimization
+
+ section Production Skills (1 month)
+ Enterprise Features: Security best practices
+ : API versioning
+ : Monitoring & logging
+ : Scalable architecture
+```
+
+### 🛠️ ملخص أدوات تطوير الويب الكاملة
+
+بعد إكمال هذا الدرس، لديك الآن:
+- **إتقان DOM**: استهداف العناصر بدقة والتعامل معها
+- **خبرة التخزين**: إدارة البيانات المستمرة باستخدام localStorage
+- **تكامل API**: جلب البيانات في الوقت الحقيقي والمصادقة
+- **برمجة غير متزامنة**: عمليات غير معيقة باستخدام JavaScript الحديث
+- **معالجة الأخطاء**: تطبيقات قوية تتعامل مع الفشل بسلاسة
+- **تجربة المستخدم**: حالات التحميل، التحقق من الصحة، وتفاعلات سلسة
+- **أنماط حديثة**: واجهة fetch، async/await، وميزات ES6+
+
+**المهارات المهنية المكتسبة:** لقد نفذت أنماطًا مستخدمة في:
+- **تطبيقات الويب**: تطبيقات صفحة واحدة مع مصادر بيانات خارجية
+- **تطوير الهواتف المحمولة**: تطبيقات تعتمد على واجهات برمجة التطبيقات مع إمكانيات العمل دون اتصال
+- **برامج سطح المكتب**: تطبيقات Electron مع تخزين مستمر
+- **أنظمة المؤسسات**: المصادقة، التخزين المؤقت، ومعالجة الأخطاء
+- **الأطر الحديثة**: أنماط إدارة البيانات في React/Vue/Angular
+
+**المستوى التالي:** أنت جاهز لاستكشاف مواضيع متقدمة مثل استراتيجيات التخزين المؤقت، اتصالات WebSocket في الوقت الحقيقي، أو إدارة الحالة المعقدة!
## المهمة
-[تبنَّ واجهة برمجة تطبيقات](assignment.md)
+[تبني واجهة برمجة التطبيقات](assignment.md)
---
diff --git a/translations/ar/5-browser-extension/3-background-tasks-and-performance/README.md b/translations/ar/5-browser-extension/3-background-tasks-and-performance/README.md
index 1a370b029d..8c819f9cf1 100644
--- a/translations/ar/5-browser-extension/3-background-tasks-and-performance/README.md
+++ b/translations/ar/5-browser-extension/3-background-tasks-and-performance/README.md
@@ -1,19 +1,36 @@
-# مشروع إضافة المتصفح الجزء الثالث: تعلم حول المهام الخلفية والأداء
+# مشروع إضافة المتصفح الجزء الثالث: تعلم عن المهام الخلفية والأداء
+
+```mermaid
+journey
+ title Your Performance Optimization Journey
+ section Foundation
+ Learn browser tools: 3: Student
+ Understand profiling: 4: Student
+ Identify bottlenecks: 4: Student
+ section Extension Features
+ Build color system: 4: Student
+ Create background tasks: 5: Student
+ Update icons dynamically: 5: Student
+ section Optimization
+ Monitor performance: 5: Student
+ Debug issues: 4: Student
+ Polish experience: 5: Student
+```
-هل تساءلت يومًا ما الذي يجعل بعض إضافات المتصفح تبدو سريعة الاستجابة بينما تبدو أخرى بطيئة؟ السر يكمن في ما يحدث خلف الكواليس. بينما ينقر المستخدمون حول واجهة الإضافة الخاصة بك، هناك عالم كامل من العمليات الخلفية التي تدير بهدوء جلب البيانات، تحديث الأيقونات، وإدارة موارد النظام.
+هل تساءلت يومًا ما الذي يجعل بعض إضافات المتصفح تبدو سريعة وسلسة بينما تبدو أخرى بطيئة؟ السر يكمن في ما يحدث خلف الكواليس. بينما ينقر المستخدمون حول واجهة الإضافة الخاصة بك، هناك عالم كامل من العمليات الخلفية التي تدير جلب البيانات، تحديث الأيقونات، وموارد النظام بهدوء.
-هذه هي درسنا الأخير في سلسلة إضافات المتصفح، وسنجعل متتبع البصمة الكربونية الخاص بك يعمل بسلاسة. ستضيف تحديثات ديناميكية للأيقونات وتتعلم كيفية اكتشاف مشكلات الأداء قبل أن تصبح مشاكل. إنه مثل ضبط سيارة سباق - تحسينات صغيرة يمكن أن تحدث فرقًا كبيرًا في كيفية عمل كل شيء.
+هذه هي الدرس الأخير في سلسلة إضافات المتصفح، وسنجعل متتبع بصمة الكربون الخاص بك يعمل بسلاسة. ستضيف تحديثات ديناميكية للأيقونات وتتعلم كيفية اكتشاف مشاكل الأداء قبل أن تصبح مشكلة. الأمر يشبه ضبط سيارة سباق - تحسينات صغيرة يمكن أن تحدث فرقًا كبيرًا في كيفية عمل كل شيء.
-بحلول الوقت الذي ننتهي فيه، سيكون لديك إضافة مصقولة وستفهم مبادئ الأداء التي تميز التطبيقات الويب الجيدة عن الرائعة. دعنا نغوص في عالم تحسين المتصفح.
+بحلول الوقت الذي ننتهي فيه، سيكون لديك إضافة مصقولة وستفهم مبادئ الأداء التي تميز التطبيقات الجيدة عن الرائعة. دعونا نغوص في عالم تحسين المتصفح.
## اختبار ما قبل المحاضرة
@@ -21,91 +38,228 @@ CO_OP_TRANSLATOR_METADATA:
### المقدمة
-في دروسنا السابقة، قمت ببناء نموذج، وربطته بـ API، وتعاملت مع جلب البيانات غير المتزامن. الإضافة الخاصة بك تأخذ شكلًا جميلًا.
-
-الآن نحتاج إلى إضافة اللمسات الأخيرة - مثل جعل أيقونة الإضافة تتغير ألوانها بناءً على بيانات الكربون. يذكرني هذا بكيفية اضطرار ناسا لتحسين كل نظام على مركبة الفضاء أبولو. لم يكن بإمكانهم تحمل أي دورات أو ذاكرة مهدرة لأن الأرواح كانت تعتمد على الأداء. بينما ليست إضافة المتصفح لدينا بهذه الأهمية، تنطبق نفس المبادئ - الكود الفعال يخلق تجارب مستخدم أفضل.
+في دروسنا السابقة، قمت ببناء نموذج، وربطه بـ API، وتناول جلب البيانات غير المتزامن. الإضافة الخاصة بك تتشكل بشكل جيد.
+
+الآن نحتاج إلى إضافة اللمسات الأخيرة - مثل جعل أيقونة الإضافة تغير الألوان بناءً على بيانات الكربون. هذا يذكرني بكيفية اضطرار ناسا لتحسين كل نظام على مركبة الفضاء أبولو. لم يكن لديهم أي مجال لإهدار الدورات أو الذاكرة لأن الأداء كان مسألة حياة أو موت. بينما ليست إضافة المتصفح لدينا بهذه الأهمية، فإن نفس المبادئ تنطبق - الكود الفعال يخلق تجارب مستخدم أفضل.
+
+```mermaid
+mindmap
+ root((Performance & Background Tasks))
+ Browser Performance
+ Rendering Pipeline
+ Asset Optimization
+ DOM Manipulation
+ JavaScript Execution
+ Profiling Tools
+ Developer Tools
+ Performance Tab
+ Timeline Analysis
+ Bottleneck Detection
+ Extension Architecture
+ Background Scripts
+ Content Scripts
+ Message Passing
+ Icon Management
+ Optimization Strategies
+ Code Splitting
+ Lazy Loading
+ Caching
+ Resource Compression
+ Visual Feedback
+ Dynamic Icons
+ Color Coding
+ Real-time Updates
+ User Experience
+```
## أساسيات أداء الويب
-عندما يعمل الكود الخاص بك بكفاءة، يمكن للناس أن *يشعروا* بالفرق. تعرف ذلك الشعور عندما يتم تحميل الصفحة على الفور أو عندما تتدفق الرسوم المتحركة بسلاسة؟ هذا هو الأداء الجيد في العمل.
-
-الأداء ليس فقط عن السرعة - إنه عن صنع تجارب ويب تبدو طبيعية بدلاً من أن تكون متعثرة ومحبطة. في الأيام الأولى للحوسبة، كانت غريس هوبر تحتفظ بنانوثانية (قطعة من السلك بطول قدم تقريبًا) على مكتبها لتظهر مدى بعد الضوء في جزء من مليار من الثانية. كان هذا طريقتها في شرح لماذا كل ميكروثانية مهمة في الحوسبة. دعونا نستكشف أدوات التحري التي تساعدك على معرفة ما يبطئ الأمور.
-
-> "أداء الموقع يدور حول شيئين: مدى سرعة تحميل الصفحة، ومدى سرعة تشغيل الكود عليها." -- [زاك غروسبارت](https://www.smashingmagazine.com/2012/06/javascript-profiling-chrome-developer-tools/)
-
-موضوع كيفية جعل مواقعك سريعة للغاية على جميع أنواع الأجهزة، لجميع أنواع المستخدمين، في جميع أنواع الظروف، هو موضوع واسع بشكل غير مفاجئ. إليك بعض النقاط التي يجب أن تضعها في اعتبارك أثناء بناء مشروع ويب عادي أو إضافة متصفح.
-
-الخطوة الأولى في تحسين موقعك هي فهم ما يحدث بالفعل تحت الغطاء. لحسن الحظ، يأتي متصفحك بأدوات تحري قوية مدمجة.
+عندما يعمل الكود الخاص بك بكفاءة، يمكن للناس أن *يشعروا* بالفرق. تعرف تلك اللحظة عندما يتم تحميل الصفحة فورًا أو عندما تتدفق الرسوم المتحركة بسلاسة؟ هذا هو الأداء الجيد في العمل.
+
+الأداء ليس فقط عن السرعة - إنه عن صنع تجارب ويب تبدو طبيعية بدلاً من أن تكون متعثرة ومحبطة. في الأيام الأولى للحوسبة، كانت غريس هوبر تحتفظ بنانو ثانية (قطعة من السلك بطول قدم تقريبًا) على مكتبها لتظهر مدى بعد الضوء في جزء من مليار من الثانية. كان هذا طريقتها لشرح لماذا كل ميكروثانية مهمة في الحوسبة. دعونا نستكشف أدوات التحري التي تساعدك على معرفة ما يبطئ الأمور.
+
+> "أداء الموقع يتعلق بشيئين: مدى سرعة تحميل الصفحة، ومدى سرعة تشغيل الكود عليها." -- [زاك غروسبارت](https://www.smashingmagazine.com/2012/06/javascript-profiling-chrome-developer-tools/)
+
+موضوع كيفية جعل مواقعك سريعة للغاية على جميع أنواع الأجهزة، لجميع أنواع المستخدمين، في جميع أنواع الظروف، ليس مفاجئًا أنه واسع. إليك بعض النقاط التي يجب أن تضعها في اعتبارك أثناء بناء مشروع ويب قياسي أو إضافة متصفح.
+
+الخطوة الأولى في تحسين موقعك هي فهم ما يحدث بالفعل تحت السطح. لحسن الحظ، يأتي متصفحك بأدوات تحري قوية مدمجة.
+
+```mermaid
+flowchart LR
+ A[HTML] --> B[Parse]
+ B --> C[DOM Tree]
+ D[CSS] --> E[Parse]
+ E --> F[CSSOM]
+ G[JavaScript] --> H[Execute]
+
+ C --> I[Render Tree]
+ F --> I
+ H --> I
+
+ I --> J[Layout]
+ J --> K[Paint]
+ K --> L[Composite]
+ L --> M[Display]
+
+ subgraph "Critical Rendering Path"
+ N["1. Parse HTML"]
+ O["2. Parse CSS"]
+ P["3. Execute JS"]
+ Q["4. Build Render Tree"]
+ R["5. Layout Elements"]
+ S["6. Paint Pixels"]
+ T["7. Composite Layers"]
+ end
+
+ style M fill:#e8f5e8
+ style I fill:#fff3e0
+ style H fill:#ffebee
+```
-لفتح أدوات المطور في Edge، انقر على تلك النقاط الثلاث في الزاوية العلوية اليمنى، ثم انتقل إلى أدوات إضافية > أدوات المطور. أو استخدم اختصار لوحة المفاتيح: `Ctrl` + `Shift` + `I` على Windows أو `Option` + `Command` + `I` على Mac. بمجرد أن تكون هناك، انقر على علامة تبويب الأداء - هذا هو المكان الذي ستجري فيه تحقيقك.
+لفتح أدوات المطور في Edge، انقر على تلك النقاط الثلاث في الزاوية العلوية اليمنى، ثم انتقل إلى أدوات إضافية > أدوات المطور. أو استخدم اختصار لوحة المفاتيح: `Ctrl` + `Shift` + `I` على Windows أو `Option` + `Command` + `I` على Mac. بمجرد أن تكون هناك، انقر على علامة تبويب الأداء - هذا هو المكان الذي ستقوم فيه بالتحقيق.
**إليك مجموعة أدوات التحري الخاصة بالأداء:**
- **افتح** أدوات المطور (ستستخدمها باستمرار كمطور!)
- **توجه** إلى علامة تبويب الأداء - فكر فيها كمتعقب لياقة تطبيق الويب الخاص بك
- **اضغط** على زر التسجيل وشاهد صفحتك أثناء العمل
-- **ادرس** النتائج لتحديد ما يبطئ الأمور
+- **ادرس** النتائج لتكتشف ما يبطئ الأمور
-دعونا نجرب هذا. افتح موقعًا (Microsoft.com يعمل بشكل جيد لهذا) وانقر على زر "تسجيل". الآن قم بتحديث الصفحة وشاهد المحلل يلتقط كل ما يحدث. عندما تتوقف عن التسجيل، سترى تفصيلًا دقيقًا لكيفية "كتابة" المتصفح، "عرضه"، و"رسمه" للموقع. يذكرني هذا بكيفية مراقبة مركز التحكم في المهمة لكل نظام أثناء إطلاق الصاروخ - تحصل على بيانات في الوقت الفعلي حول ما يحدث ومتى.
+دعونا نجرب هذا. افتح موقعًا (Microsoft.com يعمل جيدًا لهذا) وانقر على زر "تسجيل". الآن قم بتحديث الصفحة وشاهد المحلل يلتقط كل ما يحدث. عندما تتوقف عن التسجيل، سترى تفصيلًا دقيقًا لكيفية قيام المتصفح بـ "البرمجة"، "التقديم"، و"الرسم" للموقع. يذكرني هذا بكيفية مراقبة مركز التحكم لكل نظام أثناء إطلاق الصاروخ - تحصل على بيانات في الوقت الفعلي حول ما يحدث ومتى.

-✅ يحتوي [توثيق Microsoft](https://docs.microsoft.com/microsoft-edge/devtools-guide/performance/?WT.mc_id=academic-77807-sagibbon) على الكثير من التفاصيل إذا كنت تريد التعمق أكثر
+✅ يحتوي [توثيق Microsoft](https://docs.microsoft.com/microsoft-edge/devtools-guide/performance/?WT.mc_id=academic-77807-sagibbon) على الكثير من التفاصيل إذا كنت تريد التعمق أكثر.
-> نصيحة احترافية: قم بمسح ذاكرة التخزين المؤقت للمتصفح قبل الاختبار لمعرفة كيف يعمل موقعك للزوار لأول مرة - عادةً ما يكون مختلفًا تمامًا عن الزيارات المتكررة!
+> نصيحة احترافية: قم بمسح ذاكرة التخزين المؤقت للمتصفح قبل الاختبار لترى كيف يعمل موقعك للزوار لأول مرة - عادةً ما يكون مختلفًا تمامًا عن الزيارات المتكررة!
-حدد عناصر من الجدول الزمني للملف الشخصي للتكبير على الأحداث التي تحدث أثناء تحميل صفحتك.
+حدد عناصر من خط الزمن الخاص بالملف الشخصي لتكبير الأحداث التي تحدث أثناء تحميل صفحتك.
-احصل على لقطة لأداء صفحتك عن طريق تحديد جزء من الجدول الزمني للملف الشخصي والنظر إلى لوحة الملخص:
+احصل على لقطة لأداء صفحتك عن طريق تحديد جزء من خط الزمن الخاص بالملف الشخصي والنظر إلى لوحة الملخص:

-تحقق من لوحة سجل الأحداث لمعرفة ما إذا كان أي حدث استغرق أكثر من 15 مللي ثانية:
+تحقق من لوحة سجل الأحداث لترى إذا كان أي حدث استغرق أكثر من 15 مللي ثانية:

-✅ تعرف على المحلل الخاص بك! افتح أدوات المطور على هذا الموقع وانظر إذا كان هناك أي اختناقات. ما هو الأصل الذي يستغرق أطول وقت للتحميل؟ الأسرع؟
+✅ تعرف على المحلل الخاص بك! افتح أدوات المطور على هذا الموقع وانظر إذا كانت هناك أي اختناقات. ما هو الأصل الذي يتم تحميله ببطء؟ الأسرع؟
+
+```mermaid
+flowchart TD
+ A[Open DevTools] --> B[Navigate to Performance Tab]
+ B --> C[Click Record Button]
+ C --> D[Perform Actions]
+ D --> E[Stop Recording]
+ E --> F{Analyze Results}
+
+ F --> G[Check Timeline]
+ F --> H[Review Network]
+ F --> I[Examine Scripts]
+ F --> J[Identify Paint Events]
+
+ G --> K{Long Tasks?}
+ H --> L{Large Assets?}
+ I --> M{Render Blocking?}
+ J --> N{Expensive Paints?}
+
+ K -->|Yes| O[Optimize JavaScript]
+ L -->|Yes| P[Compress Assets]
+ M -->|Yes| Q[Add Async/Defer]
+ N -->|Yes| R[Simplify Styles]
+
+ O --> S[Test Again]
+ P --> S
+ Q --> S
+ R --> S
+
+ style A fill:#e1f5fe
+ style F fill:#fff3e0
+ style S fill:#e8f5e8
+```
-## ما الذي يجب البحث عنه عند التحليل
+## ما الذي تبحث عنه عند التحليل
-تشغيل المحلل هو مجرد البداية - المهارة الحقيقية هي معرفة ما تخبرك به تلك الرسوم البيانية الملونة. لا تقلق، ستتعلم قراءة هذه الرسوم. المطورون ذوو الخبرة تعلموا كيفية اكتشاف علامات التحذير قبل أن تصبح مشاكل كاملة.
+تشغيل المحلل هو مجرد البداية - المهارة الحقيقية هي معرفة ما تخبرك به تلك الرسوم البيانية الملونة. لا تقلق، ستعتاد على قراءتها. تعلم المطورون ذوو الخبرة اكتشاف علامات التحذير قبل أن تصبح مشاكل كاملة.
-دعونا نتحدث عن المشتبه بهم المعتادين - مثيري المشاكل في الأداء الذين يميلون إلى التسلل إلى مشاريع الويب. مثلما كان على ماري كوري مراقبة مستويات الإشعاع بعناية في مختبرها، نحتاج إلى مراقبة أنماط معينة تشير إلى وجود مشكلة. اكتشاف هذه الأمور مبكرًا سيوفر لك (ولمستخدميك) الكثير من الإحباط.
+دعونا نتحدث عن المشتبه بهم المعتادين - المشاكل التي تميل إلى التسلل إلى مشاريع الويب. مثلما كان على ماري كوري مراقبة مستويات الإشعاع بعناية في مختبرها، نحتاج إلى مراقبة أنماط معينة تشير إلى وجود مشاكل. اكتشاف هذه الأمور مبكرًا سيوفر لك (ولمستخدميك) الكثير من الإحباط.
-**أحجام الأصول**: أصبحت المواقع الإلكترونية "أثقل" على مر السنين، والكثير من هذا الوزن الإضافي يأتي من الصور. إنه مثل أننا كنا نحشو المزيد والمزيد في حقائبنا الرقمية.
+**أحجام الأصول**: أصبحت المواقع "أثقل" على مر السنين، والكثير من هذا الوزن الزائد يأتي من الصور. إنه مثل أننا كنا نحشو المزيد والمزيد في حقائبنا الرقمية.
✅ تحقق من [أرشيف الإنترنت](https://httparchive.org/reports/page-weight) لترى كيف نمت أحجام الصفحات بمرور الوقت - إنه كاشف للغاية.
**إليك كيفية الحفاظ على أصولك محسنة:**
-- **اضغط** تلك الصور! يمكن أن تقلل التنسيقات الحديثة مثل WebP من أحجام الملفات بشكل كبير
-- **قدم** الحجم الصحيح للصورة لكل جهاز - لا حاجة لإرسال صور ضخمة لأجهزة سطح المكتب إلى الهواتف
-- **قلل** من CSS وJavaScript - كل بايت مهم
-- **استخدم** التحميل الكسول بحيث يتم تنزيل الصور فقط عندما يقوم المستخدمون بالتمرير إليها
+- **ضغط** تلك الصور! يمكن أن تقلل التنسيقات الحديثة مثل WebP من أحجام الملفات بشكل كبير
+- **تقديم** حجم الصورة المناسب لكل جهاز - لا حاجة لإرسال صور ضخمة للهواتف
+- **تصغير** CSS وJavaScript - كل بايت مهم
+- **استخدام** التحميل الكسول بحيث يتم تنزيل الصور فقط عندما يقوم المستخدمون بالتمرير إليها
-**التنقل في DOM**: يجب على المتصفح بناء نموذج كائن المستند بناءً على الكود الذي تكتبه، لذا من مصلحة أداء الصفحة الجيد الحفاظ على العلامات إلى الحد الأدنى، باستخدام وتنسيق ما تحتاجه الصفحة فقط. على هذا النحو، يمكن تحسين CSS الزائدة المرتبطة بصفحة؛ الأنماط التي تحتاج إلى استخدامها فقط في صفحة واحدة لا تحتاج إلى تضمينها في ورقة الأنماط الرئيسية، على سبيل المثال.
+**التنقل عبر DOM**: يجب على المتصفح بناء نموذج الكائنات المستندة إلى الوثيقة بناءً على الكود الذي تكتبه، لذا من مصلحة الأداء الجيد للصفحة الحفاظ على العلامات إلى الحد الأدنى، واستخدام وتنسيق ما تحتاجه الصفحة فقط. على هذا النحو، يمكن تحسين CSS الزائد المرتبط بالصفحة؛ الأنماط التي تحتاج إلى استخدامها فقط في صفحة واحدة لا تحتاج إلى تضمينها في ورقة الأنماط الرئيسية، على سبيل المثال.
**استراتيجيات رئيسية لتحسين DOM:**
-- **قلل** عدد عناصر HTML ومستويات التعشيق
-- **أزل** قواعد CSS غير المستخدمة ودمج أوراق الأنماط بكفاءة
-- **نظم** CSS لتحميل ما هو مطلوب فقط لكل صفحة
-- **هيكل** HTML بشكل دلالي لتحليل أفضل من المتصفح
+- **تقليل** عدد عناصر HTML ومستويات التداخل
+- **إزالة** قواعد CSS غير المستخدمة ودمج أوراق الأنماط بكفاءة
+- **تنظيم** CSS لتحميل ما هو مطلوب فقط لكل صفحة
+- **هيكلة** HTML بشكل دلالي لتحسين تحليل المتصفح
-**JavaScript**: يجب على كل مطور JavaScript مراقبة النصوص "المعطلة للتقديم" التي يجب تحميلها قبل أن يتمكن باقي DOM من التنقل والرسم في المتصفح. فكر في استخدام `defer` مع النصوص المضمنة الخاصة بك (كما هو الحال في وحدة Terrarium).
+**JavaScript**: يجب على كل مطور JavaScript مراقبة النصوص التي تعيق التقديم والتي يجب تحميلها قبل أن يتمكن DOM من التنقل والرسم في المتصفح. فكر في استخدام `defer` مع النصوص المضمنة الخاصة بك (كما هو الحال في وحدة Terrarium).
-**تقنيات تحسين JavaScript الحديثة:**
-- **استخدم** السمة `defer` لتحميل النصوص بعد تحليل DOM
-- **نفذ** تقسيم الكود لتحميل JavaScript الضروري فقط
-- **طبق** التحميل الكسول للوظائف غير الحرجة
-- **قلل** من استخدام المكتبات والأطر الثقيلة عند الإمكان
+**تقنيات حديثة لتحسين JavaScript:**
+- **استخدام** خاصية `defer` لتحميل النصوص بعد تحليل DOM
+- **تنفيذ** تقسيم الكود لتحميل JavaScript الضروري فقط
+- **تطبيق** التحميل الكسول للوظائف غير الحرجة
+- **تقليل** استخدام المكتبات الثقيلة والأطر عند الإمكان
✅ جرب بعض المواقع على [موقع اختبار سرعة الموقع](https://www.webpagetest.org/) لتتعرف على الفحوصات الشائعة التي يتم إجراؤها لتحديد أداء الموقع.
-الآن بعد أن لديك فكرة عن كيفية عرض المتصفح للأصول التي ترسلها إليه، دعنا نلقي نظرة على آخر الأشياء التي تحتاج إلى القيام بها لإكمال الإضافة الخاصة بك:
+### 🔄 **تقييم تربوي**
+**فهم الأداء**: قبل بناء ميزات الإضافة، تأكد من أنك تستطيع:
+- ✅ شرح المسار الحرج للتقديم من HTML إلى البكسل
+- ✅ تحديد الاختناقات الشائعة في أداء تطبيقات الويب
+- ✅ استخدام أدوات المطور الخاصة بالمتصفح لتحليل أداء الصفحة
+- ✅ فهم كيف تؤثر أحجام الأصول وتعقيد DOM على السرعة
-### إنشاء وظيفة لحساب اللون
+**اختبار ذاتي سريع**: ماذا يحدث عندما يكون لديك JavaScript يعيق التقديم؟
+*الإجابة: يجب على المتصفح تنزيل وتنفيذ النص قبل أن يتمكن من متابعة تحليل HTML وتقديم الصفحة*
-الآن سنقوم بإنشاء وظيفة تحول البيانات الرقمية إلى ألوان ذات معنى. فكر فيها كنظام إشارات المرور - الأخضر للطاقة النظيفة، والأحمر للكثافة الكربونية العالية.
+**تأثير الأداء في العالم الحقيقي**:
+- **تأخير 100 مللي ثانية**: يلاحظ المستخدمون البطء
+- **تأخير 1 ثانية**: يبدأ المستخدمون بفقدان التركيز
+- **تأخير 3+ ثوانٍ**: 40% من المستخدمين يتخلون عن الصفحة
+- **شبكات الهواتف المحمولة**: الأداء يصبح أكثر أهمية
-ستأخذ هذه الوظيفة بيانات ثاني أكسيد الكربون من API الخاص بنا وتحدد اللون الذي يمثل بشكل أفضل التأثير البيئي. يشبه ذلك كيف يستخدم العلماء الترميز اللوني في خرائط الحرارة لتصور أنماط البيانات المعقدة - من درجات حرارة المحيطات إلى تكوين النجوم. دعونا نضيف هذا إلى `/src/index.js`، مباشرة بعد تلك المتغيرات `const` التي قمنا بإعدادها سابقًا:
+الآن بعد أن لديك فكرة عن كيفية تقديم المتصفح للأصول التي ترسلها إليه، دعونا نلقي نظرة على آخر الأشياء التي تحتاج إلى القيام بها لإكمال الإضافة الخاصة بك:
+
+### إنشاء وظيفة لحساب اللون
+
+الآن سنقوم بإنشاء وظيفة تحول البيانات الرقمية إلى ألوان ذات معنى. فكر فيها كنظام إشارات المرور - الأخضر للطاقة النظيفة، الأحمر للكثافة الكربونية العالية.
+
+هذه الوظيفة ستأخذ بيانات CO2 من API الخاص بنا وتحدد اللون الذي يمثل التأثير البيئي بشكل أفضل. إنها مشابهة لكيفية استخدام العلماء الترميز اللوني في خرائط الحرارة لتصور أنماط البيانات المعقدة - من درجات حرارة المحيطات إلى تشكيل النجوم. دعونا نضيف هذا إلى `/src/index.js`، مباشرة بعد تلك المتغيرات `const` التي قمنا بإعدادها سابقًا:
+
+```mermaid
+flowchart LR
+ A[CO2 Value] --> B[Find Closest Scale Point]
+ B --> C[Get Scale Index]
+ C --> D[Map to Color]
+ D --> E[Send to Background]
+
+ subgraph "Color Scale"
+ F["0-150: Green (Clean)"]
+ G["150-600: Yellow (Moderate)"]
+ H["600-750: Orange (High)"]
+ I["750+: Brown (Very High)"]
+ end
+
+ subgraph "Message Passing"
+ J[Content Script]
+ K[chrome.runtime.sendMessage]
+ L[Background Script]
+ M[Icon Update]
+ end
+
+ style A fill:#e1f5fe
+ style D fill:#e8f5e8
+ style E fill:#fff3e0
+```
```javascript
function calculateColor(value) {
@@ -133,33 +287,52 @@ function calculateColor(value) {
}
```
-**دعونا نفصل هذه الوظيفة الذكية الصغيرة:**
-- **إعداد** مصفوفتين - واحدة لمستويات ثاني أكسيد الكربون، وأخرى للألوان (الأخضر = نظيف، البني = ملوث!)
-- **إيجاد** أقرب تطابق لقيمة ثاني أكسيد الكربون الفعلية باستخدام بعض الفرز الذكي للمصفوفة
+**دعونا نفصل هذه الوظيفة الذكية:**
+- **إعداد** مصفوفتين - واحدة لمستويات CO2، وأخرى للألوان (الأخضر = نظيف، البني = ملوث!)
+- **العثور** على أقرب تطابق لقيمة CO2 الفعلية باستخدام بعض الفرز الذكي للمصفوفة
- **الحصول** على اللون المطابق باستخدام طريقة findIndex()
- **إرسال** رسالة إلى نص الخلفية الخاص بـ Chrome مع اللون الذي اخترناه
-- **استخدام** القوالب النصية (تلك العلامات الخلفية) لتنسيق النصوص بشكل أنيق
-- **الحفاظ** على كل شيء منظمًا باستخدام إعلانات const
-
-[API](https://developer.chrome.com/extensions/runtime) `chrome.runtime` يشبه النظام العصبي لإضافتك - فهو يتعامل مع جميع الاتصالات والمهام التي تتم خلف الكواليس:
-
-> "استخدم API chrome.runtime لاسترداد صفحة الخلفية، وإرجاع تفاصيل حول الملف التعريفي، والاستماع إلى الأحداث والاستجابة لها في دورة حياة التطبيق أو الإضافة. يمكنك أيضًا استخدام هذا API لتحويل مسار URL النسبي إلى URL مؤهل بالكامل."
-
-**لماذا API Chrome Runtime مفيد جدًا:**
-- **يسمح** لأجزاء مختلفة من الإضافة بالتحدث مع بعضها البعض
-- **يتعامل** مع العمل الخلفي دون تجميد واجهة المستخدم
-- **يدير** أحداث دورة حياة الإضافة الخاصة بك
-- **يجعل** تمرير الرسائل بين النصوص أمرًا سهلاً للغاية
-
-✅ إذا كنت تطور هذه الإضافة لمتصفح Edge، فقد يفاجئك أنك تستخدم API Chrome. تعمل إصدارات متصفح Edge الأحدث على محرك متصفح Chromium، لذا يمكنك الاستفادة من هذه الأدوات.
+- **استخدام** القوالب النصية (تلك العلامات الخلفية) لتنسيق النصوص بشكل أنظف
+- **الحفاظ** على كل شيء منظمًا باستخدام التصريحات const
+
+واجهة برمجة التطبيقات `chrome.runtime` [API](https://developer.chrome.com/extensions/runtime) تشبه الجهاز العصبي للإضافة الخاصة بك - فهي تتعامل مع كل الاتصالات والمهام التي تحدث خلف الكواليس:
+
+> "استخدم واجهة برمجة التطبيقات chrome.runtime لاسترداد صفحة الخلفية، وإرجاع تفاصيل حول الملف التعريفي، والاستماع إلى الأحداث والاستجابة لها في دورة حياة التطبيق أو الإضافة. يمكنك أيضًا استخدام هذه الواجهة لتحويل المسارات النسبية لعناوين URL إلى عناوين URL مؤهلة بالكامل."
+
+**لماذا واجهة برمجة التطبيقات Chrome Runtime مفيدة جدًا:**
+- **تسمح** لأجزاء مختلفة من الإضافة بالتواصل مع بعضها البعض
+- **تتعامل** مع العمل الخلفي دون تجميد واجهة المستخدم
+- **تدير** أحداث دورة حياة الإضافة الخاصة بك
+- **تجعل** تمرير الرسائل بين النصوص أمرًا سهلاً للغاية
+
+✅ إذا كنت تطور هذه الإضافة للمتصفح Edge، قد يفاجئك أنك تستخدم واجهة برمجة تطبيقات Chrome. الإصدارات الأحدث من متصفح Edge تعمل على محرك متصفح Chromium، لذا يمكنك الاستفادة من هذه الأدوات.
+
+```mermaid
+architecture-beta
+ group browser(logos:chrome)[Browser]
+
+ service popup(logos:html5)[Popup UI] in browser
+ service content(logos:javascript)[Content Script] in browser
+ service background(database)[Background Script] in browser
+ service api(logos:api)[External API] in browser
+
+ popup:R -- L:content
+ content:R -- L:background
+ background:T -- B:api
+ content:T -- B:api
+
+ junction junctionCenter in browser
+ popup:R -- L:junctionCenter
+ junctionCenter:R -- L:background
+```
-> **نصيحة احترافية**: إذا كنت تريد تحليل أداء إضافة متصفح، فقم بفتح أدوات المطور من داخل الإضافة نفسها، حيث إنها تعتبر مثيل متصفح منفصل. يمنحك هذا الوصول إلى مقاييس أداء خاصة بالإضافة.
+> **نصيحة احترافية**: إذا كنت تريد تحليل أداء إضافة متصفح، قم بفتح أدوات المطور من داخل الإضافة نفسها، حيث إنها تعتبر مثيل متصفح منفصل. هذا يمنحك الوصول إلى مقاييس أداء خاصة بالإضافة.
-### تعيين لون أيقونة افتراضي
+### تعيين لون افتراضي للأيقونة
-قبل أن نبدأ في جلب البيانات الحقيقية، دعنا نعطي الإضافة الخاصة بنا نقطة انطلاق. لا أحد يحب النظر إلى أيقونة فارغة أو تبدو مكسورة. سنبدأ بلون أخضر حتى يعرف المستخدمون أن الإضافة تعمل من اللحظة التي يقومون بتثبيتها.
+قبل أن نبدأ في جلب البيانات الحقيقية، دعونا نعطي الإضافة الخاصة بنا نقطة بداية. لا أحد يحب النظر إلى أيقونة فارغة أو تبدو مكسورة. سنبدأ بلون أخضر حتى يعرف المستخدمون أن الإضافة تعمل من اللحظة التي يقومون بتثبيتها.
-في وظيفة `init()` الخاصة بك، دعنا نعد هذا اللون الأخضر الافتراضي:
+في وظيفة `init()` الخاصة بك، دعونا نعد تلك الأيقونة الخضراء الافتراضية:
```javascript
chrome.runtime.sendMessage({
@@ -170,17 +343,17 @@ chrome.runtime.sendMessage({
});
```
-**ما الذي تحققه هذه التهيئة:**
+**ما الذي يحققه هذا التهيئة:**
- **تعيين** لون أخضر محايد كحالة افتراضية
-- **توفير** ملاحظات بصرية فورية عند تحميل الإضافة
-- **تأسيس** نمط الاتصال مع نص الخلفية
-- **ضمان** رؤية المستخدمين لإضافة وظيفية قبل تحميل البيانات
+- **توفير** ردود فعل بصرية فورية عند تحميل الإضافة
+- **إنشاء** نمط الاتصال مع نص الخلفية
+- **ضمان** أن يرى المستخدمون إضافة وظيفية قبل تحميل البيانات
### استدعاء الوظيفة، تنفيذ الاستدعاء
-الآن دعنا نربط كل شيء معًا بحيث عندما تصل بيانات ثاني أكسيد الكربون الجديدة، يتم تحديث الأيقونة تلقائيًا باللون المناسب. إنه مثل توصيل الدائرة النهائية في جهاز إلكتروني - فجأة تعمل جميع المكونات الفردية كنظام واحد.
+الآن دعونا نربط كل شيء معًا بحيث عندما تأتي بيانات CO2 الجديدة، يتم تحديث الأيقونة تلقائيًا باللون المناسب. إنه مثل توصيل الدائرة النهائية في جهاز إلكتروني - فجأة تعمل جميع المكونات الفردية كنظام واحد.
-أضف هذا السطر مباشرة بعد حصولك على بيانات ثاني أكسيد الكربون من API:
+أضف هذا السطر مباشرة بعد الحصول على بيانات CO2 من API:
```javascript
// After retrieving CO2 data from the API
@@ -188,10 +361,10 @@ chrome.runtime.sendMessage({
calculateColor(CO2);
```
-**ما الذي تحققه هذه التكاملات:**
-- **ربط** تدفق بيانات API بنظام المؤشر البصري
+**ما الذي يحققه هذا التكامل:**
+- **ربط** تدفق بيانات API مع نظام المؤشر البصري
- **تشغيل** تحديثات الأيقونة تلقائيًا عند وصول بيانات جديدة
-- **ضمان** ملاحظات بصرية في الوقت الفعلي بناءً على كثافة الكربون الحالية
+- **ضمان** ردود فعل بصرية في الوقت الفعلي بناءً على كثافة الكربون الحالية
- **الحفاظ** على فصل الاهتمامات بين جلب البيانات ومنطق العرض
وأخيرًا، في `/dist/background.js`، أضف المستمع لهذه الاستدعاءات الخلفية:
@@ -223,41 +396,72 @@ function drawIcon(value) {
```
**ما الذي يفعله هذا النص الخلفي:**
-- **الاستماع** للرسائل من النص الرئيسي الخاص بك (مثل موظف استقبال يتلقى المكالمات)
+- **الاستماع** إلى الرسائل من النص الرئيسي الخاص بك (مثل موظف استقبال يتلقى المكالمات)
- **معالجة** طلبات 'updateIcon' لتغيير أيقونة شريط الأدوات الخاص بك
-- **إنشاء** أيقونات جديدة أثناء التنقل باستخدام Canvas API
-- **رسم** دائرة ملونة بسيطة تظهر كثافة الكربون الحالية
-- **تحديث** شريط الأدوات الخاص بالمتصفح بالأيقونة الجديدة
+- **إنشاء** أيقونات جديدة أثناء التنقل باستخدام واجهة برمجة التطبيقات Canvas
+- **رسم** دائرة بسيطة ملونة تظهر كثافة الكربون الحالية
+- **تحديث** شريط أدوات المتصفح الخاص بك بالأيقونة الجديدة
- **استخدام** OffscreenCanvas لأداء سلس (بدون تجميد واجهة المستخدم)
-✅ ستتعلم المزيد عن Canvas API في [دروس لعبة الفضاء](../../6-space-game/2-drawing-to-canvas/README.md).
+✅ ستتعلم المزيد عن واجهة برمجة التطبيقات Canvas في [دروس لعبة الفضاء](../../6-space-game/2-drawing-to-canvas/README.md).
+
+```mermaid
+sequenceDiagram
+ participant CS as Content Script
+ participant BG as Background Script
+ participant Canvas as OffscreenCanvas
+ participant Browser as Browser Icon
+
+ CS->>BG: sendMessage({action: 'updateIcon', color})
+ BG->>Canvas: new OffscreenCanvas(200, 200)
+ Canvas->>Canvas: getContext('2d')
+ Canvas->>Canvas: beginPath() + fillStyle + arc()
+ Canvas->>Canvas: fill() + getImageData()
+ Canvas->>BG: Return image data
+ BG->>Browser: chrome.action.setIcon(imageData)
+ Browser->>Browser: Update toolbar icon
+```
+
+### 🔄 **تقييم تربوي**
+**فهم الإضافة بالكامل**: تحقق من إتقانك للنظام بأكمله:
+- ✅ كيف يعمل تمرير الرسائل بين النصوص المختلفة للإضافة؟
+- ✅ لماذا نستخدم OffscreenCanvas بدلاً من Canvas العادي لتحسين الأداء؟
+- ✅ ما هو دور واجهة برمجة التطبيقات Chrome Runtime في بنية الإضافات؟
+- ✅ كيف يقوم خوارزمية حساب الألوان بربط البيانات بالتغذية البصرية؟
+
+**اعتبارات الأداء**: الآن تعرض إضافتك:
+- **رسائل فعالة**: تواصل نظيف بين سياقات السكربت
+- **عرض محسن**: OffscreenCanvas يمنع حجب واجهة المستخدم
+- **تحديثات في الوقت الفعلي**: تغييرات ديناميكية للأيقونة بناءً على البيانات الحية
+- **إدارة الذاكرة**: تنظيف مناسب ومعالجة الموارد
-**حان وقت اختبار الإضافة الخاصة بك:**
+**حان وقت اختبار الإضافة:**
- **قم ببناء** كل شيء باستخدام `npm run build`
-- **أعد تحميل** الإضافة الخاصة بك في المتصفح (لا تنسَ هذه الخطوة)
-- **افتح** الإضافة الخاصة بك وشاهد تلك الأيقونة تتغير ألوانها
+- **أعد تحميل** الإضافة في المتصفح (لا تنسَ هذه الخطوة)
+- **افتح** الإضافة وشاهد كيف تتغير الأيقونة ألوانها
- **تحقق** من كيفية استجابتها لبيانات الكربون الحقيقية من جميع أنحاء العالم
-الآن ستعرف في لمحة ما إذا كان الوقت مناسبًا لتشغيل الغسالة أو إذا كان يجب عليك الانتظار للحصول على طاقة أنظف. لقد قمت ببناء شيء مفيد حقًا وتعلمت عن أداء المتصفح على طول الطريق.
+الآن ستعرف بنظرة واحدة ما إذا كان الوقت مناسبًا لغسل الملابس أو إذا كان عليك الانتظار للحصول على طاقة أنظف. لقد قمت ببناء شيء مفيد حقًا وتعلمت عن أداء المتصفح في نفس الوقت.
## تحدي GitHub Copilot Agent 🚀
-استخدم وضع الوكيل لإكمال التحدي التالي:
+استخدم وضع Agent لإكمال التحدي التالي:
-**الوصف:** عزز قدرات مراقبة الأداء لإضافة المتصفح عن طريق إضافة ميزة تتبع وعرض أوقات التحميل لمكونات الإضافة المختلفة.
+**الوصف:** تحسين قدرات مراقبة الأداء للإضافة عن طريق إضافة ميزة تتبع وعرض أوقات تحميل المكونات المختلفة للإضافة.
-**الموجه:** قم بإنشاء نظام مراقبة الأداء لإضافة المتصفح يقيس ويسجل الوقت الذي يستغرقه جلب بيانات ثاني أكسيد الكربون من API، حساب الألوان، وتحديث الأيقونة. أضف وظيفة تسمى `performanceTracker` تستخدم Performance API لقياس هذه العمليات وعرض النتائج في وحدة تحكم المتصفح مع الطوابع الزمنية ومقاييس المدة.
+**المهمة:** قم بإنشاء نظام مراقبة الأداء للإضافة يقيس ويسجل الوقت الذي يستغرقه جلب بيانات CO2 من API، حساب الألوان، وتحديث الأيقونة. أضف وظيفة تسمى `performanceTracker` تستخدم Performance API لقياس هذه العمليات وعرض النتائج في وحدة تحكم المتصفح مع الطوابع الزمنية ومقاييس المدة.
-تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
+تعرف على المزيد حول [وضع Agent](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
## 🚀 التحدي
-إليك مهمة تحقيق مثيرة: اختر بعض المواقع المفتوحة المصدر التي كانت موجودة منذ سنوات (مثل ويكيبيديا، GitHub، أو Stack Overflow) وقم بالبحث في تاريخ الالتزامات الخاصة بها. هل يمكنك تحديد الأماكن التي قاموا فيها بتحسين الأداء؟ ما هي المشاكل التي استمرت في الظهور؟
+
+إليك مهمة تحقيق مثيرة: اختر بعض المواقع المفتوحة المصدر التي كانت موجودة لسنوات (مثل Wikipedia، GitHub، أو Stack Overflow) وابحث في تاريخ الالتزامات الخاصة بها. هل يمكنك تحديد أين قاموا بتحسين الأداء؟ ما هي المشاكل التي استمرت في الظهور؟
**نهج التحقيق الخاص بك:**
-- **ابحث** في رسائل الالتزامات عن كلمات مثل "تحسين"، "أداء"، أو "أسرع"
-- **لاحظ** الأنماط - هل يستمرون في إصلاح نفس أنواع المشاكل؟
+- **ابحث** في رسائل الالتزام عن كلمات مثل "تحسين"، "أداء"، أو "أسرع"
+- **انظر** إلى الأنماط - هل يستمرون في إصلاح نفس أنواع المشكلات؟
- **حدد** الأسباب الشائعة التي تؤدي إلى بطء المواقع
-- **شارك** ما تكتشفه - يمكن للمطورين الآخرين التعلم من أمثلة واقعية
+- **شارك** ما تكتشفه - يتعلم المطورون الآخرون من الأمثلة الواقعية
## اختبار ما بعد المحاضرة
@@ -265,15 +469,135 @@ function drawIcon(value) {
## المراجعة والدراسة الذاتية
-فكر في الاشتراك في [نشرة أخبار الأداء](https://perf.email/)
-
-قم بالتحقيق في بعض الطرق التي تقيس بها المتصفحات أداء الويب من خلال النظر في علامات الأداء في أدوات الويب الخاصة بها. هل تجد أي اختلافات كبيرة؟
+فكر في الاشتراك في [نشرة الأداء](https://perf.email/)
+
+استكشف بعض الطرق التي تقيس بها المتصفحات أداء الويب من خلال النظر في علامات الأداء في أدوات الويب الخاصة بها. هل تجد أي اختلافات كبيرة؟
+
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] افتح مدير مهام المتصفح (Shift+Esc في Chrome) لرؤية استخدام موارد الإضافة
+- [ ] استخدم علامة الأداء في DevTools لتسجيل وتحليل أداء صفحة الويب
+- [ ] تحقق من صفحة الإضافات في المتصفح لمعرفة أي الإضافات تؤثر على وقت بدء التشغيل
+- [ ] حاول تعطيل الإضافات مؤقتًا لرؤية اختلافات الأداء
+
+### 🎯 **ما يمكنك تحقيقه خلال الساعة**
+- [ ] أكمل اختبار ما بعد الدرس وفهم مفاهيم الأداء
+- [ ] قم بتنفيذ سكربت خلفي لإضافتك في المتصفح
+- [ ] تعلم استخدام browser.alarms للمهام الخلفية الفعالة
+- [ ] مارس تمرير الرسائل بين سكربتات المحتوى والسكربتات الخلفية
+- [ ] قم بقياس وتحسين استخدام موارد الإضافة
+
+### 📅 **رحلة الأداء الخاصة بك لمدة أسبوع**
+- [ ] أكمل إضافة متصفح عالية الأداء مع وظائف خلفية
+- [ ] أتقن عمال الخدمة وهندسة الإضافات الحديثة
+- [ ] قم بتنفيذ استراتيجيات مزامنة البيانات والتخزين المؤقت الفعالة
+- [ ] تعلم تقنيات تصحيح الأخطاء المتقدمة لأداء الإضافات
+- [ ] قم بتحسين الإضافة من حيث الوظائف وكفاءة الموارد
+- [ ] قم بإنشاء اختبارات شاملة لسيناريوهات أداء الإضافة
+
+### 🌟 **إتقان التحسين على مدار شهر**
+- [ ] قم ببناء إضافات متصفح على مستوى المؤسسات بأداء مثالي
+- [ ] تعلم عن Web Workers، Service Workers، وأداء الويب الحديث
+- [ ] ساهم في مشاريع مفتوحة المصدر تركز على تحسين الأداء
+- [ ] أتقن أساسيات المتصفح وتقنيات تصحيح الأخطاء المتقدمة
+- [ ] قم بإنشاء أدوات مراقبة الأداء وأدلة أفضل الممارسات
+- [ ] كن خبيرًا في الأداء يساعد في تحسين تطبيقات الويب
+
+## 🎯 جدول زمني لإتقان تطوير إضافات المتصفح
+
+```mermaid
+timeline
+ title Complete Extension Development Progression
+
+ section Performance Fundamentals (20 minutes)
+ Browser Profiling: DevTools mastery
+ : Timeline analysis
+ : Bottleneck identification
+ : Critical rendering path
+
+ section Background Tasks (25 minutes)
+ Extension Architecture: Message passing
+ : Background scripts
+ : Runtime API usage
+ : Cross-context communication
+
+ section Visual Feedback (30 minutes)
+ Dynamic UI: Color calculation algorithms
+ : Canvas API integration
+ : Icon generation
+ : Real-time updates
+
+ section Performance Optimization (35 minutes)
+ Efficient Code: Async operations
+ : Memory management
+ : Resource cleanup
+ : Performance monitoring
+
+ section Production Ready (45 minutes)
+ Polish & Testing: Cross-browser compatibility
+ : Error handling
+ : User experience
+ : Performance validation
+
+ section Advanced Features (1 week)
+ Extension Ecosystem: Chrome Web Store
+ : User feedback
+ : Analytics integration
+ : Update management
+
+ section Professional Development (2 weeks)
+ Enterprise Extensions: Team collaboration
+ : Code reviews
+ : CI/CD pipelines
+ : Security audits
+
+ section Expert Mastery (1 month)
+ Platform Expertise: Advanced Chrome APIs
+ : Performance optimization
+ : Architecture patterns
+ : Open source contribution
+```
-## الواجب
+### 🛠️ مجموعة أدوات تطوير الإضافات الكاملة الخاصة بك
+
+بعد إكمال هذه الثلاثية، أصبحت الآن خبيرًا في:
+- **هندسة المتصفح**: فهم عميق لكيفية دمج الإضافات مع أنظمة المتصفح
+- **تحليل الأداء**: القدرة على تحديد وإصلاح الاختناقات باستخدام أدوات المطور
+- **برمجة غير متزامنة**: أنماط JavaScript الحديثة للعمليات المستجيبة وغير الحاجزة
+- **تكامل API**: جلب البيانات الخارجية مع المصادقة ومعالجة الأخطاء
+- **تصميم بصري**: تحديثات واجهة المستخدم الديناميكية وإنشاء الرسومات المستندة إلى Canvas
+- **تمرير الرسائل**: التواصل بين السكربتات في هندسة الإضافات
+- **تجربة المستخدم**: حالات التحميل، معالجة الأخطاء، وتفاعلات بديهية
+- **مهارات الإنتاج**: اختبار، تصحيح، وتحسين للنشر في العالم الحقيقي
+
+**تطبيقات العالم الحقيقي**: مهارات تطوير الإضافات الخاصة بك تنطبق مباشرة على:
+- **تطبيقات الويب التقدمية**: أنماط هندسة وأداء مشابهة
+- **تطبيقات سطح المكتب Electron**: تطبيقات عبر الأنظمة باستخدام تقنيات الويب
+- **تطبيقات الهاتف الهجينة**: تطوير Cordova/PhoneGap باستخدام واجهات برمجة التطبيقات للويب
+- **تطبيقات الويب المؤسسية**: أدوات لوحة القيادة والإنتاجية المعقدة
+- **إضافات Chrome DevTools**: أدوات المطور المتقدمة وتصحيح الأخطاء
+- **تكامل واجهات برمجة التطبيقات للويب**: أي تطبيق يتواصل مع خدمات خارجية
+
+**التأثير المهني**: يمكنك الآن:
+- **بناء** إضافات متصفح جاهزة للإنتاج من الفكرة إلى النشر
+- **تحسين** أداء تطبيقات الويب باستخدام أدوات تحليل الأداء القياسية
+- **تصميم** أنظمة قابلة للتوسع مع فصل مناسب للمكونات
+- **تصحيح** العمليات غير المتزامنة المعقدة والتواصل بين السياقات
+- **المساهمة** في مشاريع الإضافات مفتوحة المصدر ومعايير المتصفح
+
+**فرص المستوى التالي**:
+- **مطور Chrome Web Store**: نشر إضافات لملايين المستخدمين
+- **مهندس أداء الويب**: التخصص في التحسين وتجربة المستخدم
+- **مطور منصة المتصفح**: المساهمة في تطوير محركات المتصفح
+- **منشئ إطار عمل الإضافات**: بناء أدوات تساعد المطورين الآخرين
+- **علاقات المطورين**: مشاركة المعرفة من خلال التعليم وإنشاء المحتوى
+
+🌟 **إنجاز محقق**: لقد قمت ببناء إضافة متصفح كاملة الوظائف تُظهر ممارسات تطوير احترافية ومعايير ويب حديثة!
+
+## المهمة
[تحليل موقع للأداء](assignment.md)
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-space-game/1-introduction/README.md b/translations/ar/6-space-game/1-introduction/README.md
index 8ffff79d88..bedd2f5f4f 100644
--- a/translations/ar/6-space-game/1-introduction/README.md
+++ b/translations/ar/6-space-game/1-introduction/README.md
@@ -1,21 +1,68 @@
# بناء لعبة فضاء الجزء الأول: المقدمة
-
-
-تمامًا كما تنسق وحدة التحكم في مهام ناسا بين أنظمة متعددة أثناء إطلاق الفضاء، سنقوم ببناء لعبة فضاء تُظهر كيف يمكن لأجزاء مختلفة من البرنامج أن تعمل معًا بسلاسة. أثناء إنشاء شيء يمكنك فعلاً اللعب به، ستتعلم مفاهيم البرمجة الأساسية التي تنطبق على أي مشروع برمجي.
+```mermaid
+journey
+ title Your Game Development Journey
+ section Foundation
+ Learn game architecture: 3: Student
+ Understand inheritance: 4: Student
+ Explore composition: 4: Student
+ section Communication
+ Build pub/sub system: 4: Student
+ Design event flow: 5: Student
+ Connect components: 5: Student
+ section Application
+ Create game objects: 5: Student
+ Implement patterns: 5: Student
+ Plan game structure: 5: Student
+```
-سنستكشف نهجين أساسيين لتنظيم الكود: الوراثة والتركيب. هذه ليست مجرد مفاهيم أكاديمية – إنها نفس الأنماط التي تدعم كل شيء من ألعاب الفيديو إلى أنظمة البنوك. سنقوم أيضًا بتنفيذ نظام اتصال يسمى pub/sub يعمل مثل شبكات الاتصال المستخدمة في المركبات الفضائية، مما يسمح للمكونات المختلفة بمشاركة المعلومات دون إنشاء تبعيات.
+
-بنهاية هذه السلسلة، ستفهم كيفية بناء تطبيقات يمكنها التوسع والتطور – سواء كنت تطور ألعابًا، تطبيقات ويب، أو أي نظام برمجي آخر.
+تمامًا كما تنسق وحدة التحكم في مهام ناسا بين الأنظمة المختلفة أثناء إطلاق المركبة الفضائية، سنقوم ببناء لعبة فضاء تُظهر كيف يمكن لأجزاء مختلفة من البرنامج أن تعمل معًا بسلاسة. أثناء إنشاء شيء يمكنك بالفعل اللعب به، ستتعلم مفاهيم البرمجة الأساسية التي تنطبق على أي مشروع برمجي.
+
+سنستكشف نهجين أساسيين لتنظيم الكود: الوراثة والتركيب. هذه ليست مجرد مفاهيم أكاديمية – بل هي نفس الأنماط التي تدعم كل شيء من ألعاب الفيديو إلى أنظمة البنوك. سنقوم أيضًا بتنفيذ نظام اتصال يسمى pub/sub يعمل مثل شبكات الاتصال المستخدمة في المركبات الفضائية، مما يسمح للمكونات المختلفة بمشاركة المعلومات دون إنشاء تبعيات.
+
+بحلول نهاية هذه السلسلة، ستفهم كيفية بناء تطبيقات يمكن أن تتوسع وتتطور – سواء كنت تطور ألعابًا أو تطبيقات ويب أو أي نظام برمجي آخر.
+
+```mermaid
+mindmap
+ root((Game Architecture))
+ Object Organization
+ Inheritance
+ Composition
+ Class Hierarchies
+ Behavior Mixing
+ Communication Patterns
+ Pub/Sub System
+ Event Emitters
+ Message Passing
+ Loose Coupling
+ Game Objects
+ Properties (x, y)
+ Behaviors (move, collide)
+ Lifecycle Management
+ State Management
+ Design Patterns
+ Factory Functions
+ Observer Pattern
+ Component System
+ Event-Driven Architecture
+ Scalability
+ Modular Design
+ Maintainable Code
+ Testing Strategies
+ Performance Optimization
+```
## اختبار ما قبل المحاضرة
@@ -23,22 +70,61 @@ CO_OP_TRANSLATOR_METADATA:
## الوراثة والتركيب في تطوير الألعاب
-مع نمو المشاريع في التعقيد، يصبح تنظيم الكود أمرًا بالغ الأهمية. ما يبدأ كبرنامج بسيط يمكن أن يصبح صعب الصيانة بدون هيكل مناسب – تمامًا كما تطلبت مهام أبولو تنسيقًا دقيقًا بين آلاف المكونات.
+مع نمو المشاريع في التعقيد، يصبح تنظيم الكود أمرًا بالغ الأهمية. ما يبدأ كبرنامج بسيط يمكن أن يصبح صعبًا في الصيانة بدون هيكل مناسب – تمامًا مثلما تطلبت مهمات أبولو تنسيقًا دقيقًا بين آلاف المكونات.
-سنستكشف نهجين أساسيين لتنظيم الكود: الوراثة والتركيب. لكل منهما مزايا مميزة، وفهم كلاهما يساعدك على اختيار النهج المناسب لمواقف مختلفة. سنوضح هذه المفاهيم من خلال لعبة الفضاء الخاصة بنا، حيث يجب أن يتفاعل الأبطال، الأعداء، التعزيزات، والأشياء الأخرى بكفاءة.
+سنستكشف نهجين أساسيين لتنظيم الكود: الوراثة والتركيب. لكل منهما مزايا مميزة، وفهم كلاهما يساعدك على اختيار النهج المناسب للمواقف المختلفة. سنوضح هذه المفاهيم من خلال لعبة الفضاء الخاصة بنا، حيث يجب أن يتفاعل الأبطال والأعداء والمكافآت وغيرها من العناصر بكفاءة.
✅ أحد أشهر كتب البرمجة على الإطلاق يتعلق بـ [أنماط التصميم](https://en.wikipedia.org/wiki/Design_Patterns).
-في أي لعبة، لديك `كائنات اللعبة` – العناصر التفاعلية التي تملأ عالم اللعبة. الأبطال، الأعداء، التعزيزات، والتأثيرات البصرية كلها كائنات لعبة. كل منها موجود في إحداثيات شاشة محددة باستخدام قيم `x` و `y`، مشابهة لتحديد النقاط على مستوى إحداثي.
+في أي لعبة، لديك `كائنات اللعبة` – العناصر التفاعلية التي تملأ عالم اللعبة. الأبطال، الأعداء، المكافآت، والمؤثرات البصرية كلها كائنات لعبة. كل منها موجود في إحداثيات شاشة محددة باستخدام قيم `x` و `y`، مشابهة لتحديد النقاط على مستوى إحداثي.
على الرغم من اختلافاتها البصرية، غالبًا ما تشترك هذه الكائنات في سلوكيات أساسية:
- **توجد في مكان ما** – كل كائن لديه إحداثيات x و y حتى تعرف اللعبة مكان رسمه
- **يمكن للكثير منها التحرك** – الأبطال يركضون، الأعداء يطاردون، الرصاص يطير عبر الشاشة
- **لديها عمر محدد** – بعضها يبقى للأبد، والبعض الآخر (مثل الانفجارات) يظهر لفترة وجيزة ويختفي
-- **تتفاعل مع الأشياء** – عندما تصطدم الأشياء، يتم جمع التعزيزات، يتم تحديث شريط الصحة
+- **تتفاعل مع الأشياء** – عندما تصطدم الأشياء، يتم جمع المكافآت، وتحديث شريط الصحة
+
+✅ فكر في لعبة مثل باك مان. هل يمكنك تحديد الأنواع الأربعة من الكائنات المذكورة أعلاه في هذه اللعبة؟
-✅ فكر في لعبة مثل Pac-Man. هل يمكنك تحديد الأنواع الأربعة من الكائنات المذكورة أعلاه في هذه اللعبة؟
+```mermaid
+classDiagram
+ class GameObject {
+ +x: number
+ +y: number
+ +type: string
+ +exists_somewhere()
+ }
+
+ class MovableObject {
+ +moveTo(x, y)
+ +can_move_around()
+ }
+
+ class TemporaryObject {
+ +lifespan: number
+ +has_lifespan()
+ }
+
+ class InteractiveObject {
+ +onCollision()
+ +reacts_to_stuff()
+ }
+
+ GameObject <|-- MovableObject
+ GameObject <|-- TemporaryObject
+ GameObject <|-- InteractiveObject
+
+ MovableObject <|-- Hero
+ MovableObject <|-- Enemy
+ MovableObject <|-- Bullet
+
+ TemporaryObject <|-- PowerUp
+ TemporaryObject <|-- Explosion
+
+ InteractiveObject <|-- Collectible
+ InteractiveObject <|-- Obstacle
+```
### التعبير عن السلوك من خلال الكود
@@ -48,7 +134,7 @@ CO_OP_TRANSLATOR_METADATA:
توفر الفئات والوراثة نهجًا منظمًا لتنظيم كائنات اللعبة. مثل نظام التصنيف الذي طوره كارل لينيوس، تبدأ بفئة أساسية تحتوي على الخصائص المشتركة، ثم تنشئ فئات متخصصة ترث هذه الأساسيات مع إضافة قدرات محددة.
-✅ الوراثة مفهوم مهم لفهمه. تعرف على المزيد في [مقالة MDN حول الوراثة](https://developer.mozilla.org/docs/Web/JavaScript/Inheritance_and_the_prototype_chain).
+✅ الوراثة مفهوم مهم لفهمه. تعرف على المزيد في [مقال MDN عن الوراثة](https://developer.mozilla.org/docs/Web/JavaScript/Inheritance_and_the_prototype_chain).
إليك كيفية تنفيذ كائنات اللعبة باستخدام الفئات والوراثة:
@@ -66,7 +152,7 @@ class GameObject {
**لنقم بتفصيل هذا خطوة بخطوة:**
- نحن ننشئ قالبًا أساسيًا يمكن لكل كائن لعبة استخدامه
- يقوم المُنشئ بحفظ مكان وجود الكائن (`x`, `y`) ونوعه
-- يصبح هذا الأساس الذي ستبني عليه جميع كائنات اللعبة الخاصة بك
+- يصبح هذا الأساس الذي ستبني عليه جميع كائنات اللعبة
```javascript
// Step 2: Add movement capability through inheritance
@@ -85,7 +171,7 @@ class Movable extends GameObject {
**في المثال أعلاه، قمنا بـ:**
- **تمديد** فئة GameObject لإضافة وظيفة الحركة
-- **استدعاء** المُنشئ الرئيسي باستخدام `super()` لتهيئة الخصائص الموروثة
+- **استدعاء** المُنشئ الأب باستخدام `super()` لتهيئة الخصائص الموروثة
- **إضافة** طريقة `moveTo()` التي تقوم بتحديث موقع الكائن
```javascript
@@ -116,11 +202,11 @@ const tree = new Tree(10, 15);
- **توضيح** أن الأبطال يمكنهم التحرك بينما تبقى الأشجار ثابتة
- **إظهار** كيف تمنع التسلسل الهرمي للفئات الإجراءات غير المناسبة
-✅ خذ بضع دقائق لإعادة تصور بطل Pac-Man (مثل Inky، Pinky أو Blinky) وكيف يمكن كتابته في JavaScript.
+✅ خذ بضع دقائق لإعادة تصور بطل باك مان (مثل إنكي، بينكي أو بلينكي) وكيف يمكن كتابته في JavaScript.
**نهج التركيب**
-يتبع التركيب فلسفة التصميم المعيارية، مشابهة لكيفية تصميم المهندسين للمركبات الفضائية بمكونات قابلة للتبديل. بدلاً من الوراثة من فئة رئيسية، تقوم بدمج سلوكيات محددة لإنشاء كائنات تحتوي على الوظائف التي تحتاجها بالضبط. يوفر هذا النهج مرونة دون قيود هرمية صارمة.
+يتبع التركيب فلسفة التصميم المعياري، مشابهة لكيفية تصميم المهندسين للمركبات الفضائية بمكونات قابلة للتبديل. بدلاً من الوراثة من فئة رئيسية، تقوم بدمج سلوكيات محددة لإنشاء كائنات تحتوي على الوظائف التي تحتاجها بالضبط. يوفر هذا النهج مرونة دون قيود هرمية صارمة.
```javascript
// Step 1: Create base behavior objects
@@ -138,10 +224,10 @@ const movable = {
};
```
-**إليك ما يفعله هذا الكود:**
-- **تعريف** كائن لعبة أساسي مع خصائص الموقع والنوع
-- **إنشاء** كائن سلوك منفصل قابل للحركة مع وظيفة الحركة
-- **فصل** الاهتمامات من خلال الحفاظ على بيانات الموقع ومنطق الحركة مستقلين
+**ما يفعله هذا الكود:**
+- **يُعرّف** كائن لعبة أساسي بخصائص الموقع والنوع
+- **ينشئ** كائن سلوك قابل للحركة منفصل مع وظيفة الحركة
+- **يفصل** الاهتمامات من خلال الحفاظ على بيانات الموقع ومنطق الحركة بشكل مستقل
```javascript
// Step 2: Compose objects by combining behaviors
@@ -183,44 +269,103 @@ const tree = createStatic(0, 0, 'Tree');
```
**نقاط رئيسية يجب تذكرها:**
-- **تكوين** الكائنات من خلال مزج السلوكيات بدلاً من وراثتها
-- **توفير** مرونة أكثر من التسلسل الهرمي الصارم للوراثة
+- **تكوين** الكائنات عن طريق مزج السلوكيات بدلاً من وراثتها
+- **توفير** مرونة أكثر من التسلسل الهرمي للوراثة
- **السماح** للكائنات بالحصول على الميزات التي تحتاجها بالضبط
- **استخدام** بناء الجملة المنتشر الحديث في JavaScript لتجميع الكائنات بشكل نظيف
-
```
**Which Pattern Should You Choose?**
-> 💡 **Pro Tip**: Both patterns have their place in modern JavaScript development. Classes work well for clearly defined hierarchies, while composition shines when you need maximum flexibility.
->
-**Here's when to use each approach:**
-- **Choose** inheritance when you have clear "is-a" relationships (a Hero *is-a* Movable object)
-- **Select** composition when you need "has-a" relationships (a Hero *has* movement abilities)
-- **Consider** your team's preferences and project requirements
-- **Remember** that you can mix both approaches in the same application
-
-## Communication Patterns: The Pub/Sub System
-
-As applications grow complex, managing communication between components becomes challenging. The publish-subscribe pattern (pub/sub) solves this problem using principles similar to radio broadcasting – one transmitter can reach multiple receivers without knowing who's listening.
+**Which Pattern Should You Choose?**
-Consider what happens when a hero takes damage: the health bar updates, sound effects play, visual feedback appears. Rather than coupling the hero object directly to these systems, pub/sub allows the hero to broadcast a "damage taken" message. Any system that needs to respond can subscribe to this message type and react accordingly.
+```mermaid
+quadrantChart
+ title Code Organization Patterns
+ x-axis Simple --> Complex
+ y-axis Rigid --> Flexible
+ quadrant-1 Advanced Composition
+ quadrant-2 Hybrid Approaches
+ quadrant-3 Basic Inheritance
+ quadrant-4 Modern Composition
+
+ Class Inheritance: [0.3, 0.2]
+ Interface Implementation: [0.6, 0.4]
+ Mixin Patterns: [0.7, 0.7]
+ Pure Composition: [0.8, 0.9]
+ Factory Functions: [0.5, 0.8]
+ Prototype Chain: [0.4, 0.3]
+```
-✅ **Pub/Sub** stands for 'publish-subscribe'
+> 💡 **نصيحة احترافية**: كلا النمطين لهما مكانهما في تطوير JavaScript الحديث. تعمل الفئات بشكل جيد مع التسلسلات الهرمية المحددة بوضوح، بينما يبرز التركيب عندما تحتاج إلى أقصى قدر من المرونة.
+>
+**إليك متى تستخدم كل نهج:**
+- **اختر** الوراثة عندما يكون لديك علاقات "هو-نوع" واضحة (البطل *هو-نوع* كائن قابل للحركة)
+- **اختر** التركيب عندما تحتاج إلى علاقات "يملك-نوع" (البطل *يملك* قدرات الحركة)
+- **ضع في اعتبارك** تفضيلات فريقك ومتطلبات المشروع
+- **تذكر** أنه يمكنك مزج كلا النهجين في نفس التطبيق
+
+### 🔄 **تقييم تربوي**
+**فهم تنظيم الكائنات**: قبل الانتقال إلى أنماط الاتصال، تأكد من أنك تستطيع:
+- ✅ شرح الفرق بين الوراثة والتركيب
+- ✅ تحديد متى تستخدم الفئات مقابل وظائف المصنع
+- ✅ فهم كيفية عمل الكلمة المفتاحية `super()` في الوراثة
+- ✅ التعرف على فوائد كل نهج لتطوير الألعاب
+
+**اختبار سريع ذاتي**: كيف يمكنك إنشاء عدو طائر يمكنه التحرك والطيران؟
+- **نهج الوراثة**: `class FlyingEnemy extends Movable`
+- **نهج التركيب**: `{ ...movable, ...flyable, ...gameObject }`
+
+**اتصال بالعالم الحقيقي**: تظهر هذه الأنماط في كل مكان:
+- **مكونات React**: الخصائص (التركيب) مقابل الوراثة الفئوية
+- **محركات الألعاب**: أنظمة الكائنات المكونة تستخدم التركيب
+- **تطبيقات الهواتف المحمولة**: أطر واجهات المستخدم غالبًا ما تستخدم التسلسلات الهرمية للوراثة
+
+## أنماط الاتصال: نظام Pub/Sub
+
+مع نمو التطبيقات في التعقيد، يصبح إدارة الاتصال بين المكونات تحديًا. يحل نمط النشر-الاشتراك (pub/sub) هذه المشكلة باستخدام مبادئ مشابهة للبث الإذاعي – يمكن لجهاز إرسال واحد الوصول إلى عدة مستقبلين دون معرفة من يستمع.
+
+فكر في ما يحدث عندما يتعرض البطل للضرر: يتم تحديث شريط الصحة، تشغيل المؤثرات الصوتية، وظهور ردود فعل بصرية. بدلاً من ربط كائن البطل مباشرة بهذه الأنظمة، يسمح pub/sub للبطل ببث رسالة "تم تلقي الضرر". يمكن لأي نظام يحتاج إلى الاستجابة الاشتراك في هذا النوع من الرسائل والتفاعل وفقًا لذلك.
+
+✅ **Pub/Sub** تعني "النشر-الاشتراك"
+
+```mermaid
+flowchart TD
+ A[Hero Takes Damage] --> B[Publish: HERO_DAMAGED]
+ B --> C[Event System]
+
+ C --> D[Health Bar Subscriber]
+ C --> E[Sound System Subscriber]
+ C --> F[Visual Effects Subscriber]
+ C --> G[Achievement System Subscriber]
+
+ D --> H[Update Health Display]
+ E --> I[Play Damage Sound]
+ F --> J[Show Red Flash]
+ G --> K[Check Survival Achievements]
+
+ style A fill:#ffebee
+ style B fill:#e1f5fe
+ style C fill:#e8f5e8
+ style H fill:#fff3e0
+ style I fill:#fff3e0
+ style J fill:#fff3e0
+ style K fill:#fff3e0
+```
-### Understanding the Pub/Sub Architecture
+### فهم بنية Pub/Sub
-The pub/sub pattern keeps different parts of your application loosely coupled, meaning they can work together without being directly dependent on each other. This separation makes your code more maintainable, testable, and flexible to changes.
+يحافظ نمط pub/sub على أجزاء مختلفة من تطبيقك غير مرتبطة بشكل وثيق، مما يعني أنها يمكن أن تعمل معًا دون أن تعتمد مباشرة على بعضها البعض. هذا الفصل يجعل الكود الخاص بك أكثر قابلية للصيانة، والاختبار، والمرونة للتغييرات.
-**The key players in pub/sub:**
-- **Messages** – Simple text labels like `'PLAYER_SCORED'` that describe what happened (plus any extra info)
-- **Publishers** – The objects that shout out "Something happened!" to anyone who's listening
-- **Subscribers** – The objects that say "I care about that event" and react when it happens
-- **Event System** – The middleman that makes sure messages get to the right listeners
+**العناصر الرئيسية في pub/sub:**
+- **الرسائل** – تسميات نصية بسيطة مثل `'PLAYER_SCORED'` تصف ما حدث (بالإضافة إلى أي معلومات إضافية)
+- **الناشرون** – الكائنات التي تصرخ "حدث شيء ما!" لأي شخص يستمع
+- **المشتركون** – الكائنات التي تقول "أنا أهتم بهذا الحدث" وتستجيب عندما يحدث
+- **نظام الأحداث** – الوسيط الذي يضمن وصول الرسائل إلى المستمعين المناسبين
-### Building an Event System
+### بناء نظام أحداث
-Let's create a simple but powerful event system that demonstrates these concepts:
+لنقم بإنشاء نظام أحداث بسيط ولكنه قوي يوضح هذه المفاهيم:
```javascript
// Step 1: Create the EventEmitter class
@@ -252,7 +397,7 @@ class EventEmitter {
- **إنشاء** نظام إدارة أحداث مركزي باستخدام فئة بسيطة
- **تخزين** المستمعين في كائن منظم حسب نوع الرسالة
- **تسجيل** مستمعين جدد باستخدام طريقة `on()`
-- **إرسال** الرسائل إلى جميع المستمعين المهتمين باستخدام `emit()`
+- **بث** الرسائل لجميع المستمعين المهتمين باستخدام `emit()`
- **دعم** حمولات بيانات اختيارية لتمرير المعلومات ذات الصلة
### جمع كل شيء معًا: مثال عملي
@@ -272,10 +417,10 @@ const eventEmitter = new EventEmitter();
const hero = createHero(0, 0);
```
-**إليك ما يفعله هذا الكود:**
-- **تعريف** كائن ثابت لمنع الأخطاء الإملائية في أسماء الرسائل
-- **إنشاء** مثيل لمُرسل الأحداث للتعامل مع جميع الاتصالات
-- **تهيئة** كائن البطل في الموقع الابتدائي
+**ما يفعله هذا الكود:**
+- **يُعرّف** كائنًا ثابتًا لمنع الأخطاء الإملائية في أسماء الرسائل
+- **ينشئ** مثيلًا لمُصدر الأحداث للتعامل مع جميع الاتصالات
+- **يُهيئ** كائن البطل في الموقع الابتدائي
```javascript
// Step 3: Set up event listeners (subscribers)
@@ -293,7 +438,7 @@ eventEmitter.on(Messages.HERO_MOVE_RIGHT, () => {
**في المثال أعلاه، قمنا بـ:**
- **تسجيل** مستمعي الأحداث الذين يستجيبون لرسائل الحركة
- **تحديث** موقع البطل بناءً على اتجاه الحركة
-- **إضافة** تسجيل في وحدة التحكم لتتبع تغييرات موقع البطل
+- **إضافة** تسجيلات وحدة التحكم لتتبع تغييرات موقع البطل
- **فصل** منطق الحركة عن معالجة الإدخال
```javascript
@@ -311,24 +456,44 @@ window.addEventListener('keydown', (event) => {
```
**فهم هذه المفاهيم:**
-- **ربط** إدخال لوحة المفاتيح بأحداث اللعبة دون اقتران وثيق
+- **ربط** إدخال لوحة المفاتيح بأحداث اللعبة دون ارتباط وثيق
- **تمكين** نظام الإدخال من التواصل مع كائنات اللعبة بشكل غير مباشر
- **السماح** لأنظمة متعددة بالاستجابة لنفس أحداث لوحة المفاتيح
-- **تسهيل** تغيير روابط المفاتيح أو إضافة طرق إدخال جديدة
+- **جعل** من السهل تغيير روابط المفاتيح أو إضافة طرق إدخال جديدة
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Keyboard
+ participant EventEmitter
+ participant Hero
+ participant SoundSystem
+ participant Camera
+
+ User->>Keyboard: Presses ArrowLeft
+ Keyboard->>EventEmitter: emit('HERO_MOVE_LEFT')
+ EventEmitter->>Hero: Move left 5 pixels
+ EventEmitter->>SoundSystem: Play footstep sound
+ EventEmitter->>Camera: Follow hero
+
+ Hero->>Hero: Update position
+ SoundSystem->>SoundSystem: Play audio
+ Camera->>Camera: Adjust viewport
+```
-> 💡 **نصيحة احترافية**: جمال هذا النمط هو المرونة! يمكنك بسهولة إضافة تأثيرات صوتية، اهتزاز الشاشة، أو تأثيرات الجسيمات ببساطة عن طريق إضافة المزيد من مستمعي الأحداث – لا حاجة لتعديل كود لوحة المفاتيح أو الحركة الحالي.
+> 💡 **نصيحة احترافية**: جمال هذا النمط هو المرونة! يمكنك بسهولة إضافة مؤثرات صوتية، اهتزاز الشاشة، أو تأثيرات الجسيمات ببساطة عن طريق إضافة المزيد من مستمعي الأحداث – لا حاجة لتعديل كود لوحة المفاتيح أو الحركة الحالي.
>
**إليك لماذا ستحب هذا النهج:**
-- يصبح إضافة ميزات جديدة أمرًا سهلاً للغاية – فقط استمع للأحداث التي تهمك
-- يمكن لأشياء متعددة أن تتفاعل مع نفس الحدث دون التداخل مع بعضها البعض
+- يصبح إضافة ميزات جديدة أمرًا سهلاً للغاية – فقط استمع للأحداث التي تهتم بها
+- يمكن لأشياء متعددة الاستجابة لنفس الحدث دون التداخل مع بعضها البعض
- يصبح الاختبار أسهل بكثير لأن كل جزء يعمل بشكل مستقل
- عندما يحدث خطأ ما، تعرف بالضبط أين تبحث
### لماذا يتوسع Pub/Sub بشكل فعال
-يحافظ نمط pub/sub على البساطة مع نمو التطبيقات في التعقيد. سواء كان إدارة عشرات الأعداء، تحديثات واجهة المستخدم الديناميكية، أو أنظمة الصوت، يتعامل النمط مع زيادة الحجم دون تغييرات معمارية. تتكامل الميزات الجديدة مع نظام الأحداث الحالي دون التأثير على الوظائف القائمة.
+يحافظ نمط pub/sub على البساطة مع نمو التطبيقات في التعقيد. سواء كنت تدير عشرات الأعداء، تحديثات واجهة المستخدم الديناميكية، أو أنظمة الصوت، فإن النمط يتعامل مع زيادة الحجم دون تغييرات معمارية. تتكامل الميزات الجديدة مع نظام الأحداث الحالي دون التأثير على الوظائف القائمة.
-> ⚠️ **خطأ شائع**: لا تنشئ أنواع رسائل محددة جدًا في وقت مبكر. ابدأ بفئات واسعة وقم بتحسينها مع وضوح احتياجات لعبتك.
+> ⚠️ **خطأ شائع**: لا تنشئ الكثير من أنواع الرسائل المحددة في وقت مبكر. ابدأ بفئات واسعة وقم بتحسينها مع وضوح احتياجات لعبتك.
>
**أفضل الممارسات التي يجب اتباعها:**
- **تجميع** الرسائل ذات الصلة في فئات منطقية
@@ -336,21 +501,38 @@ window.addEventListener('keydown', (event) => {
- **الحفاظ** على حمولات الرسائل بسيطة ومركزة
- **توثيق** أنواع الرسائل للتعاون بين الفريق
+### 🔄 **تقييم تربوي**
+**فهم بنية الأحداث**: تحقق من فهمك للنظام الكامل:
+- ✅ كيف يمنع نمط pub/sub الارتباط الوثيق بين المكونات؟
+- ✅ لماذا يصبح من الأسهل إضافة ميزات جديدة مع بنية تعتمد على الأحداث؟
+- ✅ ما الدور الذي يلعبه EventEmitter في تدفق الاتصالات؟
+- ✅ كيف تمنع ثوابت الرسائل الأخطاء وتحسن قابلية الصيانة؟
+
+**تحدي التصميم**: كيف ستتعامل مع هذه السيناريوهات في اللعبة باستخدام pub/sub؟
+1. **موت العدو**: تحديث النقاط، تشغيل الصوت، ظهور المكافأة، الإزالة من الشاشة
+2. **إكمال المستوى**: إيقاف الموسيقى، عرض واجهة المستخدم، حفظ التقدم، تحميل المستوى التالي
+3. **جمع المكافأة**: تحسين القدرات، تحديث واجهة المستخدم، تشغيل التأثير، بدء المؤقت
+
+**اتصال مهني**: يظهر هذا النمط في:
+- **إطارات العمل الأمامية**: أنظمة الأحداث في React/Vue
+- **الخدمات الخلفية**: اتصالات الخدمات المصغرة
+- **محركات الألعاب**: نظام الأحداث في Unity
+- **تطوير الهواتف المحمولة**: أنظمة الإشعارات في iOS/Android
+
---
## تحدي GitHub Copilot Agent 🚀
-استخدم وضع Agent لإكمال التحدي التالي:
+استخدم وضع الوكيل لإكمال التحدي التالي:
**الوصف:** قم بإنشاء نظام كائن لعبة بسيط باستخدام كل من الوراثة ونمط pub/sub. ستقوم بتنفيذ لعبة أساسية حيث يمكن للكائنات المختلفة التواصل من خلال الأحداث دون معرفة مباشرة ببعضها البعض.
-**المهمة:** قم بإنشاء نظام لعبة JavaScript مع المتطلبات التالية: 1) إنشاء فئة GameObject الأساسية مع إحداثيات x و y وخصائص النوع. 2) إنشاء فئة Hero التي تمد GameObject ويمكنها التحرك. 3) إنشاء فئة Enemy التي تمد GameObject ويمكنها مطاردة البطل. 4) تنفيذ فئة EventEmitter لنمط pub/sub. 5) إعداد مستمعي الأحداث بحيث عندما يتحرك البطل، يتلقى الأعداء القريبون حدث 'HERO_MOVED' ويحدثون موقعهم للتحرك نحو البطل. قم بتضمين عبارات console.log لإظهار التواصل بين الكائنات.
+**المهمة:** قم بإنشاء نظام لعبة JavaScript مع المتطلبات التالية: 1) إنشاء فئة GameObject الأساسية مع إحداثيات x و y وخصائص النوع. 2) إنشاء فئة Hero التي تمتد GameObject ويمكنها التحرك. 3) إنشاء فئة Enemy التي تمتد GameObject ويمكنها مطاردة البطل. 4) تنفيذ فئة EventEmitter لنمط pub/sub. 5) إعداد مستمعي الأحداث بحيث عندما يتحرك البطل، يتلقى الأعداء القريبون حدث 'HERO_MOVED' ويحدثون موقعهم للتحرك نحو البطل. قم بتضمين عبارات console.log لإظهار التواصل بين الكائنات.
تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
## 🚀 التحدي
-
-فكر في كيفية تحسين نمط pub-sub لهندسة اللعبة. حدد أي المكونات يجب أن ترسل الأحداث وكيف يجب أن يستجيب النظام. صمم مفهوم لعبة ورسم أنماط الاتصال بين مكوناتها.
+فكر في كيفية تحسين بنية الألعاب باستخدام نمط النشر والاشتراك. حدد أي المكونات يجب أن تصدر الأحداث وكيف يجب أن يستجيب النظام. قم بتصميم فكرة لعبة ورسم خريطة لأنماط التواصل بين مكوناتها.
## اختبار ما بعد المحاضرة
@@ -358,13 +540,127 @@ window.addEventListener('keydown', (event) => {
## المراجعة والدراسة الذاتية
-تعرف على المزيد حول Pub/Sub من خلال [قراءة المزيد عنه](https://docs.microsoft.com/azure/architecture/patterns/publisher-subscriber/?WT.mc_id=academic-77807-sagibbon).
+تعرف على المزيد حول النشر والاشتراك من خلال [قراءة المزيد عنه](https://docs.microsoft.com/azure/architecture/patterns/publisher-subscriber/?WT.mc_id=academic-77807-sagibbon).
+
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] افتح أي لعبة HTML5 عبر الإنترنت وقم بفحص الكود الخاص بها باستخدام أدوات المطور
+- [ ] أنشئ عنصر HTML5 Canvas بسيط وارسم شكلاً أساسيًا
+- [ ] جرب استخدام `setInterval` لإنشاء حلقة رسوم متحركة بسيطة
+- [ ] استكشف وثائق Canvas API وجرب طريقة رسم
+
+### 🎯 **ما يمكنك إنجازه خلال هذه الساعة**
+- [ ] أكمل اختبار ما بعد الدرس وافهم مفاهيم تطوير الألعاب
+- [ ] قم بإعداد هيكل مشروع لعبتك باستخدام ملفات HTML وCSS وJavaScript
+- [ ] أنشئ حلقة لعبة أساسية تقوم بالتحديث والعرض بشكل مستمر
+- [ ] ارسم أول شخصيات لعبتك على اللوحة
+- [ ] قم بتنفيذ تحميل الأصول الأساسية للصور والأصوات
+
+### 📅 **إنشاء لعبة خلال أسبوع**
+- [ ] أكمل لعبة الفضاء بالكامل مع جميع الميزات المخطط لها
+- [ ] أضف رسومات محسنة، مؤثرات صوتية، ورسوم متحركة سلسة
+- [ ] قم بتنفيذ حالات اللعبة (شاشة البداية، اللعب، نهاية اللعبة)
+- [ ] أنشئ نظام تسجيل النقاط وتتبع تقدم اللاعب
+- [ ] اجعل لعبتك متجاوبة وقابلة للوصول عبر الأجهزة المختلفة
+- [ ] شارك لعبتك عبر الإنترنت واجمع آراء اللاعبين
+
+### 🌟 **تطوير الألعاب خلال شهر**
+- [ ] قم بإنشاء ألعاب متعددة تستكشف أنواع وآليات مختلفة
+- [ ] تعلم إطار عمل لتطوير الألعاب مثل Phaser أو Three.js
+- [ ] ساهم في مشاريع تطوير الألعاب مفتوحة المصدر
+- [ ] أتقن أنماط البرمجة المتقدمة وتحسين الأداء
+- [ ] أنشئ ملفًا شخصيًا يعرض مهاراتك في تطوير الألعاب
+- [ ] قم بتوجيه الآخرين المهتمين بتطوير الألعاب والوسائط التفاعلية
+
+## 🎯 جدول زمني لإتقان تطوير الألعاب
+
+```mermaid
+timeline
+ title Game Architecture Learning Progression
+
+ section Object Patterns (20 minutes)
+ Code Organization: Class inheritance
+ : Composition patterns
+ : Factory functions
+ : Behavior mixing
+
+ section Communication Systems (25 minutes)
+ Event Architecture: Pub/Sub implementation
+ : Message design
+ : Event emitters
+ : Loose coupling
+
+ section Game Object Design (30 minutes)
+ Entity Systems: Property management
+ : Behavior composition
+ : State handling
+ : Lifecycle management
+
+ section Architecture Patterns (35 minutes)
+ System Design: Component systems
+ : Observer pattern
+ : Command pattern
+ : State machines
+
+ section Advanced Concepts (45 minutes)
+ Scalable Architecture: Performance optimization
+ : Memory management
+ : Modular design
+ : Testing strategies
+
+ section Game Engine Concepts (1 week)
+ Professional Development: Scene graphs
+ : Asset management
+ : Rendering pipelines
+ : Physics integration
+
+ section Framework Mastery (2 weeks)
+ Modern Game Development: React game patterns
+ : Canvas optimization
+ : WebGL basics
+ : PWA games
+
+ section Industry Practices (1 month)
+ Professional Skills: Team collaboration
+ : Code reviews
+ : Game design patterns
+ : Performance profiling
+```
+
+### 🛠️ ملخص أدوات بنية الألعاب الخاصة بك
+
+بعد إكمال هذا الدرس، لديك الآن:
+- **إتقان أنماط التصميم**: فهم الموازنة بين الوراثة والتركيب
+- **بنية قائمة على الأحداث**: تنفيذ النشر والاشتراك لتواصل قابل للتوسع
+- **تصميم كائني التوجه**: تسلسل الفئات وتركيب السلوكيات
+- **JavaScript الحديثة**: وظائف المصنع، بناء الجملة المنتشر، وأنماط ES6+
+- **بنية قابلة للتوسع**: تصميم غير مترابط ومبادئ التصميم المعياري
+- **أساسيات تطوير الألعاب**: أنظمة الكيانات وأنماط المكونات
+- **أنماط احترافية**: طرق تنظيم الكود وفقًا للمعايير الصناعية
+
+**تطبيقات واقعية**: هذه الأنماط تنطبق مباشرة على:
+- **إطارات العمل الأمامية**: بنية المكونات وإدارة الحالة في React/Vue
+- **الخدمات الخلفية**: تواصل الخدمات المصغرة وأنظمة قائمة على الأحداث
+- **تطوير الهواتف المحمولة**: بنية تطبيقات iOS/Android وأنظمة الإشعارات
+- **محركات الألعاب**: Unity، Unreal، وتطوير الألعاب عبر الويب
+- **برامج المؤسسات**: تصميم أنظمة الأحداث الموزعة
+- **تصميم واجهات برمجة التطبيقات**: خدمات RESTful والتواصل في الوقت الفعلي
+
+**مهارات احترافية مكتسبة**: يمكنك الآن:
+- **تصميم** بنى برمجية قابلة للتوسع باستخدام أنماط مثبتة
+- **تنفيذ** أنظمة قائمة على الأحداث تتعامل مع تفاعلات معقدة
+- **اختيار** استراتيجيات تنظيم الكود المناسبة لسيناريوهات مختلفة
+- **تصحيح الأخطاء** وصيانة الأنظمة غير المترابطة بفعالية
+- **التواصل** حول القرارات التقنية باستخدام مصطلحات معيارية صناعية
+
+**المستوى التالي**: أنت جاهز لتنفيذ هذه الأنماط في لعبة حقيقية، استكشاف مواضيع تطوير الألعاب المتقدمة، أو تطبيق هذه المفاهيم المعمارية على تطبيقات الويب!
+
+🌟 **إنجاز محقق**: لقد أتقنت أنماط بنية البرمجيات الأساسية التي تدعم كل شيء من الألعاب البسيطة إلى أنظمة المؤسسات المعقدة!
-## الواجب
+## المهمة
[تصميم لعبة](assignment.md)
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-space-game/2-drawing-to-canvas/README.md b/translations/ar/6-space-game/2-drawing-to-canvas/README.md
index c694ef0d7b..01bf3a8d4a 100644
--- a/translations/ar/6-space-game/2-drawing-to-canvas/README.md
+++ b/translations/ar/6-space-game/2-drawing-to-canvas/README.md
@@ -1,33 +1,80 @@
# بناء لعبة فضاء الجزء الثاني: رسم البطل والوحوش على اللوحة
+```mermaid
+journey
+ title Your Canvas Graphics Journey
+ section Foundation
+ Understand Canvas API: 3: Student
+ Learn coordinate system: 4: Student
+ Draw basic shapes: 4: Student
+ section Image Handling
+ Load game assets: 4: Student
+ Handle async loading: 5: Student
+ Position sprites: 5: Student
+ section Game Rendering
+ Create game screen: 5: Student
+ Build formations: 5: Student
+ Optimize performance: 4: Student
+```
+
تُعد واجهة برمجة التطبيقات الخاصة بـ Canvas واحدة من أقوى ميزات تطوير الويب لإنشاء رسومات ديناميكية وتفاعلية مباشرة في متصفحك. في هذا الدرس، سنحوّل عنصر HTML `
` الفارغ إلى عالم لعبة مليء بالأبطال والوحوش. فكر في اللوحة كلوحة فنية رقمية حيث يتحول الكود إلى صورة.
نحن نبني على ما تعلمته في الدرس السابق، والآن سنتعمق في الجوانب البصرية. ستتعلم كيفية تحميل وعرض صور اللعبة، وضع العناصر بدقة، وإنشاء الأساس البصري للعبة الفضاء الخاصة بك. هذا يربط بين صفحات الويب الثابتة والتجارب الديناميكية والتفاعلية.
بنهاية هذا الدرس، سيكون لديك مشهد لعبة كامل مع سفينة البطل في موقعها الصحيح وتشكيلات الأعداء جاهزة للمعركة. ستفهم كيف تقوم الألعاب الحديثة بعرض الرسومات في المتصفحات وستكتسب مهارات لإنشاء تجارب بصرية تفاعلية خاصة بك. دعونا نستكشف رسومات اللوحة ونُحيي لعبة الفضاء الخاصة بك!
-## اختبار ما قبل المحاضرة
+```mermaid
+mindmap
+ root((Canvas Graphics))
+ Canvas Element
+ HTML5 Feature
+ 2D Context
+ Coordinate System
+ Pixel Control
+ Drawing Operations
+ Basic Shapes
+ Text Rendering
+ Image Display
+ Path Drawing
+ Asset Management
+ Image Loading
+ Async Operations
+ Error Handling
+ Performance
+ Game Rendering
+ Sprite Positioning
+ Formation Layout
+ Scene Composition
+ Frame Updates
+ Visual Effects
+ Colors & Styles
+ Transformations
+ Animations
+ Layering
+```
+
+## اختبار ما قبل الدرس
-[اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/web/quiz/31)
+[اختبار ما قبل الدرس](https://ff-quizzes.netlify.app/web/quiz/31)
## اللوحة
ما هو بالضبط عنصر ``؟ إنه حل HTML5 لإنشاء رسومات ديناميكية ورسوم متحركة في متصفحات الويب. على عكس الصور أو الفيديوهات العادية التي تكون ثابتة، تمنحك اللوحة التحكم على مستوى البكسل في كل ما يظهر على الشاشة. هذا يجعلها مثالية للألعاب، التصورات البيانية، والفن التفاعلي. فكر فيها كسطح رسم قابل للبرمجة حيث يصبح JavaScript فرشاة الرسم الخاصة بك.
-بشكل افتراضي، يظهر عنصر اللوحة كأنه مستطيل فارغ وشفاف على صفحتك. لكن هنا تكمن الإمكانيات! تظهر قوتها الحقيقية عندما تستخدم JavaScript لرسم الأشكال، تحميل الصور، إنشاء الرسوم المتحركة، وجعل الأشياء تستجيب لتفاعلات المستخدم. يشبه ذلك الطريقة التي كان رواد الرسومات الحاسوبية في مختبرات Bell في الستينيات يبرمجون كل بكسل لإنشاء الرسوم المتحركة الرقمية الأولى.
+بشكل افتراضي، يظهر عنصر اللوحة كأنه مستطيل فارغ وشفاف على صفحتك. لكن هنا تكمن الإمكانيات! تظهر قوتها الحقيقية عندما تستخدم JavaScript لرسم الأشكال، تحميل الصور، إنشاء الرسوم المتحركة، وجعل الأشياء تستجيب لتفاعلات المستخدم. إنها مشابهة للطريقة التي كان رواد الرسومات الحاسوبية في Bell Labs في الستينيات يبرمجون بها كل بكسل لإنشاء أول الرسوم المتحركة الرقمية.
-✅ اقرأ [المزيد عن واجهة برمجة التطبيقات الخاصة باللوحة](https://developer.mozilla.org/docs/Web/API/Canvas_API) على MDN.
+✅ اقرأ [المزيد عن واجهة برمجة تطبيقات Canvas](https://developer.mozilla.org/docs/Web/API/Canvas_API) على MDN.
-هكذا يتم عادةً إعلانها كجزء من جسم الصفحة:
+إليك كيف يتم إعلانها عادةً كجزء من جسم الصفحة:
```html
@@ -35,25 +82,63 @@ CO_OP_TRANSLATOR_METADATA:
**ما الذي يفعله هذا الكود:**
- **يحدد** خاصية `id` حتى تتمكن من الإشارة إلى هذا العنصر المحدد في JavaScript
-- **يحدد** العرض بالبكسل للتحكم في حجم اللوحة الأفقي
+- **يعين** العرض بالبكسل للتحكم في حجم اللوحة الأفقي
- **يحدد** الارتفاع بالبكسل لتحديد أبعاد اللوحة العمودية
## رسم أشكال هندسية بسيطة
-الآن بعد أن تعرفت على عنصر اللوحة، دعنا نستكشف كيفية الرسم عليه! تستخدم اللوحة نظام إحداثيات قد يبدو مألوفًا من دروس الرياضيات، ولكن هناك نقطة مهمة تختلف عن الرسومات الحاسوبية.
+الآن بعد أن تعرفت على عنصر اللوحة، دعنا نستكشف كيفية الرسم عليها فعليًا! تستخدم اللوحة نظام إحداثيات قد يبدو مألوفًا من دروس الرياضيات، ولكن هناك لمسة مهمة خاصة بالرسومات الحاسوبية.
تستخدم اللوحة إحداثيات ديكارتية مع محور x (أفقي) ومحور y (عمودي) لتحديد موضع كل ما ترسمه. ولكن هنا الفرق الرئيسي: على عكس نظام الإحداثيات في الرياضيات، تبدأ نقطة الأصل `(0,0)` في الزاوية العلوية اليسرى، مع زيادة قيم x عند التحرك يمينًا وزيادة قيم y عند التحرك للأسفل. هذا النهج يعود إلى شاشات الكمبيوتر المبكرة حيث كانت أشعة الإلكترون تمسح من الأعلى إلى الأسفل، مما يجعل الزاوية العلوية اليسرى نقطة البداية الطبيعية.
+```mermaid
+quadrantChart
+ title Canvas Coordinate System
+ x-axis Left --> Right
+ y-axis Top --> Bottom
+ quadrant-1 Quadrant 1
+ quadrant-2 Quadrant 2
+ quadrant-3 Quadrant 3
+ quadrant-4 Quadrant 4
+
+ Origin Point: [0.1, 0.1]
+ Hero Center: [0.5, 0.8]
+ Enemy Formation: [0.3, 0.2]
+ Power-up: [0.7, 0.6]
+ UI Elements: [0.9, 0.1]
+```
+

> الصورة من [MDN](https://developer.mozilla.org/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes)
لترسم على عنصر اللوحة، ستتبع نفس العملية المكونة من ثلاث خطوات التي تشكل أساس جميع رسومات اللوحة. بمجرد القيام بذلك عدة مرات، يصبح الأمر طبيعيًا:
-1. **الحصول على مرجع** لعنصر اللوحة الخاص بك من DOM (مثل أي عنصر HTML آخر)
-2. **الحصول على سياق الرسم ثنائي الأبعاد** – هذا يوفر جميع طرق الرسم
+```mermaid
+flowchart LR
+ A[HTML Canvas Element] --> B[Get Canvas Reference]
+ B --> C[Get 2D Context]
+ C --> D[Drawing Operations]
+
+ D --> E[Draw Shapes]
+ D --> F[Draw Text]
+ D --> G[Draw Images]
+ D --> H[Apply Styles]
+
+ E --> I[Render to Screen]
+ F --> I
+ G --> I
+ H --> I
+
+ style A fill:#e1f5fe
+ style C fill:#e8f5e8
+ style I fill:#fff3e0
+```
+
+1. **احصل على مرجع** لعنصر اللوحة الخاص بك من DOM (مثل أي عنصر HTML آخر)
+2. **احصل على سياق الرسم ثنائي الأبعاد** – هذا يوفر جميع طرق الرسم
3. **ابدأ الرسم!** استخدم الطرق المدمجة في السياق لإنشاء رسوماتك
-هكذا يبدو ذلك في الكود:
+إليك كيف يبدو هذا في الكود:
```javascript
// Step 1: Get the canvas element
@@ -67,29 +152,68 @@ ctx.fillStyle = 'red';
ctx.fillRect(0, 0, 200, 200); // x, y, width, height
```
-**دعونا نوضح هذا خطوة بخطوة:**
+**دعنا نوضح هذا خطوة بخطوة:**
- نحن **نحصل** على عنصر اللوحة باستخدام معرفه ونخزنه في متغير
-- نحن **نحصل** على سياق الرسم ثنائي الأبعاد – هذا هو صندوق الأدوات المليء بطرق الرسم
+- نحن **نحصل** على سياق الرسم ثنائي الأبعاد – هذه هي أدواتنا المليئة بطرق الرسم
- نحن **نخبر** اللوحة أننا نريد ملء الأشياء باللون الأحمر باستخدام خاصية `fillStyle`
- نحن **نرسم** مستطيلًا يبدأ من الزاوية العلوية اليسرى (0,0) بعرض وارتفاع 200 بكسل
-✅ تركز واجهة برمجة التطبيقات الخاصة باللوحة بشكل أساسي على الأشكال ثنائية الأبعاد، ولكن يمكنك أيضًا رسم عناصر ثلاثية الأبعاد على موقع ويب؛ لهذا، قد تستخدم [واجهة برمجة تطبيقات WebGL](https://developer.mozilla.org/docs/Web/API/WebGL_API).
+✅ تركز واجهة برمجة تطبيقات Canvas بشكل أساسي على الأشكال ثنائية الأبعاد، ولكن يمكنك أيضًا رسم عناصر ثلاثية الأبعاد على موقع ويب؛ لهذا، قد تستخدم [واجهة برمجة تطبيقات WebGL](https://developer.mozilla.org/docs/Web/API/WebGL_API).
-يمكنك رسم العديد من الأشياء باستخدام واجهة برمجة التطبيقات الخاصة باللوحة مثل:
+يمكنك رسم جميع أنواع الأشياء باستخدام واجهة برمجة تطبيقات Canvas مثل:
- **الأشكال الهندسية**، لقد أظهرنا بالفعل كيفية رسم مستطيل، ولكن هناك المزيد مما يمكنك رسمه.
- **النصوص**، يمكنك رسم نص بأي خط ولون ترغب فيه.
- **الصور**، يمكنك رسم صورة بناءً على أصل صورة مثل .jpg أو .png على سبيل المثال.
-✅ جربها! تعرف كيفية رسم مستطيل، هل يمكنك رسم دائرة على الصفحة؟ ألقِ نظرة على بعض الرسومات المثيرة للاهتمام باستخدام اللوحة على CodePen. إليك [مثال مثير للإعجاب](https://codepen.io/dissimulate/pen/KrAwx).
+✅ جربها! أنت تعرف كيفية رسم مستطيل، هل يمكنك رسم دائرة على الصفحة؟ ألقِ نظرة على بعض رسومات اللوحة المثيرة للاهتمام على CodePen. إليك [مثال مثير للإعجاب](https://codepen.io/dissimulate/pen/KrAwx).
-## تحميل ورسم أصل صورة
+### 🔄 **مراجعة تربوية**
+**فهم أساسيات اللوحة**: قبل الانتقال إلى تحميل الصور، تأكد من أنك تستطيع:
+- ✅ شرح كيف يختلف نظام إحداثيات اللوحة عن الإحداثيات الرياضية
+- ✅ فهم العملية المكونة من ثلاث خطوات لعمليات الرسم على اللوحة
+- ✅ تحديد ما يوفره سياق الرسم ثنائي الأبعاد
+- ✅ وصف كيف تعمل fillStyle و fillRect معًا
-رسم الأشكال الأساسية مفيد للبدء، ولكن معظم الألعاب تحتاج إلى صور فعلية! الصور الرمزية، الخلفيات، والقوام هي ما يمنح الألعاب جاذبيتها البصرية. يختلف تحميل وعرض الصور على اللوحة عن رسم الأشكال الهندسية، ولكنه بسيط بمجرد فهم العملية.
+**اختبار ذاتي سريع**: كيف يمكنك رسم دائرة زرقاء في الموضع (100, 50) بنصف قطر 25؟
+```javascript
+ctx.fillStyle = 'blue';
+ctx.beginPath();
+ctx.arc(100, 50, 25, 0, 2 * Math.PI);
+ctx.fill();
+```
-نحتاج إلى إنشاء كائن `Image`، تحميل ملف الصورة الخاص بنا (يحدث هذا بشكل غير متزامن، بمعنى "في الخلفية")، ثم رسمه على اللوحة بمجرد أن يكون جاهزًا. يضمن هذا النهج عرض الصور بشكل صحيح دون تعطيل التطبيق أثناء تحميلها.
+**طرق الرسم على اللوحة التي تعرفها الآن**:
+- **fillRect()**: يرسم مستطيلات مملوءة
+- **fillStyle**: يحدد الألوان والأنماط
+- **beginPath()**: يبدأ مسارات رسم جديدة
+- **arc()**: ينشئ دوائر ومنحنيات
+
+## تحميل ورسم صورة
+
+رسم الأشكال الأساسية مفيد للبدء، ولكن معظم الألعاب تحتاج إلى صور فعلية! الصور، الخلفيات، والقوام هي ما يمنح الألعاب جاذبيتها البصرية. يختلف تحميل وعرض الصور على اللوحة عن رسم الأشكال الهندسية، ولكنه بسيط بمجرد فهم العملية.
+
+نحتاج إلى إنشاء كائن `Image`، تحميل ملف الصورة الخاص بنا (يحدث هذا بشكل غير متزامن، مما يعني "في الخلفية")، ثم رسمه على اللوحة بمجرد أن يصبح جاهزًا. يضمن هذا النهج عرض الصور بشكل صحيح دون تعطيل التطبيق أثناء تحميلها.
+
+```mermaid
+sequenceDiagram
+ participant JS as JavaScript
+ participant Img as Image Object
+ participant Server as File Server
+ participant Canvas as Canvas Context
+
+ JS->>Img: new Image()
+ JS->>Img: Set src property
+ Img->>Server: Request image file
+ Server->>Img: Return image data
+ Img->>JS: Trigger onload event
+ JS->>Canvas: drawImage(img, x, y)
+ Canvas->>Canvas: Render to screen
+
+ Note over JS,Canvas: Async loading prevents UI blocking
+```
-### تحميل الصور الأساسي
+### تحميل الصور الأساسية
```javascript
const img = new Image();
@@ -101,13 +225,13 @@ img.onload = () => {
```
**ما الذي يحدث في هذا الكود:**
-- نحن **ننشئ** كائن صورة جديد تمامًا لحفظ الصورة الرمزية أو القوام
-- نحن **نخبره** أي ملف صورة يجب تحميله عن طريق تحديد مسار المصدر
+- نحن **ننشئ** كائن صورة جديد تمامًا لحفظ الصورة أو القوام
+- نحن **نخبره** أي ملف صورة يجب تحميله عن طريق تعيين مسار المصدر
- نحن **نستمع** لحدث التحميل حتى نعرف بالضبط متى تكون الصورة جاهزة للاستخدام
### طريقة أفضل لتحميل الصور
-إليك طريقة أكثر قوة للتعامل مع تحميل الصور يستخدمها المطورون المحترفون عادةً. سنقوم بتغليف منطق تحميل الصور في وظيفة تعتمد على الوعد – هذا النهج، الذي أصبح شائعًا عندما أصبحت وعود JavaScript معيارًا في ES6، يجعل الكود الخاص بك أكثر تنظيمًا ويتعامل مع الأخطاء بشكل أنيق:
+إليك طريقة أكثر قوة للتعامل مع تحميل الصور يستخدمها المطورون المحترفون عادةً. سنقوم بتغليف تحميل الصور في وظيفة تعتمد على Promise – هذا النهج، الذي أصبح شائعًا عندما أصبحت Promises معيارًا في ES6، يجعل الكود الخاص بك أكثر تنظيمًا ويتعامل مع الأخطاء بشكل أنيق:
```javascript
function loadAsset(path) {
@@ -136,10 +260,10 @@ async function initializeGame() {
```
**ما الذي قمنا به هنا:**
-- **غلفنا** كل منطق تحميل الصور في وعد حتى نتمكن من التعامل معه بشكل أفضل
+- **غلفنا** كل منطق تحميل الصور في Promise حتى نتمكن من التعامل معه بشكل أفضل
- **أضفنا** معالجة الأخطاء التي تخبرنا فعليًا عندما يحدث خطأ ما
- **استخدمنا** بناء الجملة الحديث async/await لأنه أكثر وضوحًا للقراءة
-- **أدرجنا** كتل try/catch للتعامل بشكل أنيق مع أي مشاكل في التحميل
+- **أدرجنا** كتل try/catch للتعامل مع أي مشاكل تحميل بشكل أنيق
بمجرد تحميل الصور الخاصة بك، فإن رسمها على اللوحة يكون في الواقع بسيطًا جدًا:
@@ -163,32 +287,57 @@ async function renderGameScreen() {
}
```
-**دعونا نوضح هذا خطوة بخطوة:**
+**دعنا نوضح هذا خطوة بخطوة:**
- نحن **نحمل** صور البطل والوحش في الخلفية باستخدام await
- نحن **نحصل** على عنصر اللوحة ونحصل على سياق الرسم ثنائي الأبعاد الذي نحتاجه
-- نحن **نضع** صورة البطل في المنتصف باستخدام بعض الرياضيات السريعة للإحداثيات
+- نحن **نضع** صورة البطل في المركز باستخدام بعض الرياضيات السريعة للإحداثيات
- نحن **نضع** صورة الوحش في الزاوية العلوية اليسرى لبدء تشكيل الأعداء
- نحن **نلتقط** أي أخطاء قد تحدث أثناء التحميل أو العرض
+```mermaid
+flowchart TD
+ A[Load Assets] --> B{All Images Loaded?}
+ B -->|No| C[Show Loading]
+ B -->|Yes| D[Get Canvas Context]
+ C --> B
+ D --> E[Clear Screen]
+ E --> F[Draw Background]
+ F --> G[Draw Enemy Formation]
+ G --> H[Draw Hero Ship]
+ H --> I[Apply Visual Effects]
+ I --> J[Render Frame]
+
+ subgraph "Rendering Pipeline"
+ K[Asset Management]
+ L[Scene Composition]
+ M[Drawing Operations]
+ N[Frame Output]
+ end
+
+ style A fill:#e1f5fe
+ style J fill:#e8f5e8
+ style I fill:#fff3e0
+```
+
## الآن حان الوقت لبدء بناء لعبتك
الآن سنجمع كل شيء معًا لإنشاء الأساس البصري للعبة الفضاء الخاصة بك. لديك فهم قوي لأساسيات اللوحة وتقنيات تحميل الصور، لذا فإن هذا القسم العملي سيرشدك خلال بناء شاشة لعبة كاملة مع صور موضوعة بشكل صحيح.
### ما الذي ستبنيه
-ستقوم ببناء صفحة ويب تحتوي على عنصر لوحة. يجب أن تعرض شاشة سوداء `1024*768`. لقد وفرنا لك صورتين:
+ستقوم ببناء صفحة ويب تحتوي على عنصر Canvas. يجب أن تعرض شاشة سوداء `1024*768`. لقد وفرنا لك صورتين:
- سفينة البطل

-- 5*5 وحوش
+- 5*5 وحش

### الخطوات الموصى بها لبدء التطوير
-حدد ملفات البداية التي تم إنشاؤها لك في مجلد `your-work`. يجب أن يحتوي هيكل المشروع الخاص بك على:
+حدد ملفات البداية التي تم إنشاؤها لك في مجلد `your-work`. يجب أن تحتوي بنية المشروع الخاصة بك على:
```bash
your-work/
@@ -206,9 +355,9 @@ your-work/
- **ملف JavaScript** حيث ستكتب كل سحر عرض اللعبة الخاص بك
- **ملف package.json** الذي يجهز خادم تطوير حتى تتمكن من الاختبار محليًا
-افتح هذا المجلد في Visual Studio Code لبدء التطوير. ستحتاج إلى بيئة تطوير محلية مع Visual Studio Code، NPM، وNode.js مثبتة. إذا لم يكن لديك `npm` مثبتًا على جهاز الكمبيوتر الخاص بك، [إليك كيفية تثبيته](https://www.npmjs.com/get-npm).
+افتح هذا المجلد في Visual Studio Code لبدء التطوير. ستحتاج إلى بيئة تطوير محلية مع Visual Studio Code، NPM، و Node.js مثبتة. إذا لم يكن لديك `npm` مثبتًا على جهاز الكمبيوتر الخاص بك، [إليك كيفية تثبيته](https://www.npmjs.com/get-npm).
-ابدأ خادم التطوير الخاص بك بالتنقل إلى مجلد `your-work`:
+ابدأ خادم التطوير الخاص بك عن طريق الانتقال إلى مجلد `your-work`:
```bash
cd your-work
@@ -221,23 +370,23 @@ npm start
- **يراقب** ملفاتك للتغييرات حتى تتمكن من التطوير بسلاسة
- **يوفر لك** بيئة تطوير احترافية لاختبار كل شيء
-> 💡 **ملاحظة**: سيعرض متصفحك صفحة فارغة في البداية – هذا متوقع! أثناء إضافة الكود، قم بتحديث متصفحك لرؤية التغييرات. هذا النهج التطويري التكراري مشابه للطريقة التي بنت بها ناسا كمبيوتر التوجيه الخاص بأبولو – اختبار كل مكون قبل دمجه في النظام الأكبر.
+> 💡 **ملاحظة**: سيعرض متصفحك صفحة فارغة في البداية – هذا متوقع! أثناء إضافة الكود، قم بتحديث المتصفح لرؤية التغييرات. هذا النهج التطويري التكراري مشابه للطريقة التي بنت بها ناسا كمبيوتر التوجيه الخاص بأبولو – اختبار كل مكون قبل دمجه في النظام الأكبر.
-### إضافة الكود
+### أضف الكود
أضف الكود المطلوب إلى `your-work/app.js` لإكمال المهام التالية:
-1. **رسم لوحة بخلفية سوداء**
- > 💡 **كيف**: ابحث عن TODO في `/app.js` وأضف سطرين فقط. قم بتعيين `ctx.fillStyle` إلى الأسود، ثم استخدم `ctx.fillRect()` بدءًا من (0,0) بأبعاد اللوحة الخاصة بك. سهل!
+1. **ارسم لوحة بخلفية سوداء**
+ > 💡 **إليك الطريقة**: ابحث عن TODO في `/app.js` وأضف سطرين فقط. قم بتعيين `ctx.fillStyle` إلى الأسود، ثم استخدم `ctx.fillRect()` بدءًا من (0,0) بأبعاد اللوحة الخاصة بك. سهل!
2. **تحميل قوام اللعبة**
- > 💡 **كيف**: استخدم `await loadAsset()` لتحميل صور اللاعب والعدو. قم بتخزينها في متغيرات حتى تتمكن من استخدامها لاحقًا. تذكر – لن تظهر حتى تقوم برسمها فعليًا!
+ > 💡 **إليك الطريقة**: استخدم `await loadAsset()` لتحميل صور اللاعب والعدو. قم بتخزينها في متغيرات حتى تتمكن من استخدامها لاحقًا. تذكر – لن تظهر حتى تقوم برسمها فعليًا!
-3. **رسم سفينة البطل في المركز السفلي**
- > 💡 **كيف**: استخدم `ctx.drawImage()` لوضع البطل. بالنسبة للإحداثي x، جرب `canvas.width / 2 - 45` لتوسيطه، وبالنسبة للإحداثي y استخدم `canvas.height - canvas.height / 4` لوضعه في المنطقة السفلية.
+3. **ارسم سفينة البطل في الموضع السفلي الأوسط**
+ > 💡 **إليك الطريقة**: استخدم `ctx.drawImage()` لوضع البطل. بالنسبة للإحداثي x، جرب `canvas.width / 2 - 45` لتوسيطه، وبالنسبة للإحداثي y استخدم `canvas.height - canvas.height / 4` لوضعه في المنطقة السفلية.
-4. **رسم تشكيل 5×5 من سفن الأعداء**
- > 💡 **كيف**: ابحث عن وظيفة `createEnemies` وقم بإعداد حلقة متداخلة. ستحتاج إلى القيام ببعض الرياضيات للتباعد والتموضع، ولكن لا تقلق – سأريك بالضبط كيف!
+4. **ارسم تشكيلًا من 5×5 سفن الأعداء**
+ > 💡 **إليك الطريقة**: ابحث عن وظيفة `createEnemies` وقم بإعداد حلقة متداخلة. ستحتاج إلى القيام ببعض الرياضيات للتباعد والتموضع، ولكن لا تقلق – سأريك بالضبط كيف!
أولاً، قم بتحديد الثوابت لتخطيط تشكيل الأعداء بشكل صحيح:
@@ -249,11 +398,38 @@ const START_X = (canvas.width - FORMATION_WIDTH) / 2;
const STOP_X = START_X + FORMATION_WIDTH;
```
-**دعونا نوضح ما تفعله هذه الثوابت:**
+**دعنا نوضح ما تفعله هذه الثوابت:**
- نحن **نحدد** 5 أعداء لكل صف وعمود (شبكة جميلة 5×5)
-- نحن **نحدد** مقدار المسافة بين الأعداء حتى لا يظهروا مزدحمين
+- نحن **نحدد** مقدار المسافة بين الأعداء حتى لا تبدو مزدحمة
- نحن **نحسب** عرض التشكيل بالكامل
-- نحن **نحدد** مكان البدء والتوقف حتى يبدو التشكيل مركزيًا
+- نحن **نحدد** مكان البدء والانتهاء حتى يبدو التشكيل مركزيًا
+
+```mermaid
+flowchart LR
+ A["Canvas Width: 1024px"] --> B["Formation Width: 490px"]
+ B --> C["Start X: 267px"]
+ C --> D["Enemy Spacing: 98px"]
+
+ subgraph "5x5 Enemy Formation"
+ E["Row 1: Y=0"]
+ F["Row 2: Y=50"]
+ G["Row 3: Y=100"]
+ H["Row 4: Y=150"]
+ I["Row 5: Y=200"]
+ end
+
+ subgraph "Column Spacing"
+ J["Col 1: X=267"]
+ K["Col 2: X=365"]
+ L["Col 3: X=463"]
+ M["Col 4: X=561"]
+ N["Col 5: X=659"]
+ end
+
+ style A fill:#e1f5fe
+ style B fill:#e8f5e8
+ style C fill:#fff3e0
+```
ثم، قم بإنشاء حلقات متداخلة لرسم تشكيل الأعداء:
@@ -268,46 +444,175 @@ for (let x = START_X; x < STOP_X; x += ENEMY_SPACING) {
**ما الذي تفعله هذه الحلقة المتداخلة:**
- الحلقة الخارجية **تتحرك** من اليسار إلى اليمين عبر تشكيلنا
- الحلقة الداخلية **تذهب** من الأعلى إلى الأسفل لإنشاء صفوف مرتبة
-- نحن **نرسم** كل صورة عدو عند الإحداثيات x,y التي حسبناها
+- نحن **نرسم** كل صورة عدو في الإحداثيات x,y التي حسبناها
- كل شيء يبقى **متباعدًا بشكل متساوٍ** حتى يبدو احترافيًا ومنظمًا
-## النتيجة
+### 🔄 **مراجعة تربوية**
+**إتقان عرض اللعبة**: تحقق من فهمك لنظام العرض الكامل:
+- ✅ كيف يمنع تحميل الصور غير المتزامن حجب واجهة المستخدم أثناء بدء تشغيل اللعبة؟
+- ✅ لماذا نحسب مواضع تشكيل الأعداء باستخدام الثو
+- **أنظمة الإحداثيات**: تحويل الرياضيات إلى مواقع على الشاشة
+- **إدارة الصور المتحركة**: تحميل وعرض الرسومات في الألعاب
+- **خوارزميات التشكيل**: أنماط رياضية لتصميم تخطيطات منظمة
+- **العمليات غير المتزامنة**: استخدام JavaScript الحديث لتجربة مستخدم سلسة
-يجب أن تبدو النتيجة النهائية كما يلي:
+## النتيجة
-
+يجب أن تبدو النتيجة النهائية كما يلي:
-## الحل
+
-يرجى محاولة حلها بنفسك أولاً ولكن إذا واجهت صعوبة، يمكنك الاطلاع على [الحل](../../../../6-space-game/2-drawing-to-canvas/solution/app.js)
+## الحل
----
-
-## تحدي GitHub Copilot Agent 🚀
-
-استخدم وضع الوكيل لإكمال التحدي التالي:
-
-**الوصف:** قم بتحسين لوحة لعبة الفضاء الخاصة بك عن طريق إضافة تأثيرات بصرية وعناصر تفاعلية باستخدام تقنيات واجهة برمجة التطبيقات الخاصة باللوحة التي تعلمتها.
-
-**المهمة:** قم بإنشاء ملف جديد يسمى `enhanced-canvas.html` يحتوي على لوحة تعرض نجومًا متحركة في الخلفية، شريط صحة نابض لسفينة البطل، وسفن الأعداء التي تتحرك ببطء نحو الأسفل. قم بتضمين كود JavaScript يرسم نجومًا متلألئة باستخدام مواقع عشوائية وشفافية، ينفذ شريط صحة يتغير لونه بناءً على مستوى الصحة (أخضر > أصفر > أحمر)، ويقوم بتحريك سفن الأعداء للنزول على الشاشة بسرعات مختلفة.
-
-تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
-
-## 🚀 التحدي
+حاول حلها بنفسك أولاً، ولكن إذا واجهت صعوبة، يمكنك الاطلاع على [الحل](../../../../6-space-game/2-drawing-to-canvas/solution/app.js)
-لقد تعلمت عن الرسم باستخدام واجهة برمجة التطبيقات الخاصة باللوحة ثنائية الأبعاد؛ ألقِ نظرة على [واجهة برمجة التطبيقات الخاصة بـ WebGL](https://developer.mozilla.org/docs/Web/API/WebGL_API)، وحاول رسم كائن ثلاثي الأبعاد.
-
-## اختبار ما بعد المحاضرة
-
-[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/32)
-
-## المراجعة والدراسة الذاتية
-
-تعرف على المزيد حول واجهة برمجة التطبيقات الخاصة باللوحة من خلال [قراءتها](https://developer.mozilla.org/docs/Web/API/Canvas_API).
-
-## الواجب
+---
-[العب مع واجهة برمجة التطبيقات الخاصة باللوحة](assignment.md)
+## تحدي GitHub Copilot Agent 🚀
+
+استخدم وضع الوكيل لإكمال التحدي التالي:
+
+**الوصف:** قم بتحسين لوحة لعبة الفضاء الخاصة بك عن طريق إضافة تأثيرات بصرية وعناصر تفاعلية باستخدام تقنيات Canvas API التي تعلمتها.
+
+**المهمة:** قم بإنشاء ملف جديد يسمى `enhanced-canvas.html` يحتوي على لوحة تعرض نجومًا متحركة في الخلفية، شريط صحة نابض لسفينة البطل، وسفن الأعداء التي تتحرك ببطء نحو الأسفل. قم بتضمين كود JavaScript يرسم نجومًا متلألئة باستخدام مواقع وألوان عشوائية، ينفذ شريط صحة يتغير لونه بناءً على مستوى الصحة (أخضر > أصفر > أحمر)، ويقوم بتحريك سفن الأعداء لتتحرك نحو الأسفل بسرعات مختلفة.
+
+تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
+
+## 🚀 التحدي
+
+لقد تعلمت كيفية الرسم باستخدام Canvas API المخصص للرسومات ثنائية الأبعاد؛ ألقِ نظرة على [WebGL API](https://developer.mozilla.org/docs/Web/API/WebGL_API)، وحاول رسم كائن ثلاثي الأبعاد.
+
+## اختبار ما بعد المحاضرة
+
+[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/32)
+
+## المراجعة والدراسة الذاتية
+
+تعرف على المزيد حول Canvas API من خلال [قراءة المزيد عنه](https://developer.mozilla.org/docs/Web/API/Canvas_API).
+
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] افتح وحدة التحكم في المتصفح وأنشئ عنصر لوحة باستخدام `document.createElement('canvas')`
+- [ ] حاول رسم مستطيل باستخدام `fillRect()` على سياق اللوحة
+- [ ] جرب ألوانًا مختلفة باستخدام خاصية `fillStyle`
+- [ ] ارسم دائرة بسيطة باستخدام طريقة `arc()`
+
+### 🎯 **ما يمكنك تحقيقه خلال هذه الساعة**
+- [ ] أكمل اختبار ما بعد الدرس وافهم أساسيات اللوحة
+- [ ] أنشئ تطبيق رسم على اللوحة يحتوي على أشكال وألوان متعددة
+- [ ] قم بتنفيذ تحميل الصور وعرض الصور المتحركة للعبة الخاصة بك
+- [ ] أنشئ حركة بسيطة تحرك الكائنات عبر اللوحة
+- [ ] مارس تحويلات اللوحة مثل التكبير، الدوران، والترجمة
+
+### 📅 **رحلتك الأسبوعية مع اللوحة**
+- [ ] أكمل لعبة الفضاء برسومات محسنة وصور متحركة
+- [ ] أتقن تقنيات اللوحة المتقدمة مثل التدرجات، الأنماط، والتكوين
+- [ ] أنشئ تصورات تفاعلية باستخدام اللوحة لتمثيل البيانات
+- [ ] تعلم تقنيات تحسين اللوحة للحصول على أداء سلس
+- [ ] قم ببناء تطبيق رسم أو تلوين باستخدام أدوات متنوعة
+- [ ] استكشف أنماط البرمجة الإبداعية والفن التوليدي باستخدام اللوحة
+
+### 🌟 **رحلتك الشهرية لإتقان الرسومات**
+- [ ] قم ببناء تطبيقات بصرية معقدة باستخدام Canvas 2D وWebGL
+- [ ] تعلم مفاهيم برمجة الرسومات وأساسيات الشيفرات
+- [ ] ساهم في مكتبات الرسومات مفتوحة المصدر وأدوات التصور
+- [ ] أتقن تحسين الأداء للتطبيقات المكثفة الرسومية
+- [ ] أنشئ محتوى تعليمي حول برمجة اللوحة والرسومات الحاسوبية
+- [ ] كن خبيرًا في برمجة الرسومات يساعد الآخرين في إنشاء تجارب بصرية
+
+## 🎯 جدول زمني لإتقان رسومات اللوحة
+
+```mermaid
+timeline
+ title Canvas API Learning Progression
+
+ section Canvas Fundamentals (15 minutes)
+ Basic Operations: Element reference
+ : 2D context access
+ : Coordinate system
+ : Simple shape drawing
+
+ section Drawing Techniques (20 minutes)
+ Graphics Primitives: Rectangles and circles
+ : Colors and styles
+ : Text rendering
+ : Path operations
+
+ section Image Handling (25 minutes)
+ Asset Management: Image object creation
+ : Async loading patterns
+ : Error handling
+ : Performance optimization
+
+ section Game Graphics (30 minutes)
+ Sprite Rendering: Positioning algorithms
+ : Formation calculations
+ : Scene composition
+ : Frame rendering
+
+ section Advanced Techniques (40 minutes)
+ Visual Effects: Transformations
+ : Animations
+ : Layering
+ : State management
+
+ section Performance (35 minutes)
+ Optimization: Efficient drawing
+ : Memory management
+ : Frame rate control
+ : Asset caching
+
+ section Professional Skills (1 week)
+ Production Graphics: WebGL integration
+ : Canvas libraries
+ : Game engines
+ : Cross-platform considerations
+
+ section Advanced Graphics (1 month)
+ Specialized Applications: Data visualization
+ : Interactive art
+ : Real-time effects
+ : 3D graphics
+```
+
+### 🛠️ ملخص أدوات رسومات اللوحة الخاصة بك
+
+بعد إكمال هذا الدرس، لديك الآن:
+- **إتقان Canvas API**: فهم كامل لبرمجة الرسومات ثنائية الأبعاد
+- **رياضيات الإحداثيات**: تحديد المواقع الدقيقة وخوارزميات التخطيط
+- **إدارة الأصول**: تحميل الصور بشكل احترافي ومعالجة الأخطاء
+- **خط أنابيب العرض**: نهج منظم لتكوين المشاهد
+- **رسومات الألعاب**: حسابات وضع الصور المتحركة والتشكيلات
+- **البرمجة غير المتزامنة**: أنماط JavaScript الحديثة لأداء سلس
+- **البرمجة البصرية**: تحويل المفاهيم الرياضية إلى رسومات على الشاشة
+
+**التطبيقات الواقعية**: مهاراتك في اللوحة تنطبق مباشرة على:
+- **تصور البيانات**: الرسوم البيانية ولوحات التحكم التفاعلية
+- **تطوير الألعاب**: الألعاب ثنائية الأبعاد، المحاكاة، والتجارب التفاعلية
+- **الفن الرقمي**: البرمجة الإبداعية ومشاريع الفن التوليدي
+- **تصميم واجهات المستخدم وتجربة المستخدم**: الرسومات المخصصة والعناصر التفاعلية
+- **البرمجيات التعليمية**: أدوات التعلم البصري والمحاكاة
+- **تطبيقات الويب**: الرسومات الديناميكية والتصورات في الوقت الفعلي
+
+**المهارات المهنية المكتسبة**: يمكنك الآن:
+- **إنشاء** حلول رسومات مخصصة بدون مكتبات خارجية
+- **تحسين** أداء العرض لتجارب مستخدم سلسة
+- **تصحيح الأخطاء** في المشكلات البصرية المعقدة باستخدام أدوات المطور في المتصفح
+- **تصميم** أنظمة رسومات قابلة للتوسع باستخدام المبادئ الرياضية
+- **دمج** رسومات اللوحة مع أطر عمل تطبيقات الويب الحديثة
+
+**طرق Canvas API التي أتقنتها**:
+- **إدارة العناصر**: getElementById، getContext
+- **عمليات الرسم**: fillRect، drawImage، fillStyle
+- **تحميل الأصول**: كائنات الصور، أنماط الوعد
+- **تحديد المواقع الرياضية**: حسابات الإحداثيات، خوارزميات التشكيل
+
+**المستوى التالي**: أنت جاهز لإضافة الحركة، التفاعل مع المستخدم، اكتشاف التصادم، أو استكشاف WebGL للرسومات ثلاثية الأبعاد!
+
+🌟 **إنجاز محقق**: لقد قمت ببناء نظام عرض ألعاب كامل باستخدام تقنيات Canvas API الأساسية!
+
+## المهمة
+
+[استمتع بالعمل مع Canvas API](assignment.md)
---
diff --git a/translations/ar/6-space-game/3-moving-elements-around/README.md b/translations/ar/6-space-game/3-moving-elements-around/README.md
index db8b3d5315..d6cb7625f3 100644
--- a/translations/ar/6-space-game/3-moving-elements-around/README.md
+++ b/translations/ar/6-space-game/3-moving-elements-around/README.md
@@ -1,21 +1,68 @@
-# بناء لعبة الفضاء الجزء الثالث: إضافة الحركة
+# بناء لعبة فضاء الجزء الثالث: إضافة الحركة
+
+```mermaid
+journey
+ title Your Game Animation Journey
+ section Movement Basics
+ Understand motion principles: 3: Student
+ Learn coordinate updates: 4: Student
+ Implement basic movement: 4: Student
+ section Player Controls
+ Handle keyboard events: 4: Student
+ Prevent default behaviors: 5: Student
+ Create responsive controls: 5: Student
+ section Game Systems
+ Build game loop: 5: Student
+ Manage object lifecycle: 5: Student
+ Implement pub/sub pattern: 5: Student
+```
-فكر في ألعابك المفضلة – ما يجعلها جذابة ليس فقط الرسومات الجميلة، بل الطريقة التي تتحرك بها وتستجيب لأفعالك. في الوقت الحالي، لعبتك الفضائية تشبه لوحة جميلة، لكننا على وشك إضافة الحركة التي ستجعلها تنبض بالحياة.
+فكر في ألعابك المفضلة – ما يجعلها ممتعة ليس فقط الرسومات الجميلة، بل الطريقة التي تتحرك بها الأشياء وتستجيب لتفاعلاتك. في الوقت الحالي، لعبتك الفضائية تشبه لوحة جميلة، لكننا على وشك إضافة الحركة التي ستجعلها تنبض بالحياة.
-عندما قام مهندسو ناسا ببرمجة الكمبيوتر التوجيهي لمهام أبولو، واجهوا تحديًا مشابهًا: كيف تجعل المركبة الفضائية تستجيب لإدخال الطيار مع الحفاظ تلقائيًا على تصحيحات المسار؟ المبادئ التي سنتعلمها اليوم تعكس نفس المفاهيم – إدارة الحركة التي يتحكم بها اللاعب جنبًا إلى جنب مع سلوكيات النظام التلقائية.
+عندما قام مهندسو ناسا ببرمجة الكمبيوتر الإرشادي لمهام أبولو، واجهوا تحديًا مشابهًا: كيف تجعل المركبة الفضائية تستجيب لمدخلات الطيار مع الحفاظ تلقائيًا على تصحيحات المسار؟ المبادئ التي سنتعلمها اليوم تعكس تلك المفاهيم نفسها – إدارة الحركة التي يتحكم بها اللاعب جنبًا إلى جنب مع سلوكيات النظام التلقائية.
في هذا الدرس، ستتعلم كيفية جعل السفن الفضائية تنزلق عبر الشاشة، تستجيب لأوامر اللاعب، وتخلق أنماط حركة سلسة. سنقسم كل شيء إلى مفاهيم قابلة للإدارة تبني على بعضها البعض بشكل طبيعي.
-بحلول النهاية، سيكون لديك لاعبون يحلقون بسفينة البطل الخاصة بهم حول الشاشة بينما تقوم سفن العدو بدوريات في الأعلى. والأهم من ذلك، ستفهم المبادئ الأساسية التي تشغل أنظمة حركة الألعاب.
+في النهاية، سيكون لديك لاعبون يحلقون بسفينة البطل حول الشاشة بينما تقوم سفن العدو بدوريات في الأعلى. والأهم من ذلك، ستفهم المبادئ الأساسية التي تشغل أنظمة حركة الألعاب.
+
+```mermaid
+mindmap
+ root((Game Animation))
+ Movement Types
+ Player Controlled
+ Automatic Motion
+ Physics Based
+ Scripted Paths
+ Event Handling
+ Keyboard Input
+ Mouse Events
+ Touch Controls
+ Default Prevention
+ Game Loop
+ Update Logic
+ Render Frame
+ Clear Canvas
+ Frame Rate Control
+ Object Management
+ Position Updates
+ Collision Detection
+ Lifecycle Management
+ State Tracking
+ Communication
+ Pub/Sub Pattern
+ Event Emitters
+ Message Passing
+ Loose Coupling
+```
## اختبار ما قبل المحاضرة
@@ -26,17 +73,38 @@ CO_OP_TRANSLATOR_METADATA:
تنبض الألعاب بالحياة عندما تبدأ الأشياء في التحرك، وهناك طريقتان أساسيتان لحدوث ذلك:
- **الحركة التي يتحكم بها اللاعب**: عندما تضغط على مفتاح أو تنقر بالماوس، يتحرك شيء ما. هذا هو الاتصال المباشر بينك وبين عالم اللعبة.
-- **الحركة التلقائية**: عندما تقرر اللعبة نفسها تحريك الأشياء – مثل سفن العدو التي تحتاج إلى القيام بدوريات على الشاشة سواء كنت تفعل شيئًا أم لا.
+- **الحركة التلقائية**: عندما تقرر اللعبة نفسها تحريك الأشياء – مثل سفن العدو التي تحتاج إلى الدوريات على الشاشة سواء كنت تفعل شيئًا أم لا.
+
+تحريك الأشياء على شاشة الكمبيوتر أبسط مما قد تعتقد. هل تتذكر تلك الإحداثيات x و y من صف الرياضيات؟ هذا بالضبط ما نعمل به هنا. عندما قام غاليليو بتتبع أقمار المشتري في عام 1610، كان يقوم أساسًا بنفس الشيء – رسم المواقع بمرور الوقت لفهم أنماط الحركة.
-تحريك الأشياء على شاشة الكمبيوتر أبسط مما تعتقد. هل تتذكر تلك الإحداثيات x و y من فصل الرياضيات؟ هذا بالضبط ما نعمل به هنا. عندما تتبع غاليليو أقمار المشتري في عام 1610، كان يقوم بنفس الشيء – رسم المواقع بمرور الوقت لفهم أنماط الحركة.
+تحريك الأشياء على الشاشة يشبه إنشاء رسوم متحركة على شكل كتاب متحرك – تحتاج إلى اتباع هذه الخطوات الثلاث البسيطة:
-تحريك الأشياء على الشاشة يشبه إنشاء رسوم متحركة لكتاب تقليب – تحتاج إلى اتباع هذه الخطوات الثلاث البسيطة:
+```mermaid
+flowchart LR
+ A["Frame N"] --> B["Update Positions"]
+ B --> C["Clear Canvas"]
+ C --> D["Draw Objects"]
+ D --> E["Frame N+1"]
+ E --> F{Continue?}
+ F -->|Yes| B
+ F -->|No| G["Game Over"]
+
+ subgraph "Animation Cycle"
+ H["1. Calculate new positions"]
+ I["2. Erase previous frame"]
+ J["3. Render new frame"]
+ end
+
+ style B fill:#e1f5fe
+ style C fill:#ffebee
+ style D fill:#e8f5e8
+```
-1. **تحديث الموقع** – تغيير مكان الكائن (ربما تحريكه 5 بكسلات إلى اليمين)
+1. **تحديث الموقع** – تغيير مكان الكائن (ربما تحريكه 5 بكسل إلى اليمين)
2. **مسح الإطار القديم** – تنظيف الشاشة حتى لا ترى آثارًا شبحية في كل مكان
3. **رسم الإطار الجديد** – وضع الكائن في موقعه الجديد
-افعل ذلك بسرعة كافية، وها أنت ذا! لديك حركة سلسة تشعر بأنها طبيعية للاعبين.
+افعل ذلك بسرعة كافية، وستحصل على حركة سلسة تبدو طبيعية للاعبين.
إليك كيف يمكن أن يبدو ذلك في الكود:
@@ -52,22 +120,22 @@ ctx.drawImage(heroImg, hero.x, hero.y);
```
**ما يفعله هذا الكود:**
-- **يحدث** إحداثيات x الخاصة بالبطل بمقدار 5 بكسلات لتحريكه أفقيًا
+- **يحدث** إحداثيات x الخاصة بالبطل بمقدار 5 بكسل لتحريكه أفقيًا
- **يمسح** منطقة اللوحة بالكامل لإزالة الإطار السابق
-- **يملأ** اللوحة بلون خلفية أسود
+- **يملأ** منطقة اللوحة بلون خلفية أسود
- **يعيد رسم** صورة البطل في موقعه الجديد
-✅ هل يمكنك التفكير في سبب يجعل إعادة رسم بطلك عدة إطارات في الثانية قد يؤدي إلى تكاليف أداء؟ اقرأ عن [بدائل لهذا النمط](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Optimizing_canvas).
+✅ هل يمكنك التفكير في سبب قد يؤدي إلى تكاليف أداء عند إعادة رسم البطل عدة إطارات في الثانية؟ اقرأ عن [بدائل لهذا النمط](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Optimizing_canvas).
## التعامل مع أحداث لوحة المفاتيح
-هنا نربط إدخال اللاعب بحركة اللعبة. عندما يضغط شخص ما على مفتاح المسافة لإطلاق الليزر أو ينقر على مفتاح السهم لتجنب الكويكب، تحتاج لعبتك إلى اكتشاف هذا الإدخال والاستجابة له.
+هنا نربط مدخلات اللاعب بحركة اللعبة. عندما يضغط أحدهم على مفتاح المسافة لإطلاق الليزر أو يضغط على مفتاح السهم لتجنب الكويكب، تحتاج لعبتك إلى اكتشاف هذا المدخل والاستجابة له.
-تحدث أحداث لوحة المفاتيح على مستوى النافذة، مما يعني أن نافذة المتصفح بأكملها تستمع لهذه الضغطات. من ناحية أخرى، يمكن ربط نقرات الماوس بعناصر محددة (مثل النقر على زر). بالنسبة للعبة الفضاء الخاصة بنا، سنركز على التحكم بلوحة المفاتيح لأنه يمنح اللاعبين ذلك الشعور الكلاسيكي لألعاب الأركيد.
+تحدث أحداث لوحة المفاتيح على مستوى النافذة، مما يعني أن نافذة المتصفح بأكملها تستمع لهذه الضغطات. من ناحية أخرى، يمكن ربط نقرات الماوس بعناصر محددة (مثل النقر على زر). بالنسبة للعبة الفضاء الخاصة بنا، سنركز على عناصر التحكم في لوحة المفاتيح لأنها تمنح اللاعبين ذلك الشعور الكلاسيكي لألعاب الأركيد.
-هذا يذكرني بكيفية اضطرار مشغلي التلغراف في القرن التاسع عشر إلى ترجمة إدخال شفرة مورس إلى رسائل ذات معنى – نحن نفعل شيئًا مشابهًا، نترجم ضغطات المفاتيح إلى أوامر اللعبة.
+هذا يذكرني بكيفية اضطرار مشغلي التلغراف في القرن التاسع عشر إلى ترجمة مدخلات شفرة مورس إلى رسائل ذات معنى – نحن نفعل شيئًا مشابهًا، نترجم ضغطات المفاتيح إلى أوامر اللعبة.
-للتعامل مع حدث تحتاج إلى استخدام طريقة `addEventListener()` الخاصة بالنافذة وتزويدها بمعاملين. المعامل الأول هو اسم الحدث، على سبيل المثال `keyup`. المعامل الثاني هو الوظيفة التي يجب استدعاؤها نتيجة لحدوث الحدث.
+للتعامل مع حدث، تحتاج إلى استخدام طريقة `addEventListener()` الخاصة بالنافذة وتزويدها بمعاملين. المعامل الأول هو اسم الحدث، على سبيل المثال `keyup`. المعامل الثاني هو الوظيفة التي يجب استدعاؤها نتيجة لحدوث الحدث.
إليك مثال:
@@ -83,21 +151,40 @@ window.addEventListener('keyup', (evt) => {
**تفصيل ما يحدث هنا:**
- **يستمع** لأحداث لوحة المفاتيح على النافذة بأكملها
- **يلتقط** كائن الحدث الذي يحتوي على معلومات حول المفتاح الذي تم الضغط عليه
-- **يتحقق** مما إذا كان المفتاح المضغوط يطابق مفتاحًا معينًا (في هذه الحالة، السهم العلوي)
+- **يتحقق** مما إذا كان المفتاح المضغوط يتطابق مع مفتاح معين (في هذه الحالة، سهم لأعلى)
- **ينفذ** الكود عندما يتم استيفاء الشرط
بالنسبة لأحداث المفاتيح، هناك خاصيتان على الحدث يمكنك استخدامهما لمعرفة المفتاح الذي تم الضغط عليه:
- `key` - هذا هو التمثيل النصي للمفتاح المضغوط، على سبيل المثال `'ArrowUp'`
-- `keyCode` - هذا هو التمثيل الرقمي، على سبيل المثال `37`، يتوافق مع `ArrowLeft`
+- `keyCode` - هذا هو التمثيل الرقمي، على سبيل المثال `37`، الذي يتوافق مع `ArrowLeft`
✅ التلاعب بأحداث المفاتيح مفيد خارج تطوير الألعاب. ما الاستخدامات الأخرى التي يمكنك التفكير فيها لهذه التقنية؟
+```mermaid
+sequenceDiagram
+ participant User
+ participant Browser
+ participant EventSystem
+ participant GameLogic
+ participant Hero
+
+ User->>Browser: Presses ArrowUp key
+ Browser->>EventSystem: keydown event
+ EventSystem->>EventSystem: preventDefault()
+ EventSystem->>GameLogic: emit('KEY_EVENT_UP')
+ GameLogic->>Hero: hero.y -= 5
+ Hero->>Hero: Update position
+
+ Note over Browser,GameLogic: Event flow prevents browser defaults
+ Note over GameLogic,Hero: Pub/sub pattern enables clean communication
+```
+
### المفاتيح الخاصة: تنبيه!
-بعض المفاتيح لها سلوكيات مدمجة في المتصفح يمكن أن تتداخل مع لعبتك. مفاتيح الأسهم تقوم بتمرير الصفحة ومفتاح المسافة يقفز للأسفل – سلوكيات لا تريدها عندما يحاول شخص ما قيادة سفينته الفضائية.
+بعض المفاتيح لها سلوكيات مدمجة في المتصفح يمكن أن تتداخل مع لعبتك. مفاتيح الأسهم تقوم بتمرير الصفحة ومفتاح المسافة يقفز للأسفل – سلوكيات لا تريدها عندما يحاول أحدهم قيادة سفينته الفضائية.
-يمكننا منع هذه السلوكيات الافتراضية وترك لعبتنا تتعامل مع الإدخال بدلاً من ذلك. هذا مشابه لكيفية اضطرار مبرمجي الكمبيوتر الأوائل إلى تجاوز مقاطعات النظام لإنشاء سلوكيات مخصصة – نحن فقط نفعل ذلك على مستوى المتصفح. إليك الطريقة:
+يمكننا منع هذه السلوكيات الافتراضية وترك لعبتنا تتعامل مع المدخلات بدلاً من ذلك. هذا يشبه كيف كان على مبرمجي الكمبيوتر الأوائل تجاوز مقاطعات النظام لإنشاء سلوكيات مخصصة – نحن فقط نفعل ذلك على مستوى المتصفح. إليك الطريقة:
```javascript
const onKeyDown = function (e) {
@@ -124,9 +211,25 @@ window.addEventListener('keydown', onKeyDown);
- **يسمح** للمفاتيح الأخرى بالعمل بشكل طبيعي
- **يستخدم** `e.preventDefault()` لإيقاف سلوك المتصفح المدمج
+### 🔄 **تقييم تربوي**
+**فهم التعامل مع الأحداث**: قبل الانتقال إلى الحركة التلقائية، تأكد من أنك تستطيع:
+- ✅ شرح الفرق بين أحداث `keydown` و `keyup`
+- ✅ فهم سبب منع سلوكيات المتصفح الافتراضية
+- ✅ وصف كيفية ربط مستمعي الأحداث مدخلات المستخدم بمنطق اللعبة
+- ✅ تحديد المفاتيح التي قد تتداخل مع عناصر التحكم في اللعبة
+
+**اختبار سريع ذاتي**: ماذا سيحدث إذا لم تمنع السلوك الافتراضي لمفاتيح الأسهم؟
+*الإجابة: سيقوم المتصفح بتمرير الصفحة، مما يتداخل مع حركة اللعبة*
+
+**هيكل نظام الأحداث**: أنت الآن تفهم:
+- **الاستماع على مستوى النافذة**: التقاط الأحداث على مستوى المتصفح
+- **خصائص كائن الحدث**: سلاسل `key` مقابل أرقام `keyCode`
+- **منع السلوك الافتراضي**: إيقاف السلوكيات غير المرغوب فيها للمتصفح
+- **المنطق الشرطي**: الاستجابة لمجموعات المفاتيح المحددة
+
## الحركة الناتجة عن اللعبة
-الآن دعونا نتحدث عن الكائنات التي تتحرك دون إدخال اللاعب. فكر في سفن العدو التي تجوب الشاشة، الرصاص الذي يطير في خطوط مستقيمة، أو السحب التي تنجرف في الخلفية. هذه الحركة التلقائية تجعل عالم لعبتك يبدو حيًا حتى عندما لا يلمس أحد عناصر التحكم.
+الآن دعونا نتحدث عن الكائنات التي تتحرك دون مدخلات اللاعب. فكر في سفن العدو التي تتجول عبر الشاشة، الرصاص الذي يطير في خطوط مستقيمة، أو السحب التي تنجرف في الخلفية. هذه الحركة التلقائية تجعل عالم لعبتك يبدو حيًا حتى عندما لا يلمس أحد عناصر التحكم.
نستخدم المؤقتات المدمجة في JavaScript لتحديث المواقع على فترات منتظمة. هذا المفهوم مشابه لكيفية عمل الساعات البندولية – آلية منتظمة تؤدي إلى إجراءات متسقة وموقوتة. إليك مدى بساطة ذلك:
@@ -139,19 +242,44 @@ const id = setInterval(() => {
**ما يفعله كود الحركة هذا:**
- **ينشئ** مؤقتًا يعمل كل 100 مللي ثانية
-- **يحدث** إحداثيات y الخاصة بالعدو بمقدار 10 بكسلات في كل مرة
+- **يحدث** إحداثيات y الخاصة بالعدو بمقدار 10 بكسل في كل مرة
- **يخزن** معرف الفاصل الزمني حتى نتمكن من إيقافه لاحقًا إذا لزم الأمر
-- **يحرك** العدو للأسفل على الشاشة تلقائيًا
+- **يحرك** العدو تلقائيًا نحو الأسفل على الشاشة
## حلقة اللعبة
-إليك المفهوم الذي يربط كل شيء معًا – حلقة اللعبة. إذا كانت لعبتك فيلمًا، فإن حلقة اللعبة ستكون جهاز العرض السينمائي، تعرض إطارًا بعد إطار بسرعة بحيث يبدو كل شيء وكأنه يتحرك بسلاسة.
+إليك المفهوم الذي يربط كل شيء معًا – حلقة اللعبة. إذا كانت لعبتك فيلمًا، فإن حلقة اللعبة ستكون جهاز العرض السينمائي، تعرض إطارًا بعد إطار بسرعة كبيرة بحيث يبدو كل شيء يتحرك بسلاسة.
كل لعبة لديها واحدة من هذه الحلقات تعمل خلف الكواليس. إنها وظيفة تقوم بتحديث جميع كائنات اللعبة، تعيد رسم الشاشة، وتكرر هذه العملية باستمرار. هذا يتتبع بطلك، جميع الأعداء، أي أشعة ليزر تطير – حالة اللعبة بأكملها.
-هذا المفهوم يذكرني بكيفية اضطرار رسامي الأفلام الأوائل مثل والت ديزني إلى إعادة رسم الشخصيات إطارًا بعد إطار لإنشاء وهم الحركة. نحن نفعل الشيء نفسه، فقط باستخدام الكود بدلاً من الأقلام.
-
-إليك كيف يمكن أن تبدو حلقة اللعبة، معبرًا عنها بالكود:
+هذا المفهوم يذكرني بكيفية اضطرار رسامي الأفلام الأوائل مثل والت ديزني إلى إعادة رسم الشخصيات إطارًا بعد إطار لإنشاء وهم الحركة. نحن نفعل الشيء نفسه، فقط بالكود بدلًا من الأقلام.
+
+إليك كيف يمكن أن تبدو حلقة اللعبة عادةً، معبرًا عنها بالكود:
+
+```mermaid
+flowchart TD
+ A["Start Game Loop"] --> B["Clear Canvas"]
+ B --> C["Fill Background"]
+ C --> D["Update Game Objects"]
+ D --> E["Draw Hero"]
+ E --> F["Draw Enemies"]
+ F --> G["Draw UI Elements"]
+ G --> H["Wait for Next Frame"]
+ H --> I{Game Running?}
+ I -->|Yes| B
+ I -->|No| J["End Game"]
+
+ subgraph "Frame Rate Control"
+ K["60 FPS = 16.67ms"]
+ L["30 FPS = 33.33ms"]
+ M["10 FPS = 100ms"]
+ end
+
+ style B fill:#ffebee
+ style D fill:#e1f5fe
+ style E fill:#e8f5e8
+ style F fill:#e8f5e8
+```
```javascript
const gameLoopId = setInterval(() => {
@@ -171,24 +299,24 @@ const gameLoopId = setInterval(() => {
- **يمسح** اللوحة بالكامل لإزالة الإطار السابق
- **يملأ** الخلفية بلون صلب
- **يرسم** جميع كائنات اللعبة في مواقعها الحالية
-- **يكرر** هذه العملية كل 200 مللي ثانية لإنشاء رسوم متحركة سلسة
+- **يكرر** هذه العملية كل 200 مللي ثانية لإنشاء حركة سلسة
- **يدير** معدل الإطارات عن طريق التحكم في توقيت الفاصل الزمني
## متابعة لعبة الفضاء
الآن سنضيف الحركة إلى المشهد الثابت الذي قمت ببنائه سابقًا. سنقوم بتحويله من لقطة شاشة إلى تجربة تفاعلية. سنعمل على ذلك خطوة بخطوة لضمان بناء كل جزء على الآخر.
-احصل على الكود من حيث توقفنا في الدرس السابق (أو ابدأ بالكود الموجود في مجلد [Part II- starter](../../../../6-space-game/3-moving-elements-around/your-work) إذا كنت بحاجة إلى بداية جديدة).
+احصل على الكود من حيث توقفنا في الدرس السابق (أو ابدأ بالكود الموجود في [مجلد البداية الجزء الثاني](../../../../6-space-game/3-moving-elements-around/your-work) إذا كنت بحاجة إلى بداية جديدة).
**إليك ما نبنيه اليوم:**
-- **تحكم البطل**: ستقود مفاتيح الأسهم سفينتك الفضائية حول الشاشة
+- **عناصر تحكم البطل**: مفاتيح الأسهم ستقود سفينتك الفضائية حول الشاشة
- **حركة العدو**: ستبدأ تلك السفن الفضائية الغريبة في التقدم
-لنبدأ في تنفيذ هذه الميزات.
+لنبدأ بتنفيذ هذه الميزات.
## الخطوات الموصى بها
-حدد الملفات التي تم إنشاؤها لك في المجلد الفرعي `your-work`. يجب أن يحتوي على ما يلي:
+حدد الملفات التي تم إنشاؤها لك في المجلد الفرعي `your-work`. يجب أن تحتوي على ما يلي:
```bash
-| assets
@@ -207,9 +335,9 @@ npm start
```
**ما يفعله هذا الأمر:**
-- **ينتقل** إلى دليل المشروع الخاص بك
+- **ينتقل** إلى دليل مشروعك
- **يبدأ** خادم HTTP على العنوان `http://localhost:5000`
-- **يخدم** ملفات لعبتك حتى تتمكن من اختبارها في المتصفح
+- **يقدم** ملفات لعبتك حتى تتمكن من اختبارها في المتصفح
سيبدأ ما سبق خادم HTTP على العنوان `http://localhost:5000`. افتح متصفحًا وأدخل هذا العنوان، في الوقت الحالي يجب أن يعرض البطل وجميع الأعداء؛ لا شيء يتحرك - حتى الآن!
@@ -242,9 +370,46 @@ npm start
**فهم هذه الفئة الأساسية:**
- **تعرف** الخصائص المشتركة التي تشترك فيها جميع كائنات اللعبة (الموقع، الحجم، الصورة)
- **تتضمن** علامة `dead` لتتبع ما إذا كان يجب إزالة الكائن
- - **توفر** طريقة `draw()` التي تعرض الكائن على اللوحة
+ - **توفر** طريقة `draw()` التي ترسم الكائن على اللوحة
- **تحدد** قيمًا افتراضية لجميع الخصائص التي يمكن للفئات الفرعية تجاوزها
+ ```mermaid
+ classDiagram
+ class GameObject {
+ +x: number
+ +y: number
+ +dead: boolean
+ +type: string
+ +width: number
+ +height: number
+ +img: Image
+ +draw(ctx)
+ }
+
+ class Hero {
+ +speed: number
+ +type: "Hero"
+ +width: 98
+ +height: 75
+ }
+
+ class Enemy {
+ +type: "Enemy"
+ +width: 98
+ +height: 50
+ +setInterval()
+ }
+
+ GameObject <|-- Hero
+ GameObject <|-- Enemy
+
+ class EventEmitter {
+ +listeners: object
+ +on(message, listener)
+ +emit(message, payload)
+ }
+ ```
+
الآن، قم بتمديد هذا `GameObject` لإنشاء `Hero` و `Enemy`:
```javascript
@@ -284,11 +449,11 @@ npm start
- **تحدد** أبعادًا وخصائص محددة لكل نوع من الكائنات
- **تنفذ** الحركة التلقائية للأعداء باستخدام `setInterval()`
-2. **أضف معالجات أحداث المفاتيح** للتعامل مع التنقل بالمفاتيح (تحريك البطل لأعلى/أسفل يسار/يمين)
+2. **أضف معالجات أحداث المفاتيح** للتعامل مع التنقل بالمفاتيح (تحريك البطل لأعلى/أسفل، يسار/يمين)
- *تذكر* أنه نظام ديكارتي، أعلى اليسار هو `0,0`. أيضًا تذكر إضافة كود لإيقاف *السلوك الافتراضي*
+ *تذكر*: إنه نظام إحداثيات، أعلى اليسار هو `0,0`. أيضًا تذكر إضافة الكود لإيقاف *السلوك الافتراضي*
- > **نصيحة**: قم بإنشاء وظيفة `onKeyDown` الخاصة بك واربطها بالنافذة:
+ > **نصيحة**: أنشئ وظيفة `onKeyDown` الخاصة بك واربطها بالنافذة:
```javascript
const onKeyDown = function (e) {
@@ -310,17 +475,17 @@ npm start
window.addEventListener("keydown", onKeyDown);
```
- **ما يفعله معالج الأحداث هذا:**
+ **ما يفعله معالج الحدث هذا:**
- **يستمع** لأحداث الضغط على المفاتيح على النافذة بأكملها
- **يسجل** رمز المفتاح لمساعدتك في تصحيح الأخطاء ومعرفة المفاتيح التي يتم الضغط عليها
- **يمنع** السلوك الافتراضي للمتصفح لمفاتيح الأسهم ومفتاح المسافة
- **يسمح** للمفاتيح الأخرى بالعمل بشكل طبيعي
- تحقق من وحدة التحكم في المتصفح في هذه المرحلة، وشاهد ضغطات المفاتيح التي يتم تسجيلها.
+ تحقق من وحدة التحكم في المتصفح في هذه المرحلة، وشاهد ضغطات المفاتيح التي يتم تسجيلها.
-3. **تنفيذ** [نمط النشر والاشتراك](../README.md)، سيحافظ هذا على نظافة الكود الخاص بك أثناء متابعة الأجزاء المتبقية.
+3. **تنفيذ** [نمط النشر والاشتراك](../README.md)، سيحافظ هذا على نظافة الكود أثناء متابعة الأجزاء المتبقية.
- يساعد نمط النشر والاشتراك في تنظيم الكود الخاص بك عن طريق فصل اكتشاف الأحداث عن معالجة الأحداث. هذا يجعل الكود الخاص بك أكثر تنظيمًا وأسهل في الصيانة.
+ يساعد نمط النشر والاشتراك في تنظيم الكود عن طريق فصل اكتشاف الأحداث عن التعامل معها. هذا يجعل الكود أكثر تنظيمًا وأسهل في الصيانة.
للقيام بهذا الجزء الأخير، يمكنك:
@@ -341,12 +506,34 @@ npm start
```
**ما يفعله نظام الأحداث هذا:**
- - **يكتشف** إدخال لوحة المفاتيح ويحولها إلى أحداث لعبة مخصصة
- - **يفصل** اكتشاف الإدخال عن منطق اللعبة
+ - **يكتشف** مدخلات لوحة المفاتيح ويحولها إلى أحداث لعبة مخصصة
+ - **يفصل** اكتشاف المدخلات عن منطق اللعبة
- **يجعل** من السهل تغيير عناصر التحكم لاحقًا دون التأثير على كود اللعبة
- - **يسمح** لأنظمة متعددة بالاستجابة لنفس الإدخال
+ - **يسمح** لأنظمة متعددة بالاستجابة لنفس المدخلات
+
+ ```mermaid
+ flowchart TD
+ A["Keyboard Input"] --> B["Window Event Listener"]
+ B --> C["Event Emitter"]
+ C --> D["KEY_EVENT_UP"]
+ C --> E["KEY_EVENT_DOWN"]
+ C --> F["KEY_EVENT_LEFT"]
+ C --> G["KEY_EVENT_RIGHT"]
+
+ D --> H["Hero Movement"]
+ D --> I["Sound System"]
+ D --> J["Visual Effects"]
+
+ E --> H
+ F --> H
+ G --> H
+
+ style A fill:#e1f5fe
+ style C fill:#e8f5e8
+ style H fill:#fff3e0
+ ```
- 2. **إنشاء فئة EventEmitter** لنشر الرسائل والاشتراك فيها:
+ 2. **إنشاء فئة EventEmitter** للنشر والاشتراك في الرسائل:
```javascript
class EventEmitter {
@@ -381,10 +568,10 @@ npm start
```
**فهم الإعداد:**
- - **يعرف** ثوابت الرسائل لتجنب الأخطاء الإملائية وجعل إعادة الهيكلة أسهل
+ - **يحدد** ثوابت الرسائل لتجنب الأخطاء وجعل إعادة الهيكلة أسهل
- **يعلن** عن متغيرات الصور، سياق اللوحة، وحالة اللعبة
- - **ينشئ** مرسل أحداث عالمي لنظام النشر والاشتراك
- - **يبدأ** مصفوفة تحتوي على جميع كائنات اللعبة
+ - **ينشئ** EventEmitter عالميًا لنظام النشر والاشتراك
+ - **تهيئة** مصفوفة لتخزين جميع كائنات اللعبة
4. **تهيئة اللعبة**
@@ -408,7 +595,7 @@ npm start
4. **إعداد حلقة اللعبة**
- قم بإعادة صياغة وظيفة `window.onload` لتهيئة اللعبة وإعداد حلقة اللعبة على فاصل زمني مناسب. ستضيف أيضًا شعاع ليزر:
+ قم بإعادة صياغة وظيفة `window.onload` لتهيئة اللعبة وإعداد حلقة اللعبة بفاصل زمني مناسب. ستضيف أيضًا شعاع الليزر:
```javascript
window.onload = async () => {
@@ -429,13 +616,13 @@ npm start
```
**فهم إعداد اللعبة:**
- - **ينتظر** حتى يتم تحميل الصفحة بالكامل قبل البدء
- - **يحصل** على عنصر اللوحة وسياق العرض ثنائي الأبعاد الخاص بها
- - **يحمل** جميع موارد الصور بشكل غير متزامن باستخدام `await`
- - **يبدأ** تشغيل حلقة اللعبة على فواصل زمنية قدرها 100 مللي ثانية (10 FPS)
- - **يمسح** ويعيد رسم الشاشة بأكملها في كل إطار
+ - **ينتظر** تحميل الصفحة بالكامل قبل البدء
+ - **يحصل** على عنصر اللوحة (canvas) وسياق الرسم ثنائي الأبعاد الخاص بها
+ - **يحمل** جميع الصور بشكل غير متزامن باستخدام `await`
+ - **يبدأ** تشغيل حلقة اللعبة بفواصل زمنية قدرها 100 مللي ثانية (10 إطارات في الثانية)
+ - **يمسح** ويعيد رسم الشاشة بالكامل في كل إطار
-5. **أضف الكود** لتحريك الأعداء على فاصل زمني معين
+5. **إضافة كود** لتحريك الأعداء بفاصل زمني معين
قم بإعادة صياغة وظيفة `createEnemies()` لإنشاء الأعداء ودفعهم إلى فئة gameObjects الجديدة:
@@ -456,13 +643,13 @@ npm start
}
```
- **ما يفعله إنشاء الأعداء:**
- - **يحسب** المواقع لتوسيط الأعداء على الشاشة
-- **إنشاء** شبكة من الأعداء باستخدام الحلقات المتداخلة
-- **تعيين** صورة العدو لكل كائن عدو
-- **إضافة** كل عدو إلى مصفوفة الكائنات العالمية الخاصة باللعبة
-
-ثم أضف دالة `createHero()` لتنفيذ عملية مشابهة للبطل.
+ **ما الذي تفعله عملية إنشاء الأعداء:**
+ - **تحسب** المواقع لتوسيط الأعداء على الشاشة
+ - **تنشئ** شبكة من الأعداء باستخدام الحلقات المتداخلة
+ - **تخصص** صورة العدو لكل كائن عدو
+ - **تضيف** كل عدو إلى مصفوفة كائنات اللعبة العالمية
+
+ وأضف وظيفة `createHero()` للقيام بعملية مشابهة للبطل.
```javascript
function createHero() {
@@ -474,28 +661,48 @@ npm start
gameObjects.push(hero);
}
```
-
-**ما الذي تفعله عملية إنشاء البطل:**
-- **وضع** البطل في أسفل منتصف الشاشة
-- **تعيين** صورة البطل لكائن البطل
-- **إضافة** البطل إلى مصفوفة الكائنات الخاصة باللعبة ليتم عرضه
-وأخيرًا، أضف دالة `drawGameObjects()` لبدء عملية الرسم:
+ **ما الذي تفعله عملية إنشاء البطل:**
+ - **تضع** البطل في أسفل وسط الشاشة
+ - **تخصص** صورة البطل لكائن البطل
+ - **تضيف** البطل إلى مصفوفة كائنات اللعبة للرسم
+
+ وأخيرًا، أضف وظيفة `drawGameObjects()` لبدء الرسم:
```javascript
function drawGameObjects(ctx) {
gameObjects.forEach(go => go.draw(ctx));
}
```
-
-**فهم وظيفة الرسم:**
-- **التكرار** عبر جميع الكائنات في المصفوفة
-- **استدعاء** طريقة `draw()` لكل كائن
-- **تمرير** سياق اللوحة حتى يتمكن الكائن من عرض نفسه
-
-يجب أن يبدأ الأعداء بالتقدم نحو مركبة البطل الفضائية!
-}
-}
+
+ **فهم وظيفة الرسم:**
+ - **تتكرر** عبر جميع كائنات اللعبة في المصفوفة
+ - **تستدعي** طريقة `draw()` لكل كائن
+ - **تمرير** سياق اللوحة حتى يتمكن الكائنات من رسم أنفسهم
+
+ ### 🔄 **مراجعة تعليمية**
+ **فهم كامل لنظام اللعبة**: تحقق من إتقانك للهيكل الكامل:
+ - ✅ كيف يسمح التوريث للبطل والعدو بمشاركة خصائص كائن اللعبة المشتركة؟
+ - ✅ لماذا يجعل نمط pub/sub الكود أكثر قابلية للصيانة؟
+ - ✅ ما هو دور حلقة اللعبة في إنشاء حركة سلسة؟
+ - ✅ كيف تربط مستمعات الأحداث بين إدخال المستخدم وسلوك كائنات اللعبة؟
+
+ **تكامل النظام**: الآن تظهر لعبتك:
+ - **تصميم موجه للكائنات**: فئات أساسية مع توريث متخصص
+ - **هندسة قائمة على الأحداث**: نمط pub/sub لتقليل الترابط
+ - **إطار عمل الرسوم المتحركة**: حلقة اللعبة مع تحديثات إطار متسقة
+ - **معالجة الإدخال**: أحداث لوحة المفاتيح مع منع السلوك الافتراضي
+ - **إدارة الموارد**: تحميل الصور ورسم الشخصيات
+
+ **أنماط احترافية**: لقد قمت بتنفيذ:
+ - **فصل الاهتمامات**: فصل الإدخال والمنطق والرسم
+ - **تعدد الأشكال**: جميع كائنات اللعبة تشترك في واجهة الرسم المشتركة
+ - **تمرير الرسائل**: تواصل نظيف بين المكونات
+ - **إدارة الموارد**: معالجة فعالة للشخصيات والرسوم المتحركة
+
+ يجب أن يبدأ الأعداء بالتقدم نحو سفينة الفضاء الخاصة بالبطل!
+ }
+ }
```
and add a `createHero()` function to do a similar process for the hero.
@@ -510,68 +717,187 @@ npm start
gameObjects.push(hero);
}
```
-
-وأخيرًا، أضف دالة `drawGameObjects()` لبدء عملية الرسم:
+
+ وأخيرًا، أضف وظيفة `drawGameObjects()` لبدء الرسم:
```javascript
function drawGameObjects(ctx) {
gameObjects.forEach(go => go.draw(ctx));
}
```
-
-يجب أن يبدأ الأعداء بالتقدم نحو مركبة البطل الفضائية!
----
+ يجب أن يبدأ الأعداء بالتقدم نحو سفينة الفضاء الخاصة بالبطل!
-## تحدي GitHub Copilot Agent 🚀
+---
-إليك تحدٍ لتحسين جودة لعبتك: إضافة حدود وتحكم سلس. حاليًا، يمكن للبطل الطيران خارج الشاشة، وقد تبدو الحركة غير سلسة.
+## تحدي GitHub Copilot Agent 🚀
-**مهمتك:** اجعل مركبتك الفضائية تبدو أكثر واقعية من خلال تنفيذ حدود الشاشة وحركة سلسة. هذا مشابه لكيفية منع أنظمة التحكم في الطيران التابعة لناسا المركبات الفضائية من تجاوز حدود التشغيل الآمنة.
+إليك تحدٍ لتحسين جودة لعبتك: إضافة حدود وتحكم سلس. حاليًا، يمكن للبطل الطيران خارج الشاشة، وقد تبدو الحركة متقطعة.
-**ما الذي يجب بناؤه:** قم بإنشاء نظام يحافظ على مركبة البطل الفضائية داخل الشاشة، واجعل التحكم سلسًا. عندما يضغط اللاعبون على مفتاح السهم، يجب أن تنزلق المركبة باستمرار بدلاً من التحرك بخطوات منفصلة. فكر في إضافة تأثير بصري عندما تصل المركبة إلى حدود الشاشة – ربما تأثير بسيط يشير إلى حافة منطقة اللعب.
+**مهمتك:** اجعل سفينة الفضاء الخاصة بك تبدو أكثر واقعية من خلال تنفيذ حدود الشاشة وحركة سلسة. عندما يضغط اللاعبون على مفتاح السهم، يجب أن تنزلق السفينة باستمرار بدلاً من التحرك بخطوات منفصلة. فكر في إضافة تأثير بصري عندما تصل السفينة إلى حدود الشاشة – ربما تأثير بسيط يشير إلى حافة منطقة اللعب.
-تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
+تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
-## 🚀 التحدي
+## 🚀 تحدي
-تصبح تنظيم الكود أكثر أهمية مع نمو المشاريع. ربما لاحظت أن ملفك أصبح مزدحمًا بالوظائف والمتغيرات والفئات المختلطة معًا. هذا يذكرني بكيفية تنظيم المهندسين لكود مهمة أبولو لإنشاء أنظمة واضحة وقابلة للصيانة يمكن للفرق المتعددة العمل عليها في وقت واحد.
+تصبح أهمية تنظيم الكود أكثر وضوحًا مع نمو المشاريع. ربما لاحظت أن ملفك أصبح مزدحمًا بالوظائف والمتغيرات والفئات المختلطة معًا. هذا يذكرني بكيفية تنظيم مهندسي مهمة أبولو للكود لإنشاء أنظمة واضحة وقابلة للصيانة يمكن لفرق متعددة العمل عليها في وقت واحد.
-**مهمتك:**
-فكر كمهندس برمجيات. كيف يمكنك تنظيم الكود الخاص بك بحيث بعد ستة أشهر من الآن، يمكنك (أو زميلك) فهم ما يحدث؟ حتى لو بقي كل شيء في ملف واحد الآن، يمكنك إنشاء تنظيم أفضل:
+**مهمتك:**
+فكر كمهندس برمجيات. كيف يمكنك تنظيم الكود بحيث يمكنك أنت (أو زميلك) فهم ما يحدث بعد ستة أشهر؟ حتى لو بقي كل شيء في ملف واحد الآن، يمكنك إنشاء تنظيم أفضل:
-- **تجميع الوظائف ذات الصلة** معًا باستخدام عناوين تعليق واضحة
-- **فصل المهام** - اجعل منطق اللعبة منفصلًا عن العرض
-- **استخدام تسميات متسقة** للمتغيرات والوظائف
-- **إنشاء وحدات** أو مساحات أسماء لتنظيم الجوانب المختلفة للعبة
-- **إضافة توثيق** يشرح الغرض من كل قسم رئيسي
+- **تجميع الوظائف ذات الصلة** مع رؤوس تعليقات واضحة
+- **فصل الاهتمامات** - احتفظ بمنطق اللعبة منفصلًا عن الرسم
+- **استخدام تسميات متسقة** للمتغيرات والوظائف
+- **إنشاء وحدات** أو مساحات أسماء لتنظيم الجوانب المختلفة للعبة
+- **إضافة توثيق** يشرح الغرض من كل قسم رئيسي
-**أسئلة للتفكير:**
-- ما هي الأجزاء الأكثر صعوبة في فهمها عند العودة إلى الكود؟
-- كيف يمكنك تنظيم الكود لجعله أسهل لشخص آخر للمساهمة؟
-- ماذا سيحدث إذا أردت إضافة ميزات جديدة مثل تعزيزات القوة أو أنواع مختلفة من الأعداء؟
+**أسئلة للتفكير:**
+- ما هي أجزاء الكود التي يصعب فهمها عند العودة إليها؟
+- كيف يمكنك تنظيم الكود لجعله أسهل لشخص آخر للمساهمة؟
+- ماذا سيحدث إذا أردت إضافة ميزات جديدة مثل تعزيزات القوة أو أنواع مختلفة من الأعداء؟
-## اختبار ما بعد المحاضرة
+## اختبار ما بعد المحاضرة
-[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/34)
+[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/34)
-## المراجعة والدراسة الذاتية
+## المراجعة والدراسة الذاتية
-لقد قمنا ببناء كل شيء من الصفر، وهو أمر رائع للتعلم، ولكن إليك سر صغير – هناك بعض أطر عمل JavaScript المذهلة التي يمكنها التعامل مع الكثير من العمل الشاق نيابةً عنك. بمجرد أن تشعر بالراحة مع الأساسيات التي غطيناها، من المفيد [استكشاف ما هو متاح](https://github.com/collections/javascript-game-engines).
+لقد قمنا ببناء كل شيء من الصفر، وهو أمر رائع للتعلم، ولكن إليك سر صغير – هناك بعض أطر عمل JavaScript المذهلة التي يمكنها التعامل مع الكثير من العمل الشاق نيابة عنك. بمجرد أن تشعر بالراحة مع الأساسيات التي غطيناها، من المفيد [استكشاف ما هو متاح](https://github.com/collections/javascript-game-engines).
-فكر في الأطر مثل امتلاك صندوق أدوات مجهز جيدًا بدلاً من صنع كل أداة يدويًا. يمكنها حل العديد من تحديات تنظيم الكود التي تحدثنا عنها، بالإضافة إلى تقديم ميزات قد تستغرق أسابيع لبنائها بنفسك.
+فكر في الأطر كأنها صندوق أدوات مجهز جيدًا بدلاً من صنع كل أداة يدويًا. يمكنها حل العديد من تحديات تنظيم الكود التي تحدثنا عنها، بالإضافة إلى تقديم ميزات قد تستغرق أسابيع لبنائها بنفسك.
-**أشياء تستحق الاستكشاف:**
-- كيف تنظم محركات الألعاب الكود – ستندهش من الأنماط الذكية التي يستخدمونها
+**أشياء تستحق الاستكشاف:**
+- كيف تنظم محركات الألعاب الكود – ستندهش من الأنماط الذكية التي يستخدمونها
- حيل الأداء لجعل ألعاب اللوحة تعمل بسلاسة فائقة
-- ميزات JavaScript الحديثة التي يمكن أن تجعل الكود الخاص بك أنظف وأكثر قابلية للصيانة
-- طرق مختلفة لإدارة الكائنات في اللعبة وعلاقاتها
+- ميزات JavaScript الحديثة التي يمكن أن تجعل الكود الخاص بك أكثر نظافة وقابلية للصيانة
+- طرق مختلفة لإدارة كائنات اللعبة وعلاقاتها
+
+## 🎯 جدول زمني لإتقان الرسوم المتحركة في الألعاب
-## الواجب
+```mermaid
+timeline
+ title Game Animation & Interaction Learning Progression
+
+ section Movement Fundamentals (20 minutes)
+ Animation Principles: Frame-based animation
+ : Position updates
+ : Coordinate systems
+ : Smooth movement
+
+ section Event Systems (25 minutes)
+ User Input: Keyboard event handling
+ : Default behavior prevention
+ : Event object properties
+ : Window-level listening
+
+ section Game Architecture (30 minutes)
+ Object Design: Inheritance patterns
+ : Base class creation
+ : Specialized behaviors
+ : Polymorphic interfaces
+
+ section Communication Patterns (35 minutes)
+ Pub/Sub Implementation: Event emitters
+ : Message constants
+ : Loose coupling
+ : System integration
+
+ section Game Loop Mastery (40 minutes)
+ Real-time Systems: Frame rate control
+ : Update/render cycle
+ : State management
+ : Performance optimization
+
+ section Advanced Techniques (45 minutes)
+ Professional Features: Collision detection
+ : Physics simulation
+ : State machines
+ : Component systems
+
+ section Game Engine Concepts (1 week)
+ Framework Understanding: Entity-component systems
+ : Scene graphs
+ : Asset pipelines
+ : Performance profiling
+
+ section Production Skills (1 month)
+ Professional Development: Code organization
+ : Team collaboration
+ : Testing strategies
+ : Deployment optimization
+```
-[قم بتعليق الكود الخاص بك](assignment.md)
+### 🛠️ ملخص أدوات تطوير الألعاب الخاصة بك
+
+بعد إكمال هذا الدرس، أصبحت الآن متقنًا:
+- **مبادئ الرسوم المتحركة**: الحركة القائمة على الإطار والانتقالات السلسة
+- **برمجة قائمة على الأحداث**: معالجة إدخال لوحة المفاتيح مع إدارة الأحداث بشكل صحيح
+- **تصميم موجه للكائنات**: تسلسل التوريث وواجهات متعددة الأشكال
+- **أنماط الاتصال**: هندسة pub/sub للكود القابل للصيانة
+- **هيكل حلقة اللعبة**: تحديثات الوقت الفعلي ودورات الرسم
+- **أنظمة الإدخال**: تعيين التحكم للمستخدم مع منع السلوك الافتراضي
+- **إدارة الموارد**: تحميل الشخصيات وتقنيات الرسم الفعالة
+
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] افتح وحدة التحكم في المتصفح وجرب `addEventListener('keydown', console.log)` لرؤية أحداث لوحة المفاتيح
+- [ ] أنشئ عنصر div بسيط وحركه باستخدام مفاتيح الأسهم
+- [ ] جرب `setInterval` لإنشاء حركة مستمرة
+- [ ] حاول منع السلوك الافتراضي باستخدام `event.preventDefault()`
+
+### 🎯 **ما يمكنك تحقيقه خلال هذه الساعة**
+- [ ] أكمل اختبار ما بعد الدرس وافهم البرمجة القائمة على الأحداث
+- [ ] قم ببناء سفينة البطل المتحركة مع تحكم كامل بلوحة المفاتيح
+- [ ] نفذ أنماط حركة سلسة للأعداء
+- [ ] أضف حدودًا لمنع كائنات اللعبة من مغادرة الشاشة
+- [ ] أنشئ كشف تصادم أساسي بين كائنات اللعبة
+
+### 📅 **رحلة الرسوم المتحركة الخاصة بك لمدة أسبوع**
+- [ ] أكمل لعبة الفضاء بالكامل مع حركة وتفاعلات مصقولة
+- [ ] أضف أنماط حركة متقدمة مثل المنحنيات، التسارع، والفيزياء
+- [ ] نفذ انتقالات سلسة ووظائف التخفيف
+- [ ] أنشئ تأثيرات جسيمية وأنظمة ردود فعل بصرية
+- [ ] قم بتحسين أداء اللعبة للحصول على تشغيل سلس بسرعة 60 إطارًا في الثانية
+- [ ] أضف تحكمات لمس للجوال وتصميم متجاوب
+
+### 🌟 **تطوير تفاعلي لمدة شهر**
+- [ ] قم ببناء تطبيقات تفاعلية مع أنظمة رسوم متحركة متقدمة
+- [ ] تعلم مكتبات الرسوم المتحركة مثل GSAP أو أنشئ محرك الرسوم المتحركة الخاص بك
+- [ ] ساهم في مشاريع تطوير الألعاب والرسوم المتحركة مفتوحة المصدر
+- [ ] أتقن تحسين الأداء للتطبيقات المكثفة الرسومية
+- [ ] أنشئ محتوى تعليمي حول تطوير الألعاب والرسوم المتحركة
+- [ ] قم ببناء مجموعة أعمال تعرض مهارات البرمجة التفاعلية المتقدمة
+
+**تطبيقات العالم الحقيقي**: مهارات الرسوم المتحركة الخاصة بك تنطبق مباشرة على:
+- **تطبيقات الويب التفاعلية**: لوحات التحكم الديناميكية والواجهات في الوقت الفعلي
+- **تصور البيانات**: الرسوم البيانية المتحركة والرسومات التفاعلية
+- **البرامج التعليمية**: المحاكاة التفاعلية وأدوات التعلم
+- **تطوير الجوال**: الألعاب القائمة على اللمس ومعالجة الإيماءات
+- **تطبيقات سطح المكتب**: تطبيقات Electron مع رسوم متحركة سلسة
+- **رسوم الويب**: مكتبات الرسوم المتحركة باستخدام CSS وJavaScript
+
+**المهارات المهنية المكتسبة**: يمكنك الآن:
+- **تصميم** أنظمة قائمة على الأحداث تتوسع مع التعقيد
+- **تنفيذ** رسوم متحركة سلسة باستخدام المبادئ الرياضية
+- **تصحيح** أنظمة التفاعل المعقدة باستخدام أدوات المطور في المتصفح
+- **تحسين** أداء اللعبة للأجهزة والمتصفحات المختلفة
+- **تصميم** هياكل كود قابلة للصيانة باستخدام أنماط مثبتة
+
+**مفاهيم تطوير الألعاب المتقنة**:
+- **إدارة معدل الإطارات**: فهم FPS وعناصر التحكم في التوقيت
+- **معالجة الإدخال**: أنظمة لوحة المفاتيح والأحداث عبر المنصات
+- **دورة حياة الكائن**: أنماط الإنشاء، التحديث، والتدمير
+- **مزامنة الحالة**: الحفاظ على حالة اللعبة متسقة عبر الإطارات
+- **هندسة الأحداث**: اتصال غير مترابط بين أنظمة اللعبة
+
+**المستوى التالي**: أنت جاهز لإضافة كشف التصادم، أنظمة التسجيل، المؤثرات الصوتية، أو استكشاف أطر عمل الألعاب الحديثة مثل Phaser أو Three.js!
+
+🌟 **إنجاز محقق**: لقد قمت ببناء نظام لعبة تفاعلي كامل مع أنماط هندسة احترافية!
+
+## الواجب
+
+[علق على الكود الخاص بك](assignment.md)
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-space-game/4-collision-detection/README.md b/translations/ar/6-space-game/4-collision-detection/README.md
index ad9f5e1160..aea5df27b5 100644
--- a/translations/ar/6-space-game/4-collision-detection/README.md
+++ b/translations/ar/6-space-game/4-collision-detection/README.md
@@ -1,35 +1,105 @@
-# بناء لعبة فضاء الجزء 4: إضافة الليزر واكتشاف التصادمات
+# بناء لعبة الفضاء الجزء الرابع: إضافة الليزر واكتشاف التصادمات
+
+```mermaid
+journey
+ title Your Collision Detection Journey
+ section Physics Foundation
+ Understand rectangles: 3: Student
+ Learn intersection math: 4: Student
+ Grasp coordinate systems: 4: Student
+ section Game Mechanics
+ Implement laser firing: 4: Student
+ Add object lifecycle: 5: Student
+ Create collision rules: 5: Student
+ section System Integration
+ Build collision detection: 5: Student
+ Optimize performance: 5: Student
+ Test interaction systems: 5: Student
+```
## اختبار ما قبل المحاضرة
[اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/web/quiz/35)
-تذكر لحظة في فيلم "حرب النجوم" عندما أصابت قذائف البروتون الخاصة بلوك منفذ العادم في نجمة الموت. هذا الكشف الدقيق للتصادم غيّر مصير المجرة! في الألعاب، يعمل اكتشاف التصادم بنفس الطريقة - فهو يحدد متى تتفاعل الأشياء وما الذي يحدث بعد ذلك.
-
-في هذه الدرس، ستضيف أسلحة الليزر إلى لعبة الفضاء الخاصة بك وتنفذ اكتشاف التصادمات. تمامًا مثل مخططي مهام ناسا الذين يحسبون مسارات المركبات الفضائية لتجنب الحطام، ستتعلم كيفية اكتشاف تقاطع الأشياء في اللعبة. سنقسم هذا إلى خطوات يمكن إدارتها تبني على بعضها البعض.
-
-في النهاية، سيكون لديك نظام قتال يعمل حيث تدمر الليزرات الأعداء وتؤدي التصادمات إلى أحداث اللعبة. يتم استخدام نفس مبادئ التصادم هذه في كل شيء بدءًا من محاكاة الفيزياء إلى واجهات الويب التفاعلية.
+تذكر اللحظة في فيلم حرب النجوم عندما أصابت قذائف البروتون الخاصة بلوك منفذ عادم نجمة الموت. هذا الكشف الدقيق عن التصادم غيّر مصير المجرة! في الألعاب، يعمل اكتشاف التصادم بنفس الطريقة - فهو يحدد متى تتفاعل الأشياء وما الذي يحدث بعد ذلك.
+
+في هذه الدرس، ستضيف أسلحة الليزر إلى لعبة الفضاء الخاصة بك وتنفذ اكتشاف التصادم. تمامًا مثل مخططي مهام ناسا الذين يحسبون مسارات المركبات الفضائية لتجنب الحطام، ستتعلم كيفية اكتشاف تقاطع الأشياء داخل اللعبة. سنقسم هذا إلى خطوات قابلة للإدارة تبني على بعضها البعض.
+
+في النهاية، سيكون لديك نظام قتال يعمل حيث يدمر الليزر الأعداء وتؤدي التصادمات إلى أحداث داخل اللعبة. تُستخدم نفس مبادئ التصادم هذه في كل شيء بدءًا من محاكاة الفيزياء إلى واجهات الويب التفاعلية.
+
+```mermaid
+mindmap
+ root((Collision Detection))
+ Physics Concepts
+ Rectangle Boundaries
+ Intersection Testing
+ Coordinate Systems
+ Separation Logic
+ Game Objects
+ Laser Projectiles
+ Enemy Ships
+ Hero Character
+ Collision Zones
+ Lifecycle Management
+ Object Creation
+ Movement Updates
+ Destruction Marking
+ Memory Cleanup
+ Event Systems
+ Keyboard Input
+ Collision Events
+ Game State Changes
+ Audio/Visual Effects
+ Performance
+ Efficient Algorithms
+ Frame Rate Optimization
+ Memory Management
+ Spatial Partitioning
+```
-✅ قم بإجراء بحث صغير عن أول لعبة كمبيوتر تم كتابتها على الإطلاق. ما هي وظيفتها؟
+✅ قم بإجراء بحث صغير حول أول لعبة كمبيوتر تم كتابتها على الإطلاق. ما كانت وظيفتها؟
-## اكتشاف التصادمات
+## اكتشاف التصادم
-يعمل اكتشاف التصادمات مثل أجهزة استشعار القرب في وحدة الهبوط القمرية أبولو - فهو يتحقق باستمرار من المسافات ويطلق تنبيهات عندما تقترب الأشياء جدًا. في الألعاب، يحدد هذا النظام متى تتفاعل الأشياء وما الذي يجب أن يحدث بعد ذلك.
+يعمل اكتشاف التصادم مثل أجهزة استشعار القرب في وحدة أبولو القمرية - فهو يتحقق باستمرار من المسافات ويطلق تنبيهات عندما تقترب الأشياء جدًا. في الألعاب، يحدد هذا النظام متى تتفاعل الأشياء وما الذي يجب أن يحدث بعد ذلك.
-النهج الذي سنستخدمه يعامل كل كائن في اللعبة كأنه مستطيل، مشابهًا للطريقة التي تستخدم بها أنظمة مراقبة الحركة الجوية أشكالًا هندسية مبسطة لتتبع الطائرات. قد يبدو هذا النهج المستطيلي بسيطًا، لكنه فعال من حيث الحساب ويعمل جيدًا لمعظم سيناريوهات الألعاب.
+النهج الذي سنستخدمه يعامل كل كائن في اللعبة كأنه مستطيل، مشابهًا للطريقة التي تستخدم بها أنظمة مراقبة الحركة الجوية أشكالًا هندسية مبسطة لتتبع الطائرات. قد يبدو هذا النهج المستطيل بسيطًا، لكنه فعال من حيث الحساب ويعمل جيدًا لمعظم سيناريوهات الألعاب.
### تمثيل المستطيل
-كل كائن في اللعبة يحتاج إلى حدود إحداثيات، مشابهًا للطريقة التي رسمت بها مركبة المريخ "باثفايندر" موقعها على سطح المريخ. إليك كيفية تعريف هذه الحدود:
+كل كائن في اللعبة يحتاج إلى حدود إحداثيات، مشابهًا للطريقة التي رسم بها مسبار المريخ "Pathfinder" موقعه على سطح المريخ. إليك كيفية تعريف هذه الحدود:
+
+```mermaid
+flowchart TD
+ A["🎯 Game Object"] --> B["📍 Position (x, y)"]
+ A --> C["📏 Dimensions (width, height)"]
+
+ B --> D["Top: y"]
+ B --> E["Left: x"]
+
+ C --> F["Bottom: y + height"]
+ C --> G["Right: x + width"]
+
+ D --> H["🔲 Rectangle Bounds"]
+ E --> H
+ F --> H
+ G --> H
+
+ H --> I["Collision Detection Ready"]
+
+ style A fill:#e3f2fd
+ style H fill:#e8f5e8
+ style I fill:#fff3e0
+```
```javascript
rectFromGameObject() {
@@ -43,14 +113,37 @@ rectFromGameObject() {
```
**لنقم بتفصيل هذا:**
-- **الحافة العلوية**: هي فقط المكان الذي يبدأ فيه الكائن عموديًا (موضعه y)
+- **الحافة العلوية**: هذا هو المكان الذي يبدأ فيه الكائن عموديًا (موضعه y)
- **الحافة اليسرى**: حيث يبدأ أفقيًا (موضعه x)
- **الحافة السفلية**: أضف الارتفاع إلى موضع y - الآن تعرف أين ينتهي!
-- **الحافة اليمنى**: أضف العرض إلى موضع x - وستحصل على الحدود الكاملة
+- **الحافة اليمنى**: أضف العرض إلى موضع x - وهكذا تحصل على الحدود الكاملة
### خوارزمية التقاطع
-اكتشاف تقاطع المستطيلات يستخدم منطقًا مشابهًا للطريقة التي يحدد بها تلسكوب هابل الفضائي إذا كانت الأجسام السماوية تتداخل في مجال رؤيته. تتحقق الخوارزمية من الفصل:
+اكتشاف تقاطعات المستطيلات يستخدم منطقًا مشابهًا للطريقة التي يحدد بها تلسكوب هابل الفضائي ما إذا كانت الأجسام السماوية تتداخل في مجال رؤيته. تتحقق الخوارزمية من الانفصال:
+
+```mermaid
+flowchart LR
+ A["Rectangle 1"] --> B{"Separation Tests"}
+ C["Rectangle 2"] --> B
+
+ B --> D["R2 left > R1 right?"]
+ B --> E["R2 right < R1 left?"]
+ B --> F["R2 top > R1 bottom?"]
+ B --> G["R2 bottom < R1 top?"]
+
+ D --> H{"Any True?"}
+ E --> H
+ F --> H
+ G --> H
+
+ H -->|Yes| I["❌ No Collision"]
+ H -->|No| J["✅ Collision Detected"]
+
+ style B fill:#e3f2fd
+ style I fill:#ffebee
+ style J fill:#e8f5e8
+```
```javascript
function intersectRect(r1, r2) {
@@ -61,19 +154,41 @@ function intersectRect(r1, r2) {
}
```
-**اختبار الفصل يعمل مثل أنظمة الرادار:**
+**اختبار الانفصال يعمل مثل أنظمة الرادار:**
- هل المستطيل 2 بالكامل على يمين المستطيل 1؟
- هل المستطيل 2 بالكامل على يسار المستطيل 1؟
- هل المستطيل 2 بالكامل أسفل المستطيل 1؟
- هل المستطيل 2 بالكامل فوق المستطيل 1؟
-إذا لم تكن أي من هذه الشروط صحيحة، فلا بد أن المستطيلات تتداخل. هذا النهج يشبه الطريقة التي يحدد بها مشغلو الرادار إذا كانت الطائرتان على مسافات آمنة.
+إذا لم تكن أي من هذه الشروط صحيحة، فلا بد أن المستطيلات تتداخل. هذا النهج يشبه الطريقة التي يحدد بها مشغلو الرادار ما إذا كانت الطائرتان على مسافات آمنة.
## إدارة دورة حياة الكائنات
-عندما يصيب الليزر العدو، يجب إزالة كلا الكائنين من اللعبة. ومع ذلك، فإن حذف الكائنات أثناء الحلقة يمكن أن يسبب أعطالًا - درس تعلمناه بالطريقة الصعبة في أنظمة الكمبيوتر المبكرة مثل كمبيوتر التوجيه أبولو. بدلاً من ذلك، نستخدم نهج "التحديد للحذف" الذي يزيل الكائنات بأمان بين الإطارات.
+عندما يصيب الليزر العدو، يجب إزالة كلا الكائنين من اللعبة. ومع ذلك، فإن حذف الكائنات أثناء الحلقة يمكن أن يسبب أعطالًا - درس تعلمناه بالطريقة الصعبة في أنظمة الكمبيوتر المبكرة مثل كمبيوتر التوجيه أبولو. بدلاً من ذلك، نستخدم نهج "التعليم للحذف" الذي يزيل الكائنات بأمان بين الإطارات.
-إليك كيفية تحديد شيء ما للإزالة:
+```mermaid
+stateDiagram-v2
+ [*] --> Active: Object Created
+ Active --> Collided: Collision Detected
+ Collided --> MarkedDead: Set dead = true
+ MarkedDead --> Filtered: Next Frame
+ Filtered --> [*]: Object Removed
+
+ Active --> OutOfBounds: Leaves Screen
+ OutOfBounds --> MarkedDead
+
+ note right of MarkedDead
+ Safe to continue
+ current frame
+ end note
+
+ note right of Filtered
+ Objects removed
+ between frames
+ end note
+```
+
+إليك كيفية تعليم شيء ما للإزالة:
```javascript
// Mark object for removal
@@ -81,11 +196,11 @@ enemy.dead = true;
```
**لماذا يعمل هذا النهج:**
-- نحدد الكائن كـ "ميت" ولكن لا نحذفه على الفور
+- نعلم الكائن بأنه "ميت" ولكن لا نحذفه على الفور
- هذا يسمح للإطار الحالي للعبة بالانتهاء بأمان
- لا توجد أعطال من محاولة استخدام شيء قد تم حذفه بالفعل!
-ثم نقوم بتصفية الكائنات المحددة قبل دورة العرض التالية:
+ثم نقوم بتصفية الكائنات المعلمة قبل دورة العرض التالية:
```javascript
gameObjects = gameObjects.filter(go => !go.dead);
@@ -93,13 +208,13 @@ gameObjects = gameObjects.filter(go => !go.dead);
**ما الذي تفعله هذه التصفية:**
- تنشئ قائمة جديدة تحتوي فقط على الكائنات "الحية"
-- تتخلص من أي شيء تم تحديده كميت
+- تتخلص من أي شيء معلم بأنه ميت
- تحافظ على تشغيل اللعبة بسلاسة
-- تمنع تراكم الذاكرة من الكائنات المدمرة
+- تمنع تراكم الكائنات المدمرة من تضخم الذاكرة
## تنفيذ ميكانيكية الليزر
-تعمل مقذوفات الليزر في الألعاب على نفس مبدأ قذائف الفوتون في "ستار تريك" - فهي كائنات منفصلة تتحرك في خطوط مستقيمة حتى تصيب شيئًا ما. كل ضغطة على مفتاح المسافة تنشئ كائن ليزر جديد يتحرك عبر الشاشة.
+تعمل قذائف الليزر في الألعاب على نفس مبدأ قذائف الفوتون في ستار تريك - إنها كائنات منفصلة تتحرك في خطوط مستقيمة حتى تصطدم بشيء ما. كل ضغطة على مفتاح المسافة تنشئ كائن ليزر جديد يتحرك عبر الشاشة.
لجعل هذا يعمل، نحتاج إلى تنسيق بعض الأجزاء المختلفة:
@@ -107,13 +222,38 @@ gameObjects = gameObjects.filter(go => !go.dead);
- **إنشاء** كائنات الليزر التي تنطلق من موضع البطل
- **التعامل مع** إدخال لوحة المفاتيح لتفعيل إنشاء الليزر
- **إدارة** حركة الليزر ودورة حياته
-- **تنفيذ** التمثيل البصري لمقذوفات الليزر
+- **تنفيذ** التمثيل البصري لقذائف الليزر
## تنفيذ التحكم في معدل الإطلاق
-معدلات الإطلاق غير المحدودة ستثقل محرك اللعبة وتجعل اللعب سهلاً للغاية. تواجه أنظمة الأسلحة الحقيقية قيودًا مشابهة - حتى الفيزرات الخاصة بـ USS Enterprise تحتاج إلى وقت لإعادة الشحن بين الطلقات.
+معدلات الإطلاق غير المحدودة ستثقل محرك اللعبة وتجعل اللعب سهلاً للغاية. تواجه أنظمة الأسلحة الحقيقية قيودًا مشابهة - حتى الفيزرات الخاصة بسفينة USS Enterprise تحتاج إلى وقت لإعادة الشحن بين الطلقات.
-سننفذ نظام تبريد يمنع الإطلاق السريع المتكرر مع الحفاظ على التحكم السريع:
+سننفذ نظام تبريد يمنع إطلاق النار السريع مع الحفاظ على التحكم السريع:
+
+```mermaid
+sequenceDiagram
+ participant Player
+ participant Weapon
+ participant Cooldown
+ participant Game
+
+ Player->>Weapon: Press Spacebar
+ Weapon->>Cooldown: Check if cool
+
+ alt Weapon is Ready
+ Cooldown->>Weapon: cool = true
+ Weapon->>Game: Create Laser
+ Weapon->>Cooldown: Start new cooldown
+ Cooldown->>Cooldown: cool = false
+
+ Note over Cooldown: Wait 500ms
+
+ Cooldown->>Cooldown: cool = true
+ else Weapon is Cooling
+ Cooldown->>Weapon: cool = false
+ Weapon->>Player: No action
+ end
+```
```javascript
class Cooldown {
@@ -142,28 +282,44 @@ class Weapon {
```
**كيف يعمل التبريد:**
-- عند الإنشاء، يبدأ السلاح "ساخنًا" (لا يمكن الإطلاق بعد)
-- بعد فترة المهلة، يصبح "باردًا" (جاهز للإطلاق)
+- عند الإنشاء، يبدأ السلاح "ساخنًا" (لا يمكن إطلاقه بعد)
+- بعد فترة الانتظار، يصبح "باردًا" (جاهز للإطلاق)
- قبل الإطلاق، نتحقق: "هل السلاح بارد؟"
-- هذا يمنع النقر المتكرر مع الحفاظ على التحكم السريع
+- هذا يمنع النقر السريع مع الحفاظ على التحكم السريع
-✅ ارجع إلى الدرس الأول في سلسلة لعبة الفضاء لتذكير نفسك بنظام التبريد.
+✅ ارجع إلى الدرس الأول في سلسلة لعبة الفضاء لتذكير نفسك حول أنظمة التبريد.
-## بناء نظام اكتشاف التصادمات
+## بناء نظام التصادم
-ستقوم بتوسيع كود لعبة الفضاء الحالية لإنشاء نظام اكتشاف التصادمات. مثل نظام تجنب التصادم الآلي لمحطة الفضاء الدولية، ستراقب اللعبة باستمرار مواقع الكائنات وتستجيب للتقاطعات.
+ستقوم بتوسيع كود لعبة الفضاء الحالية لإنشاء نظام اكتشاف التصادم. مثل نظام تجنب التصادم الآلي لمحطة الفضاء الدولية، ستراقب لعبتك باستمرار مواقع الكائنات وتستجيب للتقاطعات.
-بدءًا من كود الدرس السابق، ستضيف اكتشاف التصادمات مع قواعد محددة تحكم تفاعلات الكائنات.
+بدءًا من كود الدرس السابق، ستضيف اكتشاف التصادم مع قواعد محددة تحكم تفاعلات الكائنات.
-> 💡 **نصيحة احترافية**: تم تضمين صورة الليزر بالفعل في مجلد الأصول الخاص بك ومشار إليها في الكود الخاص بك، وهي جاهزة للتنفيذ.
+> 💡 **نصيحة احترافية**: صورة الليزر موجودة بالفعل في مجلد الأصول الخاص بك ومشار إليها في الكود الخاص بك، جاهزة للتنفيذ.
### قواعد التصادم التي يجب تنفيذها
**ميكانيكية اللعبة التي يجب إضافتها:**
-1. **إصابة الليزر للعدو**: يتم تدمير كائن العدو عند ضربه بمقذوف الليزر
-2. **إصابة الليزر لحدود الشاشة**: يتم إزالة الليزر عند وصوله إلى الحافة العلوية للشاشة
+1. **يصيب الليزر العدو**: يتم تدمير كائن العدو عند ضربه بقذيفة ليزر
+2. **يصيب الليزر حدود الشاشة**: يتم إزالة الليزر عند وصوله إلى الحافة العلوية للشاشة
3. **تصادم العدو والبطل**: يتم تدمير كلا الكائنين عند تقاطعهما
-4. **وصول العدو إلى الأسفل**: حالة انتهاء اللعبة عندما يصل الأعداء إلى أسفل الشاشة
+4. **يصل العدو إلى الأسفل**: حالة انتهاء اللعبة عندما يصل الأعداء إلى أسفل الشاشة
+
+### 🔄 **تقييم تربوي**
+**أساسيات اكتشاف التصادم**: قبل التنفيذ، تأكد من فهمك:
+- ✅ كيف تحدد حدود المستطيل مناطق التصادم
+- ✅ لماذا يعتبر اختبار الانفصال أكثر كفاءة من حساب التقاطع
+- ✅ أهمية إدارة دورة حياة الكائنات في حلقات اللعبة
+- ✅ كيف تنسق الأنظمة القائمة على الأحداث استجابات التصادم
+
+**اختبار سريع ذاتي**: ماذا سيحدث إذا قمت بحذف الكائنات فورًا بدلاً من تعليمها؟
+*الإجابة: قد يؤدي الحذف أثناء الحلقة إلى أعطال أو تخطي الكائنات أثناء التكرار*
+
+**فهم الفيزياء**: الآن تفهم:
+- **أنظمة الإحداثيات**: كيف تخلق المواضع والأبعاد حدودًا
+- **منطق التقاطع**: المبادئ الرياضية وراء اكتشاف التصادم
+- **تحسين الأداء**: لماذا تعتبر الخوارزميات الفعالة مهمة في الأنظمة الفورية
+- **إدارة الذاكرة**: أنماط دورة حياة الكائنات الآمنة للاستقرار
## إعداد بيئة التطوير الخاصة بك
@@ -197,15 +353,41 @@ npm start
**تسلسل الأوامر هذا:**
- **يغير** الدليل إلى مجلد المشروع الخاص بك
-- **يبدأ** خادم HTTP المحلي على `http://localhost:5000`
-- **يخدم** ملفات اللعبة الخاصة بك للاختبار والتطوير
-- **يمكن** التطوير المباشر مع إعادة التحميل التلقائي
+- **يبدأ** خادم HTTP محلي على `http://localhost:5000`
+- **يقدم** ملفات اللعبة الخاصة بك للاختبار والتطوير
+- **يتيح** التطوير المباشر مع إعادة التحميل التلقائي
افتح متصفحك وانتقل إلى `http://localhost:5000` لرؤية حالة اللعبة الحالية مع البطل والأعداء معروضين على الشاشة.
### التنفيذ خطوة بخطوة
-مثل النهج المنهجي الذي استخدمته ناسا لبرمجة مركبة الفضاء "فوياجر"، سننفذ اكتشاف التصادمات بشكل منهجي، نبني كل مكون خطوة بخطوة.
+مثل النهج المنهجي الذي استخدمته ناسا لبرمجة مركبة الفضاء Voyager، سننفذ اكتشاف التصادم بشكل منهجي، نبني كل مكون خطوة بخطوة.
+
+```mermaid
+flowchart TD
+ A["1. Rectangle Bounds"] --> B["2. Intersection Detection"]
+ B --> C["3. Laser System"]
+ C --> D["4. Event Handling"]
+ D --> E["5. Collision Rules"]
+ E --> F["6. Cooldown System"]
+
+ G["Object Boundaries"] --> A
+ H["Physics Algorithm"] --> B
+ I["Projectile Creation"] --> C
+ J["Keyboard Input"] --> D
+ K["Game Logic"] --> E
+ L["Rate Limiting"] --> F
+
+ F --> M["🎮 Complete Game"]
+
+ style A fill:#e3f2fd
+ style B fill:#e8f5e8
+ style C fill:#fff3e0
+ style D fill:#f3e5f5
+ style E fill:#e0f2f1
+ style F fill:#fce4ec
+ style M fill:#e1f5fe
+```
#### 1. إضافة حدود تصادم المستطيل
@@ -222,15 +404,15 @@ rectFromGameObject() {
}
```
-**ما الذي تحققه هذه الطريقة:**
+**ما تحققه هذه الطريقة:**
- **تنشئ** كائن مستطيل بحدود إحداثيات دقيقة
-- **تحسب** الحواف السفلية واليمنى باستخدام الموضع بالإضافة إلى الأبعاد
-- **تعيد** كائنًا جاهزًا لخوارزميات اكتشاف التصادمات
+- **تحسب** الحواف السفلية واليمنية باستخدام الموضع بالإضافة إلى الأبعاد
+- **تعيد** كائنًا جاهزًا لخوارزميات اكتشاف التصادم
- **توفر** واجهة موحدة لجميع كائنات اللعبة
#### 2. تنفيذ اكتشاف التقاطع
-الآن دعنا ننشئ محقق التصادمات - وظيفة يمكنها تحديد متى تتداخل مستطيلات:
+الآن دعنا ننشئ محقق التصادم - وظيفة يمكنها تحديد ما إذا كانت مستطيلاتان تتداخلان:
```javascript
function intersectRect(r1, r2) {
@@ -244,9 +426,9 @@ function intersectRect(r1, r2) {
```
**تعمل هذه الخوارزمية عن طريق:**
-- **اختبار** أربعة شروط فصل بين المستطيلات
-- **تعيد** `false` إذا كان أي شرط فصل صحيحًا
-- **تشير** إلى التصادم عندما لا يوجد فصل
+- **اختبار** أربعة شروط انفصال بين المستطيلات
+- **تعيد** `false` إذا كان أي شرط انفصال صحيحًا
+- **تشير** إلى التصادم عندما لا يوجد انفصال
- **تستخدم** منطق النفي لاختبار التقاطع بكفاءة
#### 3. تنفيذ نظام إطلاق الليزر
@@ -255,7 +437,7 @@ function intersectRect(r1, r2) {
##### ثوابت الرسائل
-أولاً، دعنا نحدد بعض أنواع الرسائل حتى تتمكن أجزاء مختلفة من اللعبة من التواصل مع بعضها البعض:
+أولاً، دعنا نحدد بعض أنواع الرسائل حتى تتمكن أجزاء مختلفة من لعبتنا من التواصل مع بعضها البعض:
```javascript
KEY_EVENT_SPACE: "KEY_EVENT_SPACE",
@@ -280,8 +462,8 @@ COLLISION_ENEMY_HERO: "COLLISION_ENEMY_HERO",
**هذا المعالج للإدخال:**
- **يكتشف** ضغطات مفتاح المسافة باستخدام keyCode 32
-- **يبث** رسالة حدث موحدة
-- **يمكن** منطق الإطلاق المنفصل
+- **يرسل** رسالة حدث موحدة
+- **يمكن** منطق الإطلاق المفصول
##### إعداد مستمع الحدث
@@ -300,7 +482,7 @@ eventEmitter.on(Messages.KEY_EVENT_SPACE, () => {
- **يتحقق** من حالة تبريد الإطلاق
- **يفعل** إنشاء الليزر عند السماح بذلك
-أضف معالجة التصادم لتفاعلات الليزر مع العدو:
+أضف معالجة التصادم لتفاعلات الليزر-العدو:
```javascript
eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => {
@@ -311,12 +493,12 @@ eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => {
**هذا المعالج للتصادم:**
- **يتلقى** بيانات حدث التصادم مع كلا الكائنين
-- **يحدد** كلا الكائنين للإزالة
+- **يعلم** كلا الكائنين للإزالة
- **يضمن** التنظيف المناسب بعد التصادم
#### 4. إنشاء فئة الليزر
-نفذ مقذوف ليزر يتحرك للأعلى ويدير دورة حياته الخاصة:
+نفذ قذيفة ليزر تتحرك للأعلى وتدير دورة حياتها الخاصة:
```javascript
class Laser extends GameObject {
@@ -340,15 +522,15 @@ class Laser extends GameObject {
```
**تنفيذ هذه الفئة:**
-- **يمدد** GameObject ليرث الوظائف الأساسية
-- **يضبط** الأبعاد المناسبة لصورة الليزر
-- **ينشئ** حركة تلقائية للأعلى باستخدام `setInterval()`
-- **يتعامل** مع التدمير الذاتي عند الوصول إلى أعلى الشاشة
-- **يدير** توقيت الرسوم المتحركة والتنظيف الخاص به
+- **تمدد** GameObject لتوريث الوظائف الأساسية
+- **تحدد** الأبعاد المناسبة لصورة الليزر
+- **تنشئ** حركة تلقائية للأعلى باستخدام `setInterval()`
+- **تتعامل** مع التدمير الذاتي عند الوصول إلى أعلى الشاشة
+- **تدير** توقيت الرسوم المتحركة والتنظيف الخاص بها
-#### 5. تنفيذ نظام اكتشاف التصادمات
+#### 5. تنفيذ نظام اكتشاف التصادم
-أنشئ وظيفة شاملة لاكتشاف التصادمات:
+أنشئ وظيفة اكتشاف التصادم الشاملة:
```javascript
function updateGameObjects() {
@@ -372,15 +554,15 @@ function updateGameObjects() {
}
```
-**هذا النظام للتصادمات:**
+**هذا النظام للتصادم:**
- **يصفي** كائنات اللعبة حسب النوع لاختبار فعال
- **يختبر** كل ليزر ضد كل عدو للتقاطعات
-- **يبث** أحداث التصادم عند اكتشاف التقاطعات
-- **ينظف** الكائنات المدمرة بعد معالجة التصادمات
+- **يرسل** أحداث التصادم عند اكتشاف التقاطعات
+- **ينظف** الكائنات المدمرة بعد معالجة التصادم
-> ⚠️ **هام**: أضف `updateGameObjects()` إلى الحلقة الرئيسية للعبة في `window.onload` لتمكين اكتشاف التصادمات.
+> ⚠️ **هام**: أضف `updateGameObjects()` إلى الحلقة الرئيسية للعبة في `window.onload` لتمكين اكتشاف التصادم.
-#### 6. إضافة نظام التبريد إلى فئة البطل
+#### 6. أضف نظام التبريد إلى فئة البطل
عزز فئة البطل بميكانيكية الإطلاق وتحديد معدل الإطلاق:
@@ -415,35 +597,170 @@ class Hero extends GameObject {
```
**فهم فئة البطل المحسنة:**
-- **يبدأ** مؤقت التبريد عند الصفر (جاهز للإطلاق)
-- **ينشئ** كائنات الليزر المتمركزة فوق سفينة البطل
-- **يضبط** فترة التبريد لمنع الإطلاق السريع
-- **يقلل** مؤقت التبريد باستخدام تحديثات تعتمد على الفاصل الزمني
-- **يوفر** فحص حالة الإطلاق من خلال طريقة `canFire()`
+- **تبدأ** مؤقت التبريد عند الصفر (جاهز للإطلاق)
+- **تنشئ** كائنات الليزر المتمركزة فوق سفينة البطل
+- **تحدد** فترة التبريد لمنع الإطلاق السريع
+- **تقلل** مؤقت التبريد باستخدام تحديثات تعتمد على الفاصل الزمني
+- **توفر** فحص حالة الإطلاق من خلال طريقة `canFire()`
+
+### 🔄 **تقييم تربوي**
+**فهم النظام الكامل**: تحقق من إتقانك لنظام التصادم:
+- ✅ كيف تمكن حدود المستطيل من اكتشاف التصادم بكفاءة؟
+- ✅ لماذا تعتبر إدارة دورة حياة الكائنات ضرورية لاستقرار اللعبة؟
+- ✅ كيف يمنع نظام التبريد مشاكل الأداء؟
+- ✅ ما دور بنية الأحداث في معالجة التصادم؟
+
+**تكامل النظام**: يظهر اكتشاف التصادم الخاص بك:
+- **الدقة الرياضية**: خوارزميات تقاطع المستطيلات
+- **تحسين الأداء**: أنماط اختبار التصادم الفعالة
+- **إدارة الذاكرة**: إنشاء الكائنات وتدميرها بأمان
+- **تنسيق الأحداث**: التواصل المنفصل بين الأنظمة
+- **المعالجة الفورية**: دورات التحديث القائمة على الإطار
+
+**أنماط احترافية**: لقد نفذت:
+- **فصل الاهتمامات**: الفيزياء، العرض، والإدخال مفصولة
+- **تصميم موجه للكائنات**: الوراثة وتعدد الأشكال
+- **إدارة الحالة**: تتبع دورة حياة الكائنات وحالة اللعبة
+- **تحسين الأداء**: خوارزميات فعالة للاستخدام الفوري
### اختبار التنفيذ الخاص بك
-تتميز لعبة الفضاء الخاصة بك الآن بنظام اكتشاف التصادمات الكامل وميكانيكية القتال. 🚀 اختبر هذه القدرات الجديدة:
-- **تنقل** باستخدام مفاتيح الأسهم للتحقق من التحكم في الحركة
-- **أطلق الليزر** باستخدام مفتاح المسافة - لاحظ كيف يمنع التبريد النقر المتكرر
-- **راقب التصادمات** عندما تصيب الليزرات الأعداء، مما يؤدي إلى الإزالة
+تتميز لعبة الفضاء الخاصة بك الآن باكتشاف التصادم الكامل وميكانيكية القتال. 🚀 اختبر هذه القدرات الجديدة:
+- **تنقل** باستخدام مفاتيح الأسهم للتحقق من عناصر التحكم في الحركة
+- **أطلق الليزر** باستخدام مفتاح المسافة - لاحظ كيف يمنع التبريد النقر السريع
+- **راقب التصادمات** عندما يصيب الليزر الأعداء، مما يؤدي إلى الإزالة
- **تحقق من التنظيف** حيث تختفي الكائنات المدمرة من اللعبة
-لقد نجحت في تنفيذ نظام اكتشاف التصادمات باستخدام نفس المبادئ الرياضية التي توجه الملاحة الفضائية والروبوتات.
+لقد نجحت في تنفيذ نظام اكتشاف التصادم باستخدام نفس المبادئ الرياضية التي توجه الملاحة الفضائية والروبوتات.
+
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] افتح أدوات المطور في المتصفح وقم بتعيين نقاط توقف في وظيفة اكتشاف التصادم الخاصة بك
+- [ ] حاول تعديل سرعة الليزر أو حركة العدو لرؤية تأثيرات التصادم
+- [ ] جرب قيم تبريد مختلفة لاختبار معدلات الإطلاق
+- [ ] أضف عبارات `console.log` لتتبع أحداث الاصطدام في الوقت الفعلي
+
+### 🎯 **ما يمكنك إنجازه خلال هذه الساعة**
+- [ ] أكمل اختبار ما بعد الدرس وافهم خوارزميات اكتشاف الاصطدام
+- [ ] أضف تأثيرات بصرية مثل الانفجارات عند حدوث الاصطدامات
+- [ ] نفذ أنواعًا مختلفة من المقذوفات بخصائص متنوعة
+- [ ] أنشئ تعزيزات تزيد من قدرات اللاعب مؤقتًا
+- [ ] أضف تأثيرات صوتية لجعل الاصطدامات أكثر إرضاءً
+
+### 📅 **برمجة الفيزياء الخاصة بك على مدار الأسبوع**
+- [ ] أكمل لعبة الفضاء بالكامل مع أنظمة اصطدام مصقولة
+- [ ] نفذ أشكال اصطدام متقدمة تتجاوز المستطيلات (دوائر، مضلعات)
+- [ ] أضف أنظمة الجسيمات لتأثيرات انفجار واقعية
+- [ ] أنشئ سلوكًا معقدًا للأعداء مع تجنب الاصطدام
+- [ ] قم بتحسين اكتشاف الاصطدام للحصول على أداء أفضل مع العديد من الكائنات
+- [ ] أضف محاكاة فيزيائية مثل الزخم والحركة الواقعية
+
+### 🌟 **إتقانك لفيزياء الألعاب على مدار الشهر**
+- [ ] قم ببناء ألعاب باستخدام محركات فيزيائية متقدمة ومحاكاة واقعية
+- [ ] تعلم اكتشاف الاصطدام ثلاثي الأبعاد وخوارزميات تقسيم الفضاء
+- [ ] ساهم في مكتبات الفيزياء مفتوحة المصدر ومحركات الألعاب
+- [ ] أتقن تحسين الأداء للتطبيقات المكثفة للرسومات
+- [ ] أنشئ محتوى تعليميًا حول فيزياء الألعاب واكتشاف الاصطدام
+- [ ] قم ببناء ملف أعمال يعرض مهارات البرمجة الفيزيائية المتقدمة
+
+## 🎯 جدول زمني لإتقان اكتشاف الاصطدام
+
+```mermaid
+timeline
+ title Collision Detection & Game Physics Learning Progression
+
+ section Foundation (10 minutes)
+ Rectangle Math: Coordinate systems
+ : Boundary calculations
+ : Position tracking
+ : Dimension management
+
+ section Algorithm Design (20 minutes)
+ Intersection Logic: Separation testing
+ : Overlap detection
+ : Performance optimization
+ : Edge case handling
+
+ section Game Implementation (30 minutes)
+ Object Systems: Lifecycle management
+ : Event coordination
+ : State tracking
+ : Memory cleanup
+
+ section Interactive Features (40 minutes)
+ Combat Mechanics: Projectile systems
+ : Weapon cooldowns
+ : Damage calculation
+ : Visual feedback
+
+ section Advanced Physics (50 minutes)
+ Real-time Systems: Frame rate optimization
+ : Spatial partitioning
+ : Collision response
+ : Physics simulation
+
+ section Professional Techniques (1 week)
+ Game Engine Concepts: Component systems
+ : Physics pipelines
+ : Performance profiling
+ : Cross-platform optimization
+
+ section Industry Applications (1 month)
+ Production Skills: Large-scale optimization
+ : Team collaboration
+ : Engine development
+ : Platform deployment
+```
+
+### 🛠️ ملخص أدوات فيزياء الألعاب الخاصة بك
+
+بعد إكمال هذا الدرس، أصبحت الآن متقنًا:
+- **رياضيات الاصطدام**: خوارزميات تقاطع المستطيلات وأنظمة الإحداثيات
+- **تحسين الأداء**: اكتشاف الاصطدام بكفاءة للتطبيقات في الوقت الفعلي
+- **إدارة دورة حياة الكائنات**: أنماط آمنة لإنشاء وتحديث وتدمير الكائنات
+- **هندسة قائمة على الأحداث**: أنظمة مفصولة للاستجابة للاصطدام
+- **تكامل حلقة اللعبة**: تحديثات الفيزياء القائمة على الإطار وتنسيق العرض
+- **أنظمة الإدخال**: تحكم استجابي مع تحديد معدل التغذية الراجعة
+- **إدارة الذاكرة**: استراتيجيات فعالة لتجميع الكائنات وتنظيفها
+
+**تطبيقات واقعية**: مهاراتك في اكتشاف الاصطدام تنطبق مباشرة على:
+- **المحاكاة التفاعلية**: النمذجة العلمية والأدوات التعليمية
+- **تصميم واجهة المستخدم**: تفاعلات السحب والإفلات واكتشاف اللمس
+- **تصور البيانات**: الرسوم البيانية التفاعلية والعناصر القابلة للنقر
+- **تطوير التطبيقات المحمولة**: التعرف على إيماءات اللمس ومعالجة الاصطدام
+- **برمجة الروبوتات**: تخطيط المسار وتجنب العقبات
+- **رسومات الحاسوب**: تتبع الأشعة والخوارزميات المكانية
+
+**المهارات المهنية المكتسبة**: يمكنك الآن:
+- **تصميم** خوارزميات فعالة لاكتشاف الاصطدام في الوقت الفعلي
+- **تنفيذ** أنظمة فيزيائية تتكيف مع تعقيد الكائنات
+- **تصحيح الأخطاء** في أنظمة التفاعل المعقدة باستخدام المبادئ الرياضية
+- **تحسين** الأداء للأجهزة المختلفة وقدرات المتصفح
+- **تصميم** أنظمة ألعاب قابلة للصيانة باستخدام أنماط تصميم مثبتة
+
+**مفاهيم تطوير الألعاب التي تم إتقانها**:
+- **محاكاة الفيزياء**: اكتشاف الاصطدام والاستجابة في الوقت الفعلي
+- **هندسة الأداء**: خوارزميات محسنة للتطبيقات التفاعلية
+- **أنظمة الأحداث**: اتصال مفصول بين مكونات اللعبة
+- **إدارة الكائنات**: أنماط دورة حياة فعالة للمحتوى الديناميكي
+- **معالجة الإدخال**: تحكم استجابي مع تغذية راجعة مناسبة
+
+**المستوى التالي**: أنت جاهز لاستكشاف محركات الفيزياء المتقدمة مثل Matter.js، وتنفيذ اكتشاف الاصطدام ثلاثي الأبعاد، أو بناء أنظمة جسيمات معقدة!
+
+🌟 **إنجاز محقق**: لقد قمت ببناء نظام تفاعل كامل قائم على الفيزياء مع اكتشاف اصطدام بمستوى احترافي!
## تحدي GitHub Copilot Agent 🚀
استخدم وضع الوكيل لإكمال التحدي التالي:
-**الوصف:** عزز نظام اكتشاف التصادمات من خلال تنفيذ تعزيزات تظهر بشكل عشوائي وتوفر قدرات مؤقتة عند جمعها بواسطة سفينة البطل.
+**الوصف:** قم بتحسين نظام اكتشاف الاصطدام من خلال تنفيذ تعزيزات تظهر بشكل عشوائي وتوفر قدرات مؤقتة عند جمعها بواسطة سفينة البطل.
-**المهمة:** أنشئ فئة PowerUp التي تمد GameObject ونفذ اكتشاف التصادم بين البطل والتعزيزات. أضف نوعين على الأقل من التعزيزات: واحد يزيد معدل الإطلاق (يقلل التبريد) وآخر ينشئ درعًا مؤقتًا. قم بتضمين منطق الظهور الذي ينشئ التعزيزات على فترات ومواقع عشوائية.
+**المهمة:** أنشئ فئة PowerUp التي تمتد من GameObject ونفذ اكتشاف الاصطدام بين البطل والتعزيزات. أضف نوعين على الأقل من التعزيزات: واحدة تزيد من معدل إطلاق النار (تقلل من وقت التبريد) وأخرى تنشئ درعًا مؤقتًا. قم بتضمين منطق الإنشاء الذي ينشئ التعزيزات على فترات ومواقع عشوائية.
---
## 🚀 التحدي
-أضف انفجارًا! ألقِ نظرة على أصول اللعبة في [مستودع فن الفضاء](../../../../6-space-game/solution/spaceArt/readme.txt) وحاول إضافة انفجار عندما يصيب الليزر كائنًا فضائيًا.
+أضف انفجارًا! ألقِ نظرة على أصول اللعبة في [مستودع فن الفضاء](../../../../6-space-game/solution/spaceArt/readme.txt) وحاول إضافة انفجار عندما يصطدم الليزر بكائن فضائي.
## اختبار ما بعد المحاضرة
@@ -451,11 +768,11 @@ class Hero extends GameObject {
## المراجعة والدراسة الذاتية
-جرب الفواصل الزمنية في لعبتك حتى الآن. ماذا يحدث عندما تغيرها؟ اقرأ المزيد عن [أحداث توقيت JavaScript](https://www.freecodecamp.org/news/javascript-timing-events-settimeout-and-setinterval/).
+جرب تغيير الفواصل الزمنية في لعبتك حتى الآن. ماذا يحدث عندما تغيرها؟ اقرأ المزيد عن [أحداث توقيت JavaScript](https://www.freecodecamp.org/news/javascript-timing-events-settimeout-and-setinterval/).
## الواجب
-[استكشاف التصادمات](assignment.md)
+[استكشاف الاصطدامات](assignment.md)
---
diff --git a/translations/ar/6-space-game/5-keeping-score/README.md b/translations/ar/6-space-game/5-keeping-score/README.md
index 9886b0b506..d475358d8c 100644
--- a/translations/ar/6-space-game/5-keeping-score/README.md
+++ b/translations/ar/6-space-game/5-keeping-score/README.md
@@ -1,24 +1,91 @@
# بناء لعبة فضاء الجزء الخامس: النقاط والأرواح
+```mermaid
+journey
+ title Your Game Design Journey
+ section Player Feedback
+ Understand scoring psychology: 3: Student
+ Learn visual communication: 4: Student
+ Design reward systems: 4: Student
+ section Technical Implementation
+ Canvas text rendering: 4: Student
+ State management: 5: Student
+ Event-driven updates: 5: Student
+ section Game Polish
+ User experience design: 5: Student
+ Balance challenge and reward: 5: Student
+ Create engaging gameplay: 5: Student
+```
+
## اختبار ما قبل المحاضرة
[اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/web/quiz/37)
-هل أنت مستعد لجعل لعبة الفضاء الخاصة بك تبدو وكأنها لعبة حقيقية؟ دعنا نضيف نظام النقاط وإدارة الأرواح - الآليات الأساسية التي حولت ألعاب الأركيد المبكرة مثل Space Invaders من مجرد عروض بسيطة إلى وسائل ترفيهية ممتعة. هنا تصبح لعبتك قابلة للعب بشكل حقيقي.
+هل أنت مستعد لجعل لعبة الفضاء الخاصة بك تبدو وكأنها لعبة حقيقية؟ دعنا نضيف نظام النقاط وإدارة الأرواح - الآليات الأساسية التي حولت ألعاب الأركيد المبكرة مثل Space Invaders من مجرد عروض بسيطة إلى ترفيه ممتع. هنا تصبح لعبتك قابلة للعب بشكل حقيقي.
+
+```mermaid
+mindmap
+ root((Game Feedback Systems))
+ Visual Communication
+ Text Rendering
+ Icon Display
+ Color Psychology
+ Layout Design
+ Scoring Mechanics
+ Point Values
+ Reward Timing
+ Progress Tracking
+ Achievement Systems
+ Life Management
+ Risk vs Reward
+ Player Agency
+ Difficulty Balance
+ Recovery Mechanics
+ User Experience
+ Immediate Feedback
+ Clear Information
+ Emotional Response
+ Engagement Loops
+ Implementation
+ Canvas API
+ State Management
+ Event Systems
+ Performance
+```
-## رسم النص على الشاشة - صوت لعبتك
+## عرض النص على الشاشة - صوت لعبتك
لإظهار النقاط الخاصة بك، نحتاج إلى تعلم كيفية عرض النص على اللوحة. طريقة `fillText()` هي أداتك الأساسية لهذا - إنها نفس التقنية المستخدمة في ألعاب الأركيد الكلاسيكية لعرض النقاط ومعلومات الحالة.
+```mermaid
+flowchart LR
+ A["📝 Text Content"] --> B["🎨 Styling"]
+ B --> C["📍 Positioning"]
+ C --> D["🖼️ Canvas Render"]
+
+ E["Font Family"] --> B
+ F["Font Size"] --> B
+ G["Color"] --> B
+ H["Alignment"] --> B
+
+ I["X Coordinate"] --> C
+ J["Y Coordinate"] --> C
+
+ style A fill:#e3f2fd
+ style B fill:#e8f5e8
+ style C fill:#fff3e0
+ style D fill:#f3e5f5
+```
+
لديك سيطرة كاملة على مظهر النص:
```javascript
@@ -28,20 +95,72 @@ ctx.textAlign = "right";
ctx.fillText("show this on the screen", 0, 0);
```
-✅ استكشف المزيد حول [إضافة النص إلى اللوحة](https://developer.mozilla.org/docs/Web/API/Canvas_API/Tutorial/Drawing_text) - قد تفاجأ بمدى الإبداع الذي يمكنك تحقيقه باستخدام الخطوط والتنسيقات!
+✅ استكشف المزيد حول [إضافة النص إلى اللوحة](https://developer.mozilla.org/docs/Web/API/Canvas_API/Tutorial/Drawing_text) - قد تتفاجأ بمدى الإبداع الذي يمكنك تحقيقه باستخدام الخطوط والتنسيق!
## الأرواح - أكثر من مجرد رقم
في تصميم الألعاب، تمثل "الحياة" هامش الخطأ للاعب. يعود هذا المفهوم إلى آلات الكرة والدبابيس، حيث تحصل على عدة كرات للعب بها. في ألعاب الفيديو المبكرة مثل Asteroids، كانت الأرواح تمنح اللاعبين الإذن للمخاطرة والتعلم من الأخطاء.
-التمثيل البصري مهم للغاية - عرض أيقونات السفن بدلاً من مجرد "الأرواح: 3" يخلق تعرفًا بصريًا فوريًا، مشابهًا للطريقة التي استخدمت بها خزائن الأركيد المبكرة الرموز للتواصل عبر الحواجز اللغوية.
+```mermaid
+flowchart TD
+ A["🎮 Player Action"] --> B{"Risk Assessment"}
+
+ B --> C["High Risk, High Reward"]
+ B --> D["Safe Strategy"]
+
+ C --> E{"Outcome"}
+ D --> F["Steady Progress"]
+
+ E -->|Success| G["🏆 Big Points"]
+ E -->|Failure| H["💔 Lose Life"]
+
+ H --> I{"Lives Remaining?"}
+ I -->|Yes| J["🔄 Try Again"]
+ I -->|No| K["💀 Game Over"]
+
+ J --> B
+ G --> B
+ F --> B
+
+ style C fill:#ffebee
+ style D fill:#e8f5e8
+ style G fill:#e3f2fd
+ style H fill:#fff3e0
+```
+
+التمثيل البصري مهم للغاية - عرض أيقونات السفن بدلاً من مجرد "أرواح: 3" يخلق اعترافًا بصريًا فوريًا، مشابهًا للطريقة التي استخدمت بها خزائن الأركيد المبكرة الرموز للتواصل عبر الحواجز اللغوية.
## بناء نظام المكافآت في لعبتك
الآن سنقوم بتنفيذ أنظمة التغذية الراجعة الأساسية التي تبقي اللاعبين متحمسين:
-- **نظام النقاط**: كل سفينة عدو يتم تدميرها تمنح 100 نقطة (الأرقام المستديرة أسهل للاعبين لحسابها ذهنياً). يتم عرض النقاط في الزاوية السفلية اليسرى.
-- **عداد الأرواح**: يبدأ البطل بثلاث أرواح - معيار تم تحديده بواسطة ألعاب الأركيد المبكرة لتحقيق التوازن بين التحدي وقابلية اللعب. كل اصطدام مع عدو يكلف حياة واحدة. سنعرض الأرواح المتبقية في الزاوية السفلية اليمنى باستخدام أيقونات السفن .
+```mermaid
+sequenceDiagram
+ participant Player
+ participant GameEngine
+ participant ScoreSystem
+ participant LifeSystem
+ participant Display
+
+ Player->>GameEngine: Shoots Enemy
+ GameEngine->>ScoreSystem: Award Points
+ ScoreSystem->>ScoreSystem: +100 points
+ ScoreSystem->>Display: Update Score
+
+ Player->>GameEngine: Collides with Enemy
+ GameEngine->>LifeSystem: Lose Life
+ LifeSystem->>LifeSystem: -1 life
+ LifeSystem->>Display: Update Lives
+
+ alt Lives > 0
+ LifeSystem->>Player: Continue Playing
+ else Lives = 0
+ LifeSystem->>GameEngine: Game Over
+ end
+```
+
+- **نظام النقاط**: كل سفينة عدو يتم تدميرها تمنح 100 نقطة (الأرقام المستديرة أسهل للاعبين لحسابها ذهنيًا). يتم عرض النقاط في الزاوية السفلية اليسرى.
+- **عداد الأرواح**: يبدأ بطلك بثلاث أرواح - معيار تم تحديده بواسطة ألعاب الأركيد المبكرة لتحقيق التوازن بين التحدي وقابلية اللعب. كل تصادم مع عدو يكلفك حياة واحدة. سنعرض الأرواح المتبقية في الزاوية السفلية اليمنى باستخدام أيقونات السفن .
## لنبدأ البناء!
@@ -66,9 +185,35 @@ npm start
سيقوم هذا بتشغيل خادم محلي على `http://localhost:5000`. افتح هذا العنوان في متصفحك لرؤية لعبتك. اختبر التحكم باستخدام مفاتيح الأسهم وحاول إطلاق النار على الأعداء للتحقق من أن كل شيء يعمل.
+```mermaid
+flowchart TD
+ A["1. Asset Loading"] --> B["2. Game Variables"]
+ B --> C["3. Collision Detection"]
+ C --> D["4. Hero Enhancement"]
+ D --> E["5. Display Functions"]
+ E --> F["6. Event Handlers"]
+
+ G["Life Icon Image"] --> A
+ H["Score & Lives Tracking"] --> B
+ I["Hero-Enemy Intersections"] --> C
+ J["Points & Life Methods"] --> D
+ K["Text & Icon Rendering"] --> E
+ L["Reward & Penalty Logic"] --> F
+
+ F --> M["🎮 Complete Game"]
+
+ style A fill:#e3f2fd
+ style B fill:#e8f5e8
+ style C fill:#fff3e0
+ style D fill:#f3e5f5
+ style E fill:#e0f2f1
+ style F fill:#fce4ec
+ style M fill:#e1f5fe
+```
+
### حان وقت البرمجة!
-1. **احصل على الأصول البصرية التي تحتاجها**. انسخ ملف `life.png` من مجلد `solution/assets/` إلى مجلد `your-work`. ثم أضف `lifeImg` إلى وظيفة `window.onload` الخاصة بك:
+1. **احصل على الأصول البصرية التي ستحتاجها**. انسخ ملف `life.png` من مجلد `solution/assets/` إلى مجلد `your-work`. ثم أضف lifeImg إلى وظيفة window.onload الخاصة بك:
```javascript
lifeImg = await loadTexture("assets/life.png");
@@ -84,9 +229,9 @@ npm start
eventEmitter = new EventEmitter();
```
-2. **قم بإعداد متغيرات اللعبة الخاصة بك**. أضف بعض الأكواد لتتبع إجمالي النقاط (يبدأ من 0) والأرواح المتبقية (تبدأ من 3). سنعرض هذه على الشاشة حتى يعرف اللاعبون دائمًا مكانهم.
+2. **قم بإعداد متغيرات اللعبة الخاصة بك**. أضف بعض الأكواد لتتبع إجمالي النقاط (تبدأ من 0) والأرواح المتبقية (تبدأ من 3). سنعرض هذه على الشاشة حتى يعرف اللاعبون دائمًا مكانهم.
-3. **تنفيذ اكتشاف الاصطدام**. قم بتمديد وظيفة `updateGameObjects()` لاكتشاف عندما تصطدم الأعداء بالبطل الخاص بك:
+3. **تنفيذ اكتشاف التصادم**. قم بتوسيع وظيفة `updateGameObjects()` لاكتشاف عندما تصطدم الأعداء مع بطلك:
```javascript
enemies.forEach(enemy => {
@@ -97,7 +242,7 @@ npm start
})
```
-4. **أضف تتبع الأرواح والنقاط إلى البطل الخاص بك**.
+4. **أضف تتبع الأرواح والنقاط إلى بطلك**.
1. **تهيئة العدادات**. تحت `this.cooldown = 0` في فئة `Hero`، قم بإعداد الأرواح والنقاط:
```javascript
@@ -132,16 +277,32 @@ npm start
```
- 1. **ربط كل شيء بحلقة اللعبة الخاصة بك**. أضف هذه الوظائف إلى وظيفة `window.onload` مباشرة بعد `updateGameObjects()`:
+ 1. **ربط كل شيء بحلقة اللعبة الخاصة بك**. أضف هذه الوظائف إلى وظيفة window.onload الخاصة بك مباشرة بعد `updateGameObjects()`:
```javascript
drawPoints();
drawLife();
```
-1. **تنفيذ عواقب اللعبة والمكافآت**. الآن سنضيف أنظمة التغذية الراجعة التي تجعل تصرفات اللاعب ذات معنى:
+### 🔄 **مراجعة تربوية**
+**فهم تصميم الألعاب**: قبل تنفيذ العواقب، تأكد من فهمك:
+- ✅ كيف يعبر التغذية البصرية عن حالة اللعبة للاعبين
+- ✅ لماذا يحسن وضع عناصر واجهة المستخدم بشكل متسق سهولة الاستخدام
+- ✅ علم النفس وراء قيم النقاط وإدارة الأرواح
+- ✅ كيف يختلف عرض النص على اللوحة عن النص في HTML
+
+**اختبار سريع ذاتي**: لماذا تستخدم ألعاب الأركيد عادةً أرقامًا مستديرة لقيم النقاط؟
+*الإجابة: الأرقام المستديرة أسهل للاعبين لحسابها ذهنيًا وتخلق مكافآت نفسية مرضية*
+
+**مبادئ تجربة المستخدم**: أنت الآن تطبق:
+- **التسلسل الهرمي البصري**: وضع المعلومات المهمة بشكل بارز
+- **التغذية الفورية**: تحديثات في الوقت الفعلي لإجراءات اللاعب
+- **عبء الإدراك**: تقديم معلومات بسيطة وواضحة
+- **التصميم العاطفي**: أيقونات وألوان تخلق ارتباطًا مع اللاعب
- 1. **الاصطدامات تكلف الأرواح**. في كل مرة يصطدم فيها البطل الخاص بك مع عدو، يجب أن تخسر حياة.
+1. **تنفيذ عواقب اللعبة والمكافآت**. الآن سنضيف أنظمة التغذية الراجعة التي تجعل إجراءات اللاعب ذات معنى:
+
+ 1. **التصادمات تكلف الأرواح**. في كل مرة يصطدم بطلك مع عدو، يجب أن تخسر حياة.
أضف هذه الطريقة إلى فئة `Hero` الخاصة بك:
@@ -154,9 +315,9 @@ npm start
}
```
- 2. **إطلاق النار على الأعداء يكسب النقاط**. كل ضربة ناجحة تمنح 100 نقطة، مما يوفر تغذية راجعة إيجابية فورية للتصويب الدقيق.
+ 2. **إطلاق النار على الأعداء يكسب النقاط**. كل ضربة ناجحة تمنح 100 نقطة، مما يوفر تغذية إيجابية فورية لإطلاق النار بدقة.
- قم بتمديد فئة Hero بهذه الطريقة الإضافية:
+ قم بتوسيع فئة Hero الخاصة بك بهذه الطريقة لزيادة النقاط:
```javascript
incrementPoints() {
@@ -164,7 +325,7 @@ npm start
}
```
- الآن قم بتوصيل هذه الوظائف بأحداث الاصطدام:
+ الآن قم بتوصيل هذه الوظائف بأحداث التصادم:
```javascript
eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => {
@@ -181,9 +342,144 @@ npm start
✅ هل أنت فضولي بشأن الألعاب الأخرى التي تم إنشاؤها باستخدام JavaScript وCanvas؟ قم ببعض الاستكشاف - قد تدهشك الإمكانيات!
-بعد تنفيذ هذه الميزات، اختبر لعبتك لترى نظام التغذية الراجعة الكامل قيد العمل. يجب أن ترى أيقونات الأرواح في الزاوية السفلية اليمنى، والنقاط الخاصة بك في الزاوية السفلية اليسرى، وشاهد كيف تقل الأرواح عند الاصطدامات بينما تزيد النقاط عند الضربات الناجحة.
+بعد تنفيذ هذه الميزات، اختبر لعبتك لرؤية نظام التغذية الراجعة الكامل قيد العمل. يجب أن ترى أيقونات الأرواح في الزاوية السفلية اليمنى، والنقاط في الزاوية السفلية اليسرى، ومراقبة كيف تقل الأرواح مع التصادمات بينما تزيد النقاط مع الضربات الناجحة.
+
+لعبتك الآن تحتوي على الآليات الأساسية التي جعلت ألعاب الأركيد المبكرة ممتعة للغاية - أهداف واضحة، تغذية راجعة فورية، وعواقب ذات معنى لإجراءات اللاعب.
+
+### 🔄 **مراجعة تربوية**
+**نظام تصميم الألعاب الكامل**: تحقق من إتقانك لأنظمة التغذية الراجعة للاعب:
+- ✅ كيف تخلق آليات النقاط دافعًا ومشاركة للاعب؟
+- ✅ لماذا تعتبر الاتساق البصري مهمًا لتصميم واجهة المستخدم؟
+- ✅ كيف يوازن نظام الأرواح بين التحدي واحتفاظ اللاعب؟
+- ✅ ما دور التغذية الفورية في خلق تجربة لعب مرضية؟
+
+**تكامل النظام**: يظهر نظام التغذية الراجعة الخاص بك:
+- **تصميم تجربة المستخدم**: تواصل بصري واضح وتسلسل هرمي للمعلومات
+- **هندسة مدفوعة بالأحداث**: تحديثات استجابة لإجراءات اللاعب
+- **إدارة الحالة**: تتبع وعرض بيانات اللعبة الديناميكية
+- **إتقان اللوحة**: عرض النصوص ووضع الرموز
+- **علم نفس الألعاب**: فهم دافع اللاعب ومشاركته
+
+**أنماط احترافية**: لقد قمت بتنفيذ:
+- **هندسة MVC**: فصل منطق اللعبة والبيانات والعرض
+- **نمط المراقب**: تحديثات مدفوعة بالأحداث لتغييرات حالة اللعبة
+- **تصميم المكونات**: وظائف قابلة لإعادة الاستخدام للعرض والمنطق
+- **تحسين الأداء**: عرض فعال في حلقات اللعبة
+
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] جرب أحجام وألوان خطوط مختلفة لعرض النقاط
+- [ ] حاول تغيير قيم النقاط وشاهد كيف يؤثر ذلك على شعور اللعبة
+- [ ] أضف عبارات console.log لتتبع تغييرات النقاط والأرواح
+- [ ] اختبر الحالات الحافة مثل نفاد الأرواح أو تحقيق نقاط عالية
+
+### 🎯 **ما يمكنك تحقيقه خلال هذه الساعة**
+- [ ] أكمل اختبار ما بعد الدرس وفهم علم نفس تصميم الألعاب
+- [ ] أضف تأثيرات صوتية للنقاط وفقدان الأرواح
+- [ ] نفذ نظام النقاط العالية باستخدام localStorage
+- [ ] أنشئ قيم نقاط مختلفة لأنواع الأعداء المختلفة
+- [ ] أضف تأثيرات بصرية مثل اهتزاز الشاشة عند فقدان حياة
+
+### 📅 **رحلة تصميم الألعاب الخاصة بك لمدة أسبوع**
+- [ ] أكمل لعبة الفضاء بالكامل مع أنظمة التغذية الراجعة المصقولة
+- [ ] نفذ آليات النقاط المتقدمة مثل مضاعفات الكومبو
+- [ ] أضف الإنجازات والمحتوى القابل للفتح
+- [ ] أنشئ أنظمة تقدم وصعوبة متوازنة
+- [ ] صمم واجهات المستخدم للقوائم وشاشات نهاية اللعبة
+- [ ] ادرس ألعابًا أخرى لفهم آليات المشاركة
+
+### 🌟 **إتقان تطوير الألعاب خلال شهر**
+- [ ] قم ببناء ألعاب كاملة بأنظمة تقدم متطورة
+- [ ] تعلم تحليلات الألعاب وقياس سلوك اللاعب
+- [ ] ساهم في مشاريع تطوير الألعاب مفتوحة المصدر
+- [ ] أتقن أنماط تصميم الألعاب المتقدمة واستراتيجيات تحقيق الدخل
+- [ ] أنشئ محتوى تعليمي حول تصميم الألعاب وتجربة المستخدم
+- [ ] قم ببناء محفظة تعرض مهارات تصميم وتطوير الألعاب
+
+## 🎯 جدول زمني لإتقان تصميم الألعاب
+
+```mermaid
+timeline
+ title Game Design & Player Feedback Learning Progression
+
+ section Foundation (10 minutes)
+ Visual Communication: Text rendering
+ : Icon design
+ : Layout principles
+ : Color psychology
+
+ section Player Psychology (20 minutes)
+ Motivation Systems: Point values
+ : Risk vs reward
+ : Progress feedback
+ : Achievement design
+
+ section Technical Implementation (30 minutes)
+ Canvas Mastery: Text positioning
+ : Sprite rendering
+ : State management
+ : Performance optimization
+
+ section Game Balance (40 minutes)
+ Difficulty Design: Life management
+ : Scoring curves
+ : Player retention
+ : Accessibility
+
+ section User Experience (50 minutes)
+ Interface Design: Information hierarchy
+ : Responsive feedback
+ : Emotional design
+ : Usability testing
+
+ section Advanced Systems (1 week)
+ Game Mechanics: Progression systems
+ : Analytics integration
+ : Monetization design
+ : Community features
+
+ section Industry Skills (1 month)
+ Professional Development: Team collaboration
+ : Design documentation
+ : Player research
+ : Platform optimization
+```
-لعبتك الآن تحتوي على الآليات الأساسية التي جعلت ألعاب الأركيد المبكرة ممتعة للغاية - أهداف واضحة، تغذية راجعة فورية، وعواقب ذات معنى لتصرفات اللاعب.
+### 🛠️ ملخص أدوات تصميم الألعاب الخاصة بك
+
+بعد إكمال هذا الدرس، أصبحت الآن قد أتقنت:
+- **علم نفس اللاعب**: فهم الدافع والمخاطرة/المكافأة وحلقات المشاركة
+- **التواصل البصري**: تصميم واجهات مستخدم فعالة باستخدام النصوص والرموز والتخطيط
+- **أنظمة التغذية الراجعة**: استجابة فورية لإجراءات اللاعب وأحداث اللعبة
+- **إدارة الحالة**: تتبع وعرض بيانات اللعبة الديناميكية بكفاءة
+- **عرض النصوص على اللوحة**: عرض نصوص احترافية مع تنسيق ووضع
+- **تكامل الأحداث**: ربط إجراءات المستخدم بعواقب اللعبة ذات المعنى
+- **توازن اللعبة**: تصميم منحنيات الصعوبة وأنظمة تقدم اللاعب
+
+**تطبيقات العالم الحقيقي**: مهارات تصميم الألعاب الخاصة بك تنطبق مباشرة على:
+- **تصميم واجهة المستخدم**: إنشاء واجهات جذابة وبديهية
+- **تطوير المنتجات**: فهم دافع المستخدم وحلقات التغذية الراجعة
+- **التكنولوجيا التعليمية**: أنظمة التلعيب ومشاركة التعلم
+- **تصور البيانات**: جعل المعلومات المعقدة سهلة الوصول وجذابة
+- **تطوير التطبيقات المحمولة**: آليات الاحتفاظ وتصميم تجربة المستخدم
+- **تكنولوجيا التسويق**: فهم سلوك المستخدم وتحسين التحويل
+
+**المهارات المهنية المكتسبة**: يمكنك الآن:
+- **تصميم** تجارب مستخدم تحفز وتشارك المستخدمين
+- **تنفيذ** أنظمة التغذية الراجعة التي توجه سلوك المستخدم بفعالية
+- **توازن** التحدي وسهولة الوصول في الأنظمة التفاعلية
+- **إنشاء** تواصل بصري يعمل عبر مجموعات المستخدمين المختلفة
+- **تحليل** سلوك المستخدم وتحسين التصميم بناءً على ذلك
+
+**مفاهيم تطوير الألعاب التي تم إتقانها**:
+- **دافع اللاعب**: فهم ما يحفز المشاركة والاحتفاظ
+- **التصميم البصري**: إنشاء واجهات واضحة وجذابة وعملية
+- **تكامل النظام**: ربط أنظمة اللعبة المتعددة لتجربة متماسكة
+- **تحسين الأداء**: عرض فعال وإدارة الحالة
+- **سهولة الوصول**: تصميم لمستويات مهارة واحتياجات اللاعبين المختلفة
+
+**المستوى التالي**: أنت جاهز لاستكشاف أنماط تصميم الألعاب المتقدمة، تنفيذ أنظمة التحليلات، أو دراسة استراتيجيات تحقيق الدخل واحتفاظ اللاعب!
+
+🌟 **إنجاز مفتوح**: لقد قمت ببناء نظام تغذية راجعة كامل للاعب باستخدام مبادئ تصميم الألعاب الاحترافية!
---
@@ -191,9 +487,9 @@ npm start
استخدم وضع الوكيل لإكمال التحدي التالي:
-**الوصف:** قم بتحسين نظام النقاط في لعبة الفضاء عن طريق تنفيذ ميزة أعلى النقاط مع تخزين دائم وآليات مكافأة النقاط.
+**الوصف:** قم بتحسين نظام النقاط في لعبة الفضاء عن طريق تنفيذ ميزة النقاط العالية مع التخزين المستمر وآليات النقاط الإضافية.
-**المهمة:** قم بإنشاء نظام أعلى النقاط الذي يحفظ أفضل نقاط اللاعب في localStorage. أضف نقاطًا إضافية لقتل الأعداء المتتالي (نظام الكومبو) وقم بتنفيذ قيم نقاط مختلفة لأنواع الأعداء المختلفة. قم بتضمين مؤشر بصري عندما يحقق اللاعب أعلى نقاط جديدة وعرض أعلى النقاط الحالية على شاشة اللعبة.
+**المهمة:** أنشئ نظام نقاط عالية يحفظ أفضل نقاط اللاعب في localStorage. أضف نقاطًا إضافية لقتل الأعداء المتتالي (نظام الكومبو) ونفذ قيم نقاط مختلفة لأنواع الأعداء المختلفة. قم بتضمين مؤشر بصري عندما يحقق اللاعب نقاطًا عالية جديدة وعرض النقاط العالية الحالية على شاشة اللعبة.
## 🚀 التحدي
@@ -205,13 +501,13 @@ npm start
## المراجعة والدراسة الذاتية
-هل تريد استكشاف المزيد؟ ابحث عن طرق مختلفة لتسجيل النقاط وأنظمة الأرواح في الألعاب. هناك محركات ألعاب رائعة مثل [PlayFab](https://playfab.com) التي تتعامل مع تسجيل النقاط، لوحات الصدارة، وتقدم اللاعب. كيف يمكن أن يؤدي دمج شيء مثل هذا إلى رفع مستوى لعبتك؟
+هل تريد استكشاف المزيد؟ ابحث عن طرق مختلفة لأنظمة النقاط والأرواح في الألعاب. هناك محركات ألعاب رائعة مثل [PlayFab](https://playfab.com) التي تتعامل مع النقاط، لوحات الصدارة، وتقدم اللاعب. كيف يمكن أن يؤدي دمج شيء كهذا إلى رفع مستوى لعبتك؟
-## الواجب
+## المهمة
-[بناء لعبة تسجيل النقاط](assignment.md)
+[بناء لعبة النقاط](assignment.md)
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-space-game/6-end-condition/README.md b/translations/ar/6-space-game/6-end-condition/README.md
index 4e4002c569..e14d646702 100644
--- a/translations/ar/6-space-game/6-end-condition/README.md
+++ b/translations/ar/6-space-game/6-end-condition/README.md
@@ -1,59 +1,167 @@
# بناء لعبة فضاء الجزء السادس: النهاية وإعادة التشغيل
-كل لعبة رائعة تحتاج إلى شروط نهاية واضحة وآلية إعادة تشغيل سلسة. لقد قمت ببناء لعبة فضاء مذهلة تتضمن الحركة والقتال وتسجيل النقاط - والآن حان الوقت لإضافة القطع النهائية التي تجعلها تبدو مكتملة.
-
-لعبتك حالياً تعمل بلا نهاية، مثل مسبارات "فوياجر" التي أطلقتها ناسا في عام 1977 - ولا تزال تسافر عبر الفضاء بعد عقود. بينما هذا مناسب لاستكشاف الفضاء، تحتاج الألعاب إلى نقاط نهاية محددة لتوفير تجربة مرضية.
-
-اليوم، سنقوم بتنفيذ شروط الفوز والخسارة بشكل صحيح ونظام إعادة التشغيل. بنهاية هذا الدرس، سيكون لديك لعبة مصقولة يمكن للاعبين إكمالها وإعادة لعبها، تماماً مثل ألعاب الأركيد الكلاسيكية التي شكلت هذا المجال.
-
-## اختبار ما قبل المحاضرة
-
-[اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/web/quiz/39)
-
-## فهم شروط نهاية اللعبة
-
-متى يجب أن تنتهي لعبتك؟ هذا السؤال الأساسي شكل تصميم الألعاب منذ عصر الأركيد الأول. تنتهي لعبة "باك مان" عندما يتم الإمساك بك من قبل الأشباح أو عند تنظيف جميع النقاط، بينما تنتهي لعبة "غزاة الفضاء" عندما تصل الكائنات الفضائية إلى الأسفل أو عندما تدمرها جميعاً.
-
-بصفتك منشئ اللعبة، يمكنك تحديد شروط النصر والهزيمة. بالنسبة للعبة الفضاء الخاصة بنا، إليك بعض الأساليب المثبتة التي تخلق تجربة لعب ممتعة:
-
-- **تدمير `N` سفن العدو**: من الشائع تقسيم اللعبة إلى مستويات مختلفة حيث تحتاج إلى تدمير `N` سفن العدو لإكمال المستوى.
-- **تدمير سفينتك**: هناك بالتأكيد ألعاب تخسر فيها إذا تم تدمير سفينتك. نهج شائع آخر هو وجود مفهوم "الحياة". في كل مرة يتم تدمير سفينتك، يتم خصم حياة. بمجرد فقدان جميع الأرواح، تخسر اللعبة.
-- **جمع `N` نقاط**: شرط نهاية شائع آخر هو جمع النقاط. كيفية الحصول على النقاط يعتمد عليك، ولكن من الشائع تخصيص نقاط لأنشطة مختلفة مثل تدمير سفينة العدو أو جمع العناصر التي تسقطها السفن عند تدميرها.
-- **إكمال مستوى**: قد يتضمن ذلك عدة شروط مثل تدمير `X` سفن العدو، جمع `Y` نقاط، أو ربما جمع عنصر معين.
-
-## تنفيذ وظيفة إعادة تشغيل اللعبة
-
-تشجع الألعاب الجيدة على إعادة اللعب من خلال آليات إعادة تشغيل سلسة. عندما يكمل اللاعبون اللعبة (أو يواجهون الهزيمة)، غالباً ما يرغبون في المحاولة مرة أخرى على الفور - سواء لتحسين درجاتهم أو أدائهم.
-
-لعبة "تيتريس" مثال مثالي على ذلك: عندما تصل الكتل إلى الأعلى، يمكنك بدء لعبة جديدة فوراً دون الحاجة إلى التنقل عبر قوائم معقدة. سنقوم ببناء نظام إعادة تشغيل مشابه يعيد ضبط حالة اللعبة بشكل نظيف ويعيد اللاعبين إلى العمل بسرعة.
+```mermaid
+journey
+ title Your Game Completion Journey
+ section End Conditions
+ Define win/lose states: 3: Student
+ Implement condition checking: 4: Student
+ Handle state transitions: 4: Student
+ section Player Experience
+ Design feedback systems: 4: Student
+ Create restart mechanics: 5: Student
+ Polish user interface: 5: Student
+ section System Integration
+ Manage game lifecycle: 5: Student
+ Handle memory cleanup: 5: Student
+ Create complete experience: 5: Student
+```
+
+كل لعبة رائعة تحتاج إلى شروط نهاية واضحة وآلية إعادة تشغيل سلسة. لقد قمت ببناء لعبة فضاء مذهلة مع الحركة والقتال وتسجيل النقاط - والآن حان الوقت لإضافة القطع النهائية التي تجعلها تبدو مكتملة.
+
+لعبتك حاليًا تعمل بلا نهاية، مثل مجسات "فوياجر" التي أطلقتها ناسا في عام 1977 - ولا تزال تسافر عبر الفضاء بعد عقود. بينما هذا مناسب لاستكشاف الفضاء، تحتاج الألعاب إلى نقاط نهاية محددة لتوفير تجربة مرضية.
+
+اليوم، سنقوم بتنفيذ شروط الفوز/الخسارة ونظام إعادة التشغيل. بنهاية هذا الدرس، ستكون لديك لعبة مصقولة يمكن للاعبين إكمالها وإعادة لعبها، تمامًا مثل ألعاب الأركيد الكلاسيكية التي شكلت هذا المجال.
+
+```mermaid
+mindmap
+ root((Game Completion))
+ End Conditions
+ Victory States
+ Defeat Conditions
+ Progress Tracking
+ State Validation
+ Player Feedback
+ Visual Messages
+ Color Psychology
+ Clear Communication
+ Emotional Response
+ State Management
+ Game Loop Control
+ Memory Cleanup
+ Object Lifecycle
+ Event Handling
+ Restart Systems
+ Input Handling
+ State Reset
+ Fresh Initialization
+ User Experience
+ Polish Elements
+ Message Display
+ Smooth Transitions
+ Error Prevention
+ Accessibility
+```
+
+## اختبار ما قبل الدرس
+
+[اختبار ما قبل الدرس](https://ff-quizzes.netlify.app/web/quiz/39)
+
+## فهم شروط نهاية اللعبة
+
+متى يجب أن تنتهي لعبتك؟ هذا السؤال الأساسي شكل تصميم الألعاب منذ عصر الأركيد المبكر. تنتهي لعبة "باك مان" عندما يتم الإمساك بك من قبل الأشباح أو عند تنظيف جميع النقاط، بينما تنتهي لعبة "غزاة الفضاء" عندما تصل الكائنات الفضائية إلى الأسفل أو يتم تدميرها جميعًا.
+
+بصفتك منشئ اللعبة، أنت من يحدد شروط الفوز والهزيمة. بالنسبة للعبة الفضاء الخاصة بنا، إليك بعض الأساليب المثبتة التي تخلق تجربة لعب ممتعة:
+
+```mermaid
+flowchart TD
+ A["🎮 Game Start"] --> B{"Check Conditions"}
+
+ B --> C["Enemy Count"]
+ B --> D["Hero Lives"]
+ B --> E["Score Threshold"]
+ B --> F["Level Progress"]
+
+ C --> C1{"Enemies = 0?"}
+ D --> D1{"Lives = 0?"}
+ E --> E1{"Score ≥ Target?"}
+ F --> F1{"Objectives Complete?"}
+
+ C1 -->|Yes| G["🏆 Victory"]
+ D1 -->|Yes| H["💀 Defeat"]
+ E1 -->|Yes| G
+ F1 -->|Yes| G
+
+ C1 -->|No| B
+ D1 -->|No| B
+ E1 -->|No| B
+ F1 -->|No| B
+
+ G --> I["🔄 Restart Option"]
+ H --> I
+
+ style G fill:#e8f5e8
+ style H fill:#ffebee
+ style I fill:#e3f2fd
+```
+
+- **`N` تم تدمير عدد معين من سفن العدو**: من الشائع جدًا إذا قمت بتقسيم اللعبة إلى مستويات مختلفة أن تحتاج إلى تدمير `N` سفن عدو لإكمال المستوى.
+- **تم تدمير سفينتك**: هناك بالتأكيد ألعاب تخسر فيها إذا تم تدمير سفينتك. نهج شائع آخر هو مفهوم "الحياة". في كل مرة يتم تدمير سفينتك، يتم خصم حياة. بمجرد فقدان جميع الأرواح، تخسر اللعبة.
+- **لقد جمعت `N` نقاط**: شرط نهاية شائع آخر هو جمع النقاط. كيفية الحصول على النقاط يعود إليك، ولكن من الشائع جدًا تخصيص نقاط لأنشطة مختلفة مثل تدمير سفينة عدو أو ربما جمع عناصر تسقطها السفن عند تدميرها.
+- **إكمال مستوى**: قد يتضمن ذلك عدة شروط مثل تدمير `X` سفن عدو، جمع `Y` نقاط، أو ربما جمع عنصر معين.
+
+## تنفيذ وظيفة إعادة تشغيل اللعبة
+
+الألعاب الجيدة تشجع على إعادة اللعب من خلال آليات إعادة تشغيل سلسة. عندما يكمل اللاعبون لعبة (أو يواجهون الهزيمة)، غالبًا ما يرغبون في المحاولة مرة أخرى فورًا - سواء لتحسين أدائهم أو لتحقيق نتيجة أفضل.
+
+```mermaid
+stateDiagram-v2
+ [*] --> Playing: Game Start
+ Playing --> Victory: All enemies destroyed
+ Playing --> Defeat: Lives = 0
+
+ Victory --> MessageDisplay: Show win message
+ Defeat --> MessageDisplay: Show lose message
+
+ MessageDisplay --> WaitingRestart: Press Enter prompt
+ WaitingRestart --> Resetting: Enter key pressed
+
+ Resetting --> CleanupMemory: Clear intervals
+ CleanupMemory --> ClearEvents: Remove listeners
+ ClearEvents --> InitializeGame: Fresh start
+ InitializeGame --> Playing: New game begins
+
+ note right of MessageDisplay
+ Color-coded feedback:
+ Green = Victory
+ Red = Defeat
+ end note
+
+ note right of Resetting
+ Complete state reset
+ prevents memory leaks
+ end note
+```
+
+لعبة "تتريس" مثال رائع على ذلك: عندما تصل الكتل إلى الأعلى، يمكنك بدء لعبة جديدة فورًا دون الحاجة إلى التنقل عبر قوائم معقدة. سنقوم ببناء نظام إعادة تشغيل مشابه يعيد ضبط حالة اللعبة بشكل نظيف ويعيد اللاعبين إلى الحركة بسرعة.
-✅ **تأمل**: فكر في الألعاب التي لعبتها. ما هي الظروف التي تنتهي فيها، وكيف يتم تحفيزك لإعادة التشغيل؟ ما الذي يجعل تجربة إعادة التشغيل سلسة مقابل محبطة؟
+✅ **تأمل**: فكر في الألعاب التي لعبتها. تحت أي ظروف تنتهي، وكيف يتم تحفيزك لإعادة التشغيل؟ ما الذي يجعل تجربة إعادة التشغيل سلسة مقابل محبطة؟
-## ما الذي ستبنيه
+## ما الذي ستبنيه
ستقوم بتنفيذ الميزات النهائية التي تحول مشروعك إلى تجربة لعبة مكتملة. هذه العناصر تميز الألعاب المصقولة عن النماذج الأولية الأساسية.
**إليك ما سنضيفه اليوم:**
-1. **شرط الفوز**: دمر جميع الأعداء واحصل على احتفال مناسب (لقد استحققت ذلك!)
-2. **شرط الهزيمة**: نفاد الأرواح ومواجهة الهزيمة مع شاشة الهزيمة
-3. **آلية إعادة التشغيل**: اضغط على Enter للعودة مباشرة - لأن لعبة واحدة لا تكفي
-4. **إدارة الحالة**: بداية جديدة في كل مرة - لا أعداء متبقين أو أخطاء غريبة من اللعبة السابقة
+1. **شرط الفوز**: تدمير جميع الأعداء والحصول على احتفال مناسب (لقد استحققت ذلك!)
+2. **شرط الهزيمة**: نفاد الأرواح ومواجهة شاشة الهزيمة
+3. **آلية إعادة التشغيل**: اضغط على Enter للعودة مباشرة - لأن لعبة واحدة لا تكفي
+4. **إدارة الحالة**: صفحة جديدة في كل مرة - لا أعداء متبقين أو أخطاء غريبة من اللعبة السابقة
-## البدء
+## البدء
-لنقم بإعداد بيئة التطوير الخاصة بك. يجب أن تكون جميع ملفات لعبة الفضاء الخاصة بك من الدروس السابقة جاهزة.
+لنقم بإعداد بيئة التطوير الخاصة بك. يجب أن تكون لديك جميع ملفات لعبة الفضاء من الدروس السابقة جاهزة.
-**يجب أن يبدو مشروعك شيئاً مثل هذا:**
+**يجب أن يبدو مشروعك شيئًا مثل هذا:**
```bash
-| assets
@@ -65,28 +173,54 @@ CO_OP_TRANSLATOR_METADATA:
-| app.js
-| package.json
```
-
+
**ابدأ خادم التطوير الخاص بك:**
```bash
cd your-work
npm start
```
+
+**هذا الأمر:**
+- يشغل خادمًا محليًا على `http://localhost:5000`
+- يخدم ملفاتك بشكل صحيح
+- يقوم بالتحديث تلقائيًا عند إجراء تغييرات
+
+افتح `http://localhost:5000` في متصفحك وتأكد من أن لعبتك تعمل. يجب أن تكون قادرًا على التحرك، إطلاق النار، والتفاعل مع الأعداء. بمجرد التأكد، يمكننا المضي قدمًا في التنفيذ.
+
+> 💡 **نصيحة احترافية**: لتجنب التحذيرات في Visual Studio Code، قم بتعريف `gameLoopId` في أعلى ملفك كـ `let gameLoopId;` بدلاً من تعريفه داخل وظيفة `window.onload`. هذا يتبع أفضل ممارسات تعريف المتغيرات في JavaScript الحديثة.
+
+```mermaid
+flowchart TD
+ A["1. Condition Tracking"] --> B["2. Event Handlers"]
+ B --> C["3. Message Constants"]
+ C --> D["4. Restart Controls"]
+ D --> E["5. Message Display"]
+ E --> F["6. Reset System"]
+
+ G["isHeroDead()\nisEnemiesDead()"] --> A
+ H["Collision Events\nEnd Game Events"] --> B
+ I["GAME_END_WIN\nGAME_END_LOSS"] --> C
+ J["Enter Key\nRestart Trigger"] --> D
+ K["Victory/Defeat\nColor-coded Text"] --> E
+ L["State Cleanup\nFresh Initialization"] --> F
+
+ F --> M["🎮 Complete Game"]
+
+ style A fill:#e3f2fd
+ style B fill:#e8f5e8
+ style C fill:#fff3e0
+ style D fill:#f3e5f5
+ style E fill:#e0f2f1
+ style F fill:#fce4ec
+ style M fill:#e1f5fe
+```
+
+## خطوات التنفيذ
-**هذا الأمر:**
-- يشغل خادم محلي على `http://localhost:5000`
-- يقدم ملفاتك بشكل صحيح
-- يقوم بالتحديث تلقائياً عند إجراء تغييرات
-
-افتح `http://localhost:5000` في متصفحك وتأكد من أن لعبتك تعمل. يجب أن تكون قادراً على التحرك، إطلاق النار، والتفاعل مع الأعداء. بمجرد التأكد، يمكننا المضي قدماً في التنفيذ.
-
-> 💡 **نصيحة احترافية**: لتجنب التحذيرات في Visual Studio Code، قم بتعريف `gameLoopId` في أعلى ملفك كـ `let gameLoopId;` بدلاً من تعريفه داخل وظيفة `window.onload`. هذا يتبع أفضل الممارسات الحديثة لتصريح المتغيرات في JavaScript.
-
-## خطوات التنفيذ
-
-### الخطوة 1: إنشاء وظائف تتبع شروط النهاية
+### الخطوة 1: إنشاء وظائف تتبع شروط النهاية
-نحتاج إلى وظائف لمراقبة متى يجب أن تنتهي اللعبة. مثل أجهزة الاستشعار في محطة الفضاء الدولية التي تراقب الأنظمة الحرجة باستمرار، ستقوم هذه الوظائف بفحص حالة اللعبة بشكل مستمر.
+نحتاج إلى وظائف لمراقبة متى يجب أن تنتهي اللعبة. مثل أجهزة الاستشعار على محطة الفضاء الدولية التي تراقب الأنظمة الحرجة باستمرار، ستقوم هذه الوظائف بفحص حالة اللعبة بشكل مستمر.
```javascript
function isHeroDead() {
@@ -98,18 +232,52 @@ function isEnemiesDead() {
return enemies.length === 0;
}
```
+
+**ما يحدث خلف الكواليس:**
+- **يتحقق** إذا كانت سفينة البطل قد نفدت الأرواح (مؤلم!)
+- **يحسب** عدد الأعداء الذين لا يزالون على قيد الحياة
+- **يعيد** `true` عندما تكون ساحة المعركة خالية من الأعداء
+- **يستخدم** منطق بسيط يعتمد على true/false للحفاظ على الأمور واضحة
+- **يُرشح** جميع كائنات اللعبة للعثور على الناجين
-**ما الذي يحدث خلف الكواليس:**
-- **التحقق** إذا كانت حياة البطل قد انتهت (يا للأسف!)
-- **العد** لعدد الأعداء الذين لا يزالون على قيد الحياة
-- **الإرجاع** بـ `true` عندما يكون ساحة المعركة خالية من الأعداء
-- **الاستخدام** لمنطق بسيط يعتمد على صحيح/خطأ للحفاظ على الأمور واضحة
-- **التصفية** عبر جميع كائنات اللعبة للعثور على الناجين
-
-### الخطوة 2: تحديث معالجات الأحداث لشروط النهاية
+### الخطوة 2: تحديث معالجات الأحداث لشروط النهاية
الآن سنقوم بربط هذه الفحوصات بنظام الأحداث في اللعبة. في كل مرة يحدث تصادم، ستقوم اللعبة بتقييم ما إذا كان يؤدي إلى شرط نهاية. هذا يخلق ردود فعل فورية للأحداث الحرجة في اللعبة.
+```mermaid
+sequenceDiagram
+ participant Collision
+ participant GameLogic
+ participant Conditions
+ participant EventSystem
+ participant Display
+
+ Collision->>GameLogic: Laser hits enemy
+ GameLogic->>GameLogic: Destroy objects
+ GameLogic->>Conditions: Check isEnemiesDead()
+
+ alt All enemies defeated
+ Conditions->>EventSystem: Emit GAME_END_WIN
+ EventSystem->>Display: Show victory message
+ else Enemies remain
+ Conditions->>GameLogic: Continue game
+ end
+
+ Collision->>GameLogic: Enemy hits hero
+ GameLogic->>GameLogic: Decrease lives
+ GameLogic->>Conditions: Check isHeroDead()
+
+ alt Lives = 0
+ Conditions->>EventSystem: Emit GAME_END_LOSS
+ EventSystem->>Display: Show defeat message
+ else Lives remain
+ GameLogic->>Conditions: Check isEnemiesDead()
+ alt All enemies defeated
+ Conditions->>EventSystem: Emit GAME_END_WIN
+ end
+ end
+```
+
```javascript
eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => {
first.dead = true;
@@ -141,18 +309,381 @@ eventEmitter.on(Messages.GAME_END_LOSS, () => {
endGame(false);
});
```
+
+**ما يحدث هنا:**
+- **الليزر يصيب العدو**: كلاهما يختفي، تحصل على نقاط، ونتحقق إذا كنت قد فزت
+- **العدو يصيبك**: تخسر حياة، ونتحقق إذا كنت لا تزال على قيد الحياة
+- **ترتيب ذكي**: نتحقق من الهزيمة أولاً (لا أحد يريد الفوز والخسارة في نفس الوقت!)
+- **ردود فعل فورية**: بمجرد حدوث شيء مهم، تعرف اللعبة بذلك
+
+### الخطوة 3: إضافة ثوابت رسائل جديدة
+
+ستحتاج إلى إضافة أنواع رسائل جديدة إلى كائن الثوابت `Messages`. تساعد هذه الثوابت في الحفاظ على الاتساق وتجنب الأخطاء الإملائية في نظام الأحداث الخاص بك.
+
+```javascript
+GAME_END_LOSS: "GAME_END_LOSS",
+GAME_END_WIN: "GAME_END_WIN",
+```
+
+**في ما سبق، قمنا بـ:**
+- **إضافة** ثوابت لأحداث نهاية اللعبة للحفاظ على الاتساق
+- **استخدام** أسماء وصفية تشير بوضوح إلى غرض الحدث
+- **اتباع** نمط التسمية الحالي لأنواع الرسائل
+
+### الخطوة 4: تنفيذ عناصر التحكم في إعادة التشغيل
+
+الآن ستضيف عناصر تحكم لوحة المفاتيح التي تسمح للاعبين بإعادة تشغيل اللعبة. مفتاح Enter هو خيار طبيعي لأنه يرتبط عادةً بتأكيد الإجراءات وبدء الألعاب الجديدة.
+
+**أضف اكتشاف مفتاح Enter إلى مستمع حدث keydown الحالي الخاص بك:**
+
+```javascript
+else if(evt.key === "Enter") {
+ eventEmitter.emit(Messages.KEY_EVENT_ENTER);
+}
+```
+
+**أضف ثابت الرسالة الجديد:**
+
+```javascript
+KEY_EVENT_ENTER: "KEY_EVENT_ENTER",
+```
+
+**ما تحتاج إلى معرفته:**
+- **يمدد** نظام معالجة أحداث لوحة المفاتيح الحالي
+- **يستخدم** مفتاح Enter كمحفز لإعادة التشغيل لتجربة مستخدم بديهية
+- **يصدر** حدثًا مخصصًا يمكن لأجزاء أخرى من لعبتك الاستماع إليه
+- **يحافظ** على نفس النمط مثل عناصر التحكم الأخرى في لوحة المفاتيح
+
+### الخطوة 5: إنشاء نظام عرض الرسائل
+
+تحتاج لعبتك إلى التواصل بوضوح مع اللاعبين حول النتائج. سنقوم بإنشاء نظام رسائل يعرض حالات الفوز والهزيمة باستخدام نصوص ملونة، مشابهة لواجهات المحطات الطرفية في أجهزة الكمبيوتر المبكرة حيث يشير اللون الأخضر إلى النجاح والأحمر إلى الأخطاء.
+
+**قم بإنشاء وظيفة `displayMessage()`:**
+
+```javascript
+function displayMessage(message, color = "red") {
+ ctx.font = "30px Arial";
+ ctx.fillStyle = color;
+ ctx.textAlign = "center";
+ ctx.fillText(message, canvas.width / 2, canvas.height / 2);
+}
+```
+
+**خطوة بخطوة، ما يحدث:**
+- **يضبط** حجم الخط ونوعه لنص واضح وسهل القراءة
+- **يطبق** معلمة اللون مع "الأحمر" كإعداد افتراضي للتحذيرات
+- **يتمركز** النص أفقيًا وعموديًا على اللوحة
+- **يستخدم** معلمات JavaScript الحديثة الافتراضية لخيارات الألوان المرنة
+- **يستفيد** من سياق 2D للوحة للرسم المباشر للنص
+
+**قم بإنشاء وظيفة `endGame()`:**
+
+```javascript
+function endGame(win) {
+ clearInterval(gameLoopId);
+
+ // Set a delay to ensure any pending renders complete
+ setTimeout(() => {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ ctx.fillStyle = "black";
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ if (win) {
+ displayMessage(
+ "Victory!!! Pew Pew... - Press [Enter] to start a new game Captain Pew Pew",
+ "green"
+ );
+ } else {
+ displayMessage(
+ "You died !!! Press [Enter] to start a new game Captain Pew Pew"
+ );
+ }
+ }, 200)
+}
+```
+
+**ما تفعله هذه الوظيفة:**
+- **تجمد** كل شيء في مكانه - لا مزيد من تحركات السفن أو الليزر
+- **تأخذ** وقفة صغيرة (200 مللي ثانية) للسماح بإكمال رسم الإطار الأخير
+- **تمسح** الشاشة تمامًا وتلونها باللون الأسود لتأثير درامي
+- **تعرض** رسائل مختلفة للفائزين والخاسرين
+- **تستخدم** ألوانًا مختلفة للأخبار - الأخضر للأخبار الجيدة، والأحمر للأخبار السيئة
+- **تخبر** اللاعبين كيف يمكنهم العودة للعب
+
+### 🔄 **توقف تعليمي**
+**إدارة حالة اللعبة**: قبل تنفيذ وظيفة إعادة الضبط، تأكد من فهمك:
+- ✅ كيف تخلق شروط النهاية أهدافًا واضحة للعب
+- ✅ لماذا يعتبر ردود الفعل البصرية ضروريًا لفهم اللاعب
+- ✅ أهمية التنظيف المناسب في منع تسرب الذاكرة
+- ✅ كيف تمكن بنية الأحداث الانتقال السلس للحالة
+
+**اختبار سريع ذاتي**: ماذا سيحدث إذا لم تقم بمسح مستمعي الأحداث أثناء إعادة الضبط؟
+*الإجابة: تسرب الذاكرة ومعالجات الأحداث المكررة مما يسبب سلوكًا غير متوقع*
+
+**مبادئ تصميم الألعاب**: أنت الآن تنفذ:
+- **أهداف واضحة**: يعرف اللاعبون بالضبط ما يحدد النجاح والفشل
+- **ردود فعل فورية**: يتم التواصل مع تغييرات حالة اللعبة فورًا
+- **تحكم المستخدم**: يمكن للاعبين إعادة التشغيل عندما يكونون جاهزين
+- **موثوقية النظام**: التنظيف المناسب يمنع الأخطاء ومشاكل الأداء
+
+### الخطوة 6: تنفيذ وظيفة إعادة ضبط اللعبة
+
+يحتاج نظام إعادة الضبط إلى تنظيف حالة اللعبة الحالية تمامًا وتهيئة جلسة لعبة جديدة. هذا يضمن حصول اللاعبين على بداية نظيفة دون أي بيانات متبقية من اللعبة السابقة.
+
+**قم بإنشاء وظيفة `resetGame()`:**
+
+```javascript
+function resetGame() {
+ if (gameLoopId) {
+ clearInterval(gameLoopId);
+ eventEmitter.clear();
+ initGame();
+ gameLoopId = setInterval(() => {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ ctx.fillStyle = "black";
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ drawPoints();
+ drawLife();
+ updateGameObjects();
+ drawGameObjects(ctx);
+ }, 100);
+ }
+}
+```
+
+**لنقم بفهم كل جزء:**
+- **يتحقق** إذا كانت حلقة اللعبة تعمل حاليًا قبل إعادة الضبط
+- **يمسح** حلقة اللعبة الحالية لإيقاف جميع أنشطة اللعبة الحالية
+- **يزيل** جميع مستمعي الأحداث لمنع تسرب الذاكرة
+- **يعيد** تهيئة حالة اللعبة بأجسام ومتغيرات جديدة
+- **يبدأ** حلقة لعبة جديدة مع جميع وظائف اللعبة الأساسية
+- **يحافظ** على نفس الفاصل الزمني 100 مللي ثانية لأداء اللعبة المتسق
+
+**أضف معالج حدث مفتاح Enter إلى وظيفة `initGame()`:**
+
+```javascript
+eventEmitter.on(Messages.KEY_EVENT_ENTER, () => {
+ resetGame();
+});
+```
+
+**أضف طريقة `clear()` إلى فئة EventEmitter الخاصة بك:**
+
+```javascript
+clear() {
+ this.listeners = {};
+}
+```
+
+**نقاط رئيسية يجب تذكرها:**
+- **يربط** ضغط مفتاح Enter بوظيفة إعادة ضبط اللعبة
+- **يسجل** مستمع الحدث هذا أثناء تهيئة اللعبة
+- **يوفر** طريقة نظيفة لإزالة جميع مستمعي الأحداث عند إعادة الضبط
+- **يمنع** تسرب الذاكرة عن طريق مسح معالجات الأحداث بين الألعاب
+- **يعيد** ضبط كائن المستمعين إلى حالة فارغة للتهيئة الجديدة
+
+## تهانينا! 🎉
+
+👽 💥 🚀 لقد نجحت في بناء لعبة مكتملة من البداية. مثل المبرمجين الذين أنشأوا أول ألعاب الفيديو في السبعينيات، لقد حولت سطور الكود إلى تجربة تفاعلية مع ميكانيكيات لعبة مناسبة وردود فعل المستخدم. 🚀 💥 👽
+
+**لقد أنجزت:**
+- **تنفيذ** شروط الفوز والخسارة الكاملة مع ردود فعل المستخدم
+- **إنشاء** نظام إعادة تشغيل سلس للعب المستمر
+- **تصميم** تواصل بصري واضح لحالات اللعبة
+- **إدارة** انتقالات حالة اللعبة المعقدة والتنظيف
+- **تجميع** جميع المكونات في لعبة متماسكة وقابلة للعب
+
+### 🔄 **توقف تعليمي**
+**نظام تطوير الألعاب الكامل**: احتفل بإتقانك لدورة تطوير الألعاب الكاملة:
+- ✅ كيف تخلق شروط النهاية تجارب مرضية للاعبين؟
+- ✅ لماذا تعتبر إدارة الحالة المناسبة ضرورية لاستقرار اللعبة؟
+- ✅ كيف يعزز ردود الفعل البصرية فهم اللاعب؟
+- ✅ ما هو دور نظام إعادة التشغيل في الحفاظ على اللاعبين؟
+
+**إتقان النظام**: لعبتك المكتملة تظهر:
+- **تطوير الألعاب الكامل**: من الرسومات إلى الإدخال إلى إدارة الحالة
+- **بنية احترافية**: أنظمة تعتمد على الأحداث مع تنظيف مناسب
+- **تصميم تجربة المستخدم**: تواصل واضح وتحكم بديهي
+- **تحسين الأداء**: عرض فعال وإدارة الذاكرة
+- **التلميع والكمال**: جميع التفاصيل التي تجعل اللعبة تبدو مكتملة
+
+**مهارات جاهزة للصناعة**: لقد نفذت:
+- **بنية حلقة اللعبة**: أنظمة الوقت الحقيقي مع أداء متسق
+- **برمجة تعتمد على الأحداث**: أنظمة مفصولة تتوسع بشكل فعال
+- **إدارة الحالة**: معالجة بيانات معقدة وإدارة دورة الحياة
+- **تصميم واجهة المستخدم**: تواصل واضح وتحكم استجابي
+- **اختبار وتصحيح الأخطاء**: تطوير تكراري وحل المشكلات
+
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] العب لعبتك المكتملة واختبر جميع شروط الفوز والخسارة
+- [ ] جرب مع معلمات شروط النهاية المختلفة
+- [ ] حاول إضافة عبارات console.log لتتبع تغييرات حالة اللعبة
+- [ ] شارك لعبتك مع الأصدقاء واجمع ملاحظاتهم
+
+### 🎯 **ما يمكنك تحقيقه خلال هذه الساعة**
+- [ ] أكمل اختبار ما بعد الدرس وتأمل في رحلتك في تطوير الألعاب
+- [ ] أضف تأثيرات صوتية لحالات الفوز والخسارة
+- [ ] نفذ شروط نهاية إضافية مثل حدود الوقت أو الأهداف الإضافية
+- [ ] أنشئ مستويات صعوبة مختلفة مع أعداد أعداء متغيرة
+- [ ] قم بتلميع العرض البصري بخطوط وألوان أفضل
+
+### 📅 **إتقان تطوير الألعاب خلال أسبوع**
+- [ ] أكمل لعبة الفضاء المحسنة مع مستويات متعددة وتقدم
+- [ ] أضف ميزات متقدمة مثل التعزيزات، أنواع الأعداء المختلفة، والأسلحة الخاصة
+- [ ] أنشئ نظام تسجيل النقاط العالية مع تخزين دائم
+- [ ] صمم واجهات مستخدم للقوائم، الإعدادات، وخيارات اللعبة
+- [ ] قم بتحسين الأداء للأجهزة والمتصفحات المختلفة
+- [ ] انشر لعبتك عبر الإنترنت وشاركها مع المجتمع
+### 🌟 **مسيرتك المهنية في تطوير الألعاب خلال شهر**
+- [ ] قم ببناء ألعاب كاملة متعددة تستكشف أنواعًا وآليات مختلفة
+- [ ] تعلم أطر تطوير الألعاب المتقدمة مثل Phaser أو Three.js
+- [ ] ساهم في مشاريع تطوير الألعاب مفتوحة المصدر
+- [ ] دراسة مبادئ تصميم الألعاب وعلم نفس اللاعبين
+- [ ] أنشئ ملفًا شخصيًا يعرض مهاراتك في تطوير الألعاب
+- [ ] تواصل مع مجتمع تطوير الألعاب واستمر في التعلم
+
+## 🎯 جدول زمني لإتقان تطوير الألعاب بالكامل
+
+```mermaid
+timeline
+ title Complete Game Development Learning Progression
+
+ section Foundation (Lessons 1-2)
+ Game Architecture: Project structure
+ : Asset management
+ : Canvas basics
+ : Event systems
+
+ section Interaction Systems (Lessons 3-4)
+ Player Control: Input handling
+ : Movement mechanics
+ : Collision detection
+ : Physics simulation
+
+ section Game Mechanics (Lesson 5)
+ Feedback Systems: Scoring mechanisms
+ : Life management
+ : Visual communication
+ : Player motivation
+
+ section Game Completion (Lesson 6)
+ Polish & Flow: End conditions
+ : State management
+ : Restart systems
+ : User experience
+
+ section Advanced Features (1 week)
+ Enhancement Skills: Audio integration
+ : Visual effects
+ : Level progression
+ : Performance optimization
+
+ section Professional Development (1 month)
+ Industry Readiness: Framework mastery
+ : Team collaboration
+ : Portfolio development
+ : Community engagement
+
+ section Career Advancement (3 months)
+ Specialization: Advanced game engines
+ : Platform deployment
+ : Monetization strategies
+ : Industry networking
+```
+
+### 🛠️ ملخص أدوات تطوير الألعاب الكاملة الخاصة بك
+
+بعد إكمال سلسلة ألعاب الفضاء هذه بالكامل، أصبحت الآن متقنًا لـ:
+- **هندسة الألعاب**: أنظمة تعتمد على الأحداث، حلقات الألعاب، وإدارة الحالة
+- **برمجة الرسومات**: واجهة Canvas API، عرض الصور المتحركة، والمؤثرات البصرية
+- **أنظمة الإدخال**: التعامل مع لوحة المفاتيح، اكتشاف التصادم، والتحكم التفاعلي
+- **تصميم الألعاب**: ردود فعل اللاعبين، أنظمة التقدم، وآليات الجذب
+- **تحسين الأداء**: العرض الفعال، إدارة الذاكرة، والتحكم في معدل الإطارات
+- **تجربة المستخدم**: التواصل الواضح، التحكم السلس، وتفاصيل الإتقان
+- **أنماط احترافية**: كتابة الكود النظيف، تقنيات التصحيح، وتنظيم المشاريع
+
+**تطبيقات واقعية**: مهاراتك في تطوير الألعاب تنطبق مباشرة على:
+- **تطبيقات الويب التفاعلية**: واجهات ديناميكية وأنظمة الوقت الحقيقي
+- **تصور البيانات**: الرسوم المتحركة التفاعلية والرسوم البيانية
+- **التكنولوجيا التعليمية**: التلعيب وتجارب التعلم الجذابة
+- **تطوير التطبيقات المحمولة**: التفاعلات القائمة على اللمس وتحسين الأداء
+- **برامج المحاكاة**: محركات الفيزياء والنمذجة في الوقت الحقيقي
+- **الصناعات الإبداعية**: الفن التفاعلي، الترفيه، والتجارب الرقمية
+
+**المهارات المهنية المكتسبة**: يمكنك الآن:
+- **تصميم** أنظمة تفاعلية معقدة من البداية
+- **تصحيح الأخطاء** في التطبيقات الوقتية باستخدام نهج منهجي
+- **تحسين** الأداء لتجارب مستخدم سلسة
+- **تصميم** واجهات مستخدم جذابة وأنماط تفاعل
+- **التعاون** بفعالية في المشاريع التقنية مع تنظيم الكود بشكل صحيح
+
+**مفاهيم تطوير الألعاب التي تم إتقانها**:
+- **أنظمة الوقت الحقيقي**: حلقات الألعاب، إدارة معدل الإطارات، والأداء
+- **هندسة تعتمد على الأحداث**: أنظمة مفصولة وتمرير الرسائل
+- **إدارة الحالة**: التعامل مع البيانات المعقدة وإدارة دورة الحياة
+- **برمجة واجهات المستخدم**: رسومات Canvas وتصميم تفاعلي
+- **نظرية تصميم الألعاب**: علم نفس اللاعبين وآليات الجذب
+
+**المستوى التالي**: أنت جاهز لاستكشاف أطر الألعاب المتقدمة، الرسومات ثلاثية الأبعاد، الأنظمة متعددة اللاعبين، أو الانتقال إلى أدوار تطوير الألعاب الاحترافية!
+
+🌟 **إنجاز محقق**: لقد أكملت رحلة تطوير الألعاب بالكامل وبنيت تجربة تفاعلية بجودة احترافية من البداية!
+
+**مرحبًا بك في مجتمع تطوير الألعاب!** 🎮✨
+
+## تحدي GitHub Copilot Agent 🚀
+
+استخدم وضع Agent لإكمال التحدي التالي:
+
+**الوصف:** قم بتحسين لعبة الفضاء من خلال تنفيذ نظام تقدم المستويات مع زيادة الصعوبة والميزات الإضافية.
+
+**المهمة:** أنشئ نظام لعبة فضاء متعدد المستويات حيث يحتوي كل مستوى على المزيد من سفن الأعداء مع زيادة السرعة والصحة. أضف مضاعف نقاط يزيد مع كل مستوى، وقم بتنفيذ ميزات إضافية (مثل إطلاق النار السريع أو الدرع) تظهر عشوائيًا عند تدمير الأعداء. قم بتضمين مكافأة إكمال المستوى وعرض المستوى الحالي على الشاشة بجانب النقاط الحالية والأرواح.
+
+تعرف على المزيد حول [وضع Agent](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
+
+## 🚀 تحدي تحسين اختياري
+
+**أضف الصوت إلى لعبتك**: قم بتحسين تجربة اللعب من خلال تنفيذ المؤثرات الصوتية! ضع في اعتبارك إضافة صوتيات لـ:
+
+- **إطلاق الليزر** عند إطلاق اللاعب
+- **تدمير الأعداء** عند ضرب السفن
+- **ضرر البطل** عند تلقي اللاعب ضربات
+- **موسيقى النصر** عند الفوز باللعبة
+- **صوت الهزيمة** عند خسارة اللعبة
+
+**مثال على تنفيذ الصوتيات:**
+
+```javascript
+// Create audio objects
+const laserSound = new Audio('assets/laser.wav');
+const explosionSound = new Audio('assets/explosion.wav');
+
+// Play sounds during game events
+function playLaserSound() {
+ laserSound.currentTime = 0; // Reset to beginning
+ laserSound.play();
+}
+```
+
+**ما تحتاج إلى معرفته:**
+- **إنشاء** كائنات صوتية لمؤثرات صوتية مختلفة
+- **إعادة ضبط** `currentTime` للسماح بتأثيرات صوتية سريعة
+- **التعامل مع** سياسات التشغيل التلقائي للمتصفح من خلال تشغيل الصوتيات عبر تفاعلات المستخدم
+- **إدارة** حجم الصوت وتوقيته لتحسين تجربة اللعبة
+
+> 💡 **مصدر تعليمي**: استكشف [صندوق الصوتيات](https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_audio_play) لتتعلم المزيد عن تنفيذ الصوتيات في ألعاب JavaScript.
+
+## اختبار ما بعد المحاضرة
+
+[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/40)
+
+## المراجعة والدراسة الذاتية
-**ما الذي يحدث هنا:**
-- **تصادم الليزر مع العدو**: يختفي كلاهما، تحصل على نقاط، ونتحقق إذا كنت قد فزت
-- **تصادم العدو معك**: تخسر حياة، ونتحقق إذا كنت لا تزال على قيد الحياة
-- **ترتيب ذكي**: نتحقق من الهزيمة أولاً (لا أحد يريد الفوز والخسارة في نفس الوقت!)
-- **ردود فعل فورية**: بمجرد حدوث شيء مهم، تعرف اللعبة بذلك
+مهمتك هي إنشاء نموذج لعبة جديد، لذا استكشف بعض الألعاب المثيرة للاهتمام لترى نوع اللعبة التي قد ترغب في بنائها.
-### الخطوة 3: إضافة ثوابت رسائل جديدة
+## المهمة
-ستحتاج إلى إضافة أنواع رسائل جديدة إلى كائن الثوابت `Messages`. هذه الثو
+[قم ببناء نموذج لعبة](assignment.md)
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-bank-project/1-template-route/README.md b/translations/ar/7-bank-project/1-template-route/README.md
index 040059077a..b6e533a480 100644
--- a/translations/ar/7-bank-project/1-template-route/README.md
+++ b/translations/ar/7-bank-project/1-template-route/README.md
@@ -1,47 +1,94 @@
# بناء تطبيق مصرفي الجزء الأول: قوالب HTML والمسارات في تطبيق ويب
-عندما قامت حاسوب التوجيه الخاص بـ Apollo 11 بالتنقل إلى القمر في عام 1969، كان عليه التبديل بين برامج مختلفة دون إعادة تشغيل النظام بالكامل. تعمل تطبيقات الويب الحديثة بطريقة مشابهة – فهي تغير ما تراه دون إعادة تحميل كل شيء من البداية. هذا يخلق تجربة سلسة وسريعة يتوقعها المستخدمون اليوم.
+```mermaid
+journey
+ title Your Banking App Development Journey
+ section SPA Fundamentals
+ Understand single-page apps: 3: Student
+ Learn template concepts: 4: Student
+ Master DOM manipulation: 4: Student
+ section Routing Systems
+ Implement client-side routing: 4: Student
+ Handle browser history: 5: Student
+ Create navigation systems: 5: Student
+ section Professional Patterns
+ Build modular architecture: 5: Student
+ Apply best practices: 5: Student
+ Create user experiences: 5: Student
+```
+
+عندما قامت حاسوب التوجيه الخاص بـ Apollo 11 بالتنقل إلى القمر في عام 1969، كان عليه التبديل بين برامج مختلفة دون إعادة تشغيل النظام بالكامل. تعمل تطبيقات الويب الحديثة بطريقة مشابهة - فهي تغير ما تراه دون إعادة تحميل كل شيء من البداية. هذا يخلق تجربة سلسة وسريعة يتوقعها المستخدمون اليوم.
-على عكس المواقع التقليدية التي تعيد تحميل الصفحات بالكامل لكل تفاعل، تقوم تطبيقات الويب الحديثة بتحديث الأجزاء التي تحتاج إلى تغيير فقط. هذا النهج، مثلما يقوم مركز التحكم بالتبديل بين شاشات مختلفة مع الحفاظ على الاتصال المستمر، يخلق تلك التجربة السلسة التي اعتدنا عليها.
+على عكس المواقع التقليدية التي تعيد تحميل الصفحات بالكامل مع كل تفاعل، تقوم تطبيقات الويب الحديثة بتحديث الأجزاء التي تحتاج إلى تغيير فقط. هذا النهج، مثلما يقوم مركز التحكم بالتبديل بين شاشات مختلفة مع الحفاظ على التواصل المستمر، يخلق تلك التجربة السلسة التي اعتدنا عليها.
-إليك ما يجعل الفرق كبيرًا جدًا:
+إليك ما يجعل الفرق كبيرًا:
| التطبيقات التقليدية متعددة الصفحات | التطبيقات الحديثة ذات الصفحة الواحدة |
-|------------------------------------|------------------------------------|
-| **التنقل** | إعادة تحميل الصفحة بالكامل لكل شاشة | تبديل المحتوى بشكل فوري |
-| **الأداء** | أبطأ بسبب تنزيل HTML بالكامل | أسرع مع تحديثات جزئية |
+|----------------------------|-------------------------|
+| **التنقل** | إعادة تحميل الصفحة بالكامل لكل شاشة | تبديل المحتوى الفوري |
+| **الأداء** | أبطأ بسبب تنزيل HTML بالكامل | أسرع مع التحديثات الجزئية |
| **تجربة المستخدم** | وميض الصفحات المزعج | انتقالات سلسة تشبه التطبيقات |
| **مشاركة البيانات** | صعوبة بين الصفحات | إدارة الحالة بسهولة |
-| **التطوير** | ملفات HTML متعددة تحتاج إلى صيانة | ملف HTML واحد مع قوالب ديناميكية |
+| **التطوير** | ملفات HTML متعددة للصيانة | HTML واحد مع قوالب ديناميكية |
**فهم التطور:**
-- **التطبيقات التقليدية** تتطلب طلبات من الخادم لكل عملية تنقل
+- **التطبيقات التقليدية** تتطلب طلبات خادم لكل إجراء تنقل
- **التطبيقات الحديثة ذات الصفحة الواحدة (SPAs)** يتم تحميلها مرة واحدة وتحديث المحتوى ديناميكيًا باستخدام JavaScript
- **توقعات المستخدمين** الآن تفضل التفاعلات الفورية والسلسة
-- **فوائد الأداء** تشمل تقليل استهلاك النطاق الترددي واستجابات أسرع
+- **فوائد الأداء** تشمل تقليل عرض النطاق الترددي واستجابات أسرع
-في هذا الدرس، سنقوم ببناء تطبيق مصرفي يحتوي على شاشات متعددة تتدفق معًا بسلاسة. مثلما يستخدم العلماء أدوات معيارية يمكن إعادة تكوينها لتجارب مختلفة، سنستخدم قوالب HTML كعناصر قابلة لإعادة الاستخدام يمكن عرضها حسب الحاجة.
+في هذا الدرس، سنقوم ببناء تطبيق مصرفي يحتوي على شاشات متعددة تتدفق بسلاسة معًا. مثلما يستخدم العلماء أدوات معيارية يمكن إعادة تكوينها لتجارب مختلفة، سنستخدم قوالب HTML كعناصر قابلة لإعادة الاستخدام يمكن عرضها حسب الحاجة.
-ستعمل مع قوالب HTML (مخططات قابلة لإعادة الاستخدام لشاشات مختلفة)، توجيه JavaScript (النظام الذي يبدل بين الشاشات)، وواجهة برمجة التطبيقات الخاصة بتاريخ المتصفح (التي تحافظ على عمل زر الرجوع كما هو متوقع). هذه هي نفس التقنيات الأساسية التي تستخدمها أطر العمل مثل React، Vue، وAngular.
+ستعمل مع قوالب HTML (مخططات قابلة لإعادة الاستخدام لشاشات مختلفة)، توجيه JavaScript (النظام الذي يبدل بين الشاشات)، وواجهة برمجة تطبيقات تاريخ المتصفح (التي تحافظ على عمل زر الرجوع كما هو متوقع). هذه هي نفس التقنيات الأساسية التي تستخدمها أطر العمل مثل React، Vue، وAngular.
-بحلول النهاية، سيكون لديك تطبيق مصرفي يعمل يوضح مبادئ التطبيقات ذات الصفحة الواحدة بشكل احترافي.
+بحلول النهاية، سيكون لديك تطبيق مصرفي يعمل يوضح مبادئ تطبيقات الصفحة الواحدة الاحترافية.
+
+```mermaid
+mindmap
+ root((Single-Page Applications))
+ Architecture
+ Template System
+ Client-side Routing
+ State Management
+ Event Handling
+ Templates
+ Reusable Components
+ Dynamic Content
+ DOM Manipulation
+ Content Switching
+ Routing
+ URL Management
+ History API
+ Navigation Logic
+ Browser Integration
+ User Experience
+ Fast Navigation
+ Smooth Transitions
+ Consistent State
+ Modern Interactions
+ Performance
+ Reduced Server Requests
+ Faster Page Transitions
+ Efficient Resource Usage
+ Better Responsiveness
+```
## اختبار ما قبل المحاضرة
[اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/web/quiz/41)
-### ما ستحتاجه
+### ما الذي ستحتاجه
-سنحتاج إلى خادم ويب محلي لاختبار تطبيقنا المصرفي – لا تقلق، الأمر أسهل مما يبدو! إذا لم يكن لديك واحد مثبت بالفعل، فقط قم بتثبيت [Node.js](https://nodejs.org) وقم بتشغيل `npx lite-server` من مجلد المشروع الخاص بك. هذا الأمر المفيد يقوم بتشغيل خادم محلي ويفتح تطبيقك تلقائيًا في المتصفح.
+سنحتاج إلى خادم ويب محلي لاختبار تطبيقنا المصرفي - لا تقلق، الأمر أسهل مما يبدو! إذا لم يكن لديك واحد مثبت بالفعل، فقط قم بتثبيت [Node.js](https://nodejs.org) وقم بتشغيل `npx lite-server` من مجلد المشروع الخاص بك. هذا الأمر المفيد يقوم بتشغيل خادم محلي ويفتح تطبيقك تلقائيًا في المتصفح.
### التحضير
@@ -62,9 +109,9 @@ CO_OP_TRANSLATOR_METADATA:
```
**إليك ما يوفره هذا القالب الأساسي:**
-- **يحدد** هيكل مستند HTML5 مع إعلان DOCTYPE الصحيح
+- **يحدد** هيكل مستند HTML5 مع إعلان DOCTYPE المناسب
- **يهيئ** ترميز الأحرف كـ UTF-8 لدعم النصوص الدولية
-- **يمكن** التصميم المتجاوب باستخدام علامة meta الخاصة بالعرض لتوافق الأجهزة المحمولة
+- **يمكن** التصميم المتجاوب مع علامة meta الخاصة بالعرض لتوافق الأجهزة المحمولة
- **يضع** عنوانًا وصفيًا يظهر في علامة تبويب المتصفح
- **ينشئ** قسمًا نظيفًا للجسم حيث سنبني تطبيقنا
@@ -87,20 +134,38 @@ CO_OP_TRANSLATOR_METADATA:
## قوالب HTML
-تحل القوالب مشكلة أساسية في تطوير الويب. عندما اخترع غوتنبرغ الطباعة بالحروف المتحركة في الأربعينيات من القرن الخامس عشر، أدرك أنه بدلاً من نحت صفحات كاملة، يمكنه إنشاء كتل حروف قابلة لإعادة الاستخدام وترتيبها حسب الحاجة. تعمل قوالب HTML على نفس المبدأ – بدلاً من إنشاء ملفات HTML منفصلة لكل شاشة، تقوم بتحديد هياكل قابلة لإعادة الاستخدام يمكن عرضها عند الحاجة.
+تحل القوالب مشكلة أساسية في تطوير الويب. عندما اخترع غوتنبرغ الطباعة بالحروف المتحركة في الأربعينيات من القرن الخامس عشر، أدرك أنه بدلاً من نحت صفحات كاملة، يمكنه إنشاء كتل حروف قابلة لإعادة الاستخدام وترتيبها حسب الحاجة. تعمل قوالب HTML على نفس المبدأ - بدلاً من إنشاء ملفات HTML منفصلة لكل شاشة، تقوم بتحديد هياكل قابلة لإعادة الاستخدام يمكن عرضها عند الحاجة.
+
+```mermaid
+flowchart TD
+ A["📋 Template Definition"] --> B["💬 Hidden in DOM"]
+ B --> C["🔍 JavaScript Finds Template"]
+ C --> D["📋 Clone Template Content"]
+ D --> E["🔗 Attach to Visible DOM"]
+ E --> F["👁️ User Sees Content"]
+
+ G["Login Template"] --> A
+ H["Dashboard Template"] --> A
+ I["Future Templates"] --> A
+
+ style A fill:#e3f2fd
+ style D fill:#e8f5e8
+ style F fill:#fff3e0
+ style B fill:#f3e5f5
+```
-فكر في القوالب كمخططات لأجزاء مختلفة من تطبيقك. تمامًا كما يقوم المهندس المعماري بإنشاء مخطط واحد ويستخدمه عدة مرات بدلاً من إعادة رسم غرف متطابقة، نقوم بإنشاء القوالب مرة واحدة ونستخدمها حسب الحاجة. يحتفظ المتصفح بهذه القوالب مخفية حتى يقوم JavaScript بتنشيطها.
+فكر في القوالب كمخططات لأجزاء مختلفة من تطبيقك. تمامًا كما يقوم المهندس المعماري بإنشاء مخطط واحد ويستخدمه عدة مرات بدلاً من إعادة رسم غرف متطابقة، نقوم بإنشاء القوالب مرة واحدة ونستخدمها عند الحاجة. يحتفظ المتصفح بهذه القوالب مخفية حتى يقوم JavaScript بتنشيطها.
إذا كنت تريد إنشاء شاشات متعددة لصفحة ويب، فإن أحد الحلول هو إنشاء ملف HTML لكل شاشة تريد عرضها. ومع ذلك، يأتي هذا الحل مع بعض الإزعاج:
- يجب عليك إعادة تحميل HTML بالكامل عند تبديل الشاشة، مما قد يكون بطيئًا.
- من الصعب مشاركة البيانات بين الشاشات المختلفة.
-نهج آخر هو أن يكون لديك ملف HTML واحد فقط، وتحديد قوالب [HTML](https://developer.mozilla.org/docs/Web/HTML/Element/template) متعددة باستخدام عنصر ``. القالب هو كتلة HTML قابلة لإعادة الاستخدام لا يتم عرضها بواسطة المتصفح، ويجب أن يتم إنشاؤها أثناء وقت التشغيل باستخدام JavaScript.
+نهج آخر هو وجود ملف HTML واحد فقط، وتحديد قوالب [HTML](https://developer.mozilla.org/docs/Web/HTML/Element/template) متعددة باستخدام عنصر ``. القالب هو كتلة HTML قابلة لإعادة الاستخدام لا يتم عرضها بواسطة المتصفح، ويجب أن يتم تفعيلها أثناء وقت التشغيل باستخدام JavaScript.
-### لنبدأ البناء
+### لنقم ببنائه
-سنقوم بإنشاء تطبيق مصرفي يحتوي على شاشتين رئيسيتين: صفحة تسجيل الدخول ولوحة التحكم. أولاً، دعنا نضيف عنصرًا نائبًا إلى جسم HTML – هذا هو المكان الذي ستظهر فيه جميع شاشاتنا المختلفة:
+سنقوم بإنشاء تطبيق مصرفي يحتوي على شاشتين رئيسيتين: صفحة تسجيل الدخول ولوحة التحكم. أولاً، دعنا نضيف عنصرًا نائبًا إلى جسم HTML الخاص بنا - هذا هو المكان الذي ستظهر فيه جميع شاشاتنا المختلفة:
```html
Loading...
@@ -108,11 +173,11 @@ CO_OP_TRANSLATOR_METADATA:
**فهم هذا العنصر النائب:**
- **ينشئ** حاوية مع المعرف "app" حيث سيتم عرض جميع الشاشات
-- **يعرض** رسالة تحميل حتى يقوم JavaScript بتهيئة الشاشة الأولى
+- **يعرض** رسالة تحميل حتى يقوم JavaScript بتشغيل الشاشة الأولى
- **يوفر** نقطة تركيب واحدة لمحتوانا الديناميكي
- **يمكن** استهدافه بسهولة من JavaScript باستخدام `document.getElementById()`
-> 💡 **نصيحة احترافية**: نظرًا لأن محتوى هذا العنصر سيتم استبداله، يمكننا وضع رسالة تحميل أو مؤشر سيتم عرضه أثناء تحميل التطبيق.
+> 💡 **نصيحة احترافية**: نظرًا لأن محتوى هذا العنصر سيتم استبداله، يمكننا وضع رسالة تحميل أو مؤشر يتم عرضه أثناء تحميل التطبيق.
بعد ذلك، دعنا نضيف أسفل القالب HTML لصفحة تسجيل الدخول. في الوقت الحالي، سنضع فقط عنوانًا وقسمًا يحتوي على رابط سنستخدمه للتنقل.
@@ -162,17 +227,33 @@ CO_OP_TRANSLATOR_METADATA:
```
-**دعونا نفهم كل جزء من هذه اللوحة:**
-- **يهيكل** الصفحة باستخدام عنصر `` دلالي يحتوي على التنقل
+**لنقم بفهم كل جزء من هذه اللوحة:**
+- **يهيكل** الصفحة بعنصر `` دلالي يحتوي على التنقل
- **يعرض** عنوان التطبيق بشكل متسق عبر الشاشات للعلامة التجارية
-- **يوفر** رابط تسجيل الخروج الذي يعيد المستخدم إلى شاشة تسجيل الدخول
+- **يوفر** رابط تسجيل الخروج الذي يعيد التوجيه إلى شاشة تسجيل الدخول
- **يعرض** الرصيد الحالي للحساب في قسم مخصص
- **ينظم** بيانات المعاملات باستخدام جدول HTML منظم بشكل صحيح
-- **يحدد** رؤوس الجدول لأعمدة التاريخ، الكائن، والمبلغ
+- **يحدد** رؤوس الجدول لأعمدة التاريخ، الموضوع، والمبلغ
- **يترك** جسم الجدول فارغًا لحقن المحتوى الديناميكي لاحقًا
> 💡 **نصيحة احترافية**: عند إنشاء قوالب HTML، إذا كنت تريد رؤية كيف ستبدو، يمكنك تعليق سطور `` و` ` عن طريق إحاطتها بـ ``.
+### 🔄 **تسجيل تربوي**
+**فهم نظام القوالب**: قبل تنفيذ JavaScript، تأكد من فهمك:
+- ✅ كيف تختلف القوالب عن عناصر HTML العادية
+- ✅ لماذا تبقى القوالب مخفية حتى يتم تفعيلها بواسطة JavaScript
+- ✅ أهمية هيكل HTML الدلالي في القوالب
+- ✅ كيف تمكن القوالب مكونات واجهة المستخدم القابلة لإعادة الاستخدام
+
+**اختبار سريع ذاتي**: ماذا يحدث إذا قمت بإزالة علامات `` من حول HTML الخاص بك؟
+*الإجابة: يصبح المحتوى مرئيًا فورًا ويفقد وظيفته كقالب*
+
+**فوائد الهيكلية**: توفر القوالب:
+- **إعادة الاستخدام**: تعريف واحد، حالات متعددة
+- **الأداء**: لا تحليل HTML مكرر
+- **سهولة الصيانة**: هيكل واجهة المستخدم المركزي
+- **المرونة**: تبديل المحتوى الديناميكي
+
✅ لماذا تعتقد أننا نستخدم سمات `id` على القوالب؟ هل يمكننا استخدام شيء آخر مثل الفئات؟
## إحياء القوالب باستخدام JavaScript
@@ -181,9 +262,9 @@ CO_OP_TRANSLATOR_METADATA:
تتبع العملية ثلاث خطوات متسقة تشكل أساس تطوير الويب الحديث. بمجرد فهمك لهذا النمط، ستتعرف عليه عبر العديد من الأطر والمكتبات.
-إذا جربت ملف HTML الحالي في المتصفح، سترى أنه يتوقف عند عرض `Loading...`. هذا لأننا بحاجة إلى إضافة بعض كود JavaScript لإنشاء وعرض قوالب HTML.
+إذا جربت ملف HTML الحالي الخاص بك في المتصفح، سترى أنه يتوقف عند عرض `Loading...`. هذا لأننا بحاجة إلى إضافة بعض كود JavaScript لتفعيل وعرض قوالب HTML.
-إنشاء قالب يتم عادةً في 3 خطوات:
+عادةً ما يتم تفعيل القالب في 3 خطوات:
1. استرجاع عنصر القالب في DOM، على سبيل المثال باستخدام [`document.getElementById`](https://developer.mozilla.org/docs/Web/API/Document/getElementById).
2. نسخ عنصر القالب، باستخدام [`cloneNode`](https://developer.mozilla.org/docs/Web/API/Node/cloneNode).
@@ -216,7 +297,7 @@ flowchart TD
### المهمة
-قم بإنشاء ملف جديد باسم `app.js` في مجلد المشروع الخاص بك واستورد هذا الملف في قسم `` من HTML:
+قم بإنشاء ملف جديد باسم `app.js` في مجلد المشروع الخاص بك وقم باستيراد هذا الملف في قسم `` من HTML الخاص بك:
```html
@@ -224,11 +305,11 @@ flowchart TD
**فهم استيراد هذا السكربت:**
- **يربط** ملف JavaScript بمستند HTML الخاص بنا
-- **يستخدم** السمة `defer` لضمان تشغيل السكربت بعد اكتمال تحليل HTML
+- **يستخدم** سمة `defer` لضمان تشغيل السكربت بعد اكتمال تحليل HTML
- **يمكن** الوصول إلى جميع عناصر DOM لأنها محملة بالكامل قبل تنفيذ السكربت
- **يتبع** أفضل الممارسات الحديثة لتحميل السكربت والأداء
-الآن في `app.js`، سننشئ وظيفة جديدة باسم `updateRoute`:
+الآن في `app.js`، سنقوم بإنشاء وظيفة جديدة `updateRoute`:
```js
function updateRoute(templateId) {
@@ -253,18 +334,35 @@ function updateRoute(templateId) {
updateRoute('login');
```
-**ما يحققه استدعاء هذه الوظيفة:**
-- **ينشط** قالب تسجيل الدخول عن طريق تمرير معرفه كمعامل
+**ما الذي تحققه هذه المكالمة الوظيفية:**
+- **يفعل** قالب تسجيل الدخول عن طريق تمرير معرفه كمعامل
- **يوضح** كيفية التبديل برمجيًا بين شاشات التطبيق المختلفة
- **يعرض** شاشة تسجيل الدخول بدلاً من رسالة "Loading..."
-✅ ما هو الغرض من هذا الكود `app.innerHTML = '';`؟ ماذا يحدث بدونه؟
+✅ ما الغرض من هذا الكود `app.innerHTML = '';`؟ ماذا يحدث بدونه؟
## إنشاء المسارات
-التوجيه يتعلق أساسًا بربط عناوين URL بالمحتوى الصحيح. فكر في كيفية استخدام مشغلي الهاتف الأوائل لوحات التبديل لتوصيل المكالمات – كانوا يأخذون طلبًا واردًا ويوجهونه إلى الوجهة الصحيحة. يعمل التوجيه في الويب بشكل مشابه، حيث يأخذ طلب عنوان URL ويحدد المحتوى الذي سيتم عرضه.
+التوجيه يتعلق أساسًا بربط عناوين URL بالمحتوى الصحيح. فكر في كيفية استخدام مشغلي الهاتف الأوائل لوحات التبديل لتوصيل المكالمات - كانوا يأخذون طلبًا واردًا ويوجهونه إلى الوجهة الصحيحة. يعمل توجيه الويب بطريقة مشابهة، حيث يأخذ طلب عنوان URL ويحدد المحتوى الذي سيتم عرضه.
-تقليديًا، كانت الخوادم تقوم بذلك عن طريق تقديم ملفات HTML مختلفة لعناوين URL مختلفة. بما أننا نبني تطبيقًا ذو صفحة واحدة، نحتاج إلى التعامل مع هذا التوجيه بأنفسنا باستخدام JavaScript. هذا النهج يمنحنا مزيدًا من التحكم في تجربة المستخدم والأداء.
+```mermaid
+flowchart LR
+ A["🌐 URL Path /dashboard"] --> B["🗺️ Routes Object Lookup"]
+ B --> C["🎯 Template ID 'dashboard'"]
+ C --> D["📌 Find Template getElementById"]
+ D --> E["👁️ Display Screen Clone & Append"]
+
+ F["📍 /login"] --> G["🎯 'login'"]
+ H["📍 /unknown"] --> I["❌ Not Found"]
+ I --> J["🔄 Redirect to /login"]
+
+ style B fill:#e3f2fd
+ style E fill:#e8f5e8
+ style I fill:#ffebee
+ style J fill:#fff3e0
+```
+
+تقليديًا، كانت الخوادم تقوم بذلك عن طريق تقديم ملفات HTML مختلفة لعناوين URL مختلفة. نظرًا لأننا نبني تطبيق صفحة واحدة، نحتاج إلى التعامل مع هذا التوجيه بأنفسنا باستخدام JavaScript. هذا النهج يمنحنا مزيدًا من التحكم في تجربة المستخدم والأداء.
```mermaid
flowchart LR
@@ -284,12 +382,12 @@ flowchart LR
```
**فهم تدفق التوجيه:**
-- **تغييرات URL** تؤدي إلى بحث في تكوين المسارات لدينا
+- **تغييرات URL** تؤدي إلى البحث في تكوين المسارات لدينا
- **المسارات الصالحة** ترتبط بمعرفات قوالب محددة للعرض
- **المسارات غير الصالحة** تؤدي إلى سلوك احتياطي لمنع الحالات المعطلة
- **عرض القالب** يتبع عملية الخطوات الثلاث التي تعلمناها سابقًا
-عند الحديث عن تطبيق ويب، نسمي *التوجيه* النية لربط **عناوين URL** بشاشات محددة يجب عرضها. في موقع ويب يحتوي على ملفات HTML متعددة، يتم ذلك تلقائيًا حيث تنعكس مسارات الملفات على عنوان URL. على سبيل المثال، مع هذه الملفات في مجلد المشروع الخاص بك:
+عند الحديث عن تطبيق ويب، نسمي *التوجيه* النية لرسم **عناوين URL** لشاشات محددة يجب عرضها. في موقع ويب يحتوي على ملفات HTML متعددة، يتم ذلك تلقائيًا حيث تنعكس مسارات الملفات على عنوان URL. على سبيل المثال، مع هذه الملفات في مجلد المشروع الخاص بك:
```
mywebsite/index.html
@@ -305,7 +403,7 @@ https://site.com/login.html --> mywebsite/login.html
https://site.com/admin/ --> mywebsite/admin/index.html
```
-ومع ذلك، بالنسبة لتطبيقنا، نحن نستخدم ملف HTML واحد يحتوي على جميع الشاشات لذا لن يساعدنا هذا السلوك الافتراضي. علينا إنشاء هذا التعيين يدويًا وتحديث القالب المعروض باستخدام JavaScript.
+ومع ذلك، بالنسبة لتطبيق الويب الخاص بنا، نحن نستخدم ملف HTML واحد يحتوي على جميع الشاشات لذا لن يساعدنا هذا السلوك الافتراضي. علينا إنشاء هذا التعيين يدويًا وتحديث القالب المعروض باستخدام JavaScript.
### المهمة
@@ -320,11 +418,10 @@ const routes = {
**فهم تكوين المسارات هذا:**
- **يحدد** تعيينًا بين مسارات URL ومعرفات القوالب
-- **يستخدم** صياغة الكائن حيث تكون المفاتيح هي مسارات URL والقيم تحتوي على معلومات القالب
+- **يستخدم** صيغة الكائن حيث تكون المفاتيح مسارات URL والقيم تحتوي على معلومات القالب
- **يمكن** البحث بسهولة عن القالب الذي سيتم عرضه لأي عنوان URL معين
- **يوفر** هيكلًا قابلًا للتوسع لإضافة مسارات جديدة في المستقبل
-
-الآن دعنا نعدل قليلاً وظيفة `updateRoute`. بدلاً من تمرير معرف القالب مباشرة كمعامل، نريد استرجاعه من خلال النظر أولاً إلى عنوان URL الحالي، ثم استخدام خريطتنا للحصول على قيمة معرف القالب المقابلة. يمكننا استخدام [`window.location.pathname`](https://developer.mozilla.org/docs/Web/API/Location/pathname) للحصول على قسم المسار فقط من عنوان URL.
+الآن دعونا نعدل قليلاً وظيفة `updateRoute`. بدلاً من تمرير `templateId` مباشرة كمعامل، نريد استرجاعه أولاً من خلال النظر إلى عنوان URL الحالي، ثم استخدام الخريطة الخاصة بنا للحصول على قيمة معرف القالب المقابلة. يمكننا استخدام [`window.location.pathname`](https://developer.mozilla.org/docs/Web/API/Location/pathname) للحصول فقط على قسم المسار من عنوان URL.
```js
function updateRoute() {
@@ -340,49 +437,100 @@ function updateRoute() {
```
**تفصيل ما يحدث هنا:**
-- **يستخرج** المسار الحالي من عنوان URL للمتصفح باستخدام `window.location.pathname`
+- **يستخرج** المسار الحالي من عنوان URL الخاص بالمتصفح باستخدام `window.location.pathname`
- **يبحث** عن تكوين المسار المقابل في كائن المسارات الخاص بنا
- **يسترجع** معرف القالب من تكوين المسار
- **يتبع** نفس عملية عرض القالب كما كان من قبل
- **ينشئ** نظامًا ديناميكيًا يستجيب لتغييرات عنوان URL
-هنا قمنا بتعيين المسارات التي أعلناها إلى القالب المقابل. يمكنك تجربتها للتأكد من أنها تعمل بشكل صحيح عن طريق تغيير عنوان URL يدويًا في المتصفح.
+هنا قمنا بربط المسارات التي أعلنا عنها بالقالب المقابل. يمكنك تجربته للتأكد من أنه يعمل بشكل صحيح عن طريق تغيير عنوان URL يدويًا في متصفحك.
+
✅ ماذا يحدث إذا أدخلت مسارًا غير معروف في عنوان URL؟ كيف يمكننا حل هذه المشكلة؟
## إضافة التنقل
-مع إنشاء التوجيه، يحتاج المستخدمون إلى طريقة للتنقل عبر التطبيق. تقوم المواقع التقليدية بإعادة تحميل الصفحات بالكامل عند النقر على الروابط، لكننا نريد تحديث عنوان URL والمحتوى دون إعادة تحميل الصفحة. هذا يخلق تجربة أكثر سلاسة تشبه كيفية تبديل التطبيقات المكتبية بين وجهات النظر المختلفة.
+مع إنشاء التوجيه، يحتاج المستخدمون إلى طريقة للتنقل عبر التطبيق. تعيد المواقع التقليدية تحميل الصفحات بالكامل عند النقر على الروابط، لكننا نريد تحديث كل من عنوان URL والمحتوى دون إعادة تحميل الصفحات. هذا يخلق تجربة أكثر سلاسة تشبه كيفية تبديل التطبيقات المكتبية بين وجهات النظر المختلفة.
+
+نحتاج إلى تنسيق شيئين: تحديث عنوان URL الخاص بالمتصفح حتى يتمكن المستخدمون من وضع إشارات مرجعية للصفحات ومشاركة الروابط، وعرض المحتوى المناسب. عندما يتم تنفيذ ذلك بشكل صحيح، فإنه يخلق التنقل السلس الذي يتوقعه المستخدمون من التطبيقات الحديثة.
-نحتاج إلى تنسيق شيئين: تحديث عنوان URL في المتصفح حتى يتمكن المستخدمون من حفظ الصفحات ومشاركة الروابط، وعرض المحتوى المناسب. عند التنفيذ بشكل صحيح، يخلق هذا التنقل السلس الذي يتوقعه المستخدمون من التطبيقات الحديثة.
+```mermaid
+sequenceDiagram
+ participant User
+ participant Browser
+ participant App
+ participant Template
+
+ User->>Browser: Clicks "Login" link
+ Browser->>App: onclick event triggered
+ App->>App: preventDefault() & navigate('/dashboard')
+ App->>Browser: history.pushState('/dashboard')
+ Browser->>Browser: URL updates to /dashboard
+ App->>App: updateRoute() called
+ App->>Template: Find & clone dashboard template
+ Template->>App: Return cloned content
+ App->>Browser: Replace app content with template
+ Browser->>User: Display dashboard screen
+
+ Note over User,Template: User clicks browser back button
+
+ User->>Browser: Clicks back button
+ Browser->>Browser: History moves back to /login
+ Browser->>App: popstate event fired
+ App->>App: updateRoute() called automatically
+ App->>Template: Find & clone login template
+ Template->>App: Return cloned content
+ App->>Browser: Replace app content with template
+ Browser->>User: Display login screen
+```
-> 🏗️ **نظرة معمارية**: مكونات نظام التنقل
+### 🔄 **مراجعة تعليمية**
+**هيكلية تطبيق الصفحة الواحدة**: تحقق من فهمك للنظام الكامل:
+- ✅ كيف يختلف التوجيه على جانب العميل عن التوجيه التقليدي على جانب الخادم؟
+- ✅ لماذا تعتبر واجهة برمجة التطبيقات History ضرورية للتنقل الصحيح في تطبيق الصفحة الواحدة؟
+- ✅ كيف تمكن القوالب المحتوى الديناميكي دون إعادة تحميل الصفحات؟
+- ✅ ما هو دور معالجة الأحداث في اعتراض التنقل؟
+
+**تكامل النظام**: يوضح تطبيق الصفحة الواحدة الخاص بك:
+- **إدارة القوالب**: مكونات واجهة مستخدم قابلة لإعادة الاستخدام مع محتوى ديناميكي
+- **التوجيه على جانب العميل**: إدارة عنوان URL دون طلبات الخادم
+- **هيكلية تعتمد على الأحداث**: التنقل التفاعلي وتفاعلات المستخدم
+- **تكامل المتصفح**: دعم صحيح لأزرار الرجوع/التقدم
+- **تحسين الأداء**: انتقالات سريعة وتقليل تحميل الخادم
+
+**أنماط احترافية**: لقد قمت بتنفيذ:
+- **فصل النموذج والعرض**: فصل القوالب عن منطق التطبيق
+- **إدارة الحالة**: مزامنة حالة عنوان URL مع المحتوى المعروض
+- **تحسين تدريجي**: تعزيز JavaScript لوظائف HTML الأساسية
+- **تجربة المستخدم**: تنقل سلس يشبه التطبيقات دون إعادة تحميل الصفحات
+
+> � **رؤية هيكلية**: مكونات نظام التنقل
>
-> **ما الذي تقوم ببنائه:**
+> **ما تقوم ببنائه:**
> - **🔄 إدارة عنوان URL**: تحديث شريط عنوان المتصفح دون إعادة تحميل الصفحات
> - **📋 نظام القوالب**: تبديل المحتوى ديناميكيًا بناءً على المسار الحالي
> - **📚 تكامل التاريخ**: الحفاظ على وظيفة أزرار الرجوع/التقدم في المتصفح
-> - **🛡️ معالجة الأخطاء**: توفير حلول بديلة للمسارات غير الصالحة أو المفقودة
+> - **🛡️ معالجة الأخطاء**: حلول مرنة للمسارات غير الصالحة أو المفقودة
>
> **كيف تعمل المكونات معًا:**
-> - **الاستماع** إلى أحداث التنقل (النقرات، تغييرات التاريخ)
-> - **التحديث** لعنوان URL باستخدام واجهة برمجة التطبيقات History API
-> - **عرض** القالب المناسب للمسار الجديد
-> - **الحفاظ** على تجربة مستخدم سلسة طوال الوقت
+> - **يستمع** لأحداث التنقل (النقرات، تغييرات التاريخ)
+> - **يحدث** عنوان URL باستخدام واجهة برمجة التطبيقات History
+> - **يعرض** القالب المناسب للمسار الجديد
+> - **يحافظ** على تجربة مستخدم سلسة طوال الوقت
-الخطوة التالية لتطبيقنا هي إضافة إمكانية التنقل بين الصفحات دون الحاجة إلى تغيير عنوان URL يدويًا. هذا يعني شيئين:
+الخطوة التالية لتطبيقنا هي إضافة إمكانية التنقل بين الصفحات دون الحاجة إلى تغيير عنوان URL يدويًا. يتطلب ذلك شيئين:
1. تحديث عنوان URL الحالي
2. تحديث القالب المعروض بناءً على عنوان URL الجديد
لقد قمنا بالفعل بمعالجة الجزء الثاني باستخدام وظيفة `updateRoute`، لذا علينا معرفة كيفية تحديث عنوان URL الحالي.
-سنحتاج إلى استخدام JavaScript وبشكل أكثر تحديدًا [`history.pushState`](https://developer.mozilla.org/docs/Web/API/History/pushState) التي تسمح بتحديث عنوان URL وإنشاء إدخال جديد في سجل التصفح، دون إعادة تحميل HTML.
+سنحتاج إلى استخدام JavaScript وبشكل أكثر تحديدًا [`history.pushState`](https://developer.mozilla.org/docs/Web/API/History/pushState) الذي يسمح بتحديث عنوان URL وإنشاء إدخال جديد في سجل التصفح، دون إعادة تحميل HTML.
-> ⚠️ **ملاحظة مهمة**: بينما يمكن استخدام عنصر HTML الرابط [``](https://developer.mozilla.org/docs/Web/HTML/Element/a) بمفرده لإنشاء روابط إلى عناوين URL مختلفة، فإنه سيؤدي إلى إعادة تحميل HTML افتراضيًا. من الضروري منع هذا السلوك عند التعامل مع التوجيه باستخدام JavaScript مخصص، باستخدام وظيفة preventDefault() على حدث النقر.
+> ⚠️ **ملاحظة مهمة**: بينما يمكن استخدام عنصر HTML الرابط [` `](https://developer.mozilla.org/docs/Web/HTML/Element/a) بمفرده لإنشاء روابط تشعبية لعناوين URL مختلفة، فإنه سيجعل المتصفح يعيد تحميل HTML افتراضيًا. من الضروري منع هذا السلوك عند التعامل مع التوجيه باستخدام JavaScript مخصص، باستخدام وظيفة preventDefault() على حدث النقر.
### المهمة
-لنقم بإنشاء وظيفة جديدة يمكننا استخدامها للتنقل في تطبيقنا:
+دعونا ننشئ وظيفة جديدة يمكننا استخدامها للتنقل في تطبيقنا:
```js
function navigate(path) {
@@ -392,14 +540,14 @@ function navigate(path) {
```
**فهم وظيفة التنقل هذه:**
-- **تحديث** عنوان URL للمتصفح إلى المسار الجديد باستخدام `history.pushState`
-- **إضافة** إدخال جديد إلى سجل تاريخ المتصفح لدعم أزرار الرجوع/التقدم بشكل صحيح
-- **تشغيل** وظيفة `updateRoute()` لعرض القالب المقابل
-- **الحفاظ** على تجربة التطبيق أحادي الصفحة دون إعادة تحميل الصفحات
+- **يحدث** عنوان URL الخاص بالمتصفح إلى المسار الجديد باستخدام `history.pushState`
+- **يضيف** إدخالًا جديدًا إلى سجل التصفح الخاص بالمتصفح لدعم أزرار الرجوع/التقدم بشكل صحيح
+- **يحفز** وظيفة `updateRoute()` لعرض القالب المقابل
+- **يحافظ** على تجربة تطبيق الصفحة الواحدة دون إعادة تحميل الصفحات
-تقوم هذه الطريقة أولاً بتحديث عنوان URL الحالي بناءً على المسار المعطى، ثم تحديث القالب. الخاصية `window.location.origin` تُرجع جذر عنوان URL، مما يسمح لنا بإعادة بناء عنوان URL كامل من مسار معين.
+تقوم هذه الطريقة أولاً بتحديث عنوان URL الحالي بناءً على المسار المعطى، ثم تحديث القالب. الخاصية `window.location.origin` تعيد جذر عنوان URL، مما يسمح لنا بإعادة بناء عنوان URL كامل من مسار معين.
-الآن بعد أن لدينا هذه الوظيفة، يمكننا معالجة المشكلة التي لدينا إذا لم يتطابق المسار مع أي مسار محدد. سنقوم بتعديل وظيفة `updateRoute` بإضافة حل بديل إلى أحد المسارات الموجودة إذا لم نتمكن من العثور على تطابق.
+الآن بعد أن لدينا هذه الوظيفة، يمكننا معالجة المشكلة التي لدينا إذا لم يتطابق مسار مع أي مسار محدد. سنقوم بتعديل وظيفة `updateRoute` بإضافة حل احتياطي إلى أحد المسارات الموجودة إذا لم نتمكن من العثور على تطابق.
```js
function updateRoute() {
@@ -419,14 +567,14 @@ function updateRoute() {
```
**نقاط رئيسية يجب تذكرها:**
-- **التحقق** مما إذا كان هناك مسار موجود للمسار الحالي
-- **إعادة التوجيه** إلى صفحة تسجيل الدخول عند الوصول إلى مسار غير صالح
-- **توفير** آلية بديلة تمنع التنقل المعطل
-- **ضمان** أن المستخدمين دائمًا يرون شاشة صالحة، حتى مع عناوين URL غير صحيحة
+- **يتحقق** مما إذا كان هناك مسار موجود للمسار الحالي
+- **يعيد التوجيه** إلى صفحة تسجيل الدخول عند الوصول إلى مسار غير صالح
+- **يوفر** آلية احتياطية تمنع التنقل المعطل
+- **يضمن** أن المستخدمين دائمًا يرون شاشة صالحة، حتى مع عناوين URL غير صحيحة
إذا لم يتم العثور على مسار، سنقوم الآن بإعادة التوجيه إلى صفحة `login`.
-الآن لنقم بإنشاء وظيفة للحصول على عنوان URL عند النقر على رابط، ولمنع السلوك الافتراضي للرابط في المتصفح:
+الآن دعونا ننشئ وظيفة للحصول على عنوان URL عند النقر على رابط، ولمنع السلوك الافتراضي للرابط في المتصفح:
```js
function onLinkClick(event) {
@@ -436,10 +584,10 @@ function onLinkClick(event) {
```
**تفصيل معالج النقر هذا:**
-- **منع** السلوك الافتراضي للرابط في المتصفح باستخدام `preventDefault()`
-- **استخراج** عنوان URL الوجهة من عنصر الرابط الذي تم النقر عليه
-- **استدعاء** وظيفة التنقل المخصصة بدلاً من إعادة تحميل الصفحة
-- **الحفاظ** على تجربة التطبيق أحادي الصفحة السلسة
+- **يمنع** السلوك الافتراضي للرابط في المتصفح باستخدام `preventDefault()`
+- **يستخرج** عنوان URL الوجهة من عنصر الرابط الذي تم النقر عليه
+- **يستدعي** وظيفة التنقل المخصصة لدينا بدلاً من إعادة تحميل الصفحة
+- **يحافظ** على تجربة تطبيق الصفحة الواحدة السلسة
```html
Login
@@ -447,23 +595,23 @@ function onLinkClick(event) {
Logout
```
-**ما الذي يحققه هذا الربط باستخدام onclick:**
-- **ربط** كل رابط بنظام التنقل المخصص لدينا
-- **تمرير** حدث النقر إلى وظيفة `onLinkClick` الخاصة بنا للمعالجة
-- **تمكين** التنقل السلس دون إعادة تحميل الصفحات
-- **الحفاظ** على هيكل عنوان URL الصحيح الذي يمكن للمستخدمين حفظه أو مشاركته
+**ما يحققه هذا الربط باستخدام onclick:**
+- **يربط** كل رابط بنظام التنقل المخصص لدينا
+- **يمرر** حدث النقر إلى وظيفة `onLinkClick` الخاصة بنا للمعالجة
+- **يمكن** التنقل السلس دون إعادة تحميل الصفحات
+- **يحافظ** على هيكل عنوان URL الصحيح الذي يمكن للمستخدمين وضع إشارات مرجعية له أو مشاركته
تربط خاصية [`onclick`](https://developer.mozilla.org/docs/Web/API/GlobalEventHandlers/onclick) حدث النقر بكود JavaScript، هنا استدعاء وظيفة `navigate()`.
جرب النقر على هذه الروابط، يجب أن تكون الآن قادرًا على التنقل بين الشاشات المختلفة لتطبيقك.
-✅ طريقة `history.pushState` هي جزء من معيار HTML5 ومُنفذة في [جميع المتصفحات الحديثة](https://caniuse.com/?search=pushState). إذا كنت تقوم ببناء تطبيق ويب للمتصفحات القديمة، هناك حيلة يمكنك استخدامها بدلاً من هذه الواجهة البرمجية: باستخدام [الهاش (`#`)](https://en.wikipedia.org/wiki/URI_fragment) قبل المسار يمكنك تنفيذ التوجيه الذي يعمل مع التنقل العادي للروابط ولا يعيد تحميل الصفحة، حيث كان الغرض منه إنشاء روابط داخلية داخل الصفحة.
+✅ طريقة `history.pushState` هي جزء من معيار HTML5 ومطبقة في [جميع المتصفحات الحديثة](https://caniuse.com/?search=pushState). إذا كنت تقوم ببناء تطبيق ويب للمتصفحات القديمة، هناك حيلة يمكنك استخدامها بدلاً من هذه الواجهة البرمجية: باستخدام [علامة التجزئة (`#`)](https://en.wikipedia.org/wiki/URI_fragment) قبل المسار يمكنك تنفيذ التوجيه الذي يعمل مع التنقل العادي للروابط ولا يعيد تحميل الصفحة، حيث كان الغرض منها إنشاء روابط داخلية داخل الصفحة.
## جعل أزرار الرجوع والتقدم تعمل
-تعتبر أزرار الرجوع والتقدم أساسية لتصفح الويب، تمامًا مثل كيفية مراجعة مراقبي مهام ناسا للحالات السابقة للنظام أثناء المهمات الفضائية. يتوقع المستخدمون أن تعمل هذه الأزرار، وعندما لا تعمل، فإنها تكسر تجربة التصفح المتوقعة.
+أزرار الرجوع والتقدم أساسية لتصفح الويب، تمامًا مثل كيفية مراجعة مراقبي المهمات في ناسا حالات النظام السابقة أثناء المهمات الفضائية. يتوقع المستخدمون أن تعمل هذه الأزرار، وعندما لا تعمل، فإنها تكسر تجربة التصفح المتوقعة.
-يحتاج تطبيقنا أحادي الصفحة إلى تكوين إضافي لدعم ذلك. يحتفظ المتصفح بسجل تاريخ (الذي كنا نضيف إليه باستخدام `history.pushState`)، ولكن عندما يتنقل المستخدمون عبر هذا السجل، يحتاج تطبيقنا إلى الاستجابة عن طريق تحديث المحتوى المعروض وفقًا لذلك.
+يحتاج تطبيق الصفحة الواحدة الخاص بنا إلى تكوين إضافي لدعم ذلك. يحتفظ المتصفح بسجل التنقل (الذي كنا نضيف إليه باستخدام `history.pushState`)، ولكن عندما يتنقل المستخدمون عبر هذا السجل، يحتاج تطبيقنا إلى الاستجابة عن طريق تحديث المحتوى المعروض وفقًا لذلك.
```mermaid
sequenceDiagram
@@ -496,37 +644,37 @@ sequenceDiagram
```
**نقاط التفاعل الرئيسية:**
-- **إجراءات المستخدم** تُشغل التنقل من خلال النقرات أو أزرار المتصفح
+- **إجراءات المستخدم** تحفز التنقل من خلال النقرات أو أزرار المتصفح
- **التطبيق يعترض** النقرات على الروابط لمنع إعادة تحميل الصفحات
-- **واجهة برمجة التطبيقات History API** تدير تغييرات عنوان URL وسجل تاريخ المتصفح
+- **واجهة برمجة التطبيقات History** تدير تغييرات عنوان URL وسجل التنقل في المتصفح
- **القوالب** توفر هيكل المحتوى لكل شاشة
- **مستمعو الأحداث** يضمنون استجابة التطبيق لجميع أنواع التنقل
-استخدام `history.pushState` ينشئ إدخالات جديدة في سجل التنقل للمتصفح. يمكنك التحقق من ذلك عن طريق الضغط على *زر الرجوع* في متصفحك، يجب أن يعرض شيئًا مثل هذا:
+استخدام `history.pushState` ينشئ إدخالات جديدة في سجل التنقل الخاص بالمتصفح. يمكنك التحقق من ذلك عن طريق الضغط على *زر الرجوع* في متصفحك، يجب أن يعرض شيئًا مثل هذا:

إذا حاولت النقر على زر الرجوع عدة مرات، سترى أن عنوان URL الحالي يتغير ويتم تحديث السجل، لكن نفس القالب يستمر في العرض.
-ذلك لأن التطبيق لا يعرف أننا بحاجة إلى استدعاء `updateRoute()` في كل مرة يتغير السجل. إذا نظرت إلى [وثائق `history.pushState`](https://developer.mozilla.org/docs/Web/API/History/pushState)، يمكنك أن ترى أنه إذا تغيرت الحالة - بمعنى أننا انتقلنا إلى عنوان URL مختلف - يتم تشغيل حدث [`popstate`](https://developer.mozilla.org/docs/Web/API/Window/popstate_event). سنستخدم ذلك لإصلاح هذه المشكلة.
+ذلك لأن التطبيق لا يعرف أننا بحاجة إلى استدعاء `updateRoute()` في كل مرة يتغير السجل. إذا نظرت إلى [وثائق `history.pushState`](https://developer.mozilla.org/docs/Web/API/History/pushState)، يمكنك أن ترى أنه إذا تغيرت الحالة - مما يعني أننا انتقلنا إلى عنوان URL مختلف - يتم تحفيز حدث [`popstate`](https://developer.mozilla.org/docs/Web/API/Window/popstate_event). سنستخدم ذلك لإصلاح هذه المشكلة.
### المهمة
-لضمان تحديث القالب المعروض عند تغيير سجل المتصفح، سنقوم بإرفاق وظيفة جديدة تستدعي `updateRoute()`. سنقوم بذلك في أسفل ملف `app.js` الخاص بنا:
+للتأكد من تحديث القالب المعروض عندما يتغير سجل المتصفح، سنرفق وظيفة جديدة تستدعي `updateRoute()`. سنقوم بذلك في أسفل ملف `app.js` الخاص بنا:
```js
window.onpopstate = () => updateRoute();
updateRoute();
```
-**فهم تكامل السجل هذا:**
-- **الاستماع** إلى أحداث `popstate` التي تحدث عندما يتنقل المستخدمون باستخدام أزرار المتصفح
-- **استخدام** وظيفة سهمية لتصريح مختصر لمعالج الحدث
-- **استدعاء** `updateRoute()` تلقائيًا كلما تغيرت حالة السجل
-- **تهيئة** التطبيق عن طريق استدعاء `updateRoute()` عند تحميل الصفحة لأول مرة
-- **ضمان** عرض القالب الصحيح بغض النظر عن كيفية تنقل المستخدمين
+**فهم هذا التكامل مع السجل:**
+- **يستمع** لأحداث `popstate` التي تحدث عندما يتنقل المستخدمون باستخدام أزرار المتصفح
+- **يستخدم** وظيفة سهمية لكتابة مختصرة لمعالج الحدث
+- **يستدعي** `updateRoute()` تلقائيًا كلما تغيرت حالة السجل
+- **يبدأ** التطبيق عن طريق استدعاء `updateRoute()` عند تحميل الصفحة لأول مرة
+- **يضمن** عرض القالب الصحيح بغض النظر عن كيفية تنقل المستخدمين
-> 💡 **نصيحة احترافية**: استخدمنا [وظيفة سهمية](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Functions/Arrow_functions) هنا لتصريح معالج حدث `popstate` الخاص بنا للاختصار، لكن وظيفة عادية ستعمل بنفس الطريقة.
+> 💡 **نصيحة احترافية**: استخدمنا [وظيفة سهمية](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Functions/Arrow_functions) هنا لإعلان معالج حدث `popstate` لدينا بشكل مختصر، ولكن وظيفة عادية ستعمل بنفس الطريقة.
إليك فيديو تذكيري عن وظائف السهم:
@@ -536,26 +684,135 @@ updateRoute();
الآن حاول استخدام أزرار الرجوع والتقدم في متصفحك، وتأكد من أن المسار المعروض يتم تحديثه بشكل صحيح هذه المرة.
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] اختبر التنقل في تطبيقك البنكي باستخدام أزرار الرجوع/التقدم في المتصفح
+- [ ] جرب كتابة عناوين URL مختلفة يدويًا في شريط العنوان لاختبار التوجيه
+- [ ] افتح أدوات المطور في المتصفح وتحقق من كيفية استنساخ القوالب إلى DOM
+- [ ] جرب إضافة عبارات console.log لتتبع تدفق التوجيه
+
+### 🎯 **ما يمكنك تحقيقه خلال الساعة القادمة**
+- [ ] أكمل اختبار ما بعد الدرس وافهم مفاهيم هيكلية تطبيق الصفحة الواحدة
+- [ ] أضف تنسيقات CSS لجعل قوالب تطبيقك البنكي تبدو احترافية
+- [ ] نفذ تحدي صفحة خطأ 404 مع معالجة الأخطاء بشكل صحيح
+- [ ] أنشئ تحدي صفحة الاعتمادات مع وظيفة توجيه إضافية
+- [ ] أضف حالات التحميل والانتقالات بين تبديلات القوالب
+
+### 📅 **رحلة تطوير تطبيق الصفحة الواحدة الخاصة بك لمدة أسبوع**
+- [ ] أكمل التطبيق البنكي بالكامل مع النماذج، إدارة البيانات، والاستمرارية
+- [ ] أضف ميزات توجيه متقدمة مثل معلمات المسار والمسارات المتداخلة
+- [ ] نفذ حراس التنقل والتوجيه القائم على المصادقة
+- [ ] أنشئ مكونات قوالب قابلة لإعادة الاستخدام ومكتبة مكونات
+- [ ] أضف الرسوم المتحركة والانتقالات لتجربة مستخدم أكثر سلاسة
+- [ ] انشر تطبيق الصفحة الواحدة الخاص بك على منصة استضافة وقم بتكوين التوجيه بشكل صحيح
+
+### 🌟 **رحلة إتقان هيكلية الواجهة الأمامية الخاصة بك لمدة شهر**
+- [ ] قم ببناء تطبيقات صفحة واحدة معقدة باستخدام أطر عمل حديثة مثل React، Vue، أو Angular
+- [ ] تعلم أنماط إدارة الحالة المتقدمة والمكتبات
+- [ ] أتقن أدوات البناء وسير العمل التطويري لتطوير تطبيقات الصفحة الواحدة
+- [ ] نفذ ميزات تطبيقات الويب التقدمية والوظائف غير المتصلة بالإنترنت
+- [ ] ادرس تقنيات تحسين الأداء لتطبيقات الصفحة الواحدة واسعة النطاق
+- [ ] ساهم في مشاريع تطبيقات الصفحة الواحدة مفتوحة المصدر وشارك معرفتك
+
+## 🎯 جدول زمني لإتقان تطبيق الصفحة الواحدة الخاص بك
+
+```mermaid
+timeline
+ title SPA Development & Modern Web Architecture Learning Progression
+
+ section Foundation (20 minutes)
+ Template Systems: HTML template elements
+ : DOM manipulation
+ : Content cloning
+ : Dynamic rendering
+
+ section Routing Basics (30 minutes)
+ Client-side Navigation: URL management
+ : History API
+ : Route mapping
+ : Event handling
+
+ section User Experience (40 minutes)
+ Navigation Polish: Browser integration
+ : Back button support
+ : Error handling
+ : Smooth transitions
+
+ section Architecture Patterns (50 minutes)
+ Professional SPAs: Component systems
+ : State management
+ : Performance optimization
+ : Error boundaries
+
+ section Advanced Techniques (1 week)
+ Framework Integration: React Router
+ : Vue Router
+ : Angular Router
+ : State libraries
+
+ section Production Skills (1 month)
+ Enterprise Development: Build systems
+ : Testing strategies
+ : Deployment pipelines
+ : Performance monitoring
+```
+
+### 🛠️ ملخص أدوات تطوير تطبيق الصفحة الواحدة الخاص بك
+
+بعد إكمال هذا الدرس، أصبحت الآن متقنًا:
+- **هيكلية القوالب**: مكونات HTML قابلة لإعادة الاستخدام مع عرض محتوى ديناميكي
+- **التوجيه على جانب العميل**: إدارة عنوان URL والتنقل دون إعادة تحميل الصفحات
+- **تكامل المتصفح**: استخدام واجهة برمجة التطبيقات History ودعم أزرار الرجوع/التقدم
+- **أنظمة تعتمد على الأحداث**: معالجة التنقل وتفاعلات المستخدم
+- **التعامل مع DOM**: استنساخ القوالب، تبديل المحتوى، وإدارة العناصر
+- **معالجة الأخطاء**: حلول مرنة للمسارات غير الصالحة والمحتوى المفقود
+- **أنماط الأداء**: استراتيجيات تحميل المحتوى وعرضه بكفاءة
+
+**تطبيقات العالم الحقيقي**: مهارات تطوير تطبيق الصفحة الواحدة الخاصة بك تنطبق مباشرة على:
+- **تطبيقات الويب الحديثة**: تطوير باستخدام React، Vue، Angular، وغيرها من الأطر
+- **تطبيقات الويب التقدمية**: تطبيقات قادرة على العمل دون اتصال مع تجارب تشبه التطبيقات
+- **لوحات التحكم المؤسسية**: تطبيقات الأعمال المعقدة مع وجهات نظر متعددة
+- **منصات التجارة الإلكترونية**: كتالوجات المنتجات، عربات التسوق، وتدفقات الدفع
+- **إدارة المحتوى**: إنشاء وتحرير المحتوى الديناميكي
+- **تطوير المحمول**: تطبيقات هجينة باستخدام تقنيات الويب
+
+**المهارات المهنية المكتسبة**: يمكنك الآن:
+- **تصميم** تطبيقات صفحة واحدة مع فصل واضح للمكونات
+- **تنفيذ** أنظمة التوجيه على الجانب العميل التي تتناسب مع تعقيد التطبيق
+- **تصحيح الأخطاء** في تدفقات التنقل المعقدة باستخدام أدوات المطور في المتصفح
+- **تحسين** أداء التطبيق من خلال إدارة القوالب بكفاءة
+- **تصميم** تجارب مستخدم تبدو طبيعية وسريعة الاستجابة
+
+**مفاهيم تطوير الواجهة الأمامية المتقنة**:
+- **هندسة المكونات**: أنماط واجهة مستخدم قابلة لإعادة الاستخدام وأنظمة القوالب
+- **مزامنة الحالة**: إدارة حالة URL وسجل المتصفح
+- **البرمجة القائمة على الأحداث**: التعامل مع تفاعلات المستخدم والتنقل
+- **تحسين الأداء**: التلاعب الفعال بـ DOM وتحميل المحتوى
+- **تصميم تجربة المستخدم**: انتقالات سلسة وتنقل بديهي
+
+**المرحلة التالية**: أنت جاهز لاستكشاف أطر عمل الواجهة الأمامية الحديثة، إدارة الحالة المتقدمة، أو بناء تطبيقات مؤسسية معقدة!
+
+🌟 **إنجاز محقق**: لقد بنيت أساسًا احترافيًا لتطبيق صفحة واحدة باستخدام أنماط هندسة الويب الحديثة!
+
---
-## تحدي وكيل GitHub Copilot 🚀
+## تحدي GitHub Copilot Agent 🚀
استخدم وضع الوكيل لإكمال التحدي التالي:
-**الوصف:** قم بتحسين تطبيق البنك عن طريق تنفيذ معالجة الأخطاء وقالب صفحة 404 للمسارات غير الصالحة، مما يحسن تجربة المستخدم عند التنقل إلى صفحات غير موجودة.
+**الوصف:** قم بتحسين تطبيق البنك من خلال تنفيذ معالجة الأخطاء وقالب صفحة 404 للمسارات غير الصالحة، مما يحسن تجربة المستخدم عند التنقل إلى صفحات غير موجودة.
-**المهمة:** قم بإنشاء قالب HTML جديد مع معرف "not-found" يعرض صفحة خطأ 404 سهلة الاستخدام مع تصميم. ثم قم بتعديل منطق التوجيه في JavaScript لعرض هذا القالب عندما يتنقل المستخدمون إلى عناوين URL غير صالحة، وأضف زر "العودة إلى الصفحة الرئيسية" الذي يعيد التوجيه إلى صفحة تسجيل الدخول.
+**المهمة:** قم بإنشاء قالب HTML جديد مع المعرف "not-found" يعرض صفحة خطأ 404 ودية مع تصميم. ثم قم بتعديل منطق التوجيه في JavaScript لعرض هذا القالب عندما يتنقل المستخدمون إلى عناوين URL غير صالحة، وأضف زر "العودة إلى الصفحة الرئيسية" الذي يعيد المستخدم إلى صفحة تسجيل الدخول.
-تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
+تعرف أكثر على [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
## 🚀 التحدي
-أضف قالبًا ومسارًا جديدًا لصفحة ثالثة تعرض الاعتمادات لهذا التطبيق.
+أضف قالبًا ومسارًا جديدًا لصفحة ثالثة تعرض معلومات عن فريق العمل الذي أنشأ هذا التطبيق.
-**أهداف التحدي:**
+**أهداف التحدي**:
- **إنشاء** قالب HTML جديد مع هيكل محتوى مناسب
- **إضافة** المسار الجديد إلى كائن تكوين المسارات الخاص بك
-- **تضمين** روابط التنقل إلى ومن صفحة الاعتمادات
+- **تضمين** روابط تنقل إلى ومن صفحة الاعتمادات
- **اختبار** أن جميع التنقلات تعمل بشكل صحيح مع سجل المتصفح
## اختبار ما بعد المحاضرة
@@ -564,12 +821,12 @@ updateRoute();
## المراجعة والدراسة الذاتية
-التوجيه هو أحد الأجزاء التي تبدو معقدة في تطوير الويب، خاصة مع انتقال الويب من سلوكيات تحديث الصفحات إلى تحديثات تطبيقات الصفحة الواحدة. اقرأ قليلاً عن [كيفية تعامل خدمة Azure Static Web App](https://docs.microsoft.com/azure/static-web-apps/routes/?WT.mc_id=academic-77807-sagibbon) مع التوجيه. هل يمكنك شرح لماذا بعض القرارات الموضحة في تلك الوثيقة ضرورية؟
+التوجيه هو أحد الأجزاء التي قد تكون معقدة بشكل مفاجئ في تطوير الويب، خاصة مع انتقال الويب من سلوكيات تحديث الصفحة إلى تحديثات صفحة تطبيقات الصفحة الواحدة. اقرأ قليلاً عن [كيفية تعامل خدمة Azure Static Web App](https://docs.microsoft.com/azure/static-web-apps/routes/?WT.mc_id=academic-77807-sagibbon) مع التوجيه. هل يمكنك شرح سبب ضرورة بعض القرارات الموضحة في هذا المستند؟
-**موارد تعليمية إضافية:**
-- **استكشاف** كيفية تنفيذ التوجيه على جانب العميل في أطر عمل شهيرة مثل React Router وVue Router
-- **البحث** عن الفروقات بين التوجيه القائم على الهاش وتوجيه واجهة برمجة التطبيقات History API
-- **التعلم** عن التقديم على جانب الخادم (SSR) وكيف يؤثر على استراتيجيات التوجيه
+**موارد تعليمية إضافية**:
+- **استكشاف** كيفية تنفيذ أطر العمل الشهيرة مثل React Router و Vue Router للتوجيه على الجانب العميل
+- **البحث** في الفروقات بين التوجيه القائم على التجزئة وتوجيه واجهة برمجة التطبيقات التاريخية
+- **التعلم** عن العرض على الجانب الخادم (SSR) وكيف يؤثر على استراتيجيات التوجيه
- **التحقيق** في كيفية تعامل تطبيقات الويب التقدمية (PWAs) مع التوجيه والتنقل
## الواجب
@@ -579,4 +836,4 @@ updateRoute();
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسير خاطئ ينشأ عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-bank-project/2-forms/README.md b/translations/ar/7-bank-project/2-forms/README.md
index 68407c29aa..f9d5bb24c2 100644
--- a/translations/ar/7-bank-project/2-forms/README.md
+++ b/translations/ar/7-bank-project/2-forms/README.md
@@ -1,29 +1,76 @@
# بناء تطبيق مصرفي الجزء الثاني: إنشاء نموذج تسجيل الدخول والتسجيل
+```mermaid
+journey
+ title Your Form Development Journey
+ section HTML Foundation
+ Understand form elements: 3: Student
+ Learn input types: 4: Student
+ Master accessibility: 4: Student
+ section JavaScript Integration
+ Handle form submission: 4: Student
+ Implement AJAX communication: 5: Student
+ Process server responses: 5: Student
+ section Validation Systems
+ Create multi-layer validation: 5: Student
+ Enhance user experience: 5: Student
+ Ensure data integrity: 5: Student
+```
+
## اختبار ما قبل المحاضرة
[اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/web/quiz/43)
-هل سبق لك أن ملأت نموذجًا عبر الإنترنت وتم رفض تنسيق بريدك الإلكتروني؟ أو فقدت جميع معلوماتك عند النقر على زر الإرسال؟ لقد واجهنا جميعًا هذه التجارب المحبطة.
+هل سبق لك أن ملأت نموذجًا عبر الإنترنت وتم رفض تنسيق بريدك الإلكتروني؟ أو فقدت كل معلوماتك عند النقر على زر الإرسال؟ لقد واجهنا جميعًا هذه التجارب المحبطة.
+
+النماذج هي الجسر بين المستخدمين ووظائف تطبيقك. مثل البروتوكولات الدقيقة التي يستخدمها مراقبو الحركة الجوية لتوجيه الطائرات بأمان إلى وجهاتها، توفر النماذج المصممة جيدًا ردود فعل واضحة وتمنع الأخطاء المكلفة. أما النماذج السيئة، من ناحية أخرى، يمكن أن تبعد المستخدمين بسرعة أكبر من سوء التواصل في مطار مزدحم.
-النماذج هي الجسر بين المستخدمين ووظائف تطبيقك. مثل البروتوكولات الدقيقة التي يستخدمها مراقبو الحركة الجوية لتوجيه الطائرات بأمان إلى وجهاتها، توفر النماذج المصممة جيدًا ردود فعل واضحة وتمنع الأخطاء المكلفة. أما النماذج السيئة، فقد تدفع المستخدمين بعيدًا بسرعة أكبر من سوء التواصل في مطار مزدحم.
+في هذه الدرس، سنحول تطبيقك المصرفي الثابت إلى تطبيق تفاعلي. ستتعلم كيفية إنشاء نماذج تتحقق من صحة إدخال المستخدم، تتواصل مع الخوادم، وتوفر ردود فعل مفيدة. فكر في الأمر كإنشاء واجهة التحكم التي تتيح للمستخدمين التنقل في ميزات تطبيقك.
-في هذه الدرس، سنحول تطبيقك المصرفي الثابت إلى تطبيق تفاعلي. ستتعلم كيفية إنشاء نماذج تتحقق من صحة إدخال المستخدم، وتتواصل مع الخوادم، وتوفر ردود فعل مفيدة. فكر في الأمر كإنشاء واجهة التحكم التي تتيح للمستخدمين التنقل في ميزات تطبيقك.
+بحلول النهاية، سيكون لديك نظام تسجيل دخول وتسجيل كامل مع التحقق الذي يوجه المستخدمين نحو النجاح بدلاً من الإحباط.
-في النهاية، سيكون لديك نظام تسجيل دخول وتسجيل كامل مع التحقق من الصحة الذي يوجه المستخدمين نحو النجاح بدلاً من الإحباط.
+```mermaid
+mindmap
+ root((Form Development))
+ HTML Foundation
+ Semantic Elements
+ Input Types
+ Accessibility
+ Label Association
+ User Experience
+ Validation Feedback
+ Error Prevention
+ Loading States
+ Success Messaging
+ JavaScript Integration
+ Event Handling
+ AJAX Communication
+ Data Processing
+ Error Management
+ Validation Layers
+ HTML5 Validation
+ Client-side Logic
+ Server-side Security
+ Progressive Enhancement
+ Modern Patterns
+ Fetch API
+ Async/Await
+ Form Data API
+ Promise Handling
+```
## المتطلبات الأساسية
-قبل أن نبدأ في إنشاء النماذج، دعنا نتأكد من أن كل شيء معد بشكل صحيح. يبدأ هذا الدرس من حيث انتهينا في الدرس السابق، لذا إذا تخطيت، قد ترغب في العودة أولاً للحصول على الأساسيات.
+قبل أن نبدأ في إنشاء النماذج، دعنا نتأكد من أن كل شيء معد بشكل صحيح. هذا الدرس يستكمل ما بدأناه في الدرس السابق، لذا إذا قفزت إلى الأمام، قد ترغب في العودة والتأكد من أن الأساسيات تعمل أولاً.
### الإعداد المطلوب
@@ -40,9 +87,9 @@ CO_OP_TRANSLATOR_METADATA:
**بيئة التطوير الخاصة بك ستشمل:**
- **خادم الواجهة الأمامية**: يقدم تطبيقك المصرفي (عادةً على المنفذ `3000`)
- **خادم API الخلفي**: يتعامل مع تخزين البيانات واسترجاعها (المنفذ `5000`)
-- **كلا الخادمين** يمكن تشغيلهما في نفس الوقت دون تعارضات
+- **كلا الخادمين** يمكن تشغيلهما في نفس الوقت دون تعارض
-**اختبار اتصالك بـ API:**
+**اختبار اتصال API الخاص بك:**
```bash
curl http://localhost:5000/api
# Expected response: "Bank API v1.0.0"
@@ -56,7 +103,7 @@ curl http://localhost:5000/api
نماذج HTML هي الطريقة التي يتواصل بها المستخدمون مع تطبيق الويب الخاص بك. فكر فيها كنظام التلغراف الذي ربط الأماكن البعيدة في القرن التاسع عشر – إنها بروتوكول الاتصال بين نية المستخدم واستجابة التطبيق. عندما يتم تصميمها بعناية، فإنها تلتقط الأخطاء، توجه تنسيق الإدخال، وتوفر اقتراحات مفيدة.
-النماذج الحديثة أكثر تطورًا بكثير من إدخالات النص الأساسية. قدم HTML5 أنواع إدخال متخصصة تتعامل تلقائيًا مع التحقق من البريد الإلكتروني، تنسيق الأرقام، واختيار التواريخ. هذه التحسينات تفيد كل من إمكانية الوصول وتجربة المستخدمين على الأجهزة المحمولة.
+النماذج الحديثة أكثر تطورًا بكثير من إدخالات النص الأساسية. قدم HTML5 أنواع إدخال متخصصة تتعامل مع التحقق من البريد الإلكتروني، تنسيق الأرقام، واختيار التواريخ تلقائيًا. هذه التحسينات تفيد كل من إمكانية الوصول وتجارب المستخدمين على الأجهزة المحمولة.
### عناصر النموذج الأساسية
@@ -76,7 +123,7 @@ curl http://localhost:5000/api
- **ينشئ** حاوية نموذج بمعرف فريد
- **يحدد** طريقة HTTP لإرسال البيانات
- **يربط** التسميات بالإدخالات لتحسين إمكانية الوصول
-- **يعرف** زر إرسال لمعالجة النموذج
+- **يحدد** زر إرسال لمعالجة النموذج
### أنواع الإدخال الحديثة والسمات
@@ -104,11 +151,11 @@ curl http://localhost:5000/api
- **أزرار إعادة التعيين**: تعيد جميع حقول النموذج إلى حالتها الأولية
- **الأزرار العادية**: لا توفر سلوكًا افتراضيًا، وتتطلب JavaScript مخصصًا للوظائف
-> ⚠️ **ملاحظة مهمة**: عنصر ` ` يغلق نفسه ولا يتطلب علامة إغلاق. الممارسة الحديثة هي كتابة ` ` بدون الشريط.
+> ⚠️ **ملاحظة مهمة**: عنصر ` ` يغلق نفسه ولا يتطلب علامة إغلاق. الممارسة الحديثة الأفضل هي كتابة ` ` بدون الشريط.
-### إنشاء نموذج تسجيل الدخول
+### إنشاء نموذج تسجيل الدخول الخاص بك
-الآن دعونا ننشئ نموذج تسجيل دخول عمليًا يوضح ممارسات نماذج HTML الحديثة. سنبدأ بهيكل أساسي ونقوم بتحسينه تدريجيًا بميزات إمكانية الوصول والتحقق من الصحة.
+الآن دعونا ننشئ نموذج تسجيل دخول عملي يوضح ممارسات نماذج HTML الحديثة. سنبدأ بهيكل أساسي ونقوم بتحسينه تدريجيًا بميزات إمكانية الوصول والتحقق.
```html
@@ -128,11 +175,11 @@ curl http://localhost:5000/api
```
**تفصيل ما يحدث هنا:**
-- **يهيكل** النموذج باستخدام عناصر HTML5 دلالية
-- **يجمع** العناصر ذات الصلة باستخدام حاويات `div` ذات فئات ذات معنى
-- **يربط** التسميات بالإدخالات باستخدام سمات `for` و`id`
-- **يتضمن** سمات حديثة مثل `autocomplete` و`placeholder` لتحسين تجربة المستخدم
-- **يضيف** `novalidate` للتعامل مع التحقق من الصحة باستخدام JavaScript بدلاً من الإعدادات الافتراضية للمتصفح
+- **يهيكل** النموذج بعناصر HTML5 دلالية
+- **يجمع** العناصر ذات الصلة باستخدام حاويات `div` مع فئات ذات معنى
+- **يربط** التسميات بالإدخالات باستخدام سمات `for` و `id`
+- **يتضمن** سمات حديثة مثل `autocomplete` و `placeholder` لتحسين تجربة المستخدم
+- **يضيف** `novalidate` للتعامل مع التحقق باستخدام JavaScript بدلاً من الإعدادات الافتراضية للمتصفح
### قوة التسميات المناسبة
@@ -153,16 +200,16 @@ graph TD
**ما تحققه التسميات المناسبة:**
- **تمكن** قارئات الشاشة من الإعلان عن حقول النموذج بوضوح
-- **توسع** المنطقة القابلة للنقر (النقر على التسمية يركز على الإدخال)
+- **توسع** منطقة النقر (النقر على التسمية يركز على الإدخال)
- **تحسن** قابلية الاستخدام على الأجهزة المحمولة مع أهداف لمس أكبر
-- **تدعم** التحقق من صحة النموذج برسائل خطأ ذات معنى
+- **تدعم** التحقق من النموذج برسائل خطأ ذات معنى
- **تعزز** تحسين محركات البحث من خلال توفير معنى دلالي لعناصر النموذج
-> 🎯 **هدف إمكانية الوصول**: يجب أن يكون لكل إدخال نموذج تسمية مرتبطة. هذه الممارسة البسيطة تجعل نماذجك قابلة للاستخدام للجميع، بما في ذلك المستخدمين ذوي الإعاقة، وتحسن التجربة لجميع المستخدمين.
+> 🎯 **هدف إمكانية الوصول**: يجب أن يكون لكل إدخال نموذج تسمية مرتبطة. هذه الممارسة البسيطة تجعل نماذجك قابلة للاستخدام من قبل الجميع، بما في ذلك المستخدمين ذوي الإعاقة، وتحسن التجربة لجميع المستخدمين.
### إنشاء نموذج التسجيل
-يتطلب نموذج التسجيل معلومات أكثر تفصيلًا لإنشاء حساب مستخدم كامل. دعونا نبنيه باستخدام ميزات HTML5 الحديثة وإمكانية الوصول المحسنة.
+يتطلب نموذج التسجيل معلومات أكثر تفصيلًا لإنشاء حساب مستخدم كامل. دعونا نبنيه بميزات HTML5 الحديثة وإمكانية وصول محسنة.
```html
@@ -196,30 +243,46 @@ graph TD
```
-**في ما سبق، قمنا بـ:**
-- **تنظيم** كل حقل في حاويات div لتحسين التصميم والتخطيط
+**في الأعلى، قمنا بـ:**
+- **تنظيم** كل حقل في حاويات div لتحسين التصميم والتنسيق
- **إضافة** سمات `autocomplete` المناسبة لدعم الملء التلقائي للمتصفح
-- **تضمين** نصوص إرشادية مفيدة لتوجيه إدخال المستخدم
+- **تضمين** نص توضيحي مفيد لتوجيه إدخال المستخدم
- **تعيين** قيم افتراضية منطقية باستخدام سمة `value`
-- **تطبيق** سمات التحقق مثل `required`، `maxlength`، و`min`
+- **تطبيق** سمات التحقق مثل `required`، `maxlength`، و `min`
- **استخدام** `type="number"` لحقل الرصيد مع دعم الأرقام العشرية
-### استكشاف أنواع الإدخال وسلوكها
+### استكشاف أنواع الإدخال والسلوك
**توفر أنواع الإدخال الحديثة وظائف محسنة:**
| الميزة | الفائدة | المثال |
|--------|---------|--------|
| `type="number"` | لوحة مفاتيح رقمية على الأجهزة المحمولة | إدخال الرصيد بسهولة |
-| `step="0.01"` | التحكم في الدقة العشرية | يسمح بالسنتات في العملة |
+| `step="0.01"` | التحكم في دقة الأرقام العشرية | يسمح بالكسور في العملات |
| `autocomplete` | الملء التلقائي للمتصفح | إكمال النموذج بسرعة |
| `placeholder` | تلميحات سياقية | توجه توقعات المستخدم |
-> 🎯 **تحدي إمكانية الوصول**: حاول التنقل في النماذج باستخدام لوحة المفاتيح فقط! استخدم `Tab` للانتقال بين الحقول، و`Space` لتحديد المربعات، و`Enter` للإرسال. هذه التجربة تساعدك على فهم كيفية تفاعل مستخدمي قارئات الشاشة مع نماذجك.
+> 🎯 **تحدي إمكانية الوصول**: حاول التنقل في النماذج باستخدام لوحة المفاتيح فقط! استخدم `Tab` للتنقل بين الحقول، `Space` لتحديد الخيارات، و`Enter` للإرسال. هذه التجربة تساعدك على فهم كيفية تفاعل مستخدمي قارئات الشاشة مع نماذجك.
+
+### 🔄 **مراجعة تربوية**
+**فهم أساسيات النموذج**: قبل تنفيذ JavaScript، تأكد من فهمك:
+- ✅ كيف ينشئ HTML الدلالي هياكل نماذج قابلة للوصول
+- ✅ لماذا أنواع الإدخال مهمة للوحات المفاتيح المحمولة والتحقق
+- ✅ العلاقة بين التسميات وعناصر التحكم في النموذج
+- ✅ كيف تؤثر سمات النموذج على سلوك المتصفح الافتراضي
+
+**اختبار سريع ذاتي**: ماذا يحدث إذا أرسلت نموذجًا دون معالجة JavaScript؟
+*الإجابة: يقوم المتصفح بالإرسال الافتراضي، عادةً بإعادة التوجيه إلى عنوان URL الخاص بالإجراء*
+
+**فوائد نماذج HTML5**: توفر النماذج الحديثة:
+- **التحقق المدمج**: التحقق التلقائي من البريد الإلكتروني وتنسيق الأرقام
+- **تحسين الأجهزة المحمولة**: لوحات مفاتيح مناسبة لأنواع الإدخال المختلفة
+- **إمكانية الوصول**: دعم قارئات الشاشة والتنقل باستخدام لوحة المفاتيح
+- **تحسين تدريجي**: تعمل حتى عند تعطيل JavaScript
## فهم طرق إرسال النموذج
-عندما يملأ شخص ما النموذج وينقر على زر الإرسال، يجب أن تذهب تلك البيانات إلى مكان ما – عادةً إلى خادم يمكنه حفظها. هناك عدة طرق يمكن أن يحدث بها ذلك، ومعرفة الطريقة المناسبة يمكن أن توفر عليك بعض الصداع لاحقًا.
+عندما يملأ شخص ما النموذج الخاص بك وينقر على إرسال، يجب أن تذهب تلك البيانات إلى مكان ما – عادةً إلى خادم يمكنه حفظها. هناك عدة طرق يمكن أن يحدث بها ذلك، ومعرفة الطريقة المناسبة يمكن أن يوفر عليك بعض المتاعب لاحقًا.
دعونا نلقي نظرة على ما يحدث فعليًا عندما ينقر شخص ما على زر الإرسال.
@@ -227,12 +290,12 @@ graph TD
أولاً، دعونا نلاحظ ما يحدث مع إرسال النموذج الأساسي:
-**اختبر النماذج الحالية:**
+**اختبر النماذج الحالية الخاصة بك:**
1. انقر على زر *التسجيل* في النموذج الخاص بك
2. لاحظ التغييرات في شريط عنوان المتصفح الخاص بك
3. لاحظ كيف يتم إعادة تحميل الصفحة وتظهر البيانات في عنوان URL
-
+
### مقارنة طرق HTTP
@@ -264,7 +327,7 @@ graph TD
- **قيود GET**: قيود الحجم، البيانات المرئية، تاريخ المتصفح المستمر
- **مزايا POST**: سعة بيانات كبيرة، حماية الخصوصية، دعم تحميل الملفات
-> 💡 **أفضل ممارسة**: استخدم `GET` لنماذج البحث والفلاتر (استرجاع البيانات)، واستخدم `POST` لتسجيل المستخدمين، تسجيل الدخول، وإنشاء البيانات.
+> 💡 **أفضل ممارسة**: استخدم `GET` للنماذج البحثية والفلاتر (استرجاع البيانات)، واستخدم `POST` لتسجيل المستخدمين، تسجيل الدخول، وإنشاء البيانات.
### إعداد إرسال النموذج
@@ -277,7 +340,7 @@ graph TD
**ما يفعله هذا الإعداد:**
- **يوجه** إرسال النموذج إلى نقطة نهاية API الخاصة بك
-- **يستخدم** طريقة POST لنقل البيانات بأمان
+- **يستخدم** طريقة POST لنقل البيانات بشكل آمن
- **يتضمن** `novalidate` للتعامل مع التحقق باستخدام JavaScript
### اختبار إرسال النموذج
@@ -294,7 +357,7 @@ graph TD
- **استجابة JSON** تحتوي على بيانات حسابك الجديد
- **تأكيد الخادم** أن الحساب تم إنشاؤه بنجاح
-> 🧪 **وقت التجربة**: حاول التسجيل مرة أخرى بنفس اسم المستخدم. ما الاستجابة التي تحصل عليها؟ يساعدك هذا على فهم كيفية تعامل الخادم مع البيانات المكررة وظروف الخطأ.
+> 🧪 **وقت التجربة**: حاول التسجيل مرة أخرى بنفس اسم المستخدم. ما الاستجابة التي تحصل عليها؟ هذا يساعدك على فهم كيفية تعامل الخادم مع البيانات المكررة وظروف الخطأ.
### فهم استجابات JSON
@@ -311,15 +374,15 @@ graph TD
**تؤكد هذه الاستجابة:**
- **إنشاء** حساب جديد بالبيانات التي حددتها
-- **تعيين** معرف فريد للإشارة المستقبلية
+- **تعيين** معرف فريد للرجوع إليه في المستقبل
- **إرجاع** جميع معلومات الحساب للتحقق
- **الإشارة** إلى تخزين قاعدة البيانات بنجاح
## التعامل الحديث مع النماذج باستخدام JavaScript
-تسبب عمليات إرسال النموذج التقليدية إعادة تحميل الصفحة بالكامل، مثلما كانت المهمات الفضائية المبكرة تتطلب إعادة ضبط النظام بالكامل لتصحيح المسار. هذا النهج يعطل تجربة المستخدم ويفقد حالة التطبيق.
+تسبب عمليات إرسال النموذج التقليدية إعادة تحميل الصفحة بالكامل، مثلما كانت مهمات الفضاء المبكرة تتطلب إعادة ضبط النظام بالكامل لتصحيح المسار. هذا النهج يعطل تجربة المستخدم ويفقد حالة التطبيق.
-يعمل التعامل مع النماذج باستخدام JavaScript مثل أنظمة التوجيه المستمرة المستخدمة في المركبات الفضائية الحديثة – إجراء تعديلات في الوقت الفعلي دون فقدان سياق التنقل. يمكننا اعتراض عمليات إرسال النموذج، تقديم ردود فعل فورية، التعامل مع الأخطاء برشاقة، وتحديث الواجهة بناءً على استجابات الخادم مع الحفاظ على موقع المستخدم في التطبيق.
+يعمل التعامل مع النماذج باستخدام JavaScript مثل أنظمة التوجيه المستمرة المستخدمة بواسطة المركبات الفضائية الحديثة – إجراء تعديلات في الوقت الفعلي دون فقدان سياق التنقل. يمكننا اعتراض عمليات إرسال النموذج، تقديم ردود فعل فورية، التعامل مع الأخطاء بسلاسة، وتحديث الواجهة بناءً على استجابات الخادم مع الحفاظ على موقع المستخدم في التطبيق.
### لماذا نتجنب إعادة تحميل الصفحة؟
@@ -401,7 +464,6 @@ document.addEventListener('DOMContentLoaded', () => {
### فهم واجهة برمجة التطبيقات FormData
**توفر واجهة برمجة التطبيقات FormData معالجة قوية للنماذج:**
-
```javascript
// Example of what FormData captures
const formData = new FormData(registerForm);
@@ -416,14 +478,14 @@ const formData = new FormData(registerForm);
```
**مزايا واجهة برمجة التطبيقات FormData:**
-- **جمع شامل**: يلتقط جميع عناصر النموذج بما في ذلك النصوص، الملفات، والإدخالات المعقدة
-- **وعي النوع**: يتعامل تلقائيًا مع أنواع الإدخال المختلفة دون الحاجة إلى ترميز مخصص
-- **كفاءة**: يلغي جمع الحقول يدويًا باستخدام استدعاء واجهة برمجة التطبيقات الواحد
-- **قابلية التكيف**: يحافظ على الوظائف مع تطور هيكل النموذج
+- **جمع شامل**: يلتقط جميع عناصر النموذج بما في ذلك النصوص، الملفات، والمدخلات المعقدة
+- **وعي بالنوع**: يتعامل تلقائيًا مع أنواع المدخلات المختلفة دون الحاجة إلى كتابة كود مخصص
+- **الكفاءة**: يلغي الحاجة لجمع الحقول يدويًا من خلال استدعاء واحد لواجهة برمجة التطبيقات
+- **التكيف**: يحافظ على الوظائف مع تطور هيكل النموذج
-### إنشاء وظيفة التواصل مع الخادم
+### إنشاء وظيفة الاتصال بالخادم
-الآن دعونا نبني وظيفة قوية للتواصل مع خادم API الخاص بك باستخدام أنماط JavaScript الحديثة:
+الآن دعونا نبني وظيفة قوية للتواصل مع خادم واجهة برمجة التطبيقات باستخدام أنماط JavaScript الحديثة:
```javascript
async function createAccount(account) {
@@ -467,34 +529,34 @@ sequenceDiagram
**ما يحققه هذا التنفيذ الحديث:**
- **يستخدم** `async/await` لكتابة كود غير متزامن قابل للقراءة
-- **يتضمن** معالجة الأخطاء المناسبة باستخدام كتل try/catch
+- **يتضمن** معالجة الأخطاء بشكل صحيح باستخدام كتل try/catch
- **يتحقق** من حالة الاستجابة قبل معالجة البيانات
-- **يحدد** رؤوس مناسبة للتواصل باستخدام JSON
-- **يوفر** رسائل خطأ مفصلة لتسهيل تصحيح الأخطاء
-- **يعيد** هيكل بيانات متسق لحالات النجاح والخطأ
+- **يحدد** رؤوس مناسبة للتواصل عبر JSON
+- **يوفر** رسائل خطأ مفصلة لتسهيل التصحيح
+- **يعيد** هيكل بيانات متسق لحالات النجاح والخطأ
-### قوة واجهة Fetch API الحديثة
+### قوة واجهة برمجة التطبيقات Fetch الحديثة
-**مزايا Fetch API مقارنة بالطرق القديمة:**
+**مزايا Fetch API مقارنة بالطرق القديمة:**
-| الميزة | الفائدة | التنفيذ |
-|--------|---------|---------|
-| يعتمد على الوعد | كود غير متزامن نظيف | `await fetch()` |
-| تخصيص الطلب | تحكم كامل في HTTP | الرؤوس، الطرق، الجسم |
-| معالجة الاستجابة | تحليل بيانات مرن | `.json()`, `.text()`, `.blob()` |
-| معالجة الأخطاء | التقاط شامل للأخطاء | كتل Try/catch |
+| الميزة | الفائدة | التنفيذ |
+|--------|---------|---------|
+| قائم على الوعد | كود غير متزامن نظيف | `await fetch()` |
+| تخصيص الطلب | تحكم كامل في HTTP | الرؤوس، الطرق، الجسم |
+| معالجة الاستجابة | تحليل بيانات مرن | `.json()`, `.text()`, `.blob()` |
+| معالجة الأخطاء | التقاط شامل للأخطاء | كتل try/catch |
-> 🎥 **تعلم المزيد**: [دليل Async/Await](https://youtube.com/watch?v=YwmlRkrxvkk) - فهم أنماط JavaScript غير المتزامنة لتطوير الويب الحديث.
+> 🎥 **تعلم المزيد**: [دليل Async/Await](https://youtube.com/watch?v=YwmlRkrxvkk) - فهم أنماط JavaScript غير المتزامنة لتطوير الويب الحديث.
-**مفاهيم رئيسية للتواصل مع الخادم:**
-- **الدوال غير المتزامنة** تسمح بإيقاف التنفيذ لانتظار استجابات الخادم
-- **الكلمة المفتاحية Await** تجعل الكود غير المتزامن يبدو كأنه متزامن
-- **Fetch API** توفر طلبات HTTP حديثة تعتمد على الوعد
-- **معالجة الأخطاء** تضمن استجابة التطبيق بشكل سلس لمشاكل الشبكة
+**المفاهيم الأساسية للتواصل مع الخادم:**
+- **الوظائف غير المتزامنة** تسمح بإيقاف التنفيذ لانتظار استجابات الخادم
+- **الكلمة المفتاحية Await** تجعل الكود غير المتزامن يبدو كأنه متزامن
+- **Fetch API** يوفر طلبات HTTP حديثة قائمة على الوعد
+- **معالجة الأخطاء** تضمن استجابة التطبيق بشكل جيد لمشاكل الشبكة
-### إكمال وظيفة التسجيل
+### إكمال وظيفة التسجيل
-لنقم بتجميع كل شيء معًا لإنشاء وظيفة تسجيل جاهزة للإنتاج:
+دعونا نجمع كل شيء معًا لإنشاء وظيفة تسجيل كاملة وجاهزة للإنتاج:
```javascript
async function register() {
@@ -535,41 +597,61 @@ async function register() {
}
}
```
-
-**هذا التنفيذ المحسن يشمل:**
-- **يوفر** ردود فعل مرئية أثناء إرسال النموذج
-- **يعطل** زر الإرسال لمنع الإرسال المكرر
-- **يتعامل** مع الأخطاء المتوقعة وغير المتوقعة بسلاسة
-- **يعرض** رسائل نجاح وخطأ سهلة الاستخدام
-- **يعيد ضبط** النموذج بعد التسجيل الناجح
-- **يستعيد** حالة واجهة المستخدم بغض النظر عن النتيجة
-### اختبار التنفيذ الخاص بك
+**يتضمن هذا التنفيذ المحسن:**
+- **يوفر** ملاحظات مرئية أثناء إرسال النموذج
+- **يعطل** زر الإرسال لمنع الإرسال المكرر
+- **يتعامل** مع الأخطاء المتوقعة وغير المتوقعة بشكل جيد
+- **يعرض** رسائل نجاح وخطأ سهلة الاستخدام
+- **يعيد ضبط** النموذج بعد التسجيل الناجح
+- **يعيد** حالة واجهة المستخدم بغض النظر عن النتيجة
+
+### اختبار التنفيذ الخاص بك
+
+**افتح أدوات المطور في المتصفح واختبر التسجيل:**
+
+1. **افتح** وحدة التحكم في المتصفح (F12 → علامة تبويب Console)
+2. **املأ** نموذج التسجيل
+3. **انقر** على "إنشاء حساب"
+4. **لاحظ** رسائل وحدة التحكم وملاحظات المستخدم
+
+
-**افتح أدوات المطور في المتصفح واختبر التسجيل:**
+**ما يجب أن تراه:**
+- **حالة التحميل** تظهر على زر الإرسال
+- **سجلات وحدة التحكم** تعرض معلومات مفصلة عن العملية
+- **رسالة النجاح** تظهر عند نجاح إنشاء الحساب
+- **النموذج يعيد ضبط نفسه** تلقائيًا بعد الإرسال الناجح
-1. **افتح** وحدة التحكم في المتصفح (F12 → علامة تبويب Console)
-2. **املأ** نموذج التسجيل
-3. **اضغط** على "إنشاء حساب"
-4. **لاحظ** رسائل وحدة التحكم وردود فعل المستخدم
+> 🔒 **اعتبارات الأمان**: حاليًا، البيانات تنتقل عبر HTTP، وهو غير آمن للإنتاج. في التطبيقات الحقيقية، استخدم دائمًا HTTPS لتشفير نقل البيانات. تعرف على المزيد حول [أمان HTTPS](https://en.wikipedia.org/wiki/HTTPS) ولماذا هو ضروري لحماية بيانات المستخدم.
-
+### 🔄 **مراجعة تعليمية**
+**دمج JavaScript الحديث**: تحقق من فهمك لمعالجة النماذج غير المتزامنة:
+- ✅ كيف يغير `event.preventDefault()` سلوك النموذج الافتراضي؟
+- ✅ لماذا تعتبر واجهة برمجة التطبيقات FormData أكثر كفاءة من جمع الحقول يدويًا؟
+- ✅ كيف تحسن أنماط async/await قابلية قراءة الكود؟
+- ✅ ما هو دور معالجة الأخطاء في تجربة المستخدم؟
-**ما يجب أن تراه:**
-- **حالة التحميل** تظهر على زر الإرسال
-- **سجلات وحدة التحكم** تعرض معلومات تفصيلية عن العملية
-- **رسالة نجاح** تظهر عند نجاح إنشاء الحساب
-- **النموذج يعيد ضبط نفسه** تلقائيًا بعد الإرسال الناجح
+**هيكل النظام**: معالجة النموذج الخاص بك تظهر:
+- **برمجة مدفوعة بالأحداث**: النماذج تستجيب لإجراءات المستخدم دون إعادة تحميل الصفحة
+- **تواصل غير متزامن**: طلبات الخادم لا تعيق واجهة المستخدم
+- **معالجة الأخطاء**: تدهور سلس عند فشل طلبات الشبكة
+- **إدارة الحالة**: تحديثات واجهة المستخدم تعكس استجابات الخادم بشكل مناسب
+- **تحسين تدريجي**: الوظائف الأساسية تعمل، JavaScript يعززها
-> 🔒 **اعتبارات الأمان**: حاليًا، البيانات تنتقل عبر HTTP، وهو غير آمن للإنتاج. في التطبيقات الحقيقية، استخدم دائمًا HTTPS لتشفير نقل البيانات. تعرف على المزيد حول [أمان HTTPS](https://en.wikipedia.org/wiki/HTTPS) ولماذا هو ضروري لحماية بيانات المستخدم.
+**أنماط احترافية**: لقد نفذت:
+- **مسؤولية واحدة**: الوظائف لها أغراض واضحة ومركزة
+- **حدود الأخطاء**: كتل try/catch تمنع تعطل التطبيق
+- **ملاحظات المستخدم**: حالات التحميل ورسائل النجاح/الخطأ
+- **تحويل البيانات**: FormData إلى JSON للتواصل مع الخادم
-## التحقق الشامل للنماذج
+## التحقق الشامل من النموذج
-التحقق من النموذج يمنع تجربة محبطة لاكتشاف الأخطاء بعد الإرسال فقط. مثل الأنظمة المتعددة الزائدة على محطة الفضاء الدولية، يستخدم التحقق الفعال طبقات متعددة من الفحوصات الأمنية.
+التحقق من النموذج يمنع تجربة الإحباط الناتجة عن اكتشاف الأخطاء فقط بعد الإرسال. مثل الأنظمة المتعددة الزائدة على محطة الفضاء الدولية، يستخدم التحقق الفعال طبقات متعددة من الفحوصات الأمنية.
-النهج الأمثل يجمع بين التحقق على مستوى المتصفح للحصول على ردود فعل فورية، والتحقق باستخدام JavaScript لتحسين تجربة المستخدم، والتحقق على مستوى الخادم لضمان الأمان وسلامة البيانات. هذه الطبقات الزائدة تضمن رضا المستخدم وحماية النظام.
+النهج الأمثل يجمع بين التحقق على مستوى المتصفح للحصول على ملاحظات فورية، والتحقق باستخدام JavaScript لتحسين تجربة المستخدم، والتحقق على مستوى الخادم لضمان الأمان وسلامة البيانات. هذه الطبقات الزائدة تضمن رضا المستخدم وحماية النظام.
-### فهم طبقات التحقق
+### فهم طبقات التحقق
```mermaid
graph TD
@@ -583,28 +665,28 @@ graph TD
C -->|Invalid| H[Custom Error Display]
E -->|Invalid| I[Server Error Response]
```
-
-**استراتيجية التحقق متعددة الطبقات:**
-- **التحقق باستخدام HTML5**: فحوصات فورية تعتمد على المتصفح
-- **التحقق باستخدام JavaScript**: منطق مخصص وتجربة مستخدم محسنة
-- **التحقق على مستوى الخادم**: فحوصات نهائية للأمان وسلامة البيانات
-- **التعزيز التدريجي**: يعمل حتى إذا تم تعطيل JavaScript
-### خصائص التحقق باستخدام HTML5
+**استراتيجية التحقق متعددة الطبقات:**
+- **التحقق باستخدام HTML5**: فحوصات فورية تعتمد على المتصفح
+- **التحقق باستخدام JavaScript**: منطق مخصص وتجربة مستخدم محسنة
+- **التحقق على مستوى الخادم**: فحوصات نهائية للأمان وسلامة البيانات
+- **تحسين تدريجي**: يعمل حتى إذا تم تعطيل JavaScript
-**أدوات التحقق الحديثة المتاحة لديك:**
+### خصائص التحقق باستخدام HTML5
-| الخاصية | الغرض | مثال الاستخدام | سلوك المتصفح |
-|---------|-------|----------------|--------------|
-| `required` | الحقول الإلزامية | ` ` | يمنع الإرسال الفارغ |
-| `minlength`/`maxlength` | حدود طول النص | ` ` | يفرض حدود الأحرف |
-| `min`/`max` | نطاقات رقمية | ` ` | يتحقق من حدود الأرقام |
-| `pattern` | قواعد regex مخصصة | ` ` | يطابق تنسيقات محددة |
-| `type` | التحقق من نوع البيانات | ` ` | تحقق خاص بالتنسيق |
+**أدوات التحقق الحديثة المتاحة لديك:**
-### تنسيق التحقق باستخدام CSS
+| الخاصية | الغرض | مثال الاستخدام | سلوك المتصفح |
+|---------|-------|----------------|--------------|
+| `required` | الحقول الإلزامية | ` ` | يمنع الإرسال الفارغ |
+| `minlength`/`maxlength` | حدود طول النص | ` ` | يفرض حدود الأحرف |
+| `min`/`max` | نطاقات رقمية | ` ` | يتحقق من حدود الأرقام |
+| `pattern` | قواعد regex مخصصة | ` ` | يطابق تنسيقات محددة |
+| `type` | التحقق من نوع البيانات | ` ` | تحقق خاص بالتنسيق |
-**إنشاء ردود فعل مرئية لحالات التحقق:**
+### تنسيق التحقق باستخدام CSS
+
+**إنشاء ملاحظات مرئية لحالات التحقق:**
```css
/* Valid input styling */
@@ -628,18 +710,18 @@ input:focus:invalid {
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
}
```
-
-**ما تحققه هذه الإشارات البصرية:**
-- **حدود خضراء**: تشير إلى نجاح التحقق، مثل الأضواء الخضراء في مركز التحكم
-- **حدود حمراء**: تشير إلى أخطاء التحقق التي تحتاج إلى انتباه
-- **تسليط الضوء على التركيز**: يوفر سياقًا بصريًا واضحًا لموقع الإدخال الحالي
-- **تنسيق متسق**: يثبت أنماط واجهة يمكن للمستخدمين تعلمها
-> 💡 **نصيحة احترافية**: استخدم الفئات الزائفة `:valid` و `:invalid` في CSS لتوفير ردود فعل مرئية فورية أثناء الكتابة، مما يخلق واجهة تفاعلية ومفيدة.
+**ما تحققه هذه الإشارات المرئية:**
+- **حدود خضراء**: تشير إلى نجاح التحقق، مثل الأضواء الخضراء في مركز التحكم
+- **حدود حمراء**: تشير إلى أخطاء التحقق التي تحتاج إلى اهتمام
+- **تسليط الضوء على التركيز**: يوفر سياقًا مرئيًا واضحًا لموقع الإدخال الحالي
+- **تنسيق متسق**: يحدد أنماط واجهة يمكن للمستخدمين تعلمها
-### تنفيذ التحقق الشامل
+> 💡 **نصيحة احترافية**: استخدم الفئات الزائفة `:valid` و `:invalid` في CSS لتوفير ملاحظات مرئية فورية أثناء الكتابة، مما يخلق واجهة تفاعلية ومفيدة.
-لنقم بتحسين نموذج التسجيل الخاص بك باستخدام التحقق القوي الذي يوفر تجربة مستخدم ممتازة وجودة بيانات عالية:
+### تنفيذ التحقق الشامل
+
+دعونا نحسن نموذج التسجيل الخاص بك مع التحقق القوي الذي يوفر تجربة مستخدم ممتازة وجودة بيانات عالية:
```html
```
-
-**فهم التحقق المحسن:**
-- **يجمع** مؤشرات الحقول المطلوبة مع أوصاف مفيدة
-- **يتضمن** خصائص `pattern` للتحقق من التنسيق
-- **يوفر** خصائص `title` لتحسين الوصول وتقديم النصائح
-- **يضيف** نصوص مساعدة لتوجيه إدخال المستخدم
-- **يستخدم** هيكل HTML دلالي لتحسين الوصول
-### قواعد التحقق المتقدمة
+**فهم التحقق المحسن:**
+- **يجمع** مؤشرات الحقول المطلوبة مع أوصاف مفيدة
+- **يتضمن** خصائص `pattern` للتحقق من التنسيق
+- **يوفر** خصائص `title` لتحسين الوصول والنصوص التوضيحية
+- **يضيف** نصوص مساعدة لتوجيه إدخال المستخدم
+- **يستخدم** هيكل HTML دلالي لتحسين الوصول
-**ما تحققه كل قاعدة تحقق:**
+### قواعد التحقق المتقدمة
-| الحقل | قواعد التحقق | فائدة المستخدم |
-|-------|--------------|----------------|
-| اسم المستخدم | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | يضمن معرفات صالحة وفريدة |
-| العملة | `required`, `maxlength="3"`, `pattern="[A-Z$€£¥₹]+"` | يقبل رموز العملات الشائعة |
-| الرصيد | `min="0"`, `step="0.01"`, `type="number"` | يمنع الأرصدة السلبية |
-| الوصف | `maxlength="100"` | حدود طول معقولة |
+**ما تحققه كل قاعدة تحقق:**
-### اختبار سلوك التحقق
+| الحقل | قواعد التحقق | فائدة المستخدم |
+|-------|-------------|----------------|
+| اسم المستخدم | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | يضمن معرفات صالحة وفريدة |
+| العملة | `required`, `maxlength="3"`, `pattern="[A-Z$€£¥₹]+"` | يقبل رموز العملات الشائعة |
+| الرصيد | `min="0"`, `step="0.01"`, `type="number"` | يمنع الأرصدة السلبية |
+| الوصف | `maxlength="100"` | حدود طول معقولة |
-**جرب سيناريوهات التحقق التالية:**
-1. **أرسل** النموذج مع الحقول المطلوبة فارغة
-2. **أدخل** اسم مستخدم أقصر من 3 أحرف
-3. **جرب** إدخال رموز خاصة في حقل اسم المستخدم
-4. **أدخل** مبلغ رصيد سلبي
+### اختبار سلوك التحقق
-
+**جرب هذه السيناريوهات للتحقق:**
+1. **أرسل** النموذج مع الحقول المطلوبة فارغة
+2. **أدخل** اسم مستخدم أقصر من 3 أحرف
+3. **جرب** أحرف خاصة في حقل اسم المستخدم
+4. **أدخل** مبلغ رصيد سلبي
-**ما ستلاحظه:**
-- **المتصفح يعرض** رسائل التحقق الأصلية
-- **تغييرات التنسيق** بناءً على حالات `:valid` و `:invalid`
-- **يتم منع إرسال النموذج** حتى يتم اجتياز جميع عمليات التحقق
-- **التركيز ينتقل تلقائيًا** إلى أول حقل غير صالح
+
-### التحقق من جانب العميل مقابل التحقق من جانب الخادم
+**ما ستلاحظه:**
+- **المتصفح يعرض** رسائل التحقق الأصلية
+- **تغييرات التنسيق** بناءً على حالات `:valid` و `:invalid`
+- **يتم منع إرسال النموذج** حتى يتم اجتياز جميع عمليات التحقق
+- **التركيز ينتقل تلقائيًا** إلى أول حقل غير صالح
+
+### التحقق على مستوى العميل مقابل التحقق على مستوى الخادم
```mermaid
graph LR
@@ -731,50 +813,148 @@ graph LR
A -.-> I[Both Required]
E -.-> I
```
-
-**لماذا تحتاج كلا الطبقتين:**
-- **التحقق من جانب العميل**: يوفر ردود فعل فورية ويحسن تجربة المستخدم
-- **التحقق من جانب الخادم**: يضمن الأمان ويتعامل مع قواعد العمل المعقدة
-- **النهج المشترك**: يخلق تطبيقات قوية وسهلة الاستخدام وآمنة
-- **التعزيز التدريجي**: يعمل حتى عندما يتم تعطيل JavaScript
-> 🛡️ **تذكير أمني**: لا تثق أبدًا في التحقق من جانب العميل فقط! يمكن للمستخدمين الضارين تجاوز الفحوصات على جانب العميل، لذا فإن التحقق من جانب الخادم ضروري للأمان وسلامة البيانات.
+**لماذا تحتاج إلى كلا الطبقتين:**
+- **التحقق على مستوى العميل**: يوفر ملاحظات فورية ويحسن تجربة المستخدم
+- **التحقق على مستوى الخادم**: يضمن الأمان ويتعامل مع قواعد العمل المعقدة
+- **النهج المشترك**: يخلق تطبيقات قوية وسهلة الاستخدام وآمنة
+- **تحسين تدريجي**: يعمل حتى عندما يتم تعطيل JavaScript
+
+> 🛡️ **تذكير أمني**: لا تثق أبدًا في التحقق على مستوى العميل فقط! يمكن للمستخدمين الضارين تجاوز الفحوصات على مستوى العميل، لذا فإن التحقق على مستوى الخادم ضروري للأمان وسلامة البيانات.
+
+### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة**
+- [ ] اختبر النموذج الخاص بك باستخدام بيانات غير صالحة لرؤية رسائل التحقق
+- [ ] جرب إرسال النموذج مع تعطيل JavaScript لرؤية التحقق باستخدام HTML5
+- [ ] افتح أدوات المطور في المتصفح وافحص البيانات المرسلة إلى الخادم
+- [ ] جرب أنواع إدخال مختلفة لرؤية تغييرات لوحة المفاتيح على الأجهزة المحمولة
+
+### 🎯 **ما يمكنك تحقيقه خلال هذه الساعة**
+- [ ] أكمل اختبار ما بعد الدرس لفهم مفاهيم معالجة النماذج
+- [ ] نفذ تحدي التحقق الشامل مع ملاحظات فورية
+- [ ] أضف تنسيق CSS لإنشاء نماذج ذات مظهر احترافي
+- [ ] أنشئ معالجة الأخطاء لأسماء المستخدمين المكررة وأخطاء الخادم
+- [ ] أضف حقول تأكيد كلمة المرور مع التحقق من المطابقة
+
+### 📅 **رحلة إتقان النماذج الخاصة بك لمدة أسبوع**
+- [ ] أكمل تطبيق البنك الكامل مع ميزات النماذج المتقدمة
+- [ ] نفذ قدرات تحميل الملفات للصور الشخصية أو المستندات
+- [ ] أضف نماذج متعددة الخطوات مع مؤشرات التقدم وإدارة الحالة
+- [ ] أنشئ نماذج ديناميكية تتكيف بناءً على اختيارات المستخدم
+- [ ] نفذ الحفظ التلقائي للنماذج والاسترداد لتحسين تجربة المستخدم
+- [ ] أضف التحقق المتقدم مثل التحقق من البريد الإلكتروني وتنسيق أرقام الهواتف
+
+### 🌟 **إتقان تطوير الواجهة الأمامية الخاص بك لمدة شهر**
+- [ ] قم ببناء تطبيقات نماذج معقدة مع منطق شرطي وسير العمل
+- [ ] تعلم مكتبات النماذج وأطر العمل للتطوير السريع
+- [ ] أتقن إرشادات الوصول ومبادئ التصميم الشامل
+- [ ] نفذ التدويل والتوطين للنماذج العالمية
+- [ ] أنشئ مكتبات مكونات النماذج القابلة لإعادة الاستخدام وأنظمة التصميم
+- [ ] ساهم في مشاريع النماذج مفتوحة المصدر وشارك أفضل الممارسات
+
+## 🎯 جدول زمني لإتقان تطوير النماذج الخاصة بك
----
+```mermaid
+timeline
+ title Form Development & User Experience Learning Progression
+
+ section HTML Foundation (15 minutes)
+ Semantic Forms: Form elements
+ : Input types
+ : Labels and accessibility
+ : Progressive enhancement
+
+ section JavaScript Integration (25 minutes)
+ Event Handling: Form submission
+ : Data collection
+ : AJAX communication
+ : Async/await patterns
+
+ section Validation Systems (35 minutes)
+ Multi-layer Security: HTML5 validation
+ : Client-side logic
+ : Server-side verification
+ : Error handling
+
+ section User Experience (45 minutes)
+ Interface Polish: Loading states
+ : Success messaging
+ : Error recovery
+ : Accessibility features
+
+ section Advanced Patterns (1 week)
+ Professional Forms: Dynamic validation
+ : Multi-step workflows
+ : File uploads
+ : Real-time feedback
+
+ section Enterprise Skills (1 month)
+ Production Applications: Form libraries
+ : Testing strategies
+ : Performance optimization
+ : Security best practices
+```
----
+### 🛠️ ملخص أدوات تطوير النماذج الخاصة بك
+
+بعد إكمال هذا الدرس، أصبحت الآن متقنًا:
+- **نماذج HTML5**: الهيكل الدلالي، أنواع الإدخال، وميزات الوصول
+- **معالجة النماذج باستخدام JavaScript**: إدارة الأحداث، جمع البيانات، والتواصل عبر AJAX
+- **هيكل التحقق**: التحقق متعدد الطبقات للأمان وتجربة المستخدم
+- **البرمجة غير المتزامنة**: واجهة برمجة التطبيقات Fetch الحديثة وأنماط async/await
+- **إدارة الأخطاء**: معالجة الأخطاء الشاملة وأنظمة ملاحظات المستخدم
+- **تصميم تجربة المستخدم**: حالات التحميل، رسائل النجاح، واسترداد الأخطاء
+- **تحسين تدريجي**: نماذج تعمل عبر جميع المتصفحات والإمكانيات
+
+**تطبيقات العالم الحقيقي**: مهارات تطوير النماذج الخاصة بك تنطبق مباشرة على:
+- **تطبيقات التجارة الإلكترونية**: عمليات الدفع، تسجيل الحسابات، ونماذج الدفع
+- **برامج المؤسسات**: أنظمة إدخال البيانات، واجهات التقارير، وتطبيقات سير العمل
+- **إدارة المحتوى**: منصات النشر، المحتوى الذي ينشئه المستخدم، وواجهات الإدارة
+- **التطبيقات المالية**: واجهات البنوك، منصات الاستثمار، وأنظمة المعاملات
+- **أنظمة الرعاية الصحية**: بوابات المرضى، جدولة المواعيد، ونماذج السجلات الطبية
+- **منصات التعليم**: تسجيل الدورات، أدوات التقييم، وأنظمة إدارة التعلم
-## تحدي وكيل GitHub Copilot 🚀
+**المهارات المهنية المكتسبة**: يمكنك الآن:
+- **تصميم** نماذج قابلة للوصول تعمل لجميع المستخدمين بما في ذلك ذوي الإعاقة
+- **تنفيذ** تحقق آمن للنماذج يمنع تلف البيانات والثغرات الأمنية
+- **إنشاء** واجهات مستخدم استجابية توفر ملاحظات وتوجيهات واضحة
+- **تصحيح** تفاعلات النماذج المعقدة باستخدام أدوات المطور في المتصفح وتحليل الشبكة
+- **تحسين** أداء النماذج من خلال معالجة البيانات واستراتيجيات التحقق الفعالة
-استخدم وضع الوكيل لإكمال التحدي التالي:
+**مفاهيم تطوير الواجهة الأمامية المتقنة**:
+- **هيكل مدفوع بالأحداث**: معالجة تفاعلات المستخدم وأنظمة الاستجابة
+- **البرمجة غير المتزامنة**: التواصل مع الخادم دون حجب واجهة المستخدم ومعالجة الأخطاء
+- **التحقق من البيانات**: فحوصات الأمان وسلامة البيانات على مستوى العميل والخادم
+- **تصميم تجربة المستخدم**: واجهات بديهية توجه المستخدمين نحو النجاح
+- **هندسة الوصول**: تصميم شامل يعمل لاحتياجات المستخدمين المتنوعة
-**الوصف:** قم بتحسين نموذج التسجيل باستخدام التحقق الشامل من جانب العميل وردود فعل المستخدم. سيساعدك هذا التحدي على ممارسة التحقق من النموذج، معالجة الأخطاء، وتحسين تجربة المستخدم مع ردود فعل تفاعلية.
+**المستوى التالي**: أنت جاهز لاستكشاف مكتبات النماذج المتقدمة، تنفيذ قواعد التحقق المعقدة، أو بناء أنظمة جمع بيانات على مستوى المؤسسات!
-**المهمة:** قم بإنشاء نظام تحقق كامل لنموذج التسجيل يتضمن: 1) ردود فعل التحقق الفوري لكل حقل أثناء الكتابة، 2) رسائل تحقق مخصصة تظهر أسفل كل حقل إدخال، 3) حقل تأكيد كلمة المرور مع التحقق من المطابقة، 4) مؤشرات بصرية (مثل علامات خضراء للحقول الصالحة وتحذيرات حمراء للحقول غير الصالحة)، 5) زر إرسال يصبح مفعلاً فقط عندما يتم اجتياز جميع عمليات التحقق. استخدم خصائص التحقق في HTML5، CSS لتنسيق حالات التحقق، وJavaScript للسلوك التفاعلي.
+🌟 **إنجاز محقق**: لقد أنشأت نظام معالجة نماذج كامل مع التحقق الاحترافي، معالجة الأخطاء، وأنماط تجربة المستخدم!
+**المطالبة:** قم بإنشاء نظام تحقق كامل لنموذج التسجيل يتضمن: 1) تقديم ملاحظات التحقق في الوقت الفعلي لكل حقل أثناء الكتابة، 2) رسائل تحقق مخصصة تظهر أسفل كل حقل إدخال، 3) حقل تأكيد كلمة المرور مع تحقق من التطابق، 4) مؤشرات مرئية (مثل علامات خضراء للحقل الصحيح وتحذيرات حمراء للحقل غير الصحيح)، 5) زر إرسال يصبح مفعلاً فقط عندما يتم اجتياز جميع عمليات التحقق. استخدم سمات التحقق في HTML5، وCSS لتنسيق حالات التحقق، وJavaScript للسلوك التفاعلي.
-تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
+تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
-## 🚀 التحدي
+## 🚀 التحدي
-اعرض رسالة خطأ في HTML إذا كان المستخدم موجودًا بالفعل.
+اعرض رسالة خطأ في HTML إذا كان المستخدم موجودًا بالفعل.
-إليك مثال لما يمكن أن يبدو عليه صفحة تسجيل الدخول النهائية بعد إضافة بعض التنسيقات:
+إليك مثال لما يمكن أن يبدو عليه صفحة تسجيل الدخول النهائية بعد إضافة بعض أنماط CSS:
-
+
-## اختبار ما بعد المحاضرة
+## اختبار ما بعد المحاضرة
-[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/44)
+[اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/web/quiz/44)
-## المراجعة والدراسة الذاتية
+## المراجعة والدراسة الذاتية
-أصبح المطورون مبدعين للغاية في جهود بناء النماذج الخاصة بهم، خاصة فيما يتعلق باستراتيجيات التحقق. تعرف على تدفقات النماذج المختلفة من خلال تصفح [CodePen](https://codepen.com)؛ هل يمكنك العثور على نماذج مثيرة ومُلهمة؟
+لقد أصبح المطورون مبدعين للغاية في جهودهم لبناء النماذج، خاصة فيما يتعلق باستراتيجيات التحقق. تعرف على تدفقات النماذج المختلفة من خلال تصفح [CodePen](https://codepen.com)؛ هل يمكنك العثور على نماذج مثيرة ومُلهمة؟
-## الواجب
+## الواجب
-[صمم تطبيق البنك الخاص بك](assignment.md)
+[قم بتنسيق تطبيق البنك الخاص بك](assignment.md)
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسير خاطئ ينشأ عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-bank-project/3-data/README.md b/translations/ar/7-bank-project/3-data/README.md
index 375ed9f540..30d0569925 100644
--- a/translations/ar/7-bank-project/3-data/README.md
+++ b/translations/ar/7-bank-project/3-data/README.md
@@ -1,19 +1,72 @@
-# بناء تطبيق مصرفي الجزء 3: طرق جلب واستخدام البيانات
+# بناء تطبيق مصرفي الجزء 3: طرق جلب البيانات واستخدامها
-تخيل حاسوب المؤسسة في مسلسل ستار تريك - عندما يسأل الكابتن بيكار عن حالة السفينة، تظهر المعلومات فورًا دون أن يتوقف النظام أو يعيد بناء نفسه بالكامل. هذا التدفق السلس للمعلومات هو بالضبط ما نسعى لبنائه هنا من خلال جلب البيانات الديناميكية.
+تخيل حاسوب السفينة في مسلسل ستار تريك - عندما يسأل الكابتن بيكار عن حالة السفينة، تظهر المعلومات فورًا دون أن يتوقف النظام أو يعيد بناء نفسه. هذا التدفق السلس للمعلومات هو بالضبط ما نسعى لبنائه هنا من خلال جلب البيانات الديناميكي.
في الوقت الحالي، تطبيقك المصرفي يشبه الصحيفة المطبوعة - مفيد ولكنه ثابت. سنقوم بتحويله إلى شيء يشبه مركز التحكم في ناسا، حيث تتدفق البيانات باستمرار وتُحدث في الوقت الفعلي دون أن تقاطع سير عمل المستخدم.
-ستتعلم كيفية التواصل مع الخوادم بشكل غير متزامن، التعامل مع البيانات التي تصل في أوقات مختلفة، وتحويل المعلومات الخام إلى شيء ذو معنى لمستخدميك. هذا هو الفرق بين العرض التوضيحي والبرمجيات الجاهزة للإنتاج.
+ستتعلم كيفية التواصل مع الخوادم بشكل غير متزامن، وكيفية التعامل مع البيانات التي تصل في أوقات مختلفة، وكيفية تحويل المعلومات الخام إلى شيء ذو معنى لمستخدميك. هذا هو الفرق بين العرض التوضيحي والبرمجيات الجاهزة للإنتاج.
+
+## ⚡ ما يمكنك القيام به في الـ 5 دقائق القادمة
+
+**مسار البداية السريعة للمطورين المشغولين**
+
+```mermaid
+flowchart LR
+ A[⚡ 5 minutes] --> B[Set up API server]
+ B --> C[Test fetch with curl]
+ C --> D[Create login function]
+ D --> E[See data in action]
+```
+
+- **الدقيقة 1-2**: قم بتشغيل خادم API الخاص بك (`cd api && npm start`) واختبر الاتصال
+- **الدقيقة 3**: أنشئ وظيفة `getAccount()` الأساسية باستخدام fetch
+- **الدقيقة 4**: قم بتوصيل نموذج تسجيل الدخول بـ `action="javascript:login()"`
+- **الدقيقة 5**: اختبر تسجيل الدخول وشاهد بيانات الحساب تظهر في وحدة التحكم
+
+**أوامر الاختبار السريع**:
+```bash
+# Verify API is running
+curl http://localhost:5000/api
+
+# Test account data fetch
+curl http://localhost:5000/api/accounts/test
+```
+
+**لماذا هذا مهم**: في 5 دقائق، ستشاهد سحر جلب البيانات غير المتزامن الذي يدعم كل تطبيق ويب حديث. هذا هو الأساس الذي يجعل التطبيقات تبدو مستجيبة وحيوية.
+
+## 🗺️ رحلتك التعليمية عبر تطبيقات الويب المعتمدة على البيانات
+
+```mermaid
+journey
+ title From Static Pages to Dynamic Applications
+ section Understanding the Evolution
+ Traditional page reloads: 3: You
+ Discover AJAX/SPA benefits: 5: You
+ Master Fetch API patterns: 7: You
+ section Building Authentication
+ Create login functions: 4: You
+ Handle async operations: 6: You
+ Manage user sessions: 8: You
+ section Dynamic UI Updates
+ Learn DOM manipulation: 5: You
+ Build transaction displays: 7: You
+ Create responsive dashboards: 9: You
+ section Professional Patterns
+ Template-based rendering: 6: You
+ Error handling strategies: 7: You
+ Performance optimization: 8: You
+```
+
+**وجهة رحلتك**: بنهاية هذا الدرس، ستفهم كيف تقوم تطبيقات الويب الحديثة بجلب ومعالجة وعرض البيانات ديناميكيًا، مما يخلق تجارب مستخدم سلسة نتوقعها من التطبيقات الاحترافية.
## اختبار ما قبل المحاضرة
@@ -23,8 +76,8 @@ CO_OP_TRANSLATOR_METADATA:
قبل الغوص في جلب البيانات، تأكد من أن لديك هذه المكونات جاهزة:
-- **الدرس السابق**: أكمل [نموذج تسجيل الدخول والتسجيل](../2-forms/README.md) - سنبني على هذا الأساس.
-- **الخادم المحلي**: قم بتثبيت [Node.js](https://nodejs.org) و[تشغيل API الخادم](../api/README.md) لتوفير بيانات الحساب.
+- **الدرس السابق**: أكمل [نموذج تسجيل الدخول والتسجيل](../2-forms/README.md) - سنبني على هذا الأساس
+- **الخادم المحلي**: قم بتثبيت [Node.js](https://nodejs.org) و[تشغيل خادم API](../api/README.md) لتوفير بيانات الحساب
- **اتصال API**: اختبر اتصال الخادم الخاص بك باستخدام هذا الأمر:
```bash
@@ -33,21 +86,66 @@ curl http://localhost:5000/api
```
هذا الاختبار السريع يضمن أن جميع المكونات تتواصل بشكل صحيح:
-- يتحقق من أن Node.js يعمل بشكل صحيح على نظامك.
-- يؤكد أن خادم API نشط ويستجيب.
-- يتحقق من أن تطبيقك يمكنه الوصول إلى الخادم (مثل التحقق من الاتصال اللاسلكي قبل المهمة).
+- يتحقق من أن Node.js يعمل بشكل صحيح على نظامك
+- يؤكد أن خادم API الخاص بك نشط ويستجيب
+- يتحقق من أن تطبيقك يمكنه الوصول إلى الخادم (مثل التحقق من الاتصال اللاسلكي قبل بدء المهمة)
+
+## 🧠 نظرة عامة على نظام إدارة البيانات
+
+```mermaid
+mindmap
+ root((Data Management))
+ Authentication Flow
+ Login Process
+ Form Validation
+ Credential Verification
+ Session Management
+ User State
+ Global Account Object
+ Navigation Guards
+ Error Handling
+ API Communication
+ Fetch Patterns
+ GET Requests
+ POST Requests
+ Error Responses
+ Data Formats
+ JSON Processing
+ URL Encoding
+ Response Parsing
+ Dynamic UI Updates
+ DOM Manipulation
+ Safe Text Updates
+ Element Creation
+ Template Cloning
+ User Experience
+ Real-time Updates
+ Error Messages
+ Loading States
+ Security Considerations
+ XSS Prevention
+ textContent Usage
+ Input Sanitization
+ Safe HTML Creation
+ CORS Handling
+ Cross-Origin Requests
+ Header Configuration
+ Development Setup
+```
+
+**المبدأ الأساسي**: تطبيقات الويب الحديثة هي أنظمة تنسيق البيانات - تنسق بين واجهات المستخدم وواجهات برمجة التطبيقات للخادم ونماذج أمان المتصفح لإنشاء تجارب سلسة ومستجيبة.
---
## فهم جلب البيانات في تطبيقات الويب الحديثة
-لقد تطورت طريقة تعامل تطبيقات الويب مع البيانات بشكل كبير خلال العقدين الماضيين. فهم هذا التطور سيساعدك على تقدير قوة التقنيات الحديثة مثل AJAX وFetch API ولماذا أصبحت أدوات أساسية لمطوري الويب.
+طريقة تعامل تطبيقات الويب مع البيانات تطورت بشكل كبير على مدار العقدين الماضيين. فهم هذا التطور سيساعدك على تقدير قوة التقنيات الحديثة مثل AJAX وFetch API ولماذا أصبحت أدوات أساسية لمطوري الويب.
-دعونا نستكشف كيف كانت تعمل المواقع التقليدية مقارنة بالتطبيقات الديناميكية والاستجابية التي نبنيها اليوم.
+دعونا نستكشف كيف كانت تعمل المواقع التقليدية مقارنة بالتطبيقات الديناميكية المستجيبة التي نبنيها اليوم.
### التطبيقات متعددة الصفحات التقليدية (MPA)
-في الأيام الأولى للويب، كان كل نقرة تشبه تغيير القنوات على تلفزيون قديم - الشاشة تصبح فارغة، ثم تبدأ ببطء في عرض المحتوى الجديد. هذه كانت حقيقة التطبيقات الويب الأولى، حيث كل تفاعل يعني إعادة بناء الصفحة بالكامل من الصفر.
+في الأيام الأولى للويب، كان كل نقرة تشبه تغيير القنوات على تلفزيون قديم - الشاشة تصبح فارغة، ثم تبدأ في عرض المحتوى الجديد ببطء. كانت هذه هي حقيقة التطبيقات الويب القديمة، حيث كانت كل تفاعل يعني إعادة بناء الصفحة بالكامل من البداية.
```mermaid
sequenceDiagram
@@ -64,15 +162,15 @@ sequenceDiagram

-**لماذا كان هذا النهج يبدو غير عملي:**
-- كل نقرة تعني إعادة بناء الصفحة بالكامل من الصفر.
-- المستخدمون كانوا يتعرضون لانقطاع في التفكير بسبب تلك الومضات المزعجة للصفحة.
-- اتصال الإنترنت كان يعمل بجهد إضافي لتحميل نفس الرأس والتذييل مرارًا وتكرارًا.
-- التطبيقات كانت تبدو وكأنها تصفح ملفات بدلاً من استخدام البرمجيات.
+**لماذا كان هذا النهج يبدو غير سلس:**
+- كل نقرة تعني إعادة بناء الصفحة بالكامل من البداية
+- كان المستخدمون يتعرضون لانقطاع في التفكير بسبب تلك الومضات المزعجة للصفحة
+- كان اتصال الإنترنت يعمل بجهد إضافي لتحميل نفس الرأس والتذييل مرارًا وتكرارًا
+- كانت التطبيقات تبدو وكأنها تصفح ملفات بدلاً من استخدام البرمجيات
### التطبيقات أحادية الصفحة الحديثة (SPA)
-غيرت AJAX (JavaScript وXML غير المتزامن) هذا النموذج تمامًا. مثل التصميم المعياري لمحطة الفضاء الدولية، حيث يمكن لرواد الفضاء استبدال مكونات فردية دون إعادة بناء الهيكل بالكامل، يسمح AJAX بتحديث أجزاء محددة من صفحة الويب دون إعادة تحميل كل شيء. على الرغم من أن الاسم يشير إلى XML، إلا أننا نستخدم JSON في الغالب اليوم، لكن المبدأ الأساسي يبقى كما هو: تحديث فقط ما يحتاج إلى التغيير.
+غيرت تقنية AJAX (JavaScript وXML غير المتزامن) هذا النموذج تمامًا. مثل التصميم المعياري لمحطة الفضاء الدولية، حيث يمكن لرواد الفضاء استبدال المكونات الفردية دون إعادة بناء الهيكل بالكامل، يسمح لنا AJAX بتحديث أجزاء محددة من صفحة الويب دون إعادة تحميل كل شيء. على الرغم من أن الاسم يشير إلى XML، إلا أننا نستخدم JSON في الغالب اليوم، لكن المبدأ الأساسي يبقى كما هو: تحديث ما يحتاج إلى التغيير فقط.
```mermaid
sequenceDiagram
@@ -92,38 +190,38 @@ sequenceDiagram

**لماذا التطبيقات أحادية الصفحة تبدو أفضل بكثير:**
-- يتم تحديث فقط الأجزاء التي تغيرت بالفعل (ذكي، أليس كذلك؟).
-- لا مزيد من الانقطاعات المزعجة - يبقى المستخدمون في تدفقهم.
-- بيانات أقل تنتقل عبر الشبكة تعني تحميل أسرع.
-- كل شيء يبدو سريعًا واستجابياً، مثل التطبيقات على هاتفك.
+- يتم تحديث الأجزاء التي تغيرت فقط (ذكي، أليس كذلك؟)
+- لا مزيد من الانقطاعات المزعجة - يبقى المستخدمون في تدفقهم
+- بيانات أقل تنتقل عبر الشبكة تعني تحميل أسرع
+- كل شيء يبدو سريعًا ومستجيبًا، مثل التطبيقات على هاتفك
### التطور إلى Fetch API الحديث
-توفر المتصفحات الحديثة [`Fetch` API](https://developer.mozilla.org/docs/Web/API/Fetch_API)، الذي يحل محل [`XMLHttpRequest`](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest) القديم. مثل الفرق بين تشغيل التلغراف واستخدام البريد الإلكتروني، يستخدم Fetch API الوعود لكتابة كود غير متزامن بشكل أنظف ويتعامل مع JSON بشكل طبيعي.
+توفر المتصفحات الحديثة [`Fetch` API](https://developer.mozilla.org/docs/Web/API/Fetch_API)، الذي يحل محل [`XMLHttpRequest`](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest) القديم. مثل الفرق بين تشغيل التلغراف واستخدام البريد الإلكتروني، يستخدم Fetch API الوعود لكتابة كود غير متزامن أنظف ويتعامل مع JSON بشكل طبيعي.
| الميزة | XMLHttpRequest | Fetch API |
|---------|----------------|----------|
-| **الصياغة** | معقدة تعتمد على الاستدعاءات | تعتمد على الوعود بشكل نظيف |
+| **الصياغة** | معقدة تعتمد على الاستدعاءات | تعتمد على الوعود النظيفة |
| **التعامل مع JSON** | يتطلب التحليل اليدوي | طريقة `.json()` مدمجة |
| **التعامل مع الأخطاء** | معلومات محدودة عن الأخطاء | تفاصيل شاملة عن الأخطاء |
| **الدعم الحديث** | توافق مع الإصدارات القديمة | وعود ES6+ وasync/await |
-> 💡 **توافق المتصفح**: أخبار جيدة - يعمل Fetch API في جميع المتصفحات الحديثة! إذا كنت مهتمًا بالإصدارات المحددة، [caniuse.com](https://caniuse.com/fetch) يحتوي على القصة الكاملة للتوافق.
+> 💡 **توافق المتصفح**: أخبار جيدة - يعمل Fetch API في جميع المتصفحات الحديثة! إذا كنت فضوليًا بشأن الإصدارات المحددة، [caniuse.com](https://caniuse.com/fetch) يحتوي على القصة الكاملة للتوافق.
>
**الخلاصة:**
-- يعمل بشكل رائع في Chrome، Firefox، Safari، وEdge (بشكل أساسي في كل مكان يتواجد فيه المستخدمون).
-- فقط Internet Explorer يحتاج إلى مساعدة إضافية (وبصراحة، حان الوقت للتخلي عن IE).
-- يجهزك بشكل مثالي لأنماط async/await الأنيقة التي سنستخدمها لاحقًا.
+- يعمل بشكل رائع في Chrome وFirefox وSafari وEdge (بشكل أساسي في كل مكان يتواجد فيه المستخدمون)
+- فقط Internet Explorer يحتاج إلى مساعدة إضافية (وبصراحة، حان الوقت للتخلي عن IE)
+- يجهزك تمامًا لأنماط async/await الأنيقة التي سنستخدمها لاحقًا
-### تنفيذ تسجيل الدخول واسترجاع البيانات
+### تنفيذ تسجيل الدخول وجلب البيانات
-الآن دعونا ننفذ نظام تسجيل الدخول الذي يحول تطبيقك المصرفي من عرض ثابت إلى تطبيق وظيفي. مثل بروتوكولات المصادقة المستخدمة في المنشآت العسكرية الآمنة، سنقوم بالتحقق من بيانات اعتماد المستخدم ثم توفير الوصول إلى بياناته المحددة.
+الآن دعونا ننفذ نظام تسجيل الدخول الذي يحول تطبيقك المصرفي من عرض ثابت إلى تطبيق وظيفي. مثل بروتوكولات المصادقة المستخدمة في المنشآت العسكرية الآمنة، سنقوم بالتحقق من بيانات المستخدم ثم توفير الوصول إلى بياناته المحددة.
سنقوم ببناء هذا تدريجيًا، بدءًا من المصادقة الأساسية ثم إضافة قدرات جلب البيانات.
#### الخطوة 1: إنشاء أساس وظيفة تسجيل الدخول
-افتح ملف `app.js` وأضف وظيفة `login` جديدة. هذه الوظيفة ستتعامل مع عملية مصادقة المستخدم:
+افتح ملف `app.js` الخاص بك وأضف وظيفة `login` جديدة. ستتعامل هذه الوظيفة مع عملية مصادقة المستخدم:
```javascript
async function login() {
@@ -133,16 +231,16 @@ async function login() {
```
**لنقم بتفصيل هذا:**
-- الكلمة المفتاحية `async`؟ تخبر JavaScript "مرحبًا، قد تحتاج هذه الوظيفة إلى الانتظار لبعض الوقت".
-- نحن نحصل على النموذج من الصفحة (ليس هناك شيء معقد، فقط العثور عليه بواسطة معرفه).
-- ثم نقوم بسحب ما كتبه المستخدم كاسم مستخدم.
+- الكلمة المفتاحية `async`؟ تخبر JavaScript "مرحبًا، هذه الوظيفة قد تحتاج إلى الانتظار لبعض الأشياء"
+- نحن نحصل على النموذج الخاص بنا من الصفحة (لا شيء فاخر، فقط العثور عليه بواسطة معرفه)
+- ثم نقوم بسحب ما كتبه المستخدم كاسم مستخدم
- إليك خدعة رائعة: يمكنك الوصول إلى أي إدخال نموذج بواسطة خاصية `name` - لا حاجة لاستدعاءات إضافية لـ getElementById!
-> 💡 **نمط الوصول إلى النموذج**: يمكن الوصول إلى كل عنصر تحكم في النموذج بواسطة اسمه (المحدد في HTML باستخدام خاصية `name`) كخاصية لعنصر النموذج. هذا يوفر طريقة نظيفة وسهلة للحصول على بيانات النموذج.
+> 💡 **نمط الوصول إلى النموذج**: يمكن الوصول إلى كل عنصر تحكم في النموذج بواسطة اسمه (المحدد في HTML باستخدام خاصية `name`) كخاصية لعنصر النموذج. يوفر هذا طريقة نظيفة وسهلة للحصول على بيانات النموذج.
#### الخطوة 2: إنشاء وظيفة جلب بيانات الحساب
-بعد ذلك، سنقوم بإنشاء وظيفة مخصصة لاسترجاع بيانات الحساب من الخادم. هذا يتبع نفس النمط مثل وظيفة التسجيل الخاصة بك ولكنه يركز على استرجاع البيانات:
+بعد ذلك، سنقوم بإنشاء وظيفة مخصصة لجلب بيانات الحساب من الخادم. يتبع هذا نفس النمط مثل وظيفة التسجيل الخاصة بك ولكنه يركز على جلب البيانات:
```javascript
async function getAccount(user) {
@@ -156,36 +254,54 @@ async function getAccount(user) {
```
**ما يحققه هذا الكود:**
-- **يستخدم** Fetch API الحديث لطلب البيانات بشكل غير متزامن.
-- **يبني** عنوان طلب GET مع معلمة اسم المستخدم.
-- **يطبق** `encodeURIComponent()` للتعامل بأمان مع الأحرف الخاصة في عناوين URL.
-- **يحول** الاستجابة إلى صيغة JSON لتسهيل التعامل مع البيانات.
-- **يتعامل** مع الأخطاء بشكل جيد عن طريق إرجاع كائن خطأ بدلاً من التعطل.
+- **يستخدم** Fetch API الحديث لطلب البيانات بشكل غير متزامن
+- **يبني** عنوان URL لطلب GET مع معلمة اسم المستخدم
+- **يطبق** `encodeURIComponent()` للتعامل بأمان مع الأحرف الخاصة في عناوين URL
+- **يحول** الاستجابة إلى صيغة JSON لتسهيل معالجة البيانات
+- **يتعامل** مع الأخطاء بشكل جيد عن طريق إرجاع كائن خطأ بدلاً من التعطل
-> ⚠️ **ملاحظة أمان**: وظيفة `encodeURIComponent()` تتعامل مع الأحرف الخاصة في عناوين URL. مثل أنظمة التشفير المستخدمة في الاتصالات البحرية، تضمن وصول رسالتك كما هو مقصود، مما يمنع الأحرف مثل "#" أو "&" من أن يتم تفسيرها بشكل خاطئ.
+> ⚠️ **ملاحظة أمان**: وظيفة `encodeURIComponent()` تتعامل مع الأحرف الخاصة في عناوين URL. مثل أنظمة التشفير المستخدمة في الاتصالات البحرية، تضمن وصول رسالتك بالضبط كما هو مقصود، مما يمنع الأحرف مثل "#" أو "&" من أن يتم تفسيرها بشكل خاطئ.
>
**لماذا هذا مهم:**
-- يمنع الأحرف الخاصة من كسر عناوين URL.
-- يحمي من هجمات التلاعب بعناوين URL.
-- يضمن أن الخادم يتلقى البيانات المقصودة.
-- يتبع ممارسات البرمجة الآمنة.
+- يمنع الأحرف الخاصة من كسر عناوين URL
+- يحمي من هجمات التلاعب بعناوين URL
+- يضمن أن الخادم يتلقى البيانات المقصودة
+- يتبع ممارسات البرمجة الآمنة
#### فهم طلبات HTTP GET
إليك شيء قد يفاجئك: عندما تستخدم `fetch` بدون أي خيارات إضافية، فإنه ينشئ تلقائيًا طلب [`GET`](https://developer.mozilla.org/docs/Web/HTTP/Methods/GET). هذا مثالي لما نقوم به - طلب من الخادم "مرحبًا، هل يمكنني رؤية بيانات حساب هذا المستخدم؟"
-فكر في طلبات GET كطلب استعارة كتاب من المكتبة - تطلب رؤية شيء موجود بالفعل. طلبات POST (التي استخدمناها للتسجيل) تشبه تقديم كتاب جديد ليتم إضافته إلى المجموعة.
+فكر في طلبات GET كطلب استعارة كتاب من المكتبة - تطلب رؤية شيء موجود بالفعل. طلبات POST (التي استخدمناها للتسجيل) تشبه أكثر تقديم كتاب جديد ليتم إضافته إلى المجموعة.
| طلب GET | طلب POST |
|-------------|-------------|
| **الغرض** | استرجاع البيانات الموجودة | إرسال بيانات جديدة إلى الخادم |
| **المعلمات** | في مسار/سلسلة استعلام URL | في جسم الطلب |
-| **التخزين المؤقت** | يمكن تخزينه مؤقتًا بواسطة المتصفحات | عادةً لا يتم تخزينه مؤقتًا |
-| **الأمان** | مرئي في عنوان URL/السجلات | مخفي في جسم الطلب |
+| **التخزين المؤقت** | يمكن تخزينها مؤقتًا بواسطة المتصفحات | لا يتم تخزينها مؤقتًا عادةً |
+| **الأمان** | مرئية في عنوان URL/السجلات | مخفية في جسم الطلب |
+
+```mermaid
+sequenceDiagram
+ participant B as Browser
+ participant S as Server
+
+ Note over B,S: GET Request (Data Retrieval)
+ B->>S: GET /api/accounts/test
+ S-->>B: 200 OK + Account Data
+
+ Note over B,S: POST Request (Data Submission)
+ B->>S: POST /api/accounts + New Account Data
+ S-->>B: 201 Created + Confirmation
+
+ Note over B,S: Error Handling
+ B->>S: GET /api/accounts/nonexistent
+ S-->>B: 404 Not Found + Error Message
+```
#### الخطوة 3: جمع كل شيء معًا
-الآن الجزء الممتع - دعونا نربط وظيفة جلب الحساب بعملية تسجيل الدخول. هنا حيث كل شيء يتكامل:
+الآن الجزء الممتع - دعونا نربط وظيفة جلب بيانات الحساب بعملية تسجيل الدخول. هنا حيث كل شيء يتكامل:
```javascript
async function login() {
@@ -203,16 +319,16 @@ async function login() {
```
تتبع هذه الوظيفة تسلسلًا واضحًا:
-- استخراج اسم المستخدم من إدخال النموذج.
-- طلب بيانات حساب المستخدم من الخادم.
-- التعامل مع أي أخطاء تحدث أثناء العملية.
-- تخزين بيانات الحساب والانتقال إلى لوحة التحكم عند النجاح.
+- استخراج اسم المستخدم من إدخال النموذج
+- طلب بيانات حساب المستخدم من الخادم
+- التعامل مع أي أخطاء تحدث أثناء العملية
+- تخزين بيانات الحساب والانتقال إلى لوحة التحكم عند النجاح
> 🎯 **نمط Async/Await**: بما أن `getAccount` هي وظيفة غير متزامنة، نستخدم الكلمة المفتاحية `await` لإيقاف التنفيذ حتى يستجيب الخادم. هذا يمنع الكود من الاستمرار مع بيانات غير معرفة.
#### الخطوة 4: إنشاء مكان لبياناتك
-تطبيقك يحتاج إلى مكان لتذكر معلومات الحساب بمجرد تحميلها. فكر في هذا كمكان ذاكرة قصيرة المدى لتطبيقك - مكان للحفاظ على بيانات المستخدم الحالي في متناول اليد. أضف هذا السطر في أعلى ملف `app.js`:
+تطبيقك يحتاج إلى مكان لتذكر معلومات الحساب بمجرد تحميلها. فكر في هذا كمكان ذاكرة قصيرة المدى لتطبيقك - مكان للحفاظ على بيانات المستخدم الحالي في متناول اليد. أضف هذا السطر في أعلى ملف `app.js` الخاص بك:
```javascript
// This holds the current user's account data
@@ -220,14 +336,14 @@ let account = null;
```
**لماذا نحتاج هذا:**
-- يحافظ على بيانات الحساب متاحة من أي مكان في تطبيقك.
-- البدء بـ `null` يعني "لا أحد مسجل الدخول بعد".
-- يتم تحديثه عندما يسجل أحدهم الدخول أو التسجيل بنجاح.
-- يعمل كمصدر واحد للحقيقة - لا يوجد ارتباك حول من سجل الدخول.
+- يحافظ على بيانات الحساب متاحة من أي مكان في تطبيقك
+- البدء بـ `null` يعني "لا أحد مسجل الدخول بعد"
+- يتم تحديثه عندما يسجل شخص ما الدخول أو التسجيل بنجاح
+- يعمل كمصدر واحد للحقيقة - لا يوجد ارتباك حول من هو مسجل الدخول
-#### الخطوة 5: ربط النموذج الخاص بك
+#### الخطوة 5: توصيل النموذج الخاص بك
-الآن دعونا نربط وظيفة تسجيل الدخول الجديدة الخاصة بك بنموذج HTML الخاص بك. قم بتحديث علامة النموذج الخاصة بك مثل هذا:
+الآن دعونا نربط وظيفة تسجيل الدخول الجديدة الخاصة بك بنموذج HTML الخاص بك. قم بتحديث علامة النموذج الخاصة بك على هذا النحو:
```html
```
-**ما الذي يفعله هذا التغيير الصغير:**
-- يوقف النموذج من القيام بسلوكه الافتر
-للمحتوى الأكثر تعقيدًا، اجمع بين [`document.createElement()`](https://developer.mozilla.org/docs/Web/API/Document/createElement) وطريقة [`append()`](https://developer.mozilla.org/docs/Web/API/ParentNode/append):
+**ما يفعله هذا التغيير الصغير:**
+- يوقف النموذج من القيام بسلوك "إعادة تحميل الصفحة بالكامل" الافتراضي
+- يستدعي وظيفة JavaScript المخصصة الخاصة بك بدلاً من ذلك
+- يحافظ على كل شيء سلسًا ومشابهًا لتطبيق الصفحة الواحدة
+- يمنحك التحكم الكامل في ما يحدث عندما يضغط المستخدمون على "تسجيل الدخول"
+
+#### الخطوة 6: تحسين وظيفة التسجيل الخاصة بك
+
+للحفاظ على التناسق، قم بتحديث وظيفة `register` الخاصة بك لتخزين بيانات الحساب أيضًا والانتقال إلى لوحة التحكم:
+
+```javascript
+// Add these lines at the end of your register function
+account = result;
+navigate('/dashboard');
+```
+
+**يوفر هذا التحسين:**
+- **انتقال سلس** من التسجيل إلى لوحة التحكم
+- **تجربة مستخدم متسقة** بين تدفقات تسجيل الدخول والتسجيل
+- **وصول فوري** إلى بيانات الحساب بعد التسجيل الناجح
+
+#### اختبار التنفيذ الخاص بك
+
+```mermaid
+flowchart TD
+ A[User enters credentials] --> B[Login function called]
+ B --> C[Fetch account data from server]
+ C --> D{Data received successfully?}
+ D -->|Yes| E[Store account data globally]
+ D -->|No| F[Display error message]
+ E --> G[Navigate to dashboard]
+ F --> H[User stays on login page]
+```
+
+**حان الوقت لتجربته:**
+1. أنشئ حسابًا جديدًا للتأكد من أن كل شيء يعمل
+2. حاول تسجيل الدخول باستخدام نفس بيانات الاعتماد
+3. ألقِ نظرة على وحدة التحكم في المتصفح الخاص بك (F12) إذا كان هناك أي شيء يبدو غير صحيح
+4. تأكد من أنك تصل إلى لوحة التحكم بعد تسجيل الدخول بنجاح
+
+إذا كان هناك شيء لا يعمل، لا داعي للذعر! معظم المشاكل يمكن حلها بسهولة مثل الأخطاء الإملائية أو نسيان تشغيل خادم API.
+
+#### كلمة سريعة عن السحر عبر الأصل
+
+قد تتساءل: "كيف يتحدث تطبيق الويب الخاص بي إلى خادم API هذا بينما يعملان على منافذ مختلفة؟" سؤال رائع! هذا يتعلق بشيء يواجهه كل مطور ويب في النهاية.
+
+> 🔒 **أمان عبر الأصل**: المتصفحات تفرض "سياسة الأصل نفسه" لمنع الاتصالات غير المصرح بها بين المجالات المختلفة. مثل نظام نقاط التفتيش في البنتاغون، يتحققون من أن الاتصال مصرح به قبل السماح بنقل البيانات.
+>
+**في إعدادنا:**
+- تطبيق الويب الخاص بك يعمل على `localhost:3000` (خادم التطوير)
+- خادم API الخاص بك يعمل على `localhost:5000` (الخادم الخلفي)
+- يتضمن خادم API [رؤوس CORS](https://developer.mozilla.org/docs/Web/HTTP/CORS) التي تسمح صراحةً بالاتصال من تطبيق الويب الخاص بك
+
+هذا التكوين يعكس تطوير العالم الحقيقي حيث تعمل التطبيقات الأمامية والخلفية عادةً على خوادم منفصلة.
+
+> 📚 **تعلم المزيد**: تعمق في واجهات برمجة التطبيقات وجلب البيانات مع هذا [الوحدة التعليمية الشاملة من Microsoft Learn حول واجهات برمجة التطبيقات](https://docs.microsoft.com/learn/modules/use-apis-discover-museum-art/?WT.mc_id=academic-77807-sagibbon).
+
+## إحياء بياناتك في HTML
+
+الآن سنجعل البيانات التي تم جلبها مرئية للمستخدمين من خلال التلاعب بـ DOM. مثل عملية تطوير الصور في غرفة مظلمة، نحن نحول البيانات غير المرئية إلى شيء يمكن للمستخدمين رؤيته والتفاعل معه.
+التعامل مع DOM هو التقنية التي تحول صفحات الويب الثابتة إلى تطبيقات ديناميكية تقوم بتحديث محتواها بناءً على تفاعلات المستخدم واستجابات الخادم.
+
+### اختيار الأداة المناسبة للعمل
+
+عندما يتعلق الأمر بتحديث HTML باستخدام JavaScript، لديك عدة خيارات. فكر في هذه الخيارات كأدوات مختلفة في صندوق الأدوات - كل واحدة مثالية لمهام معينة:
+
+| الطريقة | ما هي ممتازة له | متى تستخدمها | مستوى الأمان |
+|--------|---------------------|----------------|--------------|
+| `textContent` | عرض بيانات المستخدم بأمان | في أي وقت تعرض فيه نصًا | ✅ موثوق للغاية |
+| `createElement()` + `append()` | إنشاء تخطيطات معقدة | إنشاء أقسام/قوائم جديدة | ✅ آمن تمامًا |
+| `innerHTML` | إعداد محتوى HTML | ⚠️ حاول تجنب هذه الطريقة | ❌ محفوفة بالمخاطر |
+
+#### الطريقة الآمنة لعرض النص: textContent
+
+خاصية [`textContent`](https://developer.mozilla.org/docs/Web/API/Node/textContent) هي أفضل صديق لك عند عرض بيانات المستخدم. إنها مثل الحارس الشخصي لصفحتك على الويب - لا شيء ضار يمكن أن يمر:
+
+```javascript
+// The safe, reliable way to update text
+const balanceElement = document.getElementById('balance');
+balanceElement.textContent = account.balance;
+```
+
+**فوائد textContent:**
+- تعامل كل شيء كنص عادي (تمنع تنفيذ السكربتات)
+- تقوم بمسح المحتوى الموجود تلقائيًا
+- فعالة لتحديث النصوص البسيطة
+- توفر أمانًا مدمجًا ضد المحتوى الضار
+
+#### إنشاء عناصر HTML ديناميكية
+
+للحصول على محتوى أكثر تعقيدًا، اجمع بين [`document.createElement()`](https://developer.mozilla.org/docs/Web/API/Document/createElement) وطريقة [`append()`](https://developer.mozilla.org/docs/Web/API/ParentNode/append):
```javascript
// Safe way to create new elements
@@ -248,28 +452,28 @@ container.append(transactionItem);
```
**فهم هذا النهج:**
-- **إنشاء** عناصر DOM جديدة برمجياً
-- **الحفاظ** على التحكم الكامل في خصائص العناصر ومحتواها
-- **السماح** بإنشاء هياكل عناصر متداخلة ومعقدة
-- **الحفاظ** على الأمان بفصل الهيكل عن المحتوى
+- **ينشئ** عناصر DOM جديدة برمجيًا
+- **يحافظ** على التحكم الكامل في سمات العنصر ومحتواه
+- **يسمح** بإنشاء هياكل عناصر متداخلة ومعقدة
+- **يحافظ** على الأمان بفصل الهيكل عن المحتوى
-> ⚠️ **اعتبارات الأمان**: بينما يظهر [`innerHTML`](https://developer.mozilla.org/docs/Web/API/Element/innerHTML) في العديد من الدروس، يمكنه تنفيذ النصوص البرمجية المضمنة. مثل بروتوكولات الأمان في CERN التي تمنع تنفيذ الأكواد غير المصرح بها، فإن استخدام `textContent` و `createElement` يوفر بدائل أكثر أمانًا.
+> ⚠️ **اعتبارات الأمان**: بينما تظهر خاصية [`innerHTML`](https://developer.mozilla.org/docs/Web/API/Element/innerHTML) في العديد من الدروس، يمكنها تنفيذ السكربتات المضمنة. مثل بروتوكولات الأمان في CERN التي تمنع تنفيذ الأكواد غير المصرح بها، استخدام `textContent` و `createElement` يوفر بدائل أكثر أمانًا.
>
-**مخاطر استخدام innerHTML:**
-- تنفيذ أي علامات ``، فإن هذه الوظيفة تضمن عرضه كنص بدلاً من تنفيذه ككود.
+**لماذا هذا مهم**: إذا قام المستخدم بكتابة ``، فإن هذه الوظيفة تضمن عرضه كنص بدلاً من تنفيذه ككود.
**معالجة الأخطاء**:
```javascript
@@ -1495,25 +1687,40 @@ try {
```
**اعتبارات تجربة المستخدم**:
-- **واجهة مستخدم متفائلة**: أضف رسالة المستخدم فورًا، لا تنتظر استجابة الخادم
-- **حالات التحميل**: تعطيل الأزرار وعرض "جارٍ الإرسال..." أثناء الانتظار
-- **التمرير التلقائي**: حافظ على ظهور الرسائل الجديدة
-- **التحقق من الإدخال**: لا ترسل رسائل فارغة
-- **اختصارات لوحة المفاتيح**: مفتاح Enter يرسل الرسائل (مثل تطبيقات الدردشة الحقيقية)
+- **واجهة متفائلة**: أضف رسالة المستخدم فورًا، دون انتظار استجابة الخادم.
+- **حالات التحميل**: قم بتعطيل الأزرار وأظهر "جارٍ الإرسال..." أثناء الانتظار.
+- **التمرير التلقائي**: اجعل الرسائل الأحدث مرئية.
+- **التحقق من الإدخال**: لا ترسل رسائل فارغة.
+- **اختصارات لوحة المفاتيح**: مفتاح Enter يرسل الرسائل (مثل تطبيقات الدردشة الحقيقية).
#### فهم تدفق التطبيق
-1. **تحميل الصفحة** → يتم تشغيل حدث `DOMContentLoaded` → يتم إنشاء `new ChatApp()`
-2. **تشغيل المُنشئ** → يحصل على مراجع عناصر DOM → إعداد مستمعي الأحداث
-3. **يكتب المستخدم رسالة** → يضغط Enter أو ينقر على إرسال → يتم تشغيل `handleSubmit`
-4. **handleSubmit** → يتحقق من صحة الإدخال → يعرض حالة التحميل → يستدعي API
-5. **استجابة API** → إضافة رسالة الذكاء الاصطناعي إلى الدردشة → إعادة تمكين الواجهة
-6. **جاهز للرسالة التالية** → يمكن للمستخدم متابعة المحادثة
-هذا التصميم قابل للتوسع – يمكنك بسهولة إضافة ميزات مثل تعديل الرسائل، تحميل الملفات، أو إنشاء محادثات متعددة دون الحاجة لإعادة كتابة الهيكل الأساسي.
+1. **تحميل الصفحة** → يتم تشغيل حدث `DOMContentLoaded` → يتم إنشاء `new ChatApp()`.
+2. **تشغيل المُنشئ** → الحصول على مراجع عناصر DOM → إعداد مستمعي الأحداث.
+3. **كتابة المستخدم للرسالة** → الضغط على Enter أو النقر على إرسال → يتم تشغيل `handleSubmit`.
+4. **تشغيل handleSubmit** → التحقق من صحة الإدخال → عرض حالة التحميل → استدعاء API.
+5. **استجابة API** → إضافة رسالة الذكاء الاصطناعي إلى الدردشة → إعادة تمكين الواجهة.
+6. **جاهز للرسالة التالية** → يمكن للمستخدم متابعة الدردشة.
-### تنسيق واجهة الدردشة الخاصة بك
+هذه البنية قابلة للتوسع – يمكنك بسهولة إضافة ميزات مثل تعديل الرسائل، تحميل الملفات، أو سلاسل محادثات متعددة دون إعادة كتابة الهيكل الأساسي.
-الآن دعونا ننشئ واجهة دردشة حديثة وجذابة بصريًا باستخدام CSS. التنسيق الجيد يجعل تطبيقك يبدو احترافيًا ويحسن تجربة المستخدم بشكل عام. سنستخدم ميزات CSS الحديثة مثل Flexbox، CSS Grid، والخصائص المخصصة لتصميم مستجيب وسهل الوصول.
+### 🎯 مراجعة تعليمية: بنية الواجهة الأمامية الحديثة
+
+**فهم البنية**: لقد قمت بتنفيذ تطبيق صفحة واحدة كامل باستخدام أنماط JavaScript الحديثة. هذا يمثل تطوير واجهة أمامية بمستوى احترافي.
+
+**المفاهيم الرئيسية التي تم إتقانها**:
+- **بنية الفئات في ES6**: هيكل كود منظم وقابل للصيانة.
+- **أنماط Async/Await**: برمجة غير متزامنة حديثة.
+- **برمجة الأحداث**: تصميم واجهة مستخدم تفاعلية.
+- **أفضل ممارسات الأمان**: منع XSS والتحقق من الإدخال.
+
+**الاتصال بالصناعة**: الأنماط التي تعلمتها (بنية تعتمد على الفئات، العمليات غير المتزامنة، التعامل مع DOM) هي أساس الأطر الحديثة مثل React وVue وAngular. أنت تبني بنفس التفكير المعماري المستخدم في التطبيقات الإنتاجية.
+
+**سؤال للتفكير**: كيف يمكنك توسيع تطبيق الدردشة هذا للتعامل مع محادثات متعددة أو مصادقة المستخدم؟ فكر في التغييرات المعمارية المطلوبة وكيف يمكن أن تتطور بنية الفئة.
+
+### تصميم واجهة الدردشة الخاصة بك
+
+الآن دعونا ننشئ واجهة دردشة حديثة وجذابة بصريًا باستخدام CSS. التصميم الجيد يجعل تطبيقك يبدو احترافيًا ويحسن تجربة المستخدم بشكل عام. سنستخدم ميزات CSS الحديثة مثل Flexbox وCSS Grid والخصائص المخصصة لتصميم مستجيب وسهل الوصول.
قم بإنشاء ملف `styles.css` باستخدام هذه الأنماط الشاملة:
@@ -1775,17 +1982,17 @@ body {
```
**فهم بنية CSS:**
-- **استخدام** الخصائص المخصصة لـ CSS (المتغيرات) لتوحيد التصميم وسهولة الصيانة
-- **تطبيق** تخطيط Flexbox لتصميم مستجيب ومحاذاة صحيحة
-- **تضمين** حركات سلسة لظهور الرسائل دون أن تكون مشتتة
-- **توفير** تمييز بصري بين رسائل المستخدم، ردود الذكاء الاصطناعي، وحالات الخطأ
-- **دعم** التصميم المستجيب الذي يعمل على أجهزة الكمبيوتر المكتبية والهواتف المحمولة
-- **مراعاة** سهولة الوصول مع تفضيلات تقليل الحركة ونسب التباين المناسبة
-- **تقديم** دعم الوضع الداكن بناءً على تفضيلات نظام المستخدم
+- **استخدام** خصائص CSS المخصصة (المتغيرات) لتوحيد التصميم وسهولة الصيانة.
+- **تطبيق** تخطيط Flexbox لتصميم مستجيب ومحاذاة صحيحة.
+- **تضمين** حركات سلسة لظهور الرسائل دون أن تكون مشتتة.
+- **توفير** تمييز بصري بين رسائل المستخدم، ردود الذكاء الاصطناعي، وحالات الخطأ.
+- **دعم** تصميم مستجيب يعمل على كل من أجهزة الكمبيوتر المكتبية والهواتف المحمولة.
+- **مراعاة** إمكانية الوصول مع تفضيلات تقليل الحركة ونسب تباين مناسبة.
+- **تقديم** دعم الوضع الداكن بناءً على تفضيلات نظام المستخدم.
### إعداد عنوان URL الخاص بالخادم الخلفي
-الخطوة الأخيرة هي تحديث `BASE_URL` في JavaScript الخاص بك ليتطابق مع خادمك الخلفي:
+الخطوة الأخيرة هي تحديث `BASE_URL` في JavaScript الخاص بك لتطابق خادمك الخلفي:
```javascript
// For local development
@@ -1796,15 +2003,15 @@ this.BASE_URL = "https://your-codespace-name-5000.app.github.dev";
```
**تحديد عنوان URL الخاص بالخادم الخلفي:**
-- **التطوير المحلي**: استخدم `http://localhost:5000` إذا كنت تقوم بتشغيل الواجهة الأمامية والخلفية محليًا
-- **Codespaces**: ابحث عن عنوان URL الخاص بالخادم الخلفي في علامة تبويب المنافذ بعد جعل المنفذ 5000 عامًا
-- **الإنتاج**: استبدل بعنوان نطاقك الفعلي عند النشر على خدمة استضافة
+- **التطوير المحلي**: استخدم `http://localhost:5000` إذا كنت تشغل الواجهة الأمامية والخلفية محليًا.
+- **Codespaces**: ابحث عن عنوان URL الخاص بالخادم الخلفي في علامة التبويب Ports بعد جعل المنفذ 5000 عامًا.
+- **الإنتاج**: استبدل بالنطاق الفعلي الخاص بك عند النشر على خدمة استضافة.
-> 💡 **نصيحة للاختبار**: يمكنك اختبار الخادم الخلفي مباشرةً عن طريق زيارة عنوان URL الجذر في متصفحك. يجب أن ترى رسالة الترحيب من خادم FastAPI الخاص بك.
+> 💡 **نصيحة اختبار**: يمكنك اختبار الخادم الخلفي مباشرةً عن طريق زيارة عنوان URL الجذر في متصفحك. يجب أن ترى رسالة الترحيب من خادم FastAPI الخاص بك.
## الاختبار والنشر
-الآن بعد أن قمت ببناء مكونات الواجهة الأمامية والخلفية، دعونا نختبر أن كل شيء يعمل معًا ونستكشف خيارات النشر لمشاركة مساعد الدردشة الخاص بك مع الآخرين.
+الآن بعد أن قمت ببناء كل من مكونات الواجهة الأمامية والخلفية، دعونا نختبر أن كل شيء يعمل معًا ونستكشف خيارات النشر لمشاركة مساعد الدردشة الخاص بك مع الآخرين.
### سير عمل الاختبار المحلي
@@ -1828,53 +2035,112 @@ graph TD
python api.py
```
-2. **تحقق من عمل واجهة برمجة التطبيقات**:
- - افتح `http://localhost:5000` في متصفحك
- - يجب أن ترى رسالة الترحيب من خادم FastAPI الخاص بك
+2. **تحقق من عمل API**:
+ - افتح `http://localhost:5000` في متصفحك.
+ - يجب أن ترى رسالة الترحيب من خادم FastAPI الخاص بك.
3. **افتح واجهتك الأمامية**:
- - انتقل إلى دليل الواجهة الأمامية الخاص بك
- - افتح `index.html` في متصفح الويب الخاص بك
- - أو استخدم إضافة Live Server في VS Code لتجربة تطوير أفضل
+ - انتقل إلى دليل الواجهة الأمامية.
+ - افتح `index.html` في متصفح الويب الخاص بك.
+ - أو استخدم إضافة Live Server في VS Code لتجربة تطوير أفضل.
4. **اختبر وظيفة الدردشة**:
- - اكتب رسالة في حقل الإدخال
- - انقر على "إرسال" أو اضغط على Enter
- - تحقق من أن الذكاء الاصطناعي يرد بشكل مناسب
- - تحقق من وحدة التحكم في المتصفح لأي أخطاء JavaScript
+ - اكتب رسالة في حقل الإدخال.
+ - انقر على "إرسال" أو اضغط على Enter.
+ - تحقق من أن الذكاء الاصطناعي يستجيب بشكل مناسب.
+ - تحقق من وحدة التحكم في المتصفح لأي أخطاء JavaScript.
### استكشاف المشكلات الشائعة وإصلاحها
| المشكلة | الأعراض | الحل |
|---------|----------|----------|
-| **خطأ CORS** | الواجهة الأمامية لا يمكنها الوصول إلى الخادم الخلفي | تأكد من تكوين FastAPI CORSMiddleware بشكل صحيح |
-| **خطأ مفتاح API** | ردود غير مصرح بها 401 | تحقق من متغير البيئة `GITHUB_TOKEN` الخاص بك |
-| **رفض الاتصال** | أخطاء الشبكة في الواجهة الأمامية | تحقق من عنوان URL الخاص بالخادم الخلفي وأن خادم Flask يعمل |
-| **لا يوجد رد من الذكاء الاصطناعي** | ردود فارغة أو بها أخطاء | تحقق من سجلات الخادم الخلفي لمشاكل الحصة أو المصادقة |
+| **خطأ CORS** | الواجهة الأمامية لا يمكنها الوصول إلى الخلفية | تأكد من إعداد FastAPI CORSMiddleware بشكل صحيح |
+| **خطأ مفتاح API** | استجابات 401 Unauthorized | تحقق من متغير البيئة `GITHUB_TOKEN` |
+| **رفض الاتصال** | أخطاء الشبكة في الواجهة الأمامية | تحقق من عنوان URL الخلفي وأن خادم Flask يعمل |
+| **لا يوجد رد من الذكاء الاصطناعي** | استجابات فارغة أو بها أخطاء | تحقق من سجلات الخلفية لمشاكل الحصة أو المصادقة |
**خطوات تصحيح الأخطاء الشائعة:**
-- **تحقق** من وحدة التحكم في أدوات المطور في المتصفح لأخطاء JavaScript
-- **تأكد** من أن علامة الشبكة تظهر طلبات واستجابات API ناجحة
-- **راجع** مخرجات الطرفية للخادم الخلفي لأخطاء Python أو مشاكل API
-- **تأكد** من تحميل متغيرات البيئة بشكل صحيح وقابلة للوصول
+- **تحقق** من وحدة التحكم في أدوات المطور في المتصفح لأخطاء JavaScript.
+- **تأكد** من أن علامة التبويب Network تعرض طلبات واستجابات API ناجحة.
+- **راجع** إخراج الطرفية الخلفية لأخطاء Python أو مشاكل API.
+- **تأكد** من تحميل متغيرات البيئة بشكل صحيح ويمكن الوصول إليها.
+
+## 📈 جدول زمني لإتقان تطوير تطبيقات الذكاء الاصطناعي
+
+```mermaid
+timeline
+ title Complete AI Application Development Journey
+
+ section AI Foundations
+ Understanding Generative AI
+ : Grasp pattern recognition concepts
+ : Master AI parameter control
+ : Learn prompt engineering techniques
+
+ GitHub Models Integration
+ : Navigate AI service platforms
+ : Handle authentication securely
+ : Optimize model parameters
+
+ section Backend Development
+ Python API Architecture
+ : Build FastAPI applications
+ : Implement async operations
+ : Create secure endpoints
+
+ AI Service Integration
+ : Connect to external AI APIs
+ : Handle rate limiting
+ : Implement error boundaries
+
+ section Frontend Mastery
+ Modern JavaScript Patterns
+ : Master ES6 class architecture
+ : Implement async/await flows
+ : Build responsive interfaces
+
+ Real-time User Experience
+ : Create dynamic chat interfaces
+ : Handle loading states
+ : Optimize user interactions
+
+ section Production Readiness
+ Security & Performance
+ : Implement secure token management
+ : Prevent XSS vulnerabilities
+ : Optimize API performance
+
+ Professional Deployment
+ : Build scalable architectures
+ : Create maintainable code
+ : Document development processes
+```
+
+**🎓 إنجاز التخرج**: لقد قمت ببناء تطبيق كامل مدعوم بالذكاء الاصطناعي باستخدام نفس التقنيات والأنماط المعمارية التي تدعم مساعدي الذكاء الاصطناعي الحديثين. هذه المهارات تمثل تقاطع تطوير الويب التقليدي مع دمج الذكاء الاصطناعي المتقدم.
+
+**🔄 قدرات المستوى التالي**:
+- جاهز لاستكشاف أطر الذكاء الاصطناعي المتقدمة (LangChain، LangGraph).
+- مستعد لبناء تطبيقات ذكاء اصطناعي متعددة الوسائط (نص، صورة، صوت).
+- مجهز لتنفيذ قواعد بيانات المتجهات وأنظمة الاسترجاع.
+- تم إعداد الأساس لتعلم الآلة وضبط نماذج الذكاء الاصطناعي.
-## تحدي وكيل GitHub Copilot 🚀
+## تحدي GitHub Copilot Agent 🚀
-استخدم وضع الوكيل لإكمال التحدي التالي:
+استخدم وضع Agent لإكمال التحدي التالي:
**الوصف:** قم بتحسين مساعد الدردشة عن طريق إضافة سجل المحادثات واستمرارية الرسائل. سيساعدك هذا التحدي على فهم كيفية إدارة الحالة في تطبيقات الدردشة وتنفيذ تخزين البيانات لتحسين تجربة المستخدم.
-**المهمة:** قم بتعديل تطبيق الدردشة ليشمل سجل المحادثات الذي يستمر بين الجلسات. أضف وظيفة لحفظ رسائل الدردشة في التخزين المحلي، عرض سجل المحادثات عند تحميل الصفحة، وتضمين زر "مسح السجل". قم أيضًا بتنفيذ مؤشرات الكتابة وأوقات إرسال الرسائل لجعل تجربة الدردشة أكثر واقعية.
+**المهمة:** قم بتعديل تطبيق الدردشة ليشمل سجل المحادثات الذي يستمر بين الجلسات. أضف وظيفة لحفظ رسائل الدردشة في التخزين المحلي، عرض سجل المحادثات عند تحميل الصفحة، وتضمين زر "مسح السجل". قم أيضًا بتنفيذ مؤشرات الكتابة وطوابع زمنية للرسائل لجعل تجربة الدردشة أكثر واقعية.
-تعرف على المزيد حول [وضع الوكيل](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
+تعرف على المزيد حول [وضع Agent](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) هنا.
## المهمة: بناء مساعد الذكاء الاصطناعي الشخصي الخاص بك
-الآن ستقوم بإنشاء تطبيق مساعد الذكاء الاصطناعي الخاص بك. بدلاً من مجرد تكرار كود الدرس، هذه فرصة لتطبيق المفاهيم أثناء بناء شيء يعكس اهتماماتك وحالات الاستخدام الخاصة بك.
+الآن ستقوم بإنشاء تطبيق مساعد الذكاء الاصطناعي الخاص بك. بدلاً من مجرد تكرار كود الدليل، هذه فرصة لتطبيق المفاهيم أثناء بناء شيء يعكس اهتماماتك وحالات الاستخدام الخاصة بك.
### متطلبات المشروع
-دعونا نُعد مشروعك بهيكل نظيف ومنظم:
+لنقم بإعداد مشروعك بهيكل نظيف ومنظم:
```text
my-ai-assistant/
@@ -1892,67 +2158,67 @@ my-ai-assistant/
### مهام التنفيذ الأساسية
-**تطوير الخادم الخلفي:**
-- **استخدم** كود FastAPI الخاص بنا واجعله خاصًا بك
-- **أنشئ** شخصية فريدة للذكاء الاصطناعي – ربما مساعد طهي مفيد، شريك كتابة إبداعي، أو زميل دراسة؟
-- **أضف** معالجة أخطاء قوية حتى لا يتعطل تطبيقك عند حدوث مشاكل
-- **اكتب** وثائق واضحة لأي شخص يريد فهم كيفية عمل واجهة برمجة التطبيقات الخاصة بك
+**تطوير الخلفية:**
+- **خذ** كود FastAPI الخاص بنا واجعله خاصًا بك.
+- **أنشئ** شخصية ذكاء اصطناعي فريدة – ربما مساعد طهي مفيد، شريك كتابة إبداعي، أو زميل دراسة؟
+- **أضف** معالجة أخطاء قوية حتى لا يتعطل تطبيقك عندما تسوء الأمور.
+- **اكتب** وثائق واضحة لأي شخص يريد فهم كيفية عمل API الخاص بك.
**تطوير الواجهة الأمامية:**
-- **قم ببناء** واجهة دردشة تبدو بديهية ومرحبة
-- **اكتب** JavaScript حديث ونظيف يمكنك أن تفخر بعرضه على المطورين الآخرين
-- **صمم** تنسيقًا مخصصًا يعكس شخصية الذكاء الاصطناعي الخاص بك – مرح وملون؟ نظيف وبسيط؟ الأمر متروك لك تمامًا!
-- **تأكد** من أنه يعمل بشكل رائع على كل من الهواتف وأجهزة الكمبيوتر
+- **قم ببناء** واجهة دردشة تبدو بديهية ومرحبة.
+- **اكتب** JavaScript حديث ونظيف ستفخر بعرضه للمطورين الآخرين.
+- **صمم** أنماطًا مخصصة تعكس شخصية الذكاء الاصطناعي الخاص بك – ممتعة وملونة؟ نظيفة وبسيطة؟ الأمر متروك لك تمامًا!
+- **تأكد** من أنها تعمل بشكل رائع على كل من الهواتف وأجهزة الكمبيوتر.
**متطلبات التخصيص:**
-- **اختر** اسمًا وشخصية فريدة لمساعد الذكاء الاصطناعي الخاص بك – ربما شيء يعكس اهتماماتك أو المشاكل التي تريد حلها
-- **خصص** التصميم المرئي ليتناسب مع طابع مساعدك
-- **اكتب** رسالة ترحيب جذابة تجعل الناس يرغبون في بدء الدردشة
-- **اختبر** مساعدك مع أنواع مختلفة من الأسئلة لترى كيف يرد
+- **اختر** اسمًا وشخصية فريدة لمساعد الذكاء الاصطناعي الخاص بك – ربما شيء يعكس اهتماماتك أو المشاكل التي تريد حلها.
+- **خصص** التصميم المرئي ليتناسب مع أجواء مساعدك.
+- **اكتب** رسالة ترحيب جذابة تجعل الناس يرغبون في بدء الدردشة.
+- **اختبر** مساعدك مع أنواع مختلفة من الأسئلة لترى كيف يستجيب.
### أفكار تحسين (اختياري)
هل تريد رفع مستوى مشروعك؟ إليك بعض الأفكار الممتعة لاستكشافها:
-| الميزة | الوصف | المهارات التي ستتدرب عليها |
+| الميزة | الوصف | المهارات التي ستتمرن عليها |
|---------|-------------|------------------------|
| **سجل الرسائل** | تذكر المحادثات حتى بعد تحديث الصفحة | العمل مع التخزين المحلي، التعامل مع JSON |
-| **مؤشرات الكتابة** | عرض "الذكاء الاصطناعي يكتب..." أثناء انتظار الردود | حركات CSS، البرمجة غير المتزامنة |
+| **مؤشرات الكتابة** | عرض "الذكاء الاصطناعي يكتب..." أثناء انتظار الردود | الرسوم المتحركة في CSS، البرمجة غير المتزامنة |
| **طوابع زمنية للرسائل** | عرض وقت إرسال كل رسالة | تنسيق التاريخ/الوقت، تصميم تجربة المستخدم |
| **تصدير الدردشة** | السماح للمستخدمين بتنزيل محادثاتهم | التعامل مع الملفات، تصدير البيانات |
| **تبديل السمات** | تبديل الوضع الفاتح/الداكن | متغيرات CSS، تفضيلات المستخدم |
-| **إدخال صوتي** | إضافة وظيفة تحويل الكلام إلى نص | واجهات برمجة التطبيقات، سهولة الوصول |
+| **إدخال صوتي** | إضافة وظيفة تحويل الكلام إلى نص | واجهات برمجة التطبيقات للويب، إمكانية الوصول |
### الاختبار والتوثيق
**ضمان الجودة:**
-- **اختبر** تطبيقك مع أنواع مختلفة من المدخلات والحالات الحافة
-- **تحقق** من أن التصميم المستجيب يعمل على أحجام شاشات مختلفة
-- **افحص** سهولة الوصول باستخدام التنقل عبر لوحة المفاتيح وقارئات الشاشة
-- **تحقق** من صحة HTML وCSS للامتثال للمعايير
+- **اختبر** تطبيقك مع أنواع مختلفة من الإدخال والحالات الحدية.
+- **تحقق** من أن التصميم المستجيب يعمل على أحجام شاشات مختلفة.
+- **افحص** إمكانية الوصول باستخدام التنقل عبر لوحة المفاتيح وقارئات الشاشة.
+- **تحقق** من صحة HTML وCSS للامتثال للمعايير.
**متطلبات التوثيق:**
-- **اكتب** ملف README.md يشرح مشروعك وكيفية تشغيله
-- **قم بتضمين** لقطات شاشة لواجهة الدردشة الخاصة بك أثناء العمل
-- **وثق** أي ميزات فريدة أو تخصيصات أضفتها
-- **قدم** تعليمات إعداد واضحة للمطورين الآخرين
+- **اكتب** README.md يشرح مشروعك وكيفية تشغيله.
+- **قم بتضمين** لقطات شاشة لواجهة الدردشة الخاصة بك أثناء العمل.
+- **وثق** أي ميزات أو تخصيصات فريدة أضفتها.
+- **قدم** تعليمات إعداد واضحة للمطورين الآخرين.
### إرشادات التقديم
**مخرجات المشروع:**
-1. مجلد المشروع الكامل مع جميع الكود المصدري
-2. README.md مع وصف المشروع وتعليمات الإعداد
-3. لقطات شاشة توضح مساعد الدردشة الخاص بك أثناء العمل
-4. انعكاس موجز لما تعلمته وما التحديات التي واجهتها
+1. مجلد المشروع الكامل مع جميع الكود المصدري.
+2. README.md مع وصف المشروع وتعليمات الإعداد.
+3. لقطات شاشة توضح مساعد الدردشة الخاص بك أثناء العمل.
+4. انعكاس موجز لما تعلمته وما التحديات التي واجهتها.
**معايير التقييم:**
- **الوظائف**: هل يعمل مساعد الدردشة كما هو متوقع؟
-- **جودة الكود**: هل الكود منظم جيدًا، معلق عليه، وقابل للصيانة؟
+- **جودة الكود**: هل الكود منظم، ومعلق عليه، وقابل للصيانة؟
- **التصميم**: هل الواجهة جذابة بصريًا وسهلة الاستخدام؟
-- **الإبداع**: ما مدى تفرد وتخصيص تنفيذك؟
+- **الإبداع**: ما مدى تفرد وتخصيص التنفيذ الخاص بك؟
- **التوثيق**: هل تعليمات الإعداد واضحة وكاملة؟
-> 💡 **نصيحة للنجاح**: ابدأ بالمتطلبات الأساسية أولاً، ثم أضف التحسينات بمجرد أن يعمل كل شيء. ركز على إنشاء تجربة أساسية مصقولة قبل إضافة ميزات متقدمة.
+> 💡 **نصيحة النجاح**: ابدأ بالمتطلبات الأساسية أولاً، ثم أضف التحسينات بمجرد أن يعمل كل شيء. ركز على إنشاء تجربة أساسية مصقولة قبل إضافة ميزات متقدمة.
## الحل
@@ -1960,13 +2226,13 @@ my-ai-assistant/
## تحديات إضافية
-هل أنت مستعد لرفع مستوى مساعد الذكاء الاصطناعي الخاص بك؟ جرب هذه التحديات المتقدمة التي ستعمق فهمك لتكامل الذكاء الاصطناعي وتطوير الويب.
+هل أنت مستعد لأخذ مساعد الذكاء الاصطناعي الخاص بك إلى المستوى التالي؟ جرب هذه التحديات المتقدمة التي ستعمق فهمك لدمج الذكاء الاصطناعي وتطوير الويب.
### تخصيص الشخصية
-السحر الحقيقي يحدث عندما تمنح مساعد الذكاء الاصطناعي شخصية فريدة. جرب إعدادات النظام المختلفة لإنشاء مساعدين متخصصين:
+السحر الحقيقي يحدث عندما تمنح مساعد الذكاء الاصطناعي الخاص بك شخصية فريدة. جرب مطالبات النظام المختلفة لإنشاء مساعدين متخصصين:
-**مثال مساعد محترف:**
+**مثال مساعد احترافي:**
```python
call_llm(message, "You are a professional business consultant with 20 years of experience. Provide structured, actionable advice with specific steps and considerations.")
```
@@ -1976,68 +2242,68 @@ call_llm(message, "You are a professional business consultant with 20 years of e
call_llm(message, "You are an enthusiastic creative writing coach. Help users develop their storytelling skills with imaginative prompts and constructive feedback.")
```
-**مثال مرشد تقني:**
+**مثال المرشد الفني:**
```python
call_llm(message, "You are a patient senior developer who explains complex programming concepts using simple analogies and practical examples.")
```
### تحسينات الواجهة الأمامية
-حول واجهة الدردشة الخاصة بك باستخدام هذه التحسينات البصرية والوظيفية:
+قم بتحويل واجهة الدردشة الخاصة بك باستخدام هذه التحسينات البصرية والوظيفية:
**ميزات CSS المتقدمة:**
-- **قم بتطبيق** حركات الرسائل السلسة والانتقالات
-- **أضف** تصميم فقاعات الدردشة المخصصة باستخدام أشكال CSS والتدرجات
-- **أنشئ** حركة مؤشر الكتابة عندما يكون الذكاء الاصطناعي "يفكر"
-- **صمم** ردود فعل الرموز التعبيرية أو نظام تقييم الرسائل
+- **قم بتطبيق** حركات سلسة للرسائل والانتقالات.
+- **أضف** تصميم فقاعات دردشة مخصص باستخدام أشكال وتدرجات CSS.
+- **أنشئ** حركة مؤشر الكتابة عندما يكون الذكاء الاصطناعي "يفكر".
+- **صمم** ردود فعل الرموز التعبيرية أو نظام تقييم الرسائل.
**تحسينات JavaScript:**
-- **أضف** اختصارات لوحة المفاتيح (Ctrl+Enter للإرسال، Escape لمسح الإدخال)
-- **قم بتنفيذ** وظيفة البحث والتصفية للرسائل
-- **أنشئ** ميزة تصدير المحادثة (تنزيل كملف نصي أو JSON)
-- **أضف** الحفظ التلقائي إلى التخزين المحلي لمنع فقدان الرسائل
+- **أضف** اختصارات لوحة المفاتيح (Ctrl+Enter للإرسال، Escape لمسح الإدخال).
+- **قم بتنفيذ** وظيفة البحث والتصفية للرسائل.
+- **أنشئ** ميزة تصدير المحادثة (تنزيل كنص أو JSON).
+- **أضف** الحفظ التلقائي إلى التخزين المحلي لمنع فقدان الرسائل.
-### تكامل الذكاء الاصطناعي المتقدم
+### دمج الذكاء الاصطناعي المتقدم
**شخصيات ذكاء اصطناعي متعددة:**
-- **أنشئ** قائمة منسدلة للتبديل بين شخصيات الذكاء الاصطناعي المختلفة
-- **احفظ** الشخصية المفضلة للمستخدم في التخزين المحلي
-- **قم بتنفيذ** تبديل السياق الذي يحافظ على تدفق المحادثة
+- **أنشئ** قائمة منسدلة للتبديل بين شخصيات الذكاء الاصطناعي المختلفة.
+- **احفظ** شخصية المستخدم المفضلة في التخزين المحلي.
+- **قم بتنفيذ** تبديل السياق الذي يحافظ على تدفق المحادثة.
**ميزات الرد الذكي:**
-- **أضف** وعيًا بسياق المحادثة (يتذكر الذكاء الاصطناعي الرسائل السابقة)
-- **قم بتنفيذ** اقتراحات ذكية بناءً على موضوع المحادثة
-- **أنشئ** أزرار الرد السريع للأسئلة الشائعة
+- **أضف** الوعي بسياق المحادثة (يتذكر الذكاء الاصطناعي الرسائل السابقة).
+- **تنفيذ** اقتراحات ذكية بناءً على موضوع المحادثة
+- **إنشاء** أزرار رد سريع للأسئلة الشائعة
-> 🎯 **هدف التعلم**: تساعدك هذه التحديات الإضافية على فهم أنماط تطوير الويب المتقدمة وتقنيات تكامل الذكاء الاصطناعي المستخدمة في التطبيقات الإنتاجية.
+> 🎯 **هدف التعلم**: هذه التحديات الإضافية تساعدك على فهم أنماط تطوير الويب المتقدمة وتقنيات دمج الذكاء الاصطناعي المستخدمة في التطبيقات الإنتاجية.
-## الملخص والخطوات التالية
+## الملخص والخطوات التالية
-تهانينا! لقد قمت ببناء مساعد دردشة كامل مدعوم بالذكاء الاصطناعي من البداية. هذا المشروع منحك تجربة عملية مع تقنيات تطوير الويب الحديثة وتكامل الذكاء الاصطناعي – مهارات ذات قيمة متزايدة في مشهد التكنولوجيا اليوم.
+تهانينا! لقد نجحت في بناء مساعد دردشة مدعوم بالذكاء الاصطناعي من البداية. هذا المشروع منحك تجربة عملية مع تقنيات تطوير الويب الحديثة ودمج الذكاء الاصطناعي – مهارات أصبحت ذات قيمة متزايدة في عالم التكنولوجيا اليوم.
-### ما الذي أنجزته
+### ما الذي أنجزته
-خلال هذا الدرس، أتقنت العديد من التقنيات والمفاهيم الرئيسية:
+خلال هذه الدرس، أتقنت العديد من التقنيات والمفاهيم الرئيسية:
-**تطوير الخادم الخلفي:**
-- **تكامل** مع واجهة برمجة تطبيقات نماذج GitHub للحصول على وظائف الذكاء الاصطناعي
-- **بناء** واجهة برمجة تطبيقات RESTful باستخدام Flask مع معالجة الأخطاء بشكل صحيح
-- **تنفيذ** مصادقة آمنة باستخدام متغيرات البيئة
-- **تكوين** CORS لطلبات عبر الأصل بين الواجهة الأمامية والخلفية
+**تطوير الخلفية:**
+- **دمجت** مع GitHub Models API لتفعيل وظائف الذكاء الاصطناعي
+- **بنيت** API RESTful باستخدام Flask مع معالجة الأخطاء بشكل صحيح
+- **نفذت** مصادقة آمنة باستخدام متغيرات البيئة
+- **قمت بتكوين** CORS لطلبات الأصل المتعددة بين الواجهة الأمامية والخلفية
-**تطوير الواجهة الأمامية:**
-- **إنشاء** واجهة دردشة مستجيبة باستخدام HTML دلالي
-- **تنفيذ** JavaScript حديث باستخدام async/await وبنية قائمة على الفئات
-- **تصميم** واجهة مستخدم جذابة باستخدام CSS Grid، Flexbox، والحركات
-- **إضافة** ميزات سهولة الوصول ومبادئ التصميم المستجيب
+**تطوير الواجهة الأمامية:**
+- **أنشأت** واجهة دردشة متجاوبة باستخدام HTML دلالي
+- **نفذت** JavaScript حديث باستخدام async/await وبنية تعتمد على الفئات
+- **صممت** واجهة مستخدم جذابة باستخدام CSS Grid، Flexbox، والرسوم المتحركة
+- **أضفت** ميزات الوصول ومبادئ التصميم المتجاوب
-**التكامل الكامل:**
-- **ربط** الواجهة الأمامية والخلفية من خلال طلبات واجهة برمجة التطبيقات HTTP
-- **معالجة** تفاعلات المستخدم في الوقت الفعلي وتدفق البيانات غير المتزامن
-- **تنفيذ** معالجة الأخطاء وردود الفعل للمستخدم في جميع أنحاء التطبيق
-- **اختبار** سير عمل التطبيق الكامل من إدخال المستخدم إلى رد الذكاء الاصطناعي
+**دمج كامل بين الواجهة الأمامية والخلفية:**
+- **وصلت** بين الواجهة الأمامية والخلفية عبر مكالمات API HTTP
+- **تعاملت** مع تفاعلات المستخدم في الوقت الحقيقي وتدفق البيانات غير المتزامن
+- **نفذت** معالجة الأخطاء وتقديم ملاحظات للمستخدم عبر التطبيق
+- **اختبرت** سير العمل الكامل للتطبيق من إدخال المستخدم إلى استجابة الذكاء الاصطناعي
-### نتائج التعلم الرئيسية
+### النتائج التعليمية الرئيسية
```mermaid
mindmap
@@ -2059,68 +2325,68 @@ mindmap
Model Parameters
Conversation Flow
```
+
+هذا المشروع قدم لك أساسيات بناء تطبيقات مدعومة بالذكاء الاصطناعي، وهو يمثل مستقبل تطوير الويب. الآن تفهم كيفية دمج قدرات الذكاء الاصطناعي في تطبيقات الويب التقليدية، مما يخلق تجارب مستخدم جذابة تبدو ذكية ومتجاوبة.
-هذا المشروع قدم لك أساسيات بناء تطبيقات مدعومة بالذكاء الاصطناعي، وهو يمثل مستقبل تطوير الويب. الآن تفهم كيفية دمج قدرات الذكاء الاصطناعي في التطبيقات التقليدية، مما يخلق تجارب مستخدم جذابة تبدو ذكية ومستجيبة.
-
-### التطبيقات المهنية
+### التطبيقات المهنية
-المهارات التي طورتها في هذا الدرس قابلة للتطبيق مباشرةً في وظائف تطوير البرمجيات الحديثة:
+المهارات التي طورتها في هذا الدرس قابلة للتطبيق مباشرة في وظائف تطوير البرمجيات الحديثة:
-- **تطوير الويب الكامل** باستخدام أطر عمل حديثة وواجهات برمجة التطبيقات
-- **تكامل الذكاء الاصطناعي** في تطبيقات الويب وتطبيقات الهواتف المحمولة
-- **تصميم وتطوير واجهات برمجة التطبيقات** لهياكل الخدمات المصغرة
-- **تطوير واجهات المستخدم** مع التركيز على سهولة الوصول والتصميم المستجيب
-- **ممارسات DevOps** بما في ذلك تكوين البيئة والنشر
+- **تطوير الويب الكامل** باستخدام أطر عمل حديثة وواجهات برمجية
+- **دمج الذكاء الاصطناعي** في تطبيقات الويب وتطبيقات الهواتف المحمولة
+- **تصميم وتطوير واجهات برمجية** لهندسة الخدمات المصغرة
+- **تطوير واجهات المستخدم** مع التركيز على الوصول والتصميم المتجاوب
+- **ممارسات DevOps** بما في ذلك تكوين البيئة والنشر
-### متابعة رحلتك في تطوير الذكاء الاصطناعي
+### مواصلة رحلتك في تطوير الذكاء الاصطناعي
-**خطوات التعلم التالية:**
-- **استكشاف** نماذج الذكاء الاصطناعي وواجهات برمجة التطبيقات المتقدمة (GPT-4، Claude، Gemini)
-- **تعلم** تقنيات هندسة التعليمات للحصول على ردود أفضل من الذكاء الاصطناعي
-- **دراسة** تصميم المحادثات ومبادئ تجربة المستخدم للروبوتات
-- **التحقيق** في أمان الذكاء الاصطناعي، الأخلاقيات، وممارسات تطوير الذكاء الاصطناعي المسؤول
-- **بناء** تطبيقات أكثر تعقيدًا مع ذاكرة المحادثة والوعي بالسياق
+**الخطوات التعليمية التالية:**
+- **استكشاف** نماذج الذكاء الاصطناعي وواجهات برمجية أكثر تقدمًا (GPT-4، Claude، Gemini)
+- **تعلم** تقنيات هندسة التوجيه لتحسين استجابات الذكاء الاصطناعي
+- **دراسة** تصميم المحادثات ومبادئ تجربة المستخدم للروبوتات
+- **التحقيق** في أمان الذكاء الاصطناعي، الأخلاقيات، وممارسات تطوير الذكاء الاصطناعي المسؤول
+- **بناء** تطبيقات أكثر تعقيدًا مع ذاكرة المحادثة والوعي بالسياق
-**أفكار مشاريع متقدمة:**
-- غرف دردشة متعددة المستخدمين مع إدارة الذكاء الاصطناعي
-- روبوتات خدمة العملاء المدعومة بالذكاء الاصطناعي
-- مساعدي التدريس التعليمي مع تعلم شخصي
-- شركاء الكتابة الإبداعية مع شخصيات ذكاء اصطناعي مختلفة
-- مساعدي توثيق تقني للمطورين
+**أفكار مشاريع متقدمة:**
+- غرف دردشة متعددة المستخدمين مع إدارة الذكاء الاصطناعي
+- روبوتات دردشة لخدمة العملاء مدعومة بالذكاء الاصطناعي
+- مساعدي تعليم خصوصي مع تعلم مخصص
+- متعاونون في الكتابة الإبداعية بشخصيات ذكاء اصطناعي مختلفة
+- مساعدي توثيق تقني للمطورين
-## البدء مع GitHub Codespaces
+## البدء مع GitHub Codespaces
-هل تريد تجربة هذا المشروع في بيئة تطوير سحابية؟ يوفر GitHub Codespaces إعداد تطوير كامل في متصفحك، وهو مثالي لتجربة تطبيقات الذكاء الاصطناعي دون الحاجة إلى إعداد محلي.
+هل تريد تجربة هذا المشروع في بيئة تطوير سحابية؟ GitHub Codespaces يوفر إعداد تطوير كامل في متصفحك، مثالي لتجربة تطبيقات الذكاء الاصطناعي دون الحاجة إلى إعداد محلي.
-### إعداد بيئة التطوير الخاصة بك
+### إعداد بيئة التطوير الخاصة بك
-**الخطوة 1: الإنشاء من القالب**
-- **انتقل** إلى [مستودع Web Dev For Beginners](https://github.com/microsoft/Web-Dev-For-Beginners)
-- **انقر** على "Use this template" في الزاوية العلوية اليمنى (تأكد من تسجيل الدخول إلى GitHub)
+**الخطوة 1: الإنشاء من القالب**
+- **انتقل** إلى [مستودع Web Dev For Beginners](https://github.com/microsoft/Web-Dev-For-Beginners)
+- **اضغط** على "Use this template" في الزاوية العلوية اليمنى (تأكد من تسجيل الدخول إلى GitHub)
-
+
-**الخطوة 2: تشغيل Codespaces**
-- **افتح** المستودع الذي أنشأته حديثًا
-- **انقر** على الزر الأخضر "Code" واختر "Codespaces"
-- **اختر** "Create codespace on main" لبدء بيئة التطوير الخاصة بك
+**الخطوة 2: تشغيل Codespaces**
+- **افتح** المستودع الذي أنشأته حديثًا
+- **اضغط** على الزر الأخضر "Code" واختر "Codespaces"
+- **اختر** "Create codespace on main" لبدء بيئة التطوير
-
+
-**الخطوة 3: تكوين البيئة**
-بمجرد تحميل Codespace الخاص بك، سيكون لديك إمكانية الوصول إلى:
-- **Python، Node.js مثبت مسبقًا** وجميع أدوات التطوير اللازمة
-- **واجهة VS Code** مع إضافات لتطوير الويب
-- **وصول إلى الطرفية** لتشغيل خوادم الخلفية والواجهة الأمامية
-- **إعادة توجيه المنافذ** لاختبار تطبيقاتك
+**الخطوة 3: تكوين البيئة**
+بمجرد تحميل Codespace، سيكون لديك وصول إلى:
+- **Python، Node.js مثبتة مسبقًا** وجميع أدوات التطوير اللازمة
+- **واجهة VS Code** مع إضافات لتطوير الويب
+- **وصول إلى الطرفية** لتشغيل خوادم الخلفية والواجهة الأمامية
+- **توجيه المنافذ** لاختبار تطبيقاتك
-**ما توفره Codespaces:**
-- **يقضي** على مشاكل إعداد البيئة المحلية وتكوينها
-- **يوفر** بيئة تطوير متسقة عبر الأجهزة المختلفة
-- **يتضمن** أدوات وإضافات مُعدة مسبقًا لتطوير الويب
-- **يقدم** تكامل سلس مع GitHub للتحكم في الإصدارات والتعاون
+**ما يوفره Codespaces:**
+- **يقضي** على مشاكل إعداد البيئة المحلية والتكوين
+- **يوفر** بيئة تطوير متسقة عبر الأجهزة المختلفة
+- **يتضمن** أدوات وإضافات مهيأة مسبقًا لتطوير الويب
+- **يقدم** تكامل سلس مع GitHub للتحكم في الإصدارات والتعاون
-> 🚀 **نصيحة احترافية**: Codespaces مثالي لتعلم وتطوير تطبيقات الذكاء الاصطناعي لأنه يتولى إعداد البيئة المعقدة تلقائيًا، مما يتيح لك التركيز على البناء والتعلم بدلاً من مواجهة مشاكل التكوين.
+> 🚀 **نصيحة احترافية**: Codespaces مثالي للتعلم والنمذجة لتطبيقات الذكاء الاصطناعي لأنه يتعامل مع جميع إعدادات البيئة المعقدة تلقائيًا، مما يتيح لك التركيز على البناء والتعلم بدلاً من مشاكل التكوين.
---
diff --git a/translations/ar/README.md b/translations/ar/README.md
index eb0e5971af..1919555cf8 100644
--- a/translations/ar/README.md
+++ b/translations/ar/README.md
@@ -1,127 +1,127 @@
-[](https://github.com/microsoft/Web-Dev-For-Beginners/blob/master/LICENSE)
-[](https://GitHub.com/microsoft/Web-Dev-For-Beginners/graphs/contributors/)
-[](https://GitHub.com/microsoft/Web-Dev-For-Beginners/issues/)
-[](https://GitHub.com/microsoft/Web-Dev-For-Beginners/pulls/)
-[](http://makeapullrequest.com)
+[](https://github.com/microsoft/Web-Dev-For-Beginners/blob/master/LICENSE)
+[](https://GitHub.com/microsoft/Web-Dev-For-Beginners/graphs/contributors/)
+[](https://GitHub.com/microsoft/Web-Dev-For-Beginners/issues/)
+[](https://GitHub.com/microsoft/Web-Dev-For-Beginners/pulls/)
+[](http://makeapullrequest.com)
-[](https://GitHub.com/microsoft/Web-Dev-For-Beginners/watchers/)
-[](https://GitHub.com/microsoft/Web-Dev-For-Beginners/network/)
-[](https://GitHub.com/microsoft/Web-Dev-For-Beginners/stargazers/)
+[](https://GitHub.com/microsoft/Web-Dev-For-Beginners/watchers/)
+[](https://GitHub.com/microsoft/Web-Dev-For-Beginners/network/)
+[](https://GitHub.com/microsoft/Web-Dev-For-Beginners/stargazers/)
-[](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott)
+[](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott)
-# تطوير الويب للمبتدئين - منهج دراسي
+# تطوير الويب للمبتدئين - منهج دراسي
-تعلم أساسيات تطوير الويب من خلال دورة شاملة لمدة 12 أسبوعًا مقدمة من Microsoft Cloud Advocates. تتناول كل واحدة من الدروس الـ 24 مواضيع JavaScript وCSS وHTML من خلال مشاريع عملية مثل الحدائق الزجاجية، وإضافات المتصفح، وألعاب الفضاء. شارك في الاختبارات والمناقشات والواجبات العملية. عزز مهاراتك وحقق أقصى استفادة من معرفتك من خلال منهجنا القائم على المشاريع. ابدأ رحلتك في البرمجة اليوم!
+تعلم أساسيات تطوير الويب من خلال دورة شاملة لمدة 12 أسبوعًا مقدمة من Microsoft Cloud Advocates. تتناول كل من الدروس الـ 24 JavaScript وCSS وHTML من خلال مشاريع عملية مثل الحدائق الزجاجية، إضافات المتصفح، وألعاب الفضاء. شارك في الاختبارات، المناقشات، والواجبات العملية. عزز مهاراتك وحسّن استيعابك للمعرفة من خلال منهجنا الفعّال القائم على المشاريع. ابدأ رحلتك في البرمجة اليوم!
-انضم إلى مجتمع Azure AI Foundry على Discord
+انضم إلى مجتمع Azure AI Foundry على Discord
-[](https://discord.com/invite/ByRwuEEgH4)
+[](https://discord.com/invite/ByRwuEEgH4)
-اتبع هذه الخطوات للبدء باستخدام هذه الموارد:
-1. **قم بعمل تفرع للمستودع**: انقر على [](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork)
-2. **انسخ المستودع**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git`
-3. [**انضم إلى مجتمع Azure AI Foundry على Discord وتواصل مع الخبراء والمطورين الآخرين**](https://discord.com/invite/ByRwuEEgH4)
+اتبع هذه الخطوات للبدء باستخدام هذه الموارد:
+1. **نسخ المستودع**: انقر [](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork)
+2. **استنساخ المستودع**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git`
+3. [**انضم إلى مجتمع Azure AI Foundry Discord وتواصل مع الخبراء والمطورين الآخرين**](https://discord.com/invite/ByRwuEEgH4)
-### 🌐 دعم متعدد اللغات
+### 🌐 دعم متعدد اللغات
-#### مدعوم عبر GitHub Action (تلقائي ودائم التحديث)
+#### مدعوم عبر GitHub Action (تلقائي ودائم التحديث)
-[العربية](./README.md) | [البنغالية](../bn/README.md) | [البلغارية](../bg/README.md) | [البورمية (ميانمار)](../my/README.md) | [الصينية (المبسطة)](../zh/README.md) | [الصينية (التقليدية، هونغ كونغ)](../hk/README.md) | [الصينية (التقليدية، ماكاو)](../mo/README.md) | [الصينية (التقليدية، تايوان)](../tw/README.md) | [الكرواتية](../hr/README.md) | [التشيكية](../cs/README.md) | [الدانماركية](../da/README.md) | [الهولندية](../nl/README.md) | [الإستونية](../et/README.md) | [الفنلندية](../fi/README.md) | [الفرنسية](../fr/README.md) | [الألمانية](../de/README.md) | [اليونانية](../el/README.md) | [العبرية](../he/README.md) | [الهندية](../hi/README.md) | [الهنغارية](../hu/README.md) | [الإندونيسية](../id/README.md) | [الإيطالية](../it/README.md) | [اليابانية](../ja/README.md) | [الكورية](../ko/README.md) | [الليتوانية](../lt/README.md) | [الماليزية](../ms/README.md) | [الماراثية](../mr/README.md) | [النيبالية](../ne/README.md) | [النرويجية](../no/README.md) | [الفارسية (الفارسية)](../fa/README.md) | [البولندية](../pl/README.md) | [البرتغالية (البرازيل)](../br/README.md) | [البرتغالية (البرتغال)](../pt/README.md) | [البنجابية (غورموخي)](../pa/README.md) | [الرومانية](../ro/README.md) | [الروسية](../ru/README.md) | [الصربية (السيريلية)](../sr/README.md) | [السلوفاكية](../sk/README.md) | [السلوفينية](../sl/README.md) | [الإسبانية](../es/README.md) | [السواحيلية](../sw/README.md) | [السويدية](../sv/README.md) | [التاغالوغية (الفلبينية)](../tl/README.md) | [التاميلية](../ta/README.md) | [التايلاندية](../th/README.md) | [التركية](../tr/README.md) | [الأوكرانية](../uk/README.md) | [الأردية](../ur/README.md) | [الفيتنامية](../vi/README.md)
+[Arabic](./README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../br/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
-**إذا كنت ترغب في دعم لغات إضافية، يمكنك الاطلاع على القائمة [هنا](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)**
+**إذا كنت ترغب في دعم لغات إضافية، يمكنك الاطلاع على اللغات المدعومة [هنا](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)**
-[](https://open.vscode.dev/microsoft/Web-Dev-For-Beginners)
+[](https://open.vscode.dev/microsoft/Web-Dev-For-Beginners)
-#### 🧑🎓 _هل أنت طالب؟_
+#### 🧑🎓 _هل أنت طالب؟_
-قم بزيارة [**صفحة مركز الطلاب**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon) حيث ستجد موارد للمبتدئين، حزم للطلاب وحتى طرق للحصول على شهادة مجانية. هذه الصفحة تستحق الحفظ والعودة إليها من وقت لآخر حيث يتم تحديث المحتوى شهريًا.
+قم بزيارة [**صفحة مركز الطلاب**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon) حيث ستجد موارد للمبتدئين، حزم للطلاب وحتى طرق للحصول على قسيمة شهادة مجانية. هذه الصفحة التي يجب عليك وضع إشارة عليها ومراجعتها من وقت لآخر حيث نقوم بتحديث المحتوى شهريًا.
-### 📣 إعلان - تحديات جديدة باستخدام وضع وكيل GitHub Copilot!
+### 📣 إعلان - تحديات جديدة باستخدام وضع وكيل GitHub Copilot!
-تمت إضافة تحدٍ جديد، ابحث عن "تحدي وكيل GitHub Copilot 🚀" في معظم الفصول. هذا تحدٍ جديد يمكنك إكماله باستخدام GitHub Copilot ووضع الوكيل. إذا لم تستخدم وضع الوكيل من قبل، فهو قادر على إنشاء النصوص وتحرير الملفات وتشغيل الأوامر والمزيد.
+تمت إضافة تحدٍ جديد، ابحث عن "تحدي وكيل GitHub Copilot 🚀" في معظم الفصول. هذا تحدٍ جديد لتكمله باستخدام GitHub Copilot ووضع الوكيل. إذا لم تستخدم وضع الوكيل من قبل، فهو قادر على إنشاء النصوص وتحرير الملفات، تشغيل الأوامر والمزيد.
-### 📣 إعلان - _مشروع جديد للبناء باستخدام الذكاء الاصطناعي التوليدي_
+### 📣 إعلان - _مشروع جديد للبناء باستخدام الذكاء الاصطناعي التوليدي_
-تمت إضافة مشروع مساعد الذكاء الاصطناعي الجديد، تحقق منه [المشروع](./09-chat-project/README.md)
+تمت إضافة مشروع مساعد الذكاء الاصطناعي الجديد، تحقق منه [المشروع](./09-chat-project/README.md)
-### 📣 إعلان - _منهج جديد_ حول الذكاء الاصطناعي التوليدي لـ JavaScript تم إصداره للتو
+### 📣 إعلان - _منهج جديد_ حول الذكاء الاصطناعي التوليدي لـ JavaScript تم إصداره للتو
-لا تفوت منهجنا الجديد للذكاء الاصطناعي التوليدي!
+لا تفوت منهجنا الجديد للذكاء الاصطناعي التوليدي!
-قم بزيارة [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) للبدء!
+قم بزيارة [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) للبدء!
-
+
-- دروس تغطي كل شيء من الأساسيات إلى RAG.
-- تفاعل مع شخصيات تاريخية باستخدام GenAI وتطبيقنا المرافق.
-- سرد ممتع وجذاب، ستسافر عبر الزمن!
+- دروس تغطي كل شيء من الأساسيات إلى RAG.
+- تفاعل مع الشخصيات التاريخية باستخدام GenAI وتطبيقنا المرافق.
+- سرد ممتع وجذاب، ستقوم بالسفر عبر الزمن!
-
+
-تتضمن كل درس واجبًا لإكماله، وفحصًا للمعرفة، وتحديًا لتوجيهك في تعلم مواضيع مثل:
-- التوجيه وهندسة التوجيه
-- إنشاء تطبيقات النصوص والصور
-- تطبيقات البحث
+كل درس يتضمن واجبًا لإكماله، اختبار معرفة وتحديًا لتوجيهك في تعلم مواضيع مثل:
+- التوجيه وهندسة التوجيه
+- إنشاء تطبيقات النصوص والصور
+- تطبيقات البحث
-قم بزيارة [https://aka.ms/genai-js-course](../../[https:/aka.ms/genai-js-course) للبدء!
+قم بزيارة [https://aka.ms/genai-js-course](../../[https:/aka.ms/genai-js-course) للبدء!
-## 🌱 البدء
+## 🌱 البدء
-> **المعلمون**، لقد قمنا [بتضمين بعض الاقتراحات](for-teachers.md) حول كيفية استخدام هذا المنهج. نود سماع ملاحظاتكم [في منتدى المناقشة الخاص بنا](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)!
+> **المعلمون**، لقد قمنا [بتضمين بعض الاقتراحات](for-teachers.md) حول كيفية استخدام هذا المنهج. نود سماع ملاحظاتكم [في منتدى المناقشة الخاص بنا](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)!
-**[المتعلمون](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**، لكل درس، ابدأ باختبار ما قبل المحاضرة وتابع قراءة المادة التعليمية، وأكمل الأنشطة المختلفة وتحقق من فهمك من خلال اختبار ما بعد المحاضرة.
+**[المتعلمون](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**، لكل درس، ابدأ باختبار ما قبل المحاضرة وتابع قراءة المادة التعليمية، وأكمل الأنشطة المختلفة وتحقق من فهمك من خلال اختبار ما بعد المحاضرة.
-لتحسين تجربة التعلم الخاصة بك، تواصل مع زملائك للعمل على المشاريع معًا! يتم تشجيع المناقشات في [منتدى المناقشة الخاص بنا](https://github.com/microsoft/Web-Dev-For-Beginners/discussions) حيث سيكون فريقنا من المشرفين متاحًا للإجابة على أسئلتك.
+لتحسين تجربة التعلم الخاصة بك، تواصل مع زملائك للعمل على المشاريع معًا! المناقشات مشجعة في [منتدى المناقشة الخاص بنا](https://github.com/microsoft/Web-Dev-For-Beginners/discussions) حيث سيكون فريقنا من المشرفين متاحًا للإجابة على أسئلتك.
-لتعزيز تعليمك، نوصي بشدة باستكشاف [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) للحصول على مواد دراسية إضافية.
+لتعزيز تعليمك، نوصي بشدة باستكشاف [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) للحصول على مواد دراسية إضافية.
-### 📋 إعداد بيئتك
+### 📋 إعداد بيئتك
-هذا المنهج يحتوي على بيئة تطوير جاهزة! عند البدء، يمكنك اختيار تشغيل المنهج في [Codespace](https://github.com/features/codespaces/) (_بيئة تعتمد على المتصفح، لا حاجة للتثبيت_)، أو محليًا على جهاز الكمبيوتر الخاص بك باستخدام محرر نصوص مثل [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon).
+هذا المنهج يحتوي على بيئة تطوير جاهزة للعمل! عند البدء، يمكنك اختيار تشغيل المنهج في [Codespace](https://github.com/features/codespaces/) (_بيئة تعتمد على المتصفح، لا حاجة للتثبيت_)، أو محليًا على جهاز الكمبيوتر الخاص بك باستخدام محرر نصوص مثل [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon).
-#### إنشاء مستودعك
-لتتمكن من حفظ عملك بسهولة، يُوصى بإنشاء نسخة خاصة بك من هذا المستودع. يمكنك القيام بذلك بالنقر على زر **استخدام هذا القالب** في أعلى الصفحة. سيؤدي ذلك إلى إنشاء مستودع جديد في حساب GitHub الخاص بك يحتوي على نسخة من المنهج.
+#### إنشاء مستودعك
+لتتمكن من حفظ عملك بسهولة، يُوصى بإنشاء نسخة خاصة بك من هذا المستودع. يمكنك القيام بذلك بالنقر على زر **استخدام هذا القالب** في أعلى الصفحة. سيؤدي ذلك إلى إنشاء مستودع جديد في حساب GitHub الخاص بك مع نسخة من المنهج.
-اتبع هذه الخطوات:
-1. **قم بعمل تفرع للمستودع**: انقر على زر "Fork" في الزاوية العلوية اليمنى من هذه الصفحة.
-2. **انسخ المستودع**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git`
+اتبع هذه الخطوات:
+1. **نسخ المستودع**: انقر على زر "Fork" في الزاوية العلوية اليمنى من هذه الصفحة.
+2. **استنساخ المستودع**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git`
-#### تشغيل المنهج في Codespace
+#### تشغيل المنهج في Codespace
-في نسختك من هذا المستودع الذي أنشأته، انقر على زر **Code** واختر **Open with Codespaces**. سيؤدي ذلك إلى إنشاء Codespace جديد للعمل فيه.
+في نسختك من هذا المستودع الذي أنشأته، انقر على زر **Code** واختر **Open with Codespaces**. سيؤدي ذلك إلى إنشاء Codespace جديد للعمل فيه.
-
+
-#### تشغيل المنهج محليًا على جهاز الكمبيوتر الخاص بك
+#### تشغيل المنهج محليًا على جهاز الكمبيوتر الخاص بك
-لتشغيل هذا المنهج محليًا على جهاز الكمبيوتر الخاص بك، ستحتاج إلى محرر نصوص، متصفح، وأداة سطر أوامر. درسنا الأول، [مقدمة إلى لغات البرمجة وأدوات العمل](../../1-getting-started-lessons/1-intro-to-programming-languages)، سيشرح لك الخيارات المختلفة لكل من هذه الأدوات لتختار ما يناسبك.
+لتشغيل هذا المنهج محليًا على جهاز الكمبيوتر الخاص بك، ستحتاج إلى محرر نصوص، متصفح وأداة سطر الأوامر. درسنا الأول، [مقدمة إلى لغات البرمجة وأدوات العمل](../../1-getting-started-lessons/1-intro-to-programming-languages)، سيشرح لك الخيارات المختلفة لكل من هذه الأدوات لتختار ما يناسبك.
-توصيتنا هي استخدام [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) كمحرر نصوص، والذي يحتوي أيضًا على [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) مدمج. يمكنك تنزيل Visual Studio Code [هنا](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon).
+توصيتنا هي استخدام [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) كمحرر، والذي يحتوي أيضًا على [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) مدمج. يمكنك تنزيل Visual Studio Code [هنا](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon).
-1. انسخ مستودعك إلى جهاز الكمبيوتر الخاص بك. يمكنك القيام بذلك بالنقر على زر **Code** ونسخ الرابط:
+1. استنساخ مستودعك إلى جهاز الكمبيوتر الخاص بك. يمكنك القيام بذلك بالنقر على زر **Code** ونسخ الرابط:
- [CodeSpace](./images/createcodespace.png)
+ [CodeSpace](./images/createcodespace.png)
- ثم افتح [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) داخل [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) وقم بتشغيل الأمر التالي، مع استبدال `` بالرابط الذي نسخته للتو:
+ ثم افتح [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) داخل [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) وقم بتشغيل الأمر التالي، مع استبدال `` بالرابط الذي نسخته للتو:
```bash
git clone
```
-
-2. افتح المجلد في Visual Studio Code. يمكنك القيام بذلك بالنقر على **File** > **Open Folder** واختيار المجلد الذي قمت بنسخه للتو.
-> توصيات إضافات Visual Studio Code:
->
+2. افتح المجلد في Visual Studio Code. يمكنك القيام بذلك بالنقر على **File** > **Open Folder** واختيار المجلد الذي قمت باستنساخه للتو.
+
+> الإضافات الموصى بها لـ Visual Studio Code:
+>
> * [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) - لمعاينة صفحات HTML داخل Visual Studio Code
> * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - لمساعدتك في كتابة الكود بسرعة أكبر
@@ -138,42 +138,42 @@ CO_OP_TRANSLATOR_METADATA:
- واجب
- [اختبار بعد الدرس](https://ff-quizzes.netlify.app/web/)
-> **ملاحظة حول الاختبارات**: جميع الاختبارات موجودة في مجلد Quiz-app، بإجمالي 48 اختبارًا يحتوي كل منها على ثلاثة أسئلة. وهي متوفرة [هنا](https://ff-quizzes.netlify.app/web/) ويمكن تشغيل تطبيق الاختبار محليًا أو نشره على Azure؛ اتبع التعليمات في مجلد `quiz-app`.
+> **ملاحظة حول الاختبارات**: جميع الاختبارات موجودة في مجلد Quiz-app، 48 اختبارًا إجمالاً، كل منها يحتوي على ثلاثة أسئلة. وهي متوفرة [هنا](https://ff-quizzes.netlify.app/web/) ويمكن تشغيل تطبيق الاختبار محليًا أو نشره على Azure؛ اتبع التعليمات في مجلد `quiz-app`.
## 🗃️ الدروس
| | اسم المشروع | المفاهيم التي يتم تدريسها | أهداف التعلم | رابط الدرس | المؤلف |
| :-: | :------------------------------------------------------: | :--------------------------------------------------------------------: | ----------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------: | :---------------------: |
-| 01 | البداية | مقدمة في البرمجة وأدوات العمل | تعلم الأساسيات وراء معظم لغات البرمجة والتعرف على البرامج التي تساعد المطورين المحترفين في أداء وظائفهم | [مقدمة في لغات البرمجة وأدوات العمل](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine |
-| 02 | البداية | أساسيات GitHub، بما في ذلك العمل مع فريق | كيفية استخدام GitHub في مشروعك وكيفية التعاون مع الآخرين في قاعدة الكود | [مقدمة في GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor |
-| 03 | البداية | إمكانية الوصول | تعلم أساسيات إمكانية الوصول إلى الويب | [أساسيات إمكانية الوصول](./1-getting-started-lessons/3-accessibility/README.md) | Christopher |
+| 01 | البداية | مقدمة في البرمجة وأدوات العمل | تعلم الأساسيات وراء معظم لغات البرمجة والبرامج التي تساعد المطورين المحترفين في عملهم | [مقدمة في لغات البرمجة وأدوات العمل](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine |
+| 02 | البداية | أساسيات GitHub، بما في ذلك العمل مع فريق | كيفية استخدام GitHub في مشروعك، وكيفية التعاون مع الآخرين في قاعدة الكود | [مقدمة في GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor |
+| 03 | البداية | إمكانية الوصول | تعلم أساسيات إمكانية الوصول على الويب | [أساسيات إمكانية الوصول](./1-getting-started-lessons/3-accessibility/README.md) | Christopher |
| 04 | أساسيات JS | أنواع البيانات في JavaScript | أساسيات أنواع البيانات في JavaScript | [أنواع البيانات](./2-js-basics/1-data-types/README.md) | Jasmine |
-| 05 | أساسيات JS | الدوال والطرق | تعلم الدوال والطرق لإدارة تدفق منطق التطبيق | [الدوال والطرق](./2-js-basics/2-functions-methods/README.md) | Jasmine and Christopher |
-| 06 | أساسيات JS | اتخاذ القرارات باستخدام JS | تعلم كيفية إنشاء شروط في الكود باستخدام طرق اتخاذ القرار | [اتخاذ القرارات](./2-js-basics/3-making-decisions/README.md) | Jasmine |
+| 05 | أساسيات JS | الوظائف والأساليب | تعلم الوظائف والأساليب لإدارة تدفق منطق التطبيق | [الوظائف والأساليب](./2-js-basics/2-functions-methods/README.md) | Jasmine and Christopher |
+| 06 | أساسيات JS | اتخاذ القرارات باستخدام JS | تعلم كيفية إنشاء الشروط في الكود باستخدام طرق اتخاذ القرار | [اتخاذ القرارات](./2-js-basics/3-making-decisions/README.md) | Jasmine |
| 07 | أساسيات JS | المصفوفات والحلقات | العمل مع البيانات باستخدام المصفوفات والحلقات في JavaScript | [المصفوفات والحلقات](./2-js-basics/4-arrays-loops/README.md) | Jasmine |
-| 08 | [Terrarium](./3-terrarium/solution/README.md) | HTML عملي | بناء HTML لإنشاء تيراريوم عبر الإنترنت، مع التركيز على إنشاء تخطيط | [مقدمة في HTML](./3-terrarium/1-intro-to-html/README.md) | Jen |
+| 08 | [Terrarium](./3-terrarium/solution/README.md) | HTML عملي | بناء HTML لإنشاء تيراريوم عبر الإنترنت، مع التركيز على بناء التخطيط | [مقدمة في HTML](./3-terrarium/1-intro-to-html/README.md) | Jen |
| 09 | [Terrarium](./3-terrarium/solution/README.md) | CSS عملي | بناء CSS لتنسيق التيراريوم عبر الإنترنت، مع التركيز على أساسيات CSS بما في ذلك جعل الصفحة متجاوبة | [مقدمة في CSS](./3-terrarium/2-intro-to-css/README.md) | Jen |
-| 10 | [Terrarium](./3-terrarium/solution/README.md) | إغلاق JavaScript، التلاعب بـ DOM | بناء JavaScript لجعل التيراريوم يعمل كواجهة سحب وإفلات، مع التركيز على الإغلاق والتلاعب بـ DOM | [إغلاق JavaScript، التلاعب بـ DOM](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen |
+| 10 | [Terrarium](./3-terrarium/solution/README.md) | إغلاق JavaScript، التلاعب بـ DOM | بناء JavaScript لجعل التيراريوم يعمل كواجهة سحب/إفلات، مع التركيز على الإغلاق والتلاعب بـ DOM | [إغلاق JavaScript، التلاعب بـ DOM](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen |
| 11 | [Typing Game](./4-typing-game/solution/README.md) | بناء لعبة كتابة | تعلم كيفية استخدام أحداث لوحة المفاتيح لتوجيه منطق تطبيق JavaScript الخاص بك | [برمجة قائمة على الأحداث](./4-typing-game/typing-game/README.md) | Christopher |
| 12 | [Green Browser Extension](./5-browser-extension/solution/README.md) | العمل مع المتصفحات | تعلم كيفية عمل المتصفحات، تاريخها، وكيفية إنشاء العناصر الأولى لإضافة المتصفح | [حول المتصفحات](./5-browser-extension/1-about-browsers/README.md) | Jen |
| 13 | [Green Browser Extension](./5-browser-extension/solution/README.md) | بناء نموذج، استدعاء API وتخزين المتغيرات في التخزين المحلي | بناء عناصر JavaScript لإضافة المتصفح لاستدعاء API باستخدام المتغيرات المخزنة في التخزين المحلي | [APIs، النماذج، والتخزين المحلي](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen |
| 14 | [Green Browser Extension](./5-browser-extension/solution/README.md) | العمليات الخلفية في المتصفح، أداء الويب | استخدام العمليات الخلفية للمتصفح لإدارة أيقونة الإضافة؛ تعلم أداء الويب وبعض التحسينات لجعلها أفضل | [المهام الخلفية والأداء](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen |
-| 15 | [Space Game](./6-space-game/solution/README.md) | تطوير ألعاب أكثر تقدمًا باستخدام JavaScript | تعلم الوراثة باستخدام الفئات والتكوين ونمط Pub/Sub، استعدادًا لبناء لعبة | [مقدمة في تطوير الألعاب المتقدمة](./6-space-game/1-introduction/README.md) | Chris |
+| 15 | [Space Game](./6-space-game/solution/README.md) | تطوير الألعاب المتقدم باستخدام JavaScript | تعلم الوراثة باستخدام الفئات والتكوين ونمط Pub/Sub، استعدادًا لبناء لعبة | [مقدمة في تطوير الألعاب المتقدم](./6-space-game/1-introduction/README.md) | Chris |
| 16 | [Space Game](./6-space-game/solution/README.md) | الرسم على اللوحة | تعلم واجهة برمجة التطبيقات Canvas، المستخدمة لرسم العناصر على الشاشة | [الرسم على اللوحة](./6-space-game/2-drawing-to-canvas/README.md) | Chris |
-| 17 | [Space Game](./6-space-game/solution/README.md) | تحريك العناصر على الشاشة | اكتشاف كيفية اكتساب العناصر للحركة باستخدام الإحداثيات الكارتيسية وواجهة برمجة التطبيقات Canvas | [تحريك العناصر](./6-space-game/3-moving-elements-around/README.md) | Chris |
-| 18 | [Space Game](./6-space-game/solution/README.md) | اكتشاف الاصطدام | جعل العناصر تصطدم وتتفاعل مع بعضها البعض باستخدام ضغطات المفاتيح وتوفير وظيفة تبريد لضمان أداء اللعبة | [اكتشاف الاصطدام](./6-space-game/4-collision-detection/README.md) | Chris |
+| 17 | [Space Game](./6-space-game/solution/README.md) | تحريك العناصر على الشاشة | اكتشاف كيفية اكتساب العناصر الحركة باستخدام الإحداثيات الكارتيسية وواجهة برمجة التطبيقات Canvas | [تحريك العناصر](./6-space-game/3-moving-elements-around/README.md) | Chris |
+| 18 | [Space Game](./6-space-game/solution/README.md) | اكتشاف التصادم | جعل العناصر تصطدم وتتفاعل مع بعضها البعض باستخدام ضغطات المفاتيح وتوفير وظيفة تبريد لضمان أداء اللعبة | [اكتشاف التصادم](./6-space-game/4-collision-detection/README.md) | Chris |
| 19 | [Space Game](./6-space-game/solution/README.md) | تسجيل النقاط | إجراء حسابات رياضية بناءً على حالة اللعبة وأدائها | [تسجيل النقاط](./6-space-game/5-keeping-score/README.md) | Chris |
| 20 | [Space Game](./6-space-game/solution/README.md) | إنهاء اللعبة وإعادة تشغيلها | تعلم كيفية إنهاء اللعبة وإعادة تشغيلها، بما في ذلك تنظيف الأصول وإعادة تعيين قيم المتغيرات | [حالة النهاية](./6-space-game/6-end-condition/README.md) | Chris |
| 21 | [Banking App](./7-bank-project/solution/README.md) | قوالب HTML والمسارات في تطبيق ويب | تعلم كيفية إنشاء هيكل موقع ويب متعدد الصفحات باستخدام التوجيه وقوالب HTML | [قوالب HTML والمسارات](./7-bank-project/1-template-route/README.md) | Yohan |
| 22 | [Banking App](./7-bank-project/solution/README.md) | بناء نموذج تسجيل الدخول والتسجيل | تعلم كيفية بناء النماذج ومعالجة إجراءات التحقق | [النماذج](./7-bank-project/2-forms/README.md) | Yohan |
| 23 | [Banking App](./7-bank-project/solution/README.md) | طرق جلب البيانات واستخدامها | كيفية تدفق البيانات داخل وخارج التطبيق الخاص بك، كيفية جلبها، تخزينها، والتخلص منها | [البيانات](./7-bank-project/3-data/README.md) | Yohan |
-| 24 | [Banking App](./7-bank-project/solution/README.md) | مفاهيم إدارة الحالة | تعلم كيفية احتفاظ التطبيق بالحالة وكيفية إدارتها برمجيًا | [إدارة الحالة](./7-bank-project/4-state-management/README.md) | Yohan |
+| 24 | [Banking App](./7-bank-project/solution/README.md) | مفاهيم إدارة الحالة | تعلم كيفية احتفاظ التطبيق الخاص بك بالحالة وكيفية إدارتها برمجيًا | [إدارة الحالة](./7-bank-project/4-state-management/README.md) | Yohan |
| 25 | [Browser/VScode Code](../../8-code-editor) | العمل مع VScode | تعلم كيفية استخدام محرر الكود | [استخدام محرر الكود VScode](./8-code-editor/1-using-a-code-editor/README.md) | Chris |
| 26 | [AI Assistants](./9-chat-project/README.md) | العمل مع الذكاء الاصطناعي | تعلم كيفية بناء مساعد ذكاء اصطناعي خاص بك | [مشروع مساعد الذكاء الاصطناعي](./9-chat-project/README.md) | Chris |
-## 🏫 منهجية التعليم
+## 🏫 طرق التدريس
-تم تصميم منهجنا بناءً على مبدأين أساسيين في التعليم:
+تم تصميم منهجنا مع مبدأين رئيسيين في التدريس:
* التعلم القائم على المشاريع
* الاختبارات المتكررة
@@ -181,17 +181,17 @@ CO_OP_TRANSLATOR_METADATA:
> 🎓 يمكنك أخذ الدروس الأولى في هذا المنهج كـ [مسار تعلم](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) على Microsoft Learn!
-من خلال ضمان توافق المحتوى مع المشاريع، يتم جعل العملية أكثر جاذبية للطلاب ويتم تعزيز الاحتفاظ بالمفاهيم. كما قمنا بكتابة عدة دروس تمهيدية في أساسيات JavaScript لتقديم المفاهيم، مقترنة بفيديو من مجموعة "[سلسلة المبتدئين: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)" من دروس الفيديو، التي ساهم بعض مؤلفيها في هذا المنهج.
+من خلال ضمان توافق المحتوى مع المشاريع، يتم جعل العملية أكثر جاذبية للطلاب وسيتم تعزيز الاحتفاظ بالمفاهيم. كما كتبنا عدة دروس تمهيدية في أساسيات JavaScript لتقديم المفاهيم، مقترنة بفيديو من مجموعة "[سلسلة المبتدئين: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)" من دروس الفيديو، التي ساهم بعض مؤلفيها في هذا المنهج.
-بالإضافة إلى ذلك، فإن الاختبار منخفض المخاطر قبل الفصل يحدد نية الطالب نحو تعلم الموضوع، بينما يضمن اختبار ثانٍ بعد الفصل مزيدًا من الاحتفاظ. تم تصميم هذا المنهج ليكون مرنًا وممتعًا ويمكن أخذه بالكامل أو جزئيًا. تبدأ المشاريع صغيرة وتصبح أكثر تعقيدًا بحلول نهاية الدورة التي تستمر 12 أسبوعًا.
+بالإضافة إلى ذلك، يحدد اختبار منخفض المخاطر قبل الفصل نية الطالب نحو تعلم موضوع معين، بينما يضمن اختبار ثانٍ بعد الفصل مزيدًا من الاحتفاظ. تم تصميم هذا المنهج ليكون مرنًا وممتعًا ويمكن أخذه بالكامل أو جزئيًا. تبدأ المشاريع صغيرة وتصبح أكثر تعقيدًا بحلول نهاية دورة الـ 12 أسبوعًا.
بينما تجنبنا عمدًا تقديم أطر عمل JavaScript للتركيز على المهارات الأساسية المطلوبة كمطور ويب قبل اعتماد إطار عمل، فإن الخطوة التالية الجيدة لإكمال هذا المنهج ستكون تعلم Node.js عبر مجموعة أخرى من الفيديوهات: "[سلسلة المبتدئين: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)".
-> قم بزيارة [مدونة قواعد السلوك](CODE_OF_CONDUCT.md) و[إرشادات المساهمة](CONTRIBUTING.md). نحن نرحب بملاحظاتكم البناءة!
+> قم بزيارة [مدونة قواعد السلوك](CODE_OF_CONDUCT.md) و[إرشادات المساهمة](CONTRIBUTING.md). نرحب بملاحظاتك البناءة!
## 🧭 الوصول دون اتصال
-يمكنك تشغيل هذا التوثيق دون اتصال باستخدام [Docsify](https://docsify.js.org/#/). قم باستنساخ هذا المستودع، [قم بتثبيت Docsify](https://docsify.js.org/#/quickstart) على جهازك المحلي، ثم في المجلد الرئيسي لهذا المستودع، اكتب `docsify serve`. سيتم تشغيل الموقع على المنفذ 3000 على localhost: `localhost:3000`.
+يمكنك تشغيل هذا التوثيق دون اتصال باستخدام [Docsify](https://docsify.js.org/#/). قم باستنساخ هذا المستودع، [تثبيت Docsify](https://docsify.js.org/#/quickstart) على جهازك المحلي، ثم في المجلد الجذر لهذا المستودع، اكتب `docsify serve`. سيتم تقديم الموقع على المنفذ 3000 على localhost الخاص بك: `localhost:3000`.
## 📘 PDF
@@ -201,32 +201,47 @@ CO_OP_TRANSLATOR_METADATA:
فريقنا ينتج دورات أخرى! تحقق من:
-- [MCP للمبتدئين](https://aka.ms/mcp-for-beginners)
-- [Edge AI للمبتدئين](https://aka.ms/edgeai-for-beginners)
-- [وكلاء الذكاء الاصطناعي للمبتدئين](https://aka.ms/ai-agents-beginners)
-- [الذكاء الاصطناعي التوليدي للمبتدئين .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet)
-- [الذكاء الاصطناعي التوليدي باستخدام JavaScript](https://github.com/microsoft/generative-ai-with-javascript)
-- [الذكاء الاصطناعي التوليدي باستخدام Java](https://github.com/microsoft/Generative-AI-for-beginners-java)
-- [الذكاء الاصطناعي للمبتدئين](https://aka.ms/ai-beginners)
-- [علم البيانات للمبتدئين](https://aka.ms/datascience-beginners)
-- [تعلم الآلة للمبتدئين](https://aka.ms/ml-beginners)
-- [الأمن السيبراني للمبتدئين](https://github.com/microsoft/Security-101)
-- [تطوير الويب للمبتدئين](https://aka.ms/webdev-beginners)
-- [إنترنت الأشياء للمبتدئين](https://aka.ms/iot-beginners)
-- [تطوير الواقع الممتد للمبتدئين](https://github.com/microsoft/xr-development-for-beginners)
-- [إتقان GitHub Copilot للاستخدام التفاعلي](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming)
-- [إتقان GitHub Copilot لمطوري C#/.NET](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers)
-- [اختر مغامرتك الخاصة مع Copilot](https://github.com/microsoft/CopilotAdventures)
+### Azure / Edge / MCP / Agents
+[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
+
+---
+
+### سلسلة الذكاء الاصطناعي التوليدي
+[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
+[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
+[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
+[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
+
+---
+
+### التعلم الأساسي
+[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
+[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
+
+---
+
+### سلسلة Copilot
+[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
+[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
## الحصول على المساعدة
-إذا واجهت صعوبة أو كانت لديك أي أسئلة حول بناء تطبيقات الذكاء الاصطناعي، انضم إلى:
+إذا واجهت صعوبة أو كانت لديك أسئلة حول بناء تطبيقات الذكاء الاصطناعي، انضم إلى:
-[](https://aka.ms/foundry/discord)
+[](https://aka.ms/foundry/discord)
إذا كانت لديك ملاحظات حول المنتج أو أخطاء أثناء البناء، قم بزيارة:
-[](https://aka.ms/foundry/forum)
+[](https://aka.ms/foundry/forum)
## الترخيص
@@ -235,4 +250,4 @@ CO_OP_TRANSLATOR_METADATA:
---
**إخلاء المسؤولية**:
-تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسير خاطئ ينشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/mr/1-getting-started-lessons/1-intro-to-programming-languages/README.md b/translations/mr/1-getting-started-lessons/1-intro-to-programming-languages/README.md
index 2f7d5e6f00..bd711c5abf 100644
--- a/translations/mr/1-getting-started-lessons/1-intro-to-programming-languages/README.md
+++ b/translations/mr/1-getting-started-lessons/1-intro-to-programming-languages/README.md
@@ -1,131 +1,201 @@
# प्रोग्रामिंग भाषा आणि आधुनिक डेव्हलपर टूल्सची ओळख
-नमस्कार, भविष्यातील डेव्हलपर! 👋 तुम्हाला एक गोष्ट सांगू का जी मला रोज रोमांचित करते? तुम्ही लवकरच शोधून काढणार आहात की प्रोग्रामिंग ही फक्त संगणकांबद्दल नसून ती तुमच्या कल्पनांना प्रत्यक्षात आणण्यासाठी सुपरपॉवर मिळवण्यासारखी आहे!
+नमस्कार, भविष्यातील डेव्हलपर! 👋 तुम्हाला एक गोष्ट सांगू का जी मला रोज रोमांचित करते? तुम्ही आता शोध घेणार आहात की प्रोग्रामिंग ही फक्त संगणकांबद्दल नाही, तर तुमच्या सर्वात वेड्या कल्पना प्रत्यक्षात आणण्यासाठी सुपरपॉवर्स मिळवण्याबद्दल आहे!
-तुम्हाला तो क्षण आठवतो का जेव्हा तुम्ही तुमचा आवडता अॅप वापरत असता आणि सगळं अगदी परफेक्ट वाटतं? जेव्हा तुम्ही एखाद्या बटणावर टॅप करता आणि काहीतरी जादूई घडतं ज्यामुळे तुम्ही विचार करता, "वा, त्यांनी हे कसं केलं?" तर, तुमच्यासारखाच कोणी – कदाचित रात्री २ वाजता त्याच्या आवडत्या कॉफी शॉपमध्ये तिसऱ्या एस्प्रेसोसोबत बसून – त्या जादूची कोड लिहिली. आणि आता तुम्हाला आश्चर्य वाटेल: या धड्याच्या शेवटी, तुम्हाला फक्त ते कसं केलं हे समजणार नाही, तर तुम्हाला स्वतःच ते करून पाहण्याची इच्छा होईल!
+तुम्हाला तो क्षण आठवतो का जेव्हा तुम्ही तुमचा आवडता अॅप वापरत असता आणि सगळं अगदी परफेक्ट वाटतं? जेव्हा तुम्ही एखाद्या बटणावर टॅप करता आणि काहीतरी जादूई घडतं ज्यामुळे तुम्हाला वाटतं "अरे वा, त्यांनी हे कसं केलं?" तर, तुमच्यासारखाच कोणी तरी – कदाचित रात्री २ वाजता त्यांच्या आवडत्या कॉफी शॉपमध्ये तिसऱ्या एस्प्रेसोसोबत बसून – त्या जादूची निर्मिती करणारा कोड लिहिला. आणि आता तुम्हाला आश्चर्य वाटेल: या धड्याच्या शेवटी, तुम्हाला केवळ त्यांनी हे कसे केले ते समजेलच नाही तर तुम्हाला स्वतःच ते करण्याची इच्छा होईल!
-पहा, जर तुम्हाला प्रोग्रामिंग सध्या थोडं कठीण वाटत असेल तर ते मी पूर्णपणे समजू शकतो. जेव्हा मी सुरुवात केली, तेव्हा मला खरंच वाटायचं की तुम्हाला गणितात गती असावी लागते किंवा तुम्ही पाच वर्षांचे असल्यापासून कोडिंग करत असावं लागतं. पण माझं दृष्टिकोन पूर्णपणे बदललं कारण प्रोग्रामिंग ही नवीन भाषा शिकण्यासारखी आहे. तुम्ही "नमस्कार" आणि "धन्यवाद" पासून सुरुवात करता, मग कॉफी ऑर्डर करण्यापर्यंत पोहोचता, आणि नंतर तुम्ही गहन तत्त्वज्ञानात्मक चर्चा करू लागता! फक्त या बाबतीत, तुम्ही संगणकांशी संवाद साधत आहात, आणि प्रामाणिकपणे? ते सर्वात संयमी संवाद भागीदार आहेत – ते तुमच्या चुका कधीच न्याय करत नाहीत आणि ते नेहमी पुन्हा प्रयत्न करण्यास उत्सुक असतात!
+पहा, जर तुम्हाला प्रोग्रामिंग सध्या थोडं कठीण वाटत असेल तर ते मी पूर्णपणे समजू शकतो. जेव्हा मी सुरुवात केली, तेव्हा मला खरंच वाटलं की तुम्हाला काही प्रकारचा गणिताचा तज्ज्ञ असायला हवा किंवा तुम्ही पाच वर्षांचे असल्यापासून कोडिंग करत असायला हवे. पण माझं मत पूर्णपणे बदललं तेव्हा मला समजलं की प्रोग्रामिंग ही नवीन भाषा शिकण्यासारखीच आहे. तुम्ही "नमस्कार" आणि "धन्यवाद" पासून सुरुवात करता, मग कॉफी ऑर्डर करण्यापर्यंत पोहोचता, आणि नंतर तुम्ही गहन तत्त्वज्ञानात्मक चर्चा करू लागता! फक्त या बाबतीत, तुम्ही संगणकांशी संवाद साधत आहात, आणि प्रामाणिकपणे? ते सर्वात संयमी संवाद भागीदार आहेत – ते तुमच्या चुका कधीच न्याय करत नाहीत आणि ते नेहमी पुन्हा प्रयत्न करण्यास उत्सुक असतात!
-आज, आपण आधुनिक वेब डेव्हलपमेंट शक्य करण्यासाठी आणि खरोखरच व्यसनाधीन बनवण्यासाठी अविश्वसनीय टूल्स एक्सप्लोर करणार आहोत. मी ज्या एडिटर्स, ब्राउझर्स आणि वर्कफ्लोजबद्दल बोलतोय ते Netflix, Spotify आणि तुमच्या आवडत्या इंडी अॅप स्टुडिओमधील डेव्हलपर्स दररोज वापरतात. आणि आता तुम्हाला आनंदाने नाचायला लावणारा भाग: या व्यावसायिक-ग्रेड, उद्योग-मानक टूल्सपैकी बहुतेक पूर्णपणे मोफत आहेत!
+आज, आपण आधुनिक वेब डेव्हलपमेंट शक्य होण्यासाठी आणि गंभीरपणे व्यसनाधीन होण्यासाठी अविश्वसनीय टूल्स एक्सप्लोर करणार आहोत. मी ज्या एडिटर्स, ब्राउझर्स आणि वर्कफ्लोजबद्दल बोलतोय, तेच टूल्स Netflix, Spotify आणि तुमच्या आवडत्या इंडी अॅप स्टुडिओचे डेव्हलपर्स दररोज वापरतात. आणि आता तुम्हाला आनंदाने नाचायला लावणारा भाग: या व्यावसायिक-ग्रेड, उद्योग-मानक टूल्सपैकी बहुतेक पूर्णपणे मोफत आहेत!

-> स्केच नोट [Tomomi Imura](https://twitter.com/girlie_mac) यांच्याकडून
+> स्केच नोट [Tomomi Imura](https://twitter.com/girlie_mac) यांनी तयार केले आहे
+
+```mermaid
+journey
+ title Your Programming Journey Today
+ section Discover
+ What is Programming: 5: You
+ Programming Languages: 4: You
+ Tools Overview: 5: You
+ section Explore
+ Code Editors: 4: You
+ Browsers & DevTools: 5: You
+ Command Line: 3: You
+ section Practice
+ Language Detective: 4: You
+ Tool Exploration: 5: You
+ Community Connection: 5: You
+```
## पाहूया तुम्हाला आधीच काय माहित आहे!
-मजेदार गोष्टींमध्ये उडी मारण्याआधी, मला उत्सुकता आहे – तुम्हाला या प्रोग्रामिंग जगाबद्दल आधीच काय माहित आहे? आणि ऐका, जर तुम्ही या प्रश्नांकडे पाहत असाल आणि विचार करत असाल "मला याबद्दल काहीच माहिती नाही," तर ते फक्त ठीकच नाही, ते परफेक्ट आहे! याचा अर्थ तुम्ही अगदी योग्य ठिकाणी आहात. या क्विझला वर्कआउटच्या आधी स्ट्रेचिंगसारखं समजा – आपण फक्त त्या मेंदूच्या स्नायूंना गरम करत आहोत!
+मजेदार गोष्टींमध्ये उडी मारण्यापूर्वी, मला उत्सुकता आहे – तुम्हाला या प्रोग्रामिंग जगाबद्दल आधीच काय माहित आहे? आणि ऐका, जर तुम्ही या प्रश्नांकडे पाहत असाल आणि विचार करत असाल "मला याबद्दल काहीच माहिती नाही," तर ते फक्त ठीकच नाही, तर परफेक्ट आहे! याचा अर्थ तुम्ही अगदी योग्य ठिकाणी आहात. या क्विझला वर्कआउटच्या आधी स्ट्रेचिंगसारखे समजा – आपण फक्त त्या मेंदूच्या स्नायूंना गरम करत आहोत!
[प्री-लेसन क्विझ घ्या](https://forms.office.com/r/dru4TE0U9n?origin=lprLink)
-## आपण एकत्र जाणार असलेल्या साहसाबद्दल
+## आपण एकत्र जाणार असलेल्या साहसाची झलक
-ठीक आहे, मी आज आपण एक्सप्लोर करणार आहोत याबद्दल खरोखरच उत्साहित आहे! खरंच, मला तुमचं चेहरा पाहायला आवडेल जेव्हा काही संकल्पना क्लिक होतील. आपण एकत्र घेत असलेल्या अविश्वसनीय प्रवासाबद्दल:
+ठीक आहे, मी आज आपण एक्सप्लोर करणार आहोत याबद्दल खरोखर उत्साहाने उडत आहे! खरंच, मला तुमचा चेहरा पाहायला आवडेल जेव्हा काही संकल्पना क्लिक होतील. आपण एकत्र घेत असलेल्या अविश्वसनीय प्रवासाची झलक येथे आहे:
-- **प्रोग्रामिंग म्हणजे काय (आणि ते सर्वात थंड गोष्ट का आहे!)** – आपण शोधणार आहोत की कोड हा अक्षरशः अदृश्य जादू आहे जो तुमच्याभोवती सर्वकाही चालवतो, त्या अलार्मपासून जो कसा तरी जाणतो की सोमवार सकाळ आहे ते Netflix शिफारसींचं अल्गोरिदम
-- **प्रोग्रामिंग भाषा आणि त्यांचे अद्भुत व्यक्तिमत्त्व** – कल्पना करा की तुम्ही अशा पार्टीत प्रवेश करता जिथे प्रत्येक व्यक्तीला समस्या सोडवण्यासाठी पूर्णपणे वेगळ्या सुपरपॉवर आहेत. प्रोग्रामिंग भाषा जग असंच आहे, आणि तुम्हाला त्यांना भेटायला आवडेल!
-- **डिजिटल जादू घडवण्यासाठी मूलभूत बिल्डिंग ब्लॉक्स** – यांना अंतिम क्रिएटिव्ह LEGO सेट समजा. एकदा तुम्हाला हे तुकडे कसे एकत्र बसतात हे समजले की तुम्हाला कळेल की तुम्ही तुमच्या कल्पनेत जे काही स्वप्न पाहता ते अक्षरशः तयार करू शकता
-- **व्यावसायिक टूल्स जे तुम्हाला जादूगाराचा जादूचा कांडी मिळाल्यासारखं वाटवतील** – मी नाट्यमय होत नाही – ही टूल्स तुम्हाला खरोखरच सुपरपॉवर असल्यासारखं वाटवतील, आणि सर्वात चांगली गोष्ट? तीच टूल्स प्रोफेशनल्स वापरतात!
+- **प्रोग्रामिंग म्हणजे काय (आणि ते का सर्वात थंड गोष्ट आहे!)** – आपण शोधणार आहोत की कोड हा अक्षरशः अदृश्य जादू आहे जो तुमच्याभोवती सर्वकाही चालवतो, त्या अलार्मपासून जो कसा तरी जाणतो की सोमवार सकाळ आहे ते Netflix वर तुमच्यासाठी परिपूर्ण शिफारसी तयार करणाऱ्या अल्गोरिदमपर्यंत
+- **प्रोग्रामिंग भाषा आणि त्यांचे अद्भुत व्यक्तिमत्त्व** – कल्पना करा की तुम्ही अशा पार्टीत प्रवेश करत आहात जिथे प्रत्येक व्यक्तीला पूर्णपणे वेगळ्या सुपरपॉवर्स आणि समस्या सोडवण्याचे मार्ग आहेत. प्रोग्रामिंग भाषा जग असेच आहे, आणि तुम्हाला त्यांना भेटायला आवडेल!
+- **डिजिटल जादू घडवणारे मूलभूत घटक** – यांना अंतिम क्रिएटिव्ह LEGO सेट समजा. एकदा तुम्हाला हे तुकडे कसे एकत्र बसतात हे समजले की तुम्हाला कळेल की तुम्ही अक्षरशः तुमच्या कल्पनेने स्वप्न पाहिलेली कोणतीही गोष्ट तयार करू शकता
+- **व्यावसायिक टूल्स जे तुम्हाला जादूगाराचा जादूई काठी मिळाल्यासारखे वाटतील** – मी नाट्यमय होत नाही – ही टूल्स तुम्हाला खरोखर सुपरपॉवर्स असल्यासारखे वाटतील, आणि सर्वात चांगली गोष्ट? तीच टूल्स प्रोफेशनल्स वापरतात!
-> 💡 **एक गोष्ट लक्षात ठेवा**: आज सगळं लक्षात ठेवण्याचा प्रयत्न करू नका! सध्या, मला फक्त तुम्हाला काय शक्य आहे याबद्दल उत्साह वाटावा असं वाटतं. आपण एकत्र सराव करत असताना तपशील नैसर्गिकरित्या चिकटतील – खरी शिकवण तशीच होते!
+> 💡 **एक गोष्ट लक्षात ठेवा**: आज सर्वकाही लक्षात ठेवण्याचा प्रयत्न करू नका! सध्या, मला फक्त तुम्हाला काय शक्य आहे याबद्दल उत्साह वाटावा अशी इच्छा आहे. आपण एकत्र सराव करत असताना तपशील नैसर्गिकरित्या चिकटतील – खरी शिकवण अशीच होते!
> तुम्ही हा धडा [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon) वर घेऊ शकता!
-## तर प्रोग्रामिंग म्हणजे नक्की काय आहे?
+## तर प्रोग्रामिंग नेमकं *काय* आहे?
-ठीक आहे, आपण लाखो डॉलर्सचा प्रश्न सोडवूया: प्रोग्रामिंग म्हणजे नक्की काय?
+ठीक आहे, आपण लाखो डॉलरचा प्रश्न सोडवूया: प्रोग्रामिंग म्हणजे नेमकं काय?
-मी तुम्हाला एक कथा सांगतो जी माझं विचार करण्याचं पूर्णपणे बदललं. गेल्या आठवड्यात, मी माझ्या आईला आमच्या नवीन स्मार्ट टीव्ही रिमोटचा वापर कसा करायचा ते समजावून सांगण्याचा प्रयत्न करत होतो. मी स्वतःला "लाल बटण दाबा, पण मोठं लाल बटण नाही, डाव्या बाजूचं छोटं लाल बटण... नाही, तुमचा दुसरा डावा... ठीक आहे, आता दोन सेकंदांसाठी धरून ठेवा, एक नाही, तीन नाही..." असं म्हणताना पकडलं. ओळखीचं वाटतंय ना? 😅
+मी तुम्हाला एक कथा सांगतो जी माझा विचार पूर्णपणे बदलून टाकली. गेल्या आठवड्यात, मी माझ्या आईला आमच्या नवीन स्मार्ट टीव्ही रिमोटचा वापर कसा करायचा ते समजावून सांगण्याचा प्रयत्न करत होतो. मी असे म्हणताना स्वतःला पकडले, "लाल बटण दाबा, पण मोठे लाल बटण नाही, डाव्या बाजूला असलेले छोटे लाल बटण... नाही, तुमचा दुसरा डावा... ठीक आहे, आता दोन सेकंदांसाठी धरून ठेवा, एक नाही, तीन नाही..." ओळखीच वाटतंय ना? 😅
-तेच प्रोग्रामिंग आहे! ही एक कला आहे ज्यामध्ये अत्यंत तपशीलवार, चरण-दर-चरण सूचना देऊन काहीतरी खूप शक्तिशाली गोष्टी सांगितल्या जातात ज्याला सगळं परफेक्ट सांगितलं गेलं पाहिजे. फक्त तुमच्या आईला समजावून सांगण्याऐवजी (जी विचारू शकते "कोणतं लाल बटण?!"), तुम्ही संगणकाला समजावून सांगत आहात (जो फक्त तुम्ही सांगितलं तेच करतो, जरी तुम्ही जे सांगितलं ते तुम्हाला म्हणायचं होतं ते नसतं).
+हेच प्रोग्रामिंग आहे! ही एक कला आहे ज्यामध्ये तुम्ही अत्यंत तपशीलवार, पायरी-पायरीने सूचना देत असता अशा गोष्टीला जी खूप शक्तिशाली आहे पण तिला सर्वकाही परिपूर्णपणे सांगितले गेले पाहिजे. फक्त तुमच्या आईला समजावून सांगण्याऐवजी (जी विचारू शकते "कोणते लाल बटण?!"), तुम्ही संगणकाला समजावून सांगत असता (जो फक्त तुम्ही सांगितले तेच करतो, जरी तुम्ही जे सांगितले ते नेमके तुम्हाला म्हणायचे होते ते नसले तरी).
-जेव्हा मी हे पहिल्यांदा शिकलो तेव्हा मला जेव्हा कळलं तेव्हा माझं मन उडालं: संगणक खरोखरच त्यांच्या मूळात सोपे आहेत. त्यांना अक्षरशः फक्त दोन गोष्टी समजतात – 1 आणि 0, जे मूलतः "होय" आणि "नाही" किंवा "ऑन" आणि "ऑफ" आहे. एवढंच! पण इथेच जादू होते – आपल्याला 1s आणि 0s मध्ये बोलण्याची गरज नाही जसं आपण The Matrix मध्ये आहोत. तिथे **प्रोग्रामिंग भाषा** मदतीला येतात. त्या तुमच्या सामान्य मानवी विचारांना संगणकाच्या भाषेत रूपांतरित करणारा जगातील सर्वोत्तम अनुवादक असल्यासारख्या आहेत.
+जेव्हा मी हे प्रथम शिकले तेव्हा मला जेव्हा कळले तेव्हा माझे मन उडाले: संगणक प्रत्यक्षात त्यांच्या मुळात खूप सोपे आहेत. त्यांना अक्षरशः फक्त दोन गोष्टी समजतात – 1 आणि 0, जे मूलत: "होय" आणि "नाही" किंवा "चालू" आणि "बंद" आहे. एवढंच! पण जिथे जादू होते तिथे – आपल्याला 1s आणि 0s मध्ये बोलण्याची गरज नाही जणू आपण The Matrix मध्ये आहोत. तिथे **प्रोग्रामिंग भाषा** मदतीला येतात. त्या तुमच्या सामान्य मानवी विचारांना संगणकाच्या भाषेत रूपांतरित करणारा जगातील सर्वोत्तम अनुवादक असल्यासारखे आहेत.
-आणि इथेच मला रोज सकाळी उठल्यावर खरोखर रोमांचित वाटतं: तुमच्या आयुष्यातील अक्षरशः *सगळं* डिजिटल एखाद्या व्यक्तीने सुरुवात केली, कदाचित त्यांच्या पायजामामध्ये कॉफीचा कप घेऊन, त्यांच्या लॅपटॉपवर कोड टाइप करत. तो Instagram फिल्टर जो तुम्हाला परिपूर्ण दिसायला लावतो? कोणीतरी ते कोड केलं. ती शिफारस जी तुम्हाला तुमचं नवीन आवडतं गाणं ऐकायला लावली? एखाद्या डेव्हलपरने तो अल्गोरिदम तयार केला. ती अॅप जी तुम्हाला मित्रांसोबत डिनर बिल्स विभाजित करण्यात मदत करते? होय, कोणीतरी विचार केला "हे त्रासदायक आहे, मी हे ठीक करू शकतो" आणि मग... त्यांनी केलं!
+आणि येथे एक गोष्ट जी मला दररोज सकाळी उठल्यावर खरोखर रोमांचित करते: तुमच्या जीवनातील अक्षरशः *सर्वकाही* डिजिटल एखाद्या तुमच्यासारख्या व्यक्तीने सुरू केले, कदाचित त्यांच्या पायजामामध्ये कॉफीचा कप घेऊन, त्यांच्या लॅपटॉपवर कोड टाइप करत. तो Instagram फिल्टर जो तुम्हाला निर्दोष दिसायला लावतो? कोणीतरी तो कोड केला. ती शिफारस जी तुम्हाला तुमचा नवीन आवडता गाणं ऐकायला लावते? एखाद्या डेव्हलपरने तो अल्गोरिदम तयार केला. तो अॅप जो तुम्हाला मित्रांसोबत डिनर बिल्स विभाजित करण्यात मदत करतो? होय, कोणीतरी विचार केला "हे त्रासदायक आहे, मी हे ठीक करू शकतो" आणि मग... त्यांनी ते केले!
-जेव्हा तुम्ही प्रोग्रामिंग शिकता, तेव्हा तुम्ही फक्त नवीन कौशल्य मिळवत नाही – तुम्ही समस्यांचे निराकरण करणाऱ्या या अविश्वसनीय समुदायाचा भाग बनत आहात जो त्यांचा दिवस थोडा चांगला बनवण्यासाठी "मी काहीतरी तयार करू शकतो का?" असा विचार करत असतो. प्रामाणिकपणे, त्यापेक्षा थंड काही आहे का?
+जेव्हा तुम्ही प्रोग्रामिंग शिकता, तेव्हा तुम्ही फक्त नवीन कौशल्य मिळवत नाही – तुम्ही समस्या सोडवणाऱ्या या अविश्वसनीय समुदायाचा भाग बनत आहात जो त्यांचा दिवस "मी काहीतरी तयार करू शकतो का जे एखाद्याचा दिवस थोडा चांगला बनवेल?" विचार करण्यात घालवतो. प्रामाणिकपणे, त्यापेक्षा थंड काही आहे का?
-✅ **मजेदार तथ्य शोधा**: तुम्हाला मोकळ्या वेळेत शोधण्यासाठी काहीतरी खूप छान आहे – तुम्हाला कोण वाटतं की जगातील पहिला संगणक प्रोग्रामर कोण होता? मी तुम्हाला एक हिंट देतो: ते तुम्ही अपेक्षा करत असाल ते नसतील! या व्यक्तीमागील कथा खूपच आकर्षक आहे आणि दाखवते की प्रोग्रामिंग नेहमीच सर्जनशील समस्या सोडवण्याबद्दल आणि बॉक्सच्या बाहेर विचार करण्याबद्दल आहे.
+✅ **मजेदार तथ्य शोधा**: तुम्हाला मोकळ्या वेळेत शोधण्यासाठी काहीतरी खूप छान सांगतो – तुम्हाला कोण वाटतं जगातील पहिला संगणक प्रोग्रामर होता? मी तुम्हाला एक हिंट देतो: ते तुम्ही अपेक्षित करत असाल असे नाही! या व्यक्तीमागील कथा अत्यंत आकर्षक आहे आणि दाखवते की प्रोग्रामिंग नेहमीच सर्जनशील समस्या सोडवणे आणि बॉक्सच्या बाहेर विचार करणे याबद्दल आहे.
-## प्रोग्रामिंग भाषा म्हणजे जादूचे वेगवेगळे स्वाद
+### 🧠 **चेक-इन वेळ: तुम्हाला कसे वाटते?**
-ठीक आहे, हे विचित्र वाटेल, पण माझ्यासोबत राहा – प्रोग्रामिंग भाषा वेगवेगळ्या प्रकारच्या संगीतासारख्या आहेत. विचार करा: तुम्हाला जाझ आहे, जे गुळगुळीत आणि इम्प्रोव्हायझेशनल आहे, रॉक जे शक्तिशाली आणि सरळ आहे, क्लासिकल जे मोहक आणि संरचित आहे, आणि हिप-हॉप जे सर्जनशील आणि अभिव्यक्त आहे. प्रत्येक शैलीला स्वतःचा मूड, स्वतःचा उत्साही चाहत्यांचा समुदाय आहे, आणि प्रत्येक वेगवेगळ्या मूड आणि प्रसंगांसाठी परिपूर्ण आहे.
+**थोडा वेळ घ्या आणि विचार करा:**
+- "संगणकांना सूचना देणे" ही कल्पना आता तुम्हाला समजते का?
+- तुम्ही प्रोग्रामिंगसह स्वयंचलित करू इच्छित असलेल्या दैनंदिन कामाचा विचार करू शकता का?
+- या संपूर्ण प्रोग्रामिंग गोष्टीबद्दल तुमच्या मनात कोणते प्रश्न आहेत?
-प्रोग्रामिंग भाषा अगदी तशाच प्रकारे काम करतात! तुम्ही मोठ्या प्रमाणात हवामान डेटा क्रंच करण्यासाठी वापरलेली भाषा आणि मजेदार मोबाइल गेम तयार करण्यासाठी वापरलेली भाषा एकसारखी वापरणार नाही, जसं तुम्ही योगा क्लासमध्ये डेथ मेटल वाजवणार नाही (बरं, बहुतेक योगा क्लासमध्ये तरी नाही! 😄).
+> **लक्षात ठेवा**: काही संकल्पना सध्या अस्पष्ट वाटणे पूर्णपणे सामान्य आहे. प्रोग्रामिंग शिकणे ही नवीन भाषा शिकण्यासारखी आहे – तुमच्या मेंदूला त्या न्यूरल पथ तयार करण्यासाठी वेळ लागतो. तुम्ही उत्तम करत आहात!
-पण इथेच मला प्रत्येक वेळी विचार करताना आश्चर्य वाटतं: या भाषा तुमच्यासोबत बसलेल्या जगातील सर्वात संयमी, प्रतिभावान अनुवादकासारख्या आहेत. तुम्ही तुमच्या मानवी मेंदूसाठी नैसर्गिक वाटेल अशा प्रकारे तुमच्या कल्पना व्यक्त करू शकता, आणि ते संगणकांना प्रत्यक्षात बोलणाऱ्या 1s आणि 0s मध्ये अनुवाद करण्याचं अविश्वसनीय जटिल काम हाताळतात. हे असं आहे जसं तुमच्यासोबत एक मित्र आहे जो "मानवी सर्जनशीलता" आणि "संगणक तर्कशास्त्र" या दोन्ही गोष्टींमध्ये परिपूर्ण आहे – आणि त्यांना कधीच थकवा येत नाही, कधीच कॉफी ब्रेकची गरज नसते, आणि तुम्ही एकच प्रश्न दोनदा विचारल्याबद्दल कधीच न्याय करत नाहीत!
+## प्रोग्रामिंग भाषा म्हणजे जादूचे वेगवेगळे स्वाद
-### लोकप्रिय प्रोग्रामिंग भाषा आणि त्यांचा उपयोग
+ठीक आहे, हे विचित्र वाटेल, पण माझ्यासोबत राहा – प्रोग्रामिंग भाषा वेगवेगळ्या प्रकारच्या संगीतासारख्या आहेत. विचार करा: तुम्हाला जाझ आहे, जे गुळगुळीत आणि इम्प्रोव्हायझेशनल आहे, रॉक जे शक्तिशाली आणि सरळ आहे, क्लासिकल जे मोहक आणि संरचित आहे, आणि हिप-हॉप जे सर्जनशील आणि अभिव्यक्त आहे. प्रत्येक शैलीला स्वतःचा मूड आहे, स्वतःचा उत्साही चाहत्यांचा समुदाय आहे, आणि प्रत्येक वेगवेगळ्या मूड्स आणि प्रसंगांसाठी परिपूर्ण आहे.
+
+प्रोग्रामिंग भाषा अगदी तशाच प्रकारे काम करतात! तुम्ही मोठ्या प्रमाणात हवामान डेटा क्रंच करण्यासाठी वापरलेली भाषा आणि मजेदार मोबाइल गेम तयार करण्यासाठी वापरलेली भाषा एकसारखी नसते, जसे तुम्ही योगा क्लासमध्ये डेथ मेटल वाजवणार नाही (ठीक आहे, बहुतेक योगा क्लासमध्ये तरी नाही! 😄).
+
+पण जेव्हा मी याबद्दल विचार करतो तेव्हा माझे मन पूर्णपणे उडते: या भाषा तुमच्यासोबत बसलेल्या जगातील सर्वात संयमी, प्रतिभावान दुभाष्यासारख्या आहेत. तुम्ही तुमच्या मानवी मेंदूसाठी नैसर्गिक वाटेल अशा प्रकारे तुमच्या कल्पना व्यक्त करू शकता, आणि ते सर्व अत्यंत जटिल काम हाताळतात जे संगणक प्रत्यक्षात बोलतात त्या 1s आणि 0s मध्ये अनुवादित करण्याचे आहे. हे असे आहे जणू तुमच्याजवळ एक मित्र आहे जो "मानवी सर्जनशीलता" आणि "संगणक तर्कशास्त्र" या दोन्ही गोष्टींमध्ये परिपूर्ण आहे – आणि त्यांना कधीच थकवा येत नाही, कधीच कॉफी ब्रेकची गरज नसते, आणि तुम्ही एकच प्रश्न दोनदा विचारल्याबद्दल कधीच न्याय करत नाहीत!
+
+### लोकप्रिय प्रोग्रामिंग भाषा आणि त्यांचे उपयोग
+
+```mermaid
+mindmap
+ root((Programming Languages))
+ Web Development
+ JavaScript
+ Frontend Magic
+ Interactive Websites
+ TypeScript
+ JavaScript + Types
+ Enterprise Apps
+ Data & AI
+ Python
+ Data Science
+ Machine Learning
+ Automation
+ R
+ Statistics
+ Research
+ Mobile Apps
+ Java
+ Android
+ Enterprise
+ Swift
+ iOS
+ Apple Ecosystem
+ Kotlin
+ Modern Android
+ Cross-platform
+ Systems & Performance
+ C++
+ Games
+ Performance Critical
+ Rust
+ Memory Safety
+ System Programming
+ Go
+ Cloud Services
+ Scalable Backend
+```
| भाषा | सर्वोत्तम उपयोग | ती लोकप्रिय का आहे |
-|----------|----------|------------------|
-| **JavaScript** | वेब डेव्हलपमेंट, युजर इंटरफेस | ब्राउझरमध्ये चालते आणि इंटरॅक्टिव्ह वेबसाइट्स चालवते |
+|------|----------------|--------------------|
+| **JavaScript** | वेब डेव्हलपमेंट, युजर इंटरफेस | ब्राउझर्समध्ये चालते आणि इंटरॅक्टिव्ह वेबसाइट्स चालवते |
| **Python** | डेटा सायन्स, ऑटोमेशन, AI | वाचायला आणि शिकायला सोपी, शक्तिशाली लायब्ररी |
-| **Java** | एंटरप्राइज अॅप्स, अँड्रॉइड अॅप्स | प्लॅटफॉर्म-स्वतंत्र, मोठ्या सिस्टीमसाठी मजबूत |
+| **Java** | एंटरप्राइज अॅप्स, अँड्रॉइड अॅप्स | प्लॅटफॉर्म-स्वतंत्र, मोठ्या सिस्टमसाठी मजबूत |
| **C#** | विंडोज अॅप्स, गेम डेव्हलपमेंट | मजबूत Microsoft इकोसिस्टम सपोर्ट |
-| **Go** | क्लाउड सर्व्हिसेस, बॅकएंड सिस्टीम्स | जलद, सोपी, आधुनिक संगणनासाठी डिझाइन केलेली |
+| **Go** | क्लाउड सर्व्हिसेस, बॅकएंड सिस्टम्स | वेगवान, सोपी, आधुनिक संगणनासाठी डिझाइन केलेली |
-### उच्च-स्तरीय विरुद्ध निम्न-स्तरीय भाषा
+### उच्च-स्तरीय vs. निम्न-स्तरीय भाषा
-ठीक आहे, हे खरंच ते संकल्पना आहे ज्याने मला सुरुवातीला गोंधळात टाकलं, त्यामुळे मी शेवटी समजलेली उपमा शेअर करतो – आणि मला खरोखर आशा आहे की ती तुम्हाला मदत करेल!
+ठीक आहे, हे प्रामाणिकपणे ते संकल्पना होते ज्याने मला सुरुवातीला गोंधळात टाकले, म्हणून मी शेवटी मला समजलेली उपमा शेअर करतो – आणि मला खरोखर आशा आहे की ती तुम्हाला मदत करेल!
-कल्पना करा की तुम्ही अशा देशात भेट देत आहात जिथे तुम्हाला भाषा बोलता येत नाही, आणि तुम्हाला तातडीने जवळचा बाथरूम शोधायचा आहे (आपण सगळ्यांनी हे अनुभवलं आहे, बरोबर? 😅):
+कल्पना करा की तुम्ही अशा देशात भेट देत आहात जिथे तुम्हाला भाषा बोलता येत नाही, आणि तुम्हाला अत्यंत गरजेने जवळचा बाथरूम शोधायचा आहे (आपण सर्व तिथे गेलो आहोत, बरोबर? 😅):
-- **निम्न-स्तरीय प्रोग्रामिंग** म्हणजे स्थानिक बोलीभाषा इतकी चांगली शिकणे की तुम्ही कोपऱ्यावर फळ विकणाऱ्या आजीशी सांस्कृतिक संदर्भ, स्थानिक शब्द आणि फक्त तिथेच वाढलेल्या व्यक्तीला समजतील अशा अंतर्गत विनोदांचा वापर करून गप्पा मारू शकता. खूप प्रभावी आणि अविश्वसनीयपणे कार्यक्षम... जर तुम्ही प्रवाही असाल तर! पण तुम्ही फक्त बाथरूम शोधण्याचा प्रयत्न करत असाल तर खूपच गोंधळात टाकणारी.
+- **निम्न-स्तरीय प्रोग्रामिंग** म्हणजे स्थानिक बोलीभाषा इतकी चांगली शिकणे की तुम्ही कोपऱ्यावर फळ विकणाऱ्या आजीशी सांस्कृतिक संदर्भ, स्थानिक शब्द आणि फक्त तेथे वाढलेल्या व्यक्तीला समजतील अशा अंतर्गत विनोदांचा वापर करून गप्पा मारू शकता. खूप प्रभावी आणि अविश्वसनीयपणे कार्यक्षम... जर तुम्ही प्रवाही असाल तर! पण तुम्ही फक्त बाथरूम शोधण्याचा प्रयत्न करत असाल तर खूपच गोंधळात टाकणारे.
-- **उच्च-स्तरीय प्रोग्रामिंग** म्हणजे तुमचं ते अद्भुत स्थानिक मित्र असणं जो तुम्हाला समजतो. तुम्ही "मला खरंच बाथरूम शोधायचा आहे" असं साध्या इंग्रजीत सांगू शकता, आणि ते सगळा सांस्कृतिक अनुवाद हाताळतात आणि तुम्हाला अशा प्रकारे दिशा देतात ज्यामुळे तुमच्या गैर-स्थानिक मेंदूसाठी परिपूर्ण अर्थ लागतो.
+- **उच्च-स्तरीय प्रोग्रामिंग** म्हणजे तुमच्याकडे तो अद्भुत स्थानिक मित्र आहे जो तुम्हाला फक्त समजतो. तुम्ही "मला खरोखर बाथरूम शोधायचा आहे" असे साध्या इंग्रजीत सांगू शकता, आणि ते सर्व सांस्कृतिक अनुवाद हाताळतात आणि तुम्हाला अशा प्रकारे दिशा देतात जी तुमच्या गैर-स्थानिक मेंदूसाठी परिपूर्ण अर्थ देतात.
प्रोग्रामिंगच्या दृष्टीने:
-- **निम्न-स्तरीय भाषा** (जसे Assembly किंवा C) तुम्हाला संगणकाच्या वास्तविक हार्डवेअरशी अविश्वसनीय तपशीलवार संवाद साधू देतात, पण तुम्हाला मशीनसारखं विचार करावं लागतं, जे... बरं, आपण फक्त म्हणूया की ते एक मोठं मानसिक बदल आहे!
-- **उच्च-स्तरीय भाषा** (जसे JavaScript, Python, किंवा C#) तुम्हाला मानवी विचार करण्यास परवानगी देतात तर ते सगळं मशीन-स्पीक मागे हाताळतात. शिवाय, त्यांच्याकडे अशा अविश्वसनीय स्वागतार्ह समुदाय आहेत जे नवीन असण्याचं काय वाटतं हे लक्षात ठेवतात आणि खरोखरच मदत करू इच्छितात!
-
-तुम्हाला सुरुवात करण्यासाठी मी कोणत्या सुचवणार आहे? 😉 उच्च-स्तरीय भाषा म्हणजे प्रशिक्षण चाकं असणं ज्यांना तुम्ही कधीच काढू इच्छित नाही कारण त्या संपूर्ण अनुभवाला खूपच आनंददायक बनवतात!
-
-
-### उच्च-स्तरीय भाषा का अधिक मैत्रीपूर्ण आहेत हे मी तुम्हाला दाखवतो
-
-ठीक आहे, मी तुम्हाला काहीतरी दाखवणार आहे जे उच्च-स्तरीय भाषांवर प्रेम करण्याचं कारण परिपूर्णपणे दाखवतं, पण आधी – मला तुमच्याकडून काहीतरी वचन हवं आहे. जेव्हा तुम्ही पहिला कोड उदाहरण पाहता, तेव्हा घाबरू नका! ते घाबरवण्यासाठीच आहे. मी जे मुद्दा मांडतोय तोच आहे!
-
-आपण एकाच कार्याला दोन पूर्णपणे वेगळ्या शैलीत लिहिलेलं पाहणार आहोत. दोन्ही Fibonacci sequence तयार करतात – ही एक सुंदर गणितीय पद्धत आहे जिथे प्रत्येक संख्या आधीच्या दोन संख्यांचा योग आहे: 0, 1, 1, 2, 3, 5, 8, 13... (मजेदार तथ्य: तुम्हाला ही पद्धत अक्षरशः निसर्गात सगळीकडे सापडेल – सूर्यफुलाच्या बिया, पाइनकोन पॅटर्न्स, अगदी आकाशगंगा तयार होण्याच्या पद्धतीत!)
-
-तयार आहात फरक पाहण्यासाठी? चला!
-
-**उच्च-स्तरीय भाषा (JavaScript) – मानवी-अनुकूल:**
+- **निम्न-स्तरीय भाषा** (जसे Assembly किंवा C) तुम्हाला संगणकाच्या वास्तविक हार्डवेअरशी अविश्वसनीय तपशीलवार संवाद साधू देतात, पण तुम्हाला मशीनसारखे विचार करावे लागते, जे... ठीक आहे, आपण फक्त म्हणूया की ते एक मोठे मानसिक बदल आहे!
+- **उच्च-स्तरीय भाषा** (जसे JavaScript, Python, किंवा C#) तुम्हाला मानवी विचार करण्यास परवानगी देतात तर ते सर्व मशीन-स्पीक मागे हाताळतात. याशिवाय, त्यांच्याकडे अशा अविश्वसनीय स्वागतार्ह समुदाय आहेत जे नवीन असण्याचा अनुभव लक्षात ठेवतात आणि खरोखर मदत करू इच्छितात!
+
+तुम्ही कोणत्या भाषांपासून सुरुवात करावी असे मी सुचवणार आहे? 😉 उच्च-स्तरीय भाषा म्हणजे प्रशिक्षण चाकांसारखे आहेत जे तुम्हाला कधीच काढून टाकायचे वाटत नाही कारण ते संपूर्ण अनुभव खूपच आनंददायक बनवतात!
+
+```mermaid
+flowchart TB
+ A["👤 Human Thought: 'I want to calculate Fibonacci numbers'"] --> B{Choose Language Level}
+
+ B -->|High-Level| C["🌟 JavaScript/Python Easy to read and write"]
+ B -->|Low-Level| D["⚙️ Assembly/C Direct hardware control"]
+
+ C --> E["📝 Write: fibonacci(10)"]
+ D --> F["📝 Write: mov r0,#00 sub r0,r0,#01"]
+
+ E --> G["🤖 Computer Understanding: Translator handles complexity"]
+ F --> G
+
+ G --> H["💻 Same Result: 0, 1, 1, 2, 3, 5, 8, 13..."]
+
+ style C fill:#e1f5fe
+ style D fill:#fff3e0
+ style H fill:#e8f5e8
+```
-```javascript
-// Step 1: Basic Fibonacci setup
-const fibonacciCount = 10;
-let current = 0;
-let next = 1;
+### उच्च-स्तरीय भाषा अधिक मैत्रीपूर्ण का आहेत हे मी तुम्हाला दाखवतो
-console.log('Fibonacci sequence:');
-```
+ठीक आहे, मी तुम्हाला काहीतरी दाखवणार आहे जे उच्च-स्तरीय भाषांवर प्रेम करण्याचे कारण परिपूर्णपणे दर्शवते, पण आधी – मला तुमच्याकडून काहीतरी वचन हवे आहे. जेव्हा तुम्ही पहिला कोड उदाहरण पाहता, तेव्हा घाबरू नका! ते घ
+- **टिप्पण्या**: उच्च-स्तरीय प्रोग्रामिंग भाषांमध्ये स्पष्ट स्पष्टीकरण देणाऱ्या टिप्पण्या लिहिण्याचा प्रोत्साहन दिला जातो, ज्यामुळे कोड स्वतःच दस्तऐवजीकरणासारखा वाटतो.
+- **रचना**: JavaScript चा तर्कशुद्ध प्रवाह मानवी विचारसरणीशी जुळतो, जसे समस्या चरण-दर-चरण सोडवणे.
+- **देखभाल**: वेगवेगळ्या गरजांसाठी JavaScript ची आवृत्ती अपडेट करणे सोपे आणि स्पष्ट आहे.
-**हा कोड काय करतो:**
-- **घोषणा** करा की आपल्याला किती Fibonacci संख्या तयार करायच्या आहेत
--
-✅ **फिबोनाची अनुक्रमाबद्दल**: हा अप्रतिम संख्यात्मक नमुना (जिथे प्रत्येक संख्या तिच्या आधीच्या दोन संख्यांच्या बेरीजइतकी असते: 0, 1, 1, 2, 3, 5, 8...) निसर्गात अक्षरशः *सर्वत्र* दिसतो! तुम्हाला तो सुर्यफुलांच्या वर्तुळांमध्ये, पाइनकोनच्या नमुन्यांमध्ये, नॉटिलस शंखाच्या वळणांमध्ये, आणि अगदी झाडांच्या फांद्या कशा वाढतात यामध्येही सापडेल. गणित आणि कोड कसे आपल्याला निसर्गाने सौंदर्य निर्माण करण्यासाठी वापरलेले नमुने समजून घेण्यास आणि पुन्हा तयार करण्यास मदत करू शकतात हे खरोखरच आश्चर्यकारक आहे!
+✅ **फिबोनाची अनुक्रमाबद्दल**: हा अप्रतिम संख्यात्मक नमुना (जिथे प्रत्येक संख्या मागील दोन संख्यांच्या बेरीजसारखी असते: 0, 1, 1, 2, 3, 5, 8...) अक्षरशः *निसर्गात सर्वत्र* दिसतो! तुम्हाला तो सूर्यफुलांच्या वर्तुळांमध्ये, पाइनकोनच्या नमुन्यांमध्ये, नॉटिलस शंखाच्या वक्रांमध्ये, आणि झाडांच्या फांद्या कशा वाढतात यामध्येही सापडेल. गणित आणि कोड कसे निसर्गाच्या सौंदर्य निर्माण करण्याच्या नमुन्यांना समजून घेण्यास आणि पुन्हा तयार करण्यास मदत करू शकतात हे खरोखर आश्चर्यकारक आहे!
## जादू घडवणारे मूलभूत घटक
-ठीक आहे, आता तुम्ही प्रोग्रामिंग भाषांचे क्रियाशील स्वरूप पाहिले आहे, चला प्रत्येक प्रोग्राम तयार करणाऱ्या मूलभूत घटकांचे विश्लेषण करूया. यांना तुमच्या आवडत्या रेसिपीमधील आवश्यक घटक समजून घ्या – एकदा तुम्हाला प्रत्येक घटक काय करतो हे समजले की, तुम्ही कोणत्याही भाषेत कोड वाचू आणि लिहू शकता!
+ठीक आहे, आता तुम्ही प्रोग्रामिंग भाषांचे प्रत्यक्षात कसे दिसते ते पाहिले आहे, चला प्रत्येक प्रोग्राममध्ये असलेल्या मूलभूत तुकड्यांचे विश्लेषण करूया. यांना तुमच्या आवडत्या रेसिपीच्या आवश्यक घटकांसारखे समजा – एकदा तुम्हाला प्रत्येकाचा उपयोग समजला की, तुम्ही कोणत्याही भाषेत कोड वाचू आणि लिहू शकता!
-हे प्रोग्रामिंगच्या व्याकरणासारखे आहे. शाळेत तुम्ही नाम, क्रियापद आणि वाक्य कसे तयार करायचे हे शिकले होते का? प्रोग्रामिंगचे स्वतःचे व्याकरण आहे आणि प्रामाणिकपणे सांगायचे तर, ते इंग्रजी व्याकरणापेक्षा खूपच अधिक तर्कसंगत आणि सोपे आहे! 😄
+हे प्रोग्रामिंगच्या व्याकरणासारखे आहे. शाळेत तुम्ही नाम, क्रियापद, आणि वाक्य कसे तयार करायचे ते शिकले होते का? प्रोग्रामिंगचे स्वतःचे व्याकरण आहे, आणि प्रामाणिकपणे सांगायचे तर, इंग्रजी व्याकरणापेक्षा ते अधिक तर्कसंगत आणि सोपे आहे! 😄
-### स्टेटमेंट्स: क्रमवार सूचना
+### स्टेटमेंट्स: चरण-दर-चरण सूचना
चला **स्टेटमेंट्स** पासून सुरुवात करूया – हे तुमच्या संगणकाशी संवादातील वैयक्तिक वाक्यांसारखे आहेत. प्रत्येक स्टेटमेंट संगणकाला एक विशिष्ट गोष्ट करण्यास सांगते, जसे की दिशा देणे: "इथे डावीकडे वळा," "लाल दिव्यावर थांबा," "त्या जागेत पार्क करा."
-स्टेटमेंट्स मला आवडण्याचे कारण म्हणजे ते सहसा वाचण्यास सोपे असतात. हे पहा:
+स्टेटमेंट्सबद्दल मला आवडते ते म्हणजे ते सहसा वाचण्यास सोपे असतात. हे पहा:
```javascript
// Basic statements that perform single actions
@@ -134,10 +204,10 @@ console.log("Hello, world!");
const sum = 5 + 3;
```
-**या कोडचे कार्य:**
-- **घोषणा करा** एका स्थिर व्हेरिएबलची जे वापरकर्त्याचे नाव साठवते
-- **प्रदर्शित करा** एक अभिवादन संदेश कन्सोल आउटपुटवर
-- **गणना करा** आणि गणितीय ऑपरेशनचा परिणाम साठवा
+**या कोडने काय केले आहे:**
+- **घोषणा करा**: वापरकर्त्याचे नाव साठवण्यासाठी स्थिर व्हेरिएबल तयार करा
+- **प्रदर्शित करा**: कन्सोल आउटपुटवर अभिवादन संदेश
+- **गणना करा**: गणितीय ऑपरेशनचा परिणाम साठवा
```javascript
// Statements that interact with web pages
@@ -145,19 +215,19 @@ document.title = "My Awesome Website";
document.body.style.backgroundColor = "lightblue";
```
-**क्रमवार काय घडते:**
+**चरण-दर-चरण काय घडते:**
- **वेबपेजचे शीर्षक बदला** जे ब्राउझर टॅबमध्ये दिसते
-- **पृष्ठाच्या संपूर्ण पार्श्वभूमीचा रंग बदला**
+- **पृष्ठाच्या पार्श्वभूमीचा रंग बदला**
### व्हेरिएबल्स: तुमच्या प्रोग्रामचे मेमरी सिस्टम
-ठीक आहे, **व्हेरिएबल्स** खरोखरच शिकवायला माझ्या आवडत्या संकल्पनांपैकी एक आहेत कारण ते तुम्ही दररोज वापरत असलेल्या गोष्टींसारखे आहेत!
+ठीक आहे, **व्हेरिएबल्स** शिकवणे माझ्या आवडत्या संकल्पनांपैकी एक आहे कारण ते तुम्ही दररोज वापरत असलेल्या गोष्टींसारखे आहेत!
-तुमच्या फोनच्या संपर्क यादीबद्दल विचार करा. तुम्ही प्रत्येकाचा फोन नंबर लक्षात ठेवत नाही – त्याऐवजी, तुम्ही "आई," "सर्वात चांगला मित्र," किंवा "पिझ्झा प्लेस जो रात्री 2 वाजेपर्यंत डिलिव्हरी करतो" असे नाव सेव्ह करता आणि तुमचा फोन खरे नंबर लक्षात ठेवतो. व्हेरिएबल्स अगदी तसेच काम करतात! ते लेबल असलेल्या कंटेनरसारखे आहेत जिथे तुमचा प्रोग्राम माहिती साठवू शकतो आणि नंतर अशा नावाने ती माहिती पुन्हा मिळवू शकतो जी खरोखर अर्थपूर्ण आहे.
+तुमच्या फोनच्या संपर्क यादीबद्दल विचार करा. तुम्ही प्रत्येकाचा फोन नंबर लक्षात ठेवत नाही – त्याऐवजी, तुम्ही "आई," "सर्वात चांगला मित्र," किंवा "पिझ्झा प्लेस जो रात्री २ वाजेपर्यंत डिलिव्हरी करतो" असे नाव सेव्ह करता आणि तुमचा फोन प्रत्यक्ष नंबर लक्षात ठेवतो. व्हेरिएबल्स अगदी तसेच काम करतात! ते लेबल असलेल्या कंटेनरसारखे आहेत जिथे तुमचा प्रोग्राम माहिती साठवू शकतो आणि नंतर अर्थपूर्ण नाव वापरून ती परत मिळवू शकतो.
-यात खूप छान गोष्ट आहे: तुमचा प्रोग्राम चालू असताना व्हेरिएबल्स बदलू शकतात (म्हणूनच त्यांना "व्हेरिएबल" म्हणतात – पाहिलं का काय केलं त्यांनी?). जसे तुम्ही त्या पिझ्झा प्लेसचा संपर्क अपडेट करू शकता जेव्हा तुम्हाला त्यापेक्षा चांगली जागा सापडते, तसेच तुमचा प्रोग्राम नवीन माहिती शिकतो किंवा परिस्थिती बदलते तेव्हा व्हेरिएबल्स अपडेट होऊ शकतात!
+यात खरोखर छान गोष्ट आहे: प्रोग्राम चालू असताना व्हेरिएबल्स बदलू शकतात (म्हणूनच त्यांना "व्हेरिएबल्स" म्हणतात – पाहा त्यांनी काय केले!). जसे तुम्ही त्या पिझ्झा प्लेसचा संपर्क अपडेट करू शकता जेव्हा तुम्हाला त्यापेक्षा चांगले ठिकाण सापडते, तसेच प्रोग्राम नवीन माहिती शिकत असताना किंवा परिस्थिती बदलत असताना व्हेरिएबल्स अपडेट होऊ शकतात!
-मला तुम्हाला हे किती सोपे असू शकते हे दाखवू द्या:
+मला तुम्हाला हे किती सोपे असते ते दाखवू द्या:
```javascript
// Step 1: Creating basic variables
@@ -167,11 +237,11 @@ let temperature = 75;
let isRaining = false;
```
-**या संकल्पना समजून घेणे:**
-- **साठवा** स्थिर मूल्ये `const` व्हेरिएबल्समध्ये (जसे साइटचे नाव)
-- **वापरा** `let` अशा मूल्यांसाठी जे तुमच्या प्रोग्राममध्ये बदलू शकतात
-- **असाइन करा** वेगवेगळ्या डेटा प्रकार: स्ट्रिंग्स (टेक्स्ट), नंबर आणि बूलियन (सत्य/असत्य)
-- **निवडा** वर्णनात्मक नावे जी प्रत्येक व्हेरिएबलमध्ये काय आहे ते स्पष्ट करतात
+**या संकल्पना समजून घ्या:**
+- **स्थिर मूल्ये साठवा** `const` व्हेरिएबल्समध्ये (जसे साइटचे नाव)
+- **`let` वापरा** जेव्हा मूल्ये प्रोग्राममध्ये बदलू शकतात
+- **वेगवेगळ्या डेटा प्रकारांना असाइन करा**: स्ट्रिंग्स (मजकूर), संख्या, आणि बूलियन (सत्य/असत्य)
+- **वर्णनात्मक नावे निवडा** जी प्रत्येक व्हेरिएबलमध्ये काय आहे ते स्पष्ट करतात
```javascript
// Step 2: Working with objects to group related data
@@ -182,10 +252,10 @@ const weatherData = {
};
```
-**वरील कोडमध्ये आम्ही:**
-- **तयार केले** एक ऑब्जेक्ट जो संबंधित हवामान माहिती एकत्रित करतो
-- **संगठित केले** एकाच व्हेरिएबल नावाखाली अनेक डेटा तुकडे
-- **वापरले** की-वॅल्यू जोड्या प्रत्येक माहितीचा तुकडा स्पष्टपणे लेबल करण्यासाठी
+**वरीलमध्ये आम्ही:**
+- **ऑब्जेक्ट तयार केला** संबंधित हवामान माहिती एकत्रित करण्यासाठी
+- **एकाच व्हेरिएबल नावाखाली** अनेक डेटा तुकडे व्यवस्थित केले
+- **की-वॅल्यू जोड्या वापरल्या** प्रत्येक माहितीचा तुकडा स्पष्टपणे लेबल करण्यासाठी
```javascript
// Step 3: Using and updating variables
@@ -198,10 +268,10 @@ temperature = 68;
```
**प्रत्येक भाग समजून घेऊया:**
-- **प्रदर्शित करा** माहिती टेम्पलेट लिटरल्स वापरून `${}` सिंटॅक्ससह
-- **प्रवेश करा** ऑब्जेक्ट प्रॉपर्टीज डॉट नोटेशन (`weatherData.windSpeed`) वापरून
-- **अपडेट करा** `let` सह घोषित केलेले व्हेरिएबल्स बदलत्या परिस्थितीचे प्रतिबिंबित करण्यासाठी
-- **संयोजन करा** अनेक व्हेरिएबल्स अर्थपूर्ण संदेश तयार करण्यासाठी
+- **माहिती प्रदर्शित करा** टेम्पलेट लिटरल्स वापरून `${}` सिंटॅक्ससह
+- **ऑब्जेक्ट प्रॉपर्टीज ऍक्सेस करा** डॉट नोटेशन (`weatherData.windSpeed`) वापरून
+- **`let` ने घोषित केलेल्या व्हेरिएबल्स अपडेट करा** बदलत्या परिस्थितीचे प्रतिबिंबित करण्यासाठी
+- **अनेक व्हेरिएबल्स एकत्र करा** अर्थपूर्ण संदेश तयार करण्यासाठी
```javascript
// Step 4: Modern destructuring for cleaner code
@@ -210,19 +280,19 @@ console.log(`${location} humidity: ${humidity}%`);
```
**तुम्हाला काय माहित असणे आवश्यक आहे:**
-- **काढा** ऑब्जेक्ट्समधून विशिष्ट प्रॉपर्टीज डेस्ट्रक्चरिंग असाइनमेंट वापरून
-- **तयार करा** नवीन व्हेरिएबल्स जे ऑब्जेक्ट कीजसारखेच नाव असतात
-- **सोपे करा** कोड पुनरावृत्ती डॉट नोटेशन टाळून
+- **ऑब्जेक्टमधून विशिष्ट प्रॉपर्टीज काढा** डीस्ट्रक्चरिंग असाइनमेंट वापरून
+- **नवीन व्हेरिएबल्स आपोआप तयार करा** ऑब्जेक्ट कीसारख्या नावांसह
+- **कोड सोपा करा** पुनरावृत्ती डॉट नोटेशन टाळून
### कंट्रोल फ्लो: तुमच्या प्रोग्रामला विचार करायला शिकवा
-ठीक आहे, इथे प्रोग्रामिंग खरोखरच आश्चर्यकारक होते! **कंट्रोल फ्लो** म्हणजे तुमच्या प्रोग्रामला हुशार निर्णय कसे घ्यायचे ते शिकवणे, अगदी तुम्ही दररोज विचार न करता करत असलेल्या गोष्टींसारखे.
+ठीक आहे, इथे प्रोग्रामिंग खरोखर आश्चर्यकारक होते! **कंट्रोल फ्लो** म्हणजे तुमच्या प्रोग्रामला हुशार निर्णय घेण्यास शिकवणे, अगदी तुम्ही दररोज विचार न करता करत असलेल्या गोष्टींसारखे.
-कल्पना करा: आज सकाळी तुम्ही कदाचित असे काहीतरी केले असेल "जर पाऊस पडत असेल तर छत्री घेईन. जर थंडी असेल तर जॅकेट घालीन. जर उशीर होत असेल तर नाश्ता वगळून वाटेत कॉफी घेईन." तुमचा मेंदू नैसर्गिकरित्या हे if-then लॉजिक दररोज डझनभर वेळा अनुसरण करतो!
+कल्पना करा: आज सकाळी तुम्ही कदाचित असे काहीतरी केले असेल "जर पाऊस पडत असेल तर छत्री घेईन. जर थंडी असेल तर जॅकेट घालीन. जर उशीर होत असेल तर नाश्ता टाळीन आणि वाटेत कॉफी घेईन." तुमचा मेंदू नैसर्गिकरित्या ही if-then लॉजिक दररोज डझनभर वेळा अनुसरतो!
-हेच प्रोग्राम्सना हुशार आणि जिवंत वाटण्यास मदत करते, फक्त काही कंटाळवाण्या, अंदाजानुसार स्क्रिप्टचे अनुसरण करण्याऐवजी. ते प्रत्यक्ष परिस्थिती पाहू शकतात, काय घडत आहे याचे मूल्यांकन करू शकतात आणि योग्य प्रतिसाद देऊ शकतात. हे तुमच्या प्रोग्रामला एक मेंदू देण्यासारखे आहे जो परिस्थितीनुसार अनुकूल होतो आणि निवड करतो!
+यामुळे प्रोग्राम्स हुशार आणि जिवंत वाटतात, फक्त काही कंटाळवाण्या, अंदाजानुसार स्क्रिप्टचे अनुसरण करण्याऐवजी. ते प्रत्यक्षात परिस्थिती पाहू शकतात, काय घडत आहे ते मूल्यांकन करू शकतात, आणि योग्य प्रतिसाद देऊ शकतात. हे तुमच्या प्रोग्रामला अनुकूल होण्यास आणि निवडी करण्यास मेंदू देण्यासारखे आहे!
-हे किती सुंदरपणे कार्य करते ते पाहायचे आहे का? मी तुम्हाला दाखवतो:
+हे किती सुंदरपणे कार्य करते ते पाहायचे आहे का? मला तुम्हाला दाखवू द्या:
```javascript
// Step 1: Basic conditional logic
@@ -236,11 +306,11 @@ if (userAge >= 18) {
}
```
-**या कोडचे कार्य:**
-- **तपासा** वापरकर्त्याचे वय मतदानाच्या अटींना पूर्ण करते का
-- **अंमलात आणा** वेगवेगळ्या परिस्थितीनुसार कोड ब्लॉक्स
-- **गणना करा** आणि मतदानासाठी पात्र होण्यासाठी किती वेळ लागेल हे प्रदर्शित करा जर वय 18 पेक्षा कमी असेल
-- **प्रदान करा** प्रत्येक परिस्थितीसाठी विशिष्ट, उपयुक्त अभिप्राय
+**या कोडने काय केले आहे:**
+- **तपासा** की वापरकर्त्याचे वय मतदानाच्या अटींना पूर्ण करते का
+- **वेगवेगळे कोड ब्लॉक्स चालवा** अटींच्या निकालावर आधारित
+- **गणना करा** आणि मतदानाच्या पात्रतेसाठी किती वेळ बाकी आहे ते प्रदर्शित करा (जर वय १८ पेक्षा कमी असेल)
+- **प्रत्येक परिस्थितीसाठी विशिष्ट, उपयुक्त अभिप्राय द्या**
```javascript
// Step 2: Multiple conditions with logical operators
@@ -256,11 +326,11 @@ if (userAge >= 18 && hasPermission) {
}
```
-**इथे काय घडते ते विश्लेषण करा:**
-- **संयोजन करा** अनेक अटी `&&` (आणि) ऑपरेटर वापरून
-- **निर्माण करा** अटींची श्रेणी `else if` वापरून अनेक परिस्थितींसाठी
-- **हँडल करा** सर्व शक्य परिस्थिती अंतिम `else` स्टेटमेंटसह
-- **प्रदान करा** प्रत्येक वेगळ्या परिस्थितीसाठी स्पष्ट, कृतीशील अभिप्राय
+**इथे काय घडते ते समजून घ्या:**
+- **अनेक अटी एकत्र करा** `&&` (आणि) ऑपरेटर वापरून
+- **अटींची श्रेणी तयार करा** `else if` वापरून अनेक परिस्थितींसाठी
+- **सर्व शक्य परिस्थिती हाताळा** अंतिम `else` स्टेटमेंटसह
+- **प्रत्येक वेगळ्या परिस्थितीसाठी स्पष्ट, कृतीक्षम अभिप्राय द्या**
```javascript
// Step 3: Concise conditional with ternary operator
@@ -269,9 +339,9 @@ console.log(`Status: ${votingStatus}`);
```
**तुम्हाला लक्षात ठेवायचे आहे:**
-- **वापरा** टर्नरी ऑपरेटर (`? :`) सोप्या दोन पर्यायांच्या अटींसाठी
-- **लिहा** अट प्रथम, त्यानंतर `?`, मग सत्य परिणाम, मग `:`, मग असत्य परिणाम
-- **अर्ज करा** हा पॅटर्न जेव्हा तुम्हाला अटींवर आधारित मूल्ये असाइन करायची असतात
+- **टर्नरी ऑपरेटर (`? :`) वापरा** सोप्या दोन-पर्याय अटींसाठी
+- **अटी प्रथम लिहा**, त्यानंतर `?`, मग सत्य परिणाम, मग `:`, मग असत्य परिणाम
+- **हा नमुना लागू करा** जेव्हा तुम्हाला अटींवर आधारित मूल्ये असाइन करायची असतात
```javascript
// Step 4: Handling multiple specific cases
@@ -295,97 +365,134 @@ switch (dayOfWeek) {
```
**हा कोड खालील गोष्टी साध्य करतो:**
-- **जुळवा** व्हेरिएबल मूल्य अनेक विशिष्ट प्रकरणांशी
-- **समूह करा** समान प्रकरणे एकत्र (आठवड्याचे दिवस विरुद्ध आठवड्याचे शेवटचे दिवस)
-- **अंमलात आणा** योग्य कोड ब्लॉक जेव्हा जुळणारे प्रकरण सापडते
-- **समाविष्ट करा** `default` प्रकरण अनपेक्षित मूल्ये हाताळण्यासाठी
-- **वापरा** `break` स्टेटमेंट्स पुढील प्रकरणाकडे जाण्यापासून कोड थांबवण्यासाठी
-
-> 💡 **वास्तविक जगातील उपमा**: कंट्रोल फ्लोला जगातील सर्वात संयमी GPS समजून घ्या जो तुम्हाला दिशा देतो. तो म्हणू शकतो "जर मेन स्ट्रीटवर ट्रॅफिक असेल तर हायवे घ्या. जर हायवेवर बांधकाम चालू असेल तर सुंदर मार्गाने जा." प्रोग्राम्स अगदी याच प्रकारच्या सशर्त लॉजिकचा वापर करून वेगवेगळ्या परिस्थितींना हुशारीने प्रतिसाद देतात आणि नेहमीच वापरकर्त्यांना सर्वोत्तम अनुभव देतात.
-
-✅ **पुढे काय येणार आहे**: आम्ही या संकल्पनांमध्ये अधिक खोलवर जाण्यासाठी एक अद्भुत प्रवास सुरू ठेवणार आहोत! सध्या, तुमच्यातील सर्व अद्भुत शक्यतांबद्दल उत्साही वाटण्यावर लक्ष केंद्रित करा. विशिष्ट कौशल्ये आणि तंत्रे नैसर्गिकरित्या सराव करताना तुमच्यासोबत राहतील – मी वचन देतो की हे अपेक्षेपेक्षा खूप मजेदार होणार आहे!
+- **व्हेरिएबल मूल्य अनेक विशिष्ट प्रकरणांशी जुळवा**
+- **समान प्रकरणे एकत्र करा** (सप्ताहाचे दिवस विरुद्ध शनिवार व रविवार)
+- **जुळणारे कोड ब्लॉक चालवा** जेव्हा जुळणारे मूल्य सापडते
+- **अप्रत्याशित मूल्ये हाताळण्यासाठी `default` केस समाविष्ट करा**
+- **`break` स्टेटमेंट्स वापरा** पुढील प्रकरणाकडे जाणे टाळण्यासाठी
+
+> 💡 **वास्तविक जीवनातील उपमा**: कंट्रोल फ्लोला जगातील सर्वात संयमी जीपीएससारखे समजा जे तुम्हाला दिशा देत आहे. ते म्हणू शकते "जर मेन स्ट्रीटवर ट्रॅफिक असेल तर हायवे घ्या. जर हायवेवर बांधकाम चालू असेल तर सुंदर मार्गाने जा." प्रोग्राम्स अचूकपणे याच प्रकारच्या सशर्त लॉजिकचा वापर करतात, वेगवेगळ्या परिस्थितींना हुशारीने प्रतिसाद देण्यासाठी आणि नेहमी वापरकर्त्यांना सर्वोत्तम अनुभव देण्यासाठी.
+
+### 🎯 **संकल्पना तपासणी: मूलभूत घटकांची पारंगतता**
+
+**चला पाहूया की तुम्ही मूलभूत गोष्टींमध्ये कसे आहात:**
+- तुम्ही तुमच्या स्वतःच्या शब्दांत व्हेरिएबल आणि स्टेटमेंटमधील फरक स्पष्ट करू शकता का?
+- तुम्ही if-then निर्णय वापरण्यासाठी वास्तविक जीवनातील परिस्थिती विचार करू शकता का (जसे की आमचे मतदानाचे उदाहरण)?
+- प्रोग्रामिंग लॉजिकबद्दल तुम्हाला आश्चर्य वाटलेली एक गोष्ट कोणती आहे?
+
+**जलद आत्मविश्वास वाढवणारा उपाय:**
+```mermaid
+flowchart LR
+ A["📝 Statements (Instructions)"] --> B["📦 Variables (Storage)"] --> C["🔀 Control Flow (Decisions)"] --> D["🎉 Working Program!"]
+
+ style A fill:#ffeb3b
+ style B fill:#4caf50
+ style C fill:#2196f3
+ style D fill:#ff4081
+```
+✅ **पुढे काय येत आहे**: आम्ही या संकल्पनांमध्ये अधिक खोलवर जाऊन एक अविश्वसनीय प्रवास सुरू ठेवणार आहोत! सध्या, फक्त तुमच्यातील उत्साहावर लक्ष केंद्रित करा आणि पुढे येणाऱ्या सर्व अद्भुत शक्यतांबद्दल विचार करा. विशिष्ट कौशल्ये आणि तंत्रे सराव करताना नैसर्गिकरित्या तुमच्या लक्षात राहतील – मी वचन देतो की हे अपेक्षेपेक्षा खूप मजेदार असेल!
## व्यापाराचे साधन
-ठीक आहे, हे खरोखरच रोमांचक आहे! 🚀 आपण अशा अविश्वसनीय साधनांबद्दल बोलणार आहोत जे तुम्हाला डिजिटल स्पेसशिपची चावी मिळाल्यासारखे वाटतील.
-
-तुम्हाला माहित आहे का की एखाद्या शेफकडे त्या परिपूर्ण संतुलित चाकू असतात जे त्यांच्या हाताचा विस्तार वाटतात? किंवा एखाद्या संगीतकाराकडे ती एक गिटार असते जी त्यांना स्पर्श करताच गाते? बरं, डेव्हलपर्सकडे आमच्या स्वतःच्या जादुई साधनांचा प्रकार आहे, आणि हे तुम्हाला पूर्णपणे आश्चर्यचकित करेल – त्यापैकी बहुतेक पूर्णपणे मोफत आहेत!
-
-मी तुम्हाला हे सांगण्यासाठी खूप उत्साही आहे कारण त्यांनी सॉफ्टवेअर तयार करण्याच्या पद्धती पूर्णपणे बदलल्या आहेत. आम्ही AI-संचालित कोडिंग सहाय्यकांबद्दल बोलत आहोत जे तुमचा कोड लिहिण्यास मदत करू शकतात (मी खोटे बोलत नाही!), क्लाउड वातावरण जिथे तुम्ही अक्षरशः कुठेही Wi-Fi सह संपूर्ण अनुप्रयोग तयार करू शकता, आणि डिबगिंग टूल्स इतके प्रगत आहेत की ते तुमच्या प्रोग्रामसाठी एक्स-रे व्हिजनसारखे आहेत.
-
-आणि अजूनही मला रोमांचित करणारा भाग म्हणजे: हे "नवशिक्या साधने" नाहीत जे तुम्ही पुढे जाल. हे Google, Netflix आणि तुमच्या आवडत्या इंडी अॅप स्टुडिओमधील डेव्हलपर्स सध्या वापरत असलेल्या व्यावसायिक-ग्रेड साधने आहेत. तुम्हाला त्यांचा वापर करताना खूप प्रोफेशनल वाटेल!
-
+ठीक आहे, आता मी खूप उत्साहित आहे, मी स्वतःला थांबवू शकत नाही! 🚀 आपण अशा अविश्वसनीय साधनांबद्दल बोलणार आहोत ज्यामुळे तुम्हाला डिजिटल स्पेसशिपची चावी मिळाल्यासारखे वाटेल.
+
+तुम्हाला माहित आहे का की शेफकडे त्या परिपूर्ण संतुलित सुरी असतात ज्या त्यांच्या हातांचा विस्तार वाटतात? किंवा संगीतकाराकडे ती एक गिटार असते जी ते स्पर्श करताच गाते? बरं, विकसकांकडे आमच्या स्वतःच्या जादुई साधनांचा एक प्रकार आहे, आणि येथे काय आहे जे तुमचे मन पूर्णपणे उडवून देईल – त्यापैकी बहुतेक पूर्णपणे मोफत आहेत!
+
+मी तुम्हाला हे सांगण्यासाठी खूप उत्सुक आहे कारण त्यांनी सॉफ्टवेअर कसे तयार करायचे यामध्ये पूर्णपणे क्रांती केली आहे. आम्ही AI-संचालित कोडिंग सहाय्यकांबद्दल बोलत आहोत जे तुमचा कोड लिहिण्यास मदत करू शकतात (मी खोटे बोलत नाही!), क्लाउड वातावरण जिथे तुम्ही अक्षरशः कुठूनही Wi-Fi सह संपूर्ण अनुप्रयोग तयार करू शकता, आणि डिबगिंग टूल्स इतके परिष्कृत आहेत की ते तुमच्या प्रोग्रामसाठी एक्स-रे व्हिजनसारखे आहेत.
+
+आणि येथे एक भाग आहे जो अजूनही मला रोमांचित करतो: हे "नवशिक्या साधने" नाहीत जे तुम्ही वापरणे थांबवाल. Google, Netflix, आणि तुम्हाला आवडणाऱ्या इंडी अॅप स्टुडिओमध्ये विकसक सध्या वापरत आहेत तीच व्यावसायिक-ग्रेड साधने आहेत. तुम्हाला ती वापरताना खूप प्रोफेशनल वाटेल!
+
+```mermaid
+graph TD
+ A["💡 Your Idea"] --> B["⌨️ Code Editor (VS Code)"]
+ B --> C["🌐 Browser DevTools (Testing & Debugging)"]
+ C --> D["⚡ Command Line (Automation & Tools)"]
+ D --> E["📚 Documentation (Learning & Reference)"]
+ E --> F["🚀 Amazing Web App!"]
+
+ B -.-> G["🤖 AI Assistant (GitHub Copilot)"]
+ C -.-> H["📱 Device Testing (Responsive Design)"]
+ D -.-> I["📦 Package Managers (npm, yarn)"]
+ E -.-> J["👥 Community (Stack Overflow)"]
+
+ style A fill:#fff59d
+ style F fill:#c8e6c9
+ style G fill:#e1f5fe
+ style H fill:#f3e5f5
+ style I fill:#ffccbc
+ style J fill:#e8eaf6
+```
### कोड एडिटर्स आणि IDEs: तुमचे नवीन डिजिटल मित्र
-चला कोड एडिटर्सबद्दल बोलूया – हे तुमचे नवीन आवडते ठिकाण बनणार आहेत! त्यांना तुमचे वैयक्तिक कोडिंग अभयारण्य समजा जिथे तुम्ही तुमच्या डिजिटल निर्मिती तयार करण्यासाठी आणि परिपूर्ण करण्यासाठी तुमचा जास्त वेळ घालवाल.
+चला कोड एडिटर्सबद्दल बोलूया – हे तुमचे नवीन आवडते ठिकाण बनणार आहेत! त्यांना तुमचे वैयक्तिक कोडिंग अभयारण्य समजा जिथे तुम्ही तुमची डिजिटल निर्मिती तयार करण्यात आणि परिपूर्ण करण्यात तुमचा जास्त वेळ घालवाल.
-पण आधुनिक एडिटर्सबद्दल जे जादुई आहे ते म्हणजे: ते फक्त फॅन्सी टेक्स्ट एडिटर्स नाहीत. ते जसे तुमच्यासोबत 24/7 बसलेले सर्वात हुशार, सहायक कोडिंग मार्गदर्शक आहेत. ते तुमच्या टायपोला तुम्हाला कळण्याआधीच पकडतात, सुधारणा सुचवतात ज्यामुळे तुम्हाला हुशार वाटते, तुम्हाला प्रत्येक कोडचा भाग काय करतो हे समजून घेण्यास मदत करतात, आणि त्यापैकी काही तुमचे विचार पूर्ण करण्यासाठी तुमच्या विचारांचे अंदाज लावू शकतात!
+पण आधुनिक एडिटर्सबद्दल जे खरोखर जादुई आहे ते म्हणजे ते फक्त फॅन्सी टेक्स्ट एडिटर्स नाहीत. ते तुमच्याबरोबर २४/७ बसलेले सर्वात हुशार, सहायक कोडिंग मार्गदर्शक असतात. ते तुमच्या टायपोला तुम्हाला कळण्याआधीच पकडतात, सुधारणा सुचवतात ज्या तुम्हाला हुशार वाटतात, तुम्हाला प्रत्येक कोडचा तुकडा काय करतो ते समजून घेण्यास मदत करतात, आणि त्यापैकी काही तुमच्या विचारांवर अंदाज लावू शकतात आणि तुमचे विचार पूर्ण करण्याची ऑफर देतात!
-मी प्रथम ऑटो-कम्प्लिशन शोधले तेव्हा मला अक्षरशः असे वाटले की मी भविष्यात राहत आहे. तुम्ही काहीतरी टाइप करायला सुरुवात करता, आणि तुमचा एडिटर म्हणतो, "अरे, तुम्हाला हवे असलेले कार्य विचारात होते का जे तुम्हाला हवे आहे तेच करते?" हे तुमच्या कोडिंग मित्रासारखे मन वाचणारे आहे!
+मी पहिल्यांदा ऑटो-कम्प्लिशन शोधले तेव्हा मला अक्षरशः भविष्यामध्ये जगत असल्यासारखे वाटले. तुम्ही काहीतरी टाइप करायला सुरुवात करता, आणि तुमचा एडिटर म्हणतो, "अरे, तुम्ही नेमके काय हवे आहे ते करणाऱ्या फंक्शनबद्दल विचार करत होता का?" हे तुमच्या कोडिंग मित्रासारखे मन वाचणारे आहे!
**हे एडिटर्स इतके अविश्वसनीय का आहेत?**
आधुनिक कोड एडिटर्स उत्पादकता वाढवण्यासाठी प्रभावी वैशिष्ट्यांची श्रेणी देतात:
| वैशिष्ट्य | काय करते | कसे मदत करते |
-|-----------|-----------|---------------|
+|---------|--------------|--------------|
| **सिंटॅक्स हायलाइटिंग** | तुमच्या कोडचे वेगवेगळे भाग रंगीत करते | कोड वाचणे सोपे करते आणि चुका शोधणे सोपे करते |
| **ऑटो-कम्प्लिशन** | टाइप करताना कोड सुचवते | कोडिंग वेगवान करते आणि टायपो कमी करते |
-| **डिबगिंग टूल्स** | तुम्हाला चुका शोधण्यात आणि दुरुस्त करण्यात मदत करते | तासांचा त्रास वाचवते |
+| **डिबगिंग टूल्स** | चुका शोधण्यात आणि दुरुस्त करण्यात मदत करते | तासभर त्रुटी शोधण्याचा वेळ वाचवते |
| **एक्सटेंशन्स** | विशेष वैशिष्ट्ये जोडा | कोणत्याही तंत्रज्ञानासाठी तुमचा एडिटर सानुकूलित करा |
| **AI सहाय्यक** | कोड आणि स्पष्टीकरण सुचवते | शिक्षण आणि उत्पादकता वेगवान करते |
-> 🎥 **व्हिडिओ संसाधन**: ही साधने क्रियेत पाहायची आहेत का? [Tools of the Trade video](https://youtube.com/watch?v=69WJeXGBdxg) येथे एक व्यापक विहंगावलोकन पहा.
+> 🎥 **व्हिडिओ संसाधन**: ही साधने कशी कार्य करतात ते पाहायचे आहे? [टूल्स ऑफ द ट्रेड व्हिडिओ](https://youtube.com/watch?v=69WJeXGBdxg) comprehensive overview साठी पहा.
#### वेब डेव्हलपमेंटसाठी शिफारस केलेले एडिटर्स
**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (फ्री)
-- वेब डेव्हलपर्समध्ये सर्वात लोकप्रिय
+- वेब डेव्हलपर्समध्ये सर्वाधिक लोकप्रिय
- उत्कृष्ट एक्सटेंशन इकोसिस्टम
-- अंगभूत टर्मिनल आणि Git इंटिग्रेशन
+- बिल्ट-इन टर्मिनल आणि Git इंटिग्रेशन
- **मस्ट-हॅव एक्सटेंशन्स**:
- - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - AI-संचालित कोड सुचवणे
+ - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - AI-संचालित कोड सुचवणारे
- [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - रिअल-टाइम सहयोग
- - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - स्वयंचलित कोड फॉरमॅटिंग
- - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - तुमच्या कोडमधील टायपो पकडा
+ - [Prettier](https://marketplace.visualstudio.com/items?itemName=es
+पहिल्यांदा मला कोणीतरी ब्राउझर DevTools दाखवले, तेव्हा मी तीन तास फक्त क्लिक करत बसलो आणि म्हणत होतो, "थांबा, हे सुद्धा करू शकते?!" तुम्ही प्रत्यक्षात कोणतीही वेबसाइट रिअल-टाइममध्ये संपादित करू शकता, प्रत्येक गोष्ट किती वेगाने लोड होते ते पाहू शकता, तुमची साइट वेगवेगळ्या डिव्हाइसवर कशी दिसते ते तपासू शकता आणि अगदी प्रोफेशनलप्रमाणे JavaScript डिबग करू शकता. हे पूर्णपणे आश्चर्यकारक आहे!
-**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (पेड, विद्यार्थ्यांसाठी मोफत)
-- प्रगत डिबगिंग आणि टेस्टिंग टूल्स
-- बुद्धिमान कोड कम्प्लिशन
-- अंगभूत व्हर्जन कंट्रोल
+**ब्राउझर का तुमचे गुप्त शस्त्र आहेत:**
-**क्लाउड-आधारित IDEs** (वेगवेगळ्या किंमती)
-- [GitHub Codespaces](https://github.com/features/codespaces) - तुमच्या ब्राउझरमध्ये पूर्ण VS Code
-- [Replit](https://replit.com/) - शिकण्यासाठी आणि कोड शेअर करण्यासाठी उत्तम
-- [StackBlitz](https://stackblitz.com/) - त्वरित, फुल-स्टॅक वेब डेव्हलपमेंट
+वेबसाइट किंवा वेब अॅप्लिकेशन तयार करताना, तुम्हाला ते वास्तविक जगात कसे दिसते आणि वागते ते पाहणे आवश्यक आहे. ब्राउझर तुमचे काम फक्त दाखवत नाहीत तर कार्यक्षमता, ऍक्सेसिबिलिटी आणि संभाव्य समस्यांबद्दल तपशीलवार फीडबॅक देखील देतात.
-> 💡 **सुरुवातीचा सल्ला**: Visual Studio Code सह सुरुवात करा – ते मोफत आहे, उद्योगात मोठ्या प्रमाणावर
-| **कन्सोल** | त्रुटी संदेश पहा आणि जावास्क्रिप्टची चाचणी करा | समस्या डिबग करा आणि कोडसह प्रयोग करा |
+#### ब्राउझर डेव्हलपर टूल्स (DevTools)
+
+आधुनिक ब्राउझरमध्ये व्यापक विकास साधनांचा समावेश आहे:
+
+| टूल श्रेणी | काय करते | उदाहरण वापर केस |
+|------------|-----------|------------------|
+| **एलिमेंट इन्स्पेक्टर** | HTML/CSS रिअल-टाइममध्ये पाहा आणि संपादित करा | स्टाइलिंग समायोजित करा आणि त्वरित परिणाम पहा |
+| **कन्सोल** | एरर मेसेजेस पाहा आणि JavaScript तपासा | समस्या डिबग करा आणि कोडवर प्रयोग करा |
| **नेटवर्क मॉनिटर** | संसाधने कशी लोड होतात ते ट्रॅक करा | कार्यक्षमता आणि लोडिंग वेळा ऑप्टिमाइझ करा |
| **ऍक्सेसिबिलिटी चेकर** | समावेशक डिझाइनसाठी चाचणी करा | तुमची साइट सर्व वापरकर्त्यांसाठी कार्य करते याची खात्री करा |
-| **डिव्हाइस सिम्युलेटर** | वेगवेगळ्या स्क्रीन आकारांवर प्रिव्ह्यू करा | अनेक उपकरणांशिवाय प्रतिसादात्मक डिझाइनची चाचणी करा |
+| **डिव्हाइस सिम्युलेटर** | वेगवेगळ्या स्क्रीन साइजवर प्रीव्ह्यू करा | अनेक डिव्हाइसशिवाय रिस्पॉन्सिव्ह डिझाइन तपासा |
#### विकासासाठी शिफारस केलेले ब्राउझर
- **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** - विस्तृत दस्तऐवजीकरणासह उद्योग-मानक DevTools
- **[Firefox](https://developer.mozilla.org/docs/Tools)** - उत्कृष्ट CSS ग्रिड आणि ऍक्सेसिबिलिटी टूल्स
-- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - क्रोमियमवर आधारित, मायक्रोसॉफ्टच्या विकासक संसाधनांसह
+- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - Chromium वर आधारित Microsoft चे डेव्हलपर संसाधने
-> ⚠️ **महत्त्वाची चाचणी टिप**: तुमच्या वेबसाइट्सची नेहमी अनेक ब्राउझरमध्ये चाचणी करा! जे Chrome मध्ये उत्तम प्रकारे कार्य करते ते Safari किंवा Firefox मध्ये वेगळे दिसू शकते. व्यावसायिक विकासक सर्व प्रमुख ब्राउझरमध्ये चाचणी घेतात जेणेकरून वापरकर्त्याचा अनुभव सुसंगत राहील.
+> ⚠️ **महत्त्वाची चाचणी टिप**: तुमच्या वेबसाइट्सची अनेक ब्राउझरमध्ये नेहमीच चाचणी करा! Chrome मध्ये उत्तम प्रकारे कार्य करणारे Safari किंवा Firefox मध्ये वेगळे दिसू शकते. व्यावसायिक डेव्हलपर्स सर्व प्रमुख ब्राउझरमध्ये चाचणी घेतात जेणेकरून वापरकर्त्यांचा अनुभव सुसंगत राहील.
-### कमांड लाइन टूल्स: विकासक सुपरपॉवर्ससाठी तुमचा प्रवेशद्वार
+### कमांड लाइन टूल्स: डेव्हलपर सुपरपॉवर्ससाठी तुमचा प्रवेशद्वार
-ठीक आहे, चला कमांड लाइनबद्दल प्रामाणिकपणे बोलूया, कारण मी तुम्हाला हे सांगू इच्छितो की हे ऐकणे खूप महत्त्वाचे आहे. जेव्हा मी प्रथम ते पाहिले – फक्त एक भयानक काळा स्क्रीन आणि ब्लिंकिंग टेक्स्ट – मला अक्षरशः वाटले, "नाही, अजिबात नाही! हे काहीतरी 1980 च्या हॅकर चित्रपटासारखे दिसते, आणि मी निश्चितपणे यासाठी पुरेसा हुशार नाही!" 😅
+ठीक आहे, कमांड लाइनबद्दल प्रामाणिकपणे बोलूया, कारण मी तुम्हाला हे सांगू इच्छितो की मी हे पूर्णपणे समजतो. जेव्हा मी प्रथम ते पाहिले – फक्त एक भयानक काळा स्क्रीन आणि ब्लिंकिंग टेक्स्ट – मी अक्षरशः विचार केला, "नाही, अजिबात नाही! हे 1980 च्या हॅकर चित्रपटासारखे दिसते, आणि मी यासाठी पुरेसा हुशार नाही!" 😅
-पण मला जेव्हा कोणी सांगितले असते तेव्हा मला सांगायचे होते, आणि मी तुम्हाला आत्ताच सांगत आहे: कमांड लाइन भीतीदायक नाही – प्रत्यक्षात तुमच्या संगणकाशी थेट संवाद साधण्यासारखे आहे. याचा विचार करा की अन्न ऑर्डर करण्यासाठी फॅन्सी अॅप वापरण्याचा (जे छान आणि सोपे आहे) आणि तुमच्या आवडत्या स्थानिक रेस्टॉरंटमध्ये चालत जाण्याचा फरक आहे जिथे शेफला नक्की माहित आहे की तुम्हाला काय आवडते आणि तुम्ही फक्त "काहीतरी अप्रतिम" म्हणता.
+पण मला तेव्हा कोणी सांगितले असते असे मला वाटते, आणि मी तुम्हाला आत्ता सांगत आहे: कमांड लाइन भीतीदायक नाही – प्रत्यक्षात तुमच्या संगणकाशी थेट संवाद साधण्यासारखे आहे. हे असे आहे की तुम्ही तुमच्या आवडत्या स्थानिक रेस्टॉरंटमध्ये जात आहात जिथे शेफला तुमच्या आवडीची अचूक माहिती आहे आणि तुम्ही फक्त "मला काहीतरी अप्रतिम सरप्राईज द्या" असे म्हणता तेव्हा तो काहीतरी परिपूर्ण बनवतो.
-कमांड लाइन ही जागा आहे जिथे विकासक जादूगारासारखे वाटण्यासाठी जातात. तुम्ही काही जादुई शब्द टाइप करता (ठीक आहे, ते फक्त कमांड आहेत, पण ते जादुई वाटतात!), एंटर दाबा, आणि BOOM – तुम्ही संपूर्ण प्रोजेक्ट स्ट्रक्चर तयार केले आहे, जगभरातील शक्तिशाली टूल्स स्थापित केले आहेत, किंवा तुमचे अॅप इंटरनेटवर तैनात केले आहे. लाखो लोक पाहण्यासाठी. तुम्हाला त्या शक्तीचा पहिला स्वाद मिळाल्यानंतर, ते खरोखरच व्यसनाधीन आहे!
+कमांड लाइन ही जागा आहे जिथे डेव्हलपर्स जादूगारासारखे वाटण्यासाठी जातात. तुम्ही काही जादूई शब्द टाइप करता (ठीक आहे, ते फक्त कमांड आहेत, पण ते जादूई वाटतात!), एंटर दाबा, आणि BOOM – तुम्ही संपूर्ण प्रोजेक्ट स्ट्रक्चर तयार केले आहे, जगभरातील शक्तिशाली टूल्स स्थापित केले आहेत, किंवा तुमचे अॅप इंटरनेटवर लाखो लोकांना पाहण्यासाठी तैनात केले आहे. तुम्हाला त्या शक्तीचा पहिला स्वाद मिळाल्यावर, ते खरोखरच व्यसनाधीन आहे!
-**कमांड लाइन तुमचे आवडते टूल का बनणार आहे:**
+**कमांड लाइन तुमचे आवडते टूल का बनेल:**
-ग्राफिकल इंटरफेस अनेक कार्यांसाठी उत्कृष्ट आहेत, परंतु कमांड लाइन ऑटोमेशन, अचूकता आणि वेगात उत्कृष्ट आहे. अनेक विकास साधने प्रामुख्याने कमांड लाइन इंटरफेसद्वारे कार्य करतात आणि त्यांचा कार्यक्षमतेने वापर करणे तुमची उत्पादकता लक्षणीयरीत्या सुधारू शकते.
+ग्राफिकल इंटरफेस अनेक कार्यांसाठी उत्कृष्ट आहेत, परंतु कमांड लाइन ऑटोमेशन, अचूकता आणि वेगात उत्कृष्ट आहे. अनेक विकास साधने प्रामुख्याने कमांड लाइन इंटरफेसद्वारे कार्य करतात आणि त्यांचा कार्यक्षमतेने वापर करणे शिकणे तुमची उत्पादकता लक्षणीयरीत्या सुधारू शकते.
```bash
# Step 1: Create and navigate to project directory
@@ -393,9 +500,9 @@ mkdir my-awesome-website
cd my-awesome-website
```
-**या कोडने काय केले आहे:**
-- **नवीन** "my-awesome-website" नावाची डिरेक्टरी तयार करा तुमच्या प्रोजेक्टसाठी
-- **नवीन तयार केलेल्या डिरेक्टरीमध्ये** जा काम सुरू करण्यासाठी
+**हा कोड काय करतो:**
+- **नवीन डिरेक्टरी तयार करा** "my-awesome-website" नावाची तुमच्या प्रोजेक्टसाठी
+- **नेव्हिगेट करा** नव्याने तयार केलेल्या डिरेक्टरीमध्ये काम सुरू करण्यासाठी
```bash
# Step 2: Initialize project with package.json
@@ -407,10 +514,10 @@ npm install --save-dev @eslint/js
```
**पायरी-पायरीने, येथे काय घडत आहे:**
-- **नवीन Node.js प्रोजेक्ट** डीफॉल्ट सेटिंगसह `npm init -y` वापरून प्रारंभ करा
-- **Vite स्थापित करा** आधुनिक बिल्ड टूल म्हणून जलद विकास आणि उत्पादन बिल्डसाठी
+- **नवीन Node.js प्रोजेक्ट सुरू करा** `npm init -y` वापरून डिफॉल्ट सेटिंगसह
+- **Vite इंस्टॉल करा** आधुनिक बिल्ड टूल म्हणून जलद विकास आणि उत्पादन बिल्डसाठी
- **Prettier जोडा** स्वयंचलित कोड फॉरमॅटिंगसाठी आणि ESLint कोड गुणवत्ता तपासण्यासाठी
-- **`--save-dev` फ्लॅग वापरा** हे विकास-फक्त अवलंबित्व म्हणून चिन्हांकित करण्यासाठी
+- **`--save-dev` फ्लॅग वापरा** हे विकास-फक्त डिपेंडन्सी म्हणून चिन्हांकित करण्यासाठी
```bash
# Step 3: Create project structure and files
@@ -422,19 +529,19 @@ npx vite
```
**वरीलमध्ये, आम्ही:**
-- **आमचा प्रोजेक्ट व्यवस्थित केला** स्त्रोत कोड आणि मालमत्तेसाठी स्वतंत्र फोल्डर तयार करून
-- **मूलभूत HTML फाइल तयार केली** योग्य दस्तऐवज संरचनेसह
+- **आमचा प्रोजेक्ट व्यवस्थित केला** स्रोत कोड आणि अॅसेट्ससाठी स्वतंत्र फोल्डर्स तयार करून
+- **मूलभूत HTML फाइल तयार केली** योग्य डॉक्युमेंट स्ट्रक्चरसह
- **Vite विकास सर्व्हर सुरू केला** लाइव्ह रीलोडिंग आणि हॉट मॉड्यूल रिप्लेसमेंटसाठी
#### वेब विकासासाठी आवश्यक कमांड लाइन टूल्स
-| टूल | उद्देश | तुम्हाला याची गरज का आहे |
-|------|---------|-----------------|
-| **[Git](https://git-scm.com/)** | आवृत्ती नियंत्रण | बदल ट्रॅक करा, इतरांसोबत सहयोग करा, तुमचे काम बॅकअप करा |
-| **[Node.js & npm](https://nodejs.org/)** | जावास्क्रिप्ट रनटाइम आणि पॅकेज व्यवस्थापन | ब्राउझरच्या बाहेर जावास्क्रिप्ट चालवा, आधुनिक विकास साधने स्थापित करा |
-| **[Vite](https://vitejs.dev/)** | बिल्ड टूल आणि डेव्ह सर्व्हर | हॉट मॉड्यूल रिप्लेसमेंटसह वेगवान विकास |
-| **[ESLint](https://eslint.org/)** | कोड गुणवत्ता | तुमच्या जावास्क्रिप्टमधील समस्या स्वयंचलितपणे शोधा आणि दुरुस्त करा |
-| **[Prettier](https://prettier.io/)** | कोड फॉरमॅटिंग | तुमचा कोड सातत्यपूर्ण स्वरूपात आणि वाचनीय ठेवा |
+| टूल | उद्देश | तुम्हाला का आवश्यक आहे |
+|-----|--------|-------------------------|
+| **[Git](https://git-scm.com/)** | व्हर्जन कंट्रोल | बदल ट्रॅक करा, इतरांसोबत सहयोग करा, तुमचे काम बॅकअप करा |
+| **[Node.js & npm](https://nodejs.org/)** | JavaScript रनटाइम आणि पॅकेज मॅनेजमेंट | ब्राउझरच्या बाहेर JavaScript चालवा, आधुनिक विकास साधने इंस्टॉल करा |
+| **[Vite](https://vitejs.dev/)** | बिल्ड टूल आणि डेव्ह सर्व्हर | हॉट मॉड्यूल रिप्लेसमेंटसह जलद विकास |
+| **[ESLint](https://eslint.org/)** | कोड गुणवत्ता | तुमच्या JavaScript मधील समस्या स्वयंचलितपणे शोधा आणि दुरुस्त करा |
+| **[Prettier](https://prettier.io/)** | कोड फॉरमॅटिंग | तुमचा कोड सातत्यपूर्णपणे फॉरमॅटेड आणि वाचनीय ठेवा |
#### प्लॅटफॉर्म-विशिष्ट पर्याय
@@ -451,27 +558,27 @@ npx vite
- **[Bash](https://www.gnu.org/software/bash/)** 💻 - मानक Linux शेल
- **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** - प्रगत टर्मिनल एम्युलेटर
-> 💻 = ऑपरेटिंग सिस्टमवर पूर्व-स्थापित
+> 💻 = ऑपरेटिंग सिस्टमवर प्री-इंस्टॉल केलेले
-> 🎯 **शिकण्याचा मार्ग**: `cd` (डिरेक्टरी बदला), `ls` किंवा `dir` (फाइल्सची यादी), आणि `mkdir` (फोल्डर तयार करा) यासारख्या मूलभूत कमांडसह प्रारंभ करा. आधुनिक वर्कफ्लो कमांडसह सराव करा जसे की `npm install`, `git status`, आणि `code .` (VS Code मध्ये वर्तमान डिरेक्टरी उघडते). तुम्ही अधिक आरामदायक झाल्यामुळे, तुम्ही अधिक प्रगत कमांड आणि ऑटोमेशन तंत्रे नैसर्गिकरित्या शिकाल.
+> 🎯 **शिकण्याचा मार्ग**: `cd` (डिरेक्टरी बदला), `ls` किंवा `dir` (फाइल्सची यादी), आणि `mkdir` (फोल्डर तयार करा) यासारख्या मूलभूत कमांड्ससह प्रारंभ करा. `npm install`, `git status`, आणि `code .` (VS Code मध्ये वर्तमान डिरेक्टरी उघडते) यासारख्या आधुनिक वर्कफ्लो कमांड्ससह सराव करा. तुम्ही अधिक आरामदायक झाल्यावर, तुम्ही नैसर्गिकरित्या अधिक प्रगत कमांड्स आणि ऑटोमेशन तंत्रे शिकाल.
### दस्तऐवजीकरण: तुमचा नेहमी उपलब्ध असलेला शिकवणारा मार्गदर्शक
-ठीक आहे, मी तुम्हाला एक छोटासा गुपित सांगतो ज्यामुळे तुम्हाला सुरुवातीला खूप चांगले वाटेल: अगदी अनुभवी विकासक त्यांच्या वेळेचा मोठा भाग दस्तऐवजीकरण वाचण्यात घालवतात. आणि ते असे नाही की त्यांना काय करायचे आहे ते माहित नाही – ते प्रत्यक्षात शहाणपणाचे लक्षण आहे!
+ठीक आहे, मी तुम्हाला एक छोटासा गुपित सांगतो ज्यामुळे तुम्हाला सुरुवातीला असलेल्या भीतीबद्दल खूप चांगले वाटेल: सर्वात अनुभवी डेव्हलपर्स त्यांचा मोठा वेळ दस्तऐवजीकरण वाचण्यात घालवतात. आणि ते असे नाही की त्यांना काय करायचे आहे ते माहित नाही – प्रत्यक्षात ते शहाणपणाचे लक्षण आहे!
-दस्तऐवजीकरणाचा विचार करा की तुम्हाला जगातील सर्वात संयमी, ज्ञानवान शिक्षकांपर्यंत प्रवेश आहे जे 24/7 उपलब्ध आहेत. रात्री 2 वाजता समस्येत अडकलात? दस्तऐवजीकरण तुमच्यासाठी गरम आभासी मिठी आणि तुम्हाला आवश्यक असलेले उत्तर देण्यासाठी आहे. काहीतरी नवीन वैशिष्ट्य शिकायचे आहे ज्याबद्दल सर्वजण बोलत आहेत? दस्तऐवजीकरण तुमच्या पाठीशी आहे चरण-दर-चरण उदाहरणांसह. काहीतरी का कार्य करते हे समजून घेण्याचा प्रयत्न करत आहात? तुम्ही अंदाज केला – दस्तऐवजीकरण ते स्पष्ट करण्यासाठी तयार आहे ज्यामुळे ते शेवटी क्लिक करते!
+दस्तऐवजीकरण म्हणजे जगातील सर्वात संयमी, ज्ञानवान शिक्षकांशी 24/7 प्रवेश असणे. रात्री 2 वाजता समस्येत अडकलात? दस्तऐवजीकरण तुमच्यासाठी आहे, गरज असलेले उत्तर देण्यासाठी. काही नवीन वैशिष्ट्य शिकायचे आहे का ज्याबद्दल प्रत्येकजण बोलत आहे? दस्तऐवजीकरण तुमच्या पाठीशी आहे, चरण-दर-चरण उदाहरणांसह. काहीतरी का कार्य करते ते समजून घेण्याचा प्रयत्न करत आहात? तुम्ही अंदाज लावला – दस्तऐवजीकरण ते स्पष्ट करण्यासाठी तयार आहे ज्यामुळे ते शेवटी क्लिक करते!
-**खऱ्या जादूचा अनुभव येथे आहे:**
+**खऱ्या जादूचा भाग येथे आहे:**
-व्यावसायिक विकासक त्यांच्या वेळेचा महत्त्वाचा भाग दस्तऐवजीकरण वाचण्यात घालवतात – कारण ते काय करायचे आहे ते माहित नाही म्हणून नाही, तर वेब विकास लँडस्केप इतक्या वेगाने विकसित होत आहे की अद्ययावत राहण्यासाठी सतत शिकणे आवश्यक आहे. उत्कृष्ट दस्तऐवजीकरण तुम्हाला काहीतरी कसे वापरायचे तेच समजून घेण्यास मदत करत नाही, तर ते का आणि कधी वापरायचे ते समजून घेण्यास मदत करते.
+व्यावसायिक डेव्हलपर्स त्यांचा मोठा वेळ दस्तऐवजीकरण वाचण्यात घालवतात – कारण त्यांना काय करायचे आहे ते माहित नाही म्हणून नाही, तर वेब विकासाचा परिसर इतक्या वेगाने विकसित होत आहे की अद्ययावत राहण्यासाठी सतत शिकणे आवश्यक आहे. उत्कृष्ट दस्तऐवजीकरण तुम्हाला काहीतरी कसे वापरायचे आहे हे समजून घेण्यास मदत करते, परंतु ते कधी आणि का वापरायचे आहे हे देखील समजून घेण्यास मदत करते.
#### आवश्यक दस्तऐवजीकरण संसाधने
**[Mozilla Developer Network (MDN)](https://developer.mozilla.org/docs/Web)**
- वेब तंत्रज्ञान दस्तऐवजीकरणासाठी सुवर्ण मानक
-- HTML, CSS, आणि जावास्क्रिप्टसाठी व्यापक मार्गदर्शिका
-- ब्राउझर सुसंगतता माहिती समाविष्ट करते
-- व्यावहारिक उदाहरणे आणि परस्पर डेमो वैशिष्ट्यीकृत
+- HTML, CSS, आणि JavaScript साठी व्यापक मार्गदर्शिका
+- ब्राउझर सुसंगततेची माहिती समाविष्ट करते
+- व्यावहारिक उदाहरणे आणि इंटरएक्टिव्ह डेमो वैशिष्ट्यीकृत
**[Web.dev](https://web.dev)** (Google द्वारे)
- आधुनिक वेब विकास सर्वोत्तम पद्धती
@@ -489,17 +596,35 @@ npx vite
- उद्योग तज्ञांकडून व्हिडिओ कोर्सेस
- हाताळण्यायोग्य कोडिंग सराव
-> 📚 **अभ्यास धोरण**: दस्तऐवजीकरण लक्षात ठेवण्याचा प्रयत्न करू नका – त्याऐवजी, ते कार्यक्षमतेने नेव्हिगेट कसे करायचे ते शिका. वारंवार वापरल्या जाणार्या संदर्भांचे बुकमार्क करा आणि विशिष्ट माहिती पटकन शोधण्यासाठी शोध कार्ये वापरण्याचा सराव करा.
+> 📚 **अभ्यास धोरण**: दस्तऐवजीकरण लक्षात ठेवण्याचा प्रयत्न करू नका – त्याऐवजी, ते कार्यक्षमतेने नेव्हिगेट करणे शिका. वारंवार वापरल्या जाणाऱ्या संदर्भांचे बुकमार्क करा आणि विशिष्ट माहिती पटकन शोधण्यासाठी शोध फंक्शन्स वापरण्याचा सराव करा.
+
+### 🔧 **टूल मास्टरी चेक: तुम्हाला काय आकर्षित करते?**
+
+**थोडा वेळ घ्या विचार करण्यासाठी:**
+- कोणते टूल तुम्हाला सर्वात आधी वापरून पाहण्याची उत्सुकता आहे? (यात चुकीचे उत्तर नाही!)
+- कमांड लाइन अजूनही भीतीदायक वाटते का, की तुम्हाला त्याबद्दल उत्सुकता आहे?
+- तुमच्या आवडत्या वेबसाइट्सच्या पडद्यामागे डोकावण्यासाठी ब्राउझर DevTools वापरण्याची कल्पना तुम्ही करू शकता का?
+
+```mermaid
+pie title "Developer Time Spent With Tools"
+ "Code Editor" : 40
+ "Browser Testing" : 25
+ "Command Line" : 15
+ "Reading Docs" : 15
+ "Debugging" : 5
+```
+
+> **मजेदार अंतर्दृष्टी**: बहुतेक डेव्हलपर्स त्यांचा सुमारे 40% वेळ त्यांच्या कोड एडिटरमध्ये घालवतात, परंतु लक्षात घ्या की चाचणी, शिकणे आणि समस्या सोडवण्यासाठी किती वेळ जातो. प्रोग्रामिंग फक्त कोड लिहिण्याबद्दल नाही – ते अनुभव तयार करण्याबद्दल आहे!
-✅ **विचार करण्यासाठी खाद्य**: येथे विचार करण्यासारखे काही मनोरंजक आहे – वेबसाइट्स तयार करण्यासाठी (विकास) साधने डिझाइन करण्यासाठी साधनांपेक्षा कशी वेगळी असू शकतात असे तुम्हाला वाटते? हे सुंदर घर डिझाइन करणाऱ्या आर्किटेक्ट आणि प्रत्यक्षात ते बांधणाऱ्या कंत्राटदारामधील फरकासारखे आहे. दोन्ही महत्त्वाचे आहेत, परंतु त्यांना वेगवेगळ्या टूलबॉक्सची आवश्यकता आहे! अशा प्रकारचा विचार तुम्हाला वेबसाइट्स कशा तयार होतात याचे मोठे चित्र पाहण्यास खरोखर मदत करेल.
+✅ **विचार करण्यासाठी खाद्य**: येथे काही मनोरंजक विचार करण्यासारखे आहे – वेबसाइट्स तयार करण्यासाठी (विकास) साधने डिझाइन करण्यासाठी (डिझाइन) साधनांपेक्षा वेगळी कशी असतील असे तुम्हाला वाटते? हे सुंदर घर डिझाइन करणाऱ्या आर्किटेक्ट आणि प्रत्यक्षात ते बांधणाऱ्या कंत्राटदारामधील फरकासारखे आहे. दोन्ही महत्त्वाचे आहेत, परंतु त्यांना वेगवेगळ्या टूलबॉक्सची आवश्यकता आहे! वेबसाइट्स कशा जिवंत होतात याचे मोठे चित्र पाहण्यासाठी ही प्रकारची विचारसरणी तुम्हाला खरोखर मदत करेल.
## GitHub Copilot Agent Challenge 🚀
Agent मोड वापरून खालील आव्हान पूर्ण करा:
-**वर्णन:** आधुनिक कोड संपादक किंवा IDE च्या वैशिष्ट्यांचा शोध घ्या आणि वेब विकासक म्हणून तुमच्या कार्यप्रवाहात ते कसे सुधारणा करू शकतात ते प्रदर्शित करा.
+**वर्णन:** आधुनिक कोड एडिटर किंवा IDE च्या वैशिष्ट्यांचा शोध घ्या आणि वेब डेव्हलपर म्हणून तुमच्या वर्कफ्लोमध्ये ते कसे सुधारणा करू शकतात ते दाखवा.
-**प्रॉम्प्ट:** Visual Studio Code, WebStorm किंवा क्लाउड-आधारित IDE यासारखा कोड संपादक किंवा IDE निवडा. तीन वैशिष्ट्ये किंवा विस्तारांची यादी करा जी तुम्हाला कोड लिहिणे, डिबग करणे किंवा अधिक कार्यक्षमतेने देखभाल करण्यात मदत करतात. प्रत्येकासाठी, ते तुमच्या कार्यप्रवाहाला कसे फायदेशीर ठरते याचे संक्षिप्त स्पष्टीकरण द्या.
+**प्रॉम्प्ट:** Visual Studio Code, WebStorm किंवा क्लाउड-आधारित IDE यासारखा कोड एडिटर किंवा IDE निवडा. तीन वैशिष्ट्ये किंवा एक्सटेंशन्स सूचीबद्ध करा जी तुम्हाला कोड लिहिणे, डिबग करणे किंवा अधिक कार्यक्षमतेने देखभाल करण्यात मदत करतात. प्रत्येकासाठी, ते तुमच्या वर्कफ्लोला कसे फायदेशीर ठरते याचे संक्षिप्त स्पष्टीकरण द्या.
---
@@ -507,51 +632,108 @@ Agent मोड वापरून खालील आव्हान पूर
**ठीक आहे, डिटेक्टिव्ह, तुमच्या पहिल्या केससाठी तयार आहात का?**
-आता तुमच्याकडे हा अप्रतिम पाया आहे, माझ्याकडे एक साहस आहे जे तुम्हाला प्रोग्रामिंग जग किती विविध आणि आकर्षक आहे हे पाहण्यास मदत करेल. आणि ऐका – हे अजून कोड लिहिण्याबद्दल नाही, त्यामुळे त्याबद्दल कोणताही दबाव नाही! स्वतःला प्रोग्रामिंग भाषा डिटेक्टिव्ह समजा तुमच्या पहिल्या रोमांचक केसवर!
+आता तुमच्याकडे हा अप्रतिम पाया आहे, माझ्याकडे एक साहस आहे जे तुम्हाला प्रोग्रामिंग जग किती विविध आणि आकर्षक आहे हे पाहण्यास मदत करेल. आणि ऐका – हे अजून कोड लिहिण्याबद्दल नाही, त्यामुळे त्याबद्दल कोणताही दबाव नाही! तुम्ही तुमच्या पहिल्या रोमांचक केसवर असलेल्या प्रोग्रामिंग भाषा डिटेक्टिव्हसारखे विचार करा!
**तुमचे मिशन, तुम्ही स्वीकारण्याचा निर्णय घेतल्यास:**
-1. **भाषा एक्सप्लोरर बना**: पूर्णपणे वेगळ्या विश्वातील तीन प्रोग्रामिंग भाषा निवडा – कदाचित एक जी वेबसाइट्स तयार करते, एक जी मोबाइल अॅप्स तयार करते आणि एक जी वैज्ञानिकांसाठी डेटा क्रंच करते. प्रत्येक भाषेत लिहिलेल्या समान सोप्या कार्याचे उदाहरण शोधा. मी वचन देतो की ते एकाच गोष्टीसाठी किती वेगळे दिसू शकते हे पाहून तुम्ही नक्कीच आश्चर्यचकित व्हाल!
-
-2. **त्यांच्या उत्पत्तीच्या कथा शोधा**: प्रत्येक भाषा विशेष का आहे? येथे एक छान तथ्य आहे – प्रत्येक प्रोग्रामिंग भाषा तयार केली गेली कारण कोणीतरी विचार केला, "तुम्हाला माहित आहे काय? हा विशिष्ट समस्या सोडवण्यासाठी चांगला मार्ग असला पाहिजे." तुम्ही त्या समस्या काय होत्या हे शोधू शकता का? या कथांपैकी काही खरोखरच आकर्षक आहेत!
-
-3. **समुदायांना भेटा**: प्रत्येक भाषेचा समुदाय किती स्वागतार्ह आणि उत्कट आहे ते तपासा. काहींमध्ये लाखो विकासक आहेत जे ज्ञान सामायिक करतात आणि एकमेकांना मदत करतात, इतर लहान आहेत पण अविश्वसनीयपणे घट्ट आणि सहायक आहेत. तुम्हाला या समुदायांचे वेगवेगळे व्यक्तिमत्त्व पाहून आनंद होईल!
+1. **भाषा एक्सप्लोरर बना**: पूर्णपणे वेगळ्या विश्वातील तीन प्रोग्रामिंग भाषा निवडा – कदाचित एक जी वेबसाइट्स तयार करते, एक जी मोबाइल अॅप्स तयार करते, आणि एक जी वैज्ञानिकांसाठी डेटा क्रंच करते. प्रत्येक भाषेत लिहिलेल्या समान सोप्या कार्याचे उदाहरण शोधा. मी वचन देतो की ते एकाच गोष्टीसाठी किती वेगळे दिसू शकते हे पाहून तुम्ही पूर्णपणे आश्चर्यचकित व्हाल!
-4. **तुमच्या अंतःकरणाचा आवाज ऐका**: सध्या तुम्हाला कोणती भाषा सर्वात सोपी वाटते? "परिपूर्ण" निवड करण्याबद्दल तणाव करू नका – फक्त तुमच्या अंतःकरणाचा आवाज ऐका! येथे खरोखरच चुकीचा उत्तर नाही, आणि तुम्ही नंतर इतरांचा शोध घेऊ शकता.
+2. **त्यांची उत्पत्ती कथा शोधा**: प्रत्येक भाषा विशेष का आहे? येथे एक छान तथ्य आहे – प्रत्येक प्रोग्रामिंग भाषा तयार केली गेली कारण कोणीतरी विचार केला, "तुम्हाला माहित आहे काय? हे विशिष्ट समस्या सोडवण्यासाठी चांगला मार्ग असला पाहिजे." तुम्ही त्या समस्यांचे काय होते ते शोधू शकता का? या कथांपैकी काही खरोखरच आकर्षक आहेत!
-**अतिरिक्त डिटेक्टिव्ह काम**: प्रत्येक भाषेत कोणती प्रमुख वेबसाइट्स किंवा अॅप्स तयार केली जातात ते शोधण्याचा प्रयत्न करा. Instagram, Netflix किंवा तुम्ही खेळत असलेल्या मोबाइल गेमला काय शक्ती देते हे जाणून घेऊन तुम्हाला नक्कीच धक्का बसेल!
+3. **समुदायांना भेटा**: प्रत्येक भाषेचा समुदाय किती स्वागतार्ह आणि उत्साही आहे ते पहा. काहींमध्ये लाखो डेव्हलपर्स आहेत जे ज्ञान सामायिक करतात आणि एकमेकांना मदत करतात, तर काही लहान आहेत पण अविश्वसनीयपणे घट्ट विणलेले आणि सहायक आहेत. तुम्हाला या समुदायांचे वेगवेगळे व्यक्त
+## पुनरावलोकन आणि स्व-अभ्यास
-> 💡 **लक्षात ठेवा**: तुम्ही आज या भाषांपैकी कोणत्याही भाषेत तज्ञ होण्याचा प्रयत्न करत नाही. तुम्ही दुकान उघडण्याचा निर्णय घेण्यापूर्वी फक्त परिसर ओळखत आहात. तुमचा वेळ घ्या, त्याचा आनंद घ्या आणि तुमची जिज्ञासा तुम्हाला मार्गदर्शन करू द्या!
+**वेळ घ्या, शोधा आणि मजा करा!**
-## तुम्ही शोधलेल्या गोष्टींचा उत्सव साजरा करूया!
+आज तुम्ही खूप काही शिकलेत, आणि त्याचा अभिमान बाळगा! आता मजेदार भाग सुरू होतो – ज्या विषयांनी तुमची उत्सुकता वाढवली त्यांचा शोध घ्या. लक्षात ठेवा, हे गृहपाठ नाही – ही एक साहस आहे!
-अरे देवा, तुम्ही आज खूपच अप्रतिम माहिती आत्मसात केली आहे! मी खरोखरच उत्सुक आहे की या अद्भुत प्रवासाचा किती भाग तुमच्यासोबत राहिला आहे. आणि लक्षात ठेवा – हे असे परीक्षण नाही जिथे तुम्हाला सर्वकाही परिपूर्ण मिळवणे आवश्यक आहे. हे तुम्ही वेब विकासाच्या या आकर्षक जगाबद्दल शिकलेल्या सर्व छान गोष्टींचा उत्सव साजरा करण्यासारखे आहे!
+**तुमच्या आवडीच्या गोष्टींमध्ये खोलवर जा:**
-[पाठ-नंतरचा क्विझ घ्या](https://ff-quizzes.netlify.app/web/)
+**प्रोग्रामिंग भाषांमध्ये हाताळणी करा:**
+- तुमच्या लक्षात आलेल्या 2-3 भाषांच्या अधिकृत वेबसाइट्सला भेट द्या. प्रत्येकाची स्वतःची शैली आणि कथा आहे!
+- [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/), किंवा [Replit](https://replit.com/) सारख्या ऑनलाइन कोडिंग प्लेग्राउंडवर प्रयत्न करा. प्रयोग करण्यास घाबरू नका – तुम्ही काहीही बिघडवू शकत नाही!
+- तुमच्या आवडत्या भाषेची निर्मिती कशी झाली याबद्दल वाचा. खरंच, काही कथा खूपच रोचक आहेत आणि त्या तुम्हाला भाषांचा कार्यप्रणाली समजून घेण्यास मदत करतील.
-## पुनरावलोकन आणि स्व-अभ्यास
+**तुमच्या नवीन साधनांशी परिचित व्हा:**
+- Visual Studio Code डाउनलोड करा जर तुम्ही अजून केले नसेल – ते मोफत आहे आणि तुम्हाला नक्कीच आवडेल!
+- Extensions मार्केटप्लेसमध्ये काही मिनिटे ब्राउझ करा. हे तुमच्या कोड एडिटरसाठी अॅप स्टोअर सारखे आहे!
+- तुमच्या ब्राउझरचे Developer Tools उघडा आणि फक्त क्लिक करा. सर्वकाही समजून घेण्याची चिंता करू नका – फक्त काय आहे ते ओळखून घ्या.
-**तुमचा वेळ घ्या, एक्सप्लोर करा आणि त्याचा आनंद घ्या!**
+**समुदायात सामील व्हा:**
+- [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/), किंवा [GitHub](https://github.com/) वर काही डेव्हलपर समुदायांचे अनुसरण करा. प्रोग्रामिंग समुदाय नवशिक्यांसाठी खूप स्वागतार्ह आहे!
+- YouTube वर काही नवशिक्यांसाठी उपयुक्त कोडिंग व्हिडिओ पहा. खूप चांगले निर्माते आहेत जे सुरुवातीला कसे वाटते हे लक्षात ठेवतात.
+- स्थानिक मीटअप्स किंवा ऑनलाइन समुदायांमध्ये सामील होण्याचा विचार करा. विश्वास ठेवा, डेव्हलपर्स नवशिक्यांना मदत करायला खूप आवडतात!
-तुम्ही आज खूप काही कव्हर केले आहे, आणि त्याचा अभिमान बाळगण्यासारखे काहीतरी आहे! आता मजेदार भाग येतो – तुम्हाला उत्सुकता निर्माण करणाऱ्या विषयांचा शोध घेणे. लक्षात ठेवा, हे गृहपाठ नाही – हे एक साहस आहे!
+> 🎯 **ऐका, मला तुम्हाला हे लक्षात ठेवायला सांगायचं आहे**: तुम्हाला एका रात्रीत कोडिंग मास्टर बनण्याची अपेक्षा नाही! सध्या, तुम्ही फक्त या अद्भुत नवीन जगाशी परिचित होत आहात ज्याचा तुम्ही भाग होणार आहात. वेळ घ्या, प्रवासाचा आनंद घ्या, आणि लक्षात ठेवा – तुम्ही ज्या प्रत्येक डेव्हलपरचे कौतुक करता ते एकदा तुमच्यासारखेच होते, उत्साही आणि कदाचित थोडेसे गोंधळलेले. हे पूर्णपणे सामान्य आहे, आणि याचा अर्थ तुम्ही योग्य दिशेने जात आहात.
-**तुम्हाला उत्साहित करणाऱ्या गोष्टींमध्ये खोलवर जा:**
-**प्रोग्रामिंग भाषांसह हाताळणी करा:**
-- तुमच्या लक्षात आलेल्या 2-3 भाषांच्या अधिकृत वेबसाइट्सला भेट द्या. प्रत्येक
-- YouTube वर काही सुरुवातीच्या स्तरावरील कोडिंग व्हिडिओ पाहा. खूप चांगले निर्माते आहेत जे सुरुवातीला कसे वाटते हे लक्षात ठेवतात.
-- स्थानिक मीटअप्स किंवा ऑनलाइन समुदायांमध्ये सामील होण्याचा विचार करा. माझ्यावर विश्वास ठेवा, डेव्हलपर्स नवशिक्यांना मदत करायला खूप आवडतात!
-> 🎯 **ऐका, हे लक्षात ठेवा**: तुम्हाला एका रात्रीत कोडिंगचा जादूगार बनण्याची अपेक्षा नाही! सध्या, तुम्ही फक्त या अद्भुत नवीन जगाशी परिचित होत आहात ज्याचा तुम्ही लवकरच भाग होणार आहात. तुमचा वेळ घ्या, प्रवासाचा आनंद घ्या, आणि लक्षात ठेवा – तुम्ही ज्या प्रत्येक डेव्हलपरचे कौतुक करता ते एकदा तुमच्यासारखेच होते, उत्साही आणि कदाचित थोडेसे गोंधळलेले. हे पूर्णपणे सामान्य आहे, आणि याचा अर्थ तुम्ही योग्य दिशेने जात आहात!
+## असाइनमेंट
+[डॉक्स वाचा](assignment.md)
+> 💡 **तुमच्या असाइनमेंटसाठी एक छोटीशी प्रेरणा**: मला खूप आवडेल की तुम्ही काही नवीन साधनांचा शोध घ्यावा ज्यांचा आपण अद्याप उल्लेख केला नाही! आपण आधीच चर्चा केलेल्या एडिटर्स, ब्राउझर्स आणि कमांड लाइन टूल्स वगळा – विकासाच्या अद्भुत साधनांचे एक संपूर्ण विश्व आहे जे शोधण्याची वाट पाहत आहे. सक्रियपणे देखभाल केली जाणारी आणि जिवंत, उपयुक्त समुदाय असलेली साधने शोधा (यामध्ये सर्वोत्तम ट्यूटोरियल्स आणि सर्वात सहायक लोक असतात जेव्हा तुम्हाला अडचण येते आणि मदतीसाठी एखाद्या मैत्रीपूर्ण व्यक्तीची गरज असते).
-## असाइनमेंट
+---
-[डॉक्स वाचा](assignment.md)
+## 🚀 तुमचा प्रोग्रामिंग प्रवासाचा टाइमलाइन
+
+### ⚡ **पुढील 5 मिनिटांत तुम्ही काय करू शकता**
+- [ ] तुमच्या लक्षात आलेल्या 2-3 प्रोग्रामिंग भाषांच्या वेबसाइट्स बुकमार्क करा
+- [ ] Visual Studio Code डाउनलोड करा जर तुम्ही अजून केले नसेल
+- [ ] तुमच्या ब्राउझरचे DevTools (F12) उघडा आणि कोणत्याही वेबसाइटवर क्लिक करा
+- [ ] एक प्रोग्रामिंग समुदायात सामील व्हा (Dev.to, Reddit r/webdev, किंवा Stack Overflow)
+
+### ⏰ **तुमच्या एका तासात तुम्ही काय साध्य करू शकता**
+- [ ] पोस्ट-लेसन क्विझ पूर्ण करा आणि तुमच्या उत्तरांवर विचार करा
+- [ ] GitHub Copilot एक्सटेंशनसह VS Code सेट करा
+- [ ] दोन वेगवेगळ्या प्रोग्रामिंग भाषांमध्ये ऑनलाइन "Hello World" उदाहरण प्रयत्न करा
+- [ ] YouTube वर "डे इन द लाइफ ऑफ अ डेव्हलपर" व्हिडिओ पहा
+- [ ] तुमच्या प्रोग्रामिंग भाषेच्या शोधकार्याची सुरुवात करा (चॅलेंजमधून)
+
+### 📅 **तुमचा आठवडाभराचा प्रवास**
+- [ ] असाइनमेंट पूर्ण करा आणि 3 नवीन विकास साधनांचा शोध घ्या
+- [ ] सोशल मीडियावर 5 डेव्हलपर्स किंवा प्रोग्रामिंग अकाउंट्सचे अनुसरण करा
+- [ ] CodePen किंवा Replit वर काही छोटेसे तयार करण्याचा प्रयत्न करा (जरी "Hello, [तुमचे नाव]!" असेल तरी!)
+- [ ] एखाद्या डेव्हलपरच्या कोडिंग प्रवासाबद्दल एक ब्लॉग पोस्ट वाचा
+- [ ] व्हर्च्युअल मीटअपमध्ये सामील व्हा किंवा प्रोग्रामिंग टॉक पहा
+- [ ] तुमच्या निवडलेल्या भाषेचे ऑनलाइन ट्यूटोरियल्ससह शिकण्यास सुरुवात करा
+
+### 🗓️ **तुमचा महिनाभराचा परिवर्तन**
+- [ ] तुमचा पहिला छोटा प्रोजेक्ट तयार करा (जरी एक साधा वेबपेज असला तरी!)
+- [ ] ओपन-सोर्स प्रोजेक्टमध्ये योगदान द्या (डॉक्युमेंटेशन सुधारण्यापासून सुरुवात करा)
+- [ ] एखाद्याला मार्गदर्शन करा जो फक्त त्याचा प्रोग्रामिंग प्रवास सुरू करत आहे
+- [ ] तुमची डेव्हलपर पोर्टफोलिओ वेबसाइट तयार करा
+- [ ] स्थानिक डेव्हलपर समुदाय किंवा अभ्यास गटांशी संपर्क साधा
+- [ ] तुमच्या पुढील शिकण्याच्या टप्प्याचे नियोजन सुरू करा
+
+### 🎯 **अंतिम विचार तपासणी**
+
+**पुढे जाण्यापूर्वी, एक क्षण साजरा करा:**
+- आज प्रोग्रामिंगबद्दल तुम्हाला काय उत्साहित वाटले?
+- कोणते साधन किंवा संकल्पना तुम्ही प्रथम शोधू इच्छिता?
+- तुम्हाला हा प्रोग्रामिंग प्रवास सुरू करण्याबद्दल कसे वाटते?
+- तुम्ही सध्या एखाद्या डेव्हलपरला कोणता प्रश्न विचारू इच्छिता?
+
+```mermaid
+journey
+ title Your Confidence Building Journey
+ section Today
+ Curious: 3: You
+ Overwhelmed: 4: You
+ Excited: 5: You
+ section This Week
+ Exploring: 4: You
+ Learning: 5: You
+ Connecting: 4: You
+ section Next Month
+ Building: 5: You
+ Confident: 5: You
+ Helping Others: 5: You
+```
-> 💡 **तुमच्या असाइनमेंटसाठी एक छोटासा इशारा**: मला खूप आवडेल की तुम्ही काही अशा टूल्सचा शोध घ्यावा ज्यांचा आपण अद्याप कव्हर केलेला नाही! आपण आधीच चर्चा केलेल्या एडिटर्स, ब्राउझर्स आणि कमांड लाइन टूल्स वगळा – विकासासाठी अद्भुत टूल्सचे एक संपूर्ण अविश्व आहे जे शोधण्याची वाट पाहत आहे. अशा टूल्स शोधा जे सक्रियपणे देखभाल केली जातात आणि ज्यांचे समुदाय जिवंत आणि मदत करणारे आहेत (अशा टूल्सकडे उत्तम ट्युटोरियल्स आणि सहायक लोक असतात जेव्हा तुम्हाला अडचण येते आणि तुम्हाला मदतीची गरज असते).
+> 🌟 **लक्षात ठेवा**: प्रत्येक तज्ञ एकदा नवशिक्या होता. प्रत्येक वरिष्ठ डेव्हलपरने एकदा तुमच्यासारखेच वाटले – उत्साही, कदाचित थोडेसे गोंधळलेले, आणि काय शक्य आहे याबद्दल नक्कीच उत्सुक. तुम्ही अद्भुत कंपनीत आहात, आणि हा प्रवास अविश्वसनीय होणार आहे. प्रोग्रामिंगच्या अद्भुत जगात तुमचे स्वागत आहे! 🎉
---
**अस्वीकरण**:
-हा दस्तऐवज AI भाषांतर सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी, कृपयास लक्षात ठेवा की स्वयंचलित भाषांतरे त्रुटी किंवा अचूकतेच्या अभावाने युक्त असू शकतात. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून उद्भवलेल्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.
\ No newline at end of file
+हा दस्तऐवज AI भाषांतर सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी, कृपयास लक्षात ठेवा की स्वयंचलित भाषांतरे त्रुटी किंवा अचूकतेच्या अभावाने युक्त असू शकतात. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी, व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून उद्भवलेल्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार नाही.
\ No newline at end of file
diff --git a/translations/mr/1-getting-started-lessons/2-github-basics/README.md b/translations/mr/1-getting-started-lessons/2-github-basics/README.md
index 983a7fe1ac..748b403385 100644
--- a/translations/mr/1-getting-started-lessons/2-github-basics/README.md
+++ b/translations/mr/1-getting-started-lessons/2-github-basics/README.md
@@ -1,50 +1,67 @@
# GitHub परिचय
-नमस्कार, भविष्यातील विकसक! 👋 जगभरातील लाखो कोडर्समध्ये सामील होण्यासाठी तयार आहात का? तुम्हाला GitHub ची ओळख करून देताना मला खूप आनंद होत आहे – हे प्रोग्रामर्ससाठी सोशल मीडिया प्लॅटफॉर्मसारखे आहे, फक्त येथे तुम्ही तुमच्या लंचचे फोटो शेअर करण्याऐवजी कोड शेअर करता आणि एकत्रितपणे अप्रतिम गोष्टी तयार करता!
+नमस्कार, भविष्यातील विकसक! 👋 जगभरातील लाखो कोडर्समध्ये सामील होण्यासाठी तयार आहात का? तुम्हाला GitHub ची ओळख करून देताना मला खूप आनंद होत आहे – हे प्रोग्रामर्ससाठी सोशल मीडिया प्लॅटफॉर्मसारखे आहे, फक्त इथे तुम्ही तुमच्या जेवणाचे फोटो शेअर करण्याऐवजी कोड शेअर करता आणि एकत्रितपणे अप्रतिम गोष्टी तयार करता!
-माझ्या मनाला खरोखरच आश्चर्य वाटते: तुमच्या फोनवरील प्रत्येक अॅप, तुम्ही भेट दिलेली प्रत्येक वेबसाइट आणि तुम्ही वापरण्यास शिकाल अशी बहुतेक साधने GitHub सारख्या प्लॅटफॉर्मवर सहकार्य करणाऱ्या विकसकांच्या टीमद्वारे तयार केली गेली आहेत. तुम्हाला आवडणारे संगीत अॅप? तुमच्यासारख्या कोणीतरी त्यात योगदान दिले आहे. तुम्ही खेळत असलेला गेम? होय, कदाचित GitHub सहकार्याने तयार केलेला. आणि आता तुम्ही त्या अद्भुत समुदायाचा भाग होण्याचे शिकणार आहात!
+मला जे खरोखर आश्चर्यचकित करते ते म्हणजे: तुमच्या फोनवरील प्रत्येक अॅप, तुम्ही भेट देणारी प्रत्येक वेबसाइट आणि तुम्ही वापरण्यास शिकणारी बहुतेक साधने GitHub सारख्या प्लॅटफॉर्मवर सहकार्य करणाऱ्या विकसकांच्या टीमद्वारे तयार केली गेली आहेत. तुम्हाला आवडणारे संगीत अॅप? तुमच्यासारख्या कोणीतरी त्यात योगदान दिले आहे. तुम्ही खेळत असलेला गेम? होय, कदाचित GitHub सहकार्याने तयार केलेला. आणि आता तुम्ही त्या अद्भुत समुदायाचा भाग बनण्यास शिकणार आहात!
-मला माहित आहे की सुरुवातीला हे थोडे जास्त वाटू शकते – मी माझ्या पहिल्या GitHub पेजकडे पाहत होतो आणि "याचा अर्थ काय आहे?" असे विचार करत होतो. पण गोष्ट अशी आहे: प्रत्येक विकसक नेमके तिथून सुरुवात करतो जिथे तुम्ही आत्ता आहात. या धड्याच्या शेवटी, तुमच्याकडे तुमचे स्वतःचे GitHub रिपॉझिटरी असेल (ते क्लाउडमधील तुमच्या वैयक्तिक प्रकल्पाचे प्रदर्शन आहे) आणि तुम्हाला तुमचे काम कसे जतन करायचे, इतरांसोबत कसे शेअर करायचे आणि लाखो लोक वापरत असलेल्या प्रकल्पांमध्ये कसे योगदान द्यायचे हे माहित असेल.
+मला माहित आहे की सुरुवातीला हे थोडेसे जास्त वाटू शकते – मी माझ्या पहिल्या GitHub पेजकडे पाहत असताना "हे सगळं काय आहे?" असे विचार करत होतो. पण गोष्ट अशी आहे: प्रत्येक विकसक नेमके तिथून सुरुवात करतो जिथे तुम्ही आत्ता आहात. या धड्याच्या शेवटी, तुमच्याकडे तुमचे स्वतःचे GitHub रिपॉझिटरी असेल (ते म्हणजे क्लाउडमधील तुमच्या वैयक्तिक प्रोजेक्टचे प्रदर्शन), आणि तुम्हाला तुमचे काम कसे जतन करायचे, इतरांसोबत कसे शेअर करायचे आणि लाखो लोक वापरत असलेल्या प्रोजेक्ट्समध्ये कसे योगदान द्यायचे हे माहित असेल.
-आपण एकत्रितपणे हा प्रवास करू, एक पाऊल एकावेळी. घाई नाही, दबाव नाही – फक्त तुम्ही, मी आणि काही खरोखरच छान साधने जी तुमचे नवीन सर्वोत्तम मित्र बनणार आहेत!
+आपण हा प्रवास एकत्रितपणे, एक पाऊल एकावेळी घेणार आहोत. घाई नाही, दबाव नाही – फक्त तुम्ही, मी आणि काही खूप छान साधने जी तुमचे नवीन मित्र बनणार आहेत!

-> स्केच नोट [Tomomi Imura](https://twitter.com/girlie_mac) द्वारे
+> स्केच नोट [Tomomi Imura](https://twitter.com/girlie_mac) यांच्याकडून
+
+```mermaid
+journey
+ title Your GitHub Adventure Today
+ section Setup
+ Install Git: 4: You
+ Create Account: 5: You
+ First Repository: 5: You
+ section Master Git
+ Local Changes: 4: You
+ Commits & Pushes: 5: You
+ Branching: 4: You
+ section Collaborate
+ Fork Projects: 4: You
+ Pull Requests: 5: You
+ Open Source: 5: You
+```
-## पूर्व-व्याख्यान प्रश्नमंजुषा
-[पूर्व-व्याख्यान प्रश्नमंजुषा](https://ff-quizzes.netlify.app)
+## प्री-लेक्चर क्विझ
+[प्री-लेक्चर क्विझ](https://ff-quizzes.netlify.app)
## परिचय
-आम्ही खरोखर रोमांचक गोष्टींमध्ये डुबकी मारण्यापूर्वी, तुमचा संगणक काही GitHub जादूसाठी तयार करूया! याला तुम्ही तुमची कलाकृती तयार करण्यापूर्वी तुमचे कला साहित्य व्यवस्थित करण्यासारखे समजा – योग्य साधने तयार असल्याने सर्व काही अधिक गुळगुळीत आणि खूप मजेदार होते.
+आम्ही खरोखर रोमांचक गोष्टींमध्ये जाण्यापूर्वी, तुमचा संगणक GitHub च्या जादूसाठी तयार करूया! हे तुमच्या कलात्मक साहित्याचे आयोजन करण्यासारखे आहे – एक उत्कृष्ट कलाकृती तयार करण्यापूर्वी योग्य साधने तयार असणे सर्व काही अधिक गुळगुळीत आणि खूप मजेदार बनवते.
-मी तुम्हाला प्रत्येक सेटअप चरण वैयक्तिकरित्या मार्गदर्शन करणार आहे आणि मी वचन देतो की ते पहिल्या दृष्टीक्षेपात जितके भयावह दिसते तितके नाही. काहीतरी लगेच क्लिक होत नसेल तर ते पूर्णपणे सामान्य आहे! मी माझे पहिले विकास वातावरण सेट करत होतो आणि प्राचीन हायड्रोग्लिफ्स वाचण्याचा प्रयत्न करत असल्यासारखे वाटत होते. प्रत्येक विकसक नेमके तिथेच होता जिथे तुम्ही आत्ता आहात, विचार करत आहे की ते योग्य करत आहेत का. स्पॉयलर अलर्ट: तुम्ही शिकत असाल तर तुम्ही आधीच योग्य करत आहात! 🌟
+मी तुम्हाला प्रत्येक सेटअप चरण वैयक्तिकरित्या मार्गदर्शन करणार आहे, आणि मी वचन देतो की ते पहिल्या दृष्टीक्षेपात जितके भयावह दिसते तितके नाही. काहीतरी लगेच क्लिक होत नसेल तर, ते पूर्णपणे सामान्य आहे! मी माझे पहिले विकास वातावरण सेट करत होतो आणि असे वाटले की मी प्राचीन लिपी वाचण्याचा प्रयत्न करत आहे. प्रत्येक विकसक नेमके तिथेच होता जिथे तुम्ही आत्ता आहात, विचार करत की ते योग्य करत आहेत का. स्पॉयलर अलर्ट: जर तुम्ही शिकत असाल तर तुम्ही आधीच योग्य करत आहात! 🌟
या धड्यात, आपण कव्हर करू:
-- तुमच्या मशीनवर केलेले काम ट्रॅक करणे
-- इतरांसोबत प्रकल्पांवर काम करणे
+- तुमच्या मशीनवर केलेल्या कामाचा मागोवा घेणे
+- इतरांसोबत प्रोजेक्ट्सवर काम करणे
- ओपन सोर्स सॉफ्टवेअरमध्ये योगदान कसे द्यावे
### पूर्वतयारी
-तुमचा संगणक काही GitHub जादूसाठी तयार करूया! काळजी करू नका – हा सेटअप तुम्हाला फक्त एकदाच करावा लागेल आणि मग तुम्ही तुमच्या संपूर्ण कोडिंग प्रवासासाठी तयार व्हाल.
+तुमचा संगणक GitHub च्या जादूसाठी तयार करूया! काळजी करू नका – हा सेटअप तुम्हाला फक्त एकदाच करावा लागेल, आणि मग तुम्ही तुमच्या संपूर्ण कोडिंग प्रवासासाठी तयार असाल.
-ठीक आहे, आपण पाया सुरू करूया! प्रथम, आपल्याला तपासावे लागेल की Git आधीच तुमच्या संगणकावर आहे का. Git मूलत: एक सुपर-स्मार्ट सहाय्यक असण्यासारखे आहे जो तुम्ही तुमच्या कोडमध्ये केलेले प्रत्येक बदल लक्षात ठेवतो – दर दोन सेकंदांनी Ctrl+S दाबण्यापेक्षा चांगले (आपण सर्व तिथे होतो!).
+ठीक आहे, आपण पाया सुरू करूया! प्रथम, आपल्याला तपासावे लागेल की Git आधीच तुमच्या संगणकावर आहे का. Git मूलत: एक सुपर-स्मार्ट सहाय्यक असण्यासारखे आहे जो तुम्ही तुमच्या कोडमध्ये केलेला प्रत्येक बदल लक्षात ठेवतो – दर दोन सेकंदांनी Ctrl+S दाबण्यापेक्षा खूप चांगले (आपण सर्व तिथे होतो!).
-Git आधीच स्थापित आहे का ते पाहण्यासाठी तुमच्या टर्मिनलमध्ये हा जादुई आदेश टाइप करा:
+तुमच्या टर्मिनलमध्ये हा जादुई आदेश टाइप करून पाहूया की Git आधीच स्थापित आहे का:
`git --version`
-जर Git अद्याप तिथे नसेल, तर चिंता करू नका! फक्त [Git डाउनलोड करा](https://git-scm.com/downloads) वर जा आणि ते मिळवा. एकदा तुम्ही ते स्थापित केले की, आपल्याला Git ची योग्य ओळख करून द्यावी लागेल:
+जर Git अजून तिथे नसेल, तर काळजी करू नका! फक्त [Git डाउनलोड करा](https://git-scm.com/downloads) आणि ते मिळवा. एकदा तुम्ही ते स्थापित केले की, आम्हाला Git ला योग्य प्रकारे तुमची ओळख करून द्यावी लागेल:
> 💡 **पहिल्यांदा सेटअप**: हे आदेश Git ला सांगतात की तुम्ही कोण आहात. ही माहिती तुम्ही केलेल्या प्रत्येक कमिटशी जोडली जाईल, त्यामुळे तुम्ही सार्वजनिकपणे शेअर करण्यास आरामदायक असलेले नाव आणि ईमेल निवडा.
@@ -62,30 +79,30 @@ git config --list
[github.com](https://github.com/) वर जा आणि खाते तयार करा जर तुम्ही आधीच केले नसेल, किंवा लॉग इन करा आणि तुमची प्रोफाइल भरा.
-💡 **आधुनिक टिप**: [SSH कीज](https://docs.github.com/en/authentication/connecting-to-github-with-ssh) सेटअप करण्याचा विचार करा किंवा पासवर्डशिवाय सोप्या प्रमाणीकरणासाठी [GitHub CLI](https://cli.github.com/) वापरा.
+💡 **आधुनिक टिप**: [SSH keys](https://docs.github.com/en/authentication/connecting-to-github-with-ssh) सेट अप करण्याचा विचार करा किंवा पासवर्डशिवाय सोप्या प्रमाणीकरणासाठी [GitHub CLI](https://cli.github.com/) वापरा.
✅ GitHub हा जगातील एकमेव कोड रिपॉझिटरी नाही; इतरही आहेत, पण GitHub सर्वात प्रसिद्ध आहे.
### तयारी
-तुमच्या स्थानिक मशीन (लॅपटॉप किंवा पीसी) वर कोड प्रोजेक्टसह एक फोल्डर आणि GitHub वर एक सार्वजनिक रिपॉझिटरी आवश्यक आहे, जे इतरांच्या प्रकल्पांमध्ये योगदान कसे द्यावे याचे उदाहरण म्हणून काम करेल.
+तुमच्याकडे तुमच्या स्थानिक मशीनवर (लॅपटॉप किंवा पीसी) कोड प्रोजेक्टसह एक फोल्डर आणि GitHub वर एक सार्वजनिक रिपॉझिटरी असणे आवश्यक आहे, जे इतरांच्या प्रोजेक्ट्समध्ये योगदान कसे द्यावे याचे उदाहरण म्हणून काम करेल.
### तुमचा कोड सुरक्षित ठेवणे
-चला थोड्या वेळासाठी सुरक्षा बद्दल बोलूया – पण काळजी करू नका, आम्ही तुम्हाला भितीदायक गोष्टींनी गोंधळात टाकणार नाही! या सुरक्षा पद्धती तुमची कार किंवा तुमचे घर लॉक करण्यासारख्या आहेत. ते सोपे सवयी आहेत ज्या दुसऱ्या स्वभाव बनतात आणि तुमचे कठोर परिश्रम सुरक्षित ठेवतात.
+चला थोड्या वेळासाठी सुरक्षा बद्दल बोलूया – पण काळजी करू नका, आम्ही तुम्हाला घाबरवणाऱ्या गोष्टींनी भरून टाकणार नाही! या सुरक्षा पद्धती तुमची कार किंवा तुमचे घर लॉक करण्यासारख्या आहेत. ते सोपे सवयी आहेत ज्या दुसऱ्या स्वभावासारख्या बनतात आणि तुमचे कठोर परिश्रम सुरक्षित ठेवतात.
-आम्ही तुम्हाला सुरुवातीपासून GitHub सह काम करण्याचे आधुनिक, सुरक्षित मार्ग दाखवू. अशा प्रकारे, तुम्ही चांगल्या सवयी विकसित कराल ज्या तुमच्या कोडिंग करिअरमध्ये तुम्हाला चांगल्या प्रकारे सेवा देतील.
+आम्ही तुम्हाला सुरुवातीपासूनच GitHub सह काम करण्याचे आधुनिक, सुरक्षित मार्ग दाखवू. अशा प्रकारे, तुम्ही चांगल्या सवयी विकसित कराल ज्या तुमच्या कोडिंग करिअरमध्ये तुम्हाला चांगल्या प्रकारे सेवा देतील.
GitHub सह काम करताना, सुरक्षा सर्वोत्तम पद्धतींचे पालन करणे महत्त्वाचे आहे:
| सुरक्षा क्षेत्र | सर्वोत्तम पद्धत | का महत्त्वाचे आहे |
-|------------------|------------------|--------------------|
-| **प्रमाणीकरण** | SSH कीज किंवा वैयक्तिक प्रवेश टोकन वापरा | पासवर्ड कमी सुरक्षित आहेत आणि टप्प्याटप्प्याने बंद केले जात आहेत |
-| **दोन-घटक प्रमाणीकरण** | तुमच्या GitHub खात्यावर 2FA सक्षम करा | खात्याचे अतिरिक्त संरक्षण जोडते |
-| **रिपॉझिटरी सुरक्षा** | संवेदनशील माहिती कधीही कमिट करू नका | API कीज आणि पासवर्ड सार्वजनिक रिपॉझिटरीमध्ये कधीही असू नयेत |
-| **डिपेंडेंसी व्यवस्थापन** | Dependabot अद्यतनांसाठी सक्षम करा | तुमच्या डिपेंडेंसी सुरक्षित आणि अद्ययावत ठेवते |
+|-----------------|-----------------|--------------------|
+| **प्रमाणीकरण** | SSH keys किंवा Personal Access Tokens वापरा | पासवर्ड कमी सुरक्षित आहेत आणि त्यांना हळूहळू बंद केले जात आहे |
+| **दोन-घटक प्रमाणीकरण** | तुमच्या GitHub खात्यावर 2FA सक्षम करा | खात्याच्या संरक्षणासाठी अतिरिक्त स्तर जोडते |
+| **रिपॉझिटरी सुरक्षा** | संवेदनशील माहिती कधीही कमिट करू नका | API keys आणि पासवर्ड सार्वजनिक रिपॉझिटरीमध्ये कधीही असू नयेत |
+| **डिपेंडेंसी व्यवस्थापन** | Dependabot अपडेट्ससाठी सक्षम करा | तुमच्या डिपेंडेंसी सुरक्षित आणि अद्ययावत ठेवते |
-> ⚠️ **महत्त्वाची सुरक्षा आठवण**: API कीज, पासवर्ड किंवा इतर संवेदनशील माहिती कोणत्याही रिपॉझिटरीमध्ये कधीही कमिट करू नका. संवेदनशील डेटा संरक्षित करण्यासाठी पर्यावरणीय व्हेरिएबल्स आणि `.gitignore` फाइल्स वापरा.
+> ⚠️ **महत्त्वाची सुरक्षा आठवण**: API keys, पासवर्ड किंवा इतर संवेदनशील माहिती कोणत्याही रिपॉझिटरीमध्ये कधीही कमिट करू नका. संवेदनशील डेटा संरक्षित करण्यासाठी environment variables आणि `.gitignore` फाइल्स वापरा.
**आधुनिक प्रमाणीकरण सेटअप:**
@@ -97,27 +114,51 @@ ssh-keygen -t ed25519 -C "your_email@example.com"
git remote set-url origin git@github.com:username/repository.git
```
-> 💡 **प्रो टिप**: SSH कीज वारंवार पासवर्ड टाइप करण्याची गरज दूर करतात आणि पारंपरिक प्रमाणीकरण पद्धतींपेक्षा अधिक सुरक्षित आहेत.
+> 💡 **प्रो टिप**: SSH keys पासवर्ड वारंवार टाइप करण्याची गरज दूर करतात आणि पारंपरिक प्रमाणीकरण पद्धतींपेक्षा अधिक सुरक्षित असतात.
---
## तुमचा कोड प्रोप्रमाणे व्यवस्थापित करा
-ठीक आहे, आता गोष्टी खरोखरच रोमांचक होतात! 🎉 आपण तुमचा कोड प्रोप्रमाणे ट्रॅक आणि व्यवस्थापित कसा करायचा ते शिकणार आहोत आणि प्रामाणिकपणे, हे शिकवणे माझ्या आवडत्या गोष्टींपैकी एक आहे कारण हे खूप गेम-चेंजर आहे.
-
-कल्पना करा: तुम्ही एक अद्भुत कथा लिहित आहात आणि तुम्हाला प्रत्येक मसुदा, प्रत्येक उत्कृष्ट संपादन आणि प्रत्येक "थांबा, ते विलक्षण आहे!" क्षण ट्रॅक करायचा आहे. Git तुमच्या कोडसाठी नेमके तेच करते! हे सर्वकाही लक्षात ठेवणारे सर्वात अविश्वसनीय टाइम-ट्रॅव्हलिंग नोटबुक असण्यासारखे आहे – प्रत्येक कीस्ट्रोक, प्रत्येक बदल, प्रत्येक "अरे, ते सर्व काही तोडले" क्षण जो तुम्ही त्वरित पूर्ववत करू शकता.
-
-मी प्रामाणिकपणे सांगतो – सुरुवातीला हे थोडे जास्त वाटू शकते. जेव्हा मी सुरुवात केली तेव्हा मला वाटले "मी माझ्या फाइल्स सामान्यपणे का जतन करू शकत नाही?" पण यावर माझा विश्वास ठेवा: एकदा Git तुमच्यासाठी क्लिक केल्यावर (आणि ते होईल!), तुम्हाला एक प्रकाशाचा क्षण येईल जिथे तुम्ही विचार कराल "मी कधीही याशिवाय कोड कसा लिहिला?" हे असे आहे जसे तुम्हाला उडता येते हे शोधणे जेव्हा तुम्ही तुमच्या आयुष्यात सर्वत्र चालत असता!
-
-समजा तुमच्याकडे स्थानिक स्तरावर काही कोड प्रोजेक्टसह एक फोल्डर आहे आणि तुम्हाला git - व्हर्जन कंट्रोल सिस्टम वापरून तुमची प्रगती ट्रॅक करायची आहे. काही लोक git वापरण्याची तुलना तुमच्या भविष्यातील स्वतःसाठी प्रेम पत्र लिहिण्याशी करतात. तुमच्या कमिट संदेशांना काही दिवस, आठवडे किंवा महिने नंतर वाचताना तुम्हाला आठवेल की तुम्ही निर्णय का घेतला, किंवा "रोलबॅक" बदल – म्हणजे, जेव्हा तुम्ही चांगले "कमिट संदेश" लिहिता.
+ठीक आहे, आता गोष्टी खरोखर रोमांचक होणार आहेत! 🎉 आम्ही तुमचा कोड प्रोप्रमाणे ट्रॅक आणि व्यवस्थापित कसा करायचा ते शिकणार आहोत, आणि प्रामाणिकपणे सांगायचे तर, हे शिकवणे माझ्या आवडत्या गोष्टींपैकी एक आहे कारण हे खूप गेम-चेंजर आहे.
+
+कल्पना करा: तुम्ही एक अद्भुत कथा लिहित आहात, आणि तुम्हाला प्रत्येक ड्राफ्ट, प्रत्येक उत्कृष्ट संपादन आणि प्रत्येक "थांबा, हे तर अप्रतिम आहे!" क्षणाचा मागोवा ठेवायचा आहे. Git तुमच्या कोडसाठी नेमके हेच करते! हे सर्व काही लक्षात ठेवणारे सर्वात अविश्वसनीय टाइम-ट्रॅव्हलिंग नोटबुक असण्यासारखे आहे – प्रत्येक कीस्ट्रोक, प्रत्येक बदल, प्रत्येक "अरे, हे सगळं बिघडलं" क्षण जो तुम्ही त्वरित पूर्ववत करू शकता.
+
+मी प्रामाणिकपणे सांगतो – सुरुवातीला हे थोडेसे जास्त वाटू शकते. जेव्हा मी सुरुवात केली, तेव्हा मला वाटले "मी फक्त माझ्या फाइल्स सामान्यपणे का जतन करू शकत नाही?" पण यावर माझा विश्वास ठेवा: एकदा Git तुम्हाला समजला (आणि तो समजेल!), तुम्हाला एक प्रकाशाचा क्षण येईल जिथे तुम्ही विचार कराल "मी कधीही याशिवाय कोड कसा लिहिला?" हे असे आहे जसे तुम्ही उडू शकता हे शोधणे जेव्हा तुम्ही तुमच्या आयुष्यभर चालत होता!
+
+समजा तुमच्याकडे स्थानिक स्तरावर काही कोड प्रोजेक्टसह एक फोल्डर आहे आणि तुम्हाला git - व्हर्जन कंट्रोल सिस्टम वापरून तुमच्या प्रगतीचा मागोवा सुरू करायचा आहे. काही लोक git वापरण्याची तुलना तुमच्या भविष्यातील स्वतःसाठी प्रेमपत्र लिहिण्याशी करतात. तुमचे कमिट संदेश दिवस, आठवडे किंवा महिने नंतर वाचताना तुम्हाला आठवेल की तुम्ही निर्णय का घेतला, किंवा बदल "रोलबॅक" करा - म्हणजे, जेव्हा तुम्ही चांगले "कमिट संदेश" लिहिता.
+
+```mermaid
+flowchart TD
+ A[📁 Your Project Files] --> B{Is it a Git Repository?}
+ B -->|No| C[git init]
+ B -->|Yes| D[Make Changes]
+ C --> D
+ D --> E[git add .]
+ E --> F["git commit -m 'message'"]
+ F --> G[git push]
+ G --> H[🌟 Code on GitHub!]
+
+ H --> I{Want to collaborate?}
+ I -->|Yes| J[Fork & Clone]
+ I -->|No| D
+ J --> K[Create Branch]
+ K --> L[Make Changes]
+ L --> M[Pull Request]
+ M --> N[🎉 Contributing!]
+
+ style A fill:#fff59d
+ style H fill:#c8e6c9
+ style N fill:#ff4081,color:#fff
+```
### कार्य: तुमचे पहिले रिपॉझिटरी तयार करा!
-> 🎯 **तुमचे मिशन (आणि मला तुमच्यासाठी खूप उत्साह आहे!)**: आपण एकत्रितपणे तुमचे पहिले GitHub रिपॉझिटरी तयार करणार आहोत! येथे आपण संपविल्यानंतर, तुमच्या कोडचे जिथे वास्तव्य आहे ते तुमच्या इंटरनेटचा स्वतःचा छोटासा कोपरा असेल आणि तुम्ही तुमचे पहिले "कमिट" केले असेल (ते विकसक भाषेत तुमचे काम खूप स्मार्ट पद्धतीने जतन करण्यासाठी आहे).
+> 🎯 **तुमचे मिशन (आणि मला तुमच्यासाठी खूप उत्साह आहे!)**: आपण एकत्रितपणे तुमचे पहिले GitHub रिपॉझिटरी तयार करणार आहोत! येथे आपले काम पूर्ण झाल्यावर, तुमच्याकडे तुमच्या कोडसाठी इंटरनेटवर तुमचा स्वतःचा कोपरा असेल, आणि तुम्ही तुमचा पहिला "कमिट" केला असेल (ते म्हणजे तुमचे काम खूप स्मार्ट पद्धतीने जतन करणे).
>
-> हे प्रामाणिकपणे खूप खास क्षण आहे – तुम्ही विकसकांच्या जागतिक समुदायात अधिकृतपणे सामील होणार आहात! मी माझे पहिले रिपॉझिटरी तयार करण्याचा थरार अजूनही लक्षात ठेवतो आणि विचार केला "वा, मी खरोखरच हे करत आहे!"
+> हे खरोखर एक विशेष क्षण आहे – तुम्ही विकसकांच्या जागतिक समुदायात अधिकृतपणे सामील होणार आहात! माझे पहिले रिपॉझिटरी तयार करण्याचा थरार मला अजूनही आठवतो आणि विचार केला "वा, मी खरोखर हे करत आहे!"
-चला एकत्रितपणे हे साहस पार करूया, चरण-दर-चरण. प्रत्येक भागासाठी तुमचा वेळ घ्या – घाई करण्यासाठी कोणतेही बक्षीस नाही आणि मी वचन देतो की प्रत्येक चरण अर्थपूर्ण होईल. लक्षात ठेवा, तुम्ही प्रशंसा करत असलेला प्रत्येक कोडिंग सुपरस्टार एकदा नेमके तिथे बसला होता जिथे तुम्ही आहात, त्यांचे पहिले रिपॉझिटरी तयार करण्याच्या तयारीत. किती छान आहे ना?
+चला हे साहस एकत्रितपणे, चरण-दर-चरण पार करूया. प्रत्येक भागासाठी तुमचा वेळ घ्या – घाई करण्यासाठी कोणतेही बक्षीस नाही, आणि मी वचन देतो की प्रत्येक चरण अर्थपूर्ण होईल. लक्षात ठेवा, तुम्ही प्रशंसा करत असलेला प्रत्येक कोडिंग सुपरस्टार एकदा नेमके तिथे बसला होता जिथे तुम्ही आहात, त्यांचे पहिले रिपॉझिटरी तयार करण्याच्या तयारीत. किती छान आहे ना?
> व्हिडिओ पहा
>
@@ -125,25 +166,25 @@ git remote set-url origin git@github.com:username/repository.git
**चला हे एकत्र करूया:**
-1. **GitHub वर तुमचे रिपॉझिटरी तयार करा**. GitHub.com वर जा आणि तो चमकदार हिरवा **नवीन** बटन (किंवा वरच्या उजव्या कोपऱ्यातील **+** चिन्ह) शोधा. त्यावर क्लिक करा आणि **नवीन रिपॉझिटरी** निवडा.
+1. **GitHub वर तुमचे रिपॉझिटरी तयार करा**. GitHub.com वर जा आणि तो तेजस्वी हिरवा **नवीन** बटण (किंवा वरच्या उजव्या कोपऱ्यातील **+** चिन्ह) शोधा. त्यावर क्लिक करा आणि **नवीन रिपॉझिटरी** निवडा.
- येथे काय करायचे आहे:
- 1. तुमच्या रिपॉझिटरीला नाव द्या – ते तुमच्यासाठी अर्थपूर्ण ठेवा!
- 1. तुम्हाला हवे असल्यास वर्णन जोडा (यामुळे इतरांना तुमचा प्रकल्प काय आहे हे समजण्यास मदत होते)
- 1. तुम्हाला ते सार्वजनिक (सर्वांना दिसेल) किंवा खाजगी (फक्त तुमच्यासाठी) हवे आहे का ते ठरवा
- 1. README फाइल जोडण्यासाठी बॉक्स तपासण्याची शिफारस करतो – हे तुमच्या प्रोजेक्टचे फ्रंट पेज आहे
- 1. **रिपॉझिटरी तयार करा** वर क्लिक करा आणि साजरा करा – तुम्ही तुमचे पहिले रिपॉझिटरी तयार केले आहे! 🎉
+ येथे काय करायचे:
+ 1. तुमच्या रिपॉझिटरीला नाव द्या – ते तुमच्यासाठी अर्थपूर्ण असले पाहिजे!
+ 1. तुम्हाला हवे असल्यास वर्णन जोडा (यामुळे इतरांना तुमचा प्रोजेक्ट कशाबद्दल आहे हे समजण्यास मदत होते)
+ 1. तुम्हाला ते सार्वजनिक (सर्वांना दिसणारे) किंवा खाजगी (फक्त तुमच्यासाठी) हवे आहे का ते ठरवा
+ 1. README फाइल जोडण्यासाठी बॉक्स तपासण्याची मी शिफारस करतो – ते तुमच्या प्रोजेक्टचे फ्रंट पेज आहे
+ 1. **रिपॉझिटरी तयार करा** वर क्लिक करा आणि साजरा करा – तुम्ही तुमचे पहिले रिपॉझिटरी तयार केले! 🎉
-2. **तुमच्या प्रोजेक्ट फोल्डरवर जा**. आता तुमचे टर्मिनल उघडूया (काळजी करू नका, ते दिसते तितके भयानक नाही!). आपल्याला आपल्या संगणकाला सांगावे लागेल की आपले प्रोजेक्ट फाइल्स कुठे आहेत. हा आदेश टाइप करा:
+2. **तुमच्या प्रोजेक्ट फोल्डरकडे जा**. आता तुमचे टर्मिनल उघडूया (काळजी करू नका, ते दिसते तितके भयानक नाही!). आपल्याला आपल्या संगणकाला सांगावे लागेल की आपले प्रोजेक्ट फाइल्स कुठे आहेत. हा आदेश टाइप करा:
```bash
cd [name of your folder]
```
**आम्ही येथे काय करत आहोत:**
- - आम्ही मूलत: म्हणत आहोत "अरे संगणका, मला माझ्या प्रोजेक्ट फोल्डरकडे घेऊन जा"
- - हे तुमच्या डेस्कटॉपवरील विशिष्ट फोल्डर उघडण्यासारखे आहे, परंतु आम्ही ते मजकूर आदेशांसह करत आहोत
- - `[तुमच्या फोल्डरचे नाव]` वास्तविक प्रोजेक्ट फोल्डरच्या नावाने बदला
+ - आम्ही मूलत: सांगत आहोत "अरे संगणका, मला माझ्या प्रोजेक्ट फोल्डरमध्ये घेऊन जा"
+ - हे तुमच्या डेस्कटॉपवर विशिष्ट फोल्डर उघडण्यासारखे आहे, पण आम्ही ते मजकूर आदेशांसह करत आहोत
+ - `[name of your folder]` च्या जागी तुमच्या प्रोजेक्ट फोल्डरचे वास्तविक नाव बदला
3. **तुमच्या फोल्डरला Git रिपॉझिटरीमध्ये बदला**. येथे जादू घडते! टाइप करा:
@@ -151,12 +192,12 @@ git remote set-url origin git@github.com:username/repository.git
git init
```
- **आम्ही काय केले (खूप छान गोष्ट!):**
- - Git ने तुमच्या प्रोजेक्टमध्ये एक लपलेला `.git` फोल्डर तयार केला – तुम्हाला तो दिसणार नाही, पण तो तिथे आहे!
+ **येथे काय घडले (खूप छान गोष्टी!):**
+ - Git ने तुमच्या प्रोजेक्टमध्ये एक लपलेला `.git` फोल्डर तयार केला – तुम्हाला ते दिसणार नाही, पण ते तिथे आहे!
- तुमचा नियमित फोल्डर आता एक "रिपॉझिटरी" आहे जो तुम्ही केलेला प्रत्येक बदल ट्रॅक करू शकतो
- - हे तुमच्या फोल्डरला सर्वकाही लक्षात ठेवण्यासाठी सुपरपॉवर देण्यासारखे आहे
+ - हे तुमच्या फोल्डरला सर्व काही लक्षात ठेवण्यासाठी सुपरपॉवर देण्यासारखे आहे
-4. **काय चालले आहे ते तपासा**. चला पाहूया की Git सध्या तुमच्या प्रोजेक्टबद्दल काय विचार करतो:
+4. **काय चालले आहे ते तपासा**. चला पाहूया की Git सध्या तुमच्या प्रोजेक्टबद्दल काय विचार करत आहे:
```bash
git status
@@ -164,7 +205,7 @@ git remote set-url origin git@github.com:username/repository.git
**Git तुम्हाला काय सांगत आहे ते समजून घेणे:**
- तुम्हाला असे काही दिसू शकते:
+ तुम्हाला असे काहीतरी दिसू शकते:
```output
Changes not staged for commit:
@@ -175,12 +216,12 @@ git remote set-url origin git@github.com:username/repository.git
modified: file2.txt
```
- **घाबरू नका! याचा अर्थ काय आहे:**
- - **लाल रंगातील फाइल्स** म्हणजे फाइल्स ज्यामध्ये बदल आहेत पण जतन करण्यासाठी तयार नाहीत
- - **हिरव्या रंगातील फाइल्स** (जेव्हा तुम्ही त्यांना पाहता) जतन करण्यासाठी तयार आहेत
- - Git तुम्हाला पुढे काय करता येईल याबद्दल नेमके सांगून उपयुक्त ठरत आहे
+ **घाबरू नका! याचा अर्थ असा आहे:**
+ - **लाल** रंगातील फाइल्स म्हणजे फाइल्स ज्यामध्ये बदल आहेत पण जतन करण्यासाठी तयार नाहीत
+ - **हिरव्या** रंगातील फाइल्स (जेव्हा तुम्ही त्यांना पाहता) जतन करण्यासाठी तयार आहेत
+ - Git तुम्हाला पुढे काय करता येईल याबद्दल नेमके सांगून मदत करत आहे
- > 💡 **प्रो टिप**: `git status` आदेश तुमचा सर्वोत्तम मित्र आहे! तुम्हाला गोंधळ वाटत असल्यास ते वापरा. हे Git ला विचारण्यासारखे आहे "अरे, सध्या काय परिस्थिती आहे?"
+ > 💡 **प्रो टिप**: `git status` आदेश तुमचा सर्वोत्तम मित्र आहे! तुम्हाला गोंधळ वाटत असताना ते वापरा. हे Git ला विचारण्यासारखे आहे "अरे, सध्या काय परिस्थिती आहे?"
5. **तुमच्या फाइल्स जतन करण्यासाठी तयार करा** (याला "स्टेजिंग" म्हणतात):
@@ -189,22 +230,22 @@ git remote set-url origin git@github.com:username/repository.git
```
**आम्ही काय केले:**
- - आम्ही Git ला सांगितले "अरे, मी माझ्या पुढील जतनामध्ये माझ्या सर्व फाइल्स समाविष्ट करू इच्छितो"
- - `.` म्हणजे "या फोल्डरमधील सर्वकाही"
- - आता तुमच्या फाइल्स "स्टेज" झाल्या आहेत आणि पुढील चरणासाठी तयार आहेत
+ - आम्ही Git ला सांगितले "अरे, मी माझ्या पुढील जतनामध्ये माझ्या सर्व फाइल्स समाविष्ट करू इच्छित आहे"
+ - `.` म्हणजे "या फोल्डरमधील सर्व काही"
+ - आता तुमच्या फाइल्स "स्टेज केलेल्या" आहेत आणि पुढील चरणासाठी तयार आहेत
- **अधिक निवडक व्हायचे आहे?** तुम्ही फक्त विशिष्ट फाइल्स जोडू शकता:
+ **तुम्हाला अधिक निवडक व्हायचे आहे का?** तुम्ही फक्त विशिष्ट फाइल्स जोडू शकता:
```bash
git add [file or folder name]
```
- **तुम्हाला हे का करायचे आहे?**
+ **तुम्हाला असे का करायचे आहे?**
- कधी कधी तुम्हाला संबंधित बदल एकत्रितपणे जतन करायचे असतात
- - हे तुम्हाला तुमचे काम तार्किक भागांमध्ये व्यवस्थित करण्यात मदत करते
- - काय बदलले आणि कधी बदलले हे समजणे सोपे करते
+ - हे तुमचे काम तार्किक तुकड्यांमध्ये आयोजित करण्यात मदत करते
+ - काय बदलले आणि कधी हे समजणे सोपे बनवते
- **तुमचे मत बदलले?** काळजी करू नका! तुम्ही फाइल्स अशा प्रकारे अनस्टेज करू शकता:
+ **तुमचे मन बदलले?** काळजी करू नका! तुम्ही फाइल्स अशा प्रकारे अनस्टेज करू शकता:
```bash
# Unstage everything
@@ -214,35 +255,36 @@ git remote set-url origin git@github.com:username/repository.git
git reset [file name]
```
- काळजी करू नका – यामुळे तुमचे काम हटवले जात नाही, फक्त फाइल्स "जतन करण्य
- - आम्ही तुमच्या स्थानिक प्रोजेक्ट आणि GitHub रेपॉझिटरीमध्ये कनेक्शन तयार केले आहे.
- - "Origin" हे तुमच्या GitHub रेपॉझिटरीसाठी फक्त एक टोपणनाव आहे – जसे की फोनमध्ये संपर्क जोडणे.
- - आता तुमचा स्थानिक Git तयार आहे, जेव्हा तुम्ही तुमचा कोड शेअर करण्यासाठी तयार असाल तेव्हा तो कोठे पाठवायचा हे त्याला माहीत आहे.
+ काळ
+**आपण काय केलं:**
+- आपण आपल्या स्थानिक प्रकल्प आणि GitHub रेपॉजिटरी यांच्यात कनेक्शन तयार केलं
+- "Origin" हा फक्त तुमच्या GitHub रेपॉजिटरीसाठी एक टोपणनाव आहे – जसं तुम्ही तुमच्या फोनमध्ये एखाद्या संपर्काला जतन करता
+- आता तुमचा स्थानिक Git जाणतो की तुमचा कोड शेअर करण्यासाठी कुठे पाठवायचा आहे
- 💡 **सोपा मार्ग**: जर तुमच्याकडे GitHub CLI इंस्टॉल असेल, तर तुम्ही हे एका कमांडमध्ये करू शकता:
+💡 **सोपं मार्ग**: जर तुमच्याकडे GitHub CLI इन्स्टॉल असेल, तर तुम्ही हे एका कमांडने करू शकता:
```bash
gh repo create my-repo --public --push --source=.
```
-8. **तुमचा कोड GitHub वर पाठवा** (महत्त्वाचा क्षण!):
+8. **तुमचा कोड GitHub वर पाठवा** (मोठा क्षण!):
```bash
git push -u origin main
```
**🚀 हेच ते! तुम्ही तुमचा कोड GitHub वर अपलोड करत आहात!**
-
- **काय होत आहे:**
- - तुमचे commits तुमच्या संगणकावरून GitHub वर जात आहेत.
- - `-u` फ्लॅग एक कायमस्वरूपी कनेक्शन सेट करते जेणेकरून भविष्यातील पुश करणे सोपे होईल.
- - "main" हे तुमच्या प्राथमिक शाखेचे नाव आहे (जसे मुख्य फोल्डर).
- - यानंतर, भविष्यातील अपलोडसाठी तुम्ही फक्त `git push` टाइप करू शकता!
- 💡 **लवकर टिप**: जर तुमची शाखा "master" सारखी काहीतरी वेगळ्या नावाने असेल, तर ते नाव वापरा. तुम्ही `git branch --show-current` वापरून तपासू शकता.
+ **काय घडतंय:**
+ - तुमचे commits तुमच्या संगणकावरून GitHub कडे जात आहेत
+ - `-u` फ्लॅग एक कायमस्वरूपी कनेक्शन सेट करतो ज्यामुळे भविष्यातील पुश करणे सोपे होते
+ - "main" हा तुमच्या प्राथमिक शाखेचे नाव आहे (मुख्य फोल्डरसारखे)
+ - यानंतर, तुम्ही फक्त `git push` टाइप करून भविष्यातील अपलोड करू शकता!
-9. **तुमचा नवीन रोजचा कोडिंग रिदम** (इथेच मजा सुरू होते!):
+ 💡 **लहान टिप**: जर तुमच्या शाखेचं नाव काहीतरी वेगळं असेल (जसं "master"), तर ते नाव वापरा. तुम्ही `git branch --show-current` वापरून तपासू शकता.
- आता पुढे, जेव्हा तुम्ही तुमच्या प्रोजेक्टमध्ये बदल कराल, तुम्हाला हा सोपा तीन-स्टेप डान्स करायचा आहे:
+9. **तुमचा नवीन दैनंदिन कोडिंग रिदम** (आता हे व्यसन होईल!):
+
+ आता पासून, जेव्हा तुम्ही तुमच्या प्रकल्पात बदल कराल, तेव्हा तुम्हाला हा सोपा तीन-स्टेप डान्स करायचा आहे:
```bash
git add .
@@ -250,101 +292,147 @@ git remote set-url origin git@github.com:username/repository.git
git push
```
- **हे तुमचे कोडिंग हार्टबीट बनते:**
+ **हे तुमचं कोडिंग हार्टबीट बनेल:**
- तुमच्या कोडमध्ये काही अप्रतिम बदल करा ✨
- `git add` ने त्यांना स्टेज करा ("हे Git, या बदलांकडे लक्ष द्या!")
- `git commit` आणि एक वर्णनात्मक संदेशासह त्यांना सेव्ह करा (भविष्यातील तुम्ही तुमचे आभार मानाल!)
- - `git push` वापरून ते जगासोबत शेअर करा 🚀
- - पुन्हा करा – खरंच, हे श्वास घेण्याइतके नैसर्गिक बनते!
-
- मला हा वर्कफ्लो आवडतो कारण हे व्हिडिओ गेममध्ये अनेक सेव्ह पॉइंट्स असण्यासारखे आहे. तुम्हाला आवडलेला बदल केला? Commit करा! काहीतरी धोकादायक प्रयत्न करायचे आहे? काही हरकत नाही – जर गोष्टी बिघडल्या तर तुम्ही नेहमी तुमच्या शेवटच्या commit वर परत जाऊ शकता!
+ - `git push` वापरून त्यांना जगासोबत शेअर करा 🚀
+ - पुन्हा करा – खरंच, हे श्वास घेण्याइतकं नैसर्गिक होईल!
+
+ मला हा वर्कफ्लो खूप आवडतो कारण हे व्हिडिओ गेममध्ये अनेक सेव्ह पॉइंट्स असण्यासारखं आहे. तुम्हाला एखादा बदल आवडला? Commit करा! काही धोकादायक प्रयत्न करायचं आहे? हरकत नाही – जर काही चुकलं तर तुम्ही नेहमी तुमच्या शेवटच्या commit वर परत जाऊ शकता!
+
+ > 💡 **टिप**: तुम्हाला `.gitignore` फाइलचा अवलंब करायचा असेल, ज्यामुळे तुम्हाला ट्रॅक करायच्या नसलेल्या फाइल्स GitHub वर दिसणार नाहीत - जसं की, तुमच्या फोल्डरमध्ये असलेली नोट्स फाइल जी सार्वजनिक रेपॉजिटरीमध्ये असण्याची गरज नाही. तुम्ही `.gitignore` फाइल्ससाठी टेम्पलेट्स [.gitignore templates](https://github.com/github/gitignore) येथे शोधू शकता किंवा [gitignore.io](https://www.toptal.com/developers/gitignore) वापरून एक तयार करू शकता.
+
+### 🧠 **पहिल्या रेपॉजिटरी चेक-इन: कसं वाटलं?**
+
+**थोडा वेळ साजरा करा आणि विचार करा:**
+- तुमचा कोड पहिल्यांदा GitHub वर दिसल्यावर कसं वाटलं?
+- कोणता टप्पा सर्वात गोंधळात टाकणारा वाटला, आणि कोणता आश्चर्यकारकपणे सोपा वाटला?
+- तुम्ही `git add`, `git commit`, आणि `git push` यामधील फरक स्वतःच्या शब्दांत समजावून सांगू शकता का?
+
+```mermaid
+stateDiagram-v2
+ [*] --> LocalFiles: Create project
+ LocalFiles --> Staged: git add .
+ Staged --> Committed: git commit
+ Committed --> GitHub: git push
+ GitHub --> [*]: Success! 🎉
+
+ note right of Staged
+ Files ready to save
+ end note
+
+ note right of Committed
+ Snapshot created
+ end note
+```
- > 💡 **टिप**: तुम्हाला `.gitignore` फाइल स्वीकारायची इच्छा असू शकते जेणेकरून तुम्ही ट्रॅक करू इच्छित नसलेल्या फाइल्स GitHub वर दिसणार नाहीत - जसे की नोट्स फाइल जी तुम्ही त्याच फोल्डरमध्ये ठेवता पण सार्वजनिक रेपॉझिटरीमध्ये त्याचे स्थान नाही. तुम्ही `.gitignore` फाइल्ससाठी टेम्पलेट्स [.gitignore templates](https://github.com/github/gitignore) येथे शोधू शकता किंवा [gitignore.io](https://www.toptal.com/developers/gitignore) वापरून एक तयार करू शकता.
+> **लक्षात ठेवा**: अनुभवी डेव्हलपर्ससुद्धा कधी कधी अचूक कमांड्स विसरतात. हा वर्कफ्लो सवयीचा होण्यासाठी सराव लागतो - तुम्ही खूप चांगलं करत आहात!
#### आधुनिक Git वर्कफ्लो
-या आधुनिक पद्धती स्वीकारण्याचा विचार करा:
+या आधुनिक पद्धतींचा अवलंब करण्याचा विचार करा:
-- **Conventional Commits**: `feat:`, `fix:`, `docs:` इत्यादीसारख्या प्रमाणित commit संदेश स्वरूपाचा वापर करा. अधिक जाणून घ्या [conventionalcommits.org](https://www.conventionalcommits.org/) येथे.
-- **Atomic commits**: प्रत्येक commit एकच तर्कसंगत बदल दर्शवतो.
-- **Frequent commits**: मोठ्या, क्वचितच होणाऱ्या commits ऐवजी वर्णनात्मक संदेशांसह वारंवार commit करा.
+- **Conventional Commits**: `feat:`, `fix:`, `docs:` यासारख्या प्रमाणित कमिट संदेश स्वरूपाचा वापर करा. अधिक जाणून घ्या [conventionalcommits.org](https://www.conventionalcommits.org/) येथे.
+- **Atomic commits**: प्रत्येक कमिट एकच तर्कसंगत बदल दर्शवेल याची खात्री करा.
+- **Frequent commits**: मोठ्या, क्वचित होणाऱ्या कमिट्सच्या तुलनेत वर्णनात्मक संदेशांसह वारंवार कमिट करा.
-#### Commit संदेश
+#### कमिट संदेश
-एक उत्कृष्ट Git commit विषय ओळ खालील वाक्य पूर्ण करते:
-जर लागू केले, तर हा commit <तुमचा विषय इथे> करेल.
+एक उत्कृष्ट Git कमिट विषय ओळ खालील वाक्य पूर्ण करते:
+जर लागू केले, तर हा कमिट <तुमचा विषय इथे> करेल.
-विषयासाठी, आज्ञार्थी, वर्तमानकाळाचा वापर करा: "change" "changed" किंवा "changes" नाही.
-विषयासारखेच, शरीरात (पर्यायी) देखील आज्ञार्थी, वर्तमानकाळाचा वापर करा. शरीरात बदलासाठी प्रेरणा समाविष्ट करावी आणि मागील वर्तनाशी तुलना करावी. तुम्ही `का` स्पष्ट करत आहात, `कसे` नाही.
+विषयासाठी आज्ञार्थी, वर्तमानकाळाचा वापर करा: "change" नाही "changed" किंवा "changes".
+विषयाप्रमाणेच, शरीरात (पर्यायी) देखील आज्ञार्थी, वर्तमानकाळाचा वापर करा. शरीरात बदलासाठी प्रेरणा समाविष्ट करावी आणि मागील वर्तनाशी याची तुलना करावी. तुम्ही `का` समजावत आहात, `कसे` नाही.
-✅ GitHub वर थोडे फिरा. तुम्हाला खरोखरच उत्कृष्ट commit संदेश सापडतो का? तुम्हाला खूपच कमी माहिती असलेला संदेश सापडतो का? commit संदेशामध्ये कोणती माहिती सर्वात महत्त्वाची आणि उपयुक्त आहे असे तुम्हाला वाटते?
+✅ काही वेळ काढून GitHub वर सर्फ करा. तुम्हाला एक खूप चांगला कमिट संदेश सापडतो का? तुम्हाला एक खूपच साधा सापडतो का? कमिट संदेशात कोणती माहिती सर्वात महत्त्वाची आणि उपयुक्त वाटते?
## इतरांसोबत काम करणे (मजेदार भाग!)
-तुमची टोपी धरून ठेवा कारण इथेच GitHub पूर्णपणे जादुई बनते! 🪄 तुम्ही तुमचा स्वतःचा कोड व्यवस्थापित करण्यात पारंगत झाला आहात, पण आता आम्ही माझा सर्वात आवडता भाग – जगभरातील आश्चर्यकारक लोकांसोबत सहयोग करणे – यामध्ये डुबकी मारत आहोत.
+तुमची टोपी धरून ठेवा कारण इथेच GitHub पूर्णपणे जादुई बनतो! 🪄 तुम्ही तुमचा स्वतःचा कोड व्यवस्थापित करण्यात निपुण झाला आहात, पण आता आपण माझ्या आवडत्या भागात प्रवेश करतो – जगभरातील अद्भुत लोकांसोबत सहकार्य करणे.
-कल्पना करा: तुम्ही उद्या उठता आणि पाहता की टोकियोमधील कोणीतरी तुमचा कोड सुधारला आहे, जेव्हा तुम्ही झोपले होते. मग बर्लिनमधील कोणीतरी तुम्हाला अडचणीत टाकणारी बग दुरुस्त करते. दुपारपर्यंत, साओ पाउलोमधील एक विकसक तुम्ही कधी विचार केला नाही असा एक फिचर जोडतो. हे विज्ञान कल्पनारम्य नाही – हे फक्त GitHub विश्वातील मंगळवार आहे!
+कल्पना करा: तुम्ही उद्या सकाळी उठता आणि पाहता की टोकियोमधील कोणीतरी तुमचा कोड सुधारला आहे. मग बर्लिनमधील कोणीतरी तुम्हाला अडचणीत टाकणारा बग दुरुस्त करतो. दुपारपर्यंत, साओ पाउलोमधील एक डेव्हलपर तुम्हाला कधीही विचारात न आलेली एक नवीन वैशिष्ट्य जोडतो. हे विज्ञानकथा नाही – हे फक्त GitHub विश्वातील एक सामान्य मंगळवार आहे!
-मला खरोखरच उत्साहित करणारी गोष्ट म्हणजे तुम्ही शिकत असलेल्या सहयोग कौशल्य? हे अगदी तेच वर्कफ्लो आहेत जे Google, Microsoft आणि तुमच्या आवडत्या स्टार्टअप्समधील टीम्स दररोज वापरतात. तुम्ही फक्त एक छान साधन शिकत नाही आहात – तुम्ही गुप्त भाषा शिकत आहात जी संपूर्ण सॉफ्टवेअर जगाला एकत्र काम करण्यास सक्षम करते.
+मला खूप उत्साह येतो कारण तुम्ही आता शिकत असलेल्या सहकार्य कौशल्यांमुळे? हेच ते अचूक वर्कफ्लो आहेत जे Google, Microsoft, आणि तुमच्या आवडत्या स्टार्टअप्समधील टीम्स दररोज वापरतात. तुम्ही फक्त एक छान साधन शिकत नाही आहात – तुम्ही संपूर्ण सॉफ्टवेअर जगाला एकत्र काम करण्यास सक्षम करणारी गुप्त भाषा शिकत आहात.
-खरंच, जेव्हा तुम्ही तुमचा पहिला pull request merge होण्याचा आनंद अनुभवता, तेव्हा तुम्हाला समजेल की विकसक ओपन सोर्सबद्दल इतके उत्साही का होतात. हे जगातील सर्वात मोठ्या, सर्वात सर्जनशील टीम प्रोजेक्टचा भाग असल्यासारखे आहे!
+खरंच, जेव्हा तुम्हाला तुमचा पहिला pull request merge झाल्याचा आनंद होतो, तेव्हा तुम्हाला समजेल की डेव्हलपर्स ओपन सोर्सबद्दल इतके उत्साही का होतात. हे जगातील सर्वात मोठ्या, सर्वात सर्जनशील टीम प्रोजेक्टचा भाग असल्यासारखं आहे!
> व्हिडिओ पहा
>
> [](https://www.youtube.com/watch?v=bFCM-PC3cu8)
-GitHub वर गोष्टी ठेवण्याचे मुख्य कारण म्हणजे इतर विकसकांसोबत सहयोग करणे शक्य करणे.
+GitHub वर गोष्टी ठेवण्याचं मुख्य कारण म्हणजे इतर डेव्हलपर्ससोबत सहकार्य करणे शक्य होणे.
+
+```mermaid
+flowchart LR
+ A[🔍 Find Project] --> B[🍴 Fork Repository]
+ B --> C[📥 Clone to Local]
+ C --> D[🌿 Create Branch]
+ D --> E[✏️ Make Changes]
+ E --> F[💾 Commit Changes]
+ F --> G[📤 Push Branch]
+ G --> H[🔄 Create Pull Request]
+ H --> I{Maintainer Review}
+ I -->|✅ Approved| J[🎉 Merge!]
+ I -->|❓ Changes Requested| K[📝 Make Updates]
+ K --> F
+ J --> L[🧹 Clean Up Branches]
+
+ style A fill:#e3f2fd
+ style J fill:#e8f5e8
+ style L fill:#fff3e0
+```
-तुमच्या रेपॉझिटरीमध्ये, `Insights > Community` वर जा आणि तुमचा प्रोजेक्ट शिफारस केलेल्या समुदाय मानकांशी कसा तुलना करतो ते पहा.
+तुमच्या रेपॉजिटरीमध्ये, `Insights > Community` ला जा आणि तुमचा प्रकल्प शिफारस केलेल्या समुदाय मानकांशी कसा तुलना करतो ते पहा.
-तुमची रेपॉझिटरी व्यावसायिक आणि स्वागतार्ह दिसण्यासाठी इच्छुक आहात? तुमच्या रेपॉझिटरीकडे जा आणि `Insights > Community` वर क्लिक करा. ही छान सुविधा तुम्हाला दाखवते की GitHub समुदाय "चांगल्या रेपॉझिटरी पद्धती" मानतो त्यांच्याशी तुमचा प्रोजेक्ट कसा तुलना करतो.
+तुमची रेपॉजिटरी व्यावसायिक आणि स्वागतार्ह दिसावी असं वाटतंय? तुमच्या रेपॉजिटरीमध्ये जा आणि `Insights > Community` वर क्लिक करा. ही छान वैशिष्ट्य तुम्हाला दाखवते की तुमचा प्रकल्प GitHub समुदायाच्या "चांगल्या रेपॉजिटरी पद्धतींशी" कसा तुलना करतो.
-> 🎯 **तुमचा प्रोजेक्ट चमकदार बनवणे**: चांगल्या प्रकारे आयोजित केलेली रेपॉझिटरी चांगल्या दस्तऐवजीकरणासह स्वच्छ, स्वागतार्ह स्टोअरफ्रंटसारखी आहे. हे लोकांना तुमच्या कामाची काळजी आहे हे सांगते आणि इतरांना योगदान देण्याची इच्छा निर्माण करते!
+> 🎯 **तुमचा प्रकल्प चमकवा**: चांगल्या प्रकारे आयोजित केलेली रेपॉजिटरी आणि चांगल्या दस्तऐवजांसह, जणू काही स्वच्छ, स्वागतार्ह दुकानासारखी असते. हे लोकांना तुमच्या कामाबद्दल काळजी आहे हे सांगते आणि इतरांना योगदान देण्याची इच्छा निर्माण करते!
-**एक रेपॉझिटरी उत्कृष्ट बनवण्यासाठी काय आवश्यक आहे:**
+**एक उत्कृष्ट रेपॉजिटरी कशी बनवायची:**
-| काय जोडायचे | का महत्त्वाचे आहे | तुमच्यासाठी काय करते |
-|-------------|-------------------|---------------------|
-| **Description** | पहिली छाप महत्त्वाची आहे! | लोकांना त्वरित कळते की तुमचा प्रोजेक्ट काय करतो |
-| **README** | तुमच्या प्रोजेक्टचे मुख्य पृष्ठ | नवीन अभ्यागतांसाठी एक मैत्रीपूर्ण मार्गदर्शकासारखे |
-| **Contributing Guidelines** | तुम्ही मदत स्वागत करता हे दाखवते | लोकांना नक्की कळते की ते तुम्हाला कसे मदत करू शकतात |
-| **Code of Conduct** | एक मैत्रीपूर्ण जागा तयार करते | प्रत्येकजण सहभागी होण्यासाठी स्वागतार्ह वाटतो |
-| **License** | कायदेशीर स्पष्टता | इतरांना तुमचा कोड कसा वापरायचा हे कळते |
-| **Security Policy** | तुम्ही जबाबदार आहात हे दाखवते | व्यावसायिक पद्धती दर्शवते |
+| काय जोडायचं | का महत्त्वाचं आहे | तुमच्यासाठी काय करतो |
+|--------------|-------------------|-----------------------|
+| **वर्णन** | पहिलं छाप महत्त्वाचं आहे! | लोकांना लगेच कळतं की तुमचा प्रकल्प काय करतो |
+| **README** | तुमच्या प्रकल्पाचं मुख्य पान | नवीन अभ्यागतांसाठी एक मैत्रीपूर्ण मार्गदर्शक |
+| **Contributing Guidelines** | मदतीचं स्वागत दाखवतं | लोकांना नेमकं कळतं की ते तुम्हाला कसं मदत करू शकतात |
+| **Code of Conduct** | एक मैत्रीपूर्ण जागा तयार करते | प्रत्येकाला सहभागी होण्यासाठी स्वागतार्ह वाटतं |
+| **License** | कायदेशीर स्पष्टता | इतरांना तुमचा कोड कसा वापरायचा हे कळतं |
+| **Security Policy** | जबाबदारपणाचं प्रदर्शन | व्यावसायिक पद्धती दाखवते |
-> 💡 **प्रो टिप**: GitHub या सर्व फाइल्ससाठी टेम्पलेट्स प्रदान करते. नवीन रेपॉझिटरी तयार करताना, या फाइल्स स्वयंचलितपणे तयार करण्यासाठी बॉक्स तपासा.
+> 💡 **प्रो टिप**: GitHub या सर्व फाइल्ससाठी टेम्पलेट्स प्रदान करतो. नवीन रेपॉजिटरी तयार करताना, या फाइल्स आपोआप तयार करण्यासाठी बॉक्सेस तपासा.
-**आधुनिक GitHub वैशिष्ट्ये एक्सप्लोर करा:**
+**आधुनिक GitHub वैशिष्ट्ये शोधा:**
🤖 **ऑटोमेशन आणि CI/CD:**
- **GitHub Actions** स्वयंचलित चाचणी आणि तैनातीसाठी
-- **Dependabot** स्वयंचलित dependency अपडेटसाठी
+- **Dependabot** स्वयंचलित डिपेंडन्सी अपडेट्ससाठी
-💬 **समुदाय आणि प्रोजेक्ट व्यवस्थापन:**
+💬 **समुदाय आणि प्रकल्प व्यवस्थापन:**
- **GitHub Discussions** समस्यांपलीकडे समुदाय संभाषणांसाठी
-- **GitHub Projects** कानबन-शैली प्रोजेक्ट व्यवस्थापनासाठी
-- **Branch protection rules** कोड गुणवत्ता मानके लागू करण्यासाठी
+- **GitHub Projects** कानबान-शैली प्रकल्प व्यवस्थापनासाठी
+- **Branch protection rules** कोड गुणवत्ता मानक लागू करण्यासाठी
-हे सर्व संसाधने नवीन टीम सदस्यांना ऑनबोर्डिंगसाठी फायदेशीर ठरतील. आणि हीच ती गोष्टी आहेत ज्याकडे नवीन योगदानकर्ते तुमचा कोड पाहण्याआधी लक्ष देतात, हे शोधण्यासाठी की तुमचा प्रोजेक्ट त्यांचा वेळ घालवण्यासाठी योग्य ठिकाण आहे का.
+हे सर्व संसाधने नवीन टीम सदस्यांना onboard करण्यासाठी फायदेशीर ठरतील. आणि हेच ते प्रकार आहेत जे नवीन योगदानकर्ते तुमचा कोड पाहण्याआधी पाहतात, हे शोधण्यासाठी की तुमचा प्रकल्प त्यांचा वेळ खर्च करण्यासाठी योग्य आहे का.
-✅ README फाइल्स, जरी त्यांना तयार करण्यासाठी वेळ लागतो, व्यस्त देखभाल करणाऱ्यांकडून अनेकदा दुर्लक्षित केल्या जातात. तुम्हाला विशेषतः वर्णनात्मक README फाइलचा एक उदाहरण सापडते का? लक्षात ठेवा: [चांगल्या README तयार करण्यासाठी काही साधने](https://www.makeareadme.com/) आहेत जी तुम्हाला वापरायची इच्छा असू शकते.
+✅ README फाइल्स, जरी तयार करण्यात वेळ लागतो, तरीही व्यस्त मेंटेनर्सकडून अनेकदा दुर्लक्षित केल्या जातात. तुम्हाला एखाद्या विशेषतः वर्णनात्मक README चं उदाहरण सापडतं का? लक्षात ठेवा: [चांगल्या README तयार करण्यासाठी काही साधने](https://www.makeareadme.com/) आहेत जी तुम्हाला वापरायला आवडतील.
-### कार्य: काही कोड merge करा
+### कार्य: काही कोड मर्ज करा
-Contributing दस्तऐवज लोकांना प्रोजेक्टमध्ये योगदान देण्यास मदत करतो. हे स्पष्ट करते की तुम्ही कोणत्या प्रकारचे योगदान शोधत आहात आणि प्रक्रिया कशी कार्य करते. योगदानकर्त्यांना GitHub वर तुमच्या रेपॉझिटरीमध्ये योगदान देण्यासाठी काही चरणांमधून जावे लागेल:
+Contributing दस्तऐवज लोकांना प्रकल्पात योगदान देण्यास मदत करतो. यात तुम्ही कोणत्या प्रकारच्या योगदानाची अपेक्षा करता आणि प्रक्रिया कशी कार्य करते हे स्पष्ट केलं जातं. योगदानकर्त्यांना GitHub वर तुमच्या रेपॉजिटरीमध्ये योगदान देण्यासाठी काही टप्पे पार करावे लागतील:
-1. **तुमची रेपॉझिटरी fork करणे** तुम्हाला कदाचित लोकांना तुमचा प्रोजेक्ट _fork_ करायचा असेल. Forking म्हणजे त्यांच्या GitHub प्रोफाइलवर तुमच्या रेपॉझिटरीची प्रत तयार करणे.
-1. **Clone**. त्यानंतर ते प्रोजेक्ट त्यांच्या स्थानिक मशीनवर clone करतील.
-1. **शाखा तयार करा**. तुम्हाला त्यांना त्यांच्या कामासाठी एक _शाखा_ तयार करण्यास सांगायचे आहे.
-1. **त्यांचा बदल एका क्षेत्रावर केंद्रित करा**. योगदानकर्त्यांना एकावेळी एका गोष्टीवर लक्ष केंद्रित करण्यास सांगा - अशा प्रकारे तुम्ही त्यांचे काम _merge_ करण्याची शक्यता जास्त आहे. कल्पना करा त्यांनी बग फिक्स लिहिली, नवीन फिचर जोडले आणि अनेक चाचण्या अपडेट केल्या - काय असेल जर तुम्हाला, किंवा तुम्ही फक्त 3 पैकी 2 किंवा 1 बदल लागू करू शकता?
+1. **तुमची रेपॉजिटरी Fork करणे**. तुम्हाला कदाचित लोकांना तुमचा प्रकल्प _fork_ करायला सांगायचं असेल. Forking म्हणजे त्यांच्या GitHub प्रोफाइलवर तुमच्या रेपॉजिटरीची प्रत तयार करणे.
+1. **Clone**. त्यानंतर ते प्रकल्प त्यांच्या स्थानिक मशीनवर clone करतील.
+1. **शाखा तयार करा**. तुम्हाला त्यांना त्यांच्या कामासाठी एक _शाखा_ तयार करायला सांगायचं आहे.
+1. **त्यांचा बदल एका क्षेत्रावर केंद्रित करा**. योगदानकर्त्यांना एकावेळी एका गोष्टीवर लक्ष केंद्रित करण्यास सांगा - अशा प्रकारे त्यांचे काम _merge_ होण्याची शक्यता जास्त आहे. कल्पना करा की त्यांनी एक बग फिक्स लिहिला, एक नवीन वैशिष्ट्य जोडले, आणि अनेक चाचण्या अपडेट केल्या - काय होईल जर तुम्हाला, किंवा तुम्ही फक्त 2 पैकी 3, किंवा 1 पैकी 3 बदल लागू करू शकता?
-✅ शाखा चांगला कोड लिहिण्यासाठी आणि शिप करण्यासाठी विशेषतः महत्त्वाच्या असलेल्या परिस्थितीची कल्पना करा. तुम्ही कोणते उपयोग प्रकरणे विचार करू शकता?
+✅ अशा परिस्थितीची कल्पना करा जिथे शाखा चांगला कोड लिहिण्यासाठी आणि पाठवण्यासाठी विशेषतः महत्त्वाच्या असतात. तुम्हाला कोणते उपयोग प्रकरणे सुचतात?
-> लक्षात ठेवा, तुम्ही जगात पाहू इच्छित असलेल्या बदलाचे प्रतीक बना आणि तुमच्या स्वतःच्या कामासाठी शाखा तयार करा. तुम्ही केलेले कोणतेही commits तुम्ही सध्या "चेक आउट" केलेल्या शाखेवर केले जातील. `git status` वापरून ती कोणती शाखा आहे ते पहा.
+> लक्षात ठेवा, तुम्हाला जगात पाहायचा आहे तो बदल व्हा, आणि तुमच्या स्वतःच्या कामासाठीही शाखा तयार करा. तुम्ही केलेले कोणतेही कमिट्स तुम्ही सध्या "चेक आउट" केलेल्या शाखेत केले जातील. `git status` वापरून ती कोणती शाखा आहे ते पहा.
-चला योगदानकर्ता वर्कफ्लो पाहूया. गृहीत धरा की योगदानकर्त्याने आधीच रेपॉझिटरी _fork_ आणि _clone_ केली आहे त्यामुळे त्यांच्याकडे स्थानिक मशीनवर काम करण्यासाठी Git रेपॉझिटरी तयार आहे:
+चला एक योगदानकर्ता वर्कफ्लो पाहू. गृहीत धरा की योगदानकर्त्याने आधीच रेपॉजिटरी _fork_ आणि _clone_ केली आहे, त्यामुळे त्यांच्याकडे स्थानिक मशीनवर काम करण्यासाठी Git रेपो तयार आहे:
-1. **शाखा तयार करा**. `git branch` कमांड वापरून शाखा तयार करा जी ते योगदान देण्याचा विचार करत असलेल्या बदलांचा समावेश करेल:
+1. **शाखा तयार करा**. `git branch` कमांड वापरून एक शाखा तयार करा जी ते योगदान देऊ इच्छित असलेल्या बदलांचा समावेश करेल:
```bash
git branch [branch-name]
@@ -355,13 +443,13 @@ Contributing दस्तऐवज लोकांना प्रोजेक
git switch -c [branch-name]
```
-1. **कामाच्या शाखेवर स्विच करा**. निर्दिष्ट शाखेवर स्विच करा आणि `git switch` वापरून कार्यरत निर्देशिका अपडेट करा:
+1. **कामाच्या शाखेत स्विच करा**. निर्दिष्ट शाखेत स्विच करा आणि `git switch` सह कार्यरत निर्देशिका अपडेट करा:
```bash
git switch [branch-name]
```
- > 💡 **आधुनिक टिप**: शाखा बदलताना `git switch` हे `git checkout` चे आधुनिक पर्याय आहे. हे स्पष्ट आणि सुरक्षीत आहे.
+ > 💡 **आधुनिक टिप**: शाखा बदलताना `git switch` हे `git checkout` चे आधुनिक पर्याय आहे. हे अधिक स्पष्ट आणि नवशिक्यांसाठी सुरक्षित आहे.
1. **काम करा**. या टप्प्यावर तुम्हाला तुमचे बदल जोडायचे आहेत. खालील कमांडसह Git ला त्याबद्दल सांगायला विसरू नका:
@@ -370,88 +458,124 @@ Contributing दस्तऐवज लोकांना प्रोजेक
git commit -m "my changes"
```
- > ⚠️ **Commit संदेश गुणवत्ता**: तुमच्या commit ला चांगले नाव द्या, तुमच्यासाठी आणि तुम्ही मदत करत असलेल्या रेपॉझिटरीच्या देखभालकर्त्यासाठी. तुम्ही काय बदलले याबद्दल विशिष्ट रहा!
+ > ⚠️ **कमिट संदेश गुणवत्ता**: तुमच्या कमिटला चांगलं नाव द्या, तुमच्यासाठी आणि तुम्ही मदत करत असलेल्या रेपोच्या मेंटेनरसाठी. तुम्ही काय बदललं याबद्दल विशिष्ट व्हा!
-1. **तुमचे काम `main` शाखेसोबत एकत्र करा**. काही वेळाने तुम्ही काम पूर्ण केले आहे आणि तुम्हाला तुमचे काम `main` शाखेसोबत एकत्र करायचे आहे. दरम्यान `main` शाखा बदलली असू शकते त्यामुळे खालील कमांडसह ती प्रथम नवीनतमवर अपडेट करा:
+1. **तुमचं काम `main` शाखेसोबत एकत्र करा**. एका टप्प्यावर तुम्ही काम पूर्ण करता आणि तुमचं काम `main` शाखेसोबत एकत्र करायचं असतं. दरम्यान `main` शाखा बदलली असेल, त्यामुळे खालील कमांडसह ती आधी नवीनतम स्थितीत अपडेट करा:
```bash
git switch main
git pull
```
- या टप्प्यावर तुम्हाला खात्री करायची आहे की कोणतेही _conflicts_, ज्या परिस्थितीत Git सहजपणे _combine_ करू शकत नाही, तुमच्या कार्यरत शाखेत होतात. म्हणून खालील कमांड चालवा:
+ या टप्प्यावर तुम्हाला खात्री करायची आहे की कोणतेही _conflicts_, जिथे Git सहजपणे _combine_ करू शकत नाही, ते तुमच्या कार्यरत शाखेत होतात. म्हणून खालील कमांड्स चालवा:
```bash
git switch [branch_name]
git merge main
```
- `git merge main` कमांड `main` मधील सर्व बदल तुमच्या शाखेत आणेल. आशा आहे की तुम्ही फक्त पुढे जाऊ शकता. जर तसे नसेल, तर VS Code तुम्हाला सांगेल की Git _गोंधळलेला_ आहे आणि तुम्ही प्रभावित फाइल्स बदलून सर्वात अचूक सामग्री सांगू शकता.
+ `git merge main` कमांड `main` मधील सर्व बदल तुमच्या शाखेत आणेल. आशा आहे की तुम्ही फक्त पुढे जाऊ शकता. जर नाही, तर VS Code तुम्हाला सांगेल की Git कुठे _गोंधळलेला_ आहे आणि तुम्ही प्रभावित फाइल्स बदलून योग्य सामग्री निवडू शकता.
💡 **आधुनिक पर्याय**: स्वच्छ इतिहासासाठी `git rebase` वापरण्याचा विचार करा:
```bash
git rebase main
```
- हे तुमचे commits नवीनतम main शाखेच्या वर पुन्हा प्ले करते, एक रेखीय इतिहास तयार करते.
+ हे तुमचे कमिट्स नवीनतम main शाखेच्या वर पुन्हा प्ले करते, एक रेषीय इतिहास तयार करते.
-1. **तुमचे काम GitHub वर पाठवा**. तुमचे काम GitHub वर पाठवणे म्हणजे दोन गोष्टी. तुमची शाखा तुमच्या रेपॉझिटरीवर पुश करणे आणि नंतर PR, Pull Request उघडणे.
+1. **तुमचं काम GitHub वर पाठवा**. तुमचं काम GitHub वर पाठवणं म्हणजे दोन गोष्टी. तुमची शाखा तुमच्या forked रेपॉजिटरीवर पुश करा आणि नंतर एक PR (Pull Request) उघडा.
```bash
git push --set-upstream origin [branch-name]
```
- वरील कमांड तुमच्या forked रेपॉझिटरीवर शाखा तयार करते.
-
-1. **PR उघडा**. पुढे, तुम्हाला PR उघडायचा आहे. तुम्ही GitHub वर forked रेपॉझिटरीवर नेव्हिगेट करून ते करता. GitHub वर तुम्हाला एक सूचक दिसेल जिथे ते विचारते की तुम्हाला नवीन PR तयार करायचा आहे का, तुम्ही त्यावर क्लिक करता आणि तुम्हाला एक इंटरफेसवर नेले जाते जिथे तुम्ही commit संदेश शीर्षक बदलू शकता, त्याला अधिक योग्य वर्णन देऊ शकता. आता तुम्ही fork केलेल्या रेपॉझिटरीचा देखभालकर्ता हा PR पाहील आणि _बोटे क्रॉस करून_ ते तुमचा PR _merge_ करतील. तुम्ही आता योगदानकर्ता आहात, याय :)
-
- 💡 **आधुनिक टिप**: तुम्ही GitHub CLI वापरून PR देखील तयार करू शकता:
- ```bash
- gh pr create --title "Your PR title" --body "Description of changes"
- ```
+ वरील कमांड तुमच्या forked रेपॉजिटरीवर शाखा तयार करते.
+
+### 🤝 **सहकार्य कौशल्य तपासणी: इतरांसोबत काम करण्यासाठी तयार आहात का?**
+
+**सहकार्याबद्दल तुमचं कसं वाटतंय ते पाहूया:**
+- Forking आणि pull requests ची कल्पना आता तुम्हाला समजली का?
+- शाखांसोबत काम करण्याबद्दल तुम्हाला कोणती गोष्ट अधिक सराव करायची आहे?
+- इतरांच्या प्रकल्पात योगदान देण्याबद्दल तुम्हाला कितपत आत्मविश्वास वाटतो?
+
+```mermaid
+mindmap
+ root((Git Collaboration))
+ Branching
+ Feature branches
+ Bug fix branches
+ Experimental work
+ Pull Requests
+ Code review
+ Discussion
+ Testing
+ Best Practices
+ Clear commit messages
+ Small focused changes
+ Good documentation
+```
- 🔧 **PR साठी सर्वोत्तम पद्धती**:
- - संबंधित समस्यांना "Fixes #123" सारख्या कीवर्डसह लिंक करा.
- - UI बदलांसाठी स्क्रीनशॉट जोडा.
- - विशिष्ट पुनरावलोकनकर्त्यांची विनंती करा.
- - काम चालू असलेल्या draft PR वापरा.
- - पुनरावलोकनाची विनंती करण्यापूर्वी सर्व CI तपासण्या पास झाल्या आहेत याची खात्री करा.
+> **आत्मविश्वास वाढवणारा**: तुम्ही ज्या प्रत्येक डेव्हलपरचं कौतुक करता, ते कधी ना कधी त्यांच्या पहिल्या pull request बद्दल चिंतित होते. GitHub समुदाय नवशिक्यांसाठी खूप स्वागतार्ह आहे!
-1. **स्वच्छता करा**. तुम्ही यशस्वीरित्या PR merge केल्यानंतर _स्वच्छता_ करणे चांगली पद्धत मानली जाते. तुम्हाला तुमची स्थानिक शाखा आणि तुम्ही GitHub वर पुश केलेली शाखा साफ करायची आहे. प्रथम खालील कमांडसह ती स्थानिकपणे हटवा:
+1. **PR उघडा**. पुढे, तुम्हाला PR उघडायचं आहे. तुम्ही GitHub वर forked रेपॉजिटरीकडे जाऊन हे करू शकता. GitHub वर तुम्हाला एक सूचना दिसेल जिथे विचारलं जाईल की तुम्हाला नवीन PR तयार कराय
+1. **स्वच्छता करा**. PR यशस्वीपणे मर्ज केल्यानंतर स्वच्छता करणे चांगली पद्धत मानली जाते. तुम्हाला तुमची स्थानिक शाखा आणि GitHub वर पुश केलेली शाखा दोन्ही स्वच्छ करायची असते. प्रथम, खालील कमांडसह ती स्थानिक स्तरावर हटवा:
```bash
git branch -d [branch-name]
```
- नंतर GitHub पृष्ठावर forked रेपॉझिटरीसाठी जा आणि तुम्ही त्यावर पुश केलेली remote शाखा काढा.
-
-`Pull request` हा शब्द मूर्ख वाटतो कारण खरं तर तुम्हाला तुमचे बदल प्रोजेक्टमध्ये पुश करायचे आहेत. पण देखभालकर्ता (प्रोजेक्ट मालक) किंवा कोर टीमला प्रोज
-🤞सर्व चाचण्या यशस्वी होतील आणि प्रकल्प मालक तुमचे बदल प्रकल्पात समाविष्ट करतील अशी आशा आहे🤞
+ नंतर GitHub वर फोर्क केलेल्या रेपोच्या पृष्ठावर जा आणि तुम्ही नुकतीच पुश केलेली रिमोट शाखा हटवा.
-तुमच्या स्थानिक शाखेत GitHub वरील संबंधित रिमोट शाखेतील सर्व नवीन कमिट्ससह अद्यतन करा:
+`Pull request` हा शब्द थोडा विचित्र वाटतो कारण प्रत्यक्षात तुम्हाला तुमचे बदल प्रोजेक्टमध्ये पुश करायचे असतात. परंतु मेंटेनर (प्रोजेक्ट मालक) किंवा कोर टीमला तुमचे बदल प्रोजेक्टच्या "main" शाखेसोबत मर्ज करण्यापूर्वी विचार करणे आवश्यक असते, त्यामुळे तुम्ही प्रत्यक्षात मेंटेनरकडून बदलाचा निर्णय मागत आहात.
-`git pull`
+पुल रिक्वेस्ट ही एक जागा आहे जिथे शाखेवर केलेल्या बदलांची तुलना आणि चर्चा केली जाते, त्यात पुनरावलोकने, टिप्पण्या, एकत्रित चाचण्या आणि बरेच काही समाविष्ट असते. एक चांगला पुल रिक्वेस्ट साधारणपणे कमिट मेसेजसारखेच नियम पाळतो. तुम्ही तुमच्या कामाने एखाद्या समस्येचे निराकरण केले असल्यास, तुम्ही इश्यू ट्रॅकरमधील इश्यूचा संदर्भ जोडू शकता. हे `#` नंतर तुमच्या इश्यूचा क्रमांक वापरून केले जाते. उदाहरणार्थ `#97`.
-## ओपन सोर्समध्ये योगदान द्या (तुमची प्रभाव टाकण्याची संधी!)
+🤞 बोटं क्रॉस करा की सर्व चेक्स पास होतील आणि प्रोजेक्ट मालक तुमचे बदल प्रोजेक्टमध्ये मर्ज करतील 🤞
-तुम्ही काहीतरी जबरदस्त अनुभवायला तयार आहात का? 🤯 चला ओपन सोर्स प्रकल्पांमध्ये योगदान देण्याबद्दल बोलूया – आणि हे तुमच्यासोबत शेअर करताना मला खूप उत्साह वाटतो!
+तुमच्या स्थानिक कार्यरत शाखेत GitHub वरच्या संबंधित रिमोट शाखेतील सर्व नवीन कमिट्स अपडेट करा:
-हे तुमच्यासाठी काहीतरी विलक्षण गोष्टीचा भाग होण्याची संधी आहे. कल्पना करा, दररोज लाखो विकसक वापरत असलेल्या साधनांमध्ये सुधारणा करणे किंवा तुमच्या मित्रांना आवडणाऱ्या अॅपमधील बग दुरुस्त करणे. हे फक्त स्वप्न नाही – हेच ओपन सोर्स योगदान आहे!
-
-मला नेहमीच रोमांचक वाटते: तुम्ही शिकत असलेल्या प्रत्येक साधनाने – तुमचा कोड एडिटर, आपण एक्सप्लोर करणार असलेले फ्रेमवर्क, अगदी तुम्ही वाचत असलेला ब्राउझर – एखाद्या व्यक्तीने सुरुवात केली होती, ज्याने त्यांचे पहिले योगदान दिले होते. तुमच्या आवडत्या VS Code एक्सटेंशन तयार करणारा तो प्रतिभावान विकसक? ते एकदा नवशिक्या होते, ज्यांनी "create pull request" वर क्लिक केले होते, अगदी तुम्ही करणार आहात तसे.
+`git pull`
-आणि सर्वात सुंदर भाग म्हणजे: ओपन सोर्स समुदाय म्हणजे इंटरनेटचा सर्वात मोठा गट आलिंगन आहे. बहुतेक प्रकल्प नवशिक्यांसाठी सक्रियपणे शोध घेतात आणि "good first issue" टॅग असलेल्या समस्या ठेवतात, विशेषतः तुमच्यासारख्या लोकांसाठी! मेंटेनर्स नवीन योगदानकर्त्यांना पाहून खरोखर उत्साहित होतात कारण त्यांना त्यांच्या स्वतःच्या पहिल्या पायऱ्या आठवतात.
+## ओपन सोर्समध्ये योगदान देणे (तुमची प्रभाव टाकण्याची संधी!)
+
+तुम्ही काहीतरी असे करण्यासाठी तयार आहात जे तुमच्या मनाला पूर्णपणे उडवून देईल? 🤯 चला ओपन सोर्स प्रोजेक्ट्समध्ये योगदान देण्याबद्दल बोलूया – आणि हे तुमच्यासोबत शेअर करताना मला खूप उत्साह वाटतो!
+
+ही तुमची संधी आहे काहीतरी खरोखरच असामान्य गोष्टीचा भाग बनण्याची. कल्पना करा की तुम्ही दररोज लाखो डेव्हलपर्स वापरत असलेल्या टूल्समध्ये सुधारणा करत आहात किंवा तुमच्या मित्रांना आवडणाऱ्या अॅपमधील बग दुरुस्त करत आहात. हे फक्त स्वप्न नाही – ओपन सोर्स योगदान याबद्दलच आहे!
+
+मला प्रत्येक वेळी याचा विचार करताना रोमांच का येतो: तुम्ही शिकत असलेल्या प्रत्येक टूल – तुमचा कोड एडिटर, आपण एक्सप्लोर करणार असलेले फ्रेमवर्क, अगदी तुम्ही वाचत असलेला ब्राउझर – हे सर्व एखाद्या व्यक्तीने त्यांच्या पहिल्या योगदानासह सुरू केले. तुमच्या आवडत्या VS Code एक्सटेंशनचा तो प्रतिभावान डेव्हलपर? ते एकदा नवशिके होते ज्यांनी "create pull request" क्लिक केले होते, अगदी तुम्ही आता करणार आहात तसे.
+
+आणि सर्वात सुंदर भाग म्हणजे: ओपन सोर्स समुदाय म्हणजे इंटरनेटचा सर्वात मोठा गट आलिंगन आहे. बहुतेक प्रोजेक्ट्स नवशिक्यांसाठी सक्रियपणे शोध घेतात आणि "good first issue" टॅग असलेल्या इश्यूज विशेषतः तुमच्यासारख्या लोकांसाठी असतात! मेंटेनर्स नवीन योगदानकर्ते पाहून खरोखरच उत्साहित होतात कारण त्यांना स्वतःचे पहिले पाऊल आठवते.
+
+```mermaid
+flowchart TD
+ A[🔍 Explore GitHub] --> B[🏷️ Find "good first issue"]
+ B --> C[📖 Read Contributing Guidelines]
+ C --> D[🍴 Fork Repository]
+ D --> E[💻 Set Up Local Environment]
+ E --> F[🌿 Create Feature Branch]
+ F --> G[✨ Make Your Contribution]
+ G --> H[🧪 Test Your Changes]
+ H --> I[📝 Write Clear Commit]
+ I --> J[📤 Push & Create PR]
+ J --> K[💬 Engage with Feedback]
+ K --> L[🎉 Merged! You're a Contributor!]
+ L --> M[🌟 Find Next Issue]
+
+ style A fill:#e1f5fe
+ style L fill:#c8e6c9
+ style M fill:#fff59d
+```
-तुम्ही इथे फक्त कोड शिकत नाही – तुम्ही बिल्डर्सच्या जागतिक कुटुंबात सामील होण्यासाठी तयार होत आहात जे दररोज उठून विचार करतात "डिजिटल जग थोडं चांगलं कसं बनवता येईल?" क्लबमध्ये तुमचं स्वागत आहे! 🌟
+तुम्ही येथे कोड शिकत नाही आहात – तुम्ही बिल्डर्सच्या जागतिक कुटुंबात सामील होण्यासाठी तयार होत आहात जे दररोज उठून विचार करतात "डिजिटल जग थोडं चांगलं कसं बनवता येईल?" क्लबमध्ये स्वागत आहे! 🌟
-सर्वप्रथम, GitHub वर तुम्हाला आवडणाऱ्या आणि ज्यामध्ये तुम्हाला बदल करायचा आहे अशा रिपॉझिटरी (किंवा **repo**) शोधूया. तुम्हाला त्याची सामग्री तुमच्या मशीनवर कॉपी करायची असेल.
+प्रथम, GitHub वर तुम्हाला आवडणारा आणि ज्यामध्ये तुम्हाला बदल करायचा आहे असा रेपॉजिटरी (किंवा **repo**) शोधा. तुम्हाला त्याची सामग्री तुमच्या मशीनवर कॉपी करायची असेल.
-✅ 'नवशिक्या-अनुकूल' रिपॉझिटरी शोधण्याचा एक चांगला मार्ग म्हणजे [टॅग 'good-first-issue' ने शोधा](https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/).
+✅ 'नवशिक्यांसाठी अनुकूल' रेपो शोधण्याचा एक चांगला मार्ग म्हणजे [टॅग 'good-first-issue' द्वारे शोधा](https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/).
-
+
-कोड कॉपी करण्याचे अनेक मार्ग आहेत. एक मार्ग म्हणजे HTTPS, SSH किंवा GitHub CLI (कमांड लाइन इंटरफेस) वापरून रिपॉझिटरीची सामग्री "क्लोन" करणे.
+कोड कॉपी करण्याचे अनेक मार्ग आहेत. एक मार्ग म्हणजे HTTPS, SSH किंवा GitHub CLI (कमांड लाइन इंटरफेस) वापरून रेपॉजिटरीची सामग्री "क्लोन" करणे.
-तुमचा टर्मिनल उघडा आणि रिपॉझिटरी क्लोन करा:
+तुमचा टर्मिनल उघडा आणि रेपॉजिटरी क्लोन करा:
```bash
# Using HTTPS
git clone https://github.com/ProjectURL
@@ -463,70 +587,70 @@ git clone git@github.com:username/repository.git
gh repo clone username/repository
```
-प्रकल्पावर काम करण्यासाठी, योग्य फोल्डरमध्ये जा:
+प्रोजेक्टवर काम करण्यासाठी, योग्य फोल्डरमध्ये स्विच करा:
`cd ProjectURL`
-तुम्ही संपूर्ण प्रकल्प उघडू शकता:
+तुम्ही संपूर्ण प्रोजेक्ट उघडू शकता:
- **[GitHub Codespaces](https://github.com/features/codespaces)** - GitHub चा क्लाउड डेव्हलपमेंट वातावरण, ब्राउझरमध्ये VS Code सह
- **[GitHub Desktop](https://desktop.github.com/)** - Git ऑपरेशन्ससाठी GUI अॅप्लिकेशन
-- **[GitHub.dev](https://github.dev)** - कोणत्याही GitHub रिपॉझिटरीवर `.` की प्रेस करा आणि ब्राउझरमध्ये VS Code उघडा
+- **[GitHub.dev](https://github.dev)** - कोणत्याही GitHub रेपोवर `.` की प्रेस करा आणि ब्राउझरमध्ये VS Code उघडा
- **VS Code** GitHub Pull Requests एक्सटेंशनसह
शेवटी, तुम्ही कोड झिप केलेल्या फोल्डरमध्ये डाउनलोड करू शकता.
### GitHub बद्दल काही अधिक मनोरंजक गोष्टी
-तुम्ही GitHub वर कोणत्याही सार्वजनिक रिपॉझिटरीला स्टार, वॉच आणि/किंवा "fork" करू शकता. तुमच्या स्टार केलेल्या रिपॉझिटरी तुम्हाला टॉप-राइट ड्रॉप-डाउन मेनूमध्ये सापडतील. हे बुकमार्किंगसारखे आहे, पण कोडसाठी.
+तुम्ही GitHub वर कोणत्याही सार्वजनिक रेपॉजिटरीला स्टार, वॉच आणि/किंवा "fork" करू शकता. तुम्ही तुमच्या स्टार केलेल्या रेपॉजिटरी टॉप-राइट ड्रॉप-डाउन मेनूमध्ये शोधू शकता. हे बुकमार्किंगसारखे आहे, पण कोडसाठी.
-प्रकल्पांमध्ये एक इश्यू ट्रॅकर असतो, मुख्यतः GitHub वर "Issues" टॅबमध्ये, जोपर्यंत अन्यथा सूचित केले जात नाही, जिथे लोक प्रकल्पाशी संबंधित समस्यांवर चर्चा करतात. आणि Pull Requests टॅब हा आहे जिथे लोक प्रगतीपथावर असलेल्या बदलांवर चर्चा आणि पुनरावलोकन करतात.
+प्रोजेक्ट्समध्ये इश्यू ट्रॅकर असतो, मुख्यतः GitHub वर "Issues" टॅबमध्ये, जोपर्यंत वेगळे सांगितले नाही, जिथे लोक प्रोजेक्टशी संबंधित समस्यांवर चर्चा करतात. आणि Pull Requests टॅब ही जागा आहे जिथे लोक प्रगतीपथावर असलेल्या बदलांवर चर्चा आणि पुनरावलोकन करतात.
-प्रकल्पांमध्ये फोरम, मेलिंग लिस्ट किंवा Slack, Discord किंवा IRC सारख्या चॅट चॅनेलमध्ये चर्चा देखील असू शकते.
+प्रोजेक्ट्समध्ये फोरम, मेलिंग लिस्ट्स किंवा Slack, Discord किंवा IRC सारख्या चॅट चॅनेलमध्ये चर्चा असू शकते.
🔧 **आधुनिक GitHub वैशिष्ट्ये**:
-- **GitHub Discussions** - समुदाय चर्चेसाठी अंगभूत फोरम
+- **GitHub Discussions** - समुदाय संभाषणांसाठी अंगभूत फोरम
- **GitHub Sponsors** - मेंटेनर्सना आर्थिक मदत करा
- **Security tab** - असुरक्षितता अहवाल आणि सुरक्षा सल्लागार
-- **Actions tab** - स्वयंचलित वर्कफ्लो आणि CI/CD पाइपलाइन पहा
-- **Insights tab** - योगदानकर्ते, कमिट्स आणि प्रकल्पाच्या आरोग्याबद्दल विश्लेषण
-- **Projects tab** - GitHub चे अंगभूत प्रकल्प व्यवस्थापन साधने
+- **Actions tab** - स्वयंचलित वर्कफ्लो आणि CI/CD पाइपलाइन्स पहा
+- **Insights tab** - योगदानकर्ते, कमिट्स आणि प्रोजेक्टच्या आरोग्याबद्दल विश्लेषण
+- **Projects tab** - GitHub चे अंगभूत प्रोजेक्ट व्यवस्थापन टूल्स
-✅ तुमच्या नवीन GitHub रिपॉझिटरीचा शोध घ्या आणि काही गोष्टी करून पहा, जसे की सेटिंग्ज संपादित करणे, तुमच्या रिपॉझिटरीमध्ये माहिती जोडणे, प्रकल्प तयार करणे (जसे की Kanban बोर्ड), आणि GitHub Actions सेट करणे. तुम्ही खूप काही करू शकता!
+✅ तुमच्या नवीन GitHub रेपोभोवती एक नजर टाका आणि काही गोष्टी करून पहा, जसे की सेटिंग्ज संपादित करणे, तुमच्या रेपोमध्ये माहिती जोडणे, प्रोजेक्ट तयार करणे (जसे की Kanban बोर्ड), आणि ऑटोमेशनसाठी GitHub Actions सेट करणे. तुम्ही खूप काही करू शकता!
---
## 🚀 आव्हान
-ठीक आहे, आता तुमच्या नवीन GitHub कौशल्यांची चाचणी घेण्याची वेळ आली आहे! 🚀 हे आव्हान तुम्हाला सर्वकाही समजून घेण्यास मदत करेल:
+ठीक आहे, तुमच्या नवीन GitHub सुपरपॉवर्सची चाचणी घेण्याची वेळ आली आहे! 🚀 येथे एक आव्हान आहे जे सर्वकाही सर्वात समाधानकारक मार्गाने क्लिक करेल:
-तुमच्या मित्राला (किंवा त्या कुटुंबातील सदस्याला जो नेहमी विचारतो की तुम्ही या "कॉम्प्युटर गोष्टी"सह काय करत आहात) पकडा आणि एकत्र एक सहकार्यात्मक कोडिंग साहस सुरू करा! इथे खरी जादू घडते – एक प्रकल्प तयार करा, त्यांना ते fork करू द्या, काही शाखा तयार करा आणि तुम्ही प्रोफेशनल्ससारखे बदल मर्ज करा.
+तुमच्या मित्राला (किंवा त्या कुटुंबातील सदस्याला जो नेहमी विचारतो की तुम्ही या "कॉम्प्युटर गोष्टी"सह काय करत आहात) पकडा आणि एकत्र एक सहयोगी कोडिंग साहस सुरू करा! येथे खरी जादू घडते – एक प्रोजेक्ट तयार करा, त्यांना ते फोर्क करू द्या, काही शाखा तयार करा आणि तुम्ही प्रोफेशनल्ससारखे बदल मर्ज करा.
-मी खोटं बोलणार नाही – तुम्ही कदाचित हसाल (विशेषतः जेव्हा तुम्ही दोघे एकाच ओळीत बदल करण्याचा प्रयत्न कराल), कदाचित गोंधळून जाल, पण तुम्हाला नक्कीच काही आश्चर्यकारक "अरे वा!" क्षण मिळतील जे सर्व शिकण्यासारखे आहेत. शिवाय, कोणासोबत पहिला यशस्वी मर्ज शेअर करण्यामध्ये काहीतरी खास आहे – हे तुम्ही किती पुढे आला आहात याचा एक छोटासा उत्सव आहे!
+मी खोटं बोलणार नाही – तुम्ही कदाचित एखाद्या वेळी हसाल (विशेषतः जेव्हा तुम्ही दोघे एकाच ओळीत बदल करण्याचा प्रयत्न करता), कदाचित गोंधळून जाल, परंतु तुम्हाला नक्कीच ते अद्भुत "अरे वा!" क्षण मिळतील ज्यामुळे सर्व शिक्षण सार्थक वाटेल. शिवाय, एखाद्या दुसऱ्या व्यक्तीसोबत पहिला यशस्वी मर्ज शेअर करण्यामध्ये काहीतरी खास आहे – हे तुम्ही किती पुढे आला आहात याचा एक छोटासा उत्सव आहे!
-तुमच्याकडे अजून कोडिंग साथीदार नाही? काही हरकत नाही! GitHub समुदायात खूप स्वागतार्ह लोक आहेत ज्यांना नवीन असण्याचा अनुभव आहे. "good first issue" लेबल असलेल्या रिपॉझिटरी शोधा – ते मूलतः म्हणत आहेत "अरे नवशिक्या, आमच्यासोबत शिकायला या!" किती छान आहे ना?
+तुमच्याकडे अजून कोडिंग साथीदार नाही? काही हरकत नाही! GitHub समुदाय नवीन लोकांसाठी खूप स्वागतार्ह आहे ज्यांना नवीन असल्याचे कसे वाटते हे आठवते. "good first issue" लेबल असलेल्या रेपॉजिटरी शोधा – ते मूलतः म्हणत आहेत "अरे नवशिक्यांनो, आमच्यासोबत शिका!" हे किती छान आहे?
## पोस्ट-लेक्चर क्विझ
[पोस्ट-लेक्चर क्विझ](https://ff-quizzes.netlify.app/web/en/)
## पुनरावलोकन आणि शिकत राहा
-व्वा! 🎉 पाहा तुम्ही – तुम्ही GitHub मूलभूत गोष्टी जिंकल्या आहेत जसे की एकदम चॅम्पियन! जर तुमचा मेंदू सध्या थोडा भरलेला वाटत असेल, तर ते पूर्णपणे सामान्य आहे आणि प्रामाणिकपणे एक चांगले लक्षण आहे. तुम्ही नुकतेच असे साधने शिकली आहेत ज्यामुळे मला सुरुवातीला काही आठवडे लागले होते.
+व्वा! 🎉 पाहा तुम्ही – तुम्ही GitHub मूलभूत गोष्टी जिंकल्या आहेत जसे की एक पूर्ण चॅम्पियन! जर तुमचा मेंदू सध्या थोडा भरलेला वाटत असेल, तर ते पूर्णपणे सामान्य आहे आणि प्रामाणिकपणे एक चांगले लक्षण आहे. तुम्ही नुकतेच असे टूल्स शिकले आहेत ज्यामुळे मला सुरुवातीला काही आठवडे लागले.
-Git आणि GitHub खूप शक्तिशाली आहेत (म्हणजे, खरोखर शक्तिशाली), आणि मी ओळखत असलेल्या प्रत्येक विकसकाला – ज्यांना आता जादूगार वाटतात – ते सर्व क्लिक होण्यापूर्वी सराव करावा लागला आणि थोडे गोंधळले होते. तुम्ही हा धडा पूर्ण केला आहे याचा अर्थ तुम्ही विकसकाच्या टूलकिटमधील सर्वात महत्त्वाच्या साधनांमध्ये प्रभुत्व मिळवण्याच्या मार्गावर आहात.
+Git आणि GitHub खूप शक्तिशाली आहेत (म्हणजे, खरोखर शक्तिशाली), आणि मला माहित असलेल्या प्रत्येक डेव्हलपरला – ज्यांना आता जादूगार वाटतात – सराव करावा लागला आणि ते सर्व क्लिक होण्यापूर्वी थोडेसे गोंधळले. तुम्ही हा धडा पूर्ण केला आहे याचा अर्थ असा आहे की तुम्ही डेव्हलपरच्या टूलकिटमधील सर्वात महत्त्वाच्या टूल्समध्ये प्रभुत्व मिळवण्याच्या मार्गावर आहात.
-तुम्हाला सराव करण्यासाठी आणि आणखी उत्कृष्ट होण्यासाठी काही विलक्षण संसाधने येथे आहेत:
+तुम्हाला सराव करण्यात आणि आणखी आश्चर्यकारक बनवण्यात मदत करण्यासाठी येथे काही उत्कृष्ट संसाधने आहेत:
-- [ओपन सोर्स सॉफ्टवेअरमध्ये योगदान देण्याचा मार्गदर्शक](https://opensource.guide/how-to-contribute/#how-to-submit-a-contribution) – फरक करण्याचा तुमचा रोडमॅप
+- [ओपन सोर्स सॉफ्टवेअरमध्ये योगदान देण्याचा मार्गदर्शक](https://opensource.guide/how-to-contribute/#how-to-submit-a-contribution) – फरक करण्यासाठी तुमचा रोडमॅप
- [Git चीटशीट](https://training.github.com/downloads/github-git-cheat-sheet/) – जलद संदर्भासाठी हे सोबत ठेवा!
-आणि लक्षात ठेवा: सराव प्रगती करतो, परिपूर्णता नाही! तुम्ही Git आणि GitHub जितके अधिक वापराल, तेवढे अधिक नैसर्गिक होईल. GitHub ने काही आश्चर्यकारक इंटरएक्टिव कोर्सेस तयार केले आहेत जे तुम्हाला सुरक्षित वातावरणात सराव करू देतात:
+आणि लक्षात ठेवा: सराव प्रगती करतो, परिपूर्णता नाही! तुम्ही Git आणि GitHub जितके अधिक वापराल तितके अधिक नैसर्गिक वाटेल. GitHub ने काही आश्चर्यकारक इंटरएक्टिव कोर्सेस तयार केले आहेत जे तुम्हाला सुरक्षित वातावरणात सराव करू देतात:
- [GitHub ची ओळख](https://github.com/skills/introduction-to-github)
- [Markdown वापरून संवाद साधा](https://github.com/skills/communicate-using-markdown)
- [GitHub Pages](https://github.com/skills/github-pages)
- [मर्ज कॉन्फ्लिक्ट्स व्यवस्थापित करणे](https://github.com/skills/resolve-merge-conflicts)
-**साहसी वाटत आहे? या आधुनिक साधनांचा वापर करून पहा:**
-- [GitHub CLI दस्तऐवज](https://cli.github.com/manual/) – जेव्हा तुम्हाला कमांड-लाइन जादूगारासारखे वाटायचे असेल
+**साहसी वाटत आहे? या आधुनिक टूल्स तपासा:**
+- [GitHub CLI दस्तऐवज](https://cli.github.com/manual/) – जेव्हा तुम्हाला कमांड-लाइन जादूगारासारखे वाटते
- [GitHub Codespaces दस्तऐवज](https://docs.github.com/en/codespaces) – क्लाउडमध्ये कोड करा!
- [GitHub Actions दस्तऐवज](https://docs.github.com/en/actions) – सर्व गोष्टी स्वयंचलित करा
- [Git सर्वोत्तम पद्धती](https://www.atlassian.com/git/tutorials/comparing-workflows) – तुमच्या वर्कफ्लो गेमला स्तरावर आणा
@@ -535,21 +659,57 @@ Git आणि GitHub खूप शक्तिशाली आहेत (म्
Agent मोड वापरून खालील आव्हान पूर्ण करा:
-**वर्णन:** तुम्ही या धड्यात शिकलेल्या संपूर्ण GitHub वर्कफ्लोचे प्रदर्शन करणारा सहकार्यात्मक वेब डेव्हलपमेंट प्रकल्प तयार करा. हे आव्हान तुम्हाला रिपॉझिटरी तयार करणे, सहकार्यात्मक वैशिष्ट्ये आणि आधुनिक Git वर्कफ्लो वास्तविक-जगातील परिस्थितीत सराव करण्यास मदत करेल.
+**वर्णन:** तुम्ही या धड्यात शिकलेल्या संपूर्ण GitHub वर्कफ्लोचे प्रदर्शन करणारा सहयोगी वेब डेव्हलपमेंट प्रोजेक्ट तयार करा. हे आव्हान तुम्हाला रेपॉजिटरी तयार करणे, सहयोगी वैशिष्ट्ये आणि आधुनिक Git वर्कफ्लो वास्तविक-जगातील परिस्थितीत सराव करण्यास मदत करेल.
-**प्रॉम्प्ट:** "Web Development Resources" प्रकल्पासाठी एक नवीन सार्वजनिक GitHub रिपॉझिटरी तयार करा. रिपॉझिटरीमध्ये HTML, CSS, JavaScript इत्यादी श्रेणींनुसार उपयुक्त वेब डेव्हलपमेंट साधने आणि संसाधने सूचीबद्ध करणारी चांगल्या प्रकारे संरचित README.md फाइल समाविष्ट असावी. परवाना, योगदान मार्गदर्शक तत्त्वे आणि आचारसंहिता यासह योग्य समुदाय मानकांसह रिपॉझिटरी सेट करा. CSS संसाधने जोडण्यासाठी एक शाखा आणि JavaScript संसाधने जोडण्यासाठी दुसरी शाखा तयार करा. प्रत्येक शाखेत वर्णनात्मक कमिट संदेशांसह कमिट करा, नंतर बदल मुख्य शाखेत मर्ज करण्यासाठी Pull Requests तयार करा. Issues, Discussions सारख्या GitHub वैशिष्ट्यांना सक्षम करा आणि स्वयंचलित तपासणीसाठी GitHub Actions वर्कफ्लो सेट करा.
+**प्रॉम्प्ट:** "Web Development Resources" प्रोजेक्टसाठी एक नवीन सार्वजनिक GitHub रेपॉजिटरी तयार करा. रेपॉजिटरीमध्ये HTML, CSS, JavaScript इत्यादी श्रेणींनुसार उपयुक्त वेब डेव्हलपमेंट टूल्स आणि संसाधनांची यादी असलेली चांगल्या प्रकारे संरचित README.md फाइल समाविष्ट असावी. रेपॉजिटरीला योग्य समुदाय मानकांसह सेट करा ज्यामध्ये परवाना, योगदान मार्गदर्शक तत्त्वे आणि आचारसंहिता समाविष्ट आहे. CSS संसाधने जोडण्यासाठी एक शाखा आणि JavaScript संसाधने जोडण्यासाठी दुसरी शाखा तयार करा. प्रत्येक शाखेत वर्णनात्मक कमिट मेसेजसह कमिट्स करा, नंतर बदल मुख्य शाखेत मर्ज करण्यासाठी पुल रिक्वेस्ट तयार करा. इश्यूज, डिस्कशन्स सारख्या GitHub वैशिष्ट्यांना सक्षम करा आणि स्वयंचलित चेकसाठी मूलभूत GitHub Actions वर्कफ्लो सेट करा.
## असाइनमेंट
-तुमचे मिशन, तुम्ही स्वीकारण्याचा निर्णय घेतल्यास: GitHub Skills वर [GitHub ची ओळख](https://github.com/skills/introduction-to-github) कोर्स पूर्ण करा. हा इंटरएक्टिव कोर्स तुम्हाला शिकलेल्या प्रत्येक गोष्टीचा सराव सुरक्षित, मार्गदर्शित वातावरणात करू देईल. शिवाय, तुम्ही पूर्ण केल्यावर तुम्हाला एक छान बॅज मिळेल! 🏅
+तुमचे मिशन, तुम्ही स्वीकारण्यास तयार असल्यास: GitHub Skills वर [GitHub ची ओळख](https://github.com/skills/introduction-to-github) कोर्स पूर्ण करा. हा इंटरएक्टिव कोर्स तुम्हाला सुरक्षित, मार्गदर्शित वातावरणात तुम्ही शिकलेल्या प्रत्येक गोष्टीचा सराव करू देईल. शिवाय, तुम्ही पूर्ण केल्यावर तुम्हाला एक छान बॅज मिळेल! 🏅
**अधिक आव्हानांसाठी तयार आहात?**
- तुमच्या GitHub खात्यासाठी SSH प्रमाणीकरण सेट करा (आता पासवर्ड नाही!)
- तुमच्या दैनंदिन Git ऑपरेशन्ससाठी GitHub CLI वापरून पहा
-- GitHub Actions वर्कफ्लो असलेली रिपॉझिटरी तयार करा
-- GitHub Codespaces एक्सप्लोर करा आणि हीच रिपॉझिटरी क्लाउड-आधारित एडिटरमध्ये उघडा
+- GitHub Actions वर्कफ्लो असलेला रेपॉजिटरी तयार करा
+- GitHub Codespaces एक्सप्लोर करा आणि क्लाउड-बेस्ड एडिटरमध्ये हा रेपॉजिटरी उघडा
+
+---
-लक्षात ठेवा: प्रत्येक तज्ञ एकदा नवशिक्या होता. तुम्ही हे करू शकता! 💪
+## 🚀 तुमचा GitHub मास्टरी टाइमलाइन
+
+### ⚡ **पुढील 5 मिनिटांत तुम्ही काय करू शकता**
+- [ ] या रेपॉजिटरीला आणि तुम्हाला आवडणाऱ्या 3 इतर प्रोजेक्ट्सना स्टार करा
+- [ ] तुमच्या GitHub खात्यावर दोन-फॅक्टर प्रमाणीकरण सेट करा
+- [ ] तुमच्या पहिल्या रेपॉजिटरीसाठी एक साधा README तयार करा
+- [ ] तुम्हाला प्रेरणा देणाऱ्या 5 डेव्हलपर्सना फॉलो करा
+
+### 🎯 **तुम्ही या तासात काय साध्य करू शकता**
+- [ ] पोस्ट-लेसन क्विझ पूर्ण करा आणि तुमच्या GitHub प्रवासाचा विचार करा
+- [ ] SSH कीज सेट करा GitHub प्रमाणीकरणासाठी पासवर्डशिवाय
+- [ ] एक उत्कृष्ट कमिट मेसेजसह तुमचा पहिला अर्थपूर्ण कमिट तयार करा
+- [ ] GitHub च्या "Explore" टॅबमध्ये ट्रेंडिंग प्रोजेक्ट्स शोधा
+- [ ] रेपॉजिटरी फोर्क करण्याचा सराव करा आणि एक छोटा बदल करा
+
+### 📅 **तुमचा आठवडाभराचा GitHub साहस**
+- [ ] GitHub Skills कोर्सेस पूर्ण करा (GitHub ची ओळख, Markdown)
+- [ ] ओपन सोर्स प्रोजेक्टमध्ये तुमचा पहिला पुल रिक्वेस्ट करा
+- [ ] तुमचे काम दाखवण्यासाठी GitHub Pages साइट सेट करा
+- [ ] तुम्हाला आवडणाऱ्या प्रोजेक्ट्सवर GitHub डिस्कशन्समध्ये सामील व्हा
+- [ ] योग्य समुदाय मानकांसह रेपॉजिटरी तयार करा (README, License, इ.)
+- [ ] क्लाउड-बेस्ड डेव्हलपमेंटसाठी GitHub Codespaces वापरून पहा
+
+### 🌟 **तुमचा महिनाभराचा परिवर्तन**
+- [ ] 3 वेगवेगळ्या ओपन सोर्स प्रोजेक्ट्समध्ये योगदान द्या
+- [ ] GitHub वर नवीन व्यक्तीला मार्गदर्शन करा (पुढे जा!)
+- [ ] GitHub Actions सह स्वयंचलित वर्कफ्लो सेट करा
+- [ ] तुमच्या GitHub योगदानांचे प्रदर्शन करणारे पोर्टफोलिओ तयार करा
+- [ ] Hacktoberfest किंवा तत्सम समुदाय कार्यक्रमांमध्ये सहभागी व्हा
+- [ ] इतर लोक योगदान देत असलेल्या तुमच्या स्वतःच्या प्रोजेक्टचे मेंटेनर बना
+
+### 🎓 **GitHub मास्टरी अंतिम तपासणी**
+
+**तुम्ही किती पुढे आला आहात याचा उत्सव करा:**
+- GitHub वापरण्याबद्दल तुमची आवडती गोष्ट
---
diff --git a/translations/mr/1-getting-started-lessons/3-accessibility/README.md b/translations/mr/1-getting-started-lessons/3-accessibility/README.md
index 4a8d8a0fe0..2486f41c0b 100644
--- a/translations/mr/1-getting-started-lessons/3-accessibility/README.md
+++ b/translations/mr/1-getting-started-lessons/3-accessibility/README.md
@@ -1,45 +1,87 @@
# प्रवेशयोग्य वेबपृष्ठ तयार करणे
-
-> स्केच नोट [Tomomi Imura](https://twitter.com/girlie_mac) यांच्याकडून
+
+> स्केच नोट [Tomomi Imura](https://twitter.com/girlie_mac) यांनी तयार केले आहे
+
+```mermaid
+journey
+ title Your Accessibility Learning Adventure
+ section Foundation
+ Understanding Users: 5: You
+ Testing Tools: 4: You
+ POUR Principles: 5: You
+ section Build Skills
+ Semantic HTML: 4: You
+ Visual Design: 5: You
+ ARIA Techniques: 4: You
+ section Master Practice
+ Keyboard Navigation: 5: You
+ Form Accessibility: 4: You
+ Real-world Testing: 5: You
+```
## व्याख्यानपूर्व प्रश्नमंजुषा
[व्याख्यानपूर्व प्रश्नमंजुषा](https://ff-quizzes.netlify.app/web/)
-> वेबची ताकद त्याच्या सार्वत्रिकतेत आहे. अपंगत्व असलेल्या प्रत्येक व्यक्तीला प्रवेश मिळणे ही एक अत्यावश्यक बाब आहे.
+> वेबची ताकद त्याच्या सार्वत्रिकतेत आहे. अपंगत्व असलेल्या प्रत्येक व्यक्तीला प्रवेश मिळणे ही एक महत्त्वाची बाब आहे.
>
> \- सर टिमोथी बर्नर्स-ली, W3C संचालक आणि वर्ल्ड वाइड वेबचे शोधक
-हे तुम्हाला आश्चर्यचकित करू शकते: जेव्हा तुम्ही प्रवेशयोग्य वेबसाइट्स तयार करता, तेव्हा तुम्ही फक्त अपंगत्व असलेल्या लोकांना मदत करत नाही—तुम्ही प्रत्यक्षात वेब सर्वांसाठी चांगले बनवत आहात!
+हे ऐकून तुम्हाला आश्चर्य वाटेल: जेव्हा तुम्ही प्रवेशयोग्य वेबसाइट्स तयार करता, तेव्हा तुम्ही फक्त अपंग व्यक्तींना मदत करत नाही—तुम्ही प्रत्यक्षात वेब सर्वांसाठी चांगले बनवत आहात!
-तुम्ही कधी रस्त्याच्या कोपऱ्यांवर असलेल्या 'कर्ब कट्स' पाहिल्या आहेत का? त्या मूळतः व्हीलचेअरसाठी डिझाइन केल्या गेल्या होत्या, पण आता त्या स्ट्रोलर्स असलेल्या लोकांना, डिलिव्हरी कामगारांना, प्रवाशांना आणि सायकलस्वारांनाही मदत करतात. प्रवेशयोग्य वेब डिझाइन नेमके असेच कार्य करते—ज्या उपाययोजना एका गटाला मदत करतात त्या अनेकदा सर्वांना फायदेशीर ठरतात. खूप छान, नाही का?
+तुम्ही कधी रस्त्याच्या कोपऱ्यावर असलेल्या उतारांवर लक्ष दिले आहे का? ते मूळतः व्हीलचेअरसाठी डिझाइन केले गेले होते, परंतु आता ते बेबी स्ट्रोलर, डिलिव्हरी कामगार, प्रवासी आणि सायकलस्वार यांना देखील मदत करतात. प्रवेशयोग्य वेब डिझाइन नेमके असेच कार्य करते—ज्या उपाययोजना एका गटाला मदत करतात त्या अनेकांना फायदेशीर ठरतात. खूप छान, नाही का?
या धड्यात, आपण अशा वेबसाइट्स तयार करण्याचा शोध घेणार आहोत ज्या प्रत्येकासाठी कार्य करतात, मग ते वेब कसेही ब्राउझ करत असले तरी. तुम्ही वेब मानकांमध्ये आधीच समाविष्ट असलेल्या व्यावहारिक तंत्रांचा शोध घेणार आहात, चाचणी साधनांसह प्रत्यक्ष अनुभव घेणार आहात आणि प्रवेशयोग्यता तुमच्या साइट्स सर्व वापरकर्त्यांसाठी अधिक वापरण्यायोग्य कशी बनवते ते पाहणार आहात.
या धड्याच्या शेवटी, तुम्हाला प्रवेशयोग्यता तुमच्या विकास कार्यप्रवाहाचा नैसर्गिक भाग बनवण्याचा आत्मविश्वास मिळेल. विचारपूर्वक डिझाइन निवडी वेबला अब्जावधी वापरकर्त्यांसाठी कसे खुले करू शकतात हे शोधण्यासाठी तयार आहात? चला सुरुवात करूया!
+```mermaid
+mindmap
+ root((Web Accessibility))
+ Users
+ Screen readers
+ Keyboard navigation
+ Voice control
+ Magnification
+ Technologies
+ HTML semantics
+ ARIA attributes
+ CSS focus indicators
+ Keyboard events
+ Benefits
+ Wider audience
+ Better SEO
+ Legal compliance
+ Universal design
+ Testing
+ Automated tools
+ Manual testing
+ User feedback
+ Real assistive tech
+```
+
> तुम्ही हा धडा [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/accessibility/?WT.mc_id=academic-77807-sagibbon) वर घेऊ शकता!
## सहाय्यक तंत्रज्ञान समजून घेणे
-कोडिंगमध्ये उडी मारण्यापूर्वी, वेगवेगळ्या क्षमतेच्या लोक वेबचा प्रत्यक्षात कसा अनुभव घेतात हे समजून घेण्यासाठी थोडा वेळ घ्या. हे फक्त सिद्धांत नाही—या वास्तविक नेव्हिगेशन पद्धती समजून घेणे तुम्हाला खूप चांगला विकसक बनवेल!
+कोडिंगमध्ये उडी घेण्यापूर्वी, वेगवेगळ्या क्षमतेच्या लोक वेबचा प्रत्यक्षात कसा अनुभव घेतात हे समजून घेण्यासाठी थोडा वेळ घ्या. हे फक्त सिद्धांत नाही—या वास्तविक-जगातील नेव्हिगेशन पद्धती समजून घेणे तुम्हाला खूप चांगला विकसक बनवेल!
-सहाय्यक तंत्रज्ञान हे आश्चर्यकारक साधने आहेत जी अपंगत्व असलेल्या लोकांना वेबसाइट्सशी संवाद साधण्यास मदत करतात ज्यामुळे तुम्हाला आश्चर्य वाटेल. एकदा तुम्हाला या तंत्रज्ञानाचा उपयोग कसा करायचा हे समजले की, प्रवेशयोग्य वेब अनुभव तयार करणे अधिक अंतर्ज्ञानी होते. हे एखाद्याच्या डोळ्यांतून तुमचा कोड पाहण्यास शिकण्यासारखे आहे.
+सहाय्यक तंत्रज्ञान हे आश्चर्यकारक साधने आहेत जी अपंगत्व असलेल्या लोकांना वेबसाइट्सशी संवाद साधण्यास मदत करतात ज्यामुळे तुम्हाला आश्चर्य वाटेल. एकदा तुम्हाला या तंत्रज्ञानाचा उपयोग कसा करायचा हे समजले की, प्रवेशयोग्य वेब अनुभव तयार करणे अधिक अंतर्ज्ञानी होते. हे एखाद्याच्या दृष्टीकोनातून तुमचा कोड पाहण्यास शिकण्यासारखे आहे.
### स्क्रीन रीडर्स
-[स्क्रीन रीडर्स](https://en.wikipedia.org/wiki/Screen_reader) ही अत्यंत प्रगत तंत्रज्ञानाची साधने आहेत जी डिजिटल मजकूराचे भाषण किंवा ब्रेल आउटपुटमध्ये रूपांतर करतात. जरी ते प्रामुख्याने व्हिज्युअल अपंगत्व असलेल्या लोकांसाठी वापरले जात असले तरी, ते डिस्लेक्सिया सारख्या शिकण्याच्या अडचणी असलेल्या वापरकर्त्यांसाठी देखील खूप उपयुक्त आहेत.
+[स्क्रीन रीडर्स](https://en.wikipedia.org/wiki/Screen_reader) ही अत्यंत प्रगत तंत्रज्ञानाची साधने आहेत जी डिजिटल मजकूराचे भाषण किंवा ब्रेल आउटपुटमध्ये रूपांतर करतात. जरी ते प्रामुख्याने दृष्टिहीन लोक वापरतात, तरी ते डिस्लेक्सिया सारख्या शिकण्याच्या अडचणी असलेल्या वापरकर्त्यांसाठी देखील खूप उपयुक्त आहेत.
-मी स्क्रीन रीडरला एखाद्या खूप हुशार कथाकथनकारासारखे समजतो जो तुम्हाला पुस्तक वाचून दाखवतो. ते मजकूर तार्किक क्रमाने मोठ्याने वाचते, "बटण" किंवा "लिंक" सारख्या संवादात्मक घटकांची घोषणा करते आणि पृष्ठाभोवती उडी मारण्यासाठी कीबोर्ड शॉर्टकट प्रदान करते. पण गोष्ट अशी आहे—स्क्रीन रीडर्स त्यांचे जादू फक्त तेव्हा करू शकतात जेव्हा आपण योग्य संरचना आणि अर्थपूर्ण सामग्रीसह वेबसाइट्स तयार करतो. येथे तुम्ही विकसक म्हणून मदत करू शकता!
+मी स्क्रीन रीडरला एखाद्या खूप हुशार कथाकथनकारासारखे समजतो जो तुम्हाला पुस्तक वाचून दाखवतो. तो मजकूर तार्किक क्रमाने मोठ्याने वाचतो, "बटण" किंवा "लिंक" सारख्या परस्परसंवादी घटकांची घोषणा करतो आणि पृष्ठाभोवती उडी मारण्यासाठी कीबोर्ड शॉर्टकट प्रदान करतो. पण गोष्ट अशी आहे—स्क्रीन रीडर्स त्यांचे जादू फक्त तेव्हा करू शकतात जेव्हा आपण योग्य रचना आणि अर्थपूर्ण सामग्रीसह वेबसाइट्स तयार करतो. येथे तुम्ही विकसक म्हणून मदत करू शकता!
**प्लॅटफॉर्मवर लोकप्रिय स्क्रीन रीडर्स:**
- **Windows**: [NVDA](https://www.nvaccess.org/about-nvda/) (फ्री आणि सर्वाधिक लोकप्रिय), [JAWS](https://webaim.org/articles/jaws/), [Narrator](https://support.microsoft.com/windows/complete-guide-to-narrator-e4397a0d-ef4f-b386-d8ae-c172f109bdb1/?WT.mc_id=academic-77807-sagibbon) (इन-बिल्ट)
@@ -49,79 +91,87 @@ CO_OP_TRANSLATOR_METADATA:
**स्क्रीन रीडर्स वेब सामग्री कशी नेव्हिगेट करतात:**
-स्क्रीन रीडर्स अनुभवी वापरकर्त्यांसाठी ब्राउझिंग कार्यक्षम बनवणाऱ्या अनेक नेव्हिगेशन पद्धती प्रदान करतात:
-- **क्रमिक वाचन**: शीर्ष ते तळापर्यंत सामग्री वाचते, जसे पुस्तकाचे अनुसरण करणे
+स्क्रीन रीडर्स अनेक नेव्हिगेशन पद्धती प्रदान करतात ज्यामुळे अनुभवी वापरकर्त्यांसाठी ब्राउझिंग अधिक कार्यक्षम होते:
+- **क्रमिक वाचन**: मजकूर वरून खाली वाचतो, जसे पुस्तक वाचणे
- **लँडमार्क नेव्हिगेशन**: पृष्ठ विभागांमध्ये उडी मारणे (हेडर, नेव्ह, मुख्य, फूटर)
-- **हेडिंग नेव्हिगेशन**: पृष्ठ संरचना समजण्यासाठी हेडिंग्जमध्ये उडी मारणे
-- **लिंक यादी**: जलद प्रवेशासाठी सर्व लिंकची यादी तयार करणे
-- **फॉर्म नियंत्रण**: इनपुट फील्ड आणि बटणांमध्ये थेट नेव्हिगेट करणे
+- **हेडिंग नेव्हिगेशन**: हेडिंग्समध्ये उडी मारून पृष्ठ रचना समजून घेणे
+- **लिंक यादी**: सर्व लिंकची यादी तयार करणे
+- **फॉर्म कंट्रोल्स**: इनपुट फील्ड्स आणि बटणांमध्ये थेट नेव्हिगेट करणे
-> 💡 **माझ्या मनाला धक्का देणारी गोष्ट**: 68% स्क्रीन रीडर वापरकर्ते मुख्यतः हेडिंग्जद्वारे नेव्हिगेट करतात ([WebAIM सर्वेक्षण](https://webaim.org/projects/screenreadersurvey9/#finding)). याचा अर्थ तुमची हेडिंग संरचना वापरकर्त्यांसाठी रोडमॅपसारखी आहे—जेव्हा तुम्ही ती योग्य प्रकारे तयार करता, तेव्हा तुम्ही लोकांना तुमच्या सामग्रीभोवती जलद मार्ग शोधण्यात मदत करत आहात!
+> 💡 **माझ्या मनाला आश्चर्यचकित करणारी गोष्ट**: 68% स्क्रीन रीडर वापरकर्ते मुख्यतः हेडिंग्सद्वारे नेव्हिगेट करतात ([WebAIM सर्वेक्षण](https://webaim.org/projects/screenreadersurvey9/#finding)). याचा अर्थ तुमची हेडिंग रचना वापरकर्त्यांसाठी रोडमॅपसारखी आहे—तुम्ही ती योग्य प्रकारे तयार करता तेव्हा तुम्ही लोकांना तुमच्या सामग्रीभोवती जलद मार्ग शोधण्यात मदत करत आहात!
### तुमचा चाचणी कार्यप्रवाह तयार करणे
-चांगली बातमी आहे—प्रभावी प्रवेशयोग्यता चाचणी करणे कठीण असण्याची गरज नाही! तुम्हाला स्वयंचलित साधने (ती स्पष्ट समस्या शोधण्यात उत्कृष्ट आहेत) काही प्रत्यक्ष चाचणीसह एकत्र करायची असतील. येथे एक प्रणालीबद्ध दृष्टिकोन आहे जो मी शोधलेला आहे जो सर्वाधिक समस्या पकडतो आणि तुमचा संपूर्ण दिवस वाया घालवत नाही:
+चांगली बातमी आहे—प्रभावी प्रवेशयोग्यता चाचणी करणे अवघड असण्याची गरज नाही! तुम्हाला स्वयंचलित साधने (ती स्पष्ट समस्या शोधण्यात उत्कृष्ट आहेत) आणि काही प्रत्यक्ष चाचणी यांचे संयोजन करायचे आहे. येथे एक प्रणालीबद्ध दृष्टिकोन आहे ज्यामुळे सर्वाधिक समस्या सापडतात आणि तुमचा संपूर्ण दिवस खर्च होत नाही:
**आवश्यक मॅन्युअल चाचणी कार्यप्रवाह:**
```mermaid
-graph TD
- A[Start Testing] --> B{Keyboard Navigation}
+flowchart TD
+ A[🚀 Start Testing] --> B{⌨️ Keyboard Navigation}
B --> C[Tab through all interactive elements]
- C --> D{Screen Reader Testing}
+ C --> D{🎧 Screen Reader Testing}
D --> E[Test with NVDA/VoiceOver]
- E --> F{Zoom Testing}
+ E --> F{🔍 Zoom Testing}
F --> G[Zoom to 200% and test functionality]
- G --> H{Color/Contrast Check}
+ G --> H{🎨 Color/Contrast Check}
H --> I[Verify all text meets contrast ratios]
- I --> J{Focus Management}
+ I --> J{👁️ Focus Management}
J --> K[Ensure focus indicators are visible]
- K --> L[Testing Complete]
+ K --> L[✅ Testing Complete]
+
+ style A fill:#e3f2fd
+ style L fill:#e8f5e8
+ style B fill:#fff3e0
+ style D fill:#f3e5f5
+ style F fill:#e0f2f1
+ style H fill:#fce4ec
+ style J fill:#e8eaf6
```
-**चाचणी तपासणीची चरण-दर-चरण यादी:**
+**चाचणी तपासणी सूची चरण-दर-चरण:**
1. **कीबोर्ड नेव्हिगेशन**: फक्त Tab, Shift+Tab, Enter, Space आणि Arrow की वापरा
2. **स्क्रीन रीडर चाचणी**: NVDA, VoiceOver किंवा Narrator सक्षम करा आणि डोळे बंद करून नेव्हिगेट करा
3. **झूम चाचणी**: 200% आणि 400% झूम स्तरांवर चाचणी करा
-4. **रंग विरोधाभास सत्यापन**: सर्व मजकूर आणि UI घटक तपासा
-5. **फोकस इंडिकेटर चाचणी**: सर्व संवादात्मक घटकांमध्ये दृश्यमान फोकस स्टेट्स आहेत याची खात्री करा
+4. **रंग विरोधाभास पडताळणी**: सर्व मजकूर आणि UI घटक तपासा
+5. **फोकस इंडिकेटर चाचणी**: सर्व परस्परसंवादी घटकांमध्ये दृश्यमान फोकस स्टेट्स आहेत याची खात्री करा
✅ **Lighthouse सह प्रारंभ करा**: तुमच्या ब्राउझरचे DevTools उघडा, Lighthouse प्रवेशयोग्यता ऑडिट चालवा आणि नंतर तुमच्या मॅन्युअल चाचणी फोकस क्षेत्रांचे मार्गदर्शन करण्यासाठी परिणाम वापरा.
### झूम आणि वाढीव साधने
-तुम्ही कधी तुमच्या फोनवर मजकूर खूप लहान असल्यावर झूम करण्यासाठी पिंच केले आहे का, किंवा उज्ज्वल सूर्यप्रकाशात तुमच्या लॅपटॉप स्क्रीनवर डोळे मिचकावले आहेत का? अनेक वापरकर्ते दररोज सामग्री वाचनीय बनवण्यासाठी वाढीव साधनांवर अवलंबून असतात. यामध्ये कमी दृष्टी असलेले लोक, वृद्ध व्यक्ती आणि कधीही बाहेर वेबसाइट वाचण्याचा प्रयत्न करणारे कोणीही समाविष्ट आहे.
+तुम्ही कधी तुमच्या फोनवर मजकूर खूप लहान असल्यास झूम करण्यासाठी पिंच केले आहे किंवा उज्ज्वल सूर्यप्रकाशात तुमच्या लॅपटॉप स्क्रीनवर डोळे मिचकावले आहेत का? अनेक वापरकर्ते दररोज सामग्री वाचनीय बनवण्यासाठी वाढीव साधनांवर अवलंबून असतात. यामध्ये कमी दृष्टी असलेले लोक, वृद्ध व्यक्ती आणि कधीही बाहेर वेबसाइट वाचण्याचा प्रयत्न करणारे कोणीही समाविष्ट आहे.
-आधुनिक झूम तंत्रज्ञान फक्त गोष्टी मोठ्या करण्यापलीकडे विकसित झाले आहे. ही साधने कशी कार्य करतात हे समजून घेणे तुम्हाला प्रतिसादात्मक डिझाइन तयार करण्यात मदत करेल जे कोणत्याही वाढीव स्तरावर कार्यक्षम आणि आकर्षक राहील.
+आधुनिक झूम तंत्रज्ञान फक्त गोष्टी मोठ्या करण्यापेक्षा पुढे गेले आहे. ही साधने कशी कार्य करतात हे समजून घेणे तुम्हाला प्रतिसादात्मक डिझाइन तयार करण्यात मदत करेल जे कोणत्याही वाढीव स्तरावर कार्यक्षम आणि आकर्षक राहील.
**आधुनिक ब्राउझर झूम क्षमता:**
- **पृष्ठ झूम**: सर्व सामग्री प्रमाणानुसार स्केल करते (मजकूर, प्रतिमा, लेआउट) - ही प्राधान्य दिलेली पद्धत आहे
-- **फक्त मजकूर झूम**: मूळ लेआउट राखून फॉन्ट आकार वाढवते
-- **पिंच-टू-झूम**: तात्पुरत्या वाढीसाठी मोबाइल इशारा समर्थन
+- **फक्त मजकूर झूम**: मूळ लेआउट राखून फॉन्ट आकार वाढवतो
+- **पिंच-टू-झूम**: तात्पुरत्या वाढीसाठी मोबाइल गेस्चर समर्थन
- **ब्राउझर समर्थन**: सर्व आधुनिक ब्राउझर 500% पर्यंत झूम समर्थन देतात ज्यामुळे कार्यक्षमता बिघडत नाही
**विशेषीकृत वाढीव सॉफ्टवेअर:**
- **Windows**: [Magnifier](https://support.microsoft.com/windows/use-magnifier-to-make-things-on-the-screen-easier-to-see-414948ba-8b1c-d3bd-8615-0e5e32204198) (इन-बिल्ट), [ZoomText](https://www.freedomscientific.com/training/zoomtext/getting-started/)
- **macOS/iOS**: [Zoom](https://www.apple.com/accessibility/mac/vision/) (इन-बिल्ट आणि प्रगत वैशिष्ट्यांसह)
-> ⚠️ **डिझाइन विचार**: WCAG आवश्यक आहे की सामग्री 200% पर्यंत झूम केल्यावर कार्यक्षम राहावी. या स्तरावर, आडव्या स्क्रोलिंग किमान असावी आणि सर्व संवादात्मक घटक प्रवेशयोग्य राहावेत.
+> ⚠️ **डिझाइन विचार**: WCAG ची आवश्यकता आहे की सामग्री 200% पर्यंत झूम केल्यावर कार्यक्षम राहावी. या स्तरावर, आडव्या स्क्रोलिंग किमान असावी आणि सर्व परस्परसंवादी घटक प्रवेशयोग्य राहावेत.
-✅ **तुमचा प्रतिसादात्मक डिझाइन तपासा**: तुमचा ब्राउझर 200% आणि 400% पर्यंत झूम करा. तुमचा लेआउट सुंदरपणे जुळतो का? तुम्ही अजूनही सर्व कार्यक्षमतेपर्यंत अतिरिक्त स्क्रोलिंगशिवाय पोहोचू शकता का?
+✅ **तुमचा प्रतिसादात्मक डिझाइन तपासा**: तुमचा ब्राउझर 200% आणि 400% झूम करा. तुमचा लेआउट सुंदरपणे जुळतो का? तुम्ही अजूनही अत्यधिक स्क्रोलिंगशिवाय सर्व कार्यक्षमता वापरू शकता का?
## आधुनिक प्रवेशयोग्यता चाचणी साधने
-आता तुम्हाला सहाय्यक तंत्रज्ञानासह लोक वेब कसे नेव्हिगेट करतात हे समजले आहे, चला त्या साधनांचा शोध घेऊया जे तुम्हाला प्रवेशयोग्य वेबसाइट्स तयार करण्यात आणि चाचणी करण्यात मदत करतात.
+आता तुम्हाला सहाय्यक तंत्रज्ञानासह लोक वेब कसे नेव्हिगेट करतात हे समजले आहे, चला तुम्हाला प्रवेशयोग्य वेबसाइट्स तयार करण्यात आणि चाचणी घेण्यात मदत करणारी साधने शोधूया.
-याचा विचार करा: स्वयंचलित साधने स्पष्ट समस्या (जसे की गहाळ alt मजकूर) पकडण्यात उत्कृष्ट आहेत, तर प्रत्यक्ष चाचणी तुम्हाला तुमची साइट वास्तविक जगात वापरण्यास चांगली वाटते याची खात्री करण्यास मदत करते. एकत्रितपणे, ते तुम्हाला तुमच्या साइट्स सर्वांसाठी कार्यक्षम आहेत याचा आत्मविश्वास देतात.
+याचा विचार करा: स्वयंचलित साधने स्पष्ट समस्या (जसे की गहाळ alt मजकूर) शोधण्यात उत्कृष्ट आहेत, तर प्रत्यक्ष चाचणी तुम्हाला तुमची साइट वास्तविक जगात वापरण्यास चांगली वाटते याची खात्री करण्यास मदत करते. एकत्रितपणे, ते तुम्हाला तुमच्या साइट्स सर्वांसाठी कार्यक्षम आहेत याचा आत्मविश्वास देतात.
### रंग विरोधाभास चाचणी
-चांगली बातमी: रंग विरोधाभास ही सर्वात सामान्य प्रवेशयोग्यता समस्या आहे, पण ती सोडवणे सर्वात सोपे आहे. चांगला विरोधाभास सर्वांना फायदेशीर ठरतो—दृष्टीदोष असलेल्या वापरकर्त्यांपासून ते समुद्रकिनारी फोन वाचण्याचा प्रयत्न करणाऱ्या लोकांपर्यंत.
+चांगली बातमी: रंग विरोधाभास ही सर्वात सामान्य प्रवेशयोग्यता समस्या आहे, परंतु ती सोडवणे सर्वात सोपे आहे. चांगला विरोधाभास सर्वांना फायदेशीर ठरतो—दृष्टीदोष असलेल्या वापरकर्त्यांपासून ते समुद्रकिनारी फोन वाचण्याचा प्रयत्न करणाऱ्या लोकांपर्यंत.
**WCAG विरोधाभास आवश्यकता:**
| मजकूर प्रकार | WCAG AA (किमान) | WCAG AAA (वाढीव) |
-|-----------|-------------------|---------------------|
+|--------------|------------------|------------------|
| **सामान्य मजकूर** (18pt पेक्षा कमी) | 4.5:1 विरोधाभास गुणोत्तर | 7:1 विरोधाभास गुणोत्तर |
| **मोठा मजकूर** (18pt+ किंवा 14pt+ ठळक) | 3:1 विरोधाभास गुणोत्तर | 4.5:1 विरोधाभास गुणोत्तर |
| **UI घटक** (बटणे, फॉर्म बॉर्डर्स) | 3:1 विरोधाभास गुणोत्तर | 3:1 विरोधाभास गुणोत्तर |
@@ -136,16 +186,16 @@ graph TD
### सर्वसमावेशक प्रवेशयोग्यता ऑडिटिंग
-सर्वात प्रभावी प्रवेशयोग्यता चाचणी अनेक दृष्टिकोन एकत्र करते. एकही साधन सर्वकाही पकडत नाही, त्यामुळे विविध पद्धतींसह चाचणी दिनचर्या तयार करणे व्यापक कव्हरेज सुनिश्चित करते.
+सर्वात प्रभावी प्रवेशयोग्यता चाचणी अनेक दृष्टिकोन एकत्रित करते. एकही साधन सर्वकाही पकडत नाही, त्यामुळे विविध पद्धतींसह चाचणी दिनचर्या तयार करणे व्यापक कव्हरेज सुनिश्चित करते.
**ब्राउझर-आधारित चाचणी (DevTools मध्ये समाविष्ट):**
- **Chrome/Edge**: Lighthouse प्रवेशयोग्यता ऑडिट + प्रवेशयोग्यता पॅनेल
-- **Firefox**: प्रवेशयोग्यता निरीक्षक तपशीलवार ट्री दृश्यासह
+- **Firefox**: तपशीलवार ट्री व्ह्यूसह प्रवेशयोग्यता निरीक्षक
- **Safari**: Web Inspector मधील ऑडिट टॅब VoiceOver सिम्युलेशनसह
**व्यावसायिक चाचणी विस्तार:**
- [axe DevTools](https://www.deque.com/axe/devtools/) - उद्योग-मानक स्वयंचलित चाचणी
-- [WAVE](https://wave.webaim.org/extension/) - त्रुटी हायलाइटिंगसह दृश्य अभिप्राय
+- [WAVE](https://wave.webaim.org/extension/) - त्रुटी हायलाइटिंगसह व्हिज्युअल अभिप्राय
- [Accessibility Insights](https://accessibilityinsights.io/) - Microsoft चे सर्वसमावेशक चाचणी संच
**कमांड-लाइन आणि CI/CD एकत्रीकरण:**
@@ -153,35 +203,81 @@ graph TD
- [Pa11y](https://pa11y.org/) - कमांड-लाइन प्रवेशयोग्यता चाचणी साधन
- [Lighthouse CI](https://github.com/GoogleChrome/lighthouse-ci) - स्वयंचलित प्रवेशयोग्यता स्कोअरिंग
-> 🎯 **चाचणी लक्ष्य**: 95+ चा Lighthouse प्रवेशयोग्यता स्कोअर तुमचा आधार म्हणून ठेवा. लक्षात ठेवा, स्वयंचलित साधने फक्त 30-40% प्रवेशयोग्यता समस्या पकडतात—मॅन्युअल चाचणी अजूनही आवश्यक आहे!
+> 🎯 **चाचणी उद्दिष्ट**: 95+ च्या Lighthouse प्रवेशयोग्यता स्कोअरला तुमचा आधार म्हणून लक्ष्य करा. लक्षात ठेवा, स्वयंचलित साधने फक्त 30-40% प्रवेशयोग्यता समस्या शोधतात—मॅन्युअल चाचणी अजूनही आवश्यक आहे!
+
+### 🧠 **चाचणी कौशल्य तपासणी: समस्या शोधण्यासाठी तयार आहात?**
+
+**चला पाहूया की तुम्ही प्रवेशयोग्यता चाचणीबद्दल कसे वाटत आहात:**
+- सध्या तुम्हाला कोणती चाचणी पद्धत सर्वात सोपी वाटते?
+- तुम्ही संपूर्ण दिवसासाठी फक्त कीबोर्ड-नेव्हिगेशन वापरण्याची कल्पना करू शकता का?
+- तुम्ही ऑनलाइन वैयक्तिकरित्या अनुभवलेली एक प्रवेशयोग्यता अडथळा कोणती आहे?
+
+```mermaid
+pie title "Accessibility Issues Caught by Different Methods"
+ "Automated Tools" : 35
+ "Manual Testing" : 40
+ "User Feedback" : 25
+```
+
+> **आत्मविश्वास वाढवणारा**: व्यावसायिक प्रवेशयोग्यता परीक्षक याच पद्धतींचा वापर करतात. तुम्ही उद्योग-मानक पद्धती शिकत आहात!
## सुरुवातीपासून प्रवेशयोग्यता तयार करणे
-प्रवेशयोग्यता यशाची गुरुकिल्ली म्हणजे पहिल्या दिवसापासून ती तुमच्या पाया मध्ये समाविष्ट करणे. मला माहित आहे की "मी नंतर प्रवेशयोग्यता जोडेन" असे विचार करणे मोहक आहे, पण ते आधीच बांधलेल्या घरात रॅम्प जोडण्याचा प्रयत्न करण्यासारखे आहे. शक्य आहे? होय. सोपे? फारसे नाही.
+प्रवेशयोग्यता यशस्वी होण्याची गुरुकिल्ली म्हणजे पहिल्या दिवसापासून ती तुमच्या पाया मध्ये समाविष्ट करणे. मला माहित आहे की "मी नंतर प्रवेशयोग्यता जोडेन" असे विचार करणे मोहक आहे, परंतु ते आधीच बांधलेल्या घरात रॅम्प जोडण्याचा प्रयत्न करण्यासारखे आहे. शक्य आहे? होय. सोपे? नाही.
-प्रवेशयोग्यतेचा विचार घराच्या नियोजनासारखा करा—तुमच्या सुरुवातीच्या वास्तुशिल्प योजनांमध्ये व्हीलचेअर प्रवेशयोग्यता समाविष्ट करणे खूप सोपे आहे जे नंतर सर्वकाही बदलण्यापेक्षा.
+प्रवेशयोग्यतेचा विचार घराच्या नियोजनासारखा करा—तुमच्या सुरुवातीच्या वास्तुशास्त्रीय योजनांमध्ये व्हीलचेअर प्रवेशयोग्यता समाविष्ट करणे खूप सोपे आहे, नंतर सर्वकाही बदलणे कठीण आहे.
### POUR तत्त्वे: तुमचा प्रवेशयोग्यता पाया
-वेब सामग्री प्रवेशयोग्यता मार्गदर्शक तत्त्वे (WCAG) चार मूलभूत तत्त्वांवर आधारित आहेत जी POUR असे लिहितात. काळजी करू नका—ही कठोर शैक्षणिक संकल्पना नाहीत! ती प्रत्यक्षात सर्वांसाठी कार्य करणारी सामग्री तयार करण्यासाठी व्यावहारिक मार्गदर्शक तत्त्वे आहेत.
+वेब सामग्री प्रवेशयोग्यता मार्गदर्शक तत्त्वे (WCAG) चार मूलभूत तत्त्वांभोवती तयार केली गेली आहेत जी POUR असे लिहितात. काळजी करू नका—हे कठोर शैक्षणिक संकल्पना नाहीत! ते प्रत्यक्षात सर्वांसाठी कार्य करणारी सामग्री
+- **वेगवेगळ्या ब्राउझर, उपकरणे आणि सहाय्यक साधनांवर चाचणी करा**
+- **अग्रगण्य वैशिष्ट्ये समर्थित नसल्यास सामग्री अशा प्रकारे संरचित करा की ती सहजपणे कार्य करेल**
+
+### 🎯 **POUR तत्त्वे तपासणी: लक्षात ठेवण्यासाठी**
+
+**मूलभूत गोष्टींचा जलद विचार:**
+- तुम्ही POUR तत्त्वांपैकी प्रत्येकाचे अपयश दर्शवणारे वेबसाइट वैशिष्ट्य विचार करू शकता का?
+- तुमच्यासाठी, एक विकसक म्हणून कोणते तत्त्व सर्वात नैसर्गिक वाटते?
+- ही तत्त्वे केवळ अपंग वापरकर्त्यांसाठीच नव्हे तर सर्वांसाठी डिझाइन सुधारण्यात कशी मदत करू शकतात?
+
+```mermaid
+quadrantChart
+ title POUR Principles Impact Matrix
+ x-axis Low Effort --> High Effort
+ y-axis Low Impact --> High Impact
+ quadrant-1 Quick Wins
+ quadrant-2 Major Projects
+ quadrant-3 Consider Later
+ quadrant-4 Strategic Focus
+
+ Alt Text: [0.2, 0.9]
+ Color Contrast: [0.3, 0.8]
+ Semantic HTML: [0.4, 0.9]
+ Keyboard Nav: [0.6, 0.8]
+ ARIA Complex: [0.8, 0.7]
+ Screen Reader Testing: [0.7, 0.6]
+```
+
+> **लक्षात ठेवा**: उच्च-प्रभाव, कमी-प्रयत्न सुधारणा पासून सुरुवात करा. सेमॅंटिक HTML आणि alt टेक्स्ट तुम्हाला सर्वात कमी प्रयत्नात सर्वात मोठा प्रवेशयोग्यता फायदा देतात!
+
+## प्रवेशयोग्य व्हिज्युअल डिझाइन तयार करणे
+
+चांगले व्हिज्युअल डिझाइन आणि प्रवेशयोग्यता हातात हात घालून जातात. जेव्हा तुम्ही प्रवेशयोग्यतेचा विचार करून डिझाइन करता, तेव्हा तुम्हाला असे आढळते की या मर्यादा स्वच्छ, अधिक मोहक उपाय शोधण्यात मदत करतात जे सर्व वापरकर्त्यांना फायदेशीर ठरतात.
-एकदा तुम्हाला POUR चा उपयोग कसा करायचा हे समजले की, प्रवेशयोग्यता निर्णय घेणे अधिक अंतर्ज्ञानी होते. हे तुमच्या डिझाइन निवडींना मार्गदर्शन करणारी मानसिक तपासणी यादी असल्यासारखे आहे. चला याचा तपशील पाहूया:
+चला सर्वांसाठी, त्यांच्या दृश्य क्षमतेसाठी किंवा तुमची सामग्री पाहण्याच्या परिस्थितींसाठी कार्य करणारे व्हिज्युअली आकर्षक डिझाइन तयार कसे करायचे ते शोधूया.
-**🔍 जाणवण्यायोग्य**: माहिती वापरकर्त्यांच्या उपलब्ध संवेदनांद्वारे जाणवण्यायोग्य असावी
+### रंग आणि व्हिज्युअल प्रवेशयोग्यता धोरणे
-- नॉन-टेक्स्ट सामग्रीसाठी मजकूर पर्याय प्रदान करा (प्रतिमा, व्हिडिओ, ऑडिओ)
-- सर्व मजकूर आणि UI घटकांसाठी पुरेसा रंग विरोधाभास सुनिश्चित करा
-- मल्टीमीडिया सामग्रीसाठी कॅप्शन आणि
-रंग संवादासाठी प्रभावी आहे, परंतु महत्त्वाची माहिती देण्यासाठी तो एकमेव मार्ग असू नये. रंगाच्या पलीकडे डिझाइन करणे अधिक मजबूत, सर्वसमावेशक अनुभव निर्माण करते जे विविध परिस्थितींमध्ये कार्य करते.
+रंग संवादासाठी शक्तिशाली आहे, परंतु महत्त्वाची माहिती देण्यासाठी तो कधीही एकमेव मार्ग असू नये. रंगाच्या पलीकडे डिझाइन करणे अधिक मजबूत, समावेशक अनुभव तयार करते जे अधिक परिस्थितींमध्ये कार्य करते.
**रंग दृष्टिकोनातील फरकांसाठी डिझाइन करा:**
-सुमारे 8% पुरुष आणि 0.5% महिला काही प्रकारच्या रंग दृष्टिकोनातील फरक अनुभवतात (याला "रंग अंधत्व" असेही म्हणतात). सर्वात सामान्य प्रकार आहेत:
-- **ड्युटेरॅनोपिया**: लाल आणि हिरवा ओळखण्यात अडचण
-- **प्रोटॅनोपिया**: लाल रंग अधिक मंद दिसतो
-- **ट्रायटॅनोपिया**: निळा आणि पिवळा ओळखण्यात अडचण (दुर्मिळ)
+सुमारे 8% पुरुष आणि 0.5% महिला काही प्रकारच्या रंग दृष्टिकोनातील फरक (सामान्यतः "रंग अंधत्व" म्हणतात) अनुभवतात. सर्वात सामान्य प्रकार आहेत:
+- **Deuteranopia**: लाल आणि हिरवा ओळखण्यात अडचण
+- **Protanopia**: लाल अधिक मंद दिसतो
+- **Tritanopia**: निळा आणि पिवळा ओळखण्यात अडचण (दुर्मिळ)
-**सर्वसमावेशक रंग धोरणे:**
+**समावेशक रंग धोरणे:**
```css
/* ❌ Bad: Using only color to indicate status */
@@ -209,16 +305,16 @@ graph TD
```
**मूलभूत कॉन्ट्रास्ट आवश्यकता पलीकडे:**
-- रंग अंधत्व सिम्युलेटरसह तुमच्या रंग निवडींची चाचणी करा
+- रंग अंधत्व सिम्युलेटरसह तुमच्या रंग निवडीची चाचणी करा
- रंग कोडिंगसह नमुने, पोत किंवा आकार वापरा
-- परस्परसंवादी स्थिती रंगाशिवाय ओळखण्यायोग्य ठेवा
+- परस्परसंवादी स्थिती रंगाशिवाय वेगळ्या राहतील याची खात्री करा
- उच्च कॉन्ट्रास्ट मोडमध्ये तुमचे डिझाइन कसे दिसते याचा विचार करा
-✅ **तुमची रंग प्रवेशयोग्यता तपासा**: [Coblis](https://www.color-blindness.com/coblis-color-blindness-simulator/) सारख्या साधनांचा वापर करून तुमची साइट वेगवेगळ्या प्रकारच्या रंग दृष्टिकोन असलेल्या वापरकर्त्यांना कशी दिसते ते पहा.
+✅ **तुमच्या रंग प्रवेशयोग्यतेची चाचणी करा**: [Coblis](https://www.color-blindness.com/coblis-color-blindness-simulator/) सारख्या साधनांचा वापर करून तुमची साइट वेगवेगळ्या प्रकारच्या रंग दृष्टिकोन असलेल्या वापरकर्त्यांना कशी दिसते ते पहा.
### फोकस इंडिकेटर्स आणि परस्परसंवाद डिझाइन
-फोकस इंडिकेटर्स डिजिटल कर्सरप्रमाणे असतात—ते कीबोर्ड वापरकर्त्यांना पृष्ठावर कुठे आहेत हे दर्शवतात. चांगले डिझाइन केलेले फोकस इंडिकेटर्स प्रत्येकासाठी अनुभव अधिक स्पष्ट आणि अंदाजानुसार बनवतात.
+फोकस इंडिकेटर्स डिजिटल कर्सरच्या समतुल्य आहेत—ते कीबोर्ड वापरकर्त्यांना पृष्ठावर कुठे आहेत हे दर्शवतात. चांगल्या प्रकारे डिझाइन केलेले फोकस इंडिकेटर्स सर्वांसाठी अनुभव वाढवतात, परस्परसंवाद स्पष्ट आणि अंदाज करण्यायोग्य बनवतात.
**आधुनिक फोकस इंडिकेटर सर्वोत्तम पद्धती:**
@@ -250,20 +346,42 @@ button:focus:not(:focus-visible) {
```
**फोकस इंडिकेटर आवश्यकता:**
-- **दृश्यमानता**: सभोवतालच्या घटकांशी किमान 3:1 कॉन्ट्रास्ट गुणोत्तर असले पाहिजे
-- **रुंदी**: संपूर्ण घटकाभोवती किमान 2px जाडी असावी
-- **सततता**: फोकस दुसऱ्या ठिकाणी हलवले जाईपर्यंत दृश्यमान राहावे
-- **भिन्नता**: इतर UI स्थितींपेक्षा दृश्यात्मकदृष्ट्या वेगळे असले पाहिजे
+- **दृश्यमानता**: सभोवतालच्या घटकांसह किमान 3:1 कॉन्ट्रास्ट गुणोत्तर असणे आवश्यक आहे
+- **रुंदी**: संपूर्ण घटकाभोवती किमान 2px जाडी असणे आवश्यक आहे
+- **स्थिरता**: फोकस दुसरीकडे हलवले जाईपर्यंत दृश्यमान राहावे
+- **भिन्नता**: इतर UI स्थितींपेक्षा दृश्यमानपणे वेगळे असणे आवश्यक आहे
> 💡 **डिझाइन टिप**: उत्कृष्ट फोकस इंडिकेटर्स अनेकदा दृश्यता सुनिश्चित करण्यासाठी outline, box-shadow आणि रंग बदलांचा संयोजन वापरतात.
-✅ **तुमचे फोकस इंडिकेटर्स तपासा**: तुमच्या वेबसाइटवर टॅब करा आणि कोणते घटक स्पष्ट फोकस इंडिकेटर्स आहेत ते नोंदवा. काही पाहणे कठीण आहे का किंवा पूर्णपणे गायब आहेत का?
+✅ **फोकस इंडिकेटर्सचे ऑडिट करा**: तुमच्या वेबसाइटवर टॅब करा आणि कोणते घटक स्पष्ट फोकस इंडिकेटर्स आहेत ते नोंदवा. काही पाहणे कठीण आहे किंवा पूर्णपणे गहाळ आहेत का?
### सेमॅंटिक HTML: प्रवेशयोग्यतेचा पाया
-सेमॅंटिक HTML म्हणजे तुमच्या वेबसाइटसाठी सहाय्यक तंत्रज्ञानांना GPS प्रणाली देणे. जेव्हा तुम्ही योग्य HTML घटक त्याच्या इच्छित उद्देशासाठी वापरता, तेव्हा तुम्ही स्क्रीन रीडर्स, कीबोर्ड्स आणि इतर साधनांना प्रभावीपणे नेव्हिगेट करण्यासाठी तपशीलवार रोडमॅप प्रदान करता.
+सेमॅंटिक HTML म्हणजे तुमच्या वेबसाइटसाठी सहाय्यक तंत्रज्ञानासाठी GPS प्रणाली देणे. जेव्हा तुम्ही योग्य HTML घटक त्याच्या उद्देशासाठी वापरता, तेव्हा तुम्ही स्क्रीन रीडर्स, कीबोर्ड्स आणि इतर साधनांना वापरकर्त्यांना प्रभावीपणे नेव्हिगेट करण्यात मदत करण्यासाठी तपशीलवार रोडमॅप प्रदान करता.
-माझ्यासाठी खरोखर क्लिक केलेली एक उपमा येथे आहे: सेमॅंटिक HTML म्हणजे स्पष्ट श्रेणी आणि उपयुक्त चिन्हांसह चांगल्या प्रकारे आयोजित केलेल्या लायब्ररी आणि पुस्तके यादृच्छिकपणे विखुरलेल्या गोदामातील फरक. दोन्ही ठिकाणी समान पुस्तके आहेत, परंतु तुम्हाला त्यामध्ये काहीतरी शोधण्याचा प्रयत्न करायचा असेल तर तुम्ही कोणते ठिकाण निवडाल? अगदी!
+माझ्यासाठी खरोखर क्लिक केलेली एक उपमा येथे आहे: सेमॅंटिक HTML म्हणजे स्पष्ट श्रेणी आणि उपयुक्त चिन्हांसह चांगल्या प्रकारे आयोजित केलेल्या लायब्ररी आणि पुस्तके यादृच्छिकपणे विखुरलेल्या गोदामातील फरक. दोन्ही ठिकाणी समान पुस्तके आहेत, परंतु तुम्हाला त्यामध्ये काहीतरी शोधण्याचा प्रयत्न करायचा असेल तर तुम्हाला कोणते ठिकाण अधिक चांगले वाटेल? अगदी!
+
+```mermaid
+flowchart TD
+ A[🏠 HTML Document] --> B[📰 header]
+ A --> C[🧭 nav]
+ A --> D[📄 main]
+ A --> E[📋 footer]
+
+ B --> B1[h1: Site Name Logo & branding]
+ C --> C1[ul: Navigation Primary links]
+ D --> D1[article: Content section: Subsections]
+ D --> D2[aside: Sidebar Related content]
+ E --> E1[nav: Footer links Copyright info]
+
+ D1 --> D1a[h1: Page title h2: Major sections h3: Subsections]
+
+ style A fill:#e3f2fd
+ style B fill:#e8f5e8
+ style C fill:#fff3e0
+ style D fill:#f3e5f5
+ style E fill:#e0f2f1
+```
**प्रवेशयोग्य पृष्ठ संरचनेचे बांधकाम ब्लॉक्स:**
@@ -320,17 +438,17 @@ button:focus:not(:focus-visible) {
```
-**सेमॅंटिक HTML प्रवेशयोग्यतेला कसे बदलते:**
+**सेमॅंटिक HTML प्रवेशयोग्यता कशी बदलते:**
-| सेमॅंटिक घटक | उद्देश | स्क्रीन रीडर लाभ |
+| सेमॅंटिक घटक | उद्देश | स्क्रीन रीडर फायदा |
|------------------|---------|----------------------|
| `` | पृष्ठ किंवा विभाग शीर्षलेख | "बॅनर लँडमार्क" - शीर्षस्थानी जलद नेव्हिगेशन |
| `` | नेव्हिगेशन लिंक | "नेव्हिगेशन लँडमार्क" - नेव्हिगेशन विभागांची यादी |
-| `` | प्राथमिक पृष्ठ सामग्री | "मुख्य लँडमार्क" - थेट सामग्रीकडे जा |
-| `` | स्वतंत्र सामग्री | लेखाच्या सीमा जाहीर करते |
-| `` | थीम असलेले सामग्री गट | सामग्री रचना प्रदान करते |
+| `` | प्राथमिक पृष्ठ सामग्री | "मुख्य लँडमार्क" - थेट सामग्रीवर जा |
+| `` | स्वयंपूर्ण सामग्री | लेखाच्या सीमा जाहीर करते |
+| `` | थीम असलेले सामग्री गट | सामग्री संरचना प्रदान करते |
| `` | संबंधित साइडबार सामग्री | "पूरक लँडमार्क" |
-| `` | पृष्ठ किंवा विभाग फूटर्स | "कंटेंटइन्फो लँडमार्क" |
+| `` | पृष्ठ किंवा विभाग फूटर्स | "Contentinfo लँडमार्क" |
**सेमॅंटिक HTML सह स्क्रीन रीडर सुपरपॉवर्स:**
- **लँडमार्क नेव्हिगेशन**: प्रमुख पृष्ठ विभागांमध्ये त्वरित उडी
@@ -338,16 +456,43 @@ button:focus:not(:focus-visible) {
- **घटक यादी**: सर्व लिंक, बटणे किंवा फॉर्म नियंत्रणांची यादी तयार करा
- **संदर्भ जागरूकता**: सामग्री विभागांमधील संबंध समजून घ्या
-> 🎯 **जलद चाचणी**: लँडमार्क शॉर्टकट (NVDA/JAWS मध्ये D साठी लँडमार्क, H साठी हेडिंग, K साठी लिंक) वापरून स्क्रीन रीडरसह तुमच्या साइटवर नेव्हिगेट करण्याचा प्रयत्न करा. नेव्हिगेशन अर्थपूर्ण आहे का?
+> 🎯 **जलद चाचणी**: लँडमार्क शॉर्टकट (NVDA/JAWS मध्ये D लँडमार्कसाठी, H हेडिंगसाठी, K लिंकसाठी) वापरून स्क्रीन रीडरसह तुमच्या साइटवर नेव्हिगेट करण्याचा प्रयत्न करा. नेव्हिगेशन अर्थपूर्ण आहे का?
+
+### 🏗️ **सेमॅंटिक HTML मास्टरी तपासणी: मजबूत पाया तयार करणे**
+
+**तुमच्या सेमॅंटिक समजाचे मूल्यांकन करूया:**
+- तुम्ही HTML पाहून वेबपृष्ठावरील लँडमार्क ओळखू शकता का?
+- तुम्ही तुमच्या मित्राला `` आणि `` मधील फरक कसा समजावून सांगाल?
+- स्क्रीन रीडर वापरकर्त्याने नेव्हिगेशन समस्यांची तक्रार केल्यास तुम्ही प्रथम काय तपासाल?
+
+```mermaid
+stateDiagram-v2
+ [*] --> UnsementicHTML: div soup
+ UnsementicHTML --> SemanticHTML: Add landmarks
+ SemanticHTML --> AccessibleHTML: Test with AT
+ AccessibleHTML --> [*]: User success!
+
+ note right of UnsementicHTML
+ Screen readers lost
+ Keyboard nav broken
+ end note
+
+ note right of AccessibleHTML
+ Clear navigation
+ Efficient browsing
+ end note
+```
+
+> **प्रो अंतर्दृष्टी**: चांगले सेमॅंटिक HTML स्वयंचलितपणे सुमारे 70% प्रवेशयोग्यता समस्या सोडवते. हा पाया मास्टर करा आणि तुम्ही चांगल्या मार्गावर आहात!
-✅ **तुमची सेमॅंटिक रचना तपासा**: तुमच्या ब्राउझरच्या DevTools मधील प्रवेशयोग्यता पॅनेल वापरून प्रवेशयोग्यता झाड पहा आणि तुमचे मार्कअप तर्कसंगत रचना तयार करते याची खात्री करा.
+✅ **तुमची सेमॅंटिक संरचना तपासा**: तुमच्या ब्राउझरच्या DevTools मधील प्रवेशयोग्यता पॅनेल वापरून प्रवेशयोग्यता झाड पहा आणि तुमचे मार्कअप तर्कसंगत संरचना तयार करते याची खात्री करा.
### हेडिंग हायरार्की: तर्कसंगत सामग्रीची रूपरेखा तयार करणे
-हेडिंग्स प्रवेशयोग्य सामग्रीसाठी अत्यंत महत्त्वाचे आहेत—ते सर्वकाही एकत्र ठेवणाऱ्या कण्यासारखे आहेत. स्क्रीन रीडर वापरकर्ते तुमची सामग्री समजून घेण्यासाठी आणि नेव्हिगेट करण्यासाठी हेडिंग्सवर मोठ्या प्रमाणावर अवलंबून असतात. हे तुमच्या पृष्ठासाठी सामग्रीची सूची प्रदान करण्यासारखे आहे.
+हेडिंग्स प्रवेशयोग्य सामग्रीसाठी अत्यंत महत्त्वाचे आहेत—ते सर्वकाही एकत्र ठेवणाऱ्या कण्यासारखे आहेत. स्क्रीन रीडर वापरकर्ते तुमची सामग्री समजून घेण्यासाठी आणि नेव्हिगेट करण्यासाठी हेडिंगवर मोठ्या प्रमाणावर अवलंबून असतात. हे तुमच्या पृष्ठासाठी सामग्रीची सूची प्रदान करण्यासारखे आहे.
**हेडिंगसाठी सुवर्ण नियम येथे आहे:**
-कधीही स्तर वगळू नका. नेहमी `
` ते `` ते `` अशा तर्कसंगतपणे प्रगती करा. शाळेत रूपरेखा तयार करताना लक्षात आहे का? हीच तीच तत्त्वे आहेत—तुम्ही "I. मुख्य मुद्दा" पासून थेट "C. उप-उप मुद्दा" कडे "A. उप-मुद्दा" न घेता उडी मारणार नाही, बरोबर?
+कधीही स्तर वगळू नका. नेहमी `` ते `` ते `` पर्यंत तर्कसंगतपणे प्रगती करा. शाळेत रूपरेखा तयार करणे लक्षात आहे का? हे अगदी त्याच तत्त्व आहे—तुम्ही "I. मुख्य मुद्दा" पासून थेट "C. उप-उप मुद्दा" कडे "A. उप मुद्दा" न घेता उडी मारणार नाही, बरोबर?
**परिपूर्ण हेडिंग संरचना उदाहरण:**
@@ -389,33 +534,33 @@ button:focus:not(:focus-visible) {
```
**हेडिंग सर्वोत्तम पद्धती:**
-- **प्रत्येक पृष्ठासाठी एक ``**: सामान्यतः तुमचे मुख्य पृष्ठ शीर्षक किंवा प्राथमिक सामग्री शीर्षक
+- **प्रत्येक पृष्ठावर एक ``**: सामान्यतः तुमचे मुख्य पृष्ठ शीर्षक किंवा प्राथमिक सामग्री शीर्षलेख
- **तर्कसंगत प्रगती**: स्तर कधीही वगळू नका (h1 → h2 → h3, h1 → h3 नाही)
-- **वर्णनात्मक सामग्री**: संदर्भाशिवाय वाचल्यास हेडिंग्स अर्थपूर्ण बनवा
-- **CSS सह दृश्यात्मक शैलीकरण**: स्वरूपासाठी CSS वापरा, संरचनेसाठी HTML स्तर
+- **वर्णनात्मक सामग्री**: हेडिंग्स संदर्भाशिवाय वाचल्यावर अर्थपूर्ण बनवा
+- **CSS सह व्हिज्युअल स्टाइलिंग**: स्वरूपासाठी CSS वापरा, संरचनेसाठी HTML स्तर
**स्क्रीन रीडर नेव्हिगेशन आकडेवारी:**
-- 68% स्क्रीन रीडर वापरकर्ते हेडिंग्सद्वारे नेव्हिगेट करतात ([WebAIM सर्वेक्षण](https://webaim.org/projects/screenreadersurvey9/#finding))
-- वापरकर्त्यांना तर्कसंगत हेडिंग रूपरेखा अपेक्षित आहे
-- हेडिंग्स पृष्ठ संरचना समजून घेण्याचा सर्वात जलद मार्ग प्रदान करतात
+- 68% स्क्रीन रीडर वापरकर्ते हेडिंगद्वारे नेव्हिगेट करतात ([WebAIM सर्वेक्षण](https://webaim.org/projects/screenreadersurvey9/#finding))
+- वापरकर्त्यांना तर्कसंगत हेडिंग रूपरेखा शोधण्याची अपेक्षा आहे
+- हेडिंग्स पृष्ठ संरचना समजून घेण्याचा सर्वात वेगवान मार्ग प्रदान करतात
-> 💡 **प्रो टिप**: "HeadingsMap" सारख्या ब्राउझर एक्सटेंशन्सचा वापर करून तुमची हेडिंग संरचना व्हिज्युअल करा. ती चांगल्या प्रकारे आयोजित केलेल्या सामग्रीच्या यादीसारखी वाचली पाहिजे.
+> 💡 **प्रो टिप**: तुमच्या हेडिंग संरचनेचे व्हिज्युअलायझेशन करण्यासाठी "HeadingsMap" सारख्या ब्राउझर एक्सटेंशनचा वापर करा. ते चांगल्या प्रकारे आयोजित केलेल्या सामग्रीच्या रूपरेखेसारखे वाचले पाहिजे.
✅ **तुमची हेडिंग संरचना तपासा**: स्क्रीन रीडरच्या हेडिंग नेव्हिगेशन (NVDA मध्ये H की) वापरून तुमच्या हेडिंग्समधून उडी मारा. प्रगती तुमच्या सामग्रीची कथा तर्कसंगतपणे सांगते का?
-### प्रगत दृश्य प्रवेशयोग्यता तंत्र
+### प्रगत व्हिज्युअल प्रवेशयोग्यता तंत्र
-कॉन्ट्रास्ट आणि रंगाच्या मूलभूत गोष्टींपलीकडे, काही परिष्कृत तंत्र आहेत जे खरोखर सर्वसमावेशक दृश्य अनुभव तयार करण्यात मदत करतात. ही पद्धती तुमची सामग्री विविध पाहण्याच्या परिस्थिती आणि सहाय्यक तंत्रज्ञानांमध्ये कार्य करते याची खात्री करतात.
+कॉन्ट्रास्ट आणि रंगाच्या मूलभूत गोष्टींपलीकडे, खरोखर समावेशक व्हिज्युअल अनुभव तयार करण्यात मदत करणारी परिष्कृत तंत्रे आहेत. ही पद्धती वेगवेगळ्या पाहण्याच्या परिस्थिती आणि सहाय्यक तंत्रज्ञानावर तुमची सामग्री कार्य करते याची खात्री करतात.
-**महत्त्वाच्या दृश्य संवाद धोरणे:**
+**महत्त्वाच्या व्हिज्युअल संवाद धोरणे:**
-- **मल्टी-मोडल फीडबॅक**: दृश्य, मजकूर आणि कधीकधी ऑडिओ संकेतांचे संयोजन करा
+- **मल्टी-मोडल फीडबॅक**: व्हिज्युअल, टेक्स्ट आणि कधीकधी ऑडिओ संकेतांचे संयोजन
- **प्रोग्रेसिव्ह डिस्क्लोजर**: माहिती पचण्यायोग्य तुकड्यांमध्ये सादर करा
-- **सुसंगत परस्परसंवादी नमुने**: परिचित UI परंपरा वापरा
+- **सुसंगत परस्परसंवाद नमुने**: परिचित UI परंपरा वापरा
- **प्रतिसादात्मक टायपोग्राफी**: उपकरणांमध्ये मजकूर योग्य प्रकारे स्केल करा
- **लोडिंग आणि त्रुटी स्थिती**: सर्व वापरकर्ता क्रियांसाठी स्पष्ट फीडबॅक प्रदान करा
-**CSS उपयोगिता प्रवेशयोग्यता वाढवण्यासाठी:**
+**प्रवेशयोग्यतेसाठी CSS उपयोगिता:**
```css
/* Screen reader only text - visually hidden but accessible */
@@ -471,25 +616,25 @@ button:focus:not(:focus-visible) {
}
```
-> 🎯 **प्रवेशयोग्यता नमुना**: "स्किप लिंक" कीबोर्ड वापरकर्त्यांसाठी आवश्यक आहे. ती तुमच्या पृष्ठावरील पहिली फोकस करण्यायोग्य घटक असावी आणि मुख्य सामग्री क्षेत्रावर थेट उडी मारावी.
+> 🎯 **प्रवेशयोग्यता नमुना**: "स्किप लिंक" कीबोर्ड वापरकर्त्यांसाठी आवश्यक आहे. हे तुमच्या पृष्ठावर प्रथम फोकस करण्यायोग्य घटक असावे आणि मुख्य सामग्री क्षेत्रावर थेट उडी मारावी.
-✅ **स्किप नेव्हिगेशन अंमलात आणा**: तुमच्या पृष्ठांवर स्किप लिंक जोडा आणि पृष्ठ लोड झाल्यावर टॅब दाबून त्यांची चाचणी करा. ते दिसले पाहिजेत आणि तुम्हाला मुख्य सामग्रीकडे उडी मारण्याची परवानगी दिली पाहिजे.
+✅ **स्किप नेव्हिगेशन अंमलात आणा**: तुमच्या पृष्ठांवर स्किप लिंक जोडा आणि पृष्ठ लोड झाल्यावर टॅब दाबून त्यांची चाचणी करा. ते दिसले पाहिजे आणि तुम्हाला मुख्य सामग्रीवर उडी मारण्याची परवानगी दिली पाहिजे.
-## अर्थपूर्ण लिंक मजकूर तयार करणे
+## अर्थपूर्ण लिंक टेक्स्ट तयार करणे
-लिंक्स म्हणजे वेबचे महामार्ग आहेत, परंतु खराब लिहिलेला लिंक मजकूर म्हणजे "जागा" असे म्हणणारे रोड साइन असणे, "डाऊनटाउन शिकागो" ऐवजी. फारसे उपयुक्त नाही, बरोबर?
+लिंक्स म्हणजे वेबचे महामार्ग आहेत, परंतु खराब लिहिलेले लिंक टेक्स्ट म्हणजे "जागा" ऐवजी "डाउनटाउन शिकागो" म्हणणारे रोड साइन असणे. फारसे उपयुक्त नाही, बरोबर?
-जेव्हा मी प्रथम हे शिकलो तेव्हा मला खरोखर आश्चर्य वाटले: स्क्रीन रीडर्स पृष्ठावरील सर्व लिंक्स काढून टाकू शकतात आणि त्यांना एक मोठी यादी म्हणून दाखवू शकतात. कल्पना करा की कोणीतरी तुम्हाला तुमच्या पृष्ठावरील प्रत्येक लिंकची निर्देशिका दिली. प्रत्येक लिंक स्वतःहून अर्थपूर्ण आहे का? तुमच्या लिंक मजकूराला पास करायची चाचणी हीच आहे!
+जेव्हा मी प्रथम हे शिकलो तेव्हा माझे मन उडाले: स्क्रीन रीडर्स पृष्ठावरील सर्व लिंक्स काढून त्यांना एक मोठी यादी म्हणून दाखवू शकतात. कल्पना करा की कोणीतरी तुम्हाला तुमच्या पृष्ठावरील प्रत्येक लिंकची निर्देशिका दिली आहे. प्रत्येकाला स्वतःहून अर्थ होईल का? तुमच्या लिंक टेक्स्टला पास करायची गरज असलेली चाचणी ही आहे!
### लिंक नेव्हिगेशन नमुने समजून घेणे
-स्क्रीन रीडर्स चांगल्या प्रकारे लिहिलेल्या लिंक मजकूरावर आधारित शक्तिशाली लिंक नेव्हिगेशन वैशिष्ट्ये ऑफर करतात:
+स्क्रीन रीडर्स चांगल्या प्रकारे लिहिलेल्या लिंक टेक्स्टवर अवलंबून असलेल्या शक्तिशाली लिंक नेव्हिगेशन वैशिष्ट्ये ऑफर करतात:
**लिंक नेव्हिगेशन पद्धती:**
-- **क्रमिक वाचन**: लिंक सामग्री प्रवाहाचा भाग म्हणून संदर्भात वाचल्या जातात
-- **लिंक यादी निर्मिती**: सर्व पृष्ठ लिंक्स शोधण्यायोग्य निर्देशिकेत संकलित
-- **जलद नेव्हिगेशन**: कीबोर्ड शॉर्टकट वापरून लिंक्समध्ये उडी (NVDA मध्ये K)
-- **शोध कार्यक्षमता**: आंशिक मजकूर टाइप करून विशिष्ट लिंक्स शोधा
+- **क्रमिक वाचन**: लिंक सामग्री प्रवाहाचा भाग म्हणून संदर्भात वाचले जातात
+- **लिंक यादी निर्मिती**: सर्व पृष्ठ लिंक शोधण्यायोग्य निर्देशिकेत संकलित
+- **जलद नेव्हिगेशन**: कीबोर्ड शॉर्टकट वापरून लिंक दरम्यान उडी (NVDA मध्ये K)
+- **शोध कार्यक्षमता**: आंशिक मजकूर टाइप करून विशिष्ट लिंक शोधा
**संदर्भ का महत्त्वाचा आहे:**
जेव्हा स्क्रीन रीडर वापरकर्ते लिंक यादी तयार करतात, तेव्हा त्यांना असे काहीतरी दिसते:
@@ -499,15 +644,15 @@ button:focus:not(:focus-visible) {
- "गोपनीयता धोरण"
- "येथे क्लिक करा"
-यापैकी फक्त दोन लिंक्स संदर्भाशिवाय उपयुक्त माहिती प्रदान करतात!
+यापैकी फक्त दोन लिंक संदर्भाशिवाय उपयुक्त माहिती प्रदान करतात!
-> 📊 **वापरकर्ता प्रभाव**: स्क्रीन रीडर वापरकर्ते पृष्ठ सामग्री जलद समजून घेण्यासाठी लिंक यादी स्कॅन करतात. सामान्य लिंक मजकूर त्यांना प्रत्येक लिंकच्या संदर्भावर परत नेव्हिगेट करण्यास भाग पाडतो, त्यांच्या ब्राउझिंग अनुभवाला लक्षणीयपणे धीमा करतो.
+> 📊 **वापरकर्ता प्रभाव**: स्क्रीन रीडर वापरकर्ते पृष्ठ सामग्री जलद समजून घेण्यासाठी लिंक यादी स्कॅन करतात. सामान्य लिंक टेक्स्ट त्यांना प्रत्येक लिंकच्या संदर्भात परत नेव्हिगेट करण्यास भाग पाडते, त्यांच्या ब्राउझिंग अनुभवाला लक्षणीयपणे धीमा करते.
-### सामान्य लिंक मजकूर चुका टाळा
+### सामान्य लिंक टेक्स्ट चुका टाळा
-जे काय कार्य करत नाही ते समजून घेणे विद्यमान सामग्रीतील प्रवेशयोग्यता समस्या ओळखण्यात आणि सुधारण्यात मदत करते.
+काय कार्य करत नाही ते समजून घेणे तुम्हाला विद्यमान सामग्रीतील प्रवेशयोग्यता समस्या ओळखण्यात आणि दुरुस्त करण्यात मदत करते.
-**❌ संदर्भ प्रदान न करणारा सामान्य लिंक मजकूर:**
+**❌ संदर्भ प्रदान न करणारे सामान्य लिंक टेक्स्ट:**
```html
@@ -533,17 +678,17 @@ button:focus:not(:focus-visible) {
Go | See | View
```
-**हे नमुने का अयशस्वी होतात:**
+**हे नमुने का अपयशी ठरतात:**
- **"येथे क्लिक करा"** वापरकर्त्यांना गंतव्यस्थानाबद्दल काहीही सांगत नाही
- **"अधिक वाचा"** अनेक वेळा पुनरावृत्ती केल्याने गोंधळ निर्माण होतो
-- **कच्चे URLs** स्क्रीन रीडर्ससाठी स्पष्टपणे उच्चारणे कठीण आहे
-- **एकच शब्द** जसे "जा" किंवा "पहा" वर्णनात्मक संदर्भाचा अभाव आहे
+- **कच्चे URL** स्क्रीन रीडर्ससाठी स्पष्टपणे उच्चारणे कठीण आहे
+- **एकल शब्द** जसे "जा" किंवा "पहा" वर्णनात्मक संदर्भाचा अभाव आहे
-### उत्कृष्ट लिंक मजकूर लिहिणे
+### उत्कृष्ट लिंक टेक्स्ट लिहिणे
-वर्णनात्मक लिंक मजकूर सर्वांसाठी फायदेशीर आहे—दृष्टी असलेले वापरकर्ते लिंक्स जलद स्कॅन करू शकतात आणि स्क्रीन रीडर वापरकर्ते गंतव्यस्थान त्वरित समजतात.
+वर्णनात्मक लिंक टेक्स्ट सर्वांना फायदेशीर ठरते—दृष्टी असलेले वापरकर्ते लिंक्स जलद स्कॅन करू शकतात आणि स्क्रीन रीडर वापरकर्ते गंतव्यस्थान त्वरित समजतात.
-**✅ स्पष्ट, वर्णनात्मक लिंक मजकूर उदाहरणे:**
+**✅ स्पष्ट, वर्णनात्मक लिंक टेक्स्ट उदाहरणे:**
```html
@@ -570,104 +715,139 @@ button:focus:not(:focus-visible) {
Get help with your account
```
-**लिंक मजकूर सर्वोत्तम पद्धती:**
+**लिंक टेक्स्ट सर्वोत्तम पद्धती:**
- **विशिष्ट व्हा**: "तिमाही आर्थिक अहवाल डाउनलोड करा" विरुद्ध "डाउनलोड"
- **फाइल प्रकार आणि आकार समाविष्ट करा**: "(PDF, 1.2MB)" डाउनलोड करण्यायोग्य फाइलसाठी
- **लिंक्स बाहेरून उघडल्यास उल्लेख करा**: "(नवीन विंडोमध्ये उघडते)" योग्य असल्यास
- **सक्रिय भाषा वापरा**: "आमच्याशी संपर्क साधा" विरुद्ध "संपर्क पृष्ठ"
-- **संक्षिप्त ठेवा**: शक्य असल्यास 2-8 शब्दांचे लक्ष्य ठेवा
+- **संक्ष
+**ARIA च्या पाच श्रेणी:**
-### प्रगत लिंक प्रवेशयोग्यता नमुने
+1. **Roles**: हा घटक काय आहे? (`button`, `tab`, `dialog`)
+2. **Properties**: त्याची वैशिष्ट्ये काय आहेत? (`aria-required`, `aria-haspopup`)
+3. **States**: त्याची सध्याची स्थिती काय आहे? (`aria-expanded`, `aria-checked`)
+4. **Landmarks**: पृष्ठाच्या संरचनेत तो कुठे आहे? (`banner`, `navigation`, `main`)
+5. **Live regions**: बदल कसे जाहीर केले पाहिजेत? (`aria-live`, `aria-atomic`)
-कधीकधी दृश्य डिझाइन मर्यादा किंवा तांत्रिक आवश्यकता विशेष उपायांची आवश्यकता असते. सामान्य आव्हानात्मक परिस्थितींसाठी येथे परिष्कृत तंत्र आहेत:
+### आधुनिक वेब अॅप्ससाठी आवश्यक ARIA पॅटर्न
-**वाढीव संदर्भासाठी ARIA वापरणे:**
+हे पॅटर्न परस्परसंवादी वेब अॅप्लिकेशन्समधील सर्वसामान्य अॅक्सेसिबिलिटी आव्हाने सोडवतात:
+
+**घटकांचे नाव आणि वर्णन देणे:**
```html
-
-
- Download Report
-
-
-
-Sustainability Initiative
- Our efforts to reduce environmental impact...
-
- Learn more
-
-
Detailed breakdown of our 2024 environmental goals and achievements
+
+
×
+
+
+
+
+
+
+
+ Password must contain at least 8 characters, including uppercase, lowercase, and numbers.
+
+
+
+
```
-**फाइल प्रकार आणि बाह्य गंतव्ये दर्शविणे:**
+**डायनॅमिक सामग्रीसाठी Live regions:**
```html
-
-
- Download our 2024 annual report (PDF, 2.3MB)
-
-
-
-
- Download our 2024 annual report
- (PDF format, 2.3MB)
-
-
-
-
- Visit external resource
-
-
- (opens in new window)
-
-
-
-
- External resource
-
-```
+
+
+
+
-```css
-/* Visual indicator for external links */
-.external-link::after {
- content: " ↗";
- font-size: 0.8em;
- color: #666;
-}
+
+
+
+
-/* Screen reader announcement for external links */
-.external-link::before {
- content: "External link: ";
- position: absolute;
- left: -10000px;
- width: 1px;
- height: 1px;
- overflow: hidden;
-}
+
+
+ Submit Application
+
+
+
+
```
-> ⚠️ **महत्त्वाचे**: `target="_blank"` वापरताना, लिंक नवीन विंडो किंवा टॅबमध्ये उघडते हे नेहमी वापरकर्त्यांना कळवा. अनपेक्षित नेव्हिगेशन बदल गोंधळात टाकू शकतात.
-
-✅ **तुमच्या लिंक संदर्भाची चाचणी करा**: तुमच्या ब्राउझरच्या डेव्हलपर टूल्सचा वापर करून तुमच्या पृष्ठावरील सर्व लिंक्सची यादी तयार करा. तुम्हाला कोणत्याही सभोवतालच्या संदर्भाशिवाय प्रत्येक लिंकचा उद्देश समजतो का?
+**परस्परसंवादी विजेट उदाहरण (accordion):**
-## ARIA: HTML प्रवेशयोग्यता सुपरचार्ज करणे
+```html
+
+
+
+ Accessibility Guidelines
+
+
+
+
WCAG 2.1 provides comprehensive guidelines...
+
+
+```
-[Accessible Rich Internet Applications (ARIA)](https://developer.mozilla.org/docs/Web/Accessibility/ARIA) म्हणजे तुमच्या जटिल वेब अनुप्रयोगांमध्ये आणि सहाय्यक तंत्रज्ञानांमध्ये सार्वत्रिक अनुवादक असणे. HTML एकट्याने तुमच्या परस्परसंवादी घटकांमध्ये घडत असलेल्या प्रत्येक गोष्टीचे वर्णन करू शकत नसल्यास, ARIA त्या अंतर भरून काढण्यासाठी पुढे येते.
+```javascript
+// JavaScript to manage accordion state
+function toggleAccordion(trigger) {
+ const panel = document.getElementById(trigger.getAttribute('aria-controls'));
+ const isExpanded = trigger.getAttribute('aria-expanded') === 'true';
+
+ // Toggle states
+ trigger.setAttribute('aria-expanded', !isExpanded);
+ panel.hidden = isExpanded;
+
+ // Announce change to screen readers
+ const status = document.getElementById('status-updates');
+ status.textContent = isExpanded ? 'Section collapsed' : 'Section expanded';
+}
+```
-ARIA म्हणजे तुमच्या HTML मध्ये उपयुक्त टिप्पण्या जोडणे—जणू काही नाटकाच्या स्क्रिप्टमध्ये स्टेज डायरेक्शन जोडल्यासारखे जे अभिनेत्यांना त्यांच्या भूमिका आणि संबंध समजून घेण्यास मदत करते.
+### ARIA अंमलबजावणीसाठी सर्वोत्तम पद्धती
-**ARIA बद्दल सर्वात महत्त्वाचे नियम येथे आहेत**: नेहमी प्रथम सेमॅंटिक HTML वापरा, नंतर ARIA जोडून ते वाढवा. ARIA ला मुख्य पदार्थ नाही तर मसाला समजा. याने तुमच्या HTML संरचनेचे स्पष्टीकरण आणि वाढ करणे आवश्यक आहे, कधीही त्याची जागा घेऊ नये. प्रथम तो पाया योग्य मिळवा!
+ARIA प्रभावी आहे परंतु काळजीपूर्वक अंमलबजावणीची आवश्यकता आहे. या मार्गदर्शक तत्त्वांचे पालन केल्याने तुमचे ARIA अॅक्सेसिबिलिटी सुधारण्यास मदत करते:
-### ARIA अंमलबजावणीसाठी धोरणात्मक दृष्टिकोन
+**🛡️ मुख्य तत्त्वे:**
-ARIA शक्तिशाली आहे, परंतु शक्तीसोबत जबाबदारी येते. चुकीचे ARIA प्रवेशयोग्यता नसलेल्या ARIA पेक्षा वाईट बनवू शकते. येथे कधी आणि कसे प्रभावीपणे वापरायचे:
+```mermaid
+flowchart TD
+ A[🚀 Start with semantic HTML] --> B{Does HTML provide needed semantics?}
+ B -->|Yes| C[✅ Use HTML only]
+ B -->|No| D[Consider ARIA enhancement]
+ D --> E{Can you achieve it with simpler means?}
+ E -->|Yes| F[🔄 Simplify approach]
+ E -->|No| G[📝 Implement ARIA carefully]
+ G --> H[🧪 Test with real AT]
+ H --> I{Works as expected?}
+ I -->|No| J[🔧 Debug and fix]
+ I -->|Yes| K[✅ Success!]
+ J --> H
+ F --> C
+
+ style A fill:#e3f2fd
+ style C fill:#e8f5e8
+ style K fill:#e8f5e8
+ style G fill:#fff3e0
+ style H fill:#f3e5f5
+```
-**✅ ARIA वापरा जेव्हा:**
-- सानुकूल परस्परसंवादी विजेट्स तयार करणे (अॅकॉर्डियन, ट
+1. **प्रथम सेमॅंटिक HTML**: नेहमी `
` ला `` वर प्राधान्य द्या
+2. **सेमॅंटिक्स खराब करू नका**: विद्यमान HTML अर्थ ओव्हरराइड करू नका (जसे `
`)
+3. **कीबोर्ड अॅक्सेसिबिलिटी राखा**: सर्व परस्परसंवादी ARIA घटक पूर्णपणे कीबोर्ड अॅक्सेसिबल असले पाहिजेत
+4. **खऱ्या वापरकर्त्यांसह चाचणी करा**: सहाय्यक तंत्रज्ञानांमध्ये ARIA समर्थन लक्षणीयपणे बदलते
5. **सोप्या गोष्टींनी सुरुवात करा**: जटिल ARIA अंमलबजावणीमध्ये त्रुटी होण्याची शक्यता जास्त असते
**🔍 चाचणी कार्यप्रवाह:**
@@ -684,48 +864,65 @@ graph TD
G --> B
```
-**🚫 टाळावयाच्या सामान्य ARIA चुका:**
+**🚫 टाळण्याच्या सामान्य ARIA चुका:**
- **विरोधाभासी माहिती**: HTML सेमॅंटिक्सशी विरोधाभास करू नका
- **अतिरिक्त लेबलिंग**: खूप जास्त ARIA माहिती वापरकर्त्यांना गोंधळात टाकते
- **स्थिर ARIA**: सामग्री बदलल्यावर ARIA स्टेट्स अपडेट करणे विसरणे
-- **अप्रशिक्षित अंमलबजावणी**: सैद्धांतिकदृष्ट्या कार्य करणारे ARIA परंतु प्रत्यक्षात अयशस्वी
-- **किबोर्ड समर्थनाचा अभाव**: ARIA भूमिका परंतु संबंधित किबोर्ड संवाद नसणे
+- **अचाचणी केलेली अंमलबजावणी**: सिद्धांतात कार्य करणारे ARIA परंतु प्रत्यक्षात अयशस्वी
+- **कीबोर्ड समर्थनाचा अभाव**: ARIA roles शिवाय संबंधित कीबोर्ड परस्परसंवाद
+
+> 💡 **चाचणी संसाधने**: [accessibility-checker](https://www.npmjs.com/package/accessibility-checker) सारख्या साधनांचा वापर ARIA च्या स्वयंचलित पडताळणीसाठी करा, परंतु संपूर्ण अनुभवासाठी नेहमी खऱ्या स्क्रीन रीडर्ससह चाचणी करा.
+
+### 🎭 **ARIA कौशल्य तपासणी: जटिल परस्परसंवादासाठी तयार आहात का?**
-> 💡 **चाचणी संसाधने**: [accessibility-checker](https://www.npmjs.com/package/accessibility-checker) सारख्या साधनांचा वापर करून स्वयंचलित ARIA पडताळणी करा, परंतु पूर्ण अनुभवासाठी नेहमी वास्तविक स्क्रीन रीडर्ससह चाचणी करा.
+**तुमचा ARIA आत्मविश्वास मोजा:**
+- तुम्ही सेमॅंटिक HTML ऐवजी ARIA कधी निवडाल? (सूचना: जवळजवळ कधीच नाही!)
+- तुम्ही स्पष्ट करू शकता का की `` सहसा `
` पेक्षा वाईट का आहे?
+- ARIA चाचणीबद्दल लक्षात ठेवण्यासारखी सर्वात महत्त्वाची गोष्ट काय आहे?
-✅ **तज्ञांकडून शिका**: [ARIA Authoring Practices Guide](https://w3c.github.io/aria-practices/) अभ्यास करा, जटिल परस्परसंवादी विजेट्ससाठी चाचणी केलेल्या नमुन्यांसाठी.
+```mermaid
+pie title "Common ARIA Usage Patterns"
+ "Labels & Descriptions" : 40
+ "Live Regions" : 25
+ "Widget States" : 20
+ "Complex Controls" : 15
+```
-## प्रतिमा आणि माध्यमे सुलभ बनवणे
+> **महत्त्वाचा दृष्टिकोन**: ARIA चा सर्वाधिक वापर घटकांचे लेबलिंग आणि वर्णन करण्यासाठी केला जातो. जटिल विजेट पॅटर्न अपेक्षेपेक्षा कमी सामान्य आहेत!
-दृश्य आणि ऑडिओ सामग्री आधुनिक वेब अनुभवाचा महत्त्वाचा भाग आहे, परंतु विचारपूर्वक अंमलबजावणी न केल्यास अडथळे निर्माण होऊ शकतात. उद्दिष्ट म्हणजे तुमची माहिती आणि माध्यमांचा भावनिक प्रभाव प्रत्येक वापरकर्त्यापर्यंत पोहोचवणे. एकदा तुम्हाला याची सवय झाली की, ते सहजतेने होईल.
+✅ **तज्ञांकडून शिका**: [ARIA Authoring Practices Guide](https://w3c.github.io/aria-practices/) अभ्यास करा जटिल परस्परसंवादी विजेट्ससाठी चाचणी केलेले पॅटर्न आणि अंमलबजावणी.
-विविध प्रकारच्या माध्यमांसाठी वेगवेगळ्या सुलभता पद्धती आवश्यक असतात. हे स्वयंपाकासारखे आहे—तुम्ही नाजूक मासा जसा हाताळता तसा मजबूत स्टेक हाताळणार नाही. या फरकांची समज तुम्हाला प्रत्येक परिस्थितीसाठी योग्य उपाय निवडण्यास मदत करते.
+## प्रतिमा आणि माध्यमे अॅक्सेसिबल बनवणे
-### रणनीतिक प्रतिमा सुलभता
+दृश्य आणि ऑडिओ सामग्री आधुनिक वेब अनुभवांचा महत्त्वाचा भाग आहे, परंतु विचारपूर्वक अंमलबजावणी न केल्यास ती अडथळे निर्माण करू शकते. उद्दिष्ट म्हणजे तुमच्या माध्यमाची माहिती आणि भावनिक प्रभाव प्रत्येक वापरकर्त्यापर्यंत पोहोचवणे. एकदा तुम्हाला त्याची सवय झाली की, ते सहज होते.
+
+वेगवेगळ्या प्रकारच्या माध्यमांसाठी वेगवेगळ्या अॅक्सेसिबिलिटी पद्धती आवश्यक असतात. हे स्वयंपाकासारखे आहे—तुम्ही नाजूक मासा जसा हाताळता तसा मजबूत स्टेक हाताळणार नाही. या फरकांची समज तुम्हाला प्रत्येक परिस्थितीसाठी योग्य उपाय निवडण्यास मदत करते.
+
+### रणनीतिक प्रतिमा अॅक्सेसिबिलिटी
तुमच्या वेबसाइटवरील प्रत्येक प्रतिमेचा एक उद्देश असतो. त्या उद्देशाची समज तुम्हाला चांगला पर्यायी मजकूर लिहिण्यास आणि अधिक समावेशक अनुभव तयार करण्यास मदत करते.
-**प्रतिमांचे चार प्रकार आणि त्यांचे alt टेक्स्ट धोरण:**
+**प्रतिमांचे चार प्रकार आणि त्यांचे alt text धोरण:**
**माहितीपूर्ण प्रतिमा** - महत्त्वाची माहिती देतात:
```html
```
-**सजावटीच्या प्रतिमा** - फक्त दृश्यात्मक, कोणतेही माहितीमूल्य नाही:
+**सजावटीच्या प्रतिमा** - फक्त दृश्यात्मक, कोणतेही माहितीपूर्ण मूल्य नाही:
```html
```
-**कार्यात्मक प्रतिमा** - बटणे किंवा नियंत्रण म्हणून काम करतात:
+**कार्यात्मक प्रतिमा** - बटणे किंवा नियंत्रण म्हणून कार्य करतात:
```html
```
-**जटिल प्रतिमा** - चार्ट, आकृतिबंध, माहितीपट:
+**जटिल प्रतिमा** - चार्ट, आकृतिबंध, माहितीपूर्ण ग्राफिक्स:
```html
@@ -733,12 +930,12 @@ graph TD
```
-### व्हिडिओ आणि ऑडिओ सुलभता
+### व्हिडिओ आणि ऑडिओ अॅक्सेसिबिलिटी
-**व्हिडिओसाठी आवश्यकताः**
+**व्हिडिओसाठी आवश्यकता:**
- **कॅप्शन्स**: बोललेल्या सामग्रीचा आणि ध्वनी प्रभावांचा मजकूर आवृत्ती
- **ऑडिओ वर्णन**: अंध वापरकर्त्यांसाठी दृश्य घटकांचे वर्णन
-- **ट्रान्सक्रिप्ट्स**: सर्व ऑडिओ आणि दृश्य सामग्रीची पूर्ण मजकूर आवृत्ती
+- **ट्रान्सक्रिप्ट्स**: सर्व ऑडिओ आणि व्हिज्युअल सामग्रीची संपूर्ण मजकूर आवृत्ती
```html
@@ -748,13 +945,13 @@ graph TD
```
-**ऑडिओसाठी आवश्यकताः**
+**ऑडिओसाठी आवश्यकता:**
- **ट्रान्सक्रिप्ट्स**: सर्व बोललेल्या सामग्रीची मजकूर आवृत्ती
-- **दृश्य संकेत**: फक्त ऑडिओ सामग्रीसाठी, दृश्य संकेत प्रदान करा
+- **दृश्य निर्देशक**: फक्त ऑडिओ सामग्रीसाठी, दृश्य संकेत प्रदान करा
### आधुनिक प्रतिमा तंत्र
-**सजावटीच्या प्रतिमांसाठी CSS वापरणे:**
+**सजावटीच्या प्रतिमांसाठी CSS चा वापर:**
```css
.hero-section {
background-image: url('decorative-hero.jpg');
@@ -762,7 +959,7 @@ graph TD
}
```
-**सुलभतेसह प्रतिसादक्षम प्रतिमा:**
+**अॅक्सेसिबिलिटीसह प्रतिसादात्मक प्रतिमा:**
```html
@@ -771,15 +968,34 @@ graph TD
```
-✅ **प्रतिमा सुलभता चाचणी करा**: स्क्रीन रीडर वापरून प्रतिमांसह पृष्ठ नेव्हिगेट करा. तुम्हाला सामग्री समजण्यासाठी पुरेशी माहिती मिळते का?
+✅ **प्रतिमा अॅक्सेसिबिलिटी चाचणी करा**: स्क्रीन रीडर वापरून प्रतिमांसह पृष्ठ नेव्हिगेट करा. तुम्हाला सामग्री समजण्यासाठी पुरेशी माहिती मिळत आहे का?
-## किबोर्ड नेव्हिगेशन आणि फोकस व्यवस्थापन
+## कीबोर्ड नेव्हिगेशन आणि फोकस व्यवस्थापन
-अनेक वापरकर्ते पूर्णपणे त्यांच्या किबोर्डसह वेब नेव्हिगेट करतात. यामध्ये मोटर अपंगत्व असलेले लोक, किबोर्डला माउसपेक्षा जलद मानणारे पॉवर वापरकर्ते आणि ज्यांचा माउस काम करत नाही असे कोणीही समाविष्ट आहे. तुमची साइट किबोर्ड इनपुटसह चांगले कार्य करते याची खात्री करणे आवश्यक आहे आणि अनेकदा तुमची साइट सर्वांसाठी अधिक कार्यक्षम बनवते.
+अनेक वापरकर्ते पूर्णपणे कीबोर्डसह वेब नेव्हिगेट करतात. यामध्ये मोटर अपंगत्व असलेले लोक, कीबोर्डला माऊसपेक्षा जलद मानणारे पॉवर वापरकर्ते आणि ज्यांचा माऊस काम करत नाही असे कोणीही समाविष्ट आहे. तुमची साइट कीबोर्ड इनपुटसह चांगले कार्य करते याची खात्री करणे आवश्यक आहे आणि अनेकदा तुमची साइट सर्वांसाठी अधिक कार्यक्षम बनवते.
-### आवश्यक किबोर्ड नेव्हिगेशन नमुने
+```mermaid
+flowchart LR
+ A[⌨️ Keyboard Navigation] --> B[Tab Order]
+ A --> C[Focus Indicators]
+ A --> D[Skip Links]
+ A --> E[Keyboard Shortcuts]
+
+ B --> B1[Logical sequence All interactive elements No tab traps]
+ C --> C1[Visible outlines High contrast Clear boundaries]
+ D --> D1[Skip to main Skip to nav Bypass repetitive]
+ E --> E1[Escape to close Enter to activate Arrows in groups]
+
+ style A fill:#e3f2fd
+ style B fill:#e8f5e8
+ style C fill:#fff3e0
+ style D fill:#f3e5f5
+ style E fill:#e0f2f1
+```
-**मानक किबोर्ड संवाद:**
+### आवश्यक कीबोर्ड नेव्हिगेशन पॅटर्न
+
+**मानक कीबोर्ड परस्परसंवाद:**
- **Tab**: परस्परसंवादी घटकांमधून पुढे फोकस हलवा
- **Shift + Tab**: फोकस मागे हलवा
- **Enter**: बटणे आणि दुवे सक्रिय करा
@@ -803,7 +1019,7 @@ button:focus-visible {
}
```
-**कार्यक्षम नेव्हिगेशनसाठी स्किप लिंक:**
+**कार्यक्षम नेव्हिगेशनसाठी Skip links:**
```html
Skip to main content
Skip to navigation
@@ -816,7 +1032,7 @@ button:focus-visible {
```
-**योग्य टॅब क्रम:**
+**योग्य टॅब ऑर्डर:**
```html