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