Loading...

{{ lang === 'zh' ? '无效桌号' : (lang === 'en' ? 'Invalid Table' : 'Meja Tidak Sah') }}

{{ lang === 'zh' ? '您访问的桌号不存在或系统当前处于维护模式。请扫描正确的桌位二维码。' : (lang === 'en' ? 'The table you are accessing does not exist or system is in maintenance mode.' : 'Meja ini tidak wujud atau sistem dalam mod penyelenggaraan.') }}

{{ t('securityStatus') }}

{{ settings.test_mode_enabled === '1' ? t('testModeActive') : t('tableRestrictionActive') }}

{{ settings.restaurant_name || t('restaurantName') }}

{{ t('table') }}: {{ tableNumber }}

Store Notice

{{ settings.restaurant_bio }}

{{ getCategoryName(cat) }}
{{ t('unavailable') }}

{{ getProductName(product) }}

{{ getProductDesc(product) || t('delicious') }}

RM {{ product.price }}
{{ totalCount }}

{{ t('totalPrice') }}

RM {{ totalPrice }}

{{ t('cart') }}

{{ t('emptyCart') }}

{{ getProductName(item) }}

{{ item.displayOptions }}

RM {{ item.price }}

{{ item.quantity }}
{{ t('subtotal') }} RM {{ totalPrice }}

{{ translations.zh.restaurantClosed }}

{{ translations.zh.closedMessage }}

{{ translations.ms.restaurantClosed }}

{{ translations.ms.closedMessage }}

{{ translations.en.restaurantClosed }}

{{ translations.en.closedMessage }}

{{ translations.zh.pleaseComeBack }}
{{ translations.ms.pleaseComeBack }}
{{ translations.en.pleaseComeBack }}

{{ lang === 'zh' ? '还没到下单时间' : (lang === 'en' ? 'Not Ordering Time' : 'Belum Masa Pesanan') }}

{{ lang === 'zh' ? '抱歉,当前不在扫码点餐允许的时间段内。' : (lang === 'en' ? 'Sorry, QR ordering is currently not allowed.' : 'Maaf, pesanan QR tidak dibenarkan pada masa ini.') }}

{{ lang === 'zh' ? '允许下单时段' : (lang === 'en' ? 'Ordering Hours' : 'Masa Pesanan') }}

{{ settings.qr_ordering_start_time }} - {{ settings.qr_ordering_end_time }}

{{ t('selectPayment') }}

{{ getProductName(item) }}

{{ item.displayOptions }}

RM {{ item.price }}

{{ item.quantity }}
Subtotal RM {{ subtotal.toFixed(2) }}
Service Charge ({{ settings.service_charge_rate }}%) RM {{ serviceCharge.toFixed(2) }}
Govt Tax ({{ settings.govt_tax_rate }}%) RM {{ govtTax.toFixed(2) }}
Rounding RM {{ rounding }}
Total Amount RM {{ grandTotal }}

{{ currentProduct?.name }}

{{ item.name }}
+ RM {{ item.price }}

{{ t('orderHistory') }}

{{ t('noHistory') }}

#{{ order.display_order_no }} • {{ formatTime(order.created_at) }} {{ t(order.status) }}
  • {{ item.name_ms || item.name }} x{{ item.quantity }}

    {{ item.displayOptions }}

    RM {{ (item.price * item.quantity).toFixed(2) }}
Subtotal RM {{ getOrderBreakdown(order).subtotal }}
Total Amount {{ t('total') }}
RM {{ parseFloat(order.total_price).toFixed(2) }}

{{ t('orderSuccess') }}

{{ t('merchantReceived') }}

{{ alertTitle }}

{{ alertMessage }}

{{ t('membership') }}

{{ t('welcomeToMembership') }}

{{ t('loginOrRegister') }}

{{ t('or') }}

{{ membershipError }}

{{ currentMember ? t('welcomeBack') : t('completeYourProfile') }}

{{ currentMember.masked_name || currentMember.name }}

{{ currentMember.phone }}

{{ t('points') }}: {{ currentMember.points }}

{{ membershipError }}

{{ t('Success') }}

{{ t('Your membership has been created successfully.') }}

{{ t('Welcome, {name}!').replace('{name}', currentMember?.name) }}

{{ t('completeProfile') }}

