我该如何更改语言&同时导航到另一页?

发布于 2025-02-02 20:44:12 字数 5026 浏览 1 评论 0原文

在开发了负责选择该应用程序语言的REDUX之后,我在更改语言并在一键单击中导航到另一页时面临一些困难。需要两次点击:第一次点击:语言更新 - 第二次点击:导航过程。快速手将是高度重视的。这是源代码:

languageactytypes.tsx

export const SET_ENGLISH = 'SET_ENGLISH';
export const SET_ARABIC = 'SET_ARABIC';
export const SET_ESPANOL = 'SET_ESPANOL';

languageactioncreator.tsx

import * as languageActionTypes from '../ActionTypes/languageActionTypes';

export const setEnglish = () => {
  const action = {
    type: languageActionTypes.SET_ENGLISH,
  };
  return action;
};

export const setArabic = () => {
  const action = {
    type: languageActionTypes.SET_ARABIC,
  };
  return action;
};

export const setEspanol = () => {
  const action = {
    type: languageActionTypes.SET_ESPANOL,
  };
  return action;
};

languagereducer.tsx

import {SET_ENGLISH, SET_ARABIC, SET_ESPANOL} from '../ActionTypes/languageActionTypes';

const initialState = {language: 'en'};

const LanguageReducer = (state = initialState, action: any) => {

  switch (action.type) {
    case SET_ENGLISH:
      return {language: 'en'};
    case SET_ARABIC:
      return {language: 'ar'};
    case SET_ESPANOL:
      return {language: 'sp'};
    default:
      return state;
  }
  
};

export default LanguageReducer;

lankagagesElector.tsx

import React from 'react';
import {SafeAreaView, ImageBackground, Image, Text, View, TouchableOpacity} from 'react-native';
import * as Animatable from 'react-native-animatable';
import {images} from '../../constants';
import styles from './LanguageSelectorStyle';
import {connect} from 'react-redux';
import {setEnglish, setArabic, setEspanol} from '../../store/Actions/languageActionCreator.tsx';
import '../../assets/i18n/i18n';
import {useTranslation} from 'react-i18next';

const LanguageSelector = ({navigation, language, makeEnglish, makeArabic, makeEspanol}: any) => {
  
  const {i18n} = useTranslation();

  const transEnglish = () => {
    i18n
      .changeLanguage(language)
      .then(() => {
        makeEnglish();
        language === 'en' && navigation.navigate('RegistrationLogin');
      })
      .catch(err => console.log(err));
  };

  const transArabic = () => {
    i18n
      .changeLanguage(language)
      .then(() => {
        makeArabic();
        language === 'ar' && navigation.navigate('RegistrationLogin');
      })
      .catch(err => console.log(err));
  };

  const transEspanol = () => {
    i18n
      .changeLanguage(language)
      .then(() => {
        makeEspanol();
        language === 'sp' && navigation.navigate('RegistrationLogin');
      })
      .catch(err => console.log(err));
  };

  return (
    <SafeAreaView>
      <ImageBackground style={styles.backgroundImage} source={images.backgroundImage} resizeMode="cover">
        <View style={styles.content}>
          <Image style={styles.appLogo} source={images.fullDTTLogo} resizeMode="contain" />
          <View style={styles.actionView}>
            <Animatable.View
              animation="bounceInUp"
              iterationCount={1}
              iterationDelay={500}
              direction="alternate">
              <TouchableOpacity 
                style={styles.actionBtn}
                onPress={() => {transEnglish()}}>
                <Text style={styles.actionTxtBtn}>English</Text>
              </TouchableOpacity>
            </Animatable.View>
            <Animatable.View
              animation="bounceInUp"
              iterationCount={1}
              iterationDelay={1000}
              direction="alternate">
              <TouchableOpacity 
                style={styles.actionBtn}  
                onPress={() => {transArabic()}}>
                <Text style={styles.actionTxtBtn}>Arabic</Text>
              </TouchableOpacity>
            </Animatable.View>
            <Animatable.View
              animation="bounceInUp"
              iterationCount={1}
              iterationDelay={1500}
              direction="alternate">
              <TouchableOpacity 
                style={styles.actionBtn}
                onPress={() => {transEspanol()}}>
                <Text style={styles.actionTxtBtn}>Espanol</Text>
              </TouchableOpacity>
            </Animatable.View>
          </View>
        </View>
      </ImageBackground>
      {console.log('Language:', language)}
    </SafeAreaView>
  );
  
};

const mapStateToProps = (state: any) => {
  return {
    language: state.LanguageReducer.language,
  };
};

const mapDispatchToProps = (dispatch: any) => ({
  makeEnglish: () => dispatch(setEnglish()),
  makeArabic: () => dispatch(setArabic()),
  makeEspanol: () => dispatch(setEspanol()),
});

export default connect(mapStateToProps, mapDispatchToProps)(LanguageSelector);

Having developed a redux responsible for selecting the application's language, I am facing some difficulties in changing the language and navigating to another page within one click. Two clicks are needed: First Click: Language Update - Second Click: Navigation Process. Getting a quick hand would be highly valued. Here is the source code:

