Строка шаблона React intl выдает предупреждение о пропущенном идентификаторе - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь ввести некоторые значения в переведенное предложение через реагировать-intl. Следуя официальной документации, я смог определить шаблонное сообщение в свой файл локализации, и это выглядит так.

ratingMsgTemplate: {
    id: "_ratingMsg",
    defaultMessage: "{pointCount, plural, one {{point}} other {{points}}}"
},

это поле передано непосредственно внутри объекта локализации.

чем я использую пользовательский компонент Plural, который очень прост

import * as React from "react";

import { injectIntl } from "react-intl";
import { inject, observer } from "mobx-react";

const i18nPluralNumber = (props: any) => {
    const { locale, intl, msgId, ...msgParams } = props;
    let finalMessage;

    if (!(msgId in locale.messages)) {
        console.warn("Id not found in i18n messages list: " + msgId);
        finalMessage = msgId;
    } else {
        finalMessage = locale.messages[msgId];
    }

    return (
        <span className="plural-number-intl">
            {intl.formatMessage(finalMessage, { ...msgParams })}
        </span>
    );
};

export default inject("locale")(injectIntl(observer(i18nPluralNumber)));

вот пример использования

    <I18nPluralNumber
                msgId="ratingMsgTemplate"
                pointCount={shopPoints}
                point={formatMessage("point")}
                points={formatMessage("points")}
            />

Это работает как шарм , за исключением эта неприятная вещь. В консоли я получаю это сообщение: I18nPluralNumber.tsx: 19 [React Intl] Пропущенное сообщение: "_ratingMsg" для локали: "de", с использованием сообщения по умолчанию в качестве запасного.

и это правильно, потому что внутри моего файла перевода нет идентификатора _ratingMsg . На самом деле, я добавил этот идентификатор только потому, что он необходим в соответствии с документами response-intl, и без этого идентификатора он вообще не работает

Может кто-нибудь дать какой-нибудь совет / совет, как управлять этим материалом? Буду признателен за любую информацию.

1 Ответ

0 голосов
/ 04 апреля 2019

Если это кому-нибудь поможет. Я не нашел ни одного нормального решения, кроме этого костыля. Я добавил идентификатор с этим ключом и продублировал defaultMessage для каждого из них.

например

ratingMsgTemplate: {
    id: "_ratingMsg",
    defaultMessage: "{pointCount, plural, one {{point}} other {{points}}}"
},

Я просто создаю id - _ratingMsg со значением defaultMessage

_ratingMsg: "{pointCount, plural, one {{point}} other {{points}}}",
ratingMsgTemplate: {
    id: "_ratingMsg",
    defaultMessage: "{pointCount, plural, one {{point}} other {{points}}}"
},

теперь он не выдает предупреждение о пропущенном идентификаторе и работает как строка шаблона.

Странно, но я не нашел лучшего решения

...