是否可以覆盖一个特定 intl.formatMessage 的语言环境?
Posted
技术标签:
【中文标题】是否可以覆盖一个特定 intl.formatMessage 的语言环境?【英文标题】:Is it possible to override locale of one specific intl.formatMessage? 【发布时间】:2018-08-12 18:22:39 【问题描述】:我将react-intl
与en
和fr
一起使用,我的React 应用程序包含在
<IntlProvider locale=lang>
所以例如当lang
为en
时,所有intl.formatMessage
调用都会产生英文文本。
我想要实现的是我想要<IntlProvider locale="en">
,但在应用程序内部,我需要将一个特定的intl.formatMessage
翻译成fr
。
【问题讨论】:
如果你有两种语言的翻译 JSON 文件,你能不能把fr
放在对应的 en
翻译里面?
感谢您的提示,但我需要在同一页上同时访问同一文本的 en
和 fr
版本,例如喜欢一起打印“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 的特定功能