Browse Source

chore(admin-ui): Add basic infrastructure for RTL support

Michael Bromley 2 years ago
parent
commit
77aaf8f4ba

+ 1 - 0
packages/admin-ui-plugin/src/constants.ts

@@ -7,6 +7,7 @@ export const defaultLanguage = LanguageCode.en;
 export const defaultLocale = undefined;
 export const defaultLocale = undefined;
 
 
 export const defaultAvailableLanguages = [
 export const defaultAvailableLanguages = [
+    LanguageCode.ar,
     LanguageCode.de,
     LanguageCode.de,
     LanguageCode.en,
     LanguageCode.en,
     LanguageCode.es,
     LanguageCode.es,

+ 8 - 3
packages/admin-ui/i18n-coverage.json

@@ -1,7 +1,12 @@
 {
 {
-  "generatedOn": "2023-07-12T12:33:44.002Z",
-  "lastCommit": "4d01ab53b3d078f4cc2478d764d3dc87d61520da",
+  "generatedOn": "2023-07-13T09:05:05.231Z",
+  "lastCommit": "120a0bbe5a978efc8abdb4074df1645e48dfcdab",
   "translationStatus": {
   "translationStatus": {
+    "ar": {
+      "tokenCount": 740,
+      "translatedCount": 0,
+      "percentage": 0
+    },
     "cs": {
     "cs": {
       "tokenCount": 740,
       "tokenCount": 740,
       "translatedCount": 545,
       "translatedCount": 545,
@@ -14,7 +19,7 @@
     },
     },
     "en": {
     "en": {
       "tokenCount": 740,
       "tokenCount": 740,
-      "translatedCount": 739,
+      "translatedCount": 740,
       "percentage": 100
       "percentage": 100
     },
     },
     "es": {
     "es": {

+ 1 - 1
packages/admin-ui/src/lib/core/src/components/app-shell/app-shell.component.html

@@ -1,4 +1,4 @@
-<div class="app-container">
+<div class="app-container" [dir]="direction$ | async">
     <div class="left-nav" [class.expanded]="mainNavExpanded$ | async">
     <div class="left-nav" [class.expanded]="mainNavExpanded$ | async">
         <div class="branding">
         <div class="branding">
             <a [routerLink]="['/']" *ngIf="!hideVendureBranding"><img src="assets/logo-top.webp" class="logo" style="max-width: 100px" /></a>
             <a [routerLink]="['/']" *ngIf="!hideVendureBranding"><img src="assets/logo-top.webp" class="logo" style="max-width: 100px" /></a>

+ 4 - 0
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 {
 export class AppShellComponent implements OnInit {
     userName$: Observable<string>;
     userName$: Observable<string>;
     uiLanguageAndLocale$: Observable<[LanguageCode, string | undefined]>;
     uiLanguageAndLocale$: Observable<[LanguageCode, string | undefined]>;
+    direction$: Observable<'ltr' | 'rtl'>;
     availableLanguages: LanguageCode[] = [];
     availableLanguages: LanguageCode[] = [];
     hideVendureBranding = getAppConfig().hideVendureBranding;
     hideVendureBranding = getAppConfig().hideVendureBranding;
     pageTitle$: Observable<string>;
     pageTitle$: Observable<string>;
@@ -50,6 +51,9 @@ export class AppShellComponent implements OnInit {
         this.mainNavExpanded$ = this.dataService.client
         this.mainNavExpanded$ = this.dataService.client
             .uiState()
             .uiState()
             .stream$.pipe(map(({ uiState }) => uiState.mainNavExpanded));
             .stream$.pipe(map(({ uiState }) => uiState.mainNavExpanded));
+        this.direction$ = this.uiLanguageAndLocale$.pipe(
+            map(([languageCode]) => (this.i18nService.isRTL(languageCode) ? 'rtl' : 'ltr')),
+        );
     }
     }
 
 
     selectUiLanguage() {
     selectUiLanguage() {

+ 14 - 0
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 {
     translate(key: string | string[], params?: any): string {
         return this.ngxTranslate.instant(key, params);
         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);
+    }
 }
 }

+ 774 - 0
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": "",
+    "assets-selected-count": "",
+    "dimensions": "",
+    "focal-point": "",
+    "notify-create-assets-success": "",
+    "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": "",
+    "assign-products-to-channel": "",
+    "assign-to-channel": "",
+    "assign-to-named-channel": "",
+    "assign-variant-to-channel-success": "",
+    "assign-variants-to-channel": "",
+    "auto-update-option-variant-name": "",
+    "auto-update-product-variant-name": "",
+    "cannot-create-variants-without-options": "",
+    "channel-price-preview": "",
+    "collection": "",
+    "collection-contents": "",
+    "collections": "",
+    "confirm-bulk-delete-products": "",
+    "confirm-cancel": "",
+    "confirm-delete-assets": "",
+    "confirm-delete-facet-value": "",
+    "confirm-delete-product": "",
+    "confirm-delete-product-option": "",
+    "confirm-delete-product-option-group": "",
+    "confirm-delete-product-option-group-body": "",
+    "confirm-delete-product-variant": "",
+    "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-value-not-available": "",
+    "facet-values": "",
+    "facets": "",
+    "filter-by-name": "",
+    "filter-by-sku": "",
+    "filter-inheritance": "",
+    "filters": "",
+    "inherit-filters-from-parent": "",
+    "live-preview-contents": "",
+    "manage-variants": "",
+    "move-collection-to": "",
+    "move-collections": "",
+    "move-collections-success": "",
+    "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": "",
+    "notify-remove-facets-from-channel-success": "",
+    "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": "",
+    "price-includes-tax-at": "",
+    "price-with-tax-in-default-zone": "",
+    "private": "",
+    "product": "",
+    "product-name": "",
+    "product-options": "",
+    "product-variant-exists": "",
+    "product-variants": "",
+    "products": "",
+    "public": "",
+    "quick-jump-placeholder": "",
+    "rebuild-search-index": "",
+    "reindex-error": "",
+    "reindex-successful": "",
+    "reindexing": "",
+    "remove-from-channel": "",
+    "remove-option": "",
+    "remove-product-from-channel": "",
+    "remove-product-variant-from-channel": "",
+    "reorder-collection": "",
+    "root-collection": "",
+    "run-pending-search-index-updates": "",
+    "running-search-index-updates": "",
+    "search-asset-name-or-tag": "",
+    "search-for-term": "",
+    "search-product-name-or-code": "",
+    "select-product": "",
+    "select-product-variant": "",
+    "sku": "",
+    "slug": "",
+    "slug-pattern-error": "",
+    "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": "",
+    "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": "",
+    "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": "",
+    "items-selected-count": "",
+    "keep-editing": "",
+    "language": "",
+    "launch-extension": "",
+    "list-items-and-n-more": "",
+    "live-update": "",
+    "locale": "",
+    "log-out": "",
+    "login": "",
+    "login-image-title": "",
+    "login-title": "",
+    "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": "",
+    "notify-bulk-update-success": "",
+    "notify-create-error": "",
+    "notify-create-success": "",
+    "notify-delete-error": "",
+    "notify-delete-error-with-count": "",
+    "notify-delete-success": "",
+    "notify-delete-success-with-count": "",
+    "notify-remove-from-channel-success-with-count": "",
+    "notify-save-changes-error": "",
+    "notify-saved-changes": "",
+    "notify-update-error": "",
+    "notify-update-success": "",
+    "notify-updated-tags-success": "",
+    "okay": "",
+    "operator-contains": "",
+    "operator-eq": "",
+    "operator-gt": "",
+    "operator-lt": "",
+    "operator-not-contains": "",
+    "operator-not-eq": "",
+    "operator-notContains": "",
+    "operator-regex": "",
+    "password": "",
+    "position": "",
+    "price": "",
+    "price-with-tax": "",
+    "private": "",
+    "public": "",
+    "remember-me": "",
+    "remove": "",
+    "remove-from-channel": "",
+    "remove-item-from-list": "",
+    "reset-columns": "",
+    "results-count": "",
+    "sample-formatting": "",
+    "search-and-filter-list": "",
+    "search-by-name": "",
+    "select": "",
+    "select-display-language": "",
+    "select-items-with-count": "",
+    "select-products": "",
+    "select-relation-id": "",
+    "select-table-columns": "",
+    "select-today": "",
+    "select-variants": "",
+    "seller": "",
+    "set-language": "",
+    "short-date": "",
+    "slug": "",
+    "start-date": "",
+    "status": "",
+    "tags": "",
+    "theme": "",
+    "there-are-unsaved-changes": "",
+    "toggle-all": "",
+    "total-items": "",
+    "update": "",
+    "updated-at": "",
+    "username": "",
+    "value": "",
+    "view-contents": "",
+    "view-next-month": "",
+    "view-previous-month": "",
+    "visibility": "",
+    "with-selected": ""
+  },
+  "customer": {
+    "add-customer-to-group": "",
+    "add-customer-to-groups-with-count": "",
+    "add-customers-to-group": "",
+    "add-customers-to-group-success": "",
+    "add-customers-to-group-with-count": "",
+    "add-customers-to-group-with-name": "",
+    "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": "",
+    "first-name": "",
+    "full-name": "",
+    "guest": "",
+    "history-customer-added-to-group": "",
+    "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": "",
+    "history-customer-verified": "",
+    "history-using-external-auth-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": "",
+    "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": "",
+    "street-line-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": "",
+    "yesterday": ""
+  },
+  "datetime": {
+    "ago-days": "",
+    "ago-hours": "",
+    "ago-minutes": "",
+    "ago-seconds": "",
+    "ago-years": "",
+    "duration-milliseconds": "",
+    "duration-minutes:seconds": "",
+    "duration-seconds": "",
+    "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-target": "",
+    "link-title": "",
+    "remove-link": "",
+    "set-link": ""
+  },
+  "error": {
+    "403-forbidden": "",
+    "could-not-connect-to-server": "",
+    "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": "",
+    "history-order-cancelled": "",
+    "history-order-created": "",
+    "history-order-fulfilled": "",
+    "history-order-modified": "",
+    "history-order-transition": "",
+    "history-payment-settled": "",
+    "history-payment-transition": "",
+    "history-refund-transition": "",
+    "item-count": "",
+    "line-fulfillment-all": "",
+    "line-fulfillment-none": "",
+    "line-fulfillment-partial": "",
+    "manually-transition-to-state": "",
+    "manually-transition-to-state-message": "",
+    "modification-adding-items": "",
+    "modification-adding-surcharges": "",
+    "modification-adjusting-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": "",
+    "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": "",
+    "refund-total-warning": "",
+    "refund-with-amount": "",
+    "refunded-count": "",
+    "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": "",
+    "set-shipping-address": "",
+    "set-shipping-method": "",
+    "settle-payment": "",
+    "settle-payment-error": "",
+    "settle-payment-success": "",
+    "settle-refund": "",
+    "settle-refund-manual-instructions": "",
+    "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": "",
+    "transitioned-payment-to-state-success": "",
+    "transitioned-to-state-success": "",
+    "unable-to-transition-to-state-try-another": "",
+    "unfulfilled": "",
+    "unit-price": ""
+  },
+  "settings": {
+    "add-countries-to-zone": "",
+    "add-countries-to-zone-success": "",
+    "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": "",
+    "remove-from-zone": "",
+    "role": "",
+    "roles": "",
+    "search-by-product-name-or-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": ""
+  }
+}

+ 1 - 0
packages/admin-ui/src/lib/static/vendure-ui-config.json

@@ -6,6 +6,7 @@
     "authTokenHeaderKey": "vendure-auth-token",
     "authTokenHeaderKey": "vendure-auth-token",
     "defaultLanguage": "en",
     "defaultLanguage": "en",
     "availableLanguages": [
     "availableLanguages": [
+        "ar",
         "en",
         "en",
         "es",
         "es",
         "zh_Hant",
         "zh_Hant",