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

问题描述 投票:0回答:1

我正在使用 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 有项目“语言”并且正在按预期设置值,我希望每次打开应用程序时它都能从异步存储中检测到语言并且在关闭时不会丢失其状态。

reactjs react-native i18next asyncstorage react-i18next
1个回答
0
投票
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 是否正在执行

© www.soinside.com 2019 - 2024. All rights reserved.