2014-10-09 15 views
7

Die Frage sagt alles. Wenn ich setze HTML direkt in die (JSON-Format) Übersetzungsdatei, wie folgt aus:node.js: Gibt es keine Möglichkeit, HTML in JSON-Übersetzungsdateien des i18n-Knotens zu schreiben?

"test_html" : "click <a href='http://stackoverflow.com/'>here</a>", 

bekomme ich diese in meinem HTML:

click &lt;a href=&#39;http://stackoverflow.com/&#39;&gt;here&lt;/a&gt; 

Ich habe auch versucht, diese Datei in meiner Übersetzung kombiniert:

"test_html_placeholder" : "click %shere%s", 

Mit diesem in meinem HTML:

<%= __('test_html_placeholder', '<a href="http://stackoverflow.com">', '</a>') %> 

Aber ähnliche Ergebnisse.

Das einzige, was ich an der Arbeit bekommen kann, ist diese Ungeschicklichkeit:

"test_html_pre" : "click ", 
"test_html_link" : "here", 
"test_html_post" : ".", 

mit diesem:

<%= __('test_html_pre') %><a href="http://stackoverflow.com"><%= __('test_html_link') %></a><%= __('test_html_post') %> 

Aber es ist so mühsam, da fast nicht wert zu sein, zu tun, und darüber hinaus die Wortfolge in einigen Sprachen würde mich zwingen, einige leere Zeichenfolgen in meine Übersetzungsdateien zu legen, die i18n-Knoten scheint nicht zu mögen, wie es spuckt den Schlüssel (Attribut) Name, wenn es trifft eine leere Zeichenfolge.

Ich habe auch versucht, "\" als Escape-Zeichen vor den Symbolen zu verwenden, aber ich habe einen ungültigen JSON-Fehler erhalten, als ich Segel hob (Neustart des Servers).

Irgendwelche Ideen, Workarounds? Ich benutze sails.js, es war nicht meine Entscheidung, aber ich bleibe dabei und es kommt mit i18n-Knoten. Es ist spät am Tag bei diesem Projekt, über die Verwendung einer anderen Bibliothek nachzudenken, aber nicht völlig ausgeschlossen.

Antwort

9

neben jeder anstehenden Diskussion, ob enthalten (HTML-) Code in Sprachdateien oder nicht:

try

<%- __('<a href="#">click</a>') %> 

zu verwenden, statt

<%= __('<a href="#">click</a>') %> 

in EJS (die sails standard template engine) a '<% =' wird alle HTML-Tags verlassen, während '<% -' die Ausgabe so wie sie ist, ohne sie zu berühren. Ich bin mir ziemlich sicher, dass Sie in Ihren .json-Dateien nicht entpackten HTML-Code finden. i18n führt keine andere Umwandlung durch als JSON.stringify(), aber fast alle Vorlagen-Engines entziehen Strings standardmäßig, um xssi zu verhindern.

+0

verwenden „neben jeder anstehenden Diskussion, ob enthalten (HTML-) Code in Sprachdateien oder nicht:“ Sie scheinen es eine schlechte Idee zu sein Hinting aus anderen Gründen, vermutlich Wartbarkeit? Gibt es bei Out-of-the-Box-Segeln eine andere Möglichkeit, HTML aus meinen Sprachdateien herauszuhalten? – jasper

+1

natürlich diese eigensinnig, aber als Faustregel benutze ich Sprachdateien nur für kurze und vollständige Phrasen und versuche sie vom Kontext zu trennen. Die nächsten größeren Sätze gehen in Teil- oder sogar in getrennte Ansichten. Aber: um nur zu übersetzen "klick here" 'Ich würde auch meine eigenen Regeln brechen :) –

+0

@jasper Hast du das jemals gelöst?Finden Sie eine andere Lösung als den "Hack", den Sie in Ihrer Frage erwähnt haben? – olefrank

0

Für diejenigen mit Mops/Jade, können Sie

!{ __('key_for_your_text') }