502 lines
16 KiB
TypeScript
502 lines
16 KiB
TypeScript
export const en = {
|
||
common: {
|
||
cancel: "Cancel",
|
||
continue: "Continue",
|
||
back: "Back",
|
||
retry: "Try Again",
|
||
loading: "Loading…",
|
||
saving: "Saving…",
|
||
error: "Error",
|
||
save: "Save",
|
||
or: "Or",
|
||
browseHome: "Browse Home",
|
||
backHome: "Back Home",
|
||
openSettings: "Open Settings",
|
||
yourLocation: "Your location",
|
||
},
|
||
|
||
onboarding: {
|
||
skip: "Skip",
|
||
next: "Next",
|
||
getStarted: "Get Started",
|
||
slide1: {
|
||
title: "The perfect ride is just a tap away!",
|
||
desc: "Your journey begins with Waseel. Find your ideal ride effortlessly.",
|
||
},
|
||
slide2: {
|
||
title: "Best car in your hands with Waseel",
|
||
desc: "Discover the convenience of finding your perfect ride with Waseel",
|
||
},
|
||
slide3: {
|
||
title: "Your ride, your way. Let's go!",
|
||
desc: "Enter your destination, sit back, and let us take care of the rest.",
|
||
},
|
||
},
|
||
|
||
auth: {
|
||
signIn: {
|
||
welcome: "Welcome 👋",
|
||
email: "Email",
|
||
emailPlaceholder: "karim@email.com",
|
||
password: "Password",
|
||
passwordPlaceholder: "••••••••",
|
||
keepSignedIn: "Keep me signed in",
|
||
signingIn: "Signing in…",
|
||
signInBtn: "Sign In",
|
||
signInGoogle: "Sign in with Google",
|
||
forgotPassword: "Forgot password?",
|
||
noAccount: "Don't have an account? ",
|
||
signUpLink: "Sign up",
|
||
carAlt: "Car",
|
||
reset: {
|
||
title: "Reset password",
|
||
requestBody:
|
||
"Enter your email and we'll send you a 6-digit reset code.",
|
||
emailPlaceholder: "karim@email.com",
|
||
sending: "Sending…",
|
||
sendCode: "Send Code",
|
||
newPassTitle: "Enter new password",
|
||
resetBody: "We've sent a reset code to {email}",
|
||
devBanner:
|
||
"Email delivery is not configured on this server. Your reset code is ",
|
||
newPassLabel: "New password",
|
||
newPasswordPlaceholder: "••••••••",
|
||
resetting: "Resetting…",
|
||
resetBtn: "Reset Password",
|
||
},
|
||
alertMissingTitle: "Missing information",
|
||
alertMissingBody: "Enter both your email and your password.",
|
||
alertErrorTitle: "Error",
|
||
alertErrorFallback: "Could not sign in. Please try again.",
|
||
errEmail: "Enter your email address.",
|
||
errCode: "Enter the 6-digit code.",
|
||
errPassword: "Password must be at least 8 characters.",
|
||
errReset: "Could not reset your password. Please try again.",
|
||
},
|
||
signUp: {
|
||
createAccount: "Create Your Account",
|
||
howUse: "How will you use Waseel?",
|
||
riderTitle: "I need a ride",
|
||
riderDesc: "Book rides and get where you're going",
|
||
driverTitle: "I want to drive",
|
||
driverDesc: "Offer rides and earn money with your car",
|
||
carAlt: "Car",
|
||
name: "Name",
|
||
namePlaceholder: "Karim Haddad",
|
||
email: "Email",
|
||
emailPlaceholder: "karim@email.com",
|
||
phoneOptional: "Phone (optional)",
|
||
phonePlaceholder: "70 123 456",
|
||
password: "Password",
|
||
passwordPlaceholder: "••••••••",
|
||
signUpBtn: "Sign Up",
|
||
signUpGoogle: "Sign up with Google",
|
||
haveAccount: "Already have an account? ",
|
||
signInLink: "Sign in",
|
||
verify: {
|
||
title: "Verification",
|
||
body: "We've sent a verification code to {email}",
|
||
devBanner:
|
||
"Email delivery is not configured on this server. Your verification code is ",
|
||
verifying: "Verifying…",
|
||
verifyBtn: "Verify Email",
|
||
checkAlt: "Check",
|
||
},
|
||
verified: {
|
||
title: "Verified",
|
||
body: "You've successfully verified your account.",
|
||
},
|
||
alertMissingTitle: "Missing information",
|
||
alertMissingBody: "Please fill in your name, email and password.",
|
||
alertPhoneTitle: "Invalid phone number",
|
||
alertPhoneBody: "Enter a valid Lebanese number, e.g. 70 123 456.",
|
||
alertErrorTitle: "Error",
|
||
alertErrorFallback: "Could not create your account.",
|
||
errCode: "Enter the 6-digit code.",
|
||
errVerify: "Verification failed. Please try again.",
|
||
},
|
||
role: {
|
||
title: "How will you use Waseel?",
|
||
subtitle: "You can change this later by contacting support.",
|
||
riderTitle: "I'm a Rider",
|
||
riderDesc: "Book rides and get around Lebanon",
|
||
driverTitle: "I'm a Driver",
|
||
driverDesc: "Give rides and earn money",
|
||
alertErrorTitle: "Error",
|
||
alertErrorBody: "Could not save your choice. Please try again.",
|
||
},
|
||
},
|
||
|
||
home: {
|
||
welcome: "Welcome {name} 👋",
|
||
logoutAlt: "Logout",
|
||
currentLocation: "Your Current Location",
|
||
findingLocation: "Finding your location…",
|
||
whatNeed: "What do you need?",
|
||
recentRides: "Recent Rides",
|
||
noRecent: "No recent rides found.",
|
||
noRecentAlt: "No recent rides found",
|
||
},
|
||
|
||
rides: {
|
||
allRides: "All rides",
|
||
noRecent: "No recent rides found.",
|
||
noRecentAlt: "No recent rides found",
|
||
},
|
||
|
||
tabs: {
|
||
home: "Home",
|
||
rides: "Rides",
|
||
chat: "Chat",
|
||
profile: "Profile",
|
||
settings: "Settings",
|
||
},
|
||
|
||
chat: {
|
||
title: "Chat",
|
||
messageAlt: "message",
|
||
noMessages: "No Messages Yet",
|
||
startConversation: "Start a conversation with your friends and family",
|
||
},
|
||
|
||
profile: {
|
||
title: "My Profile",
|
||
avatarAlt: "Your Avatar",
|
||
firstName: "First name",
|
||
firstNamePlaceholder: "Your First name",
|
||
lastName: "Last name",
|
||
lastNamePlaceholder: "Your Last name",
|
||
email: "Email",
|
||
emailPlaceholder: "Your Email address",
|
||
},
|
||
|
||
findRide: {
|
||
title: "Ride",
|
||
from: "From",
|
||
to: "To",
|
||
findNow: "Find now",
|
||
},
|
||
|
||
confirmRide: {
|
||
title: "Request Ride",
|
||
yourTrip: "Your trip",
|
||
pickup: "Pickup",
|
||
destination: "Destination",
|
||
tripTime: "Trip time {time}",
|
||
paymentMethod: "Payment Method",
|
||
cash: "💵 Cash",
|
||
card: "💳 Card",
|
||
fareDisplay: "${fare}",
|
||
lbpEstimate: "≈ {lbp}",
|
||
noDrivers: "No {service} drivers online right now",
|
||
findingDrivers: "Finding drivers nearby…",
|
||
nearestDriver: "Nearest driver ≈ {eta} min away",
|
||
requesting: "Requesting…",
|
||
noDriversOnline: "No drivers online",
|
||
requestCash: "Request Ride · Pay cash to driver",
|
||
requestCard: "Request Ride · Pay by card",
|
||
alertMissingRouteTitle: "Missing route",
|
||
alertMissingRouteBody: "Please set a pickup and destination first.",
|
||
alertNoEstimateTitle: "No estimate",
|
||
alertNoEstimateBody: "We couldn't estimate this fare. Please try again.",
|
||
alertErrorTitle: "Error",
|
||
alertErrorFallback:
|
||
"Something went wrong while booking your ride. Please try again.",
|
||
alertPayCardTitle: "Pay by card",
|
||
alertPayCardBody: "Your card will be charged ${fare}.",
|
||
},
|
||
|
||
bookRide: {
|
||
status: {
|
||
requested: "Finding your driver…",
|
||
accepted: "Driver assigned — heading to you",
|
||
enRoute: "On your trip",
|
||
completed: "You've arrived!",
|
||
cancelled: "Ride cancelled",
|
||
},
|
||
rideNotFound: "Ride not found.",
|
||
couldNotLoad: "Could not load this ride.",
|
||
backHome: "Back Home",
|
||
matchingDriver: "We're matching you with the nearest {service} driver.",
|
||
ratingFallback: "—",
|
||
paymentCash: "💵 Cash to driver",
|
||
paymentCard: "💳 Paid by card",
|
||
fare: "Fare: ${fare}",
|
||
tripTime: "Trip time {time}",
|
||
rideCancelled: "This ride was cancelled.",
|
||
cancelRide: "Cancel Ride",
|
||
cancelling: "Cancelling…",
|
||
alertErrorTitle: "Error",
|
||
alertErrorBody: "Could not cancel this ride. Please try again.",
|
||
},
|
||
|
||
driver: {
|
||
home: {
|
||
signOutAlt: "Sign out",
|
||
driverMode: "Driver mode",
|
||
online: "● Online — receiving ride requests",
|
||
goOnline: "○ Go online to drive",
|
||
todaysEarnings: "Today's earnings",
|
||
completedToday: "Completed today",
|
||
incomingRequests: "Incoming requests",
|
||
incomingRequestsOffline: "Incoming requests (offline)",
|
||
waitingRequests: "Waiting for ride requests…",
|
||
goOnlineStart: "Go online to start driving.",
|
||
welcome: "Welcome, {name}",
|
||
welcomeFallback: "driver",
|
||
setupIntro:
|
||
"Set up your driver profile to start receiving ride requests.",
|
||
whatDrive: "What will you drive?",
|
||
carModel: "Car model",
|
||
carModelPlaceholder: "e.g. Toyota Camry",
|
||
carSeats: "Car seats",
|
||
carSeatsPlaceholder: "4",
|
||
saving: "Saving…",
|
||
startDriving: "Start driving",
|
||
alertSeatsTitle: "Invalid seats",
|
||
alertSeatsBody: "Car seats must be a whole number 1–8.",
|
||
alertErrorTitle: "Error",
|
||
alertCreateBody:
|
||
"Could not create your driver profile. Please try again.",
|
||
alertToggleBody: "Could not change your status. Please try again.",
|
||
noRequestsAlt: "No recent rides found",
|
||
},
|
||
offerCard: {
|
||
newRequest: "New request · {service}",
|
||
cash: "💵 Cash",
|
||
card: "💳 Card",
|
||
fromAlt: "From",
|
||
toAlt: "To",
|
||
tripTime: "Trip time",
|
||
fare: "Fare",
|
||
decline: "Decline",
|
||
accept: "Accept",
|
||
},
|
||
activeRide: {
|
||
headToPickup: "Head to pickup",
|
||
tripInProgress: "Trip in progress",
|
||
rider: "{name}",
|
||
fromAlt: "From",
|
||
toAlt: "To",
|
||
fare: "Fare",
|
||
startTrip: "Start trip",
|
||
completeTrip: "Complete trip",
|
||
alertErrorTitle: "Error",
|
||
alertAcceptBody:
|
||
"Could not accept this ride. It may have been taken or expired.",
|
||
alertDeclineBody: "Could not decline this ride. Please try again.",
|
||
alertUpdateBody: "Could not update the ride. Please try again.",
|
||
},
|
||
},
|
||
|
||
services: {
|
||
car: { label: "Car", tagline: "An everyday ride, up to 4 seats." },
|
||
moto: {
|
||
label: "Moto",
|
||
tagline: "Beat the traffic — one passenger, no luggage.",
|
||
},
|
||
courier: {
|
||
label: "Courier",
|
||
tagline: "Send a parcel across town without riding along.",
|
||
},
|
||
chauffeur: {
|
||
label: "My Car",
|
||
tagline: "A driver comes to you and drives your own car.",
|
||
},
|
||
},
|
||
|
||
pois: {
|
||
nearbyTitle: "Nearby suggestions",
|
||
mall: "Mall",
|
||
hospital: "Hospital",
|
||
pharmacy: "Pharmacy",
|
||
restaurant: "Restaurant",
|
||
searching: "searching…",
|
||
noneNearby: "none nearby",
|
||
kmAway: "{km} km away",
|
||
routeAway: "{km} km · {min} min",
|
||
nearbyPlace: "Nearby place",
|
||
},
|
||
|
||
units: {
|
||
min: { zero: "0 min", one: "{n} min", other: "{n} min" },
|
||
h: "{n}h",
|
||
m: "{n}m",
|
||
hoursMinutes: "{h}h {m}m",
|
||
seats: { zero: "{n} seats", one: "{n} seat", other: "{n} seats" },
|
||
lbpSuffix: " L.B.P.",
|
||
},
|
||
|
||
months: {
|
||
jan: "Jan",
|
||
feb: "Feb",
|
||
mar: "Mar",
|
||
apr: "Apr",
|
||
may: "May",
|
||
jun: "Jun",
|
||
jul: "Jul",
|
||
aug: "Aug",
|
||
sep: "Sep",
|
||
oct: "Oct",
|
||
nov: "Nov",
|
||
dec: "Dec",
|
||
},
|
||
|
||
components: {
|
||
oauth: {
|
||
or: "Or",
|
||
googleLogoAlt: "Google logo",
|
||
alertFailTitle: "Google sign-in failed",
|
||
alertFailNoToken: "No token returned. Try again.",
|
||
alertFailFallback: "Please try again.",
|
||
},
|
||
otp: {
|
||
code: "Code",
|
||
codePlaceholder: "123456",
|
||
pasteCode: "Paste code from Gmail",
|
||
},
|
||
googleTextInput: {
|
||
searchAlt: "Search",
|
||
placeholder: "Where do you want to go?",
|
||
},
|
||
inputField: {
|
||
labelIconAlt: "{label} icon",
|
||
},
|
||
locationNotice: {
|
||
denied: {
|
||
title: "Location access is off",
|
||
body: "Waseel needs your location to show nearby drivers and set your pickup point.",
|
||
action: "Open Settings",
|
||
},
|
||
servicesOff: {
|
||
title: "Location services are off",
|
||
body: "Turn on location on your device, then try again.",
|
||
action: "Try Again",
|
||
},
|
||
unavailable: {
|
||
title: "Couldn't find your location",
|
||
body: "Move somewhere with a clearer signal, or set your pickup point manually.",
|
||
action: "Try Again",
|
||
},
|
||
},
|
||
map: {
|
||
destination: "Destination",
|
||
webUnavailable:
|
||
"Map is not available on web.\nRun on Android/iOS for the full experience.",
|
||
},
|
||
rideCard: {
|
||
mapAlt: "Map",
|
||
originAlt: "Origin",
|
||
destinationAlt: "Destination",
|
||
dateTime: "Date & Time",
|
||
driver: "Driver",
|
||
carSeats: "Car Seats",
|
||
fare: "Fare",
|
||
paymentStatus: "Payment Status",
|
||
paymentCash: "Cash · Pay to driver",
|
||
paymentPaid: "Paid by card",
|
||
paymentOther: "{status}",
|
||
},
|
||
rideLayout: {
|
||
goBack: "Go Back",
|
||
backArrowAlt: "Back arrow",
|
||
},
|
||
payment: {
|
||
paymentMethod: "Payment Method",
|
||
cash: "💵 Cash",
|
||
card: "💳 Card",
|
||
processing: "Processing...",
|
||
bookCash: "Book ride · Pay cash to driver",
|
||
confirmCard: "Confirm & Pay by Card",
|
||
checkAlt: "Check",
|
||
rideBooked: "Ride Booked!",
|
||
successBody:
|
||
"Thank you for your booking.\n Your reservation has been placed.\n",
|
||
cashInstruction: "Please have {lbp} ready.",
|
||
backHome: "Back Home",
|
||
alertPayCardTitle: "Pay by card",
|
||
alertPayCardBody: "Your card will be charged ${amount}.",
|
||
alertErrorTitle: "Error",
|
||
alertErrorBody:
|
||
"Something went wrong while booking your ride. Please try again.",
|
||
alertPaymentNotCompletedTitle: "Payment not completed",
|
||
alertPaymentNotCompletedBody:
|
||
"Your payment was cancelled or could not be verified. Please try again.",
|
||
alertProcessingTitle: "Error",
|
||
alertProcessingBody:
|
||
"Something went wrong while processing your payment. Please try again.",
|
||
},
|
||
driverCard: {
|
||
avatarAlt: "Driver Avatar",
|
||
starAlt: "Star",
|
||
dollarAlt: "Dollar",
|
||
carAlt: "Car",
|
||
seats: "{n} seats",
|
||
},
|
||
},
|
||
|
||
settings: {
|
||
title: "Settings",
|
||
maps: {
|
||
title: "Maps & Navigation",
|
||
description:
|
||
"Waseel uses your location to show nearby drivers and navigate to your pickup.",
|
||
statusGranted: "Granted",
|
||
statusDenied: "Not allowed",
|
||
statusBlocked: "Blocked",
|
||
statusUnknown: "Checking…",
|
||
openSettings: "Open Settings",
|
||
},
|
||
appearance: {
|
||
title: "Appearance",
|
||
description: "Choose how Waseel looks.",
|
||
light: "Light",
|
||
dark: "Dark",
|
||
system: "System",
|
||
},
|
||
safety: {
|
||
title: "Safety",
|
||
call112: "Call 112 — Emergency",
|
||
call112Description:
|
||
"Call Lebanon's emergency number for law enforcement, ambulance, or fire.",
|
||
callFailedTitle: "Could not place a call",
|
||
callFailedBody:
|
||
"No dialer is available on this device. Call 112 manually.",
|
||
proactive: {
|
||
title: "Proactive safety",
|
||
body: "Share your trip status and live location with trusted contacts, and ride with confidence knowing help is one tap away.",
|
||
},
|
||
verification: {
|
||
title: "Passenger verification",
|
||
body: "Riders and drivers verify their phone number and identity, so you always know who you're riding with.",
|
||
},
|
||
privacy: {
|
||
title: "Protecting your privacy",
|
||
body: "Your phone number and contact details stay hidden in chat. Messages are visible only between you and your driver for this ride.",
|
||
},
|
||
},
|
||
language: {
|
||
title: "Language",
|
||
description: "App language.",
|
||
en: "English",
|
||
ar: "العربية",
|
||
fr: "Français",
|
||
rtlRestartTitle: "Restart for Arabic",
|
||
rtlRestartBody:
|
||
"Arabic layout will apply fully the next time you open the app.",
|
||
},
|
||
keepAwake: {
|
||
title: "Do not lock screen",
|
||
description: "Keep the display on while the app is open.",
|
||
},
|
||
overlay: {
|
||
title: "Display over other apps",
|
||
description:
|
||
"Required so incoming ride alerts can appear over other apps.",
|
||
allow: "Allow display over other apps",
|
||
openedHint: "Opened system settings",
|
||
notAndroid: "Only available on Android.",
|
||
},
|
||
},
|
||
};
|