我如何使用@ngx-translate 翻译 angular 中的对象

how I can translate an object in angular using @ngx-translate

我有一个对象有两种语言:西班牙语和英语我可以翻译对象 1 次,默认情况下它是英语,我可以从英语翻译成西班牙语但后来我不能再用英语翻译等等。 ..

room.component.html

<ul class="navbar-nav  navbar-right">
                <span class="form-inline">
                    <select 
                        class="form-control" 
                        #selectedLang 
                        (change)="switchLang(selectedLang.value)">
                      <option *ngFor="let language of translate.getLangs()" 
                        [value]="language"
                        [selected]="language === translate.currentLang">
                        {{ language }}
                      </option>
                    </select>
                  </span>

            </ul>

      <div *ngIf="translateEn == true; then thenBlock else elseBlock"></div>
<ng-template #thenBlock>     <h4>{{ room.titleEs }}</h4></ng-template>
<ng-template #elseBlock> <h4>{{ room.title }}</h4></ng-template>

room.component.ts

 switchLang(language: string) {
    this.translate.use(language);
   // this.cdRef.markForCheck();
  //  this.cdRef.detectChanges();
    if(this.translate.use('en'))
    {
      this.translateEn = true;
    }
    else if(this.translate.use('es'))
    {
      this.translateEn = false;
    }

 translate.addLangs(['en', 'es']);
    translate.setDefaultLang('en');

  public translateEn:boolean;

我必须检测 select {{ language }} 中的变化 我尝试使用 onChanges 但没有用,也没有用 ChangeDetectorRef....

问题出在您的 switchLang 函数中,该函数检查所选语言可能不是使用 this.translate.use 函数。

this.translate.use 用于更改语言,而不是检查选择了哪一个,无论如何它 returns 是一个可观察的而不是布尔值。

因此,如果您想正确检查它,则必须使用 this.translate.currentLang 或在您的情况下仅使用 language 参数。

尝试以下操作:

switchLang(language: string) {
    this.translate.use(language);
    this.translateEn = language === 'en';
}

注意:没有必要每个语言都使用两个键,只能在两个语言的翻译文件中使用相同的键,然后使用translate 管道根据 currentLang.

获取正确的值