2016-04-25 3 views
1

Ich verwende i18n-js, um Locales in meine js App zu laden. Wenn ich die Übersetzungsfunktion aus meiner Sicht benutze, würde ich gerne t('Hello') anstelle von I18n.t('Hello') sagen können. Wie kann ich einen solchen Alias ​​erstellen?Kann ich t() anstelle von I18n.t() in Javascript aufrufen?

import I18n from 'i18n'; 

const Hello =() => { 
    return (
    <div>{I18n.t("hello", {name: "John"})}</div> 
) 
} 
+2

Die "sicherste" Methode ist 'var t = I18n.t.bind (I18n);'. Abhängig davon, wie das Modul genau strukturiert ist, kann es eine kürzere Methode geben oder auch nicht. – deceze

+0

Kühl. Ich habe es in eine 'locales.js'-Datei geschrieben und' module.exports = {I18n, t}; 'also muss ich nur diese eine Datei benötigen. Das scheint gut zu funktionieren. – schwift

+0

Oder vielmehr, muss nur diese eine Funktion in meine Komponentendateien importieren. – schwift

Antwort

0

Sie könnte weisen Sie die t Funktion window:

window.t = I18n.t; 

Dann können Sie einfach t('Hello') verwenden. Als @Thilomentioned kann dies jedoch zu einigen Komplikationen führen.


Eine bessere Alternative ist ein kleines Wrapper zu schreiben:

function t(key){ 
    return I18n.t(key); 
} 

Die beste Option, suggested von @deceze würde diese einzelne Zeile sein:

var t = I18n.t.bind(I18n); 

Single-Line, und sollte unabhängig von der funktionieren scope es ist aufgerufen.

+0

Wenn Sie das tun, stellen Sie sicher, dass "I18n" keine "Klasseninstanz" war, deren Methoden "this" verwenden wollten (um nach Locales oder Konfigurationen oder Ähnlichem zu suchen). – Thilo

+0

@Thilo: Guter Punkt. Ich habe eine Alternative hinzugefügt. – Cerbrus

+0

'var t = I18n.t.bind (I18n);' ist die beste und klarste Wahl –

Verwandte Themen