9

这个问题说明了一切。如果我将 HTML 直接放入(JSON 格式的)翻译文件中,如下所示:

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

我在我的 HTML 中得到了这个:

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

我也尝试在我的翻译文件中结合这个:

"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-node。在这个项目上考虑使用另一个库有点晚了,但并非完全不可能。

4

3 回答 3

14

除了任何即将讨论的是否在语言文件中包含(html-)代码之外:

尝试使用

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

代替

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

在 ejs(sails 默认模板引擎)中,'<%=' 将转义任何 html 标记,而 '<%-' 将输出按原样放置而不触及它。我很确定您会在 .json 文件中找到未转义的 html。i18n 不做任何转换,JSON.stringify()但几乎所有模板引擎默认都会转义字符串以防止 xssi。

于 2014-10-09T09:03:46.450 回答
2

对于那些使用哈巴狗/玉,你可以使用

!{ __('key_for_your_text') }
于 2017-12-07T00:29:33.580 回答
0

哈巴狗的另一个选择是使用

p!= __('key_for_your_text')
于 2020-03-11T10:43:38.213 回答