是否可以覆盖一个特定 intl.formatMessage 的语言环境?

Posted

技术标签:

【中文标题】是否可以覆盖一个特定 intl.formatMessage 的语言环境?【英文标题】:Is it possible to override locale of one specific intl.formatMessage? 【发布时间】:2018-08-12 18:22:39 【问题描述】:

我将react-intlenfr 一起使用,我的React 应用程序包含在

<IntlProvider locale=lang>

所以例如当langen 时,所有intl.formatMessage 调用都会产生英文文本。

我想要实现的是我想要&lt;IntlProvider locale="en"&gt;,但在应用程序内部,我需要将一个特定的intl.formatMessage 翻译成fr

【问题讨论】:

如果你有两种语言的翻译 JSON 文件,你能不能把 fr 放在对应的 en 翻译里面? 感谢您的提示,但我需要在同一页上同时访问同一文本的 enfr 版本,例如喜欢一起打印“Good day”和“Bon Jour”(都定义为例如messages.hello)。 浏览了他们的文档/问题,没有发现任何重要的东西。也许你可以继续为这个问题创建一个问题..他们可能有一个解决方法.. 【参考方案1】:

可以在同一个容器中添加多个IntlProvider。您必须为每个语言环境和消息定义。 这里只是一个带有 FormattedMessage 的示例,但它可以是更大的元素:

<div>
  <IntlProvider locale='en' messages=messagesEn >
    <FormattedMessage value=message.hello />
  </IntlProvider>

  <IntlProvider locale='fr' messages=messagesFr >
    <FormattedMessage value=message.hello />
  </IntlProvider>
</div>

【讨论】:

嗯,我真正需要的是将一个 IntlProvider 嵌入到另一个中,如下所示:gist.github.com/petervojtek/c79bb05643f33dc0e44d1b993569f1d9 但这似乎不起作用,内部翻译也是英文,控制台中的警告说“[ React Intl] 错误格式化消息:“app.hello”,区域设置:“fr”,使用默认消息作为后备。TypeError:消息必须以字符串或 AST 的形式提供。” 消息是这样指定的:gist.github.com/petervojtek/c30fe6553bb6c1a6d520e326c9537f38

以上是关于是否可以覆盖一个特定 intl.formatMessage 的语言环境?的主要内容,如果未能解决你的问题,请参考以下文章

nodeJS proxyquire 覆盖 require 的特定功能

需要覆盖非抽象类的特定方法

在 UIImage 上突出显示(覆盖)特定区域

你可以覆盖 AngularUI Bootstrap 中的特定模板吗?

createMuiTheme 覆盖,用于特定的组件样式

是否可以防止 C 共享库中的函数覆盖?