2014-10-09 8 views
7

To pytanie mówi wszystko. Jeśli mogę umieścić kod HTML bezpośrednio do (w formacie JSON) pliku tłumaczenia, tak:node.js: czy nie ma sposobu na umieszczenie kodu HTML w plikach tłumaczeniowych JSON i18n-node?

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

mam to w moim HTML:

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

Próbowałem też łącząc to w moim pliku tłumaczenia:

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

Mając to w moim HTML:

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

Ale otrzymałem podobne wyniki.

Jedyne co mogę dostać się do pracy jest to niezręczność:

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

z tym:

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

Ale to tak uciążliwe, że prawie nie warto robić, a ponadto szyk w niektórych językach zmusiłoby mnie do umieszczenia pustych ciągów w plikach tłumaczeniowych, co wydaje się nie podobać węzłowi i18n, ponieważ wypowiada nazwę klucza (atrybutu), gdy napotka pusty ciąg.

Próbowałem również używać "\" jako znaku escape przed symbolami, ale dostałem nieprawidłowy błąd JSON, gdy podniosłem żagle (zrestartowałem serwer).

Jakieś pomysły, obejścia? Używam pliku sails.js, to nie była moja decyzja, ale utknąłem z tym i pochodzi z węzła i18n. Późnym tego dnia jest rozważenie korzystania z innej biblioteki, ale nie całkiem wykluczone.

Odpowiedz

9

obok każdej zbliżającej się dyskusji, czy to (w formacie HTML) kod plików językowych czy nie:

spróbuje użyć

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

zamiast

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

w EJS (The domyślny silnik szablonów), a '<% =' usunie wszystkie znaczniki html, a '<% -' wyświetli dane bez ich dotykania. Jestem prawie pewny, że znajdziesz plik HTML bez znaków zmiany znaczenia. i18n nie wykonuje żadnej transformacji innej niż JSON.stringify(), ale prawie wszystkie silniki szablonów domyślnie usuwają łańcuchy, aby zapobiec xssi.

+0

„obok każdej zbliżającej się dyskusji, czy to (formacie HTML) kod w plikach językowych, czy też nie:” Wydaje się, że dając do zrozumienia, że ​​to zły pomysł z innych powodów, przypuszczalnie łatwości utrzymania? Czy gotowe żagle dają mi jakiś inny sposób na utrzymanie HTML z moich plików językowych? – jasper

+1

oczywiście to opinia, ale z reguły używam plików językowych tylko dla krótkich i pełnych fraz i próbuję oddzielić je od kontekstu. Następne większe wyrażenia dzielą się na częściowe lub nawet na oddzielne widoki. Ale: po prostu przetłumaczyć '" kliknij here "' Ja też łamałbym swoje własne zasady :) –

+0

@jasper Czy kiedykolwiek rozwiązałeś to?To znaczy znaleźć rozwiązanie inne niż "hack", o którym wspomniałeś w swoim pytaniu? – olefrank

0

Dla osób korzystających z mops/jade, można użyć

!{ __('key_for_your_text') } 
Powiązane problemy