1

刚开始使用 i18n 在 Node.js 中翻译我的网站。我有点不知道如何翻译在加载 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. 翡翠通过 i18n 使用 (i18n.__('Reply')) 渲染的第一个按钮文本并正确翻译
  2. 用户点击按钮
  3. 文本通过 jQuery 更改为“Sending”,并在 AJAX 请求后返回“Reply”
  4. 按钮文本不再翻译,因为它是动态生成的

有没有办法在客户端使用 i18n 来解决这个问题?在最理想的情况下,我只想在客户端执行此操作,但它不起作用:

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

2 回答 2

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

  2. JSON 文件应包含已翻译的键/值字符串(无论它位于哪个级别)。

  3. 工作解决方案:

我想要做的是能够在客户端翻译由 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)
于 2017-02-06T14:02:41.803 回答
0

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

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

于 2017-02-08T11:39:47.580 回答