【发布时间】: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