hts/apps/migrant/app/i18n.ts

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
};
}