为什么next-intl没有提供直接在组件中定义默认消息的方法?

问题描述 投票:0回答:1

为什么

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 对我来说感觉像是一个巨大的退步。

谢谢您的澄清。

reactjs next.js internationalization next-intl
1个回答
0
投票

不是该包的作者,但对我来说这是有道理的。

提供默认消息意味着字符串始终会发送给用户,除非您按照您所说的使用一些解决方法。

如果您已本地化所有字符串,则该包的工作方式是您只能发送本地化的字符串,而不能发送其他内容。所以它与捆绑包大小相关。

请注意,您仍然可以像这样加载默认区域设置:

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>
© www.soinside.com 2019 - 2024. All rights reserved.