2016-02-24 21 views
7

Ho letto recentemente very interesting article da @yearofmoo su Renderer Angular2. Mi ha dato l'idea che potrebbe essere possibile fare i18n con Renderer. utilizzare Fondamentalmente questa funzione:Utilizzo di Renderer per fare i18n?

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

e semplicemente trasformare value mappando alla lingua diversa:

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

value = "Hello" 
value = es[value] 

ho guardato brevemente la issues e design docs, ma prima di scendere questa tana del coniglio ho voluto verificare se qualcuno ha qualche esperienza con questo.

Ci sono problemi che potrebbero impedire il corretto funzionamento? Alcuni cambiamenti irrazionali nel modo in cui non ne sono a conoscenza? Opinioni su questo approccio?

+0

Non ci dovrebbero essere problemi in quanto Renderer è quello che dovremmo usare dato che i webworker sono al sicuro. Rompere i cambiamenti ... non posso dirlo con certezza, non penso che Renderer cambierà drasticamente nel tempo, se mai lo farà. i18n sarà supportato ufficialmente, sarebbe come un "tappo" per me, ma questa è la mia opinione e giocare con angular2 non è affatto sbagliato. –

+0

D'accordo con Günter e Thierry, grazie per aver condiviso Sasxa! – Langley

+0

np guys (; @EricMartinez, buon punto per il supporto ufficiale, speriamo che non lo rendano troppo complesso/robusto. Proverò a giocare con Renderer per la traslitterazione per ora ... – Sasxa

risposta

1

Utilizziamo Renderer per impostare una traduzione che è stata fornita da un attributo.

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)); 
    } 
} 

Vedi plunker per demo

Speriamo che questo sia ciò che stavi cercando.