import i18next from 'i18next'; import { initReactI18next } from 'react-i18next'; import de from '../translations/de'; import en from '../translations/en'; import es from '../translations/es'; import fr from '../translations/fr'; import ja from '../translations/ja'; import pt from '../translations/pt'; import ru from '../translations/ru'; import zh from '../translations/zh'; import ko from '../translations/ko'; import localization from './Localization'; function getJsonFromString(text: string) { return text .split('ยง ') .slice(1) .reduce((translations, part: string) => { let index = part.indexOf('\n'); if (index === (part.length - 1)) { index = part.indexOf(':'); } const key = part.slice(0, index); translations[key] = part.slice(index + 1).trim(); return translations; }, {}); } function getTranslationWrapper(translation: string) { return { translation: getJsonFromString(translation), }; } const translations = { de: getTranslationWrapper(de), en: getTranslationWrapper(en), es: getTranslationWrapper(es), fr: getTranslationWrapper(fr), ja: getTranslationWrapper(ja), pt: getTranslationWrapper(pt), ru: getTranslationWrapper(ru), zh: getTranslationWrapper(zh), ko: getTranslationWrapper(ko), }; export const BROWSER_LANGUAGE = navigator.languages .filter((language) => language.length === 2 && translations[language]) .shift() || 'en'; export default function initializationI18n(userLanguage?: string) { const language = userLanguage || localStorage.getItem('language') || BROWSER_LANGUAGE || 'en'; localization.language = language; i18next.use(initReactI18next).init({ lng: language, // if you're using a language detector, do not define the lng option debug: false, resources: translations, // if you see an error like: "Argument of type 'DefaultTFuncReturn' is not assignable to parameter of type xyz" // set returnNull to false (and also in the i18next.d.ts options) // returnNull: false, }); }