{{ setupForm.name || t('member') }}

{{ setupForm.email || '' }}

Please set up your phone number and PIN to complete registration

{{ setupPhoneError }}

{{ setupError }}

{{ editProfileStep === 'edit-name' ? 'Edit Name' : editProfileStep === 'change-phone' ? 'Change Phone Number' : editProfileStep === 'change-pin' ? 'Change PIN' : editProfileStep === 'login-methods' ? 'Login Methods' : t('editProfile') }}

{{ currentMember?.name || t('member') }}

{{ t('goldMember') }} {{ currentMember?.points ?? 0 }} {{ t('pts') }}

{{ t('personalInformation') }}

{{ t('loginAndSecurity') }}

Google Account

{{ currentMember?.email || 'Not connected' }}

Managed by Google. This email cannot be edited here.

{{ editProfileError }}

Enter your current PIN to verify your identity.

{{ editProfileError }}

{{ editProfileError }}

Google Account

{{ t('signedInWith') }}

{{ currentMember?.email || 'Not connected' }}

{{ t('linked') }}

Phone + PIN

{{ currentMember?.phone && currentMember.phone !== '0' ? currentMember.phone : 'Not connected' }}

Enabled Not Connected

{{ t('confirmDisconnect') }}

{{ t('disconnectWarning') }}

{{ t('disconnectNote') }}

{{ t('loginMethods') }}

Google Account

{{ t('googleAccountDesc') }}

Phone + PIN

{{ t('phonePinDesc') }}

{{ t('securityTips') }}

  • {{ t('securityTip1') }}
  • {{ t('securityTip2') }}
  • {{ t('securityTip3') }}

{{ t(memberPage === 'profile' ? 'memberProfile' : memberPage === 'orders' ? 'orderHistory' : memberPage === 'favorites' ? 'favorites' : memberPage === 'rewards' ? 'rewards' : memberPage === 'settings' ? 'accountSettings' : memberPage === 'order-detail' ? 'orderDetail' : 'memberProfile') }}

{{ currentMember?.name || t('member') }}

{{ t('goldMember') }}

{{ t('currentPoints') }}

{{ currentMember?.points ?? 0 }} {{ t('pts') }}

{{ t('personalInfo') }}

{{ t('name') }}
{{ currentMember?.name || t('notSet') }}
{{ t('phoneNumber') }}
{{ currentMember?.phone || t('notSet') }}
{{ t('email') }}
{{ currentMember?.email || t('notSet') }}

#{{ order.display_order_no }}

{{ order.order_date }} {{ order.order_time }}

{{ t('completed') }}
{{ order.table_number }} | {{ t('total') }} RM {{ order.total_price.toFixed(2) }}

{{ t('noHistory') }}

{{ t('noFavorites') }}

{{ t('currentPoints') }}

{{ currentMember?.points ?? 0 }} {{ t('pts') }}

Earn Points

Spend RM1 = Earn 1 Point

Redeem

100 Points = RM1 Discount

{{ t('pointsHistory') }}

{{ t('noPointsHistory') }}

{{ record.description }}

{{ record.order_date }} {{ record.order_time }}

{{ record.type === 'earn' ? '+' : '' }}{{ record.points }} {{ t('pts') }}
{{ t('language') }}

#{{ currentOrderDetail.display_order_no }}

{{ currentOrderDetail.order_date }} {{ currentOrderDetail.order_time }}

{{ t('completed') }}

{{ t('items') }}

{{ item.name }}

x{{ item.quantity }}

RM {{ (item.price * item.quantity).toFixed(2) }}
{{ t('subtotal') }} RM {{ (currentOrderDetail.order_snapshot?.items_total || currentOrderDetail.sub_total || 0).toFixed(2) }}
{{ t('discount') }} -RM {{ currentOrderDetail.order_snapshot.discount.toFixed(2) }}
{{ t('serviceCharge') }} RM {{ (currentOrderDetail.order_snapshot?.service_charge || currentOrderDetail.service_charge || 0).toFixed(2) }}
{{ t('govtTax') }} RM {{ (currentOrderDetail.order_snapshot?.govt_tax || currentOrderDetail.govt_tax || 0).toFixed(2) }}
{{ t('total') }} RM {{ currentOrderDetail.total_price.toFixed(2) }}