在JSON字符串中响应i18n中断行

iszxjhcz  于 2023-01-18  发布在  其他
关注(0)|答案(7)|浏览(118)

我正在使用i18 next来实现react https://github.com/i18next/react-i18next,我很难在JSON语言文件的字符串中换行。
这是我已经尝试过的方法,没有换行:

  • line: "This is a line. \n This is another line. \n Yet another line"

  • line: ("This is a line."+ <br/> + "This is another line. \n Yet another line")

  • line: ('This is a line. <br/> This is another line. \n Yet another line')

很明显,我会在每句话后加一行,我是这么说的:

<TooltipLink onClick={() => {
    this.toggleHelpTextDialog(t('test:test.line'));
}}/>

有什么主意吗?谢谢!

z6psavjg

z6psavjg1#

您可以在翻译文本中使用css white-space: pre-line; & \n来完成。

const root = document.getElementById('root');

i18next.init({
  lng: 'en',
  resources: {
    en: {
      translation: {
        "key": "Hello world\nThis sentence should appear on the second line"
        // ----------------^ new line char
      }
    }
  }
}, function(err, t) {
  // initialized and ready to go!
  root.innerHTML = i18next.t('key');
});
#root {
  white-space: pre-line;
}
<script src="https://unpkg.com/i18next@15.0.9/dist/umd/i18next.min.js"></script>

<div id="root"></div>
yqkkidmi

yqkkidmi2#

你也可以用CSS来做,这很容易做到:
CSS:

#root {
  white-space: pre-line;
}

超文本:

<script src="https://unpkg.com/i18next@15.0.9/dist/umd/i18next.min.js"></script>

<div id="root"></div>

它会将翻译JSON中的\n解释为换行符!!!

7dl7o3gd

7dl7o3gd3#

例如,您在JSON语言文件中编写以下文本。
文本:"你好\n你好吗?\n你在做什么?"
然后在返回部分写入

<div id='app'><div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<script>
      render() {
          return (
              text.split('\n').map(c => {
                  return ( <p> {c} </p>) 
                   });
                 )
               }
              

              ReactDOM.render(
                <BreakLine / >
                document.getElementById('app')
              )
</script>

好吧,当调用split方法时,试着创建列表并从'\n'中分离出来,用方法Map在段落中键入它们中的每一个,这样就可以换行了;))

rsaldnfx

rsaldnfx4#

对于更复杂的情况,您可以使用<Trans />组件和任何HTML标记,甚至可以创建自定义标记。
示例:

<Trans
  components={{ boldSpan: <MyTextComponent strong component="span" variant="body" /> }}
  i18nKey="YourNamespace:TEXT_KEY"
/>

而您的JSON文件(YourNamespace.json):

{
  "TEXT_KEY" : "<boldSpan>Lorem ipsum</boldSpan><br/>",
}

有关详细信息,请查看此处:https://react.i18next.com/latest/trans-component

krcsximq

krcsximq5#

可以专门向工具提示链接样式添加:

white-space: pre-line;

那么,您的\n in语言环境将起作用。

ni65a41a

ni65a41a6#

你可以像这样简单地使用dangerouslySetInnerHTML

{"text":"first <br/> second"}

那么

<div dangerouslySetInnerHTML={{ __html: t('text') }}></div>
daupos2t

daupos2t7#

对于那些不想在其React组件中添加css代码的用户,可以使用react-i18next package中的Trans组件。
创建类似于以下内容的转换键值:

{
  "message": "This is a line.<1/>This is another line.<1/>Yet another line"
}

然后,在React组件中,使用<Trans/>组件,如下所示

<Trans i18nKey="message" components={{ 1: <br /> }} />

平移值将呈现为

参见https://github.com/i18next/react-i18next/issues/282

相关问题