React-Intl:添加到IntlMessageFormat的语言环境数据缺少`pluralRuleFunction`
问题描述:
我最近在我的多页面反应应用程序中使用React-Intl进行国际化。React-Intl:添加到IntlMessageFormat的语言环境数据缺少`pluralRuleFunction`
我编写了一个组件“IntlProviderWithLocal”来添加自定义区域设置。
import React from 'react'
import {IntlProvider, addLocaleData} from 'react-intl';
import zh_CN from '../../../components/i18n/zh_CN/angular_locale'
export default (props) => {
const {children, ...last} = props
addLocaleData(zh_CN);
return (
<IntlProvider {...last} messages={zh_CN} >
{children}
</IntlProvider>
)
}
,但我得到的错误:
Error formatting message: "publish.card.preview" for locale: "zh_CN", using default message as fallback
我react-intl/lib/index.es.js
设置断点,它显示了var formatter = state.getMessageFormat(message, locale, formats)
扔的错误。
formats
是一个空数组。步骤功能getMessageFormat
,
return function() {
var args = Array.prototype.slice.call(arguments);
var cacheId = getCacheId(args);
var format = cacheId && cache[cacheId];
if (!format) {
format = new (src$es5$$.bind.apply(FormatConstructor, [null].concat(args)))();
if (cacheId) {
cache[cacheId] = format;
}
}
return format;
};
最后我在format = new (src$es5$$.bind.apply(FormatConstructor, [null].concat(args)))();
得到一个错误Locale data added to IntlMessageFormat is missing a pluralRuleFunction for :zh_CN
。
此时,args
是["预览", "zh_CN", Object]
,cacheId
是"["预览","zh_CN",[]]"
和format
是undefined
有没有办法添加自定义语言环境数据正确
答
您似乎没有您的翻译传递给供应商。
messages={zh_CN}
应该包含你的翻译,如键值存储:
messages = {
"publish.card.preview": "Preview"
}
return <IntlProvider {...last} messages={messages} >
...
</IntlProvider>
我敢肯定zh_CN的是一个JSON。我在翻译的最后一页看到翻译的单词。但也得到错误。所以,我很困惑发生了什么 –
这只是它不是你应该传递给'addLocaleData'和'IntlProvider'的同一个对象。当'addLocaleData'需要不同区域设置的字典时,'IntlProvider'需要所有翻译的列表。我不知道这是为什么你有你的错误。 –