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