import i18n from 'i18n-js'; import { findBestAvailableLanguage } from 'react-native-localize'; import { LocaleKeys } from './types'; // Lazy loaders for locale const localeGetters: Record object> = { en: () => require('./lang/en/locale.json'), fr: () => require('./lang/fr/locale.json'), nl: () => require('./lang/nl/locale.json'), es: () => require('./lang/es/locale.json'), zh: () => require('./lang/zh/locale.json'), ja: () => require('./lang/ja/locale.json'), }; // Have RNLocalize pick the best locale from the languages on offer let locale = findBestAvailableLanguage(Object.keys(localeGetters)); // Check if the locale is correctly picked if (!locale || !locale.languageTag) { // Some users might not list English as a fallback language, and hence might not // be assigned a locale. In this case, we'll just default to English. locale = { languageTag: 'en', isRTL: false, }; } // Set the key-value pairs for the different languages you want to support. i18n.translations = { en: localeGetters.en(), }; // If the locale is not english, we add it to the translations key s well if (locale.languageTag !== 'en') { i18n.translations[locale.languageTag] = localeGetters[locale.languageTag as string](); } // Set the locale once at the beginning of your app. i18n.locale = locale.languageTag; // Fallback to the default language for missing translation strings i18n.fallbacks = true; /** * An i18n Typescript helper with autocomplete for the key argument * @param key string */ export function t(key: LocaleKeys) { return i18n.t(key); } export default i18n;