用Renderer做i18n?

Sas*_*sxa 7 internationalization angular

我最近阅读了@yearofmoo关于Angular2 Renderer的非常有趣的文章.它给了我一个想法,可以用Renderer做i18n .基本上使用这个功能:

  createText(parentElement: any, value: string): any {
    // this is called for every text node in the template
  }
Run Code Online (Sandbox Code Playgroud)

value通过将其映射到不同的语言进行简单转换:

let es = { "Hello": "Hola" }

value = "Hello"
value = es[value]
Run Code Online (Sandbox Code Playgroud)

我简要地看了一下这些问题设计文档,但在走下这个兔子洞之前,我想检查是否有人对此有任何经验.

是否有任何问题可能导致无法正常工作?在我不知道的方式上有一些突破性的变化?关于这种方法的意见?

小智 1

我们使用渲染器来设置由属性提供的翻译。

import { Directive, ElementRef, Input, Renderer, OnInit} from '@angular/core';
import { TranslateService } from './translate.service';

@Directive({ selector: '[translate]' })
export class TranslateDirective  implements OnInit{

    @Input() translate :string;

   constructor(private el: ElementRef, private renderer: Renderer, private _translateService : TranslateService) {}

   ngOnInit(): void {
        this.renderer.setText(this.el.nativeElement,this._translateService.instant(this.translate));
   }
}
Run Code Online (Sandbox Code Playgroud)

请参阅plunker的演示

希望这就是您正在寻找的东西。