i18n.js 无法解析 Pluralization.js 中的“make-plural”

col*_*lla 15 javascript internationalization react-native expo

我有一个反应本机应用程序,我正在使用 expo。

我想翻译我的移动应用程序,因此我将使用 expo-localization 和 i18n-js,它们是我在expo 文档中安装的。

然后我将其导入到我的 App.js 中,如下所示:

import * as Localization from "expo-localization";
import i18n from "i18n-js";
Run Code Online (Sandbox Code Playgroud)

我也尝试过这样导入:

import * as Localization from "expo-localization";
import { I18n } from "i18n-js";
Run Code Online (Sandbox Code Playgroud)

但导入 i18n 时出现以下错误:

Unable to resolve "make-plural" from "node_modules/i18n-js/dist/import/Pluralization.js"
Run Code Online (Sandbox Code Playgroud)

在我的 package.json 中,我有以下版本:

"i18n-js": "^4.2.3",
"expo-localization": "~13.1.0",
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

小智 18

记得还要延长expo/metro-config

 const { getDefaultConfig } = require('expo/metro-config');
 const config = getDefaultConfig(__dirname);
 
 // Adds support for `mjs` files 
 config.resolver.sourceExts.push('mjs' ); 
 
 module.exports = config;
Run Code Online (Sandbox Code Playgroud)


Cru*_*inh 16

我可以i18n-js通过编辑我的 Metro 配置来使用 4.2.3。

如果我理解正确的话,我认为问题在于make-plural包含一些 Metro 默认情况下不拾取的源文件。您可以通过确保扩展程序包含在resolver.sourceExts您的设置中来解决此问题metro.config.js,如下所示:

const defaultSourceExts = require('metro-config/src/defaults/defaults').sourceExts
const sourceExts = [ 'jsx', 'js', 'ts', 'tsx', 'json', 'svg', 'd.ts', 'mjs' ].concat(defaultSourceExts)

module.exports = {
  resolver: {
    sourceExts
  },
}
Run Code Online (Sandbox Code Playgroud)

我想我可能会在列表中添加一些重复项,但这就​​是目前对我有用的。

  • 这对我有用。具体来说,我必须添加“mjs”扩展。 (4认同)

小智 12

降级至

“i18n-js”:“4.2.0”

它开始在最新版本上使用 make-plural https://github.com/fnando/i18n/blob/main/CHANGELOG.md