【问题标题】:node.js: is there no way to put HTML into i18n-node JSON translation files?node.js:有没有办法将 HTML 放入 i18n-node JSON 翻译文件中?
【发布时间】:2014-12-03 20:55:07
【问题描述】:

问题说明了一切。如果我将 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。在这个项目上考虑使用另一个库有点晚了,但并非完全不可能。

【问题讨论】:

    标签: html node.js anchor sails.js i18n-node


    【解决方案1】:

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

    尝试使用

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

    而不是

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

    在 ejs(sails 默认模板引擎)中,'JSON.stringify() 之外不做任何转换,但几乎所有模板引擎都会默认转义字符串以防止 xssi。

    【讨论】:

    • "除了即将讨论是否在语言文件中包含 (html-) 代码之外:"您似乎暗示这是一个坏主意,因为其他原因,大概是可维护性?开箱即用的风帆是否为我提供了一些其他方法来将 HTML 排除在我的语言文件之外?
    • 当然这是固执己见,但根据经验,我只将语言文件用于简短和完整的短语,并尝试将它们与上下文分开。下一个更大的短语进入部分甚至分离的视图。但是:只翻译"click &lt;a href='http://stackoverflow.com/'&gt;here&lt;/a&gt;" 我也会违反我自己的规则:)
    • @jasper 你解决过这个问题吗?也就是说,找到您在问题中提到的“hack”以外的解决方案?
    【解决方案2】:

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

    !{ __('key_for_your_text') }
    

    【讨论】:

      【解决方案3】:

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

      p!= __('key_for_your_text')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-15
        • 2020-09-23
        • 2011-09-02
        • 2017-09-10
        • 2020-12-20
        相关资源
        最近更新 更多