Solucionar problema: i18next::pluralResolver: Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling en i18n con React Native y Android

Al implementar el soporte multi-idioma de i18next en React Native, la plataforma Android puede devolver el siguiente error:

Y por consola sale lo siguiente:

i18next::pluralResolver: Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.
at node_modules\expo\build\environment\react-native-logs.fx.js:27:4 in error
at node_modules\i18next\dist\cjs\i18next.js:41:34 in output
at node_modules\i18next\dist\cjs\i18next.js:38:4 in error
at node_modules\i18next\dist\cjs\i18next.js:1368:6 in PluralResolver
at node_modules\i18next\dist\cjs\i18next.js:2312:27 in init
at language\i18n.js:8:0 in <global>
at node_modules\metro-runtime\src\polyfills\require.js:339:11 in loadModuleImplementation
at screens\Recursos.js:4:0 in <global>
at node_modules\metro-runtime\src\polyfills\require.js:339:11 in loadModuleImplementation
at screens\Menu.js:10:0 in <global>
at node_modules\metro-runtime\src\polyfills\require.js:339:11 in loadModuleImplementation
at App.js:7:0 in <global>
at node_modules\metro-runtime\src\polyfills\require.js:339:11 in loadModuleImplementation
at node_modules\expo\AppEntry.js:3:0 in <global>
at node_modules\metro-runtime\src\polyfills\require.js:339:11 in loadModuleImplementation
at node_modules\metro-runtime\src\polyfills\require.js:200:44 in guardedLoadModule
at http://ej-tpe.anonymous.courstube-app-react.exp.direct/node_modules%5Cexpo%5CAppEntry.bundle?platform=android&dev=true&hot=false&strict=false&minify=false:183127:3 in global code

Para solucionarlo, tenemos que ir al archivo qué creamos para inicializar el plugin i18n y después añadir compatibilidad con JSON v3 (compatibilityJSON: 'v3'):

i18n.use(initReactI18next).init({
  lng: es,
  fallbackLng: es,
  //compatibilityJSON: 'v3',
  resources: {
    en: en,
    es: es,
  },
  interpolation: {
    escapeValue: false 
  }
});

Una vez añadido ya no aparece el error en la plataforma Android.

Deja un comentario