翻译即时的ngx-translate问题

问题描述 投票:1回答:1

我在Angular(v6)中使用ngx-translate和延迟加载方法。我正面临着translate.instant('Title')的问题

使用翻译管道它工作正常。({{'Title' | translate}}

使用translate.instant()方法,默认语言始终有效,但我无法通过共享模块中的语言选择器(选择用于切换语言的组件)来更改语言。

我不想每次都使用this.translate.onLangChange.subscribe,有替代方法使用这种方法吗?

angular angular6 ngx-translate
1个回答
2
投票

使用translate.stream('Title')而不是translate.instant('Title')。它返回一个Observable。

另见https://github.com/ngx-translate/core

这个怎么运作:

import {Component} from '@angular/core';
import {TranslateService} from '@ngx-translate/core';
import {Observable} from 'rxjs';

@Component({
  selector: 'app-root',
  template: `
    <div>
      <h2>{{ 'HOME.TITLE' | translate }}</h2>
      <label>
        {{ 'HOME.SELECT' | translate }}
        <select #langSelect (change)="translate.use(langSelect.value)">
          <option *ngFor="let lang of translate.getLangs()" [value]="lang" [selected]="lang === translate.currentLang">{{ lang }}</option>
        </select>
      </label>
      <ng-container *ngIf="name$ | async as name">
        <p>Observable {{ name }}</p>
      </ng-container>
    </div>
  `,
})
export class AppComponent {
  public name$: Observable<string>;

  constructor(public translate: TranslateService) {
    translate.addLangs(['en', 'fr']);
    translate.setDefaultLang('en');

    const browserLang = translate.getBrowserLang();
    translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');
  }

  public ngOnInit(): void {
    this.name$ = this.translate.stream('HOME.TITLE');
  }
}

这是stackblitz演示的链接:https://stackblitz.com/edit/github-az4kgy

© www.soinside.com 2019 - 2024. All rights reserved.