Почему я получаю ошибки синтаксического анализа в response-intl V3.2.2? - PullRequest
0 голосов
/ 18 октября 2019

Я обновил свое приложение с activinlt 2.x до 3.2.2. Теперь я получаю следующую ошибку для каждого отформатированного сообщения:

index.js: 1437 [React Intl] Ошибка форматирования сообщения: "titleBar.login" для локали: "de", с использованием сообщения по умолчанию в качестве запасного. TypeError: Сообщение должно быть предоставлено в виде String или AST.

То же самое для сообщения по умолчанию: Ошибка форматирования сообщения по умолчанию для: "titleBar.login" TypeError: Сообщение должно быть предоставлено в виде String или AST.

И наконец: [React Intl] Невозможно отформатировать сообщение: "titleBar.login", используя источник сообщения в качестве запасного варианта

Однако графический интерфейс корректно отображается и показывает перевод на немецкий язык ("de"). Но в консоли Chrome меня заваливают сообщениями об ошибках. Что не так?

  const userInfo = useContext(UserContext);  // using hooks

  return (
    <UncontrolledDropdown className={styles.user}>
      <DropdownToggle>
        ...
      </DropdownToggle>
      <DropdownMenu>
       ...

        {!userInfo.isLoggedIn && (
          <DropdownItem>
            <div onClick={() => userInfo.login()}>
              <FormattedMessage {...msgs.login} />  // this has id=titleBar.login
            </div>
          </DropdownItem>
        )}
      </DropdownMenu>
    </UncontrolledDropdown>
  );
};

Есть идеи, как мне избавиться от этих сообщений об ошибках?

Кстати: ошибка выводится в формате сообщения. Сообщение анализируется как строка (без заполнителей и т. Д.). Затем он проверяет, является ли AST массивом, и выбрасывает, потому что это только один узел ... Вот фрагмент кода:

 if (typeof message === 'string') {
      this.message = message;

      if (!IntlMessageFormat.__parse) {
        throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');
      } // Parse string messages into an AST.


      this.ast = IntlMessageFormat.__parse(message);
    } else {
      this.ast = message;
    }

    if (!Array.isArray(this.ast)) {
      throw new TypeError('A message must be provided as a String or AST.');
    }

1 Ответ

0 голосов
/ 18 октября 2019

Вы должны проверить свой файл переводов. Кажется, что значение titleBar.login не строка, а объект

...