У меня есть локализация в моем проекте; и перед вызовом компонента я хочу вызвать метод setI18nConfig (), который отвечает за языки. Но когда я его вызываю, сначала обрабатывается компонент, а затем этот метод. То есть этот метод становится последним в очереди. Я думаю, что это из-за обещания. Но что может повлиять на проблему, чтобы решить ее
Приложение. js
import {setI18nConfig} from './src/localesConfig';
import StackNavigator from './src/routes/homeStack';
export default class App extends Component {
constructor(props) {
super(props);
setI18nConfig(); // <---- here
}
render() {
return (StackNavigator());
}
}
localesConfig. js
export async function getCurrentLanguage() {
try {
return await AsyncStorage.getItem('Language');
} catch (e) {
// error reading value
}
}
export const translationGetters = {
// lazy requires (metro bundler does not support symlinks)
en: () => require('./translations/en.json'),
ru: () => require('./translations/ru.json'),
};
export const setI18nConfig = () => {
i18n.missingTranslation = function(key) {
return key;
};
// fallback if no available language fits
const fallback = {languageTag: 'en', isRTL: false};
const isRTL = fallback.isRTL;
getCurrentLanguage().then(val => { //<----here quee
const languageTag = val || fallback.languageTag;
// clear translation cache
translate.cache.clear();
// update layout direction
I18nManager.forceRTL(isRTL);
// set i18n-js config
i18n.translations = {[languageTag]: translationGetters[languageTag]()};
i18n.locale = languageTag;
});
homeBottomTabs. js
render() {
return (
<View>
<Text>{translate('password')}</Text>
</View>
);
}export default function RootTab() {
return (
<BottomTab.Navigator
screenOptions={{gestureEnabled: false}}
tabBarOptions={{
tabStyle: {
justifyContent: 'center',
alignItems: 'center',
},
showIcon: false,
}}>
<BottomTab.Screen
name="Main"
component={MainScreen}
options={{title: translate('Menu:Home'), headerShown: false}}
/>
<BottomTab.Screen
name="Chat"
component={ChatScreen}
options={{title: translate('Menu:Chat'), headerShown: false}}
/>
</BottomTab.Navigator>
);
}
И когда вызывается главный экран (то есть, когда приложение запускается), в результате я получаю это , но должно быть 1021 *