94 lines
2.8 KiB
TypeScript
94 lines
2.8 KiB
TypeScript
import { Resource, createInstance, i18n } from 'i18next';
|
|
import { initReactI18next } from 'react-i18next/initReactI18next';
|
|
import resourcesToBackend from 'i18next-resources-to-backend';
|
|
import LanguageDetector from "i18next-browser-languagedetector";
|
|
import i18nConfig from '@/i18nConfig';
|
|
|
|
export default async function initTranslations(
|
|
locale: string,
|
|
namespaces: string[],
|
|
i18nInstance?: i18n,
|
|
resources?: Resource
|
|
) {
|
|
i18nInstance = i18nInstance || createInstance();
|
|
|
|
i18nInstance
|
|
// .use(LanguageDetector)
|
|
.use(initReactI18next);
|
|
|
|
if (!resources) {
|
|
i18nInstance.use(
|
|
resourcesToBackend(
|
|
(language: string, namespace: string) =>
|
|
import(`../locales/${language}/${namespace}.json`)
|
|
)
|
|
);
|
|
}
|
|
|
|
await i18nInstance.init({
|
|
lng: locale,
|
|
resources,
|
|
fallbackLng: i18nConfig.defaultLocale,
|
|
supportedLngs: i18nConfig.locales,
|
|
// debug: false,
|
|
interpolation: {
|
|
escapeValue: false,
|
|
},
|
|
defaultNS: [...namespaces, "common"],
|
|
fallbackNS: [...namespaces, "common"],
|
|
ns: namespaces,
|
|
preload: resources ? [] : i18nConfig.locales,
|
|
// detection: {
|
|
// caches: ['localStorage', 'sessionStorage', 'cookie'],
|
|
// },
|
|
});
|
|
|
|
// // assume all detected languages are available
|
|
// const detectLanguage = i18n.language;
|
|
// // cannot trust browser language setting
|
|
// const settingLanguage = localStorage.getItem("language");
|
|
|
|
// console.log(settingLanguage)
|
|
|
|
// // if setting is not initialized, but detected language is available, use detected language and update language setting
|
|
// if (
|
|
// !settingLanguage &&
|
|
// AvailableLanguages.some((lang) => detectLanguage === lang.value)
|
|
// ) {
|
|
// localStorage.setItem("language", detectLanguage);
|
|
// i18n.changeLanguage(detectLanguage);
|
|
// return;
|
|
// }
|
|
|
|
// // if setting is not initialized and detected language is not available, use en and update language setting
|
|
// if (
|
|
// !settingLanguage &&
|
|
// !AvailableLanguages.some((lang) => detectLanguage === lang.value)
|
|
// ) {
|
|
// localStorage.setItem("language", "en");
|
|
// i18n.changeLanguage("en");
|
|
// return;
|
|
// }
|
|
|
|
// // if setting is initialized and setting language is not available, use en and update language setting
|
|
// if (
|
|
// settingLanguage &&
|
|
// !AvailableLanguages.some((lang) => settingLanguage === lang.value)
|
|
// ) {
|
|
// localStorage.setItem("language", "en");
|
|
// i18n.changeLanguage("en");
|
|
// return;
|
|
// }
|
|
|
|
// // if setting is initialized and setting language is available, use setting language
|
|
// if (settingLanguage && settingLanguage !== detectLanguage) {
|
|
// i18n.changeLanguage(settingLanguage);
|
|
// }
|
|
|
|
return {
|
|
i18n: i18nInstance,
|
|
resources: i18nInstance.services.resourceStore.data,
|
|
t: i18nInstance.t
|
|
};
|
|
}
|