案例是改变语言,函数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'导入{I18nManager}。
I18nManager.isRTL ? 'right':'left'。