diff --git a/CustomerApp/.expo/packager-info.json b/CustomerApp/.expo/packager-info.json
new file mode 100644
index 0000000..7a72904
--- /dev/null
+++ b/CustomerApp/.expo/packager-info.json
@@ -0,0 +1,4 @@
+{
+ "expoServerPort": 19000,
+ "packagerPort": 19000
+}
diff --git a/CustomerApp/.expo/settings.json b/CustomerApp/.expo/settings.json
index 92bc513..470dc63 100644
--- a/CustomerApp/.expo/settings.json
+++ b/CustomerApp/.expo/settings.json
@@ -4,5 +4,7 @@
"dev": true,
"minify": false,
"urlRandomness": null,
- "https": false
+ "https": false,
+ "scheme": null,
+ "devClient": false
}
diff --git a/CustomerApp/i18n.js b/CustomerApp/i18n.js
index c94d2a7..6dd9b99 100644
--- a/CustomerApp/i18n.js
+++ b/CustomerApp/i18n.js
@@ -7,10 +7,11 @@ import { en } from './translations/en'
import { fr } from './translations/fr'
import { km } from './translations/km'
import { zh } from './translations/zh'
+import { ar } from './translations/ar'
i18n.initAsync = async() => {
i18n.fallbacks = true
- i18n.translations = { fr, en, km, zh, de }
+ i18n.translations = { fr, en, km, zh, de, ar }
// i18n.locale = 'km'
if (Platform.OS === 'android') {
const lang = await AsyncStorage.getItem('enatega-language')
diff --git a/CustomerApp/src/apollo/server.js b/CustomerApp/src/apollo/server.js
index 6f0793e..4465de7 100644
--- a/CustomerApp/src/apollo/server.js
+++ b/CustomerApp/src/apollo/server.js
@@ -446,10 +446,7 @@ export const reviewOrder = `mutation ReviewOrder(
}
}`;
-//
-// use this to push token instead of login, signup mutation?
-// needs research
-//
+
export const pushToken = `mutation PushToken($token:String!){
pushToken(token:$token){
_id
diff --git a/CustomerApp/src/components/CustomizeComponents/CartComponent/CartComponent.js b/CustomerApp/src/components/CustomizeComponents/CartComponent/CartComponent.js
index 29c4079..fe1423e 100644
--- a/CustomerApp/src/components/CustomizeComponents/CartComponent/CartComponent.js
+++ b/CustomerApp/src/components/CustomizeComponents/CartComponent/CartComponent.js
@@ -8,6 +8,7 @@ import { CustomIcon } from '../../CustomIcon'
import { FlashMessage } from '../../FlashMessage/FlashMessage'
import TextDefault from '../../Text/TextDefault/TextDefault'
import useStyle from './styles'
+import i18n from '../../../../i18n'
function CartComponent(props) {
const { colors } = useTheme()
@@ -18,7 +19,7 @@ function CartComponent(props) {
if (props.stock > quantity) setQuantity(quantity + 1)
else {
FlashMessage({
- message: 'No more items in stock'
+ message: i18n.t('noMoreItems')
})
}
}
diff --git a/CustomerApp/src/components/Drawer/Profile/DrawerProfile.js b/CustomerApp/src/components/Drawer/Profile/DrawerProfile.js
index 57f1532..6789568 100644
--- a/CustomerApp/src/components/Drawer/Profile/DrawerProfile.js
+++ b/CustomerApp/src/components/Drawer/Profile/DrawerProfile.js
@@ -6,6 +6,7 @@ import { alignment } from '../../../utils/alignment'
import { NAVIGATION_SCREEN } from '../../../utils/constant'
import { TextDefault } from '../../Text'
import useStyle from './styles'
+import i18n from '../../../../i18n'
function DrawerProfile() {
const styles = useStyle()
@@ -22,7 +23,7 @@ function DrawerProfile() {
navigation.navigate(NAVIGATION_SCREEN.CreateAccount)
}}>
- Login/Create Account
+ {i18n.t('loginOrCreateAcc')}
@@ -40,7 +41,7 @@ function DrawerProfile() {
medium
H5
style={alignment.PLxSmall}>
- Welcome
+ {i18n.t('welcome')}
{
const styles = useStyle()
@@ -30,7 +31,7 @@ const FdEmailBtn = props => {
size={scale(19)}
/>
- Signup using Email
+ {i18n.t('signupEmail')}
>
)}
diff --git a/CustomerApp/src/components/FdSocialBtn/FdGoogleBtn/FdGoogleBtn.js b/CustomerApp/src/components/FdSocialBtn/FdGoogleBtn/FdGoogleBtn.js
index 6eb30f7..3a81fc6 100644
--- a/CustomerApp/src/components/FdSocialBtn/FdGoogleBtn/FdGoogleBtn.js
+++ b/CustomerApp/src/components/FdSocialBtn/FdGoogleBtn/FdGoogleBtn.js
@@ -7,6 +7,7 @@ import TextDefault from '../../../components/Text/TextDefault/TextDefault'
import { alignment } from '../../../utils/alignment'
import { moderateScale } from '../../../utils/scaling'
import useStyle from './styles'
+import i18n from '../../../../i18n'
const FdGoogleBtn = props => {
const styles = useStyle()
@@ -34,7 +35,7 @@ const FdGoogleBtn = props => {
]}
/>
- Signup with Google
+ {i18n.t('signupGoogle')}
>
)}
diff --git a/CustomerApp/src/components/Header/HeaderIcons/HeaderIcons.js b/CustomerApp/src/components/Header/HeaderIcons/HeaderIcons.js
index aa53938..b5ab6f0 100644
--- a/CustomerApp/src/components/Header/HeaderIcons/HeaderIcons.js
+++ b/CustomerApp/src/components/Header/HeaderIcons/HeaderIcons.js
@@ -13,6 +13,7 @@ import { CustomIcon } from '../../CustomIcon'
import { FlashMessage } from '../../FlashMessage/FlashMessage'
import TextDefault from '../../Text/TextDefault/TextDefault'
import useStyles from './styles'
+import i18n from '../../../../i18n'
function HeaderIcon({ icon, iconColor, iconSize = scale(20) }) {
const { colors } = useTheme()
@@ -127,7 +128,7 @@ function RightButton(props) {
navigation.navigate(NAVIGATION_SCREEN.Cart)
} else {
FlashMessage({
- message: 'Cart is empty.'
+ message: i18n.t('CartIsEmpty')
})
}
}, [cartCount])
diff --git a/CustomerApp/src/components/Menu/StatusCard/StatusCard.js b/CustomerApp/src/components/Menu/StatusCard/StatusCard.js
index 2f476d4..e00cd6e 100644
--- a/CustomerApp/src/components/Menu/StatusCard/StatusCard.js
+++ b/CustomerApp/src/components/Menu/StatusCard/StatusCard.js
@@ -9,32 +9,33 @@ import Spinner from "../../Spinner/Spinner";
import TextDefault from "../../Text/TextDefault/TextDefault";
import TextError from "../../Text/TextError/TextError";
import useStyle from "./styles";
+import i18n from "../../../../i18n";
export const orderStatuses = [
{
- key: "PENDING",
+ key: i18n.t('PENDING'),
status: 1,
- statusText: "Your order is still pending.",
+ statusText: i18n.t('orderPending'),
},
{
- key: "ACCEPTED",
+ key: i18n.t("ACCEPTED"),
status: 2,
- statusText: "Restaurant is preparing Food.",
+ statusText: i18n.t('prepFood'),
},
{
- key: "PICKED",
+ key: i18n.t("PICKED"),
status: 3,
- statusText: "Rider is on the way.",
+ statusText: i18n.t('riderOnWay'),
},
{
- key: "DELIVERED",
+ key: i18n.t("DELIVERED"),
status: 4,
- statusText: "Order is delivered.",
+ statusText: i18n.t('orderDelivered'),
},
{
- key: "COMPLETED",
+ key: i18n.t("COMPLETED"),
status: 5,
- statusText: "Order is completed.",
+ statusText: i18n.t('completeOrder'),
},
];
@@ -88,20 +89,20 @@ const StatusCard = () => {
- Your order ID
+ {i18n.t('orderId')}
{item.order_id}
- Status
+ {i18n.t('status')}
- {item.order_status}{" "}
+ {i18n.t(item.order_status)}{" "}
{/* {checkStatus(item.order_status).status}.{' '} */}(
- {checkStatus(item.order_status).statusText})
+ {checkStatus(i18n.t(item.order_status)).statusText})
diff --git a/CustomerApp/src/components/Modals/FilterModal/FilterModal.js b/CustomerApp/src/components/Modals/FilterModal/FilterModal.js
index 8c02171..d789ef1 100644
--- a/CustomerApp/src/components/Modals/FilterModal/FilterModal.js
+++ b/CustomerApp/src/components/Modals/FilterModal/FilterModal.js
@@ -12,6 +12,7 @@ import { moderateScale } from '../../../utils/scaling'
import RadioBtn from '../../FdRadioBtn/RadioBtn'
import TextDefault from '../../Text/TextDefault/TextDefault'
import useStyle from './styles'
+import i18n from '../../../../i18n'
const FilterModal = props => {
const styles = useStyle()
@@ -19,6 +20,11 @@ const FilterModal = props => {
const configuration = useContext(ConfigurationContext)
const [filters, setFilters] = useState({})
+ const localizedSortData = {};
+ Object.keys(SORT_DATA).forEach(key => {
+ localizedSortData[key] = i18n.t(SORT_DATA[key]);
+ });
+
useEffect(() => {
setFilters({
onSale: false,
@@ -82,7 +88,7 @@ const FilterModal = props => {
alignment.PTsmall
]}>
- Filters
+ {i18n.t('filters')}
{
alignItems: 'center'
}}>
- Reset
+ {i18n.t('reset')}
{
justifyContent: 'space-between'
}}>
- Show sale items only
+ {i18n.t('showSaleItems')}
{
justifyContent: 'space-between'
}}>
- Show stock items only
+ {i18n.t('showStockItems')}
{
- Price Range
+ {i18n.t('priceRange')}
@@ -187,7 +193,7 @@ const FilterModal = props => {
- Sorting
+ {i18n.t('sorting')}
{keys(SORT_DATA).map(item => {
@@ -205,7 +211,8 @@ const FilterModal = props => {
? colors.fonfontMainColort
: colors.placeHolderColor
}>
- {get(SORT_DATA, item)}
+ {/* {get(SORT_DATA, item)} */}
+ {localizedSortData[item]}
{
- Apply Filter
+ {i18n.t('applyFilter')}
props.closeFilterModal()}
style={[styles.width100, alignment.PBlarge, alignment.PTlarge]}>
- Close
+ {i18n.t('close')}
diff --git a/CustomerApp/src/components/MyOrders/ActiveOrders.js b/CustomerApp/src/components/MyOrders/ActiveOrders.js
index 7b34e93..bcbd1de 100644
--- a/CustomerApp/src/components/MyOrders/ActiveOrders.js
+++ b/CustomerApp/src/components/MyOrders/ActiveOrders.js
@@ -13,6 +13,7 @@ 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 = [
{
@@ -65,7 +66,7 @@ const ActiveOrders = ({
if (!pastOrders || (pastOrders && !pastOrders.length)) {
return
}
- return
+ return
}
const checkStatus = status => {
@@ -77,7 +78,7 @@ const ActiveOrders = ({
return (
-
+
{activeOrders.map((item, index) => (
- {'ID: '}
+ {i18n.t('idVar')}
{item.order_id}
@@ -117,7 +118,7 @@ const ActiveOrders = ({
style={alignment.MTxSmall}
bold
center>
- {item.order_status}
+ {i18n.t(item.order_status)}
diff --git a/CustomerApp/src/screens/Cart/Cart.js b/CustomerApp/src/screens/Cart/Cart.js
index e2b79af..53d5356 100755
--- a/CustomerApp/src/screens/Cart/Cart.js
+++ b/CustomerApp/src/screens/Cart/Cart.js
@@ -227,7 +227,7 @@ function Cart() {
await addQuantityContext(key)
} else {
FlashMessage({
- message: 'No more items in stock'
+ message: i18n.t('noMoreItems')
})
}
}
@@ -265,7 +265,7 @@ function Cart() {
}
if (!paymentMethod) {
FlashMessage({
- message: 'Set payment method before checkout'
+ message: i18n.t('SetPaymentMethod')
})
return false
}
@@ -549,7 +549,7 @@ function Cart() {
style={{ width: '30%' }}
medium
H5>
- Total
+ {i18n.t('total')}
- Change
+ {i18n.t('change')}
{address ? (
diff --git a/CustomerApp/src/screens/Coupon/Coupon.js b/CustomerApp/src/screens/Coupon/Coupon.js
index 8b421b3..3f35e13 100644
--- a/CustomerApp/src/screens/Coupon/Coupon.js
+++ b/CustomerApp/src/screens/Coupon/Coupon.js
@@ -21,7 +21,7 @@ function SelectVoucher() {
useLayoutEffect(() => {
navigation.setOptions({
headerRight: null,
- title: 'My Vouchers'
+ title: i18n.t('myVouchers')
})
}, [navigation])
@@ -33,14 +33,14 @@ function SelectVoucher() {
{
async function onCompleted(data) {
if (!data.login.is_active) {
FlashMessage({
- message: "Can't Login,This Account is Deleted!",
+ message: i18n.t('cantLogin'),
});
setLoading(false);
} else {
@@ -167,7 +168,7 @@ const CreateAccount = () => {
color={colors.iconColor}
/>
- Signup with Apple
+ {i18n.t('signupApple')}
);
@@ -241,7 +242,7 @@ const CreateAccount = () => {
return (
-
+
{
onPress={() => navigation.navigate(NAVIGATION_SCREEN.Login)}
>
- Already a member? Log in
+ {i18n.t('alreadyMember')}
diff --git a/CustomerApp/src/screens/EditAddress/EditAddress.js b/CustomerApp/src/screens/EditAddress/EditAddress.js
index f54c713..03f60da 100644
--- a/CustomerApp/src/screens/EditAddress/EditAddress.js
+++ b/CustomerApp/src/screens/EditAddress/EditAddress.js
@@ -114,7 +114,7 @@ function EditAddress() {
function onCompleted(data) {
FlashMessage({
- message: 'Address updated'
+ message: i18n.t('addressUpdated')
})
// show message here
navigation.goBack()
@@ -122,7 +122,7 @@ function EditAddress() {
function onError(error) {
FlashMessage({
- message: `An error occured. Please try again ${error}`
+ message: `${i18n.t('AnErrorOccured')} ${error}`
})
}
@@ -189,7 +189,7 @@ function EditAddress() {
- Label as
+ {i18n.t('labelAs')}
@@ -220,7 +220,7 @@ function EditAddress() {
}
bold
center>
- {label.title}
+ {i18n.t(label.title)}
)
@@ -255,7 +255,7 @@ function EditAddress() {
onBlur={() => {
setDeliveryAddressError(
!deliveryAddress.trim().length
- ? 'Delivery address is required'
+ ? i18n.t('addressReq')
: null
)
}}
@@ -287,7 +287,7 @@ function EditAddress() {
onBlur={() => {
setDeliveryDetailsError(
!deliveryDetails.trim().length
- ? 'Delivery details is required'
+ ? i18n.t('deliveryDetailsReq')
: null
)
}}
@@ -299,10 +299,10 @@ function EditAddress() {
disabled={loading}
onPress={() => {
const deliveryAddressError = !deliveryAddress.trim().length
- ? 'Delivery address is required'
+ ? i18n.t('addressReq')
: null
const deliveryDetailsError = !deliveryDetails.trim().length
- ? 'Delivery details is required'
+ ? i18n.t('addressReq')
: null
setDeliveryAddressError(deliveryAddressError)
@@ -346,7 +346,7 @@ function EditAddress() {
activeOpacity={0.7}
onPress={() => navigation.goBack()}>
- {'cancel'}
+ {i18n.t('cancel')}
diff --git a/CustomerApp/src/screens/ForgotPassword/ForgotPassword.js b/CustomerApp/src/screens/ForgotPassword/ForgotPassword.js
index 932e0d0..51f514f 100644
--- a/CustomerApp/src/screens/ForgotPassword/ForgotPassword.js
+++ b/CustomerApp/src/screens/ForgotPassword/ForgotPassword.js
@@ -57,7 +57,7 @@ function ForgotPassword() {
}
function onCompleted(data) {
FlashMessage({
- message: 'Reset password link sent on your email'
+ message: i18n.t('ResetPasswordLinkSent')
})
}
function onError(error) {
diff --git a/CustomerApp/src/screens/FullMap/FullMap.js b/CustomerApp/src/screens/FullMap/FullMap.js
index 56fe558..2404498 100644
--- a/CustomerApp/src/screens/FullMap/FullMap.js
+++ b/CustomerApp/src/screens/FullMap/FullMap.js
@@ -7,6 +7,7 @@ import { FlashMessage, TextDefault, WrapperView } from '../../components'
import { NAVIGATION_SCREEN } from '../../utils/constant'
import { scale } from '../../utils/scaling'
import useStyle from './styles'
+import i18n from '../../../i18n'
const LATITUDE = 33.7001019
const LONGITUDE = 72.9735978
@@ -220,7 +221,7 @@ export default function FullMap() {
setRegion(loc)
} else {
FlashMessage({
- message: 'Location permission not granted'
+ message: i18n.t('LocationPermissionNotGranted')
})
}
}
diff --git a/CustomerApp/src/screens/Help/Help.js b/CustomerApp/src/screens/Help/Help.js
index d60a582..957543d 100644
--- a/CustomerApp/src/screens/Help/Help.js
+++ b/CustomerApp/src/screens/Help/Help.js
@@ -10,15 +10,15 @@ import { useTheme } from '@react-navigation/native'
const links = [
{
- title: 'Product Page',
+ title: i18n.t('productPage'),
url: 'https://enatega.com/enatega-single-vendor/'
},
- { title: 'Docs', url: 'https://enatega.com/docs/enatega-singlevendor-introduction/' },
+ { title: i18n.t('docs'), url: 'https://enatega.com/docs/enatega-singlevendor-introduction/' },
{
- title: 'Blog',
+ title: i18n.t('blog'),
url: 'https://enatega.com/blog/'
},
- { title: 'About Us', url: 'https://ninjascode.com/our-team' }
+ { title: i18n.t('aboutUs'), url: 'https://ninjascode.com/our-team' }
]
function Help() {
const styles = useStyle()
diff --git a/CustomerApp/src/screens/Login/Login.js b/CustomerApp/src/screens/Login/Login.js
index f69d2cc..a9455a0 100755
--- a/CustomerApp/src/screens/Login/Login.js
+++ b/CustomerApp/src/screens/Login/Login.js
@@ -82,7 +82,7 @@ function Login() {
setPasswordError(null);
if (!email) {
- setEmailError("Email/Phone is required");
+ setEmailError(i18n.t('emailphoneReq'));
result = false;
} else {
const emailRegex = /^\w+([\\.-]?\w+)*@\w+([\\.-]?\w+)*(\.\w{2,3})+$/;
@@ -93,7 +93,7 @@ function Login() {
}
}
if (!password) {
- setPasswordError("Password is required");
+ setPasswordError(i18n.t('passReq'));
result = false;
}
return result;
@@ -101,7 +101,7 @@ function Login() {
async function onCompleted(data) {
if (!data.login.is_active) {
FlashMessage({
- message: "Can't Login,This Account is Deleted!",
+ message: i18n.t('cantLogin'),
});
setLoading(false);
} else {
@@ -213,7 +213,7 @@ function Login() {
- Enter your Email and Password
+ {i18n.t('enterUsername')}
- Forgot Password?
+ {i18n.t('forgotPassword')}
{renderLoginAction()}
@@ -280,7 +280,7 @@ function Login() {
}
>
- Create New Account
+ {i18n.t('createNewAcc')}
diff --git a/CustomerApp/src/screens/Menu/Menu.js b/CustomerApp/src/screens/Menu/Menu.js
index 6c3735c..d85e7a6 100755
--- a/CustomerApp/src/screens/Menu/Menu.js
+++ b/CustomerApp/src/screens/Menu/Menu.js
@@ -18,6 +18,7 @@ import { alignment } from "../../utils/alignment";
import { NAVIGATION_SCREEN } from "../../utils/constant";
import { scale } from "../../utils/scaling";
import useStyle from "./styles";
+import i18n from "../../../i18n";
// constants
const CATEGORIES = gql`
@@ -32,7 +33,7 @@ function Menu() {
useLayoutEffect(() => {
navigation.setOptions({
- title: "Home",
+ title: i18n.t('home'),
});
}, []);
@@ -42,7 +43,7 @@ function Menu() {
} else if (error) {
return (
);
@@ -51,7 +52,7 @@ function Menu() {
- No item found
+ {i18n.t('noItems')}
);
@@ -77,7 +78,7 @@ function Menu() {
{isLoggedIn && profile && }
- Featured
+ {i18n.t('featured')}
>
);
diff --git a/CustomerApp/src/screens/MenuItems/MenuItems.js b/CustomerApp/src/screens/MenuItems/MenuItems.js
index 2cbf3b3..8808122 100755
--- a/CustomerApp/src/screens/MenuItems/MenuItems.js
+++ b/CustomerApp/src/screens/MenuItems/MenuItems.js
@@ -31,6 +31,7 @@ import { alignment } from "../../utils/alignment";
import { ICONS_NAME, NAVIGATION_SCREEN, SORT_DATA } from "../../utils/constant";
import { moderateScale, scale } from "../../utils/scaling";
import useStyle from "./styles";
+import i18n from "../../../i18n";
// constants
const FOODS = gql`
@@ -73,7 +74,7 @@ function MenuItems() {
async function onAddToCart(food) {
if (food.stock < 1) {
FlashMessage({
- message: "Item out of stock",
+ message: i18n.t('ItemOutOfStock'),
});
return;
}
@@ -112,7 +113,7 @@ function MenuItems() {
{item.stock < 1 && (
- No Stock
+ {i18n.t('NoStock')}
)}
@@ -189,7 +190,7 @@ function MenuItems() {
} else if (error) {
return (
);
@@ -198,7 +199,7 @@ function MenuItems() {
- No food item found
+ {i18n.t('NoFooditemFound')}
);
diff --git a/CustomerApp/src/screens/MyOrders/MyOrders.js b/CustomerApp/src/screens/MyOrders/MyOrders.js
index 7897fc0..3b02d35 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 = ["PENDING", "PICKED", "ACCEPTED"];
-const orderStatusInactive = ["DELIVERED", "COMPLETED"];
+const orderStatusActive = [i18n.t("PENDING"), i18n.t("PICKED"), i18n.t("ACCEPTED")];
+const orderStatusInactive = [i18n.t("DELIVERED"), i18n.t("COMPLETED")];
function MyOrders() {
const styles = useStyle();
@@ -86,7 +86,7 @@ function MyOrders() {
- No Orders Found
+ {i18n.t('noOrdersFound')}
navigation.navigate(NAVIGATION_SCREEN.Menu)}
>
- Start Shopping
+ {i18n.t('startShopping')}
@@ -109,7 +109,7 @@ function MyOrders() {
data={
loadingOrders || errorOrders
? []
- : orders.filter((o) => orderStatusInactive.includes(o.order_status))
+ : orders.filter((o) => orderStatusInactive.includes(i18n.t(o.order_status)))
}
style={styles.container}
contentContainerStyle={styles.contentContainer}
@@ -118,10 +118,10 @@ function MyOrders() {
- orderStatusActive.includes(o.order_status)
+ orderStatusActive.includes(i18n.t(o.order_status))
)}
pastOrders={orders.filter((o) =>
- orderStatusInactive.includes(o.order_status)
+ orderStatusInactive.includes(i18n.t(o.order_status))
)}
loading={loadingOrders}
error={errorOrders}
@@ -151,7 +151,7 @@ function MyOrders() {
- {"ID: "}
+ {i18n.t('idVar')}
{item.order_id}
diff --git a/CustomerApp/src/screens/NewAddress/NewAddress.js b/CustomerApp/src/screens/NewAddress/NewAddress.js
index 8dab412..6b5cd2d 100644
--- a/CustomerApp/src/screens/NewAddress/NewAddress.js
+++ b/CustomerApp/src/screens/NewAddress/NewAddress.js
@@ -113,7 +113,7 @@ function NewAddress() {
regionChange(loc)
} else {
FlashMessage({
- message: 'Location permission not granted'
+ message: i18n.t('locaPermission')
})
}
}
@@ -139,7 +139,7 @@ function NewAddress() {
function onCompleted(data) {
FlashMessage({
- message: 'Address added'
+ message: i18n.t('addressAdded')
})
const cartAddress = route.params ? route.params.backScreen : null
if (cartAddress === NAVIGATION_SCREEN.Cart) {
@@ -151,7 +151,7 @@ function NewAddress() {
function onError(error) {
FlashMessage({
- message: `An error occured. Please try again. ${error}`
+ message: `${i18n.t('AnErrorOccured')} ${error}`
})
}
@@ -211,7 +211,7 @@ function NewAddress() {
- Label As:
+ {i18n.t('labelAs')}
@@ -242,7 +242,7 @@ function NewAddress() {
}
bold
center>
- {label.title}
+ {i18n.t(label.title)}
)
@@ -277,7 +277,7 @@ function NewAddress() {
onBlur={() => {
setDeliveryAddressError(
!deliveryAddress.trim().length
- ? 'Delivery address is required'
+ ? i18n.t('addressReq')
: null
)
}}
@@ -311,7 +311,7 @@ function NewAddress() {
onBlur={() => {
setDeliveryDetailsError(
!deliveryDetails.trim().length
- ? 'Delivery details is required'
+ ? i18n.t('deliveryDetailsReq')
: null
)
}}
@@ -322,10 +322,10 @@ function NewAddress() {
disabled={loading}
onPress={() => {
const deliveryAddressError = !deliveryAddress.trim().length
- ? 'Delivery address is required'
+ ? i18n.t('addressReq')
: null
const deliveryDetailsError = !deliveryDetails.trim().length
- ? 'Delivery details is required'
+ ? i18n.t('deliveryDetailsReq')
: null
setDeliveryAddressError(deliveryAddressError)
@@ -368,7 +368,7 @@ function NewAddress() {
activeOpacity={0.7}
onPress={() => navigation.goBack()}>
- {'Cancel'}
+ {i18n.t('cancel')}
diff --git a/CustomerApp/src/screens/OrderDetail/OrderDetail.js b/CustomerApp/src/screens/OrderDetail/OrderDetail.js
index da431d1..a4f6291 100644
--- a/CustomerApp/src/screens/OrderDetail/OrderDetail.js
+++ b/CustomerApp/src/screens/OrderDetail/OrderDetail.js
@@ -51,7 +51,7 @@ function OrderDetail() {
useLayoutEffect(() => {
navigation.setOptions({
- headerTitle: 'Order Detail',
+ headerTitle: i18n.t('orderDetail'),
headerRight: null
})
}, [navigation])
@@ -73,7 +73,7 @@ function OrderDetail() {
- {order.order_status === 'PICKED' && order.rider && (
+ {i18n.t(order.order_status) === i18n.t('PICKED') && order.rider && (
- Thank You!
+ {i18n.t('thankYou')}
- Your order ID is
+ {i18n.t('orderId')}
{order.order_id}
@@ -103,20 +103,20 @@ function OrderDetail() {
bold
H5
style={[alignment.MTlarge]}>
- Status
+ {i18n.t('status')}
- {order.order_status}{' '}
+ {i18n.t(order.order_status)}{' '}
- ( {checkStatus(order.order_status).statusText})
+ ( {checkStatus(i18n.t(order.order_status)).statusText})
- Delivery address:
+ {i18n.t('deliveryAddress')}:
{order.delivery_address.delivery_address}
@@ -151,7 +151,7 @@ function OrderDetail() {
textColor={colors.fontMainColor}
medium
style={{ width: '40%' }}>
- Subtotal
+ {i18n.t('subTotal')}
- Delivery fee
+ {i18n.t('deliveryFee')}
- Total
+ {i18n.t('total')}
- {order.order_status === 'PICKED' && (
+ {i18n.t(order.order_status) === i18n.t('PICKED') && (
- Chat with Rider
+ {i18n.t('chatWithRider')}
)}
- {(order.order_status === 'DELIVERED' ||
- order.order_status === 'COMPLETED') &&
+ {(i18n.t(order.order_status) === i18n.t('DELIVERED') ||
+ i18n.t(order.order_status) === i18n.t('COMPLETED')) &&
order.review &&
order.review.rating === 0 && (
- Any suggestion?
+ {i18n.t('anySuggestion')}
- Review regarding your order?
+ {i18n.t('reviewRegarding')}
- Write a review
+ {i18n.t('writeReview')}
diff --git a/CustomerApp/src/screens/Profile/ChangePassword.js b/CustomerApp/src/screens/Profile/ChangePassword.js
index 8e94dce..b300ae2 100644
--- a/CustomerApp/src/screens/Profile/ChangePassword.js
+++ b/CustomerApp/src/screens/Profile/ChangePassword.js
@@ -53,11 +53,11 @@ function ChangePassword(props) {
if (data.changePassword) {
clearFields()
FlashMessage({
- message: 'Password Updated'
+ message: i18n.t('passChange')
})
props.hideModal()
} else {
- Alert.alert('Error', 'Invalid password')
+ Alert.alert('Error', i18n.t('invalidPass'))
}
}
@@ -70,7 +70,7 @@ function ChangePassword(props) {
- Change password
+ {i18n.t('changePass')}
@@ -78,7 +78,7 @@ function ChangePassword(props) {
{
- setOldPasswordError(!oldPassword ? 'Password is required' : '')
+ setOldPasswordError(!oldPassword ? i18n.t('passReq') : '')
}}
/>
@@ -97,7 +97,7 @@ function ChangePassword(props) {
{
- setNewPasswordError(!newPassword ? 'Password is required' : '')
+ setNewPasswordError(!newPassword ? i18n.t('passReq') : '')
}}
/>
@@ -117,9 +117,9 @@ function ChangePassword(props) {
disabled={loading}
onPress={() => {
const newPasswordError =
- newPassword === '' ? 'Password is required' : ''
+ newPassword === '' ? i18n.t('passReq') : ''
const oldPasswordError =
- oldPassword === '' ? 'Password is required' : ''
+ oldPassword === '' ? i18n.t('passReq') : ''
setNewPasswordError(newPasswordError)
setOldPasswordError(oldPasswordError)
diff --git a/CustomerApp/src/screens/Profile/Profile.js b/CustomerApp/src/screens/Profile/Profile.js
index 7e5541b..346cb67 100644
--- a/CustomerApp/src/screens/Profile/Profile.js
+++ b/CustomerApp/src/screens/Profile/Profile.js
@@ -83,9 +83,9 @@ function Profile() {
useEffect(() => {
if (backScreen) {
viewHideAndShow();
- setPhoneError("Phone number is required");
+ setPhoneError(i18n.t('phoneNumberRequired'));
FlashMessage({
- message: "Phone Number is missing",
+ message: i18n.t('phoneNumberMissing'),
});
}
}, [backScreen]);
@@ -97,7 +97,7 @@ function Profile() {
function onCompleted({ updateUser }) {
if (updateUser) {
FlashMessage({
- message: "User's Info Updated",
+ message: i18n.t('userInfoUpdated'),
});
if (backScreen) {
navigation.goBack();
@@ -119,12 +119,12 @@ function Profile() {
let res = true;
if (!name.trim()) {
refName.current.focus();
- setNameError("Name is required");
+ setNameError(i18n.t('nameReq'));
res = false;
}
const num = phone.trim().replace(".", "");
if (num.length < 11 || num.length > 15 || isNaN(num)) {
- setPhoneError("Minimum 11 and maximum 15 characters allowed");
+ setPhoneError(i18n.t('minWords'));
if (res) {
refPhone.current.focus();
}
@@ -154,7 +154,7 @@ function Profile() {
label={i18n.t("name")}
ref={refName}
editable={false}
- defaultValue={profile.name}
+ defaultValue={profile.name ? profile.name : null}
labelFontSize={scale(12)}
fontSize={scale(12)}
style={{
@@ -224,7 +224,7 @@ function Profile() {
onPress={() => setModalVisible(true)}
style={styles.changePassword}
>
- Change Password
+ {i18n.t('changePass')}
- {"Cancel"}
+ {i18n.t('cancel')}
@@ -394,7 +394,7 @@ function Profile() {
textColor={colors.fontSecondColor}
style={alignment.MBsmall}
>
- All rights are reserved by Enatega
+ {i18n.t('rightsReserved')}
diff --git a/CustomerApp/src/screens/Register/Register.js b/CustomerApp/src/screens/Register/Register.js
index ca635a4..76c9cc5 100755
--- a/CustomerApp/src/screens/Register/Register.js
+++ b/CustomerApp/src/screens/Register/Register.js
@@ -31,6 +31,7 @@ import { ICONS_NAME, NAVIGATION_SCREEN } from '../../utils/constant'
import country_codes from '../../utils/country_codes'
import { scale, verticalScale } from '../../utils/scaling'
import useStyle from './styles'
+import i18n from '../../../i18n'
const CREATEUSER = gql`
${createUser}
@@ -309,7 +310,7 @@ function Register() {
navigation.navigate(NAVIGATION_SCREEN.ForgotPassword)
}>
- Forgot password?
+ {i18n.t('forgotPassword')}
diff --git a/CustomerApp/src/screens/Settings/Settings.js b/CustomerApp/src/screens/Settings/Settings.js
index b4eb39a..c601fe1 100644
--- a/CustomerApp/src/screens/Settings/Settings.js
+++ b/CustomerApp/src/screens/Settings/Settings.js
@@ -49,6 +49,7 @@ const languageTypes = [
{ value: "ភាសាខ្មែរ", code: "km", index: 2 },
{ value: "中文", code: "zh", index: 3 },
{ value: "Deutsche", code: "de", index: 4 },
+ { value: "Arabic", code: "ar", index: 5 },
];
const PUSH_TOKEN = gql`
@@ -159,7 +160,14 @@ function Settings() {
"enatega-language",
languageTypes[languageInd].code
);
- Updates.reloadAsync();
+ i18n.locale = languageTypes[languageInd].code
+ const lang = await AsyncStorage.getItem("enatega-language");
+ console.log(lang)
+ const defLang = languageTypes.findIndex((el) => el.code === lang);
+ const langName = languageTypes[defLang].value;
+ activeRadioSetter(defLang);
+ languageNameSetter(langName);
+ // Updates.reloadAsync();
}
};
@@ -169,7 +177,7 @@ function Settings() {
function onCompleted() {
FlashMessage({
- message: "Notification Status Updated",
+ message: i18n.t('notificationUpdate'),
});
}
@@ -242,7 +250,7 @@ function Settings() {
medium
H5
>
- Language
+ {i18n.t('language')}
({languageName})
@@ -275,7 +283,7 @@ function Settings() {
textColor={colors.statusSecondColor}
>
{" "}
- Receive Special Offers{" "}
+ {i18n.t('receiveOffers')}{" "}
{" "}
- Get updates on your order status!{" "}
+ {i18n.t('getUpdatesText')}{" "}
{" "}
- Delete Account{" "}
+ {i18n.t('delAcc')}{" "}
- Version: {Constants.manifest.version}
+ {/* Version: {Constants.manifest.version} */}
@@ -373,7 +381,7 @@ function Settings() {
>
- Are you Sure you want to delete Account?
+ {i18n.t('delAccText')}
onClose()}
>
- Cancel
+ {i18n.t('cancel')}
diff --git a/CustomerApp/src/screens/Settings/components/SettingModal.js b/CustomerApp/src/screens/Settings/components/SettingModal.js
index 8bed035..d993dff 100644
--- a/CustomerApp/src/screens/Settings/components/SettingModal.js
+++ b/CustomerApp/src/screens/Settings/components/SettingModal.js
@@ -6,6 +6,7 @@ import RadioButton from "../../../components/FdRadioBtn/RadioBtn";
import TextDefault from "../../../components/Text/TextDefault/TextDefault";
import { alignment } from "../../../utils/alignment";
import useStyle from "./styles";
+import i18n from '../../../../i18n'
const languageTypes = [
{ value: "English", code: "en", index: 0 },
@@ -13,6 +14,7 @@ const languageTypes = [
{ value: "ភាសាខ្មែរ", code: "km", index: 2 },
{ value: "中文", code: "zh", index: 3 },
{ value: "Deutsche", code: "de", index: 4 },
+ { value: "Arabic", code: "ar", index: 5 },
];
function SettingModal(props) {
@@ -23,7 +25,7 @@ function SettingModal(props) {
return (
- Select Language
+ {i18n.t('SelectLanguage')}
{languageTypes.map((item, index) => (
@@ -55,7 +57,7 @@ function SettingModal(props) {
onPress={() => props.onSelectedLanguage(activeRadio)}
>
- Done
+ {i18n.t('Done')}
props.onClose()}
>
- Cancel
+ {i18n.t('Cancel')}
{/* */}
diff --git a/CustomerApp/translations/ar.js b/CustomerApp/translations/ar.js
new file mode 100644
index 0000000..626c353
--- /dev/null
+++ b/CustomerApp/translations/ar.js
@@ -0,0 +1,243 @@
+export const ar = {
+ home: 'الصفحة الرئيسية',
+ title0: 'اللغة المختارة',
+ subtitle0: 'العربية',
+ description0:
+ 'اختر أي لغة تريد لتغيير محتوى التطبيق إلى اللغة المطلوبة لديك.',
+ title1: 'لذيذ',
+ subtitle1: 'الفطور',
+ description1:
+ 'الفطور هو كل شيء. البداية، الشيء الأول. إنها اللقمة التي هي الالتزام بيوم جديد، حياة مستمرة.',
+ title2: 'منعش',
+ subtitle2: 'المشروبات',
+ description2:
+ 'الصمت الحقيقي هو راحة العقل، وهو للروح ما النوم للجسم، غذاء وانتعاش.',
+ 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: 'تم رفض إذن الوصول إلى الموقع',
+ cameraRollPermissionDenied: 'تم رفض إذن الوصول إلى Camera Roll',
+ locationOff: 'قم بتشغيل الموقع وحاول مرة أخرى',
+ titleLanguage: 'تغيير اللغة',
+ titleMenu: 'القائمة',
+ titleOrders: 'طلباتي',
+ titleNotifications: 'الإشعارات',
+ titleReviews: 'المشاركات',
+ titleProfile: 'الملف الشخصي',
+ titleSettings: 'الإعدادات',
+ titleHelp: 'مساعدة',
+ titleChat: 'الدردشة',
+ titleLogout: 'تسجيل خروج',
+ titleCart: 'عربتي',
+ titlePayment: 'دفع',
+ totalOrderAmount: 'إجمالي المبلغ المستحق',
+ reOrder: 'إعادة ترتيب',
+ unReadNotifications: 'لا توجد إشعارات غير مقروءة',
+ upload: 'حمل',
+ saveBtn: 'حفظ التغييرات',
+ saveContBtn: 'حفظ واستمر',
+ emailUs: 'أرسل لنا بريدًا إلكترونيًا على',
+ question1: 'أين نجد الطعام؟',
+ question2: 'كيف نتصل؟',
+ question3: 'كيف يمكنني دفع ثمن عامل التوصيل؟',
+ question4: 'هل الخدمة متوفرة في مدينتي؟',
+ answer1:
+ 'يمكنك العثور على الطعام في أقرب متجر إليك دون دفع أي شيء لخدمة العملاء. تهمتنا منخفضة للغاية مقارنة بالآخرين.',
+ answer2: 'يمكنك الاتصال بنا من خلال البريد الإلكتروني أو رقم الهاتف أو موقعنا الإلكتروني.',
+ answer3:
+ 'يمكنك دفع ثمن عامل التوصيل شخصيًا أو الدفع عبر الإنترنت أيضًا باستخدام بطاقة الائتمان أو الخصم.',
+ answer4:
+ 'تتوفر هذه الخدمة حاليًا في مدن إسلام آباد وكراتشي يمكنك الاتصال بنا للاستفادة من هذه الخدمة في مدينتك.',
+ add: 'إضافة',
+ quantity: 'الكمية',
+ size: 'الحجم',
+ addToCart: 'أضف إلى العربة',
+ orderNow: 'اطلب الآن',
+ addToCartMessage: 'أضيف إلى العربة',
+ emptyCart: 'لا يوجد عناصر في العربة',
+ itemTotal: 'إجمالي العنصر',
+ delvieryCharges: 'رسوم التوصيل',
+ total: 'مجموع',
+ contactInfo: 'معلومات الاتصال',
+ deliveryAddressmessage: 'تعيين عنوان التسليم',
+ proceedCheckout: 'المتابعة إلى الدفع',
+ paymentText: 'كيف ترغب في الدفع؟',
+ checkout: 'الدفع',
+ creditCart: 'بطاقة الائتمان / بطاقة الخصم',
+ paypal: 'باي بال',
+ cod: 'الدفع عند الاستلام',
+ thankYou: 'شكرا لك!',
+ orderConfirmed: 'تم تأكيد طلبك',
+ orderId: 'معرف الطلب الخاص بك',
+ orderAmount: 'المبلغ المستحق لطلبك',
+ orderDetail: 'تفاصيل الطلب',
+ paymentMethod: 'طريقة الدفع',
+ trackOrder: 'تتبع الطلب',
+ backToMenu: 'العودة إلى القائمة',
+ foodItem: 'صنف غذائي',
+ deliveredTo: 'تسليم إلى',
+ writeAReview: 'اكتب مراجعة',
+ orderReceived: 'استلام الطلب',
+ orderPicked: 'طلبك في طريقه',
+ orderDelivered: 'تم التوصيل',
+ completed: 'اكتمل',
+ cancelled: 'ألغي',
+ orderPreparing: 'يتم تحضير طلبك',
+ delivered: 'تم التوصيل',
+ rateAndReview: 'التقييم والمراجعة',
+ reviewPlaceholder: 'تحصل المراجعات الأكثر تفصيلاً على مزيد من الرؤية ...',
+ submit: 'ارسال',
+ noWorriesText: 'لا تقلق، دعنا نساعدك!',
+ yourEmail: 'بريدك الإلكتروني',
+ send: 'ارسال',
+ apply: 'تطبيق',
+ checkEmail: 'تحقق من بريدك الإلكتروني للحصول على رابط إعادة تعيين كلمة المرور',
+ languageText: 'الرجاء تحديد اللغة المطلوبة',
+ countryCodePickerTranslation: 'العربية',
+ countryCodeSelect: 'اختر رمز البلد',
+ paymentNotSupported: 'طريقة الدفع هذه لا تدعم هذه العملة',
+ loginOrCreateAccount: 'تسجيل الدخول / إنشاء حساب',
+ 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: "تم تحديث حالة الإشعار",
+ notificationsNotWorking: "الإشعارات لا تعمل على المحاكاة",
+ loginOrCreateAcc: "تسجيل الدخول / إنشاء حساب",
+ welcome: "مرحبا",
+ noItems: 'لا توجد عناصر',
+ featured: 'متميز',
+ filters: 'التصفية',
+ reset: 'إعادة تعيين',
+ showSaleItems: 'إظهار العناصر المخفضة فقط',
+ showStockItems: 'إظهار العناصر المتوفرة فقط',
+ priceRange: 'نطاق السعر',
+ sorting: 'الفرز',
+ applyFilter: 'تطبيق التصفية',
+ close: 'إغلاق',
+ phoneNumberRequired: 'رقم الهاتف مطلوب',
+ phoneNumberMissing: 'رقم الهاتف مفقود',
+ userInfoUpdated: 'تم تحديث معلومات المستخدم',
+ nameReq: 'الاسم مطلوب',
+ minWords: 'يسمح بأقل 11 وأقصى 15 حرفًا',
+ rightsReserved: 'جميع الحقوق محفوظة لشركة Enatega',
+ changePass: 'تغيير كلمة المرور',
+ currentPass: 'كلمة المرور الحالية',
+ passReq: 'كلمة المرور مطلوبة',
+ newPass: 'كلمة المرور الجديدة',
+ invalidPass: 'كلمة مرور غير صالحة',
+ passChange: 'تم تحديث كلمة المرور',
+ noOrdersFound: 'لا توجد طلبات',
+ startShopping: 'ابدأ التسوق',
+ reOrder: 'إعادة الطلب',
+ smthWrong: 'هناك خطأ ما',
+ noOrdersAssigned: 'لا توجد طلبات معينة بعد!',
+ oldOrder: 'طلب قديم',
+ activeOrder: 'طلب نشط',
+ idVar: 'المعرف: ',
+ addressUpdated: 'تم تحديث العنوان',
+ labelAs: 'التسمية ك',
+ addressReq: 'عنوان التسليم مطلوب',
+ deliveryDetailsReq: 'تفاصيل التسليم مطلوبة',
+ locaPermission: 'لم يتم منح إذن الموقع',
+ addressAdded: 'تمت إضافة العنوان',
+ productPage: 'صفحة المنتج',
+ docs: 'المستندات',
+ blog: 'المدونة',
+ aboutUs: 'عنا',
+ myVouchers: 'قسائمي',
+ typeVoucherCode: 'اكتب رمز القسيمة',
+ enterVoucherCode: 'أدخل رمز القسيمة الخاص بك',
+ status: 'الحالة',
+ anySuggestion: 'هل لديك أي اقتراح؟',
+ reviewRegarding: 'مراجعة بخصوص طلبك؟',
+ writeReview: 'اكتب مراجعة',
+ chatWithRider: 'الدردشة مع المتسلم',
+ signupGoogle: 'التسجيل باستخدام Google',
+ signupEmail: 'التسجيل باستخدام البريد الإلكتروني',
+ signup: 'تسجيل',
+ signupApple: 'التسجيل باستخدام Apple',
+ alreadyMember: 'عضو بالفعل؟ سجل الدخول',
+ enterUsername: 'أدخل البريد الإلكتروني وكلمة المرور',
+ createNewAcc: 'إنشاء حساب جديد',
+ emailphoneReq: 'البريد الإلكتروني / الهاتف مطلوب',
+ invalidMail: 'بريد إلكتروني / هاتف غير صالح',
+ passReq: 'كلمة المرور مطلوبة',
+ cantLogin: 'لا يمكنك تسجيل الدخول، هذا الحساب محذوف!',
+ orderPending: 'طلبك لا يزال معلقًا.',
+ prepFood: 'المطعم يحضر الطعام.',
+ riderOnWay: 'المتسلم في طريقه.',
+ orderDelivered: 'تم تسليم الطلب.',
+ completeOrder: 'تم الانتهاء من الطلب.',
+ PENDING: 'معلق',
+ ACCEPTED: 'مقبول',
+ PICKED: 'مستلم',
+ DELIVERED: 'مسلم',
+ COMPLETED: 'اكتمل',
+ '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: 'لم يتم العثور على عنصر طعام',
+
+}
diff --git a/CustomerApp/translations/de.js b/CustomerApp/translations/de.js
index 7526468..b543c47 100644
--- a/CustomerApp/translations/de.js
+++ b/CustomerApp/translations/de.js
@@ -136,5 +136,108 @@ export const de = {
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'
+ validateDelivery: 'Stellen Sie die Lieferadresse vor dem Auschecken ein',
+ language: 'Sprache',
+ getUpdatesText: 'Erhalten Sie Updates zum Bestellstatus!',
+ delAcc: 'Konto löschen',
+ delAccText: 'Sind Sie sicher, dass Sie das Konto löschen möchten?',
+ cancel: 'Abbrechen',
+ receiveOffers: 'Spezielle Angebote erhalten',
+ notificationUpdate: 'Benachrichtigungsstatus aktualisiert',
+ notificationsNotWorking: "Benachrichtigungen funktionieren nicht im Simulator",
+ loginOrCreateAcc: "Anmelden/Konto erstellen",
+ welcome: "Willkommen",
+ titleSettings: 'Einstellungen',
+ home: 'Startseite',
+ noItems: 'Kein Artikel gefunden',
+ featured: 'Vorgestellt',
+ filters: 'Filter',
+ reset: 'Zurücksetzen',
+ showSaleItems: 'Nur Verkaufsartikel anzeigen',
+ showStockItems: 'Nur Lagerartikel anzeigen',
+ priceRange: 'Preisspanne',
+ sorting: 'Sortierung',
+ applyFilter: 'Filter anwenden',
+ close: 'Schließen',
+ phoneNumberRequired: "Telefonnummer ist erforderlich",
+ phoneNumberMissing: "Telefonnummer fehlt",
+ userInfoUpdated: "Benutzerinformationen aktualisiert",
+ nameReq: "Name ist erforderlich",
+ minWords: "Mindestens 11 und maximal 15 Zeichen erlaubt",
+ rightsReserved: "Alle Rechte vorbehalten von Enatega",
+ changePass: "Passwort ändern",
+ currentPass: "Aktuelles Passwort",
+ passReq: "Passwort ist erforderlich",
+ newPass: "Neues Passwort",
+ apply: "Anwenden",
+ invalidPass: "Ungültiges Passwort",
+ passChange: "Passwort aktualisiert",
+ noOrdersFound: "Keine Bestellungen gefunden",
+ startShopping: "Mit dem Einkaufen beginnen",
+ reOrder: "Erneut bestellen",
+ smthWrong: "Etwas ist falsch",
+ noOrdersAssigned: "Noch keine Bestellungen zugewiesen!",
+ oldOrder: "Alte Bestellung",
+ activeOrder: "Aktive Bestellung",
+ idVar: 'ID: ',
+ addressUpdated: 'Adresse aktualisiert',
+ labelAs: 'Als bezeichnen',
+ addressReq: 'Lieferadresse erforderlich',
+ deliveryDetailsReq: 'Lieferdetails erforderlich',
+ locaPermission: 'Standortberechtigung nicht erteilt',
+ addressAdded: 'Adresse hinzugefügt',
+ productPage: 'Produktseite',
+ docs: 'Dokumente',
+ blog: 'Blog',
+ aboutUs: 'Über uns',
+ myVouchers: 'Meine Gutscheine',
+ typeVoucherCode: "Gutscheincode eingeben",
+ enterVoucherCode: "Geben Sie Ihren Gutscheincode ein",
+ status: 'Status',
+ anySuggestion: 'Irgendwelche Vorschläge?',
+ reviewRegarding: 'Bewertung zu Ihrer Bestellung?',
+ writeReview: 'Eine Bewertung schreiben',
+ chatWithRider: 'Mit dem Fahrer chatten',
+ signupGoogle: 'Mit Google anmelden',
+ signupEmail: 'Anmeldung mit E-Mail',
+ signup: 'Anmelden',
+ signupApple: 'Mit Apple anmelden',
+ alreadyMember: 'Bereits Mitglied? Einloggen',
+ enterUsername: 'Geben Sie Ihre E-Mail-Adresse und Ihr Passwort ein',
+ createNewAcc: 'Neues Konto erstellen',
+ emailphoneReq: "E-Mail/Telefonnummer ist erforderlich",
+ invalidMail: "Ungültige E-Mail/Telefonnummer",
+ passReq: "Passwort ist erforderlich",
+ cantLogin: "Anmeldung nicht möglich, dieses Konto wurde gelöscht!",
+ orderPending: "Ihre Bestellung wird noch bearbeitet.",
+ prepFood: "Das Restaurant bereitet das Essen vor.",
+ riderOnWay: "Der Fahrer ist unterwegs.",
+ orderDelivered: "Die Bestellung wurde geliefert.",
+ completeOrder: "Die Bestellung ist abgeschlossen.",
+ PENDING: "AUSSTEHEND",
+ ACCEPTED: 'AKZEPTIERT',
+ PICKED: "ABGEHOLT",
+ DELIVERED: "GELIEFERT",
+ COMPLETED: "ABGESCHLOSSEN",
+ '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',
+
}
diff --git a/CustomerApp/translations/en.js b/CustomerApp/translations/en.js
index 91c00e8..be35b52 100644
--- a/CustomerApp/translations/en.js
+++ b/CustomerApp/translations/en.js
@@ -139,5 +139,104 @@ export const en = {
coupanFailed: 'Coupon Unavailable',
invalidCoupan: 'Invalid Coupon',
validateItems: 'Add items to cart before checkout',
- validateDelivery: 'Set delivery address before checkout'
+ validateDelivery: 'Set delivery address before checkout',
+ language: 'Language',
+ getUpdatesText: 'Get updates on your order status!',
+ delAcc: 'Delete Account',
+ delAccText: 'Are you Sure you want to delete Account?',
+ cancel:'Cancel',
+ receiveOffers: 'Receive Special Offers',
+ notificationUpdate: "Notification Status Updated",
+ notificationsNotWorking: "Notification do not work on simulator",
+ loginOrCreateAcc: "Login/Create Account",
+ welcome: "Welcome",
+ noItems: 'No item found',
+ featured: 'Featured',
+ filters: 'Filters',
+ reset: 'Reset',
+ showSaleItems: 'Show sale items only',
+ showStockItems: 'Show stock items only',
+ priceRange: 'Price Range',
+ sorting: 'Sorting',
+ applyFilter: 'Apply Filter',
+ close: 'Close',
+ phoneNumberRequired: "Phone number is required",
+ phoneNumberMissing: "Phone Number is missing",
+ userInfoUpdated: "User's Info Updated",
+ nameReq: "Name is required",
+ minWords: "Minimum 11 and maximum 15 characters allowed",
+ rightsReserved: "All rights are reserved by Enatega",
+ changePass: "Change Password",
+ currentPass: "Current Password",
+ passReq: 'Password is required',
+ newPass: "New Password",
+ invalidPass: 'Invalid password',
+ passChange: 'Password Updated',
+ noOrdersFound: 'No Orders Found',
+ startShopping: 'Start Shopping',
+ reOrder: "Re-Order",
+ smthWrong: "Something is worng",
+ noOrdersAssigned: "No Orders Assigned yet!",
+ oldOrder: "Old Order",
+ activeOrder: "Active Order",
+ idVar: 'ID: ',
+ addressUpdated: 'Address updated',
+ labelAs: 'Label as',
+ addressReq: 'Delivery address is required',
+ deliveryDetailsReq: 'Delivery details is required',
+ locaPermission: 'Location permission not granted',
+ addressAdded: 'Address added',
+ productPage: 'Product Page',
+ docs: 'Docs',
+ blog: 'Blog',
+ aboutUs: 'About Us',
+ myVouchers: 'My Vouchers',
+ typeVoucherCode: "TYPe voucher code",
+ enterVoucherCode: "Enter your voucher code",
+ status: 'Status',
+ anySuggestion: 'Any suggestion?',
+ reviewRegarding: 'Review regarding your order?',
+ writeReview: 'Write a review',
+ chatWithRider: 'Chat with Rider',
+ signupGoogle: 'Signup with Google',
+ signupEmail: 'Signup using Email',
+ signup: 'Signup',
+ signupApple: 'Signup with Apple',
+ alreadyMember: 'Already a member? Log in',
+ enterUsername: 'Enter your Email and Password',
+ createNewAcc: 'Create New Account',
+ emailphoneReq: "Email/Phone is required",
+ invalidMail: "Invalid Email/Phone",
+ passReq: "Password is required",
+ cantLogin: "Can't Login,This Account is Deleted!",
+ orderPending: "Your order is still pending.",
+ prepFood: "Restaurant is preparing Food.",
+ riderOnWay: "Rider is on the way.",
+ orderDelivered: "Order is delivered.",
+ completeOrder: "Order is completed.",
+ PENDING: "PENDING",
+ ACCEPTED: 'ACCEPTED',
+ PICKED: "PICKED",
+ DELIVERED: "DELIVERED",
+ COMPLETED: "COMPLETED",
+ 'Default': 'Default',
+ 'Ascending (A-Z)': 'Ascending (A-Z)',
+ 'Descending (Z-A)': 'Descending (Z-A)',
+ 'Price (Low - High)': 'Price (Low - High)',
+ 'Price (High - Low)': 'Price (High - Low)',
+ Home: 'Home',
+ Work: 'Work',
+ Other: 'Other',
+ NoStock: 'No Stock',
+ ItemOutOfStock: 'Item out of stock',
+ SelectLanguage: 'Select Language',
+ Done: 'Done',
+ Cancel: 'Cancel',
+ NoFoods: 'No Foods',
+ CartIsEmpty: 'Cart is empty.',
+ SetPaymentMethod: 'Set payment method before checkout',
+ AnErrorOccured: 'An error occured. Please try again',
+ ResetPasswordLinkSent: 'Reset password link sent on your email',
+ LocationPermissionNotGranted: 'Location permission not granted',
+ NoFooditemFound: 'No food item found'
}
diff --git a/CustomerApp/translations/fr.js b/CustomerApp/translations/fr.js
index 4d680f7..ec38e7a 100644
--- a/CustomerApp/translations/fr.js
+++ b/CustomerApp/translations/fr.js
@@ -137,5 +137,108 @@ export const fr = {
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"
+ validateDelivery: "Définir l'adresse de livraison avant le paiement",
+ language: 'Langue',
+ getUpdatesText: 'Obtenez des mises à jour sur le statut de votre commande !',
+ delAcc: 'Supprimer le compte',
+ delAccText: 'Êtes-vous sûr de vouloir supprimer le compte ?',
+ cancel: 'Annuler',
+ receiveOffers: 'Recevoir des offres spéciales',
+ notificationUpdate: 'Statut de notification mis à jour',
+ notificationsNotWorking: "Les notifications ne fonctionnent pas sur le simulateur",
+ loginOrCreateAcc: "Connexion/Créer un compte",
+ welcome: "Bienvenue",
+ titleSettings: 'Paramètres',
+ home: 'Accueil',
+ noItems: 'Aucun élément trouvé',
+ featured: 'En vedette',
+ filters: 'Filtres',
+ reset: 'Réinitialiser',
+ showSaleItems: 'Afficher uniquement les articles en vente',
+ showStockItems: 'Afficher uniquement les articles en stock',
+ priceRange: 'Plage de prix',
+ sorting: 'Tri',
+ applyFilter: 'Appliquer le filtre',
+ close: 'Fermer',
+ phoneNumberRequired: "Numéro de téléphone requis",
+ phoneNumberMissing: "Numéro de téléphone manquant",
+ userInfoUpdated: "Informations de l'utilisateur mises à jour",
+ nameReq: "Nom requis",
+ minWords: "Minimum 11 et maximum 15 caractères autorisés",
+ rightsReserved: "Tous les droits sont réservés par Enatega",
+ changePass: "Changer le mot de passe",
+ currentPass: "Mot de passe actuel",
+ passReq: "Mot de passe requis",
+ newPass: "Nouveau mot de passe",
+ apply: "Appliquer",
+ invalidPass: "Mot de passe invalide",
+ passChange: "Mot de passe mis à jour",
+ noOrdersFound: "Aucune commande trouvée",
+ startShopping: "Commencer les achats",
+ reOrder: "Recommander",
+ smthWrong: "Quelque chose ne va pas",
+ noOrdersAssigned: "Aucune commande attribuée pour le moment !",
+ oldOrder: "Ancienne commande",
+ activeOrder: "Commande active",
+ idVar: 'ID : ',
+ addressUpdated: 'Adresse mise à jour',
+ labelAs: 'Étiqueter comme',
+ addressReq: 'Adresse de livraison requise',
+ deliveryDetailsReq: 'Détails de livraison requis',
+ locaPermission: 'Autorisation de localisation non accordée',
+ addressAdded: 'Adresse ajoutée',
+ productPage: 'Page produit',
+ docs: 'Docs',
+ blog: 'Blog',
+ aboutUs: 'À propos de nous',
+ myVouchers: 'Mes bons',
+ typeVoucherCode: "Saisir le code du bon",
+ enterVoucherCode: "Entrez votre code de bon",
+ status: 'Statut',
+ anySuggestion: 'Des suggestions ?',
+ reviewRegarding: 'Avis concernant votre commande ?',
+ writeReview: 'Écrire un avis',
+ chatWithRider: 'Discuter avec le livreur',
+ signupGoogle: 'Inscription avec Google',
+ signupEmail: 'Inscription par e-mail',
+ signup: 'Sinscrire',
+ signupApple: 'Inscription avec Apple',
+ alreadyMember: 'Déjà membre ? Se connecter',
+ enterUsername: 'Entrez votre adresse e-mail et votre mot de passe',
+ createNewAcc: 'Créer un nouveau compte',
+ emailphoneReq: "E-mail/Téléphone requis",
+ invalidMail: "E-mail/Téléphone invalide",
+ passReq: "Mot de passe requis",
+ cantLogin: "Impossible de se connecter, ce compte a été supprimé !",
+ orderPending: "Votre commande est en attente.",
+ prepFood: "Le restaurant prépare la nourriture.",
+ riderOnWay: "Le livreur est en route.",
+ orderDelivered: "La commande a été livrée.",
+ completeOrder: "La commande est terminée.",
+ PENDING: "EN ATTENTE",
+ ACCEPTED: 'ACCEPTÉE',
+ PICKED: "ENLEVÉE",
+ DELIVERED: "LIVRÉE",
+ COMPLETED: "TERMINÉE",
+ '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é',
+
}
diff --git a/CustomerApp/translations/km.js b/CustomerApp/translations/km.js
index 6cd9087..ab9b073 100644
--- a/CustomerApp/translations/km.js
+++ b/CustomerApp/translations/km.js
@@ -132,5 +132,108 @@ export const km = {
coupanFailed: 'គូប៉ុងមិនមានទេ',
invalidCoupan: 'គូប៉ុងមិនត្រឹមត្រូវ',
validateItems: 'បន្ថែមរបស់របរទៅរទេះមុនពេលឆែក',
- validateDelivery: 'កំណត់អាសយដ្ឋានដឹកជញ្ជូនមុនពេលពិនិត្យចេញ'
+ validateDelivery: 'កំណត់អាសយដ្ឋានដឹកជញ្ជូនមុនពេលពិនិត្យចេញ',
+ language: 'ភាសា',
+ getUpdatesText: 'ទទួលបានការធ្វើបច្ចុប្បន្នភាពលើស្ថានភាពការបញ្ជាទិញរបស់អ្នក!',
+ delAcc: 'លុបគណនី',
+ delAccText: 'តើអ្នកប្រាកដថាតើចង់លុបគណនីឬទេ?',
+ cancel: 'បោះបង់',
+ receiveOffers: 'ទទួលបានការផ្តល់ជូនពិសេស',
+ notificationUpdate: 'ការប្រកាសការជូនដំណឹងត្រូវបានធ្វើបច្ចុប្បន្ន',
+ notificationsNotWorking: "ការជូនដំណឹងមិនដំណើរការលើម៉ាស៊ីនសម្រាប់ប្រើប្រាស់តំណល",
+ loginOrCreateAcc: "ចូលប្រើ/បង្កើតគណនី",
+ welcome: "ស្វាគមន៍",
+ titleSettings: 'ការកំណត់',
+ home: 'ទំព័រដើម',
+ noItems: 'រកមិនឃើញទេ',
+ featured: 'ផ្សេងៗ',
+ filters: 'តម្រង',
+ reset: 'កំណត់ឡើងវិញ',
+ showSaleItems: 'បង្ហាញទំនិញលក់តែប៉ុណ្ណោះ',
+ showStockItems: 'បង្ហាញទំនិញស្តុកតែប៉ុណ្ណោះ',
+ priceRange: 'ជម្រើសតម្លៃ',
+ sorting: 'តម្រៀបតាម',
+ applyFilter: 'អនុវត្តតម្រង',
+ close: 'បិទ',
+ phoneNumberRequired: "ត្រូវការលេខទូរស័ព្ទ",
+ phoneNumberMissing: "ខុសលេខទូរស័ព្ទ",
+ userInfoUpdated: "ព័ត៌មានអ្នកប្រើប្រាស់ត្រូវបានធ្វើបច្ចុប្បន្នភាព",
+ nameReq: "ត្រូវការឈ្មោះ",
+ minWords: "អត្ថបទអប្បាយបន្ទាប់ពី 11 និងអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណអតិបរិមាណ",
+ rightsReserved: "រក្សាសិទ្ធិទាំងអស់គ្នាដោយ Enatega",
+ changePass: "ប្ដូរលេខសម្ងាត់",
+ currentPass: "លេខសម្ងាត់បច្ចុប្បន្ន",
+ passReq: "ត្រូវការលេខសម្ងាត់",
+ newPass: "លេខសម្ងាត់ថ្មី",
+ apply: "អនុវត្ត",
+ invalidPass: "លេខសម្ងាត់មិនត្រឹមត្រូវ",
+ passChange: "លេខសម្ងាត់ត្រូវបានធ្វើបច្ចុប្បន្នភាព",
+ noOrdersFound: "រកមិនឃើញការបញ្ជាទិញ",
+ startShopping: "ចាប់ផ្តើមទិញ",
+ reOrder: "កម្មង់ម្តងទៀត",
+ smthWrong: "មានអ្វីមួយខុស",
+ noOrdersAssigned: "មិនទាន់បានចាក់ការបញ្ជាទិញទេ!",
+ oldOrder: "ការបញ្ជាទិញចាស់",
+ activeOrder: "ការបញ្ជាទិញដែលមានសកម្ម",
+ idVar: 'លេខសម្គាល់: ',
+ addressUpdated: 'អាសយដ្ឋានត្រូវបានធ្វើបច្ចុប្បន្នភាព',
+ labelAs: 'ស្លាកជាដើម',
+ addressReq: 'អាសយដ្ឋានការដឹកជញ្ជូនត្រូវការ',
+ deliveryDetailsReq: 'សេចក្ដីលម្អិតនៃការដឹកជញ្ជូនត្រូវការ',
+ locaPermission: 'ការអនុញ្ញាតឱ្យតាមដានទីតាំងមិនបានទទួលយក',
+ addressAdded: 'បានបន្ថែមអាសយដ្ឋាន',
+ productPage: 'ទំព័រផលិតផល',
+ docs: 'ឯកសារ',
+ blog: 'ប្លក់',
+ aboutUs: 'អំពីយើង',
+ myVouchers: 'លេខកូដវេបសាយរបស់ខ្ញុំ',
+ typeVoucherCode: "បញ្ចូលលេខកូដវេបសាយ",
+ enterVoucherCode: "បញ្ចូលលេខកូដវេបសាយរបស់អ្នក",
+ status: 'ស្ថានភាព',
+ anySuggestion: 'មានអំណាចណាស់មែនទេ?',
+ reviewRegarding: 'ពិនិត្យឡើងវិញអំពីការបញ្ជាទិញរបស់អ្នក?',
+ writeReview: 'សរសេរពិន្ទុ',
+ chatWithRider: 'ជជែកជាមួយអ្នកបើកដំណើរ',
+ signupGoogle: 'ចុះឈ្មោះជាមួយ Google',
+ signupEmail: 'ចុះឈ្មោះតាមអ៊ីម៉ែល',
+ signup: 'ចុះឈ្មោះ',
+ signupApple: 'ចុះឈ្មោះជាមួយ Apple',
+ alreadyMember: 'រួចហើយរួចចូលក្នុង',
+ enterUsername: 'បញ្ចូលអ៊ីម៉ែលរបស់អ្នក និងពាក្យសម្ងាត់',
+ createNewAcc: 'បង្កើតគណនីថ្មី',
+ emailphoneReq: "ត្រូវការអ៊ីម៉ែល/លេខទូរស័ព្ទ",
+ invalidMail: "អ៊ីម៉ែល/លេខទូរស័ព្ទមិនត្រឹមត្រូវ",
+ passReq: "ត្រូវការពាក្យសម្ងាត់",
+ cantLogin: "មិនអាចចូលបានទេ, គណនីនេះត្រូវបានលុប!",
+ orderPending: "ការបញ្ជាទិញរបស់អ្នកមិនទាន់ទទួលយកទេ។",
+ prepFood: "ភោជនីដែលកំពុងរៀបចំអាហារ។",
+ riderOnWay: "អ្នកបើកដំណើរកំពង់កោះមាន់នៅលើផ្លូវ។",
+ orderDelivered: "ការបញ្ជាទិញបានដឹកជញ្ជូន។",
+ completeOrder: "ការបញ្ជាទិញបានបញ្ចប់។",
+ PENDING: "កំពុងរង់ចាំ",
+ ACCEPTED: 'បានទទួលយក',
+ PICKED: "បានជូនយក",
+ DELIVERED: "បានដឹកជញ្ជូន",
+ COMPLETED: "បានបញ្ចប់",
+ '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: 'មិនបានរកឃើញវាលម្ហូប',
+
}
diff --git a/CustomerApp/translations/zh.js b/CustomerApp/translations/zh.js
index bd3170a..3540daf 100644
--- a/CustomerApp/translations/zh.js
+++ b/CustomerApp/translations/zh.js
@@ -128,5 +128,108 @@ export const zh = {
coupanFailed: '优惠券不可用',
invalidCoupan: '优惠券无效',
validateItems: '结帐前将商品添加到购物车',
- validateDelivery: '结帐前设置送货地址'
+ validateDelivery: '结帐前设置送货地址',
+ language: '语言',
+ getUpdatesText: '获取订单状态更新!',
+ delAcc: '删除账户',
+ delAccText: '您确定要删除账户吗?',
+ cancel: '取消',
+ receiveOffers: '接收特别优惠',
+ notificationUpdate: '通知状态已更新',
+ notificationsNotWorking: "通知在模拟器上无法工作",
+ loginOrCreateAcc: "登录/创建帐户",
+ welcome: "欢迎",
+ titleSettings: '设置',
+ home: '主页',
+ noItems: '未找到物品',
+ featured: '特色',
+ filters: '筛选',
+ reset: '重置',
+ showSaleItems: '仅显示特价商品',
+ showStockItems: '仅显示有库存商品',
+ priceRange: '价格范围',
+ sorting: '排序',
+ applyFilter: '应用筛选',
+ close: '关闭',
+ phoneNumberRequired: "需要电话号码",
+ phoneNumberMissing: "缺少电话号码",
+ userInfoUpdated: "用户信息已更新",
+ nameReq: "需要姓名",
+ minWords: "最少11个字符,最多15个字符",
+ rightsReserved: "版权所有,Enatega保留所有权利",
+ changePass: "更改密码",
+ currentPass: "当前密码",
+ passReq: "需要密码",
+ newPass: "新密码",
+ apply: "应用",
+ invalidPass: "无效密码",
+ passChange: "密码已更新",
+ noOrdersFound: "未找到订单",
+ startShopping: "开始购物",
+ reOrder: "重新下单",
+ smthWrong: "出现问题",
+ noOrdersAssigned: "尚未分配订单!",
+ oldOrder: "旧订单",
+ activeOrder: "活跃订单",
+ idVar: 'ID:',
+ addressUpdated: '地址已更新',
+ labelAs: '标记为',
+ addressReq: '需要交付地址',
+ deliveryDetailsReq: '需要交付细节',
+ locaPermission: '未授予位置权限',
+ addressAdded: '已添加地址',
+ productPage: '产品页面',
+ docs: '文档',
+ blog: '博客',
+ aboutUs: '关于我们',
+ myVouchers: '我的优惠券',
+ typeVoucherCode: "输入优惠券代码",
+ enterVoucherCode: "输入您的优惠券代码",
+ status: '状态',
+ anySuggestion: '有什么建议吗?',
+ reviewRegarding: '关于您的订单的评论?',
+ writeReview: '撰写评论',
+ chatWithRider: '与骑手聊天',
+ signupGoogle: '使用 Google 注册',
+ signupEmail: '使用电子邮件注册',
+ signup: '注册',
+ signupApple: '使用 Apple 注册',
+ alreadyMember: '已经是会员?登录',
+ enterUsername: '输入您的电子邮件和密码',
+ createNewAcc: '创建新帐户',
+ emailphoneReq: "需要电子邮件/电话号码",
+ invalidMail: "无效的电子邮件/电话号码",
+ passReq: "需要密码",
+ cantLogin: "无法登录,此帐户已被删除!",
+ orderPending: "您的订单仍在等待中。",
+ prepFood: "餐厅正在准备食物。",
+ riderOnWay: "骑手正在途中。",
+ orderDelivered: "订单已送达。",
+ completeOrder: "订单已完成。",
+ PENDING: "待处理",
+ ACCEPTED: '已接受',
+ PICKED: "已取货",
+ DELIVERED: "已送达",
+ COMPLETED: "已完成",
+ '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: '找不到食品项目',
+
}
diff --git a/RiderApp/.gitignore b/RiderApp/.gitignore
index 30bc162..b2d59d1 100644
--- a/RiderApp/.gitignore
+++ b/RiderApp/.gitignore
@@ -1 +1,2 @@
-/node_modules
\ No newline at end of file
+/node_modules
+/dist
\ No newline at end of file
diff --git a/RiderApp/i18n.js b/RiderApp/i18n.js
index 3c19d4d..e3ac38b 100644
--- a/RiderApp/i18n.js
+++ b/RiderApp/i18n.js
@@ -7,10 +7,11 @@ import { fr } from './languages/fr'
import { km } from './languages/km'
import { zh } from './languages/zh'
import { de } from './languages/de'
+import { ar } from './languages/ar'
i18n.initAsync = async () => {
i18n.fallbacks = true
- i18n.translations = { fr, en, km, zh, de }
+ i18n.translations = { fr, en, km, zh, de, ar }
// i18n.locale = 'km'
if (Platform.OS === 'android') {
const lang = await AsyncStorage.getItem('enatega-language')
diff --git a/RiderApp/languages/ar.js b/RiderApp/languages/ar.js
new file mode 100644
index 0000000..df66a49
--- /dev/null
+++ b/RiderApp/languages/ar.js
@@ -0,0 +1,153 @@
+export const ar = {
+ title0: 'اللغة المختارة',
+ subtitle0: 'الإنجليزية',
+ description0: 'حدد أي لغة تفضلها لتغيير محتوى التطبيق إلى اللغة التي تحتاجها.',
+ title1: 'لذيذ',
+ subtitle1: 'الإفطار',
+ description1:
+ 'الإفطار هو كل شيء. البداية، الشيء الأول. إنها الحضن الذي يعبر عن التزامك بيوم جديد، حياة مستمرة.',
+ title2: 'منعش',
+ subtitle2: 'المشروبات',
+ description2:
+ 'الصمت الحقيقي هو راحة العقل، وهو للروح ما يعنيه النوم للجسم، تغذية وتجديد.',
+ title3: 'لذيذ',
+ subtitle3: 'الآيس كريم',
+ description3:
+ 'العمر لا يقلل من خيبة الأمل الشديدة لسقوط مغرفة من الآيس كريم من السطل',
+ getStarted: 'ابدأ!',
+ welcome: 'مرحبًا',
+ loginBtn: 'تسجيل الدخول',
+ registerBtn: 'التسجيل',
+ name: 'الاسم',
+ phone: 'الهاتف',
+ email: 'البريد الإلكتروني',
+ emailphone: 'البريد الإلكتروني أو الهاتف',
+ username: 'اسم المستخدم',
+ password: 'كلمة المرور',
+ deliveryAddress: 'عنوان التسليم',
+ registerText: 'أو سجل مع',
+ forgotPassword: 'نسيت كلمة المرور؟',
+ loginText: 'أو قم بتسجيل الدخول باستخدام',
+ deliveryLocation: 'قم بتشغيل الموقع لنتمكن من إرسال لك طعمًا لا ينتهي من الطعام اللذيذ.',
+ locationBtn: 'تشغيل الموقع',
+ locationPermissionDenied: 'تم رفض إذن الوصول إلى الموقع',
+ cameraRollPermissionDenied: 'تم رفض إذن الوصول إلى الصور',
+ locationOff: 'قم بتشغيل الموقع وحاول مرة أخرى',
+ titleLanguage: 'تغيير اللغة',
+ titleMenu: 'القائمة',
+ titleOrders: 'طلباتي',
+ NewOrders: 'طلبات جديدة',
+ titleNotifications: 'الإشعارات',
+ titleReviews: 'التقييمات',
+ titleSettings: 'الإعدادات',
+ titleHelp: 'المساعدة',
+ titleLogout: 'تسجيل الخروج',
+ titleCart: 'عربة التسوق الخاصة بي',
+ titlePayment: 'الدفع',
+ orderId: 'رقم الطلب',
+ totalOrderAmount: 'مجموع مبلغ الطلب',
+ reOrder: 'إعادة الطلب',
+ unReadNotifications: 'لا توجد إشعارات غير مقروءة',
+ upload: 'تحميل',
+ saveBtn: 'حفظ',
+ emailUs: 'راسلنا عبر البريد الإلكتروني على',
+ question1: 'أين يمكننا العثور على الطعام؟',
+ question2: 'كيف يمكننا التواصل؟',
+ question3: 'كيف يمكنني دفع مبلغ التوصيل للشخص؟',
+ question4: 'هل الخدمة متاحة في مدينتي؟',
+ answer1:
+ 'يمكنك العثور على الطعام في أقرب متجر دون دفع أي شيء لخدمة العملاء. تكلفتنا منخفضة للغاية مقارنة بالآخرين.',
+ answer2: 'يمكنك التواصل معنا عبر البريد الإلكتروني، رقم الهاتف أو موقع الويب الخاص بنا.',
+ answer3:
+ 'يمكنك دفع مبلغ التوصيل شخصيًا أو الدفع عبر الإنترنت أيضًا عبر بطاقة الائتمان أو الخصم.',
+ answer4:
+ 'حاليًا هذه الخدمة متاحة في مدن إسلام أباد وكراتشي، يمكنك التواصل معنا للاستفادة من هذه الخدمة في مدينتك.',
+ add: 'إضافة',
+ quantity: 'الكمية',
+ size: 'الحجم',
+ addToCart: 'إضافة إلى العربة',
+ orderNow: 'طلب الآن',
+ addToCartMessage: 'تمت الإضافة إلى العربة',
+ emptyCart: 'لا توجد عناصر في العربة',
+ itemTotal: 'إجمالي العنصر',
+ delvieryCharges: 'رسوم التوصيل',
+ total: 'الإجمالي',
+ contactInfo: 'معلومات الاتصال',
+ deliveryAddressmessage: 'تعيين عنوان التسليم',
+ proceedCheckout: 'المتابعة إلى الدفع',
+ paymentText: 'كيف ترغب في الدفع؟',
+ checkout: 'الدفع',
+ header_title1: 'بطاقة الائتمان/بطاقة الخصم',
+ header_subscript1: 'الدفع باستخدام بطاقة الائتمان أو الخصم',
+ header_title2: 'PayPal',
+ header_subscript2: 'الدفع عبر الإنترنت باستخدام PayPal',
+ header_title3: 'الدفع عند الاستلام',
+ header_subscript3: 'الدفع عند استلام العنصر',
+ thankYou: 'شكرًا لك!',
+ orderConfirmed: 'تم تأكيد طلبك',
+ orderAmount: 'مبلغ طلبك',
+ orderDetail: 'تفاصيل الطلب',
+ paymentMethod: 'طريقة الدفع',
+ trackOrder: 'تتبع الطلب',
+ backToMenu: 'العودة إلى القائمة',
+ foodItem: 'عنصر طعام',
+ deliveredTo: 'تم التوصيل إلى',
+ writeAReview: 'كتابة تقييم',
+ orderReceived: 'تم استلام الطلب',
+ cancelled: 'تم الإلغاء',
+ foodPreparing: 'يتم إعداد الطعام',
+ Delivered: 'تم التوصيل',
+ rateAndReview: 'قيم وأكتب تقييمًا',
+ reviewPlaceholder: 'التقييمات المفصلة تحصل على رؤية أكبر...',
+ submit: 'إرسال',
+ noWorriesText: 'لا تقلق، دعنا نساعدك!',
+ yourEmail: 'بريدك الإلكتروني',
+ send: 'إرسال',
+ apply: 'تقديم الطلب',
+ checkEmail: 'تحقق من بريدك الإلكتروني للحصول على رابط إعادة تعيين كلمة المرور',
+ languageText: 'الرجاء اختيار اللغة المطلوبة',
+ countryCodePickerTranslation: 'eng',
+ countryCodeSelect: 'اختر رمز البلد',
+ paymentNotSupported: 'لا يدعم هذا الطريقة الدفع هذه العملة',
+ Orders: 'الطلبات',
+ deliveryTime: 'وقت التسليم',
+ myOrders: 'طلباتي',
+ newOrders: 'طلبات جديدة',
+ titleChat: 'دردشة',
+ NoNewOrder: 'لا يوجد طلب جديد',
+ Somethingisworng: 'هناك خطأ',
+ PENDING: 'قيد الانتظار',
+ ACCEPTED: 'تم القبول',
+ PICKED: 'تم الاختيار',
+ DELIVERED: 'تم التوصيل',
+ COMPLETED: 'تم الانتهاء',
+ YourOrderID: 'رقم طلبك',
+ ProductPage: 'صفحة المنتج',
+ Docs: 'وثائق',
+ Blog: 'مدونة',
+ AboutUs: 'معلومات عنا',
+ Done: 'تم',
+ Cancel: 'إلغاء',
+ Usernameisrequired: 'اسم المستخدم مطلوب',
+ Passwordisrequired: 'كلمة المرور مطلوبة',
+ Loggedin: 'تم تسجيل الدخول',
+ EnteryourEmailandPassword: 'أدخل بريدك الإلكتروني وكلمة المرور',
+ EmailorPhone: 'البريد الإلكتروني أو الهاتف',
+ Password: 'كلمة المرور',
+ NoOrdersAssignedyet: 'لا توجد طلبات تم تعيينها حتى الآن',
+ Loadingorders: 'جاري تحميل الطلبات',
+ Orderassginedtootherrider: 'الطلب تم تعيينه لسائق آخر',
+ CustomerDetails: 'تفاصيل العميل',
+ Contact: 'اتصل',
+ DelvieryLocation: 'موقع التسليم',
+ OrderDetails: 'تفاصيل الطلب',
+ Subtotal: 'المجموع الفرعي',
+ Assigntome: 'تعيين لي',
+ 'About Us': 'عنا',
+ 'Product Page': 'صفحة المنتج',
+ Order: 'طلب',
+ OrderMarkedAs: 'تم وضع علامة الطلب كـ',
+ titleLogin: 'تسجيل الدخول',
+ Picked: 'تم الاختيار'
+ }
+
\ No newline at end of file
diff --git a/RiderApp/languages/de.js b/RiderApp/languages/de.js
index cfd0b92..d4106d3 100644
--- a/RiderApp/languages/de.js
+++ b/RiderApp/languages/de.js
@@ -98,7 +98,7 @@ export const de = {
orderReceived: 'Bestellung erhalten',
cancelled: 'Abgebrochen',
foodPreparing: 'Essen wird zubereitet',
- delivered: 'Geliefert',
+ Delivered: 'Geliefert',
rateAndReview: 'Bewerten und bewerten',
reviewPlaceholder: 'Detaillierte Bewertungen erhalten mehr Sichtbarkeit ...',
submit: 'einreichen',
@@ -111,5 +111,45 @@ export const de = {
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'
+ paymentNotSupported: 'Diese Zahlungsmethode unterstützt diese Währung nicht',
+ Orders: 'Bestellingen',
+ deliveryTime: 'Leveringstijd',
+ myOrders: 'Mijn bestellingen',
+ newOrders: 'Nieuwe bestellingen',
+ titleChat: 'Chat',
+ NoNewOrder: 'Geen nieuwe bestelling',
+ Somethingisworng: 'Er is iets mis',
+ PENDING: 'IN AFWACHTING',
+ ACCEPTED: 'GEACCEPTEERD',
+ PICKED: 'OPGEHAALD',
+ DELIVERED: 'GELEVERD',
+ COMPLETED: 'VOLTOOID',
+ YourOrderID: 'Uw bestelnummer',
+ ProductPage: 'Productpagina',
+ Docs: 'Documenten',
+ Blog: 'Blog',
+ AboutUs: 'Over ons',
+ Done: 'Klaar',
+ Cancel: 'Annuleren',
+ Usernameisrequired: 'Gebruikersnaam is verplicht',
+ Passwordisrequired: 'Wachtwoord is verplicht',
+ Loggedin: 'Ingelogd',
+ EnteryourEmailandPassword: 'Voer uw e-mail en wachtwoord in',
+ EmailorPhone: 'E-mail of telefoon',
+ Password: 'Wachtwoord',
+ NoOrdersAssignedyet: 'Nog geen bestellingen toegewezen',
+ Loadingorders: 'Bestellingen laden',
+ Orderassginedtootherrider: 'Bestelling toegewezen aan andere bezorger',
+ CustomerDetails: 'Klantgegevens',
+ Contact: 'Contact',
+ DelvieryLocation: 'Leveringslocatie',
+ OrderDetails: 'Bestelgegevens',
+ Subtotal: 'Subtotaal',
+ Assigntome: 'Toewijzen aan mij',
+ 'About Us': 'Over Ons',
+ 'Product Page': 'Product Pagina',
+ Order: 'Bestelling',
+ OrderMarkedAs: 'Bestelling gemarkeerd als',
+ titleLogin: 'Inloggen',
+ Picked: 'Gekozen',
}
diff --git a/RiderApp/languages/en.js b/RiderApp/languages/en.js
index 040c76a..816cf22 100644
--- a/RiderApp/languages/en.js
+++ b/RiderApp/languages/en.js
@@ -98,7 +98,7 @@ export const en = {
orderReceived: 'Order Received',
cancelled: 'Cancelled',
foodPreparing: 'Food is being prepared',
- delivered: 'Delivered',
+ Delivered: 'Delivered',
rateAndReview: 'Rate and Review',
reviewPlaceholder: 'More detailed reviews get more visibility...',
submit: 'Submit',
@@ -115,5 +115,40 @@ export const en = {
deliveryTime: 'Delivery Time',
myOrders: 'My Orders',
newOrders: 'New Orders',
- titleChat: 'Chat'
+ titleChat: 'Chat',
+ NoNewOrder: 'No New Order',
+ Somethingisworng: 'Something is worng',
+ PENDING: 'PENDING',
+ ACCEPTED: 'ACCEPTED',
+ PICKED: 'PICKED',
+ DELIVERED: 'DELIVERED',
+ COMPLETED: 'COMPLETED',
+ YourOrderID: 'Your Order ID',
+ ProductPage: 'Product Page',
+ Docs: 'Docs',
+ Blog: 'Blog',
+ AboutUs: 'About Us',
+ Done: 'Done',
+ Cancel: 'Cancel',
+ Usernameisrequired: 'Username is required',
+ Passwordisrequired: 'Password is required',
+ Loggedin: 'Logged in',
+ EnteryourEmailandPassword: 'Enter your Email and Password',
+ EmailorPhone: 'Email or Phone',
+ Password: 'Password',
+ NoOrdersAssignedyet: 'No Orders Assigned yet',
+ Loadingorders: 'Loading orders',
+ Orderassginedtootherrider: 'Order assgined to other rider',
+ CustomerDetails: 'Customer Details',
+ Contact: 'Contact',
+ DelvieryLocation: 'Delviery Location',
+ OrderDetails: 'Order Details',
+ Subtotal: 'Subtotal',
+ Assigntome: 'Assign to me',
+ 'About Us': 'About Us',
+ 'Product Page': 'Product Page',
+ Order: 'Order',
+ OrderMarkedAs: 'Order marked as',
+ titleLogin: 'Login',
+ Picked: 'Picked'
}
diff --git a/RiderApp/languages/fr.js b/RiderApp/languages/fr.js
index 2a8d2a1..0a66d3e 100644
--- a/RiderApp/languages/fr.js
+++ b/RiderApp/languages/fr.js
@@ -98,7 +98,7 @@ export const fr = {
orderReceived: 'Ordre reçu',
cancelled: 'Annulé',
foodPreparing: 'La nourriture est en cours de préparation',
- delivered: 'Livré',
+ Delivered: 'Livré',
rateAndReview: 'Notez et évaluez',
reviewPlaceholder: 'Des revues plus détaillées ont plus de visibilité ...',
submit: 'Soumettre',
@@ -111,5 +111,45 @@ export const fr = {
languageText: "S'il vous plaît sélectionnez votre langue requise",
countryCodePickerTranslation: 'fra',
countryCodeSelect: 'Sélectionnez le code pays',
- paymentNotSupported: 'Ce mode de paiement ne prend pas en charge cette devise'
+ paymentNotSupported: 'Ce mode de paiement ne prend pas en charge cette devise',
+ Orders: 'Commandes',
+ deliveryTime: 'Délai de livraison',
+ myOrders: 'Mes commandes',
+ newOrders: 'Nouvelles commandes',
+ titleChat: 'Chat',
+ NoNewOrder: 'Pas de nouvelle commande',
+ Somethingisworng: 'Quelque chose ne va pas',
+ PENDING: 'EN ATTENTE',
+ ACCEPTED: 'ACCEPTÉE',
+ PICKED: 'PRÉLEVÉE',
+ DELIVERED: 'LIVRÉE',
+ COMPLETED: 'COMPLÉTÉE',
+ YourOrderID: 'Votre numéro de commande',
+ ProductPage: 'Page produit',
+ Docs: 'Documents',
+ Blog: 'Blog',
+ AboutUs: 'À propos de nous',
+ Done: 'Terminé',
+ Cancel: 'Annuler',
+ Usernameisrequired: 'Nom d\'utilisateur requis',
+ Passwordisrequired: 'Mot de passe requis',
+ Loggedin: 'Connecté',
+ EnteryourEmailandPassword: 'Entrez votre e-mail et votre mot de passe',
+ EmailorPhone: 'E-mail ou téléphone',
+ Password: 'Mot de passe',
+ NoOrdersAssignedyet: 'Aucune commande attribuée pour le moment',
+ Loadingorders: 'Chargement des commandes',
+ Orderassginedtootherrider: 'Commande attribuée à un autre livreur',
+ CustomerDetails: 'Détails du client',
+ Contact: 'Contact',
+ DelvieryLocation: 'Emplacement de livraison',
+ OrderDetails: 'Détails de la commande',
+ Subtotal: 'Sous-total',
+ Assigntome: 'Attribuer à moi',
+ 'About Us': 'À Propos de Nous',
+ 'Product Page': 'Page Produit',
+ Order: 'Commande',
+ OrderMarkedAs: 'Commande marquée comme',
+ titleLogin: 'Connexion',
+ Picked: 'Choisi',
}
diff --git a/RiderApp/languages/km.js b/RiderApp/languages/km.js
index 18c87df..2a44be6 100644
--- a/RiderApp/languages/km.js
+++ b/RiderApp/languages/km.js
@@ -96,7 +96,7 @@ export const km = {
orderReceived: 'បញ្ជាទិញដែលទទួលបាន',
cancelled: 'បានបោះបង់',
foodPreparing: 'ម្ហូបកំពុងត្រូវបានរៀបចំ',
- delivered: 'បានបញ្ជូន',
+ Delivered: 'បានបញ្ជូន',
rateAndReview: 'វាយតម្លៃនិងពិនិត្យ',
reviewPlaceholder: 'ការពិនិត្យលម្អិតបន្ថែមទៀតទទួលបានភាពមើលឃើញកាន់តែច្រើន ...',
submit: 'ដាក់ស្នើ',
@@ -108,8 +108,44 @@ export const km = {
languageText: 'សូមជ្រើសរើសភាសាដែលអ្នកត្រូវការ',
countryCodePickerTranslation: 'eng',
countryCodeSelect: 'ជ្រើសរើសលេខកូដប្រទេស',
- paymentNotSupported: 'វិធីសាស្ត្រទូទាត់នេះមិនគាំទ្ររូបិយប័ណ្ណនេះទេ',
- deliveryTime: 'ពេលវេលាដឹកជញ្ជូន',
+ paymentNotSupported: 'វិធានមិនគាំទ្រប្រចាំរូបិយប័ណ្ណនេះ',
+ Orders: 'ការបញ្ជាទិញ',
+ deliveryTime: 'ពេលដឹកជញ្ជាំង',
myOrders: 'ការបញ្ជាទិញរបស់ខ្ញុំ',
- newOrders: 'ការបញ្ជាទិញថ្មី'
+ newOrders: 'ការបញ្ជាទិញថ្មី',
+ titleChat: 'ជជែក',
+ NoNewOrder: 'គ្មានការបញ្ជាទិញថ្មី',
+ Somethingisworng: 'មានអ្វីមិនប្រក្រតី',
+ PENDING: 'រងចាំ',
+ ACCEPTED: 'បានទទួលយក',
+ PICKED: 'បានយក',
+ DELIVERED: 'បានដឹកជញ្ជាំង',
+ COMPLETED: 'បានបញ្ចប់',
+ YourOrderID: 'លេខសម្គាល់ការបញ្ជាទិញរបស់អ្នក',
+ ProductPage: 'ទំព័រផលិតផល',
+ Docs: 'ឯកសារ',
+ Blog: 'ប្លក់',
+ AboutUs: 'អំពីពួកយើង',
+ Done: 'រួចរាល់',
+ Cancel: 'លើកអស់',
+ Usernameisrequired: 'ត្រូវការឈ្មោះអ្នកប្រើ',
+ Passwordisrequired: 'ត្រូវការពាក្យសម្ងាត់',
+ Loggedin: 'បានចូលប្រើ',
+ EnteryourEmailandPassword: 'បញ្ចូលអ៊ីមែល និងពាក្យសម្ងាត់',
+ EmailorPhone: 'អ៊ីមែល ឬទូរស័ព្ទ',
+ Password: 'ពាក្យសម្ងាត់',
+ NoOrdersAssignedyet: 'មិនទាន់មានការបញ្ជាទិញដែលបានផ្ទេរទេ',
+ Loadingorders: 'កំពុងផ្ទុកការបញ្ជាទិញ',
+ Orderassginedtootherrider: 'ការបញ្ជាទិញត្រូវបានផ្ទេរទៅហាងផ្សេងៗ',
+ CustomerDetails: 'ព័ត៌មានអតិថិជន',
+ Contact: 'ទំនាក់ទំនង',
+ DelvieryLocation: 'ទីតាំងដឹកជញ្ជាំង',
+ OrderDetails: 'ព័ត៌មានការបញ្ជាទិញ',
+ Subtotal: 'សរុបរង',
+ Assigntome: 'ផ្ដល់ទៅខ្លួនឯង',
+ 'About Us': 'អំពីយើង',
+ 'Product Page': 'ទំព័រផលិតផល',
+ Order: 'បញ្ជាទិញ',
+ OrderMarkedAs: 'បញ្ជាតម្រៀបជានៅជិត',
+ Picked: 'បានជ្រើសរើស',
}
diff --git a/RiderApp/languages/zh.js b/RiderApp/languages/zh.js
index 5846e37..f05f9a3 100644
--- a/RiderApp/languages/zh.js
+++ b/RiderApp/languages/zh.js
@@ -92,7 +92,7 @@ export const zh = {
orderReceived: '订单已经收到',
cancelled: '取消',
foodPreparing: '食物正在准备中',
- delivered: '交付',
+ Delivered: '交付',
rateAndReview: '打分和评论',
reviewPlaceholder: '更详细的评论获得更多可见性......',
submit: '提交',
@@ -104,5 +104,45 @@ export const zh = {
languageText: '请选择您需要的语言',
countryCodePickerTranslation: 'zho',
countryCodeSelect: '选择国家代码',
- paymentNotSupported: '此付款方式不支持此货币'
+ paymentNotSupported: '此付款方式不支持此货币',
+ Orders: '订单',
+ deliveryTime: '交货时间',
+ myOrders: '我的订单',
+ newOrders: '新订单',
+ titleChat: '聊天',
+ NoNewOrder: '没有新订单',
+ Somethingisworng: '出现问题',
+ PENDING: '待处理',
+ ACCEPTED: '已接受',
+ PICKED: '已拾取',
+ DELIVERED: '已交付',
+ COMPLETED: '已完成',
+ YourOrderID: '您的订单号',
+ ProductPage: '产品页面',
+ Docs: '文档',
+ Blog: '博客',
+ AboutUs: '关于我们',
+ Done: '完成',
+ Cancel: '取消',
+ Usernameisrequired: '需要用户名',
+ Passwordisrequired: '需要密码',
+ Loggedin: '已登录',
+ EnteryourEmailandPassword: '输入您的电子邮件和密码',
+ EmailorPhone: '电子邮件或电话',
+ Password: '密码',
+ NoOrdersAssignedyet: '尚未分配订单',
+ Loadingorders: '加载订单',
+ Orderassginedtootherrider: '订单已分配给其他骑手',
+ CustomerDetails: '客户详情',
+ Contact: '联系',
+ DelvieryLocation: '交货地点',
+ OrderDetails: '订单详情',
+ Subtotal: '小计',
+ Assigntome: '分配给我',
+ 'About Us': '关于我们',
+'Product Page': '产品页面',
+Order: '订单',
+OrderMarkedAs: '标记为订单',
+titleLogin: '登录',
+Picked: '已选取',
}
diff --git a/RiderApp/src/components/AssignedOrders/AssignedOrders.js b/RiderApp/src/components/AssignedOrders/AssignedOrders.js
index 4c72815..835d1b3 100644
--- a/RiderApp/src/components/AssignedOrders/AssignedOrders.js
+++ b/RiderApp/src/components/AssignedOrders/AssignedOrders.js
@@ -7,6 +7,7 @@ import UserContext from '../../context/user'
import TextError from '../Text/TextError/TextError'
import { useNavigation } from '@react-navigation/native'
import { verticalScale } from '../../utilities/scaling'
+import i18n from '../../../i18n'
export default function Orders() {
const navigation = useNavigation()
@@ -20,10 +21,10 @@ export default function Orders() {
} = useContext(UserContext)
if (loadingAssigned) return
- if (errorAssigned) return
+ if (errorAssigned) return
function emptyView() {
- return
+ return
}
return (
diff --git a/RiderApp/src/components/NewOrders/NewOrders.js b/RiderApp/src/components/NewOrders/NewOrders.js
index e51f842..8431cc4 100644
--- a/RiderApp/src/components/NewOrders/NewOrders.js
+++ b/RiderApp/src/components/NewOrders/NewOrders.js
@@ -7,6 +7,7 @@ import UserContext from '../../context/user'
import TextError from '../Text/TextError/TextError'
import { useNavigation } from '@react-navigation/native'
import { verticalScale } from '../../utilities/scaling'
+import i18n from '../../../i18n'
export default function Orders() {
const navigation = useNavigation()
@@ -20,11 +21,11 @@ export default function Orders() {
} = useContext(UserContext)
function emptyView() {
- return
+ return
}
if (loadingUnAssigned) return
- if (errorUnAssigned) return
+ if (errorUnAssigned) return
return (
- Your {i18n.t('orderId')}
+ {i18n.t('YourOrderID')}
{props.orderId}
@@ -77,7 +77,7 @@ function Order(props) {
bold
uppercase
style={{ ...alignment.PLxSmall, ...alignment.PRxSmall }}>
- {props.orderStatus}
+ {i18n.t(props.orderStatus)}
@@ -106,13 +106,13 @@ function Order(props) {
textColor={colors.placeHolderColor}
bold
style={{ ...alignment.MTxSmall }}>
- Payment method
+ {i18n.t('paymentMethod')}
- Delivery Time
+ {i18n.t('deliveryTime')}
diff --git a/RiderApp/src/screens/Chat/Chat.js b/RiderApp/src/screens/Chat/Chat.js
index c65b690..b4e0192 100644
--- a/RiderApp/src/screens/Chat/Chat.js
+++ b/RiderApp/src/screens/Chat/Chat.js
@@ -1,6 +1,6 @@
import { Feather, FontAwesome } from '@expo/vector-icons'
import { useNavigation } from '@react-navigation/native'
-import React, { useCallback, useEffect, useState } from 'react'
+import React, { useCallback, useEffect, useState, useLayoutEffect } from 'react'
import { Keyboard, View } from 'react-native'
import {
Bubble,
@@ -13,6 +13,7 @@ import { alignment } from '../../utilities/alignment'
import colors from '../../utilities/colors'
import { scale } from '../../utilities/scaling'
import useStyle from './styles'
+import i18n from '../../../i18n'
const UserInfo = {
_id: 1,
@@ -42,7 +43,7 @@ function Chat() {
useEffect(() => {
navigation.setOptions({
- title: 'Chat'
+ headerTitle: i18n.t('titleChat')
})
setMessages([
{
diff --git a/RiderApp/src/screens/Help/Help.js b/RiderApp/src/screens/Help/Help.js
index 6aa646a..2a0c80d 100644
--- a/RiderApp/src/screens/Help/Help.js
+++ b/RiderApp/src/screens/Help/Help.js
@@ -42,7 +42,7 @@ function Help() {
style={styles.itemContainer}
key={index}>
- {title}
+ {i18n.t(title)}
diff --git a/RiderApp/src/screens/HelpBrowser/HelpBrowser.js b/RiderApp/src/screens/HelpBrowser/HelpBrowser.js
index a5b6bb6..c53bd0e 100644
--- a/RiderApp/src/screens/HelpBrowser/HelpBrowser.js
+++ b/RiderApp/src/screens/HelpBrowser/HelpBrowser.js
@@ -2,6 +2,7 @@ import { useNavigation, useRoute } from '@react-navigation/native'
import React, { useLayoutEffect } from 'react'
import { WebView } from 'react-native-webview'
import { MainWrapper, Spinner } from '../../components'
+import i18n from '../../../i18n'
function HelpBrowser() {
const navigation = useNavigation()
@@ -11,7 +12,7 @@ function HelpBrowser() {
useLayoutEffect(() => {
navigation.setOptions({
headerRight: null,
- headerTitle: title
+ headerTitle: i18n.t(title)
})
}, [navigation])
diff --git a/RiderApp/src/screens/Language/Language.js b/RiderApp/src/screens/Language/Language.js
index ea8d981..24b15ff 100644
--- a/RiderApp/src/screens/Language/Language.js
+++ b/RiderApp/src/screens/Language/Language.js
@@ -18,7 +18,8 @@ const languageTypes = [
{ value: 'français', code: 'fr', index: 1 },
{ value: 'ភាសាខ្មែរ', code: 'km', index: 2 },
{ value: '中文', code: 'zh', index: 3 },
- { value: 'Deutsche', code: 'de', index: 4 }
+ { value: 'Deutsche', code: 'de', index: 4 },
+ { value: 'Arabic', code: 'ar', index: 5 }
]
function Language() {
@@ -113,7 +114,7 @@ function Language() {
justifyContent: 'center'
}}>
- Done
+ {i18n.t('Done')}
- Cancel
+ {i18n.t('Cancel')}
diff --git a/RiderApp/src/screens/Login/Login.js b/RiderApp/src/screens/Login/Login.js
index 70dedaf..c37874b 100644
--- a/RiderApp/src/screens/Login/Login.js
+++ b/RiderApp/src/screens/Login/Login.js
@@ -4,7 +4,7 @@ import { useNavigation } from '@react-navigation/native'
import Constants from 'expo-constants'
import * as Notifications from 'expo-notifications'
import gql from 'graphql-tag'
-import React, { useContext, useEffect, useState } from 'react'
+import React, { useContext, useEffect, useState,useLayoutEffect } from 'react'
import {
KeyboardAvoidingView,
Platform,
@@ -38,11 +38,13 @@ export default function Login() {
const { setTokenAsync } = useContext(AuthContext)
- useEffect(() => {
+
+ useLayoutEffect(() => {
navigation.setOptions({
- headerLeft: null
+ headerRight: null,
+ headerTitle: i18n.t('titleHelp')
})
- }, [])
+ }, [navigation])
const [mutate, { loading }] = useMutation(RIDER_LOGIN, {
onCompleted,
@@ -55,11 +57,11 @@ export default function Login() {
setPasswordError('')
if (!username) {
- setUsernameError('Username is required')
+ setUsernameError(i18n.t('Usernameisrequired'))
res = false
}
if (!password) {
- setPasswordError('Password is required')
+ setPasswordError(i18n.t('Passwordisrequired'))
res = false
}
return res
@@ -67,23 +69,23 @@ export default function Login() {
async function onCompleted(data) {
FlashMessage({
- message: 'Logged in'
+ message: i18n.t('Loggedin')
})
await AsyncStorage.setItem('rider-id', data.riderLogin.userId)
setTokenAsync(data.riderLogin.token)
}
function onError({ networkError, graphQLErrors }) {
console.log('errors', networkError, graphQLErrors)
- // let message = ''
- // if (!!graphQLErrors && graphQLErrors.length) {
- // message = graphQLErrors[0].message
- // }
- // if (!!networkError) {
- // message = networkError.result.errors[0].message
- // }
- // FlashMessage({
- // message: message
- // })
+ let message = ''
+ if (!!graphQLErrors && graphQLErrors.length) {
+ message = graphQLErrors[0].message
+ }
+ if (!!networkError) {
+ message = networkError.result.errors[0].message
+ }
+ FlashMessage({
+ message: message
+ })
}
return (
@@ -100,13 +102,13 @@ export default function Login() {
- Enter your Email and Password
+ {i18n.t('EnteryourEmailandPassword')}
+ return
}
if (loadingUnAssigned) return
- if (errorUnAssigned) return
+ if (errorUnAssigned) return
return (
diff --git a/RiderApp/src/screens/OrderDetail/OrderDetail.js b/RiderApp/src/screens/OrderDetail/OrderDetail.js
index 721598e..fab3735 100644
--- a/RiderApp/src/screens/OrderDetail/OrderDetail.js
+++ b/RiderApp/src/screens/OrderDetail/OrderDetail.js
@@ -20,6 +20,7 @@ import colors from "../../utilities/colors";
import { linkToMapsApp } from "../../utilities/links";
import { scale } from "../../utilities/scaling";
import styles from "./styles";
+import i18n from "../../../i18n";
const CONFIGURATION = gql`
${configuration}
@@ -70,13 +71,13 @@ function OrderDetail() {
useLayoutEffect(() => {
if (!selectedOrder) return;
navigation.setOptions({
- title: `Order ${selectedOrder.order_id}`,
+ title: `${i18n.t('Order')} ${selectedOrder.order_id}`,
});
}, [selectedOrder]);
async function onCompleted({ updateOrderStatusRider, assignOrder }) {
if (updateOrderStatusRider) {
FlashMessage({
- message: `Order marked as ${updateOrderStatusRider.order_status}`,
+ message: `${i18n.t('OrderMarkedAs')} ${i18n.t(updateOrderStatusRider.order_status)}`,
});
if (updateOrderStatusRider.order_status === "DELIVERED") {
navigation.goBack();
@@ -172,17 +173,17 @@ function OrderDetail() {
}
if (loadingAssigned || loadingUnAssigned) {
- return ;
+ return ;
}
if (loadingConfig) {
return ;
}
if (errorConfig) {
- return ;
+ return ;
}
if (!selectedOrder) {
return (
-
+
);
}
@@ -202,7 +203,7 @@ function OrderDetail() {
textColor={colors.tagColor}
style={{ ...alignment.PTxSmall, ...alignment.PBxSmall }}
>
- Customer Details
+ {i18n.t('CustomerDetails')}
@@ -214,7 +215,7 @@ function OrderDetail() {
textColor={colors.placeHolderColor}
style={{ ...alignment.PTxSmall, ...alignment.PBxSmall }}
>
- Name
+ {i18n.t('name')}
{selectedOrder.user.name}
@@ -228,7 +229,7 @@ function OrderDetail() {
textColor={colors.placeHolderColor}
style={{ ...alignment.PTxSmall, ...alignment.PBxSmall }}
>
- Contact
+ {i18n.t('Contact')}
{selectedOrder.user.phone}
@@ -242,7 +243,7 @@ function OrderDetail() {
textColor={colors.placeHolderColor}
style={{ ...alignment.PTxSmall, ...alignment.PBxSmall }}
>
- Delviery Location
+ {i18n.t('DelvieryLocation')}
- Order Details
+ {i18n.t('OrderDetails')}
@@ -284,7 +285,7 @@ function OrderDetail() {
bolder
style={{ ...alignment.PTmedium, ...alignment.PLmedium }}
>
- Subtotal
+ {i18n.t('Subtotal')}
@@ -311,7 +312,7 @@ function OrderDetail() {
bolder
style={{ ...alignment.PLmedium }}
>
- Delivery Charges
+ {i18n.t('delvieryCharges')}
@@ -331,7 +332,7 @@ function OrderDetail() {
- Total
+ {i18n.t('total')}
@@ -423,7 +424,7 @@ function OrderDetail() {
bold
style={{ ...alignment.PTxSmall, ...alignment.PBxSmall }}
>
- Assign to me
+ {i18n.t('Assigntome')}
)}
@@ -449,7 +450,7 @@ function OrderDetail() {
bold
style={{ ...alignment.PTxSmall, ...alignment.PBxSmall }}
>
- Picked
+ {i18n.t('Picked')}
)}
@@ -468,7 +469,7 @@ function OrderDetail() {
bold
style={{ ...alignment.PTxSmall, ...alignment.PBxSmall }}
>
- Delivered
+ {i18n.t('Delivered')}
)}
diff --git a/RiderApp/src/screens/Orders/Orders.js b/RiderApp/src/screens/Orders/Orders.js
index c879e05..442b058 100644
--- a/RiderApp/src/screens/Orders/Orders.js
+++ b/RiderApp/src/screens/Orders/Orders.js
@@ -1,4 +1,5 @@
-import React, { useEffect, useState } from 'react'
+import React, { useEffect, useState, useLayoutEffect } from 'react'
+import { useNavigation } from '@react-navigation/native'
import {
ImageBackground,
StatusBar,
@@ -15,11 +16,19 @@ const BACKGROUND_IMAGE = require('../../../assets/images/ui/BG.png')
export default function Orders() {
const styles = useStyle()
const [isNewOrderSelected, setIsNewOrderSelected] = useState(false)
+ const navigation = useNavigation()
useEffect(() => {
StatusBar.setBarStyle('light-content')
}, [isNewOrderSelected])
+ useLayoutEffect(() => {
+ navigation.setOptions({
+ headerRight: null,
+ headerTitle: i18n.t('Orders')
+ })
+ }, [navigation])
+
return (