如何在i18next中将变量用作键?

时间:2019-08-16 23:05:42

标签: javascript node.js i18next

我正在尝试使用变量作为使用i18next进行本地化的键。虽然会返回正确的字符串,但是插值无效。

我尝试使用变量和原始字符串来查看问题的根源。我确信它来自i18n.t()中变量的使用。

return newChannel.guild.channels.get(config.defaultChannel).send(i18n.t(message.content, message.options));

message值由函数返回。这是一个片段:

else if (newChannel.name !== oldChannel.name) {
    return message = {
        content: i18n.t('events:channel.update.name.text'),
        options: { oldChannel: `**#${oldChannel.name}**`, newChannel: newChannel, interpolation: { escapeValue: false }}
    };
}

这是json中的字符串:

"update": {
    "name": {
        "text": "The text channel {{oldChannel}} is now called {{newChannel}}."
    }
}

它输出:The text channel is now called .

1 个答案:

答案 0 :(得分:0)

此代码段看起来不正确:

else if (newChannel.name !== oldChannel.name) {
    return message = {
        content: i18n.t('events:channel.update.name.text'),
        options: { oldChannel: `**#${oldChannel.name}**`, newChannel: newChannel, interpolation: { escapeValue: false }}
    };
}

应该更像是

else if (newChannel.name !== oldChannel.name) {
    return message = {
        content: i18n.t('events:channel.update.name.text'),
        options: { oldChannel: oldChannel.name, newChannel: newChannel.name, interpolation: { escapeValue: false }}
    };
}

请注意两个变量的更改。您能解释一下您试图在映射中做些什么,使您感到需要使用ES6进行字符串插值,而不是仅使用库本身支持的插值吗?