【问题标题】:Translate text in a custom angular pipe (ngx-translate)翻译自定义角度管道中的文本 (ngx-translate)
【发布时间】:2022-01-18 11:15:39
【问题描述】:

我在我的 Angular 应用程序中使用 ngx-translate 进行翻译。

在自定义管道中,我有一些需要翻译的文本。

管道:

import { Pipe, PipeTransform } from '@angular/core';
import { Something} from '../domain';

@Pipe({
  name: 'someDescription'
})
export class SomeDescriptionPipe implements PipeTransform {

  transform(value: Something, args?: any): string {
    switch (value) {
      case Something.value1: return 'string 001';
      case Something.value2: return 'string 002';
      default: return value;
    }
  }

}

据我所知,自 Angular 6 以来不支持构造函数。 如何翻译管道中的文本? (经过一番研究,事实并非如此)

解决方案是使用构造函数并导入 TranslateService。

【问题讨论】:

    标签: angular ngx-translate


    【解决方案1】:

    在下面的示例中“editProfile.timeZones.”+timeZone?.key 首先传入时区管道,然后传入 ngx 翻译管道,您可以对自定义管道和 ngx 翻译管道执行相同操作

    <option *ngFor="let timeZone of timeZones" [value]="(timeZone?.key)">
                              {{ "editProfile.timeZones."+timeZone?.key | timezone | translate }}
    </option>
    

    【讨论】:

      【解决方案2】:

      在 Angular 9 和 ngx-translate/core 12.1.x 中,我可以将 TranslationService 注入 Pipe 并使用它。

      为了能够做到这一点,您需要在某处导入 TranslateModule.forRoot({...}),例如我的主要 AppModule 导入中有它。

          import { Pipe, PipeTransform } from '@angular/core';
          import { Something} from '../domain';
          import { TranslateService } from '@ngx-translate/core';
          
          @Pipe({
            name: 'someDescription'
          })
          export class SomeDescriptionPipe implements PipeTransform {
      
            constructor(private _translateService: TranslateService) {
            }
          
            transform(value: Something, args?: any): string {
                //use translateService.instant('some.translation.key') function here
      
      
              switch (value) {
                case Something.value1: return 'string 001';
                case Something.value2: return 'string 002';
                default: return value;
              }
          
            }
          
          }
      

      请注意,您还可以从 ngx-translate 获得一个 translate 管道,正如某人已经提到的那样。

      【讨论】:

      • 但是当语言改变时如何更新翻译。您可以订阅 .onLangChange 但转换已执行。只有在语言之间切换时,您才会停留在同一页面上。
      • 在这里找到它:stackoverflow.com/a/48697426/4198589。只需将 pure 设置为 false
      • 但我也读到这对性能不利。还有其他解决方案吗?
      猜你喜欢
      • 2019-03-08
      • 2019-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多