Режим AOT в angular сборках добавляет `fr.` или` en` в качестве префикса ключей перевода в transloco - PullRequest
1 голос
/ 20 февраля 2020

У меня есть простые ключи перевода, такие как login-page.login.

При построении в AOT перевод отображается неправильно, вместо этого отображается ключ fr.login-page.login. Я не нашел, почему AOT добавил префикс lang.

Очевидно, что в JIT все работает прекрасно. И в обоих режимах (AOT и JIT) я вижу, что файлы перевода загружаются на ваше усмотрение, я являюсь файлом перевода для компонентов, и каждый файл находится в области действия в поставщике компонентов. Вот мой конфигурационный файл transloco:

provideTranslocoConfig({
    availableLangs: ['en', 'fr'],
    reRenderOnLangChange: true,
    defaultLang: 'fr',
    fallbackLang: 'en',
    missingHandler: {
      useFallbackTranslation: true,
      logMissingKey: false,
    },
    prodMode: environment.production,
    flatten: {
      aot: environment.production,
    },
  }),

РЕДАКТИРОВАТЬ Я проверил во время выполнения, у меня есть: this.translocoService.availableLangs -> []

Хотя: this.translocoService.lang.getValue() -> "fr"

Когда я проверяю this.translocoService.translations, у меня есть весь мой перевод "fr".

Наконец, если я пытаюсь this.translocoService.translate('login-page.login'), он регистрируется как ошибка Missing translation for 'fr.login-page.login' .

EDIT Когда я запускаю проект в JIT, translocoService.config возвращает конфигурацию, которую я установил. Но когда я включаю AOT, translocoService.config просто полон конфигураций по умолчанию, все настройки проекта исчезли ...

1 Ответ

1 голос
/ 24 февраля 2020

Обновление Transloco с 2.12.0 до 2.13.3 и замена provideTranslocoConfig на translocoConfig работали для меня.

Я вдохновил мою конфигурацию из новой пустой сборки проекта с Схема транслоко:

import { Injectable, NgModule } from '@angular/core';
import {
  Translation,
  TRANSLOCO_CONFIG,
  TRANSLOCO_LOADER,
  translocoConfig,
  TranslocoLoader,
  TranslocoModule,
} from '@ngneat/transloco';
import { HttpClient } from '@angular/common/http';
import { environment } from '../environments/environment';
import { TranslocoMessageFormatModule } from '@ngneat/transloco-messageformat';
import { TranslocoLocaleModule } from '@ngneat/transloco-locale';

@Injectable({ providedIn: 'root' })
export class TranslocoHttpLoader implements TranslocoLoader {
  constructor(private http: HttpClient) {}

  getTranslation(lang: string) {
    return this.http.get<Translation>(`assets/i18n/${lang}.json`);
  }
}

@NgModule({
  imports: [
    TranslocoModule,
    TranslocoMessageFormatModule.init(),
    TranslocoLocaleModule.init({
      langToLocaleMapping: {
        en: 'en-US',
        fr: 'fr-FR',
      },
    }),
  ],
  exports: [TranslocoModule, TranslocoMessageFormatModule, TranslocoLocaleModule],
  providers: [
    {
      provide: TRANSLOCO_CONFIG,
      useValue: translocoConfig({
        availableLangs: ['en', 'fr'],
        reRenderOnLangChange: true,
        defaultLang: 'fr',
        fallbackLang: 'en',
        missingHandler: {
          useFallbackTranslation: true,
          logMissingKey: false,
        },
        prodMode: environment.production,
        flatten: {
          aot: environment.production,
        },
      }),
    },
    { provide: TRANSLOCO_LOADER, useClass: TranslocoHttpLoader },
  ],
})
export class TranslocoRootModule {}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...