2017-12-27 383 views
2

我試圖按照本指南爲rails/react_on_rails項目實現i18n; https://github.com/shakacode/react_on_rails/blob/master/docs/basics/i18n.md在rails上反應/ react intl

我得到 「FORMATMESSAGE沒有定義」 的錯誤,所以我可能失去了一些東西,這是我的代碼:

import PropTypes from 'prop-types'; 
import React from 'react'; 
import { IntlProvider } from 'react-intl'; 

import { addLocaleData } from 'react-intl'; 
import en from 'react-intl/locale-data/en'; 
import nb from 'react-intl/locale-data/nb'; 
import { translations } from '../../../libs/i18n/translations'; 
import { defaultLocale } from '../../../libs/i18n/default'; 

// Initizalize all locales for react-intl. 
addLocaleData([...en, ...nb]); 

// set locale and messages for IntlProvider. 
// const locale = method_to_get_current_locale() || defaultLocale; 
const locale = defaultLocale; 
const messages = translations[locale]; 

import { defaultMessages } from '../../../libs/i18n/default'; 


export default class TextMessage extends React.Component { 

    render() { 
    return (
     <IntlProvider locale={locale} key={locale} messages={messages}> 
     { formatMessage(defaultMessages.ActionsYes) } 
     </IntlProvider> 

    ); 
    } 
} 

回答

1

你得到確切的錯誤消息:

FORMATMESSAGE沒有定義

我一直在使用react-intl所以我相信你需要做的首先要注入intl對象。你可以在react-intl文檔中閱讀。試試這個:

import { IntlProvider, injectIntl } from 'react-intl'; 

... 

class TextMessage extends React.Component { 


    render() { 

    return (
     <IntlProvider locale={locale} key={locale} messages={messages}> 
     { this.props.intl.formatMessage(defaultMessages.ActionsYes) } 
     </IntlProvider> 

    ); 
    } 
} 

export default injectIntl(TextMessage); 

我敢打賭,它會工作。這裏

import { IntlProvider, FormattedMessage } from 'react-intl'; 

... 

export default class TextMessage extends React.Component { 
    render() { 
    return (
     <IntlProvider locale={locale} key={locale} messages={messages}> 
     <FormattedMessage {...defaultMessages.ActionsYes} /> 
     </IntlProvider> 

    ); 
    } 
} 
+0

小隨訪,使用的最後一個版本,我再次得到一個錯誤;:

或者更簡單的只是改變這失敗的道具類型:道具'id'在FormattedMessage中被標記爲必需,但其值爲undefined。 – hso

+1

您需要將'id'和'defaultMessage'道具傳遞給'FormattedMessage'。 make'console.log(defaultMessages.ActionsYes)'並檢查它是否有它們。 – Tomasz