使用 react-intl 服务翻译
Serve translations using react-intl
我目前正在工作的项目使用 react-intl
来处理 i18n,我注意到组件以 3 种不同的方式提供格式化消息:
- 使用组件:
<FormattedMessage id="MessageId" />
- 使用函数:
intl.formatMessage({id: "MessageId"})
- 直接使用消息对象:
intl.messages["MessageId"]
我认为方法 #1 和 #2 是可行的方法,但我认为方法 #3 非常有限。
使用#3 有哪些好的理由?
第一种方法是反应方式,如果您使用的是 ReactJS,则推荐使用。 FormattedMessage
组件 uses useIntl
钩子在内部访问 intl
对象(方法 #2):
<FormattedMessage id="GREETING" />
第二种方法直接使用 intl
对象,没有 React 抽象。如果您将 intl API 与其他不受支持的框架集成,请使用此选项。
intl.formatMessage({ id: "GREETING" })
永远不要使用第三种方法。 intl.messages
只是一个普通的 Javascript 对象,它将每个 MessageId
映射到翻译后的文本。你甚至不能使用 ICU Message Formatting。例如:
{
"GREETING": "Hello, {name}"
}
intl.formatMessage({ id: "GREETING" }, { name: "Near" }); // Hello, Near
intl.messages["GREETING"]; // Hello, {name}
我目前正在工作的项目使用 react-intl
来处理 i18n,我注意到组件以 3 种不同的方式提供格式化消息:
- 使用组件:
<FormattedMessage id="MessageId" />
- 使用函数:
intl.formatMessage({id: "MessageId"})
- 直接使用消息对象:
intl.messages["MessageId"]
我认为方法 #1 和 #2 是可行的方法,但我认为方法 #3 非常有限。
使用#3 有哪些好的理由?
第一种方法是反应方式,如果您使用的是 ReactJS,则推荐使用。 FormattedMessage
组件 uses useIntl
钩子在内部访问 intl
对象(方法 #2):
<FormattedMessage id="GREETING" />
第二种方法直接使用 intl
对象,没有 React 抽象。如果您将 intl API 与其他不受支持的框架集成,请使用此选项。
intl.formatMessage({ id: "GREETING" })
永远不要使用第三种方法。 intl.messages
只是一个普通的 Javascript 对象,它将每个 MessageId
映射到翻译后的文本。你甚至不能使用 ICU Message Formatting。例如:
{
"GREETING": "Hello, {name}"
}
intl.formatMessage({ id: "GREETING" }, { name: "Near" }); // Hello, Near
intl.messages["GREETING"]; // Hello, {name}