localisation complete

This commit is contained in:
Romana-Aijaz 2024-01-04 15:02:31 +05:00
parent 3369c6a011
commit 0ebadcc305
28 changed files with 556 additions and 130 deletions

View File

@ -0,0 +1,4 @@
{
"expoServerPort": 19000,
"packagerPort": 19000
}

View File

@ -4,5 +4,7 @@
"dev": true, "dev": true,
"minify": false, "minify": false,
"urlRandomness": null, "urlRandomness": null,
"https": false "https": false,
"scheme": null,
"devClient": false
} }

View File

@ -446,10 +446,7 @@ export const reviewOrder = `mutation ReviewOrder(
} }
}`; }`;
//
// use this to push token instead of login, signup mutation?
// needs research
//
export const pushToken = `mutation PushToken($token:String!){ export const pushToken = `mutation PushToken($token:String!){
pushToken(token:$token){ pushToken(token:$token){
_id _id

View File

@ -6,6 +6,7 @@ import { alignment } from '../../../utils/alignment'
import { NAVIGATION_SCREEN } from '../../../utils/constant' import { NAVIGATION_SCREEN } from '../../../utils/constant'
import { TextDefault } from '../../Text' import { TextDefault } from '../../Text'
import useStyle from './styles' import useStyle from './styles'
import i18n from '../../../../i18n'
function DrawerProfile() { function DrawerProfile() {
const styles = useStyle() const styles = useStyle()
@ -22,7 +23,7 @@ function DrawerProfile() {
navigation.navigate(NAVIGATION_SCREEN.CreateAccount) navigation.navigate(NAVIGATION_SCREEN.CreateAccount)
}}> }}>
<TextDefault textColor={styles.whiteFont.color} bold H4> <TextDefault textColor={styles.whiteFont.color} bold H4>
Login/Create Account {i18n.t('loginOrCreateAcc')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
@ -40,7 +41,7 @@ function DrawerProfile() {
medium medium
H5 H5
style={alignment.PLxSmall}> style={alignment.PLxSmall}>
Welcome {i18n.t('welcome')}
</TextDefault> </TextDefault>
<TextDefault <TextDefault
textColor={styles.whiteFont.color} textColor={styles.whiteFont.color}

View File

@ -10,6 +10,7 @@ import { ICONS_NAME } from '../../../utils/constant'
import { scale } from '../../../utils/scaling' import { scale } from '../../../utils/scaling'
import { CustomIcon } from '../../CustomIcon' import { CustomIcon } from '../../CustomIcon'
import useStyle from './styles' import useStyle from './styles'
import i18n from '../../../../i18n'
const FdEmailBtn = props => { const FdEmailBtn = props => {
const styles = useStyle() const styles = useStyle()
@ -30,7 +31,7 @@ const FdEmailBtn = props => {
size={scale(19)} size={scale(19)}
/> />
<TextDefault style={alignment.MLxSmall} bold> <TextDefault style={alignment.MLxSmall} bold>
Signup using Email {i18n.t('signupEmail')}
</TextDefault> </TextDefault>
</> </>
)} )}

View File

@ -7,6 +7,7 @@ import TextDefault from '../../../components/Text/TextDefault/TextDefault'
import { alignment } from '../../../utils/alignment' import { alignment } from '../../../utils/alignment'
import { moderateScale } from '../../../utils/scaling' import { moderateScale } from '../../../utils/scaling'
import useStyle from './styles' import useStyle from './styles'
import i18n from '../../../../i18n'
const FdGoogleBtn = props => { const FdGoogleBtn = props => {
const styles = useStyle() const styles = useStyle()
@ -34,7 +35,7 @@ const FdGoogleBtn = props => {
]} ]}
/> />
<TextDefault style={alignment.MLlarge} bold> <TextDefault style={alignment.MLlarge} bold>
Signup with Google {i18n.t('signupGoogle')}
</TextDefault> </TextDefault>
</> </>
)} )}

View File

@ -9,32 +9,33 @@ import Spinner from "../../Spinner/Spinner";
import TextDefault from "../../Text/TextDefault/TextDefault"; import TextDefault from "../../Text/TextDefault/TextDefault";
import TextError from "../../Text/TextError/TextError"; import TextError from "../../Text/TextError/TextError";
import useStyle from "./styles"; import useStyle from "./styles";
import i18n from "../../../../i18n";
export const orderStatuses = [ export const orderStatuses = [
{ {
key: "PENDING", key: i18n.t('PENDING'),
status: 1, status: 1,
statusText: "Your order is still pending.", statusText: i18n.t('orderPending'),
}, },
{ {
key: "ACCEPTED", key: i18n.t("ACCEPTED"),
status: 2, status: 2,
statusText: "Restaurant is preparing Food.", statusText: i18n.t('prepFood'),
}, },
{ {
key: "PICKED", key: i18n.t("PICKED"),
status: 3, status: 3,
statusText: "Rider is on the way.", statusText: i18n.t('riderOnWay'),
}, },
{ {
key: "DELIVERED", key: i18n.t("DELIVERED"),
status: 4, status: 4,
statusText: "Order is delivered.", statusText: i18n.t('orderDelivered'),
}, },
{ {
key: "COMPLETED", key: i18n.t("COMPLETED"),
status: 5, status: 5,
statusText: "Order is completed.", statusText: i18n.t('completeOrder'),
}, },
]; ];
@ -88,20 +89,20 @@ const StatusCard = () => {
<View key={index} style={styles.statusContainer}> <View key={index} style={styles.statusContainer}>
<View style={styles.textContainer}> <View style={styles.textContainer}>
<TextDefault H5 medium textColor={styles.lightText.color}> <TextDefault H5 medium textColor={styles.lightText.color}>
Your order ID {i18n.t('orderId')}
</TextDefault> </TextDefault>
<TextDefault style={{ ...alignment.PBlarge }} H4 bolder> <TextDefault style={{ ...alignment.PBlarge }} H4 bolder>
{item.order_id} {item.order_id}
</TextDefault> </TextDefault>
<TextDefault H5 textColor={colors.placeHolderColor} medium> <TextDefault H5 textColor={colors.placeHolderColor} medium>
Status {i18n.t('status')}
</TextDefault> </TextDefault>
<TextDefault textColor={"#00b9c6"} H5 medium> <TextDefault textColor={"#00b9c6"} H5 medium>
{item.order_status}{" "} {i18n.t(item.order_status)}{" "}
<TextDefault numberOfLines={2} medium> <TextDefault numberOfLines={2} medium>
{/* {checkStatus(item.order_status).status}.{' '} */}( {/* {checkStatus(item.order_status).status}.{' '} */}(
{checkStatus(item.order_status).statusText}) {checkStatus(i18n.t(item.order_status)).statusText})
</TextDefault> </TextDefault>
</TextDefault> </TextDefault>
</View> </View>

View File

@ -12,6 +12,7 @@ import { moderateScale } from '../../../utils/scaling'
import RadioBtn from '../../FdRadioBtn/RadioBtn' import RadioBtn from '../../FdRadioBtn/RadioBtn'
import TextDefault from '../../Text/TextDefault/TextDefault' import TextDefault from '../../Text/TextDefault/TextDefault'
import useStyle from './styles' import useStyle from './styles'
import i18n from '../../../../i18n'
const FilterModal = props => { const FilterModal = props => {
const styles = useStyle() const styles = useStyle()
@ -82,7 +83,7 @@ const FilterModal = props => {
alignment.PTsmall alignment.PTsmall
]}> ]}>
<TextDefault H5 bold> <TextDefault H5 bold>
Filters {i18n.t('filters')}
</TextDefault> </TextDefault>
<TouchableOpacity <TouchableOpacity
onPress={clearItems} onPress={clearItems}
@ -91,7 +92,7 @@ const FilterModal = props => {
alignItems: 'center' alignItems: 'center'
}}> }}>
<TextDefault H5 bold textColor={colors.buttonBackgroundBlue}> <TextDefault H5 bold textColor={colors.buttonBackgroundBlue}>
Reset {i18n.t('reset')}
</TextDefault> </TextDefault>
<MaterialIcons <MaterialIcons
name="refresh" name="refresh"
@ -109,7 +110,7 @@ const FilterModal = props => {
justifyContent: 'space-between' justifyContent: 'space-between'
}}> }}>
<TextDefault H5 bold textColor={colors.placeHolderColor}> <TextDefault H5 bold textColor={colors.placeHolderColor}>
Show sale items only {i18n.t('showSaleItems')}
</TextDefault> </TextDefault>
<Switch <Switch
trackColor={{ false: '#767577', true: colors.tagColor }} trackColor={{ false: '#767577', true: colors.tagColor }}
@ -127,7 +128,7 @@ const FilterModal = props => {
justifyContent: 'space-between' justifyContent: 'space-between'
}}> }}>
<TextDefault H5 bold textColor={colors.placeHolderColor}> <TextDefault H5 bold textColor={colors.placeHolderColor}>
Show stock items only {i18n.t('showStockItems')}
</TextDefault> </TextDefault>
<Switch <Switch
trackColor={{ false: '#767577', true: colors.tagColor }} trackColor={{ false: '#767577', true: colors.tagColor }}
@ -142,7 +143,7 @@ const FilterModal = props => {
<View style={styles.priceRangeRow}> <View style={styles.priceRangeRow}>
<TextDefault bold H5> <TextDefault bold H5>
Price Range {i18n.t('priceRange')}
</TextDefault> </TextDefault>
<View> <View>
<TextDefault bold H5 center> <TextDefault bold H5 center>
@ -187,7 +188,7 @@ const FilterModal = props => {
</View> </View>
</View> </View>
<TextDefault bold H5 style={alignment.MTlarge}> <TextDefault bold H5 style={alignment.MTlarge}>
Sorting {i18n.t('sorting')}
</TextDefault> </TextDefault>
<View style={[alignment.PLlarge, alignment.PRlarge, alignment.MTmedium]}> <View style={[alignment.PLlarge, alignment.PRlarge, alignment.MTmedium]}>
{keys(SORT_DATA).map(item => { {keys(SORT_DATA).map(item => {
@ -222,13 +223,13 @@ const FilterModal = props => {
<View style={[alignment.PLlarge, alignment.PRlarge]}> <View style={[alignment.PLlarge, alignment.PRlarge]}>
<TouchableOpacity style={styles.applyBtn} onPress={applyFilters}> <TouchableOpacity style={styles.applyBtn} onPress={applyFilters}>
<TextDefault H5 bold textColor={colors.lightBackground}> <TextDefault H5 bold textColor={colors.lightBackground}>
Apply Filter {i18n.t('applyFilter')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
<TouchableOpacity <TouchableOpacity
onPress={() => props.closeFilterModal()} onPress={() => props.closeFilterModal()}
style={[styles.width100, alignment.PBlarge, alignment.PTlarge]}> style={[styles.width100, alignment.PBlarge, alignment.PTlarge]}>
<TextDefault center>Close</TextDefault> <TextDefault center>{i18n.t('close')}</TextDefault>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</View> </View>

View File

@ -13,6 +13,7 @@ import TextDefault from '../Text/TextDefault/TextDefault'
import TextError from '../Text/TextError/TextError' import TextError from '../Text/TextError/TextError'
import TextLine from '../Text/TextLine/TextLine' import TextLine from '../Text/TextLine/TextLine'
import useStyle from './styles' import useStyle from './styles'
import i18n from '../../../i18n'
export const orderStatuses = [ export const orderStatuses = [
{ {
@ -65,7 +66,7 @@ const ActiveOrders = ({
if (!pastOrders || (pastOrders && !pastOrders.length)) { if (!pastOrders || (pastOrders && !pastOrders.length)) {
return <TextDefault> </TextDefault> return <TextDefault> </TextDefault>
} }
return <TextLine headerName="Old Order" textWidth="34%" lineWidth="28%" /> return <TextLine headerName={i18n.t('oldOrder')} textWidth="34%" lineWidth="28%" />
} }
const checkStatus = status => { const checkStatus = status => {
@ -77,7 +78,7 @@ const ActiveOrders = ({
return ( return (
<React.Fragment> <React.Fragment>
<TextLine headerName="Active Order" textWidth="40%" lineWidth="26%" /> <TextLine headerName={i18n.t('activeOrder')} textWidth="40%" lineWidth="26%" />
{activeOrders.map((item, index) => ( {activeOrders.map((item, index) => (
<TouchableOpacity <TouchableOpacity
activeOpacity={0.7} activeOpacity={0.7}
@ -97,7 +98,7 @@ const ActiveOrders = ({
</View> </View>
<View style={styles.infoContainer}> <View style={styles.infoContainer}>
<TextDefault H5 bolder style={alignment.MBxSmall}> <TextDefault H5 bolder style={alignment.MBxSmall}>
{'ID: '} {i18n.t('idVar')}
{item.order_id} {item.order_id}
</TextDefault> </TextDefault>
<TextDefault line={3} textColor={colors.tagColor} H5 bold> <TextDefault line={3} textColor={colors.tagColor} H5 bold>
@ -117,7 +118,7 @@ const ActiveOrders = ({
style={alignment.MTxSmall} style={alignment.MTxSmall}
bold bold
center> center>
{item.order_status} {i18n.t(item.order_status)}
</TextDefault> </TextDefault>
</View> </View>
</View> </View>

View File

@ -549,7 +549,7 @@ function Cart() {
style={{ width: '30%' }} style={{ width: '30%' }}
medium medium
H5> H5>
Total {i18n.t('total')}
</TextDefault> </TextDefault>
<TextDefault <TextDefault
numberOfLines={1} numberOfLines={1}
@ -628,7 +628,7 @@ function Cart() {
{i18n.t('deliveryAddress')} {i18n.t('deliveryAddress')}
</TextDefault> </TextDefault>
<TextDefault H5 textColor={colors.buttonBackgroundBlue}> <TextDefault H5 textColor={colors.buttonBackgroundBlue}>
Change {i18n.t('change')}
</TextDefault> </TextDefault>
</View> </View>
{address ? ( {address ? (

View File

@ -21,7 +21,7 @@ function SelectVoucher() {
useLayoutEffect(() => { useLayoutEffect(() => {
navigation.setOptions({ navigation.setOptions({
headerRight: null, headerRight: null,
title: 'My Vouchers' title: i18n.t('myVouchers')
}) })
}, [navigation]) }, [navigation])
@ -33,14 +33,14 @@ function SelectVoucher() {
<WrapperView> <WrapperView>
<View style={styles.container}> <View style={styles.container}>
<TextLine <TextLine
headerName="TYPe voucher code" headerName={i18n.t('typeVoucherCode')}
textWidth="50%" textWidth="50%"
lineWidth="25%" lineWidth="25%"
/> />
<View style={styles.upperContainer}> <View style={styles.upperContainer}>
<View style={{ width: '70%' }}> <View style={{ width: '70%' }}>
<TextField <TextField
label="Enter your voucher code" label={i18n.t('enterVoucherCode')}
labelFontSize={scale(12)} labelFontSize={scale(12)}
fontSize={scale(12)} fontSize={scale(12)}
labelHeight={10} labelHeight={10}

View File

@ -29,6 +29,7 @@ import { NAVIGATION_SCREEN } from "../../utils/constant";
import { scale } from "../../utils/scaling"; import { scale } from "../../utils/scaling";
import useStyle from "./styles"; import useStyle from "./styles";
import ApolloClient from "apollo-client"; import ApolloClient from "apollo-client";
import i18n from "../../../i18n";
const { const {
IOS_CLIENT_ID_GOOGLE, IOS_CLIENT_ID_GOOGLE,
@ -167,7 +168,7 @@ const CreateAccount = () => {
color={colors.iconColor} color={colors.iconColor}
/> />
<TextDefault style={alignment.MLsmall} bold> <TextDefault style={alignment.MLsmall} bold>
Signup with Apple {i18n.t('signupApple')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
); );
@ -241,7 +242,7 @@ const CreateAccount = () => {
return ( return (
<WrapperView> <WrapperView>
<View style={[styles.mainContainer, styles.flex]}> <View style={[styles.mainContainer, styles.flex]}>
<RegistrationHeader title={"Get Started"} /> <RegistrationHeader title={i18n.t('getStarted')} />
<View style={styles.subContainer}> <View style={styles.subContainer}>
<View style={[styles.flex, styles.upperContainer]}> <View style={[styles.flex, styles.upperContainer]}>
<EnategaImage <EnategaImage
@ -263,7 +264,7 @@ const CreateAccount = () => {
onPress={() => navigation.navigate(NAVIGATION_SCREEN.Login)} onPress={() => navigation.navigate(NAVIGATION_SCREEN.Login)}
> >
<TextDefault style={[alignment.MLsmall]} bold> <TextDefault style={[alignment.MLsmall]} bold>
Already a member? Log in {i18n.t('alreadyMember')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
</View> </View>

View File

@ -114,7 +114,7 @@ function EditAddress() {
function onCompleted(data) { function onCompleted(data) {
FlashMessage({ FlashMessage({
message: 'Address updated' message: i18n.t('addressUpdated')
}) })
// show message here // show message here
navigation.goBack() navigation.goBack()
@ -189,7 +189,7 @@ function EditAddress() {
<View style={styles.labelButtonContainer}> <View style={styles.labelButtonContainer}>
<View style={alignment.PBsmall}> <View style={alignment.PBsmall}>
<TextDefault H5 bold> <TextDefault H5 bold>
Label as {i18n.t('labelAs')}
</TextDefault> </TextDefault>
</View> </View>
<View style={styles.buttonInline}> <View style={styles.buttonInline}>
@ -255,7 +255,7 @@ function EditAddress() {
onBlur={() => { onBlur={() => {
setDeliveryAddressError( setDeliveryAddressError(
!deliveryAddress.trim().length !deliveryAddress.trim().length
? 'Delivery address is required' ? i18n.t('addressReq')
: null : null
) )
}} }}
@ -287,7 +287,7 @@ function EditAddress() {
onBlur={() => { onBlur={() => {
setDeliveryDetailsError( setDeliveryDetailsError(
!deliveryDetails.trim().length !deliveryDetails.trim().length
? 'Delivery details is required' ? i18n.t('deliveryDetailsReq')
: null : null
) )
}} }}
@ -299,10 +299,10 @@ function EditAddress() {
disabled={loading} disabled={loading}
onPress={() => { onPress={() => {
const deliveryAddressError = !deliveryAddress.trim().length const deliveryAddressError = !deliveryAddress.trim().length
? 'Delivery address is required' ? i18n.t('addressReq')
: null : null
const deliveryDetailsError = !deliveryDetails.trim().length const deliveryDetailsError = !deliveryDetails.trim().length
? 'Delivery details is required' ? i18n.t('addressReq')
: null : null
setDeliveryAddressError(deliveryAddressError) setDeliveryAddressError(deliveryAddressError)
@ -346,7 +346,7 @@ function EditAddress() {
activeOpacity={0.7} activeOpacity={0.7}
onPress={() => navigation.goBack()}> onPress={() => navigation.goBack()}>
<TextDefault H4 bold> <TextDefault H4 bold>
{'cancel'} {i18n.t('cancel')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
</ScrollView> </ScrollView>

View File

@ -10,15 +10,15 @@ import { useTheme } from '@react-navigation/native'
const links = [ const links = [
{ {
title: 'Product Page', title: i18n.t('productPage'),
url: 'https://enatega.com/enatega-single-vendor/' url: 'https://enatega.com/enatega-single-vendor/'
}, },
{ title: 'Docs', url: 'https://enatega.com/docs/enatega-singlevendor-introduction/' }, { title: i18n.t('docs'), url: 'https://enatega.com/docs/enatega-singlevendor-introduction/' },
{ {
title: 'Blog', title: i18n.t('blog'),
url: 'https://enatega.com/blog/' url: 'https://enatega.com/blog/'
}, },
{ title: 'About Us', url: 'https://ninjascode.com/our-team' } { title: i18n.t('aboutUs'), url: 'https://ninjascode.com/our-team' }
] ]
function Help() { function Help() {
const styles = useStyle() const styles = useStyle()

View File

@ -82,7 +82,7 @@ function Login() {
setPasswordError(null); setPasswordError(null);
if (!email) { if (!email) {
setEmailError("Email/Phone is required"); setEmailError(i18n.t('emailphoneReq'));
result = false; result = false;
} else { } else {
const emailRegex = /^\w+([\\.-]?\w+)*@\w+([\\.-]?\w+)*(\.\w{2,3})+$/; const emailRegex = /^\w+([\\.-]?\w+)*@\w+([\\.-]?\w+)*(\.\w{2,3})+$/;
@ -93,7 +93,7 @@ function Login() {
} }
} }
if (!password) { if (!password) {
setPasswordError("Password is required"); setPasswordError(i18n.t('passReq'));
result = false; result = false;
} }
return result; return result;
@ -101,7 +101,7 @@ function Login() {
async function onCompleted(data) { async function onCompleted(data) {
if (!data.login.is_active) { if (!data.login.is_active) {
FlashMessage({ FlashMessage({
message: "Can't Login,This Account is Deleted!", message: i18n.t('cantLogin'),
}); });
setLoading(false); setLoading(false);
} else { } else {
@ -213,7 +213,7 @@ function Login() {
</View> </View>
<View style={styles.width100}> <View style={styles.width100}>
<TextDefault medium textColor={colors.fontSecondColor}> <TextDefault medium textColor={colors.fontSecondColor}>
Enter your Email and Password {i18n.t('enterUsername')}
</TextDefault> </TextDefault>
<View style={styles.marginTop3} /> <View style={styles.marginTop3} />
<FilledTextField <FilledTextField
@ -268,7 +268,7 @@ function Login() {
medium medium
center center
> >
Forgot Password? {i18n.t('forgotPassword')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
<View style={[styles.marginTop3]}>{renderLoginAction()}</View> <View style={[styles.marginTop3]}>{renderLoginAction()}</View>
@ -280,7 +280,7 @@ function Login() {
} }
> >
<TextDefault textColor={colors.fontSecondColor} bold center> <TextDefault textColor={colors.fontSecondColor} bold center>
Create New Account {i18n.t('createNewAcc')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
</View> </View>

View File

@ -18,6 +18,7 @@ import { alignment } from "../../utils/alignment";
import { NAVIGATION_SCREEN } from "../../utils/constant"; import { NAVIGATION_SCREEN } from "../../utils/constant";
import { scale } from "../../utils/scaling"; import { scale } from "../../utils/scaling";
import useStyle from "./styles"; import useStyle from "./styles";
import i18n from "../../../i18n";
// constants // constants
const CATEGORIES = gql` const CATEGORIES = gql`
@ -32,7 +33,7 @@ function Menu() {
useLayoutEffect(() => { useLayoutEffect(() => {
navigation.setOptions({ navigation.setOptions({
title: "Home", title: i18n.t('home'),
}); });
}, []); }, []);
@ -51,7 +52,7 @@ function Menu() {
<View style={styles.emptyContainer}> <View style={styles.emptyContainer}>
<EmptyFood width={scale(250)} height={scale(250)} /> <EmptyFood width={scale(250)} height={scale(250)} />
<TextDefault H4 bold style={alignment.MTlarge}> <TextDefault H4 bold style={alignment.MTlarge}>
No item found {i18n.t('noItems')}
</TextDefault> </TextDefault>
</View> </View>
); );
@ -77,7 +78,7 @@ function Menu() {
{isLoggedIn && profile && <StatusCard />} {isLoggedIn && profile && <StatusCard />}
<TextDefault style={alignment.Psmall} H4 medium> <TextDefault style={alignment.Psmall} H4 medium>
Featured {i18n.t('featured')}
</TextDefault> </TextDefault>
</> </>
); );

View File

@ -21,8 +21,8 @@ import { ICONS_NAME, NAVIGATION_SCREEN } from "../../utils/constant";
import { scale } from "../../utils/scaling"; import { scale } from "../../utils/scaling";
import useStyle from "./style"; import useStyle from "./style";
const orderStatusActive = ["PENDING", "PICKED", "ACCEPTED"]; const orderStatusActive = [i18n.t("PENDING"), i18n.t("PICKED"), i18n.t("ACCEPTED")];
const orderStatusInactive = ["DELIVERED", "COMPLETED"]; const orderStatusInactive = [i18n.t("DELIVERED"), i18n.t("COMPLETED")];
function MyOrders() { function MyOrders() {
const styles = useStyle(); const styles = useStyle();
@ -86,7 +86,7 @@ function MyOrders() {
</View> </View>
<View style={styles.descriptionEmpty}> <View style={styles.descriptionEmpty}>
<TextDefault bolder center H4> <TextDefault bolder center H4>
No Orders Found {i18n.t('noOrdersFound')}
</TextDefault> </TextDefault>
</View> </View>
<TouchableOpacity <TouchableOpacity
@ -95,7 +95,7 @@ function MyOrders() {
onPress={() => navigation.navigate(NAVIGATION_SCREEN.Menu)} onPress={() => navigation.navigate(NAVIGATION_SCREEN.Menu)}
> >
<TextDefault textColor={colors.buttonText} bold H5 center> <TextDefault textColor={colors.buttonText} bold H5 center>
Start Shopping {i18n.t('startShopping')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
@ -109,7 +109,7 @@ function MyOrders() {
data={ data={
loadingOrders || errorOrders loadingOrders || errorOrders
? [] ? []
: orders.filter((o) => orderStatusInactive.includes(o.order_status)) : orders.filter((o) => orderStatusInactive.includes(i18n.t(o.order_status)))
} }
style={styles.container} style={styles.container}
contentContainerStyle={styles.contentContainer} contentContainerStyle={styles.contentContainer}
@ -118,10 +118,10 @@ function MyOrders() {
<ActiveOrders <ActiveOrders
navigation={navigation} navigation={navigation}
activeOrders={orders.filter((o) => activeOrders={orders.filter((o) =>
orderStatusActive.includes(o.order_status) orderStatusActive.includes(i18n.t(o.order_status))
)} )}
pastOrders={orders.filter((o) => pastOrders={orders.filter((o) =>
orderStatusInactive.includes(o.order_status) orderStatusInactive.includes(i18n.t(o.order_status))
)} )}
loading={loadingOrders} loading={loadingOrders}
error={errorOrders} error={errorOrders}
@ -151,7 +151,7 @@ function MyOrders() {
</View> </View>
<View style={styles.infoContainer}> <View style={styles.infoContainer}>
<TextDefault H5 bold style={alignment.MBxSmall}> <TextDefault H5 bold style={alignment.MBxSmall}>
{"ID: "} {i18n.t('idVar')}
{item.order_id} {item.order_id}
</TextDefault> </TextDefault>
<TextDefault line={3} textColor={colors.tagColor} H5 medium> <TextDefault line={3} textColor={colors.tagColor} H5 medium>

View File

@ -113,7 +113,7 @@ function NewAddress() {
regionChange(loc) regionChange(loc)
} else { } else {
FlashMessage({ FlashMessage({
message: 'Location permission not granted' message: i18n.t('locaPermission')
}) })
} }
} }
@ -139,7 +139,7 @@ function NewAddress() {
function onCompleted(data) { function onCompleted(data) {
FlashMessage({ FlashMessage({
message: 'Address added' message: i18n.t('addressAdded')
}) })
const cartAddress = route.params ? route.params.backScreen : null const cartAddress = route.params ? route.params.backScreen : null
if (cartAddress === NAVIGATION_SCREEN.Cart) { if (cartAddress === NAVIGATION_SCREEN.Cart) {
@ -211,7 +211,7 @@ function NewAddress() {
<View style={styles.labelButtonContainer}> <View style={styles.labelButtonContainer}>
<View style={styles.labelTitleContainer}> <View style={styles.labelTitleContainer}>
<TextDefault H5 bold> <TextDefault H5 bold>
Label As: {i18n.t('labelAs')}
</TextDefault> </TextDefault>
</View> </View>
<View style={styles.buttonInline}> <View style={styles.buttonInline}>
@ -277,7 +277,7 @@ function NewAddress() {
onBlur={() => { onBlur={() => {
setDeliveryAddressError( setDeliveryAddressError(
!deliveryAddress.trim().length !deliveryAddress.trim().length
? 'Delivery address is required' ? i18n.t('addressReq')
: null : null
) )
}} }}
@ -311,7 +311,7 @@ function NewAddress() {
onBlur={() => { onBlur={() => {
setDeliveryDetailsError( setDeliveryDetailsError(
!deliveryDetails.trim().length !deliveryDetails.trim().length
? 'Delivery details is required' ? i18n.t('deliveryDetailsReq')
: null : null
) )
}} }}
@ -322,10 +322,10 @@ function NewAddress() {
disabled={loading} disabled={loading}
onPress={() => { onPress={() => {
const deliveryAddressError = !deliveryAddress.trim().length const deliveryAddressError = !deliveryAddress.trim().length
? 'Delivery address is required' ? i18n.t('addressReq')
: null : null
const deliveryDetailsError = !deliveryDetails.trim().length const deliveryDetailsError = !deliveryDetails.trim().length
? 'Delivery details is required' ? i18n.t('deliveryDetailsReq')
: null : null
setDeliveryAddressError(deliveryAddressError) setDeliveryAddressError(deliveryAddressError)
@ -368,7 +368,7 @@ function NewAddress() {
activeOpacity={0.7} activeOpacity={0.7}
onPress={() => navigation.goBack()}> onPress={() => navigation.goBack()}>
<TextDefault H5 bold> <TextDefault H5 bold>
{'Cancel'} {i18n.t('cancel')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
</View> </View>

View File

@ -51,7 +51,7 @@ function OrderDetail() {
useLayoutEffect(() => { useLayoutEffect(() => {
navigation.setOptions({ navigation.setOptions({
headerTitle: 'Order Detail', headerTitle: i18n.t('orderDetail'),
headerRight: null headerRight: null
}) })
}, [navigation]) }, [navigation])
@ -73,7 +73,7 @@ function OrderDetail() {
<WrapperView> <WrapperView>
<ScrollView style={[styles.flex]}> <ScrollView style={[styles.flex]}>
<View> <View>
{order.order_status === 'PICKED' && order.rider && ( {i18n.t(order.order_status) === i18n.t('PICKED') && order.rider && (
<TrackingRider <TrackingRider
delivery_address={order.delivery_address} delivery_address={order.delivery_address}
id={order.rider._id} id={order.rider._id}
@ -86,14 +86,14 @@ function OrderDetail() {
bolder bolder
H3 H3
style={alignment.MBsmall}> style={alignment.MBsmall}>
Thank You! {i18n.t('thankYou')}
</TextDefault> </TextDefault>
<TextDefault <TextDefault
textColor={colors.fontSecondColor} textColor={colors.fontSecondColor}
medium medium
H5 H5
style={[alignment.MTsmall]}> style={[alignment.MTsmall]}>
Your order ID is {i18n.t('orderId')}
</TextDefault> </TextDefault>
<TextDefault H4 bolder style={alignment.PTxSmall}> <TextDefault H4 bolder style={alignment.PTxSmall}>
{order.order_id} {order.order_id}
@ -103,20 +103,20 @@ function OrderDetail() {
bold bold
H5 H5
style={[alignment.MTlarge]}> style={[alignment.MTlarge]}>
Status {i18n.t('status')}
</TextDefault> </TextDefault>
<TextDefault <TextDefault
textColor={colors.buttonBackgroundBlue} textColor={colors.buttonBackgroundBlue}
H4 H4
medium medium
style={[alignment.MBsmall, alignment.MTxSmall]}> style={[alignment.MBsmall, alignment.MTxSmall]}>
{order.order_status}{' '} {i18n.t(order.order_status)}{' '}
<TextDefault medium> <TextDefault medium>
( {checkStatus(order.order_status).statusText}) ( {checkStatus(i18n.t(order.order_status)).statusText})
</TextDefault> </TextDefault>
</TextDefault> </TextDefault>
<TextDefault textColor={colors.fontSecondColor} H5 bold> <TextDefault textColor={colors.fontSecondColor} H5 bold>
Delivery address: {i18n.t('deliveryAddress')}:
</TextDefault> </TextDefault>
<TextDefault style={{ ...alignment.PTxSmall }} H5> <TextDefault style={{ ...alignment.PTxSmall }} H5>
{order.delivery_address.delivery_address} {order.delivery_address.delivery_address}
@ -151,7 +151,7 @@ function OrderDetail() {
textColor={colors.fontMainColor} textColor={colors.fontMainColor}
medium medium
style={{ width: '40%' }}> style={{ width: '40%' }}>
Subtotal {i18n.t('subTotal')}
</TextDefault> </TextDefault>
<TextDefault <TextDefault
textColor={colors.fontMainColor} textColor={colors.fontMainColor}
@ -169,7 +169,7 @@ function OrderDetail() {
textColor={colors.fontMainColor} textColor={colors.fontMainColor}
medium medium
style={{ width: '40%' }}> style={{ width: '40%' }}>
Delivery fee {i18n.t('deliveryFee')}
</TextDefault> </TextDefault>
<TextDefault <TextDefault
textColor={colors.fontMainColor} textColor={colors.fontMainColor}
@ -185,7 +185,7 @@ function OrderDetail() {
textColor={colors.fontMainColor} textColor={colors.fontMainColor}
bold bold
style={{ width: '40%' }}> style={{ width: '40%' }}>
Total {i18n.t('total')}
</TextDefault> </TextDefault>
<TextDefault <TextDefault
textColor={colors.fontMainColor} textColor={colors.fontMainColor}
@ -197,7 +197,7 @@ function OrderDetail() {
</TextDefault> </TextDefault>
</View> </View>
</View> </View>
{order.order_status === 'PICKED' && ( {i18n.t(order.order_status) === i18n.t('PICKED') && (
<View <View
style={{ style={{
...alignment.PLmedium, ...alignment.PLmedium,
@ -240,26 +240,26 @@ function OrderDetail() {
borderRadius: moderateScale(10) borderRadius: moderateScale(10)
}}> }}>
<TextDefault H5 bold textColor={colors.lightBackground}> <TextDefault H5 bold textColor={colors.lightBackground}>
Chat with Rider {i18n.t('chatWithRider')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</View> </View>
)} )}
{(order.order_status === 'DELIVERED' || {(i18n.t(order.order_status) === i18n.t('DELIVERED') ||
order.order_status === 'COMPLETED') && i18n.t(order.order_status) === i18n.t('COMPLETED')) &&
order.review && order.review &&
order.review.rating === 0 && ( order.review.rating === 0 && (
<View style={styles.orderReceipt}> <View style={styles.orderReceipt}>
<TextDefault H3 bolder style={alignment.MBsmall}> <TextDefault H3 bolder style={alignment.MBsmall}>
Any suggestion? {i18n.t('anySuggestion')}
</TextDefault> </TextDefault>
<TextDefault <TextDefault
textColor={colors.fontSecondColor} textColor={colors.fontSecondColor}
bold bold
style={[alignment.MBsmall, alignment.MTsmall]}> style={[alignment.MBsmall, alignment.MTsmall]}>
Review regarding your order? {i18n.t('reviewRegarding')}
</TextDefault> </TextDefault>
<TouchableOpacity <TouchableOpacity
activeOpacity={0.7} activeOpacity={0.7}
@ -280,7 +280,7 @@ function OrderDetail() {
H5 H5
bold bold
center> center>
Write a review {i18n.t('writeReview')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
</View> </View>

View File

@ -53,11 +53,11 @@ function ChangePassword(props) {
if (data.changePassword) { if (data.changePassword) {
clearFields() clearFields()
FlashMessage({ FlashMessage({
message: 'Password Updated' message: i18n.t('passChange')
}) })
props.hideModal() props.hideModal()
} else { } else {
Alert.alert('Error', 'Invalid password') Alert.alert('Error', i18n.t('invalidPass'))
} }
} }
@ -70,7 +70,7 @@ function ChangePassword(props) {
<View style={styles.modalContent}> <View style={styles.modalContent}>
<View style={styles.titleContainer}> <View style={styles.titleContainer}>
<TextDefault bold H4> <TextDefault bold H4>
Change password {i18n.t('changePass')}
</TextDefault> </TextDefault>
</View> </View>
@ -78,7 +78,7 @@ function ChangePassword(props) {
<TextField <TextField
secureTextEntry secureTextEntry
error={oldPasswordError} error={oldPasswordError}
label="Current Password" label={i18n.t('currentPass')}
labelFontSize={scale(12)} labelFontSize={scale(12)}
fontSize={scale(12)} fontSize={scale(12)}
labelHeight={10} labelHeight={10}
@ -89,7 +89,7 @@ function ChangePassword(props) {
labelTextStyle={{ fontSize: scale(12) }} labelTextStyle={{ fontSize: scale(12) }}
onChangeText={setOldPassword} onChangeText={setOldPassword}
onBlur={() => { onBlur={() => {
setOldPasswordError(!oldPassword ? 'Password is required' : '') setOldPasswordError(!oldPassword ? i18n.t('passReq') : '')
}} }}
/> />
</View> </View>
@ -97,7 +97,7 @@ function ChangePassword(props) {
<TextField <TextField
secureTextEntry secureTextEntry
error={newPasswordError} error={newPasswordError}
label="New Password" label={i18n.t('newPass')}
labelFontSize={scale(12)} labelFontSize={scale(12)}
fontSize={scale(12)} fontSize={scale(12)}
labelHeight={10} labelHeight={10}
@ -108,7 +108,7 @@ function ChangePassword(props) {
labelTextStyle={{ fontSize: scale(12) }} labelTextStyle={{ fontSize: scale(12) }}
onChangeText={setNewPassword} onChangeText={setNewPassword}
onBlur={() => { onBlur={() => {
setNewPasswordError(!newPassword ? 'Password is required' : '') setNewPasswordError(!newPassword ? i18n.t('passReq') : '')
}} }}
/> />
</View> </View>
@ -117,9 +117,9 @@ function ChangePassword(props) {
disabled={loading} disabled={loading}
onPress={() => { onPress={() => {
const newPasswordError = const newPasswordError =
newPassword === '' ? 'Password is required' : '' newPassword === '' ? i18n.t('passReq') : ''
const oldPasswordError = const oldPasswordError =
oldPassword === '' ? 'Password is required' : '' oldPassword === '' ? i18n.t('passReq') : ''
setNewPasswordError(newPasswordError) setNewPasswordError(newPasswordError)
setOldPasswordError(oldPasswordError) setOldPasswordError(oldPasswordError)

View File

@ -83,9 +83,9 @@ function Profile() {
useEffect(() => { useEffect(() => {
if (backScreen) { if (backScreen) {
viewHideAndShow(); viewHideAndShow();
setPhoneError("Phone number is required"); setPhoneError(i18n.t('phoneNumberRequired'));
FlashMessage({ FlashMessage({
message: "Phone Number is missing", message: i18n.t('phoneNumberMissing'),
}); });
} }
}, [backScreen]); }, [backScreen]);
@ -97,7 +97,7 @@ function Profile() {
function onCompleted({ updateUser }) { function onCompleted({ updateUser }) {
if (updateUser) { if (updateUser) {
FlashMessage({ FlashMessage({
message: "User's Info Updated", message: i18n.t('userInfoUpdated'),
}); });
if (backScreen) { if (backScreen) {
navigation.goBack(); navigation.goBack();
@ -119,12 +119,12 @@ function Profile() {
let res = true; let res = true;
if (!name.trim()) { if (!name.trim()) {
refName.current.focus(); refName.current.focus();
setNameError("Name is required"); setNameError(i18n.t('nameReq'));
res = false; res = false;
} }
const num = phone.trim().replace(".", ""); const num = phone.trim().replace(".", "");
if (num.length < 11 || num.length > 15 || isNaN(num)) { if (num.length < 11 || num.length > 15 || isNaN(num)) {
setPhoneError("Minimum 11 and maximum 15 characters allowed"); setPhoneError(i18n.t('minWords'));
if (res) { if (res) {
refPhone.current.focus(); refPhone.current.focus();
} }
@ -154,7 +154,7 @@ function Profile() {
label={i18n.t("name")} label={i18n.t("name")}
ref={refName} ref={refName}
editable={false} editable={false}
defaultValue={profile.name} defaultValue={profile.name ? profile.name : null}
labelFontSize={scale(12)} labelFontSize={scale(12)}
fontSize={scale(12)} fontSize={scale(12)}
style={{ style={{
@ -224,7 +224,7 @@ function Profile() {
onPress={() => setModalVisible(true)} onPress={() => setModalVisible(true)}
style={styles.changePassword} style={styles.changePassword}
> >
<TextDefault>Change Password</TextDefault> <TextDefault>{i18n.t('changePass')}</TextDefault>
<MaterialCommunityIcons <MaterialCommunityIcons
name={"pencil"} name={"pencil"}
size={20} size={20}
@ -383,7 +383,7 @@ function Profile() {
bold bold
style={[alignment.MTsmall, alignment.MBsmall]} style={[alignment.MTsmall, alignment.MBsmall]}
> >
{"Cancel"} {i18n.t('cancel')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
@ -394,7 +394,7 @@ function Profile() {
textColor={colors.fontSecondColor} textColor={colors.fontSecondColor}
style={alignment.MBsmall} style={alignment.MBsmall}
> >
All rights are reserved by Enatega {i18n.t('rightsReserved')}
</TextDefault> </TextDefault>
</ScrollView> </ScrollView>
</KeyboardAvoidingView> </KeyboardAvoidingView>

View File

@ -31,6 +31,7 @@ import { ICONS_NAME, NAVIGATION_SCREEN } from '../../utils/constant'
import country_codes from '../../utils/country_codes' import country_codes from '../../utils/country_codes'
import { scale, verticalScale } from '../../utils/scaling' import { scale, verticalScale } from '../../utils/scaling'
import useStyle from './styles' import useStyle from './styles'
import i18n from '../../../i18n'
const CREATEUSER = gql` const CREATEUSER = gql`
${createUser} ${createUser}
@ -309,7 +310,7 @@ function Register() {
navigation.navigate(NAVIGATION_SCREEN.ForgotPassword) navigation.navigate(NAVIGATION_SCREEN.ForgotPassword)
}> }>
<TextDefault style={alignment.MTsmall} bold center> <TextDefault style={alignment.MTsmall} bold center>
Forgot password? {i18n.t('forgotPassword')}
</TextDefault> </TextDefault>
</TouchableOpacity> </TouchableOpacity>
</View> </View>

View File

@ -159,7 +159,14 @@ function Settings() {
"enatega-language", "enatega-language",
languageTypes[languageInd].code languageTypes[languageInd].code
); );
Updates.reloadAsync(); i18n.locale = languageTypes[languageInd].code
const lang = await AsyncStorage.getItem("enatega-language");
console.log(lang)
const defLang = languageTypes.findIndex((el) => el.code === lang);
const langName = languageTypes[defLang].value;
activeRadioSetter(defLang);
languageNameSetter(langName);
// Updates.reloadAsync();
} }
}; };
@ -169,7 +176,7 @@ function Settings() {
function onCompleted() { function onCompleted() {
FlashMessage({ FlashMessage({
message: "Notification Status Updated", message: i18n.t('notificationUpdate'),
}); });
} }
@ -242,7 +249,7 @@ function Settings() {
medium medium
H5 H5
> >
Language {i18n.t('language')}
</TextDefault> </TextDefault>
<TextDefault medium H5> <TextDefault medium H5>
({languageName}) ({languageName})
@ -275,7 +282,7 @@ function Settings() {
textColor={colors.statusSecondColor} textColor={colors.statusSecondColor}
> >
{" "} {" "}
Receive Special Offers{" "} {i18n.t('receiveOffers')}{" "}
</TextDefault> </TextDefault>
<SwitchBtn <SwitchBtn
isEnabled={offerNotification} isEnabled={offerNotification}
@ -298,7 +305,7 @@ function Settings() {
textColor={colors.statusSecondColor} textColor={colors.statusSecondColor}
> >
{" "} {" "}
Get updates on your order status!{" "} {i18n.t('getUpdatesText')}{" "}
</TextDefault> </TextDefault>
<SwitchBtn <SwitchBtn
isEnabled={orderNotification} isEnabled={orderNotification}
@ -317,7 +324,7 @@ function Settings() {
<View style={styles.notificationChekboxContainer}> <View style={styles.notificationChekboxContainer}>
<TextDefault numberOfLines={1} textColor={"red"}> <TextDefault numberOfLines={1} textColor={"red"}>
{" "} {" "}
Delete Account{" "} {i18n.t('delAcc')}{" "}
</TextDefault> </TextDefault>
<CustomIcon <CustomIcon
name={ICONS_NAME.Trash} name={ICONS_NAME.Trash}
@ -328,7 +335,7 @@ function Settings() {
</TouchableOpacity> </TouchableOpacity>
<View style={styles.versionContainer}> <View style={styles.versionContainer}>
<TextDefault textColor={colors.fontSecondColor}> <TextDefault textColor={colors.fontSecondColor}>
Version: {Constants.manifest.version} {/* Version: {Constants.manifest.version} */}
</TextDefault> </TextDefault>
</View> </View>
</View> </View>
@ -373,7 +380,7 @@ function Settings() {
> >
<View style={{ flex: 1, alignItems: "center" }}> <View style={{ flex: 1, alignItems: "center" }}>
<TextDefault bolder H5 style={{ marginTop: 20 }}> <TextDefault bolder H5 style={{ marginTop: 20 }}>
Are you Sure you want to delete Account? {i18n.t('delAccText')}
</TextDefault> </TextDefault>
<TouchableOpacity <TouchableOpacity
activeOpacity={0.7} activeOpacity={0.7}
@ -401,7 +408,7 @@ function Settings() {
style={[styles.width100, alignment.PBlarge, alignment.PTlarge]} style={[styles.width100, alignment.PBlarge, alignment.PTlarge]}
onPress={() => onClose()} onPress={() => onClose()}
> >
<TextDefault center>Cancel</TextDefault> <TextDefault center>{i18n.t('cancel')}</TextDefault>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</Modalize> </Modalize>

View File

@ -136,5 +136,87 @@ export const de = {
coupanFailed: 'Gutschein nicht verfügbar', coupanFailed: 'Gutschein nicht verfügbar',
invalidCoupan: 'Ungültiger Gutschein', invalidCoupan: 'Ungültiger Gutschein',
validateItems: 'Artikel vor dem Auschecken in den Warenkorb legen', validateItems: 'Artikel vor dem Auschecken in den Warenkorb legen',
validateDelivery: 'Stellen Sie die Lieferadresse vor dem Auschecken ein' validateDelivery: 'Stellen Sie die Lieferadresse vor dem Auschecken ein',
language: 'Sprache',
getUpdatesText: 'Erhalten Sie Updates zum Bestellstatus!',
delAcc: 'Konto löschen',
delAccText: 'Sind Sie sicher, dass Sie das Konto löschen möchten?',
cancel: 'Abbrechen',
receiveOffers: 'Spezielle Angebote erhalten',
notificationUpdate: 'Benachrichtigungsstatus aktualisiert',
notificationsNotWorking: "Benachrichtigungen funktionieren nicht im Simulator",
loginOrCreateAcc: "Anmelden/Konto erstellen",
welcome: "Willkommen",
titleSettings: 'Einstellungen',
home: 'Startseite',
noItems: 'Kein Artikel gefunden',
featured: 'Vorgestellt',
filters: 'Filter',
reset: 'Zurücksetzen',
showSaleItems: 'Nur Verkaufsartikel anzeigen',
showStockItems: 'Nur Lagerartikel anzeigen',
priceRange: 'Preisspanne',
sorting: 'Sortierung',
applyFilter: 'Filter anwenden',
close: 'Schließen',
phoneNumberRequired: "Telefonnummer ist erforderlich",
phoneNumberMissing: "Telefonnummer fehlt",
userInfoUpdated: "Benutzerinformationen aktualisiert",
nameReq: "Name ist erforderlich",
minWords: "Mindestens 11 und maximal 15 Zeichen erlaubt",
rightsReserved: "Alle Rechte vorbehalten von Enatega",
changePass: "Passwort ändern",
currentPass: "Aktuelles Passwort",
passReq: "Passwort ist erforderlich",
newPass: "Neues Passwort",
apply: "Anwenden",
invalidPass: "Ungültiges Passwort",
passChange: "Passwort aktualisiert",
noOrdersFound: "Keine Bestellungen gefunden",
startShopping: "Mit dem Einkaufen beginnen",
reOrder: "Erneut bestellen",
smthWrong: "Etwas ist falsch",
noOrdersAssigned: "Noch keine Bestellungen zugewiesen!",
oldOrder: "Alte Bestellung",
activeOrder: "Aktive Bestellung",
idVar: 'ID: ',
addressUpdated: 'Adresse aktualisiert',
labelAs: 'Als bezeichnen',
addressReq: 'Lieferadresse erforderlich',
deliveryDetailsReq: 'Lieferdetails erforderlich',
locaPermission: 'Standortberechtigung nicht erteilt',
addressAdded: 'Adresse hinzugefügt',
productPage: 'Produktseite',
docs: 'Dokumente',
blog: 'Blog',
aboutUs: 'Über uns',
myVouchers: 'Meine Gutscheine',
typeVoucherCode: "Gutscheincode eingeben",
enterVoucherCode: "Geben Sie Ihren Gutscheincode ein",
status: 'Status',
anySuggestion: 'Irgendwelche Vorschläge?',
reviewRegarding: 'Bewertung zu Ihrer Bestellung?',
writeReview: 'Eine Bewertung schreiben',
chatWithRider: 'Mit dem Fahrer chatten',
signupGoogle: 'Mit Google anmelden',
signupEmail: 'Anmeldung mit E-Mail',
signup: 'Anmelden',
signupApple: 'Mit Apple anmelden',
alreadyMember: 'Bereits Mitglied? Einloggen',
enterUsername: 'Geben Sie Ihre E-Mail-Adresse und Ihr Passwort ein',
createNewAcc: 'Neues Konto erstellen',
emailphoneReq: "E-Mail/Telefonnummer ist erforderlich",
invalidMail: "Ungültige E-Mail/Telefonnummer",
passReq: "Passwort ist erforderlich",
cantLogin: "Anmeldung nicht möglich, dieses Konto wurde gelöscht!",
orderPending: "Ihre Bestellung wird noch bearbeitet.",
prepFood: "Das Restaurant bereitet das Essen vor.",
riderOnWay: "Der Fahrer ist unterwegs.",
orderDelivered: "Die Bestellung wurde geliefert.",
completeOrder: "Die Bestellung ist abgeschlossen.",
PENDING: "AUSSTEHEND",
ACCEPTED: 'AKZEPTIERT',
PICKED: "ABGEHOLT",
DELIVERED: "GELIEFERT",
COMPLETED: "ABGESCHLOSSEN"
} }

View File

@ -139,5 +139,84 @@ export const en = {
coupanFailed: 'Coupon Unavailable', coupanFailed: 'Coupon Unavailable',
invalidCoupan: 'Invalid Coupon', invalidCoupan: 'Invalid Coupon',
validateItems: 'Add items to cart before checkout', validateItems: 'Add items to cart before checkout',
validateDelivery: 'Set delivery address before checkout' validateDelivery: 'Set delivery address before checkout',
language: 'Language',
getUpdatesText: 'Get updates on your order status!',
delAcc: 'Delete Account',
delAccText: 'Are you Sure you want to delete Account?',
cancel:'Cancel',
receiveOffers: 'Receive Special Offers',
notificationUpdate: "Notification Status Updated",
notificationsNotWorking: "Notification do not work on simulator",
loginOrCreateAcc: "Login/Create Account",
welcome: "Welcome",
noItems: 'No item found',
featured: 'Featured',
filters: 'Filters',
reset: 'Reset',
showSaleItems: 'Show sale items only',
showStockItems: 'Show stock items only',
priceRange: 'Price Range',
sorting: 'Sorting',
applyFilter: 'Apply Filter',
close: 'Close',
phoneNumberRequired: "Phone number is required",
phoneNumberMissing: "Phone Number is missing",
userInfoUpdated: "User's Info Updated",
nameReq: "Name is required",
minWords: "Minimum 11 and maximum 15 characters allowed",
rightsReserved: "All rights are reserved by Enatega",
changePass: "Change Password",
currentPass: "Current Password",
passReq: 'Password is required',
newPass: "New Password",
invalidPass: 'Invalid password',
passChange: 'Password Updated',
noOrdersFound: 'No Orders Found',
startShopping: 'Start Shopping',
reOrder: "Re-Order",
smthWrong: "Something is worng",
noOrdersAssigned: "No Orders Assigned yet!",
oldOrder: "Old Order",
activeOrder: "Active Order",
idVar: 'ID: ',
addressUpdated: 'Address updated',
labelAs: 'Label as',
addressReq: 'Delivery address is required',
deliveryDetailsReq: 'Delivery details is required',
locaPermission: 'Location permission not granted',
addressAdded: 'Address added',
productPage: 'Product Page',
docs: 'Docs',
blog: 'Blog',
aboutUs: 'About Us',
myVouchers: 'My Vouchers',
typeVoucherCode: "TYPe voucher code",
enterVoucherCode: "Enter your voucher code",
status: 'Status',
anySuggestion: 'Any suggestion?',
reviewRegarding: 'Review regarding your order?',
writeReview: 'Write a review',
chatWithRider: 'Chat with Rider',
signupGoogle: 'Signup with Google',
signupEmail: 'Signup using Email',
signup: 'Signup',
signupApple: 'Signup with Apple',
alreadyMember: 'Already a member? Log in',
enterUsername: 'Enter your Email and Password',
createNewAcc: 'Create New Account',
emailphoneReq: "Email/Phone is required",
invalidMail: "Invalid Email/Phone",
passReq: "Password is required",
cantLogin: "Can't Login,This Account is Deleted!",
orderPending: "Your order is still pending.",
prepFood: "Restaurant is preparing Food.",
riderOnWay: "Rider is on the way.",
orderDelivered: "Order is delivered.",
completeOrder: "Order is completed.",
PENDING: "PENDING",
ACCEPTED: 'ACCEPTED',
PICKED: "PICKED",
DELIVERED: "DELIVERED",
COMPLETED: "COMPLETED"
} }

View File

@ -137,5 +137,87 @@ export const fr = {
coupanFailed: 'Coupon non disponible', coupanFailed: 'Coupon non disponible',
invalidCoupan: 'Coupon non valide', invalidCoupan: 'Coupon non valide',
validateItems: 'Ajouter des articles au panier avant le paiement', validateItems: 'Ajouter des articles au panier avant le paiement',
validateDelivery: "Définir l'adresse de livraison avant le paiement" validateDelivery: "Définir l'adresse de livraison avant le paiement",
language: 'Langue',
getUpdatesText: 'Obtenez des mises à jour sur le statut de votre commande !',
delAcc: 'Supprimer le compte',
delAccText: 'Êtes-vous sûr de vouloir supprimer le compte ?',
cancel: 'Annuler',
receiveOffers: 'Recevoir des offres spéciales',
notificationUpdate: 'Statut de notification mis à jour',
notificationsNotWorking: "Les notifications ne fonctionnent pas sur le simulateur",
loginOrCreateAcc: "Connexion/Créer un compte",
welcome: "Bienvenue",
titleSettings: 'Paramètres',
home: 'Accueil',
noItems: 'Aucun élément trouvé',
featured: 'En vedette',
filters: 'Filtres',
reset: 'Réinitialiser',
showSaleItems: 'Afficher uniquement les articles en vente',
showStockItems: 'Afficher uniquement les articles en stock',
priceRange: 'Plage de prix',
sorting: 'Tri',
applyFilter: 'Appliquer le filtre',
close: 'Fermer',
phoneNumberRequired: "Numéro de téléphone requis",
phoneNumberMissing: "Numéro de téléphone manquant",
userInfoUpdated: "Informations de l'utilisateur mises à jour",
nameReq: "Nom requis",
minWords: "Minimum 11 et maximum 15 caractères autorisés",
rightsReserved: "Tous les droits sont réservés par Enatega",
changePass: "Changer le mot de passe",
currentPass: "Mot de passe actuel",
passReq: "Mot de passe requis",
newPass: "Nouveau mot de passe",
apply: "Appliquer",
invalidPass: "Mot de passe invalide",
passChange: "Mot de passe mis à jour",
noOrdersFound: "Aucune commande trouvée",
startShopping: "Commencer les achats",
reOrder: "Recommander",
smthWrong: "Quelque chose ne va pas",
noOrdersAssigned: "Aucune commande attribuée pour le moment !",
oldOrder: "Ancienne commande",
activeOrder: "Commande active",
idVar: 'ID : ',
addressUpdated: 'Adresse mise à jour',
labelAs: 'Étiqueter comme',
addressReq: 'Adresse de livraison requise',
deliveryDetailsReq: 'Détails de livraison requis',
locaPermission: 'Autorisation de localisation non accordée',
addressAdded: 'Adresse ajoutée',
productPage: 'Page produit',
docs: 'Docs',
blog: 'Blog',
aboutUs: 'À propos de nous',
myVouchers: 'Mes bons',
typeVoucherCode: "Saisir le code du bon",
enterVoucherCode: "Entrez votre code de bon",
status: 'Statut',
anySuggestion: 'Des suggestions ?',
reviewRegarding: 'Avis concernant votre commande ?',
writeReview: 'Écrire un avis',
chatWithRider: 'Discuter avec le livreur',
signupGoogle: 'Inscription avec Google',
signupEmail: 'Inscription par e-mail',
signup: 'Sinscrire',
signupApple: 'Inscription avec Apple',
alreadyMember: 'Déjà membre ? Se connecter',
enterUsername: 'Entrez votre adresse e-mail et votre mot de passe',
createNewAcc: 'Créer un nouveau compte',
emailphoneReq: "E-mail/Téléphone requis",
invalidMail: "E-mail/Téléphone invalide",
passReq: "Mot de passe requis",
cantLogin: "Impossible de se connecter, ce compte a été supprimé !",
orderPending: "Votre commande est en attente.",
prepFood: "Le restaurant prépare la nourriture.",
riderOnWay: "Le livreur est en route.",
orderDelivered: "La commande a été livrée.",
completeOrder: "La commande est terminée.",
PENDING: "EN ATTENTE",
ACCEPTED: 'ACCEPTÉE',
PICKED: "ENLEVÉE",
DELIVERED: "LIVRÉE",
COMPLETED: "TERMINÉE"
} }

View File

@ -132,5 +132,87 @@ export const km = {
coupanFailed: 'គូប៉ុងមិនមានទេ', coupanFailed: 'គូប៉ុងមិនមានទេ',
invalidCoupan: 'គូប៉ុងមិនត្រឹមត្រូវ', invalidCoupan: 'គូប៉ុងមិនត្រឹមត្រូវ',
validateItems: 'បន្ថែមរបស់របរទៅរទេះមុនពេលឆែក', validateItems: 'បន្ថែមរបស់របរទៅរទេះមុនពេលឆែក',
validateDelivery: 'កំណត់អាសយដ្ឋានដឹកជញ្ជូនមុនពេលពិនិត្យចេញ' validateDelivery: 'កំណត់អាសយដ្ឋានដឹកជញ្ជូនមុនពេលពិនិត្យចេញ',
language: 'ភាសា',
getUpdatesText: 'ទទួល​បាន​ការ​ធ្វើ​បច្ចុប្បន្ន​ភាព​លើ​ស្ថាន​ភាព​ការ​បញ្ជាទិញ​របស់​អ្នក!',
delAcc: 'លុប​គណនី',
delAccText: 'តើ​អ្នក​ប្រាកដ​ថា​តើ​ចង់​លុប​គណនី​ឬ​ទេ?',
cancel: 'បោះបង់',
receiveOffers: 'ទទួល​បាន​ការ​ផ្តល់​ជូន​ពិសេស',
notificationUpdate: 'ការ​ប្រកាស​ការ​ជូន​ដំណឹង​ត្រូវបាន​ធ្វើ​បច្ចុប្បន្ន',
notificationsNotWorking: "ការ​ជូន​ដំណឹង​មិន​ដំណើរ​ការ​លើ​ម៉ាស៊ីន​សម្រាប់​ប្រើប្រាស់តំណល",
loginOrCreateAcc: "ចូល​ប្រើ/បង្កើត​គណនី",
welcome: "ស្វាគមន៍",
titleSettings: 'ការ​កំណត់',
home: 'ទំព័រ​ដើម',
noItems: 'រក​មិន​ឃើញ​ទេ',
featured: 'ផ្សេងៗ',
filters: 'តម្រង',
reset: 'កំណត់​ឡើងវិញ',
showSaleItems: 'បង្ហាញ​ទំនិញ​លក់​តែប៉ុណ្ណោះ',
showStockItems: 'បង្ហាញ​ទំនិញ​ស្តុក​តែប៉ុណ្ណោះ',
priceRange: 'ជម្រើស​តម្លៃ',
sorting: 'តម្រៀបតាម',
applyFilter: 'អនុវត្ត​តម្រង',
close: 'បិទ',
phoneNumberRequired: "ត្រូវការលេខទូរស័ព្ទ",
phoneNumberMissing: "ខុសលេខទូរស័ព្ទ",
userInfoUpdated: "ព័ត៌មានអ្នកប្រើប្រាស់ត្រូវបានធ្វើបច្ចុប្បន្នភាព",
nameReq: "ត្រូវការឈ្មោះ",
minWords: "អត្ថបទអប្បាយបន្ទាប់ពី 11 និងអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណ",
rightsReserved: "រក្សាសិទ្ធិទាំងអស់គ្នាដោយ Enatega",
changePass: "ប្ដូរលេខសម្ងាត់",
currentPass: "លេខសម្ងាត់បច្ចុប្បន្ន",
passReq: "ត្រូវការលេខសម្ងាត់",
newPass: "លេខសម្ងាត់ថ្មី",
apply: "អនុវត្ត",
invalidPass: "លេខសម្ងាត់មិនត្រឹមត្រូវ",
passChange: "លេខសម្ងាត់ត្រូវបានធ្វើបច្ចុប្បន្នភាព",
noOrdersFound: "រកមិនឃើញការបញ្ជាទិញ",
startShopping: "ចាប់ផ្តើមទិញ",
reOrder: "កម្មង់ម្តងទៀត",
smthWrong: "មានអ្វីមួយខុស",
noOrdersAssigned: "មិនទាន់បានចាក់ការបញ្ជាទិញទេ!",
oldOrder: "ការបញ្ជាទិញចាស់",
activeOrder: "ការបញ្ជាទិញដែលមានសកម្ម",
idVar: 'លេខសម្គាល់: ',
addressUpdated: 'អាសយដ្ឋានត្រូវបានធ្វើបច្ចុប្បន្នភាព',
labelAs: 'ស្លាកជាដើម',
addressReq: 'អាសយដ្ឋានការដឹកជញ្ជូនត្រូវការ',
deliveryDetailsReq: 'សេចក្ដីលម្អិតនៃការដឹកជញ្ជូនត្រូវការ',
locaPermission: 'ការអនុញ្ញាតឱ្យតាមដានទីតាំងមិនបានទទួលយក',
addressAdded: 'បាន​បន្ថែម​អាសយដ្ឋាន',
productPage: 'ទំព័រផលិតផល',
docs: 'ឯកសារ',
blog: 'ប្លក់',
aboutUs: 'អំពី​យើង',
myVouchers: 'លេខកូដ​វេបសាយ​របស់​ខ្ញុំ',
typeVoucherCode: "បញ្ចូល​លេខកូដ​វេបសាយ",
enterVoucherCode: "បញ្ចូល​លេខកូដ​វេបសាយ​របស់​អ្នក",
status: 'ស្ថានភាព',
anySuggestion: 'មានអំណាចណាស់មែនទេ?',
reviewRegarding: 'ពិនិត្យឡើងវិញអំពីការបញ្ជាទិញរបស់អ្នក?',
writeReview: 'សរសេរពិន្ទុ',
chatWithRider: 'ជជែកជាមួយអ្នកបើកដំណើរ',
signupGoogle: 'ចុះឈ្មោះជាមួយ Google',
signupEmail: 'ចុះឈ្មោះតាមអ៊ីម៉ែល',
signup: 'ចុះឈ្មោះ',
signupApple: 'ចុះឈ្មោះជាមួយ Apple',
alreadyMember: 'រួចហើយរួចចូលក្នុង',
enterUsername: 'បញ្ចូលអ៊ីម៉ែលរបស់អ្នក និងពាក្យសម្ងាត់',
createNewAcc: 'បង្កើតគណនីថ្មី',
emailphoneReq: "ត្រូវការអ៊ីម៉ែល/លេខទូរស័ព្ទ",
invalidMail: "អ៊ីម៉ែល/លេខទូរស័ព្ទ​មិនត្រឹមត្រូវ",
passReq: "ត្រូវការពាក្យសម្ងាត់",
cantLogin: "មិនអាចចូលបានទេ, គណនីនេះត្រូវបានលុប!",
orderPending: "ការបញ្ជាទិញរបស់អ្នកមិនទាន់ទទួលយកទេ។",
prepFood: "ភោជនីដែលកំពុងរៀបចំអាហារ។",
riderOnWay: "អ្នកបើកដំណើរកំពង់កោះមាន់នៅលើផ្លូវ។",
orderDelivered: "ការបញ្ជាទិញបានដឹកជញ្ជូន។",
completeOrder: "ការបញ្ជាទិញបានបញ្ចប់។",
PENDING: "កំពុងរង់ចាំ",
ACCEPTED: 'បានទទួលយក',
PICKED: "បានជូនយក",
DELIVERED: "បានដឹកជញ្ជូន",
COMPLETED: "បានបញ្ចប់"
} }

View File

@ -128,5 +128,87 @@ export const zh = {
coupanFailed: '优惠券不可用', coupanFailed: '优惠券不可用',
invalidCoupan: '优惠券无效', invalidCoupan: '优惠券无效',
validateItems: '结帐前将商品添加到购物车', validateItems: '结帐前将商品添加到购物车',
validateDelivery: '结帐前设置送货地址' validateDelivery: '结帐前设置送货地址',
language: '语言',
getUpdatesText: '获取订单状态更新!',
delAcc: '删除账户',
delAccText: '您确定要删除账户吗?',
cancel: '取消',
receiveOffers: '接收特别优惠',
notificationUpdate: '通知状态已更新',
notificationsNotWorking: "通知在模拟器上无法工作",
loginOrCreateAcc: "登录/创建帐户",
welcome: "欢迎",
titleSettings: '设置',
home: '主页',
noItems: '未找到物品',
featured: '特色',
filters: '筛选',
reset: '重置',
showSaleItems: '仅显示特价商品',
showStockItems: '仅显示有库存商品',
priceRange: '价格范围',
sorting: '排序',
applyFilter: '应用筛选',
close: '关闭',
phoneNumberRequired: "需要电话号码",
phoneNumberMissing: "缺少电话号码",
userInfoUpdated: "用户信息已更新",
nameReq: "需要姓名",
minWords: "最少11个字符最多15个字符",
rightsReserved: "版权所有Enatega保留所有权利",
changePass: "更改密码",
currentPass: "当前密码",
passReq: "需要密码",
newPass: "新密码",
apply: "应用",
invalidPass: "无效密码",
passChange: "密码已更新",
noOrdersFound: "未找到订单",
startShopping: "开始购物",
reOrder: "重新下单",
smthWrong: "出现问题",
noOrdersAssigned: "尚未分配订单!",
oldOrder: "旧订单",
activeOrder: "活跃订单",
idVar: 'ID',
addressUpdated: '地址已更新',
labelAs: '标记为',
addressReq: '需要交付地址',
deliveryDetailsReq: '需要交付细节',
locaPermission: '未授予位置权限',
addressAdded: '已添加地址',
productPage: '产品页面',
docs: '文档',
blog: '博客',
aboutUs: '关于我们',
myVouchers: '我的优惠券',
typeVoucherCode: "输入优惠券代码",
enterVoucherCode: "输入您的优惠券代码",
status: '状态',
anySuggestion: '有什么建议吗?',
reviewRegarding: '关于您的订单的评论?',
writeReview: '撰写评论',
chatWithRider: '与骑手聊天',
signupGoogle: '使用 Google 注册',
signupEmail: '使用电子邮件注册',
signup: '注册',
signupApple: '使用 Apple 注册',
alreadyMember: '已经是会员?登录',
enterUsername: '输入您的电子邮件和密码',
createNewAcc: '创建新帐户',
emailphoneReq: "需要电子邮件/电话号码",
invalidMail: "无效的电子邮件/电话号码",
passReq: "需要密码",
cantLogin: "无法登录,此帐户已被删除!",
orderPending: "您的订单仍在等待中。",
prepFood: "餐厅正在准备食物。",
riderOnWay: "骑手正在途中。",
orderDelivered: "订单已送达。",
completeOrder: "订单已完成。",
PENDING: "待处理",
ACCEPTED: '已接受',
PICKED: "已取货",
DELIVERED: "已送达",
COMPLETED: "已完成"
} }