Replace entire repo content with code from /root/shahikitchen-google/
This commit is contained in:
@@ -0,0 +1,210 @@
|
||||
import type { Language } from '@/domain/language/entities';
|
||||
import type { EventTypeId } from '@/domain/booking/event-types';
|
||||
import type { BookingMessageCopy } from '@/application/messaging/whatsapp-message-builder';
|
||||
|
||||
const EVENT_LABELS_EN: Record<EventTypeId, string> = {
|
||||
birthday: 'Birthday',
|
||||
wedding: 'Wedding / Walima',
|
||||
engagement: 'Engagement / Nikah',
|
||||
anniversary: 'Anniversary',
|
||||
'baby-shower': 'Baby Shower',
|
||||
graduation: 'Graduation',
|
||||
'office-party': 'Office Party',
|
||||
'corporate-lunch': 'Corporate Lunch',
|
||||
'family-gathering': 'Family Gathering',
|
||||
'religious-celebration': 'Eid, Diwali & Festivals',
|
||||
farewell: 'Farewell Party',
|
||||
retirement: 'Retirement',
|
||||
'bridal-shower': 'Bridal Shower',
|
||||
'holiday-party': 'Holiday Party',
|
||||
other: 'Other Celebration',
|
||||
};
|
||||
|
||||
const EVENT_LABELS_SV: Record<EventTypeId, string> = {
|
||||
birthday: 'Födelsedag',
|
||||
wedding: 'Bröllop / Walima',
|
||||
engagement: 'Förlovning / Nikah',
|
||||
anniversary: 'Årsdag',
|
||||
'baby-shower': 'Babyshower',
|
||||
graduation: 'Examensfest',
|
||||
'office-party': 'Kontorsfest',
|
||||
'corporate-lunch': 'Företagslunch',
|
||||
'family-gathering': 'Familjesammankomst',
|
||||
'religious-celebration': 'Eid, Diwali & högtider',
|
||||
farewell: 'Avskedsfest',
|
||||
retirement: 'Pensionering',
|
||||
'bridal-shower': 'Möhippa',
|
||||
'holiday-party': 'Helgfest',
|
||||
other: 'Annat firande',
|
||||
};
|
||||
|
||||
const LOCALIZED: Partial<Record<Language, Record<EventTypeId, string>>> = {
|
||||
sv: EVENT_LABELS_SV,
|
||||
};
|
||||
|
||||
export interface BookingEventsCopy {
|
||||
heroBadge: string;
|
||||
heroTitle: string;
|
||||
heroSubtitle: string;
|
||||
experienceDiningTitle: string;
|
||||
experienceDiningDesc: string;
|
||||
experienceCelebrateTitle: string;
|
||||
experienceCelebrateDesc: string;
|
||||
experienceCorporateTitle: string;
|
||||
experienceCorporateDesc: string;
|
||||
modeTable: string;
|
||||
modeTableDesc: string;
|
||||
modeEvent: string;
|
||||
modeEventDesc: string;
|
||||
eventPickerTitle: string;
|
||||
eventPickerSubtitle: string;
|
||||
eventTypeOtherLabel: string;
|
||||
eventTypeOtherPlaceholder: string;
|
||||
eventTypeRequired: string;
|
||||
eventTypeOtherRequired: string;
|
||||
formSubtitleTable: string;
|
||||
formSubtitleEvent: string;
|
||||
whatsappEventLine: string;
|
||||
whatsappModeTable: string;
|
||||
whatsappModeEvent: string;
|
||||
whatsappGreeting: string;
|
||||
whatsappLabelName: string;
|
||||
whatsappLabelPhone: string;
|
||||
whatsappLabelEmail: string;
|
||||
whatsappLabelLocation: string;
|
||||
whatsappLabelDate: string;
|
||||
whatsappLabelTime: string;
|
||||
whatsappLabelGuests: string;
|
||||
whatsappLabelNotes: string;
|
||||
whatsappLabelPreOrder: string;
|
||||
whatsappPreOrderNone: string;
|
||||
whatsappPreOrderTotal: string;
|
||||
whatsappConfirmLine: string;
|
||||
whatsappThanksLine: string;
|
||||
}
|
||||
|
||||
const COPY_EN: BookingEventsCopy = {
|
||||
heroBadge: 'Dine • Celebrate • Gather',
|
||||
heroTitle: 'Reserve a Table or Book Your Event',
|
||||
heroSubtitle:
|
||||
'From an intimate dinner for two to birthdays, weddings, engagements, and office celebrations — Shahi Kitchen sets the stage for unforgettable moments in Gothenburg.',
|
||||
experienceDiningTitle: 'Intimate Dining',
|
||||
experienceDiningDesc: 'Quiet tables, warm hospitality, and your favourite Shahi dishes.',
|
||||
experienceCelebrateTitle: 'Life Celebrations',
|
||||
experienceCelebrateDesc: 'Birthdays, engagements, weddings, anniversaries & milestones.',
|
||||
experienceCorporateTitle: 'Teams & Offices',
|
||||
experienceCorporateDesc: 'Lunches, farewells, team outings & corporate gatherings.',
|
||||
modeTable: 'Table Reservation',
|
||||
modeTableDesc: 'Book a table for dining',
|
||||
modeEvent: 'Private Event',
|
||||
modeEventDesc: 'Birthdays, weddings & more',
|
||||
eventPickerTitle: 'What are you celebrating?',
|
||||
eventPickerSubtitle: 'Choose your occasion — we tailor seating, menu ideas, and setup to your event.',
|
||||
eventTypeOtherLabel: 'Describe your celebration',
|
||||
eventTypeOtherPlaceholder: 'e.g. Engagement dinner, company awards night…',
|
||||
eventTypeRequired: 'Please select an event type.',
|
||||
eventTypeOtherRequired: 'Please describe your celebration.',
|
||||
formSubtitleTable: 'Tell us when you would like to dine with us.',
|
||||
formSubtitleEvent: 'Share your event details — our team will craft a memorable Shahi experience.',
|
||||
whatsappEventLine: 'Occasion',
|
||||
whatsappModeTable: 'Table reservation',
|
||||
whatsappModeEvent: 'Private event booking',
|
||||
whatsappGreeting: 'Hello Shahi Kitchen 👋',
|
||||
whatsappLabelName: 'Name',
|
||||
whatsappLabelPhone: 'Phone',
|
||||
whatsappLabelEmail: 'Email',
|
||||
whatsappLabelLocation: 'Location',
|
||||
whatsappLabelDate: 'Date',
|
||||
whatsappLabelTime: 'Time',
|
||||
whatsappLabelGuests: 'Guests',
|
||||
whatsappLabelNotes: 'Special Requests',
|
||||
whatsappLabelPreOrder: 'Pre-ordered items',
|
||||
whatsappPreOrderNone: 'None',
|
||||
whatsappPreOrderTotal: 'Pre-order total',
|
||||
whatsappConfirmLine: 'Please confirm availability and pre-order.',
|
||||
whatsappThanksLine: 'Thank you!',
|
||||
};
|
||||
|
||||
const COPY_SV: BookingEventsCopy = {
|
||||
...COPY_EN,
|
||||
heroBadge: 'Ät • Fira • Samla',
|
||||
heroTitle: 'Boka bord eller boka ditt evenemang',
|
||||
heroSubtitle:
|
||||
'Från en intim middag till födelsedagar, bröllop, förlovningar och kontorsfester — Shahi Kitchen skapar oförglömliga stunder i Göteborg.',
|
||||
experienceDiningTitle: 'Intim middag',
|
||||
experienceDiningDesc: 'Lugna bord, varm gästfrihet och dina Shahi-favoriter.',
|
||||
experienceCelebrateTitle: 'Livets firanden',
|
||||
experienceCelebrateDesc: 'Födelsedagar, förlovningar, bröllop, jubileum & milstolpar.',
|
||||
experienceCorporateTitle: 'Team & kontor',
|
||||
experienceCorporateDesc: 'Luncher, avsked, teamutflykter & företagssammankomster.',
|
||||
modeTable: 'Bordsbokning',
|
||||
modeTableDesc: 'Boka bord för middag',
|
||||
modeEvent: 'Privat evenemang',
|
||||
modeEventDesc: 'Födelsedagar, bröllop & mer',
|
||||
eventPickerTitle: 'Vad firar ni?',
|
||||
eventPickerSubtitle: 'Välj tillfälle — vi anpassar plats, menyidéer och upplägg till ert event.',
|
||||
eventTypeOtherLabel: 'Beskriv ert firande',
|
||||
eventTypeOtherPlaceholder: 't.ex. förlovningsmiddag, företagsgalan…',
|
||||
eventTypeRequired: 'Välj en typ av evenemang.',
|
||||
eventTypeOtherRequired: 'Beskriv ert firande.',
|
||||
formSubtitleTable: 'Berätta när ni vill äta hos oss.',
|
||||
formSubtitleEvent: 'Dela eventdetaljer — vårt team skapar en minnesvärd Shahi-upplevelse.',
|
||||
whatsappEventLine: 'Tillfälle',
|
||||
whatsappModeTable: 'Bordsbokning',
|
||||
whatsappModeEvent: 'Bokning av privat evenemang',
|
||||
whatsappGreeting: 'Hej Shahi Kitchen 👋',
|
||||
whatsappLabelName: 'Namn',
|
||||
whatsappLabelPhone: 'Telefon',
|
||||
whatsappLabelEmail: 'E-post',
|
||||
whatsappLabelLocation: 'Plats',
|
||||
whatsappLabelDate: 'Datum',
|
||||
whatsappLabelTime: 'Tid',
|
||||
whatsappLabelGuests: 'Gäster',
|
||||
whatsappLabelNotes: 'Särskilda önskemål',
|
||||
whatsappLabelPreOrder: 'Förbeställda rätter',
|
||||
whatsappPreOrderNone: 'Inga',
|
||||
whatsappPreOrderTotal: 'Förbeställning totalt',
|
||||
whatsappConfirmLine: 'Vänligen bekräfta tillgänglighet och förbeställning.',
|
||||
whatsappThanksLine: 'Tack!',
|
||||
};
|
||||
|
||||
const COPY_LOCALIZED: Partial<Record<Language, BookingEventsCopy>> = {
|
||||
sv: COPY_SV,
|
||||
};
|
||||
|
||||
export function getBookingEventsCopy(lang: Language): BookingEventsCopy {
|
||||
if (lang === 'en') return COPY_EN;
|
||||
return COPY_LOCALIZED[lang] ?? COPY_EN;
|
||||
}
|
||||
|
||||
export function getEventTypeLabel(lang: Language, id: EventTypeId): string {
|
||||
if (lang === 'en') return EVENT_LABELS_EN[id];
|
||||
return LOCALIZED[lang]?.[id] ?? EVENT_LABELS_EN[id];
|
||||
}
|
||||
|
||||
export function toBookingMessageCopy(
|
||||
copy: BookingEventsCopy,
|
||||
location: { askim: string; backaplan: string },
|
||||
): BookingMessageCopy {
|
||||
return {
|
||||
askim: location.askim,
|
||||
backaplan: location.backaplan,
|
||||
modeTable: copy.whatsappModeTable,
|
||||
modeEvent: copy.whatsappModeEvent,
|
||||
eventLine: copy.whatsappEventLine,
|
||||
greeting: copy.whatsappGreeting,
|
||||
labelName: copy.whatsappLabelName,
|
||||
labelPhone: copy.whatsappLabelPhone,
|
||||
labelEmail: copy.whatsappLabelEmail,
|
||||
labelLocation: copy.whatsappLabelLocation,
|
||||
labelDate: copy.whatsappLabelDate,
|
||||
labelTime: copy.whatsappLabelTime,
|
||||
labelGuests: copy.whatsappLabelGuests,
|
||||
labelNotes: copy.whatsappLabelNotes,
|
||||
labelPreOrder: copy.whatsappLabelPreOrder,
|
||||
preOrderNone: copy.whatsappPreOrderNone,
|
||||
preOrderTotal: copy.whatsappPreOrderTotal,
|
||||
confirmLine: copy.whatsappConfirmLine,
|
||||
thanksLine: copy.whatsappThanksLine,
|
||||
};
|
||||
}
|
||||
@@ -18,6 +18,9 @@ export const arTranslations = {
|
||||
title: 'احجز طاولتك',
|
||||
subtitle: 'احجز طاولة في أسكيم أو باكابلان. اطلب مسبقاً أطباقك المفضلة من القائمة الكاملة لتجربة سلسة.',
|
||||
formTitle: 'تفاصيل الحجز',
|
||||
signInRequiredTitle: 'سجّل الدخول للمتابعة',
|
||||
signInRequiredSubtitle: 'سجّل الدخول عبر Google لمتابعة حجزك.',
|
||||
signedInAs: 'تم تسجيل الدخول كـ',
|
||||
locationLabel: 'الفرع',
|
||||
locationPlaceholder: 'اختر الفرع',
|
||||
dateLabel: 'التاريخ',
|
||||
@@ -236,14 +239,32 @@ export const arTranslations = {
|
||||
remove: 'إزالة',
|
||||
inquiryModalTitlePickup: 'استفسار الاستلام',
|
||||
inquiryModalTitleDelivery: 'استفسار التوصيل للمنزل',
|
||||
signInRequiredTitle: 'سجّل الدخول للمتابعة',
|
||||
signInRequiredSubtitle: 'سجّل الدخول عبر Google لإرسال استفسار الاستلام أو التوصيل.',
|
||||
signedInAs: 'تم تسجيل الدخول كـ',
|
||||
nameLabel: 'الاسم الكامل',
|
||||
namePlaceholder: 'اسمك',
|
||||
emailLabel: 'البريد الإلكتروني',
|
||||
emailPlaceholder: 'your@email.com',
|
||||
emailRequired: 'يرجى تسجيل الدخول لاستخدام بريد Google الخاص بك.',
|
||||
phoneLabel: 'رقم الهاتف',
|
||||
phonePlaceholder: '+46 70 123 4567',
|
||||
addressLabel: 'عنوان التوصيل',
|
||||
branchLabel: 'فرع المطعم',
|
||||
branchPlaceholder: 'اختر الفرع',
|
||||
branchAskim: 'Askim',
|
||||
branchBackaplan: 'Backaplan',
|
||||
branchRequired: 'يرجى اختيار فرع.',
|
||||
askimOnlineUnavailable: 'قريباً، هذا الفرع لا يوصل عبر الإنترنت بعد',
|
||||
addressLabel: 'عنوان التوصيل (اختياري)',
|
||||
addressPlaceholder: 'الشارع، الرمز البريدي، المدينة…',
|
||||
preferredTimeLabel: 'وقت التوصيل المفضل',
|
||||
preferredTimePlaceholder: 'مثلاً اليوم 18:00',
|
||||
preferredDateLabel: 'التاريخ المفضل (اختياري)',
|
||||
preferredDatePlaceholder: 'اختر التاريخ',
|
||||
dateToday: 'اليوم',
|
||||
dateTomorrow: 'غداً',
|
||||
preferredTimeLabel: 'الوقت المفضل (اختياري)',
|
||||
scheduleOptionalHint: 'اختياري: اختر اليوم أو غداً. إذا اخترت اليوم، يجب أن يكون الوقت بعد 30 دقيقة على الأقل من الآن.',
|
||||
scheduleIncomplete: 'يرجى اختيار التاريخ والوقت معاً، أو تركهما فارغين.',
|
||||
scheduleTooSoon: 'يرجى اختيار وقت بعد 30 دقيقة على الأقل من الآن.',
|
||||
submitPickup: 'إرسال عبر واتساب',
|
||||
submitDelivery: 'إرسال عبر واتساب',
|
||||
inquiryCancel: 'إلغاء',
|
||||
@@ -256,8 +277,11 @@ export const arTranslations = {
|
||||
inquiryDeliveryIntro: 'مرحباً! أود طلب توصيل للمنزل:',
|
||||
messageTotal: 'الإجمالي',
|
||||
messageName: 'الاسم',
|
||||
messageEmail: 'البريد الإلكتروني',
|
||||
messagePhone: 'الهاتف',
|
||||
messageBranch: 'الفرع',
|
||||
messageAddress: 'العنوان',
|
||||
messagePreferredDate: 'التاريخ المفضل',
|
||||
messagePreferredTime: 'الوقت المفضل',
|
||||
deliverySwishNote: 'سأرسل تأكيد الدفع عبر Swish هنا بعد تأكيد الطلب.',
|
||||
},
|
||||
@@ -275,8 +299,24 @@ export const arTranslations = {
|
||||
continueBrowsing: 'متابعة التصفح',
|
||||
},
|
||||
|
||||
// Authentication / Staff Login Page (fully translated, placeholder only)
|
||||
auth: {
|
||||
tabs: { customer: 'عميل', staff: 'موظف' },
|
||||
customer: {
|
||||
badge: 'بوابة العملاء',
|
||||
title: 'دخول العملاء',
|
||||
subtitle: 'سجّل الدخول بحساب Google للوصول إلى ملفك في مطبخ شاهي.',
|
||||
signInWithGoogle: 'المتابعة مع Google',
|
||||
footerNote: 'المزيد من ميزات العملاء قريباً.',
|
||||
notConfigured: 'تسجيل الدخول عبر Google غير مُعدّ بعد.',
|
||||
googleDenied: 'تم إلغاء تسجيل الدخول عبر Google. حاول مرة أخرى.',
|
||||
googleFailed: 'تعذّر تسجيل الدخول عبر Google. حاول مرة أخرى.',
|
||||
loading: 'جارٍ تحميل حسابك…',
|
||||
welcomeTitle: 'مرحباً بك في مطبخ شاهي',
|
||||
welcomeSubtitle: 'تم تسجيل دخولك بنجاح. المزيد من الميزات قريباً.',
|
||||
loggedInAs: 'أنت مسجّل الدخول كـ',
|
||||
logout: 'تسجيل الخروج',
|
||||
menuManagement: 'إدارة القائمة',
|
||||
},
|
||||
title: 'دخول الموظفين',
|
||||
subtitle: 'وصول آمن لأعضاء فريق مطبخ شاهي في فروعنا',
|
||||
usernameLabel: 'اسم المستخدم',
|
||||
@@ -289,6 +329,7 @@ export const arTranslations = {
|
||||
backaplan: 'باكابلان',
|
||||
submit: 'تسجيل الدخول',
|
||||
submitting: 'جارٍ تسجيل الدخول...',
|
||||
accessDenied: 'تم رفض الوصول. يرجى الاتصال بالمسؤول.',
|
||||
construction: {
|
||||
title: 'نظام المصادقة قيد الإنشاء',
|
||||
message: 'نظام دخول الموظفين قيد التطوير حالياً. خدمة المصادقة الخلفية غير متاحة بعد. يرجى المحاولة لاحقاً. للمساعدة الفورية في الطلبات أو الحجوزات، تواصل مع المطعم مباشرة عبر الهاتف أو واتساب.',
|
||||
|
||||
@@ -18,6 +18,9 @@ export const trTranslations = {
|
||||
title: 'Masanızı Rezerve Edin',
|
||||
subtitle: 'Askim veya Backaplan\'da masa ayırtın. Sorunsuz bir deneyim için tam menüden favorilerinizi önceden sipariş edin.',
|
||||
formTitle: 'Rezervasyon Bilgileriniz',
|
||||
signInRequiredTitle: 'Devam etmek için giriş yapın',
|
||||
signInRequiredSubtitle: 'Rezervasyonunuza devam etmek için Google ile giriş yapın.',
|
||||
signedInAs: 'Şu hesapla giriş yapıldı:',
|
||||
locationLabel: 'Şube',
|
||||
locationPlaceholder: 'Şube seçin',
|
||||
dateLabel: 'Tarih',
|
||||
@@ -236,14 +239,32 @@ export const trTranslations = {
|
||||
remove: 'Kaldır',
|
||||
inquiryModalTitlePickup: 'Gel-al sorgusu',
|
||||
inquiryModalTitleDelivery: 'Ev teslimatı sorgusu',
|
||||
signInRequiredTitle: 'Devam etmek için giriş yapın',
|
||||
signInRequiredSubtitle: 'Teslim alma veya teslimat talebinizi göndermek için Google ile giriş yapın.',
|
||||
signedInAs: 'Şu hesapla giriş yapıldı:',
|
||||
nameLabel: 'Ad soyad',
|
||||
namePlaceholder: 'Adınız',
|
||||
emailLabel: 'E-posta',
|
||||
emailPlaceholder: 'eposta@ornek.com',
|
||||
emailRequired: 'Google e-postanızı kullanabilmemiz için lütfen giriş yapın.',
|
||||
phoneLabel: 'Telefon numarası',
|
||||
phonePlaceholder: '+46 70 123 4567',
|
||||
addressLabel: 'Teslimat adresi',
|
||||
branchLabel: 'Restoran şubesi',
|
||||
branchPlaceholder: 'Şube seçin',
|
||||
branchAskim: 'Askim',
|
||||
branchBackaplan: 'Backaplan',
|
||||
branchRequired: 'Lütfen bir şube seçin.',
|
||||
askimOnlineUnavailable: 'Yakında, bu şube henüz online teslimat yapmıyor',
|
||||
addressLabel: 'Teslimat adresi (isteğe bağlı)',
|
||||
addressPlaceholder: 'Sokak, posta kodu, şehir…',
|
||||
preferredTimeLabel: 'Tercih edilen teslimat saati',
|
||||
preferredTimePlaceholder: 'ör. Bugün 18:00',
|
||||
preferredDateLabel: 'Tercih edilen tarih (isteğe bağlı)',
|
||||
preferredDatePlaceholder: 'Tarih seçin',
|
||||
dateToday: 'Bugün',
|
||||
dateTomorrow: 'Yarın',
|
||||
preferredTimeLabel: 'Tercih edilen saat (isteğe bağlı)',
|
||||
scheduleOptionalHint: 'İsteğe bağlı: bugün veya yarın seçin. Bugün seçerseniz saat şu andan en az 30 dakika sonra olmalıdır.',
|
||||
scheduleIncomplete: 'Lütfen hem tarih hem saat seçin veya ikisini de boş bırakın.',
|
||||
scheduleTooSoon: 'Lütfen şu andan en az 30 dakika sonrası için bir saat seçin.',
|
||||
submitPickup: 'WhatsApp ile gönder',
|
||||
submitDelivery: 'WhatsApp ile gönder',
|
||||
inquiryCancel: 'İptal',
|
||||
@@ -256,8 +277,11 @@ export const trTranslations = {
|
||||
inquiryDeliveryIntro: 'Merhaba! Ev teslimatı siparişi vermek istiyorum:',
|
||||
messageTotal: 'Toplam',
|
||||
messageName: 'İsim',
|
||||
messageEmail: 'E-posta',
|
||||
messagePhone: 'Telefon',
|
||||
messageBranch: 'Şube',
|
||||
messageAddress: 'Adres',
|
||||
messagePreferredDate: 'Tercih edilen tarih',
|
||||
messagePreferredTime: 'Tercih edilen saat',
|
||||
deliverySwishNote: 'Sipariş onaylandıktan sonra Swish ödeme onayını buradan göndereceğim.',
|
||||
},
|
||||
@@ -275,8 +299,24 @@ export const trTranslations = {
|
||||
continueBrowsing: 'Göz atmaya devam et',
|
||||
},
|
||||
|
||||
// Authentication / Staff Login Page (fully translated, placeholder only)
|
||||
auth: {
|
||||
tabs: { customer: 'Müşteri', staff: 'Personel' },
|
||||
customer: {
|
||||
badge: 'MÜŞTERİ PORTALI',
|
||||
title: 'Müşteri Girişi',
|
||||
subtitle: 'Shahi Kitchen profilinize erişmek için Google hesabınızla giriş yapın.',
|
||||
signInWithGoogle: 'Google ile devam et',
|
||||
footerNote: 'Daha fazla müşteri özelliği yakında.',
|
||||
notConfigured: 'Google girişi henüz yapılandırılmadı.',
|
||||
googleDenied: 'Google girişi iptal edildi. Lütfen tekrar deneyin.',
|
||||
googleFailed: 'Google ile giriş yapılamadı. Lütfen tekrar deneyin.',
|
||||
loading: 'Hesabınız yükleniyor…',
|
||||
welcomeTitle: 'Shahi Kitchen\'a Hoş Geldiniz',
|
||||
welcomeSubtitle: 'Başarıyla giriş yaptınız. Daha fazla özellik yakında.',
|
||||
loggedInAs: 'Şu hesapla giriş yaptınız:',
|
||||
logout: 'Çıkış yap',
|
||||
menuManagement: 'Menü Yönetimi',
|
||||
},
|
||||
title: 'Personel Girişi',
|
||||
subtitle: 'Shahi Kitchen ekip üyeleri için güvenli erişim',
|
||||
usernameLabel: 'Kullanıcı Adı',
|
||||
@@ -289,6 +329,7 @@ export const trTranslations = {
|
||||
backaplan: 'Backaplan',
|
||||
submit: 'Giriş Yap',
|
||||
submitting: 'Giriş yapılıyor...',
|
||||
accessDenied: 'Erişim reddedildi. Lütfen yöneticiyle iletişime geçin.',
|
||||
construction: {
|
||||
title: 'Kimlik Doğrulama Yapım Aşamasında',
|
||||
message: 'Personel giriş sistemimiz şu anda geliştirilme aşamasındadır. Arka uç kimlik doğrulama hizmeti henüz kullanılamıyor. Lütfen daha sonra tekrar deneyin. Sipariş veya rezervasyon için acil yardım için lütfen restoranla doğrudan telefon veya WhatsApp üzerinden iletişime geçin.',
|
||||
|
||||
@@ -70,7 +70,25 @@ const LOCALIZED: Partial<Record<Language, Record<string, string>>> = {
|
||||
}
|
||||
};
|
||||
|
||||
const INCLUSION_CATEGORIES = new Set(['meat', 'chicken', 'vegetarian']);
|
||||
|
||||
const DISH_INCLUSION_NOTE_EN = '1x Naan or Rice included';
|
||||
|
||||
const DISH_INCLUSION_NOTE_LOCALIZED: Partial<Record<Language, string>> = {
|
||||
sv: '1x Naan eller ris ingår',
|
||||
ar: '1x نان أو أرز مشمول',
|
||||
tr: '1x Naan veya pilav dahil',
|
||||
hi: '1x नान या चावल शामिल',
|
||||
ur: '1x نان یا چاول شامل',
|
||||
};
|
||||
|
||||
export function getCategoryName(lang: Language, categoryId: string, fallback: string): string {
|
||||
if (lang === 'en') return EN[categoryId] ?? fallback;
|
||||
return LOCALIZED[lang]?.[categoryId] ?? EN[categoryId] ?? fallback;
|
||||
}
|
||||
|
||||
export function getMenuItemInclusionNote(lang: Language, categoryId: string): string | undefined {
|
||||
if (!INCLUSION_CATEGORIES.has(categoryId)) return undefined;
|
||||
if (lang === 'en') return DISH_INCLUSION_NOTE_EN;
|
||||
return DISH_INCLUSION_NOTE_LOCALIZED[lang] ?? DISH_INCLUSION_NOTE_EN;
|
||||
}
|
||||
|
||||
@@ -37,8 +37,11 @@ export const translations = {
|
||||
// Table Booking / Reserve Page
|
||||
booking: {
|
||||
title: 'Reserve Your Table',
|
||||
subtitle: 'Book a table at Askim or Backaplan. Pre-order your favorites from the full menu for a seamless experience.',
|
||||
subtitle: 'Book a table or plan a private celebration at Askim or Backaplan. Pre-order your favorites for a seamless arrival.',
|
||||
formTitle: 'Your Booking Details',
|
||||
signInRequiredTitle: 'Sign in to continue',
|
||||
signInRequiredSubtitle: 'Log in with Google to continue with your booking.',
|
||||
signedInAs: 'Signed in as',
|
||||
locationLabel: 'Location',
|
||||
locationPlaceholder: 'Select location',
|
||||
dateLabel: 'Date',
|
||||
@@ -51,7 +54,7 @@ export const translations = {
|
||||
emailLabel: 'Email (optional)',
|
||||
emailPlaceholder: 'your@email.com',
|
||||
notesLabel: 'Special Requests (optional)',
|
||||
notesPlaceholder: 'e.g. window seat, birthday, allergies',
|
||||
notesPlaceholder: 'e.g. cake setup, dietary needs, décor preferences, seating layout',
|
||||
continueBtn: 'Continue to Pre-Order Menu',
|
||||
menuTitle: 'Pre-order Food (Optional)',
|
||||
menuSubtitle: 'Select dishes to prepare in advance for your arrival.',
|
||||
@@ -257,14 +260,41 @@ export const translations = {
|
||||
remove: 'Remove',
|
||||
inquiryModalTitlePickup: 'Pickup inquiry',
|
||||
inquiryModalTitleDelivery: 'Delivery inquiry',
|
||||
signInRequiredTitle: 'Sign in to continue',
|
||||
signInRequiredSubtitle: 'Log in with Google to send your pickup or delivery inquiry.',
|
||||
signedInAs: 'Signed in as',
|
||||
nameLabel: 'Full name',
|
||||
namePlaceholder: 'Your name',
|
||||
emailLabel: 'Email',
|
||||
emailPlaceholder: 'your@email.com',
|
||||
emailRequired: 'Please sign in so we can use your Google email.',
|
||||
phoneLabel: 'Phone number',
|
||||
phonePlaceholder: '+46 70 123 4567',
|
||||
addressLabel: 'Delivery address',
|
||||
addressPlaceholder: 'Street, post code, city…',
|
||||
preferredTimeLabel: 'Preferred delivery time',
|
||||
preferredTimePlaceholder: 'e.g. Today 18:00',
|
||||
branchLabel: 'Restaurant branch',
|
||||
branchPlaceholder: 'Select branch',
|
||||
branchAskim: 'Askim',
|
||||
branchBackaplan: 'Backaplan',
|
||||
branchRequired: 'Please select a branch.',
|
||||
askimOnlineUnavailable: 'Coming soon, the branch is not delivering online',
|
||||
addressLabel: 'Delivery address (optional)',
|
||||
addressPlaceholder: 'Start typing your street address…',
|
||||
addressHint: 'Only Gothenburg addresses can be selected. Pick one from the suggestions.',
|
||||
addressFallbackPlaceholder: 'Street, postcode, city…',
|
||||
addressFallbackHint:
|
||||
'Address search is temporarily unavailable. Type your full delivery address manually.',
|
||||
addressSearching: 'Searching addresses…',
|
||||
addressNoResults: 'No matching addresses. Try street name and number.',
|
||||
addressOutsideGothenburg: 'This address is outside Gothenburg. We only deliver within the city.',
|
||||
addressSelectSuggestion: 'Please pick an address from the suggestions.',
|
||||
addressInvalid: 'Select a valid Gothenburg address from the list.',
|
||||
preferredDateLabel: 'Preferred date (optional)',
|
||||
preferredDatePlaceholder: 'Select date',
|
||||
dateToday: 'Today',
|
||||
dateTomorrow: 'Tomorrow',
|
||||
preferredTimeLabel: 'Preferred time (optional)',
|
||||
scheduleOptionalHint: 'Optional: choose today or tomorrow. If you pick today, time must be at least 30 minutes from now.',
|
||||
scheduleIncomplete: 'Please select both date and time, or leave both empty.',
|
||||
scheduleTooSoon: 'Please choose a time at least 30 minutes from now.',
|
||||
submitPickup: 'Send via WhatsApp',
|
||||
submitDelivery: 'Send via WhatsApp',
|
||||
inquiryCancel: 'Cancel',
|
||||
@@ -277,8 +307,11 @@ export const translations = {
|
||||
inquiryDeliveryIntro: "Hi! I'd like to order home delivery:",
|
||||
messageTotal: 'Total',
|
||||
messageName: 'Name',
|
||||
messageEmail: 'Email',
|
||||
messagePhone: 'Phone',
|
||||
messageBranch: 'Branch',
|
||||
messageAddress: 'Address',
|
||||
messagePreferredDate: 'Preferred date',
|
||||
messagePreferredTime: 'Preferred time',
|
||||
deliverySwishNote: "I'll send Swish payment confirmation here once the order is confirmed.",
|
||||
},
|
||||
@@ -296,8 +329,28 @@ export const translations = {
|
||||
continueBrowsing: 'Continue browsing',
|
||||
},
|
||||
|
||||
// Authentication / Staff Login Page (fully translated, placeholder only)
|
||||
// Authentication — Customer & Staff Login
|
||||
auth: {
|
||||
tabs: {
|
||||
customer: 'Customer',
|
||||
staff: 'Staff',
|
||||
},
|
||||
customer: {
|
||||
badge: 'CUSTOMER PORTAL',
|
||||
title: 'Customer Login',
|
||||
subtitle: 'Sign in with your Google account to access your Shahi Kitchen profile.',
|
||||
signInWithGoogle: 'Continue with Google',
|
||||
footerNote: 'More customer features are coming soon.',
|
||||
notConfigured: 'Google sign-in is not configured yet. Please add GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET to your environment.',
|
||||
googleDenied: 'Google sign-in was cancelled. Please try again.',
|
||||
googleFailed: 'Could not sign in with Google. Please try again.',
|
||||
loading: 'Loading your account…',
|
||||
welcomeTitle: 'Welcome to Shahi Kitchen',
|
||||
welcomeSubtitle: 'You are successfully signed in. More features for customers will arrive soon.',
|
||||
loggedInAs: 'You are logged in as',
|
||||
logout: 'Sign out',
|
||||
menuManagement: 'Menu Management',
|
||||
},
|
||||
title: 'Staff Login',
|
||||
subtitle: 'Secure access for Shahi Kitchen team members at our locations',
|
||||
usernameLabel: 'Username',
|
||||
@@ -310,6 +363,7 @@ export const translations = {
|
||||
backaplan: 'Backaplan',
|
||||
submit: 'Sign In',
|
||||
submitting: 'Signing in...',
|
||||
accessDenied: 'Access denied. Please contact the administrator.',
|
||||
construction: {
|
||||
title: 'Authentication Under Construction',
|
||||
message: 'Our staff login system is currently under development. The backend authentication service is not yet available. Please try again later. For immediate assistance with orders or reservations, please contact the restaurant directly via phone or WhatsApp.',
|
||||
@@ -414,6 +468,9 @@ export const translations = {
|
||||
title: 'Boka Bord',
|
||||
subtitle: 'Boka bord på Askim eller Backaplan. Förbeställ dina favoriter från hela menyn för en smidig upplevelse.',
|
||||
formTitle: 'Dina Bokningsuppgifter',
|
||||
signInRequiredTitle: 'Logga in för att fortsätta',
|
||||
signInRequiredSubtitle: 'Logga in med Google för att fortsätta med din bokning.',
|
||||
signedInAs: 'Inloggad som',
|
||||
locationLabel: 'Plats',
|
||||
locationPlaceholder: 'Välj plats',
|
||||
dateLabel: 'Datum',
|
||||
@@ -626,14 +683,41 @@ export const translations = {
|
||||
remove: 'Ta bort',
|
||||
inquiryModalTitlePickup: 'Förfrågan om upphämtning',
|
||||
inquiryModalTitleDelivery: 'Förfrågan om hemleverans',
|
||||
signInRequiredTitle: 'Logga in för att fortsätta',
|
||||
signInRequiredSubtitle: 'Logga in med Google för att skicka din hämtnings- eller leveransförfrågan.',
|
||||
signedInAs: 'Inloggad som',
|
||||
nameLabel: 'Fullständigt namn',
|
||||
namePlaceholder: 'Ditt namn',
|
||||
emailLabel: 'E-post',
|
||||
emailPlaceholder: 'din@epost.se',
|
||||
emailRequired: 'Logga in så att vi kan använda din Google-e-post.',
|
||||
phoneLabel: 'Telefonnummer',
|
||||
phonePlaceholder: '+46 70 123 4567',
|
||||
addressLabel: 'Leveransadress',
|
||||
addressPlaceholder: 'Gata, postnummer, stad…',
|
||||
preferredTimeLabel: 'Önskad leveranstid',
|
||||
preferredTimePlaceholder: 't.ex. Idag 18:00',
|
||||
branchLabel: 'Restaurangfilial',
|
||||
branchPlaceholder: 'Välj filial',
|
||||
branchAskim: 'Askim',
|
||||
branchBackaplan: 'Backaplan',
|
||||
branchRequired: 'Välj en filial.',
|
||||
askimOnlineUnavailable: 'Kommer snart, filialen levererar inte online ännu',
|
||||
addressLabel: 'Leveransadress (valfritt)',
|
||||
addressPlaceholder: 'Börja skriva din gatuadress…',
|
||||
addressHint: 'Endast Göteborg-adresser kan väljas. Välj ett förslag från listan.',
|
||||
addressFallbackPlaceholder: 'Gata, postnummer, stad…',
|
||||
addressFallbackHint:
|
||||
'Adresssökning är tillfälligt otillgänglig. Skriv din fullständiga leveransadress manuellt.',
|
||||
addressSearching: 'Söker adresser…',
|
||||
addressNoResults: 'Inga träffar. Prova gatunamn och nummer.',
|
||||
addressOutsideGothenburg: 'Adressen ligger utanför Göteborg. Vi levererar bara inom staden.',
|
||||
addressSelectSuggestion: 'Välj en adress från förslagen.',
|
||||
addressInvalid: 'Välj en giltig Göteborg-adress från listan.',
|
||||
preferredDateLabel: 'Önskat datum (valfritt)',
|
||||
preferredDatePlaceholder: 'Välj datum',
|
||||
dateToday: 'Idag',
|
||||
dateTomorrow: 'Imorgon',
|
||||
preferredTimeLabel: 'Önskad tid (valfritt)',
|
||||
scheduleOptionalHint: 'Valfritt: välj idag eller imorgon. Väljer du idag måste tiden vara minst 30 minuter från nu.',
|
||||
scheduleIncomplete: 'Välj både datum och tid, eller lämna båda tomma.',
|
||||
scheduleTooSoon: 'Välj en tid minst 30 minuter från nu.',
|
||||
submitPickup: 'Skicka via WhatsApp',
|
||||
submitDelivery: 'Skicka via WhatsApp',
|
||||
inquiryCancel: 'Avbryt',
|
||||
@@ -646,8 +730,11 @@ export const translations = {
|
||||
inquiryDeliveryIntro: 'Hej! Jag vill beställa hemleverans:',
|
||||
messageTotal: 'Totalt',
|
||||
messageName: 'Namn',
|
||||
messageEmail: 'E-post',
|
||||
messagePhone: 'Telefon',
|
||||
messageBranch: 'Filial',
|
||||
messageAddress: 'Adress',
|
||||
messagePreferredDate: 'Önskat datum',
|
||||
messagePreferredTime: 'Önskad tid',
|
||||
deliverySwishNote: 'Jag skickar Swish-betalningsbekräftelse här när beställningen är bekräftad.',
|
||||
},
|
||||
@@ -665,8 +752,28 @@ export const translations = {
|
||||
continueBrowsing: 'Fortsätt bläddra',
|
||||
},
|
||||
|
||||
// Authentication / Staff Login Page (fully translated, placeholder only)
|
||||
// Authentication — Customer & Staff Login
|
||||
auth: {
|
||||
tabs: {
|
||||
customer: 'Kund',
|
||||
staff: 'Personal',
|
||||
},
|
||||
customer: {
|
||||
badge: 'KUNDPORTAL',
|
||||
title: 'Kundinloggning',
|
||||
subtitle: 'Logga in med ditt Google-konto för att komma åt din Shahi Kitchen-profil.',
|
||||
signInWithGoogle: 'Fortsätt med Google',
|
||||
footerNote: 'Fler kundfunktioner kommer snart.',
|
||||
notConfigured: 'Google-inloggning är inte konfigurerad ännu.',
|
||||
googleDenied: 'Google-inloggning avbröts. Försök igen.',
|
||||
googleFailed: 'Kunde inte logga in med Google. Försök igen.',
|
||||
loading: 'Laddar ditt konto…',
|
||||
welcomeTitle: 'Välkommen till Shahi Kitchen',
|
||||
welcomeSubtitle: 'Du är nu inloggad. Fler kundfunktioner kommer snart.',
|
||||
loggedInAs: 'Du är inloggad som',
|
||||
logout: 'Logga ut',
|
||||
menuManagement: 'Menyhantering',
|
||||
},
|
||||
title: 'Personalloggning',
|
||||
subtitle: 'Säker åtkomst för Shahi Kitchen teammedlemmar vid våra platser',
|
||||
usernameLabel: 'Användarnamn',
|
||||
@@ -679,6 +786,7 @@ export const translations = {
|
||||
backaplan: 'Backaplan',
|
||||
submit: 'Logga in',
|
||||
submitting: 'Loggar in...',
|
||||
accessDenied: 'Åtkomst nekad. Kontakta administratören.',
|
||||
construction: {
|
||||
title: 'Autentisering under uppbyggnad',
|
||||
message: 'Vårt personallogginssystem är för närvarande under utveckling. Backend-autentiseringstjänsten är inte tillgänglig ännu. Vänligen försök igen senare. För omedelbar hjälp med beställningar eller bokningar, kontakta restaurangen direkt via telefon eller WhatsApp.',
|
||||
@@ -783,6 +891,9 @@ export const translations = {
|
||||
title: 'टेबल बुक करें',
|
||||
subtitle: 'अस्किम या बैकप्लान पर टेबल बुक करें। एक सहज अनुभव के लिए पूर्ण मेनू से अपने पसंदीदा व्यंजनों को पहले से ऑर्डर करें।',
|
||||
formTitle: 'आपकी बुकिंग विवरण',
|
||||
signInRequiredTitle: 'Sign in to continue',
|
||||
signInRequiredSubtitle: 'Log in with Google to continue with your booking.',
|
||||
signedInAs: 'Signed in as',
|
||||
locationLabel: 'स्थान',
|
||||
locationPlaceholder: 'स्थान चुनें',
|
||||
dateLabel: 'तारीख',
|
||||
@@ -1065,14 +1176,32 @@ export const translations = {
|
||||
remove: 'हटाएं',
|
||||
inquiryModalTitlePickup: 'पिकअप पूछताछ',
|
||||
inquiryModalTitleDelivery: 'होम डिलीवरी पूछताछ',
|
||||
signInRequiredTitle: 'Sign in to continue',
|
||||
signInRequiredSubtitle: 'Log in with Google to send your pickup or delivery inquiry.',
|
||||
signedInAs: 'Signed in as',
|
||||
nameLabel: 'पूरा नाम',
|
||||
namePlaceholder: 'आपका नाम',
|
||||
emailLabel: 'Email',
|
||||
emailPlaceholder: 'your@email.com',
|
||||
emailRequired: 'Please sign in so we can use your Google email.',
|
||||
phoneLabel: 'फ़ोन नंबर',
|
||||
phonePlaceholder: '+46 70 123 4567',
|
||||
addressLabel: 'डिलीवरी पता',
|
||||
branchLabel: 'रेस्तरां शाखा',
|
||||
branchPlaceholder: 'शाखा चुनें',
|
||||
branchAskim: 'Askim',
|
||||
branchBackaplan: 'Backaplan',
|
||||
branchRequired: 'कृपया एक शाखा चुनें।',
|
||||
askimOnlineUnavailable: 'जल्द आ रहा है, यह शाखा अभी ऑनलाइन डिलीवरी नहीं करती',
|
||||
addressLabel: 'डिलीवरी पता (वैकल्पिक)',
|
||||
addressPlaceholder: 'सड़क, पिन कोड, शहर…',
|
||||
preferredTimeLabel: 'पसंदीदा डिलीवरी समय',
|
||||
preferredTimePlaceholder: 'जैसे आज 18:00',
|
||||
preferredDateLabel: 'पसंदीदा तारीख (वैकल्पिक)',
|
||||
preferredDatePlaceholder: 'तारीख चुनें',
|
||||
dateToday: 'आज',
|
||||
dateTomorrow: 'कल',
|
||||
preferredTimeLabel: 'पसंदीदा समय (वैकल्पिक)',
|
||||
scheduleOptionalHint: 'वैकल्पिक: आज या कल चुनें। आज चुनने पर समय अभी से कम से कम 30 मिनट बाद होना चाहिए।',
|
||||
scheduleIncomplete: 'कृपया तारीख और समय दोनों चुनें, या दोनों खाली छोड़ दें।',
|
||||
scheduleTooSoon: 'कृपया अभी से कम से कम 30 मिनट बाद का समय चुनें।',
|
||||
submitPickup: 'व्हाट्सएप पर भेजें',
|
||||
submitDelivery: 'व्हाट्सएप पर भेजें',
|
||||
inquiryCancel: 'रद्द करें',
|
||||
@@ -1085,8 +1214,11 @@ export const translations = {
|
||||
inquiryDeliveryIntro: 'नमस्ते! मैं होम डिलीवरी ऑर्डर करना चाहता/चाहती हूँ:',
|
||||
messageTotal: 'कुल',
|
||||
messageName: 'नाम',
|
||||
messageEmail: 'Email',
|
||||
messagePhone: 'फ़ोन',
|
||||
messageBranch: 'शाखा',
|
||||
messageAddress: 'पता',
|
||||
messagePreferredDate: 'पसंदीदा तारीख',
|
||||
messagePreferredTime: 'पसंदीदा समय',
|
||||
deliverySwishNote: 'ऑर्डर की पुष्टि होने के बाद मैं Swish भुगतान की पुष्टि यहाँ भेजूँगा/भेजूँगी।',
|
||||
},
|
||||
@@ -1104,8 +1236,25 @@ export const translations = {
|
||||
continueBrowsing: 'ब्राउज़िंग जारी रखें',
|
||||
},
|
||||
|
||||
// Authentication / Staff Login Page (fully translated, placeholder only)
|
||||
// Authentication — Customer & Staff Login
|
||||
auth: {
|
||||
tabs: { customer: 'ग्राहक', staff: 'स्टाफ' },
|
||||
customer: {
|
||||
badge: 'CUSTOMER PORTAL',
|
||||
title: 'Customer Login',
|
||||
subtitle: 'Sign in with your Google account to access your Shahi Kitchen profile.',
|
||||
signInWithGoogle: 'Continue with Google',
|
||||
footerNote: 'More customer features are coming soon.',
|
||||
notConfigured: 'Google sign-in is not configured yet.',
|
||||
googleDenied: 'Google sign-in was cancelled. Please try again.',
|
||||
googleFailed: 'Could not sign in with Google. Please try again.',
|
||||
loading: 'Loading your account…',
|
||||
welcomeTitle: 'Welcome to Shahi Kitchen',
|
||||
welcomeSubtitle: 'You are successfully signed in. More features for customers will arrive soon.',
|
||||
loggedInAs: 'You are logged in as',
|
||||
logout: 'Sign out',
|
||||
menuManagement: 'Menu Management',
|
||||
},
|
||||
title: 'स्टाफ लॉगिन',
|
||||
subtitle: 'शाही किचन टीम सदस्यों के लिए सुरक्षित पहुंच',
|
||||
usernameLabel: 'उपयोगकर्ता नाम',
|
||||
@@ -1118,6 +1267,7 @@ export const translations = {
|
||||
backaplan: 'Backaplan',
|
||||
submit: 'साइन इन करें',
|
||||
submitting: 'साइन इन हो रहा है...',
|
||||
accessDenied: 'Access denied. Please contact the administrator.',
|
||||
construction: {
|
||||
title: 'प्रमाणीकरण निर्माणाधीन',
|
||||
message: 'हमारा स्टाफ लॉगिन सिस्टम वर्तमान में विकास के अधीन है। बैकएंड प्रमाणीकरण सेवा अभी उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें। तत्काल सहायता के लिए, कृपया रेस्तरां से सीधे फोन या व्हाट्सएप के माध्यम से संपर्क करें।',
|
||||
@@ -1147,6 +1297,9 @@ export const translations = {
|
||||
title: 'ٹیبل بک کریں',
|
||||
subtitle: 'اسکیم یا بیکپلان پر ٹیبل بک کریں۔ ایک ہموار تجربے کے لیے مکمل مینو سے اپنے پسندیدہ پکوان پہلے سے آرڈر کریں۔',
|
||||
formTitle: 'آپ کی بکنگ کی تفصیلات',
|
||||
signInRequiredTitle: 'Sign in to continue',
|
||||
signInRequiredSubtitle: 'Log in with Google to continue with your booking.',
|
||||
signedInAs: 'Signed in as',
|
||||
locationLabel: 'مقام',
|
||||
locationPlaceholder: 'مقام منتخب کریں',
|
||||
dateLabel: 'تاریخ',
|
||||
@@ -1429,14 +1582,32 @@ export const translations = {
|
||||
remove: 'ہٹائیں',
|
||||
inquiryModalTitlePickup: 'پک اپ استفسار',
|
||||
inquiryModalTitleDelivery: 'گھر ڈیلیوری استفسار',
|
||||
signInRequiredTitle: 'Sign in to continue',
|
||||
signInRequiredSubtitle: 'Log in with Google to send your pickup or delivery inquiry.',
|
||||
signedInAs: 'Signed in as',
|
||||
nameLabel: 'پورا نام',
|
||||
namePlaceholder: 'آپ کا نام',
|
||||
emailLabel: 'Email',
|
||||
emailPlaceholder: 'your@email.com',
|
||||
emailRequired: 'Please sign in so we can use your Google email.',
|
||||
phoneLabel: 'فون نمبر',
|
||||
phonePlaceholder: '+46 70 123 4567',
|
||||
addressLabel: 'ڈیلیوری پتہ',
|
||||
branchLabel: 'ریسٹورانٹ برانچ',
|
||||
branchPlaceholder: 'برانچ منتخب کریں',
|
||||
branchAskim: 'Askim',
|
||||
branchBackaplan: 'Backaplan',
|
||||
branchRequired: 'براہ کرم ایک برانچ منتخب کریں۔',
|
||||
askimOnlineUnavailable: 'جلد آ رہا ہے، یہ برانچ ابھی آن لائن ڈیلیوری نہیں کرتی',
|
||||
addressLabel: 'ڈیلیوری پتہ (اختیاری)',
|
||||
addressPlaceholder: 'گلی، پوسٹ کوڈ، شہر…',
|
||||
preferredTimeLabel: 'پسندیدہ ڈیلیوری وقت',
|
||||
preferredTimePlaceholder: 'مثلاً آج 18:00',
|
||||
preferredDateLabel: 'پسندیدہ تاریخ (اختیاری)',
|
||||
preferredDatePlaceholder: 'تاریخ منتخب کریں',
|
||||
dateToday: 'آج',
|
||||
dateTomorrow: 'کل',
|
||||
preferredTimeLabel: 'پسندیدہ وقت (اختیاری)',
|
||||
scheduleOptionalHint: 'اختیاری: آج یا کل منتخب کریں۔ آج منتخب کرنے پر وقت اب سے کم از کم 30 منٹ بعد ہونا چاہیے۔',
|
||||
scheduleIncomplete: 'براہ کرم تاریخ اور وقت دونوں منتخب کریں، یا دونوں خالی چھوڑ دیں۔',
|
||||
scheduleTooSoon: 'براہ کرم اب سے کم از کم 30 منٹ بعد کا وقت منتخب کریں۔',
|
||||
submitPickup: 'واٹس ایپ پر بھیجیں',
|
||||
submitDelivery: 'واٹس ایپ پر بھیجیں',
|
||||
inquiryCancel: 'منسوخ',
|
||||
@@ -1449,8 +1620,11 @@ export const translations = {
|
||||
inquiryDeliveryIntro: 'ہیلو! میں گھر ڈیلیوری آرڈر کرنا چاہتا ہوں:',
|
||||
messageTotal: 'کل',
|
||||
messageName: 'نام',
|
||||
messageEmail: 'Email',
|
||||
messagePhone: 'فون',
|
||||
messageBranch: 'برانچ',
|
||||
messageAddress: 'پتہ',
|
||||
messagePreferredDate: 'پسندیدہ تاریخ',
|
||||
messagePreferredTime: 'پسندیدہ وقت',
|
||||
deliverySwishNote: 'آرڈر کی تصدیق کے بعد میں Swish ادائیگی کی تصدیق یہاں بھیجوں گا۔',
|
||||
},
|
||||
@@ -1468,8 +1642,25 @@ export const translations = {
|
||||
continueBrowsing: 'براؤزنگ جاری رکھیں',
|
||||
},
|
||||
|
||||
// Authentication / Staff Login Page (fully translated, placeholder only)
|
||||
// Authentication — Customer & Staff Login
|
||||
auth: {
|
||||
tabs: { customer: 'کسٹمر', staff: 'اسٹاف' },
|
||||
customer: {
|
||||
badge: 'CUSTOMER PORTAL',
|
||||
title: 'Customer Login',
|
||||
subtitle: 'Sign in with your Google account to access your Shahi Kitchen profile.',
|
||||
signInWithGoogle: 'Continue with Google',
|
||||
footerNote: 'More customer features are coming soon.',
|
||||
notConfigured: 'Google sign-in is not configured yet.',
|
||||
googleDenied: 'Google sign-in was cancelled. Please try again.',
|
||||
googleFailed: 'Could not sign in with Google. Please try again.',
|
||||
loading: 'Loading your account…',
|
||||
welcomeTitle: 'Welcome to Shahi Kitchen',
|
||||
welcomeSubtitle: 'You are successfully signed in. More features for customers will arrive soon.',
|
||||
loggedInAs: 'You are logged in as',
|
||||
logout: 'Sign out',
|
||||
menuManagement: 'Menu Management',
|
||||
},
|
||||
title: 'اسٹاف لاگ ان',
|
||||
subtitle: 'شاہی کچن ٹیم کے ممبران کے لیے محفوظ رسائی',
|
||||
usernameLabel: 'صارف نام',
|
||||
@@ -1482,6 +1673,7 @@ export const translations = {
|
||||
backaplan: 'Backaplan',
|
||||
submit: 'سائن ان کریں',
|
||||
submitting: 'سائن ان ہو رہا ہے...',
|
||||
accessDenied: 'Access denied. Please contact the administrator.',
|
||||
construction: {
|
||||
title: 'تصدیق زیر تعمیر',
|
||||
message: 'ہمارا اسٹاف لاگ ان سسٹم فی الحال ترقی کے مراحل میں ہے۔ بیک اینڈ تصدیقی سروس ابھی دستیاب نہیں ہے۔ براہ کرم بعد میں دوبارہ کوشش کریں۔ فوری مدد کے لیے، براہ کرم براہ راست فون یا واٹس ایپ کے ذریعے ریستوراں سے رابطہ کریں۔',
|
||||
@@ -1521,5 +1713,6 @@ function withMenuText(lang: Language, bundle: TranslationBundle): TranslationBun
|
||||
export function getTranslation(lang: Language): TranslationBundle {
|
||||
if (lang === 'ar') return withMenuText(lang, arBundle as TranslationBundle);
|
||||
if (lang === 'tr') return withMenuText(lang, trBundle as TranslationBundle);
|
||||
return withMenuText(lang, translations[lang] as TranslationBundle);
|
||||
const bundle = translations[lang] ?? translations.sv;
|
||||
return withMenuText(lang, bundle as TranslationBundle);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user