Abr*_*ngh 8 reactjs redux react-intl react-redux babel-plugin-react-intl
我正在尝试使用语言翻译react-intl.当我使用它时<FormattedMessage id='importantNews' />,它是完美的.但是,当我使用以下代码时intl.formatMessage(),它不起作用并抛出一些错误.我不知道它有什么问题.
import { injectIntl, FormattedMessage } from 'react-intl';
function HelloWorld(props) {
const { intl } = props;
const x = intl.formatMessage('hello') + ' ' + intl.formatMessage('world'); //not working
const y = <FormattedMessage id='hello' />; //working
return (
<button>{x}</button>
);
}
export default injectIntl(HelloWorld);
Run Code Online (Sandbox Code Playgroud)
我的根组件是这样的,
import ReactDOM from 'react-dom';
import { addLocaleData, IntlProvider } from 'react-intl';
import enLocaleData from 'react-intl/locale-data/en';
import taLocaleData from 'react-intl/locale-data/ta';
import HelloWorld from './hello-world';
addLocaleData([
...enLocaleData,
...taLocaleData
]);
const messages = {
en: {
hello: 'Hello',
world: 'World'
},
ta: {
hello: '???????',
world: '?????'
}
};
ReactDOM.render(
<IntlProvider key={'en'} locale={'en'} messages={messages['en']}>
<HelloWorld />
</IntlProvider>,
document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?提前致谢.
Tom*_*ich 11
你需要调用formatMessage用MessageDescriptor,不只是id:
const x = intl.formatMessage({id: 'hello'}) + ' ' + intl.formatMessage({id: 'world'});
Run Code Online (Sandbox Code Playgroud)
为了更好地记住这一点 - 使用prop调用组件id:
<FormatMessage id="Hello" />
Run Code Online (Sandbox Code Playgroud)
道具实际上是一个键值字典:
// this is the same as above
<FormatMessage {...{id: 'hello'}} />
Run Code Online (Sandbox Code Playgroud)
现在,formatMessage函数接受与FormatMessage组件相同的道具:
formatMessage({id: 'hello'})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11459 次 |
| 最近记录: |