【问题标题】:Why am i getting parsing errors in react-intl V3.2.2?为什么我在 react-intl V3.2.2 中出现解析错误?
【发布时间】:2020-02-15 13:51:48
【问题描述】:

我将我的应用从 reactinlt 2.x 更新到 3.2.2。现在我收到每条格式化消息的以下错误:

index.js:1437 [React Intl] 错误格式化消息:“titleBar.login”对于区域设置:“de”,使用默认消息作为后备。 TypeError: 消息必须以字符串或 AST 形式提供。

默认消息相同: 格式化默认消息时出错:“titleBar.login” TypeError: 消息必须以字符串或 AST 形式提供。

最后: [React Intl] 无法格式化消息:“titleBar.login”,使用消息源作为后备

但是,GUI 可以正确呈现并显示德语翻译(“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.');
    }

【问题讨论】:

  • 您找到解决此问题的方法了吗?从 v2 升级后我遇到了同样的问题?

标签: reactjs typescript react-intl


【解决方案1】:

您应该检查您的翻译文件。看来titleBar.login的值不是字符串,而是对象

【讨论】:

  • 很遗憾没有。这是一个字符串,它在 2.x 版本中工作......
【解决方案2】:

最终,这是客户端和服务器工具之间的版本不匹配。与此同时,我们更新到所有库的最新版本,并再次工作。

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 2021-04-25
  • 2021-02-18
  • 2020-09-08
  • 2017-07-14
  • 2020-01-15
  • 2012-01-26
相关资源
最近更新 更多