languageActionTypes.tsx

export const SET_ENGLISH = 'SET_ENGLISH';
export const SET_ARABIC = 'SET_ARABIC';
export const SET_ESPANOL = 'SET_ESPANOL';

languageActionCreator.tsx

import * as languageActionTypes from '../ActionTypes/languageActionTypes';

export const setEnglish = () => {
  const action = {
    type: languageActionTypes.SET_ENGLISH,
  };
  return action;
};

export const setArabic = () => {
  const action = {
    type: languageActionTypes.SET_ARABIC,
  };
  return action;
};

export const setEspanol = () => {
  const action = {
    type: languageActionTypes.SET_ESPANOL,
  };
  return action;
};

languageReducer.tsx

import {SET_ENGLISH, SET_ARABIC, SET_ESPANOL} from '../ActionTypes/languageActionTypes';

const initialState = {language: 'en'};

const LanguageReducer = (state = initialState, action: any) => {

  switch (action.type) {
    case SET_ENGLISH:
      return {language: 'en'};
    case SET_ARABIC:
      return {language: 'ar'};
    case SET_ESPANOL:
      return {language: 'sp'};
    default:
      return state;
  }
  
};

export default LanguageReducer;

LanguageSelector.tsx

import React from 'react';
import {SafeAreaView, ImageBackground, Image, Text, View, TouchableOpacity} from 'react-native';
import * as Animatable from 'react-native-animatable';
import {images} from '../../constants';
import styles from './LanguageSelectorStyle';
import {connect} from 'react-redux';
import {setEnglish, setArabic, setEspanol} from '../../store/Actions/languageActionCreator.tsx';
import '../../assets/i18n/i18n';
import {useTranslation} from 'react-i18next';

const LanguageSelector = ({navigation, language, makeEnglish, makeArabic, makeEspanol}: any) => {
  
  const {i18n} = useTranslation();

  const transEnglish = () => {
    i18n
      .changeLanguage(language)
      .then(() => {
        makeEnglish();
        language === 'en' && navigation.navigate('RegistrationLogin');
      })
      .catch(err => console.log(err));
  };

  const transArabic = () => {
    i18n
      .changeLanguage(language)
      .then(() => {
        makeArabic();
        language === 'ar' && navigation.navigate('RegistrationLogin');
      })
      .catch(err => console.log(err));
  };

  const transEspanol = () => {
    i18n
      .changeLanguage(language)
      .then(() => {
        makeEspanol();
        language === 'sp' && navigation.navigate('RegistrationLogin');
      })
      .catch(err => console.log(err));
  };

  return (
    <SafeAreaView>
      <ImageBackground style={styles.backgroundImage} source={images.backgroundImage} resizeMode="cover">
        <View style={styles.content}>
          <Image style={styles.appLogo} source={images.fullDTTLogo} resizeMode="contain" />
          <View style={styles.actionView}>
            <Animatable.View
              animation="bounceInUp"
              iterationCount={1}
              iterationDelay={500}
              direction="alternate">
              <TouchableOpacity 
                style={styles.actionBtn}
                onPress={() => {transEnglish()}}>
                <Text style={styles.actionTxtBtn}>English</Text>
              </TouchableOpacity>
            </Animatable.View>
            <Animatable.View
              animation="bounceInUp"
              iterationCount={1}
              iterationDelay={1000}
              direction="alternate">
              <TouchableOpacity 
                style={styles.actionBtn}  
                onPress={() => {transArabic()}}>
                <Text style={styles.actionTxtBtn}>Arabic</Text>
              </TouchableOpacity>
            </Animatable.View>
            <Animatable.View
              animation="bounceInUp"
              iterationCount={1}
              iterationDelay={1500}
              direction="alternate">
              <TouchableOpacity 
                style={styles.actionBtn}
                onPress={() => {transEspanol()}}>
                <Text style={styles.actionTxtBtn}>Espanol</Text>
              </TouchableOpacity>
            </Animatable.View>
          </View>
        </View>
      </ImageBackground>
      {console.log('Language:', language)}
    </SafeAreaView>
  );
  
};

const mapStateToProps = (state: any) => {
  return {
    language: state.LanguageReducer.language,
  };
};

const mapDispatchToProps = (dispatch: any) => ({
  makeEnglish: () => dispatch(setEnglish()),
  makeArabic: () => dispatch(setArabic()),
  makeEspanol: () => dispatch(setEspanol()),
});

export default connect(mapStateToProps, mapDispatchToProps)(LanguageSelector);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

落在眉间の轻吻 2025-02-09 20:44:12

如果我正确理解您的要求,您可以扩展翻译功能以包括导航呼叫吗?

而不是

onPress={() => {transArabic()}}>

你可以尝试

onPress={() => {
  transArabic();
  navigation.navigate('someScreen');
}}>

If I understand your requirement correctly, can you expand the translation functions to include a navigate call?

Instead of

onPress={() => {transArabic()}}>

You could try

onPress={() => {
  transArabic();
  navigation.navigate('someScreen');
}}>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文