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

How to deal with multiple usage of a React-Intl message?

我在 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}}
/>

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

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

如果创建 HOC 不是一个选项,这里有一些其他方法可以处理此问题:


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


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

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