2017-08-02 163 views
2

我最近在我的多頁面反應應用程序中使用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",[]]"formatundefined

有沒有辦法添加自定義語言環境數據正確

回答

1

您似乎沒有您的翻譯傳遞給供應商。

messages={zh_CN}應該包含你的翻譯,如鍵值存儲:

messages = { 
    "publish.card.preview": "Preview" 
} 
return <IntlProvider {...last} messages={messages} > 
    ... 
</IntlProvider> 
+0

我敢肯定zh_CN的是一個JSON。我在翻譯的最後一頁看到翻譯的單詞。但也得到錯誤。所以,我很困惑發生了什麼 –

+0

這只是它不是你應該傳遞給'addLocaleData'和'IntlProvider'的同一個對象。當'addLocaleData'需要不同區域設置的字典時,'IntlProvider'需要所有翻譯的列表。我不知道這是爲什麼你有你的錯誤。 –