item:
+ return start
+ else:
+ return start + 1
+ if start > end:
+ return start
+
+ mid = round((start + end)/ 2)
+
+ if the_array[mid] < item:
+ return binary_search(the_array, item, mid + 1, end)
+
+ elif the_array[mid] > item:
+ return binary_search(the_array, item, start, mid - 1)
+
+ else:
+ return mid
+
+ """
+ Insertion sort that timsort uses if the array size is small or if
+ the size of the "run" is small
+ """
+ def insertion_sort(the_array):
+ l = len(the_array)
+ for index in range(1, l):
+ value = the_array[index]
+ pos = binary_search(the_array, value, 0, index - 1)
+ the_array = the_array[:pos] + [value] + the_array[pos:index] + the_array[index+1:]
+ return the_array
+
+ def merge(left, right):
+ """Takes two sorted lists and returns a single sorted list by comparing the
+ elements one at a time.
+ [1, 2, 3, 4, 5, 6]
+ """
+ if not left:
+ return right
+ if not right:
+ return left
+ if left[0] < right[0]:
+ return [left[0]] + merge(left[1:], right)
+ return [right[0]] + merge(left, right[1:])
+
+ def timsort(the_array):
+ runs, sorted_runs = [], []
+ length = len(the_array)
+ new_run = [the_array[0]]
+
+ # for every i in the range of 1 to length of array
+ for i in range(1, length):
+ # if i is at the end of the list
+ if i == length - 1:
+ new_run.append(the_array[i])
+ runs.append(new_run)
+ break
+ # if the i'th element of the array is less than the one before it
+ if the_array[i] < the_array[i-1]:
+ # if new_run is set to None (NULL)
+ if not new_run:
+ runs.append([the_array[i]])
+ new_run.append(the_array[i])
+ else:
+ runs.append(new_run)
+ new_run = []
+ # else if its equal to or more than
+ else:
+ new_run.append(the_array[i])
+
+ # for every item in runs, append it using insertion sort
+ for item in runs:
+ sorted_runs.append(insertion_sort(item))
+
+ # for every run in sorted_runs, merge them
+ sorted_array = []
+ for run in sorted_runs:
+ sorted_array = merge(sorted_array, run)
+
+ print(sorted_array)
+
+ timsort([2, 3, 1, 5, 6, 7])
+`
+
+#### تعقيد:
+
+يحتوي تيم تيم على تعقيد ثابت لـ O (N log (N)) ويقارن بشكل جيد مع Quicksort. يمكن العثور على مجموعة من التعقيدات في هذا [المخطط](https://cdn-images-1.medium.com/max/1600/1*1CkG3c4mZGswDShAV9eHbQ.png)
+
+#### معلومات اكثر:
+
+* [ويكيبيديا](https://en.wikipedia.org/wiki/Timsort)
+
+* [GeeksForGeeks](https://www.geeksforgeeks.org/timsort/)
+
+* [يوتيوب: شرح بصري من Quicksort](https://www.youtube.com/watch?v=jVXsjswWo44)
+
+
+#### ائتمانات:
+
+[بايثون التنفيذ](https://hackernoon.com/timsort-the-fastest-sorting-algorithm-youve-never-heard-of-36b28417f399)
\ No newline at end of file
diff --git a/client/src/guide/arabic/algorithms/string-matching-algorithms/rabin-karp-algorithm/index.md b/client/src/guide/arabic/algorithms/string-matching-algorithms/rabin-karp-algorithm/index.md
new file mode 100644
index 0000000000..3991d9f65f
--- /dev/null
+++ b/client/src/guide/arabic/algorithms/string-matching-algorithms/rabin-karp-algorithm/index.md
@@ -0,0 +1,46 @@
+---
+title: Rabin Karp Algorithm
+localeTitle: خوارزمية رابين كارب
+---
+## خوارزمية رابين كارب
+
+* خوارزمية مطابقة / بحث عن الخوارزمية طورها مايكل رابين وريتشارد م. كارب.
+* يستخدم تقنية **_التجزئة_** و **_القوة الغاشمة_** للمقارنة.
+
+#### شروط مهمة
+
+* **_النمط_** هو السلسلة المراد البحث عنها. النظر في طول نمط كأحرف **_M._**
+* **_النص_** هو **_النص_** الكامل الذي سيتم البحث عن النمط منه. النظر في طول النص كأحرف **_N._**
+
+#### ما هي القوة الغاشمة المقارنة؟
+
+في مقارنة القوة الغاشمة يتم مقارنة كل حرف للنمط مع كل حرف من النص حتى يتم العثور على أحرف غير متطابقة.
+
+#### العمل من خوارزمية رابين كارب
+
+1. حساب قيمة التجزئة _للنمط_
+2. حساب قيمة التجزئة من الشخصيات _M_ الأولى من _النص_
+3. قارن بين قيم التجزئة
+4. إذا كانت غير متساوية ، قم بحساب قيمة التجزئة للأحرف _M_ _للنص التالي_ وقارن مرة أخرى.
+5. إذا كانوا متساوين ، قم بإجراء مقارنة القوة الغاشمة.
+
+ `hash_p = hash value of pattern
+ hash_t = hash value of first M letters in body of text
+ do
+ if (hash_p == hash_t)
+ brute force comparison of pattern and selected section of text
+ hash_t= hash value of next section of text, one character over
+ while (end of text or brute force comparison == true)
+`
+
+#### ميزة أكثر من خوارزمية مطابقة سلسلة ناييف
+
+ينتج عن هذه التقنية مقارنة واحدة فقط لكل تسلسل فرعي للنص ، وتكون القوة الغاشمة مطلوبة فقط عندما تتطابق قيم هاش.
+
+#### تطبيقات
+
+* **_كشف الانتحال_**
+
+#### معلومات اكثر:
+
+[رابين كارب على ويكيبيديا](https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm/)
\ No newline at end of file
diff --git a/client/src/guide/arabic/android-development/core-components/index.md b/client/src/guide/arabic/android-development/core-components/index.md
new file mode 100644
index 0000000000..109ba86668
--- /dev/null
+++ b/client/src/guide/arabic/android-development/core-components/index.md
@@ -0,0 +1,32 @@
+---
+title: Android core components
+localeTitle: مكونات Android الأساسية
+---
# مكونات Android الأساسية
+
+المكونات الأساسية هي العناصر الأساسية التي يتكون منها تطبيق Android. كل واحد منهم لديه غرضه الخاص ودورة حياته ولكن ليست كلها مستقلة. هم انهم:
+
+* أنشطة
+* خدمات
+* مستقبلات البث
+* موفري المحتوى
+
+## [أنشطة](https://developer.android.com/guide/components/activities/)
+
+_النشاط_ هو مكون يحتوي على واجهة مستخدم ويمثل شاشة واحدة. يمكن أن يكون للتطبيق أنشطة متعددة ، يمكن أن يكون كل منها نقطة دخول إلى التطبيق نفسه للمستخدم أو للنظام (نشاط التطبيق الذي يريد فتح نشاط آخر ينتمي إلى التطبيق نفسه أو إلى نشاط آخر).
+
+## [خدمات](https://developer.android.com/guide/components/services)
+
+_الخدمة_ عبارة عن مكون بدون واجهة مستخدم لإجراء عمليات تشغيل طويلة في الخلفية. هناك نوعان من الخدمات:
+
+* الخدمات _الأمامية_ : ترتبط ارتباطًا وثيقًا بتفاعل المستخدم (على سبيل المثال تشغيل الموسيقى) ، لذلك من الصعب على النظام قتلهم.
+* خدمات _خلفية_ : لا ترتبط مباشرة بأنشطة المستخدم ، لذا يمكن قتلهم إذا كانت هناك حاجة إلى المزيد من ذاكرة الوصول العشوائي.
+
+## [مستقبلات البث](https://developer.android.com/guide/components/broadcasts)
+
+_جهاز استقبال البث_ هو مكون آخر بدون واجهة مستخدم (باستثناء إخطار شريط الحالة الاختياري) الذي يسمح للنظام بتسليم الأحداث من / إلى التطبيق ، حتى عندما لم يتم إطلاق هذا الأخير من قبل.
+
+## [موفري المحتوى](https://developer.android.com/guide/topics/providers/content-providers)
+
+_موفر المحتوى_ هو أحد المكونات المستخدمة لإدارة مجموعة من بيانات التطبيق لمشاركتها مع التطبيقات الأخرى. يتم تحديد كل عنصر يتم حفظه في موفر المحتوى من خلال مخطط URI.
+
+للحصول على معلومات مفصلة حول الموضوع ، راجع وثائق [أساسيات Android](https://developer.android.com/guide/components/fundamentals) الرسمية
\ No newline at end of file
diff --git a/client/src/guide/arabic/android-development/firebase/connect-to-firebase/index.md b/client/src/guide/arabic/android-development/firebase/connect-to-firebase/index.md
new file mode 100644
index 0000000000..e58972e2da
--- /dev/null
+++ b/client/src/guide/arabic/android-development/firebase/connect-to-firebase/index.md
@@ -0,0 +1,39 @@
+---
+title: connecting-to-firebase
+localeTitle: التي تربط إلى firebase
+---
+# المتطلبات الأساسية
+
+1. أحدث إصدار من Android Studio
+
+أسهل طريقة للاتصال بـ firebase هي استخدام مساعد firebase.
+
+# 1\. الاتصال باستخدام مساعد Firebase
+
+1. أنشئ حسابًا في [وحدة تحكم Firebase](https://console.firebase.google.com) . انقر على إضافة مشروع لإضافة مشروع Android Studio إليه.
+
+2. قم بتثبيت Google Repository يمكنك القيام بذلك عن طريق إضافة التبعية إلى ملف build.gradle على مستوى المشروع كما يلي:
+
+
+ `allprojects{
+ repositories {
+ maven {
+ url "https://maven.google.com" // Google's Maven repository
+ }
+ }
+ }
+`
+
+بدلا من ذلك ، يمكنك القيام بذلك [باستخدام واجهة المستخدم الرسومية](https://developer.android.com/studio/write/firebase) .
+
+3. انتقل إلى أدوات> Firebase وحدد الاتصال بـ Firebase
+
+إذا كنت ترغب في الاتصال بـ firebase يدويًا ، تتوفر [هنا](https://firebase.google.com/docs/android/setup) تعليمات مفصلة. بعد ربط مشروع Android Studio بـ Firebase ، يمكنك ذلك أيضًا
+
+1. انقر على أحد المنتجات في مساعد firebase ، ثم انتقل إلى مستندات Google حيث سيتم إبلاغك بكيفية المتابعة
+2. انتقل إلى المنتج المطلوب في **"نظرة عامة على المشروع"** في "وحدة التحكم" وانقر فوق " **البدء"**
+3. انتقل إلى [مستندات Firebase](https://www.firebase.com/docs/android/quickstart.html) للاطلاع على كيفية إعداد المنتجات الفردية في مشروعك
+
+ستتيح لك قراءة مجموعة من الثلاثة إعداد المنتج ، والذي يتضمن إضافة تبعيات مناسبة لملف build.gradle الخاص بك.
+
+**إذا كنت تواجه Retdle Gradle** حاول تغيير إصدار Firebase-core أو إصدار قاعدة بيانات Firebase
\ No newline at end of file
diff --git a/client/src/guide/arabic/android-development/firebase/firebase-storage/setup/index.md b/client/src/guide/arabic/android-development/firebase/firebase-storage/setup/index.md
new file mode 100644
index 0000000000..adeef56500
--- /dev/null
+++ b/client/src/guide/arabic/android-development/firebase/firebase-storage/setup/index.md
@@ -0,0 +1,50 @@
+---
+title: Setting up Firebase Storage
+localeTitle: إعداد Firebase Storage
+---
+# إعداد Firebase Storage
+
+## المتطلبات الأساسية
+
+1. أحدث إصدار من Android Studio
+2. لديك اتصال بـ Firebase يدويًا أو عبر مساعد Firebase (راجع [الاتصال بـ Firebase](guide/src/pages/android-development/firebase/connecting-to-firebase) ).
+
+من المستحسن أن تفعل هذا حتى لا يتم الخلط بينك وبين تعليمات جزئية متعلقة بهذا في المستندات المذكورة أدناه.
+
+## إعداده مع Android Studio
+
+بعد إضافة Firebase إلى مشروعك ، ستحتاج إلى إضافة تبعيات إضافية والقيام ببعض الأمور الأخرى من أجل الإعداد تخزين Firebase. هناك وثائق التالية عن هذا:
+
+* [Firebase](https://firebase.google.com/docs/storage/android/start)
+
+قد تكون هناك احتمالية للارتباك في هذه الوثائق أو إذا كنت جديدًا في Firebase ، فقد تواجه صعوبة في فهمه. لذلك اتبع الخطوات belows بعناية:
+
+**إضافة التبعيات Gradle**
+
+في ملف build.gradle على مستوى التطبيق ، أضف ما يلي
+
+ `dependencies {
+ implementation 'com.google.firebase:firebase-storage:16.0.2'
+ }
+`
+
+## تثبيت Firebase Android SDK والأذونات ورمز الإعداد
+
+يمكن الاطلاع على تعليمات مفصلة عن هذه [هنا](https://firebase.google.com/docs/android/setup) .
+
+## مصادر
+
+للتعرف على كيفية القراءة من التخزين في تطبيق Android وكتابته ، راجع المستندات المُدرجة أدناه.
+
+* [تحميل الملفات من Android دليل Firebase](https://firebase.google.com/docs/storage/android/upload-files)
+
+* [قم بتنزيل الملفات على Android دليل Firebase](https://firebase.google.com/docs/storage/android/download-files)
+
+
+## مشاريع نموذجية من مطوري Firebase
+
+يمكنك متابعة هذه العينات من مطوري Firebase للبدء في تخزين Firebase Firebase Quickstart-Android [android-sample](https://github.com/firebase/quickstart-android/tree/master/storage)
+
+## ملحوظة
+
+لقد أوقفت Google الآن عملية "الترجمة" وبدلاً من ذلك تحتاج إلى استخدام "التنفيذ".
\ No newline at end of file
diff --git a/client/src/guide/arabic/android-development/firebase/realtime-database/setup/index.md b/client/src/guide/arabic/android-development/firebase/realtime-database/setup/index.md
new file mode 100644
index 0000000000..9f90aa01ed
--- /dev/null
+++ b/client/src/guide/arabic/android-development/firebase/realtime-database/setup/index.md
@@ -0,0 +1,42 @@
+---
+title: Setting up Firebase Realtime Database
+localeTitle: إعداد قاعدة بيانات Firebase في الوقت الفعلي
+---
+# المتطلبات الأساسية
+
+1. أحدث إصدار من Android Studio
+2. لديك اتصال بـ Firebase يدويًا أو عبر مساعد Firebase (راجع [الاتصال بـ Firebase](guide/src/pages/android-development/firebase/connecting-to-firebase) ). من المستحسن أن تفعل هذا حتى لا يتم الخلط بينك وبين تعليمات جزئية متعلقة بهذا في المستندات المذكورة أدناه.
+
+# إعداده مع Android Studio
+
+بعد إضافة Firebase إلى مشروعك ، ستحتاج إلى إضافة تبعيات إضافية والقيام ببعض الأمور الأخرى من أجل الإعداد قاعدة بيانات الوقت الفعلي. هناك نوعان من الوثائق حول هذا:
+
+1. Firebase quickstart [docs](https://www.firebase.com/docs/android/quickstart.html)
+2. [مستندات](https://firebase.google.com/docs/database/android/start/) جوجل
+
+هناك بعض التناقضات بين الاثنين. للتعويض عنهم ، يمكنك متابعة مستندات Firebase ، ولكن بدلاً من استخدام تبعيات gradle المدرجة هناك ، استخدم القائمة التالية. بهذه الطريقة ، لن تفوتك أي خطوات من أي من الوثائق.
+
+**إضافة التبعيات Gradle** 1 في ملف build.gradle على مستوى التطبيق ، أضف ما يلي
+
+ `dependencies {
+ implementation 'com.firebase:firebase-client-android:2.5.2+'
+ implementation 'com.google.firebase:firebase-database:15.0.0'
+ }
+`
+
+# تثبيت Firebase Android SDK والأذونات ورمز الإعداد
+
+يمكن الاطلاع على تعليمات مفصلة عن هذه [هنا](https://www.firebase.com/docs/android/quickstart.html) .
+
+# مصادر
+
+للتعرف على كيفية القراءة والكتابة إلى قاعدة البيانات في تطبيق Android ، راجع المستندين المدرجين في المراجع. يمكنك أيضًا معرفة كيفية استخدام منتجات Firebase في مستندات Google ، ولكن مرة أخرى ، قد يكون من المفيد أيضًا الاطلاع على مستندات Firebase أيضًا ، أو أي شيء قد يكون مفيدًا.
+
+# المراجع
+
+* FIREBASE ، _Android Quickstart_ ، 17/04/2018 ، 07/05/2018 ، https://www.firebase.com/docs/android/quickstart.html
+* GOOGLE ، _إعداد قاعدة بيانات Firebase للوقت الفعلي للأندرويد_ ، 05/04/2018 ، 07/05/2018 ، https://firebase.google.com/docs/database/android/start/
+
+# حاشية
+
+يأتي السطر الأول من [مستندات](https://www.firebase.com/docs/android/quickstart.html) Firebase لإعداد إعداد الوقت الحقيقي في Android Studio. في المستندات ، يتم استخدام "الترجمة" ولكن تم إيقافها واستبدالها بـ "تنفيذ". يأتي السطر الثاني من [مستندات](https://firebase.google.com/docs/database/android/start/) Google حول إعداد حساب الوقت الحقيقي في Android Studio. إذا كان في الواقع زائدة عن الحاجة لإضافة كليهما ، فيرجى تصحيح هذه المقالة.
\ No newline at end of file
diff --git a/client/src/guide/arabic/android-development/index.md b/client/src/guide/arabic/android-development/index.md
new file mode 100644
index 0000000000..93a794160a
--- /dev/null
+++ b/client/src/guide/arabic/android-development/index.md
@@ -0,0 +1,63 @@
+---
+title: Android Development
+localeTitle: تطوير اندرويد
+---
+# تطوير اندرويد
+
+يمكن أن تكون تطبيقات Android طريقة رائعة وممتعة للدخول إلى عالم البرمجة. يمكن للمبرمجين رسميًا استخدام Java أو Kotlin أو C ++ للتطوير لنظام Android ، وعلى الرغم من وجود قيود واجهة برمجة التطبيقات ، باستخدام الأدوات ، يمكن للمطورين استخدام عدد كبير من اللغات ، بما في ذلك JavaScript ، C ، أو التجميع ، والإمكانيات لا حصر لها.
+
+بدءًا من الألعاب البسيطة وتطبيقات المساعدة إلى مشغلات الموسيقى الكاملة ، هناك العديد من الفرص لإنشاء شيء ذي معنى باستخدام Android. ينتشر مجتمع مطوري برامج Android على نطاق واسع ، ويسهل العثور على الوثائق والموارد عبر الإنترنت ، حتى تتمكن من معالجة أي مشكلة تواجهك.
+
+هناك بالتأكيد منحنى التعلم للتعود على إطار Android ، ولكن بمجرد فهم المكونات الأساسية التي تشكل التطبيق ، سيأتي الباقي بشكل طبيعي.
+
+يحتوي منحنى التعلم المتضمن في Android على منحدر أصغر نسبيًا مقارنة بتعلم تقنيات أخرى مثل NodeJS. كما يسهل الفهم نسبيًا ويساهم في خطة AOSP التي تستضيفها Google. يمكن العثور على المشروع [هنا](https://source.android.com/)
+
+## ابدء
+
+راجع الأدلة الموجودة في هذا المجلد للتعرف على [المكونات الأساسية](core-components/index.md) الأربعة التي تشكل أحد تطبيقات Android وكيفية البدء في تطبيق نموذج ، ومن ثم الخوض في الموضوعات الأكثر تقدمًا مثل الأجزاء ونظام إنشاء Gradle. ثم تحقق من دليل مواصفات التصميم المادي أيضًا لمعرفة كيفية جعل تطبيقاتك جميلة وسهلة الاستخدام.
+
+### الإعداد وبدء التشغيل باستخدام Android Studio
+
+الذهاب إلى هذا [الرابط](https://www.oracle.com/technetwork/java/javase/downloads/index.html) وتثبيت أحدث JDK. الآن قم بتنزيل حزمة أدوات Android Studio و SDK من [هنا](https://developer.android.com/studio/) . ثبّت Android Studio و SDK بعد الإعداد. تابع ملاحظة موقع SDK. إذا واجهت أي خطأ ، فانتقل إلى الإعدادات لاحقًا لحلها.
+
+أخيرًا ، تعلم كيفية دمج مكتبات الطرف الثالث وخدمات Firebase لإضافة وظائف إلى تطبيقك. سيكون من المفيد إذا كنت تمر الوثائق الرسمية لكل مكون.
+
+### الوثائق الرسمية
+
+[دليل مطوّري برامج Google لأجهزة Android](https://developer.android.com/training/index.html)
+
+#### جاوة مقابل كوتلين
+
+منذ أن أعلنت Google أن Kotlin هي اللغة الرسمية لتطوير Android في Google IO في عام 2017 ، أصبح المبرمجون الذين يريدون أن يصبحوا مطوري برامج Android في مأزق. السؤال الكبير أمامهم هو ما إذا كانوا يجب أن يتعلموا كوتلين أو جافا.
+
+##### يجب أن يبدأ المبتدئين في تطوير Android بجافا
+
+أول شيء هو أن تطوير Android ليس كل شيء ؛ كمبرمج ، قد تبدأ مسيرتك المهنية مع تطوير Android ، ولكن إذا بدأت باستخدام لغة راسخة مثل Java ، فإنك تصبح جزءًا من مجتمع Java الأكبر والسوق ، والذي يعني بشكل مباشر المزيد من فرص العمل.
+
+الشيء الثاني والأكثر أهمية هو وجود مجتمع ضخم من مبرمجي جافا ، مما يعني أنه يمكنك العثور على إجابات عندما تكون عالقاً. هذا أمر مهم للغاية لأنك ، كمبتدئ ، ستواجه الكثير من المشاكل التقنية وقد لا تعرف إلى أين تتجه عندما تكون عالقاً. عندما تبحث في Google عن مشكلة جافا ، فإنك ملزم بالحصول على إجابات ؛ لا يمكن قول الشيء نفسه بالنسبة لكوتلين ، والتي لا تزال لغة برمجة جديدة.
+
+###### مبرمجو جافا يجب أن يتعلموا Kotlin
+
+الآن ، بالعودة إلى المجموعة الثانية من المبرمجين الذين يريدون تعلم تطوير Android: مطوروا جافا من زملائنا. بالنسبة لهم ، أعتقد أنه من الأفضل تعلم Kotlin لأنه يحسن الإنتاجية.
+
+حقا يمكن كتابة الفئة التي تأخذ 50 سطر من الكود في جاوة في سطر واحد فقط في Kotlin. يمكن أن يساعدك ذلك على تجنب كل كود لوحة الغلاية ، على سبيل المثال لا تحتاج إلى تحديد getters و setters ، يساوي () ، hashCode () أو toString () الطرق. يمكن أن يولد Kotlin كل ذلك في حد ذاته.
+
+إذا كنت لا تعرف ، فإن Kotlin تم تطويره بواسطة JetBrains ، الشركة التي تقف وراء واحدة من أشهر معرفات Java ، IntelliJ IDEA. لقد كانوا متجرًا لـ Java وتطوير IDE مثل IntelliJ IDEA و PyCharm و ReSharper ، وكلهم في Java ، وقاموا ببناء Kotlin لتحسين إنتاجيتهم ، ولكن في نفس الوقت ، لا يمكنهم إعادة كتابة كل الرموز الخاصة بهم في Kotlin ، ولهذا السبب جعلوا Kotlin قابل للتشغيل الكامل مع جافا.
+
+لأن Kotlin يولد Java bytecode ، يمكنك استخدام أطر عمل Java المفضلة لديك والمكتبات في Kotlin ويمكن لأصدقائك في Java أيضًا استخدام أي إطار Kotlin تقوم بتطويره.
+
+### ممارسة
+
+[Codelabs لتعزيز المهارات](https://codelabs.developers.google.com)
+
+### Google Developer Console
+
+[Google Developer Console](https://developer.android.com/distribute/console/)
+
+### الدورات
+
+[Udacity الروبوت برنامج Nanodegree](https://udacity.com/course/android-developer-nanodegree-by-google--nd801)
+
+### تطوير تطبيقات Android
+
+أفضل جزء في تعلم Android هو أن الدورات والمواد المتاحة على الإنترنت مجانية. الرابط إلى الدورة التدريبية هنا - [تطوير تطبيقات Android](https://udacity.com/course/new-android-fundamentals--ud851) .
\ No newline at end of file
diff --git a/client/src/guide/arabic/angular/angular-resources/index.md b/client/src/guide/arabic/angular/angular-resources/index.md
new file mode 100644
index 0000000000..30c91ca734
--- /dev/null
+++ b/client/src/guide/arabic/angular/angular-resources/index.md
@@ -0,0 +1,44 @@
+---
+title: Angular Resources
+localeTitle: الموارد الزاوي
+---
+مجموعة من الموارد الزاوي مفيدة
+
+## Angular 1.x
+
+### الصفحات العامة
+
+* [Angular JS](https://angularjs.org/) - The Angular JS Homepage
+* [AngularJS Style Guide](https://github.com/johnpapa/angular-styleguide/tree/master/a1) - أفضل الممارسات التفصيلية لتطوير الزاوي
+
+### أشرطة فيديو
+
+* [التوجيه في JS Angular](https://www.youtube.com/watch?v=5uhZCc0j9RY) - توجيه العميل في 15 دقيقة
+* [Angular ToDo App](https://www.youtube.com/watch?v=WuiHuZq_cg4) - An Angular ToDo App in 12 minutes
+
+### الدورات
+
+* [Egghead.io AngularJS دورات ($)](https://egghead.io/browse/frameworks/angularjs)
+
+## الزاوي 2.x +
+
+### الصفحات العامة
+
+* [Angular](https://angular.io/) - The Angular Homepage
+* [دليل النمط الزاوي](https://angular.io/guide/styleguide) - أفضل الممارسات التفصيلية لتطوير الزاوي
+
+### صفحات محددة الموضوع
+
+* [توجيهات](http://www.sitepoint.com/practical-guide-angularjs-directives/) - دليل ممتاز الخوض في التفاصيل حول التوجيهات الزاوي (الجزء 1)
+
+### الدورات
+
+* [Egghead.io دورات الزاوي ($)](https://egghead.io/browse/frameworks/angular)
+* [FrontendMasters - بناء تطبيقات Awesomer مع الزاوي](https://frontendmasters.com/courses/building-apps-angular)
+* [في نهاية المطاف الزاوي - تود شعار](https://ultimateangular.com/)
+* [Angular 6 (Angular 2 سابقا) - الدليل الكامل ($) Maximilian Schwarzmüller](https://www.udemy.com/the-complete-guide-to-angular-2/)
+
+## المدونات
+
+* [Alligator.io](https://alligator.io/angular/)
+* [الزاوي في العمق](https://blog.angularindepth.com/tagged/angular)
\ No newline at end of file
diff --git a/client/src/guide/arabic/angular/animations/index.md b/client/src/guide/arabic/angular/animations/index.md
new file mode 100644
index 0000000000..b51e5671cf
--- /dev/null
+++ b/client/src/guide/arabic/angular/animations/index.md
@@ -0,0 +1,287 @@
+---
+title: Animations
+localeTitle: الرسوم المتحركة
+---
+# الرسوم المتحركة
+
+#### التحفيز
+
+تستخدم مكونات الويب الحديثة بشكل متكرر الرسوم المتحركة. مطوري الأقمشة Cascading Style-sheets (CSS) مع الأدوات اللازمة لإنشاء رسوم متحركة رائعة. نقل الملكية ، الرسوم المتحركة المسماة بشكل فريد ، keyframes متعددة الأجزاء ممكنة مع CSS. الاحتمالات المتحركة لا حصر لها بفضل CSS.
+
+في تطبيق ويب حديث ، تركز الحركة على انتباه المستخدم. تسعى الرسوم المتحركة الجيدة لتوجيه انتباه المستخدم بطريقة مرضية ومثمرة. لا ينبغي أن تكون الرسوم المتحركة مزعجة للمستخدم.
+
+تقدم الرسوم المتحركة تعليقات على شكل حركة. أنها تظهر للمستخدم أن التطبيق يتعامل بنشاط مع طلباتهم. شيء بسيط مثل الضغط على زر المرئي أو محمل عندما يجب تحميل التطبيق يجذب انتباه المستخدم.
+
+تستمر الرسوم المتحركة في التزايد بشكل أكبر في حالة Angular. تطور Google Angular مع الترويج لفلسفة التصميم متعدد الأبعاد. وتشجع واجهات المستخدم موجزة (UI) تستكمل مع ردود فعل المستخدم الرسوم المتحركة. يجعل التطبيقات على شبكة الإنترنت يشعر إلى حد ما على قيد الحياة وممتعة للاستخدام.
+
+يقوم مجتمع Angular بتطوير مكتبة القطعة الأساسية المسماة [Material2](https://github.com/angular/material2) . يضيف هذا المشروع مجموعة متنوعة من وحدات الواجهة إلى Angular. معظمها ميزة الرسوم المتحركة. لفهم كيفية عملها ، توصي هذه المقالة بدراسة رسوم CSS المتحركة قبل القراءة.
+
+الرسوم المتحركة الزاوالية هي النسخة المبسطة لإطار العمل الذي يوفره CSS أصلاً. CSS هي التكنولوجيا الأساسية للرسوم المتحركة الزاوي التي تحدث في متصفح الويب. CSS خارج نطاق هذه المقالة بالرغم من ذلك. حان الوقت لمعالجة الرسوم المتحركة الزاوي وجها لوجه.
+
+#### إعداد الرسوم المتحركة
+
+قبل الرسوم المتحركة ، يجب تضمين `BrowserAnimationsModule` في مصفوفة واردات وحدة الجذر. كان متوفرا من `@angular/platform-browser/animations` . هذا NgModule يضمن الرسوم المتحركة تعمل لمنصة معينة. تفترض هذه المقالة مستعرض الويب القياسي لكل مثال.
+
+تعلن الرسوم المتحركة الزاوية داخل البيانات الوصفية لـ `@Component` . `@Component` فئة لتمييزها كمكون إلى Angular. تحتوي بيانات التعريف الخاصة به على تكوينات المكون بما في ذلك `animations: []` الحقل. يمثل كل عنصر صفيف من هذا الحقل مشغل `AnimationTriggerMetadata` ( `AnimationTriggerMetadata` ).
+
+الرسوم المتحركة حصرية لمكون مضيفهم عبر البيانات الوصفية للمُصممة. يمكن استخدام الرسوم المتحركة فقط في قالب مكون المضيف. الرسوم المتحركة لا ترث لأطفال المكون. هناك عمل سهل حول هذا.
+
+يمكنك دائمًا إنشاء ملف منفصل يصدر صفيفًا. يمكن لأي فئة مكون استيراد هذا الصفيف من أعلى ملف المضيف الخاص به. بعد ذلك ، ينتقل الرمز المميز للمصفوفة المدرج إلى البيانات الوصفية للرسوم المتحركة الخاصة بالمكون. كرر هذه العملية لأي مكونات أخرى تتطلب نفس الصفيف في بياناتها المتحركة.
+
+يتيح لك إسقاط المحتوى تطبيق رسوم متحركة على محتوى DOM للمكون أ (نموذج كائن المستند). يمكن للمكون "ب" الذي يلف هذا المحتوى DOM تقديم المحتويات في قالب خاص به. بمجرد القيام بذلك ، لا تنفي الحركات المكونة من A. يشتمل المكون B على الرسوم المتحركة لـ A من خلال عرض المحتوى.
+
+حسنا. أنت تعرف كيفية إعداد الرسوم المتحركة ومكان إعلانها. التنفيذ هو الخطوة التالية.
+
+#### طرق الرسوم المتحركة
+
+تستخدم الرسوم المتحركة ذات الزوايا سلسلة من استدعاءات الأسلوب التي يمكن استيرادها من `@angular/animations` . يبدأ كل عنصر من عناصر مصفوفة الرسوم المتحركة لـ `@Component` كطريقة واحدة. تتكشف حججها كسلسلة من مكالمات الأسلوب الأعلى. تعرض القائمة التالية بعض الطرق المستخدمة لإنشاء صور متحركة Angular.
+
+* `trigger(selector: string, AnimationMetadata[])`
+
+إرجاع `AnimationTriggerMetadata`
+
+* `state(data: string, AnimationStyleMetadata, options?: object)`
+
+إرجاع `AnimationStateMetadata`
+
+* `style(CSSKeyValues: object)`
+
+إرجاع `AnimationStyleMetadata`
+
+* `animate(timing: string|number, AnimationStyleMetadata|KeyframesMetadata)`
+
+إرجاع `AnimationAnimateMetadata`
+
+* `transition(stateChange: string, AnimationMetadata|AnimationMetadata[], options?: object)`
+
+إرجاع `AnimationTransitionMetadata`
+
+في حين أن هناك بالتأكيد [المزيد من الطرق](https://angular.io/api/animations) للاختيار من بينها ، فإن هذه الأساليب الخمسة تتعامل مع الأساسيات. محاولة فهم هذه الأساليب الأساسية كقائمة لا يساعد كثيرا. التوضيحات التي تحدث عن طريق التعداد النقطي متبوعة بمثال سوف يكون لها معنى أفضل.
+
+##### المشغل (محدد: سلسلة ، الرسوم المتحركة \[\])
+
+يقوم أسلوب `trigger(...)` بتغليف عنصر واحد من الرسوم المتحركة داخل مصفوفة الرسوم المتحركة.
+
+`selector: string` الوسيطة الأول للطريقة `selector: string` تتطابق `selector: string` مع سمة العضو `[@selector]` . يعمل مثل توجيه السمة في قالب المكون. وهو يربط عنصر الرسوم المتحركة بالقالب من خلال محدد السمة.
+
+الوسيطة الثانية هي مصفوفة تحتوي على قائمة بطرق الرسوم المتحركة المطبقة. يحتفظ `trigger(...)` بالكلية في صفيف واحد.
+
+##### الحالة (البيانات: السلسلة ، AnimationStyleMetadata ، الخيارات ؟: الكائن)
+
+`state(...)` الحالة النهائية للرسوم المتحركة. فهي تطبق قائمة بخصائص CSS للعنصر المستهدف بعد انتهاء الرسوم المتحركة. هذا هو عنوان CSS للعنصر المتحرك يطابق دقة الصورة المتحركة.
+
+تتطابق الوسيطة الأولى مع قيمة البيانات المرتبطة بربط الرسوم المتحركة. وهذا يعني أن القيمة المنضمة إلى `[@selector]` في القالب تطابق مع الحالة الأولى `state(...)` . تحدد قيمة البيانات الحالة النهائية. يحدد تغيير القيمة وسائل الرسوم المتحركة (انظر `transition(...)` ).
+
+تستضيف الوسيطة الثانية أنماط CSS التي تنطبق على عنصر ما بعد الحركة. يتم تمرير الأنماط من خلال استدعاء `style(...)` وتمريره إلى وسيطة الأنماط المرغوبة ككائن.
+
+تشغل قائمة الخيارات بشكل اختياري الوسيطة الثالثة. يجب أن تظل خيارات `state(...)` الافتراضية `state(...)` دون تغيير ما لم يكن هناك سبب آخر.
+
+##### النمط (CSSKeyValues: الكائن)
+
+ربما لاحظت `AnimationStyleMetadata` عدة مرات في القائمة السابقة. إرجاع مكون `style(...)` هذا النوع الدقيق من البيانات التعريفية. أينما تطبق أنماط CSS ، يجب استدعاء `style(...)` . كائن يحتوي على أنماط CSS يدور حول وسيطته.
+
+وبطبيعة الحال ، فإن الأنماط المتحركة في CSS تتحول إلى `style(...)` الزاوي `style(...)` . منح ، لا شيء مستحيل ل CSS يصبح فجأة ممكن مع الرسوم المتحركة Angular.
+
+##### تحريك (توقيت: string | number، AnimationStyleMetadata | AnimationKeyframesMetadata)
+
+تقبل الدالة `animate(...)` تعبير توقيت كوسيطة الأولى الخاصة به. هذه الوسيطة الأوقات ، و paces ، و / أو يؤخر الرسوم المتحركة للطريقة. تقبل هذه الوسيطة إما رقم أو تعبير سلسلة. وأوضح التنسيق [هنا](https://angular.io/api/animations/animate#usage) .
+
+الوسيطة الثانية من الحركة `animate(...)` هي خاصية CSS تستدعي الرسوم المتحركة. هذا يأخذ شكل `style(...)` الذي إرجاع `AnimationStyleMetadata` . فكر في الحركة `animate(...)` كالطريقة التي تبدأ الرسوم المتحركة.
+
+يمكن أيضًا تطبيق سلسلة من الإطارات المفتاحية على الوسيطة الثانية. الإطارات الأساسية هي خيار أكثر تقدمًا تشرحه هذه المقالة لاحقًا. إطارات مفتاحية تميز الأقسام المختلفة من الرسوم المتحركة.
+
+قد لا تتلقى `animate(...)` وسيطة ثانية. في هذه الحالة ، لا ينطبق توقيت الرسوم المتحركة للطريقة إلا على CSS المنعكسة في أساليب `state(...)` . تغييرات الخاصية في حالة المشغل `state(...)` سوف تحرك.
+
+##### الانتقال (changExpr: string، AnimationMetadata | AnimationMetadata \[\]، options ؟: object)
+
+تبدأ `animate(...)` رسوم متحركة بينما يحدد `transition(...)` أي رسوم متحركة تبدأ.
+
+تتكون الوسيطة الأولى من شكل فريد للبنية الدقيقة. يدل على حدوث تغيير في الحالة (أو التغيير في البيانات). تحدد البيانات المرتبطة بربط رسوم القالب ( `[selector]="value"` ) هذا التعبير. يشرح القسم التالي بعنوان "حالة الرسوم المتحركة" هذا المفهوم أكثر قليلاً.
+
+تتضمن الوسيطة الثانية من `transition(...)` `AnimationMetadata` (تم إرجاعها بواسطة `animate(...)` ). تقبل الوسيطة إما مصفوفة `AnimationMetadata` أو نسخة واحدة.
+
+تتطابق قيمة الوسيطة الأولى مع قيمة البيانات المرتبطة في القالب ( `[selector]="value"` ). في حالة حدوث مطابقة كاملة ، يتم تقييم الحجة بنجاح. ثم تبدأ الوسيطة الثانية في رسم متحرك استجابة لنجاح الأول.
+
+تشغل قائمة الخيارات بشكل اختياري الوسيطة الثالثة. يجب أن تبقى خيارات `transition(...)` الافتراضية `transition(...)` دون تغيير ما لم يكن هناك سبب آخر.
+
+##### مثال للرسوم المتحركة
+
+ ``import { Component, OnInit } from '@angular/core';
+ import { trigger, state, style, animate, transition } from '@angular/animations';
+
+ @Component({
+ selector: 'app-example',
+ template: `
+ Click the button to change its color!
+ Toggle Me! // animation binding
+ `,
+ animations: [ // metadata array
+ trigger('toggleClick', [ // trigger block
+ state('true', style({ // final CSS following animation
+ backgroundColor: 'green'
+ })),
+ state('false', style({
+ backgroundColor: 'red'
+ })),
+ transition('true => false', animate('1000ms linear')), // animation timing
+ transition('false => true', animate('1000ms linear'))
+ ])
+ ] // end of trigger block
+ })
+ export class ExampleComponent {
+ isGreen: string = 'true';
+
+ toggleIsCorrect() {
+ this.isGreen = this.isGreen === 'true' ? 'false' : 'true'; // change in data-bound value
+ }
+ }
+``
+
+يقوم المثال أعلاه بإجراء مبادلة ألوان بسيطة مع كل نقرة زر. وبطبيعة الحال ، فإن اللون ينتقل بسرعة في الخبو الخطي حسب `animate('1000ms linear')` . `[@toggleClick]` الرسم المتحرك مع الزر عن طريق مطابقة الوسيطة الأولى من `trigger(...)` إلى ربط الرسوم المتحركة `[@toggleClick]` .
+
+ربط الربط بقيمة `isGreen` من فئة المكون. تحدد هذه القيمة اللون الناتج كما تم تعيينه بواسطة طريقتين `style(...)` داخل كتلة `trigger(...)` . يكون ارتباط الصور المتحرك في اتجاه واحد بحيث تقوم التغييرات في `isGreen` في فئة المكون بإعلام ارتباط القالب. وهذا هو ، ارتباط الرسوم المتحركة `[@toggleClick]` .
+
+يحتوي عنصر الزر في القالب أيضًا على حدث `click` مرتبط به. يؤدي النقر فوق الزر إلى `isGreen` القيم. هذا يغير بيانات فئة المكون. يلتقط رابط الرسوم المتحركة هذا الأمر ويستدعي أسلوب `trigger(...)` المطابقة `trigger(...)` . يقع `trigger(...)` داخل مصفوفة الرسوم المتحركة للبيانات الوصفية للمكون. يحدث شيئان عند استدعاء الزناد.
+
+التواجد الأول يتعلق بطريقتين `state(...)` . تتطابق القيمة الجديدة لـ `isGreen` مع أول وسيطة في `state(...)` . بمجرد أن تتطابق ، يتم تطبيق أنماط CSS `style(...)` على الحالة النهائية لعنصر مضيف الرسوم المتحركة. \`تسري الحالة النهائية بعد كل الرسوم المتحركة.
+
+الآن للحدث الثاني. ويقارن تغيير البيانات الذي يستدعي ارتباط الرسوم المتحركة عبر طريقتين `transition(...)` . واحد منهم يطابق التغيير في البيانات إلى أول حجة لها. نقرة الزر الأول الناتجة هي `isGreen` للانتقال من 'true' إلى 'false' ('true => false'). ويعني هذا أن أول أسلوب `transition(...)` ينشط الحجة الثانية.
+
+تقوم الوظيفة `animate(...)` المقابلة ببدء عملية `transition(...)` تقييمها بنجاح. يحدد هذا الأسلوب مدة لون الرسوم المتحركة تتلاشى مع سرعة التلاشي. ينفذ الرسوم المتحركة ويتلاشى الزر إلى اللون الأحمر.
+
+يمكن أن تحدث هذه العملية أي عدد من المرات بعد النقر فوق زر. سوف `backgroundColor` الزر بين الأخضر والأحمر في الخبو الخطي.
+
+#### حالة الرسوم المتحركة
+
+يستحق بناء الجملة `transition(...)` دقيقة بالتفصيل. يحدد Angular الرسوم المتحركة وتوقيتها من خلال تقييم هذه البنية. هناك التحولات الدولة التالية. فهم يطورون تغييرات في البيانات المرتبطة بربط الرسوم المتحركة.
+
+* `'someValue' => 'anotherValue'`
+
+مشغل رسوم متحركة حيث تتغير البيانات المرتبطة من "someValue" إلى "anotherValue".
+
+* `'anotherValue' => 'someValue'`
+
+مشغل رسوم متحركة حيث تتغير البيانات المرتبطة من "anotherValue" إلى "someValue".
+
+* `'someValue' <=> 'anotherValue'`
+
+تتغير البيانات من "someValue" إلى "anotherValue" أو العكس.
+
+هناك أيضا وجود `void` و `*` الدول. يشير `void` إلى أن المكون إما يدخل أو يخرج من DOM. هذا مثالي للرسوم المتحركة الدخول والخروج.
+
+* `'someValue' => void` : _ترك_ مكون المضيف للبيانات المرتبطة DOM
+
+* `void => 'someValue'` : يتم _إدخال_ مكون المضيف للبيانات المرتبطة في DOM
+
+
+`*` تشير إلى حالة أحرف بدل. يمكن أن تفسر حالات أحرف البدل إلى "أي دولة". وهذا يشمل `void` بالإضافة إلى أي تغيير آخر في البيانات المرتبطة.
+
+#### إطارات مفتاحية
+
+تناولت هذه المقالة أساسيات تحريك التطبيقات الزاويّة. توجد تقنيات الرسوم المتحركة المتقدمة جنبا إلى جنب مع هذه الأساسيات. إن تجميع الإطارات الرئيسية معًا هو أحد هذه التقنيات. مستوحاة من قاعدة `@keyframes` . إذا كنت قد عملت مع `@keyframes` ، فأنت بالفعل تفهم كيفية عمل الإطارات المفتاحية في العمل الزاوي. يصبح مجرد مسألة بناء الجملة
+
+تستورد طريقة `keyframes(...)` من `@angular/animations` . يمرر في الوسيطة الثانية من `animate(...)` بدلاً من `AnimationStyleMetadata` النموذجية. تقبل طريقة `keyframes(...)` وسيطة واحدة كصفيف من `AnimationStyleMetadata` . هذا يمكن أيضاً الإشارة إليه على أنه صفيف من أساليب `style(...)` .
+
+يذهب كل إطار مفتاحي للرسوم المتحركة داخل صف `keyframes(...)` . عناصر الإطار الرئيسي هذه هي أساليب `style(...)` تدعم خاصية `offset` . يشير `offset` إلى نقطة في مدة الرسم المتحرك حيث يجب تطبيق خصائص النمط المصاحب لها. تمتد قيمته من 0 (بداية الرسوم المتحركة) إلى 1 (نهاية الرسوم المتحركة).
+
+ ``import { Component } from '@angular/core';
+ import { trigger, state, style, animate, transition, keyframes } from '@angular/animations';
+
+ @Component({
+ selector: 'app-example',
+ styles: [
+ `.ball {
+ position: relative;
+ background-color: black;
+ border-radius: 50%;
+ top: 200px;
+ height: 25px;
+ width: 25px;
+ }`
+ ],
+ template: `
+ Arcing Ball Animation
+ Arc the Ball!
+
+ `,
+ animations: [
+ trigger('animateArc', [
+ state('true', style({
+ left: '400px',
+ top: '200px'
+ })),
+ state('false', style({
+ left: '0',
+ top: '200px'
+ })),
+ transition('false => true', animate('1000ms linear', keyframes([
+ style({ left: '0', top: '200px', offset: 0 }),
+ style({ left: '200px', top: '100px', offset: 0.50 }),
+ style({ left: '400px', top: '200px', offset: 1 })
+ ]))),
+ transition('true => false', animate('1000ms linear', keyframes([
+ style({ left: '400px', top: '200px', offset: 0 }),
+ style({ left: '200px', top: '100px', offset: 0.50 }),
+ style({ left: '0', top: '200px', offset: 1 })
+ ])))
+ ])
+ ]
+ })
+ export class ExampleComponent {
+ arc: string = 'false';
+
+ toggleBounce(){
+ this.arc = this.arc === 'false' ? 'true' : 'false';
+ }
+ }
+``
+
+الاختلاف الرئيسي في المثال أعلاه مقارنة مع المثال الآخر هو الوسيطة الثانية من `animate(...)` . يحتوي الآن على أسلوب `keyframes(...)` يستضيف مصفوفة من الإطارات المفتاحية للرسوم المتحركة. في حين أن الرسوم المتحركة نفسها هي أيضا مختلفة ، وتقنية لتحريك مماثل.
+
+يؤدي النقر فوق الزر إلى ظهور الزر للقوس عبر الشاشة. يتحرك القوس حسب عناصر مصفوفة الطريقة في `keyframes(...)` (إطارات مفتاحية). في منتصف نقطة الرسوم المتحركة ( `offset: 0.50` ) ، تغير الكرة المسار. ينحدر إلى ارتفاعه الأصلي بينما يستمر عبر الشاشة. النقر فوق الزر مرة أخرى يعكس الرسوم المتحركة.
+
+`left` `top` هي خصائص متحركة بعد تحديد `position: relative;` لهذا العنصر. يمكن أن تقوم خاصية `transform` بعمل رسوم متحركة مماثلة. `transform` خاصية ممتدة تماما ولكن متحركة.
+
+يمكن أن يوجد أي عدد من الإطارات المفتاحية الموجودة بين الإزاحة 0 و 1. تأخذ تتابعات الرسوم المتحركة المعقدة شكل إطارات مفتاحية keyframes. فهي واحدة من العديد من التقنيات المتقدمة في الرسوم المتحركة Angular.
+
+### الرسوم المتحركة مع المضيف ملزم
+
+ستواجه بدون شك الحالة التي تريد فيها إرفاق صورة متحركة بعنصر HTML في أحد المكونات نفسها ، بدلاً من عنصر في قالب المكون. هذا يتطلب المزيد من الجهد لأنه لا يمكنك الذهاب إلى HTML النموذج وإرفاق الرسوم المتحركة هناك. بدلاً من ذلك ، سيكون عليك استيراد `HostBinding` واستخدام ذلك.
+
+يتم عرض الرمز الأدنى لهذا السيناريو أدناه. سأعيد استخدام نفس حالة الرسوم المتحركة للشفرة أعلاه للاتساق ولا أقوم بعرض أي من رموز الرسوم المتحركة الفعلية حيث يمكنك بسهولة العثور على ذلك أعلاه.
+
+ `import { Component, HostBinding } from '@angular/core';
+
+ @Component({
+ ...
+ })
+ export class ExampleComponent {
+ @HostBinding('@animateArc') get arcAnimation() {
+ return this.arc;
+ }
+ }
+`
+
+الفكرة الكامنة وراء تحريك مكون المضيف تشبه إلى حد كبير تحريك عنصر من القالب مع الاختلاف الوحيد وهو عدم الوصول إلى العنصر الذي تقوم بتحريكه. لا يزال لديك لتمرير اسم الرسوم المتحركة ( `@animateArc` ) عندما يعلن `HostBinding` ولا يزال لديك للعودة للحالة الراهنة للرسوم المتحركة ( `this.arc` ). لا يمثل اسم الدالة مادة فعلية ، لذلك `arcAnimation` الممكن تغيير `arcAnimation` إلى أي شيء ، طالما أنها لا تتعارض مع أسماء الخصائص الموجودة على المكون ، وستعمل بشكل جيد تمامًا.
+
+#### استنتاج
+
+يغطي هذا أساسيات الرسوم المتحركة مع Angular. يجعل Angular إعداد الرسوم المتحركة أمرًا سهلاً للغاية باستخدام CLI Angular. يتطلب استخدام الرسوم المتحركة لأول مرة فئة واحدة فقط. تذكر ، نطاق الرسوم المتحركة إلى قالب المكون. قم بتصدير مصفوفة الانتقالات الخاصة بك من ملف منفصل إذا كنت تخطط لاستخدامها عبر مكونات متعددة.
+
+كل تصدير فائدة / طريقة للرسوم المتحركة من `@angular/animations` . انهم جميعا يعملون معا لتوفير نظام قوي من الرسوم المتحركة مستوحاة من CSS. هناك طرق أكثر مما يمكن أن تغطيه هذه المقالة.
+
+الآن بعد أن تعرفت على الأساسيات ، لا تتردد في استكشاف الروابط أدناه لمزيد من المعلومات عن الحركات الزاحفة.
+
+## مصادر
+
+* [فريق الزاوي. "الرسوم المتحركة". _جوجل_ . تم الوصول إليه في 7 يونيو 2018.](https://angular.io/guide/animations)
+* [فريق الزاوي. "حزمة الرسوم المتحركة". _جوجل_ . تم الوصول إليه في 7 يونيو 2018.](https://angular.io/api/animations)
+
+## مصادر
+
+* [وثائق الزاوي](https://angular.io/guide)
+* [Angular Animations Tutorial](https://angular.io/guide/animations)
+* [Angular Animations API](https://angular.io/api/animations)
+* [Angular GitHub Repository](https://github.com/angular/angular)
+* [الزاوي CLI](https://cli.angular.io)
\ No newline at end of file
diff --git a/client/src/guide/arabic/angular/command-line-interface/index.md b/client/src/guide/arabic/angular/command-line-interface/index.md
new file mode 100644
index 0000000000..d28f65077f
--- /dev/null
+++ b/client/src/guide/arabic/angular/command-line-interface/index.md
@@ -0,0 +1,130 @@
+---
+title: Command-line Interface
+localeTitle: واجهة خط الأوامر
+---
+## واجهة خط الأوامر
+
+#### التحفيز
+
+يرتبط Angular ارتباطًا وثيقًا بواجهة سطر الأوامر الخاصة به (CLI). يبسط CLI جيل نظام الملفات الزاوي. إنه يتعامل مع معظم التكوينات خلف الكواليس حتى يستطيع المطورون بدء الترميز. يحتوي CLI أيضًا على منحنى تعليمي منخفض يوصى به لأي وافد جديد يريد الانتقال مباشرة. Heck ، حتى من مطوري Angular ذوي الخبرة يعتمدون على CLI!
+
+#### التركيب
+
+يتطلب CLI Angular [Node.js و Node Packet Manager (NPM)](https://nodejs.org/en/) . يمكنك التحقق من وجود هذه البرامج باستخدام الأمر terminal: `node -v; npm -v` . وبمجرد تثبيتها ، قم بفتح مطراف وتثبيت CLI Angular باستخدام هذا الأمر: `npm install -g @angular/cli` . يمكن تنفيذ ذلك من أي مكان على نظامك. تم تكوين CLI للاستخدام العام مع العلم `-g` .
+
+تحقق من وجود CLI باستخدام الأمر: `ng -v` . هذا يخرج عدة أسطر من المعلومات. واحد من هذه الخطوط تنص على نسخة من CLI المثبتة.
+
+تعرف على أن `ng` هي لبنة البناء الأساسية لـ CLI. سوف تبدأ جميع الأوامر الخاصة بك مع `ng` . الوقت لإلقاء نظرة على أربعة من أكثر الأوامر الشائعة المسبقة بـ `ng` .
+
+#### الأوامر الرئيسية
+
+* نانوغرام جديد
+
+* نانجو خدمة
+
+* نانوغرام تولد
+
+* بناء ng
+
+* تحديث نانوغرام
+
+
+الشروط الأساسية لكل من هذه الأمور هي قول جيد. معا ، فإنها تشمل ما ستحتاج إليه لتصل إلى الأرض مع Angular. بالطبع ، هناك الكثير. جميع الأوامر مبينة في [GitHub Documentation 1](https://github.com/angular/angular-cli/wiki#additional-commands) . من المحتمل أن تجد أن الأوامر المذكورة أعلاه ستغطي القواعد الضرورية.
+
+#### نانوغرام جديد
+
+`ng new` بإنشاء نظام ملفات Angular _جديد_ . هذه عملية سريالية. يرجى الانتقال إلى موقع ملف مرغوب فيه لإنشاء تطبيقات _جديدة_ . اكتب هذا الأمر على النحو التالي ، مع استبدال `[name-of-app]` بكل ما تريد: `ng new [name-of-app]` .
+
+يجب أن يظهر نظام الملفات أسفل المجلد `[name-of-app]` . لا تتردد في استكشاف ما يكمن في. حاول عدم إجراء أي تغييرات حتى الآن. كل ما تحتاجه لتشغيل تطبيق Angular الأول الخاص بك يأتي مجمعة معًا في نظام الملفات الذي تم إنشاؤه.
+
+#### نانجو خدمة
+
+لتشغيل التطبيق ، يجب تنفيذ أمر `ng serve` داخل مجلد `[name-of-app]` . في أي مكان داخل المجلد سوف تفعل. يجب على CLI Angular التعرف على أنه داخل بيئة تم إنشاؤها باستخدام `ng new` . سيتم تشغيله بشرط شرط واحد. المضي قدما `ng serve` : `ng serve` .
+
+يتم تشغيل التطبيق على المنفذ 4200 بشكل افتراضي. يمكنك عرض تطبيق Angular بالانتقال إلى `localhost:4200` في أي متصفح ويب. أعمال Angular عبر جميع المتصفحات. إلا إذا كنت تستخدم إصدارًا قديمًا من Internet Explorer ، فسيظهر التطبيق. يعرض الشعار الرسمي Angular إلى جانب قائمة من الروابط المفيدة.
+
+حسنا ، يعمل التطبيق. ومن المأمول أن تعمل ، ولكن عليك أن تعرف ما يجري تحت غطاء محرك السيارة. ارجع إلى نظام ملفات `[name-of-app]` . انتقل `[name-of-app] -> src -> app` . وهنا تكمن الملفات المسؤولة عن ما شاهدته في `localhost:4200` .
+
+#### نانوغرام تولد
+
+تحدد ملفات `.component` مكونًا Angular بما في ذلك المنطق ( `.ts` ) والأسلوب ( `.css` ) `.spec.ts` ( `.html` ) والاختبار ( `.spec.ts` ). و `app.module.ts` تبرز بشكل خاص. معا ، تعمل هاتان المجموعتان من الملفات معاً `component` `module` . كل من `component` `module` هما مثالان منفصلان عن مخططات الزوايا. تصنف _الرياضيات_ الكتل المختلفة ذات الأغراض المحددة من الكود _القابل للتوليد_ مع `ng generate` .
+
+من أجل هذه المقالة ، فهم أن `module` بتصدير واستيراد الأصول من شجرة المكونات الأساسية وإليها. يتعلق أحد `component` بجزء واحد من واجهة المستخدم. يظل منطق هذه الوحدة `.component` ملفات `.component` المختلفة.
+
+أما بالنسبة إلى `ng generate` ، فيمكن لهذا الأمر إنشاء هياكل عظمية لكلٍّ من [المخططين الزاويين](https://github.com/angular/angular-cli/wiki/generate#available-schematics) المتوفرين [2](https://github.com/angular/angular-cli/wiki/generate#available-schematics) . انتقل إلى `[name-of-app -> src -> app]` . حاول إنشاء `component` جديد عن طريق تنفيذ: `ng generate component [name-of-component]` . استبدل `[name-of-component]` بكل ما تريد. سيظهر ملف جديد `[name-of-component]` مع ملفات `component` الضرورية.
+
+يمكنك أن ترى أن `ng generate` [رمز تعميم](https://en.wikipedia.org/wiki/Boilerplate_code) Angular's. `ng generate` أيضا الأسلاك الامور. ترتبط الرياضيات التي يتم إنشاؤها في سياق نظام الملفات الزاوية بالوحدة الأساسية للنظام. في هذه الحالة ، سيكون ملف `app.module.ts` داخل `[name-of-app -> src -> app]` .
+
+#### بناء ng
+
+Angular هو أداة أمامية. تقوم CLI بعملياتها نيابة عن الواجهة الأمامية. `ng serve` يعتني الإعداد خادم النهاية الخلفية. هذا يبقي التطوير يركز بالكامل على الواجهة الأمامية. ومع ذلك ، يجب أن يكون الاتصال بنهاية الخلفية الخاصة بك لتطبيق Angular ممكنًا أيضًا.
+
+`ng build` يلبي هذه الحاجة. قبل تجربة ذلك داخل نظام الملفات. انتقل إلى `[name-of-app] -> angular.json` . ابحث عن سطر الشفرة المفرد هذا: `"outputPath": "dist/my-app"` .
+
+يحدد هذا السطر من التكوين مكان `ng build` dumps نتائجها. النتائج هي تطبيق Angular بأكمله تم تجميعه في مجلد واحد `dist/my-app` . داخل هذا المجلد ، يوجد `index.html` . يمكن تشغيل التطبيق Angular بأكمله مع `index.html` . لا يلزم `ng serve` من هنا. مع هذا الملف ، يمكنك بسهولة ربط نهاية ظهرك.
+
+اعطها الذهاب: `ng build` . مرة أخرى ، يجب تنفيذ ذلك داخل نظام الملفات الزاوي. استنادًا إلى القيمة الأساسية لـ `“outputPath:”` في `angular.json` . سيولد ملف حيث تم ترجمة التطبيق الأصلي بالكامل. إذا احتفظت بـ `“outputPath:”` ، فسيكون التطبيق المجمع في: `[name-of-app] -> dist -> [name-of-app]` .
+
+#### تحديث نانوغرام
+
+في التحديث الزاوي cli ng قم بتحديث تلقائي على كل الحزم الزاويّة و npm إلى أحدث الإصدارات.
+
+هنا يمكن استخدام البنية والخيارات مع `ng update` .
+
+`ng update [package]`
+
+**خيارات**
+
+* ركض جاف `--dry-run (alias: -d)`
+
+ من خلال تشغيل دون إجراء أي تغييرات.
+
+* فرض `--force`
+
+ إذا كان خطأ ، فسيحدث خطأ إذا كانت الحزم المثبتة غير متوافقة مع التحديث.
+
+* الكل `--all`
+
+ سواء لتحديث جميع الحزم في package.json.
+
+* التالى `--next`
+
+ استخدم الإصدار الأكبر ، بما في ذلك إصدار beta و RCs.
+
+* الهجرة فقط `--migrate-only`
+
+ فقط إجراء الترحيل ، لا يتم تحديث الإصدار المثبت.
+
+* من عند `--from`
+
+ الإصدار الذي سيتم الانتقال منه. متاح فقط مع حزمة واحدة يتم تحديثها ، وفقط عند الترحيل فقط.
+
+* إلى `--to`
+
+ الإصدار الذي يصل إليه تطبيق عمليات الترحيل. متاح فقط مع حزمة واحدة يتم تحديثها ، وفقط في عمليات الترحيل فقط. يتطلب من أن يتم تحديده. الافتراضي إلى النسخة المثبتة المكتشفة.
+
+* سجل `--registry`
+
+ سجل NPM لاستخدام.
+
+
+#### استنتاج
+
+هذه الأوامر تلبي الأساسيات. إن CLI في Angular هي خدمة رائعة تساعد على تسريع عملية إنشاء التطبيقات وتكوينها وتوسيعها. إنه يفعل كل هذا مع الحفاظ على المرونة ، مما يسمح للمطور بإجراء التغييرات اللازمة.
+
+يرجى مراجعة هذه الروابط على `localhost:4200` إذا لم تكن قد قمت بذلك بالفعل. لا تنسَ تشغيل `ng serve` قبل فتحه. مع فهم أفضل لـ CLI ، أنت الآن على استعداد لمعرفة المزيد حول ما يتم إنشاؤه بواسطة الأوامر الأكثر أهمية.
+
+### مصادر
+
+1. [جوجل. "angular / angular-cli / wiki # additional-commands." GitHub.](https://github.com/angular/angular-cli/wiki#additional-commands)
+
+2. [جوجل. "angular / angular-cli / wiki / generate # available-schematics." GitHub.](https://github.com/angular/angular-cli/wiki/generate#available-schematics)
+
+
+### مصادر
+
+* [Angular CLI Website](https://cli.angular.io)
+
+* [الزاوي CLI README](https://github.com/angular/angular-cli#angular-cli)
+
+* [توثيق CLI للزاوية](https://github.com/angular/angular-cli/wiki)
\ No newline at end of file
diff --git a/client/src/guide/arabic/angular/components/index.md b/client/src/guide/arabic/angular/components/index.md
new file mode 100644
index 0000000000..ecf711b483
--- /dev/null
+++ b/client/src/guide/arabic/angular/components/index.md
@@ -0,0 +1,267 @@
+---
+title: Components
+localeTitle: المكونات
+---
+# المكونات
+
+#### التحفيز
+
+الزاوي يحتوي على العديد من _الخطط_ لبناء التطبيقات. المكونات هي واحدة من هذا التخطيطي. وهي تشمل وحدة واحدة من المنطق المعني بجزء واحد من التطبيق. غالبًا ما تشترك المكونات مع الخطط الأخرى لتعمل بشكل أكثر فاعلية.
+
+من بين جميع الخطط ، تميل المكونات إلى الاستهلاك أكثر من توفيرها. في حين أن الخطط الأخرى مثل التوجيهات والأنابيب والخدمات توفر فائدة ، فإن المكونات تستخدم. هم مسؤولون عن واجهة التطبيق لذلك فمن المنطقي لماذا تستهلك فائدة.
+
+مكونات تبسيط التطبيق. يُعد هدف التحويل الأساسي إلى قسم واحد من الواجهة المرئية الهدف الأساسي. لإنشاء تطبيقات خطوة بخطوة ، يجب إنشاء مكون تلو المكوِّن. تعمل مكونات كتل البناء Angular في كل شيء.
+
+#### مكونات مقدمة
+
+كما ذكر ، تستهلك المكونات المنفعة (الخدمات / الموارد). انها تقف بين منطق الأعمال والعرض لتقديم وحدة متماسكة. يعلق الزاوي آليات مختلفة لكل مكون. تحدد هذه المرفقات فئة كمكون وتحدد قدراتها القياسية.
+
+يجب أن يتعرف الزاوي على المكونات عندما يأتي عبرها. للقيام بذلك ، يجب أن يزيّن `@Component` كل صنف يُقصد منه أن يكون مكونًا. يشير المصممون إلى Angular ما هي الطبقة ".
+
+في حالة المكون ، يجب أن يعرف كيفية التفاعل مع حاقنه ، والتواصل مع قالب ، والانسحاب من قائمة الأنماط ، وتغليف أنماطه ، وهكذا. الزاوي يعتني بمعظم متطلبات المستوى المنخفض. لا يزال المطورون بحاجة إلى تهيئة سلوك أحد المكونات ، واستيراد تبعياته ، وتوسيع منطقه.
+
+لجميع هذه الأشياء ، لدينا فئة المكون. يحتفظ الفصل بكل شيء نسبيًا. إنه يغلف منطق عمل المكون.
+
+#### فئة المكون والبيانات الوصفية
+
+المضي قدما وتثبيت [واجهة سطر الأوامر Angular (CLI)](https://cli.angular.io) . يمكنك معرفة المزيد حول هذا الموضوع من [هذه المقالة](https://guide.freecodecamp.org/angular/command-line-interface) . يعطي الأمر CLI `ng generate component [name-of-component]` الأمر التالي.
+
+ `import { Component, OnInit } from '@angular/core';
+
+ @Component({
+ selector: 'app-example',
+ templateUrl: './example.component.html',
+ styleUrls: ['./example.component.css']
+ })
+ export class ExampleComponent implements OnInit {
+ constructor() { }
+
+ ngOnInit() { }
+ }
+`
+
+هذا هو الهيكل الأساسي الأساسي الذي تنشأ منه جميع المكونات الرائعة. `@Component` الديكور `@Component` الجزء الأكثر أهمية. بدون ذلك ، يصبح المثال أعلاه فئة عامة. الزاوي يعتمد على ديكور لتمييز نوع تخطيطي.
+
+`@Component` يتلقى بيانات التعريف ككائن واحد. الديكور هي مجرد وظائف جافا سكريبت تحت غطاء محرك السيارة. يأخذون في الحجج كما هو الحال مع كائن بيانات التعريف. يقوم كائن البيانات الأولية بتكوين التبعيات الأساسية للمكون. كل الحقول تلعب دورا.
+
+* `selector:` يخبر Angular بإقران المكون بعنصر معين في HTML الخاص بقالب التطبيق.
+
+* `templateUrl:` يقبل موقع ملف HTML الخاص بقالب المكون (هذا هو المكان الذي يتم عرض البيانات فيه).
+
+* `styleUrls:` يقبل صفيفًا من مواقع ملفات ورقة الأنماط (سلاسل). وتستهدف أوراق الأنماط هذه القالب المخصص للمكون.
+
+
+فكر في البيانات الوصفية كنقطة كبيرة من التهيئة. يأخذها الديكور بحيث يمكنه توليد البيانات الخاصة بالمكون. _يزين_ الديكور الطبقة الأساسية بالبيانات اللازمة لسلوك صفها. فئة _المكون_ التي هي.
+
+يتم تصدير "توقيع" الفئة بشكل افتراضي بحيث يمكن استيراد المكون. `ngOnInit` أيضا يحصل تنفيذها. `implements` بإرشاد الطلاب إلى تعريف طرق معينة لكل تعريف للواجهة. `ngOnInit` هو خطاف لدورة الحياة.
+
+#### دورة حياة المكون وتغيير الكشف
+
+تستخدم المكونات جميع أنواع الأدوات والخدمات والميزات. الميزة الرئيسية الوحيدة المتاحة للمكونات هي خطاطيف دورة الحياة. يوجد تفسير لكل ربط [على هذه المقالة](https://guide.freecodecamp.org/angular/lifecycle-hooks) .
+
+هناك ثمانية في المجموع وكلها بمثابة وظائف توقيت. وهي تنفذ بشكل مشروط حيث ينتقل المكون من دولة إلى أخرى عن طريق [الكشف عن التغيير](https://blog.angularindepth.com/everything-you-need-to-know-about-change-detection-in-angular-8006c51d206f) . هذه العملية تحدث باستمرار عبر شجرة المكون. يبحث عن التغييرات في البيانات التي تستحق إعادة تقديم القالب.
+
+وقت التحرك. يرجى الرجوع إلى المقالات المذكورة أعلاه لمزيد من المعلومات حول دورة حياة المكونات. إنه يستحق الكثير من الشرح.
+
+#### بيانات المكونات
+
+البيانات تدفع كل شيء. المكونات ليست استثناء. المكونات تغلف جميع بياناتها. لتلقي البيانات خارجياً ، يجب أن يقوم أحد المكونات صراحة بالإعلان عنها. يحتفظ هذا النوع من الخصوصية بالمعلومات من التعارض عبر شجرة المكون.
+
+تحدد البيانات ما يتم عرضه من فئة المكون إلى القالب الخاص به. أي تحديثات لبيانات الفصل (أو على الأقل يجب) تحديث عرض القالب.
+
+ستقوم المكونات في كثير من الأحيان بتهيئة مجموعة من الأعضاء (أو المتغيرات) التي تقوم بتخزين البيانات. يتم استخدامها في جميع أنحاء المنطق فئة مكون للراحة. تغذي هذه المعلومات المنطق الناتج عن القالب وسلوكه. انظر المثال التالي.
+
+ `// ./components/example/example.component.ts
+
+ import { Component, OnInit } from '@angular/core';
+ import { Post, DATA } from '../../data/posts.data';
+
+ @Component({
+ selector: 'app-example',
+ templateUrl: './example.component.html'
+ })
+ export class ExampleComponent implements OnInit {
+ username: string;
+ totalPosts: number;
+ allPosts: Post[];
+
+ deletePost(index: number): void {
+ this.allPosts.splice(index, 1);
+ this.totalPosts = this.allPosts.length;
+ }
+
+ ngOnInit(): void {
+ this.username = DATA.author;
+ this.totalPosts = DATA.thePosts.length;
+ this.allPosts = DATA.thePosts;
+ }
+ }
+`
+
+ `
+
+
+ {{ username }}
+ Change Name:
+ Posts: {{ totalPosts }}
+
+
+
+
DELETE
+
{{ post.title }}
+
{{ post.body }}
+
+
+
+`
+
+لاحظ الطرق التي يتفاعل بها المكون مع بياناته. `../../data/posts.data` أولاً من `../../data/posts.data` قبل أن يبدأ بإعادة توجيهه إلى قالب العرض.
+
+تظهر البيانات في جميع أنحاء القالب. داخل الأقواس المزدوجة المتعرجة ، يتم تعيين قيمة المتغير من فئة المكون إلى الأقواس. الحلقات `*ngFor` عبر صفيف فئة `allPosts` . بالضغط على زر يزيل عنصر معين من `allPosts` التي كتبها مؤشره. يمكنك حتى تغيير `username` الأعلى عن طريق الكتابة في مربع الإدخال.
+
+تعمل التفاعلات السابقة على تبديل بيانات فئة المكون التي بدورها تعمل على تحديث HTML الخاص بقالب المكون. توفر المكونات المنطق الأساسي الذي يسهل تدفق البيانات. يجعل القالب HTML تلك البيانات قابلة للقراءة للمستخدم.
+
+#### قالب مكون
+
+قدم نموذج HTML الخاص بموديل المثال السابق بناء جملة مثيرًا للاهتمام. بناء الجملة لم يكن HTML الفعلي. كان قالب HTML في Angular. غالبا ما يشير البعض إلى أنه يحتوي على HTML _Plus_ لا يمكن التعرف عليه إلا من خلال مترجم Angular. يدعم المحول البرمجي بناء جملة يؤدي إلى المعالجة الديناميكية لـ HTML. غالبًا ما تشير هذه المقالة إلى "نموذج HTML" أو "قالب".
+
+يسمح بناء الجملة للمكونات بحقن البيانات مباشرة في القالب HTML. الحقن هو ديناميكي. بمعنى ، يمكن للبيانات التكرار وعرض نفسها على هيئة HTML دون الحاجة إلى مساعدة خارجية. يقوم المترجم الزاوي بتجميعه في HTML الحقيقي في الوقت الذي يصل فيه إلى متصفح الويب.
+
+لمعرفة المزيد حول بعض الطرق التي تربط بها البيانات بالقالب ، اقرأ عن [ربط البيانات في Angular](https://guide.freecodecamp.org/angular/data-binding) . حدثت أمثلة قليلة لربط البيانات في المثال السابق ( `{{ ... }}` ). بالنسبة لهذه المقالة ، يكفي التعرف على حدوث تفاعلات البيانات بين فئة المكون والقالب الخاص بها.
+
+#### الاستعلام عن القالب
+
+بيانات إدارة حالة القالب يعمل بشكل صحيح بشكل جيد. ومع ذلك ، لا تفي البيانات الصرفة دائمًا بالتصميم المقصود للتطبيق. قد يكون التفاعل بشكل مباشر أكثر مع نموذج كائن المستند (DOM) مطلوبًا.
+
+للقيام بذلك ، يجب أن يكون المكون إشارة إلى عناصر القالب. عندما تتغير البيانات ، يمكن للمكون التعامل مع DOM بشكل صريح. هذا هو نهج أكثر إعلانية.
+
+يمكن للمكونات الاستيلاء على المراجع باستخدام واجهة برمجة تطبيق DOM لمتصفح الويب (API). فكرة سيئة رغم ذلك. يفضل الزاوي التوافق عبر النظام الأساسي. لكي يعمل أحد المكونات خارج مستعرض الويب ، يجب عليه استخدام واجهة برمجة تطبيقات Angular بدلاً من DOM.
+
+يمكن للمكونات الاستعلام عن القوالب باستخدام `@ViewChild` و `ContentChild` . إنهم يمسكون بالإشارات إلى عناصر القالب نيابة عن فئة المكون.
+
+ ``import { Component, ViewChild, ContentChild, ElementRef, Renderer2, AfterContentChecked, AfterViewChecked } from '@angular/core';
+
+ @Component({
+ selector: 'app-child',
+ template: `
+ Toggle Enlarge
+
+ `
+ })
+ export class ChildComponent implements AfterContentChecked {
+ @ContentChild("pReference", { read: ElementRef }) pElement: ElementRef;
+ textEnlarge: boolean = false;
+
+ constructor(private renderer: Renderer2) { }
+
+ toggleEnlarge() {
+ this.textEnlarge = !this.textEnlarge;
+ }
+
+ ngAfterContentChecked() {
+ if (this.textEnlarge)
+ this.renderer.setStyle(this.pElement.nativeElement, 'font-size', '25px');
+ else
+ this.renderer.setStyle(this.pElement.nativeElement, 'font-size', 'initial');
+ }
+ }
+
+ @Component({
+ selector: 'app-parent',
+ template: `
+ Toggle Highlight
+ View Child
+
+ Content Child
+
+ `
+ })
+ export class ParentComponent implements AfterViewChecked {
+ @ViewChild("hOneRefereance", { read: ElementRef }) hOneElement: ElementRef;
+ textHighlight: boolean = false;
+
+ constructor(private renderer: Renderer2) { }
+
+ toggleHighlight() {
+ this.textHighlight = !this.textHighlight;
+ }
+
+ ngAfterViewChecked() {
+ if (this.textHighlight)
+ this.renderer.setStyle(this.hOneElement.nativeElement, 'background-color', 'yellow');
+ else
+ this.renderer.setStyle(this.hOneElement.nativeElement, 'background-color', 'initial');
+ }
+ }
+``
+
+يحتوي المثال أعلاه على زرين يقومان بتبديل نمط معين لكل عنصر. يؤدي النقر فوق الأزرار إلى تبديل قيم true / false الفريدة لكل مكون. يحدد هؤلاء booleans ما إذا كانت الأنماط المخصصة تنطبق. بدلاً من هذه القيم تتسبب في تغييرات بشكل حتمى ، يغير خطاطيف دورة الحياة ( `ngAfterViewChecked` و `ngAfterContentChecked` ) بشكل `ngAfterContentChecked` DOM.
+
+النهج التصريحي يغير بوضوح النمط من خلال مرجع العنصر. في البرمجة الحتمية ، تكون التغييرات التي تطرأ على البيانات المستندة إلى DOM ضمنية. تحقق من هذه المقالة على [برمجة التعميمية والتوضيحية](https://codeburst.io/declarative-vs-imperative-programming-a8a7c93d9ad2) لمعرفة المزيد.
+
+الشيء الرئيسي الذي يجب ملاحظته هو كيف يتم سحب هذه المراجع من القالب. في المثال ، يوجد قسمان من القالب المستعلم `@ViewChild` باستخدام اثنين من decorators: `@ViewChild` و `@ContentChild` .
+
+فهي تختلف في المكان الذي تبحث فيه عن مرجع عنصر ما إذا كان في محتوى DOM أو عرض DOM. توجد هذه DOMs اثنين في قالب ParentComponent. التفريق بينهما مهم لأنه ينتهي من العرض في أوقات منفصلة.
+
+هذا هو السبب في `@ViewChild` و `@ContentChild` كلا موجودة. وهي تعمل مع خطاطيف دورة حياة المرافق الخاصة بها `ngAfterViewChecked` و `ngAfterContentChecked` . هذه hooks دورة حياة انتظار الاستعلامات الخاصة بهم لحل قبل تنفيذ.
+
+بمجرد حل `@ViewChild` و `@ContentChild` توفير مراجع إلى عنصرين. كلاهما موجودان في أجزاء منفصلة من DOM. لا تزال البيانات المنطقية تحدد النتيجة. كيف تترجم النتيجة إلى DOM هو الفرق الرئيسي من قبل. تحديث DOM من خلال التلاعب المباشر في `Renderer2` منه.
+
+#### إسقاط المحتوى
+
+يوجد محتوى DOM في عنصر intHTML داخلي لـ ChildComponent ` ` . يتم وضع كل شيء داخل قالب ParentComponent. يقوم البرنامج الداخلي لـ HTML الخاص _بمشروعات_ `app-child` على نموذج ChildComponent من خلال ` ` .
+
+هذا مثال على عرض المحتوى. عرض المحتوى من `one` مكون إلى آخر باستخدام HTML داخلي من `another` "علامات الصورة في `one` " قالب الصورة بحيث `another` عنصر يمكن سحب تلك HTML داخلي في القالب الخاص عبر ` ` . _شكرا على قراءة هذه الجملة._
+
+ولهذا السبب تشير ChildComponent إلى عنصر `
` باستخدام `@ContentChild` . المحتوى المحتوي داخل ` ` في نموذج ParentComponent يشكل محتوى DOM. تشير ChildComponent العنصر مع استعلام `@ContentChild` .
+
+يتكون DOM عرض ParentComponent من كل شيء يمكن الوصول إليها من داخل عرض المكون. لا يتضمن هذا بالضرورة القالب بأكمله وفقًا لـ innerHTML لـ ` ` . مرة أخرى ، يتم الاستعلام عن هذا الجزء من DOM من ChildComponent باستخدام `@ContentChild` . يتم الاستعلام عن أي شيء آخر باستخدام `@ViewChild` من فئة `@ViewChild` .
+
+هذه طريقة رائعة للمكونات لتبادل المحتوى والاستعلام عن محتواه بغض النظر عن نوع DOM الخاص به. يمكن للمكونات التواصل مع نفسه والآخرين باستخدام ربط البيانات أيضًا. قراءة المزيد حول هذا الموضوع من [هذه المقالة](https://guide.freecodecamp.org/angular/data-binding) .
+
+#### أنماط المكونات
+
+تعتبر الأنماط ضرورية لقابلية المكون والتفاعلية. يقوم كل مكون بتغليف تبعيات ورقة الأنماط الخاصة به. بهذه الطريقة ، لا تنطبق إلا على HTML لنموذج المكون. تقنية خاصة قدمها ظل HTML DOM يجعل هذا ممكن.
+
+قد يوجد فرع DOM ظل على أي عنصر. لا يمكن رؤية هذا الجزء من DOM من شفرة مصدر HTML. تعمل عناصر HTML القياسية على تحسين واجهة DOM لتقديم مظاهر علاماتها التجارية. يجب أن يربط فرع دوم الظل بمكوّن مرئي بحيث يمكنه تصميمه وتخصيصه.
+
+الجانب الفريد حول فرع DOM الظل هو تغليفه. كل شيء يستخدم لتصميم عنصر الجذر الخاص بفرع DOM الظل هو خاص به. لا يمكن لأي عنصر آخر الوصول إليه.
+
+يحتضن الزاوي هذا الشكل من التغليف مع المكونات. يتم تغليف ورقة الأنماط ونموذج المكون معًا. لا مكونات أخرى لديها حق الوصول إليها. لا يمكن أن تحدث الصدوع ورقة النمط.
+
+لا يستخدم Angular الظل DOM بشكل افتراضي. ويستخدم نظام مضاهاة يحاكي سلوك دوم الظل. يعد هذا مقياسًا مؤقتًا لأن بعض متصفحات الويب لا تدعم بعد واجهة برمجة تطبيقات DOM.
+
+تحتوي بيانات `@Component` على مجال `encapsulation` . يتيح هذا للمطورين تبديل in-between DOM shaulated مضاهيًا ، Real DOM ظل ، أو لا. فيما يلي الخيارات حسب ترتيبها الخاص:
+
+* `ViewEncapsulation.Emulated` - `ViewEncapsulation.Emulated` shadow DOM (افتراضي)
+
+* `ViewEncapsulation.Native` - ظل حقيقي DOM (الآن `ViewEncapsulation.Native` منذ Angular 6.0.8)
+
+* `ViewEncapsulation.None` - لا
+
+
+`ViewEncapsulation.None` تعني أن أوراق أنماط المكون ترتفع إلى النطاق العالمي. لا ينبغي أن يؤخذ في الاعتبار النظر في مكونات وحدة خاصة بهم (تغليف). الزاوي لا يزال يوفر بمثابة فتحة الهروب في الحالات القصوى.
+
+#### استنتاج
+
+مكونات بناء التطبيقات. هم خاصا scoped وموحدة بشكل منفصل عن بعضها البعض ما لم يتم تكوينها بخلاف ذلك. تميل التطبيقات إلى البدء من وحدة الجذر. في الماضي ، تشكل المكونات شجرة ممددة تحدد بقية التطبيق.
+
+تغطي المكونات وحدة معينة من واجهة التطبيق. ويشمل ذلك أساليبها ومنطقها وتخطيطها. الخطط الأخرى مثل الأنابيب والخدمات والتوجيهات ترى الاستخدام المتكرر في كود المكون. يمكنك معرفة المزيد حول هذه التفاعلات في بعض مقالات الدليل الزاوي الأخرى.
+
+لا ننسى أن المكونات يجب [التمهيد](https://angular.io/guide/bootstrapping) . يمكن أن يحدث هذا في وحدة الجذر أو البيانات الوصفية للمكون. هذا هو الزاوي بحيث يتعرف على المكون أينما يظهر في التطبيق.
+
+يمكنك دائمًا معرفة المزيد من خلال استكشاف الروابط الموجودة أدناه. ويحمل العنصر أكثر بكثير مما يمكن أن تنقله هذه المقالة.
+
+## مصادر
+
+* [فريق الزاوي. "المستندات الزاويّة". _جوجل_ . تم الوصول إليه في 3 يونيو 2018](https://angular.io/guide)
+* [مجتمع موزيلا MDN. "استخدام Shadow DOM". _موزيلا_ ، تم تحديثه في 30 مايو 2018. تم الوصول إليه في 3 يونيو 2018](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM)
+* [موندي ، إيان. "التعبير مقابل البرمجة الضرورية". _codeburst.io_ ، 20 فبراير 2017. تم الوصول إليها في 3 يونيو 2018](https://codeburst.io/declarative-vs-imperative-programming-a8a7c93d9ad2)
+
+## مصادر
+
+* [وثائق الزاوي](https://angular.io/guide)
+* [Angular GitHub Repository](https://github.com/angular/angular)
+* [مقدمة إلى المكونات](https://angular.io/guide/architecture-components)
+* [مكونات في العمق](https://angular.io/guide/displaying-data)
+* [الظل DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM)
\ No newline at end of file
diff --git a/client/src/guide/arabic/angular/data-binding/index.md b/client/src/guide/arabic/angular/data-binding/index.md
new file mode 100644
index 0000000000..ef9646305c
--- /dev/null
+++ b/client/src/guide/arabic/angular/data-binding/index.md
@@ -0,0 +1,188 @@
+---
+title: Data Binding
+localeTitle: ربط البيانات
+---
+# ربط البيانات
+
+#### التحفيز
+
+غالبًا ما تحدد البيانات مظهر التطبيق. يتضمن تفسير تلك البيانات في واجهة المستخدم منطق منطقي ( `.component.html` ) وعرض قالب ( `.component.ts` ). الزاوي يربطهم من خلال ربط البيانات. فكر في ربط البيانات كأداة لتفاعل المكون.
+
+#### المكون والقالب
+
+يخزن العنصر معظم منطقه وبياناته داخل صفه المزين بـ `@Component` . يعرّف هذا الديكور الفئة كمكون مع قالب HTML. يمثل قالب المكون الفئة داخل التطبيق. يجب أن يكون التركيز هنا بين فئة المكون ونموذج HTML.
+
+هذا هو المكان الذي يحدث ربط البيانات. الحصول على خصائص العنصر والأحداث القيم المعينة. هذه القيم ، التي تم تعريفها بواسطة فئة المكون ، تخدم أيًا من الدورين. واحد هو لإنتاج البيانات التي يتلقاها القالب. يعالج الآخر الأحداث المنبعثة من عنصر القالب.
+
+
+
+حاول استخدام هذه الصورة كنموذج ذهني للقسم التالي.
+
+#### اتجاهات ملزمة
+
+هناك طريقتان للربط بين البيانات: أحادي الاتجاه وثنائي الاتجاه. يستخدم الزاوي تقنياً تدفق البيانات أحادي الاتجاه فقط. تدفق ثنائي الاتجاه هو في نهاية المطاف أحادي الاتجاه. يحدث ذلك في تطبيقين لتدفق أحادي الاتجاه ، مرة واحدة لكل اتجاه. المزيد عن ذلك لاحقا.
+
+يحدد التدفق الأحادي الاتجاه التفاعل أحادي الاتجاه. إما أن يرسل المكون البيانات إلى القالب أو يرسل القالب حدثًا إلى منطق المكون. لا يتم تغيير بيانات التغييرات داخل نطاق القالب لفئة المكون. إنبعاث الحدث عبارة عن معاملة أحادية الاتجاه تبدأ من عناصر القالب.
+
+ثنائي الاتجاه يشكل كلا الاتجاهين. وهذا يعني أن التغييرات في البيانات في منطق الصف أو HTML النموذج تستمر عبر بعضها البعض. نطاق التغييرات هو عرض المكون. يتكون العرض من فئة المكون والقالب معًا.
+
+#### خصائص العنصر
+
+للتعرف على خصائص العناصر المرتبطة بالبيانات ، يستخدم Angular بنية قوس خاصة.
+
+ `// my.component.ts
+ @Component({
+ templateUrl: './my.component.html'
+ })
+
+ export class MyComponent {
+ value:type = /* some value of type */;
+ }
+`
+
+ `
+
+ innerHTML
+`
+
+تحمل معي على هذا.
+
+`[property]` يعكس الخاصية في عقدة كائن عنصر كائن المجال (DOM). لا تخلط بين خصائص الكائن وسمات عنصر DOM. غالبًا ما تتشارك الخصائص والخصائص في الاسم نفسه وتفعل الشيء نفسه. هناك تمييز واحد واضح ومع ذلك.
+
+تذكر أن `attr` (السمات) هي خاصية واحدة لعنصر DOM الأساسي. يتم الإعلان عنها عند إنشاء DOM مع قيم السمات التي تطابق تعريف العنصر. يحافظ على نفس القيمة بعد ذلك. تحتوي كل خصائص على حقل قيمة المفتاح الخاص بها في عقدة كائن DOM. هذه الخصائص هي post-instantiation mutable.
+
+معرفة الفرق بين الصفات والخصائص. سيؤدي ذلك إلى فهم أفضل لكيفية ربط البيانات الزاوي بالخواص (ربط الملكية). بصعوبة لن تربط البيانات إلى سمات العنصر أبدًا. الاستثناءات لهذا نادرة جدا. مرة واحدة في المرة الأخيرة: تربط البيانات الزاوي البيانات إلى الخصائص ، وليس السمات!
+
+بالإشارة إلى المثال ، فإن `[ … ]` في تخصيص خاصية العنصر لها معنى خاص. تظهر الأقواس أن `property` ملزمة بـ `“value”` على يمين المهمة.
+
+`value` أيضا لها معنى خاص في سياق الأقواس. `value` بحد ذاتها هي سلسلة حرفية. يقرأه الزاوي ويتطابق مع قيمته ضد أعضاء فئة المكون. سيحل الزاوي محل قيمة سمة العضو المطابقة. يشير هذا بالطبع إلى نفس فئة المكون التي تستضيف نموذج HTML.
+
+اكتمال تدفق أحادي الاتجاه من البيانات من المكون إلى القالب. يقدم العضو المطابق للتنازل الصحيح عن الخاصية المحتواة بين الأقواس `value` . لاحظ أن التغييرات على قيمة العضو في فئة المكون تتجه إلى القالب. هذا هو الكشف عن تغيير Angular في العمل. لا تؤثر التغييرات في نطاق القالب على عضو فئة المكون.
+
+مفتاح السحب: يوفر عنصر المكون البيانات أثناء عرض القالب لها.
+
+أخفقت في ذكر أن قيم البيانات يمكن أن تظهر أيضًا في `innerHTML` داخل المكون. يقوم هذا المثال الأخير بتطبيق أقواس مزدوجة مجعفة. يتعرف Angular على هذه الأقواس ويؤدي إلى `innerHTML` بيانات فئة المكون المطابقة إلى `innerHTML` الداخلي لل `div` .
+
+ `
+The value of the component class member 'value' is {{value}}.
+`
+
+#### التعامل مع الحدث
+
+إذا كان المكون يوفر بيانات ، فإن القالب يوفر الأحداث.
+
+ `// my.component.ts
+ @Component({
+ templateUrl: './my.component.html'
+ })
+
+ export class MyComponent {
+ handler(event):void {
+ // function does stuff
+ }
+ }
+`
+
+ `
+// my.component.html
+ innerHTML
+`
+
+هذا يعمل بالمثل لربط الملكية.
+
+يتعلق `(event)` بأي نوع حدث صالح. على سبيل المثال ، أحد أنواع الأحداث الأكثر شيوعًا هو `click` . تنبعث عند _النقر فوق_ الماوس. بغض النظر عن النوع ، يرتبط `event` بـ `“handler”` في المثال. عادة ما تكون معالجات الأحداث عادةً من وظائف العضو لفئة المكون.
+
+تكون `( … )` خاصة بالزاوية. تشير الأقواس إلى Angular أن الحدث محصور بالواجب الصحيح `handler` . الحدث نفسه ينشأ من عنصر المضيف.
+
+عندما ينبعث الحدث ، فإنه يمرر كائن الحدث في شكل `$event` . يعيّن `handler` إلى دالة `handler` مسماة بشكل مماثل للفئة المكون. اكتمل تبادل أحادي الاتجاه من العنصر المرتبط بالحدث إلى فئة المكون.
+
+إن الأحداث التي تنبعث منها من المعالج ، رغم أنها ممكنة ، لا تؤثر على عنصر القالب. الربط هو أحادي الاتجاه بعد كل شيء.
+
+#### ثنائي الاتجاه ملزم
+
+تقدم نماذج المدخلات مثالاً عظيماً على أهمية ربط ثنائي الاتجاه. روابط البيانات ثنائية الاتجاه أكثر تكلفة من ربط الحدث أو الخاصية.
+
+يحتوي ربط البيانات ثنائي الاتجاه على الوحدة الخاصة به. قبل إلقاء نظرة على ذلك ، والنظر في المثال التالي.
+
+ `// my.component.ts
+ @Component({
+ templateUrl: './my.component.html'
+ })
+ export class MyComponent {
+ inputValue:string = "";
+
+ handler(event) {
+ this.inputValue = event.target.value;
+ }
+ }
+`
+
+ `
+
+
+`
+
+حان الوقت لكسر هذا.
+
+هذا المثال يجمع بين الاثنين السابقين. وهذا يفسر سبب كونها أكثر تكلفة. بعد المنطق ، افترض أن المستخدم يكتب شيئًا في عنصر الإدخال. يرسل العنصر حدث `input` إلى `handler` فئة مكون القالب. يعين المعالج عضو الفئة `inputValue` إلى قيمة الحدث الذي تم `inputValue` . هذا يختم التعامل مع الحدث / ملزمة.
+
+الآن على الممتلكات ملزمة. تم تعيين `inputValue` لقيمة جديدة. نظرًا لأن `inputValue` يرتبط `value` عنصر الإدخال ، يتغير تغييره في البيانات إلى `value` خاصية عنصر الإدخال. تتطابق `value` عنصر الإدخال مع `inputValue` . هذا يخلص ملزمة الملكية.
+
+هناك لديك ذلك. يحدث ربط البيانات ثنائي الاتجاه مع تطبيق كل من تطبيق الربط أحادي الاتجاه على التوالي. بناء الجملة هو فوضوي بعض الشيء على الرغم من.
+
+الحمد لله ، يوفر Angular `NgModel` لتبسيط بناء الجملة. المثال التالي مرادف لما سبق.
+
+ `// my.component.ts
+ @Component({
+ templateUrl: './my.component.html'
+ })
+
+ export class MyComponent {
+ inputValue:string = "";
+ }
+`
+
+ `
+
+
+`
+
+`ngModel` هو راحة لطيفة. يجب عليك استيراد FormsModule في جذر التطبيق الخاص بك قبل استخدامه. مع هذا التربيع ، يصبح ربط البيانات ثنائي الاتجاه أسهل للعمل معه.
+
+لتعزيز كل ما تعلمته ، تحقق من هذه الصورة من [الوثائق](https://angular.io/guide/architecture-components#data-binding) الرسمية [Angular 1](https://angular.io/guide/architecture-components#data-binding) .
+
+
+
+يمكنك تلخيص كل شيء بصريًا حتى هذه المرحلة بهذه الصورة. تحتوي وثائق Angular على الكثير من الصور الأخرى التي تستحق المشاهدة. هذا يكفي يكفي في ضوء نطاق هذه المادة.
+
+#### مكون إلى مكون
+
+لربط البيانات والأحداث عبر مكونات مختلفة ، يجب عليك استخدام مزخرفينInput وOutput. تكون المكونات الزاويّة في نطاق خاص. لا يمكن الوصول إلى أي عضو من أعضاء المكون من أي مكان خارج عرضه الأصلي.
+
+ويشير decoratorInput إلى أن قيمة العضو يتم الحصول عليها من الوظيفة الرئيسية. هذا يتطلب التصور لفهم أفضل.
+
+
+
+لاحظ مرور عضو `value` الوالد إلى عضو `property` الطفل. هذا لن يكون ممكنا إذا كان `property` ليس لديه ديكورInput. المترجم الزاوي يعتمد عليه.
+
+يوضح مثال آخر لـOutput كيف ينتقل الحدث من الطفل إلى الوالد. ضع في اعتبارك أنOutput تقريبًا يتعلق دائمًا بربط الأحداث المخصص.
+
+
+
+تأكد من استيراد `EventEmitter` و `@Input` و `@Output` من `@angular/common` إذا كنت تنوي تكرار أي من هذه الأمثلة.
+
+#### استنتاج
+
+هذا مكان جيد للتوقف. ربط البيانات يمتد مجموعة واسعة من حالات الاستخدام. هذا الموضوع يستحق استكشافًا إضافيًا على [موقع Angular](https://angular.io) . هذه ليست الطرق الوحيدة التي يمكنك التعامل مع البيانات في Angular. انظر الروابط تحت الموارد لمزيد من المعلومات.
+
+### مصادر
+
+1. [فريق الزاوي. مقدمة إلى المكونات. جوجل. تم الوصول إليها في 26 مايو 2018](https://angular.io/guide/architecture-components#data-binding)
+
+### مصادر
+
+* [وثائق الزاوي](https://angular.io/docs)
+
+* [Angular GitHub Repository](https://github.com/angular/angular)
+
+* [المزيد عن المكونات والقوالب في Angular](https://angular.io/guide/displaying-data)
\ No newline at end of file
diff --git a/client/src/guide/arabic/angular/dependency-injection/index.md b/client/src/guide/arabic/angular/dependency-injection/index.md
new file mode 100644
index 0000000000..6dcbe22812
--- /dev/null
+++ b/client/src/guide/arabic/angular/dependency-injection/index.md
@@ -0,0 +1,275 @@
+---
+title: Dependency Injection
+localeTitle: حقن التبعية
+---
+# حقن التبعية
+
+#### التحفيز
+
+غالباً ما يشار إلى Dependency Injection ببساطة باسم DI. النموذج موجود في جميع أنحاء Angular. إنها تحافظ على الشفرة مرنة وقابلة للاختبار وقابلة للتغيير. يمكن للفصول أن ترث المنطق الخارجي دون معرفة كيفية إنشائه. لا يحتاج أي مستهلك لهذه الفئات أيضًا إلى معرفة أي شيء.
+
+توفر شركة DI الفصول والمستهلكين على حد سواء من الاضطرار إلى معرفة أكثر من اللازم. ومع ذلك ، فإن الشفرة موضوعة كما كانت من قبل بفضل الآليات التي تدعم DI في Angular.
+
+الخدمات هي أحد أهم الداعمين لشركة DI. يعتمدون على النموذج _للحقن_ في مختلف المستهلكين. ويمكن لهؤلاء المستهلكين الاستفادة من هذه الخدمة و / أو تقديمها في مكان آخر.
+
+الخدمة ليست وحدها. التوجيهات والأنابيب والمكونات وما إلى ذلك: كل التخطيطي في استحقاق Angular من DI بطريقة أو بأخرى.
+
+#### عن طريق الحقن
+
+الحاقنات هي هياكل البيانات التي تخزن التعليمات التي توضح بالتفصيل مكان وكيفية تشكيل الخدمات. وهي تعمل كوسيط داخل نظام Angular DI.
+
+تحتوي فئات الوحدة النمطية ، وتوجيه ، والمكونات على بيانات تعريف خاصة بالحقن. نسخة حاقن جديدة ترافق كل واحدة من هذه الفئات. بهذه الطريقة ، تعكس شجرة التطبيق التسلسل الهرمي للحاقن.
+
+`providers: []` تقبل `providers: []` البيانات الوصفية الخدمات التي تسجل بعد ذلك مع حاقن الفصول. يضيف حقل المزود هذا التعليمات اللازمة لحاقن للعمل. تقوم فئة (بافتراض أن لها تبعيات) بإنشاء خدمة من خلال أخذ فئتها كنوع بيانات لها. يقوم الحاقن بمحاذاة هذا النوع (أ) بإنشاء مثيل لتلك الخدمة على الفئة "class".
+
+بطبيعة الحال ، يمكن للطبقة أن تقوم فقط بتوضيح ما يحتويه الحاقن من تعليمات. إذا لم يكن لدى الحاقن الخاص بالفئة الخدمة المسجلة ، فستستعلم عن الأصل. لذلك ، وهكذا دواليك حتى الوصول إلى حاقن مع الخدمة أو جذر التطبيق.
+
+يمكن للخدمات التسجيل في أي حاقن داخل التطبيق. تذهب الخدمات إلى `providers: []` حقل البيانات الوصفية لوحدات أو توجيهات أو مكونات الفصل الدراسي. يمكن للأطفال "الفئة" إنشاء حاقن مسجل في حجرة الدراسة. حاقنات الطفل التراجع عن طريق الحقن الأم بعد كل شيء.
+
+#### حقن التبعية
+
+إلقاء نظرة على الهياكل العظمية لكل فئة: الخدمة ، الوحدة ، التوجيه ، والمكون.
+
+ `// service
+
+ import { Injectable } from '@angular/core';
+
+ @Injectable({
+ providedIn: /* injector goes here */
+ })
+ export class TemplateService {
+ constructor() { }
+ }
+`
+
+ `// module
+
+ import { NgModule } from '@angular/core';
+ import { CommonModule } from '@angular/common';
+
+ @NgModule({
+ imports: [
+ CommonModule
+ ],
+ declarations: [],
+ providers: [ /* services go here */ ]
+ })
+ export class TemplateModule { }
+`
+
+ `// directive
+
+ import { Directive } from '@angular/core';
+
+ @Directive({
+ selector: '[appTemplate]',
+ providers: [ /* services go here */ ]
+ })
+ export class TemplateDirective {
+ constructor() { }
+ }
+`
+
+ `//component
+
+ import { Component } from '@angular/core';
+
+ @Component({
+ selector: 'app-template',
+ templateUrl: './template.component.html',
+ styleUrls: ['./template.component.css'],
+ providers: [ /* services go here */ ]
+ })
+ export class TemplateComponent {
+ // class logic ...
+ }
+`
+
+يمكن لكل هيكل عظمي تسجيل الخدمات إلى حاقن. في الواقع ، TemplateService _هي_ خدمة. اعتبارًا من Angular 6 ، يمكن الآن للخدمات التسجيل باستخدام الحقن باستخدام البيانات الوصفية `@Injectable` .
+
+##### في أي حال
+
+لاحظ في `providedIn: string` ( `@Injectable` ) `providers: []` ( `@Directive` ، `@Componet` و `@Module` ) بيانات التعريف. يخبرون عن طريق الحقن وكيفية إنشاء خدمة. خلاف ذلك ، لا تعرف عن طريق الحقن كيفية إنشاء.
+
+ماذا لو كانت الخدمة لها تبعيات؟ أين تذهب النتائج؟ يجيب مقدمي هذه الأسئلة بحيث يمكن عن طريق الحقن إنشاء صحيح.
+
+تشكل عن طريق الحقن العمود الفقري لإطار عمل DI. إنها تخزن التعليمات لتحفيز الخدمات حتى لا يضطر المستهلكون إلى ذلك. يتلقون مثيلات الخدمة دون الحاجة إلى معرفة أي شيء عن تبعية المصدر!
+
+وأود أيضا أن نلاحظ أن الخطط الأخرى دون عن طريق الحقن لا يزال من الممكن استخدام حق التبعية. انهم لا يستطيعون تسجيل خدمات إضافية ولكن لا يزال بإمكانهم تحفيز من عن طريق الحقن.
+
+##### الخدمات
+
+تحدد في تعريف `providedIn: string` metadata `@Injectable` أي حاقن للتسجيل مع. باستخدام هذه الطريقة ، واعتمادًا على ما إذا تم استخدام الخدمة ، قد تقوم الخدمة أو لا تسجل مع الحاقن. يدعو الزاوي هذا _تهز الأشجار_ .
+
+بشكل افتراضي ، يتم تعيين القيمة على `'root'` . هذا يترجم إلى حاقن الجذر للتطبيق. بشكل أساسي ، يؤدي تعيين الحقل إلى `'root'` إلى إتاحة الخدمة في أي مكان.
+
+##### ملاحظة سريعة
+
+وكما ذكرنا سابقا ، فإن حاقنات الأطفال تتراجع عن والديهم. هذه الاستراتيجية الاحتياطية تضمن الآباء والأمهات لا تضطر إلى إعادة تسجيل لكل حاقن. الرجوع إلى هذه المقالة على [الخدمات والحاقنات](https://guide.freecodecamp.org/angular/services-and-injectors) لتوضيح هذا المفهوم.
+
+الخدمات المسجلة هي _مفردة_ . بمعنى ، توجد تعليمات إنشاء الخدمة على حاقن واحد فقط. هذا يفترض أنه لم يتم تسجيله صراحة في مكان آخر.
+
+##### الوحدة ، التوجيه ، والمكون
+
+الوحدات والمكونات لها مثيل حاقن خاص بها. هذا واضح نظرا `providers: []` حقل البيانات الشرحية. يأخذ هذا المجال مجموعة من الخدمات ويسجلها بحاقن الوحدة النمطية أو فئة المكون. يحدث هذا النهج في `@NgModule` ، `@Directive` ، أو `@Component` الديكور.
+
+هذه الاستراتيجية يغفل _شجرة_ ، أو إزالة اختياري للخدمات غير المستخدمة من عن طريق الحقن. خدمة الحالات الحية على عن طريق الحقن لحياة الوحدة النمطية أو المكون.
+
+#### تأشير المراجع
+
+يمكن أن تؤدي المراجع إلى DOM إلى إنشاء مثيل من أي فئة. ضع في اعتبارك أن المراجع لا تزال خدمات. وهي تختلف عن الخدمات التقليدية في تمثيل حالة شيء آخر. تتضمن هذه الخدمات وظائف للتفاعل مع مرجعها.
+
+التوجيهات في حاجة مستمرة من مراجع DOM. تؤدي التوجيهات إلى حدوث طفرات في عناصر المضيف من خلال هذه المراجع. انظر المثال التالي. يقوم حاقن التوجيه بإدخال مرجع لعنصر المضيف في مُنشئ الصف.
+
+ `// directives/highlight.directive.ts
+
+ import { Directive, ElementRef, Renderer2, Input } from '@angular/core';
+
+ @Directive({
+ selector: '[appHighlight]'
+ })
+ export class HighlightDirective {
+ constructor(
+ private renderer: Renderer2,
+ private host: ElementRef
+ ) { }
+
+ @Input() set appHighlight (color: string) {
+ this.renderer.setStyle(this.host.nativeElement, 'background-color', color);
+ }
+ }
+`
+
+ `
+// app.component.html
+
+ Highlighted Text!
+`
+
+`Renderer2` أيضاً يحصل على instantiated. أي حاقن تأتي من هذه الخدمات؟ حسنا ، رمز مصدر كل خدمة يأتي من `@angular/core` . يجب أن تسجل هذه الخدمات بعد ذلك مع حاقن الجذر الخاص بالتطبيق.
+
+ `import { BrowserModule } from '@angular/platform-browser';
+ import { NgModule } from '@angular/core';
+ import { AppComponent } from './app.component';
+ import { HighlightDirective } from './directives/highlight.directive';
+
+ @NgModule({
+ declarations: [
+ AppComponent,
+ HighlightDirective
+ ],
+ imports: [
+ BrowserModule
+ ],
+ providers: [],
+ bootstrap: [
+ AppComponent
+ ]
+ })
+ export class AppModule { }
+`
+
+مجموعة موفري فارغة !؟ لا أخشى. يسجل الزاوي العديد من الخدمات باستخدام حاقن الجذر تلقائيًا. وهذا يشمل `ElementRef` و `Renderer2` . في هذا المثال ، نحن ندير عنصر المضيف من خلال واجهته النابعة من إنشاء `ElementRef` . يتيح لنا `Renderer2` تحديث نموذج عرض DOM من خلال Angular.
+
+يمكنك قراءة المزيد حول طرق العرض من [هذه المقالة](https://guide.freecodecamp.org/angular/views) . وهي الطريقة المفضلة للتحديثات DOM / view في التطبيقات الزاوية.
+
+من المهم التعرف على الدور الذي تلعبه الحاقنات في المثال أعلاه. عن طريق التصريح بأنواع المتغيرات في المُنشئ ، يحصل الصنف على خدمات قيّمة. يحدد كل نوع بيانات للمعلمة مجموعة من الإرشادات داخل الحاقن. إذا كان حاقن هذا النوع ، فإنه يعيد مثيل من النوع المذكور.
+
+#### خدمات فورية
+
+توضح مقالة [الخدمات والحاقنات](https://guide.freecodecamp.org/angular/services-and-injectors) هذا القسم إلى حد ما. على الرغم من أن هذا القسم يعيد صياغة القسم السابق أو الجزء الأكبر منه. غالبًا ما توفر الخدمات إشارات إلى شيء آخر. قد توفر كذلك واجهة تعزّز إمكانات الصف الدراسي.
+
+المثال التالي سيحدد خدمة التسجيل التي تتم إضافتها إلى حاقن المكون من خلال موفريها `providers: []` البيانات التعريفية.
+
+ `// services/logger.service.ts
+
+ import { Injectable } from '@angular/core';
+
+ @Injectable()
+ export class LoggerService {
+ callStack: string[] = [];
+
+ addLog(message: string): void {
+ this.callStack = [message].concat(this.callStack);
+ this.printHead();
+ }
+
+ clear(): void {
+ this.printLog();
+ this.callStack = [];
+ console.log(“DELETED LOG”);
+ }
+
+ private printHead(): void {
+ console.log(this.callStack[0] || null);
+ }
+
+ private printLog(): void {
+ this.callStack.reverse().forEach((log) => console.log(message));
+ }
+ }
+`
+
+ ``// app.component.ts
+
+ import { Component } from '@angular/core';
+ import { LoggerService } from './services/logger.service';
+
+ @Component({
+ selector: 'app-root',
+ templateUrl: './app.component.html',
+ providers: [LoggerService]
+ })
+ export class AppComponent {
+ constructor(private logger: LoggerService) { }
+
+ logMessage(event: any, message: string): void {
+ event.preventDefault();
+ this.logger.addLog(`Message: ${message}`);
+ }
+
+ clearLog(): void {
+ this.logger.clear();
+ }
+ }
+``
+
+ `
+// app.component.html
+
+ Log Example
+
+
+ Delete Logged Messages
+ CLEAR
+`
+
+التركيز على منشئ AppComponent والبيانات الوصفية. يتلقى حاقن المكون إرشادات من حقل بيانات التعريف الخاصة بالموفر الذي يحتوي على LoggerService. ثم يعرف الحاقن ما يتم إنشاء LoggerService من المطلوب في المُنشئ.
+
+يحتوي `loggerService` parameter `loggerService` على نوع `LoggerService` الذي يتعرف عليه الحاقن. يتبع الحاقن من خلال معادلة كما ذكر.
+
+#### استنتاج
+
+حقن التبعية (DI) هي نموذج. الطريقة التي تعمل بها في Angular هي من خلال التسلسل الهرمي للحقن. فئة يتلقى موارده دون الحاجة إلى إنشاء أو معرفة عنها. تلقي عن طريق الحقن تعليمات وتهيئة خدمة اعتمادا على أي واحد تم طلبه.
+
+يظهر DI الكثير في Angular. تشرح الوثائق الرسمية للزاوية سبب انتشار النموذج. كما أنهم يستمرون في وصف حالات الاستخدام الكثيرة لـ DI بطريقة زاوية تتجاوز ما تمت مناقشته في هذه المقالة. التحقق من ذلك من خلال النقر أدناه!
+
+## مصادر
+
+* [فريق الزاوي. "نمط حقن التبعية". _جوجل_ . تم الوصول إليها في 1 يونيو 2018](https://angular.io/guide/dependency-injection-pattern)
+
+* [زويف ، أليكسي. "ما أردت معرفته دائمًا عن شجرة حقن التبعية الزاوي". _Angular In Depth_ ، 21 Mar 2018. Accessed 1 June 2018](https://blog.angularindepth.com/angular-dependency-injection-and-tree-shakeable-tokens-4588a8f70d5d)
+
+
+## مصادر
+
+* [وثائق الزاوي](https://angular.io/guide/pipes)
+
+* [Angular GitHub Repository](https://github.com/angular/angular)
+
+* [مقدمة إلى Dependency Injection](https://angular.io/guide/architecture-services)
+
+* [حقن التبعية المتقدمة](https://angular.io/guide/dependency-injection-pattern)
\ No newline at end of file
diff --git a/client/src/guide/arabic/angular/directives/index.md b/client/src/guide/arabic/angular/directives/index.md
new file mode 100644
index 0000000000..f6b0feed54
--- /dev/null
+++ b/client/src/guide/arabic/angular/directives/index.md
@@ -0,0 +1,317 @@
+---
+title: Directives
+localeTitle: توجيهات
+---
+# توجيهات
+
+#### التحفيز
+
+تعتبر التوجيهات جوهرية لنموذج HTML الخاص ب Angular. المكونات هي المثال الأكثر أهمية. يتم عرض كل عرض مكون أسفل عرض مكون الجذر. هذا يمكن أن يؤدي إلى شجرة من وجهات النظر التي تحدد تطبيق واحد. يشكّل العرض فئة ( `component.ts` ) وقالبها ( `component.html` ).
+
+التوجيهات الأخرى ، رغم أنها ليست بالغة الأهمية ، توفر المرونة المطلوبة بشدة. التوجيه الموجود على عنصر له سيطرة كاملة عليه. يتيح استخدام ` ` الإنشاء الديناميكي وإزالة محتوى HTML. Microsyntax يعطي المطورين الحرية لزيادة تخصيص السلوك التوجيهي.
+
+#### التوجيه
+
+التوجيهات هي عناصر وسمات مكونة تم إنشاؤها وتمييزها بواسطة Angular. يربط الزاوي العنصر أو السمة مع تعريف الفئة المقابل لها. `@Directive` أو `@Component` يزين هذه الفئات. كلاهما يدل على Angular أن الطبقة تؤدي دور التوجيه.
+
+بعض التوجيهات تعدل نمط عنصر المضيف. تعرض التوجيهات الأخرى طرق العرض أو إدراجها في القائمة كطرق مدمجة. وبعبارة أخرى ، فإنها تغير تنسيق HTML.
+
+في أي حال ، تشير التوجيهات إلى المترجم الزاوي. وهي تحدد مكونات التعديل وفقًا لمنطق الفصل الخاص بالتوجيه.
+
+#### توجيه المكون
+
+تختلف توجيهات المكونات بشكل أساسي عن أنواع التوجيهات الأخرى. عادة ما يشار إليها فقط كمكونات. هم يشكلون علامة HTML الفريدة الخاصة بهم. لكل مكون ، يوجد بعض القالب HTML. هذا على عكس التوجيهين الآخرين. فصولها عبارة عن منطق خالٍ يعمل وفقًا لما هو محدد مسبقًا في نموذج HTML.
+
+#### إنشاء مكون
+
+إنشاء مكون مع مكون `ng generate component [name-of-component]` ؛ استبدل `[name-of-component]` باسم مفضل. يعطي الأمر أربعة ملفات مختلفة تتعلق جميعها بمكون واحد.
+
+تعتبر `component.css` و `component.spec.ts` خارج نطاق هذه المقالة. يتضمن الجانب _التوجيهي_ للمكون الملفين الآخرين. ألق نظرة على ملفي `component.ts` و `component.html` .
+
+ `// example.component.ts
+ import { Component } from '@angular/core';
+
+ @Component({
+ selector: 'app-example',
+ templateUrl: './example.component.html'
+ })
+ export class ExampleComponent {
+ constructor() { }
+ }
+`
+
+تم قطع اثنين من التفاصيل غير ذات صلة من الجيل الافتراضي من `component.ts` . بهذه الطريقة يكون التركيز على المكون نفسه.
+
+ `
+
+
+ example works!
+`
+
+قد يبدو إدراج ExampleComponent كطفل مكون آخر كما يلي.
+
+ `
+
+
+ Welcome to AnotherComponent.
+ Check out ExampleComponent!
+
+
+
+
+ This is the end of the AnotherComponent template HTML.
+`
+
+انتبه إلى ` ` . يتطابق `app-example` مع المحدد من decoratorComponent في `@Component` . هذا هو عنصر التوجيه. يتعرف الزاوي `app-example` _ويوجه_ عرضه إلى فئة ExampleComponent.
+
+#### التوجيه الهيكلي
+
+التفكير `if` البيانات، `for` الحلقات، و `switch` البيانات في المنطق البرمجة. هذه بنيات منطقية تحدد تنفيذ التعليمات البرمجية. هل سيتم تنفيذ التعليمة البرمجية ( `if` ) ، وكم مرة سيتم تنفيذها ( `for` ) ، وأي مجموعة من الأكواد البرمجية (رمز `switch` ).
+
+هذا النمط يستمر في التوجيهات الهيكلية. وهي تحدد بنية HTML الناتجة للقالب. أنها تنطوي دائما على بعض استخدام `ng-template` تحت غطاء محرك السيارة. يوفر `ng-template` آلية لإنشاء HTML تم تقديمه بطريقة مشروطة.
+
+فيما يلي ثلاثة أمثلة من التوجيهات الهيكلية. كل واحد لديه نظير منطقي ( `if` ، `for` ، `switch` ).
+
+* \* ngIf
+
+* \* ngFor
+
+* \* ngSwitchCase و \* ngSwitchDefault
+
+
+**ملاحظة هامة:** جميع هذه الثلاثة متاحة من خلال استيراد `CommonModule` . وهي متاحة من `@angular/common` للاستيراد داخل وحدة الجذر للتطبيق.
+
+##### \* ngIf
+
+`*ngIf` قيمة معينة لمعرفة ما إذا كانت _صحيحة_ أو _كاذبة_ تستند إلى التقييم المنطقي العام في JavaScript. إذا كانت الحقيقة ، يظهر العنصر و HTML الداخلي. خلاف ذلك ، فإنها لا تقدم أبدا إلى نموذج كائن المجال (DOM).
+
+ `
+
+
+
Hello!
+
+
+
+
+
Hi!
+
+`
+
+هذا مثال مفتعل. يمكن استبدال أي قيمة عضو من فئة مكون القالب بـ `true` أو `false` .
+
+ملاحظة: يمكنك أيضًا القيام بما يلي مع \* ngIf للوصول إلى قيمة الملاحظة
+
+ `
+
+ {{ anyNameYouWant }}
+
+`
+
+##### \* ngFor
+
+`*ngFor` loops استناداً إلى تعبير _صغري_ تم تعيينه _لليمين_ . ينتقل Microsyntax خارج نطاق هذه المقالة. نعرف أن microsyntax هو شكل قصير من التعبير المنطقي. يحدث كسلسلة واحدة قادرة على الرجوع إلى قيم عضو فئة. يمكنه تكرار قيم `*ngFor` للتكرار مما يجعلها مفيدة لـ `*ngFor` .
+
+ `
+
+
+ Potato {{ i + 1 }}: {{ potato }}
+
+
+
+`
+
+`['Russet', 'Sweet', 'Laura']` هي قيمة محسوبة. المصفوفات هي واحدة من أكثر المتغيرات الشائعة. تقوم `*ngFor` عنصر ` ` لكل عنصر في الصفيف. يتم تعيين كل عنصر صفيف `potato` المتغيرة. كل هذا يتم باستخدام microsyntax. يحدد `*ngFor` المحتوى الهيكلي لعنصر `ul` . هذا هو سمة من التوجيه الهيكلي.
+
+ملاحظة: يمكنك أيضًا القيام بما يلي مع \* ngFor التوجيه للوصول إلى قيمة الملاحظة (hacky)
+
+ `
+
+ {{ anyNameYouWant }}
+
+`
+
+##### \* ngSwitchCase و \* ngSwitchDefault
+
+يعمل هذان التوجيهان الهيكليان معًا لتوفير وظيفة `switch` إلى نموذج HTML.
+
+ `
+
+
{{ potato }} is a Russet Potato.
+ {{ potato }} is a Sweet Potato.
+ {{ potato }} is a Laura Potato.
+ {{ potato }} is not a Russet, Sweet, nor Laura Potato.
+
+`
+
+واحد فقط من `*ngSwitch…` التعبيرات. لاحظ السمة `[ngSwitch]` داخل عنصر `div` يلف المفتاح. هذا يمر قيمة `potato` على طول سلسلة `*ngSwitch...` تحدد هذه السلسلة من التوجيهات الهيكلية عنصر `h1` الذي يتم `h1` .
+
+على هذا النحو ، لا يعد `[ngSwitch]` توجيهًا هيكليًا على عكس `*ngSwitch…` . يمرر القيمة على طول بينما يحدد قالب التبديل التخطيط النهائي لـ HTML.
+
+تذكر أن الأسلوب و تمرير القيمة لا يمثلان مسؤولية التوجيهات الهيكلية. التي تتعلق توجيهات السمة. التوجيهات الهيكلية تحدد فقط التخطيط.
+
+#### الهيكل التوجيهي للإبداع [1](https://angular.io/guide/structural-directives)
+
+هناك شيء مهم لفهمه عن الأمثلة السابقة. انهم جميعا اختزال من البداية النجمية ( `*` ). يستخدم `ng-template` تحت غطاء محرك السيارة مع كل تطبيق للنجمة.
+
+يحدد `ng-template` التوجيهات الهيكلية. يشرح كيف يمكنهم تكوين HTML النموذج لإنتاج HTML الفعلي. ابدأ بإنشاء أمر توجيه باستخدام `ng generate directive [name-of-directive]` . استبدل `[name-of-directive]` باسم مفضل. يعطي الأمر ما يلي.
+
+ `import { Directive } from '@angular/core';
+
+ @Directive({
+ selector: '[appExample]'
+ })
+ export class ExampleDirective {
+ constructor() { }
+ }
+`
+
+هذا الهيكل العظمي التوجيهي هي جميلة عارية. لا نعرف بعد ما إذا كنا نبني توجيهًا هيكليًا أو مسطرة. يحدد `selector: '[appExample]'` الزاوي ما `selector: '[appExample]'` التوجيهات إلى. نظرًا لأنك تقوم بإنشاء توجيه هيكلي ، قم بتعديل الهيكل العظمي كما يلي.
+
+ `Import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
+
+ @Directive({
+ selector: '[appExample]'
+ })
+ export class ExampleDirective {
+ @Input() set appExample(booleanValue: boolean) {
+ if (booleanValue) {
+ this.ngTemplate.createEmbeddedView(this.innerHTMLOfTemplateScope);
+ }
+ else {
+ this.ngTemplate.clear();
+ }
+ }
+
+ constructor(
+ private innerHTMLOfTemplateScope:TemplateRef,
+ private ngTemplate:ViewContainerRef
+ ) { }
+ }
+`
+
+تضمين عنصر عشوائي مع سمة `appExample` بمثابة مثال جيد.
+
+ `
+innerHTML content
+
+`
+
+هذا هو الكثير ليأخذ في. `@Input() set ...` هو إعلان عضو واضعة. يتم تنفيذ ذلك عندما تظهر السمة `appExample` داخل عنصر ويتم تعيين قيمة منطقية لها. تستقبل الدالة setter تلك القيمة المنطقية كمعلمة للتنفيذ.
+
+`TemplateRef` إلى innerHTML الخاص بـ ` ` . النجمة المستخدمة في الأمثلة السابقة هي اختصار للتعليق في قالب الكود أعلاه. `ng-template` بمثابة _صلصة سرية_ له التوجيهات الهيكلية.
+
+يشير `ViewContainerRef` إلى نطاق تغليف ` ` . `ng-template` ليس عنصرًا فعليًا. إنه علامة للمترجم الزاوي الذي يتم التعليق عليه في النهاية.
+
+يحتوي `ViewContainerRef` طريقتين: `clear()` و `createEmbeddedView()` . يمكنك التفكير في طرق العرض المضمنة أثناء تحديد نطاق HTML داخل عنصر `ng-template` .
+
+`clear()` يزيل أي HTML موجود تم تحديده داخل `ng-template` من شاشة HTML. `createEmbeddedView()` HTML داخل `ng-template` كـ HTML قابل للعرض.
+
+إذا فهمت مثال الكود الأحدث ، فحينئذٍ سيكون لديك `*ngIf` صلبة `*ngIf` و `*ngFor` و `*ngSwitchCase` و `*ngSwitchDefault` . انهم جميعا تحديد تخطيط مع الإشارة إلى `TemplateRef` و `ViewContainerRef` .
+
+في الواقع ، فإن ExampleDirective أعلاه يحاكي وظائف `*ngIf` !
+
+ `
+
+
+
Hello!
+
+
+
+
+
Hi!
+
+`
+
+لا تنسى النجمة ( `*` ). هو اختزال لعنصر `ng-template` الذي تشير إليه فئة التوجيه الخاصة بنا.
+
+#### توجيه السمة
+
+توجيهات السمات مشابهة للبنية. باستثناء ، فإن أوامر السمات لها تأثير صفري على تنسيق HTML. وهي لا تنفذ ` ` . وهي سمات تشير إلى عنصر المضيف الخاص بها للتغييرات الأسلوبية.
+
+مثال يوضح أفضل غرضهم.
+
+#### السمة توجيه إنشاء [2](https://angular.io/guide/attribute-directives)
+
+إنشاء توجيه آخر: `ng generate directive [name-of-directive]` . استبدل `[name-of-directive]` باسم مفضل.
+
+ `import { Directive } from '@angular/core';
+
+ @Directive({
+ selector: '[appExample]'
+ })
+ export class ExampleDirective {
+ constructor() { }
+ }
+`
+
+تبدأ السمة والتوجيهات الهيكلية بنفس الهيكل العظمي. سوف تضيف بضعة إضافات أخرى توجيه السمة.
+
+ `import { Directive, Input, ElementRef } from '@angular/core';
+
+ @Directive({
+ selector: '[appExample]'
+ })
+ export class ExampleDirective {
+ @Input() set appExample(color:string) {
+ this.host.nativeElement.style.color = color;
+ }
+
+ constructor(private host:ElementRef) { }
+ }
+`
+
+بعض العناصر لاختبار مع مساعدة.
+
+ `
+
+ This text is purple!
+ This text is blue!
+ This text is red!
+`
+
+يوفر `ElementRef` إشارة مباشرة إلى عنصر المضيف. يستحوذ `ElementRef.nativeElement` على عقدة DOM. مع العقدة ، فإن تصميم العنصر بسيط مثل `this.host.nativeElement.style.color = color` .
+
+`@Input() set ...` هي وظيفة setter أخرى تقرأ القيمة التي يتم تعيينها عند تنفيذها `@Input() set ...` . يعيد تعيين خاصية اللون لورقة الأنماط لكل عنصر.
+
+#### استنتاج
+
+التوجيهات هي أداة قوية متاحة في HTML لقالب Angular. هم كيفية توصيل المكونات عبر بعضها البعض. داخل كل مكون أنها توفر وسيلة للأسلوب والتخطيط.
+
+هناك العديد من الخيارات الأخرى لبناء كل نوع من التوجيه. لسوء الحظ ، تغطية كل واحد منها أكثر من اللازم لمقالة واحدة. وجود فهم أساسي للتوجيهات كافٍ للمضي قدمًا باستخدام المزيد من الموارد المتقدمة.
+
+تحقق من الموارد أدناه للغوص أعمق. هناك روابط لكل نوع من التوجيه. كل رابط هو جزء من نفس الوثائق ، لذا لا حاجة للعودة هنا بعد زيارة الرابط الأول!
+
+## مصادر
+
+1. [فريق الزاوي. _التوجيهات الهيكلية_ . جوجل. تم الوصول إليها في 28 مايو 2018](https://angular.io/guide/structural-directives)
+
+2. [فريق الزاوي. _توجيهات السمة_ . جوجل. تم الوصول إليها في 28 مايو 2018](https://angular.io/guide/attribute-directives)
+
+
+## مصادر
+
+* [وثائق الزاوي](https://angular.io/guide/pipes)
+
+* [Angular GitHub Repository](https://github.com/angular/angular)
+
+* [المكونات الزاوي](https://angular.io/guide/architecture-components)
+
+* [التوجيهات الهيكلية الزاوي](https://angular.io/guide/structural-directives)
+
+* [إرشادات السمة الزاوي](https://angular.io/guide/attribute-directives)
+
+* [الزاوي CLI](https://cli.angular.io)
\ No newline at end of file
diff --git a/client/src/guide/arabic/angular/index.md b/client/src/guide/arabic/angular/index.md
new file mode 100644
index 0000000000..19aab9b975
--- /dev/null
+++ b/client/src/guide/arabic/angular/index.md
@@ -0,0 +1,58 @@
+---
+title: Angular
+localeTitle: زاوي
+---
+## زاوي
+
+AngularJS (الإصدارات 1.x) هو إطار مفتوح المصدر يستند إلى JavaScript. هو منصة عبرية ويستخدم لتطوير تطبيق ويب صفحة واحدة (SPWA). تنفذ AngularJS نمط MVC لفصل مكونات المنطق والعرض والبيانات. كما يستخدم حقن التبعية للاستفادة من الخدمات من جانب الخادم في تطبيقات جانب العميل.
+
+الزاوي (الإصدارات 2.x وما فوق) هو إطار مفتوح المصدر يستند إلى Typescript لتطوير تطبيق ويب أمامي. يحتوي Angular على الميزات التالية مثل الأدوية الجنسية والكتابة الثابتة وكذلك بعض ميزات ES6.
+
+## تاريخ النسخة
+
+أصدرت غوغل النسخة الأولية من AngularJS في 20 أكتوبر 2010. إصدار مستقر من AngularJS كان في 18 ديسمبر 2017 للإصدار 1.6.8. تم إصدار الإصدار 2.0 من Angular في 22 سبتمبر 2014 في مؤتمر ng-Europe. واحدة من ميزات Angular 2.0 هي التحميل الديناميكي.
+
+بعد بعض التعديلات ، تم إصدار Angular 4.0 في ديسمبر 2016. الزاوي 4 متوافق مع الإصدارات السابقة مع Angular 2.0. مكتبة HttpClient هي إحدى ميزات Angular 4.0. تم إصدار الإصدار 5 من Angular في 1 تشرين الثاني 2017. كان دعم تطبيقات الويب التقدمية أحد التحسينات في Angular 4.0. كان إصدار Angular 6 في مايو 2018. أحدث إصدار ثابت هو [6.1.9](https://blog.angular.io/angular-v6-1-now-available-typescript-2-9-scroll-positioning-and-more-9f1c03007bb6)
+
+**التثبيت** :
+
+يمكننا إضافة Angular إما عن طريق الرجوع إلى المصادر المتاحة أو تنزيل إطار العمل.
+
+**رابط المصدر** :
+
+AngularJS: يمكننا إضافة AngularJS (الإصدارات 1.x الزاوي) من خلال الرجوع إلى شبكة تسليم المحتوى من Google.
+
+ `
+
+`
+
+التنزيل / التثبيت: يمكننا تنزيل إطار العمل باستخدام npm أو Bower أو composer
+
+**1.x الزاوي** :
+
+الآلية الوقائية الوطنية
+
+\`\` \`قذيفة npm تثبيت الزاوي
+
+ ``Then add a `
+
+
+
+
+
+