From 8e0483548722bad49a2e283b141f822c316caa04 Mon Sep 17 00:00:00 2001 From: aliyanlatif Date: Tue, 30 Jan 2024 12:12:37 +0500 Subject: [PATCH 1/3] Fixed issue of app crash when clicking an item with addons --- .../RadioComponent/RadioComponent.js | 57 +-- .../TitleComponent/TitleComponent.js | 30 +- .../components/Menu/StatusCard/StatusCard.js | 18 +- CustomerApp/src/screens/Help/Help.js | 62 +-- .../src/screens/ItemDetail/ItemDetail.js | 196 ++++----- CustomerApp/src/screens/Menu/Menu.js | 8 +- CustomerApp/src/screens/Settings/Settings.js | 36 +- CustomerApp/translations/de.js | 394 ++++++++--------- CustomerApp/translations/fr.js | 355 ++++++++-------- CustomerApp/translations/km.js | 398 +++++++++--------- CustomerApp/translations/zh.js | 391 +++++++++-------- 11 files changed, 986 insertions(+), 959 deletions(-) diff --git a/CustomerApp/src/components/CustomizeComponents/RadioComponent/RadioComponent.js b/CustomerApp/src/components/CustomizeComponents/RadioComponent/RadioComponent.js index 0c4fdfa..925ab2f 100644 --- a/CustomerApp/src/components/CustomizeComponents/RadioComponent/RadioComponent.js +++ b/CustomerApp/src/components/CustomizeComponents/RadioComponent/RadioComponent.js @@ -1,40 +1,41 @@ -import { useTheme } from '@react-navigation/native' -import PropTypes from 'prop-types' -import React, { useContext, useState } from 'react' -import { TouchableOpacity, View } from 'react-native' -import ConfigurationContext from '../../../context/Configuration' -import { alignment } from '../../../utils/alignment' -import RadioButton from '../../FdRadioBtn/RadioBtn' -import TextDefault from '../../Text/TextDefault/TextDefault' -import useStyle from './styles' +import { useTheme } from "@react-navigation/native"; +import PropTypes from "prop-types"; +import React, { useContext, useState } from "react"; +import { TouchableOpacity, View } from "react-native"; +import ConfigurationContext from "../../../context/Configuration"; +import { alignment } from "../../../utils/alignment"; +import RadioButton from "../../FdRadioBtn/RadioBtn"; +import TextDefault from "../../Text/TextDefault/TextDefault"; +import useStyle from "./styles"; function RadioComponent(props) { - const styles = useStyle() - const { colors } = useTheme() - const [options] = useState(props.options) - const [selected, setSelected] = useState(props.selected || null) - const configuration = useContext(ConfigurationContext) + const styles = useStyle(); + const { colors } = useTheme(); + const [options] = useState(props.options); + const [selected, setSelected] = useState(props.selected || null); + const configuration = useContext(ConfigurationContext); function onPress(option) { - setSelected(option) - props.onPress(option) + setSelected(option); + props.onPress(option); } return ( <> - {options.map(option => { - const isChecked = selected._id === option._id + {options.map((option) => { + const isChecked = selected?._id === option._id; return ( + style={styles.mainContainer} + > @@ -43,7 +44,8 @@ function RadioComponent(props) { isChecked ? colors.fontMainColor : colors.fontSecondColor } style={alignment.MLsmall} - H5> + H5 + > {option.title} @@ -53,18 +55,19 @@ function RadioComponent(props) { isChecked ? colors.fontMainColor : colors.fontSecondColor } H5 - medium>{`${configuration.currency_symbol} ${option.price}`} + medium + >{`${configuration.currency_symbol} ${option.price}`} - ) + ); })} - ) + ); } RadioComponent.propTypes = { selected: PropTypes.any, options: PropTypes.arrayOf(PropTypes.object), - onPress: PropTypes.func -} -export default RadioComponent + onPress: PropTypes.func, +}; +export default RadioComponent; diff --git a/CustomerApp/src/components/CustomizeComponents/TitleComponent/TitleComponent.js b/CustomerApp/src/components/CustomizeComponents/TitleComponent/TitleComponent.js index 057d8ef..9b2edf0 100644 --- a/CustomerApp/src/components/CustomizeComponents/TitleComponent/TitleComponent.js +++ b/CustomerApp/src/components/CustomizeComponents/TitleComponent/TitleComponent.js @@ -1,13 +1,13 @@ -import { useTheme } from '@react-navigation/native' -import PropTypes from 'prop-types' -import React from 'react' -import { View } from 'react-native' -import { alignment } from '../../../utils/alignment' -import TextDefault from '../../Text' -import styles from './styles' +import { useTheme } from "@react-navigation/native"; +import PropTypes from "prop-types"; +import React from "react"; +import { View } from "react-native"; +import { alignment } from "../../../utils/alignment"; +import { TextDefault } from "../../Text"; +import styles from "./styles"; function TitleComponent(props) { - const { colors } = useTheme() + const { colors } = useTheme(); return ( @@ -19,7 +19,8 @@ function TitleComponent(props) { numberOfLines={1} textColor={colors.fontSecondColor} H5 - bold> + bold + > {props.subTitle} @@ -30,17 +31,18 @@ function TitleComponent(props) { } H5 medium - center> + center + > ({props.status}) - ) + ); } TitleComponent.propTypes = { title: PropTypes.string.isRequired, subTitle: PropTypes.string, error: PropTypes.bool, - status: PropTypes.string -} + status: PropTypes.string, +}; -export default TitleComponent +export default TitleComponent; diff --git a/CustomerApp/src/components/Menu/StatusCard/StatusCard.js b/CustomerApp/src/components/Menu/StatusCard/StatusCard.js index e00cd6e..f8b69f1 100644 --- a/CustomerApp/src/components/Menu/StatusCard/StatusCard.js +++ b/CustomerApp/src/components/Menu/StatusCard/StatusCard.js @@ -13,29 +13,29 @@ import i18n from "../../../../i18n"; export const orderStatuses = [ { - key: i18n.t('PENDING'), + key: i18n.t("PENDING"), status: 1, - statusText: i18n.t('orderPending'), + statusText: i18n.t("orderPending"), }, { key: i18n.t("ACCEPTED"), status: 2, - statusText: i18n.t('prepFood'), + statusText: i18n.t("prepFood"), }, { key: i18n.t("PICKED"), status: 3, - statusText: i18n.t('riderOnWay'), + statusText: i18n.t("riderOnWay"), }, { key: i18n.t("DELIVERED"), status: 4, - statusText: i18n.t('orderDelivered'), + statusText: i18n.t("orderDelivered"), }, { key: i18n.t("COMPLETED"), status: 5, - statusText: i18n.t('completeOrder'), + statusText: i18n.t("completeOrder"), }, ]; @@ -89,19 +89,19 @@ const StatusCard = () => { - {i18n.t('orderId')} + {i18n.t("orderId")} {item.order_id} - {i18n.t('status')} + {i18n.t("status")} {i18n.t(item.order_status)}{" "} - {/* {checkStatus(item.order_status).status}.{' '} */}( + {checkStatus(item.order_status).status}. ( {checkStatus(i18n.t(item.order_status)).statusText}) diff --git a/CustomerApp/src/screens/Help/Help.js b/CustomerApp/src/screens/Help/Help.js index 77ae648..c1f57fc 100644 --- a/CustomerApp/src/screens/Help/Help.js +++ b/CustomerApp/src/screens/Help/Help.js @@ -1,36 +1,39 @@ -import { AntDesign } from '@expo/vector-icons' -import { useNavigation } from '@react-navigation/native' -import React, { useLayoutEffect } from 'react' -import { TouchableOpacity, View } from 'react-native' -import i18n from '../../../i18n' -import { TextDefault, WrapperView } from '../../components' -import { NAVIGATION_SCREEN } from '../../utils/constant' -import useStyle from './styles' -import { useTheme } from '@react-navigation/native' +import { AntDesign } from "@expo/vector-icons"; +import { useNavigation } from "@react-navigation/native"; +import React, { useLayoutEffect } from "react"; +import { TouchableOpacity, View } from "react-native"; +import i18n from "../../../i18n"; +import { TextDefault, WrapperView } from "../../components"; +import { NAVIGATION_SCREEN } from "../../utils/constant"; +import useStyle from "./styles"; +import { useTheme } from "@react-navigation/native"; const links = [ { - title: 'Product Page', - url: 'https://enatega.com/enatega-single-vendor/' + title: "Product Page", + url: "https://enatega.com/enatega-single-vendor/", }, - { title: 'Docs', url: 'https://enatega.com/docs/enatega-singlevendor-introduction/' }, { - title: 'Blog', - url: 'https://enatega.com/blog/' + title: "Docs", + url: "https://enatega.com/docs/enatega-singlevendor-introduction/", }, - { title: 'About Us', url: 'https://ninjascode.com/our-team' } -] + { + title: "Blog", + url: "https://enatega.com/blog/", + }, + { title: "About Us", url: "https://ninjascode.com/about-us/" }, +]; function Help() { - const styles = useStyle() - const navigation = useNavigation() - const { colors } = useTheme() + const styles = useStyle(); + const navigation = useNavigation(); + const { colors } = useTheme(); useLayoutEffect(() => { navigation.setOptions({ - headerTitle: i18n.t('titleHelp'), - headerRight: null - }) - }, [navigation]) + headerTitle: i18n.t("titleHelp"), + headerRight: null, + }); + }, [navigation]); return ( @@ -41,16 +44,21 @@ function Help() { navigation.navigate(NAVIGATION_SCREEN.HelpBrowser, { title, url }) } style={styles.itemContainer} - key={index}> + key={index} + > {i18n.t(title)} - + ))} - ) + ); } -export default Help +export default Help; diff --git a/CustomerApp/src/screens/ItemDetail/ItemDetail.js b/CustomerApp/src/screens/ItemDetail/ItemDetail.js index 49b0df9..78c461e 100644 --- a/CustomerApp/src/screens/ItemDetail/ItemDetail.js +++ b/CustomerApp/src/screens/ItemDetail/ItemDetail.js @@ -1,160 +1,162 @@ -import { useNavigation, useRoute } from '@react-navigation/native' -import React, { useContext, useEffect, useState } from 'react' -import { ScrollView, View } from 'react-native' -import { WrapperView } from '../../components' -import CartComponent from '../../components/CustomizeComponents/CartComponent/CartComponent' -import CheckComponent from '../../components/CustomizeComponents/CheckComponent/CheckComponent' -import HeadingComponent from '../../components/CustomizeComponents/HeadingComponent/HeadingComponent' -import ImageHeader from '../../components/CustomizeComponents/ImageHeader/ImageHeader' -import RadioComponent from '../../components/CustomizeComponents/RadioComponent/RadioComponent' -import TitleComponent from '../../components/CustomizeComponents/TitleComponent/TitleComponent' -import UserContext from '../../context/User' -import { alignment } from '../../utils/alignment' -import { NAVIGATION_SCREEN } from '../../utils/constant' -import useStyle from './styles' +import { useNavigation, useRoute } from "@react-navigation/native"; +import React, { useContext, useEffect, useState } from "react"; +import { ScrollView, View } from "react-native"; +import { WrapperView } from "../../components"; +import CartComponent from "../../components/CustomizeComponents/CartComponent/CartComponent"; +import CheckComponent from "../../components/CustomizeComponents/CheckComponent/CheckComponent"; +import HeadingComponent from "../../components/CustomizeComponents/HeadingComponent/HeadingComponent"; +import ImageHeader from "../../components/CustomizeComponents/ImageHeader/ImageHeader"; +import RadioComponent from "../../components/CustomizeComponents/RadioComponent/RadioComponent"; +import TitleComponent from "../../components/CustomizeComponents/TitleComponent/TitleComponent"; +import UserContext from "../../context/User"; +import { alignment } from "../../utils/alignment"; +import { NAVIGATION_SCREEN } from "../../utils/constant"; +import useStyle from "./styles"; function ItemDetail() { - const route = useRoute() - const styles = useStyle() - const navigation = useNavigation() - const [food] = useState(route.params.food ?? null) - const [selectedVariation, setSelectedVariation] = useState(food.variations[0]) - const [selectedAddons, setSelectedAddons] = useState([]) - const { cart, addQuantity, addCartItem } = useContext(UserContext) + const route = useRoute(); + const styles = useStyle(); + const navigation = useNavigation(); + const [food] = useState(route.params.food ?? null); + const [selectedVariation, setSelectedVariation] = useState( + food.variations[0] + ); + const [selectedAddons, setSelectedAddons] = useState([]); + const { cart, addQuantity, addCartItem } = useContext(UserContext); useEffect(() => { navigation.setOptions({ - title: 'Customize', - headerRight: () => null - }) - }, [navigation]) + title: "Customize", + headerRight: () => null, + }); + }, [navigation]); function validateButton() { - if (!selectedVariation) return false - const validatedAddons = [] - selectedVariation.addons.forEach(addon => { - const selected = selectedAddons.find(ad => ad._id === addon._id) + if (!selectedVariation) return false; + const validatedAddons = []; + selectedVariation.addons.forEach((addon) => { + const selected = selectedAddons.find((ad) => ad._id === addon._id); if (!selected && addon.quantity_minimum === 0) { - validatedAddons.push(false) + validatedAddons.push(false); } else if ( selected && selected.options.length >= addon.quantity_minimum && selected.options.length <= addon.quantity_maximum ) { - validatedAddons.push(false) - } else validatedAddons.push(true) - }) - return validatedAddons.every(val => val === false) + validatedAddons.push(false); + } else validatedAddons.push(true); + }); + return validatedAddons.every((val) => val === false); } async function onAddToCart(quantity) { if (validateOrderItem()) { - const addons = selectedAddons.map(addon => ({ + const addons = selectedAddons.map((addon) => ({ ...addon, options: addon.options.map(({ _id }) => ({ - _id - })) - })) + _id, + })), + })); - const cartItem = cart.find(cartItem => { + const cartItem = cart.find((cartItem) => { if ( cartItem._id === food._id && cartItem.variation._id === selectedVariation._id ) { if (cartItem.addons.length === addons.length) { - if (addons.length === 0) return true - const addonsResult = addons.every(newAddon => { + if (addons.length === 0) return true; + const addonsResult = addons.every((newAddon) => { const cartAddon = cartItem.addons.find( - ad => ad._id === newAddon._id - ) + (ad) => ad._id === newAddon._id + ); - if (!cartAddon) return false - const optionsResult = newAddon.options.every(newOption => { + if (!cartAddon) return false; + const optionsResult = newAddon.options.every((newOption) => { const cartOption = cartAddon.options.find( - op => op._id === newOption._id - ) + (op) => op._id === newOption._id + ); - if (!cartOption) return false - return true - }) + if (!cartOption) return false; + return true; + }); - return optionsResult - }) + return optionsResult; + }); - return addonsResult + return addonsResult; } } - return false - }) + return false; + }); if (!cartItem) { - await addCartItem(food._id, selectedVariation._id, quantity, addons) + await addCartItem(food._id, selectedVariation._id, quantity, addons); } else { - await addQuantity(cartItem.key, quantity) + await addQuantity(cartItem.key, quantity); } - navigation.navigate(NAVIGATION_SCREEN.Cart) + navigation.navigate(NAVIGATION_SCREEN.Cart); } } function onSelectVariation(variation) { - setSelectedVariation(variation) + setSelectedVariation(variation); } async function onSelectOption(addon, option) { - const addons = selectedAddons - const index = addons.findIndex(ad => ad._id === addon._id) + const addons = selectedAddons; + const index = addons.findIndex((ad) => ad._id === addon._id); if (index > -1) { if (addon.quantity_minimum === 1 && addon.quantity_maximum === 1) { - addons[index].options = [option] + addons[index].options = [option]; } else { const optionIndex = addons[index].options.findIndex( - opt => opt._id === option._id - ) + (opt) => opt._id === option._id + ); if (optionIndex > -1) { addons[index].options = addons[index].options.filter( - opt => opt._id !== option._id - ) + (opt) => opt._id !== option._id + ); } else { - addons[index].options.push(option) + addons[index].options.push(option); } if (!addons[index].options.length) { - addons.splice(index, 1) + addons.splice(index, 1); } } } else { - addons.push({ _id: addon._id, options: [option] }) + addons.push({ _id: addon._id, options: [option] }); } - setSelectedAddons([...addons]) + setSelectedAddons([...addons]); } function calculatePrice() { - const variation = selectedVariation.price - let addons = 0 - selectedAddons.forEach(addon => { + const variation = selectedVariation.price; + let addons = 0; + selectedAddons.forEach((addon) => { addons += addon.options.reduce((acc, option) => { - return acc + option.price - }, 0) - }) - return (variation + addons).toFixed(2) + return acc + option.price; + }, 0); + }); + return (variation + addons).toFixed(2); } function validateOrderItem() { - const validatedAddons = selectedVariation.addons.map(addon => { - const selected = selectedAddons.find(ad => ad._id === addon._id) + const validatedAddons = selectedVariation.addons.map((addon) => { + const selected = selectedAddons.find((ad) => ad._id === addon._id); if (!selected && addon.quantity_minimum === 0) { - addon.error = false + addon.error = false; } else if ( selected && selected.options.length >= addon.quantity_minimum && selected.options.length <= addon.quantity_maximum ) { - addon.error = false - } else addon.error = true - return addon - }) - setSelectedVariation({ ...selectedVariation, addons: validatedAddons }) - return validatedAddons.every(addon => addon.error === false) + addon.error = false; + } else addon.error = true; + return addon; + }); + setSelectedVariation({ ...selectedVariation, addons: validatedAddons }); + return validatedAddons.every((addon) => addon.error === false); } function renderOption(addon) { @@ -164,23 +166,25 @@ function ItemDetail() { options={addon.options} onPress={onSelectOption.bind(this, addon)} /> - ) + ); } else { return ( - ) + ); } } + console.log("Values:", selectedVariation); return ( + style={styles.scrollViewContainer} + > {!!food.img_url && } - + />} )} - {selectedVariation.addons.map(addon => ( + {selectedVariation.addons.map((addon) => ( @@ -229,7 +233,7 @@ function ItemDetail() { /> - ) + ); } -export default ItemDetail +export default ItemDetail; diff --git a/CustomerApp/src/screens/Menu/Menu.js b/CustomerApp/src/screens/Menu/Menu.js index d85e7a6..c318550 100755 --- a/CustomerApp/src/screens/Menu/Menu.js +++ b/CustomerApp/src/screens/Menu/Menu.js @@ -33,7 +33,7 @@ function Menu() { useLayoutEffect(() => { navigation.setOptions({ - title: i18n.t('home'), + title: i18n.t("home"), }); }, []); @@ -43,7 +43,7 @@ function Menu() { } else if (error) { return ( ); @@ -52,7 +52,7 @@ function Menu() { - {i18n.t('noItems')} + {i18n.t("noItems")} ); @@ -78,7 +78,7 @@ function Menu() { {isLoggedIn && profile && } - {i18n.t('featured')} + {i18n.t("featured")} ); diff --git a/CustomerApp/src/screens/Settings/Settings.js b/CustomerApp/src/screens/Settings/Settings.js index 7665c6a..58cadd1 100644 --- a/CustomerApp/src/screens/Settings/Settings.js +++ b/CustomerApp/src/screens/Settings/Settings.js @@ -7,7 +7,13 @@ import * as Localization from "expo-localization"; import * as Notifications from "expo-notifications"; import * as Updates from "expo-updates"; import gql from "graphql-tag"; -import React, { useContext, useEffect, useRef, useState } from "react"; +import React, { + useContext, + useEffect, + useLayoutEffect, + useRef, + useState, +} from "react"; import { AppState, Linking, @@ -90,7 +96,7 @@ function Settings() { const modalizeRef = useRef(null); const modalizeRef1 = useRef(null); - useEffect(() => { + useLayoutEffect(() => { navigation.setOptions({ headerTitle: i18n.t("titleSettings"), headerRight: null, @@ -160,9 +166,9 @@ function Settings() { "enatega-language", languageTypes[languageInd].code ); - i18n.locale = languageTypes[languageInd].code + i18n.locale = languageTypes[languageInd].code; const lang = await AsyncStorage.getItem("enatega-language"); - console.log(lang) + console.log(lang); const defLang = languageTypes.findIndex((el) => el.code === lang); const langName = languageTypes[defLang].value; activeRadioSetter(defLang); @@ -177,7 +183,7 @@ function Settings() { function onCompleted() { FlashMessage({ - message: i18n.t('notificationUpdate'), + message: i18n.t("notificationUpdate"), }); } @@ -250,7 +256,7 @@ function Settings() { medium H5 > - {i18n.t('language')} + {i18n.t("language")} ({languageName}) @@ -283,7 +289,7 @@ function Settings() { textColor={colors.statusSecondColor} > {" "} - {i18n.t('receiveOffers')}{" "} + {i18n.t("receiveOffers")}{" "} {" "} - {i18n.t('getUpdatesText')}{" "} + {i18n.t("getUpdatesText")}{" "} {" "} - {i18n.t('delAcc')}{" "} + {i18n.t("delAcc")}{" "} - + {/* - {/* Version: {Constants.manifest.version} */} + {/* Version: {Constants.manifest.version} - + */} - {i18n.t('rightsReserved')} + {i18n.t("rightsReserved")} {/* Modal for language Changes */} @@ -381,7 +387,7 @@ function Settings() { > - {i18n.t('delAccText')} + {i18n.t("delAccText")} onClose()} > - {i18n.t('cancel')} + {i18n.t("cancel")} diff --git a/CustomerApp/translations/de.js b/CustomerApp/translations/de.js index c9b58dd..81c83c8 100644 --- a/CustomerApp/translations/de.js +++ b/CustomerApp/translations/de.js @@ -1,164 +1,165 @@ export const de = { - home: 'Home', - title0: 'Gewählte Sprache', - subtitle0: 'English', + home: "Startseite", + title0: "Gewählte Sprache", + subtitle0: "English", description0: - 'Wählen Sie eine Sprache Ihrer Wahl, um den Inhalt der App in die gewünschte Sprache zu ändern.', - title1: 'Lecker', - subtitle1: 'Frühstück', + "Wählen Sie eine Sprache Ihrer Wahl, um den Inhalt der App in die gewünschte Sprache zu ändern.", + title1: "Lecker", + subtitle1: "Frühstück", description1: - 'Frühstück ist alles. Der Anfang, das Erste. Es ist der Mundvoll, der die Verpflichtung zu einem neuen Tag, einem fortwährenden Leben ist.', - title2: 'Erfrischend', - subtitle2: 'Getränke', + "Frühstück ist alles. Der Anfang, das Erste. Es ist der Mundvoll, der die Verpflichtung zu einem neuen Tag, einem fortwährenden Leben ist.", + title2: "Erfrischend", + subtitle2: "Getränke", description2: - 'Wahre Stille ist der Rest des Geistes und ist für den Geist das, was Schlaf für den Körper ist, Nahrung und Erfrischung.', - title3: 'Köstlich', - subtitle3: 'Eis', + "Wahre Stille ist der Rest des Geistes und ist für den Geist das, was Schlaf für den Körper ist, Nahrung und Erfrischung.", + title3: "Köstlich", + subtitle3: "Eis", description3: - 'Das Alter mindert nicht die extreme Enttäuschung darüber, dass eine Kugel Eis vom Kegel fällt', - getStarted: 'Loslegen!', + "Das Alter mindert nicht die extreme Enttäuschung darüber, dass eine Kugel Eis vom Kegel fällt", + getStarted: "Loslegen!", welcome: - 'Willkommen bei Enatega, manchmal brauchen Sie nur Liebe. Aber ein bisschen Essen tut ab und zu nicht weh.', - loginBtn: 'Anmeldung', - registerBtn: 'Registrieren', - name: 'Name', - phone: 'Telefon', - email: 'Email', - emailphone: 'E-Mail oder Telefon', - password: 'Passwort', - deliveryAddress: 'Lieferadresse', - fullDeliveryAddress: 'Ihre vollständige Lieferadresse', - deliveryDetails: 'Erforderliche Angaben, z. Boden / Gebäude', - myAddresses: 'Meine Adressen', - addAddress: 'Neue Adressen hinzufügen', - editAddress: 'Adresse bearbeiten', - registerText: 'Oder registriere dich bei', - forgotPassword: 'Passwort vergessen?', - loginText: 'Oder Einloggen mit', + "Willkommen bei Enatega, manchmal brauchen Sie nur Liebe. Aber ein bisschen Essen tut ab und zu nicht weh.", + loginBtn: "Anmeldung", + registerBtn: "Registrieren", + name: "Name", + phone: "Telefon", + email: "Email", + emailphone: "E-Mail oder Telefon", + password: "Passwort", + deliveryAddress: "Lieferadresse", + fullDeliveryAddress: "Ihre vollständige Lieferadresse", + deliveryDetails: "Erforderliche Angaben, z. Boden / Gebäude", + myAddresses: "Meine Adressen", + addAddress: "Neue Adressen hinzufügen", + editAddress: "Adresse bearbeiten", + registerText: "Oder registriere dich bei", + forgotPassword: "Passwort vergessen?", + loginText: "Oder Einloggen mit", deliveryLocation: - 'Stellen Sie Ihren Lieferort so ein, dass wir Ihnen einen unendlichen Geschmack köstlichen Essens zusenden können.', - locationBtn: 'Standort einschalten', + "Stellen Sie Ihren Lieferort so ein, dass wir Ihnen einen unendlichen Geschmack köstlichen Essens zusenden können.", + locationBtn: "Standort einschalten", locationPermissionDenied: - 'Die Berechtigung zum Zugriff auf den Speicherort wurde verweigert', - locationOff: 'Ort einschalten und erneut versuchen', - titleLanguage: 'Sprache ändern', - titleMenu: 'Speisekarte', - titleOrders: 'meine Bestellungen', - titleNotifications: 'Benachrichtigungen', - titleReviews: 'Bewertungen', - titleProfile: 'Profiel', - titleHelp: 'Hilfe', - titleChat: 'Plaudern', - titleLogout: 'Ausloggen', - titleCart: 'Mein Warenkorb', - titlePayment: 'Zahlung', - totalOrderAmount: 'Gesamtbestellmenge', - reOrder: 'Nachbestellen', - unReadNotifications: 'Keine ungelesenen Benachrichtigungen', - upload: 'Hochladen', - saveBtn: 'sparen', - saveContBtn: 'SPEICHERN UND FORTFAHREN', - emailUs: 'Mailen Sie uns an', - question1: 'Wo finden wir das Essen?', - question2: 'Wie treten wir in Kontakt?', - question3: 'Wie kann ich den Zusteller bezahlen?', - question4: 'Ist der Dienst in meiner Stadt verfügbar?', + "Die Berechtigung zum Zugriff auf den Speicherort wurde verweigert", + locationOff: "Ort einschalten und erneut versuchen", + titleLanguage: "Sprache ändern", + titleMenu: "Speisekarte", + titleOrders: "meine Bestellungen", + titleNotifications: "Benachrichtigungen", + titleReviews: "Bewertungen", + titleProfile: "Profiel", + titleHelp: "Hilfe", + titleChat: "Plaudern", + titleLogout: "Ausloggen", + titleCart: "Mein Warenkorb", + titlePayment: "Zahlung", + totalOrderAmount: "Gesamtbestellmenge", + reOrder: "Nachbestellen", + unReadNotifications: "Keine ungelesenen Benachrichtigungen", + upload: "Hochladen", + saveBtn: "sparen", + saveContBtn: "SPEICHERN UND FORTFAHREN", + emailUs: "Mailen Sie uns an", + question1: "Wo finden wir das Essen?", + question2: "Wie treten wir in Kontakt?", + question3: "Wie kann ich den Zusteller bezahlen?", + question4: "Ist der Dienst in meiner Stadt verfügbar?", answer1: - 'Sie finden das Essen in einem Geschäft in Ihrer Nähe, ohne den Kundenservice zu belasten. Unsere Gebühren sind im Vergleich zu anderen extrem niedrig.', + "Sie finden das Essen in einem Geschäft in Ihrer Nähe, ohne den Kundenservice zu belasten. Unsere Gebühren sind im Vergleich zu anderen extrem niedrig.", answer2: - 'Sie können uns über unsere E-Mail, Telefonnummer oder unsere Website kontaktieren.', + "Sie können uns über unsere E-Mail, Telefonnummer oder unsere Website kontaktieren.", answer3: - 'Sie können den Zusteller persönlich bezahlen oder auch online mit Kredit- oder Debitkarte bezahlen.', + "Sie können den Zusteller persönlich bezahlen oder auch online mit Kredit- oder Debitkarte bezahlen.", answer4: - 'Derzeit ist dieser Service in den Städten Islamabad und Karachi verfügbar. Sie können uns kontaktieren, um diesen Service in Ihrer Stadt in Anspruch zu nehmen.', - add: 'HINZUFÜGEN', - quantity: 'Menge', - size: 'Größe', - addToCart: 'in den Warenkorb legen', - orderNow: 'Jetzt bestellen', - addToCartMessage: 'Zum Warenkorb hinzugefügt', - emptyCart: 'Keine Artikel im Warenkorb', - itemTotal: 'Artikel Gesamt', - delvieryCharges: 'Versandkosten', - total: 'Gesamt', - contactInfo: 'Kontaktinformation', - deliveryAddressmessage: 'Lieferadresse einstellen', - proceedCheckout: 'Zur Kasse', - paymentText: 'Wie möchten Sie bezahlen?', - checkout: 'Auschecken', - creditCard: 'Kreditkarte Debitkarte', - paypal: 'Paypal', - cod: 'Nachnahme', - thankYou: 'Danke dir!', - orderConfirmed: 'Ihre Bestellung wird bestätigt', - orderId: 'Ihre Bestellnummer', - orderAmount: 'Ihre Bestellmenge', - orderDetail: 'Bestelldetails', - paymentMethod: 'Zahlungsmethode', - trackOrder: 'Versandverfolgung', - backToMenu: 'Zurück zum Menü', - foodItem: 'Essensgegenstand', - deliveredTo: 'Geliefert an', - writeAReview: 'Eine Rezension schreiben', - orderReceived: 'Bestellung erhalten', - cancelled: 'Abgebrochen', - foodPreparing: 'Essen wird zubereitet', - delivered: 'Geliefert', - rateAndReview: 'Bewerten und bewerten', - reviewPlaceholder: 'Detaillierte Bewertungen erhalten mehr Sichtbarkeit ...', - submit: 'einreichen', - noWorriesText: 'Keine Sorge, lassen Sie sich von uns helfen!', - yourEmail: 'Deine E-Mail', - send: 'Senden', + "Derzeit ist dieser Service in den Städten Islamabad und Karachi verfügbar. Sie können uns kontaktieren, um diesen Service in Ihrer Stadt in Anspruch zu nehmen.", + add: "HINZUFÜGEN", + quantity: "Menge", + size: "Größe", + addToCart: "in den Warenkorb legen", + orderNow: "Jetzt bestellen", + addToCartMessage: "Zum Warenkorb hinzugefügt", + emptyCart: "Keine Artikel im Warenkorb", + itemTotal: "Artikel Gesamt", + delvieryCharges: "Versandkosten", + total: "Gesamt", + contactInfo: "Kontaktinformation", + deliveryAddressmessage: "Lieferadresse einstellen", + proceedCheckout: "Zur Kasse", + paymentText: "Wie möchten Sie bezahlen?", + checkout: "Auschecken", + creditCard: "Kreditkarte Debitkarte", + paypal: "Paypal", + cod: "Nachnahme", + thankYou: "Danke dir!", + orderConfirmed: "Ihre Bestellung wird bestätigt", + orderId: "Ihre Bestellnummer", + orderAmount: "Ihre Bestellmenge", + orderDetail: "Bestelldetails", + paymentMethod: "Zahlungsmethode", + trackOrder: "Versandverfolgung", + backToMenu: "Zurück zum Menü", + foodItem: "Essensgegenstand", + deliveredTo: "Geliefert an", + writeAReview: "Eine Rezension schreiben", + orderReceived: "Bestellung erhalten", + cancelled: "Abgebrochen", + foodPreparing: "Essen wird zubereitet", + delivered: "Geliefert", + rateAndReview: "Bewerten und bewerten", + reviewPlaceholder: "Detaillierte Bewertungen erhalten mehr Sichtbarkeit ...", + submit: "einreichen", + noWorriesText: "Keine Sorge, lassen Sie sich von uns helfen!", + yourEmail: "Deine E-Mail", + send: "Senden", checkEmail: - 'Überprüfen Sie Ihre E-Mail-Adresse auf den Link zum Zurücksetzen des Kennworts', - languageText: 'Bitte wählen Sie Ihre gewünschte Sprache', - countryCodePickerTranslation: 'deu', - countryCodeSelect: 'Ländercode auswählen', - paymentNotSupported: 'Diese Zahlungsmethode unterstützt diese Währung nicht', - unReadReviews: 'Noch keine Bewertungen!', - unReadOrders: 'Noch keine Bestellungen!', - error: 'Error', - noMoreItems: 'Keine Artikel mehr auf Lager', - hungry: 'Hungrig', - emptyCartBtn: 'Zurück zum Essen', - subTotal: 'Zwischensumme', - deliveryFee: 'Liefergebühr', - haveVoucher: 'Hast du einen Gutschein?', - remove: 'Entfernen', - change: 'Veränderung', + "Überprüfen Sie Ihre E-Mail-Adresse auf den Link zum Zurücksetzen des Kennworts", + languageText: "Bitte wählen Sie Ihre gewünschte Sprache", + countryCodePickerTranslation: "deu", + countryCodeSelect: "Ländercode auswählen", + paymentNotSupported: "Diese Zahlungsmethode unterstützt diese Währung nicht", + unReadReviews: "Noch keine Bewertungen!", + unReadOrders: "Noch keine Bestellungen!", + error: "Error", + noMoreItems: "Keine Artikel mehr auf Lager", + hungry: "Hungrig", + emptyCartBtn: "Zurück zum Essen", + subTotal: "Zwischensumme", + deliveryFee: "Liefergebühr", + haveVoucher: "Hast du einen Gutschein?", + remove: "Entfernen", + change: "Veränderung", condition1: - 'Mit Abschluss dieser Bestellung stimme ich allen Allgemeinen Geschäftsbedingungen zu.', + "Mit Abschluss dieser Bestellung stimme ich allen Allgemeinen Geschäftsbedingungen zu.", condition2: - 'Ich bin damit einverstanden und fordere Sie auf, den bestellten Service vor Ablauf der Widerrufsfrist auszuführen. Mir ist bekannt, dass ich nach vollständiger Erfüllung der Leistung mein Rücktrittsrecht verliere.', - orderBtn: 'Bestellung aufgeben', - coupanApply: 'Gutscheinrabatt angewendet', - coupanFailed: 'Gutschein nicht verfügbar', - invalidCoupan: 'Ungültiger Gutschein', - validateItems: 'Artikel vor dem Auschecken in den Warenkorb legen', - 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", + "Ich bin damit einverstanden und fordere Sie auf, den bestellten Service vor Ablauf der Widerrufsfrist auszuführen. Mir ist bekannt, dass ich nach vollständiger Erfüllung der Leistung mein Rücktrittsrecht verliere.", + orderBtn: "Bestellung aufgeben", + coupanApply: "Gutscheinrabatt angewendet", + coupanFailed: "Gutschein nicht verfügbar", + invalidCoupan: "Ungültiger Gutschein", + validateItems: "Artikel vor dem Auschecken in den Warenkorb legen", + 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', + 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", @@ -179,32 +180,32 @@ export const de = { 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', + 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', + 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", @@ -215,35 +216,34 @@ export const de = { orderDelivered: "Die Bestellung wurde geliefert.", completeOrder: "Die Bestellung ist abgeschlossen.", PENDING: "AUSSTEHEND", - ACCEPTED: 'AKZEPTIERT', + ACCEPTED: "AKZEPTIERT", PICKED: "ABGEHOLT", DELIVERED: "GELIEFERT", COMPLETED: "ABGESCHLOSSEN", - 'Default': 'Standaard', - 'Ascending (A-Z)': 'Oplopend (A-Z)', - 'Descending (Z-A)': 'Aflopend (Z-A)', - 'Price (Low - High)': 'Prijs (Laag - Hoog)', - 'Price (High - Low)': 'Prijs (Hoog - Laag)', - Home: 'Thuis', - Work: 'Werk', - Other: 'Anders', - NoStock: 'Geen Voorraad', - ItemOutOfStock: 'Artikel uit voorraad', - SelectLanguage: 'Selecteer Taal', - Done: 'Voltooid', - Cancel: 'Annuleren', - NoFoods: 'Geen voedsel', - CartIsEmpty: 'Winkelwagen is leeg.', - SetPaymentMethod: 'Stel betalingsmethode in voordat u afrekent', - AnErrorOccured: 'Er is een fout opgetreden. Probeer het opnieuw', - ResetPasswordLinkSent: 'Reset wachtwoordlink verzonden naar uw e-mail', - LocationPermissionNotGranted: 'Locatietoestemming niet verleend', - NoFooditemFound: 'Geen voedingsmiddel gevonden', - SavedYet: 'Je hebt nog geen enkel adres opgeslagen.', - ClickAddNewAddress: 'Klik op Nieuw adres toevoegen om te beginnen', - NoAddressesfound: 'Geen adressen gevonden.', - AddNewAddress: 'Nieuw adres toevoegen', - 'About Us': 'Over ons', - 'Product Page': 'Productpagina', - -} + Default: "Standaard", + "Ascending (A-Z)": "Oplopend (A-Z)", + "Descending (Z-A)": "Aflopend (Z-A)", + "Price (Low - High)": "Prijs (Laag - Hoog)", + "Price (High - Low)": "Prijs (Hoog - Laag)", + Home: "Thuis", + Work: "Werk", + Other: "Anders", + NoStock: "Geen Voorraad", + ItemOutOfStock: "Artikel uit voorraad", + SelectLanguage: "Selecteer Taal", + Done: "Voltooid", + Cancel: "Annuleren", + NoFoods: "Geen voedsel", + CartIsEmpty: "Winkelwagen is leeg.", + SetPaymentMethod: "Stel betalingsmethode in voordat u afrekent", + AnErrorOccured: "Er is een fout opgetreden. Probeer het opnieuw", + ResetPasswordLinkSent: "Reset wachtwoordlink verzonden naar uw e-mail", + LocationPermissionNotGranted: "Locatietoestemming niet verleend", + NoFooditemFound: "Geen voedingsmiddel gevonden", + SavedYet: "Je hebt nog geen enkel adres opgeslagen.", + ClickAddNewAddress: "Klik op Nieuw adres toevoegen om te beginnen", + NoAddressesfound: "Geen adressen gevonden.", + AddNewAddress: "Nieuw adres toevoegen", + "About Us": "Over ons", + "Product Page": "Productpagina", +}; diff --git a/CustomerApp/translations/fr.js b/CustomerApp/translations/fr.js index 6f24288..51730a5 100644 --- a/CustomerApp/translations/fr.js +++ b/CustomerApp/translations/fr.js @@ -1,165 +1,166 @@ export const fr = { - home: 'Home', - title0: 'Langue sélectionnée', - subtitle0: 'English', + home: "Accueil", + title0: "Langue sélectionnée", + subtitle0: "English", description0: "Sélectionnez la langue de votre choix pour modifier le contenu de l'application dans la langue de votre choix.", - title1: 'Savoureux', - subtitle1: 'Petit déjeuner', + title1: "Savoureux", + subtitle1: "Petit déjeuner", description1: "Le petit déjeuner est tout. Le début, la première chose. C'est la bouchée qui est l'engagement pour un nouveau jour, une vie continue.", - title2: 'Rafraîchissant', - subtitle2: 'Boissons', + title2: "Rafraîchissant", + subtitle2: "Boissons", description2: "Le vrai silence est le reste de l'esprit, et à l'esprit ce que le sommeil est pour le corps, nourriture et rafraîchissement.", - title3: 'Délicieux', - subtitle3: 'Crème glacée', + title3: "Délicieux", + subtitle3: "Crème glacée", description3: "L'âge ne diminue en rien l'extrême déception d'avoir une boule de glace tombée du cône.", - getStarted: 'Commencer!', + getStarted: "Commencer!", welcome: "Bienvenue dans Enatega, parfois tout ce dont vous avez besoin est de l'amour. Mais un peu de nourriture maintenant et ensuite ne fait pas mal.", loginBtn: "S'identifier", - registerBtn: 'registre', - name: 'prénom', - phone: 'Téléphone', - email: 'Email', - emailphone: 'Email ou téléphone', - password: 'Mot de passe', - deliveryAddress: 'Adresse de livraison', - fullDeliveryAddress: 'Votre adresse de livraison complète', - deliveryDetails: 'Détails requis -e.g. étage / bâtiment', - myAddresses: 'Mes adresses', - addAddress: 'Ajouter une nouvelle adresse', + registerBtn: "registre", + name: "prénom", + phone: "Téléphone", + email: "Email", + emailphone: "Email ou téléphone", + password: "Mot de passe", + deliveryAddress: "Adresse de livraison", + fullDeliveryAddress: "Votre adresse de livraison complète", + deliveryDetails: "Détails requis -e.g. étage / bâtiment", + myAddresses: "Mes adresses", + addAddress: "Ajouter une nouvelle adresse", editAddress: "Modifier l'adresse", registerText: "Ou s'inscrire avec", - forgotPassword: 'Mot de passe oublié?', - loginText: 'Ou connectez-vous avec', + forgotPassword: "Mot de passe oublié?", + loginText: "Ou connectez-vous avec", deliveryLocation: - 'Définissez votre lieu de livraison afin que nous puissions vous envoyer un goût infini de plats délicieux.', + "Définissez votre lieu de livraison afin que nous puissions vous envoyer un goût infini de plats délicieux.", locationBtn: "Activer l'emplacement", locationPermissionDenied: "La permission d'accéder à l'emplacement a été refusée", locationOff: "Activer l'emplacement et réessayer", - titleLanguage: 'Changer de langue', - titleMenu: 'Menu', - titleOrders: 'Mes commandes', - titleNotifications: 'Les notifications', - titleReviews: 'Avis', - titleProfile: 'Profil', - titleHelp: 'Aidez-moi', - titleChat: 'Bavarder', - titleLogout: 'Connectez - Out', - titleCart: 'Mon panier', - titlePayment: 'Paiement', - totalOrderAmount: 'Total de la commande', - reOrder: 'Réorganiser', - unReadNotifications: 'Pas de notifications non lues', - upload: 'Télécharger', - saveBtn: 'sauvegarder', - saveContBtn: 'SAUVEGARDER ET CONTINUER', - emailUs: 'écrivez-nous à', - question1: 'Où trouvons-nous la nourriture?', - question2: 'Comment pouvons-nous contacter?', - question3: 'Comment puis-je payer le livreur?', - question4: 'Le service est-il disponible dans ma ville?', + titleLanguage: "Changer de langue", + titleMenu: "Menu", + titleOrders: "Mes commandes", + titleNotifications: "Les notifications", + titleReviews: "Avis", + titleProfile: "Profil", + titleHelp: "Aidez-moi", + titleChat: "Bavarder", + titleLogout: "Connectez - Out", + titleCart: "Mon panier", + titlePayment: "Paiement", + totalOrderAmount: "Total de la commande", + reOrder: "Réorganiser", + unReadNotifications: "Pas de notifications non lues", + upload: "Télécharger", + saveBtn: "sauvegarder", + saveContBtn: "SAUVEGARDER ET CONTINUER", + emailUs: "écrivez-nous à", + question1: "Où trouvons-nous la nourriture?", + question2: "Comment pouvons-nous contacter?", + question3: "Comment puis-je payer le livreur?", + question4: "Le service est-il disponible dans ma ville?", answer1: - 'Vous pouvez trouver la nourriture dans le magasin le plus proche sans rien payer au service client. Nos frais sont extrêmement bas comparés aux autres.', + "Vous pouvez trouver la nourriture dans le magasin le plus proche sans rien payer au service client. Nos frais sont extrêmement bas comparés aux autres.", answer2: - 'Vous pouvez nous contacter via notre email, numéro de téléphone ou notre site web.', + "Vous pouvez nous contacter via notre email, numéro de téléphone ou notre site web.", answer3: - 'Vous pouvez payer le livreur en personne ou en ligne, par carte de crédit ou de débit.', + "Vous pouvez payer le livreur en personne ou en ligne, par carte de crédit ou de débit.", answer4: "Actuellement, ce service est disponible dans les villes d'Islamabad et de Karachi. Vous pouvez nous contacter pour bénéficier de ce service dans votre ville.", - add: 'AJOUTER', - quantity: 'Quantité', - size: 'Taille', - addToCart: 'Ajouter au panier', - orderNow: 'Commandez maintenant', - addToCartMessage: 'Ajouté au panier', - emptyCart: 'Aucun article dans le panier', - itemTotal: 'Objet total', - delvieryCharges: 'Frais de livraison', - total: 'Total', - contactInfo: 'Informations de contact', + add: "AJOUTER", + quantity: "Quantité", + size: "Taille", + addToCart: "Ajouter au panier", + orderNow: "Commandez maintenant", + addToCartMessage: "Ajouté au panier", + emptyCart: "Aucun article dans le panier", + itemTotal: "Objet total", + delvieryCharges: "Frais de livraison", + total: "Total", + contactInfo: "Informations de contact", deliveryAddressmessage: "Définir l'adresse de livraison", - proceedCheckout: 'Passer à la caisse', - paymentText: 'Comment souhaitez-vous payer?', - checkout: 'Check-out', - creditCard: 'Carte de crédit carte de débit', - paypal: 'Pay Pal', - cod: 'Paiement à la livraison', - thankYou: 'Je vous remercie!', - orderConfirmed: 'Votre commande est confirmée', - orderId: 'Votre identifiant de commande', - orderAmount: 'Le montant de votre commande', - orderDetail: 'Détails de la commande', - paymentMethod: 'Mode de paiement', - trackOrder: 'Suivi de commande', - backToMenu: 'Suivi de commande', - foodItem: 'Produit alimentaire', - deliveredTo: 'livré à', - writeAReview: 'Écrire une critique', - orderReceived: 'Ordre reçu', - cancelled: 'Annulé', - foodPreparing: 'La nourriture est en cours de préparation', - delivered: 'Livré', - rateAndReview: 'Notez et évaluez', - reviewPlaceholder: 'Des revues plus détaillées ont plus de visibilité ...', - submit: 'Soumettre', - noWorriesText: 'Pas de soucis, laissez-nous vous aider!', - yourEmail: 'Votre email', - send: 'Envoyer', + proceedCheckout: "Passer à la caisse", + paymentText: "Comment souhaitez-vous payer?", + checkout: "Check-out", + creditCard: "Carte de crédit carte de débit", + paypal: "Pay Pal", + cod: "Paiement à la livraison", + thankYou: "Je vous remercie!", + orderConfirmed: "Votre commande est confirmée", + orderId: "Votre identifiant de commande", + orderAmount: "Le montant de votre commande", + orderDetail: "Détails de la commande", + paymentMethod: "Mode de paiement", + trackOrder: "Suivi de commande", + backToMenu: "Suivi de commande", + foodItem: "Produit alimentaire", + deliveredTo: "livré à", + writeAReview: "Écrire une critique", + orderReceived: "Ordre reçu", + cancelled: "Annulé", + foodPreparing: "La nourriture est en cours de préparation", + delivered: "Livré", + rateAndReview: "Notez et évaluez", + reviewPlaceholder: "Des revues plus détaillées ont plus de visibilité ...", + submit: "Soumettre", + noWorriesText: "Pas de soucis, laissez-nous vous aider!", + yourEmail: "Votre email", + send: "Envoyer", checkEmail: - 'Vérifiez votre email pour le lien de réinitialisation du mot de passe', + "Vérifiez votre email pour le lien de réinitialisation du mot de passe", languageText: "S'il vous plaît sélectionnez votre langue requise", - countryCodePickerTranslation: 'fra', - countryCodeSelect: 'Sélectionnez le code pays', + countryCodePickerTranslation: "fra", + countryCodeSelect: "Sélectionnez le code pays", paymentNotSupported: - 'Ce mode de paiement ne prend pas en charge cette devise', + "Ce mode de paiement ne prend pas en charge cette devise", unReadReviews: "Pas encore d'avis!", - unReadOrders: 'Pas de commande pour le moment!', - error: 'Erreur', + unReadOrders: "Pas de commande pour le moment!", + error: "Erreur", noMoreItems: "Plus d'articles en stock", - hungry: 'Faim', - emptyCartBtn: 'Retour à la nourriture', - subTotal: 'Total', - deliveryFee: 'Frais de livraison', - haveVoucher: 'Avez-vous un bon', - remove: 'Retirer', - change: 'Changement', + hungry: "Faim", + emptyCartBtn: "Retour à la nourriture", + subTotal: "Total", + deliveryFee: "Frais de livraison", + haveVoucher: "Avez-vous un bon", + remove: "Retirer", + change: "Changement", condition1: "En remplissant cette commande, j'accepte toutes les conditions générales.", condition2: "J'accepte et je vous demande d'exécuter le service commandé avant la fin de la période de révocation. Je suis conscient qu'après l'accomplissement complet du service, je perds mon droit de résolution.", - orderBtn: 'Passer la commande', - coupanApply: 'Remise de coupon appliquée', - coupanFailed: 'Coupon non disponible', - invalidCoupan: 'Coupon non valide', - validateItems: 'Ajouter des articles au panier avant le paiement', + orderBtn: "Passer la commande", + coupanApply: "Remise de coupon appliquée", + coupanFailed: "Coupon non disponible", + invalidCoupan: "Coupon non valide", + validateItems: "Ajouter des articles au panier 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", + 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', + 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", @@ -180,32 +181,32 @@ export const fr = { 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', + 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', + 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", @@ -216,34 +217,36 @@ export const fr = { orderDelivered: "La commande a été livrée.", completeOrder: "La commande est terminée.", PENDING: "EN ATTENTE", - ACCEPTED: 'ACCEPTÉE', + ACCEPTED: "ACCEPTÉE", PICKED: "ENLEVÉE", DELIVERED: "LIVRÉE", COMPLETED: "TERMINÉE", - 'Default': 'Par défaut', - 'Ascending (A-Z)': 'Croissant (A-Z)', - 'Descending (Z-A)': 'Décroissant (Z-A)', - 'Price (Low - High)': 'Prix (Bas - Élevé)', - 'Price (High - Low)': 'Prix (Élevé - Bas)', - Home: 'Accueil', - Work: 'Travail', - Other: 'Autre', - NoStock: 'Stock épuisé', - ItemOutOfStock: 'Article en rupture de stock', - SelectLanguage: 'Sélectionner la langue', - Done: 'Terminé', - Cancel: 'Annuler', - NoFoods: 'Pas de nourriture', - CartIsEmpty: 'Le panier est vide.', - SetPaymentMethod: 'Définissez le mode de paiement avant de passer à la caisse', - AnErrorOccured: 'Une erreur s\'est produite. Veuillez réessayer', - ResetPasswordLinkSent: 'Lien de réinitialisation du mot de passe envoyé sur votre email', - LocationPermissionNotGranted: 'Permission de localisation non accordée', - NoFooditemFound: 'Aucun article alimentaire trouvé', + Default: "Par défaut", + "Ascending (A-Z)": "Croissant (A-Z)", + "Descending (Z-A)": "Décroissant (Z-A)", + "Price (Low - High)": "Prix (Bas - Élevé)", + "Price (High - Low)": "Prix (Élevé - Bas)", + Home: "Accueil", + Work: "Travail", + Other: "Autre", + NoStock: "Stock épuisé", + ItemOutOfStock: "Article en rupture de stock", + SelectLanguage: "Sélectionner la langue", + Done: "Terminé", + Cancel: "Annuler", + NoFoods: "Pas de nourriture", + CartIsEmpty: "Le panier est vide.", + SetPaymentMethod: + "Définissez le mode de paiement avant de passer à la caisse", + AnErrorOccured: "Une erreur s'est produite. Veuillez réessayer", + ResetPasswordLinkSent: + "Lien de réinitialisation du mot de passe envoyé sur votre email", + LocationPermissionNotGranted: "Permission de localisation non accordée", + NoFooditemFound: "Aucun article alimentaire trouvé", SavedYet: "Vous n'avez encore sauvegardé aucune adresse.", - ClickAddNewAddress: 'Cliquez sur Ajouter une nouvelle adresse pour commencer', - NoAddressesfound: 'Aucune adresse trouvée.', - AddNewAddress: 'Ajouter une nouvelle adresse', - 'About Us': 'À propos de nous', - 'Product Page': 'Page de produit', -} + ClickAddNewAddress: "Cliquez sur Ajouter une nouvelle adresse pour commencer", + NoAddressesfound: "Aucune adresse trouvée.", + AddNewAddress: "Ajouter une nouvelle adresse", + "About Us": "À propos de nous", + "Product Page": "Page de produit", +}; diff --git a/CustomerApp/translations/km.js b/CustomerApp/translations/km.js index 85f886b..830fe6e 100644 --- a/CustomerApp/translations/km.js +++ b/CustomerApp/translations/km.js @@ -1,165 +1,168 @@ export const km = { - home: 'Home', - title0: 'ភាសាដែលបានជ្រើស', - subtitle0: 'English', + home: "ទំព័រ​ដើម", + title0: "ភាសាដែលបានជ្រើស", + subtitle0: "English", description0: - 'ជ្រើសរើសភាសាណាមួយនៃជម្រើសរបស់អ្នកដើម្បីប្តូរមាតិកានៃកម្មវិធីទៅភាសាដែលអ្នកត្រូវការ។', - title1: 'ហ៊ាន', - subtitle1: 'អាហារពេលព្រឹក', + "ជ្រើសរើសភាសាណាមួយនៃជម្រើសរបស់អ្នកដើម្បីប្តូរមាតិកានៃកម្មវិធីទៅភាសាដែលអ្នកត្រូវការ។", + title1: "ហ៊ាន", + subtitle1: "អាហារពេលព្រឹក", description1: - 'អាហារពេលព្រឹកគឺជាអ្វីគ្រប់យ៉ាង។ ការចាប់ផ្តើមរឿងដំបូង។ វាគឺជាមាត់ដែលជាការប្តេជ្ញាចិត្តចំពោះថ្ងៃថ្មីនិងជីវិតដែលនៅតែបន្ត។', - title2: 'ធ្វើឱ្យស្រស់', - subtitle2: 'ភេសជ្ជៈ', + "អាហារពេលព្រឹកគឺជាអ្វីគ្រប់យ៉ាង។ ការចាប់ផ្តើមរឿងដំបូង។ វាគឺជាមាត់ដែលជាការប្តេជ្ញាចិត្តចំពោះថ្ងៃថ្មីនិងជីវិតដែលនៅតែបន្ត។", + title2: "ធ្វើឱ្យស្រស់", + subtitle2: "ភេសជ្ជៈ", description2: - 'ភាពស្ងៀមស្ងាត់ពិតគឺជាគំនិតដែលនៅសល់ហើយជាវិញ្ញាណដែលជាការដេកលក់ដល់រាងកាយការថែទាំនិងការសំរាក។', - title3: 'ឆ្ងាញ់', - subtitle3: 'ការ៉េម', + "ភាពស្ងៀមស្ងាត់ពិតគឺជាគំនិតដែលនៅសល់ហើយជាវិញ្ញាណដែលជាការដេកលក់ដល់រាងកាយការថែទាំនិងការសំរាក។", + title3: "ឆ្ងាញ់", + subtitle3: "ការ៉េម", description3: - 'អាយុមិនបន្ថយនូវការខកចិត្តយ៉ាងខ្លាំងនៃការធ្លាក់ចុះនៃការ៉េមពីកោណទេ', - getStarted: 'ចាប់ផ្ដើម!', + "អាយុមិនបន្ថយនូវការខកចិត្តយ៉ាងខ្លាំងនៃការធ្លាក់ចុះនៃការ៉េមពីកោណទេ", + getStarted: "ចាប់ផ្ដើម!", welcome: - 'សូមស្វាគមន៏ទៅ Enatega ពេលខ្លះអ្វីដែលអ្នកត្រូវការគឺស្នេហា។ ប៉ុន្តែអាហារតិចតួចឥឡូវនេះហើយបន្ទាប់មកមិនឈឺទេ។', - loginBtn: 'ចូល', - registerBtn: 'ចុះឈ្មោះ', - name: 'ឈ្មោះ', - phone: 'ទូរស័ព្ទ', - email: 'អ៊ីមែល', - emailphone: 'អី​ុ​ម៉ែ​ល​ឬ​ទូរស័ព្ទ', - password: 'ពាក្យសម្ងាត់', - deliveryAddress: 'អាស័យ​ដ្ឋាន​សំរាប់​ការ​ដឹកជញ្ជូន', - fullDeliveryAddress: 'អាសយដ្ឋានចែកចាយពេញរបស់អ្នក', - deliveryDetails: 'ព័ត៌មានលម្អិតចាំបាច់ -e. ជាន់ / អាគារ', - myAddresses: 'អាស័យដ្ឋានរបស់ខ្ញុំ', - addAddress: 'បន្ថែមអាសយដ្ឋានថ្មី', - editAddress: 'កែសម្រួលអាសយដ្ឋាន', - registerText: 'ឬចុះឈ្មោះជាមួយ', - forgotPassword: 'ភ្លេច​លេខសំងាត់​?', - loginText: 'ឬចូលជាមួយ', + "សូមស្វាគមន៏ទៅ Enatega ពេលខ្លះអ្វីដែលអ្នកត្រូវការគឺស្នេហា។ ប៉ុន្តែអាហារតិចតួចឥឡូវនេះហើយបន្ទាប់មកមិនឈឺទេ។", + loginBtn: "ចូល", + registerBtn: "ចុះឈ្មោះ", + name: "ឈ្មោះ", + phone: "ទូរស័ព្ទ", + email: "អ៊ីមែល", + emailphone: "អី​ុ​ម៉ែ​ល​ឬ​ទូរស័ព្ទ", + password: "ពាក្យសម្ងាត់", + deliveryAddress: "អាស័យ​ដ្ឋាន​សំរាប់​ការ​ដឹកជញ្ជូន", + fullDeliveryAddress: "អាសយដ្ឋានចែកចាយពេញរបស់អ្នក", + deliveryDetails: "ព័ត៌មានលម្អិតចាំបាច់ -e. ជាន់ / អាគារ", + myAddresses: "អាស័យដ្ឋានរបស់ខ្ញុំ", + addAddress: "បន្ថែមអាសយដ្ឋានថ្មី", + editAddress: "កែសម្រួលអាសយដ្ឋាន", + registerText: "ឬចុះឈ្មោះជាមួយ", + forgotPassword: "ភ្លេច​លេខសំងាត់​?", + loginText: "ឬចូលជាមួយ", deliveryLocation: - 'កំណត់ទីតាំងដឹកជញ្ជូនរបស់អ្នកដូច្នេះយើងអាចផ្ញើឱ្យអ្នកនូវរសជាតិអាហារឆ្ងាញ់គ្មានទីបញ្ចប់។', - locationBtn: 'បើកទីតាំង', - locationPermissionDenied: 'ការអនុញ្ញាតចូលទៅកាន់ទីតាំងត្រូវបានបដិសេធ', - locationOff: 'បើកទីតាំងហើយព្យាយាមម្តងទៀត', - titleLanguage: 'ប្ដូរ​ភាសា', - titleMenu: 'ម៉ឺនុយ', - titleOrders: 'ការបញ្ជាទិញរបស់ខ្ញុំ', - titleNotifications: 'ការជូនដំណឹង', - titleReviews: 'ពិនិត្យ', - titleProfile: 'ប្រវត្តិរូប', - titleHelp: 'ជំនួយ', - titleChat: 'ជជែក', - titleLogout: 'ចាកចេញ', - titleCart: 'កន្ត្រករបស់ខ្ញុំ', - titlePayment: 'ការទូទាត់', - totalOrderAmount: 'បរិមាណសរុប', - reOrder: 'តម្រៀបឡើងវិញ', - unReadNotifications: 'គ្មានការជូនដំណឹងមិនទាន់អាន', - upload: 'ផ្ទុកឡើង', - saveBtn: 'រក្សាទុក', - saveContBtn: 'រក្សាទុកនិងបន្ត', - emailUs: 'អ៊ីម៉ែលមកយើងនៅ', - question1: 'តើយើងរកម្ហូបបាននៅឯណា?', - question2: 'តើយើងទាក់ទងយ៉ាងដូចម្តេច?', - question3: 'តើខ្ញុំអាចបង់ប្រាក់ដល់មនុស្សដែលត្រូវដឹកជញ្ជូន?', - question4: 'តើសេវាកម្មនេះមាននៅក្នុងទីក្រុងរបស់ខ្ញុំដែរឬទេ?', + "កំណត់ទីតាំងដឹកជញ្ជូនរបស់អ្នកដូច្នេះយើងអាចផ្ញើឱ្យអ្នកនូវរសជាតិអាហារឆ្ងាញ់គ្មានទីបញ្ចប់។", + locationBtn: "បើកទីតាំង", + locationPermissionDenied: "ការអនុញ្ញាតចូលទៅកាន់ទីតាំងត្រូវបានបដិសេធ", + locationOff: "បើកទីតាំងហើយព្យាយាមម្តងទៀត", + titleLanguage: "ប្ដូរ​ភាសា", + titleMenu: "ម៉ឺនុយ", + titleOrders: "ការបញ្ជាទិញរបស់ខ្ញុំ", + titleNotifications: "ការជូនដំណឹង", + titleReviews: "ពិនិត្យ", + titleProfile: "ប្រវត្តិរូប", + titleHelp: "ជំនួយ", + titleChat: "ជជែក", + titleLogout: "ចាកចេញ", + titleCart: "កន្ត្រករបស់ខ្ញុំ", + titlePayment: "ការទូទាត់", + totalOrderAmount: "បរិមាណសរុប", + reOrder: "តម្រៀបឡើងវិញ", + unReadNotifications: "គ្មានការជូនដំណឹងមិនទាន់អាន", + upload: "ផ្ទុកឡើង", + saveBtn: "រក្សាទុក", + saveContBtn: "រក្សាទុកនិងបន្ត", + emailUs: "អ៊ីម៉ែលមកយើងនៅ", + question1: "តើយើងរកម្ហូបបាននៅឯណា?", + question2: "តើយើងទាក់ទងយ៉ាងដូចម្តេច?", + question3: "តើខ្ញុំអាចបង់ប្រាក់ដល់មនុស្សដែលត្រូវដឹកជញ្ជូន?", + question4: "តើសេវាកម្មនេះមាននៅក្នុងទីក្រុងរបស់ខ្ញុំដែរឬទេ?", answer1: - 'អ្នកអាចរកឃើញម្ហូបអាហារនៅហាងដែលនៅជិតបំផុតរបស់អ្នកដោយមិនបង់អ្វីឱ្យសេវាកម្មបំរើអតិថិជន។ ការចោទប្រកាន់របស់យើងមានកម្រិតទាបខ្លាំងបើប្រៀបធៀបទៅនឹងអ្នកដទៃ។', - answer2: 'អ្នកអាចទាក់ទងយើងតាមរយៈអ៊ីម៉ែលលេខទូរស័ព្ទឬវេបសាយរបស់យើង។', + "អ្នកអាចរកឃើញម្ហូបអាហារនៅហាងដែលនៅជិតបំផុតរបស់អ្នកដោយមិនបង់អ្វីឱ្យសេវាកម្មបំរើអតិថិជន។ ការចោទប្រកាន់របស់យើងមានកម្រិតទាបខ្លាំងបើប្រៀបធៀបទៅនឹងអ្នកដទៃ។", + answer2: "អ្នកអាចទាក់ទងយើងតាមរយៈអ៊ីម៉ែលលេខទូរស័ព្ទឬវេបសាយរបស់យើង។", answer3: - 'អ្នកអាចបង់ប្រាក់ទៅកាន់បុគ្គលដឹកជញ្ជូនដោយផ្ទាល់ឬបង់ប្រាក់តាមរយៈអ៊ីនធឺណេតតាមរយៈប័ណ្ណឥណទានឬឥណពន្ធផងដែរ។', + "អ្នកអាចបង់ប្រាក់ទៅកាន់បុគ្គលដឹកជញ្ជូនដោយផ្ទាល់ឬបង់ប្រាក់តាមរយៈអ៊ីនធឺណេតតាមរយៈប័ណ្ណឥណទានឬឥណពន្ធផងដែរ។", answer4: - 'បច្ចុប្បន្នសេវាកម្មនេះអាចរកបាននៅក្នុងទីក្រុងអ៊ីស្លាម៉ាបាតនិងការ៉ាជីដែលអ្នកអាចទាក់ទងមកយើងដើម្បីទទួលបានសេវាកម្មនេះនៅក្នុងទីក្រុងរបស់អ្នក។', - add: 'បន្ថែម', - quantity: 'បរិមាណ', - size: 'ទំហំ', - addToCart: 'បន្ថែមទៅកន្ត្រក', - orderNow: 'បញ្ជាទិញឥឡូវ', - addToCartMessage: 'បានបន្ថែមទៅរទេះ', - emptyCart: 'គ្មានធាតុក្នុងរទេះទេ', - itemTotal: 'ធាតុសរុប', - delvieryCharges: 'ការដឹកជញ្ជូន', - total: 'សរុប', - contactInfo: 'ព័ត៌មានទំនាក់ទំនង', - deliveryAddressmessage: 'កំណត់អាសយដ្ឋានបញ្ជូន', - proceedCheckout: 'បន្តដើម្បីពិនិត្យចេញ', - paymentText: 'តើអ្នកចង់បង់ប្រាក់ដោយរបៀបណា?', - checkout: 'ពិនិត្យ​មុន​ពេល​ចេញ', - creditCard: 'ប័ណ្ណឥណទាន / ប័ណ្ណឥណពន្ធ', - paypal: 'Paypal', - cod: 'សាច់ប្រាក់នៅពេលប្រគល់', - thankYou: 'សូមអរគុណ!', - orderConfirmed: 'បញ្ជាទិញរបស់អ្នកត្រូវបានបញ្ជាក់', - orderId: 'លេខសម្គាល់លំដាប់របស់អ្នក', - orderAmount: 'ចំនួនទឹកប្រាក់នៃការបញ្ជាទិញរបស់អ្នក', - orderDetail: 'លំអិតលំដាប់', - paymentMethod: 'វិធី​សា​ស្រ្ត​ទូទាត់', - trackOrder: 'លំដាប់តាមបទ', - backToMenu: 'លំដាប់តាមបទ', - foodItem: 'ម្ហូបអាហារ', - deliveredTo: 'បញ្ជូនទៅ', - writeAReview: 'សរសេរ​សង្ខេប​ឡើងវិញ', - orderReceived: 'បញ្ជាទិញដែលទទួលបាន', - cancelled: 'បានបោះបង់', - foodPreparing: 'ម្ហូបកំពុងត្រូវបានរៀបចំ', - delivered: 'បានបញ្ជូន', - rateAndReview: 'វាយតម្លៃនិងពិនិត្យ', - reviewPlaceholder: 'ការពិនិត្យលម្អិតបន្ថែមទៀតទទួលបានភាពមើលឃើញកាន់តែច្រើន ...', - submit: 'ដាក់ស្នើ', - noWorriesText: 'គ្មានការព្រួយបារម្ភសូមឱ្យយើងជួយអ្នកចេញ!', - yourEmail: 'អ៊ីមែល​របស់​អ្នក', - send: 'ផ្ញើ', - checkEmail: 'ពិនិត្យអ៊ីមែលរបស់អ្នកសម្រាប់តំណពាក្យសម្ងាត់ឡើងវិញ', - languageText: 'សូមជ្រើសរើសភាសាដែលអ្នកត្រូវការ', - countryCodePickerTranslation: 'eng', - countryCodeSelect: 'ជ្រើសរើសលេខកូដប្រទេស', - paymentNotSupported: 'វិធីសាស្ត្រទូទាត់នេះមិនគាំទ្ររូបិយប័ណ្ណនេះទេ', - unReadReviews: 'មិនទាន់មានការពិនិត្យឡើងវិញទេ!', - unReadOrders: 'មិនទាន់មានការបញ្ជាទិញនៅឡើយទេ!', - error: 'កំហុស', - noMoreItems: 'មិនមានរបស់នៅក្នុងស្តុកទៀតទេ', - hungry: 'ឃ្លាន', - emptyCartBtn: 'ត្រឡប់ទៅអាហារ', - subTotal: 'SubTotal', - deliveryFee: 'ថ្លៃសេវាដឹកជញ្ជូន', - haveVoucher: 'តើអ្នកមានប័ណ្ណទូទាត់ទេ?', - remove: 'យកចេញ', - change: 'ផ្លាស់ប្តូរ', - condition1: 'ដោយបំពេញការបញ្ជាទិញនេះខ្ញុំយល់ព្រមនឹងល័ក្ខខ័ណ្ឌទាំងអស់។', + "បច្ចុប្បន្នសេវាកម្មនេះអាចរកបាននៅក្នុងទីក្រុងអ៊ីស្លាម៉ាបាតនិងការ៉ាជីដែលអ្នកអាចទាក់ទងមកយើងដើម្បីទទួលបានសេវាកម្មនេះនៅក្នុងទីក្រុងរបស់អ្នក។", + add: "បន្ថែម", + quantity: "បរិមាណ", + size: "ទំហំ", + addToCart: "បន្ថែមទៅកន្ត្រក", + orderNow: "បញ្ជាទិញឥឡូវ", + addToCartMessage: "បានបន្ថែមទៅរទេះ", + emptyCart: "គ្មានធាតុក្នុងរទេះទេ", + itemTotal: "ធាតុសរុប", + delvieryCharges: "ការដឹកជញ្ជូន", + total: "សរុប", + contactInfo: "ព័ត៌មានទំនាក់ទំនង", + deliveryAddressmessage: "កំណត់អាសយដ្ឋានបញ្ជូន", + proceedCheckout: "បន្តដើម្បីពិនិត្យចេញ", + paymentText: "តើអ្នកចង់បង់ប្រាក់ដោយរបៀបណា?", + checkout: "ពិនិត្យ​មុន​ពេល​ចេញ", + creditCard: "ប័ណ្ណឥណទាន / ប័ណ្ណឥណពន្ធ", + paypal: "Paypal", + cod: "សាច់ប្រាក់នៅពេលប្រគល់", + thankYou: "សូមអរគុណ!", + orderConfirmed: "បញ្ជាទិញរបស់អ្នកត្រូវបានបញ្ជាក់", + orderId: "លេខសម្គាល់លំដាប់របស់អ្នក", + orderAmount: "ចំនួនទឹកប្រាក់នៃការបញ្ជាទិញរបស់អ្នក", + orderDetail: "លំអិតលំដាប់", + paymentMethod: "វិធី​សា​ស្រ្ត​ទូទាត់", + trackOrder: "លំដាប់តាមបទ", + backToMenu: "លំដាប់តាមបទ", + foodItem: "ម្ហូបអាហារ", + deliveredTo: "បញ្ជូនទៅ", + writeAReview: "សរសេរ​សង្ខេប​ឡើងវិញ", + orderReceived: "បញ្ជាទិញដែលទទួលបាន", + cancelled: "បានបោះបង់", + foodPreparing: "ម្ហូបកំពុងត្រូវបានរៀបចំ", + delivered: "បានបញ្ជូន", + rateAndReview: "វាយតម្លៃនិងពិនិត្យ", + reviewPlaceholder: "ការពិនិត្យលម្អិតបន្ថែមទៀតទទួលបានភាពមើលឃើញកាន់តែច្រើន ...", + submit: "ដាក់ស្នើ", + noWorriesText: "គ្មានការព្រួយបារម្ភសូមឱ្យយើងជួយអ្នកចេញ!", + yourEmail: "អ៊ីមែល​របស់​អ្នក", + send: "ផ្ញើ", + checkEmail: "ពិនិត្យអ៊ីមែលរបស់អ្នកសម្រាប់តំណពាក្យសម្ងាត់ឡើងវិញ", + languageText: "សូមជ្រើសរើសភាសាដែលអ្នកត្រូវការ", + countryCodePickerTranslation: "eng", + countryCodeSelect: "ជ្រើសរើសលេខកូដប្រទេស", + paymentNotSupported: "វិធីសាស្ត្រទូទាត់នេះមិនគាំទ្ររូបិយប័ណ្ណនេះទេ", + unReadReviews: "មិនទាន់មានការពិនិត្យឡើងវិញទេ!", + unReadOrders: "មិនទាន់មានការបញ្ជាទិញនៅឡើយទេ!", + error: "កំហុស", + noMoreItems: "មិនមានរបស់នៅក្នុងស្តុកទៀតទេ", + hungry: "ឃ្លាន", + emptyCartBtn: "ត្រឡប់ទៅអាហារ", + subTotal: "SubTotal", + deliveryFee: "ថ្លៃសេវាដឹកជញ្ជូន", + haveVoucher: "តើអ្នកមានប័ណ្ណទូទាត់ទេ?", + remove: "យកចេញ", + change: "ផ្លាស់ប្តូរ", + condition1: "ដោយបំពេញការបញ្ជាទិញនេះខ្ញុំយល់ព្រមនឹងល័ក្ខខ័ណ្ឌទាំងអស់។", condition2: - 'ខ្ញុំយល់ព្រមហើយខ្ញុំទាមទារឱ្យអ្នកប្រតិបត្តិសេវាកម្មដែលបានបញ្ជាទិញមុនពេលចុងបញ្ចប់នៃរយៈពេលដកហូត។ ខ្ញុំដឹងថាបន្ទាប់ពីការបំពេញសេវាកម្មពេញលេញខ្ញុំបាត់បង់សិទ្ធិក្នុងការរំដោះខ្លួន។', - orderBtn: 'ដាក់បញ្ជាទិញ', - coupanApply: 'ការបញ្ចុះតម្លៃប័ណ្ណត្រូវបានអនុវត្ត', - coupanFailed: 'គូប៉ុងមិនមានទេ', - invalidCoupan: 'គូប៉ុងមិនត្រឹមត្រូវ', - validateItems: 'បន្ថែមរបស់របរទៅរទេះមុនពេលឆែក', - validateDelivery: 'កំណត់អាសយដ្ឋានដឹកជញ្ជូនមុនពេលពិនិត្យចេញ', - language: 'ភាសា', - getUpdatesText: 'ទទួល​បាន​ការ​ធ្វើ​បច្ចុប្បន្ន​ភាព​លើ​ស្ថាន​ភាព​ការ​បញ្ជាទិញ​របស់​អ្នក!', - delAcc: 'លុប​គណនី', - delAccText: 'តើ​អ្នក​ប្រាកដ​ថា​តើ​ចង់​លុប​គណនី​ឬ​ទេ?', - cancel: 'បោះបង់', - receiveOffers: 'ទទួល​បាន​ការ​ផ្តល់​ជូន​ពិសេស', - notificationUpdate: 'ការ​ប្រកាស​ការ​ជូន​ដំណឹង​ត្រូវបាន​ធ្វើ​បច្ចុប្បន្ន', - notificationsNotWorking: "ការ​ជូន​ដំណឹង​មិន​ដំណើរ​ការ​លើ​ម៉ាស៊ីន​សម្រាប់​ប្រើប្រាស់តំណល", + "ខ្ញុំយល់ព្រមហើយខ្ញុំទាមទារឱ្យអ្នកប្រតិបត្តិសេវាកម្មដែលបានបញ្ជាទិញមុនពេលចុងបញ្ចប់នៃរយៈពេលដកហូត។ ខ្ញុំដឹងថាបន្ទាប់ពីការបំពេញសេវាកម្មពេញលេញខ្ញុំបាត់បង់សិទ្ធិក្នុងការរំដោះខ្លួន។", + orderBtn: "ដាក់បញ្ជាទិញ", + coupanApply: "ការបញ្ចុះតម្លៃប័ណ្ណត្រូវបានអនុវត្ត", + coupanFailed: "គូប៉ុងមិនមានទេ", + invalidCoupan: "គូប៉ុងមិនត្រឹមត្រូវ", + validateItems: "បន្ថែមរបស់របរទៅរទេះមុនពេលឆែក", + validateDelivery: "កំណត់អាសយដ្ឋានដឹកជញ្ជូនមុនពេលពិនិត្យចេញ", + language: "ភាសា", + getUpdatesText: + "ទទួល​បាន​ការ​ធ្វើ​បច្ចុប្បន្ន​ភាព​លើ​ស្ថាន​ភាព​ការ​បញ្ជាទិញ​របស់​អ្នក!", + delAcc: "លុប​គណនី", + delAccText: "តើ​អ្នក​ប្រាកដ​ថា​តើ​ចង់​លុប​គណនី​ឬ​ទេ?", + cancel: "បោះបង់", + receiveOffers: "ទទួល​បាន​ការ​ផ្តល់​ជូន​ពិសេស", + notificationUpdate: "ការ​ប្រកាស​ការ​ជូន​ដំណឹង​ត្រូវបាន​ធ្វើ​បច្ចុប្បន្ន", + notificationsNotWorking: + "ការ​ជូន​ដំណឹង​មិន​ដំណើរ​ការ​លើ​ម៉ាស៊ីន​សម្រាប់​ប្រើប្រាស់តំណល", loginOrCreateAcc: "ចូល​ប្រើ/បង្កើត​គណនី", welcome: "ស្វាគមន៍", - titleSettings: 'ការ​កំណត់', - home: 'ទំព័រ​ដើម', - noItems: 'រក​មិន​ឃើញ​ទេ', - featured: 'ផ្សេងៗ', - filters: 'តម្រង', - reset: 'កំណត់​ឡើងវិញ', - showSaleItems: 'បង្ហាញ​ទំនិញ​លក់​តែប៉ុណ្ណោះ', - showStockItems: 'បង្ហាញ​ទំនិញ​ស្តុក​តែប៉ុណ្ណោះ', - priceRange: 'ជម្រើស​តម្លៃ', - sorting: 'តម្រៀបតាម', - applyFilter: 'អនុវត្ត​តម្រង', - close: 'បិទ', + titleSettings: "ការ​កំណត់", + home: "ទំព័រ​ដើម", + noItems: "រក​មិន​ឃើញ​ទេ", + featured: "ផ្សេងៗ", + filters: "តម្រង", + reset: "កំណត់​ឡើងវិញ", + showSaleItems: "បង្ហាញ​ទំនិញ​លក់​តែប៉ុណ្ណោះ", + showStockItems: "បង្ហាញ​ទំនិញ​ស្តុក​តែប៉ុណ្ណោះ", + priceRange: "ជម្រើស​តម្លៃ", + sorting: "តម្រៀបតាម", + applyFilter: "អនុវត្ត​តម្រង", + close: "បិទ", phoneNumberRequired: "ត្រូវការលេខទូរស័ព្ទ", phoneNumberMissing: "ខុសលេខទូរស័ព្ទ", userInfoUpdated: "ព័ត៌មានអ្នកប្រើប្រាស់ត្រូវបានធ្វើបច្ចុប្បន្នភាព", nameReq: "ត្រូវការឈ្មោះ", - minWords: "អត្ថបទអប្បាយបន្ទាប់ពី 11 និងអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណ", + minWords: + "អត្ថបទអប្បាយបន្ទាប់ពី 11 និងអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណ", rightsReserved: "រក្សាសិទ្ធិទាំងអស់គ្នាដោយ Enatega", changePass: "ប្ដូរលេខសម្ងាត់", currentPass: "លេខសម្ងាត់បច្ចុប្បន្ន", @@ -175,32 +178,32 @@ export const km = { noOrdersAssigned: "មិនទាន់បានចាក់ការបញ្ជាទិញទេ!", oldOrder: "ការបញ្ជាទិញចាស់", activeOrder: "ការបញ្ជាទិញដែលមានសកម្ម", - idVar: 'លេខសម្គាល់: ', - addressUpdated: 'អាសយដ្ឋានត្រូវបានធ្វើបច្ចុប្បន្នភាព', - labelAs: 'ស្លាកជាដើម', - addressReq: 'អាសយដ្ឋានការដឹកជញ្ជូនត្រូវការ', - deliveryDetailsReq: 'សេចក្ដីលម្អិតនៃការដឹកជញ្ជូនត្រូវការ', - locaPermission: 'ការអនុញ្ញាតឱ្យតាមដានទីតាំងមិនបានទទួលយក', - addressAdded: 'បាន​បន្ថែម​អាសយដ្ឋាន', - productPage: 'ទំព័រផលិតផល', - Docs: 'ឯកសារ', - Blog: 'ប្លក់', - aboutUs: 'អំពី​យើង', - myVouchers: 'លេខកូដ​វេបសាយ​របស់​ខ្ញុំ', + 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: 'បង្កើតគណនីថ្មី', + status: "ស្ថានភាព", + anySuggestion: "មានអំណាចណាស់មែនទេ?", + reviewRegarding: "ពិនិត្យឡើងវិញអំពីការបញ្ជាទិញរបស់អ្នក?", + writeReview: "សរសេរពិន្ទុ", + chatWithRider: "ជជែកជាមួយអ្នកបើកដំណើរ", + signupGoogle: "ចុះឈ្មោះជាមួយ Google", + signupEmail: "ចុះឈ្មោះតាមអ៊ីម៉ែល", + signup: "ចុះឈ្មោះ", + signupApple: "ចុះឈ្មោះជាមួយ Apple", + alreadyMember: "រួចហើយរួចចូលក្នុង", + enterUsername: "បញ្ចូលអ៊ីម៉ែលរបស់អ្នក និងពាក្យសម្ងាត់", + createNewAcc: "បង្កើតគណនីថ្មី", emailphoneReq: "ត្រូវការអ៊ីម៉ែល/លេខទូរស័ព្ទ", invalidMail: "អ៊ីម៉ែល/លេខទូរស័ព្ទ​មិនត្រឹមត្រូវ", passReq: "ត្រូវការពាក្យសម្ងាត់", @@ -211,35 +214,34 @@ export const km = { orderDelivered: "ការបញ្ជាទិញបានដឹកជញ្ជូន។", completeOrder: "ការបញ្ជាទិញបានបញ្ចប់។", PENDING: "កំពុងរង់ចាំ", - ACCEPTED: 'បានទទួលយក', + ACCEPTED: "បានទទួលយក", PICKED: "បានជូនយក", DELIVERED: "បានដឹកជញ្ជូន", COMPLETED: "បានបញ្ចប់", - 'Default': 'លំនាំដើម', - 'Ascending (A-Z)': 'កើតឡើង (អ ទំ)', - 'Descending (Z-A)': 'ចុះឡើង (ទំ អ)', - 'Price (Low - High)': 'តម្លៃ (ទាប - ខ្ពស់)', - 'Price (High - Low)': 'តម្លៃ (ខ្ពស់ - ទាប)', - Home: 'ទំព័រដើម', - Work: 'ការងារ', - Other: 'ផ្សេងៗ', - NoStock: 'គ្មាន​ស្តុក', - ItemOutOfStock: 'មុខទំនិញ​អស់​ស្តុក', - SelectLanguage: 'ជ្រើសរើសភាសា', - Done: 'រួចរាល់', - Cancel: 'បោះបង់', - NoFoods: 'មិនមានអាហារ', - CartIsEmpty: 'រទេះទម្ងន់។', - SetPaymentMethod: 'កំណត់របស់មុនពេលចេញ', - AnErrorOccured: 'មានកំហុសមិនរួចហើយ។ សូមព្យាយាមម្តងទៀត', - ResetPasswordLinkSent: 'បានផ្ញើតំណរពេលបានប្ដូរពាក្យសម្ងាត់របស់អ្នកហើយ', - LocationPermissionNotGranted: 'មិនបានទទួលស្ថានភាពទីតាំង', - NoFooditemFound: 'មិនបានរកឃើញវាលម្ហូប', - SavedYet: 'អ្នកមិនទាន់រក្សាទុកអាសយដ្ឋានណាមួយទេ។', - ClickAddNewAddress: 'ចុចលើប៊ូតុងបន្ថែមអាសយដ្ឋានថ្មីដើម្បីចាប់ផ្តើម', - NoAddressesfound: 'រកមិនឃើញអាសយដ្ឋានទេ។', - AddNewAddress: 'បន្ថែមអាសយដ្ឋានថ្មី', - 'About Us': 'អំពីពួកយើង', - 'Product Page': 'ទំព័រផលិតផល', - -} + Default: "លំនាំដើម", + "Ascending (A-Z)": "កើតឡើង (អ ទំ)", + "Descending (Z-A)": "ចុះឡើង (ទំ អ)", + "Price (Low - High)": "តម្លៃ (ទាប - ខ្ពស់)", + "Price (High - Low)": "តម្លៃ (ខ្ពស់ - ទាប)", + Home: "ទំព័រដើម", + Work: "ការងារ", + Other: "ផ្សេងៗ", + NoStock: "គ្មាន​ស្តុក", + ItemOutOfStock: "មុខទំនិញ​អស់​ស្តុក", + SelectLanguage: "ជ្រើសរើសភាសា", + Done: "រួចរាល់", + Cancel: "បោះបង់", + NoFoods: "មិនមានអាហារ", + CartIsEmpty: "រទេះទម្ងន់។", + SetPaymentMethod: "កំណត់របស់មុនពេលចេញ", + AnErrorOccured: "មានកំហុសមិនរួចហើយ។ សូមព្យាយាមម្តងទៀត", + ResetPasswordLinkSent: "បានផ្ញើតំណរពេលបានប្ដូរពាក្យសម្ងាត់របស់អ្នកហើយ", + LocationPermissionNotGranted: "មិនបានទទួលស្ថានភាពទីតាំង", + NoFooditemFound: "មិនបានរកឃើញវាលម្ហូប", + SavedYet: "អ្នកមិនទាន់រក្សាទុកអាសយដ្ឋានណាមួយទេ។", + ClickAddNewAddress: "ចុចលើប៊ូតុងបន្ថែមអាសយដ្ឋានថ្មីដើម្បីចាប់ផ្តើម", + NoAddressesfound: "រកមិនឃើញអាសយដ្ឋានទេ។", + AddNewAddress: "បន្ថែមអាសយដ្ឋានថ្មី", + "About Us": "អំពីពួកយើង", + "Product Page": "ទំព័រផលិតផល", +}; diff --git a/CustomerApp/translations/zh.js b/CustomerApp/translations/zh.js index 4485b0f..63376f5 100644 --- a/CustomerApp/translations/zh.js +++ b/CustomerApp/translations/zh.js @@ -1,156 +1,156 @@ export const zh = { - home: 'Home', - title0: '选定的语言', - subtitle0: 'English', - description0: '选择您选择的任何语言,将应用内容更改为您所需的语言。', - title1: '可口', - subtitle1: '早餐', + home: "主页", + title0: "选定的语言", + subtitle0: "English", + description0: "选择您选择的任何语言,将应用内容更改为您所需的语言。", + title1: "可口", + subtitle1: "早餐", description1: - '早餐就是一切。一开始,第一件事。这是对新的一天,持续生活的承诺。', - title2: '清爽', - subtitle2: '饮料', + "早餐就是一切。一开始,第一件事。这是对新的一天,持续生活的承诺。", + title2: "清爽", + subtitle2: "饮料", description2: - '真正的沉默是心灵的其余部分,对于精神来说,睡眠对身体,营养和茶点来说都是如此。', - title3: '美味的', - subtitle3: '冰淇淋', - description3: '年龄不会减少从冰锥中舀出一勺冰淇淋的极度失望', - getStarted: '开始吧!', + "真正的沉默是心灵的其余部分,对于精神来说,睡眠对身体,营养和茶点来说都是如此。", + title3: "美味的", + subtitle3: "冰淇淋", + description3: "年龄不会减少从冰锥中舀出一勺冰淇淋的极度失望", + getStarted: "开始吧!", welcome: - '欢迎来到Enatega,有时您需要的只是爱。但是偶尔会有点食物不会受到伤害。', - loginBtn: '登录', - registerBtn: '寄存器', - name: '名称', - phone: '电话', - email: '电子邮件', - emailphone: '邮件或者电话', - password: '密码', - deliveryAddress: '邮寄地址', - fullDeliveryAddress: '您的完整收货地址', - deliveryDetails: '必填详细信息-例如 楼层/建筑物', - myAddresses: '我的地址', - addAddress: '添加新地址', - editAddress: '编辑地址', - registerText: '或注册', - forgotPassword: '忘记密码?', - loginText: '或登录', - deliveryLocation: '设置您的送货地点,以便我们可以向您发送无尽的美味食物。', - locationBtn: '打开位置', - locationPermissionDenied: '访问位置的权限被拒绝', - locationOff: '访问位置的权限被拒绝', - titleLanguage: '改变语言', - titleMenu: '菜单', - titleOrders: '我的订单', - titleNotifications: '通知', - titleReviews: '评测', - titleProfile: '轮廓', - titleHelp: '救命', - titleChat: '聊', - titleLogout: '登出', - titleCart: '我的车', - titlePayment: '付款', - totalOrderAmount: '总订单金额', - reOrder: '重新排序', - unReadNotifications: '没有未读通知', - upload: '上传', - saveBtn: '保存', - saveContBtn: '保存并继续', - emailUs: '给我们发电子邮件', - question1: '我们在哪里找到食物?', - question2: '我们如何联系?', - question3: '我该如何付款给送货人?', - question4: '我的城市有这项服务吗?', + "欢迎来到Enatega,有时您需要的只是爱。但是偶尔会有点食物不会受到伤害。", + loginBtn: "登录", + registerBtn: "寄存器", + name: "名称", + phone: "电话", + email: "电子邮件", + emailphone: "邮件或者电话", + password: "密码", + deliveryAddress: "邮寄地址", + fullDeliveryAddress: "您的完整收货地址", + deliveryDetails: "必填详细信息-例如 楼层/建筑物", + myAddresses: "我的地址", + addAddress: "添加新地址", + editAddress: "编辑地址", + registerText: "或注册", + forgotPassword: "忘记密码?", + loginText: "或登录", + deliveryLocation: "设置您的送货地点,以便我们可以向您发送无尽的美味食物。", + locationBtn: "打开位置", + locationPermissionDenied: "访问位置的权限被拒绝", + locationOff: "访问位置的权限被拒绝", + titleLanguage: "改变语言", + titleMenu: "菜单", + titleOrders: "我的订单", + titleNotifications: "通知", + titleReviews: "评测", + titleProfile: "轮廓", + titleHelp: "救命", + titleChat: "聊", + titleLogout: "登出", + titleCart: "我的车", + titlePayment: "付款", + totalOrderAmount: "总订单金额", + reOrder: "重新排序", + unReadNotifications: "没有未读通知", + upload: "上传", + saveBtn: "保存", + saveContBtn: "保存并继续", + emailUs: "给我们发电子邮件", + question1: "我们在哪里找到食物?", + question2: "我们如何联系?", + question3: "我该如何付款给送货人?", + question4: "我的城市有这项服务吗?", answer1: - '您可以在离您最近的商店找到食物,而无需向客户支付任何费用。与其他人相比,我们的收费极低。', - answer2: '您可以通过我们的电子邮件,电话号码或我们的网站联系我们。', - answer3: '您可以亲自向付款人付款或使用信用卡或借记卡在线付款。', + "您可以在离您最近的商店找到食物,而无需向客户支付任何费用。与其他人相比,我们的收费极低。", + answer2: "您可以通过我们的电子邮件,电话号码或我们的网站联系我们。", + answer3: "您可以亲自向付款人付款或使用信用卡或借记卡在线付款。", answer4: - '目前,这项服务在伊斯兰堡和卡拉奇市提供,您可以联系我们以便在您所在的城市使用此服务。', - add: '加', - quantity: '数量', - size: '尺寸', - addToCart: '添加到购物车', - orderNow: '现在下单', - addToCartMessage: '已添加到购物车', - emptyCart: '购物车中没有商品', - itemTotal: '项目总计', - delvieryCharges: '送货费', - total: '总', - contactInfo: '联系信息', - deliveryAddressmessage: '设置送货地址', - proceedCheckout: '进行结算', - paymentText: '你想怎么付钱?', - checkout: '查看', - creditCard: '信用卡/借记卡', - paypal: '贝宝', - cod: '货到付款', - thankYou: 'ស谢谢!', - orderConfirmed: '您的订单已确认', - orderId: '您的订单ID', - orderAmount: '您的订单金额', - orderDetail: '订单详情', - paymentMethod: '付款方法', - trackOrder: '跟踪订单', - backToMenu: '跟踪订单', - foodItem: '食品', - deliveredTo: '送到了(送去了', - writeAReview: '写评论', - orderReceived: '订单已经收到', - cancelled: '取消', - foodPreparing: '食物正在准备中', - delivered: '交付', - rateAndReview: '打分和评论', - reviewPlaceholder: '更详细的评论获得更多可见性......', - submit: '提交', - noWorriesText: '不用担心,让我们帮帮你吧!', - yourEmail: '你的邮件', - send: '发送', - checkEmail: '查看您的电子邮件以重置密码链接', - languageText: '请选择您需要的语言', - countryCodePickerTranslation: 'zho', - countryCodeSelect: '选择国家代码', - paymentNotSupported: '此付款方式不支持此货币', - unReadReviews: '暂无评论!', - unReadOrders: '尚无订单!', - error: '错误', - noMoreItems: '库存不多', - hungry: '饥饿', - emptyCartBtn: '回到食物', - subTotal: '小计', - deliveryFee: '快递费', - haveVoucher: '你有优惠券吗', - remove: '去掉', - change: '更改', - condition1: '完成此订单,即表示我同意所有条款和条件。', + "目前,这项服务在伊斯兰堡和卡拉奇市提供,您可以联系我们以便在您所在的城市使用此服务。", + add: "加", + quantity: "数量", + size: "尺寸", + addToCart: "添加到购物车", + orderNow: "现在下单", + addToCartMessage: "已添加到购物车", + emptyCart: "购物车中没有商品", + itemTotal: "项目总计", + delvieryCharges: "送货费", + total: "总", + contactInfo: "联系信息", + deliveryAddressmessage: "设置送货地址", + proceedCheckout: "进行结算", + paymentText: "你想怎么付钱?", + checkout: "查看", + creditCard: "信用卡/借记卡", + paypal: "贝宝", + cod: "货到付款", + thankYou: "ស谢谢!", + orderConfirmed: "您的订单已确认", + orderId: "您的订单ID", + orderAmount: "您的订单金额", + orderDetail: "订单详情", + paymentMethod: "付款方法", + trackOrder: "跟踪订单", + backToMenu: "跟踪订单", + foodItem: "食品", + deliveredTo: "送到了(送去了", + writeAReview: "写评论", + orderReceived: "订单已经收到", + cancelled: "取消", + foodPreparing: "食物正在准备中", + delivered: "交付", + rateAndReview: "打分和评论", + reviewPlaceholder: "更详细的评论获得更多可见性......", + submit: "提交", + noWorriesText: "不用担心,让我们帮帮你吧!", + yourEmail: "你的邮件", + send: "发送", + checkEmail: "查看您的电子邮件以重置密码链接", + languageText: "请选择您需要的语言", + countryCodePickerTranslation: "zho", + countryCodeSelect: "选择国家代码", + paymentNotSupported: "此付款方式不支持此货币", + unReadReviews: "暂无评论!", + unReadOrders: "尚无订单!", + error: "错误", + noMoreItems: "库存不多", + hungry: "饥饿", + emptyCartBtn: "回到食物", + subTotal: "小计", + deliveryFee: "快递费", + haveVoucher: "你有优惠券吗", + remove: "去掉", + change: "更改", + condition1: "完成此订单,即表示我同意所有条款和条件。", condition2: - '我同意,我要求您在吊销期结束之前执行订购的服务。 我知道,在完全完成服务后,我将失去撤销的权利。', - orderBtn: '下订单', - coupanApply: '优惠券折扣', - coupanFailed: '优惠券不可用', - invalidCoupan: '优惠券无效', - validateItems: '结帐前将商品添加到购物车', - validateDelivery: '结帐前设置送货地址', - language: '语言', - getUpdatesText: '获取订单状态更新!', - delAcc: '删除账户', - delAccText: '您确定要删除账户吗?', - cancel: '取消', - receiveOffers: '接收特别优惠', - notificationUpdate: '通知状态已更新', + "我同意,我要求您在吊销期结束之前执行订购的服务。 我知道,在完全完成服务后,我将失去撤销的权利。", + orderBtn: "下订单", + coupanApply: "优惠券折扣", + coupanFailed: "优惠券不可用", + invalidCoupan: "优惠券无效", + validateItems: "结帐前将商品添加到购物车", + validateDelivery: "结帐前设置送货地址", + language: "语言", + getUpdatesText: "获取订单状态更新!", + delAcc: "删除账户", + delAccText: "您确定要删除账户吗?", + cancel: "取消", + receiveOffers: "接收特别优惠", + notificationUpdate: "通知状态已更新", notificationsNotWorking: "通知在模拟器上无法工作", loginOrCreateAcc: "登录/创建帐户", welcome: "欢迎", - titleSettings: '设置', - home: '主页', - noItems: '未找到物品', - featured: '特色', - filters: '筛选', - reset: '重置', - showSaleItems: '仅显示特价商品', - showStockItems: '仅显示有库存商品', - priceRange: '价格范围', - sorting: '排序', - applyFilter: '应用筛选', - close: '关闭', + titleSettings: "设置", + home: "主页", + noItems: "未找到物品", + featured: "特色", + filters: "筛选", + reset: "重置", + showSaleItems: "仅显示特价商品", + showStockItems: "仅显示有库存商品", + priceRange: "价格范围", + sorting: "排序", + applyFilter: "应用筛选", + close: "关闭", phoneNumberRequired: "需要电话号码", phoneNumberMissing: "缺少电话号码", userInfoUpdated: "用户信息已更新", @@ -171,32 +171,32 @@ export const zh = { noOrdersAssigned: "尚未分配订单!", oldOrder: "旧订单", activeOrder: "活跃订单", - idVar: 'ID:', - addressUpdated: '地址已更新', - labelAs: '标记为', - addressReq: '需要交付地址', - deliveryDetailsReq: '需要交付细节', - locaPermission: '未授予位置权限', - addressAdded: '已添加地址', - productPage: '产品页面', - Docs: '文档', - Blog: '博客', - aboutUs: '关于我们', - myVouchers: '我的优惠券', + 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: '创建新帐户', + status: "状态", + anySuggestion: "有什么建议吗?", + reviewRegarding: "关于您的订单的评论?", + writeReview: "撰写评论", + chatWithRider: "与骑手聊天", + signupGoogle: "使用 Google 注册", + signupEmail: "使用电子邮件注册", + signup: "注册", + signupApple: "使用 Apple 注册", + alreadyMember: "已经是会员?登录", + enterUsername: "输入您的电子邮件和密码", + createNewAcc: "创建新帐户", emailphoneReq: "需要电子邮件/电话号码", invalidMail: "无效的电子邮件/电话号码", passReq: "需要密码", @@ -207,35 +207,34 @@ export const zh = { orderDelivered: "订单已送达。", completeOrder: "订单已完成。", PENDING: "待处理", - ACCEPTED: '已接受', + ACCEPTED: "已接受", PICKED: "已取货", DELIVERED: "已送达", COMPLETED: "已完成", - 'Default': '默认', - 'Ascending (A-Z)': '升序 (A-Z)', - 'Descending (Z-A)': '降序 (Z-A)', - 'Price (Low - High)': '价格 (低 - 高)', - 'Price (High - Low)': '价格 (高 - 低)', - Home: '首页', - Work: '工作', - Other: '其他', - NoStock: '无库存', - ItemOutOfStock: '商品缺货', - SelectLanguage: '选择语言', - Done: '完成', - Cancel: '取消', - NoFoods: '没有食物', - CartIsEmpty: '购物车是空的。', - SetPaymentMethod: '请在结账前设置付款方式', - AnErrorOccured: '发生错误。请重试', - ResetPasswordLinkSent: '重置密码链接已发送到您的电子邮件', - LocationPermissionNotGranted: '未授予位置权限', - NoFooditemFound: '找不到食品项目', - SavedYet: '您尚未保存任何地址。', - ClickAddNewAddress: '单击“添加新地址”以开始', - NoAddressesfound: '未找到地址。', - AddNewAddress: '添加新地址', - 'About Us': '关于我们', - 'Product Page': '产品页面', - -} + Default: "默认", + "Ascending (A-Z)": "升序 (A-Z)", + "Descending (Z-A)": "降序 (Z-A)", + "Price (Low - High)": "价格 (低 - 高)", + "Price (High - Low)": "价格 (高 - 低)", + Home: "首页", + Work: "工作", + Other: "其他", + NoStock: "无库存", + ItemOutOfStock: "商品缺货", + SelectLanguage: "选择语言", + Done: "完成", + Cancel: "取消", + NoFoods: "没有食物", + CartIsEmpty: "购物车是空的。", + SetPaymentMethod: "请在结账前设置付款方式", + AnErrorOccured: "发生错误。请重试", + ResetPasswordLinkSent: "重置密码链接已发送到您的电子邮件", + LocationPermissionNotGranted: "未授予位置权限", + NoFooditemFound: "找不到食品项目", + SavedYet: "您尚未保存任何地址。", + ClickAddNewAddress: "单击“添加新地址”以开始", + NoAddressesfound: "未找到地址。", + AddNewAddress: "添加新地址", + "About Us": "关于我们", + "Product Page": "产品页面", +}; From 28b7fc6277357b88b1b8be315c7ea3f7de1a4f19 Mon Sep 17 00:00:00 2001 From: aliyanlatif Date: Wed, 31 Jan 2024 15:05:01 +0500 Subject: [PATCH 2/3] fixed order status text issue --- .../components/Menu/StatusCard/StatusCard.js | 74 +++-- .../src/components/MyOrders/ActiveOrders.js | 116 ++++---- CustomerApp/src/screens/MyOrders/MyOrders.js | 19 +- .../src/screens/OrderDetail/OrderDetail.js | 266 ++++++++++-------- CustomerApp/src/screens/Settings/Settings.js | 7 +- 5 files changed, 272 insertions(+), 210 deletions(-) diff --git a/CustomerApp/src/components/Menu/StatusCard/StatusCard.js b/CustomerApp/src/components/Menu/StatusCard/StatusCard.js index f8b69f1..7673d41 100644 --- a/CustomerApp/src/components/Menu/StatusCard/StatusCard.js +++ b/CustomerApp/src/components/Menu/StatusCard/StatusCard.js @@ -11,33 +11,55 @@ import TextError from "../../Text/TextError/TextError"; import useStyle from "./styles"; import i18n from "../../../../i18n"; -export const orderStatuses = [ - { - key: i18n.t("PENDING"), +// export const orderStatuses = [ +// { +// key: i18n.t("PENDING"), +// status: 1, +// statusText: i18n.t("orderPending"), +// }, +// { +// key: i18n.t("ACCEPTED"), +// status: 2, +// statusText: i18n.t("prepFood"), +// }, +// { +// key: i18n.t("PICKED"), +// status: 3, +// statusText: i18n.t("riderOnWay"), +// }, +// { +// key: i18n.t("DELIVERED"), +// status: 4, +// statusText: i18n.t("orderDelivered"), +// }, +// { +// key: i18n.t("COMPLETED"), +// status: 5, +// statusText: i18n.t("completeOrder"), +// }, +// ]; +export const orderStatuses = { + PENDING: { status: 1, - statusText: i18n.t("orderPending"), + statusText: "orderPending", }, - { - key: i18n.t("ACCEPTED"), + ACCEPTED: { status: 2, - statusText: i18n.t("prepFood"), + statusText: "prepFood", }, - { - key: i18n.t("PICKED"), + PICKED: { status: 3, - statusText: i18n.t("riderOnWay"), + statusText: "riderOnWay", }, - { - key: i18n.t("DELIVERED"), + DELIVERED: { status: 4, - statusText: i18n.t("orderDelivered"), + statusText: "orderDelivered", }, - { - key: i18n.t("COMPLETED"), + COMPLETED: { status: 5, - statusText: i18n.t("completeOrder"), + statusText: "completeOrder", }, -]; +}; const orderStatusActive = ["PENDING", "PICKED", "ACCEPTED"]; @@ -54,12 +76,12 @@ const StatusCard = () => { } = useContext(UserContext); const configuration = useContext(ConfigurationContext); - const checkStatus = (status) => { - const obj = orderStatuses.filter((x) => { - return x.key === status; - }); - return obj[0]; - }; + // const checkStatus = (status) => { + // const obj = orderStatuses.filter((x) => { + // return x.key === status; + // }); + // return obj[0]; + // }; if (loadingOrders) return ; if (errorOrders) return {errorOrders.message}; @@ -101,8 +123,10 @@ const StatusCard = () => { {i18n.t(item.order_status)}{" "} - {checkStatus(item.order_status).status}. ( - {checkStatus(i18n.t(item.order_status)).statusText}) + {/* {checkStatus(item.order_status).status}.{' '} */} + {/* {checkStatus(i18n.t(item.order_status)?.status)?.statusText || + "..."} */} + {`(${i18n.t(orderStatuses[item.order_status]?.statusText)})`} diff --git a/CustomerApp/src/components/MyOrders/ActiveOrders.js b/CustomerApp/src/components/MyOrders/ActiveOrders.js index bcbd1de..c4a6986 100644 --- a/CustomerApp/src/components/MyOrders/ActiveOrders.js +++ b/CustomerApp/src/components/MyOrders/ActiveOrders.js @@ -1,93 +1,104 @@ -import { useTheme } from '@react-navigation/native' -import PropTypes from 'prop-types' -import React, { useContext } from 'react' -import { TouchableOpacity, View } from 'react-native' -import ConfigurationContext from '../../context/Configuration' -import { COLORS } from '../../Theme/Colors' -import { alignment } from '../../utils/alignment' -import { ICONS_NAME, NAVIGATION_SCREEN } from '../../utils/constant' -import { scale } from '../../utils/scaling' -import { CustomIcon } from '../CustomIcon/index' -import EnategaImage from '../EnategaImage/EnategaImage' -import TextDefault from '../Text/TextDefault/TextDefault' -import TextError from '../Text/TextError/TextError' -import TextLine from '../Text/TextLine/TextLine' -import useStyle from './styles' -import i18n from '../../../i18n' +import { useTheme } from "@react-navigation/native"; +import PropTypes from "prop-types"; +import React, { useContext } from "react"; +import { TouchableOpacity, View } from "react-native"; +import ConfigurationContext from "../../context/Configuration"; +import { COLORS } from "../../Theme/Colors"; +import { alignment } from "../../utils/alignment"; +import { ICONS_NAME, NAVIGATION_SCREEN } from "../../utils/constant"; +import { scale } from "../../utils/scaling"; +import { CustomIcon } from "../CustomIcon/index"; +import EnategaImage from "../EnategaImage/EnategaImage"; +import TextDefault from "../Text/TextDefault/TextDefault"; +import TextError from "../Text/TextError/TextError"; +import TextLine from "../Text/TextLine/TextLine"; +import useStyle from "./styles"; +import i18n from "../../../i18n"; export const orderStatuses = [ { - key: 'PENDING', + key: "PENDING", status: 1, icon: ICONS_NAME.Clock, - color: COLORS.primary + color: COLORS.primary, }, { - key: 'ACCEPTED', + key: "ACCEPTED", status: 2, icon: ICONS_NAME.Checked, - color: COLORS.blueColor + color: COLORS.blueColor, }, { - key: 'PICKED', + key: "PICKED", status: 3, icon: ICONS_NAME.Checked, - color: COLORS.blueColor + color: COLORS.blueColor, }, { - key: 'DELIVERED', + key: "DELIVERED", status: 4, icon: ICONS_NAME.Checked, - color: COLORS.blueColor + color: COLORS.blueColor, }, { - key: 'COMPLETED', + key: "COMPLETED", status: 5, icon: ICONS_NAME.Checked, - color: COLORS.blueColor - } -] + color: COLORS.blueColor, + }, +]; const ActiveOrders = ({ navigation, loading, error, activeOrders, - pastOrders + pastOrders, }) => { - const styles = useStyle() - const { colors } = useTheme() - const configuration = useContext(ConfigurationContext) + const styles = useStyle(); + const { colors } = useTheme(); + const configuration = useContext(ConfigurationContext); if (loading) { - return Loading... + return Loading...; } - if (error) return + if (error) return ; if (!activeOrders || (activeOrders && !activeOrders.length)) { if (!pastOrders || (pastOrders && !pastOrders.length)) { - return + return ; } - return + return ( + + ); } - const checkStatus = status => { - const obj = orderStatuses.filter(x => { - return x.key === status - }) - return obj[0] - } + const checkStatus = (status) => { + const obj = orderStatuses.filter((x) => { + return x.key === status; + }); + return obj[0]; + }; return ( - + {activeOrders.map((item, index) => ( navigation.navigate(NAVIGATION_SCREEN.OrderDetail, { - _id: item._id + _id: item._id, }) - }> + } + > - {i18n.t('idVar')} + {i18n.t("idVar")} {item.order_id} @@ -117,7 +128,8 @@ const ActiveOrders = ({ textColor={checkStatus(item.order_status).color} style={alignment.MTxSmall} bold - center> + center + > {i18n.t(item.order_status)} @@ -126,15 +138,15 @@ const ActiveOrders = ({ ))} - ) -} + ); +}; ActiveOrders.propTypes = { loading: PropTypes.bool, error: PropTypes.object, activeOrders: PropTypes.arrayOf(PropTypes.object), navigation: PropTypes.object, - pastOrders: PropTypes.arrayOf(PropTypes.object) -} + pastOrders: PropTypes.arrayOf(PropTypes.object), +}; -export default ActiveOrders +export default ActiveOrders; diff --git a/CustomerApp/src/screens/MyOrders/MyOrders.js b/CustomerApp/src/screens/MyOrders/MyOrders.js index 3b02d35..a55506c 100755 --- a/CustomerApp/src/screens/MyOrders/MyOrders.js +++ b/CustomerApp/src/screens/MyOrders/MyOrders.js @@ -21,8 +21,8 @@ import { ICONS_NAME, NAVIGATION_SCREEN } from "../../utils/constant"; import { scale } from "../../utils/scaling"; import useStyle from "./style"; -const orderStatusActive = [i18n.t("PENDING"), i18n.t("PICKED"), i18n.t("ACCEPTED")]; -const orderStatusInactive = [i18n.t("DELIVERED"), i18n.t("COMPLETED")]; +const orderStatusActive = ["PENDING", "PICKED", "ACCEPTED"]; +const orderStatusInactive = ["DELIVERED", "COMPLETED"]; function MyOrders() { const styles = useStyle(); @@ -86,7 +86,7 @@ function MyOrders() { - {i18n.t('noOrdersFound')} + {i18n.t("noOrdersFound")} navigation.navigate(NAVIGATION_SCREEN.Menu)} > - {i18n.t('startShopping')} + {i18n.t("startShopping")} @@ -103,13 +103,16 @@ function MyOrders() { } } + console.log(orders); return ( orderStatusInactive.includes(i18n.t(o.order_status))) + : orders.filter((o) => + orderStatusInactive.includes(o.order_status) + ) } style={styles.container} contentContainerStyle={styles.contentContainer} @@ -118,10 +121,10 @@ function MyOrders() { - orderStatusActive.includes(i18n.t(o.order_status)) + orderStatusActive.includes(o.order_status) )} pastOrders={orders.filter((o) => - orderStatusInactive.includes(i18n.t(o.order_status)) + orderStatusInactive.includes(o.order_status) )} loading={loadingOrders} error={errorOrders} @@ -151,7 +154,7 @@ function MyOrders() { - {i18n.t('idVar')} + {i18n.t("idVar")} {item.order_id} diff --git a/CustomerApp/src/screens/OrderDetail/OrderDetail.js b/CustomerApp/src/screens/OrderDetail/OrderDetail.js index a4f6291..711c531 100644 --- a/CustomerApp/src/screens/OrderDetail/OrderDetail.js +++ b/CustomerApp/src/screens/OrderDetail/OrderDetail.js @@ -1,79 +1,79 @@ -import { MaterialIcons } from '@expo/vector-icons' -import { useNavigation, useRoute, useTheme } from '@react-navigation/native' -import React, { useContext, useEffect, useLayoutEffect } from 'react' -import { Platform, ScrollView, TouchableOpacity, View } from 'react-native' -import MapView, { PROVIDER_DEFAULT, PROVIDER_GOOGLE } from 'react-native-maps' -import i18n from '../../../i18n' +import { MaterialIcons } from "@expo/vector-icons"; +import { useNavigation, useRoute, useTheme } from "@react-navigation/native"; +import React, { useContext, useEffect, useLayoutEffect } from "react"; +import { Platform, ScrollView, TouchableOpacity, View } from "react-native"; +import MapView, { PROVIDER_DEFAULT, PROVIDER_GOOGLE } from "react-native-maps"; +import i18n from "../../../i18n"; import { Spinner, TextDefault, TextError, TrackingRider, - WrapperView -} from '../../components' -import { orderStatuses } from '../../components/Menu/StatusCard/StatusCard' -import ConfigurationContext from '../../context/Configuration' -import UserContext from '../../context/User' -import { alignment } from '../../utils/alignment' -import { NAVIGATION_SCREEN } from '../../utils/constant' -import { moderateScale, scale } from '../../utils/scaling' -import useStyle from './styles' + WrapperView, +} from "../../components"; +import { orderStatuses } from "../../components/Menu/StatusCard/StatusCard"; +import ConfigurationContext from "../../context/Configuration"; +import UserContext from "../../context/User"; +import { alignment } from "../../utils/alignment"; +import { NAVIGATION_SCREEN } from "../../utils/constant"; +import { moderateScale, scale } from "../../utils/scaling"; +import useStyle from "./styles"; function calculatePrice(food) { - var foodPrice = food.variation.price - food.addons.forEach(addons => { - addons.options.forEach(addon => { - foodPrice += addon.price - }) - }) - return foodPrice + var foodPrice = food.variation.price; + food.addons.forEach((addons) => { + addons.options.forEach((addon) => { + foodPrice += addon.price; + }); + }); + return foodPrice; } -const checkStatus = status => { - const obj = orderStatuses.filter(x => { - return x.key === status - }) - return obj[0] -} +// const checkStatus = (status) => { +// const obj = orderStatuses.filter((x) => { +// return x.key === status; +// }); +// return obj[0]; +// }; function OrderDetail() { - const styles = useStyle() - const route = useRoute() - const { colors } = useTheme() - const navigation = useNavigation() - const id = route.params._id ?? null - const cart = route.params.clearCart ?? false + const styles = useStyle(); + const route = useRoute(); + const { colors } = useTheme(); + const navigation = useNavigation(); + const id = route.params._id ?? null; + const cart = route.params.clearCart ?? false; const { loadingOrders, errorOrders, orders, clearCart } = - useContext(UserContext) - const configuration = useContext(ConfigurationContext) + useContext(UserContext); + const configuration = useContext(ConfigurationContext); - const order = orders.find(o => o._id === id) + const order = orders.find((o) => o._id === id); useLayoutEffect(() => { navigation.setOptions({ - headerTitle: i18n.t('orderDetail'), - headerRight: null - }) - }, [navigation]) + headerTitle: i18n.t("orderDetail"), + headerRight: null, + }); + }, [navigation]); useEffect(() => { return () => { if (cart) { - clear() + clear(); } - } - }, [cart]) + }; + }, [cart]); async function clear() { - await clearCart() + await clearCart(); } - if (loadingOrders || !order) return - if (errorOrders) return + if (loadingOrders || !order) return ; + if (errorOrders) return ; return ( - {i18n.t(order.order_status) === i18n.t('PICKED') && order.rider && ( + {i18n.t(order.order_status) === i18n.t("PICKED") && order.rider && ( - {i18n.t('thankYou')} + style={alignment.MBsmall} + > + {i18n.t("thankYou")} - {i18n.t('orderId')} + style={[alignment.MTsmall]} + > + {i18n.t("orderId")} {order.order_id} @@ -102,21 +104,24 @@ function OrderDetail() { textColor={colors.fontSecondColor} bold H5 - style={[alignment.MTlarge]}> - {i18n.t('status')} + style={[alignment.MTlarge]} + > + {i18n.t("status")} - {i18n.t(order.order_status)}{' '} + style={[alignment.MBsmall, alignment.MTxSmall]} + > + {i18n.t(order.order_status)}{" "} - ( {checkStatus(i18n.t(order.order_status)).statusText}) + {/* ({checkStatus(i18n.t(order.order_status))?.statusText || "..."}) */} + {`(${i18n.t(orderStatuses[order.order_status]?.statusText)})`} - {i18n.t('deliveryAddress')}: + {i18n.t("deliveryAddress")}: {order.delivery_address.delivery_address} @@ -128,18 +133,20 @@ function OrderDetail() { {order.items.map((item, index) => ( - + {item.quantity}x + style={{ width: "65%" }} + > {item.food.title} + style={{ width: "25%" }} + right + > {configuration.currency_symbol} {parseFloat(calculatePrice(item)).toFixed(2)} @@ -150,14 +157,16 @@ function OrderDetail() { - {i18n.t('subTotal')} + style={{ width: "40%" }} + > + {i18n.t("subTotal")} + style={{ width: "60%" }} + right + > {configuration.currency_symbol} {parseFloat(order.order_amount - order.delivery_charges).toFixed( 2 @@ -168,14 +177,16 @@ function OrderDetail() { - {i18n.t('deliveryFee')} + style={{ width: "40%" }} + > + {i18n.t("deliveryFee")} + style={{ width: "60%" }} + right + > {configuration.currency_symbol} {parseFloat(order.delivery_charges).toFixed(2)} @@ -184,26 +195,29 @@ function OrderDetail() { - {i18n.t('total')} + style={{ width: "40%" }} + > + {i18n.t("total")} + style={{ width: "60%" }} + right + > {configuration.currency_symbol} {parseFloat(order.order_amount).toFixed(2)} - {i18n.t(order.order_status) === i18n.t('PICKED') && ( + {i18n.t(order.order_status) === i18n.t("PICKED") && ( + height: moderateScale(250), + }} + > + Platform.OS === "android" ? PROVIDER_GOOGLE : PROVIDER_DEFAULT + } + > + alignSelf: "center", + }} + > + borderRadius: moderateScale(10), + }} + > - {i18n.t('chatWithRider')} + {i18n.t("chatWithRider")} )} - {(i18n.t(order.order_status) === i18n.t('DELIVERED') || - i18n.t(order.order_status) === i18n.t('COMPLETED')) && + {(i18n.t(order.order_status) === i18n.t("DELIVERED") || + i18n.t(order.order_status) === i18n.t("COMPLETED")) && order.review && order.review.rating === 0 && ( - - - {i18n.t('anySuggestion')} - - - {i18n.t('reviewRegarding')} - - - navigation.navigate(NAVIGATION_SCREEN.RateAndReview, { - _id: order._id - }) - }> - - - {i18n.t('writeReview')} + + + {i18n.t("anySuggestion")} - - - )} + + {i18n.t("reviewRegarding")} + + + navigation.navigate(NAVIGATION_SCREEN.RateAndReview, { + _id: order._id, + }) + } + > + + + {i18n.t("writeReview")} + + + + )} - ) + ); } -export default OrderDetail +export default OrderDetail; diff --git a/CustomerApp/src/screens/Settings/Settings.js b/CustomerApp/src/screens/Settings/Settings.js index 58cadd1..4baa856 100644 --- a/CustomerApp/src/screens/Settings/Settings.js +++ b/CustomerApp/src/screens/Settings/Settings.js @@ -125,9 +125,12 @@ function Settings() { }; useEffect(() => { - AppState.addEventListener("change", _handleAppStateChange); + const subscription = AppState.addEventListener( + "change", + _handleAppStateChange + ); return () => { - AppState.remove("change", _handleAppStateChange); + subscription.remove("change", _handleAppStateChange); }; }, []); From 2a75282c18dafe7fc73514b82a0a0598206a2e3d Mon Sep 17 00:00:00 2001 From: aliyanlatif Date: Tue, 6 Feb 2024 09:59:39 +0500 Subject: [PATCH 3/3] removed extra code --- .../components/Menu/StatusCard/StatusCard.js | 38 -- .../Modals/PaymentModal/PaymentModal.js | 87 ++-- CustomerApp/src/screens/Cart/Cart.js | 1 - .../src/screens/ItemDetail/ItemDetail.js | 14 +- .../src/screens/OrderDetail/OrderDetail.js | 7 - CustomerApp/src/screens/Settings/Settings.js | 20 +- CustomerApp/translations/ar.js | 469 +++++++++--------- CustomerApp/translations/de.js | 1 + CustomerApp/translations/en.js | 407 +++++++-------- CustomerApp/translations/fr.js | 1 + CustomerApp/translations/km.js | 1 + CustomerApp/translations/zh.js | 1 + 12 files changed, 499 insertions(+), 548 deletions(-) diff --git a/CustomerApp/src/components/Menu/StatusCard/StatusCard.js b/CustomerApp/src/components/Menu/StatusCard/StatusCard.js index 7673d41..d8519a2 100644 --- a/CustomerApp/src/components/Menu/StatusCard/StatusCard.js +++ b/CustomerApp/src/components/Menu/StatusCard/StatusCard.js @@ -11,33 +11,6 @@ import TextError from "../../Text/TextError/TextError"; import useStyle from "./styles"; import i18n from "../../../../i18n"; -// export const orderStatuses = [ -// { -// key: i18n.t("PENDING"), -// status: 1, -// statusText: i18n.t("orderPending"), -// }, -// { -// key: i18n.t("ACCEPTED"), -// status: 2, -// statusText: i18n.t("prepFood"), -// }, -// { -// key: i18n.t("PICKED"), -// status: 3, -// statusText: i18n.t("riderOnWay"), -// }, -// { -// key: i18n.t("DELIVERED"), -// status: 4, -// statusText: i18n.t("orderDelivered"), -// }, -// { -// key: i18n.t("COMPLETED"), -// status: 5, -// statusText: i18n.t("completeOrder"), -// }, -// ]; export const orderStatuses = { PENDING: { status: 1, @@ -76,13 +49,6 @@ const StatusCard = () => { } = useContext(UserContext); const configuration = useContext(ConfigurationContext); - // const checkStatus = (status) => { - // const obj = orderStatuses.filter((x) => { - // return x.key === status; - // }); - // return obj[0]; - // }; - if (loadingOrders) return ; if (errorOrders) return {errorOrders.message}; @@ -95,7 +61,6 @@ const StatusCard = () => { refreshing={networkStatusOrders === 4} onRefresh={() => networkStatusOrders === 7 && fetchOrders()} data={orders.filter((o) => orderStatusActive.includes(o.order_status))} - //keyExtractor={(item) => item._id} keyExtractor={(item, index) => String(index)} renderItem={({ item, index }) => ( { {i18n.t(item.order_status)}{" "} - {/* {checkStatus(item.order_status).status}.{' '} */} - {/* {checkStatus(i18n.t(item.order_status)?.status)?.statusText || - "..."} */} {`(${i18n.t(orderStatuses[item.order_status]?.statusText)})`} diff --git a/CustomerApp/src/components/Modals/PaymentModal/PaymentModal.js b/CustomerApp/src/components/Modals/PaymentModal/PaymentModal.js index 9a08117..e61a763 100644 --- a/CustomerApp/src/components/Modals/PaymentModal/PaymentModal.js +++ b/CustomerApp/src/components/Modals/PaymentModal/PaymentModal.js @@ -1,51 +1,51 @@ -import { useTheme } from '@react-navigation/native' -import PropTypes from 'prop-types' -import React, { useState } from 'react' -import { TouchableOpacity, View } from 'react-native' -import i18n from '../../../../i18n' -import RadioButton from '../../../components/FdRadioBtn/RadioBtn' -import { alignment } from '../../../utils/alignment' -import { ICONS_NAME } from '../../../utils/constant' -import { scale } from '../../../utils/scaling' -import { CustomIcon } from '../../CustomIcon' -import TextDefault from '../../Text/TextDefault/TextDefault' -import useStyles from './styles' +import { useTheme } from "@react-navigation/native"; +import PropTypes from "prop-types"; +import React, { useState } from "react"; +import { TouchableOpacity, View } from "react-native"; +import i18n from "../../../../i18n"; +import RadioButton from "../../../components/FdRadioBtn/RadioBtn"; +import { alignment } from "../../../utils/alignment"; +import { ICONS_NAME } from "../../../utils/constant"; +import { scale } from "../../../utils/scaling"; +import { CustomIcon } from "../../CustomIcon"; +import TextDefault from "../../Text/TextDefault/TextDefault"; +import useStyles from "./styles"; function PaymentModal(props) { - const styles = useStyles() - const { colors } = useTheme() + const styles = useStyles(); + const { colors } = useTheme(); const [selectedPayment, setSelectedPayment] = useState( props.payment ?? {}, {} - ) + ); const CASH = [ { - payment: 'STRIPE', - label: i18n.t('creditCart'), + payment: "STRIPE", + label: i18n.t("creditCart"), index: 0, icon: ICONS_NAME.Visa, - iconSize: scale(30) + iconSize: scale(30), }, { - payment: 'PAYPAL', - label: i18n.t('paypal'), + payment: "PAYPAL", + label: i18n.t("paypal"), index: 1, icon: ICONS_NAME.Paypal, - iconSize: scale(30) + iconSize: scale(30), }, { - payment: 'COD', - label: i18n.t('cod'), + payment: "COD", + label: i18n.t("cod"), index: 2, icon: ICONS_NAME.Cash, - iconSize: scale(25) - } - ] + iconSize: scale(25), + }, + ]; function onSelectPayment(payment) { - setSelectedPayment(payment) - props.paymentChange(payment) + setSelectedPayment(payment); + props.paymentChange(payment); } return ( @@ -57,9 +57,10 @@ function PaymentModal(props) { alignment.MTlarge, alignment.PTmedium, alignment.MBlarge, - alignment.PBxSmall - ]}> - Change Payment Method + alignment.PBxSmall, + ]} + > + {`(${i18n.t("Change Payment Method")})`} {CASH.map((item, index) => ( @@ -67,8 +68,9 @@ function PaymentModal(props) { style={[styles.radioGroup]} key={index.toString()} onPress={() => { - onSelectPayment(item) - }}> + onSelectPayment(item); + }} + > { - onSelectPayment(item) + onSelectPayment(item); }} /> @@ -98,21 +100,22 @@ function PaymentModal(props) { ))} - Done + {`(${i18n.t("Done")})`} - Cancel + style={[styles.width100, alignment.PBlarge, alignment.PTlarge]} + > + {`(${i18n.t("Cancel")})`} - ) + ); } PaymentModal.propTypes = { payment: PropTypes.object, paymentChange: PropTypes.func, - onClose: PropTypes.func -} -export default PaymentModal + onClose: PropTypes.func, +}; +export default PaymentModal; diff --git a/CustomerApp/src/screens/Cart/Cart.js b/CustomerApp/src/screens/Cart/Cart.js index 53d5356..0bf688e 100755 --- a/CustomerApp/src/screens/Cart/Cart.js +++ b/CustomerApp/src/screens/Cart/Cart.js @@ -147,7 +147,6 @@ function Cart() { function update(cache, { data: { placeOrder } }) { if (placeOrder && placeOrder.payment_method === 'COD') { const data = cache.readQuery({ query: ORDERS }) - // console.log('placeorder', placeOrder) if (data) { cache.writeQuery({ query: ORDERS, diff --git a/CustomerApp/src/screens/ItemDetail/ItemDetail.js b/CustomerApp/src/screens/ItemDetail/ItemDetail.js index 78c461e..b0753d0 100644 --- a/CustomerApp/src/screens/ItemDetail/ItemDetail.js +++ b/CustomerApp/src/screens/ItemDetail/ItemDetail.js @@ -201,11 +201,13 @@ function ItemDetail() { status="Required" /> - {} + { + + } )} @@ -214,7 +216,7 @@ function ItemDetail() { { -// const obj = orderStatuses.filter((x) => { -// return x.key === status; -// }); -// return obj[0]; -// }; - function OrderDetail() { const styles = useStyle(); const route = useRoute(); diff --git a/CustomerApp/src/screens/Settings/Settings.js b/CustomerApp/src/screens/Settings/Settings.js index 4baa856..5d52815 100644 --- a/CustomerApp/src/screens/Settings/Settings.js +++ b/CustomerApp/src/screens/Settings/Settings.js @@ -1,19 +1,11 @@ import { useMutation } from "@apollo/react-hooks"; import AsyncStorage from "@react-native-async-storage/async-storage"; import { useNavigation, useTheme } from "@react-navigation/native"; -import Constants from "expo-constants"; import * as Device from "expo-device"; import * as Localization from "expo-localization"; import * as Notifications from "expo-notifications"; -import * as Updates from "expo-updates"; import gql from "graphql-tag"; -import React, { - useContext, - useEffect, - useLayoutEffect, - useRef, - useState, -} from "react"; +import React, { useContext, useEffect, useRef, useState } from "react"; import { AppState, Linking, @@ -24,7 +16,6 @@ import { } from "react-native"; import { Modalize } from "react-native-modalize"; -import { async } from "validate.js"; import i18n from "../../../i18n"; import { moderateScale } from "../../utils/scaling"; @@ -84,7 +75,6 @@ function Settings() { profile.is_order_notification ); const [activeRadio, activeRadioSetter] = useState(languageTypes[0].index); - // eslint-disable-next-line no-unused-vars const [appState, setAppState] = useState(AppState.currentState); const [uploadToken] = useMutation(PUSH_TOKEN); const [updateUserInfo] = useMutation(UPDATEUSER); @@ -96,7 +86,7 @@ function Settings() { const modalizeRef = useRef(null); const modalizeRef1 = useRef(null); - useLayoutEffect(() => { + useEffect(() => { navigation.setOptions({ headerTitle: i18n.t("titleSettings"), headerRight: null, @@ -176,7 +166,6 @@ function Settings() { const langName = languageTypes[defLang].value; activeRadioSetter(defLang); languageNameSetter(langName); - // Updates.reloadAsync(); } }; @@ -343,11 +332,6 @@ function Settings() { /> - {/* - - {/* Version: {Constants.manifest.version} - - */}