我有一个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实例?