next-intl
(以及其他一些反应翻译工具)不提供了一种直接在组件内部定义默认消息的方法?
例如:
next-intl
的用法如下:
/* obtain the t from some hook etc. */
const content = (
<>
<h1>{t('title')}</h1>
<p>{t('text')}</p>
</>
);
同时
react-intl
:
/* import FormattedMessage from react-intl */
const content = (
<>
<h1><FormattedMessage id="title" defaultMessage="Hi there!" /></h1>
<p><FormattedMessage id="text" defaultMessage="Since when is developing frontend such a pain?" /></p>
</>
);
没有直接在组件内部定义默认消息的原因是什么?是捆绑包的大小吗?如果是这样,是否有一些工具可以从生产版本中删除默认消息?
手动将新的密钥和消息添加到相关的 json 对我来说感觉像是一个巨大的退步。
谢谢您的澄清。
不是该包的作者,但对我来说这是有道理的。
提供默认消息意味着字符串始终会发送给用户,除非您按照您所说的使用一些解决方法。
如果您已本地化所有字符串,则该包的工作方式是您只能发送本地化的字符串,而不能发送其他内容。所以它与捆绑包大小相关。
请注意,您仍然可以像这样加载默认区域设置:
import { getMessages } from "next-intl/server";
import { NextIntlClientProvider } from "next-intl";
import deepmerge from "deepmerge";
const userMessages = await getMessages();
const defaultMessages = await getMessages({ locale: "en" });
const messages = deepmerge(defaultMessages, userMessages);
<NextIntlClientProvider messages={messages}>{...}</NextIntlClientProvider>