Angular 12 ngx-translate/загрузчик не работает

https://www.npmjs.com/package/@ngx-translate/core https://www.npmjs.com/package/@ngx-translate/http-loader Я установил пакет перевода отсюда и добавил модуль ngx-translate с его forRoot , сервис перевода внутри компонента ts (приложение и заголовок), но он также не работает

Компонент заголовка

<header>
<nav class="navbar navbar-expand-lg navbar-light" id="header">
    <div class="container">
      
      <a class="navbar-brand" href="#">
        <img src=".." alt="logo">
      </a>
      <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav me-auto mb-2 mb-lg-0">
          <li class="nav-item" [routerLinkActive]="['active']" [routerLinkActiveOptions]="{ exact: true }">
           
            <a [routerLink]="['home']" class="nav-link">Home</a>

          </li> 
        
          <li class="nav-item dropdown" [routerLinkActive]="['active']" [routerLinkActiveOptions]="{ exact: true }">
            <a class="nav-link dropdown-toggle"  id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
              page 2
            </a>
            <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
              <li><a class="dropdown-item" [routerLink]="['page']">page</a></li>
            </ul>
          </li>

          <li class="nav-item" [routerLinkActive]="['active']" [routerLinkActiveOptions]="{ exact: true }">
            <a class="nav-link" [routerLink]="['features']">Features</a>
          </li>
  
          <li class="nav-item" [routerLinkActive]="['active']" [routerLinkActiveOptions]="{ exact: true }">
            <a class="nav-link reserve-btn" [routerLink]="['reserve']">Reserve</a>
          </li>

        </ul>
     
      </div>
<button (click)="translate.use('en')">
  En
</button>

<button (click)="translate.use('ar')">
  Ar
</button>
      
  </div>
  </nav>
</header>

Заголовок.component.ts

import { DOCUMENT } from '@angular/common';
import { Component, HostListener, Inject, OnInit } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';

@Component({
  selector: 'app-header',
  templateUrl: './header.component.html',
  styleUrls: ['./header.component.scss'],
})

export class HeaderComponent implements OnInit {
  // lang: string;

  constructor(@Inject(DOCUMENT) private document: Document,public translate:TranslateService) {}
 
  
  ngOnInit(): void {
    
    // this.lang = localStorage.getItem('lang') || 'en';
  }


}

app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { GeneralPagesModule } from './general-pages/general-pages.module';
import { RentalPageModule } from './rental-page/rental-page.module';
import { SharedModule } from './shared/shared.module';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';

import { HttpClientModule, HttpClient, HTTP_INTERCEPTORS } from '@angular/common/http';

export function HttpLoaderFactory(httpClient: HttpClient) {
  return new TranslateHttpLoader(httpClient, './assets/i18n/', '.json');
}

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    SharedModule,
    GeneralPagesModule,
    RentalPageModule,
    BrowserAnimationsModule,
    // TranslateModule,
     HttpClientModule,
    TranslateModule.forRoot({
      defaultLanguage:'en',
      loader: {
        provide: TranslateLoader,
        useFactory: createTranslateLoader,
        deps: [HttpClient]
      }
    }),
  ],
  providers: [
    // { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, multi: true },

  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

export function createTranslateLoader(http:HttpClient){
  return new TranslateHttpLoader(http,'./assets/i18n/','.json')
}

Я также пробовал те же шаги в app.component.ts

import { Component, Inject } from '@angular/core';
import * as AOS from 'aos';
import { DOCUMENT } from '@angular/common';
import { TranslateService } from '@ngx-translate/core';
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
import { filter} from 'rxjs/operators';



@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {
  ngOnInit(){
    AOS.init({
      duration: 1200,
    });
    }


  // Inject document which is safe when used with server-side rendering
  constructor(@Inject(DOCUMENT) private document: Document,public translate:TranslateService,
  private router: Router, private route: ActivatedRoute) {

   
  }


}

in home.compoent.html

{{"HOME" || translate}}

home.compoent.ts

import { Component, OnInit } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {

  constructor(public translate:TranslateService) { }

  ngOnInit(): void {
  }

}

person Sarah Ahmed    schedule 27.05.2021    source источник
comment
вы получили какую-либо ошибку? тогда, пожалуйста, загрузите его также   -  person Ravi Gajera    schedule 27.05.2021
comment
нет, это сводит меня с ума   -  person Sarah Ahmed    schedule 27.05.2021
comment
Сначала я получил эту ошибку localhost:4200/assets/i18nar.json 404 (не найдено), поэтому Я исправил это, добавив / после этого эта ошибка скрыта, так что это означает, что файлы перевода загружаются, но когда я делаю какие-либо действия над кнопками EN - AR, кажется, что ничего не сделано   -  person Sarah Ahmed    schedule 27.05.2021
comment
Это может быть полезно Ссылка   -  person Ravi Gajera    schedule 27.05.2021
comment
Ошибка: src/app/shared/components/header/header.component.html:48:71 — ошибка TS2531: объект, возможно, имеет значение «null». 48 ‹select class=custom-select (change)=changLang($event.target.value)› ~~~~~ src/app/shared/components/header/header.component.ts:7:16 7 templateUrl: ' ./header.component.html', ~~~~~~~~~~~~~~~~~~~~~~~~ Ошибка в шаблоне компонента HeaderComponent. Спасибо за помощь .. но я получил эту ошибку, когда я также следовал этому руководству :((((   -  person Sarah Ahmed    schedule 27.05.2021


Ответы (1)


Синтаксис канала {{ 'my-translation-key' | translate }} — у вас есть двойной || в своем шаблоне, измените и повторите попытку.

В качестве альтернативы вы можете внедрить службу перевода и использовать myTanslation = this.translateService.instant('my-translation-key'), если вам нужно установить переменную в вашем контроллере.

person Sam Scholefield    schedule 27.05.2021
comment
Спасибо Тааак Муш ^______^ - person Sarah Ahmed; 27.05.2021