我有一个静态文件名为translations.json,其中包括我的翻译:
{
"common": {
"greeting": "We will see you at NEW YORK in the morning!"
}
}
在我的react代码中,我一直在按照下面的路线做一些事情:
<p>{translate('common.greeting')}</p>
然而,我希望"纽约"这个词是粗体的。我做了一些研究,我看到Trans
组件可能是我要找的,但我没有运气。我打算把翻译分成3部分... greetingIntro
,grettingBold
,和grettingEnd
...
有人能给我指一下正确的方向吗?
5条答案
按热度按时间wh6knrhe1#
@adrai和@xec已经回答了这个问题,但我觉得还是太复杂了。
所以这个答案的简单版本是......在你的代码中使用这个:
在JSON中是这样的:
完整文档可在https://react.i18next.com/latest/trans-component上获得
我的版本是:
2admgd592#
感谢@adrai在评论中给出了答案,我想我还是把它写在这里给以后的访问者看吧;
在https://react.i18next.com/latest/trans-component阅读完整文档
您可以使用
react-i18next
中的<Trans>
组件我假设“纽约”文本应该是动态的(容易替换),如果不是,你就不需要
values
部分。然后,在语言环境JSON文件中,您可以使用
<N>
作为索引号N处的JSX标记的占位符(在<Trans>
标记中使用),并使用{{key}}
作为任何动态值(如本例中的city)字符串从
0
开始被分割成索引部分,第一部分(索引0
)是文本"We will see you at "
,第二部分(索引1
)是<strong>
元素。<Trans>
组件内的文本仅在未找到翻译时用作后备,但<strong>
标记将替换<1>
占位符。更新:根据文档,自版本10.4.0起,您还可以直接在文本中使用一些标记:
['br', 'strong', 'i', 'p']
,但从不嵌套,也没有属性。也可以参见Aleksandar Sadzak的回答。wdebmtf23#
从v11.6开始,它们具有列出组件的替代样式:
它们是例子:
这可能是这样的:
ac1kyiln4#
拆分句子会破坏翻译的目的,如果另一种语言要求拆分部分以不同的顺序怎么办?
另外,我不喜欢Trans组件,因为您需要在默认JSON和React代码中维护翻译。
我建议使用嵌入式HTML,但是如果您在翻译中有用户输入要小心,因为它应该手动转义。
在您的情况下,由于您没有任何用户输入,只需执行以下操作:
Json:
React:
uqjltbpv5#
对于任何在2023年使用
next-18next
解决此问题的人。我使用:翻译文件
public/locales/<locale>/common.json
页面文件
pages/index.js
结果
包含某个替换值和 * 另一个替换值 * 的句子。
注意️
确保从
next-i18next
而不是react-i18next
导入Trans
,否则您将得到水合错误,因为转换发生在客户端而不是服务器端。