30 lines
810 B
JavaScript
30 lines
810 B
JavaScript
|
import { createInstance } from "i18next";
|
||
|
import resourcesToBackend from "i18next-resources-to-backend";
|
||
|
import { initReactI18next } from "react-i18next/initReactI18next";
|
||
|
import { getOptions } from "./settings";
|
||
|
|
||
|
const initI18next = async (lng, ns) => {
|
||
|
const i18nInstance = createInstance();
|
||
|
await i18nInstance
|
||
|
.use(initReactI18next)
|
||
|
.use(
|
||
|
resourcesToBackend((language, namespace) =>
|
||
|
import(`./locales/${language}/${namespace}.json`)
|
||
|
)
|
||
|
)
|
||
|
.init(getOptions(lng, ns));
|
||
|
return i18nInstance;
|
||
|
};
|
||
|
|
||
|
export async function useTranslation(lng, ns, options = {}) {
|
||
|
const i18nextInstance = await initI18next(lng, ns);
|
||
|
return {
|
||
|
t: i18nextInstance.getFixedT(
|
||
|
lng,
|
||
|
Array.isArray(ns) ? ns[0] : ns,
|
||
|
options.keyPrefix
|
||
|
),
|
||
|
i18n: i18nextInstance,
|
||
|
};
|
||
|
}
|