2014-10-09 80 views
7

这个问题说明了一切。如果我把HTML直接进入(JSON格式)转换文件,像这样:node.js:有没有办法将HTML放入i18n-node 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节点。这个项目当天晚些时候考虑使用另一个图书馆,但并非完全没有问题。

回答

9

任何即将讨论的旁边是否包含在语言文件(HTML的)代码或不:

尝试使用

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

,而不是

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

在EJS(中sails默认模板引擎)'<%='会转义任何html标签,而'<%'''会将输出作为原样而不触及它。我很肯定你会在你的.json文件中找到非转义的html。除了JSON.stringify()之外,i18n不会进行任何转换,但几乎所有模板引擎都会默认转义字符串以防止xssi。

+0

“任何即将讨论的旁边是否包含在语言文件(HTML的)代码或不:”你似乎在暗示这是一个坏主意由于其他原因,推测可维护性? out-of-the-box sails是否让我有一些其他的方式来保持我的语言文件中的HTML? – jasper 2014-10-09 10:04:26

+1

当然这是自以为是的,但作为经验法则,我只使用短语和完整短语的语言文件,并尝试将它们与上下文分开。接下来较大的短语会进入部分或甚至分开的视图。但是:只是翻译'“点击here”'我也打破我自己的规则:) – 2014-10-12 11:07:31

+0

@jasper你有没有解决这个问题?也就是说,找到你在问题中提到的“黑客”以外的解决方案? – olefrank 2016-05-13 11:41:21

0

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

!{ __('key_for_your_text') }