54 lines
No EOL
1.6 KiB
TypeScript
54 lines
No EOL
1.6 KiB
TypeScript
import i18n from 'i18next';
|
|
import { initReactI18next } from 'react-i18next';
|
|
import { en, nl } from "@/assets/languages";
|
|
import AsyncStorage from "@react-native-async-storage/async-storage";
|
|
|
|
const STORE_LANGUAGE_KEY = "settings.lang";
|
|
|
|
const languageDetectorPlugin = {
|
|
type: "languageDetector",
|
|
async: true,
|
|
init: () => { },
|
|
detect: async function (callback: (lang: string) => void) {
|
|
try {
|
|
// get stored language from Async storage
|
|
// put your own language detection logic here
|
|
await AsyncStorage.getItem(STORE_LANGUAGE_KEY).then((language) => {
|
|
if (language) {
|
|
//if language was stored before, use this language in the app
|
|
return callback(language);
|
|
} else {
|
|
//if language was not stored yet, use english
|
|
return callback("nl");
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.log("Error reading language", error);
|
|
}
|
|
},
|
|
cacheUserLanguage: async function (language: string) {
|
|
try {
|
|
//save a user's language choice in Async storage
|
|
await AsyncStorage.setItem(STORE_LANGUAGE_KEY, language);
|
|
} catch (error) { }
|
|
},
|
|
};
|
|
const resources = {
|
|
en: {
|
|
translation: en,
|
|
},
|
|
nl: {
|
|
translation: nl,
|
|
},
|
|
};
|
|
|
|
// @ts-ignore
|
|
i18n.use(initReactI18next).use(languageDetectorPlugin).init({
|
|
resources,
|
|
compatibilityJSON: 'v3',
|
|
fallbackLng: "nl",
|
|
interpolation: {
|
|
escapeValue: false,
|
|
},
|
|
});
|
|
export default i18n; |