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

时间:2017-01-19 08:06:28

标签: javascript android react-native intl react-intl

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

我已经安装了intl polyfill,我将其导入主文件App.js的最顶层。我还从localeData导入react-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>
    )
}

我收到以下错误:

  

[React Intl]格式化数字错误。 ReferenceError:没有区域设置数据   已经提供了这个对象。

enter image description here

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

由于

3 个答案:

答案 0 :(得分:27)

我没有从intl导入区域设置数据,而是解决了从intl

导入polyfill和区域设置数据的问题

安装npm install intl

import 'intl';
import 'intl/locale-data/jsonp/en';

在应用的最顶部添加:

liked

答案 1 :(得分:6)

抬头,现在只需执行顶部的import 'intl';并仍然加载来自react-intl的区域设置数据。使用以下版本:

"intl": "^1.2.5",
"react-intl": "^2.2.2",

答案 2 :(得分:0)

修改“build.gradle”

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

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


      /**
     * The preferred build flavor of JavaScriptCore.
     *
     * For example, to use the international variant, you can use:
     * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
     *
     * The international variant includes ICU i18n library and necessary data
     * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
     * give correct results when using with locales other than en-US.  Note that
     * this variant is about 6MiB larger per architecture than default.
     */
     def jscFlavor = 'org.webkit:android-jsc:+'

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


      /**
     * The preferred build flavor of JavaScriptCore.
     *
     * For example, to use the international variant, you can use:
     * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
     *
     * The international variant includes ICU i18n library and necessary data
     * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
     * give correct results when using with locales other than en-US.  Note that
     * this variant is about 6MiB larger per architecture than default.
     */
     //def jscFlavor = 'org.webkit:android-jsc:+'
     def jscFlavor = 'org.webkit:android-jsc-intl:+'