Android 设备需要 React-Native 和 Intl polyfill
React-Native and Intl polyfill required on Android device
我最近更新了我的 Android Studio 和许多 components/sdk,从那时起,React-Intl 抱怨缺少 intl
库,即使它之前工作正常。
我已经安装了 intl
polyfill 并将其导入到我的主文件 App.js
的最顶部。我还从 react-intl
导入 localeData
并添加它。然后,我在 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] Error formatting number. ReferenceError: No locale data
has been provided for this object yet.
我不明白这是怎么回事。有人遇到同样的问题吗?
谢谢
我没有从 react-intl
导入 locale-data,而是解决了从 intl
导入 polyfill 和语言环境数据的问题
安装intl
npm install intl
将此添加到您的应用程序的最顶部:
import 'intl';
import 'intl/locale-data/jsonp/en';
注意,这现在只需在顶部执行 import 'intl';
并仍然从 react-intl
加载 locale-data 即可。使用以下版本:
"intl": "^1.2.5",
"react-intl": "^2.2.2",
修改 "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:+'
更新到 React Native 0.65 或更新版本
“intl”终于包含在 Hermes 中,它随 React Native 0.65 或更新版本一起提供 - More in React Native Blog
我最近更新了我的 Android Studio 和许多 components/sdk,从那时起,React-Intl 抱怨缺少 intl
库,即使它之前工作正常。
我已经安装了 intl
polyfill 并将其导入到我的主文件 App.js
的最顶部。我还从 react-intl
导入 localeData
并添加它。然后,我在 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] Error formatting number. ReferenceError: No locale data has been provided for this object yet.
我不明白这是怎么回事。有人遇到同样的问题吗?
谢谢
我没有从 react-intl
导入 locale-data,而是解决了从 intl
安装intl
npm install intl
将此添加到您的应用程序的最顶部:
import 'intl';
import 'intl/locale-data/jsonp/en';
注意,这现在只需在顶部执行 import 'intl';
并仍然从 react-intl
加载 locale-data 即可。使用以下版本:
"intl": "^1.2.5",
"react-intl": "^2.2.2",
修改 "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:+'
更新到 React Native 0.65 或更新版本
“intl”终于包含在 Hermes 中,它随 React Native 0.65 或更新版本一起提供 - More in React Native Blog