javascript - 根据所选语言渲染模型中的标签

标签 javascript angular

我正在使用 angular 制作一个多语言应用程序。我正在显示类别列表。 api 响应是这样的:

[
  {
    name_en: 'Watches',
    name_ar: 'راقب'
  },
  {
    name_en: 'Toys',
    name_ar: 'ألعاب الأطفال'
  }
]

我在这个数组上循环显示:

<label *ngFor='let item of items'>{{item.name_en}}</label>

在选择阿拉伯语时,我想在标签中显示 name_ar 而不是 name_en。如何实现?我也可以有超过两种语言。

PS:我总是可以将语言传递给服务器并根据当前语言检索字段,但我正在寻找一种解决方案来动态地执行此操作并一次将所有字段放入

最佳答案

如果是静态内容,您可以使用某种translate 管道或您自定义的管道。

但是如果像您在示例中所做的那样进行动态绑定(bind),您可以使用一些全局方法来检查您选择的语言的条件,就像这样 -

<label *ngFor='let item of items'>{{parseLanguage(item)}}</label>

parseLanguage(item) {
  if(this.selectedLang == 'X'){ return item.name_ar}
  else return item.name_en
}

或者另一种方法是根据所选语言从服务器获得唯一的单一响应。

更新

我为此创建了一个管道,它接受包含 diff 值的整个对象。语言并根据选择的语言返回,希望这对你有用 -

import { Component, NgModule, Pipe, PipeTransform } from '@angular/core'

@Pipe({ name: 'translate'})

export class TranslatePipe implements PipeTransform  {
  languageSelected: string;

  constructor() { }

  transform(value) {
    console.log(value, 'in pipe'); 
    // Made a check for global language selected and return accordingly

    if(this.languageSelected == 'arabic'){
      return value.name_ar;
    }
    else {
      return value.name_en;
    }
  }
}


<p *ngFor='let item of items'>
  {{item | translate}}
</p>

Working example

关于javascript - 根据所选语言渲染模型中的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50252268/

相关文章:

javascript - Request.Get 和异步/等待

javascript - Document.write 方法问题

javascript - IE 9 闪光检测与 javascript

angular - 在 angular2 中,是否有可能获得可观察对象的订阅者数量?

javascript - 如何创建可互换的指令?

javascript - OPTIONS 405(方法不允许)

json - Angular i18n json 文件中的自动比较检查

angular - 强制 Angular 分量在按下后退按钮时重新加载

来自其他功能模块的 Angular 2 导入服务

angular - 在 Angular 中将异步数据从父级传递给子级