动态添加文本的i18n翻译

时间:2017-02-06 13:59:05

标签: javascript node.js internationalization node-modules i18n-node

刚开始使用i18n在Node中翻译我的网站。我有点失去了如何翻译在DOM加载和呈现玉文件后生成的文本(比如在用户点击按钮之后)。

据我所知,i18n是一个服务器端模块,我生成的新文本是在客户端。

如果有帮助,我也会跑快递。

我想要做的是能够翻译客户端由javascript生成的文本。考虑一个任意按钮:

INDEX.JADE
    form.feedback-r
        a#submitclientiddd.button.button-primary #{i18n.__('Reply')}
    // Other Jade Stuff Here
    script(src='javascripts/clientside.js', type='text/javascript')

CLIENT SIDE JS
    $("#posts").on("submit", "form.feedback-r", function(e) {
        actbutton.html("Sending").addClass("feedback").removeClass('send_reply').prop("disabled", true);
    });
... AJAX FUNCTION REQUEST AND ON SUCCESS ...
        actbutton.html("Reply").addClass("success-text").prop("disabled", false);

SERVER SIDE JS
    res.render('index', { title: 'Page Title', i18n: res});
  1. 由jade通过i18n呈现的第一个按钮文本 (i18n .__('回复'))并正确翻译
  2. 用户点击按钮
  3. 通过jQuery更改文本以读取"发送"以及在AJAX请求之后 回到"回复"
  4. 按钮文本不再翻译,因为它是动态的 产生
  5. 有没有办法在客户端使用i18n来解决这个问题?在最理想的情况下,我想在客户端执行此操作,但是&#&# 39;不工作:

    actbutton.html(i18n.__('Reply'));
    

2 个答案:

答案 0 :(得分:0)

  1. 我建议从这里开始:https://www.npmjs.com/package/i18n-express 在这个页面中,你会找到我推荐的这个包的开始说明。

  2. JSON文件应保存已翻译的键/值字符串(无论其处于哪个级别)。

  3. 工作解决方案:

  4.   

    我想要做的是能够翻译客户端JavaScript生成的文本。

    在这种情况下,您需要操作模板(视图)中的现有数据,因为i18模块在服务器端运行。

    例如,您可以将翻译后的文本存储在data-sent属性中的此按钮之后,如下所示:

    //-INDEX.JADE
    form.feedback-r
        a#submitclientiddd.button.button-primary(data-reply-text='#{i18n.__('Reply')}', data-sending-text='#{i18n.__('Sending')}') #{i18n.__('Reply')}
    
    //-CLIENT SIDE JS
    var sending_text = $('a#submitclientiddd').attr('data-sending-text');
    $("#posts").on("submit", "form.feedback-r", function(e) {  actbutton.text(sending_text); });
    
    //-AJAX FUNCTION REQUEST AND ON SUCCESS 
    var reply_text = $('a#submitclientiddd').attr('data-reply-text');
    actbutton.text(reply_text); //(back to reply text)
    

答案 1 :(得分:0)

我设法通过将browser-i18n安装到我的公共javascript文件夹(而不是通过NPM),然后在节点上使用与客户端相同的功能来解决这个问题。

唯一的问题是browser-i18n看起来不支持范围值,如:[0]回复| [1,]回复。 i18n-for-browser可能是一种可能的解决方案。