Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在使用i18n.use(LanguageDetector.init()之前,正在等待来自api的每次语言更改的资源数据_Javascript_Reactjs_I18next - Fatal编程技术网

Javascript 在使用i18n.use(LanguageDetector.init()之前,正在等待来自api的每次语言更改的资源数据

Javascript 在使用i18n.use(LanguageDetector.init()之前,正在等待来自api的每次语言更改的资源数据,javascript,reactjs,i18next,Javascript,Reactjs,I18next,很抱歉,如果这个问题以前已经回答过,但我找不到解决问题的方法。我是这方面的初学者 基本上,我只想做的是,我拥有的语言资源来自一个api,而不是静态的。所以我需要在初始化i18n之前等待对finsih的api请求 我使用了async/await,它可以正常工作。但每次语言改变时我都需要这样做,而我似乎做得不对 注意,我一直在调用i18n.use(LanguageDetector.init()) 所以基本上我做了3个这样的函数(translateEn,translateear,translateTr

很抱歉,如果这个问题以前已经回答过,但我找不到解决问题的方法。我是这方面的初学者

基本上,我只想做的是,我拥有的语言资源来自一个api,而不是静态的。所以我需要在初始化i18n之前等待对finsih的api请求

我使用了async/await,它可以正常工作。但每次语言改变时我都需要这样做,而我似乎做得不对

注意,我一直在调用i18n.use(LanguageDetector.init())

所以基本上我做了3个这样的函数(translateEn,translateear,translateTr),每次语言改变时我都会调用它们,这样做很愚蠢

再次抱歉,我觉得这应该是太容易了,我把它变得比它应该更复杂。我相信有更好的方法来做到这一点

//i18n.js

import i18n from "i18next";
import LanguageDetector from "i18next-browser-languagedetector";
import API from './apis/API'

i18n.use(LanguageDetector).init({
  // we init with resources
  resources: {
    en: {
      translations: {},
    ar: {
      translations: {}
    },
    tr: {
      translations: {}
    }
  },
  fallbackLng: "en",
  debug: true,
  ns: ["translations"],
  defaultNS: "translations",
  keySeparator: false,
  interpolation: {
    escapeValue: false, 
    formatSeparator: ","
  },
  react: {
    wait: true
  }
});

const en = {translations: {}}
const translateEn = async () => {
  const getEnLang = await API.get('translate/interface?language=1')
  getEnLang.data.data.forEach( i => {
    en.translations[i.key] = i.value
  })
  i18n.use(LanguageDetector).init({
    resources: {
      en,
      ar: {
        translations: {}
      },
      tr: {translations: {}}
    }
  })

}

translateEn()

export {i18n,translateEn}

虽然我正在努力以异步方式加载资源并将其拾取,但我必须注意,在以新语言加载时,您可能应该使用
i18n.addResources(resources)
而不是
i18n.use()
。虽然我还没有成功地让它工作,但我只知道你不应该调用
init()
两次。你是否尝试过使用i18next后端选项从后端检索翻译?除此之外:您应该只使用一次
init
i18n。