网站搜索

typescript - 如何在代码中使用 Angular 2 Translate 服务管道?


事情是这样的……我在我的应用中使用了一个 Angular 4 模板,这个模板有一个工作良好的翻译服务。问题是我不知道如何在代码中使用那个管道。

在 HTML 中只需放置 <span>{{ this.variable | traslate }}</span>,然后,服务会去某些 JSON 文件中查找文本并进行翻译。

这是我在 component.ts 中的代码

const SMALL_WIDTH_BREAKPOINT = 960;
@Component({
  selector: 'app-mycomponent',
  templateUrl: './mycomponent.component.html',
  styleUrls: ['./mycomponent.component.scss']
})

export class TrackingComponent implements OnInit { 
  currentLang = 'es';
  private mediaMatcher: MediaQueryList = matchMedia(`(max-width: 
  ${SMALL_WIDTH_BREAKPOINT}px)`);
  constructor(
    public translate: TranslateService,
    zone: NgZone,
    private router: Router,
  ) {
    const browserLang: string = translate.getBrowserLang();
      translate.use(browserLang.match(/en|es/) ? browserLang : 'es');
      this.mediaMatcher.addListener(mql => zone.run(() => {
        this.mediaMatcher = mql;
      }));
      translate.use(this.currentLang);
  }

  ngOnInit() { }

  myFunction(msg: string) : {
    const translatedText = msg; // HERE IS WHERE I WANT TO USE THE TRANSLATE SERVICE BUT I DON'T KNOW HOW TO CALL IT
    alert(translatedText );
  }

}

是的,我把所有需要的东西都放在模块里了,因为它在 HTML 中可用……但我不知道如何在代码里调用它。

我在寻找解决我的问题的方法时,找到了这个:

 let translatedText = new TranslatePipe().transform(msg);

 but the `TranslatePipe` does not work. 

有人知道怎么称呼它吗?

答案#1

你基本上有3个选择

如果你完全确定你的翻译文件已经加载,并且在语言更改时不想自动更新翻译,请使用

translate.instant('ID')

如果你不确定加载状态,但不需要语言更改的更新,可以使用 translate.get('ID')。它会给你一个在加载完成后返回翻译并终止 observable 的可观察对象。

如果你想要持续更新(例如,当语言发生变化时),请使用 translate.stream('ID') - 它会返回一个发出翻译更新的可观察对象。如果不再需要,请确保处理该可观察对象。

这假设你已经在你的组件中将 TranslationService 注入为 translate。

例如

export class AppComponent {
    constructor(translate: TranslateService) {
        translate.get('hello.world').subscribe((text:string) => {console.log(text});
    }
}

你必须在订阅内部将翻译分配给你的数据数组