48 lines
1.2 KiB
TypeScript
48 lines
1.2 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(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,
|
|
interpolation: {
|
|
escapeValue: false,
|
|
},
|
|
defaultNS: [...namespaces, "common"],
|
|
fallbackNS: [...namespaces, "common"],
|
|
ns: namespaces,
|
|
preload: resources ? [] : i18nConfig.locales,
|
|
|
|
});
|
|
|
|
return {
|
|
i18n: i18nInstance,
|
|
resources: i18nInstance.services.resourceStore.data,
|
|
t: i18nInstance.t
|
|
};
|
|
}
|