i18next翻译显示为Unicode十六进制字符。

8

我正在使用i18next来处理我正在开发的项目中的翻译。我发现当我把一个包含/的字符串传递给翻译时,它会被转换为unicode十六进制代码/

我将title设置为:

const title = '2/Double/Twin/Triple/Quadrupple'

翻译被称为如下:
{i18n.t('foo', {
  title,
  amount: '$18'
})}

翻译的设置如下:

{
  "foo": "foo bar {{title}} howdee {{amount}}"
}

然而输出结果为:
Foo bar 2/Double/Twin/Triple/Quadrupple howdee $18

我该如何确保字符不会被转换为它们的十六进制代码等价物?
1个回答

19

默认情况下,i18next会转义内容以避免基于用户输入的xss攻击。您可以通过在前面添加-或提供转义标志来关闭转义。

{
  "foo": "foo bar {{- title}} howdee {{amount}}"
}
或者
{i18n.t('foo', {
  title,
  amount: '$18',
  interpolation: { escapeValue: false }
})}

https://www.i18next.com/interpolation.html#unescape


太好了。我在文档中找不到这个。感谢你提醒我。 - oldo.nicho
1
四年后,你刚刚为我节省了数小时的调试时间,谢谢 :) - Christoph Blüm
这是更新后的文档链接:https://www.i18next.com/translation-function/interpolation - e-shfiyut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接