i18next与react-native自定义语言检测器不工作



我使用i18next与自定义语言检测器来检测异步存储中的语言,但看起来检测方法甚至没有调用,每次都选择fallbackLanguage = 'en'。

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import en from './languages/english.json';
import hi from './languages/hindi.json';
import kn from './languages/kannada.json';
import ta from './languages/tamil.json';
import AsyncStorage from '@react-native-async-storage/async-storage';
const resources = {
en: en,
hi: hi,
kn: kn,
ta: ta,
};
let fallbackLanguage = 'en';
const languageDetector = {
type: 'languageDetector',
async: true,
detect: async (callback) => 
try {
const language = await AsyncStorage.getItem('language');
console.log('lllanguage', language);
if (language) {
console.log('Detected language:', language);
callback(language);
} else {
console.log('No language detected, falling back to default language:', fallbackLanguage);
callback(fallbackLanguage);
}
} catch (error) {
console.error('Failed to get language from async storage:', error);
callback(fallbackLanguage);
}
},
fallbackLng: fallbackLanguage,
};

i18n
.use(languageDetector)
.use(initReactI18next)
.init({
compatibilityJSON: 'v3',
lng: fallbackLanguage,
resources,
interpolation: {
escapeValue: false,
},
});
export default i18n;

localstorage有项目'language',并按预期设置值,我想每次打开应用程序时,它都会从async-storage检测语言,并且在关闭时不会失去其状态。

const languageDetector = {
type: 'languageDetector',
async: true,
detect: async (callback) => {
console.log("arrived here")
try {
const language = await AsyncStorage.getItem('language');
console.log('lllanguage', language);
if (language) {
console.log('Detected language:', language);
callback(language);
} else {
console.log('No language detected, falling back to default language:', fallbackLanguage);
callback(fallbackLanguage);
}
} catch (error) {
console.error('Failed to get language from async storage:', error);
callback(fallbackLanguage);
}
},
init: () => {
console.log('init');
},
fallbackLng: fallbackLanguage,
};

用这个更新你的代码来检查init是否正在打印,这将只是一个检查,以知道languageDetector是否正在执行

最新更新