首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >intl.formatMessage不工作-反应-集成

intl.formatMessage不工作-反应-集成
EN

Stack Overflow用户
提问于 2017-06-30 02:40:12
回答 3查看 28.5K关注 0票数 12

我正在尝试使用react-intl进行语言翻译。当我使用这个<FormattedMessage id='importantNews' />时,它工作得很好。但是,当我在intl.formatMessage()中使用以下代码时,它无法工作并抛出一些错误。我不知道里面出了什么问题。

代码语言:javascript
复制
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);

我的根组件是这样的,

代码语言:javascript
复制
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')
);

有人能帮我解决这个问题吗?提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-30 03:49:16

您需要使用MessageDescriptor调用formatMessage,而不仅仅是id

代码语言:javascript
复制
const x = intl.formatMessage({id: 'hello'}) + ' ' + intl.formatMessage({id: 'world'});

为了更好地记住这一点-组件是用prop id调用的

代码语言:javascript
复制
<FormatMessage id="Hello" />

Props实际上是一个键值字典:

代码语言:javascript
复制
// this is the same as above
<FormatMessage {...{id: 'hello'}} />

现在,formatMessage函数接受与FormatMessage组件相同的属性:

代码语言:javascript
复制
formatMessage({id: 'hello'})
票数 18
EN

Stack Overflow用户

发布于 2020-08-18 17:50:50

此外,您似乎缺少它的默认值。

代码语言:javascript
复制
 <FormattedMessage id="footer.table_no" defaultMessage="Hello" />
票数 0
EN

Stack Overflow用户

发布于 2020-09-17 03:27:31

在尝试使用动态值并失败之后,我发现如果使用const intlKey = "something"

代码语言:javascript
复制
{intl.formatMessage({ id: intlKey })} //this doesn't work
{intl.formatMessage({ id: `${intlKey}` })} //this works
代码语言:javascript
复制
<IntlMessages id={intlKey} /> //this doesn't work
<IntlMessages id={`${intlKey}`} /> //this works

因此,为了让intl起作用,将你的值字符串化(即使确定它是一个字符串)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44832683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档