如何处理React-Intl消息的多次使用?

时间:2016-01-19 12:24:49

标签: reactjs react-intl

我在react-intl文档(我正在使用v2分支)中找不到关于此类用法的任何内容,因此这个问题。对于以下用例,是否有推荐的方法?

假设我有2个组件,TooltipSelect。两者都需要相同的i18n格式字符串,例如:

<FormattedMessage
    id='ui.widget.cycleOffsetSelector.timeCycle.label'
    defaultMessage="This {cycle}"
    values={{cycle: props.cycle}}
/>

如何在其他组件中使用相同的消息?只是用这个:

<FormattedMessage
    id='ui.widget.cycleOffsetSelector.timeCycle.label'
    values={{cycle: props.cycle}}
/>

不起作用(不应该:))。那么,这样做的正确方法是什么? 我是否必须在我的应用程序中全局保存这些共享消息?因为保持与代码分开的“共享”intl消息列表变得很麻烦,react-intl声称要解决的问题。

1 个答案:

答案 0 :(得分:6)

在react-intl v2中,消息ids是静态的,所以没有2个ID可以是相似的。我们的想法是将组件中使用的资产保留在同一个文件中,以便于开发。然后在构建时提取字符串以进行翻译。很多时候,这个问题可以通过创建更高阶组件(HOC)或创建要重用的组件而不是重用消息字符串来解决。

如果无法创建HOC,可以采用以下几种方法来处理此问题:

您可以在集中式消息文件中使用defineMessages()来定义您重复使用的公共字符串,并保留仅适用于这些组件中特定组件的字符串。

命名空间ID也是一种可能性。

  

ui.widget.cycleOffsetSelector.timeCycle.select.label   ui.widget.cycleOffsetSelector.timeCycle.tooltip.label