2016-02-24 3 views
7

Я недавно читал very interesting article от @yearofmoo о Angular2 Renderer. Это дало мне представление о том, что можно сделать i18n с Renderer. В основном использует эту функцию:Использование Renderer для i18n?

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

и просто превратить value путем отображения его на другой язык:

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

value = "Hello" 
value = es[value] 

я кратко смотрел на issues и design docs, но прежде чем идти по этой кроличьей норе Я хотел проверить если у кого-то есть опыт с этим.

Есть ли проблемы, которые могут помешать этому работать? Какие-то нарушения в пути, о которых я не знаю? Мнения об этом подходе?

+0

Не должно быть проблем, поскольку Renderer - это то, что мы должны использовать, поскольку безопасен для веб-мастеров. Нарушение изменений ... не могу сказать точно, я не думаю, что Renderer будет сильно меняться со временем, если это вообще произойдет. i18n будет поддерживаться в медицине, это будет для меня «пробкой», но это мое мнение, и игра с угловым2 не является неправильной. –

+0

Соглашаться с Günter и Thierry, спасибо, что поделились Sasxa! – Langley

+0

np guys (; @EricMartinez, Хорошая точка для официальной поддержки, надеюсь, они не делают ее слишком сложной/надежной. Я попытаюсь сыграть с Renderer для транслитерации на данный момент ... – Sasxa

ответ

1

Мы используем Renderer для установки перевода, предоставленного атрибутом.

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

Смотрите plunker для демо

Надеюсь, это то, что вы где искали.