New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update LanguageDetectorAsyncModule
#1879
Conversation
Add return type `Promise<void>` for `LanguageDetectorAsyncModule`
@adrai In this case import AsyncStorage from '@react-native-async-storage/async-storage'
const LANGUAGE_KEY = 'i18n.language';
const languageDetector: LanguageDetectorAsyncModule = {
type: 'languageDetector',
async: true,
init: () => {
// Do nothing.
},
detect: async (setLanguage) => {
try {
const language = await AsyncStorage.getItem(LANGUAGE_KEY);
setLanguage(language ?? 'en');
} catch (exception) {
console.error(exception);
}
},
cacheUserLanguage: async (language) => {
try {
await AsyncStorage.setItem(LANGUAGE_KEY, language);
} catch (exception) {
console.error(exception);
}
},
}; because use |
Because the interface looks like this: https://www.i18next.com/misc/creating-own-plugins#languagedetector |
@adrai import AsyncStorage from '@react-native-async-storage/async-storage'
const LANGUAGE_KEY = 'i18n.language';
const languageDetector: LanguageDetectorAsyncModule = {
type: 'languageDetector',
async: true,
init: () => {
// Do nothing.
},
detect: (setLanguage) => {
AsyncStorage.getItem(LANGUAGE_KEY)
.then((language) => setLanguage(language ?? 'en'))
.catch((exception) => console.error(exception));
},
cacheUserLanguage: (language) => {
AsyncStorage.setItem(LANGUAGE_KEY, language).catch((exception) => console.error(exception));
},
}; I don't like to use then/catch with promise |
This is sufficient: import AsyncStorage from '@react-native-async-storage/async-storage'
const LANGUAGE_KEY = 'i18n.language';
const languageDetector: LanguageDetectorAsyncModule = {
type: 'languageDetector',
async: true,
init: () => {},
detect: (setLanguage) => {
AsyncStorage.getItem(LANGUAGE_KEY)
.then((language) => setLanguage(language ?? 'en'));
},
cacheUserLanguage: (language) => {
AsyncStorage.setItem(LANGUAGE_KEY, language)
}
}; That's how the interface of i18next is defined since the beginning... I'll check later, if at least we can accept a promise for the detect function.... will let you know. |
ok, with v22.3.0 you can now do this: import AsyncStorage from '@react-native-async-storage/async-storage'
const LANGUAGE_KEY = 'i18n.language';
const languageDetector: LanguageDetectorAsyncModule = {
type: 'languageDetector',
async: true,
detect: () => AsyncStorage.getItem(LANGUAGE_KEY),
cacheUserLanguage: (language) => AsyncStorage.setItem(LANGUAGE_KEY, language)
}; |
Thank you <3 |
Add return type
Promise<void>
forLanguageDetectorAsyncModule