У вас будет много проблем, если вы попытаетесь установить исходный язык с помощью redux. Я рекомендую вам использовать AsyncStorage
.
При переключении языка - сохранить выбранный язык и обновить i18n
:
handleChangeLanguage = async (lang) => {
await AsyncStorage.setItem('lang', lang);
const { i18n } = this.props;
i18n.changeLanguage(lang);
}
При начальной загрузке приложения, проверьте AsyncStorage
для предпочтительного языка:
import i18n from 'i18next';
import { AsyncStorage } from 'react-native';
....
const languageDetector = {
type: 'languageDetector',
async: true,
detect: async (cb) => {
// Case 1: The user chose his preferred language setting.
const preferredLang = await AsyncStorage.getItem('lang');
if (preferredLang) {
return cb(preferredLang);
}
// Case 2: return the default language
return cb('en');
},
init: () => {},
cacheUserLanguage: () => {},
};
i18n
.use(languageDetector)
.init({
fallbackLng: 'en',
react: {
wait: true,
},
});