【问题标题】:Missing locale data for locale: "undefined". Using default locale: "en" as fallback缺少区域设置的区域设置数据:“未定义”。使用默认语言环境:“en”作为后备
【发布时间】:2018-08-31 10:49:46
【问题描述】:

我开发了一个显示错误的反应应用程序

[React Intl] 缺少区域设置的区域设置数据:“未定义”。使用默认语言环境:“en”作为后备。

我的 app.js

import{ IntlProvider,addLocaleData } from "react-intl";
import messages from "./messages";
import{locale} from "./reducers/locale";
import {setLocale} from "./actions/locale"; 

class App extends React.Component {
render() {
  const { location, isAuthenticated, loaded, lang } = this.props;
  console.log(lang);//undefined in console
  return (
    <IntlProvider key={ lang } locale={lang} messages={messages}>
     </IntlProvider>

    );
  }

【问题讨论】:

  • 如果你想用后备渲染你可以做类似key={ lang || 'en'} locale={lang || 'en'}的事情。如果您不想在 lang 未定义的情况下渲染,则返回 null
  • 感谢@Kunukn 我试过了,但它不会工作

标签: reactjs react-redux


【解决方案1】:

你为什么不在父组件上添加一个console.log来验证你首先传递的数据?如果它在此组件上未定义,则很可能您从父级传递了一个未定义的值。

【讨论】:

  • 父组件??
  • 从“../types”导入{ LOCALE_SET }; export const localeSet = lang =>({ type: LOCALE_SET, lang }); export const setLocale = lang => dispatch =>{ localStorage.alhubLang = lang;调度(语言环境集(语言));控制台日志(语言); // 这会打印指定的语言 }; `
【解决方案2】:

在你的组件被挂载之前,你可能会得到 undefined 并且使用 undefined 渲染元素会抛出错误。

仅在未定义时才返回元素:

if(lang && messages) {
  return (
    <IntlProvider key={ lang } locale={lang} messages={messages}>
    </IntlProvider>
  )
} else {
  return null
}

速记:

return lang && messages &&
  <IntlProvider key={ lang } locale={lang} messages={messages}> 
  </IntlProvider> || 
  null

现在,这将确保元素仅在定义了 lang 时才呈现(这是在组件安装后出现的)并且您不会看到任何错误。这会在第一次渲染时渲染null,在您获得值后,它将渲染元素。


是的,很明显,如果您想在第一次加载时不使用语言和消息来渲染元素,您可以使用:

return <IntlProvider 
   key={ lang || 'en' } {/* en as default */}
   locale={lang || 'en'} 
   messages={messages || ''}> 
  </IntlProvider>

【讨论】:

  • [React Intl] 缺少消息:区域设置的“nav.dashboard”:“en”[React Intl] 无法格式化消息:“nav.dashboard”,使用消息 ID 作为后备
  • 对消息做同样的事情。更新了帖子。
  • 谢谢,@Bhojendra Rauniyar 消息正在正确打印,但这并不正常工作 nav.dashboard 显示
猜你喜欢
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 2020-06-14
  • 2011-02-05
  • 2021-06-23
  • 1970-01-01
相关资源
最近更新 更多