Javascript 在使用i18n.use(LanguageDetector.init()之前,正在等待来自api的每次语言更改的资源数据
很抱歉,如果这个问题以前已经回答过,但我找不到解决问题的方法。我是这方面的初学者 基本上,我只想做的是,我拥有的语言资源来自一个api,而不是静态的。所以我需要在初始化i18n之前等待对finsih的api请求 我使用了async/await,它可以正常工作。但每次语言改变时我都需要这样做,而我似乎做得不对 注意,我一直在调用i18n.use(LanguageDetector.init()) 所以基本上我做了3个这样的函数(translateEn,translateear,translateTr),每次语言改变时我都会调用它们,这样做很愚蠢 再次抱歉,我觉得这应该是太容易了,我把它变得比它应该更复杂。我相信有更好的方法来做到这一点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
//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。