Browse Source

Merge branch 'master' into minor

Michael Bromley 4 years ago
parent
commit
d308faf470
30 changed files with 728 additions and 2679 deletions
  1. 33 33
      packages/admin-ui/i18n-coverage.json
  2. 0 165
      packages/admin-ui/src/lib/core/src/common/language-translation-strings.ts
  3. 1 1
      packages/admin-ui/src/lib/core/src/components/app-shell/app-shell.component.ts
  4. 1 1
      packages/admin-ui/src/lib/core/src/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.html
  5. 1 1
      packages/admin-ui/src/lib/core/src/components/user-menu/user-menu.component.html
  6. 1 1
      packages/admin-ui/src/lib/core/src/public_api.ts
  7. 7 1
      packages/admin-ui/src/lib/core/src/shared/components/currency-input/currency-input.component.ts
  8. 2 2
      packages/admin-ui/src/lib/core/src/shared/components/language-selector/language-selector.component.html
  9. 7 7
      packages/admin-ui/src/lib/core/src/shared/pipes/locale-currency-name.pipe.spec.ts
  10. 10 11
      packages/admin-ui/src/lib/core/src/shared/pipes/locale-currency-name.pipe.ts
  11. 34 0
      packages/admin-ui/src/lib/core/src/shared/pipes/locale-language-name.pipe.spec.ts
  12. 38 0
      packages/admin-ui/src/lib/core/src/shared/pipes/locale-language-name.pipe.ts
  13. 2 0
      packages/admin-ui/src/lib/core/src/shared/shared.module.ts
  14. 1 1
      packages/admin-ui/src/lib/settings/src/components/channel-detail/channel-detail.component.html
  15. 2 2
      packages/admin-ui/src/lib/settings/src/components/global-settings/global-settings.component.html
  16. 0 159
      packages/admin-ui/src/lib/static/i18n-messages/cs.json
  17. 0 159
      packages/admin-ui/src/lib/static/i18n-messages/de.json
  18. 1 160
      packages/admin-ui/src/lib/static/i18n-messages/en.json
  19. 0 159
      packages/admin-ui/src/lib/static/i18n-messages/es.json
  20. 0 159
      packages/admin-ui/src/lib/static/i18n-messages/fr.json
  21. 0 159
      packages/admin-ui/src/lib/static/i18n-messages/pl.json
  22. 0 159
      packages/admin-ui/src/lib/static/i18n-messages/pt_BR.json
  23. 18 177
      packages/admin-ui/src/lib/static/i18n-messages/ru.json
  24. 17 176
      packages/admin-ui/src/lib/static/i18n-messages/uk.json
  25. 0 159
      packages/admin-ui/src/lib/static/i18n-messages/zh_Hans.json
  26. 0 159
      packages/admin-ui/src/lib/static/i18n-messages/zh_Hant.json
  27. 30 0
      packages/core/e2e/collection.e2e-spec.ts
  28. 518 665
      packages/core/e2e/graphql/generated-e2e-admin-types.ts
  29. 3 3
      packages/core/src/api/resolvers/entity/collection-entity.resolver.ts
  30. 1 0
      packages/core/src/service/services/asset.service.ts

+ 33 - 33
packages/admin-ui/i18n-coverage.json

@@ -1,61 +1,61 @@
 {
-  "generatedOn": "2021-06-29T10:27:05.737Z",
-  "lastCommit": "e4f276791c3c46a90c9c37c03d7f28b48a7bec86",
+  "generatedOn": "2021-07-08T12:48:37.370Z",
+  "lastCommit": "e950588df16d643e323c69f9f1909e74c2aa5c2c",
   "translationStatus": {
     "cs": {
-      "tokenCount": 778,
-      "translatedCount": 748,
-      "percentage": 96
+      "tokenCount": 621,
+      "translatedCount": 591,
+      "percentage": 95
     },
     "de": {
-      "tokenCount": 778,
-      "translatedCount": 726,
-      "percentage": 93
+      "tokenCount": 621,
+      "translatedCount": 570,
+      "percentage": 92
     },
     "en": {
-      "tokenCount": 778,
-      "translatedCount": 774,
-      "percentage": 99
+      "tokenCount": 621,
+      "translatedCount": 621,
+      "percentage": 100
     },
     "es": {
-      "tokenCount": 778,
-      "translatedCount": 451,
-      "percentage": 58
+      "tokenCount": 621,
+      "translatedCount": 309,
+      "percentage": 50
     },
     "fr": {
-      "tokenCount": 778,
-      "translatedCount": 770,
+      "tokenCount": 621,
+      "translatedCount": 613,
       "percentage": 99
     },
     "pl": {
-      "tokenCount": 778,
-      "translatedCount": 544,
-      "percentage": 70
+      "tokenCount": 621,
+      "translatedCount": 405,
+      "percentage": 65
     },
     "pt_BR": {
-      "tokenCount": 778,
-      "translatedCount": 744,
-      "percentage": 96
+      "tokenCount": 621,
+      "translatedCount": 588,
+      "percentage": 95
     },
     "ru": {
-      "tokenCount": 778,
-      "translatedCount": 774,
-      "percentage": 99
+      "tokenCount": 621,
+      "translatedCount": 621,
+      "percentage": 100
     },
     "uk": {
-      "tokenCount": 778,
-      "translatedCount": 774,
-      "percentage": 99
+      "tokenCount": 621,
+      "translatedCount": 621,
+      "percentage": 100
     },
     "zh_Hans": {
-      "tokenCount": 778,
-      "translatedCount": 699,
+      "tokenCount": 621,
+      "translatedCount": 558,
       "percentage": 90
     },
     "zh_Hant": {
-      "tokenCount": 778,
-      "translatedCount": 526,
-      "percentage": 68
+      "tokenCount": 621,
+      "translatedCount": 385,
+      "percentage": 62
     }
   }
 }

+ 0 - 165
packages/admin-ui/src/lib/core/src/common/language-translation-strings.ts

@@ -1,165 +0,0 @@
-import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
-
-/**
- * The purpose of this file is to simply mark each available language code (as defined in the
- * LanguageCode GraphQL enum) with the `mark-for-extraction` function, so that when running
- * the "extract-translations" script, the language translation tokens will be extracted.
- */
-
-_('lang.af');
-_('lang.ak');
-_('lang.sq');
-_('lang.am');
-_('lang.ar');
-_('lang.hy');
-_('lang.as');
-_('lang.az');
-_('lang.bm');
-_('lang.bn');
-_('lang.eu');
-_('lang.be');
-_('lang.bs');
-_('lang.br');
-_('lang.bg');
-_('lang.my');
-_('lang.ca');
-_('lang.ce');
-_('lang.zh');
-_('lang.zh_Hans');
-_('lang.zh_Hant');
-_('lang.cu');
-_('lang.kw');
-_('lang.co');
-_('lang.hr');
-_('lang.cs');
-_('lang.da');
-_('lang.nl');
-_('lang.nl_BE');
-_('lang.dz');
-_('lang.en');
-_('lang.en_AU');
-_('lang.en_CA');
-_('lang.en_GB');
-_('lang.en_US');
-_('lang.eo');
-_('lang.et');
-_('lang.ee');
-_('lang.fo');
-_('lang.fi');
-_('lang.fr');
-_('lang.fr_CA');
-_('lang.fr_CH');
-_('lang.ff');
-_('lang.gl');
-_('lang.lg');
-_('lang.ka');
-_('lang.de');
-_('lang.de_AT');
-_('lang.de_CH');
-_('lang.el');
-_('lang.gu');
-_('lang.ht');
-_('lang.ha');
-_('lang.he');
-_('lang.hi');
-_('lang.hu');
-_('lang.is');
-_('lang.ig');
-_('lang.id');
-_('lang.ia');
-_('lang.ga');
-_('lang.it');
-_('lang.ja');
-_('lang.jv');
-_('lang.kl');
-_('lang.kn');
-_('lang.ks');
-_('lang.kk');
-_('lang.km');
-_('lang.ki');
-_('lang.rw');
-_('lang.ko');
-_('lang.ku');
-_('lang.ky');
-_('lang.lo');
-_('lang.la');
-_('lang.lv');
-_('lang.ln');
-_('lang.lt');
-_('lang.lu');
-_('lang.lb');
-_('lang.mk');
-_('lang.mg');
-_('lang.ms');
-_('lang.ml');
-_('lang.mt');
-_('lang.gv');
-_('lang.mi');
-_('lang.mr');
-_('lang.mn');
-_('lang.ne');
-_('lang.nd');
-_('lang.se');
-_('lang.nb');
-_('lang.nn');
-_('lang.ny');
-_('lang.or');
-_('lang.om');
-_('lang.os');
-_('lang.ps');
-_('lang.fa');
-_('lang.fa_AF');
-_('lang.pl');
-_('lang.pt');
-_('lang.pt_BR');
-_('lang.pt_PT');
-_('lang.pa');
-_('lang.qu');
-_('lang.ro');
-_('lang.ro_MD');
-_('lang.rm');
-_('lang.rn');
-_('lang.ru');
-_('lang.sm');
-_('lang.sg');
-_('lang.sa');
-_('lang.gd');
-_('lang.sr');
-_('lang.sn');
-_('lang.ii');
-_('lang.sd');
-_('lang.si');
-_('lang.sk');
-_('lang.sl');
-_('lang.so');
-_('lang.st');
-_('lang.es');
-_('lang.es_ES');
-_('lang.es_MX');
-_('lang.su');
-_('lang.sw');
-_('lang.sw_CD');
-_('lang.sv');
-_('lang.tg');
-_('lang.ta');
-_('lang.tt');
-_('lang.te');
-_('lang.th');
-_('lang.bo');
-_('lang.ti');
-_('lang.to');
-_('lang.tr');
-_('lang.tk');
-_('lang.uk');
-_('lang.ur');
-_('lang.ug');
-_('lang.uz');
-_('lang.vi');
-_('lang.vo');
-_('lang.cy');
-_('lang.fy');
-_('lang.wo');
-_('lang.xh');
-_('lang.yi');
-_('lang.yo');
-_('lang.zu');

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

