2016-02-24 12 views
7

Ich lese kürzlich very interesting article von @yearofmoo über Angular2 Renderer. Es gab mir eine Idee, dass es möglich sein könnte, i18n mit Renderer zu tun. Grundsätzlich verwenden Sie diese Funktion:Verwenden des Renderers für i18n?

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

und einfach verwandeln value, indem es andere Sprache abbildet:

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

value = "Hello" 
value = es[value] 

Ich schaute kurz auf die issues und design docs, aber bevor diese Kaninchenbau hinunter wollte ich überprüfen wenn jemand Erfahrung damit hat.

Gibt es irgendwelche Probleme, die dies verhindern könnten? Einige brechen Änderungen auf dem Weg, die mir nicht bewusst sind? Meinungen zu diesem Ansatz?

+0

Es sollte keine Probleme geben, da Renderer ist, was wir verwenden sollten, da webworkers sicher ist. Breaking Changes ... kann ich nicht mit Sicherheit sagen, ich glaube nicht, dass Renderer sich im Laufe der Zeit drastisch ändern wird, wenn es überhaupt passiert. I18n wird offiziell unterstützt, das wäre für mich wie ein "Stopper", aber das ist meine Meinung und das Spielen mit angular2 ist überhaupt nicht falsch. –

+0

Vereinbaren Sie mit Günter und Thierry, vielen Dank für Ihren Besuch bei Sasxa! – Langley

+0

np guys (; @EricMartinez, Guter Punkt für offizielle Unterstützung, hoffentlich machen sie es nicht zu komplex/robust. Ich werde versuchen, mit Renderer für Transliteration zu spielen ... – Sasxa

Antwort

1

Wir verwenden Renderer, um eine Übersetzung festzulegen, die von einem Attribut bereitgestellt wurde.

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

Siehe plunker für Demo

Hoffentlich ist das, was Sie wo suchen.

Verwandte Themen