在createStackNavigator()之前执行代码。

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

案例是改变语言,函数setlanguage从asyncstorage中检索语言代码并设置该语言,这个执行与其他初始化如createStackNavigator、createDrawerNavigator同时运行,所以改变的语言字符串不会应用到像抽屉这样的导航组件上,如何在createStackNavigator之前执行设置语言?所以语言字符串是事先存在的。

我试过在home组件的componentDidMount中手动更改组件的导航选项,但是没有成功。

  const lang = await AsyncStorage.getItem('selectedLangCode');

  if (lang == null) {
    try {
      await AsyncStorage.setItem('selectedLangCode', 'en');
    } catch (e) {
      console.log('not able to store language');
    }
  }
  if (lang) {
    await strings.setLanguage(lang);
  }

而在App.js中,导航代码是有的。

  createDrawerNavigator(...components...))

我在根文件(index.js)中的app.js导入之前导入了languageSetup函数,但仍然是同步执行,所以当languageSetup运行时,createDrawerNavigator加载抽屉中的组件,所以在抽屉中语言翻译并不适用。

react-native react-native-android
1个回答
0
投票

你可以使用这个逻辑

从'react-native'导入{I18nManager}。

I18nManager.isRTL ? 'right':'left'。

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