Commit e625ad19 by Nguyễn Thị Thúy

update multi language

parent ffd3b088
...@@ -30,11 +30,11 @@ const {width} = Dimensions.get('window'); ...@@ -30,11 +30,11 @@ const {width} = Dimensions.get('window');
const dataType = [ const dataType = [
{ {
value: '0', value: '0',
name: 'Tài khoản ngân hàng', name: I18n.t('AccountNumber'),
}, },
{ {
value: '1', value: '1',
name: 'Tài khoản thẻ', name: I18n.t('CardAccount'),
}, },
]; ];
...@@ -80,7 +80,7 @@ const BankInfor = (props) => { ...@@ -80,7 +80,7 @@ const BankInfor = (props) => {
}; };
const onPress = async () => { const onPress = async () => {
const titles = ['loại thẻ', 'mã ngân hàng', 'số thẻ/tài khoản']; const titles = [I18n.t('CardType').toLowerCase(), I18n.t('BankCode').toLowerCase(), I18n.t('CardNumberOrAccount').toLowerCase()];
const index = checkFormatArray([acc_type, bank_no, account_no]); const index = checkFormatArray([acc_type, bank_no, account_no]);
if (index === true) { if (index === true) {
...@@ -138,7 +138,7 @@ const BankInfor = (props) => { ...@@ -138,7 +138,7 @@ const BankInfor = (props) => {
fontSize: getFontXD(42), fontSize: getFontXD(42),
color: R.colors.color777, color: R.colors.color777,
}}> }}>
Loi th {I18n.t('CardType')}
</Text> </Text>
<PickerItem <PickerItem
width={width - 20} width={width - 20}
...@@ -149,17 +149,17 @@ const BankInfor = (props) => { ...@@ -149,17 +149,17 @@ const BankInfor = (props) => {
/> />
<TextField <TextField
isNumber={true} isNumber={true}
title={'Mã ngân hàng'} title={I18n.t('BankCode')}
onChangeText={(val) => setBackNo(val)} onChangeText={(val) => setBackNo(val)}
/> />
<TextField <TextField
title={'Số thẻ/tài khoản'} title={I18n.t('CardNumberOrAccount')}
isNumber={true} isNumber={true}
onChangeText={(val) => setAccountNo(val)} onChangeText={(val) => setAccountNo(val)}
/> />
<View style={styles.btnSend}> <View style={styles.btnSend}>
<Button title={'Xác minh'} onClick={onPress} /> <Button title={I18n.t('Confirm')} onClick={onPress} />
</View> </View>
</View> </View>
</ScrollView> </ScrollView>
......
...@@ -30,7 +30,7 @@ const GeneralInfor = (props) => { ...@@ -30,7 +30,7 @@ const GeneralInfor = (props) => {
const [address, setAdress] = useState(''); const [address, setAdress] = useState('');
const [birth, setBirth] = useState(new Date()); const [birth, setBirth] = useState(new Date());
const onNextPress = () => { const onNextPress = () => {
const titles = ['họ và tên đệm', 'tên', 'số điện thoại', 'địa chỉ']; const titles = [I18n.t('FirstLastName').toLowerCase(), I18n.t('Name').toLowerCase(), I18n.t('PhoneNumber').toLowerCase(), I18n.t('Address').toLowerCase()];
const index = checkFormatArray([lastName, firstName, phone, address]); const index = checkFormatArray([lastName, firstName, phone, address]);
if (index === true) { if (index === true) {
props.navigation.navigate('Profile', { props.navigation.navigate('Profile', {
...@@ -59,21 +59,21 @@ const GeneralInfor = (props) => { ...@@ -59,21 +59,21 @@ const GeneralInfor = (props) => {
<View style={{flexDirection: 'row'}}> <View style={{flexDirection: 'row'}}>
<View style={{flex: 1}}> <View style={{flex: 1}}>
<TextField <TextField
title={'Họ và tên đệm'} title={I18n.t('FirstLastName')}
onChangeText={(val) => setLastName(val)} onChangeText={(val) => setLastName(val)}
/> />
</View> </View>
<View style={{width: 20}} /> <View style={{width: 20}} />
<View style={{flex: 1}}> <View style={{flex: 1}}>
<TextField <TextField
title={'Tên'} title={I18n.t('Name')}
onChangeText={(val) => setFirstName(val)} onChangeText={(val) => setFirstName(val)}
/> />
</View> </View>
</View> </View>
<TextField <TextField
isNumber={true} isNumber={true}
title={'Số điện thoại'} title={I18n.t('PhoneNumber')}
onChangeText={(val) => setPhone(val)} onChangeText={(val) => setPhone(val)}
/> />
<PickerDate <PickerDate
...@@ -81,11 +81,11 @@ const GeneralInfor = (props) => { ...@@ -81,11 +81,11 @@ const GeneralInfor = (props) => {
onValueChange={(val) => { onValueChange={(val) => {
setBirth(val); setBirth(val);
}} }}
title={'Ngày sinh'} title={I18n.t('Birth')}
/> />
<TextMulti <TextMulti
title={'Địa chỉ'} title={I18n.t('Address')}
onChangeText={(val) => setAdress(val)} onChangeText={(val) => setAdress(val)}
/> />
<TouchableOpacity onPress={onNextPress} style={styles.btnNext}> <TouchableOpacity onPress={onNextPress} style={styles.btnNext}>
......
...@@ -35,15 +35,15 @@ const {width} = Dimensions.get('window'); ...@@ -35,15 +35,15 @@ const {width} = Dimensions.get('window');
const dataType = [ const dataType = [
{ {
value: '1', value: '1',
name: 'Chứng minh nhân dân', name: I18n.t('IdentityCard'),
}, },
{ {
value: '2', value: '2',
name: 'Hộ chiếu', name: I18n.t('Passport'),
}, },
{ {
value: '3', value: '3',
name: 'Căn cước công dân', name: I18n.t('CitizenIdentification'),
}, },
]; ];
...@@ -91,10 +91,10 @@ const Profile = (props) => { ...@@ -91,10 +91,10 @@ const Profile = (props) => {
const onPress = async () => { const onPress = async () => {
const titles = [ const titles = [
'loại thẻ', I18n.t('CardType').toLowerCase(),
'ảnh CNND mặt trước', I18n.t('IdentityCardFrontPhoto'),
'ảnh CMND mặt sau', I18n.t('IdentityCardBackPhoto'),
'ảnh chữ ký', I18n.t('SignPhoto').toLowerCase(),
]; ];
const index = checkFormatArray([type, urlFont, urlBack, urlSign]); const index = checkFormatArray([type, urlFont, urlBack, urlSign]);
if (index === true) { if (index === true) {
...@@ -144,7 +144,7 @@ const Profile = (props) => { ...@@ -144,7 +144,7 @@ const Profile = (props) => {
fontSize: getFontXD(42), fontSize: getFontXD(42),
color: R.colors.color777, color: R.colors.color777,
}}> }}>
Loi th {I18n.t('CardType')}
</Text> </Text>
<PickerItem <PickerItem
width={width - 20} width={width - 20}
...@@ -153,7 +153,7 @@ const Profile = (props) => { ...@@ -153,7 +153,7 @@ const Profile = (props) => {
setType(items); setType(items);
}} }}
/> />
{/* {/*
<TextField <TextField
isNumber={true} isNumber={true}
title={'Số thẻ'} title={'Số thẻ'}
...@@ -173,20 +173,20 @@ const Profile = (props) => { ...@@ -173,20 +173,20 @@ const Profile = (props) => {
}}> }}>
<PickerImgUni <PickerImgUni
onSelectImg={(path) => setUrlFont(path)} onSelectImg={(path) => setUrlFont(path)}
title={'Ảnh mặt trước CMND'} title={I18n.t('IdentityCardFrontPhoto')}
/> />
<PickerImgUni <PickerImgUni
onSelectImg={(path) => setUrlBack(path)} onSelectImg={(path) => setUrlBack(path)}
title={'Ảnh mặt sau CMND'} title={I18n.t('IdentityCardBackPhoto')}
/> />
<PickerImgUni <PickerImgUni
onSelectImg={(path) => setUrlSign(path)} onSelectImg={(path) => setUrlSign(path)}
title={'Ảnh chữ ký'} title={I18n.t('SignPhoto')}
/> />
</View> </View>
</View> </View>
<View style={styles.btnSend}> <View style={styles.btnSend}>
<Button title={'Xác minh'} onClick={onPress} /> <Button title={I18n.t('Confirm')} onClick={onPress} />
</View> </View>
</ScrollView> </ScrollView>
</TouchableWithoutFeedback> </TouchableWithoutFeedback>
......
...@@ -13,6 +13,7 @@ import { ...@@ -13,6 +13,7 @@ import {
Keyboard, Keyboard,
} from 'react-native'; } from 'react-native';
import R from '../../../assets/R'; import R from '../../../assets/R';
import I18n from '../../../helper/i18/i18n';
import moment from 'moment'; import moment from 'moment';
import AppText from '../../../components/AppText'; import AppText from '../../../components/AppText';
...@@ -64,7 +65,7 @@ const GeneralInfor = (props) => { ...@@ -64,7 +65,7 @@ const GeneralInfor = (props) => {
<TextField <TextField
editable={false} editable={false}
value={props.user.l_name} value={props.user.l_name}
title={'Họ và tên đệm'} title={I18n.t('FirstLastName')}
/> />
</View> </View>
<View style={{width: 20}} /> <View style={{width: 20}} />
...@@ -72,7 +73,7 @@ const GeneralInfor = (props) => { ...@@ -72,7 +73,7 @@ const GeneralInfor = (props) => {
<TextField <TextField
value={props.user.f_name} value={props.user.f_name}
editable={false} editable={false}
title={'Tên'} title={I18n.t('Name')}
/> />
</View> </View>
</View> </View>
...@@ -80,17 +81,17 @@ const GeneralInfor = (props) => { ...@@ -80,17 +81,17 @@ const GeneralInfor = (props) => {
value={props.user.phone} value={props.user.phone}
isNumber={true} isNumber={true}
editable={false} editable={false}
title={'Số điện thoại'} title={I18n.t('PhoneNumber')}
/> />
<PickerDate <PickerDate
valueString={convertDate(props.user.birthday)} valueString={convertDate(props.user.birthday)}
disabled={true} disabled={true}
title={'Ngày sinh'} title={I18n.t('Birth')}
/> />
<TextMulti <TextMulti
value={props.user.address} value={props.user.address}
editable={false} editable={false}
title={'Địa chỉ'} title={I18n.t('Address')}
/> />
<View style={{height: 100}} /> <View style={{height: 100}} />
</View> </View>
......
...@@ -17,6 +17,7 @@ import Button from '../../../components/Button'; ...@@ -17,6 +17,7 @@ import Button from '../../../components/Button';
import PickerImgUni from '../../../components/Picker/PickerImgUni'; import PickerImgUni from '../../../components/Picker/PickerImgUni';
import R from '../../../assets/R'; import R from '../../../assets/R';
import TextField from '../../../components/Input/TextField'; import TextField from '../../../components/Input/TextField';
import I18n from '../../../helper/i18/i18n';
import {connect} from 'react-redux'; import {connect} from 'react-redux';
import {showLoading, hideLoading} from '../../../actions/loadingAction'; import {showLoading, hideLoading} from '../../../actions/loadingAction';
import { import {
...@@ -48,11 +49,11 @@ const Profile = (props) => { ...@@ -48,11 +49,11 @@ const Profile = (props) => {
const renderType = (type) => { const renderType = (type) => {
switch (type) { switch (type) {
case 1: case 1:
return 'Chứng minh nhân dân'; return I18n.t('IdentityCard');
case 2: case 2:
return 'Hộ chiếu'; return I18n.t('Passport');
default: default:
return 'Căn cước công dân'; return I18n.t('CitizenIdentification');
} }
}; };
return ( return (
...@@ -71,7 +72,7 @@ const Profile = (props) => { ...@@ -71,7 +72,7 @@ const Profile = (props) => {
<TextField <TextField
value={renderType(props.user.card_type)} value={renderType(props.user.card_type)}
editable={false} editable={false}
title={'Loại thẻ'} title={I18n.t('CardType')}
/> />
<View <View
...@@ -83,13 +84,13 @@ const Profile = (props) => { ...@@ -83,13 +84,13 @@ const Profile = (props) => {
}}> }}>
<Item <Item
linkImg={props.user.identity_before} linkImg={props.user.identity_before}
title={'Ảnh mặt trước CMND/CCCD'} title={I18n.t('IdentityCitizenCardBackPhoto')}
/> />
<Item <Item
linkImg={props.user.identity_after} linkImg={props.user.identity_after}
title={'Ảnh mặt sau CMND/CCCD'} title={I18n.t('IdentityCitizenCardFrontPhoto')}
/> />
<Item linkImg={props.user.sign_img} title={'Ảnh mặt chữ ký'} /> <Item linkImg={props.user.sign_img} title={I18n.t('SignPhoto')} />
</View> </View>
</View> </View>
</ScrollView> </ScrollView>
......
...@@ -32,7 +32,7 @@ const WalletDeposit = (props) => { ...@@ -32,7 +32,7 @@ const WalletDeposit = (props) => {
const navigate = useNavigation(); const navigate = useNavigation();
const onClick = async () => { const onClick = async () => {
const titles = ['số tiền', 'ghi chú']; const titles = [I18n.t('AmountOfMoney').toLowerCase(), I18n.t('Note').toLowerCase()];
const index = checkFormatArray([amount, notes]); const index = checkFormatArray([amount, notes]);
if (index === true) { if (index === true) {
...@@ -68,7 +68,7 @@ const WalletDeposit = (props) => { ...@@ -68,7 +68,7 @@ const WalletDeposit = (props) => {
<View style={styles.container}> <View style={styles.container}>
<View style={styles.wrapTop}> <View style={styles.wrapTop}>
<View style={styles.itemTop}> <View style={styles.itemTop}>
<Text style={styles.txtTitle}>Ví</Text> <Text style={styles.txtTitle}>{I18n.t('Wallet')}</Text>
<Text style={styles.txtMoney}> <Text style={styles.txtMoney}>
{' '} {' '}
{props.user.current_money != 0 {props.user.current_money != 0
...@@ -92,14 +92,14 @@ const WalletDeposit = (props) => { ...@@ -92,14 +92,14 @@ const WalletDeposit = (props) => {
{/* <TextDisable value={'10010101'} title={'Số tài khoản CQG'} /> */} {/* <TextDisable value={'10010101'} title={'Số tài khoản CQG'} /> */}
<TextMoney <TextMoney
onChangeText={(val) => setAmount(val)} onChangeText={(val) => setAmount(val)}
title={'Số tiền'} title={I18n.t('AmountOfMoney')}
value={amount} value={amount}
/> />
<TextMulti onChangeText={(val) => setNotes(val)} title={'Ghi chú'} /> <TextMulti onChangeText={(val) => setNotes(val)} title={I18n.t('Note')} />
</View> </View>
</View> </View>
<TouchableOpacity onPress={onClick} style={styles.btnSend}> <TouchableOpacity onPress={onClick} style={styles.btnSend}>
<Text style={styles.txtSend}>Np tin</Text> <Text style={styles.txtSend}>{I18n.t('Deposit')}</Text>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
); );
......
...@@ -33,8 +33,8 @@ import {ADDMETHODPAY} from '../../../routers/ScreenNames'; ...@@ -33,8 +33,8 @@ import {ADDMETHODPAY} from '../../../routers/ScreenNames';
import TextMoney from '../../../components/Input/InputMoney'; import TextMoney from '../../../components/Input/InputMoney';
import I18n from '../../../helper/i18/i18n'; import I18n from '../../../helper/i18/i18n';
var radio_props = [ var radio_props = [
{label: 'Từ ví', value: 'WALLET'}, {label: I18n.t('FromWallet'), value: 'WALLET'},
{label: 'Từ tài khoản CQG', value: 'INVESTMENT'}, {label: I18n.t('FromCQGAccount'), value: 'INVESTMENT'},
]; ];
const {width} = Dimensions.get('window'); const {width} = Dimensions.get('window');
...@@ -62,7 +62,7 @@ const WalletWithdraw = (props) => { ...@@ -62,7 +62,7 @@ const WalletWithdraw = (props) => {
if (res.data.code == 200 && res.data.data) { if (res.data.code == 200 && res.data.data) {
if (res.data.data.length == 0) { if (res.data.data.length == 0) {
confirmAlert( confirmAlert(
'Bạn chưa có phương thức thanh toán.Đi đến cài đặt phương thức thanh toán?', I18n.t('SettingPaymentMethodConfirm'),
() => navigate.navigate(ADDMETHODPAY), () => navigate.navigate(ADDMETHODPAY),
); );
} else { } else {
...@@ -77,7 +77,7 @@ const WalletWithdraw = (props) => { ...@@ -77,7 +77,7 @@ const WalletWithdraw = (props) => {
}; };
const onPressWithdraw = async () => { const onPressWithdraw = async () => {
const titles = ['tài khoản hưởng thụ', 'số tiền']; const titles = [I18n.t('BeneficiaryAccount'), I18n.t('AmountOfMoney').toLowerCase()];
const index = checkFormatArray([type, amount]); const index = checkFormatArray([type, amount]);
...@@ -123,7 +123,7 @@ const WalletWithdraw = (props) => { ...@@ -123,7 +123,7 @@ const WalletWithdraw = (props) => {
<View style={styles.container}> <View style={styles.container}>
<View style={styles.wrapTop}> <View style={styles.wrapTop}>
<View style={styles.itemTop}> <View style={styles.itemTop}>
<Text style={styles.txtTitle}>Ví</Text> <Text style={styles.txtTitle}>{I18n.t('Wallet')}</Text>
<Text style={styles.txtMoney}> <Text style={styles.txtMoney}>
{' '} {' '}
{props.user.current_money != 0 {props.user.current_money != 0
...@@ -150,7 +150,7 @@ const WalletWithdraw = (props) => { ...@@ -150,7 +150,7 @@ const WalletWithdraw = (props) => {
fontSize: getFontXD(42), fontSize: getFontXD(42),
color: R.colors.color777, color: R.colors.color777,
}}> }}>
Tài khon ngun {I18n.t('SourceAccount')}
</Text> </Text>
{/* <View style={styles.row}> */} {/* <View style={styles.row}> */}
<RadioForm <RadioForm
...@@ -169,7 +169,7 @@ const WalletWithdraw = (props) => { ...@@ -169,7 +169,7 @@ const WalletWithdraw = (props) => {
fontSize: getFontXD(42), fontSize: getFontXD(42),
color: R.colors.color777, color: R.colors.color777,
}}> }}>
Chn tài khon hưởng th {I18n.t('ChooseBeneficiaryAccount')}
</Text> </Text>
<PickerItem <PickerItem
width={width - 20} width={width - 20}
...@@ -180,17 +180,17 @@ const WalletWithdraw = (props) => { ...@@ -180,17 +180,17 @@ const WalletWithdraw = (props) => {
/> />
<TextMoney <TextMoney
onChangeText={(val) => setAmount(val)} onChangeText={(val) => setAmount(val)}
title={'Số tiền'} title={I18n.t('AmountOfMoney')}
value={amount} value={amount}
/> />
<TextMulti <TextMulti
onChangeText={(val) => setNotes(val)} onChangeText={(val) => setNotes(val)}
title={'Ghi chú'} title={I18n.t('Note')}
/> />
</View> </View>
</View> </View>
<TouchableOpacity onPress={onPressWithdraw} style={styles.btnSend}> <TouchableOpacity onPress={onPressWithdraw} style={styles.btnSend}>
<Text style={styles.txtSend}>Rút tin</Text> <Text style={styles.txtSend}>{I18n.t('Withdraw')}</Text>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</TouchableWithoutFeedback> </TouchableWithoutFeedback>
......
...@@ -40,7 +40,7 @@ const ConfirmEmail = (props) => { ...@@ -40,7 +40,7 @@ const ConfirmEmail = (props) => {
}, 500); }, 500);
} }
} else { } else {
Alert.alert(I18n.t('Notification'), 'Vui lòng nhập email!'); Alert.alert(I18n.t('Notification'), `${I18n.t('EnterEmailRequest')}!`);
} }
}; };
...@@ -50,12 +50,12 @@ const ConfirmEmail = (props) => { ...@@ -50,12 +50,12 @@ const ConfirmEmail = (props) => {
<View style={styles.container}> <View style={styles.container}>
<View style={styles.wrap}> <View style={styles.wrap}>
<View style={styles.containerCode}> <View style={styles.containerCode}>
<Text style={styles.txtTitle}>Vui lòng nhp email:</Text> <Text style={styles.txtTitle}>`${I18n.t('EnterEmailRequest')}:`</Text>
<TextInput <TextInput
placeholderTextColor={R.colors.placeHolder} placeholderTextColor={R.colors.placeHolder}
style={styles.txtInput} style={styles.txtInput}
autoCapitalize="none" autoCapitalize="none"
placeholder="Nhập email" placeholder={I18n.t('EnterEmail')}
value={value} value={value}
onChangeText={(val) => setValue(val)} onChangeText={(val) => setValue(val)}
/> />
...@@ -65,10 +65,10 @@ const ConfirmEmail = (props) => { ...@@ -65,10 +65,10 @@ const ConfirmEmail = (props) => {
<View style={styles.footer}> <View style={styles.footer}>
<TouchableOpacity onPress={getOTP} style={styles.btn}> <TouchableOpacity onPress={getOTP} style={styles.btn}>
<Text style={styles.txtBtn}>Ly mã xác thc</Text> <Text style={styles.txtBtn}>{I18n.t('GetVerificationCode')}</Text>
</TouchableOpacity> </TouchableOpacity>
<TouchableOpacity onPress={() => navigate.goBack()}> <TouchableOpacity onPress={() => navigate.goBack()}>
<Text style={styles.txtSend}>Quay li đăng nhp</Text> <Text style={styles.txtSend}>{I18n.t('BackToLogin')}</Text>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</View> </View>
......
...@@ -42,9 +42,9 @@ const ConfirmOTP = (propsa) => { ...@@ -42,9 +42,9 @@ const ConfirmOTP = (propsa) => {
const confirm = async () => { const confirm = async () => {
if (!value) { if (!value) {
Alert.alert(I18n.t('Notification'), 'Vui long nhập mã OTP'); Alert.alert(I18n.t('Notification'), I18n.t('EnterOTPRequest'));
} else if (value.length != 4) { } else if (value.length != 4) {
Alert.alert(I18n.t('Notification'), 'Mã OTP không đúng định dạng'); Alert.alert(I18n.t('Notification'), I18n.t('OTPInvalid'));
} else { } else {
propsa.showLoading(); propsa.showLoading();
const res = await verifyOTPApi({ const res = await verifyOTPApi({
...@@ -106,7 +106,7 @@ const ConfirmOTP = (propsa) => { ...@@ -106,7 +106,7 @@ const ConfirmOTP = (propsa) => {
<TouchableOpacity <TouchableOpacity
style={styles.wrapFooter} style={styles.wrapFooter}
onPress={() => navigate.goBack()}> onPress={() => navigate.goBack()}>
<Text style={styles.txtNote}>Mã OTP có hiu lc trong 5 phút.</Text> <Text style={styles.txtNote}>{I18n.t('OTPValidFiveMinute')}</Text>
<AppText i18nKey={'Re_send'} style={styles.txtSend} /> <AppText i18nKey={'Re_send'} style={styles.txtSend} />
</TouchableOpacity> </TouchableOpacity>
</View> </View>
......
...@@ -62,7 +62,7 @@ const Login = (props) => { ...@@ -62,7 +62,7 @@ const Login = (props) => {
}; };
const onSubmitLogin = async (email, pass) => { const onSubmitLogin = async (email, pass) => {
const titles = ['tên đăng nhập', 'mật khẩu']; const titles = [I18n.t('Username').toLowerCase(), I18n.t('Password').toLowerCase()];
const index = checkFormatArray([email, pass]); const index = checkFormatArray([email, pass]);
if (index === true) { if (index === true) {
...@@ -110,14 +110,14 @@ const Login = (props) => { ...@@ -110,14 +110,14 @@ const Login = (props) => {
<InputIcon <InputIcon
icon={R.images.iconUser3} icon={R.images.iconUser3}
title={'Email'} title={'Email'}
placeholder={'Nhập email'} placeholder={I18n.t('EnterEmail')}
onChangeText={(val) => setEmail(val)} onChangeText={(val) => setEmail(val)}
value={email} value={email}
/> />
<InputIcon <InputIcon
icon={R.images.iconLock} icon={R.images.iconLock}
title={'Password'} title={'Password'}
placeholder={'Nhập mật khẩu'} placeholder={I18n.t('EnterPassword')}
isPassWord={true} isPassWord={true}
onChangeText={(val) => setPass(val)} onChangeText={(val) => setPass(val)}
value={pass} value={pass}
...@@ -188,6 +188,7 @@ const styles = StyleSheet.create({ ...@@ -188,6 +188,7 @@ const styles = StyleSheet.create({
marginTop: 30, marginTop: 30,
}, },
txtRegistor: { txtRegistor: {
marginLeft: WIDTHXD(10),
fontSize: getFontXD(42), fontSize: getFontXD(42),
color: '#1473E6', color: '#1473E6',
}, },
......
...@@ -15,6 +15,7 @@ import {useNavigation} from '@react-navigation/native'; ...@@ -15,6 +15,7 @@ import {useNavigation} from '@react-navigation/native';
import {getFontXD, HEIGHTXD, WIDTHXD} from '../../Config/Functions'; import {getFontXD, HEIGHTXD, WIDTHXD} from '../../Config/Functions';
import R from '../../assets/R'; import R from '../../assets/R';
import {AUTHEN} from '../../routers/ScreenNames'; import {AUTHEN} from '../../routers/ScreenNames';
import I18n from '../../helper/i18/i18n';
import {showLoading, hideLoading} from '../../actions/loadingAction'; import {showLoading, hideLoading} from '../../actions/loadingAction';
import {connect} from 'react-redux'; import {connect} from 'react-redux';
...@@ -28,7 +29,7 @@ const NewPassword = (props) => { ...@@ -28,7 +29,7 @@ const NewPassword = (props) => {
const changePass = async () => { const changePass = async () => {
if (!password || !cfPassword) { if (!password || !cfPassword) {
Alert.alert('Vui lòng điền đầy đủ thông tin!'); Alert.alert(I18n.t('EnterAllInfo'));
} else { } else {
props.showLoading(); props.showLoading();
const res = await forgotPasswordApi({ const res = await forgotPasswordApi({
...@@ -42,7 +43,7 @@ const NewPassword = (props) => { ...@@ -42,7 +43,7 @@ const NewPassword = (props) => {
if (res.data.code == 200) { if (res.data.code == 200) {
await setTimeout(() => { await setTimeout(() => {
Alert.alert('Thông báo!', 'Đổi mật khẩu thành công'); Alert.alert(I18n.t('Notification'), I18n.t('ChangePasswordSuccess'));
navigate.reset({ navigate.reset({
index: 1, index: 1,
routes: [{name: AUTHEN}], routes: [{name: AUTHEN}],
...@@ -51,7 +52,7 @@ const NewPassword = (props) => { ...@@ -51,7 +52,7 @@ const NewPassword = (props) => {
} else { } else {
setTimeout(() => { setTimeout(() => {
console.log('response', res.data); console.log('response', res.data);
Alert.alert('Thông báo!', res.data.message); Alert.alert(I18n.t('Notification'), res.data.message);
}, 500); }, 500);
} }
} }
...@@ -64,10 +65,10 @@ const NewPassword = (props) => { ...@@ -64,10 +65,10 @@ const NewPassword = (props) => {
<View style={styles.container}> <View style={styles.container}>
<View style={styles.wrap}> <View style={styles.wrap}>
<View style={styles.containerCode1}> <View style={styles.containerCode1}>
<Text style={styles.txtTitle}>Vui lòng nhp mt khu mi</Text> <Text style={styles.txtTitle}>{I18n.t('EnterNewPassword')}</Text>
<TextInput <TextInput
style={styles.txtInput} style={styles.txtInput}
placeholder="Nhập mật khẩu mới" placeholder={I18n.t('EnterNewPasswordHint')}
placeholderTextColor={R.colors.placeHolder} placeholderTextColor={R.colors.placeHolder}
autoCapitalize="none" autoCapitalize="none"
value={password} value={password}
...@@ -76,11 +77,11 @@ const NewPassword = (props) => { ...@@ -76,11 +77,11 @@ const NewPassword = (props) => {
/> />
</View> </View>
<View style={styles.containerCode2}> <View style={styles.containerCode2}>
<Text style={styles.txtTitle}>Nhp li mt khu</Text> <Text style={styles.txtTitle}>{I18n.t('ReEnterPassword')}</Text>
<TextInput <TextInput
style={styles.txtInput} style={styles.txtInput}
autoCapitalize="none" autoCapitalize="none"
placeholder="Xác nhận lại mật khẩu mới" placeholder={I18n.t('ConfirmNewPassword')}
value={cfPassword} value={cfPassword}
secureTextEntry={true} secureTextEntry={true}
placeholderTextColor={R.colors.placeHolder} placeholderTextColor={R.colors.placeHolder}
...@@ -92,7 +93,7 @@ const NewPassword = (props) => { ...@@ -92,7 +93,7 @@ const NewPassword = (props) => {
<View style={styles.footer}> <View style={styles.footer}>
<TouchableOpacity onPress={changePass} style={styles.btn}> <TouchableOpacity onPress={changePass} style={styles.btn}>
<Text style={styles.txtBtn}>Cp nht</Text> <Text style={styles.txtBtn}>{I18n.t('Update')}</Text>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</View> </View>
......
...@@ -26,7 +26,7 @@ const Registor = (props) => { ...@@ -26,7 +26,7 @@ const Registor = (props) => {
const [sponsor_id, setSponsor_id] = useState(''); const [sponsor_id, setSponsor_id] = useState('');
const registorClick = async () => { const registorClick = async () => {
const titles = ['email', 'mật khẩu', 'xác nhận mật khẩu']; const titles = ['email', I18n.t('Password').toLowerCase(), I18n.t('ConfirmPassword').toLowerCase()];
const index = checkFormatArray([email, password, password_confirmation]); const index = checkFormatArray([email, password, password_confirmation]);
if (index === true) { if (index === true) {
...@@ -53,7 +53,7 @@ const Registor = (props) => { ...@@ -53,7 +53,7 @@ const Registor = (props) => {
if (res.data.code == 200 && res.data.data) { if (res.data.code == 200 && res.data.data) {
setTimeout(() => { setTimeout(() => {
Alert.alert(I18n.t('Notification'), 'Đăng ký tài khoản thành công!'); Alert.alert(I18n.t('Notification'), I18n.t('RegisterAccountSuccess'));
navigation.navigate('LOGIN'); navigation.navigate('LOGIN');
}, 500); }, 500);
} else { } else {
...@@ -80,28 +80,28 @@ const Registor = (props) => { ...@@ -80,28 +80,28 @@ const Registor = (props) => {
<InputIcon <InputIcon
icon={R.images.iconEmail} icon={R.images.iconEmail}
title={'Email'} title={'Email'}
placeholder={'Nhập email'} placeholder={I18n.t('EnterEmail')}
onChangeText={(val) => setEmail(val)} onChangeText={(val) => setEmail(val)}
/> />
<InputIcon <InputIcon
icon={R.images.iconLock} icon={R.images.iconLock}
title={'Password'} title={'Password'}
placeholder={'Nhập mật khẩu'} placeholder={I18n.t('EnterPassword')}
onChangeText={(val) => setPassword(val)} onChangeText={(val) => setPassword(val)}
isPassWord={true} isPassWord={true}
/> />
<InputIcon <InputIcon
icon={R.images.iconLock} icon={R.images.iconLock}
title={'Confirm_pass'} title={'Confirm_pass'}
placeholder={'Nhập mật khẩu'} placeholder={I18n.t('EnterPassword')}
onChangeText={(val) => setPasswordConfirm(val)} onChangeText={(val) => setPasswordConfirm(val)}
isPassWord={true} isPassWord={true}
/> />
<InputIcon <InputIcon
icon={R.images.iconIntroduct} icon={R.images.iconIntroduct}
title={'Code_introduce'} title={'Code_introduce'}
placeholder={'Nhập mã giới thiệu nếu có'} placeholder={I18n.t('EnterReferralCode')}
onChangeText={(val) => setSponsor_id(val)} onChangeText={(val) => setSponsor_id(val)}
isPassWord={true} isPassWord={true}
/> />
......
...@@ -5,6 +5,7 @@ import HeaderSearch from '../../components/Header/HeaderSearch'; ...@@ -5,6 +5,7 @@ import HeaderSearch from '../../components/Header/HeaderSearch';
import {getFontXD} from '../../Config/Functions'; import {getFontXD} from '../../Config/Functions';
import Item from './Item'; import Item from './Item';
import AppText from '../../components/AppText'; import AppText from '../../components/AppText';
import I18n from '../../helper/i18/i18n';
const Fillters = [ const Fillters = [
{ {
...@@ -34,9 +35,9 @@ const data = [ ...@@ -34,9 +35,9 @@ const data = [
id: '1', id: '1',
month: 2, month: 2,
day: '20', day: '20',
name: 'Nạp tiền', name: I18n.t('Deposit'),
money: 10000000, money: 10000000,
note: 'Ghi chú nap tiền để đầu tư', note: '',
status: 1, status: 1,
date: '20/02/2021', date: '20/02/2021',
}, },
...@@ -44,9 +45,9 @@ const data = [ ...@@ -44,9 +45,9 @@ const data = [
id: '2', id: '2',
month: 2, month: 2,
day: '20', day: '20',
name: 'Nạp tiền', name: I18n.t('Deposit'),
money: 2000000, money: 2000000,
note: 'Ghi chú nap tiền để đầu tư', note: '',
status: 1, status: 1,
date: '20/02/2021', date: '20/02/2021',
}, },
...@@ -54,9 +55,9 @@ const data = [ ...@@ -54,9 +55,9 @@ const data = [
id: '3', id: '3',
month: 2, month: 2,
day: '20', day: '20',
name: 'Nạp tiền', name: I18n.t('Deposit'),
money: 3000000, money: 3000000,
note: 'Ghi chú nap tiền để đầu tư', note: '',
status: 1, status: 1,
date: '20/02/2021', date: '20/02/2021',
}, },
...@@ -64,9 +65,9 @@ const data = [ ...@@ -64,9 +65,9 @@ const data = [
id: '4', id: '4',
month: 2, month: 2,
day: '20', day: '20',
name: 'Nạp tiền', name: I18n.t('Deposit'),
money: 4000000, money: 4000000,
note: 'Ghi chú nap tiền để đầu tư', note: '',
status: 1, status: 1,
date: '20/02/2021', date: '20/02/2021',
}, },
...@@ -74,9 +75,9 @@ const data = [ ...@@ -74,9 +75,9 @@ const data = [
id: '5', id: '5',
month: 2, month: 2,
day: '20', day: '20',
name: 'Nạp tiền', name: I18n.t('Deposit'),
money: 9000000, money: 9000000,
note: 'Ghi chú nap tiền để đầu tư', note: '',
status: 1, status: 1,
date: '20/02/2021', date: '20/02/2021',
}, },
...@@ -86,7 +87,7 @@ const ExchangeView = (props) => { ...@@ -86,7 +87,7 @@ const ExchangeView = (props) => {
return ( return (
<View style={{flex: 1}}> <View style={{flex: 1}}>
<HeaderSearch isWhite={true} title={'Giao dịch'} /> <HeaderSearch isWhite={true} title={I18n.t('Tradding')} />
<View style={styles.headerContainer}> <View style={styles.headerContainer}>
<FlatList <FlatList
showsHorizontalScrollIndicator={false} showsHorizontalScrollIndicator={false}
......
...@@ -3,6 +3,7 @@ import {View, Text, StyleSheet, TouchableOpacity} from 'react-native'; ...@@ -3,6 +3,7 @@ import {View, Text, StyleSheet, TouchableOpacity} from 'react-native';
import {getFontXD, HEIGHTXD, WIDTHXD, toPriceVnd} from '../../Config/Functions'; import {getFontXD, HEIGHTXD, WIDTHXD, toPriceVnd} from '../../Config/Functions';
import R from '../../assets/R'; import R from '../../assets/R';
import Block from '../../components/Block'; import Block from '../../components/Block';
import I18n from '../../helper/i18/i18n';
import {useNavigation} from '@react-navigation/native'; import {useNavigation} from '@react-navigation/native';
import {DETAIL_REQUIRE_MONEY} from '../../routers/ScreenNames'; import {DETAIL_REQUIRE_MONEY} from '../../routers/ScreenNames';
...@@ -37,7 +38,7 @@ const Item = (props) => { ...@@ -37,7 +38,7 @@ const Item = (props) => {
<Text numberOfLines={1} style={styles.txtTitle}> <Text numberOfLines={1} style={styles.txtTitle}>
{item.note} {item.note}
</Text> </Text>
<Text style={styles.txtDate}>Ngày {item.date}</Text> <Text style={styles.txtDate}>`${I18n.t('Date')} ${item.date}`</Text>
</Block> </Block>
</Block> </Block>
</View> </View>
......
...@@ -23,13 +23,14 @@ import PickerImg from '../../components/Picker/PickerImg'; ...@@ -23,13 +23,14 @@ import PickerImg from '../../components/Picker/PickerImg';
import {HEIGHTXD, WIDTHXD, getFontXD} from '../../Config/Functions'; import {HEIGHTXD, WIDTHXD, getFontXD} from '../../Config/Functions';
import R from '../../assets/R'; import R from '../../assets/R';
import Button from '../../components/Button'; import Button from '../../components/Button';
import I18n from '../../helper/i18/i18n';
const radio_props = [ const radio_props = [
{label: 'Rất kém', value: 0}, {label: I18n.t('VeryBad'), value: 0},
{label: 'Kém', value: 1}, {label: I18n.t('Bad'), value: 1},
{label: 'Bình thường', value: 2}, {label: I18n.t('Normal'), value: 2},
{label: 'Tốt', value: 3}, {label: I18n.t('Good'), value: 3},
{label: 'Rất tốt', value: 4}, {label: I18n.t('VeryGood'), value: 4},
]; ];
const FeedbackView = (props) => { const FeedbackView = (props) => {
...@@ -64,7 +65,7 @@ const FeedbackView = (props) => { ...@@ -64,7 +65,7 @@ const FeedbackView = (props) => {
<View style={{flex: 1}}> <View style={{flex: 1}}>
<HeaderBack isWhite={true} title={'SendFeedback'} /> <HeaderBack isWhite={true} title={'SendFeedback'} />
<View style={styles.container}> <View style={styles.container}>
<Text style={styles.txt}>Đánh giá dch v ca DCV Invest</Text> <Text style={styles.txt}>{I18n.t('ReviewService')}</Text>
<RadioForm animation={true}> <RadioForm animation={true}>
{radio_props.map((obj, i) => ( {radio_props.map((obj, i) => (
...@@ -97,7 +98,7 @@ const FeedbackView = (props) => { ...@@ -97,7 +98,7 @@ const FeedbackView = (props) => {
style={styles.txtInput} style={styles.txtInput}
placeholderTextColor={R.colors.placeHolder} placeholderTextColor={R.colors.placeHolder}
multiline={true} multiline={true}
placeholder={'Hãy chia sẻ cảm nhận về dịch vụ nhé'} placeholder={I18n.t('ShareYourFeel')}
onChangeText={(val) => setTxtInput(val)} onChangeText={(val) => setTxtInput(val)}
/> />
<View <View
...@@ -140,7 +141,7 @@ const FeedbackView = (props) => { ...@@ -140,7 +141,7 @@ const FeedbackView = (props) => {
))} ))}
</ScrollView> </ScrollView>
) : ( ) : (
<PickerImg title="Tải ảnh lên" onClickImage={onClickImages} /> <PickerImg title={I18n.t('UploadImage')} onClickImage={onClickImages} />
)} )}
</View> </View>
</View> </View>
...@@ -149,7 +150,7 @@ const FeedbackView = (props) => { ...@@ -149,7 +150,7 @@ const FeedbackView = (props) => {
<View style={styles.containerBtn}> <View style={styles.containerBtn}>
<Button <Button
onClick={() => console.log('hello')} onClick={() => console.log('hello')}
title={'Gửi phản hồi'} title={I18n.t('SendFeedback')}
/> />
</View> </View>
</View> </View>
......
...@@ -8,6 +8,7 @@ import { ...@@ -8,6 +8,7 @@ import {
} from '../../../Config/Functions'; } from '../../../Config/Functions';
import R from '../../../assets/R'; import R from '../../../assets/R';
import Block from '../../../components/Block'; import Block from '../../../components/Block';
import I18n from '../../../helper/i18/i18n';
const Item = (props) => { const Item = (props) => {
const {item} = props; const {item} = props;
...@@ -18,11 +19,11 @@ const Item = (props) => { ...@@ -18,11 +19,11 @@ const Item = (props) => {
<Block padding={[5, 10]} space={'between'} flex={1}> <Block padding={[5, 10]} space={'between'} flex={1}>
<View style={{justifyContent: 'center', flex: 1}}> <View style={{justifyContent: 'center', flex: 1}}>
<Text style={styles.txt1}> <Text style={styles.txt1}>
Tin thưởng:{' '} `${I18n.t('BonusMoney')}:{' '}`
<Text style={styles.money}>{toPriceVnd(item.money)}</Text> vnđ <Text style={styles.money}>{toPriceVnd(item.money)}</Text> vnđ
</Text> </Text>
<Text numberOfLines={1} style={styles.txt2}> <Text numberOfLines={1} style={styles.txt2}>
Ni dung: {item.content} `{I18n.t('Content')}: {item.content}`
</Text> </Text>
</View> </View>
<Text style={styles.txt}>{item.time}</Text> <Text style={styles.txt}>{item.time}</Text>
......
...@@ -34,7 +34,7 @@ const GeneralInfor = (props) => { ...@@ -34,7 +34,7 @@ const GeneralInfor = (props) => {
const [address, setAddress] = useState(props.user.address); const [address, setAddress] = useState(props.user.address);
const onClick = async () => { const onClick = async () => {
const titles = ['điện thoại', 'địa chỉ']; const titles = [I18n.t('Phone').toLowerCase(), I18n.t('Address').toLowerCase()];
const index = checkFormatArray([phone, address]); const index = checkFormatArray([phone, address]);
if (index === true) { if (index === true) {
props.showLoading(); props.showLoading();
...@@ -65,8 +65,8 @@ const GeneralInfor = (props) => { ...@@ -65,8 +65,8 @@ const GeneralInfor = (props) => {
}; };
const renderMale = () => { const renderMale = () => {
if (props.user.gender == 1) return 'Nữ'; if (props.user.gender == 1) return I18n.t('Female');
return 'Nam'; return I18n.t('Male2');
}; };
return ( return (
...@@ -137,7 +137,6 @@ const GeneralInfor = (props) => { ...@@ -137,7 +137,6 @@ const GeneralInfor = (props) => {
<View style={{justifyContent: 'center', alignItems: 'center'}}> <View style={{justifyContent: 'center', alignItems: 'center'}}>
<TouchableOpacity onPress={onClick} style={styles.btn}> <TouchableOpacity onPress={onClick} style={styles.btn}>
<AppText i18nKey={'Update'} style={styles.txtBtn}> <AppText i18nKey={'Update'} style={styles.txtBtn}>
Cp nht
</AppText> </AppText>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
......
...@@ -8,6 +8,7 @@ import { ...@@ -8,6 +8,7 @@ import {
} from '../../../Config/Functions'; } from '../../../Config/Functions';
import R from '../../../assets/R'; import R from '../../../assets/R';
import Block from '../../../components/Block'; import Block from '../../../components/Block';
import I18n from '../../../helper/i18/i18n';
import {useNavigation} from '@react-navigation/native'; import {useNavigation} from '@react-navigation/native';
import {DETAIL_REQUIRE_MONEY} from '../../../routers/ScreenNames'; import {DETAIL_REQUIRE_MONEY} from '../../../routers/ScreenNames';
...@@ -36,7 +37,7 @@ const Item = (props) => { ...@@ -36,7 +37,7 @@ const Item = (props) => {
{item.note} {item.note}
</Text> </Text>
</View> </View>
<Text style={styles.txtDate}>Ngày {item.date}</Text> <Text style={styles.txtDate}>`${I18n.t('Date')} ${item.date}`</Text>
</View> </View>
<View> <View>
<Text <Text
......
...@@ -55,10 +55,10 @@ const AddMethodPay = (props) => { ...@@ -55,10 +55,10 @@ const AddMethodPay = (props) => {
const onLick = async () => { const onLick = async () => {
const titles = [ const titles = [
'ngân hàng', I18n.t('Bank').toLowerCase(),
'chi nhánh', I18n.t('Branch').toLowerCase(),
'chủ tài khoản', I18n.t('OwnerAccount2').toLowerCase(),
'số tài khoản ngân hàng', I18n.t('AccountNumber').toLowerCase(),
]; ];
const index = checkFormatArray([ const index = checkFormatArray([
bank_id, bank_id,
...@@ -104,7 +104,7 @@ const AddMethodPay = (props) => { ...@@ -104,7 +104,7 @@ const AddMethodPay = (props) => {
<HeaderBack title={'AddPaymentMethod'} /> <HeaderBack title={'AddPaymentMethod'} />
<View style={styles.container}> <View style={styles.container}>
<View style={{flex: 1}}> <View style={{flex: 1}}>
<Text style={styles.txtTitle}>Chn ngân hàng </Text> <Text style={styles.txtTitle}>{I18n.t('SelectBank')}</Text>
{/*<PickerItem*/} {/*<PickerItem*/}
{/* value={bank_id}*/} {/* value={bank_id}*/}
{/* data={data}*/} {/* data={data}*/}
...@@ -113,31 +113,30 @@ const AddMethodPay = (props) => { ...@@ -113,31 +113,30 @@ const AddMethodPay = (props) => {
{/* }}*/} {/* }}*/}
{/*/>*/} {/*/>*/}
<SelectBankModal <SelectBankModal
title={'Chọn ngân hàng'} title={I18n.t('SelectBank')}
data={data} data={data}
onPressItem = {(item) => { onPressItem = {(item) => {
console.log(item)
setBankID(item) setBankID(item)
}} }}
/> />
<TextField <TextField
onChangeText={(val) => setBankName(val)} onChangeText={(val) => setBankName(val)}
title={'Chi nhánh'} title={I18n.t('Branch')}
/> />
<TextField <TextField
onChangeText={(val) => setAccountName(val)} onChangeText={(val) => setAccountName(val)}
title={'Tên chủ tài khoản'} title={I18n.t('OwnerAccountName')}
/> />
<TextField <TextField
onChangeText={(val) => setAccountNo(val)} onChangeText={(val) => setAccountNo(val)}
title={'Số tài khoản ngân hàng'} title={I18n.t('AccountNumber')}
isNumber={true} isNumber={true}
/> />
</View> </View>
<View style={{justifyContent: 'center', alignItems: 'center'}}> <View style={{justifyContent: 'center', alignItems: 'center'}}>
<TouchableOpacity onPress={onLick} style={styles.btn}> <TouchableOpacity onPress={onLick} style={styles.btn}>
<Text style={styles.txtAdd}>Thêm</Text> <Text style={styles.txtAdd}>{I18n.t('Add')}</Text>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</View> </View>
......
...@@ -6,6 +6,7 @@ import Block from '../../components/Block'; ...@@ -6,6 +6,7 @@ import Block from '../../components/Block';
import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
import {useNavigation} from '@react-navigation/native'; import {useNavigation} from '@react-navigation/native';
import {METHODPAYDETAIL} from '../../routers/ScreenNames'; import {METHODPAYDETAIL} from '../../routers/ScreenNames';
import AppText from '../../components/AppText';
const Item = (props) => { const Item = (props) => {
const navigate = useNavigation(); const navigate = useNavigation();
...@@ -19,9 +20,9 @@ const Item = (props) => { ...@@ -19,9 +20,9 @@ const Item = (props) => {
<Text style={styles.txtBig}>{item.title}</Text> <Text style={styles.txtBig}>{item.title}</Text>
<Block space={'between'} row flex={1}> <Block space={'between'} row flex={1}>
<Block> <Block>
<Text style={styles.txtLeft}>Ch TK</Text> <AppText style={styles.txtLeft} i18nKey={('OwnerAccount')}/>
<Text style={styles.txtLeft}>STK</Text> <Text style={styles.txtLeft}>STK</Text>
<Text style={styles.txtLeft}>Chi nhánh</Text> <AppText style={styles.txtLeft} i18nKey={('Branch')}/>
</Block> </Block>
<Block> <Block>
<Text style={styles.txtRight}>{item.account_name}</Text> <Text style={styles.txtRight}>{item.account_name}</Text>
......
import React, {useState, useEffect} from 'react'; import React, {useState, useEffect} from 'react';
import { import {
View, View,
Text, Text,
StyleSheet, StyleSheet,
FlatList, FlatList,
Dimensions, Dimensions,
TouchableOpacity, TouchableOpacity,
Alert, Alert,
KeyboardAvoidingView, KeyboardAvoidingView,
TouchableWithoutFeedback, TouchableWithoutFeedback,
Keyboard, Keyboard,
Platform, Platform,
} from 'react-native'; } from 'react-native';
import {connect} from 'react-redux'; import {connect} from 'react-redux';
import R from '../../assets/R'; import R from '../../assets/R';
...@@ -22,191 +22,198 @@ import {getFontXD, WIDTHXD, checkFormatArray} from '../../Config/Functions'; ...@@ -22,191 +22,198 @@ import {getFontXD, WIDTHXD, checkFormatArray} from '../../Config/Functions';
import TextField from '../../components/Input/TextField'; import TextField from '../../components/Input/TextField';
import PickerItem from '../../components/Picker/PickerItem'; import PickerItem from '../../components/Picker/PickerItem';
import { import {
deleteMethodBank, deleteMethodBank,
addMethodBank, addMethodBank,
updateMethodBank, updateMethodBank,
} from '../../apis/Functions/Widthdraw'; } from '../../apis/Functions/Widthdraw';
import {showLoading, hideLoading} from '../../actions/loadingAction'; import {showLoading, hideLoading} from '../../actions/loadingAction';
import {useNavigation} from '@react-navigation/native'; import {useNavigation} from '@react-navigation/native';
import BankInfor from '../../components/BankInfor'; import BankInfor from '../../components/BankInfor';
import AppText from '../../components/AppText';
const {width} = Dimensions.get('window'); const {width} = Dimensions.get('window');
const MethodPayDetail = (props) => { const MethodPayDetail = (props) => {
const [data, setData] = useState([]); const [data, setData] = useState([]);
const {params} = props.route; const {params} = props.route;
const [disable, setDisable] = useState(true); const [disable, setDisable] = useState(true);
const navigate = useNavigation(); const navigate = useNavigation();
const [branch_name, setBankName] = useState(params.branch_name); const [branch_name, setBankName] = useState(params.branch_name);
const [account_name, setAccountName] = useState(params.account_name); const [account_name, setAccountName] = useState(params.account_name);
const [account_no, setAccountNo] = useState(params.account_no); const [account_no, setAccountNo] = useState(params.account_no);
const onUpdate = async () => { const onUpdate = async () => {
const titles = ['chi nhánh', 'chủ tài khoản', 'số tài khoản ngân hàng']; const titles = [
const index = checkFormatArray([branch_name, account_name, account_no]); I18n.t('Branch').toLowerCase(),
if (index === true) { I18n.t('OwnerAccount2').toLowerCase(),
if ( I18n.t('AccountNumber').toLowerCase()
branch_name != params.branch_name || ];
account_name != params.account_name || const index = checkFormatArray([branch_name, account_name, account_no]);
account_no != params.account_no if (index === true) {
) { if (
branch_name != params.branch_name ||
account_name != params.account_name ||
account_no != params.account_no
) {
props.showLoading();
const res = await updateMethodBank({
platform: Platform.OS,
id: params.id,
branch_name,
account_name,
account_no,
});
props.hideLoading();
if (res.data.code == 200) {
setTimeout(() => {
Alert.alert(I18n.t('Notification'), res.data.message);
navigate.goBack();
}, 500);
} else {
setTimeout(() => {
Alert.alert(I18n.t('Notification'), res.data.message);
}, 500);
}
} else {
Alert.alert(I18n.t('Notification'), I18n.t('NothingChange'));
}
} else {
Alert.alert(
I18n.t('Notification'),
I18n.t('Please_fill_in') + titles[index],
);
}
};
const onRemove = async () => {
props.showLoading(); props.showLoading();
const res = await updateMethodBank({ const res = await deleteMethodBank({
platform: Platform.OS, platform: Platform.OS,
id: params.id, id: params.id,
branch_name,
account_name,
account_no,
}); });
props.hideLoading(); props.hideLoading();
if (res.data.code == 200) { if (res.data.code == 200) {
setTimeout(() => { setTimeout(() => {
Alert.alert(I18n.t('Notification'), res.data.message); Alert.alert(I18n.t('Notification'), res.data.message);
navigate.goBack(); navigate.goBack();
}, 500); }, 500);
} else { } else {
setTimeout(() => { setTimeout(() => {
Alert.alert(I18n.t('Notification'), res.data.message); Alert.alert(I18n.t('Notification'), res.data.message);
}, 500); }, 500);
} }
} else { };
Alert.alert(I18n.t('Notification'), 'Không có gì thay đổi');
}
} else
Alert.alert(
I18n.t('Notification'),
I18n.t('Please_fill_in') + titles[index],
);
};
const onRemove = async () => {
props.showLoading();
const res = await deleteMethodBank({
platform: Platform.OS,
id: params.id,
});
props.hideLoading();
if (res.data.code == 200) {
setTimeout(() => {
Alert.alert(I18n.t('Notification'), res.data.message);
navigate.goBack();
}, 500);
} else {
setTimeout(() => {
Alert.alert(I18n.t('Notification'), res.data.message);
}, 500);
}
};
return ( return (
<KeyboardAvoidingView <KeyboardAvoidingView
behavior={Platform.Os === 'ios' ? 'padding' : 'height'} behavior={Platform.Os === 'ios' ? 'padding' : 'height'}
style={{flex: 1}} style={{flex: 1}}
keyboardVerticalOffset={-50}> keyboardVerticalOffset={-50}>
<TouchableWithoutFeedback onPress={Keyboard.dismiss}> <TouchableWithoutFeedback onPress={Keyboard.dismiss}>
<View style={{flex: 1}}> <View style={{flex: 1}}>
<HeaderBack title={'DetailMethod'} /> <HeaderBack title={'DetailMethod'}/>
<View style={{flex: 1}}> <View style={{flex: 1}}>
<View style={styles.container}> <View style={styles.container}>
<BankInfor <BankInfor
linkImg={params.bank.logo} linkImg={params.bank.logo}
title={'Chọn ngân hàng'} title={I18n.t('SelectBank')}
value={params.bank.name} value={params.bank.name}
/> />
<TextField <TextField
onChangeText={(val) => setBankName(val)} onChangeText={(val) => setBankName(val)}
title={'Chi nhánh'} title={I18n.t('Branch')}
value={branch_name} value={branch_name}
/> />
<TextField <TextField
onChangeText={(val) => setAccountName(val)} onChangeText={(val) => setAccountName(val)}
title={'Tên chủ tài khoản'} title={I18n.t('OwnerAccountName')}
value={account_name} value={account_name}
/> />
<TextField <TextField
onChangeText={(val) => setAccountNo(val)} onChangeText={(val) => setAccountNo(val)}
title={'Số tài khoản ngân hàng'} title={I18n.t('AccountNumber')}
isNumber={true} isNumber={true}
value={account_no} value={account_no}
/> />
</View> </View>
</View> </View>
<View style={styles.footer}> <View style={styles.footer}>
<TouchableOpacity onPress={onUpdate} style={styles.btnLeft}> <TouchableOpacity onPress={onUpdate} style={styles.btnLeft}>
<Text style={styles.txtAdd}>Cp nht</Text> <AppText style={styles.txtAdd} i18nKey={('Update')}/>
</TouchableOpacity> </TouchableOpacity>
<TouchableOpacity <TouchableOpacity
onPress={() => { onPress={() => {
Alert.alert( Alert.alert(
'Thông báo!', `${I18n.t('Notification')}!`,
'Bạn có chắc chắn muốn xoá phương thức thanh toán', I18n.t('DeletePaymentMethodConfirm'),
[ [
{ {
text: 'Từ chối', text: I18n.t('Forbidden'),
style: 'cancel', style: 'cancel',
}, },
{text: 'Đồng ý', onPress: () => onRemove()}, {text: I18n.t('Ok'), onPress: () => onRemove()},
], ],
); );
}} }}
style={styles.btnRight}> style={styles.btnRight}>
<Text style={styles.txtAdd}>Xoá</Text> <AppText style={styles.txtAdd} i18nKey={('Delete')}/>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</View> </View>
</TouchableWithoutFeedback> </TouchableWithoutFeedback>
</KeyboardAvoidingView> </KeyboardAvoidingView>
); );
}; };
const styles = StyleSheet.create({ const styles = StyleSheet.create({
container: { container: {
paddingHorizontal: 20, paddingHorizontal: 20,
paddingTop: 10, paddingTop: 10,
}, },
footer: { footer: {
flexDirection: 'row', flexDirection: 'row',
alignItems: 'center', alignItems: 'center',
justifyContent: 'space-between', justifyContent: 'space-between',
marginBottom: 10, marginBottom: 10,
paddingHorizontal: 20, paddingHorizontal: 20,
}, },
btnLeft: { btnLeft: {
width: 150, width: 150,
height: 40, height: 40,
justifyContent: 'center', justifyContent: 'center',
alignItems: 'center', alignItems: 'center',
backgroundColor: R.colors.main, backgroundColor: R.colors.main,
borderRadius: 5, borderRadius: 5,
}, },
btnRight: { btnRight: {
width: 150, width: 150,
height: 40, height: 40,
justifyContent: 'center', justifyContent: 'center',
alignItems: 'center', alignItems: 'center',
backgroundColor: R.colors.main, backgroundColor: R.colors.main,
borderRadius: 5, borderRadius: 5,
}, },
txtAdd: { txtAdd: {
color: R.colors.white, color: R.colors.white,
fontSize: getFontXD(46), fontSize: getFontXD(46),
textTransform: 'uppercase', textTransform: 'uppercase',
fontWeight: 'bold', fontWeight: 'bold',
}, },
txtTitle: { txtTitle: {
fontSize: getFontXD(42), fontSize: getFontXD(42),
color: R.colors.color777, color: R.colors.color777,
marginBottom: 5, marginBottom: 5,
}, },
}); });
const mapStateToProps = (state) => { const mapStateToProps = (state) => {
return { return {
user: state.userReducer, user: state.userReducer,
}; };
}; };
export default connect(mapStateToProps, { export default connect(mapStateToProps, {
showLoading, showLoading,
hideLoading, hideLoading,
})(MethodPayDetail); })(MethodPayDetail);
...@@ -245,7 +245,7 @@ const styles = StyleSheet.create({ ...@@ -245,7 +245,7 @@ const styles = StyleSheet.create({
marginBottom: HEIGHTXD(300) marginBottom: HEIGHTXD(300)
}, },
input: { input: {
height: WIDTHXD(99), height: WIDTHXD(110),
width: getWidth() - WIDTHXD(90), width: getWidth() - WIDTHXD(90),
borderRadius: WIDTHXD(20), borderRadius: WIDTHXD(20),
backgroundColor: R.colors.gray5, backgroundColor: R.colors.gray5,
......
...@@ -16,6 +16,7 @@ import {useNavigation} from '@react-navigation/native'; ...@@ -16,6 +16,7 @@ import {useNavigation} from '@react-navigation/native';
import {MEDIADETAIL} from '../../../routers/ScreenNames'; import {MEDIADETAIL} from '../../../routers/ScreenNames';
import {getDetailMedia} from '../../../apis/Functions/NewFeed'; import {getDetailMedia} from '../../../apis/Functions/NewFeed';
import I18n from '../../../helper/i18/i18n'; import I18n from '../../../helper/i18/i18n';
import AppText from '../../../components/AppText';
const Item = (props) => { const Item = (props) => {
const navigate = useNavigation(); const navigate = useNavigation();
...@@ -82,7 +83,7 @@ const MediaDetail = (props) => { ...@@ -82,7 +83,7 @@ const MediaDetail = (props) => {
<Text style={styles.txtTitle}>{data.title}</Text> <Text style={styles.txtTitle}>{data.title}</Text>
</View> </View>
<View style={styles.body}> <View style={styles.body}>
<Text style={styles.txtBig}>Video xem nhiu</Text> <AppText style={styles.txtBig} i18nKey={('TopVideo')}/>
<FlatList <FlatList
showsVerticalScrollIndicator={false} showsVerticalScrollIndicator={false}
data={data.related_videos} data={data.related_videos}
......
...@@ -8,6 +8,7 @@ import {changeLanguage} from '../../actions/language'; ...@@ -8,6 +8,7 @@ import {changeLanguage} from '../../actions/language';
import {connect} from 'react-redux'; import {connect} from 'react-redux';
import AsyncStorage from '@react-native-community/async-storage'; import AsyncStorage from '@react-native-community/async-storage';
import KEY from '../../assets/AsynStorage'; import KEY from '../../assets/AsynStorage';
import I18n, {setLocation} from '../../helper/i18/i18n';
const dataLanguage = [ const dataLanguage = [
{ {
value: 'vi', value: 'vi',
...@@ -58,6 +59,7 @@ const SettingView = (props) => { ...@@ -58,6 +59,7 @@ const SettingView = (props) => {
setLanguage(items.name); setLanguage(items.name);
props.changeLanguage(items.value); props.changeLanguage(items.value);
AsyncStorage.setItem(KEY.LANGUAGE, items.value); AsyncStorage.setItem(KEY.LANGUAGE, items.value);
setLocation(I18n, items.value)
}} }}
/> />
</View> </View>
......
...@@ -158,7 +158,7 @@ const HeaderHome = (props) => { ...@@ -158,7 +158,7 @@ const HeaderHome = (props) => {
const navigate = useNavigation(); const navigate = useNavigation();
const copyToClipboard = () => { const copyToClipboard = () => {
Alert.alert(I18n.t('Notification'), 'Đã sao chép link giới thiệu!'); Alert.alert(I18n.t('Notification'), I18n.t('CopyLink'));
Clipboard.setString(props.user.sponsor_url); Clipboard.setString(props.user.sponsor_url);
}; };
......
...@@ -18,6 +18,8 @@ import R from '../../assets/R'; ...@@ -18,6 +18,8 @@ import R from '../../assets/R';
import Block from '../Block'; import Block from '../Block';
import DropDownPicker from 'react-native-dropdown-picker'; import DropDownPicker from 'react-native-dropdown-picker';
import Icon from 'react-native-vector-icons/Ionicons'; import Icon from 'react-native-vector-icons/Ionicons';
import I18n from '../../helper/i18/i18n';
import AppText from '../AppText';
// import DateTimePickerModal from 'react-native-modal-datetime-picker'; // import DateTimePickerModal from 'react-native-modal-datetime-picker';
const ModalOption = (props) => { const ModalOption = (props) => {
...@@ -38,27 +40,27 @@ const ModalOption = (props) => { ...@@ -38,27 +40,27 @@ const ModalOption = (props) => {
alignItems: 'center', alignItems: 'center',
}}> }}>
<View /> <View />
<Text style={styles.modalText}>Lc yêu cu</Text> <AppText style={styles.modalText} i18nKey={('RequestFilter')}/>
<TouchableOpacity onPress={closeModal}> <TouchableOpacity onPress={closeModal}>
<Icon name={'close-outline'} size={22} /> <Icon name={'close-outline'} size={22} />
</TouchableOpacity> </TouchableOpacity>
</View> </View>
<View style={{flex: 1, paddingVertical: 10}}> <View style={{flex: 1, paddingVertical: 10}}>
<Text style={styles.txtTitle}>Trng thái</Text> <AppText style={styles.txtTitle} i18nKey={('Status')}/>
<DropDownPicker <DropDownPicker
zIndex={5} zIndex={5}
items={[ items={[
{label: 'Đang chờ', value: 1}, {label: I18n.t('Waiting'), value: 1},
{label: 'Thành công', value: 2}, {label: I18n.t('Success'), value: 2},
{label: 'Thất bại', value: 3}, {label: I18n.t('Failed'), value: 3},
]} ]}
selectedLabelStyle={{ selectedLabelStyle={{
color: R.colors.black, color: R.colors.black,
fontSize: getFontXD(42), fontSize: getFontXD(42),
}} }}
containerStyle={{height: HEIGHT(40)}} containerStyle={{height: HEIGHT(40)}}
placeholder={'Chọn trạng thái yêu cầu'} placeholder={I18n.t('SelectRequestStatus')}
style={{backgroundColor: '#fafafa', marginTop: 4}} style={{backgroundColor: '#fafafa', marginTop: 4}}
itemStyle={{ itemStyle={{
justifyContent: 'flex-start', justifyContent: 'flex-start',
...@@ -73,7 +75,7 @@ const ModalOption = (props) => { ...@@ -73,7 +75,7 @@ const ModalOption = (props) => {
<View style={{marginTop: 10}}> <View style={{marginTop: 10}}>
<Block row> <Block row>
<Block> <Block>
<Text style={styles.txtTitle}>T ngày:</Text> <AppText style={styles.txtTitle} i18nKey={('FromDate')}/>
<TouchableOpacity <TouchableOpacity
onPress={() => setDatePickerVisibility(true)} onPress={() => setDatePickerVisibility(true)}
style={styles.datePicker}> style={styles.datePicker}>
...@@ -81,7 +83,7 @@ const ModalOption = (props) => { ...@@ -81,7 +83,7 @@ const ModalOption = (props) => {
</TouchableOpacity> </TouchableOpacity>
</Block> </Block>
<Block> <Block>
<Text style={styles.txtTitle}>Đến ngày:</Text> <AppText style={styles.txtTitle} i18nKey={('ToDate')}/>
<TouchableOpacity <TouchableOpacity
onPress={() => setDatePickerVisibility(true)} onPress={() => setDatePickerVisibility(true)}
style={styles.datePicker}> style={styles.datePicker}>
...@@ -107,7 +109,7 @@ const ModalOption = (props) => { ...@@ -107,7 +109,7 @@ const ModalOption = (props) => {
alignItems: 'center', alignItems: 'center',
}}> }}>
<TouchableOpacity onPress={onClick}> <TouchableOpacity onPress={onClick}>
<Text style={styles.txtBtn}>Đồng ý</Text> <Text style={styles.txtBtn}>{I18n.t('Ok')}</Text>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</View> </View>
......
...@@ -20,6 +20,9 @@ import { ...@@ -20,6 +20,9 @@ import {
WIDTHXDICON, WIDTHXDICON,
} from '../../Config/Functions'; } from '../../Config/Functions';
import R from '../../assets/R'; import R from '../../assets/R';
import I18n from '../../helper/i18/i18n';
import AppText from '../AppText';
/** /**
* Displays a popup search with a list of data that returns the value of the selected item * Displays a popup search with a list of data that returns the value of the selected item
...@@ -218,7 +221,7 @@ class ModalSearch extends Component { ...@@ -218,7 +221,7 @@ class ModalSearch extends Component {
/> />
), ),
ListEmptyComponent: () => ( ListEmptyComponent: () => (
<Text style={styles.itemText}>Không có d liu</Text> <AppText style={styles.itemText} i18nKey={('NoData')}/>
), ),
}} }}
/> />
......
import I18n from 'react-native-i18n'; import I18n from 'react-native-i18n';
import { I18nManager } from 'react-native';
import en from './locales/en'; import en from './locales/en';
import vi from './locales/vn'; import vi from './locales/vn';
...@@ -7,5 +8,13 @@ I18n.translations = { ...@@ -7,5 +8,13 @@ I18n.translations = {
en, en,
vi, vi,
}; };
I18n.fallbacks = true;
export default I18n; export default I18n;
export function setLocation(i18n, location) {
I18nManager.allowRTL(false);
const defaultLanguage = { languageTag: location, isRTL: false };
const { languageTag, isRTL } = defaultLanguage;
i18n.locale = languageTag;
return i18n
}
...@@ -111,6 +111,81 @@ export default { ...@@ -111,6 +111,81 @@ export default {
Re_send: 'Re send', Re_send: 'Re send',
Copied: 'Copied!', Copied: 'Copied!',
Please_fill_in: 'Please fill in ', Please_fill_in: 'Please fill in ',
RequestFilter: 'Request filter',
FromDate: 'From date:',
ToDate: 'To date:',
Failed: 'Failed',
SelectRequestStatus: 'Select request status',
TopVideo: 'Video watching a lot',
Delete: 'Delete',
SelectBank: 'Select Bank',
Branch: 'Branch',
OwnerAccountName: 'Owner account name',
AccountNumber: 'Account Number',
DeletePaymentMethodConfirm: 'Do you went delete this payment method?',
Forbidden: 'Forbidden',
OwnerAccount: 'Owner Account',
Add: 'Add',
Note_cqg: Note_cqg:
'Note: The fee is calculated on a monthly basis and is applied until the end of the day 30/12/2021', 'Note: The fee is calculated on a monthly basis and is applied until the end of the day 30/12/2021',
CardType: 'Card type',
BankCode: 'Bank code',
CardNumberOrAccount: 'Card number/Account',
Confirm: 'Confirm',
AmountOfMoney: 'Amount of money',
Note: 'Note',
SourceAccount: 'Source account',
ChooseBeneficiaryAccount: 'Choose the beneficiary account',
BeneficiaryAccount: 'the beneficiary account',
FromWallet: 'From wallet',
FromCQGAccount: 'From CQG account',
SettingPaymentMethodConfirm: 'You have not the payment method. Go to payment method setting?',
EnterEmailRequest: 'Please enter email',
EnterEmail: 'Enter email',
GetVerificationCode: 'Get the verification code',
BackToLogin: 'Back to login',
OTPValidFiveMinute: 'The OTP code is valid for 5 minutes',
EnterNewPassword: 'Please enter a new password',
EnterNewPasswordHint: 'Enter a new password',
ReEnterPassword: 'Reenter password',
ConfirmNewPassword: 'Confirm new password',
ChangePasswordSuccess: 'Change password success',
EnterAllInfo: 'Please complete all information ',
Date: 'Date',
ReviewService: 'Review service of DCV Invest',
VeryBad: 'Very bad',
Bad: 'Bad',
Normal: 'Normal',
Good: 'Good',
VeryGood: 'Very good',
ShareYourFeel: 'Share your feel about service',
UploadImage: 'Upload image',
BonusMoney: 'Bonus money',
Content: 'Content',
CopyLink: 'Copied referral link ',
CardAccount: 'Card account',
FirstLastName: 'First and last name',
Name: 'Name',
PhoneNumber: 'Phone number',
IdentityCard: 'Identity card',
Passport: 'Passport',
CitizenIdentification: 'Citizen identification',
IdentityCardFrontPhoto: 'Photo on front of ID card',
IdentityCitizenCardFrontPhoto: 'Photo on front of ID/Citizen card',
IdentityCardBackPhoto: 'Photo on the back of ID card',
IdentityCitizenCardBackPhoto: 'Photo on the back of ID/Citizen card',
SignPhoto: 'Sign photo',
EnterOTPRequest: 'Please enter OTP code',
OTPInvalid: 'OTP code invalid',
Username: 'Username',
EnterPassword: 'Enter password',
ConfirmPassword: 'Confirm password',
RegisterAccountSuccess: 'Register account success!',
EnterReferralCode: 'Enter a referral code if available',
Male2: 'Male',
Female: 'Female',
Bank: 'Bank',
OwnerAccount2: 'Owner account',
NothingChange: 'Nothing change',
Tradding: 'Tradding',
}; };
import {Text} from 'react-native';
import React from 'react';
export default { export default {
greeting: 'Xin chào!', greeting: 'Xin chào!',
home: 'Trang chủ', home: 'Trang chủ',
...@@ -114,4 +117,79 @@ export default { ...@@ -114,4 +117,79 @@ export default {
Re_send: 'Gửi lại', Re_send: 'Gửi lại',
Copied: 'Đã sao chép!', Copied: 'Đã sao chép!',
Please_fill_in: 'Vui lòng điền ', Please_fill_in: 'Vui lòng điền ',
RequestFilter: 'Lọc yêu cầu',
FromDate: 'Từ ngày:',
ToDate: 'Đến ngày:',
Failed: 'Thất bại',
SelectRequestStatus: 'Chọn trạng thái yêu cầu',
TopVideo: 'Video xem nhiều',
Delete: 'Xóa',
SelectBank: 'Chọn ngân hàng',
Branch: 'Chi nhánh',
OwnerAccountName: 'Tên chủ tài khoản',
AccountNumber: 'Số tài khoản ngân hàng',
DeletePaymentMethodConfirm: 'Bạn có chắc chắn muốn xoá phương thức thanh toán',
Forbidden: 'Từ chối',
OwnerAccount: 'Chủ TK',
Add: 'Thêm',
CardType: 'Loại thẻ',
BankCode: 'Mã ngân hàng',
CardNumberOrAccount: 'Số thẻ/tài khoản',
Confirm: 'Xác minh',
AmountOfMoney: 'Số tiền',
Note: 'Ghi chú',
SourceAccount: 'Tài khoản nguồn',
ChooseBeneficiaryAccount: 'Chọn tài khoản hưởng thụ',
BeneficiaryAccount: 'tài khoản hưởng thụ',
FromWallet: 'Từ ví',
FromCQGAccount: 'Từ tài khoản CQG',
SettingPaymentMethodConfirm: 'Bạn chưa có phương thức thanh toán.Đi đến cài đặt phương thức thanh toán?',
EnterEmailRequest: 'Vui lòng nhập email',
EnterEmail: 'Nhập email',
GetVerificationCode: 'Lấy mã xác thực',
BackToLogin: 'Quay lại đăng nhập',
OTPValidFiveMinute: 'Mã OTP có hiệu lực trong 5 phút.',
EnterNewPassword: 'Vui lòng nhập mật khẩu mới',
EnterNewPasswordHint: 'Nhập mật khẩu mới',
ReEnterPassword: 'Nhập lại mật khẩu',
ConfirmNewPassword: 'Xác nhận lại mật khẩu mới',
ChangePasswordSuccess: 'Đổi mật khẩu thành công',
EnterAllInfo: 'Vui lòng điền đầy đủ thông tin!',
Date: 'Ngày',
ReviewService: 'Đánh giá dịch vụ của DCV Invest',
VeryBad: 'Rất kém',
Bad: 'Kém',
Normal: 'Bình thường',
Good: 'Tốt',
VeryGood: 'Rất tốt',
ShareYourFeel: 'Hãy chia sẻ cảm nhận về dịch vụ nhé',
UploadImage: 'Tải ảnh lên',
BonusMoney: 'Tiền thưởng',
Content: 'Content',
CopyLink: 'Đã sao chép link giới thiệu!',
CardAccount: 'Tài khoản thẻ',
FirstLastName: 'Họ và tên đệm',
Name: 'Tên',
PhoneNumber: 'Số điện thoại',
IdentityCard: 'Chứng minh nhân dân',
Passport: 'Hộ chiếu',
CitizenIdentification: 'Căn cước công dân',
IdentityCardFrontPhoto: 'Ảnh mặt trước CNND',
IdentityCitizenCardFrontPhoto: 'Ảnh mặt trước CNND/CCCD',
IdentityCardBackPhoto: 'Ảnh mặt sau CNND',
IdentityCitizenCardBackPhoto: 'Ảnh mặt sau CNND/CCCD',
SignPhoto: 'Ảnh chữ ký',
EnterOTPRequest: 'Vui lòng nhập mã OTP',
OTPInvalid: 'Mã OTP không đúng định dạng',
Username: 'Tên đăng nhập',
EnterPassword: 'Nhập mật khẩu',
ConfirmPassword: 'Xác nhận mật khẩu',
RegisterAccountSuccess: 'Đăng ký tài khoản thành công!',
EnterReferralCode: 'Nhập mã giới thiệu nếu có',
Male2: 'Nam',
Female: 'Nữ',
Bank: 'Ngân hàng',
OwnerAccount2: 'Chủ tài khoản',
NothingChange: 'Không có gì thay đổi',
Tradding: 'Giao dịch',
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment