reactjs - 如何使用 react-i18next Trans 组件编写默认翻译,即使用插值变量时有效的 JSX?
问题描述
我正在尝试使用 i18next 和 react-18next 翻译硬编码文本(没有 i18n)。因为我要翻译的内容本身包含节点,所以我使用 Trans 组件。
我还想自动注册缺少的 i18n 翻译,以便将其正确添加到 Locize。(我正在使用 Locize 后端,它会自动创建缺少的键,因此我不必手动执行)
t
首先,当内容不包含任何节点时,我将展示如何使用组件进行操作。
<Heading
header={t('heading1, `Garant N°{{number}}`, {number})}
>
在 i18n 之前我有Garant N°${number}
,现在我有Garant N°{{number}}
, wherenumber
是在运行时插值的。这与 react 配合得很好,并且 i18n 键heading1
会自动添加到 Locize 中,并Garant N°{{number}}
作为我的默认语言的翻译。
现在,让我们看看我应该如何处理包含节点的内容,因此何时必须使用 Trans:
Hello {name}, you can subscribe
<a
href={'#'}
onClick={this.doSomething}
>here</a>{' '}
to fetch your discount
在 i18n 之后:
<Trans
i18nKey={'myKey'}
values={{
name: 'John',
}}
>
Hello {{name}}, you can subscribe
<a
href={'#'}
onClick={this.doSomething}
>here</a>{' '}
to fetch your discount
</Trans>
使用{{name}}
是 i18next 内部预期的执行插值,但它不是有效的 JSX,因为 react 会认为name
是一个 JS 变量,如果变量未定义,它会在运行时抛出错误,它也会显示在我的 IDE 中变量未定义(警告)。如果定义{name}
了变量,它将被变量替换,这将硬编码默认翻译。这样不好。
我不知道如何解决这个问题,我可以使用另一个字符进行插值(而不是{}
),但这需要我更新所有现有的代码,这很容易出错且很麻烦 + 所有翻译都依赖于变量。
解决方案
<Trans
i18nKey={'myKey'}
>
Hello {{name: 'John'}}, you can subscribe
<a
href={'#'}
onClick={this.doSomething}
>here</a>{' '}
to fetch your discount
</Trans>
应该管用
推荐阅读
- python - Precurse with open() or .write()?
- javascript - Can a button handle multiple actions?
- python - Error when transforming my Python code to .EXE using Auto Py to Exe
- javascript - Tooltip moves further from mouseover location as I scroll HTML page
- r - R: Concatenating a string to every column in a row (excluding col 1, variable col length, the string is held in col 1 of each row)
- react-native - 使用@terrylinla/react-native-sketch-canvas 发送画布图像
- reactjs - 尝试添加 & { session: Express.Session } 以在遵循 React、Express 和 Typescript 教程时键入 MyContext 时出现“没有导出成员”错误
- java - Spring Boot 应用程序 DispatcherServlet 的入口点没有响应
- html - 超过 h1 内联网格模板区域
- python - 将对 (i,0) 添加到升序损坏的列表中