Android设备上需要React-Native和Intl polyfill

ale*_*ngn 18 javascript android intl react-native react-intl

我最近更新了我的Android Studio和许多组件/ sdk,从那以后React-Intl抱怨intl库丢失,即使它之前工作正常.

我已经安装了intlpolyfill,我将它导入到我的主文件的最顶层App.js.我也导入localeDatareact-intl和添加.然后,我在IntlProvider指定locale没有消息的情况下渲染我的视图(我FormattedNumber现在只使用)

这是我的代码的简化版本:

import 'intl';
import { IntlProvider, FormattedNumber, addLocaleData } from 'react-intl';
import en from 'react-intl/locale-data/en';

addLocaleData(en);

[...]

render() {
    return (
        <IntlProvider locale="en">
            <Text>
                <FormattedNumber value={123} />
            </Text>
        </IntlProvider>
    )
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[React Intl]错误格式化编号.ReferenceError:尚未为此对象提供语言环境数据.

在此输入图像描述

我不明白发生了什么.有人遇到同样的问题吗?

谢谢

ale*_*ngn 38

react-intl我没有从中导入语言环境数据,而是解决了导入polyfill和语言环境数据的问题intl

安装 intl

npm install intl
Run Code Online (Sandbox Code Playgroud)

在应用的最顶部添加:

import 'intl';
import 'intl/locale-data/jsonp/en';
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你挽救我的生命. (7认同)
  • 如果我们事先不知道区域设置怎么办?例如,我希望“Intl”的行为取决于手机语言。 (3认同)
  • 以及如何做addLocaleData部分?只是忽略它?或从'int / locale-data / jsonp / es'导入es? (2认同)

Ger*_*tas 15

修改“build.gradle”

在 Android 上,您可以修改 /android/app/build.gradle 中的“build.gradle”文件。请记住,它不是 /android/app/gradle/build.gradle 中的文件。

然后,转到站点文件并搜索:

      /**
     * JavaScriptCore 的首选构建风格。
     *
     * 例如,要使用国际变体,您可以使用:
     * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
     *
     * 国际版本包括 ICU i18n 库和必要的数据
     * 允许使用例如`Date.toLocaleString`和`String.localeCompare`
     * 在使用 en-US 以外的语言环境时给出正确的结果。注意
     * 此变体每个架构比默认值大大约 6MiB。
     */
     def jscFlavor = 'org.webkit:android-jsc:+'

现在,修改最后一行,或者简单地将其注释掉并复制并粘贴上面的类似行。结果将是这样的:

      /**
     * JavaScriptCore 的首选构建风格。
     *
     * 例如,要使用国际变体,您可以使用:
     * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
     *
     * 国际版本包括 ICU i18n 库和必要的数据
     * 允许使用例如`Date.toLocaleString`和`String.localeCompare`
     * 在使用 en-US 以外的语言环境时给出正确的结果。注意
     * 此变体每个架构比默认值大大约 6MiB。
     */
     //def jscFlavor = 'org.webkit:android-jsc:+'
     def jscFlavor = 'org.webkit:android-jsc-intl:+'


小智 7

抬头,现在只需执行import 'intl';顶部并仍然加载来自的语言环境数据react-intl.使用以下版本:

"intl": "^1.2.5",
"react-intl": "^2.2.2",
Run Code Online (Sandbox Code Playgroud)

  • 这也适用于"react-intl":"^ 2.3.0" (2认同)

Ale*_*lex 7

更新到 React Native 0.65 或更高版本

最后,“intl”现已包含在 Hermes 中,它随 React Native 0.65 或更高版本一起提供 -更多内容请参阅 React Native 博客

  • 您对如何使用它有任何提示/指示吗?仅调用“Intl.DateTimeFormat”似乎不起作用。我在 RN68 上使用 Hermes 0.11.0。我需要进口一些东西吗?我检查了博客,但无法理解它。 (7认同)