Angular 6-如何从打字稿中提取翻译

时间:2018-09-25 13:08:45

标签: angular typescript localization internationalization translation

我正在使用Angular 6,并且根据https://angular.io/guide/i18n上的文档对翻译进行了设置处理。

问题在于文档没有说明如何使用打字稿进行翻译。

这里有一个类似的问题:Can I use Angular i18n to translate string literals in typescript code

但是我无法使用该答案,因为它依赖于ngx-translate,一旦Angular赶上了,它将不推荐使用,请参见https://github.com/ngx-translate/core/issues/495

因此,使用Angular 6 i18n-如何使用基于id的打字稿获得翻译后的文本?

1 个答案:

答案 0 :(得分:0)

@Diemauerdk,文档无法解释如何使用打字稿获取翻译,因为这是不可能的。一个变通办法可以是在多个.ts中进行翻译。那是

//file locale-us.ts
export const translation:any={
   greeting:"Hello World!",
   mainTitle:"The best Appliacion of the world"
}
//file locale-es.ts
export const translation:any={
   greeting:"¡Hola Mundo!",
   mainTitle:"la mejor aplicación del mundo"
}

在您的.ts中,您可以拥有一个管道

import { Pipe, PipeTransform } from '@angular/core';
import { translation } from '../../i18n/locale-us';


@Pipe({ name: 'translation' })
export class TranslationPipe implements PipeTransform {
    constructor() {}
    transform(value: string): string {
        return translation[value] || null;
    }
}

您可以在将构造函数注入管道的组件中使用

constructor(private translate: TranslationPipe){}
//And use like

alert(this.translate.transform('greeting'));

然后,您可以在angular.json中使用分开的“ fileReplacements”。不显示所有angular.json,否则您必须在其中添加fileReplacement。你有一个如果您下载文档https://angular.io/guide/i18n#internationalization-i18n的i18n示例,请执行以下操作

  "configurations": {

   "production": {
        ...
    },
    "production-es": {
      "fileReplacements": [
        {
          "replace": "src/environments/environment.ts",
          "with": "src/environments/environment.prod.ts"
        }, //add this two lines
        {
          "replace": "src/i18n/locale-us.ts",
          "with": "src/i18n/locale-es.ts"
        }
      ],
      ...
      "outputPath": "dist/my-project-es/",
      "i18nFile": "src/locale/messages.es.xlf",
      ...
    },
    "es": {
      //And add this too
      "fileReplacements": [
        {
          "replace": "src/i18n/locale-us.ts",
          "with": "src/i18n/locale-es.ts"
        }
      ],
      ...

     "outputPath": "dist/my-project-es/",
      "i18nFile": "src/locale/messages.es.xlf",
      ...
    }
  }