【发布时间】:2017-11-17 05:11:34
【问题描述】:
我目前正在开发一个音乐平台,使用 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 组模板,但每次模板更改时我都必须更改两个视图。这有点无聊,但主要是错误的来源(我现在只有 2 个翻译!)。 我遇到了很棒的“i18n-node”:https://github.com/mashpie/i18n-node 这使得只有一个模板可以使用单独的 JSON 文件(en.json、fr.json)加载正确的翻译。 这个模块在第一次渲染时效果很好,但当然,由于我没有客户端 i18n 支持或支持 i18n 的客户端 ejs,我无法在之后渲染我的模板客户端(以及 ejs 或 i18n)。
我检查了但没有发现一个好的客户端 i18n 库,它会在开始时加载 locale.json 文件,并相应地呈现模板以及 ejs 客户端,你知道吗? 我在 Angular 和 React 上看到过类似的方法,但我没有使用这些方法。
或者也许我只是想错了?我也想过在服务器端渲染模板并直接发送 HTML,但我读过只发送有价值和轻量级的 JSON 数据,然后在客户端渲染它比在性能方面发送完整的 HTML 更好,尤其是对于移动设备,我会喜欢保持这种状态。
任何想法或来源?
【问题讨论】:
标签: node.js ajax client-side ejs i18n-node