react-native - 如何使 React Native 应用程序在使用 i18next 从应用程序更改时保存语言?

标签 react-native localization i18next asyncstorage react-i18next

我在 native react 中使用 i18next 在应用程序中使用多种语言: 用户可以通过单击按钮从应用程序更改语言 在此按钮中,我执行一个操作来设置 AsyncStorage 中的语言, 在 i18next init 文件中,我想使用 AsyncStorage 的值,但它不会更改它,因为 AsyncStorage 它需要异步和等待,因此需要很长时间才能更改该值, 这是代码:

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import English from '../Translation/Languages/English.json';
import Spanish from '../Translation/Languages/Spanish.json';
import Arabic from '../Translation/Languages/Arabic.json';
import AsyncStorage from '@react-native-async-storage/async-storage';

let language = null;

const changeLanguage = async () => {
try {
    const Lang = await AsyncStorage.getItem('Language');
    if (Lang !== null) {
        language = Lang;
    }
}
catch (error) {
    console.log("Error ", error)
}
};

changeLanguage();

i18n
.use(initReactI18next)
.init({
    lng: language,
    fallbackLng: 'en',
    resources: {
        en: English,
        es: Spanish,
        ar: Arabic
    }
});

export default i18n;

最佳答案

看看这个 medium-post对于工作样本...

Github 存储库 https://github.com/hend-elsahli/ReactNativeLocalization

使用语言检测器

i18n
  .use(languageDetector)
  .init(...)
const languageDetector = {
  init: Function.prototype,
  type: 'languageDetector',
  async: true, // flags below detection to be async
  detect: async callback => {
    const selectedLanguage = await AsyncStorage.getItem('Language');
    /** ... */
    callback(selectedLanguage);
  },
  cacheUserLanguage: () => {},
};

关于react-native - 如何使 React Native 应用程序在使用 i18next 从应用程序更改时保存语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66227252/

相关文章:

react-native - 可以 react 导航在选项卡导航器上添加自定义按钮,如图所示

ios - 后台抓取,测试问题

ios - iPad OS 是否可以检测键盘是否处于 float 模式?

c# - 本地化/国际化工具

localization - i18next 缺少 key 而 key 存在?

reactjs - react-i18next 获取错误尝试导入错误

javascript - 无法解析模块 "events"React-Native

localization - 如何在 Google Maps API V3 中检索英文结果

blackberry - BlackBerry:是否有有关如何将BB应用程序本地化为从右至左语言(如阿拉伯语,希伯来语)的示例?

javascript - 如何使用 i18nextBrowserLanguageDetector 的结果