@@ -46,7 +46,7 @@ export class AppShellComponent implements OnInit {
                 switchMap(currentLanguage =>
                     this.modalService.fromComponent(UiLanguageSwitcherDialogComponent, {
                         closable: true,
-                        size: 'sm',
+                        size: 'md',
                         locals: {
                             availableLanguages: this.availableLanguages,
                             currentLanguage,

+ 1 - 1
packages/admin-ui/src/lib/core/src/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.html

@@ -3,6 +3,6 @@
 <div *ngFor="let code of availableLanguages" >
     <button class="btn btn-link btn-sm" (click)="setLanguage(code)">
         <clr-icon [attr.shape]="code === currentLanguage ? 'dot-circle' : 'circle'"></clr-icon>
-        {{ code | uppercase }} ({{ 'lang.' + code | translate }})
+        {{ code | uppercase }} ({{ code | localeLanguageName }})
     </button>
 </div>

+ 1 - 1
packages/admin-ui/src/lib/core/src/components/user-menu/user-menu.component.html

@@ -15,7 +15,7 @@
                 (click)="selectUiLanguage.emit()"
                 [title]="'common.select-display-language' | translate"
             >
-                <clr-icon shape="language"></clr-icon> {{ 'lang.' + uiLanguage | translate }}
+                <clr-icon shape="language"></clr-icon> {{ uiLanguage | localeLanguageName }}
             </button>
         </ng-container>
         <div class="dropdown-item">

+ 1 - 1
packages/admin-ui/src/lib/core/src/public_api.ts

@@ -11,7 +11,6 @@ export * from './common/detail-breadcrumb';
 export * from './common/generated-types';
 export * from './common/introspection-result-wrapper';
 export * from './common/introspection-result';
-export * from './common/language-translation-strings';
 export * from './common/single-search-selection-model';
 export * from './common/utilities/configurable-operation-utils';
 export * from './common/utilities/create-updated-translatable';
@@ -197,6 +196,7 @@ export * from './shared/pipes/locale-base.pipe';
 export * from './shared/pipes/locale-currency-name.pipe';
 export * from './shared/pipes/locale-currency.pipe';
 export * from './shared/pipes/locale-date.pipe';
+export * from './shared/pipes/locale-language-name.pipe';
 export * from './shared/pipes/sentence-case.pipe';
 export * from './shared/pipes/sort.pipe';
 export * from './shared/pipes/state-i18n-token.pipe';

+ 7 - 1
packages/admin-ui/src/lib/core/src/shared/components/currency-input/currency-input.component.ts

@@ -53,12 +53,18 @@ export class CurrencyInputComponent implements ControlValueAccessor, OnInit, OnC
                     return '';
                 }
                 const locale = languageCode.replace(/_/g, '-');
+                const parts = (new Intl.NumberFormat(locale, {
+                    style: 'currency',
+                    currency: currencyCode,
+                    currencyDisplay: 'symbol',
+                }) as any).formatToParts();
+                const NaNString = parts.find(p => p.type === 'nan')?.value ?? 'NaN';
                 const localised = new Intl.NumberFormat(locale, {
                     style: 'currency',
                     currency: currencyCode,
                     currencyDisplay: 'symbol',
                 }).format(undefined as any);
-                return localised.indexOf('NaN') > 0;
+                return localised.indexOf(NaNString) > 0;
             }),
         );
         this.prefix$ = shouldPrefix$.pipe(map(shouldPrefix => (shouldPrefix ? this.currencyCode : '')));

+ 2 - 2
packages/admin-ui/src/lib/core/src/shared/components/language-selector/language-selector.component.html

@@ -2,7 +2,7 @@
     <vdr-dropdown>
         <button type="button" class="btn btn-sm btn-link" vdrDropdownTrigger [disabled]="disabled">
             <clr-icon shape="world"></clr-icon>
-            {{ 'common.language' | translate }}: {{ 'lang.' + currentLanguageCode | translate | uppercase }}
+            {{ 'common.language' | translate }}: {{ currentLanguageCode | localeLanguageName | uppercase }}
             <clr-icon shape="caret down"></clr-icon>
         </button>
         <vdr-dropdown-menu vdrPosition="bottom-right">
@@ -12,7 +12,7 @@
                 (click)="languageCodeChange.emit(code)"
                 vdrDropdownItem
             >
-                {{ 'lang.' + code | translate }} <span class="code">{{ code }}</span>
+                {{ code | localeLanguageName }} <span class="code">{{ code }}</span>
             </button>
         </vdr-dropdown-menu>
     </vdr-dropdown>

+ 7 - 7
packages/admin-ui/src/lib/core/src/shared/pipes/locale-currency-name.pipe.spec.ts

@@ -3,15 +3,15 @@ import { LocaleCurrencyNamePipe } from './locale-currency-name.pipe';
 describe('LocaleCurrencyNamePipe', () => {
     const pipe = new LocaleCurrencyNamePipe();
     it('full output', () => {
-        expect(pipe.transform('usd')).toBe('US dollars ($)');
-        expect(pipe.transform('gbp')).toBe('British pounds (£)');
-        expect(pipe.transform('CNY')).toBe('Chinese yuan (CN¥)');
+        expect(pipe.transform('usd')).toBe('US Dollar ($)');
+        expect(pipe.transform('gbp')).toBe('British Pound (£)');
+        expect(pipe.transform('CNY')).toBe('Chinese Yuan (CN¥)');
     });
 
     it('name output', () => {
-        expect(pipe.transform('usd', 'name')).toBe('US dollars');
-        expect(pipe.transform('gbp', 'name')).toBe('British pounds');
-        expect(pipe.transform('CNY', 'name')).toBe('Chinese yuan');
+        expect(pipe.transform('usd', 'name')).toBe('US Dollar');
+        expect(pipe.transform('gbp', 'name')).toBe('British Pound');
+        expect(pipe.transform('CNY', 'name')).toBe('Chinese Yuan');
     });
 
     it('symbol output', () => {
@@ -26,7 +26,7 @@ describe('LocaleCurrencyNamePipe', () => {
     });
 
     it('returns code for unknown codes', () => {
-        expect(pipe.transform('zzz')).toBe('ZZZ (ZZZ)');
+        expect(pipe.transform('zzz')).toBe('zzz (ZZZ)');
     });
 
     it('returns empty string for empty input', () => {

+ 10 - 11
packages/admin-ui/src/lib/core/src/shared/pipes/locale-currency-name.pipe.ts

@@ -26,23 +26,22 @@ export class LocaleCurrencyNamePipe extends LocaleBasePipe implements PipeTransf
         let symbol = '';
         const activeLocale = typeof locale === 'string' ? locale : this.locale ?? 'en';
 
+        // Awaiting TS types for this API: https://github.com/microsoft/TypeScript/pull/44022/files
+        const DisplayNames = (Intl as any).DisplayNames;
+
         if (display === 'full' || display === 'name') {
-            name = new Intl.NumberFormat(activeLocale, {
-                style: 'currency',
-                currency: value,
-                currencyDisplay: 'name',
-            })
-                .format(undefined as any)
-                .replace(/\s*NaN\s*/, '');
+            name = new DisplayNames([activeLocale], {
+                type: 'currency',
+            }).of(value);
         }
         if (display === 'full' || display === 'symbol') {
-            symbol = new Intl.NumberFormat(activeLocale, {
+            const parts = (new Intl.NumberFormat(activeLocale, {
                 style: 'currency',
                 currency: value,
                 currencyDisplay: 'symbol',
-            })
-                .format(undefined as any)
-                .replace(/\s*NaN\s*/, '');
+            }) as any).formatToParts();
+
+            symbol = parts.find(p => p.type === 'currency')?.value || value;
         }
         return display === 'full' ? `${name} (${symbol})` : display === 'name' ? name : symbol;
     }

+ 34 - 0
packages/admin-ui/src/lib/core/src/shared/pipes/locale-language-name.pipe.spec.ts

@@ -0,0 +1,34 @@
+import { LocaleLanguageNamePipe } from './locale-language-name.pipe';
+
+describe('LocaleLanguageNamePipe', () => {
+    const pipe = new LocaleLanguageNamePipe();
+    it('returns correct language names for various locales', () => {
+        expect(pipe.transform('en', 'en')).toBe('English');
+        expect(pipe.transform('de', 'en')).toBe('German');
+        expect(pipe.transform('de', 'de')).toBe('Deutsch');
+        expect(pipe.transform('is', 'fr')).toBe('islandais');
+        expect(pipe.transform('es', 'zh_Hans')).toBe('西班牙语');
+        expect(pipe.transform('bs', 'zh_Hant')).toBe('波士尼亞文');
+        expect(pipe.transform('da', 'pt_BR')).toBe('dinamarquês');
+        expect(pipe.transform('zh_Hant', 'en')).toBe('Traditional Chinese');
+    });
+
+    it('returns code for unknown codes', () => {
+        expect(pipe.transform('xx')).toBe('xx');
+    });
+
+    it('returns empty string for empty input', () => {
+        expect(pipe.transform('')).toBe('');
+        expect(pipe.transform(null)).toBe('');
+        expect(pipe.transform(undefined)).toBe('');
+    });
+
+    it('returns warning for invalid input', () => {
+        expect(pipe.transform({} as any)).toBe('Invalid language code "[object Object]"');
+        expect(pipe.transform(false as any)).toBe('Invalid language code "false"');
+    });
+
+    it('returns input value for invalid string input', () => {
+        expect(pipe.transform('foo.bar')).toBe('foo.bar');
+    });
+});

+ 38 - 0
packages/admin-ui/src/lib/core/src/shared/pipes/locale-language-name.pipe.ts

@@ -0,0 +1,38 @@
+import { ChangeDetectorRef, Optional, Pipe, PipeTransform } from '@angular/core';
+
+import { DataService } from '../../data/providers/data.service';
+
+import { LocaleBasePipe } from './locale-base.pipe';
+
+/**
+ * Displays a human-readable name for a given ISO 4217 currency code.
+ */
+@Pipe({
+    name: 'localeLanguageName',
+    pure: false,
+})
+export class LocaleLanguageNamePipe extends LocaleBasePipe implements PipeTransform {
+    constructor(@Optional() dataService?: DataService, @Optional() changeDetectorRef?: ChangeDetectorRef) {
+        super(dataService, changeDetectorRef);
+    }
+    transform(value: any, locale?: unknown): string {
+        if (value == null || value === '') {
+            return '';
+        }
+        if (typeof value !== 'string') {
+            return `Invalid language code "${value as any}"`;
+        }
+        const activeLocale = typeof locale === 'string' ? locale : this.locale ?? 'en';
+
+        // Awaiting TS types for this API: https://github.com/microsoft/TypeScript/pull/44022/files
+        const DisplayNames = (Intl as any).DisplayNames;
+
+        try {
+            return new DisplayNames([activeLocale.replace('_', '-')], { type: 'language' }).of(
+                value.replace('_', '-'),
+            );
+        } catch (e) {
+            return value;
+        }
+    }
+}

+ 2 - 0
packages/admin-ui/src/lib/core/src/shared/shared.module.ts

@@ -113,6 +113,7 @@ import { HasPermissionPipe } from './pipes/has-permission.pipe';
 import { LocaleCurrencyNamePipe } from './pipes/locale-currency-name.pipe';
 import { LocaleCurrencyPipe } from './pipes/locale-currency.pipe';
 import { LocaleDatePipe } from './pipes/locale-date.pipe';
+import { LocaleLanguageNamePipe } from './pipes/locale-language-name.pipe';
 import { SentenceCasePipe } from './pipes/sentence-case.pipe';
 import { SortPipe } from './pipes/sort.pipe';
 import { StateI18nTokenPipe } from './pipes/state-i18n-token.pipe';
@@ -213,6 +214,7 @@ const DECLARATIONS = [
     AddressFormComponent,
     LocaleDatePipe,
     LocaleCurrencyPipe,
+    LocaleLanguageNamePipe,
     TagSelectorComponent,
     ManageTagsDialogComponent,
     RelationSelectorDialogComponent,

+ 1 - 1
packages/admin-ui/src/lib/settings/src/components/channel-detail/channel-detail.component.html

@@ -51,7 +51,7 @@
             [vdrDisabled]="!(updatePermission | hasPermission)"
         >
             <option *ngFor="let languageCode of availableLanguageCodes$ | async" [value]="languageCode">
-                {{ 'lang.' + languageCode | translate }} ({{ languageCode | uppercase }})
+                {{ languageCode | localeLanguageName }} ({{ languageCode | uppercase }})
             </option>
         </select>
     </vdr-form-field>

+ 2 - 2
packages/admin-ui/src/lib/settings/src/components/global-settings/global-settings.component.html

@@ -26,10 +26,10 @@
                 <span class="ng-value-icon left" (click)="clear.call(null, item)" aria-hidden="true">
                     ×
                 </span>
-                <span class="ng-value-label">{{ 'lang.' + item | translate }} ({{ item }})</span>
+                <span class="ng-value-label">{{ item | localeLanguageName }} ({{ item }})</span>
             </ng-template>
             <ng-template ng-option-tmp let-item="item">
-                {{ 'lang.' + item | translate }} ({{ item }})
+                {{ item | localeLanguageName }} ({{ item }})
             </ng-template>
         </ng-select>
     </vdr-form-field>

+ 0 - 159
packages/admin-ui/src/lib/static/i18n-messages/cs.json

@@ -370,165 +370,6 @@
     "no-default-tax-zone-set": "Tento kanál nemá výchozí daňovou zónu, to může způsobovat chyby při výpočtu cen. Prosím vytvořte, nebo vyberte zónu.",
     "product-variant-form-values-do-not-match": "Počet variant ve formuláři neodpovídá aktuálnímu počtu variant"
   },
-  "lang": {
-    "af": "Afrikaans",
-    "ak": "Akan",
-    "am": "Amharic",
-    "ar": "Arabic",
-    "as": "Assamese",
-    "az": "Azerbaijani",
-    "be": "Belarusian",
-    "bg": "Bulgarian",
-    "bm": "Bambara",
-    "bn": "Bangla",
-    "bo": "Tibetan",
-    "br": "Breton",
-    "bs": "Bosnian",
-    "ca": "Catalan",
-    "ce": "Chechen",
-    "co": "Corsican",
-    "cs": "Czech",
-    "cu": "Church Slavic",
-    "cy": "Welsh",
-    "da": "Danish",
-    "de": "German",
-    "de_AT": "Austrian German",
-    "de_CH": "Swiss High German",
-    "dz": "Dzongkha",
-    "ee": "Ewe",
-    "el": "Greek",
-    "en": "English",
-    "en_AU": "Australian English",
-    "en_CA": "Canadian English",
-    "en_GB": "British English",
-    "en_US": "American English",
-    "eo": "Esperanto",
-    "es": "Spanish",
-    "es_ES": "European Spanish",
-    "es_MX": "Mexican Spanish",
-    "et": "Estonian",
-    "eu": "Basque",
-    "fa": "Persian",
-    "fa_AF": "Dari",
-    "ff": "Fulah",
-    "fi": "Finnish",
-    "fo": "Faroese",
-    "fr": "French",
-    "fr_CA": "Canadian French",
-    "fr_CH": "Swiss French",
-    "fy": "Western Frisian",
-    "ga": "Irish",
-    "gd": "Scottish Gaelic",
-    "gl": "Galician",
-    "gu": "Gujarati",
-    "gv": "Manx",
-    "ha": "Hausa",
-    "he": "Hebrew",
-    "hi": "Hindi",
-    "hr": "Croatian",
-    "ht": "Haitian Creole",
-    "hu": "Hungarian",
-    "hy": "Armenian",
-    "ia": "Interlingua",
-    "id": "Indonesian",
-    "ig": "Igbo",
-    "ii": "Sichuan Yi",
-    "is": "Icelandic",
-    "it": "Italian",
-    "ja": "Japanese",
-    "jv": "Javanese",
-    "ka": "Georgian",
-    "ki": "Kikuyu",
-    "kk": "Kazakh",
-    "kl": "Kalaallisut",
-    "km": "Khmer",
-    "kn": "Kannada",
-    "ko": "Korean",
-    "ks": "Kashmiri",
-    "ku": "Kurdish",
-    "kw": "Cornish",
-    "ky": "Kyrgyz",
-    "la": "Latin",
-    "lb": "Luxembourgish",
-    "lg": "Ganda",
-    "ln": "Lingala",
-    "lo": "Lao",
-    "lt": "Lithuanian",
-    "lu": "Luba-Katanga",
-    "lv": "Latvian",
-    "mg": "Malagasy",
-    "mi": "Maori",
-    "mk": "Macedonian",
-    "ml": "Malayalam",
-    "mn": "Mongolian",
-    "mr": "Marathi",
-    "ms": "Malay",
-    "mt": "Maltese",
-    "my": "Burmese",
-    "nb": "Norwegian Bokmål",
-    "nd": "North Ndebele",
-    "ne": "Nepali",
-    "nl": "Dutch",
-    "nl_BE": "Flemish",
-    "nn": "Norwegian Nynorsk",
-    "ny": "Nyanja",
-    "om": "Oromo",
-    "or": "Odia",
-    "os": "Ossetic",
-    "pa": "Punjabi",
-    "pl": "Polish",
-    "ps": "Pashto",
-    "pt": "Portuguese",
-    "pt_BR": "Brazilian Portuguese",
-    "pt_PT": "European Portuguese",
-    "qu": "Quechua",
-    "rm": "Romansh",
-    "rn": "Rundi",
-    "ro": "Romanian",
-    "ro_MD": "Moldavian",
-    "ru": "Russian",
-    "rw": "Kinyarwanda",
-    "sa": "Sanskrit",
-    "sd": "Sindhi",
-    "se": "Northern Sami",
-    "sg": "Sango",
-    "si": "Sinhala",
-    "sk": "Slovak",
-    "sl": "Slovenian",
-    "sm": "Samoan",
-    "sn": "Shona",
-    "so": "Somali",
-    "sq": "Albanian",
-    "sr": "Serbian",
-    "st": "Southern Sotho",
-    "su": "Sundanese",
-    "sv": "Swedish",
-    "sw": "Swahili",
-    "sw_CD": "Congo Swahili",
-    "ta": "Tamil",
-    "te": "Telugu",
-    "tg": "Tajik",
-    "th": "Thai",
-    "ti": "Tigrinya",
-    "tk": "Turkmen",
-    "to": "Tongan",
-    "tr": "Turkish",
-    "tt": "Tatar",
-    "ug": "Uyghur",
-    "uk": "Ukrainian",
-    "ur": "Urdu",
-    "uz": "Uzbek",
-    "vi": "Vietnamese",
-    "vo": "Volapük",
-    "wo": "Wolof",
-    "xh": "Xhosa",
-    "yi": "Yiddish",
-    "yo": "Yoruba",
-    "zh": "Chinese",
-    "zh_Hans": "Simplified Chinese",
-    "zh_Hant": "Traditional Chinese",
-    "zu": "Zulu"
-  },
   "marketing": {
     "actions": "Akce",
     "add-action": "Přidat akci",

+ 0 - 159
packages/admin-ui/src/lib/static/i18n-messages/de.json

@@ -370,165 +370,6 @@
     "no-default-tax-zone-set": "Dieser Kanal verfügt nicht über eine Standard-Steuerzone, was zu Fehlern bei der Preisberechnung führen kann. Bitte erstellen oder wählen Sie eine Zone.",
     "product-variant-form-values-do-not-match": "Die Anzahl der Varianten im Produktformular stimmt nicht mit der tatsächlichen Anzahl der Varianten überein."
   },
-  "lang": {
-    "af": "Afrikaans",
-    "ak": "Akan",
-    "am": "Amharisch",
-    "ar": "Arabisch",
-    "as": "Assamesisch",
-    "az": "Aserbaidschanisch",
-    "be": "Belarussisch",
-    "bg": "Bulgarisch",
-    "bm": "Bambara",
-    "bn": "Bengalisch",
-    "bo": "Tibetisch",
-    "br": "Bretonisch",
-    "bs": "Bosnisch",
-    "ca": "Katalanisch; Valencianisch",
-    "ce": "Tschetschenisch",
-    "co": "Korsisch",
-    "cs": "Tschechisch",
-    "cu": "Kirchenslawisch",
-    "cy": "Walisisch",
-    "da": "Dänisch",
-    "de": "Deutsch",
-    "de_AT": "Deutsch (Österreich)",
-    "de_CH": "Deutsch (Schweiz)",
-    "dz": "Dzongkha",
-    "ee": "Ewe",
-    "el": "Griechisch",
-    "en": "Englisch",
-    "en_AU": "Englisch (Australien)",
-    "en_CA": "Englisch (Kanada)",
-    "en_GB": "Englisch (Großbritannien)",
-    "en_US": "Englisch (USA)",
-    "eo": "Esperanto",
-    "es": "Spanisch",
-    "es_ES": "Spanisch (Spanien)",
-    "es_MX": "Spanisch (Mexiko)",
-    "et": "Estnisch",
-    "eu": "Baskisch",
-    "fa": "Persisch",
-    "fa_AF": "",
-    "ff": "Fulah",
-    "fi": "Finnisch",
-    "fo": "Färöisch",
-    "fr": "Französisch",
-    "fr_CA": "Französisch (Kanada)",
-    "fr_CH": "Französisch (Schweiz)",
-    "fy": "Westfriesisch",
-    "ga": "Irisch",
-    "gd": "Gälisch; Schottisch-Gälisch",
-    "gl": "Galizisch",
-    "gu": "Gujarati",
-    "gv": "Manx",
-    "ha": "Hausa",
-    "he": "Hebräisch",
-    "hi": "Hindi",
-    "hr": "Kroatisch",
-    "ht": "Haitianisch; Haitianisch-Kreolisch",
-    "hu": "Ungarisch",
-    "hy": "Armenisch",
-    "ia": "Interlingua",
-    "id": "Indonesisch",
-    "ig": "Igbo",
-    "ii": "Sichuan Yi; Nuosu",
-    "is": "Isländisch",
-    "it": "Italienisch",
-    "ja": "Japanisch",
-    "jv": "Javanisch",
-    "ka": "Georgisch",
-    "ki": "Kikuyu; Gikuyu",
-    "kk": "Kasachisch",
-    "kl": "Kalaallisut; Grönländisch",
-    "km": "Zentral-Khmer",
-    "kn": "Kannada",
-    "ko": "Koreanisch",
-    "ks": "Kaschmirisch",
-    "ku": "Kurdisch",
-    "kw": "Kornisch",
-    "ky": "Kirgisisch",
-    "la": "Lateinisch",
-    "lb": "Luxemburgisch; Letzeburgesch",
-    "lg": "Ganda",
-    "ln": "Lingala",
-    "lo": "Laotisch",
-    "lt": "Litauisch",
-    "lu": "Luba-Katanga",
-    "lv": "Lettisch",
-    "mg": "Madagassisch",
-    "mi": "Maori",
-    "mk": "Mazedonisch",
-    "ml": "Malayalam",
-    "mn": "Mongolisch",
-    "mr": "Marathi",
-    "ms": "Malaysisch",
-    "mt": "Maltesisch",
-    "my": "Birmanisch",
-    "nb": "Bokmål, Norwegisch; Norwegisch-Bokmål",
-    "nd": "Ndebele, Norden; Nord-Ndebele",
-    "ne": "Nepalisch",
-    "nl": "Niederländisch",
-    "nl_BE": "Flämisch",
-    "nn": "Norwegisch Nynorsk; Nynorsk, Norwegisch",
-    "ny": "Chichewa; Chewa; Nyanja",
-    "om": "Oromo",
-    "or": "Oriya",
-    "os": "Ossetisch",
-    "pa": "Panjabi; Punjabi",
-    "pl": "Polnisch",
-    "ps": "Paschtu",
-    "pt": "Portugiesisch",
-    "pt_BR": "Portugiesisch (Brasilien)",
-    "pt_PT": "Portugiesisch (Portugal)",
-    "qu": "Quechua",
-    "rm": "Rätoromanisch",
-    "rn": "Rundi",
-    "ro": "Rumänisch",
-    "ro_MD": "Moldawisch",
-    "ru": "Russisch",
-    "rw": "Kinyarwanda",
-    "sa": "Sanskrit",
-    "sd": "Sindhi",
-    "se": "Nordsamisch",
-    "sg": "Sango",
-    "si": "Singhalesisch",
-    "sk": "Slowakisch",
-    "sl": "Slowenisch",
-    "sm": "Samoanisch",
-    "sn": "Shona",
-    "so": "Somalisch",
-    "sq": "Albanisch",
-    "sr": "Serbisch",
-    "st": "Sotho, Süden",
-    "su": "Sundanesisch",
-    "sv": "Schwedisch",
-    "sw": "Suaheli",
-    "sw_CD": "Suaheli (Kongo)",
-    "ta": "Tamilisch",
-    "te": "Telugu",
-    "tg": "Tadschikisch",
-    "th": "Thailändisch",
-    "ti": "Tigrinya",
-    "tk": "Turkmenisch",
-    "to": "Tonga (Tonga-Inseln)",
-    "tr": "Türkisch",
-    "tt": "Tatarisch",
-    "ug": "Uigurisch",
-    "uk": "Ukrainisch",
-    "ur": "Urdu",
-    "uz": "Usbekisch",
-    "vi": "Vietnamesisch",
-    "vo": "Volapük",
-    "wo": "Wolof",
-    "xh": "Xhosa",
-    "yi": "Jiddisch",
-    "yo": "Yoruba",
-    "zh": "Chinesisch",
-    "zh_Hans": "Chinesisch (vereinfacht)",
-    "zh_Hant": "Chinesisch (traditionell)",
-    "zu": "Zulu"
-  },
   "marketing": {
     "actions": "Aktionen",
     "add-action": "Aktion hinzufügen",

+ 1 - 160
packages/admin-ui/src/lib/static/i18n-messages/en.json

@@ -370,165 +370,6 @@
     "no-default-tax-zone-set": "This channel has no default tax zone, which will cause errors when calculating prices. Please create or select a zone.",
     "product-variant-form-values-do-not-match": "The number of variants in the product form does not match the actual number of variants"
   },
-  "lang": {
-    "af": "Afrikaans",
-    "ak": "Akan",
-    "am": "Amharic",
-    "ar": "Arabic",
-    "as": "Assamese",
-    "az": "Azerbaijani",
-    "be": "Belarusian",
-    "bg": "Bulgarian",
-    "bm": "Bambara",
-    "bn": "Bangla",
-    "bo": "Tibetan",
-    "br": "Breton",
-    "bs": "Bosnian",
-    "ca": "Catalan",
-    "ce": "Chechen",
-    "co": "Corsican",
-    "cs": "Czech",
-    "cu": "Church Slavic",
-    "cy": "Welsh",
-    "da": "Danish",
-    "de": "German",
-    "de_AT": "Austrian German",
-    "de_CH": "Swiss High German",
-    "dz": "Dzongkha",
-    "ee": "Ewe",
-    "el": "Greek",
-    "en": "English",
-    "en_AU": "Australian English",
-    "en_CA": "Canadian English",
-    "en_GB": "British English",
-    "en_US": "American English",
-    "eo": "Esperanto",
-    "es": "Spanish",
-    "es_ES": "European Spanish",
-    "es_MX": "Mexican Spanish",
-    "et": "Estonian",
-    "eu": "Basque",
-    "fa": "Persian",
-    "fa_AF": "Dari",
-    "ff": "Fulah",
-    "fi": "Finnish",
-    "fo": "Faroese",
-    "fr": "French",
-    "fr_CA": "Canadian French",
-    "fr_CH": "Swiss French",
-    "fy": "Western Frisian",
-    "ga": "Irish",
-    "gd": "Scottish Gaelic",
-    "gl": "Galician",
-    "gu": "Gujarati",
-    "gv": "Manx",
-    "ha": "Hausa",
-    "he": "Hebrew",
-    "hi": "Hindi",
-    "hr": "Croatian",
-    "ht": "Haitian Creole",
-    "hu": "Hungarian",
-    "hy": "Armenian",
-    "ia": "Interlingua",
-    "id": "Indonesian",
-    "ig": "Igbo",
-    "ii": "Sichuan Yi",
-    "is": "Icelandic",
-    "it": "Italian",
-    "ja": "Japanese",
-    "jv": "Javanese",
-    "ka": "Georgian",
-    "ki": "Kikuyu",
-    "kk": "Kazakh",
-    "kl": "Kalaallisut",
-    "km": "Khmer",
-    "kn": "Kannada",
-    "ko": "Korean",
-    "ks": "Kashmiri",
-    "ku": "Kurdish",
-    "kw": "Cornish",
-    "ky": "Kyrgyz",
-    "la": "Latin",
-    "lb": "Luxembourgish",
-    "lg": "Ganda",
-    "ln": "Lingala",
-    "lo": "Lao",
-    "lt": "Lithuanian",
-    "lu": "Luba-Katanga",
-    "lv": "Latvian",
-    "mg": "Malagasy",
-    "mi": "Maori",
-    "mk": "Macedonian",
-    "ml": "Malayalam",
-    "mn": "Mongolian",
-    "mr": "Marathi",
-    "ms": "Malay",
-    "mt": "Maltese",
-    "my": "Burmese",
-    "nb": "Norwegian Bokmål",
-    "nd": "North Ndebele",
-    "ne": "Nepali",
-    "nl": "Dutch",
-    "nl_BE": "Flemish",
-    "nn": "Norwegian Nynorsk",
-    "ny": "Nyanja",
-    "om": "Oromo",
-    "or": "Odia",
-    "os": "Ossetic",
-    "pa": "Punjabi",
-    "pl": "Polish",
-    "ps": "Pashto",
-    "pt": "Portuguese",
-    "pt_BR": "Brazilian Portuguese",
-    "pt_PT": "European Portuguese",
-    "qu": "Quechua",
-    "rm": "Romansh",
-    "rn": "Rundi",
-    "ro": "Romanian",
-    "ro_MD": "Moldavian",
-    "ru": "Russian",
-    "rw": "Kinyarwanda",
-    "sa": "Sanskrit",
-    "sd": "Sindhi",
-    "se": "Northern Sami",
-    "sg": "Sango",
-    "si": "Sinhala",
-    "sk": "Slovak",
-    "sl": "Slovenian",
-    "sm": "Samoan",
-    "sn": "Shona",
-    "so": "Somali",
-    "sq": "Albanian",
-    "sr": "Serbian",
-    "st": "Southern Sotho",
-    "su": "Sundanese",
-    "sv": "Swedish",
-    "sw": "Swahili",
-    "sw_CD": "Congo Swahili",
-    "ta": "Tamil",
-    "te": "Telugu",
-    "tg": "Tajik",
-    "th": "Thai",
-    "ti": "Tigrinya",
-    "tk": "Turkmen",
-    "to": "Tongan",
-    "tr": "Turkish",
-    "tt": "Tatar",
-    "ug": "Uyghur",
-    "uk": "Ukrainian",
-    "ur": "Urdu",
-    "uz": "Uzbek",
-    "vi": "Vietnamese",
-    "vo": "Volapük",
-    "wo": "Wolof",
-    "xh": "Xhosa",
-    "yi": "Yiddish",
-    "yo": "Yoruba",
-    "zh": "Chinese",
-    "zh_Hans": "Simplified Chinese",
-    "zh_Hant": "Traditional Chinese",
-    "zu": "Zulu"
-  },
   "marketing": {
     "actions": "Actions",
     "add-action": "Add action",
@@ -811,4 +652,4 @@
     "job-result": "Job result",
     "job-state": "Job state"
   }
-}
+}

+ 0 - 159
packages/admin-ui/src/lib/static/i18n-messages/es.json

@@ -370,165 +370,6 @@
     "no-default-tax-zone-set": "",
     "product-variant-form-values-do-not-match": ""
   },
-  "lang": {
-    "af": "Afrikaans",
-    "ak": "Akan",
-    "am": "Amharic",
-    "ar": "Arabic",
-    "as": "Assamese",
-    "az": "Azerbaijani",
-    "be": "Belarusian",
-    "bg": "Bulgarian",
-    "bm": "Bambara",
-    "bn": "Bengali",
-    "bo": "Tibetan",
-    "br": "Breton",
-    "bs": "Bosnian",
-    "ca": "Catalan; Valencian",
-    "ce": "Chechen",
-    "co": "Corsican",
-    "cs": "Checo",
-    "cu": "Church Slavic",
-    "cy": "Welsh",
-    "da": "Danish",
-    "de": "Alemán",
-    "de_AT": "",
-    "de_CH": "",
-    "dz": "Dzongkha",
-    "ee": "Ewe",
-    "el": "Greek, Modern (1453-)",
-    "en": "Inglés",
-    "en_AU": "",
-    "en_CA": "",
-    "en_GB": "",
-    "en_US": "",
-    "eo": "Esperanto",
-    "es": "Español",
-    "es_ES": "",
-    "es_MX": "",
-    "et": "Estonian",
-    "eu": "Basque",
-    "fa": "Persian",
-    "fa_AF": "",
-    "ff": "Fulah",
-    "fi": "Finnish",
-    "fo": "Faroese",
-    "fr": "Francés",
-    "fr_CA": "",
-    "fr_CH": "",
-    "fy": "Western Frisian",
-    "ga": "Irish",
-    "gd": "Gaelic; Scottish Gaelic",
-    "gl": "Galician",
-    "gu": "Gujarati",
-    "gv": "Manx",
-    "ha": "Hausa",
-    "he": "Hebrew",
-    "hi": "Hindi",
-    "hr": "Croatian",
-    "ht": "Haitian; Haitian Creole",
-    "hu": "Hungarian",
-    "hy": "Armenian",
-    "ia": "Interlingua",
-    "id": "Indonesian",
-    "ig": "Igbo",
-    "ii": "Sichuan Yi; Nuosu",
-    "is": "Icelandic",
-    "it": "Italian",
-    "ja": "Japanese",
-    "jv": "Javanese",
-    "ka": "Georgian",
-    "ki": "Kikuyu; Gikuyu",
-    "kk": "Kazakh",
-    "kl": "Kalaallisut; Greenlandic",
-    "km": "Central Khmer",
-    "kn": "Kannada",
-    "ko": "Korean",
-    "ks": "Kashmiri",
-    "ku": "Kurdish",
-    "kw": "Cornish",
-    "ky": "Kirghiz; Kyrgyz",
-    "la": "Latin",
-    "lb": "Luxembourgish; Letzeburgesch",
-    "lg": "Ganda",
-    "ln": "Lingala",
-    "lo": "Lao",
-    "lt": "Lithuanian",
-    "lu": "Luba-Katanga",
-    "lv": "Latvian",
-    "mg": "Malagasy",
-    "mi": "Maori",
-    "mk": "Macedonian",
-    "ml": "Malayalam",
-    "mn": "Mongolian",
-    "mr": "Marathi",
-    "ms": "Malay",
-    "mt": "Maltese",
-    "my": "Burmese",
-    "nb": "Bokmål, Norwegian; Norwegian Bokmål",
-    "nd": "Ndebele, North; North Ndebele",
-    "ne": "Nepali",
-    "nl": "Dutch; Flemish",
-    "nl_BE": "",
-    "nn": "Norwegian Nynorsk; Nynorsk, Norwegian",
-    "ny": "Chichewa; Chewa; Nyanja",
-    "om": "Oromo",
-    "or": "Oriya",
-    "os": "Ossetian; Ossetic",
-    "pa": "Panjabi; Punjabi",
-    "pl": "Polaco",
-    "ps": "Pushto; Pashto",
-    "pt": "Portuguese",
-    "pt_BR": "Portugués - Brasil",
-    "pt_PT": "",
-    "qu": "Quechua",
-    "rm": "Romansh",
-    "rn": "Rundi",
-    "ro": "Romanian; Moldavian; Moldovan",
-    "ro_MD": "",
-    "ru": "Russian",
-    "rw": "Kinyarwanda",
-    "sa": "Sanskrit",
-    "sd": "Sindhi",
-    "se": "Northern Sami",
-    "sg": "Sango",
-    "si": "Sinhala; Sinhalese",
-    "sk": "Slovak",
-    "sl": "Slovenian",
-    "sm": "Samoan",
-    "sn": "Shona",
-    "so": "Somali",
-    "sq": "Albanian",
-    "sr": "Serbian",
-    "st": "Sotho, Southern",
-    "su": "Sundanese",
-    "sv": "Swedish",
-    "sw": "Swahili",
-    "sw_CD": "",
-    "ta": "Tamil",
-    "te": "Telugu",
-    "tg": "Tajik",
-    "th": "Thai",
-    "ti": "Tigrinya",
-    "tk": "Turkmen",
-    "to": "Tonga (Tonga Islands)",
-    "tr": "Turkish",
-    "tt": "Tatar",
-    "ug": "Uighur; Uyghur",
-    "uk": "Ukrainian",
-    "ur": "Urdu",
-    "uz": "Uzbek",
-    "vi": "Vietnamese",
-    "vo": "Volapük",
-    "wo": "Wolof",
-    "xh": "Xhosa",
-    "yi": "Yiddish",
-    "yo": "Yoruba",
-    "zh": "Chinese",
-    "zh_Hans": "Chino simplificado",
-    "zh_Hant": "Chino tradicional",
-    "zu": "Zulu"
-  },
   "marketing": {
     "actions": "Acciones",
     "add-action": "Añadir acción",

+ 0 - 159
packages/admin-ui/src/lib/static/i18n-messages/fr.json

@@ -370,165 +370,6 @@
     "no-default-tax-zone-set": "Ce canal n'a pas de zone de taxe par défaut, ce qui peut causer des erreur lors du calcul du prix. Créez ou choisissez une zone.",
     "product-variant-form-values-do-not-match": "Le nombre de variante dans le formulaire du produit ne correspond pas au nombre actuel de variante."
   },
-  "lang": {
-    "af": "Afrikaans",
-    "ak": "Akan",
-    "am": "Amharique",
-    "ar": "Arabe",
-    "as": "Assamais",
-    "az": "Azéri",
-    "be": "Biélorusse",
-    "bg": "Bulgare",
-    "bm": "Bambara",
-    "bn": "Bengali",
-    "bo": "Tibétain",
-    "br": "Breton",
-    "bs": "Bosnien",
-    "ca": "Catalan",
-    "ce": "Tchétchène",
-    "co": "Corse",
-    "cs": "Tchèque",
-    "cu": "Vieux-slave",
-    "cy": "Gallois",
-    "da": "Danois",
-    "de": "Allemand",
-    "de_AT": "Allemand Autrichien",
-    "de_CH": "Allemand Suisse",
-    "dz": "Dzongkha",
-    "ee": "Ewe",
-    "el": "Grec moderne",
-    "en": "English",
-    "en_AU": "Anglais (Australie)",
-    "en_CA": "Anglais (Canada)",
-    "en_GB": "Anglais (Angleterre)",
-    "en_US": "Anglais (Etats Unis d'Amérique)",
-    "eo": "Espéranto",
-    "es": "Espagnol",
-    "es_ES": "Espagnol (Espagne)",
-    "es_MX": "Espagnol (Mexique)",
-    "et": "Estonien",
-    "eu": "Basque",
-    "fa": "Persan",
-    "fa_AF": "Persan (Afghanistan)",
-    "ff": "Peul",
-    "fi": "Finnois",
-    "fo": "Féroïen",
-    "fr": "Français",
-    "fr_CA": "Français (Canada)",
-    "fr_CH": "Français (Suisse)",
-    "fy": "Frison occidental",
-    "ga": "Irlandais",
-    "gd": "Écossais",
-    "gl": "Galicien",
-    "gu": "Gujarati",
-    "gv": "Mannois",
-    "ha": "Haoussa",
-    "he": "Hébreu",
-    "hi": "Hindi",
-    "hr": "Croate",
-    "ht": "Créole haïtien",
-    "hu": "Hongrois",
-    "hy": "Arménien",
-    "ia": "Interlingua",
-    "id": "Indonésien",
-    "ig": "Igbo",
-    "ii": "Yi",
-    "is": "Islandais",
-    "it": "Italien",
-    "ja": "Japonais",
-    "jv": "Javanais",
-    "ka": "Géorgien",
-    "ki": "Kikuyu",
-    "kk": "Kazakh",
-    "kl": "Groenlandais",
-    "km": "Khmer",
-    "kn": "Kannada",
-    "ko": "Coréen",
-    "ks": "Cachemiri",
-    "ku": "Kurde",
-    "kw": "Cornique",
-    "ky": "Kirghiz",
-    "la": "Latin",
-    "lb": "Luxembourgeois",
-    "lg": "Ganda",
-    "ln": "Lingala",
-    "lo": "Lao",
-    "lt": "Lituanien",
-    "lu": "Luba",
-    "lv": "Letton",
-    "mg": "Malgache",
-    "mi": "Maori de Nouvelle-Zélande",
-    "mk": "Macédonien",
-    "ml": "Malayalam",
-    "mn": "Mongol",
-    "mr": "Marathi",
-    "ms": "Malais",
-    "mt": "Maltais",
-    "my": "Birman",
-    "nb": "Norvégien Bokmål",
-    "nd": "Sindebele",
-    "ne": "Népalais",
-    "nl": "Néerlandais",
-    "nl_BE": "Néerlandais (Belgique)",
-    "nn": "Norvégien Nynorsk",
-    "ny": "Chichewa",
-    "om": "Oromo",
-    "or": "Oriya",
-    "os": "Ossète",
-    "pa": "Pendjabi",
-    "pl": "Polonais",
-    "ps": "Pachto",
-    "pt": "Portugais",
-    "pt_BR": "Portugais (Brésil)",
-    "pt_PT": "Portugais (Portugal)",
-    "qu": "Quechua",
-    "rm": "Romanche",
-    "rn": "Kirundi",
-    "ro": "Roumain",
-    "ro_MD": "Roumain (Moldavie)",
-    "ru": "Russe",
-    "rw": "Kinyarwanda",
-    "sa": "Sanskrit",
-    "sd": "Sindhi",
-    "se": "Same du Nord",
-    "sg": "Sango",
-    "si": "Cingalais",
-    "sk": "Slovaque",
-    "sl": "Slovène",
-    "sm": "Samoan",
-    "sn": "Shona",
-    "so": "Somali",
-    "sq": "Albanais",
-    "sr": "Serbe",
-    "st": "Sotho du Sud",
-    "su": "Soundanais",
-    "sv": "Suédois",
-    "sw": "Swahili",
-    "sw_CD": "Swahili (Congo-Kinshasa)",
-    "ta": "Tamoul",
-    "te": "Télougou",
-    "tg": "Tadjik",
-    "th": "Thaï",
-    "ti": "Tigrigna",
-    "tk": "Turkmène",
-    "to": "Tongien",
-    "tr": "Turc",
-    "tt": "Tatar",
-    "ug": "Ouïghour",
-    "uk": "Ukrainien",
-    "ur": "Ourdou",
-    "uz": "Ouzbek",
-    "vi": "Vietnamien",
-    "vo": "Volapük",
-    "wo": "Wolof",
-    "xh": "Xhosa",
-    "yi": "Yiddish",
-    "yo": "Yoruba",
-    "zh": "Chinois",
-    "zh_Hans": "Chinois (simplifié)",
-    "zh_Hant": "Chinois (traditionnel)",
-    "zu": "Zoulou"
-  },
   "marketing": {
     "actions": "Actions",
     "add-action": "Ajouter action",

+ 0 - 159
packages/admin-ui/src/lib/static/i18n-messages/pl.json

@@ -370,165 +370,6 @@
     "no-default-tax-zone-set": "",
     "product-variant-form-values-do-not-match": "Ilość opcji w formularzu nie zgadza się z realną liczbą opcji."
   },
-  "lang": {
-    "af": "Afrikaans",
-    "ak": "Akan",
-    "am": "Amharic",
-    "ar": "Arabic",
-    "as": "Assamese",
-    "az": "Azerbaijani",
-    "be": "Belarusian",
-    "bg": "Bulgarian",
-    "bm": "Bambara",
-    "bn": "Bengali",
-    "bo": "Tibetan",
-    "br": "Breton",
-    "bs": "Bosnian",
-    "ca": "Catalan; Valencian",
-    "ce": "Chechen",
-    "co": "Corsican",
-    "cs": "Czech",
-    "cu": "Church Slavic",
-    "cy": "Welsh",
-    "da": "Danish",
-    "de": "German",
-    "de_AT": "",
-    "de_CH": "",
-    "dz": "Dzongkha",
-    "ee": "Ewe",
-    "el": "Greek, Modern (1453-)",
-    "en": "English",
-    "en_AU": "",
-    "en_CA": "",
-    "en_GB": "",
-    "en_US": "",
-    "eo": "Esperanto",
-    "es": "Spanish; Castilian",
-    "es_ES": "",
-    "es_MX": "",
-    "et": "Estonian",
-    "eu": "Basque",
-    "fa": "Persian",
-    "fa_AF": "",
-    "ff": "Fulah",
-    "fi": "Finnish",
-    "fo": "Faroese",
-    "fr": "French",
-    "fr_CA": "",
-    "fr_CH": "",
-    "fy": "Western Frisian",
-    "ga": "Irish",
-    "gd": "Gaelic; Scottish Gaelic",
-    "gl": "Galician",
-    "gu": "Gujarati",
-    "gv": "Manx",
-    "ha": "Hausa",
-    "he": "Hebrew",
-    "hi": "Hindi",
-    "hr": "Croatian",
-    "ht": "Haitian; Haitian Creole",
-    "hu": "Hungarian",
-    "hy": "Armenian",
-    "ia": "Interlingua",
-    "id": "Indonesian",
-    "ig": "Igbo",
-    "ii": "Sichuan Yi; Nuosu",
-    "is": "Icelandic",
-    "it": "Italian",
-    "ja": "Japanese",
-    "jv": "Javanese",
-    "ka": "Georgian",
-    "ki": "Kikuyu; Gikuyu",
-    "kk": "Kazakh",
-    "kl": "Kalaallisut; Greenlandic",
-    "km": "Central Khmer",
-    "kn": "Kannada",
-    "ko": "Korean",
-    "ks": "Kashmiri",
-    "ku": "Kurdish",
-    "kw": "Cornish",
-    "ky": "Kirghiz; Kyrgyz",
-    "la": "Latin",
-    "lb": "Luxembourgish; Letzeburgesch",
-    "lg": "Ganda",
-    "ln": "Lingala",
-    "lo": "Lao",
-    "lt": "Lithuanian",
-    "lu": "Luba-Katanga",
-    "lv": "Latvian",
-    "mg": "Malagasy",
-    "mi": "Maori",
-    "mk": "Macedonian",
-    "ml": "Malayalam",
-    "mn": "Mongolian",
-    "mr": "Marathi",
-    "ms": "Malay",
-    "mt": "Maltese",
-    "my": "Burmese",
-    "nb": "Bokmål, Norwegian; Norwegian Bokmål",
-    "nd": "Ndebele, North; North Ndebele",
-    "ne": "Nepali",
-    "nl": "Dutch; Flemish",
-    "nl_BE": "",
-    "nn": "Norwegian Nynorsk; Nynorsk, Norwegian",
-    "ny": "Chichewa; Chewa; Nyanja",
-    "om": "Oromo",
-    "or": "Oriya",
-    "os": "Ossetian; Ossetic",
-    "pa": "Panjabi; Punjabi",
-    "pl": "Polish",
-    "ps": "Pushto; Pashto",
-    "pt": "Portuguese",
-    "pt_BR": "",
-    "pt_PT": "",
-    "qu": "Quechua",
-    "rm": "Romansh",
-    "rn": "Rundi",
-    "ro": "Romanian; Moldavian; Moldovan",
-    "ro_MD": "",
-    "ru": "Russian",
-    "rw": "Kinyarwanda",
-    "sa": "Sanskrit",
-    "sd": "Sindhi",
-    "se": "Northern Sami",
-    "sg": "Sango",
-    "si": "Sinhala; Sinhalese",
-    "sk": "Slovak",
-    "sl": "Slovenian",
-    "sm": "Samoan",
-    "sn": "Shona",
-    "so": "Somali",
-    "sq": "Albanian",
-    "sr": "Serbian",
-    "st": "Sotho, Southern",
-    "su": "Sundanese",
-    "sv": "Swedish",
-    "sw": "Swahili",
-    "sw_CD": "",
-    "ta": "Tamil",
-    "te": "Telugu",
-    "tg": "Tajik",
-    "th": "Thai",
-    "ti": "Tigrinya",
-    "tk": "Turkmen",
-    "to": "Tonga (Tonga Islands)",
-    "tr": "Turkish",
-    "tt": "Tatar",
-    "ug": "Uighur; Uyghur",
-    "uk": "Ukrainian",
-    "ur": "Urdu",
-    "uz": "Uzbek",
-    "vi": "Vietnamese",
-    "vo": "Volapük",
-    "wo": "Wolof",
-    "xh": "Xhosa",
-    "yi": "Yiddish",
-    "yo": "Yoruba",
-    "zh": "Chinese",
-    "zh_Hans": "",
-    "zh_Hant": "",
-    "zu": "Zulu"
-  },
   "marketing": {
     "actions": "Akcje",
     "add-action": "Dodaj akcje",

+ 0 - 159
packages/admin-ui/src/lib/static/i18n-messages/pt_BR.json

@@ -370,165 +370,6 @@
     "no-default-tax-zone-set": "Este canal não possui zona de imposto padrão, o que causará erros no cálculo de preços. Por favor, crie ou selecione uma zona.",
     "product-variant-form-values-do-not-match": "O número de variações no formulário do produto não corresponde ao número real de variações"
   },
-  "lang": {
-    "af": "Africâner",
-    "ak": "Acãs",
-    "am": "Amárica",
-    "ar": "Árabe",
-    "as": "Assamês",
-    "az": "Azeri",
-    "be": "Bielorussa",
-    "bg": "Búlgara",
-    "bm": "Bambara",
-    "bn": "Bengali",
-    "bo": "Tibetano",
-    "br": "Bretã",
-    "bs": "Bósnia",
-    "ca": "Catalão",
-    "ce": "Chechena",
-    "co": "Corso",
-    "cs": "Tcheco",
-    "cu": "Eslavo Eclesiástico",
-    "cy": "Galês",
-    "da": "Dinamarquês",
-    "de": "Alemão",
-    "de_AT": "Alemão Austríaco",
-    "de_CH": "Alemão Alto Suíço",
-    "dz": "Butanesa",
-    "ee": "Ewe",
-    "el": "Grego",
-    "en": "Inglês",
-    "en_AU": "Inglês Australiano",
-    "en_CA": "Inglês Canadense",
-    "en_GB": "Inglês Britânic",
-    "en_US": "Inglês Americano",
-    "eo": "Esperanto",
-    "es": "Espanhol",
-    "es_ES": "Espanhol Europeu",
-    "es_MX": "Espanhol Mexicano",
-    "et": "Estoniano",
-    "eu": "Basco",
-    "fa": "Persa",
-    "fa_AF": "Persa Afegão",
-    "ff": "Fula",
-    "fi": "Filandesa",
-    "fo": "Faroesa",
-    "fr": "Francês",
-    "fr_CA": "Francês Canadense",
-    "fr_CH": "Francês Suíço",
-    "fy": "Frísio Ocidenal",
-    "ga": "Irlandesa",
-    "gd": "Gaélica Escocesa",
-    "gl": "Galega",
-    "gu": "Guzerate",
-    "gv": "Manês",
-    "ha": "Hauçá",
-    "he": "Hebraico",
-    "hi": "Hindú",
-    "hr": "Croata",
-    "ht": "Crioula Haitiana",
-    "hu": "Húngaro",
-    "hy": "Armênio",
-    "ia": "Interlíngua",
-    "id": "Indonésio",
-    "ig": "Igbo",
-    "ii": "Nuoso",
-    "is": "Islandês",
-    "it": "Italiano",
-    "ja": "Japanesa",
-    "jv": "Javanês",
-    "ka": "Georgiano",
-    "ki": "Quicuio",
-    "kk": "Cazaque",
-    "kl": "Groenlandês",
-    "km": "Khmer",
-    "kn": "Canarim",
-    "ko": "Coreano",
-    "ks": "Caxemira",
-    "ku": "Curda",
-    "kw": "Córnico",
-    "ky": "Quirguiz",
-    "la": "Latino",
-    "lb": "Luxemburguês",
-    "lg": "Ganda",
-    "ln": "Lingala",
-    "lo": "Lao",
-    "lt": "Kituano",
-    "lu": "Luba-Katanga",
-    "lv": "Letão",
-    "mg": "Malgaxe",
-    "mi": "Maori",
-    "mk": "Nacedônio",
-    "ml": "Malayalam",
-    "mn": "Mongol",
-    "mr": "Marathi",
-    "ms": "Malaio",
-    "mt": "Maltês",
-    "my": "",
-    "nb": "Bokmål Norueguês",
-    "nd": "North Ndebele",
-    "ne": "Nepali",
-    "nl": "Holandês",
-    "nl_BE": "Flamengo",
-    "nn": "Novo Norueguês",
-    "ny": "Nianja",
-    "om": "Oromo",
-    "or": "Odia",
-    "os": "Ossético",
-    "pa": "Punjabi",
-    "pl": "Polonês",
-    "ps": "Pachto",
-    "pt": "Português",
-    "pt_BR": "Português Brasileiro",
-    "pt_PT": "Português Europeu",
-    "qu": "Quechua",
-    "rm": "Romanche",
-    "rn": "Rundi",
-    "ro": "Romena",
-    "ro_MD": "Romeno Moldava",
-    "ru": "Russo",
-    "rw": "Quiniaruanda",
-    "sa": "Sânscrito",
-    "sd": "Sindi",
-    "se": "Lapônico",
-    "sg": "Sango",
-    "si": "Cingalês",
-    "sk": "Eslovaco",
-    "sl": "Esloveno",
-    "sm": "Samoa",
-    "sn": "Xona",
-    "so": "Somali",
-    "sq": "Albano",
-    "sr": "Sérvia",
-    "st": "Sesoto",
-    "su": "Sundanês",
-    "sv": "Sueco",
-    "sw": "Suaíli",
-    "sw_CD": "Suaíli Congo",
-    "ta": "Tâmil",
-    "te": "Telugo",
-    "tg": "Tajiques",
-    "th": "Tailandês",
-    "ti": "Tigrinha",
-    "tk": "Turcomenos",
-    "to": "Tonganês",
-    "tr": "Turca",
-    "tt": "Tatar",
-    "ug": "Uigur",
-    "uk": "Ucraniano",
-    "ur": "Urdu",
-    "uz": "Uzbeque",
-    "vi": "Vietnamita",
-    "vo": "Volapük",
-    "wo": "Wolof",
-    "xh": "Xhosa",
-    "yi": "Iídiche",
-    "yo": "Iorubá",
-    "zh": "Chinês",
-    "zh_Hans": "Chinês Simplificado",
-    "zh_Hant": "Chinês Tradicional",
-    "zu": "Zulu"
-  },
   "marketing": {
     "actions": "Ações",
     "add-action": "Adicionar ação",

+ 18 - 177
packages/admin-ui/src/lib/static/i18n-messages/ru.json

@@ -44,7 +44,7 @@
     "profile": "Профиль",
     "promotions": "Акции",
     "roles": "Роли",
-    "shipping-methods": "Методы доставки",
+    "shipping-methods": "Способы доставки",
     "system-status": "Состояние системы",
     "tax-categories": "Категории налогов",
     "tax-rates": "Налоговые ставки",
@@ -76,10 +76,10 @@
     "confirm-delete-product": "Удалить товар?",
     "confirm-delete-product-variant": "Удалить вариант товара?",
     "confirm-delete-promotion": "Удалить промо-акцию?",
-    "confirm-delete-shipping-method": "Удалить метод доставки?",
+    "confirm-delete-shipping-method": "Удалить способ доставки?",
     "confirm-delete-zone": "Удалить зону?",
-    "confirm-deletion-of-unused-variants-body": "",
-    "confirm-deletion-of-unused-variants-title": "",
+    "confirm-deletion-of-unused-variants-body": "Следующие варианты товаров устарели из за добавления новых опций. Они будут удалены во время создания новых вариантов товара.",
+    "confirm-deletion-of-unused-variants-title": "Удалить устаревшие варианты товара?",
     "create-new-collection": "Создать новую коллекцию",
     "create-new-facet": "Создать новый тег",
     "create-new-product": "Создать новый товар",
@@ -88,7 +88,7 @@
     "display-variant-cards": "Просмотр карточек вариантов",
     "display-variant-table": "Просмотр в виде таблицы",
     "drop-files-to-upload": "Перетащите файлы для загрузки",
-    "duplicate-sku-warning": "",
+    "duplicate-sku-warning": "Убедитесь, что все артикулы (SKU) уникальны",
     "expand-all-collections": "Развернуть все коллекции",
     "facet-values": "Значения тега",
     "filter-by-name": "Фильтр по имени",
@@ -169,7 +169,7 @@
     "change-selection": "Изменить выбор",
     "channel": "Канал",
     "channels": "Каналы",
-    "close": "",
+    "close": "Закрыть",
     "code": "Код",
     "collapse-entries": "Свернуть записи",
     "confirm": "Подтверждать",
@@ -366,169 +366,10 @@
     "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": "В этом канале нет налоговой зоны по умолчанию, что приведет к ошибкам при расчете цен. Пожалуйста, создайте или выберите зону.",
+    "no-default-shipping-zone-set": "Этот канал не имеет зоны доставки по умолчанию. Это может вызвать ошибки при расчете стоимости доставки заказа.",
+    "no-default-tax-zone-set": "Этот канал не имеет налоговой зоны по умолчанию, что приведет к ошибкам при расчете цен. Пожалуйста, создайте или выберите зону.",
     "product-variant-form-values-do-not-match": "Количество вариантов в форме товара не соответствует фактическому количеству вариантов"
   },
-  "lang": {
-    "af": "Afrikaans",
-    "ak": "Akan",
-    "am": "Amharic",
-    "ar": "Arabic",
-    "as": "Assamese",
-    "az": "Azerbaijani",
-    "be": "Belarusian",
-    "bg": "Bulgarian",
-    "bm": "Bambara",
-    "bn": "Bangla",
-    "bo": "Tibetan",
-    "br": "Breton",
-    "bs": "Bosnian",
-    "ca": "Catalan",
-    "ce": "Chechen",
-    "co": "Corsican",
-    "cs": "Czech",
-    "cu": "Church Slavic",
-    "cy": "Welsh",
-    "da": "Danish",
-    "de": "German",
-    "de_AT": "Austrian German",
-    "de_CH": "Swiss High German",
-    "dz": "Dzongkha",
-    "ee": "Ewe",
-    "el": "Greek",
-    "en": "English",
-    "en_AU": "Australian English",
-    "en_CA": "Canadian English",
-    "en_GB": "British English",
-    "en_US": "American English",
-    "eo": "Esperanto",
-    "es": "Spanish",
-    "es_ES": "European Spanish",
-    "es_MX": "Mexican Spanish",
-    "et": "Estonian",
-    "eu": "Basque",
-    "fa": "Persian",
-    "fa_AF": "Dari",
-    "ff": "Fulah",
-    "fi": "Finnish",
-    "fo": "Faroese",
-    "fr": "French",
-    "fr_CA": "Canadian French",
-    "fr_CH": "Swiss French",
-    "fy": "Western Frisian",
-    "ga": "Irish",
-    "gd": "Scottish Gaelic",
-    "gl": "Galician",
-    "gu": "Gujarati",
-    "gv": "Manx",
-    "ha": "Hausa",
-    "he": "Hebrew",
-    "hi": "Hindi",
-    "hr": "Croatian",
-    "ht": "Haitian Creole",
-    "hu": "Hungarian",
-    "hy": "Armenian",
-    "ia": "Interlingua",
-    "id": "Indonesian",
-    "ig": "Igbo",
-    "ii": "Sichuan Yi",
-    "is": "Icelandic",
-    "it": "Italian",
-    "ja": "Japanese",
-    "jv": "Javanese",
-    "ka": "Georgian",
-    "ki": "Kikuyu",
-    "kk": "Kazakh",
-    "kl": "Kalaallisut",
-    "km": "Khmer",
-    "kn": "Kannada",
-    "ko": "Korean",
-    "ks": "Kashmiri",
-    "ku": "Kurdish",
-    "kw": "Cornish",
-    "ky": "Kyrgyz",
-    "la": "Latin",
-    "lb": "Luxembourgish",
-    "lg": "Ganda",
-    "ln": "Lingala",
-    "lo": "Lao",
-    "lt": "Lithuanian",
-    "lu": "Luba-Katanga",
-    "lv": "Latvian",
-    "mg": "Malagasy",
-    "mi": "Maori",
-    "mk": "Macedonian",
-    "ml": "Malayalam",
-    "mn": "Mongolian",
-    "mr": "Marathi",
-    "ms": "Malay",
-    "mt": "Maltese",
-    "my": "Burmese",
-    "nb": "Norwegian Bokmål",
-    "nd": "North Ndebele",
-    "ne": "Nepali",
-    "nl": "Dutch",
-    "nl_BE": "Flemish",
-    "nn": "Norwegian Nynorsk",
-    "ny": "Nyanja",
-    "om": "Oromo",
-    "or": "Odia",
-    "os": "Ossetic",
-    "pa": "Punjabi",
-    "pl": "Polish",
-    "ps": "Pashto",
-    "pt": "Portuguese",
-    "pt_BR": "Brazilian Portuguese",
-    "pt_PT": "European Portuguese",
-    "qu": "Quechua",
-    "rm": "Romansh",
-    "rn": "Rundi",
-    "ro": "Romanian",
-    "ro_MD": "Moldavian",
-    "ru": "Русский",
-    "rw": "Kinyarwanda",
-    "sa": "Sanskrit",
-    "sd": "Sindhi",
-    "se": "Northern Sami",
-    "sg": "Sango",
-    "si": "Sinhala",
-    "sk": "Slovak",
-    "sl": "Slovenian",
-    "sm": "Samoan",
-    "sn": "Shona",
-    "so": "Somali",
-    "sq": "Albanian",
-    "sr": "Serbian",
-    "st": "Southern Sotho",
-    "su": "Sundanese",
-    "sv": "Swedish",
-    "sw": "Swahili",
-    "sw_CD": "Congo Swahili",
-    "ta": "Tamil",
-    "te": "Telugu",
-    "tg": "Tajik",
-    "th": "Thai",
-    "ti": "Tigrinya",
-    "tk": "Turkmen",
-    "to": "Tongan",
-    "tr": "Turkish",
-    "tt": "Tatar",
-    "ug": "Uyghur",
-    "uk": "Українська",
-    "ur": "Urdu",
-    "uz": "Uzbek",
-    "vi": "Vietnamese",
-    "vo": "Volapük",
-    "wo": "Wolof",
-    "xh": "Xhosa",
-    "yi": "Yiddish",
-    "yo": "Yoruba",
-    "zh": "Chinese",
-    "zh_Hans": "Simplified Chinese",
-    "zh_Hant": "Traditional Chinese",
-    "zu": "Zulu"
-  },
   "marketing": {
     "actions": "Действия",
     "add-action": "Добавить действие",
@@ -562,7 +403,7 @@
     "roles": "Роли",
     "sales": "Продажи",
     "settings": "Настройки",
-    "shipping-methods": "Методы доставки",
+    "shipping-methods": "Способы доставки",
     "system": "Система",
     "system-status": "Состояние системы",
     "tax-categories": "Категории налогов",
@@ -620,7 +461,7 @@
     "history-order-fulfilled": "Заказ выполнен",
     "history-order-modified": "Заказ изменен",
     "history-order-transition": "Заказ перешел из {from} в {to}",
-    "history-payment-settled": "Оплата произведена",
+    "history-payment-settled": "Оплата проведена",
     "history-payment-transition": "Платеж #{id} перенесен с {from} на {to}",
     "history-refund-transition": "Возврат #{id} перешел из {from} на {to}",
     "item-count": "{count} {count, plural, one {позиция} other {позиций}}",
@@ -686,8 +527,8 @@
     "select-state": "Выберите состояние",
     "set-fulfillment-state": "Отметить как {state}",
     "settle-payment": "Расчет платежа",
-    "settle-payment-error": "Не удалось произвести оплату",
-    "settle-payment-success": "Успешно произведенный платеж",
+    "settle-payment-error": "Не удалось провести оплату",
+    "settle-payment-success": "Успешно проведенный платеж",
     "settle-refund": "Возврат платежа",
     "settle-refund-manual-instructions": "После ручного возмещения через вашего платежного провайдера ({method}), введите здесь идентификатор транзакции.",
     "settle-refund-success": "Возврат успешно осуществлен",
@@ -733,7 +574,7 @@
     "create-new-zone": "Создать новую зону",
     "create-zone": "Создать зону",
     "currency": "Валюта",
-    "default-role-label": "Это роль по умолчанию, которую нельзя изменить.",
+    "default-role-label": "Это роль по умолчанию, которую невозможно изменить.",
     "default-shipping-zone": "Зона доставки по умолчанию",
     "default-tax-zone": "Налоговая зона по умолчанию",
     "eligible": "Имеющий право",
@@ -746,7 +587,7 @@
     "last-name": "Фамилия",
     "no-eligible-shipping-methods": "Нет подходящих способов доставки",
     "password": "Пароль",
-    "payment-eligibility-checker": "Проверка приемлемости платежа",
+    "payment-eligibility-checker": "Контролер приемлемости оплаты",
     "payment-handler": "Обработчик платежей",
     "permissions": "Разрешения",
     "prices-include-tax": "Цены включают налог для зоны по умолчанию",
@@ -758,7 +599,7 @@
     "search-by-product-name-or-sku": "Поиск по названию товара или артикулу",
     "search-country-by-name": "Поиск страны по названию",
     "shipping-calculator": "Калькулятор доставки",
-    "shipping-eligibility-checker": "Проверка права на доставку",
+    "shipping-eligibility-checker": "Контролер приемлемости доставки",
     "shipping-method": "Способ доставки",
     "tax-category": "Налоговая категория",
     "tax-rate": "Ставка налога",
@@ -766,7 +607,7 @@
     "test-order": "Тестовый заказ",
     "test-result": "Результат теста",
     "test-shipping-method": "Тестовый способ доставки",
-    "test-shipping-methods": "Методы тестовой доставки",
+    "test-shipping-methods": "Способы тестовой доставки",
     "track-inventory-default": "По умолчанию отслеживать инвентаризацию",
     "update-zone": "Обновление зоны",
     "view-zone-members": "Просмотреть участников",
@@ -788,9 +629,9 @@
     "partially-delivered": "Частично доставлено",
     "partially-shipped": "Частично отправлено",
     "payment-authorized": "Оплата авторизована",
-    "payment-settled": "Оплата произведена",
+    "payment-settled": "Оплата проведена",
     "pending": "В ожидании",
-    "settled": "Урегулировано",
+    "settled": "Проведено",
     "shipped": "Отправлено"
   },
   "system": {

+ 17 - 176
packages/admin-ui/src/lib/static/i18n-messages/uk.json

@@ -44,7 +44,7 @@
     "profile": "Профіль",
     "promotions": "Акції",
     "roles": "Ролі",
-    "shipping-methods": "Методи доставки",
+    "shipping-methods": "Способи доставки",
     "system-status": "Стан системи",
     "tax-categories": "Категорії податків",
     "tax-rates": "Податкові ставки",
@@ -76,10 +76,10 @@
     "confirm-delete-product": "Видалити товар?",
     "confirm-delete-product-variant": "Видалити варіант товару?",
     "confirm-delete-promotion": "Видалити промо-акцію?",
-    "confirm-delete-shipping-method": "Видалити метод доставки?",
+    "confirm-delete-shipping-method": "Видалити спосіб доставки?",
     "confirm-delete-zone": "Видалити зону?",
-    "confirm-deletion-of-unused-variants-body": "",
-    "confirm-deletion-of-unused-variants-title": "",
+    "confirm-deletion-of-unused-variants-body": "Наступні варіанти товару застаріли через додавання нових опцій. Вони будуть видалені під час створення нових варіантів товару.",
+    "confirm-deletion-of-unused-variants-title": "Видалити застарілі варіанти товару?",
     "create-new-collection": "Створити нову колекцію",
     "create-new-facet": "Створити новий тег",
     "create-new-product": "Створити новий товар",
@@ -88,7 +88,7 @@
     "display-variant-cards": "Перегляд карток варіантів",
     "display-variant-table": "Перегляд у вигляді таблиці",
     "drop-files-to-upload": "Перетягніть файли для завантаження",
-    "duplicate-sku-warning": "",
+    "duplicate-sku-warning": "Переконайтесь, що всі артикули (SKU) унікальні",
     "expand-all-collections": "Розгорнути всі колекції",
     "facet-values": "Значення тегу",
     "filter-by-name": "Фільтр по імені",
@@ -169,7 +169,7 @@
     "change-selection": "Змінити вибір",
     "channel": "Канал",
     "channels": "Канали",
-    "close": "",
+    "close": "Закрити",
     "code": "Код",
     "collapse-entries": "Згорнути записи",
     "confirm": "Підтверджувати",
@@ -366,169 +366,10 @@
     "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": "У цьому каналі немає податкової зони за замовчуванням, що призведе до помилок при розрахунку цін. Будь ласка, створіть або виберіть зону.",
+    "no-default-shipping-zone-set": "Цей канал не має зони доставки за замовчуванням. Це може викликати помилки при розрахунку вартості доставки замовлення.",
+    "no-default-tax-zone-set": "Цей канал не має податкової зони за замовчуванням, що призведе до помилок при розрахунку цін. Будь ласка, створіть або виберіть зону.",
     "product-variant-form-values-do-not-match": "Кількість варіантів у формі товару не відповідає фактичній кількості варіантів"
   },
-  "lang": {
-    "af": "Afrikaans",
-    "ak": "Akan",
-    "am": "Amharic",
-    "ar": "Arabic",
-    "as": "Assamese",
-    "az": "Azerbaijani",
-    "be": "Belarusian",
-    "bg": "Bulgarian",
-    "bm": "Bambara",
-    "bn": "Bangla",
-    "bo": "Tibetan",
-    "br": "Breton",
-    "bs": "Bosnian",
-    "ca": "Catalan",
-    "ce": "Chechen",
-    "co": "Corsican",
-    "cs": "Czech",
-    "cu": "Church Slavic",
-    "cy": "Welsh",
-    "da": "Danish",
-    "de": "German",
-    "de_AT": "Austrian German",
-    "de_CH": "Swiss High German",
-    "dz": "Dzongkha",
-    "ee": "Ewe",
-    "el": "Greek",
-    "en": "English",
-    "en_AU": "Australian English",
-    "en_CA": "Canadian English",
-    "en_GB": "British English",
-    "en_US": "American English",
-    "eo": "Esperanto",
-    "es": "Spanish",
-    "es_ES": "European Spanish",
-    "es_MX": "Mexican Spanish",
-    "et": "Estonian",
-    "eu": "Basque",
-    "fa": "Persian",
-    "fa_AF": "Dari",
-    "ff": "Fulah",
-    "fi": "Finnish",
-    "fo": "Faroese",
-    "fr": "French",
-    "fr_CA": "Canadian French",
-    "fr_CH": "Swiss French",
-    "fy": "Western Frisian",
-    "ga": "Irish",
-    "gd": "Scottish Gaelic",
-    "gl": "Galician",
-    "gu": "Gujarati",
-    "gv": "Manx",
-    "ha": "Hausa",
-    "he": "Hebrew",
-    "hi": "Hindi",
-    "hr": "Croatian",
-    "ht": "Haitian Creole",
-    "hu": "Hungarian",
-    "hy": "Armenian",
-    "ia": "Interlingua",
-    "id": "Indonesian",
-    "ig": "Igbo",
-    "ii": "Sichuan Yi",
-    "is": "Icelandic",
-    "it": "Italian",
-    "ja": "Japanese",
-    "jv": "Javanese",
-    "ka": "Georgian",
-    "ki": "Kikuyu",
-    "kk": "Kazakh",
-    "kl": "Kalaallisut",
-    "km": "Khmer",
-    "kn": "Kannada",
-    "ko": "Korean",
-    "ks": "Kashmiri",
-    "ku": "Kurdish",
-    "kw": "Cornish",
-    "ky": "Kyrgyz",
-    "la": "Latin",
-    "lb": "Luxembourgish",
-    "lg": "Ganda",
-    "ln": "Lingala",
-    "lo": "Lao",
-    "lt": "Lithuanian",
-    "lu": "Luba-Katanga",
-    "lv": "Latvian",
-    "mg": "Malagasy",
-    "mi": "Maori",
-    "mk": "Macedonian",
-    "ml": "Malayalam",
-    "mn": "Mongolian",
-    "mr": "Marathi",
-    "ms": "Malay",
-    "mt": "Maltese",
-    "my": "Burmese",
-    "nb": "Norwegian Bokmål",
-    "nd": "North Ndebele",
-    "ne": "Nepali",
-    "nl": "Dutch",
-    "nl_BE": "Flemish",
-    "nn": "Norwegian Nynorsk",
-    "ny": "Nyanja",
-    "om": "Oromo",
-    "or": "Odia",
-    "os": "Ossetic",
-    "pa": "Punjabi",
-    "pl": "Polish",
-    "ps": "Pashto",
-    "pt": "Portuguese",
-    "pt_BR": "Brazilian Portuguese",
-    "pt_PT": "European Portuguese",
-    "qu": "Quechua",
-    "rm": "Romansh",
-    "rn": "Rundi",
-    "ro": "Romanian",
-    "ro_MD": "Moldavian",
-    "ru": "Русский",
-    "rw": "Kinyarwanda",
-    "sa": "Sanskrit",
-    "sd": "Sindhi",
-    "se": "Northern Sami",
-    "sg": "Sango",
-    "si": "Sinhala",
-    "sk": "Slovak",
-    "sl": "Slovenian",
-    "sm": "Samoan",
-    "sn": "Shona",
-    "so": "Somali",
-    "sq": "Albanian",
-    "sr": "Serbian",
-    "st": "Southern Sotho",
-    "su": "Sundanese",
-    "sv": "Swedish",
-    "sw": "Swahili",
-    "sw_CD": "Congo Swahili",
-    "ta": "Tamil",
-    "te": "Telugu",
-    "tg": "Tajik",
-    "th": "Thai",
-    "ti": "Tigrinya",
-    "tk": "Turkmen",
-    "to": "Tongan",
-    "tr": "Turkish",
-    "tt": "Tatar",
-    "ug": "Uyghur",
-    "uk": "Українська",
-    "ur": "Urdu",
-    "uz": "Uzbek",
-    "vi": "Vietnamese",
-    "vo": "Volapük",
-    "wo": "Wolof",
-    "xh": "Xhosa",
-    "yi": "Yiddish",
-    "yo": "Yoruba",
-    "zh": "Chinese",
-    "zh_Hans": "Simplified Chinese",
-    "zh_Hant": "Traditional Chinese",
-    "zu": "Zulu"
-  },
   "marketing": {
     "actions": "Дії",
     "add-action": "Додати дію",
@@ -562,7 +403,7 @@
     "roles": "Ролі",
     "sales": "Продажі",
     "settings": "Налаштування",
-    "shipping-methods": "Методи доставки",
+    "shipping-methods": "Способи доставки",
     "system": "Система",
     "system-status": "Стан системи",
     "tax-categories": "Категорії податків",
@@ -633,7 +474,7 @@
     "modification-adding-surcharges": "Додання {count} {count, plural, one {доплати} other {доплат}}",
     "modification-adjusting-lines": "Регулювання {count} {count, plural, one {лінії} other {ліній}}",
     "modification-not-settled": "Не врегульовано",
-    "modification-recalculate-shipping": "Пересчитать доставку",
+    "modification-recalculate-shipping": "Перерахувати доставку",
     "modification-settled": "Врегульовано",
     "modification-summary": "Зведення модифікацій",
     "modification-updating-billing-address": "Оновлення платіжної адреси",
@@ -686,8 +527,8 @@
     "select-state": "Виберіть стан",
     "set-fulfillment-state": "Помітити як {state}",
     "settle-payment": "Розрахунок платежу",
-    "settle-payment-error": "Не вдалося здійснити оплату",
-    "settle-payment-success": "Успішно здійснений платіж",
+    "settle-payment-error": "Не вдалося провести оплату",
+    "settle-payment-success": "Успішно проведений платіж",
     "settle-refund": "Повернення платежу",
     "settle-refund-manual-instructions": "Після ручного відшкодування через вашого платіжного провайдера ({method}), введіть тут ідентифікатор транзакції.",
     "settle-refund-success": "Повернення успішно здійснено",
@@ -733,7 +574,7 @@
     "create-new-zone": "Створити нову зону",
     "create-zone": "Створити зону",
     "currency": "Валюта",
-    "default-role-label": "Це роль за замовчуванням, яку не можна змінити.",
+    "default-role-label": "Це роль за замовчуванням, яку неможливо змінити.",
     "default-shipping-zone": "Зона доставки за замовчуванням",
     "default-tax-zone": "Податкова зона за замовчуванням",
     "eligible": "Який має право",
@@ -746,7 +587,7 @@
     "last-name": "Прізвище",
     "no-eligible-shipping-methods": "Немає відповідних способів доставки",
     "password": "Пароль",
-    "payment-eligibility-checker": "Перевірка прийнятності платежу",
+    "payment-eligibility-checker": "Контролер прийнятності оплати",
     "payment-handler": "Обробник платежів",
     "permissions": "Дозволи",
     "prices-include-tax": "Ціни включають податок для зони за замовчуванням",
@@ -758,7 +599,7 @@
     "search-by-product-name-or-sku": "Пошук за назвою товару або артикулу",
     "search-country-by-name": "Пошук країни за назвою",
     "shipping-calculator": "Калькулятор доставки",
-    "shipping-eligibility-checker": "Перевірка права на доставку",
+    "shipping-eligibility-checker": "Контролер прийнятності доставки",
     "shipping-method": "Спосіб доставки",
     "tax-category": "Податкова категорія",
     "tax-rate": "Ставка податку",
@@ -766,7 +607,7 @@
     "test-order": "Тестове замовлення",
     "test-result": "Результат тесту",
     "test-shipping-method": "Тестовий спосіб доставки",
-    "test-shipping-methods": "Методи тестової доставки",
+    "test-shipping-methods": "Способи тестової доставки",
     "track-inventory-default": "За замовчуванням відстежувати інвентаризацію",
     "update-zone": "Оновлення зони",
     "view-zone-members": "Переглянути учасників",
@@ -790,7 +631,7 @@
     "payment-authorized": "Оплата авторизована",
     "payment-settled": "Оплата проведена",
     "pending": "В очікуванні",
-    "settled": "Урегульовано",
+    "settled": "Проведено",
     "shipped": "Відправлено"
   },
   "system": {

+ 0 - 159
packages/admin-ui/src/lib/static/i18n-messages/zh_Hans.json

@@ -370,165 +370,6 @@
     "no-default-tax-zone-set": "当前销售渠道没有没人税表区域设置,这会导致计算价格失败。请创建或选择税区。",
     "product-variant-form-values-do-not-match": "表单中商品规格数量与实际不符"
   },
-  "lang": {
-    "af": "南非语",
-    "ak": "阿坎语",
-    "am": "阿姆哈拉语",
-    "ar": "阿拉伯语",
-    "as": "阿萨姆语",
-    "az": "阿塞拜疆语",
-    "be": "白俄罗斯语",
-    "bg": "保加利亚语",
-    "bm": "班巴拉语",
-    "bn": "孟加拉语",
-    "bo": "标准藏语",
-    "br": "布列塔尼语",
-    "bs": "波斯尼亚语",
-    "ca": "加泰罗尼亚语",
-    "ce": "车臣语",
-    "co": "柯西嘉语",
-    "cs": "捷克语",
-    "cu": "古教会斯拉夫语",
-    "cy": "威尔士语",
-    "da": "丹麦语",
-    "de": "德语",
-    "de_AT": "",
-    "de_CH": "",
-    "dz": "宗喀语",
-    "ee": "埃维语",
-    "el": "希腊语",
-    "en": "英语",
-    "en_AU": "",
-    "en_CA": "",
-    "en_GB": "",
-    "en_US": "",
-    "eo": "世界语",
-    "es": "西班牙语",
-    "es_ES": "",
-    "es_MX": "",
-    "et": "爱沙尼亚语",
-    "eu": "巴斯克语",
-    "fa": "波斯语",
-    "fa_AF": "",
-    "ff": "富拉语",
-    "fi": "芬兰语",
-    "fo": "法罗语",
-    "fr": "法语",
-    "fr_CA": "",
-    "fr_CH": "",
-    "fy": "西弗里斯兰语",
-    "ga": "爱尔兰语",
-    "gd": "苏格兰盖尔语",
-    "gl": "加利西亚语",
-    "gu": "古吉拉特语",
-    "gv": "马恩语",
-    "ha": "豪萨语",
-    "he": "希伯来语",
-    "hi": "印地语",
-    "hr": "克罗地亚语",
-    "ht": "海地语",
-    "hu": "匈牙利语",
-    "hy": "亚美尼亚语",
-    "ia": "国际语",
-    "id": "印度尼西亚语",
-    "ig": "伊博语",
-    "ii": "彝语北部方言",
-    "is": "冰岛语",
-    "it": "意大利语",
-    "ja": "日语",
-    "jv": "爪哇语",
-    "ka": "格鲁吉亚语",
-    "ki": "基库尤语",
-    "kk": "哈萨克语",
-    "kl": "格陵兰语",
-    "km": "高棉语",
-    "kn": "坎纳达语",
-    "ko": "韩语",
-    "ks": "克什米尔语",
-    "ku": "库尔德语",
-    "kw": "康沃尔语",
-    "ky": "柯尔克孜语",
-    "la": "拉丁语",
-    "lb": "卢森堡语",
-    "lg": "干达语",
-    "ln": "林加拉语",
-    "lo": "老挝语",
-    "lt": "立陶宛语",
-    "lu": "卢巴卡丹加语",
-    "lv": "拉脱维亚语",
-    "mg": "马达加斯加语",
-    "mi": "毛利语",
-    "mk": "马其顿语",
-    "ml": "马拉雅拉姆语",
-    "mn": "蒙古语",
-    "mr": "马拉地语",
-    "ms": "马来语",
-    "mt": "马耳他语",
-    "my": "缅甸语",
-    "nb": "书面挪威语",
-    "nd": "北恩德贝莱语",
-    "ne": "尼泊尔语",
-    "nl": "荷兰语",
-    "nl_BE": "",
-    "nn": "挪威尼诺斯克语",
-    "ny": "齐切瓦语",
-    "om": "奥罗莫语",
-    "or": "奥里雅语",
-    "os": "奥塞梯语",
-    "pa": "旁遮普语",
-    "pl": "波兰语",
-    "ps": "普什图语",
-    "pt": "葡萄牙语",
-    "pt_BR": "",
-    "pt_PT": "",
-    "qu": "盖丘亚语",
-    "rm": "罗曼什语",
-    "rn": "基隆迪语",
-    "ro": "罗马尼亚语",
-    "ro_MD": "",
-    "ru": "俄语",
-    "rw": "卢旺达语",
-    "sa": "梵语",
-    "sd": "信德语",
-    "se": "北萨米语",
-    "sg": "桑戈语",
-    "si": "僧伽罗语",
-    "sk": "斯洛伐克语",
-    "sl": "斯洛文尼亚人",
-    "sm": "萨摩亚语",
-    "sn": "修纳语",
-    "so": "索马里语",
-    "sq": "阿尔巴尼亚语",
-    "sr": "塞尔维亚语",
-    "st": "南索托语",
-    "su": "巽他语",
-    "sv": "瑞典语",
-    "sw": "斯瓦希里语",
-    "sw_CD": "",
-    "ta": "泰米尔语",
-    "te": "泰卢固语",
-    "tg": "塔吉克语",
-    "th": "泰语",
-    "ti": "提格里尼亚语",
-    "tk": "土库曼语",
-    "to": "汤加语",
-    "tr": "土耳其语",
-    "tt": "鞑靼语",
-    "ug": "维吾尔语",
-    "uk": "乌克兰语",
-    "ur": "乌尔都语",
-    "uz": "乌兹别克语",
-    "vi": "越南语",
-    "vo": "沃拉普克语",
-    "wo": "沃洛夫语",
-    "xh": "科萨语",
-    "yi": "意第绪语",
-    "yo": "约鲁巴语",
-    "zh": "简体中文",
-    "zh_Hans": "简体中文",
-    "zh_Hant": "繁體中文",
-    "zu": "祖鲁语"
-  },
   "marketing": {
     "actions": "优惠操作",
     "add-action": "添加优惠",

+ 0 - 159
packages/admin-ui/src/lib/static/i18n-messages/zh_Hant.json

@@ -370,165 +370,6 @@
     "no-default-tax-zone-set": "",
     "product-variant-form-values-do-not-match": "表單中商品規格數量與實際不符"
   },
-  "lang": {
-    "af": "南非文",
-    "ak": "阿坎文",
-    "am": "阿姆哈拉文",
-    "ar": "阿拉伯文",
-    "as": "阿薩姆文",
-    "az": "阿塞拜疆文",
-    "be": "白俄羅斯文",
-    "bg": "保加利亞文",
-    "bm": "班巴拉文",
-    "bn": "孟加拉文",
-    "bo": "藏文",
-    "br": "布列塔尼文",
-    "bs": "波斯尼亞文",
-    "ca": "加泰羅尼亞文",
-    "ce": "車臣文",
-    "co": "柯西嘉文",
-    "cs": "捷克文",
-    "cu": "古教會斯拉夫文",
-    "cy": "威爾士文",
-    "da": "丹麥文",
-    "de": "德文",
-    "de_AT": "",
-    "de_CH": "",
-    "dz": "宗喀文",
-    "ee": "埃維文",
-    "el": "希臘文",
-    "en": "英文",
-    "en_AU": "",
-    "en_CA": "",
-    "en_GB": "",
-    "en_US": "",
-    "eo": "世界文",
-    "es": "西班牙文",
-    "es_ES": "",
-    "es_MX": "",
-    "et": "愛沙尼亞文",
-    "eu": "巴斯克文",
-    "fa": "波斯文",
-    "fa_AF": "",
-    "ff": "富拉文",
-    "fi": "芬蘭文",
-    "fo": "法羅文",
-    "fr": "法文",
-    "fr_CA": "",
-    "fr_CH": "",
-    "fy": "西弗里斯蘭文",
-    "ga": "愛爾蘭文",
-    "gd": "蘇格蘭盖爾文",
-    "gl": "加利西亞文",
-    "gu": "古吉拉特文",
-    "gv": "馬恩文",
-    "ha": "豪薩文",
-    "he": "希伯来文",
-    "hi": "印地文",
-    "hr": "克羅地亞文",
-    "ht": "海地文",
-    "hu": "匈牙利文",
-    "hy": "亞美尼亞文",
-    "ia": "國際文",
-    "id": "印度尼西亞文",
-    "ig": "伊博文",
-    "ii": "彝文北部方言",
-    "is": "冰島文",
-    "it": "意大利文",
-    "ja": "日文",
-    "jv": "爪哇文",
-    "ka": "格鲁吉亞文",
-    "ki": "基庫尤文",
-    "kk": "哈薩克文",
-    "kl": "格陵蘭文",
-    "km": "高棉文",
-    "kn": "坎納達文",
-    "ko": "韓文",
-    "ks": "克什米爾文",
-    "ku": "庫爾德文",
-    "kw": "康沃爾文",
-    "ky": "柯爾克孜文",
-    "la": "拉丁文",
-    "lb": "盧森堡文",
-    "lg": "干達文",
-    "ln": "林加拉文",
-    "lo": "老撾文",
-    "lt": "立陶宛文",
-    "lu": "盧巴卡丹加文",
-    "lv": "拉脱維亞文",
-    "mg": "馬達加斯加文",
-    "mi": "毛利文",
-    "mk": "馬其頓文",
-    "ml": "馬拉雅拉姆文",
-    "mn": "蒙古文",
-    "mr": "馬拉地文",
-    "ms": "馬来文",
-    "mt": "馬耳他文",
-    "my": "緬甸文",
-    "nb": "書面挪威文",
-    "nd": "北恩德貝莱文",
-    "ne": "尼泊爾文",
-    "nl": "荷蘭文",
-    "nl_BE": "",
-    "nn": "挪威尼諾斯克文",
-    "ny": "齊切瓦文",
-    "om": "奥羅莫文",
-    "or": "奥里雅文",
-    "os": "奥塞梯文",
-    "pa": "旁遮普文",
-    "pl": "波蘭文",
-    "ps": "普什圖文",
-    "pt": "葡萄牙文",
-    "pt_BR": "",
-    "pt_PT": "",
-    "qu": "盖丘亞文",
-    "rm": "羅曼什文",
-    "rn": "基隆迪文",
-    "ro": "羅馬尼亞文",
-    "ro_MD": "",
-    "ru": "俄文",
-    "rw": "盧旺達文",
-    "sa": "梵文",
-    "sd": "信德文",
-    "se": "北薩米文",
-    "sg": "桑戈文",
-    "si": "僧伽羅文",
-    "sk": "斯洛伐克文",
-    "sl": "斯洛文尼亞文",
-    "sm": "薩摩亞文",
-    "sn": "修納文",
-    "so": "索馬里文",
-    "sq": "阿爾巴尼亞文",
-    "sr": "塞爾維亞文",
-    "st": "南索托文",
-    "su": "巽他文",
-    "sv": "瑞典文",
-    "sw": "斯瓦希里文",
-    "sw_CD": "",
-    "ta": "泰米爾文",
-    "te": "泰盧固文",
-    "tg": "塔吉克文",
-    "th": "泰文",
-    "ti": "提格里尼亞文",
-    "tk": "土庫曼文",
-    "to": "湯加文",
-    "tr": "土耳其文",
-    "tt": "韃靼文",
-    "ug": "維吾爾文",
-    "uk": "烏克蘭文",
-    "ur": "烏爾都文",
-    "uz": "烏兹别克文",
-    "vi": "越南文",
-    "vo": "沃拉普克文",
-    "wo": "沃洛夫文",
-    "xh": "科薩文",
-    "yi": "意第绪文",
-    "yo": "約鲁巴文",
-    "zh": "中文",
-    "zh_Hans": "简体中文",
-    "zh_Hant": "繁體中文",
-    "zu": "祖鲁文"
-  },
   "marketing": {
     "actions": "優惠操作",
     "add-action": "新增優惠",

+ 30 - 0
packages/core/e2e/collection.e2e-spec.ts

@@ -26,6 +26,7 @@ import {
     GetAssetList,
     GetCollection,
     GetCollectionBreadcrumbs,
+    GetCollectionNestedParents,
     GetCollectionProducts,
     GetCollections,
     GetCollectionsForProducts,
@@ -580,6 +581,15 @@ describe('Collection resolver', () => {
             ]);
         });
 
+        // https://github.com/vendure-ecommerce/vendure/issues/981
+        it('nested parent field in shop API', async () => {
+            const { collections } = await shopClient.query<GetCollectionNestedParents.Query>(
+                GET_COLLECTION_NESTED_PARENTS,
+            );
+
+            expect(collections.items[0].parent?.name).toBe(ROOT_COLLECTION_NAME);
+        });
+
         it('children field', async () => {
             const result = await adminClient.query<GetCollection.Query, GetCollection.Variables>(
                 GET_COLLECTION,
@@ -1877,3 +1887,23 @@ const GET_PRODUCT_COLLECTIONS_WITH_PARENT = gql`
         }
     }
 `;
+
+const GET_COLLECTION_NESTED_PARENTS = gql`
+    query GetCollectionNestedParents {
+        collections {
+            items {
+                id
+                name
+                parent {
+                    name
+                    parent {
+                        name
+                        parent {
+                            name
+                        }
+                    }
+                }
+            }
+        }
+    }
+`;

File diff suppressed because it is too large
+ 518 - 665
packages/core/e2e/graphql/generated-e2e-admin-types.ts


+ 3 - 3
packages/core/src/api/resolvers/entity/collection-entity.resolver.ts

@@ -72,13 +72,13 @@ export class CollectionEntityResolver {
         @Parent() collection: Collection,
         @Api() apiType: ApiType,
     ): Promise<Collection | undefined> {
-        let parent: Collection;
+        let parent: Collection | undefined;
         if (collection.parent) {
             parent = collection.parent;
         } else {
-            parent = (await this.collectionService.getParent(ctx, collection.id)) as any;
+            parent = await this.collectionService.getParent(ctx, collection.id);
         }
-        return apiType === 'shop' && parent.isPrivate ? undefined : parent;
+        return apiType === 'shop' && parent?.isPrivate ? undefined : parent;
     }
 
     @ResolveField()

+ 1 - 0
packages/core/src/service/services/asset.service.ts

@@ -259,6 +259,7 @@ export class AssetService {
             input.focalPoint.y = to3dp(input.focalPoint.y);
         }
         patchEntity(asset, omit(input, ['tags']));
+        await this.customFieldRelationService.updateRelations(ctx, Asset, input, asset);
         if (input.tags) {
             asset.tags = await this.tagService.valuesToTags(ctx, input.tags);
         }

Some files were not shown because too many files changed in this diff