在快递应用程序中使用i18n +把手,但不生成输出html,如何本地化?

时间:2018-02-20 22:06:05

标签: node.js express internationalization handlebars.js

我有一个Express应用程序,我想在其中使用把手生成本地模板化的电子邮件发送出去。问题是把手需要一个全球注册的帮助器来翻译.hbs文件中的项目,而我需要使用app.use(i18n.init)等构造来确保我的__函数根据在当前请求的上下文中使用右侧语言环境。全局设置区域设置将导致并发问题。

唯一的“解决方案”(这不是因为它们没有解决我的问题)我发现使用手柄中间件来使用Express输出html,但这不是我想要做的。我希望生成的内容完全独立于Express发送回客户端的内容。

这就是我目前正在做的事情,这显然不是这样做的方式

const i18n = require("i18n")
const Handlebars = require('handlebars')
i18n.configure({
  directory: './i18n',
  defaultLocale: 'en',
  objectNotation: true,
  syncFiles: true
})

Handlebars.registerHelper('i18n',
  function (str) {
    if(!str) return str
    return i18n.__(str)
  }
)

用作

<td>
  {{i18n "title"}}
</td>

一种可能的解决方案是通过调用i18n.__({phrase: "someText", locale: locale})在代码中进行翻译,但我想将其保留在模板中。

如何确保把手使用绑定到Express响应对象的i18n实例?

0 个答案:

没有答案