这个问题说明了一切。如果我将HTML直接放入(JSON格式的)翻译文件中,如下所示:
"test_html" : "click <a href='http://stackoverflow.com/'>here</a>",
我在HTML中得到了这个:
click <a href='http://stackoverflow.com/'>here</a>
我也尝试在我的翻译文件中结合这个:
"test_html_placeholder" : "click %shere%s",
在我的HTML中使用它:
<%= __('test_html_placeholder', '<a href="http://stackoverflow.com">', '</a>') %>
但得到了类似的结果。
我唯一可以上班的就是这种笨拙:
"test_html_pre" : "click ",
"test_html_link" : "here",
"test_html_post" : ".",
用这个:
<%= __('test_html_pre') %><a href="http://stackoverflow.com"><%= __('test_html_link') %></a><%= __('test_html_post') %>
但它太笨重了几乎不值得做,而且某些语言中的单词顺序会迫使我在我的翻译文件中添加一些空字符串,i18n-node似乎不喜欢它,因为它吐出来它的关键(属性)名称 遇到一个空字符串。
我也尝试使用“\”作为符号前面的转义字符,但是当我抬起风帆时,我收到了无效的JSON错误(重新启动了服务器)。
任何想法,解决方法?我正在使用sails.js,这不是我的决定,但我坚持使用它,它带有i18n节点。在这个项目的当天晚些时候考虑使用另一个库,但并非完全不可能。
答案 0 :(得分:11)
除了即将讨论是否在语言文件中包含(html-)代码之外:
尝试使用
<%- __('<a href="#">click</a>') %>
而不是
<%= __('<a href="#">click</a>') %>
在ejs(风帆默认模板引擎)a&#39;&lt;%=&#39; &#39;&lt;% - &#39;将会转义任何html代码将输出按原样放置而不触及它。我很确定你会在你的.json文件中找到未转义的html。除了JSON.stringify()
之外,i18n不进行任何转换,但几乎所有模板引擎都默认转义字符串以防止xssi。
答案 1 :(得分:0)
对于使用哈巴狗/玉石的人,可以使用
!{ __('key_for_your_text') }
答案 2 :(得分:0)
哈巴狗的另一个选择是使用
p!= __('key_for_your_text')