не удалось создать правильный экземпляр i18next, чтобы использовать его реагирующий компонент

Я пытаюсь создать экземпляр i18next. Но значение экземпляра отличается, потому что он не работает в компоненте React.

import i18n from 'i18next';
import { reactI18nextModule } from 'react-i18next';
import Backend from 'i18next-xhr-backend';
import LanguageDetector from 'i18next-browser-languagedetector';

const config = {
ns: ['translations'],
defaultNS: 'translations',
fallbackLng: 'en',
backend: {
    loadPath: 'locale/{{lng}}.json',
    addPath: '{{lng}}',
},
detection: {
    caches: null
},
debug: true,
react: {
    wait: true,
    withRef: false,
    interpolation: {
        escapeValue: false, // not needed for react!
    },
    bindI18n: 'languageChanged',
    bindStore: false,
    nsMode: 'default'
}
};
i18n.use(Backend)
.use(LanguageDetector)
.use(reactI18nextModule).init(i18nconfig);
console.log(i18n);
export default i18n;

Предоставление структуры вместо всего объекта. Я получаю следующее значение:

    changeLanguage: (...)
cloneInstance: (...)
createInstance: (...)
default: I18n {observers: {…}, options: {…}, services: {…}, logger: Logger, modules: {…}, …}
dir: (...)
exists: (...)
getFixedT: (...)
init: (...)
loadLanguages: (...)
loadNamespaces: (...)
loadResources: (...)
off: (...)
on: (...)
setDefaultNamespace: (...)
t: (...)
use: (...)
get changeLanguage: ƒ ()
get cloneInstance: ƒ ()
get createInstance: ƒ ()
get dir: ƒ ()
get exists: ƒ ()
get getFixedT: ƒ ()
get init: ƒ ()
get loadLanguages: ƒ ()
get loadNamespaces: ƒ ()
get loadResources: ƒ ()
get off: ƒ ()
get on: ƒ ()
get setDefaultNamespace: ƒ ()
get t: ƒ ()
get use: ƒ ()
__proto__: Object

Желаемый результат должен быть

addResource: ƒ ()
addResourceBundle: ƒ ()
addResources: ƒ ()
format: ƒ format(value, _format, lng)
getDataByLanguage: ƒ ()
getResource: ƒ ()
getResourceBundle: ƒ ()
hasResourceBundle: ƒ ()
isInitialized: true
language: "en-US"
languages: (2) ["en-US", "en"]
logger: Logger {prefix: "i18next:", logger: {…}, options: {…}, debug: true}
modules: {external: Array(0), backend: ƒ, languageDetector: ƒ}
observers: {initialized: Array(0), languageChanged: Array(28)}
options: {debug: true, initImmediate: true, ns: Array(1), defaultNS: "translations", fallbackLng: Array(1), …}
removeResourceBundle: ƒ ()
services: {logger: Logger, resourceStore: ResourceStore, languageUtils: LanguageUtil, pluralResolver: PluralResolver, interpolator: Interpolator, …}
store: ResourceStore {observers: {…}, data: {…}, options: {…}}
translator: Translator {observers: {…}, resourceStore: ResourceStore, languageUtils: LanguageUtil, pluralResolver: PluralResolver, interpolator: Interpolator, …}
__proto__: EventEmitter

Если я передам экземпляр i18n (первый) через I8nextProvider моему реагирующему компоненту. Я вижу следующую ошибку

backend.js:6 react-i18next:: You will need pass in an i18next instance either by props, using I18nextProvider or by using i18nextReactModule. Learn more https://react.i18next.com/components/overview#getting-the-i-18-n-function-into-the-flow 
    in NamespacesConsumerComponent (created by WithMergedOptions)
    in WithMergedOptions (created by Context.Consumer)
    in Context.Consumer (created by WithMergedOptions(NamespacesConsumerComponent))
    in WithMergedOptions(NamespacesConsumerComponent) (created by LoadNamespace)
    in LoadNamespace (created by WithMergedOptions)
    in WithMergedOptions (created by Context.Consumer)
    in Context.Consumer (created by LoadNamespace(EstimateResultsView))
    in LoadNamespace(DemoComponent)

NamespacesConsumer.js:154 Uncaught TypeError: Cannot read property 'loadNamespaces' of undefined
    at NamespacesConsumerComponent.loadNamespaces (NamespacesConsumer.js:154)
    at NamespacesConsumerComponent.componentDidMount (NamespacesConsumer.js:72)
    at commitLifeCycles (react-dom.development.js:20049)
    at commitLayoutEffects (react-dom.development.js:22813)
    at HTMLUnknownElement.callCallback (react-dom.development.js:347)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:397)
    at invokeGuardedCallback (react-dom.development.js:454)
    at commitRootImpl (react-dom.development.js:22585)
    at unstable_runWithPriority (scheduler.development.js:643)
    at runWithPriority$2 (react-dom.development.js:11305)

Используемая версия: i18next: 13.1.5 react-i18next: 9.0.10


person good_boy    schedule 11.10.2019    source источник


Ответы (1)


Ваша переменная конфигурации называется config, но вы пытаетесь передать другую переменную init(i18nconfig). Я нигде не вижу i18nconfig определенного, поэтому я предполагаю, что он загружает его со значениями по умолчанию.

(Хотя я удивлен, что вы не видите Uncaught ReferenceError: i18nconfig is not defined.)

person supremebeing7    schedule 23.01.2020