使用i18n和ejs进行客户端渲染

时间:2017-06-14 21:35:00

标签: node.js ajax client-side ejs i18n-node

我目前正在开发一个音乐平台,使用NodeJs,Express 4.0和EJS作为我的模板引擎。 因为我们必须让玩家不断地通过我们的网站导航,就像SoundCloud一样,我的网站内容是通过获取JSON数据的AJAX调用动态加载的,并且html通过EJS客户端库呈现在客户端。

现在,我在第一页加载时发送所有模板,对于每个页面请求,我向服务器询问相应的JSON数据,并使用EJS库将其呈现给客户端。

我已经开展了几个月的国际化工作,现在,根据req.acceptsLanguages('fr', 'en'),我提供了两套模板中的一套(位于文件夹fr /或en /中)在初始页面加载时,我的内容随后被客户端加载为:

$.get(view, function (data) { // data is a simple JSON object
    var html = ejs.render(templates.view, data); // Render with EJS client library
    $wrapper.html(html); // Set new HTML
});

虽然我有两套模板,但每次模板更改时我都必须更改两个视图。这有点无聊,但主要是错误的来源(我现在只有2个翻译!)。 我遇到了很棒的i18n-node':https://github.com/mashpie/i18n-node 这使得只有一个模板可以使用单独的JSON文件(en.json,fr.json)加载正确的转换。 这个模块在第一次渲染时运行良好,但当然由于我没有客户端i18n支持或支持i18n的客户端ejs,我无法在之后渲染我的模板客户端(以及ejs或for I18N)。

我检查过但没有找到一个好的客户端i18n库,它会在开头加载locale.json文件,并相应地与ejs客户端一起渲染模板,你知道吗? 我在Angular和React上看到了类似的方法,但我没有使用它们。

或许我只是想错了路?我还考虑过渲染模板服务器端并直接发送HTML,但是我已经读过只发送有价值且轻量级的JSON数据,然后渲染客户端比在性能方面发送完整的HTML更好,特别是对于移动设备,我很想保持这样。

任何想法或消息来源?

1 个答案:

答案 0 :(得分:0)