diff --git a/packages/admin-ui-plugin/src/constants.ts b/packages/admin-ui-plugin/src/constants.ts index 509cd2c903..72db70444d 100644 --- a/packages/admin-ui-plugin/src/constants.ts +++ b/packages/admin-ui-plugin/src/constants.ts @@ -7,6 +7,7 @@ export const defaultLanguage = LanguageCode.en; export const defaultLocale = undefined; export const defaultAvailableLanguages = [ + LanguageCode.ar, LanguageCode.de, LanguageCode.en, LanguageCode.es, diff --git a/packages/admin-ui/i18n-coverage.json b/packages/admin-ui/i18n-coverage.json index 927b12f65d..1a2e63f180 100644 --- a/packages/admin-ui/i18n-coverage.json +++ b/packages/admin-ui/i18n-coverage.json @@ -1,7 +1,12 @@ { - "generatedOn": "2023-07-12T12:33:44.002Z", - "lastCommit": "4d01ab53b3d078f4cc2478d764d3dc87d61520da", + "generatedOn": "2023-07-15T10:37:14.708Z", + "lastCommit": "77aaf8f4bac72468bdeb28aae858035d2a579ef7", "translationStatus": { + "ar": { + "tokenCount": 740, + "translatedCount": 740, + "percentage": 100 + }, "cs": { "tokenCount": 740, "translatedCount": 545, @@ -14,7 +19,7 @@ }, "en": { "tokenCount": 740, - "translatedCount": 739, + "translatedCount": 740, "percentage": 100 }, "es": { diff --git a/packages/admin-ui/src/lib/core/src/components/app-shell/app-shell.component.html b/packages/admin-ui/src/lib/core/src/components/app-shell/app-shell.component.html index a368f3e2f9..423d3c39fd 100644 --- a/packages/admin-ui/src/lib/core/src/components/app-shell/app-shell.component.html +++ b/packages/admin-ui/src/lib/core/src/components/app-shell/app-shell.component.html @@ -1,4 +1,4 @@ -
+
diff --git a/packages/admin-ui/src/lib/core/src/components/app-shell/app-shell.component.ts b/packages/admin-ui/src/lib/core/src/components/app-shell/app-shell.component.ts index bb06506b8a..6ef5e9cb82 100644 --- a/packages/admin-ui/src/lib/core/src/components/app-shell/app-shell.component.ts +++ b/packages/admin-ui/src/lib/core/src/components/app-shell/app-shell.component.ts @@ -21,6 +21,7 @@ import { UiLanguageSwitcherDialogComponent } from '../ui-language-switcher-dialo export class AppShellComponent implements OnInit { userName$: Observable; uiLanguageAndLocale$: Observable<[LanguageCode, string | undefined]>; + direction$: Observable<'ltr' | 'rtl'>; availableLanguages: LanguageCode[] = []; hideVendureBranding = getAppConfig().hideVendureBranding; pageTitle$: Observable; @@ -50,6 +51,9 @@ export class AppShellComponent implements OnInit { this.mainNavExpanded$ = this.dataService.client .uiState() .stream$.pipe(map(({ uiState }) => uiState.mainNavExpanded)); + this.direction$ = this.uiLanguageAndLocale$.pipe( + map(([languageCode]) => (this.i18nService.isRTL(languageCode) ? 'rtl' : 'ltr')), + ); } selectUiLanguage() { diff --git a/packages/admin-ui/src/lib/core/src/providers/i18n/i18n.service.mock.ts b/packages/admin-ui/src/lib/core/src/providers/i18n/i18n.service.mock.ts index 6578d0f64c..e22e78cfd1 100644 --- a/packages/admin-ui/src/lib/core/src/providers/i18n/i18n.service.mock.ts +++ b/packages/admin-ui/src/lib/core/src/providers/i18n/i18n.service.mock.ts @@ -18,6 +18,10 @@ export class MockI18nService implements MockOf { return key as string; } + isRTL(): boolean { + return false; + } + availableLanguages: LanguageCode[]; setAvailableLanguages: (languages: LanguageCode[]) => void; _availableLanguages: LanguageCode[]; diff --git a/packages/admin-ui/src/lib/core/src/providers/i18n/i18n.service.ts b/packages/admin-ui/src/lib/core/src/providers/i18n/i18n.service.ts index e48b573b0e..0162fee701 100644 --- a/packages/admin-ui/src/lib/core/src/providers/i18n/i18n.service.ts +++ b/packages/admin-ui/src/lib/core/src/providers/i18n/i18n.service.ts @@ -47,4 +47,18 @@ export class I18nService { translate(key: string | string[], params?: any): string { return this.ngxTranslate.instant(key, params); } + + /** + * Returns true if the given language code is a right-to-left language. + */ + isRTL(languageCode: LanguageCode): boolean { + const rtlLanguageCodes = [ + LanguageCode.ar, + LanguageCode.he, + LanguageCode.fa, + LanguageCode.ur, + LanguageCode.ps, + ]; + return rtlLanguageCodes.includes(languageCode); + } } diff --git a/packages/admin-ui/src/lib/static/i18n-messages/ar.json b/packages/admin-ui/src/lib/static/i18n-messages/ar.json new file mode 100644 index 0000000000..247cdfc013 --- /dev/null +++ b/packages/admin-ui/src/lib/static/i18n-messages/ar.json @@ -0,0 +1,774 @@ +{ + "admin": { + "create-new-administrator": "إنشاء مسؤول جديد" + }, + "asset": { + "add-asset": "إضافة أصل" , + "add-asset-with-count": "إضافة {count , plural , = 0 {أصول} {1 أصل} {{count} أصول}}" , + "assets-selected-count": "{count} أصول محددة" , + "dimensions": "أبعاد", + "focal-point": "النقطة المحورية", + "notify-create-assets-success": "إنشاء {count, plural, one {أصل جديد} other {{count} أصول جديدة}}", + "original-asset-size": "حجم المصدر" , + "preview": "معاينة", + "remove-asset": "إزالة أصل" , + "select-asset": "حدد أصل" , + "select-assets": "حدد الأصول" , + "set-as-featured-asset": "تعيين كأصل مميز" , + "set-focal-point": "تعيين نقطة بؤرية" , + "source-file": "مصدر الملف", + "unset-focal-point": "غير معرف" , + "update-focal-point": "نقطة التحديث" , + "update-focal-point-error": "لا يمكن تحديث النقطة البؤرية" , + "update-focal-point-success": "النقطة المحورية المحدثة" , + "upload-assets": "تحميل الأصول" , + "uploading": "التحميل ..." + }, + "breadcrumb": { + "administrators": "المسؤولون" , + "assets": "أصول", + "channels": "القنوات" , + "collections": "مجموعات" , + "countries": "بلدان", + "customer-groups": "مجموعات العملاء" , + "customers": "عملاء", + "dashboard": "لوحة التحكم", + "facets": "جوانب" , + "global-settings": "الاعدادات العامة", + "inventory": "جرد", + "job-queue": "ذيل الوظيفة" , + "manage-variants": "إدارة المتغيرات" , + "modifying": "تعديل" , + "orders": "طلبات", + "payment-methods": "طرق الدفع" , + "product-options": "خيارات المنتج" , + "profile": "حساب تعريفي", + "promotions": "الترقيات" , + "roles": "الأدوار" , + "seller-orders": "أوامر البائع" , + "sellers": "البائعون" , + "shipping-methods": "طرق الشحن", + "stock-locations": "مواقع الأسهم" , + "system-status": "حالة النظام", + "tax-categories": "فئات الضرائب" , + "tax-rates": "معدلات الضرائب" , + "zones": "المناطق" + }, + "catalog": { + "add-facet-value": "إضافة قيمة الوجه" , + "add-facets": "إضافة جوانب" , + "add-option": "إضافة خيار" , + "add-price-in-another-currency": "أضف سعرًا بعملة أخرى" , + "add-stock-location": "إضافة موقع الأسهم" , + "add-stock-to-location": "أضف الأسهم إلى الموقع" , + "asset": "أصل", + "asset-preview-links": "روابط معاينة الأصول" , + "assets": "أصول", + "assign-product-to-channel-success": "تم تعيينه بنجاح {count , الجمع , واحد {1 منتج} {{count} products}} إلى {channel}" , + "assign-products-to-channel": "تعيين المنتجات للقناة" , + "assign-to-channel": "تعيين للقناة" , + "assign-to-named-channel": "تعيين إلى {ChannelCode}" , + "assign-variant-to-channel-success": "تم تعيين {count , الجمع , واحد {1 متغير المنتج} {{count} متغيرات المنتج}} إلى {channel}" , + "assign-variants-to-channel": "تعيين متغيرات المنتج للقناة" , + "auto-update-option-variant-name": "تحديث أسماء ProductVariants تلقائيًا باستخدام هذا الخيار" , + "auto-update-product-variant-name": "تحديث أسماء ProductVariants تلقائيًا" , + "cannot-create-variants-without-options": "لا يمكن إنشاء متغيرات المنتج حتى يتم تحديد مجموعة خيارات مع خيارين على الأقل من المنتجات" , + "channel-price-preview": "معاينة أسعار القناة" , + "collection": "مجموعة", + "collection-contents": "محتويات المجموعة" , + "collections": "مجموعات" , + "confirm-bulk-delete-products": "حذف {count} منتجات؟" , + "confirm-cancel": "يلغي؟", + "confirm-delete-assets": "حذف {count} {count , الجمع , واحد {Asset} آخر {الأصول}}؟" , + "confirm-delete-facet-value": "حذف قيمة الوجه؟" , + "confirm-delete-product": "حذف المنتج؟" , + "confirm-delete-product-option": "حذف خيار المنتج \" {name} \"؟" , + "confirm-delete-product-option-group": "حذف مجموعة خيار المنتج \" {name} \"؟" , + "confirm-delete-product-option-group-body": "يتم استخدام مجموعة الخيار هذه بواسطة {count} {count , الجمع , واحد {variant} {{المتغيرات}}. هل أنت متأكد أنك تريد حذفه؟" , + "confirm-delete-product-variant": "حذف متغير المنتج \" {name} \"؟" , + "confirm-deletion-of-unused-variants-body": "تم إجراء متغيرات المنتج التالية قديمة بسبب إضافة خيارات جديدة. سيتم حذفها أثناء إنشاء متغيرات المنتج الجديدة." , + "confirm-deletion-of-unused-variants-title": "حذف متغيرات المنتجات القديمة؟" , + "create-draft-order": "إنشاء ترتيب مسودة" , + "create-new-collection": "إنشاء مجموعة جديدة" , + "create-new-facet": "إنشاء وجه جديد" , + "create-new-product": "منتج جديد", + "create-new-stock-location": "إنشاء موقع مخزون جديد" , + "create-product-option-group": "إنشاء مجموعة خيار المنتج" , + "create-product-variant": "إنشاء متغير المنتج" , + "default-currency": "العملة الافتراضية", + "do-not-inherit-filters": "لا ترث مرشحات" , + "drop-files-to-upload": "إسقاط الملفات للتحميل" , + "edit-facet-values": "تحرير قيم الوجه" , + "edit-options": "تحرير الخيارات" , + "facet": "Facet" , + "facet-value-not-available": "Facet Value \" {id} \"غير متوفر" , + "facet-values": "قيم الوجه" , + "facets": "جوانب" , + "filter-by-name": "تصفية بالاسم" , + "filter-by-sku": "تصفية بواسطة SKU" , + "filter-inheritance": "مرشح الميراث" , + "filters": "المرشحات" , + "inherit-filters-from-parent": "مرشحات مورث من الوالد" , + "live-preview-contents": "محتويات المباريات المباشرة" , + "manage-variants": "إدارة المتغيرات" , + "move-collection-to": "انتقل إلى {name}" , + "move-collections": "تحرك المجموعات" , + "move-collections-success": "تم نقل {count , الجمع , واحد {1 collection} {{count} collections}}" , + "move-down": "تحرك لأسفل", + "move-to": "الانتقال إلى", + "move-up": "تحرك", + "name": "اسم", + "no-channel-selected": "لم يتم اختيار قناة" , + "no-featured-asset": "لا يوجد أصول مميزة" , + "no-selection": "لا اختيار", + "no-stock-locations-available-on-current-channel": "لا توجد مواقع مخزون متوفرة على القناة الحالية. قم بإعداد موقع مخزون واحد على الأقل قبل إضافة منتجات." , + "notify-bulk-delete-products-success": "تم حذفه بنجاح {count , الجمع , واحد {1 منتج} {{count} products}}" , + "notify-remove-facets-from-channel-success": "تم إزالته بنجاح {count , الجمع , واحد {1 facet} {{count} جوانب}} من {ChannelCode}" , + "notify-remove-product-from-channel-error": "لا يمكن إزالة المنتج من القناة" , + "notify-remove-product-from-channel-success": "تمت إزالة المنتج بنجاح من القناة" , + "notify-remove-variant-from-channel-error": "لا يمكن إزالة متغير المنتج من القناة" , + "notify-remove-variant-from-channel-success": "تم إزالته بنجاح من متغير المنتج من القناة" , + "number-of-variants": "# المتغيرات" , + "option": "خيار", + "option-name": "اسم الخيار" , + "option-values": "قيم الخيار" , + "out-of-stock-threshold": "عتبة خارج المخزون" , + "out-of-stock-threshold-tooltip": "يحدد مستوى المخزون الذي يعتبر فيه هذا البديل غير مخزنة.باستخدام قيمة سالبة يتيح الدعم المتأخر.", + "page-description-options-editor": "تحرير أسماء ورموز الخيارات لهذا المنتج. لإضافة أو إزالة الخيارات , استخدم الزر \" إدارة المتغيرات \"أسفل قائمة متغير المنتج." , + "price": "سعر", + "price-and-tax": "السعر والضرائب" , + "price-conversion-factor": "عامل تحويل السعر" , + "price-in-channel": "السعر في {Channel}" , + "price-includes-tax-at": "يشمل الضريبة في {معدل} ٪" , + "price-with-tax-in-default-zone": "Inc. {Rate} ٪ ضريبة: {Price}" , + "private": "خاص", + "product": "منتج", + "product-name": "اسم المنتج", + "product-options": "خيارات المنتج" , + "product-variant-exists": "متغير المنتج مع هذه الخيارات موجود بالفعل" , + "product-variants": "متغيرات المنتج" , + "products": "منتجات", + "public": "عام", + "quick-jump-placeholder": "القفزة السريعة إلى البديل" , + "rebuild-search-index": "إعادة بناء مؤشر البحث" , + "reindex-error": "حدث خطأ أثناء إعادة بناء مؤشر البحث" , + "reindex-successful": "مفهرسة {count , الجمع , واحد {متغير المنتج} آخر {{count} متغيرات المنتج}} في {time} ms" , + "reindexing": "إعادة بناء مؤشر البحث" , + "remove-from-channel": "إزالة من {channelcode , حدد , غير محدد {Channel} {{{channelcode}}}" , + "remove-option": "إزالة الخيار" , + "remove-product-from-channel": "إزالة المنتج من القناة" , + "remove-product-variant-from-channel": "إزالة متغير المنتج من القناة" , + "reorder-collection": "إعادة الترتيب" , + "root-collection": "مجموعة الجذر" , + "run-pending-search-index-updates": "فهرس البحث: تشغيل {count , الجمع , واحد {1 معلق تحديث} {{count} تحديثات معلقة}}" , + "running-search-index-updates": "تشغيل {count , الجمع , واحد {1 تحديث} {{count} تحديثات}}} للبحث عن فهرس" , + "search-asset-name-or-tag": "ابحث باسم الأصول أو العلامات" , + "search-for-term": "ابحث عن المصطلح" , + "search-product-name-or-code": "البحث حسب اسم المنتج أو الرمز" , + "select-product": "حدد المنتج", + "select-product-variant": "حدد متغير المنتج" , + "sku": "SKU" , + "slug": "Slug" , + "slug-pattern-error": "Slug غير صالح" , + "stock-allocated": "مخصص" , + "stock-levels": "مستويات المخزون", + "stock-location": "موقع الأسهم" , + "stock-locations": "مواقع الأسهم" , + "stock-on-hand": "مخزون", + "tax-category": "فئة الضرائب" , + "taxes": "الضرائب" , + "track-inventory": "حساب المخزون", + "track-inventory-false": "لا تتبع", + "track-inventory-inherit": "مورث من الإعدادات العالمية" , + "track-inventory-tooltip": "عند تتبع , سيتم ضبط مستويات الأسهم المتغيرة للمنتج تلقائيًا عند بيعها" , + "track-inventory-true": "مسار", + "update-product-option": "تحديث خيار المنتج" , + "use-global-value": "استخدام القيمة العالمية" , + "values": "قيم", + "variant": "البديل" , + "variant-count": "{count , الجمع , واحد {1 متغير} {{count} المتغيرات}}" , + "view-contents": "عرض المحتويات" , + "visibility": "الرؤية" + }, + "common": { + "ID": "بطاقة تعريف", + "actions": "أجراءات", + "add-filter": "إضافة مرشح" , + "add-item-to-list": "إضافة عنصر إلى قائمة" , + "add-note": "اضف ملاحظة", + "apply": "يتقدم", + "assign-to-channel": "تعيين للقناة" , + "available-currencies": "العملات المتاحة" , + "available-languages": "اللغات المتوفرة", + "boolean-and": "و", + "boolean-false": "خطأ شنيع", + "boolean-or": "أو", + "boolean-true": "حقيقي", + "breadcrumb": "Breadcrumb" , + "browser-default": "المتصفح الافتراضي" , + "cancel": "يلغي", + "cancel-navigation": "إلغاء التنقل" , + "change-selection": "تغيير الاختيار" , + "channel": "قناة" , + "channels": "القنوات" , + "clear-selection": "اختيار واضح" , + "code": "شفرة", + "collapse-entries": "إدخالات الانهيار" , + "confirm": "يتأكد", + "confirm-bulk-assign-to-channel": "تعيين عناصر للقناة؟" , + "confirm-bulk-delete": "حذف العناصر المحددة؟" , + "confirm-bulk-remove-from-channel": "إزالة العناصر من القناة الحالية؟" , + "confirm-delete-note": "حذف ملاحظة؟" , + "confirm-navigation": "تأكيد التنقل" , + "contents": "محتويات", + "create": "يخلق", + "created-at": "أنشئت في", + "custom-fields": "الحقول المخصصة", + "default-channel": "القناة الإفتراضية", + "default-language": "اللغة الافتراضية" , + "default-tax-category": "فئة الضرائب الافتراضية" , + "delete": "يمسح", + "description": "وصف", + "details": "تفاصيل", + "disabled": "عاجز", + "discard-changes": "تجاهل التغييرات" , + "edit": "يحرر", + "edit-field": "تحرير الحقل" , + "edit-note": "تحرير مذكرة", + "enabled": "تمكين" , + "end-date": "تاريخ الانتهاء", + "expand-entries": "توسيع إدخالات" , + "extension-running-in-separate-window": "التمديد يعمل في نافذة منفصلة" , + "filter": "منقي", + "force-delete": "قوة حذف" , + "force-remove": "قوة إزالة" , + "general": "عام", + "guest": "ضيف", + "id": "بطاقة تعريف", + "image": "صورة", + "items-per-page-option": "{count} لكل صفحة" , + "items-selected-count": "{count} {count , الجمع , واحد {item} آخر {العناصر}} المحددة" , + "keep-editing": "استمر في التحرير" , + "language": "لغة", + "launch-extension": "تمديد الإطلاق" , + "list-items-and-n-more": "{العناصر} و {nmore} أكثر" , + "live-update": "التحديث المباشر" , + "locale": "لغة" , + "log-out": "تسجيل خروج", + "login": "تسجيل الدخول", + "login-image-title": "مرحبًا! مرحبًا بك مرة أخرى. من الجيد رؤيتك." , + "login-title": "تسجيل الدخول إلى {Brand}" , + "manage-tags": "إدارة العلامات" , + "manage-tags-description": "تحديث أو حذف العلامات على مستوى العالم." , + "medium-date": "التاريخ المتوسط" , + "more": "أكثر...", + "name": "اسم", + "no-alerts": "لا تنبيهات" , + "no-bulk-actions-available": "لا توجد إجراءات كبيرة متوفرة" , + "no-results": "لا نتائج", + "not-applicable": "غير قابل للتطبيق", + "not-set": "غير مضبوط", + "notify-assign-to-channel-success-with-count": "تم تعيينه بنجاح {count , الجمع , واحد {1 عنصر} {{count} العناصر}} إلى {channelcode}" , + "notify-bulk-update-success": "تم تحديث {count} {intity}" , + "notify-create-error": "حدث خطأ , لم يستطع إنشاء {intity}" , + "notify-create-success": "تم إنشاء {intity}" , + "notify-delete-error": "حدث خطأ , لم يستطع حذف {intity}" , + "notify-delete-error-with-count": "لا يمكن حذف {count , الجمع , واحد {1 عنصر} {{count} العناصر}}" , + "notify-delete-success": "تم حذف {intity}" , + "notify-delete-success-with-count": "تم حذفه بنجاح {count , الجمع , واحد {1 item} {{count} head}}" , + "notify-remove-from-channel-success-with-count": "تم إزالته بنجاح {count} عناصر من القناة" , + "notify-save-changes-error": "حدث خطأ , لم يستطع حفظ التغييرات" , + "notify-saved-changes": "التغييرات المحفوظة" , + "notify-update-error": "حدث خطأ , لا يمكن تحديث {intity}" , + "notify-update-success": "تم تحديث {intity}" , + "notify-updated-tags-success": "العلامات التي تم تحديثها بنجاح" , + "okay": "تمام", + "operator-contains": "يتضمن", + "operator-eq": "يساوي" , + "operator-gt": "أكثر من", + "operator-lt": "أقل من", + "operator-not-contains": "لا يحتوي", + "operator-not-eq": "لا يساوي" , + "operator-notContains": "لا يحتوي", + "operator-regex": "Matches Regex" , + "password": "كلمة المرور", + "position": "موضع", + "price": "سعر", + "price-with-tax": "السعر مع الضريبة" , + "private": "خاص", + "public": "عام", + "remember-me": "تذكرنى", + "remove": "يزيل", + "remove-from-channel": "إزالة من القناة الحالية" , + "remove-item-from-list": "إزالة العنصر من القائمة" , + "reset-columns": "إعادة تعيين الأعمدة" , + "results-count": "{count} {count , الجمع , واحد {result} آخر {النتائج}}" , + "sample-formatting": "تنسيق العينة" , + "search-and-filter-list": "البحث وتصفية هذه القائمة" , + "search-by-name": "البحث عن طريق الإسم", + "select": "يختار...", + "select-display-language": "حدد لغة العرض" , + "select-items-with-count": "حدد {count} {count , الجمع , واحد {item} آخر {عناصر}}" , + "select-products": "اختيار المنتجات" , + "select-relation-id": "حدد معرف العلاقة" , + "select-table-columns": "حدد أعمدة الجدول" , + "select-today": "حدد اليوم" , + "select-variants": "حدد المتغيرات" , + "seller": "تاجر", + "set-language": "لغة مجموعة", + "short-date": "التاريخ القصير", + "slug": "Slug" , + "start-date": "تاريخ البدء", + "status": "حالة", + "tags": "العلامات" , + "theme": "الإضاءة", + "there-are-unsaved-changes": "هناك تغييرات غير محفوظة. التنقل بعيدًا سيؤدي إلى فقدان هذه التغييرات." , + "toggle-all": "تبديل الكل" , + "total-items": "{currentStart} - {currentend} من {totalitems}" , + "update": "تحديث", + "updated-at": "تم التحديث في", + "username": "اسم المستخدم", + "value": "قيمة", + "view-contents": "عرض المحتويات" , + "view-next-month": "عرض الشهر المقبل" , + "view-previous-month": "عرض الشهر السابق" , + "visibility": "الرؤية" , + "with-selected": "مع {count} محدد ..." + }, + "customer": { + "add-customer-to-group": "أضف العميل إلى المجموعة" , + "add-customer-to-groups-with-count": "أضف العميل إلى {count , الجمع , واحد {1 group} {{count} groups}}" , + "add-customers-to-group": "أضف العملاء إلى المجموعة" , + "add-customers-to-group-success": "تمت إضافة {customercount , الجمع , واحد {1 عميل} آخر {{customercount} العملاء}} إلى \" {groupname} \"" , + "add-customers-to-group-with-count": "إضافة {count , الجمع , واحد {1 عميل} {{count} عملاء}}" , + "add-customers-to-group-with-name": "إضافة العملاء إلى \" {groupName} \"" , + "addresses": "عناوين", + "city": "مدينة", + "company": "شركة", + "confirm-remove-customer-from-group": "إزالة العميل من المجموعة؟" , + "country": "دولة", + "create-customer-group": "إنشاء مجموعة عملاء" , + "create-new-address": "إنشاء عنوان جديد" , + "create-new-customer": "إنشاء عميل جديد" , + "create-new-customer-group": "إنشاء مجموعة عملاء جديدة" , + "customer": "عميل", + "customer-group": "مجموعة العملاء", + "customer-groups": "مجموعات العملاء" , + "customer-history": "تاريخ العميل" , + "customers": "عملاء", + "default-billing-address": "الفواتير الافتراضية" , + "default-shipping-address": "الشحن التلقائي", + "email-address": "عنوان البريد الإلكتروني", + "email-verification-sent": "تم إرسال بريد إلكتروني للتحقق إلى {{emailAddress}" , + "first-name": "الاسم الأول", + "full-name": "الاسم الكامل", + "guest": "ضيف", + "history-customer-added-to-group": "عميل تمت إضافة إلى المجموعة \" {groupName} \"" , + "history-customer-address-created": "العنوان الذي تم إنشاؤه" , + "history-customer-address-deleted": "العنوان المحذوف" , + "history-customer-address-updated": "العنوان المحدث" , + "history-customer-detail-updated": "تفاصيل العميل محدثة" , + "history-customer-email-update-requested": "تحديث عنوان البريد الإلكتروني المطلوب" , + "history-customer-email-update-verified": "تحديث عنوان البريد الإلكتروني الذي تم التحقق منه" , + "history-customer-password-reset-requested": "إعادة تعيين كلمة المرور المطلوبة" , + "history-customer-password-reset-verified": "تم التحقق من إعادة تعيين كلمة المرور" , + "history-customer-password-updated": "تم تحديث كلمة السر", + "history-customer-registered": "عميل مسجل" , + "history-customer-removed-from-group": "عميل تم إزالته من المجموعة \" {groupName} \"" , + "history-customer-verified": "التحقق من العميل" , + "history-using-external-auth-strategy": "استخدام {strategy}" , + "history-using-native-auth-strategy": "استخدام عنوان البريد الإلكتروني" , + "last-login": "آخر تسجيل دخول", + "last-name": "اسم العائلة", + "name": "اسم", + "new-email-address": "عنوان البريد الإلكتروني الجديد", + "no-orders-placed": "لا توجد أوامر" , + "not-a-member-of-any-groups": "هذا العميل ليس عضوًا في أي مجموعات" , + "old-email-address": "عنوان البريد الإلكتروني القديم" , + "orders": "طلبات", + "password": "كلمة المرور", + "phone-number": "رقم التليفون", + "postal-code": "رمز بريدي", + "province": "مقاطعة", + "registered": "مسجل", + "remove-customers-from-group-success": "تمت إزالة {customercount , الجمع , واحد {1 customer} {{customercount}}}} من \" {groupname} \"" , + "remove-from-group": "إزالة من هذه المجموعة" , + "search-customers-by-email": "البحث عن طريق عنوان البريد الإلكتروني" , + "search-customers-by-email-last-name-postal-code": "ابحث عن طريق البريد الإلكتروني / الاسم الأخير / الرمز البريدي" , + "select-customer": "حدد العميل" , + "set-as-default-billing-address": "تعيين الفواتير الافتراضية" , + "set-as-default-shipping-address": "تعيين الشحن الافتراضي" , + "street-line-1": "خط الشارع 1" , + "street-line-2": "خط الشارع 2" , + "title": "عنوان", + "update-customer-group": "تحديث مجموعة العملاء" , + "verified": "تم التحقق", + "view-group-members": "عرض أعضاء المجموعة" + }, + "dashboard": { + "add-widget": "إضافة القطعة", + "latest-orders": "أحدث الطلبات" , + "metric-average-order-value": "متوسط قيمة الطلب" , + "metric-number-of-orders": "عدد الطلبات", + "metric-order-total-value": "طلب القيمة الإجمالية" , + "metrics": "مقاييس" , + "orders-summary": "أوامر ملخص" , + "remove-widget": "إزالة القطعة" , + "thisMonth": "هذا الشهر", + "thisWeek": "هذا الاسبوع", + "today": "اليوم", + "total-order-value": "القيمة الإجمالية", + "total-orders": "إجمالي الطلبات" , + "widget-resize": "تغيير الحجم", + "widget-width": "العرض: {width}" , + "yesterday": "أمس" + }, + "datetime": { + "ago-days": "{count , الجمع , واحد {1 يوم} آخر {{count} days}}}" , + "ago-hours": "{count , الجمع , واحد {1 ساعة} {{count} hrs}}}}", + "ago-minutes": "{count , الجمع , واحد {1 دقيقة} {{count} mins}}}" , + "ago-seconds": "{count , plural , = 0 {Just Now} One {1 Sec ve", + "ago-years": "{count , الجمع , واحد {1 سنة} أخرى {{count} years}}}}" , + "duration-milliseconds": "{MS} MS" , + "duration-minutes:seconds": "{m}: {s} m" , + "duration-seconds": "{s} s" , + "month-apr": "أبريل", + "month-aug": "أغسطس", + "month-dec": "ديسمبر", + "month-feb": "شهر فبراير", + "month-jan": "يناير", + "month-jul": "يوليو", + "month-jun": "يونيو", + "month-mar": "يمشي", + "month-may": "يمكن", + "month-nov": "شهر نوفمبر", + "month-oct": "اكتوبر", + "month-sep": "سبتمبر", + "time": "وقت", + "weekday-fr": "الاب" , + "weekday-mo": "شهر", + "weekday-sa": "في", + "weekday-su": "نكون", + "weekday-th": "ذ", + "weekday-tu": "تو" , + "weekday-we": "نحن" + }, + "editor": { + "image-alt": "الوصف (بديل)" , + "image-src": "مصدر", + "image-title": "عنوان", + "insert-image": "إدراج صورة", + "link-href": "Link Href" , + "link-target": "رابط الهدف", + "link-title": "عنوان الرابط" , + "remove-link": "يزيل", + "set-link": "Set Link" + }, + "error": { + "403-forbidden": "أنت غير مخول حاليًا للوصول إلى \" {path} \". إما أنك تفتقر إلى الأذونات , أو انتهت جلستك." , + "could-not-connect-to-server": "لا يمكن الاتصال بخادم Vendure في {url}" , + "facet-value-form-values-do-not-match": "عدد القيم في نموذج الوجه لا يتطابق مع العدد الفعلي للقيم" , + "health-check-failed": "فشل فحص صحة النظام" , + "no-default-shipping-zone-set": "هذه القناة لا تحتوي على منطقة شحن افتراضية. قد يتسبب هذا في حدوث أخطاء عند حساب رسوم الشحن." , + "no-default-tax-zone-set": "لا تحتوي هذه القناة على منطقة ضريبية افتراضية , والتي ستسبب أخطاء عند حساب الأسعار. يرجى إنشاء أو تحديد منطقة." + }, + "marketing": { + "actions": "أجراءات", + "add-action": "إضافة إجراء" , + "add-condition": "إضافة حالة" , + "conditions": "شروط", + "coupon-code": "رمز الكوبون", + "create-new-promotion": "إنشاء عرض ترويجي جديد" , + "ends-at": "ينتهي عند", + "per-customer-limit": "حد كل عميل" , + "promotion": "ترقية", + "search-by-name-or-coupon-code": "البحث بالاسم أو رمز القسيمة" , + "starts-at": "يبدأ عند" + }, + "nav": { + "administrators": "المسؤولون" , + "assets": "أصول", + "catalog": "فهرس", + "channels": "القنوات" , + "collections": "مجموعات" , + "countries": "بلدان", + "customer-groups": "مجموعات العملاء" , + "customers": "عملاء", + "facets": "جوانب" , + "global-settings": "الاعدادات العامة", + "inventory": "جرد", + "job-queue": "ذيل الوظيفة" , + "marketing": "تسويق", + "orders": "طلبات", + "payment-methods": "طرق الدفع" , + "promotions": "الترقيات" , + "roles": "الأدوار" , + "sales": "مبيعات", + "sellers": "البائعون" , + "settings": "إعدادات", + "shipping-methods": "طرق الشحن", + "system": "نظام", + "system-status": "حالة النظام", + "tax-categories": "فئات الضرائب" , + "tax-rates": "معدلات الضرائب" , + "zones": "المناطق" + }, + "order": { + "add-item-to-order": "إضافة عنصر إلى الطلب", + "add-note": "اضف ملاحظة", + "add-payment": "إضافة الدفع" , + "add-payment-to-order": "أضف الدفع إلى الطلب" , + "add-payment-to-order-success": "أضيف بنجاح دفعة إلى الطلب" , + "add-surcharge": "إضافة رسوم إضافية" , + "added-items": "العناصر المضافة" , + "amount": "كمية", + "arrange-additional-payment": "ترتيب دفع إضافي" , + "billing-address": "عنوان وصول الفواتير", + "cancel": "يلغي", + "cancel-entire-order": "إلغاء الطلب بالكامل" , + "cancel-fulfillment": "إلغاء الوفاء" , + "cancel-modification": "إلغاء التعديل" , + "cancel-order": "إلغاء الطلب أو العناصر" , + "cancel-payment": "الغاء الدفع", + "cancel-reason-customer-request": "طلب العميل", + "cancel-reason-not-available": "غير متاح", + "cancel-selected-items": "إلغاء العناصر المحددة" , + "cancel-specified-items": "إلغاء العناصر المحددة" , + "cancellation-reason": "سبب الإلغاء", + "cancelled-order-success": "الطلب الذي تم إلغاؤه بنجاح" , + "complete-draft-order": "مسودة كاملة" , + "confirm-modifications": "تأكيد التعديلات" , + "contents": "محتويات", + "create-fulfillment": "إنشاء الوفاء" , + "create-fulfillment-success": "خلق الوفاء" , + "customer": "عميل", + "delete-draft-order": "حذف المسودة" , + "draft-order": "مشروع النظام", + "edit-billing-address": "تحرير عنوان الفواتير" , + "edit-shipping-address": "تحرير عنوان الشحن" , + "error-message": "رسالة خطأ", + "existing-address": "العنوان الحالي" , + "existing-customer": "الزبون الحالي", + "filter-is-active": "نشط" , + "fulfill": "بكمل", + "fulfill-order": "تنفيذ الأمر" , + "fulfillment": "تحقيق, إنجاز", + "fulfillment-method": "طريقة الوفاء" , + "history-coupon-code-applied": "رمز القسيمة المطبق" , + "history-coupon-code-removed": "إزالة رمز القسيمة" , + "history-fulfillment-created": "الإنجاز الذي تم إنشاؤه" , + "history-fulfillment-delivered": "الوفاء بتسليم" , + "history-fulfillment-shipped": "تم شحن الوفاء" , + "history-fulfillment-transition": "تم نقل الوفاء من {من} إلى {إلى}" , + "history-items-cancelled": "{count} {count , الجمع , واحد {item} آخر {العناصر}} تم إلغاؤه" , + "history-order-cancelled": "تم الغاء الأمر او الطلب", + "history-order-created": "أجل خلق", + "history-order-fulfilled": "أمر تم تحقيقه" , + "history-order-modified": "ترتيب تعديل" , + "history-order-transition": "تم نقل الطلب من {من} إلى {إلى}" , + "history-payment-settled": "الدفع المستقر" , + "history-payment-transition": "الدفع #{id} انتقل من {من} إلى {إلى}" , + "history-refund-transition": "REWNDUND #{id} انتقل من {من} إلى {إلى}" , + "item-count": "{count} {count , الجمع , واحد {item} آخر {عناصر}}" , + "line-fulfillment-all": "جميع العناصر التي تم الوفاء بها" , + "line-fulfillment-none": "لا توجد عناصر تحققت" , + "line-fulfillment-partial": "{count} من العناصر {total} تم الوفاء بها" , + "manually-transition-to-state": "الانتقال يدويًا إلى الدولة ..." , + "manually-transition-to-state-message": "نقل الأمر يدويًا إلى دولة أخرى. لاحظ أن حالات النظام تخضع لقواعد قد تمنع بعض التحولات." , + "modification-adding-items": "إضافة {count} {count , الجمع , واحد {item} آخر {العناصر}}" , + "modification-adding-surcharges": "إضافة {count} {count , الجمع , واحد {رسوم إضافية} {surghres}}" , + "modification-adjusting-lines": "ضبط {count} {count , الجمع , واحد {line} آخر {lines}}" , + "modification-not-settled": "ليس مستقر", + "modification-recalculate-shipping": "إعادة حساب الشحن" , + "modification-settled": "تسوية", + "modification-summary": "ملخص التعديلات" , + "modification-updating-billing-address": "تحديث عنوان الفواتير" , + "modification-updating-shipping-address": "تحديث عنوان الشحن" , + "modifications": "التعديلات" , + "modify-order": "تعديل الترتيب", + "modify-order-price-difference": "فرق السعر" , + "net-price": "السعر الصافي", + "note": "ملحوظة", + "note-is-private": "ملاحظة خاصة" , + "note-only-visible-to-administrators": "مرئي للمسؤولين فقط" , + "note-visible-to-customer": "مرئي للمستعولين والعميل" , + "order": "طلب", + "order-history": "تاريخ الطلب", + "order-is-empty": "الطلب فارغ" , + "order-state-diagram": "ترتيب مخطط الحالة" , + "order-type": "نوع الطلب", + "order-type-aggregate": "إجمالي", + "order-type-regular": "عادي", + "order-type-seller": "تاجر", + "orders": "طلبات", + "payment": "قسط", + "payment-amount": "مبلغ الدفع" , + "payment-metadata": "بيانات تعريف الدفع" , + "payment-method": "طريقة الدفع او السداد", + "payment-state": "ولاية", + "payment-to-refund": "الدفع لاسترداد" , + "payments": "المدفوعات" , + "placed-at": "وضعت في" , + "preview-changes": "تغييرات المعاينة" , + "product-name": "اسم المنتج", + "product-sku": "SKU" , + "promotions-applied": "الترقيات المطبقة" , + "prorated-unit-price": "سعر الوحدة المتناسق" , + "quantity": "كمية", + "refund": "استرداد", + "refund-adjustment": "تعديل", + "refund-and-cancel-order": "استرداد وإلغاء الطلب" , + "refund-cancellation-reason": "سبب الاسترداد/الإلغاء" , + "refund-cancellation-reason-required": "الاسترداد/الإلغاء سبب مطلوب" , + "refund-metadata": "رد الفوقية المترد" , + "refund-order-failed": "فشلت استرداد الأموال" , + "refund-order-success": "ترتيب استرداد بنجاح" , + "refund-reason": "سبب رد المبلغ" , + "refund-reason-customer-request": "طلب العميل", + "refund-reason-not-available": "غير متاح", + "refund-shipping": "استرداد الشحن" , + "refund-total": "إجمالي استرداد الأموال" , + "refund-total-error": "يجب أن يكون إجمالي الاسترداد بين {min} و {max}" , + "refund-total-warning": "إجمالي استرداد المبلغ يتجاوز مبلغ الدفع المحدد. سيتم رد المبلغ المتبقي من المدفوعات الأخرى." , + "refund-with-amount": "المبلغ المسترد}", + "refunded-count": "{count} {count , الجمع , واحد {item} آخر {العناصر}}", + "removed-items": "العناصر التي تمت إزالتها" , + "search-by-order-filters": "ابحث بالاسم / الكود / معرف المعاملة" , + "select-address": "حدد العنوان" , + "select-shipping-method": "إختر طريقة الشحن", + "select-state": "اختر ولايه", + "seller-orders": "أوامر البائع" , + "set-billing-address": "تعيين عنوان الفواتير" , + "set-coupon-codes": "تعيين رموز القسيمة" , + "set-customer-for-order": "تعيين العميل" , + "set-fulfillment-state": "مارك كـ {State}" , + "set-shipping-address": "تعيين عنوان الشحن" , + "set-shipping-method": "تعيين طريقة الشحن" , + "settle-payment": "دفع تسوية", + "settle-payment-error": "لا يمكن تسوية الدفع" , + "settle-payment-success": "دفعت الدفع بنجاح" , + "settle-refund": "تسوية استرداد" , + "settle-refund-manual-instructions": "بعد استرداد يدويًا عبر موفر الدفع الخاص بك ({method}) , أدخل معرف المعاملة هنا." , + "settle-refund-success": "استرداد الأموال بنجاح" , + "shipping": "شحن", + "shipping-address": "عنوان الشحن", + "shipping-cancelled": "تم إلغاء الشحن" , + "shipping-method": "طريقة الشحن", + "state": "ولاية", + "sub-total": "المجموع الفرعي" , + "successfully-updated-fulfillment": "تحقيق التحديث بنجاح" , + "surcharges": "الرسوم الإضافية" , + "tax-base": "القاعدة الضريبية", + "tax-description": "الوصف الضريبي" , + "tax-rate": "معدل الضريبة", + "tax-summary": "ملخص ضريبي" , + "tax-total": "إجمالي الضرائب" , + "total": "المجموع", + "tracking-code": "شفرة التتبع", + "transaction-id": "رقم المعاملة", + "transition-to-state": "الانتقال إلى {State} State" , + "transitioned-payment-to-state-success": "تم نقل الدفع بنجاح إلى {State}" , + "transitioned-to-state-success": "انتقل بنجاح إلى {State}" , + "unable-to-transition-to-state-try-another": "لا يمكن نقل الطلب مرة أخرى إلى \" {State} \"State. يرجى تحديد حالة بديلة." , + "unfulfilled": "لم تتحقق" , + "unit-price": "سعر الوحدة" + }, + "settings": { + "add-countries-to-zone": "أضف البلدان إلى {zonename}" , + "add-countries-to-zone-success": "تمت إضافة {CountryCount} {CountryCount , الجمع , واحد {Country} آخر {البلدان}} إلى Zone \" {Zonename} \"" , + "add-products-to-test-order": "إضافة منتجات إلى ترتيب الاختبار" , + "administrator": "مدير", + "channel": "قناة" , + "channel-token": "قناة رمز" , + "country": "دولة", + "create-new-channel": "إنشاء قناة جديدة" , + "create-new-country": "إنشاء بلد جديد" , + "create-new-payment-method": "إنشاء طريقة دفع جديدة" , + "create-new-role": "إنشاء دور جديد" , + "create-new-seller": "إنشاء بائع جديد" , + "create-new-shipping-method": "إنشاء طريقة شحن جديدة" , + "create-new-tax-category": "إنشاء فئة ضريبية" , + "create-new-tax-rate": "إنشاء معدل ضريبة جديد" , + "create-new-zone": "إنشاء منطقة جديدة" , + "default-currency": "العملة الافتراضية", + "default-role-label": "هذا دور افتراضي ولا يمكن تعديله" , + "default-shipping-zone": "منطقة الشحن الافتراضية" , + "default-tax-zone": "المنطقة الضريبية الافتراضية" , + "defaults": "التخلف عن السداد" , + "eligible": "صالح", + "email-address": "عنوان البريد الإلكتروني", + "email-address-or-identifier": "عنوان البريد الإلكتروني أو المعرف" , + "first-name": "الاسم الأول", + "fulfillment-handler": "معالج الوفاء" , + "global-available-languages-tooltip": "يحدد اللغات المتوفرة لجميع القنوات. يمكن للقنوات الفردية أن تدعم مجموعة فرعية من هذه اللغات." , + "global-out-of-stock-threshold": "عتبة عالمية خارج المخزون" , + "global-out-of-stock-threshold-tooltip": "يحدد مستوى الأسهم الذي يعتبر هذا البديل غير متغير.باستخدام قيمة سالبة يتيح الدعم المتأخر.يمكن تجاوزها بواسطة متغيرات المنتج.", + "last-name": "اسم العائلة", + "no-eligible-shipping-methods": "لا توجد طرق شحن مؤهلة" , + "password": "كلمة المرور", + "payment-eligibility-checker": "مدقق أهلية الدفع" , + "payment-handler": "معالج الدفع" , + "payment-method": "طريقة الدفع او السداد", + "permissions": "أذونات" , + "prices-include-tax": "تشمل الأسعار ضريبة على المنطقة الافتراضية" , + "profile": "حساب تعريفي", + "rate": "معدل", + "remove-countries-from-zone-success": "تمت إزالة {CountryCount} {CountryCount , الجمع , واحد {Country} آخر {البلدان}} من Zone \" {Zonename} \"" , + "remove-from-zone": "إزالة من المنطقة" , + "role": "دور", + "roles": "الأدوار" , + "search-by-product-name-or-sku": "ابحث باسم المنتج أو SKU" , + "seller": "تاجر", + "shipping-calculator": "حاسبة الشحن" , + "shipping-eligibility-checker": "مدقق الأهلية الشحن" , + "shipping-method": "طريقة الشحن", + "tax-category": "فئة الضرائب" , + "tax-rate": "معدل الضريبة", + "test-address": "عنوان الاختبار" , + "test-result": "نتيجة الاختبار", + "test-shipping-method": "اختبار طريقة الشحن" , + "test-shipping-methods": "اختبار طرق الشحن" , + "track-inventory-default": "تتبع المخزون افتراضيًا" , + "view-zone-members": "عرض الأعضاء" , + "zone": "منطقة" + }, + "state": { + "adding-items": "إضافة عناصر" , + "arranging-additional-payment": "ترتيب دفع إضافي" , + "arranging-payment": "ترتيب الدفع" , + "authorized": "مخول", + "cancelled": "ألغيت", + "created": "مخلوق", + "declined": "انخفض", + "delivered": "تم التوصيل", + "draft": "مسودة", + "error": "خطأ", + "failed": "فشل", + "modifying": "تعديل" , + "partially-delivered": "تسليم جزئيا" , + "partially-shipped": "شحن جزئي" , + "payment-authorized": "الدفع المعتمد" , + "payment-settled": "الدفع المستقر" , + "pending": "قيد الانتظار", + "settled": "تسوية", + "shipped": "شحنها" + }, + "system": { + "all-job-queues": "جميع قوائم انتظار الوظائف" , + "health-all-systems-up": "جميع الأنظمة" , + "health-error": "خطأ: نظام واحد أو أكثر من الانخفاض!" , + "health-last-checked": "آخر فحص" , + "health-message": "رسالة", + "health-refresh": "ينعش", + "health-status": "حالة", + "health-status-down": "تحت", + "health-status-up": "أعلى", + "hide-settled-jobs": "إخفاء الوظائف المستقرة" , + "job-data": "بيانات الوظيفة" , + "job-duration": "مدة", + "job-error": "خطأ في الوظيفة" , + "job-queue-name": "اسم قائمة الانتظار" , + "job-result": "نتيجة الوظيفة" , + "job-state": "دولة الوظيفة" + } +} diff --git a/packages/admin-ui/src/lib/static/vendure-ui-config.json b/packages/admin-ui/src/lib/static/vendure-ui-config.json index b4bbd1fd21..b34957e999 100644 --- a/packages/admin-ui/src/lib/static/vendure-ui-config.json +++ b/packages/admin-ui/src/lib/static/vendure-ui-config.json @@ -6,6 +6,7 @@ "authTokenHeaderKey": "vendure-auth-token", "defaultLanguage": "en", "availableLanguages": [ + "ar", "en", "es", "zh_Hant",