我目前正在开发一个音乐平台,使用 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 更好,尤其是对于移动设备,我会喜欢保持这种状态。
任何想法或来源?