刚开始使用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});
有没有办法在客户端使用i18n来解决这个问题?在最理想的情况下,我想在客户端执行此操作,但是&#&# 39;不工作:
actbutton.html(i18n.__('Reply'));
答案 0 :(得分:0)
我建议从这里开始:https://www.npmjs.com/package/i18n-express 在这个页面中,你会找到我推荐的这个包的开始说明。
JSON文件应保存已翻译的键/值字符串(无论其处于哪个级别)。
工作解决方案:
我想要做的是能够翻译客户端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可能是一种可能的解决方案。