1const LOCALE_STORAGE_KEY = 'portal_language'; 2let lang = window.PORTAL_LANGUAGE || localStorage.getItem(LOCALE_STORAGE_KEY) || 'id'; 3 4if (lang !== 'en') { 5 lang = 'id'; 6} 7 8localStorage.setItem(LOCALE_STORAGE_KEY, lang); 9 10const locale = { 11 id: { 12 bookingShuttle: 'Shuttle', 13 bookingMotorRental: 'Rental Motor', 14 bookingRoundTrip: 'Pulang Pergi?', 15 bookingDeparture: 'Keberangkatan', 16 bookingOrigin: 'Asal', 17 bookingSelectDeparture: 'Pilih Keberangkatan', 18 bookingSelectOrigin: 'Pilih Lokasi Asal', 19 bookingDestination: 'Tujuan', 20 bookingSelectDestination: 'Pilih Tujuan', 21 bookingSelectDestinationLocation: 'Pilih Lokasi Tujuan', 22 bookingSelectDate: 'Pilih Tanggal', 23 bookingOneWay: 'Sekali Jalan', 24 bookingDepartureDate: 'Tanggal Pergi', 25 bookingReturnDate: 'Tanggal Pulang', 26 bookingPassenger: 'Penumpang', 27 bookingPassengerCount: 'Jumlah Penumpang', 28 bookingSelectPassenger: 'Pilih Penumpang', 29 bookingPassengerUnit: 'Orang', 30 bookingSearch: 'Cari', 31 bookingSearchTrip: 'Cari Perjalanan', 32 commonSearch: 'Cari', 33 commonNoResults: 'Tidak ada hasil', 34 commonSearching: 'Mencari...', 35 bookingValidationDeparture: 'Silakan pilih keberangkatan', 36 bookingValidationDestination: 'Silakan pilih tujuan', 37 bookingValidationDepartureDate: 'Silakan pilih tanggal pergi', 38 bookingValidationReturnDate: 'Silakan pilih tanggal pulang', 39 bookingNoDeparture: 'Tidak ada keberangkatan', 40 bookingNoDestination: 'Tidak ada tujuan', 41 bookingSearchLocation: 'Ketik kota, lokasi, dan wilayah', 42 homepageNewsReadMore: 'Baca Selengkapnya', 43 homepageNewsViewAll: 'Lihat Semua Berita', 44 homepageNewsTitle: 'Info Terbaru Namaste', 45 homepageNewsDescription: 'Pantau informasi terbaru dari Namaste mulai dari layanan, rute, hingga perjalanan supaya kamu selalu update sebelum memulai perjalanan.', 46 homepageNewsDescriptionMobile: 'Pantau informasi terbaru dari Namaste mulai dari layanan, rute, hingga perjalanan.', 47 homepageViewMore: 'Lihat Selengkapnya', 48 homepageFacilities: 'Fasilitas', 49 homepageServices: 'Layanan', 50 homepageAdvantages: 'Keunggulan', 51 homepageOurLocation: 'Lokasi Kami', 52 homepageRegisterMember: 'Daftar Member', 53 homepageBookNow: 'Pesan Sekarang', 54 homepageViewDetails: 'Lihat Detail', 55 homepageViewAllOutlets: 'Lihat Semua Outlet', 56 homepageBookingTutorial: 'Tutorial Cara Booking', 57 homepageChangeDeparture: 'Ubah Keberangkatan', 58 homepageFaq: 'FAQ', 59 homepageComingSoon: 'Segera Hadir', 60 homepageBannerAlt: 'Banner promosi', 61 scheduleSelect: 'Pilih', 62 scheduleExpired: 'Jadwal sudah lewat', 63 scheduleInsufficientSeats: 'Kursi tidak cukup', 64 scheduleNotFound: 'Jadwal tidak ditemukan', 65 scheduleDepartureArrival: 'berangkat - tiba', 66 scheduleTravelEstimate: 'Estimasi perjalanan', 67 promoSpecialTitle: 'Promo Spesial!', 68 promoExclusiveTitle: 'Promo Eksklusif', 69 promoInterestingTitle: 'Promo Menarik Untukmu!', 70 promoBestLabel: 'ð¥ Promo Terbaik', 71 promoSeatUnit: '/kursi', 72 outletOurTitle: 'Outlet Kami', 73 instagramFollowUs: 'Ikuti Kami di Instagram', 74 homepageViewAll: 'Lihat Semua', 75 homepageAll: 'Semua', 76 homepageAmount: 'Jumlah', 77 homepageDate: 'Tanggal', 78 homepageLocation: 'Lokasi', 79 serviceMore: 'Selengkapnya â', 80 ansAgentTitle: 'Agen ANS', 81 ansAgentDescription: 'Temukan agen ANS terdekat di kota Anda untu
81k informasi dan layanan terbaik.', 82 homepageLatestNewsTitle: 'Kabar Terbaru Buat Perjalananmu!', 83 homepageLatestNewsDescription: 'Lihat promo menarik, rute baru, dan info penting untuk perjalanan Anda.', 84 blogPageTitle: 'Promo dan Berita', 85 blogSearchPlaceholder: 'Cari promo, berita, atau artikel...', 86 blogSearchAria: 'Cari promo, berita, atau artikel', 87 blogSearchButton: 'Cari', 88 blogSearchEmpty: 'Promo atau berita tidak ditemukan', 89 blogReadMore: 'Selengkapnya', 90 blogEmpty: 'Belum ada tulisan', 91 blogPrevious: 'Sebelumnya', 92 blogNext: 'Berikutnya', 93 blogHome: 'Beranda', 94 blogTableOfContents: 'Daftar Isi', 95 blogShare: 'Bagikan', 96 blogAuthor: 'Penulis:', 97 blogPublished: 'Diterbitkan:', 98 blogUpdated: 'Diperbarui:', 99 blogShareFacebook: 'Bagikan ke Facebook', 100 blogShareX: 'Bagikan ke X', 101 blogCopyLink: 'Salin tautan artikel', 102 blogLinkCopied: 'Link berhasil disalin', 103 blogOtherNews: 'Berita Lainnya', 104 blogPromoNews: 'Promo & Berita', 105 blogEmptyDetail: 'Berita Kosong!', 106 blogEmptyImageAlt: 'Belum ada gambar artikel', 107 rentalTitle: 'Rental', 108 rentalMotorTitle: 'Sewa Motor', 109 rentalContactUs: 'Hubungi Kami', 110 rentalStartingFrom: 'Mulai dari', 111 rentalOrder: 'Pesan', 112 rentalBookNow: 'Book Sekarang', 113 rentalTerms: 'Syarat dan Ketentuan', 114 rentalTourTerms: 'Syarat dan Ketentuan Rental & Pariwisata', 115 rentalClose: 'Tutup', 116 rentalFullName: 'Nama Lengkap', 117 rentalFullNamePlaceholder: 'Masukkan nama lengkap', 118 rentalEmailPlaceholder: 'Masukkan email', 119 rentalPhone: 'No. Telepon', 120 rentalVehicle: 'Kendaraan', 121 rentalSelectVehicle: 'Pilih kendaraan', 122 rentalVehicleType: 'Jenis Kendaraan', 123 rentalUnitCount: 'Jumlah Unit', 124 rentalDecreaseUnit: 'Kurangi unit', 125 rentalIncreaseUnit: 'Tambah unit', 126 rentalDate: 'Tanggal Sewa', 127 rentalDatePlaceholder: 'hh/bb/tttt', 128 rentalDuration: 'Durasi', 129 rentalDay: 'hari', 130 rentalAdditionalNote: 'Catatan Tambahan', 131 rentalAdditionalNotePlaceholder: 'Masukkan catatan tambahan', 132 rentalRequired: '*Wajib diisi', 133 rentalPrivacyPrefix: 'Mengizinkan', 134 rentalPrivacySuffix: 'untuk menggunakan informasi di atas dan menghubungi saya melalui email, telepon, atau sarana komunikasi pribadi lainnya untuk kegiatan pelayanan pelanggan sesuai dengan', 135 rentalPrivacyConsent: 'Persetujuan Privasi', 136 rentalVehicleModel: 'Model Kendaraan', 137 rentalWeekly: 'Sewa Mingguan', 138 rentalMonthly: 'Sewa Bulanan', 139 rentalBestValue: 'Best Value', 140 rentalFleetNavigation: 'Navigasi pilihan armada', 141 rentalFleet: 'Armada', 142 rentalMotorCashbackValue: 'Nilai Cashback:', 143 rentalMotorHeroAlt: 'Sewa motor di Bali', 144 rentalMotorCtaAlt: 'Keliling Bali dengan motor', 145 rentalReserveNow: 'Reservasi Sekarang', 146 rentalMinimumVehicle: 'Pilih minimal 1 unit kendaraan.', 147 rentalUnit: 'unit', 148 rentalCustomerData: 'Data Pemesan:', 149 rentalName: 'Nama:', 150 rentalRentalDetails: 'Detail Rental:', 151 rentalNote: 'Catatan:', 152 rentalMotorWhatsappGreeting: 'Halo, saya ingin menyewa motor.', 153 rentalBookTitle: 'Book Rental', 154 rentalVehicleGreeting: 'Halo, saya ingin menyewa kendaraan dari', 155 rentalNumberOfDays: 'Jumlah Hari', 156 rentalDestination: 'Titik Tempuh', 157 rentalDestinationPlaceholder: 'Contoh Alun-alun Cimahi', 158 rentalPickupPoint: 'Titik Jemput', 159 rentalPerDay: '/hari', 160 paymentPageTitle: 'Cara Pembayaran', 161 paymentPageDescription: 'Dapatkan kemudahan dalam bertransaksi.', 162 paymentImageAlt: 'Metode pembayaran', 163 paymentHowToUse: 'CARA PEMBAYARAN MENGGUNAKAN', 164 paymentUnavailableTitle: 'Metode Pembayaran Belum Tersedia', 165 paymentUnavailableDescription: 'Maaf, metode pembayaran belum bisa ditampilkan. Silakan coba sebentar lagi ya.', 166 checkoutPersonalData: 'Data Diri', 167 checkoutSelectSeat: 'Pilih Kursi', 168 checkoutComplete: 'Selesai', 169 checkoutNewUserVoucherBadge: 'Pakai voucher potongan pengguna baru', 170 checkoutUseVoucher: 'Gunakan Voucher', 171 checkoutNewUserVoucher: 'Voucher Pengguna Baru', 172 checkoutTerms: 'Syarat dan Ketentuan', 173 checkoutLoginToClaim: 'Login untuk Klaim', 174 checkoutClaimVoucher: 'Klaim Voucher', 175 checkoutVoucherApplied: 'Voucher Terpasang', 176 checkoutVoucherApplySuccess: 'Berhasil diterapkan!', 177 checkoutLoadingData: 'Memuat data ...', 178 checkoutSelectPaymentMethod: 'Pilih Metode Pembayaran', 179 checkoutBalance: 'Saldo:', 180 checkoutPriceDetails: 'Detail Harga', 181 checkoutTermsAgreement: 'Silakan tandai kotak ini sebagai bukti bahwa Anda mengerti dan menerima ketentuan-ketentuan di atas yang diberlakukan oleh manajemen operator', 182 checkoutPrevious: 'Sebelumnya', 183 checkoutConfirm: 'Konfirmasi',
184 checkoutAvailableVouchers: 'Voucher yang Tersedia', 185 checkoutVoucherPlaceholder: 'Masukkan Kode Voucher', 186 checkoutApply: 'Gunakan', 187 checkoutReadCarefully: 'Harap Baca', 188 checkoutConfirmOrder: 'Konfirmasi Pesanan Anda?', 189 checkoutCancel: 'Batal', 190 checkoutTicketPrice: 'Harga Tiket', 191 checkoutTotalDiscount: 'Total Diskon', 192 checkoutServiceFee: 'Biaya Layanan', 193 checkoutTotalPayment: 'Total Bayar', 194 checkoutNoVouchers: 'Daftar voucher tidak tersedia.', 195 checkoutRemove: 'Lepas', 196 checkoutUse: 'Pakai', 197 checkoutSelectPaymentAlert: 'Anda belum memilih metode pembayaran!', 198 checkoutAcceptTermsAlert: 'Anda belum menyetujui syarat dan ketentuan yang diberlakukan oleh ASMAT dan manajemen operator Shuttle.', 199 checkoutTermsLoadError: 'Terjadi kesalahan saat mengambil data syarat dan ketentuan!', 200 checkoutVoucherNewUserOnly: '*Anda tidak memenuhi syarat dan ketentuan; voucher hanya berlaku untuk pengguna baru.', 201 checkoutEarnPoints: 'Dapatkan {{count}} Poin', 202 checkoutRegisterForPoints: '*Daftar sebagai member untuk mendapatkan cashback poin', 203 checkoutLoginRegisterForPoints: '*Masuk dan daftar sebagai member untuk mendapatkan cashback poin', 204 checkoutNoPoints: 'Anda belum memiliki poin', 205 checkoutLoginForPoints: 'Masuk untuk dapat membayar dengan poin', 206 checkoutLoginNow: 'Masuk Sekarang', 207 checkoutMealPackage: 'Paket Makan', 208 checkoutMealDescription: 'Biar perjalanan makin nyaman, tambahkan paket makan favorit Anda!', 209 checkoutMealAddonTitle: 'Add On Paket Makan', 210 checkoutClose: 'Tutup', 211 checkoutAddPackageFor: 'Tambahkan paket untuk:', 212 checkoutSelectPassenger: 'Pilih minimal satu penumpang.', 213 checkoutNotePlaceholder: 'Tambahkan keterangan...', 214 checkoutAdd: 'Tambahkan', 215 checkoutOrderer: 'Pemesan', 216 checkoutNoteShort: 'Ket.', 217 checkoutAddMealPackage: 'Tambah paket makanan', 218 checkoutRemoveMealPackage: 'Hapus paket makanan', 219 completionOrderCreated: 'Pesanan Dibuat!', 220 completionBookingCode: 'Kode Booking', 221 completionPaymentCode: 'Kode Pembayaran', 222 completionCopy: 'SALIN', 223 completionPaymentCodeCopied: 'Kode pembayaran berhasil disalin.', 224 completionPaymentDeadline: 'Batas Pembayaran', 225 completionPayNow: 'Bayar Sekarang', 226 completionDiscount: 'Potongan', 227 completionAdminFee: 'Biaya Admin', 228 completionPickupFee: 'Biaya Jemput', 229 completionDropoffFee: 'Biaya Antar', 230 completionFoodAddon: 'Add-on Makanan', 231 completionPaymentGuide: 'Cara Pembayaran Tiket via', 232 completionHistoryGuide: 'Untuk melihat riwayat transaksi, Anda dapat memeriksanya melalui aplikasi atau situs web.', 233 completionHistoryApp: 'Melalui Aplikasi: Masuk menggunakan nomor telepon yang digunakan saat memesan tiket, lalu buka menu âRiwayatâ.', 234 completionHistoryWeb: 'Melalui Situs Web: Buka menu Reservasi dan masukkan nomor telepon yang digunakan saat memesan tiket, atau buka menu Cek Booking dan masukkan kode booking.', 235 completionThankYou: 'Terima kasih telah menggunakan', 236 completionTicketDetails: 'Detail Tiket', 237 surveyFillPrompt: 'Silakan isi data di bawah ini', 238 surveyHearOpinion: 'Kami Ingin Mendengar Pendapat Anda!', 239 surveyDescription: 'Bantu kami meningkatkan pengalaman Anda dengan menjawab beberapa pertanyaan singkat. Pendapat Anda sangat berarti bagi kami!', 240 surveyEstimatedTime: 'Estimasi waktu pengisian:', 241 surveyFiveMinutes: '5 Menit', 242 surveyStart: 'Mulai Survei', 243 surveyDoNotShowAgain: 'Jangan tampilkan lagi', 244 surveyClose: 'Tutup', 245 surveyThankYou: 'Terima kasih atas masukan Anda!', 246 surveyThankYouDescription: 'Pendapat Anda membantu kami terus meningkatkan layanan. Kami menghargai waktu Anda dan berharap dapat memberikan pengalaman terbaik pada perjalanan berikutnya.', 247 surveyOf: 'dari', 248 surveyQuestions: 'pertanyaan', 249 surveyNext: 'Selanjutnya', 250 surveySubmit: 'Kirim Jawaban',
251 surveyError: 'Terjadi Kesalahan', 252 ticketBack: 'Kembali', 253 ticketOrderDetails: 'Detail Pesanan', 254 ticketCompletePaymentBefore: 'Selesaikan pembayaran sebelum', 255 ticketPaymentFailed: 'Pembayaran tiket tidak berhasil', 256 ticketPaymentChangeSuccess: 'Berhasil Mengubah Pembayaran!', 257 ticketPaymentChangeFailed: 'Gagal Mengubah Pembayaran!', 258 ticketPayment: 'Pembayaran', 259 ticketHowToPayVia: 'Cara Pembayaran Via', 260 ticketPayWith: 'Bayar dengan', 261 ticketChangePaymentMethod: 'Ubah Metode Pembayaran', 262 ticketPaymentStatus: 'Status Pembayaran', 263 ticketPaid: 'Lunas', 264 ticketCancelled: 'Batal', 265 ticketPassengerData: 'Data Penumpang', 266 ticketDepartureData: 'Data Keberangkatan', 267 ticketReturnData: 'Data Kepulangan', 268 ticketChanged: 'Sudah dimutasi', 269 ticketReschedulePaymentNotice: 'Harap melakukan pembayaran agar proses perubahan jadwal berhasil', 270 ticketBookerData: 'Data Pemesan', 271 ticketPhoneNumber: 'No. Telepon', 272 ticketOrderTime: 'Waktu Pesan', 273 ticketInformation: 'Keterangan', 274 ticketAirline: 'Maskapai', 275 ticketTerminal: 'Terminal', 276 ticketLandingTime: 'Jam Landing', 277 ticketPrice: 'Harga', 278 ticketTotalPrice: 'Total Harga', 279 ticketNotFound: 'Detail Pesanan Tidak Ditemukan', 280 ticketPickupDropoffDetails: 'Detail Area Antar Jemput', 281 ticketRouteDetails: 'Detail Rute', 282 ticketOutbound: 'Pergi', 283 ticketBarcodePaidOnly: 'Barcode hanya dapat ditampilkan setelah pembayaran selesai', 284 ticketPointsEarned: 'Selamat, Anda mendapatkan poin!', 285 ticketPointsDescription: 'Lihat poin yang telah Anda dapatkan di halaman profil.', 286 ticketProfile: 'Profil', 287 ticketLinkCopied: 'Tautan berhasil disalin!', 288 ticketDownload: 'Unduh', 289 ticketPrint: 'Cetak', 290 ticketMemberOnly: '*Khusus member', 291 ticketRateNow: 'Yuk, isi rating Anda sekarang', 292 ticketRateTrip: 'Beri rating perjalanan ini', 293 ticketRatingDeadline: 'Maks. 1x24 jam setelah perjalanan selesai', 294 ticketRatingDescription: 'Ulasan Anda sangat berarti bagi kami untuk terus meningkatkan layanan dan memberikan pengalaman transportasi terbaik.', 295 ticketRatingShortDescription: 'Beri tahu kami melalui rating Anda. Ulasan Anda sangat berarti bagi kami!', 296 ticketEarnPointsAfterRating: 'setelah mengisi rating!', 297 ticketSeatCode: 'Kode Kursi:', 298 ticketVehicleCode: 'Kode Kendaraan', 299 ticketLicensePlate: 'Plat Kendaraan', 300 ticketMutationTerms: 'Syarat & Ketentuan Mutasi', 301 contactPageTitle: 'Kontak', 302 contactUsTitle: 'Hubungi Kami', 303 contactDescription: 'Jangan ragu hubungi call center kami kapan pun kamu membutuhkan.', 304 contactOurLocation: 'Lokasi Kami', 305 contactAddressLabel: 'Alamat:', 306 contactOfficeAddress: 'Alamat Kantor', 307 contactCallCenter: 'Call Center:', 308 contactHotline: 'Hotline:', 309 contactEmailLabel: 'Email:', 310 contactFollowUs: 'Ikuti Kami:', 311 contactDownloadApp: 'Download Aplikasi:', 312 contactNow: 'Hubungi Sekarang', 313 contactViewMap: 'Lihat Peta', 314 contactFastResponse: 'Respon cepat dan customer service yang ramah', 315 contactServiceHours: 'Waktu operasional Pusat Layanan Kami:', 316 contactBranches: 'Cabang', 317 contactImageAlt: 'Kontak', 318 contactOfficesOutlets: 'Kantor & Outlet', 319 contactHelpInformation: 'Pusat Bantuan & Informasi', 320 ticketPageTitle: 'Cek Pesanan', 321 ticketCheckTitle: 'Cek Tiket', 322 ticketCheckOrder: 'Cek Pesanan', 323 ticketCheckBooking: 'Cek Booking Tiket', 324 ticketBookingCode: 'Kode Booking', 325 ticketCodePlaceholder: 'Masukkan Kode di Sini', 326 ticketBookingCodePlaceholder: 'Masukkan kode booking', 327 ticketCodeRequired: 'Silakan masukkan kode booking', 328 ticketCodeNotFound: 'Kode booking tidak ditemukan, mohon pastikan kode yang dimasukkan benar.', 329 ticketCheckImageAlt: 'Cek tiket', 330 ticketReserveNow: 'Reservasi Sekarang', 331 memberPageTitle: 'Profil', 332 memberProfile: 'Profil', 333 memberAccount: 'Akun', 334 memberTransactions: 'Transaksi', 335 memberReservationList: 'Daftar Reservasi', 336 memberRatings: 'Penilaian', 337 memberVoucherList: 'Daftar Voucher', 338 memberVoucherHistory: 'Riwayat Voucher', 339 memberBundlingTransactions: 'Transaksi Bundling', 340 memberLogout: 'Keluar', 341 memberUpdateSuccess: 'Profil berhasil diperbarui.', 342 memberUpdateFailed: 'Gagal memperbarui profil.', 343 memberBirthdayPromo: 'Isi data dirimu untuk mendapatkan diskon spesial di hari ulang tahunmu.', 344 memberBirthdayPromoDesc: 'Jangan lewatkan kesempatan ini untuk merayakan momen spesial dengan lebih hemat!', 345 memberCompleteData: 'Lengkapi Data', 346 memberHello: 'Halo', 347 memberProfileDescription: 'Informasi detail profil kamu',
348 memberEditProfile: 'Edit Profil', 349 memberFullName: 'Nama Lengkap', 350 memberPhone: 'Nomor Telepon', 351 memberEmail: 'Email', 352 memberAddress: 'Alamat', 353 memberBirthDate: 'Tanggal Lahir', 354 memberGender: 'Jenis Kelamin', 355 memberStatus: 'Status', 356 memberCode: 'Kode Member', 357 memberJoinBenefit: 'Gabung member dan dapatkan keuntungannya, gratis!', 358 memberUpgrade: 'Upgrade Member', 359 memberCheckEmailVerification: 'Silakan cek email Anda untuk verifikasi', 360 memberMembership: 'Membership', 361 memberExpiryDate: 'Tanggal Kedaluwarsa', 362 memberYourPoints: 'Poin Kamu', 363 memberPointHistory: 'Riwayat Poin', 364 memberPointHistoryEmpty: 'Riwayat Poin Tidak Tersedia', 365 memberTicketReservation: 'Reservasi Tiket', 366 memberProfileNotFound: 'Detail profil ini tidak ditemukan', 367 memberPending: 'Menunggu', 368 memberJoinTitle: 'Yuk! Gabung Jadi Member', 369 memberJoinDescription: 'Dapatkan keuntungan eksklusif dan nikmati perjalanan yang lebih hemat!', 370 memberEditDescription: 'Yuk, isi data diri dengan benar.', 371 memberNamePlaceholder: 'Masukkan nama Anda', 372 memberEmailPlaceholder: 'Masukkan email', 373 memberSelectStatus: 'Pilih Status', 374 memberCompleteForm: 'Mohon lengkapi form terlebih dahulu', 375 memberBirthPlace: 'Tempat Lahir', 376 memberIdentityNumber: 'No. KTP', 377 memberPostalCode: 'Kode Pos', 378 memberCity: 'Kota', 379 memberOccupation: 'Pekerjaan', 380 memberChooseFile: 'Pilih File', 381 memberNoFileChosen: 'Belum ada file dipilih', 382 jobStudent: 'Pelajar / Mahasiswa', 383 jobEmployee: 'Karyawan', 384 jobProfessional: 'Profesional', 385 jobSelfEmployed: 'Wiraswasta', 386 jobEntrepreneur: 'Wirausaha', 387 jobFreelancer: 'Freelance', 388 jobUnemployed: 'Tidak Bekerja', 389 jobCivilServant: 'ASN', 390 jobHousewife: 'Ibu Rumah Tangga', 391 memberType: 'Jenis Member', 392 memberSelfiePhoto: 'Foto Selfie Wajah', 393 memberIdentityPhoto: 'Foto Identitas', 394 memberSubmitSuccess: 'Berhasil mengirimkan data!', 395 memberSubmitFailed: 'Gagal mengirim data', 396 memberCompleteDataFirst: 'Mohon lengkapi data terlebih dahulu.', 397 memberHeicConversionFailed: 'Format HEIC gagal dikonversi. Silakan unggah JPG.', 398 memberRegistrationSuccess: 'Pendaftaran member berhasil', 399 memberRegistrationCheckEmail: 'Registrasi member telah berhasil, silakan cek email Anda untuk aktivasi.', 400 memberRequiredPhotoMissing: 'Masih ada foto wajib yang belum diunggah', 401 memberRegisterTitle: 'Daftar Member', 402 memberUpdateTitle: 'Perbarui Member', 403 memberPoints: 'Poin', 404 commonSave: 'Simpan', 405 commonSuccess: 'Berhasil!', 406 commonFailed: 'Gagal!', 407 validationRequiredPrefix: 'Kamu belum mengisi ', 408 validationDigitsSuffix: ' harus berupa angka', 409 validationInvalidFormatPrefix: 'Format ', 410 validationInvalidSuffix: ' tidak valid', 411 validationUploadRequired: 'File wajib diunggah', 412 validationImageFormat: 'Format harus JPG / PNG / HEIC', 413 validationFileMax5Mb: 'Tidak boleh lebih dari 5MB', 414 validationNameMin: 'Nama minimal 3 huruf', 415 validationNameMax: 'Nama maksimal 30 huruf', 416 validationEmailMin: 'Email minimal 8 karakter', 417 validationEmailMax: 'Email maksimal 64 karakter', 418 validationPhoneMin: 'No. telepon minimal 9 digit', 419 validationPhoneMax: 'No. telepon maksimal 16 digit', 420 validationAddressMin: 'Alamat minimal 10 karakter', 421 validationAddressMax: 'Alamat maksimal 128 karakter', 422 validationBirthDateRequired: 'Kamu belum mengisi tanggal lahir', 423 validationDigitsOnly: 'Field ini hanya boleh berisi angka', 424 validationFileTooLarge: 'File terlalu besar', 425 validationLettersOnly: 'Nama hanya boleh berisi huruf dan spasi', 426 validationNumbersOnly: 'Mohon diisi dengan angka', 427 validationEmailInvalid: 'Format email tidak valid', 428 validationFieldRequired: 'Field ini wajib diisi', 429 validationNameRequired: 'Kamu belum mengisi nama', 430 validationEmailRequired: 'Kamu belum mengisi email', 431 validationPhoneRequired: 'Kamu belum mengisi nomor telepon', 432 validationGenderRequired: 'Kamu belum memilih jenis kelamin', 433 validationBirthPlaceRequired: 'Kamu belum mengisi tempat lahir', 434 validationIdentityRequired: 'Kamu belum mengisi nomor identitas', 435 validationIdentityLength: 'Nomor identitas harus 16 digit', 436 validationOccupationRequired: 'Kamu belum memilih jenis pekerjaan', 437 validationAddressRequired: 'Kamu belum mengisi alamat', 438 validationCityRequired: 'Kamu belum mengisi kota', 439 validationPostalCodeRequired: 'Kamu belum mengisi kode pos', 440 validationMemberTypeRequired: 'Kamu belum memilih kategori member', 441 validationIdentityPhotoRequired: 'Kamu belum mengisi foto identitas', 442 validationSelfieRequired: 'Kamu belum mengisi foto selfie', 443 reservationHistoryTitle: 'Riwayat Reservasi', 444 reservationAwaitingPayment: 'Menunggu Pembayaran', 445 reservationCancelled: 'Batal', 446 reservationPaid: 'Lunas', 447 reservationNeedsRating: 'Perlu Penilaian', 448 reservationBookAgain: 'Pesan Lagi', 449 reservationBookingDetail: 'Detail Booking', 450 reservationEmptyTitle: 'Tidak Ditemukan Riwayat Reservasi Tiket', 451 reservationEmptyDescription: 'Untuk membuat reservasi tiket silakan klik tombol di bawah ini.', 452 reservationEmptyImageAlt: 'Riwayat reservasi kosong',
453 reservationCreate: 'Reservasi', 454 reservationScanMe: 'Pindai Saya!', 455 reservationBookingCode: 'Kode Booking:', 456 reservationConfirmLogout: 'Yakin ingin keluar?', 457 reservationBarcodePaidOnly: 'Barcode hanya bisa ditampilkan setelah pembayaran selesai', 458 reservationLoadError: 'Terjadi kesalahan saat mengambil data reservasi', 459 reservationTicket: 'Reservasi Tiket', 460 ratingPageTitle: 'Penilaian Perjalanan', 461 ratingPageDescription: 'Transaksi yang sudah selesai dan belum diberi rating', 462 ratingNotRated: 'Belum diberi rating', 463 ratingGiveRating: 'Beri Penilaian', 464 ratingEmptyTitle: 'Belum Ada Penilaian', 465 ratingEmptyDescription: 'Saat ini tidak ada transaksi yang perlu diberi rating.', 466 ratingEmptyImageAlt: 'Belum ada penilaian', 467 voucherPageTitle: 'Daftar Voucher', 468 voucherMyVouchers: 'Voucher Saya', 469 voucherValidUntil: 'Berlaku sampai', 470 voucherEmptyTitle: 'Kamu belum memiliki voucher', 471 voucherEmptyImageAlt: 'Belum memiliki voucher', 472 voucherDetail: 'Detail Voucher', 473 voucherCopy: 'Salin', 474 voucherHowToUse: 'Cara Pakai', 475 voucherTerms: 'Syarat & Ketentuan', 476 voucherNoInstructions: 'Tidak ada cara pakai.', 477 voucherHistoryPageTitle: 'Riwayat Voucher', 478 voucherHistoryTitle: 'Riwayat Penggunaan Voucher', 479 voucherPromoFallback: 'Voucher Promo', 480 voucherTrip: 'Perjalanan:', 481 voucherHistoryEmpty: 'Belum ada riwayat penggunaan voucher', 482 voucherHistoryEmptyImageAlt: 'Riwayat voucher kosong', 483 paymentChannelEmptyTitle: 'Metode pembayaran tidak tersedia', 484 paymentChannelEmptyDescription: 'Silakan coba kembali beberapa saat lagi.', 485 paymentChannelEmptyImageAlt: 'Metode pembayaran tidak tersedia', 486 bundlingHistoryEmpty: 'Belum ada riwayat transaksi bundling', 487 bundlingHistoryEmptyImageAlt: 'Riwayat bundling kosong', 488 loginPageTitle: 'Masuk & Daftar', 489 loginRegisterTitle: 'Masuk & Daftar', 490 loginWithPhone: 'Login dengan Nomor Telepon', 491 loginWithWhatsapp: 'Login dengan WhatsApp', 492 loginWithEmail: 'Login dengan Email', 493 loginWithGoogle: 'Login dengan Google', 494 loginContinueTitle: 'Silakan Masuk untuk Melanjutkan', 495 loginButton: 'Masuk', 496 loginCheckPhone: 'Periksa kembali nomor telepon kamu', 497 loginCheckEmail: 'Periksa kembali email kamu', 498 loginTryAnotherMethod: 'coba masuk dengan cara lain', 499 loginVerificationNotice: 'Sebelum melanjutkan, harap lakukan verifikasi untuk keamanan dan kenyamanan Anda. Terima kasih atas pengertiannya.', 500 loginPhoneVerification: 'Verifikasi Nomor Telepon', 501 loginVerifyBeforeContinue: 'Sebelum melanjutkan, harap lakukan verifikasi.', 502 loginWithPhoneShort: 'Dengan Nomor Telepon', 503 loginWithWhatsappShort: 'Dengan Nomor WhatsApp', 504 loginWithEmailShort: 'Dengan Email', 505 loginWithGoogleShort: 'Dengan Google', 506 loginPopupBlocked: 'Jendela pop-up login Google diblokir oleh browser Anda. Silakan klik tombol Google Login lagi untuk melanjutkan.', 507 loginUnauthorizedDomain: 'Domain ini tidak diizinkan. Silakan tambahkan domain ke konsol Firebase Anda.',
508 loginGenericError: 'Terjadi kesalahan saat login', 509 loginOtpError: 'Terjadi kesalahan saat verifikasi OTP', 510 loginPhoneRequired: 'Silakan mengisi nomor telepon', 511 loginPhoneMin: 'Nomor telepon minimal 9 digit', 512 loginPhoneMax: 'Nomor telepon maksimal 16 digit', 513 loginEmailRequired: 'Silakan mengisi email', 514 loginEmailInvalid: 'Email tidak valid', 515 loginEmailMin: 'Email minimal 8 karakter', 516 loginEmailMax: 'Email maksimal 64 karakter', 517 loginLogoAlt: 'Logo operator', 518 loginVerificationImageAlt: 'Verifikasi akun', 519 otpPageTitle: 'Verifikasi OTP', 520 otpEnterCode: 'Masukkan Kode OTP', 521 otpCodeSentTo: 'Kode akan dikirimkan ke', 522 otpCodePlaceholder: 'Masukkan 6 Digit Kode OTP', 523 otpContinue: 'Lanjutkan', 524 otpResendIn: 'Kirim ulang OTP dalam', 525 otpResend: 'Kirim Ulang', 526 otpAttemptsExhausted: 'Percobaan login sudah habis, silakan coba di lain waktu', 527 otpRequestError: 'Terjadi kesalahan saat meminta OTP', 528 otpSessionExpired: 'Sesi telah habis. Silakan muat ulang halaman', 529 otpVerifyError: 'Terjadi kesalahan saat memverifikasi OTP', 530 registerTitle: 'Daftar Akun', 531 registerDescription: 'Yuk, isi data diri dengan benar untuk mendaftarkan akun.', 532 registerName: 'Nama', 533 registerFirstName: 'Nama Depan', 534 registerLastName: 'Nama Belakang', 535 registerPhone: 'No. Telepon', 536 registerPhonePlaceholder: 'Masukkan Nomor Telepon', 537 registerEmail: 'Email', 538 registerEmailPlaceholder: 'Masukkan Email Kamu', 539 registerBirthDate: 'Tanggal Lahir', 540 registerBirthDatePlaceholder: 'Tanggal lahir', 541 registerGender: 'Jenis Kelamin', 542 registerMale: 'Laki-laki', 543 registerFemale: 'Perempuan', 544 registerAddress: 'Alamat', 545 registerAddressPlaceholder: 'Masukkan alamat', 546 registerReferral: 'Kode Referral', 547 registerReferralOptional: 'Kode Referral (opsional)', 548 registerButton: 'Daftar', 549 scheduleSelectNew: 'Pilih Jadwal Baru', 550 scheduleOutbound: 'Pergi', 551 scheduleReturn: 'Pulang', 552 scheduleShowing: 'Menampilkan', 553 scheduleBestSchedules: 'Jadwal Terbaik', 554 scheduleEstimatedJourney: 'Estimasi Perjalanan', 555 scheduleDepartureArrival: 'Berangkat - Tiba:', 556 scheduleSeatsAvailable: 'Kursi Tersedia', 557 scheduleSeatsSoldOut: 'Kursi Habis', 558 scheduleAvailable: 'Tersedia', 559 scheduleSeatsAvailableLower: 'kursi tersedia', 560 scheduleTransit: 'Transit', 561 scheduleDirect: 'Langsung', 562 scheduleEarnPoints: 'Dapatkan poin', 563 scheduleInsufficientSeats: 'Kursi Tidak Cukup', 564 scheduleSoldOut: 'Tiket Habis', 565 scheduleOnlineBookingClosed: 'Jadwal Pemesanan Online Sudah Lewat', 566 schedulePassed: 'Jadwal Sudah Lewat', 567 scheduleSelect: 'Pilih', 568 scheduleJourneyDetails: 'Detail Perjalanan', 569 scheduleFullyBookedTitle: 'Wah, Jadwalnya Sudah Penuh!', 570 scheduleNotFound: 'Jadwal Tidak Ditemukan', 571 scheduleSelectReturnDate: 'Silakan pilih tanggal pulang', 572 scheduleSelectReturnSchedule: 'Silakan pilih jadwal pulang', 573 scheduleSelectOutboundSchedule: 'Silakan pilih jadwal pergi', 574 scheduleSelectDeparture: 'Silakan pilih keberangkatan', 575 scheduleSelectSchedule: 'Pilih Jadwal', 576 scheduleSelectDestination: 'Silakan pilih tujuan', 577 scheduleSelectDepartureDate: 'Silakan pilih tanggal berangkat', 578 scheduleSelectOutboundDate: 'Silakan pilih tanggal pergi', 579 scheduleSeatUnit: 'kursi', 580 scheduleReserveWhatsapp: 'Reservasi Via WhatsApp', 581 scheduleTransitStopAt: 'Berhenti untuk transit di', 582 scheduleForDuration: 'selama', 583 scheduleMinutes: 'menit', 584 scheduleFullyBookedDescription: 'Sayang sekali, semua jadwal ini sudah penuh. Coba cek keberangkatan atau pilih tanggal berbeda.', 585 scheduleHours: 'jam', 586 scheduleViewJourneyDetails: 'Lihat Detail Perjalanan', 587 scheduleDepartureScheduleDetails: 'Detail Jadwal Keberangkatan', 588 scheduleDepartureDetails: 'Detail Keberangkatan', 589 scheduleReturnScheduleDetails: 'Detail Jadwal Pulang', 590 scheduleViewLocation: 'Lihat Lokasi', 591 scheduleDiscount: 'Diskon', 592 schedulePromo: 'Promo', 593 scheduleNewUserPrice: 'Harga Pengguna Baru', 594 scheduleWebsiteNewUserDiscount: 'Diskon Pengguna Baru Website', 595 scheduleSeatLayoutNotFound: 'Maaf, layout kursi tidak ditemukan. Silakan cari jadwal lainnya.', 596 scheduleSeatPrice: 'Harga Kursi', 597 scheduleAdditionalFee: 'Biaya Tambahan', 598 scheduleTotalPriceDifference: 'Total Selisih Harga', 599 scheduleTicketPrice: 'Harga Tiket', 600 scheduleTotal: 'Total',
601 scheduleBookerName: 'Nama Pemesan', 602 schedulePassengerDetails: 'Detail Penumpang', 603 scheduleAddress: 'Alamat', 604 schedulePhone: 'Telepon', 605 scheduleEmail: 'Email', 606 scheduleNewUserDiscount: 'Potongan Bagi Pengguna Baru', 607 scheduleCreateAccount: 'Buat Akun', 608 navHome: 'Beranda', 609 navAbout: 'Tentang', 610 navAboutUs: 'Tentang Kami', 611 navOutlet: 'Outlet', 612 outletPageTitle: 'Lokasi Outlet', 613 outletPageDescription: 'Cari outlet berdasarkan lokasi dan temukan pool fisik atau virtual point di dekatmu.', 614 outletSearchPlaceholder: 'Cari outlet...', 615 outletFilter: 'Filter', 616 outletReset: 'Reset', 617 outletType: 'Tipe', 618 outletPhysicalPool: 'Pool Fisik', 619 outletVirtualPoint: 'Virtual Point', 620 outletCity: 'Kota', 621 outletAvailable: 'Outlet Tersedia', 622 outletAddress: 'Alamat', 623 outletOperatingHours: 'Jam Operasional', 624 outletOpen: 'Buka', 625 outletClose: 'Tutup', 626 outletPostalCode: 'Kode Pos', 627 outletContact: 'Kontak', 628 outletViewMaps: 'Lihat di Maps', 629 outletResultsFound: 'hasil ditemukan', 630 outletShowLess: 'Lebih Sedikit', 631 outletShowAll: 'Lihat Semua', 632 outletNoData: 'Data outlet tidak tersedia', 633 outletIn: 'Outlet di', 634 navBlog: 'Blog', 635 navPaymentGuide: 'Cara Bayar', 636 navMotorRental: 'Sewa Motor', 637 navTravelGuide: 'Panduan Perjalanan', 638 navAdvertisingServices: 'Iklan dan Layanan', 639 navBundling: 'Bundling', 640 navDownloadLink: 'link berikut', 641 navOfficialWebsitePrefix: 'Website Resmi', 642 navPrimaryAria: 'Navigasi Utama', 643 navDownloadAppAt: 'download aplikasinya di', 644 navContact: 'Kontak', 645 navGallery: 'Galeri', 646 navNews: 'Berita', 647 navPromo: 'Promo', 648 navRental: 'Rental', 649 navFaq: 'FAQ', 650 navTerms: 'Syarat & Ketentuan', 651 navPackage: 'Paket', 652 navTourism: 'Pariwisata', 653 navCheckBooking: 'Cek Booking', 654 navCheckTicket: 'Cek Tiket', 655 navCheckPackage: 'Cek Paket', 656 navSendPackage: 'Kirim Paket', 657 navDownloadApp: 'Download App', 658 navAccount: 'Akun', 659 navRegisterLogin: 'Daftar/Masuk', 660 navLogin: 'Masuk', 661 navProfile: 'Profil', 662 navMyVoucher: 'Voucher Saya', 663 navMyTransaction: 'Transaksi Saya', 664 navBundlingTransaction: 'Transaksi Bundling', 665 navLogout: 'Keluar', 666 navNew: 'Baru', 667 logoutConfirmation: 'Yakin ingin keluar?', 668 commonNo: 'Tidak', 669 commonYes: 'Ya', 670 commonLoading: 'Memuat...', 671 commonHello: 'Halo', 672 commonChatNow: 'Chat Sekarang', 673 commonClose: 'Tutup', 674 commonChange: 'Ubah', 675 passengerPageTitle: 'Data Pemesan', 676 passengerPersonalData: 'Data Diri', 677 passengerBookerData: 'Data Pemesan', 678 passengerBookerName: 'Nama Pemesan', 679 passengerBookerNamePlaceholder: 'Masukkan nama pemesan', 680 passengerBookerEmail: 'Email Pemesan', 681 passengerEmailPlaceholder: 'Masukkan Email', 682 passengerEmailPurpose: 'Email diperlukan untuk mengirim e-tiket, kode bayar & OTP', 683 passengerUsingUserEmail: '*Menggunakan email pengguna', 684 passengerPhone: 'Nomor Telepon', 685 passengerPhonePlaceholder: 'Masukkan No. Telepon', 686 passengerUsingUserPhone: '*Menggunakan nomor pengguna', 687 passengerAddress: 'Alamat', 688 passengerAddressPlaceholder: 'Masukkan Alamat', 689 passengerData: 'Data Penumpang', 690 passengerName: 'Nama Penumpang', 691 passengerNamePlaceholder: 'Masukkan nama penumpang', 692 passengerBookerIsPassenger: 'Pemesan adalah penumpang', 693 passengerPickupDropoffData: 'Data Alamat Antar & Jemput', 694 passengerPickupDropoffType: 'Jenis Antar Jemput', 695 passengerPickupAddress: 'Alamat Jemput', 696 passengerPickupAddressPlaceholder: 'Masukkan Alamat Jemput', 697 passengerPickupArea: 'Area Jemput', 698 passengerSelectPickupArea: 'Pilih Area Jemput', 699 passengerDropoffAddress: 'Alamat Antar', 700 passengerDropoffAddressPlaceholder: 'Masukkan Alamat Antar', 701 passengerDropoffArea: 'Area Antar', 702 passengerSelectDropoffArea: 'Pilih Area Antar', 703 passengerPrevious: 'Sebelumnya', 704 passengerPayment: 'Pembayaran', 705 passengerSelectSeat: 'Pilih Kursi', 706 passengerFinished: 'Selesai', 707 passengerUniqueName: 'Nama penumpang tidak boleh sama.', 708 passengerEnterBookerFirst: 'Masukkan nama pemesan terlebih dahulu!', 709 passengerValidationBookerRequired: 'Silakan isi nama pemesan', 710 passengerValidationBookerMin: 'Nama pemesan minimal 3 huruf', 711 passengerValidationBookerMax: 'Nama pemesan maksimal 30 huruf', 712 passengerValidationEmailRequired: 'Silakan isi email', 713 passengerValidationEmailInvalid: 'Email tidak valid', 714 passengerValidationEmailMin: 'Email minimal 8 karakter', 715 passengerValidationEmailMax: 'Email maksimal 64 karakter', 716 passengerValidationAddressRequired: 'Silakan isi alamat', 717 passengerValidationAddressMax: 'Alamat maksimal 128 karakter', 718 passengerValidationPhoneRequired: 'Silakan isi nomor telepon', 719 passengerValidationPhoneMin: 'Nomor telepon minimal 9 digit', 720 passengerValidationPhoneMax: 'Nomor telepon maksimal 16 digit', 721 passengerValidationNameRequired: 'Silakan isi nama penumpang', 722 passengerValidationNameMin: 'Nama penumpang minimal 3 huruf',
723 passengerValidationNameMax: 'Nama penumpang maksimal 30 huruf', 724 passengerValidationPickupAddressRequired: 'Silakan isi alamat jemput', 725 passengerValidationPickupAreaRequired: 'Silakan pilih area jemput', 726 passengerValidationDropoffAddressRequired: 'Silakan isi alamat antar', 727 passengerValidationDropoffAreaRequired: 'Silakan pilih area antar', 728 seatPageTitle: 'Pilih Kursi', 729 seatChooseBest: 'Pilih kursi terbaik kamu!', 730 seatOutbound: 'Pergi', 731 seatReturn: 'Pulang', 732 seatBooked: 'Sudah dipesan', 733 seatYourChoice: 'Pilihan Anda', 734 seatAvailable: 'Kosong', 735 seatView: 'Tampilan:', 736 seatNote: 'Catatan:', 737 seatFlexibleLayoutNote: 'Unit armada dan tata letak kursi saat reservasi bersifat fleksibel dan dapat mengalami penyesuaian demi efisiensi dan optimalisasi perjalanan.', 738 seatChildTicketNote: 'Anak umur 2 tahun atau dengan tinggi lebih dari 100 cm harus membeli tiket.', 739 seatAvailabilityNote: 'Kursi sewaktu-waktu dapat dipesan oleh pengguna lain yang lebih dahulu menyelesaikan pembelian.', 740 seatPassengerList: 'Daftar Penumpang', 741 seatTotal: 'Total', 742 seatNext: 'Selanjutnya', 743 seatReturnSeat: 'Kursi Pulang', 744 seatNextSelection: 'Pilih Kursi Selanjutnya', 745 seatChange: 'Ubah Kursi', 746 seatDriver: 'SUPIR', 747 seatPromo: 'Promo', 748 seatNotSelected: 'Anda belum memilih kursi', 749 seatLayoutUnavailable: 'Data layout tidak tersedia', 750 seatNumberPrefix: 'Kursi', 751 seatPriceBeforeReschedule: 'Harga Sebelum Mutasi', 752 seatPriceBeforeChange: 'Harga Sebelum Mutasi', 753 locationUnavailable: 'Lokasi tidak tersedia', 754 locationLoadFailed: 'Lokasi gagal dimuat', 755 locationAllowAccess: 'Izinkan akses lokasi', 756 locationFallback: 'Lokasi', 757 footerCallCenter: 'Call Center', 758 footerPhone: 'Telepon', 759 footerWhatsapp: 'Pesan WhatsApp', 760 footerScheduleRouteInfo: 'Informasi Jadwal & Rute', 761 footerEmail: 'Email', 762 footerInformation: 'Informasi', 763 footerAboutUs: 'Tentang Kami', 764 footerContact: 'Kontak', 765 footerCareer: 'Karier', 766 footerTourism: 'Pariwisata', 767 footerPaymentGuide: 'Cara Bayar', 768 footerPrivacyPolicy: 'Kebijakan Privasi', 769 footerTerms: 'Syarat & Ketentuan', 770 footerSocialMedia: 'Media Sosial', 771 footerFollowUs: 'Ikuti Kami', 772 footerDownloadApp: 'Unduh Aplikasi', 773 footerOthers: 'Lainnya', 774 footerCompany: 'Perusahaan', 775 footerAllRightsReserved: 'Semua Hak Dilindungi Undang-Undang', 776 footerMenu: 'Menu', 777 footerServices: 'Layanan', 778 footerOurServices: 'Layanan Kami', 779 footerContactUs: 'Hubungi Kami', 780 footerDailyRental: 'Sewa Mobil Harian', 781 footerMonthlyRental: 'Sewa Mobil Bulanan', 782 footerYearlyRental: 'Sewa Mobil Tahunan', 783 footerTourRental: 'Sewa Mobil Wisata', 784 footerWeddingRental: 'Sewa Mobil Pernikahan', 785 footerOpen: 'Buka', 786 footerTravelDescription: 'Nikmati perjalanan tanpa ribet dengan layanan transportasi terbaik dari BTM Shuttle.', 787 footerSchedule: 'Jadwal', 788 footerAgentRegistration: 'Pendaftaran Agen', 789 footerLogistics: 'Logistik', 790 footerFeedback: 'Masukan', 791 footerLegalInfo: 'Informasi Legal', 792 footerOffice: 'Kantor', 793 footerPool: 'Pool', 794 footerEveryDay: 'Setiap Hari', 795 footerUntil: 's.d.', 796 footerLogoAlt: 'Logo perusahaan', 797 footerLocationAlt: 'Lokasi', 798 footerMainRoutes: 'Layanan Rute Utama', 799 footerPaymentMethod: 'Metode Pembayaran', 800 footerTicketTerms: 'Syarat & Ketentuan Tiket', 801 footerPackageTerms: 'Syarat & Ketentuan Titip Kirim Paket', 802 footerPopularRoutes: 'Rute Populer', 803 footerFAQ: 'FAQ', 804 footerAboutOperator: 'Tentang', 805 galleryTitle: 'Galeri', 806 galleryViewMore: 'Lihat Lebih Banyak', 807 galleryViewOthers: 'Lihat galeri lainnya', 808 galleryDefaultItemTitle: 'Galeri Perjalanan Terbaik', 809 galleryDefaultItemDescription: 'Lihat armada terbaik dan momen perjalanan nyaman bersama layanan shuttle profesional kami.', 810 galleryExplorePrefix: 'Telusuri Keindahan Perjalanan Bers
810ama', 811 galleryExploreSuffix: 'Pengalaman Tanpa Batas, Destinasi Terbaik!', 812 galleryImageAlt: 'Galeri', 813 newsTitle: 'Berita', 814 newsFollowPrefix: 'Ikuti kabar dari', 815 newsFollowSuffix: 'termasuk rute, tarif, dan jadwal perjalanan', 816 newsTravelTipsTitle: 'Tips & Info Seputar Perjalanan', 817 newsTravelTipsDescription: 'Baca berbagai artikel menarik seputar tips perjalanan, destinasi wisata, dan info transportasi yang bermanfaat buat kamu.', 818 newsViewMore: 'Lihat Selengkapnya', 819 newsViewAll: 'Lihat Semua', 820 newsViewAllArticles: 'Lihat Semua Artikel', 821 newsImageAlt: 'Berita', 822 newsDefaultExcerpt: 'Dapatkan informasi perjalanan terbaru sebelum memulai perjalanan Anda.', 823 downloadInstallPrefix: 'Instal aplikasi', 824 downloadInstallSuffix: 'di Play Store dan App Store sekarang juga!', 825 downloadAppImageAlt: 'Aplikasi', 826 downloadPhoneImageAlt: 'Tampilan aplikasi di ponsel', 827 operatorDownloadTitle: 'Nikmati perjalanan lebih mudah bersama kami', 828 operatorDownloadDescription: 'Pesan tiket dan kelola perjalanan langsung dari ponsel Anda.', 829 operatorDownloadCallToAction: 'Unduh aplikasi sekarang!', 830 downloadAppPageTitle: 'Unduh Aplikasi', 831 downloadAppVisitWebsite: 'Kunjungi Website', 832 downloadAppShareLink: 'Bagikan Link', 833 downloadAppCopy: 'Salin', 834 downloadAppCopied: 'Tautan telah disalin.', 835 downloadAppOr: 'atau', 836 downloadAppDownloadQr: 'Unduh QR', 837 localeTitle: 'Pilih Bahasa & Mata Uang', 838 localeSearchPlaceholder: 'Cari bahasa atau mata uang...', 839 localeLanguage: 'Bahasa', 840 localeCurrency: 'Mata Uang', 841 localeCancel: 'Batal', 842 localeSaveChanges: 'Simpan Perubahan', 843 collapseGreeting: 'Hai, Teman ð', 844 collapseWelcome: 'Selamat datang di', 845 collapseSelfCheckin: 'Check-in Mandiri' 846 }, 847 en: { 848 bookingShuttle: 'Shuttle', 849 bookingMotorRental: 'Motorcycle Rental', 850 bookingRoundTrip: 'Round Trip?', 851 bookingDeparture: 'Departure', 852 bookingOrigin: 'Origin', 853 bookingSelectDeparture: 'Select Departure', 854 bookingSelectOrigin: 'Select Origin', 855 bookingDestination: 'Destination', 856 bookingSelectDestination: 'Select Destination', 857 bookingSelectDestinationLocation: 'Select Destination', 858 bookingSelectDate: 'Select Date', 859 bookingOneWay: 'One Way', 860 bookingDepartureDate: 'Departure Date', 861 bookingReturnDate: 'Return Date', 862 bookingPassenger: 'Passenger', 863 bookingPassengerCount: 'Number of Passengers', 864 bookingSelectPassenger: 'Select Passengers', 865 bookingPassengerUnit: 'Passenger(s)', 866 bookingSearch: 'Search', 867 bookingSearchTrip: 'Search Trip', 868 commonSearch: 'Search', 869 commonNoResults: 'No results', 870 commonSearching: 'Searching...', 871 bookingValidationDeparture: 'Please select a departure point', 872 bookingValidationDestination: 'Please select a destination', 873 bookingValidationDepartureDate: 'Please select a departure date', 874 bookingValidationReturnDate: 'Please select a return date', 875 bookingNoDeparture: 'No departures found', 876 bookingNoDestination: 'No destinations found', 877 bookingSearchLocation: 'Type a city, location, or area', 878 homepageNewsReadMore: 'Read More', 879 homepageNewsViewAll: 'View All News', 880 homepageNewsTitle: 'Latest Namaste Updates', 881 homepageNewsDescription: 'Stay informed about Namaste services, routes, and travel updates before starting your journey.', 882 homepageNewsDescriptionMobile: 'Stay informed about the latest Namaste services, routes, and travel updates.', 883 homepageViewMore: 'View More', 884 homepageFacilities: 'Facilities', 885 homepageServices: 'Services', 886 homepageAdvantages: 'Advantages', 887 homepageOurLocation: 'Our Location', 888 homepageRegisterMember: 'Register as Member', 889 homepageBookNow: 'Book Now', 890 homepageViewDetails: 'View Details', 891 homepageViewAllOutlets: 'View All Outlets', 892 homepageBookingTutorial: 'Booking Tutorial', 893 homepageChangeDeparture: 'Change Departure', 894 homepageFaq: 'FAQ', 895 homepageComingSoon: 'Coming Soon', 896 homepageBannerAlt: 'Promotional banner', 897 scheduleSelect: 'Select', 898 scheduleExpired: 'Schedule has passed', 899 scheduleInsufficientSeats: 'Not enough seats',
900 scheduleNotFound: 'Schedule not found', 901 scheduleDepartureArrival: 'departure - arrival', 902 scheduleTravelEstimate: 'Estimated travel time', 903 promoSpecialTitle: 'Special Promo!', 904 promoExclusiveTitle: 'Exclusive Promo', 905 promoInterestingTitle: 'Exciting Promos for You!', 906 promoBestLabel: 'ð¥ Best Promo', 907 promoSeatUnit: '/seat', 908 outletOurTitle: 'Our Outlets', 909 instagramFollowUs: 'Follow Us on Instagram', 910 homepageViewAll: 'View All', 911 homepageAll: 'All', 912 homepageAmount: 'Amount', 913 homepageDate: 'Date', 914 homepageLocation: 'Location', 915 serviceMore: 'Learn More â', 916 ansAgentTitle: 'ANS Agents', 917 ansAgentDescription: 'Find the nearest ANS agent in your city for information and the best service.', 918 homepageLatestNewsTitle: 'Latest Updates for Your Journey!', 919 homepageLatestNewsDescription: 'Discover exciting promos, new routes, and important travel information.', 920 blogPageTitle: 'Promos and News', 921 blogSearchPlaceholder: 'Search promos, news, or articles...', 922 blogSearchAria: 'Search promos, news, or articles', 923 blogSearchButton: 'Search', 924 blogSearchEmpty: 'No promos or news found', 925 blogReadMore: 'Read More', 926 blogEmpty: 'No articles yet', 927 blogPrevious: 'Previous', 928 blogNext: 'Next', 929 blogHome: 'Home', 930 blogTableOfContents: 'Table of Contents', 931 blogShare: 'Share', 932 blogAuthor: 'Author:', 933 blogPublished: 'Published:', 934 blogUpdated: 'Updated:', 935 blogShareFacebook: 'Share on Facebook', 936 blogShareX: 'Share on X', 937 blogCopyLink: 'Copy article link', 938 blogLinkCopied: 'Link copied successfully', 939 blogOtherNews: 'Other News', 940 blogPromoNews: 'Promos & News', 941 blogEmptyDetail: 'No News Available!', 942 blogEmptyImageAlt: 'No article image available', 943 rentalTitle: 'Rental', 944 rentalMotorTitle: 'Motorcycle Rental', 945 rentalContactUs: 'Contact Us', 946 rentalStartingFrom: 'Starting from', 947 rentalOrder: 'Book', 948 rentalBookNow: 'Book Now', 949 rentalTerms: 'Terms and Conditions', 950 rentalTourTerms: 'Rental & Tour Terms and Conditions', 951 rentalClose: 'Close', 952 rentalFullName: 'Full Name', 953 rentalFullNamePlaceholder: 'Enter your full name', 954 rentalEmailPlaceholder: 'Enter your email', 955 rentalPhone: 'Phone Number', 956 rentalVehicle: 'Vehicle', 957 rentalSelectVehicle: 'Select vehicle', 958 rentalVehicleType: 'Vehicle Type', 959 rentalUnitCount: 'Number of Units', 960 rentalDecreaseUnit: 'Decrease unit', 961 rentalIncreaseUnit: 'Increase unit', 962 rentalDate: 'Rental Date', 963 rentalDatePlaceholder: 'dd/mm/yyyy', 964 rentalDuration: 'Duration', 965 rentalDay: 'days', 966 rentalAdditionalNote: 'Additional Notes', 967 rentalAdditionalNotePlaceholder: 'Enter additional notes', 968 rentalRequired: '*Required', 969 rentalPrivacyPrefix: 'I authorize', 970 rentalPrivacySuffix: 'to use the information above and contact me by email, phone, or other personal communication channels for customer service activities in accordance with the', 971 rentalPrivacyConsent: 'Privacy Consent', 972 rentalVehicleModel: 'Vehicle Model', 973 rentalWeekly: 'Weekly Rental', 974 rentalMonthly: 'Monthly Rental', 975 rentalBestValue: 'Best Value', 976 rentalFleetNavigation: 'Fleet selection navigation', 977 rentalFleet: 'Fleet', 978 rentalMotorCashbackValue: 'Cashback Value:', 979 rentalMotorHeroAlt: 'Motorcycle rental in Bali', 980 rentalMotorCtaAlt: 'Explore Bali by motorcycle', 981 rentalReserveNow: 'Reserve Now', 982 rentalMinimumVehicle: 'Select at least 1 vehicle unit.', 983 rentalUnit: 'unit', 984 rentalCustomerData: 'Customer Details:', 985 rentalName: 'Name:', 986 rentalRentalDetails: 'Rental Details:', 987 rentalNote: 'Notes:', 988 rentalMotorWhatsappGreeting: 'Hello, I would like to rent a motorcycle.', 989 rentalBookTitle: 'Book Rental', 990 rentalVehicleGreeting: 'Hello, I would like to rent a vehicle from', 991 rentalNumberOfDays: 'Number of Days', 992 rentalDestination: 'Destination', 993 rentalDestinationPlaceholder: 'Example: Cimahi Town Square',
994 rentalPickupPoint: 'Pickup Point', 995 rentalPerDay: '/day', 996 paymentPageTitle: 'Payment Methods', 997 paymentPageDescription: 'Enjoy convenient and easy transactions.', 998 paymentImageAlt: 'Payment methods', 999 paymentHowToUse: 'HOW TO PAY USING', 1000 paymentUnavailableTitle: 'Payment Methods Are Unavailable', 1001 paymentUnavailableDescription: "Sorry, we can't show the payment methods right now. Please try again in a moment.", 1002 checkoutPersonalData: 'Personal Details', 1003 checkoutSelectSeat: 'Select Seat', 1004 checkoutComplete: 'Complete', 1005 checkoutNewUserVoucherBadge: 'Use the new-user discount voucher', 1006 checkoutUseVoucher: 'Use Voucher', 1007 checkoutNewUserVoucher: 'New User Voucher', 1008 checkoutTerms: 'Terms and Conditions', 1009 checkoutLoginToClaim: 'Log In to Claim', 1010 checkoutClaimVoucher: 'Claim Voucher', 1011 checkoutVoucherApplied: 'Voucher Applied', 1012 checkoutVoucherApplySuccess: 'Successfully applied!', 1013 checkoutLoadingData: 'Loading data ...', 1014 checkoutSelectPaymentMethod: 'Select Payment Method', 1015 checkoutBalance: 'Balance:', 1016 checkoutPriceDetails: 'Price Details', 1017 checkoutTermsAgreement: 'Please check this box to confirm that you understand and accept the terms and conditions imposed by the operator management', 1018 checkoutPrevious: 'Previous', 1019 checkoutConfirm: 'Confirm', 1020 checkoutAvailableVouchers: 'Available Vouchers', 1021 checkoutVoucherPlaceholder: 'Enter Voucher Code', 1022 checkoutApply: 'Apply', 1023 checkoutReadCarefully: 'Please Read', 1024 checkoutConfirmOrder: 'Confirm Your Order?', 1025 checkoutCancel: 'Cancel', 1026 checkoutTicketPrice: 'Ticket Price', 1027 checkoutTotalDiscount: 'Total Discount', 1028 checkoutServiceFee: 'Service Fee', 1029 checkoutTotalPayment: 'Total Payment', 1030 checkoutNoVouchers: 'No vouchers are available.', 1031 checkoutRemove: 'Remove', 1032 checkoutUse: 'Use', 1033 checkoutSelectPaymentAlert: 'Please select a payment method!', 1034 checkoutAcceptTermsAlert: 'Please accept the terms and conditions imposed by ASMAT and the Shuttle operator management.', 1035 checkoutTermsLoadError: 'An error occurred while retrieving the terms and conditions!', 1036 checkoutVoucherNewUserOnly: '*You do not meet the terms and conditions; this voucher is only valid for new users.', 1037 checkoutEarnPoints: 'Earn {{count}} Points', 1038 checkoutRegisterForPoints: '*Register as a member to earn cashback points', 1039 checkoutLoginRegisterForPoints: '*Log in and register as a member to earn cashback points', 1040 checkoutNoPoints: 'You do not have any points yet', 1041 checkoutLoginForPoints: 'Log in to pay with points', 1042 checkoutLoginNow: 'Log In Now', 1043 checkoutMealPackage: 'Meal Package', 1044 checkoutMealDescription: 'Make your journey more comfortable by adding your favorite meal package!', 1045 checkoutMealAddonTitle: 'Meal Package Add-on', 1046 checkoutClose: 'Close', 1047 checkoutAddPackageFor: 'Add package for:', 1048 checkoutSelectPassenger: 'Select at least one passenger.', 1049 checkoutNotePlaceholder: 'Add a note...', 1050 checkoutAdd: 'Add', 1051 checkoutOrderer: 'Orderer', 1052 checkoutNoteShort: 'Note', 1053 checkoutAddMealPackage: 'Add meal package', 1054 checkoutRemoveMealPackage: 'Remove meal package', 1055 completionOrderCreated: 'Order Created!', 1056 completionBookingCode: 'Booking Code', 1057 completionPaymentCode: 'Payment Code', 1058 completionCopy: 'COPY', 1059 completionPaymentCodeCopied: 'Payment code copied successfully.', 1060 completionPaymentDeadline: 'Payment Deadline', 1061 completionPayNow: 'Pay Now', 1062 completionDiscount: 'Discount', 1063 completionAdminFee: 'Admin Fee', 1064 completionPickupFee: 'Pickup Fee', 1065 completionDropoffFee: 'Drop-off Fee', 1066 completionFoodAddon: 'Meal Add-on', 1067 completionPaymentGuide: 'Ticket Payment Guide via', 1068 completionHistoryGuide: 'You can view your transaction history through the app or website.', 1069 completionHistoryApp: 'Using the App: Log in with the phone number used to book the ticket, then open the âHistoryâ menu.', 1070 completionHistoryWeb: 'Using the Website: Open Reservations and enter the phone number used to book the ticket, or open Check Booking and enter your booking code.', 1071 completionThankYou: 'Thank you for choosing', 1072 completionTicketDetails: 'Ticket Details', 1073 surveyFillPrompt: 'Please complete the information below', 1074 surveyHearOpinion: 'We Want to Hear Your Opinion!', 1075 surveyDescription: 'Help us improve your experience by answering a few short questions. Your opinion means a lot to us!', 1076 surveyEstimatedTime: 'Estimated completion time:', 1077 surveyFiveMinutes: '5 Minutes', 1078 surveyStart: 'Start Survey', 1079 surveyDoNotShowAgain: 'Do not show again', 1080 surveyClose: 'Close', 1081 surveyThankYou: 'Thank you for your feedback!', 1082 surveyThankYouDescription: 'Your feedback helps us continue improving our service. We appreciate your time and hope to provide the best experience on your next journey.', 1083 surveyOf: 'of', 1084 surveyQuestions: 'questions', 1085 surveyNext: 'Next', 1086 surveySubmit: 'Submit Answers', 1087 surveyError: 'An Error Occurred', 1088 ticketBack: 'Back', 1089 ticketOrderDetails: 'Order Details', 1090 ticketCompletePaymentBefore: 'Complete payment before', 1091 ticketPaymentFailed: 'Ticket payment was unsuccessful', 1092 ticketPaymentChangeSuccess: 'Payment method changed successfully!', 1093 ticketPaymentChangeFailed: 'Failed to change the payment method!', 1094 ticketPayment: 'Payment', 1095 ticketHowToPayVia: 'How to Pay Via', 1096 ticketPayWith: 'Pay with', 1097 ticketChangePaymentMethod: 'Change Payment Method', 1098 ticketPaymentStatus: 'Payment Status', 1099 ticketPaid: 'Paid', 1100 ticketCancelled: 'Cancelled', 1101 ticketPassengerData: 'Passenger Data', 1102 ticketDepartureData: 'Departure Data', 1103 ticketReturnData: 'Return Data', 1104 ticketChanged: 'Rescheduled', 1105 ticketReschedulePaymentNotice: 'Please complete payment to finalize the schedule change', 1106 ticketBookerData: 'Booker Data', 1107 ticketPhoneNumber: 'Phone Number', 1108 ticketOrderTime: 'Order Time', 1109 ticketInformation: 'Information', 1110 ticketAirline: 'Airline', 1111 ticketTerminal: 'Terminal', 1112 ticketLandingTime: 'Landing Time', 1113 ticketPrice: 'Price', 1114 ticketTotalPrice: 'Total Price', 1115 ticketNotFound: 'Order Details Not Found', 1116 ticketPickupDropoffDetails: 'Pickup and Drop-off Area Details', 1117 ticketRouteDetails: 'Route Details', 1118 ticketOutbound: 'Outbound', 1119 ticketBarcodePaidOnly: 'The barcode is only available after payment is completed', 1120 ticketPointsEarned: 'Congratulations, you earned points!', 1121 ticketPointsDescription: 'View the points you have earned on your profile page.', 1122 ticketProfile: 'Profile', 1123 ticketLinkCopied: 'Link copied successfully!', 1124 ticketDownload: 'Download', 1125 ticketPrint: 'Print', 1126 ticketMemberOnly: '*Members only', 1127 ticketRateNow: 'Rate your trip now', 1128 ticketRateTrip: 'Rate this trip', 1129 ticketRatingDeadline: 'Available for up to 24 hours after the trip is completed', 1130 ticketRatingDescription: 'Your review helps us improve our service and provide you with the best transportation experience.', 1131 ticketRatingShortDescription: 'Tell us through your rating. Your review means a lot to us!', 1132 ticketEarnPointsAfterRating: 'after submitting your rating!', 1133 ticketSeatCode: 'Seat Code:',
1134 ticketVehicleCode: 'Vehicle Code', 1135 ticketLicensePlate: 'License Plate', 1136 ticketMutationTerms: 'Reschedule Terms & Conditions', 1137 contactPageTitle: 'Contact', 1138 contactUsTitle: 'Contact Us', 1139 contactDescription: 'Feel free to contact our call center whenever you need assistance.', 1140 contactOurLocation: 'Our Location', 1141 contactAddressLabel: 'Address:', 1142 contactOfficeAddress: 'Office Address', 1143 contactCallCenter: 'Call Center:', 1144 contactHotline: 'Hotline:', 1145 contactEmailLabel: 'Email:', 1146 contactFollowUs: 'Follow Us:', 1147 contactDownloadApp: 'Download the App:', 1148 contactNow: 'Contact Now', 1149 contactViewMap: 'View Map', 1150 contactFastResponse: 'Fast response and friendly customer service', 1151 contactServiceHours: 'Our Service Center operating hours:', 1152 contactBranches: 'Branches', 1153 contactImageAlt: 'Contact', 1154 contactOfficesOutlets: 'Offices & Outlets', 1155 contactHelpInformation: 'Help & Information Center', 1156 ticketPageTitle: 'Check Booking', 1157 ticketCheckTitle: 'Check Ticket', 1158 ticketCheckOrder: 'Check Booking', 1159 ticketCheckBooking: 'Check Ticket Booking', 1160 ticketBookingCode: 'Booking Code', 1161 ticketCodePlaceholder: 'Enter Code Here', 1162 ticketBookingCodePlaceholder: 'Enter booking code', 1163 ticketCodeRequired: 'Please enter your booking code', 1164 ticketCodeNotFound: 'Booking code not found. Please make sure the code you entered is correct.', 1165 ticketCheckImageAlt: 'Check ticket', 1166 ticketReserveNow: 'Reserve Now', 1167 memberPageTitle: 'Profile', 1168 memberProfile: 'Profile', 1169 memberAccount: 'Account', 1170 memberTransactions: 'Transactions', 1171 memberReservationList: 'Reservation List', 1172 memberRatings: 'Ratings', 1173 memberVoucherList: 'Voucher List', 1174 memberVoucherHistory: 'Voucher History', 1175 memberBundlingTransactions: 'Bundling Transactions', 1176 memberLogout: 'Log Out', 1177 memberUpdateSuccess: 'Profile updated successfully.', 1178 memberUpdateFailed: 'Failed to update profile.', 1179 memberBirthdayPromo: 'Complete your details to receive a special discount on your birthday.', 1180 memberBirthdayPromoDesc: 'Do not miss this opportunity to celebrate your special moment for less!', 1181 memberCompleteData: 'Complete Details', 1182 memberHello: 'Hello', 1183 memberProfileDescription: 'Your detailed profile information', 1184 memberEditProfile: 'Edit Profile', 1185 memberFullName: 'Full Name', 1186 memberPhone: 'Phone Number', 1187 memberEmail: 'Email', 1188 memberAddress: 'Address', 1189 memberBirthDate: 'Date of Birth', 1190 memberGender: 'Gender', 1191 memberStatus: 'Status', 1192 memberCode: 'Member Code', 1193 memberJoinBenefit: 'Join as a member and enjoy the benefits for free!', 1194 memberUpgrade: 'Upgrade Membership', 1195 memberCheckEmailVerification: 'Please check your email for verification', 1196 memberMembership: 'Membership', 1197 memberExpiryDate: 'Expiry Date', 1198 memberYourPoints: 'Your Points', 1199 memberPointHistory: 'Point History', 1200 memberPointHistoryEmpty: 'No Point History Available', 1201 memberTicketReservation: 'Ticket Reservation', 1202 memberProfileNotFound: 'No profile details found', 1203 memberPending: 'Pending', 1204 memberJoinTitle: 'Come Join as a Member!', 1205 memberJoinDescription: 'Get exclusive benefits and enjoy more affordable trips!', 1206 memberEditDescription: 'Please enter your personal information correctly.', 1207 memberNamePlaceholder: 'Enter your name', 1208 memberEmailPlaceholder: 'Enter email', 1209 memberSelectStatus: 'Select Status', 1210 memberCompleteForm: 'Please complete the form first', 1211 memberBirthPlace: 'Place of Birth', 1212 memberIdentityNumber: 'Identity Number', 1213 memberPostalCode: 'Postal Code', 1214 memberCity: 'City', 1215 memberOccupation: 'Occupation', 1216 memberChooseFile: 'Choose File', 1217 memberNoFileChosen: 'No file chosen', 1218 jobStudent: 'Student', 1219 jobEmployee: 'Employee', 1220 jobProfessional: 'Professional', 1221 jobSelfEmployed: 'Self-employed', 1222 jobEntrepreneur: 'Entrepreneur', 1223 jobFreelancer: 'Freelancer', 1224 jobUnemployed: 'Unemployed', 1225 jobCivilServant: 'Civil Servant', 1226 jobHousewife: 'Housewife', 1227 memberType: 'Membership Type', 1228 memberSelfiePhoto: 'Face Selfie', 1229 memberIdentityPhoto: 'Identity Document Photo', 1230 memberSubmitSuccess: 'Data submitted successfully!', 1231 memberSubmitFailed: 'Failed to submit data', 1232 memberCompleteDataFirst: 'Please complete your data first.', 1233 memberHeicConversionFailed: 'Failed to convert the HEIC file. Please upload a JPG file.', 1234 memberRegistrationSuccess: 'Member registration successful', 1235 memberRegistrationCheckEmail: 'Member registration was successful. Please check your email to activate your membership.', 1236 memberRequiredPhotoMissing: 'A required photo has not been uploaded', 1237 memberRegisterTitle: 'Member Registration', 1238 memberUpdateTitle: 'Update Membership', 1239 memberPoints: 'Points', 1240 commonSave: 'Save', 1241 commonSuccess: 'Success!', 1242 commonFailed: 'Failed!', 1243 validationRequiredPrefix: 'Please enter ', 1244 validationDigitsSuffix: ' must contain numbers only', 1245 validationInvalidFormatPrefix: 'The ',
1246 validationInvalidSuffix: ' format is invalid', 1247 validationUploadRequired: 'This file is required', 1248 validationImageFormat: 'The file must be JPG, PNG, or HEIC', 1249 validationFileMax5Mb: 'The file must not exceed 5MB', 1250 validationNameMin: 'Name must contain at least 3 letters', 1251 validationNameMax: 'Name may contain up to 30 letters', 1252 validationEmailMin: 'Email must contain at least 8 characters', 1253 validationEmailMax: 'Email may contain up to 64 characters', 1254 validationPhoneMin: 'Phone number must contain at least 9 digits', 1255 validationPhoneMax: 'Phone number may contain up to 16 digits', 1256 validationAddressMin: 'Address must contain at least 10 characters', 1257 validationAddressMax: 'Address may contain up to 128 characters', 1258 validationBirthDateRequired: 'Please enter your date of birth', 1259 validationDigitsOnly: 'This field may only contain numbers', 1260 validationFileTooLarge: 'The file is too large', 1261 validationLettersOnly: 'Name may only contain letters and spaces', 1262 validationNumbersOnly: 'Please enter numbers only', 1263 validationEmailInvalid: 'Invalid email format', 1264 validationFieldRequired: 'This field is required', 1265 validationNameRequired: 'Please enter your name', 1266 validationEmailRequired: 'Please enter your email', 1267 validationPhoneRequired: 'Please enter your phone number', 1268 validationGenderRequired: 'Please select your gender', 1269 validationBirthPlaceRequired: 'Please enter your place of birth', 1270 validationIdentityRequired: 'Please enter your identity number', 1271 validationIdentityLength: 'Identity number must contain 16 digits', 1272 validationOccupationRequired: 'Please select your occupation', 1273 validationAddressRequired: 'Please enter your address', 1274 validationCityRequired: 'Please enter your city', 1275 validationPostalCodeRequired: 'Please enter your postal code', 1276 validationMemberTypeRequired: 'Please select a membership type', 1277 validationIdentityPhotoRequired: 'Please upload your identity document photo', 1278 validationSelfieRequired: 'Please upload your selfie', 1279 reservationHistoryTitle: 'Reservation History', 1280 reservationAwaitingPayment: 'Awaiting Payment', 1281 reservationCancelled: 'Cancelled', 1282 reservationPaid: 'Paid', 1283 reservationNeedsRating: 'Rating Required', 1284 reservationBookAgain: 'Book Again', 1285 reservationBookingDetail: 'Booking Details', 1286 reservationEmptyTitle: 'No Ticket Reservation History Found', 1287 reservationEmptyDescription: 'Click the button below to make a ticket reservation.', 1288 reservationEmptyImageAlt: 'Empty reservation history', 1289 reservationCreate: 'Make a Reservation', 1290 reservationScanMe: 'Scan Me!', 1291 reservationBookingCode: 'Booking Code:', 1292 reservationConfirmLogout: 'Are you sure you want to log out?', 1293 reservationBarcodePaidOnly: 'The barcode is only available after payment is completed', 1294 reservationLoadError: 'An error occurred while retrieving reservation data', 1295 reservationTicket: 'Book a Ticket', 1296 ratingPageTitle: 'Trip Ratings', 1297 ratingPageDescription: 'Completed transactions that have not been rated', 1298 ratingNotRated: 'Not rated yet', 1299 ratingGiveRating: 'Give a Rating', 1300 ratingEmptyTitle: 'No Ratings Yet', 1301 ratingEmptyDescription: 'There are currently no transactions that need to be rated.', 1302 ratingEmptyImageAlt: 'No ratings yet', 1303 voucherPageTitle: 'Voucher List', 1304 voucherMyVouchers: 'My Vouchers', 1305 voucherValidUntil: 'Valid until', 1306 voucherEmptyTitle: 'You do not have any vouchers yet', 1307 voucherEmptyImageAlt: 'No vouchers yet', 1308 voucherDetail: 'Voucher Details', 1309 voucherCopy: 'Copy', 1310 voucherHowToUse: 'How to Use', 1311 voucherTerms: 'Terms & Conditions', 1312 voucherNoInstructions: 'No usage instructions available.', 1313 voucherHistoryPageTitle: 'Voucher History', 1314 voucherHistoryTitle: 'Voucher Usage History', 1315 voucherPromoFallback: 'Promo Voucher', 1316 voucherTrip: 'Trip:', 1317 voucherHistoryEmpty: 'No voucher usage history yet', 1318 voucherHistoryEmptyImageAlt: 'Empty voucher history', 1319 paymentChannelEmptyTitle: 'Payment methods are unavailable', 1320 paymentChannelEmptyDescription: 'Please try again in a few moments.', 1321 paymentChannelEmptyImageAlt: 'Payment methods are unavailable', 1322 bundlingHistoryEmpty: 'No bundling transaction history yet', 1323 bundlingHistoryEmptyImageAlt: 'Empty bundling history', 1324 loginPageTitle: 'Log In & Register', 1325 loginRegisterTitle: 'Log In & Register', 1326 loginWithPhone: 'Log In with Phone Number', 1327 loginWithWhatsapp: 'Log In with WhatsApp', 1328 loginWithEmail: 'Log In with Email', 1329 loginWithGoogle: 'Log In with Google', 1330 loginContinueTitle: 'Log In to Continue', 1331 loginButton: 'Log In', 1332 loginCheckPhone: 'Please check your phone number', 1333 loginCheckEmail: 'Please check your email', 1334 loginTryAnotherMethod: 'try another login method', 1335 loginVerificationNotice: 'Before continuing, please complete verification for your security and convenience. Thank y
1335ou for your understanding.', 1336 loginPhoneVerification: 'Phone Number Verification', 1337 loginVerifyBeforeContinue: 'Please complete verification before continuing.', 1338 loginWithPhoneShort: 'With Phone Number', 1339 loginWithWhatsappShort: 'With WhatsApp Number', 1340 loginWithEmailShort: 'With Email', 1341 loginWithGoogleShort: 'With Google', 1342 loginPopupBlocked: 'The Google login pop-up was blocked by your browser. Please click Google Login again to continue.', 1343 loginUnauthorizedDomain: 'This domain is not authorized. Please add it to your Firebase console.', 1344 loginGenericError: 'An error occurred during login', 1345 loginOtpError: 'An error occurred while verifying the OTP', 1346 loginPhoneRequired: 'Please enter your phone number', 1347 loginPhoneMin: 'Phone number must contain at least 9 digits', 1348 loginPhoneMax: 'Phone number may contain up to 16 digits', 1349 loginEmailRequired: 'Please enter your email', 1350 loginEmailInvalid: 'Invalid email address', 1351 loginEmailMin: 'Email must contain at least 8 characters', 1352 loginEmailMax: 'Email may contain up to 64 characters', 1353 loginLogoAlt: 'Operator logo', 1354 loginVerificationImageAlt: 'Account verification', 1355 otpPageTitle: 'OTP Verification', 1356 otpEnterCode: 'Enter OTP Code', 1357 otpCodeSentTo: 'The code will be sent to', 1358 otpCodePlaceholder: 'Enter the 6-Digit OTP Code', 1359 otpContinue: 'Continue', 1360 otpResendIn: 'Resend OTP in', 1361 otpResend: 'Resend', 1362 otpAttemptsExhausted: 'You have reached the login attempt limit. Please try again later', 1363 otpRequestError: 'An error occurred while requesting the OTP', 1364 otpSessionExpired: 'Your session has expired. Please refresh the page', 1365 otpVerifyError: 'An error occurred while verifying the OTP', 1366 registerTitle: 'Create an Account', 1367 registerDescription: 'Please enter your personal information correctly to create an account.', 1368 registerName: 'Name', 1369 registerFirstName: 'First Name', 1370 registerLastName: 'Last Name', 1371 registerPhone: 'Phone Number', 1372 registerPhonePlaceholder: 'Enter Phone Number', 1373 registerEmail: 'Email', 1374 registerEmailPlaceholder: 'Enter Your Email', 1375 registerBirthDate: 'Date of Birth', 1376 registerBirthDatePlaceholder: 'Select date of birth', 1377 registerGender: 'Gender', 1378 registerMale: 'Male', 1379 registerFemale: 'Female', 1380 registerAddress: 'Address', 1381 registerAddressPlaceholder: 'Enter address', 1382 registerReferral: 'Referral Code', 1383 registerReferralOptional: 'Referral Code (optional)', 1384 registerButton: 'Register', 1385 scheduleSelectNew: 'Select a New Schedule', 1386 scheduleOutbound: 'Outbound', 1387 scheduleReturn: 'Return', 1388 scheduleShowing: 'Showing', 1389 scheduleBestSchedules: 'Best Schedules', 1390 scheduleEstimatedJourney: 'Estimated Journey', 1391 scheduleDepartureArrival: 'Departure - Arrival:', 1392 scheduleSeatsAvailable: 'Seats Available', 1393 scheduleSeatsSoldOut: 'Seats Sold Out', 1394 scheduleAvailable: 'Available', 1395 scheduleSeatsAvailableLower: 'seats available', 1396 scheduleTransit: 'Transit', 1397 scheduleDirect: 'Direct', 1398 scheduleEarnPoints: 'Earn points', 1399 scheduleInsufficientSeats: 'Not Enough Seats', 1400 scheduleSoldOut: 'Sold Out', 1401 scheduleOnlineBookingClosed: 'Online Booking Is Closed', 1402 schedulePassed: 'Schedule Has Passed', 1403 scheduleSelect: 'Select', 1404 scheduleJourneyDetails: 'Journey Details', 1405 scheduleFullyBookedTitle: 'Sorry, This Schedule Is Fully Booked!', 1406 scheduleNotFound: 'No Schedule Found', 1407 scheduleSelectReturnDate: 'Please select a return date', 1408 scheduleSelectReturnSchedule: 'Please select a return schedule', 1409 scheduleSelectOutboundSchedule: 'Please select an outbound schedule', 1410 scheduleSelectDeparture: 'Please select a departure point', 1411 scheduleSelectSchedule: 'Select a Schedule', 1412 scheduleSelectDestination: 'Please select a destination', 1413 scheduleSelectDepartureDate: 'Please select a departure date', 1414 scheduleSelectOutboundDate: 'Please select an outbound date', 1415 scheduleSeatUnit: 'seats', 1416 scheduleReserveWhatsapp: 'Reserve via WhatsApp', 1417 scheduleTransitStopAt: 'Transit stop at', 1418 scheduleForDuration: 'for', 1419 scheduleMinutes: 'minutes', 1420 scheduleFullyBookedDescription: 'Unfortunately, all these schedules are fully booked. Try another departure point or date.', 1421 scheduleHours: 'hours', 1422 scheduleViewJourneyDetails: 'View Journey Details', 1423 scheduleDepartureScheduleDetails: 'Departure Schedule Details', 1424 scheduleDepartureDetails: 'Departure Details', 1425 scheduleReturnScheduleDetails: 'Return Schedule Details', 1426 scheduleViewLocation: 'View Location', 1427 scheduleDiscount: 'Discount', 1428 schedulePromo: 'Promo', 1429 scheduleNewUserPrice: 'New User Price', 1430 scheduleWebsiteNewUserDiscount: 'Website New User Discount', 1431 scheduleSeatLayoutNotFound: 'Sorry, the seat layout was not found. Please select another schedule.', 1432 scheduleSeatPrice: 'Seat Price', 1433 scheduleAdditionalFee: 'Additional Fee', 1434 scheduleTotalPriceDifference: 'Total Price Difference', 1435 scheduleTicketPrice: 'Ticket Price', 1436 scheduleTotal: 'Total',
1437 scheduleBookerName: 'Booker Name', 1438 schedulePassengerDetails: 'Passenger Details', 1439 scheduleAddress: 'Address', 1440 schedulePhone: 'Phone', 1441 scheduleEmail: 'Email', 1442 scheduleNewUserDiscount: 'New User Discount', 1443 scheduleCreateAccount: 'Create Account', 1444 navHome: 'Home', 1445 navAbout: 'About', 1446 navAboutUs: 'About Us', 1447 navOutlet: 'Outlet', 1448 outletPageTitle: 'Outlet Locations', 1449 outletPageDescription: 'Search outlets by location and find a physical pool or virtual point near you.', 1450 outletSearchPlaceholder: 'Search outlets...', 1451 outletFilter: 'Filter', 1452 outletReset: 'Reset', 1453 outletType: 'Type', 1454 outletPhysicalPool: 'Physical Pool', 1455 outletVirtualPoint: 'Virtual Point', 1456 outletCity: 'City', 1457 outletAvailable: 'Outlets Available', 1458 outletAddress: 'Address', 1459 outletOperatingHours: 'Operating Hours', 1460 outletOpen: 'Open', 1461 outletClose: 'Close', 1462 outletPostalCode: 'Postal Code', 1463 outletContact: 'Contact', 1464 outletViewMaps: 'View on Maps', 1465 outletResultsFound: 'results found', 1466 outletShowLess: 'Show Less', 1467 outletShowAll: 'View All', 1468 outletNoData: 'Outlet data is unavailable', 1469 outletIn: 'Outlets in', 1470 navBlog: 'Blog', 1471 navPaymentGuide: 'Payment Guide', 1472 navMotorRental: 'Motorcycle Rental', 1473 navTravelGuide: 'Travel Guide', 1474 navAdvertisingServices: 'Advertising and Services', 1475 navBundling: 'Bundling', 1476 navDownloadLink: 'this link', 1477 navOfficialWebsitePrefix: 'Official Website of', 1478 navPrimaryAria: 'Primary Navigation', 1479 navDownloadAppAt: 'download the app at', 1480 navContact: 'Contact', 1481 navGallery: 'Gallery', 1482 navNews: 'News', 1483 navPromo: 'Promotions', 1484 navRental: 'Rental', 1485 navFaq: 'FAQ', 1486 navTerms: 'Terms & Conditions', 1487 navPackage: 'Package', 1488 navTourism: 'Tourism', 1489 navCheckBooking: 'Check Booking', 1490 navCheckTicket: 'Check Ticket', 1491 navCheckPackage: 'Track Package', 1492 navSendPackage: 'Send Package', 1493 navDownloadApp: 'Download App', 1494 navAccount: 'Account', 1495 navRegisterLogin: 'Register/Login', 1496 navLogin: 'Login', 1497 navProfile: 'Profile', 1498 navMyVoucher: 'My Vouchers', 1499 navMyTransaction: 'My Transactions', 1500 navBundlingTransaction: 'Bundling Transactions', 1501 navLogout: 'Logout', 1502 navNew: 'New', 1503 logoutConfirmation: 'Are you sure you want to logout?', 1504 commonNo: 'No', 1505 commonYes: 'Yes', 1506 commonLoading: 'Loading...', 1507 commonHello: 'Hello', 1508 commonChatNow: 'Chat Now', 1509 commonClose: 'Close', 1510 commonChange: 'Change', 1511 passengerPageTitle: 'Passenger Details', 1512 passengerPersonalData: 'Personal Details', 1513 passengerBookerData: 'Booker Details', 1514 passengerBookerName: 'Booker Name', 1515 passengerBookerNamePlaceholder: 'Enter the booker name', 1516 passengerBookerEmail: 'Booker Email', 1517 passengerEmailPlaceholder: 'Enter Email', 1518 passengerEmailPurpose: 'Email is required to send the e-ticket, payment code, and OTP', 1519 passengerUsingUserEmail: '*Using the account email', 1520 passengerPhone: 'Phone Number', 1521 passengerPhonePlaceholder: 'Enter Phone Number', 1522 passengerUsingUserPhone: '*Using the account phone number', 1523 passengerAddress: 'Address', 1524 passengerAddressPlaceholder: 'Enter Address', 1525 passengerData: 'Passenger Details', 1526 passengerName: 'Passenger Name', 1527 passengerNamePlaceholder: 'Enter passenger name', 1528 passengerBookerIsPassenger: 'The booker is also a passenger', 1529 passengerPickupDropoffData: 'Pickup & Drop-off Address Details', 1530 passengerPickupDropoffType: 'Pickup & Drop-off Type', 1531 passengerPickupAddress: 'Pickup Address', 1532 passengerPickupAddressPlaceholder: 'Enter Pickup Address', 1533 passengerPickupArea: 'Pickup Area', 1534 passengerSelectPickupArea: 'Select Pickup Area', 1535 passengerDropoffAddress: 'Drop-off Address', 1536 passengerDropoffAddressPlaceholder: 'Enter Drop-off Address', 1537 passengerDropoffArea: 'Drop-off Area', 1538 passengerSelectDropoffArea: 'Select Drop-off Area', 1539 passengerPrevious: 'Previous', 1540 passengerPayment: 'Payment', 1541 passengerSelectSeat: 'Select Seat', 1542 passengerFinished: 'Finished', 1543 passengerUniqueName: 'Passenger names must be different.', 1544 passengerEnterBookerFirst: 'Please enter the booker name first!', 1545 passengerValidationBookerRequired: 'Please enter the booker name', 1546 passengerValidationBookerMin: 'The booker name must contain at least 3 letters', 1547 passengerValidationBookerMax: 'The booker name must not exceed 30 letters', 1548 passengerValidationEmailRequired: 'Please enter an email address', 1549 passengerValidationEmailInvalid: 'Please enter a valid email address', 1550 passengerValidationEmailMin: 'The email must contain at least 8 characters', 1551 passengerValidationEmailMax: 'The email must not exceed 64 characters', 1552 passengerValidationAddressRequired: 'Please enter an address', 1553 passengerValidationAddressMax: 'The address must not exceed 128 characters', 1554 passengerValidationPhoneRequired: 'Please enter a phone number', 1555 passengerValidationPhoneMin: 'The phone number must contain at least 9 digits', 1556 passengerValidationPhoneMax: 'The phone number must not exceed 16 digits', 1557 passengerValidationNameRequired: 'Please enter the passenger name', 1558 passengerValidationNameMin: 'The passenger name must contain at least 3 letters', 1559 passengerValidationNameMax: 'The passenger name must not exceed 30 letters', 1560 passengerValidationPickupAddressRequired: 'Please enter the pickup address', 1561 passengerValidationPickupAreaRequired: 'Please select a pickup area', 1562 passengerValidationDropoffAddressRequired: 'Please enter the drop-off address', 1563 passengerValidationDropoffAreaRequired: 'Please select a drop-off area', 1564 seatPageTitle: 'Select Seat', 1565 seatChooseBest: 'Choose your preferred seat!', 1566 seatOutbound: 'Outbound', 1567 seatReturn: 'Return', 1568 seatBooked: 'Booked', 1569 seatYourChoice: 'Your Selection', 1570 seatAvailable: 'Available', 1571 seatView: 'View:', 1572 seatNote: 'Note:', 1573 seatFlexibleLayoutNote: 'The vehicle and seat layout shown during reservation are flexible and may be adju
1573sted to improve travel efficiency.', 1574 seatChildTicketNote: 'Children aged 2 years or taller than 100 cm must purchase a ticket.', 1575 seatAvailabilityNote: 'Seats may be booked by another user who completes their purchase first.', 1576 seatPassengerList: 'Passenger List', 1577 seatTotal: 'Total', 1578 seatNext: 'Next', 1579 seatReturnSeat: 'Select Return Seat', 1580 seatNextSelection: 'Select Next Seat', 1581 seatChange: 'Change Seat', 1582 seatDriver: 'DRIVER', 1583 seatPromo: 'Sale', 1584 seatNotSelected: 'You have not selected a seat', 1585 seatLayoutUnavailable: 'Seat layout data is unavailable', 1586 seatNumberPrefix: 'Seat', 1587 seatPriceBeforeReschedule: 'Price Before Rescheduling', 1588 seatPriceBeforeChange: 'Price Before Change', 1589 locationUnavailable: 'Location unavailable', 1590 locationLoadFailed: 'Failed to load location', 1591 locationAllowAccess: 'Allow location access', 1592 locationFallback: 'Location', 1593 footerCallCenter: 'Call Center', 1594 footerPhone: 'Phone', 1595 footerWhatsapp: 'WhatsApp Message', 1596 footerScheduleRouteInfo: 'Schedule & Route Information', 1597 footerEmail: 'Email', 1598 footerInformation: 'Information', 1599 footerAboutUs: 'About Us', 1600 footerContact: 'Contact', 1601 footerCareer: 'Career', 1602 footerTourism: 'Tourism', 1603 footerPaymentGuide: 'Payment Guide', 1604 footerPrivacyPolicy: 'Privacy Policy', 1605 footerTerms: 'Terms & Conditions', 1606 footerSocialMedia: 'Social Media', 1607 footerFollowUs: 'Follow Us', 1608 footerDownloadApp: 'Download App', 1609 footerOthers: 'Others', 1610 footerCompany: 'Company', 1611 footerAllRightsReserved: 'All Rights Reserved', 1612 footerMenu: 'Menu', 1613 footerServices: 'Services', 1614 footerOurServices: 'Our Services', 1615 footerContactUs: 'Contact Us', 1616 footerDailyRental: 'Daily Car Rental', 1617 footerMonthlyRental: 'Monthly Car Rental', 1618 footerYearlyRental: 'Yearly Car Rental', 1619 footerTourRental: 'Tour Car Rental', 1620 footerWeddingRental: 'Wedding Car Rental', 1621 footerOpen: 'Open', 1622 footerTravelDescription: 'Enjoy a hassle-free journey with the best transportation service from BTM Shuttle.', 1623 footerSchedule: 'Schedule', 1624 footerAgentRegistration: 'Agent Registration', 1625 footerLogistics: 'Logistics', 1626 footerFeedback: 'Feedback', 1627 footerLegalInfo: 'Legal Information', 1628 footerOffice: 'Office', 1629 footerPool: 'Pool', 1630 footerEveryDay: 'Every Day', 1631 footerUntil: 'to', 1632 footerLogoAlt: 'Company logo', 1633 footerLocationAlt: 'Location', 1634 footerMainRoutes: 'Main Route Services', 1635 footerPaymentMethod: 'Payment Methods', 1636 footerTicketTerms: 'Ticket Terms & Conditions', 1637 footerPackageTerms: 'Package Delivery Terms & Conditions', 1638 footerPopularRoutes: 'Popular Routes', 1639 footerFAQ: 'FAQ', 1640 footerAboutOperator: 'About', 1641 galleryTitle: 'Gallery', 1642 galleryViewMore: 'View More', 1643 galleryViewOthers: 'View Other Galleries', 1644 galleryDefaultItemTitle: 'Best Travel Gallery', 1645 galleryDefaultItemDescription: 'Discover our best fleet and comfortable travel moments with our professional shuttle service.', 1646 galleryExplorePrefix: 'Explore the Beauty of Traveling with', 1647 galleryExploreSuffix: 'Limitless Experiences, the Best Destinations!', 1648 galleryImageAlt: 'Gallery', 1649 newsTitle: 'News', 1650 newsFollowPrefix: 'Follow the latest news from', 1651 newsFollowSuffix: 'including routes, fares, and travel schedules', 1652 newsTravelTipsTitle: 'Travel Tips & Information', 1653 newsTravelTipsDescription: 'Read interesting articles about travel tips, destinations, and useful transportation information.', 1654 newsViewMore: 'View More', 1655 newsViewAll: 'View All', 1656 newsViewAllArticles: 'View All Articles', 1657 newsImageAlt: 'News', 1658 newsDefaultExcerpt: 'Get the latest travel information before starting your journey.', 1659 downloadInstallPrefix: 'Install the', 1660 downloadInstallSuffix: 'app from the Play Store and App Store now!', 1661 downloadAppImageAlt: 'Application', 1662 downloadPhoneImageAlt: 'Application displayed on a phone', 1663 operatorDownloadTitle: 'Enjoy an easier journey with us', 1664 operatorDownloadDescription: 'Book tickets and manage your journey directly from your phone.', 1665 operatorDownloadCallToAction: 'Download the app now!', 1666 downloadAppPageTitle: 'Download App', 1667 downloadAppVisitWebsite: 'Visit Website', 1668 downloadAppShareLink: 'Share Link', 1669 downloadAppCopy: 'Copy', 1670 downloadAppCopied: 'Link copied.', 1671 downloadAppOr: 'or', 1672 downloadAppDownloadQr: 'Download QR', 1673 localeTitle: 'Select Language & Currency', 1674 localeSearchPlaceholder: 'Search language or currency...', 1675 localeLanguage: 'Language', 1676 localeCurrency: 'Currency', 1677 localeCancel: 'Cancel', 1678 localeSaveChanges: 'Save Changes', 1679 collapseGreeting: 'Hi, Friend ð', 1680 collapseWelcome: 'Welcome to', 1681 collapseSelfCheckin: 'Self Check-in' 1682 } 1683}; 1684 1685function mergeLocale(target, source) { 1686 Object.keys(source || {}
1686).forEach(function (language) { 1687 target[language] = target[language] || {}; 1688 Object.keys(source[language] || {}).forEach(function (key) { 1689 target[language][key] = source[language][key]; 1690 }); 1691 }); 1692} 1693 1694mergeLocale(locale, window.PORTAL_LOCALE_OVERRIDES || {}); 1695 1696const navigationI18nByPath = { 1697 '/': 'navHome', 1698 '/home': 'navHome', 1699 '/tentang': 'navAboutUs', 1700 '/outlet': 'navOutlet', 1701 '/blog': 'navBlog', 1702 '/berita': 'navNews', 1703 '/pembayaran': 'navPaymentGuide', 1704 '/panduan-perjalanan': 'navTravelGuide', 1705 '/kontak': 'navContact', 1706 '/galeri': 'navGallery', 1707 '/promo': 'navPromo', 1708 '/promo-rute': 'navPromo', 1709 '/rental': 'navRental', 1710 '/rental-motor': 'navMotorRental', 1711 '/paket': 'navPackage', 1712 '/pariwisata': 'navTourism', 1713 '/bundling': 'navBundling', 1714 '/tiket': 'navCheckTicket', 1715 '/book/cektiket': 'navCheckBooking', 1716 '/cek-paket': 'navCheckPackage', 1717 '/masuk': 'navLogin', 1718 '/member/detail': 'navProfile', 1719 '/list-reservasi': 'memberReservationList', 1720 '/member/rating': 'memberRatings', 1721 '/list-voucher': 'memberVoucherList', 1722 '/list-riwayat-voucher': 'memberVoucherHistory', 1723 '/faq': 'navFaq', 1724 '/snk': 'navTerms', 1725 '/snk/tiket': 'footerTicketTerms', 1726 '/snk/paket': 'footerPackageTerms', 1727 '/karir': 'footerCareer' 1728}; 1729 1730const navigationI18nByLabel = { 1731 'beranda': 'navHome', 1732 'home': 'navHome', 1733 'tentang': 'navAbout', 1734 'tentang kami': 'navAboutUs', 1735 'about': 'navAbout', 1736 'about us': 'navAboutUs', 1737 'outlet': 'navOutlet', 1738 'blog': 'navBlog', 1739 'berita': 'navNews', 1740 'news': 'navNews', 1741 'cara bayar': 'navPaymentGuide', 1742 'panduan cara bayar': 'navPaymentGuide', 1743 'payment guide': 'navPaymentGuide', 1744 'panduan perjalanan': 'navTravelGuide', 1745 'travel guide': 'navTravelGuide', 1746 'kontak': 'navContact', 1747 'contact': 'navContact', 1748 'galeri': 'navGallery', 1749 'gallery': 'navGallery', 1750 'promo': 'navPromo', 1751 'promotions': 'navPromo', 1752 'rental': 'navRental', 1753 'sewa motor': 'navMotorRental', 1754 'motorcycle rental': 'navMotorRental', 1755 'paket': 'navPackage', 1756 'package': 'navPackage', 1757 'pariwisata': 'navTourism', 1758 'tourism': 'navTourism', 1759 'bundling': 'navBundling', 1760 'cek booking': 'navCheckBooking', 1761 'check booking': 'navCheckBooking', 1762 'cek tiket': 'navCheckTicket',
1763 'check ticket': 'navCheckTicket', 1764 'faq': 'navFaq', 1765 'syarat & ketentuan': 'navTerms', 1766 'terms & conditions': 'navTerms', 1767 'karier': 'footerCareer', 1768 'karir': 'footerCareer', 1769 'career': 'footerCareer' 1770}; 1771 1772function normalizeNavigationPath(href) { 1773 try { 1774 const url = new URL(href, window.location.origin); 1775 let path = url.pathname.replace(/\/+$/, '') || '/'; 1776 1777 if (path.indexOf('/index.php/') === 0) { 1778 path = path.substring('/index.php'.length) || '/'; 1779 } 1780 1781 return path.toLowerCase(); 1782 } catch (error) { 1783 return ''; 1784 } 1785} 1786 1787function getNavigationKeyByHref(href) { 1788 const path = normalizeNavigationPath(href); 1789 1790 if (navigationI18nByPath[path]) { 1791 return navigationI18nByPath[path]; 1792 } 1793 1794 const matchedPath = Object.keys(navigationI18nByPath) 1795 .filter(function (candidate) { 1796 return candidate !== '/' && path.slice(-candidate.length) === candidate; 1797 }) 1798 .sort(function (first, second) { 1799 return second.length - first.length; 1800 })[0]; 1801 1802 return matchedPath ? navigationI18nByPath[matchedPath] : ''; 1803} 1804 1805function shouldSkipConfiguredNavigation(element) { 1806 if (element.closest( 1807 '.footer-social-link, .footer-social, .social-media, .sosmed, [data-social-media], .footer-download-link' 1808 )) { 1809 return true; 1810 } 1811 1812 const href = element.getAttribute('href') || ''; 1813 if (!href || href.charAt(0) === '#' || href.indexOf('mailto:') === 0 || href.indexOf('tel:') === 0) { 1814 return true; 1815 } 1816 1817 try { 1818 return new URL(href, window.location.origin).origin !== window.location.origin; 1819 } catch (error) { 1820 return false; 1821 } 1822} 1823 1824function replaceNavigationText(element, text) { 1825 const textNodes = Array.prototype.filter.call(element.childNodes, function (node) { 1826 return node.nodeType === 3 && node.nodeValue.trim() !== ''; 1827 }); 1828 1829 if (textNodes.length) { 1830 const original = textNodes[0].nodeValue; 1831 const leading = (original.match(/^\s*/) || [''])[0]; 1832 const trailing = (original.match(/\s*$/) || [''])[0]; 1833 textNodes[0].nodeValue = leading + text + trailing; 1834 return; 1835 } 1836 1837 const explicitLabel = element.querySelector('[data-nav-label], .nav-label, .footer-link-label'); 1838 const label = explicitLabel || Array.prototype.find.call( 1839 element.querySelectorAll('span'), 1840 function (candidate) { 1841 return !candidate.classList.contains('badge') 1842 && !candidate.classList.contains('caret') 1843 && !candidate.classList.contains('icon') 1844 && !candidate.querySelector('svg, img, i'); 1845 } 1846 ); 1847 1848 if (label && !label.hasAttribute('data-i18n')) { 1849 label.textContent = text; 1850 } 1851} 1852 1853function updateConfiguredNavigation(scope) { 1854 scope.querySelectorAll( 1855 'nav a[href], header a[href], footer a[href], .navbar a[href], [data-config-navigation]' 1856 ).forEach(function (element) { 1857 if (shouldSkipConfiguredNavigation(element)) { 1858 return; 1859 } 1860 1861 const configuredKey = element.getAttribute('data-i18n-key'); 1862 const pathKey = getNavigationKeyByHref(element.getAttribute('href') || ''); 1863 const label = (element.textContent || '').replace(/\s+/g, ' ').trim().toLowerCase(); 1864 const labelKey = navigationI18nByLabel[label]; 1865 const key = configuredKey || pathKey || labelKey; 1866 1867 if (!key || !i18next.exists(key)) { 1868 return; 1869 } 1870 1871 // Jika label anak sudah punya key sendiri, jangan terjemahkan parent. 1872 // Ini mencegah ikon SVG pada menu vertikal dianggap sebagai label kedua. 1873 if (!configuredKey && element.querySelector('[data-i18n], [data-i18n-id][data-i18n-en]')) { 1874 return; 1875 } 1876 1877 // Elemen dengan data-i18n eksplisit tetap menjadi sumber kebenaran. 1878 if (!configuredKey && element.hasAttribute('data-i18n')) { 1879 return; 1880 } 1881 1882 // title_en lama tetap didukung; fallback URL dipakai jika EN belum tersedia. 1883 if (!configuredKey && element.hasAttribute('data-i18n-id') && element.hasAttribute('data-i18n-en')) { 1884 const idText = element.getAttribute('data-i18n-id') || ''; 1885 const enText = element.getAttribute('data-i18n-en') || ''; 1886 if (i18next.language === 'id' || (enText && enText !== idText)) { 1887 return; 1888 } 1889 } 1890 1891 replaceNavigationText(element, i18next.t(key)); 1892 }); 1893} 1894 1895i18next.init({ 1896 lng: lang, 1897 fallbackLng: 'id', 1898 debug: false, 1899 interpolation: { 1900 escapeValue: false 1901 }, 1902 resources: { 1903 id: { translation: locale.id }, 1904 en: { translation: locale.en } 1905 } 1906}, function () { 1907 updateDataI18n(); 1908}); 1909 1910function updateDataI18n(root) { 1911 const scope = root || document; 1912 1913 scope.querySelectorAll('.portal-locale-block[data-lang]').forEach(function (element) { 1914 element.style.display = element.getAttribute('data-lang') === i18next.language ? '' : 'none'; 1915 }); 1916 1917 if (window.flatpickr && window.flatpickr.l10ns) { 1918 const flatpickrLocale = i18next.language === 'en' 1919 ? window.flatpickr.l10ns.default 1920 : (window.flatpickr.l10ns.id || window.flatpickr.l10ns.default); 1921 1922 scope.querySelectorAll('input.flatpickr-input').forEach(function (input) { 1923 const instance = input._flatpickr; 1924 1925 if (!instance) { 1926 return; 1927 } 1928 1929 instance.set('locale', flatpickrLocale); 1930 1931 if (instance.selectedDates && instance.selectedDates.length) { 1932 instance.setDate(instance.selectedDates, false); 1933 } 1934 1935 instance.redraw(); 1936 }); 1937 } 1938 1939 scope.querySelectorAll('.schedule-localized-date[data-date]').forEach(function (element) { 1940 const rawDate = element.getAttribute('data-date') || ''; 1941 const parts = rawDate.split('-'); 1942 let date = null; 1943 1944 if (parts.length === 3) { 1945 if (parts[0].length === 4) { 1946 date = new Date(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2])); 1947 } else if (parts[2].length === 4) { 1948 date = new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0])); 1949 } 1950 } 1951 1952 if (date && !isNaN(date.getTime())) { 1953 const dateParts = new Intl.DateTimeFormat( 1954 i18next.language === 'en' ? 'en-US' : 'id-ID', 1955 { day: '2-digit', month: 'short' } 1956 ).formatToParts(date); 1957 const day = dateParts.find(function (part) { return part.type === 'day'; });
1958 const month = dateParts.find(function (part) { return part.type === 'month'; }); 1959 element.textContent = ( 1960 (day ? day.value : '') + ' ' + (month ? month.value : '') 1961 ).replace('.', '').trim().toUpperCase(); 1962 } 1963 }); 1964 1965 scope.querySelectorAll('.schedule-localized-full-date[data-date]').forEach(function (element) { 1966 const rawDate = element.getAttribute('data-date') || ''; 1967 const rawTime = element.getAttribute('data-time') || ''; 1968 const parts = rawDate.split('-'); 1969 let date = null; 1970 1971 if (parts.length === 3) { 1972 if (parts[0].length === 4) { 1973 date = new Date(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2])); 1974 } else if (parts[2].length === 4) { 1975 date = new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0])); 1976 } 1977 } 1978 1979 if (date && !isNaN(date.getTime())) { 1980 const language = i18next.language === 'en' ? 'en-US' : 'id-ID'; 1981 const timeSeparator = element.getAttribute('data-time-separator') || ''; 1982 const dateParts = new Intl.DateTimeFormat(language, { 1983 weekday: 'long', 1984 day: '2-digit', 1985 month: 'long', 1986 year: 'numeric' 1987 }).formatToParts(date); 1988 const values = {}; 1989 1990 dateParts.forEach(function (part) { 1991 values[part.type] = part.value; 1992 }); 1993 1994 element.textContent = [ 1995 values.weekday + ',', 1996 values.day, 1997 values.month, 1998 values.year, 1999 rawTime && timeSeparator ? timeSeparator : '', 2000 rawTime 2001 ].filter(Boolean).join(' '); 2002 } 2003 }); 2004 2005 scope.querySelectorAll('.checkout-localized-balance[data-balance]').forEach(function (element) { 2006 element.textContent = i18next.t('checkoutBalance') + ' ' + element.getAttribute('data-balance'); 2007 }); 2008 2009 scope.querySelectorAll('[data-i18n]').forEach(function (element) { 2010 const key = element.getAttribute('data-i18n'); 2011 const prefix = element.getAttribute('data-i18n-prefix') || ''; 2012 const suffix = element.getAttribute('data-i18n-suffix') || ''; 2013 element.textContent = prefix + i18next.t(key) + suffix; 2014 }); 2015 2016 scope.querySelectorAll('[data-i18n-browse]').forEach(function (element) { 2017 element.setAttribute('data-browse', i18next.t(element.getAttribute('data-i18n-browse'))); 2018 }); 2019 2020 scope.querySelectorAll('[data-i18n-id][data-i18n-en]').forEach(function (element) { 2021 const language = i18next.language === 'en' ? 'en' : 'id'; 2022 element.textContent = element.getAttribute('data-i18n-' + language) || ''; 2023 }); 2024 2025 updateConfiguredNavigation(scope); 2026 2027 scope.querySelectorAll('[data-i18n-select-placeholder]').forEach(function (select) { 2028 const placeholder = select.querySelector('option[value=""]'); 2029 if (placeholder) { 2030 placeholder.textContent = i18next.t(select.getAttribute('data-i18n-select-placeholder')); 2031 } 2032 }); 2033 2034 scope.querySelectorAll('select').forEach(function (select) { 2035 const slim = select.slim; 2036 if (!slim) { 2037 return; 2038 } 2039 2040 const selectIdentity = (select.id || select.name || '').toLowerCase(); 2041 let placeholderKey = select.getAttribute('data-i18n-select-placeholder'); 2042 let searchTextKey = select.getAttribute('data-i18n-slim-search-text'); 2043 2044 if (!placeholderKey && selectIdentity === 'asal') { 2045 placeholderKey = 'bookingSelectDeparture'; 2046 } else if (!placeholderKey && selectIdentity === 'tujuan') { 2047 placeholderKey = 'bookingSelectDestination'; 2048 } 2049 2050 if (!searchTextKey && selectIdentity === 'asal') { 2051 searchTextKey = 'bookingNoDeparture'; 2052 } else if (!searchTextKey && selectIdentity === 'tujuan') { 2053 searchTextKey = 'bookingNoDestination'; 2054 } 2055 2056 const searchPlaceholderKey = select.getAttribute('data-i18n-slim-search-placeholder') || 'commonSearch'; 2057 const searchingTextKey = select.getAttribute('data-i18n-slim-searching-text') || 'commonSearching'; 2058 2059 if (placeholderKey) { 2060 slim.config.placeholderText = i18next.t(placeholderKey); 2061 } 2062 if (searchPlaceholderKey) { 2063 slim.config.searchPlaceholder = i18next.t(searchPlaceholderKey); 2064 if (slim.slim && slim.slim.search && slim.slim.search.input) { 2065 slim.slim.search.input.placeholder = slim.config.searchPlaceholder; 2066 } 2067 } 2068 if (searchTextKey) { 2069 slim.config.searchText = i18next.t(searchTextKey); 2070 } 2071 if (searchingTextKey) { 2072 slim.config.searchingText = i18next.t(searchingTextKey); 2073 } 2074 2075 slim.data.parseSelectData(); 2076 slim.data.setSelectedFromSelect(); 2077 slim.render(); 2078 }); 2079 2080 [ 2081 ['data-i18n-placeholder', 'placeholder'], 2082 ['data-i18n-title', 'title'], 2083 ['data-i18n-alt', 'alt'], 2084 ['data-i18n-aria-label', 'aria-label'] 2085 ].forEach(function (mapping) { 2086 scope.querySelectorAll('[' + mapping[0] + ']').forEach(function (element) { 2087 const prefix = element.getAttribute('data-i18n-prefix') || ''; 2088 const suffix = element.getAttribute('data-i18n-suffix') || ''; 2089 element.setAttribute(mapping[1], prefix + i18next.t(element.getAttribute(mapping[0])) + suffix); 2090 }); 2091 }); 2092 2093 document.documentElement.setAttribute('lang', i18next.language); 2094} 2095 2096function changeLanguage(language) { 2097 const selectedLanguage = language === 'en' ? 'en' : 'id'; 2098 localStorage.setItem(LOCALE_STORAGE_KEY, selectedLanguage); 2099 2100 i18next.changeLanguage(selectedLanguage, function () { 2101 updateDataI18n(); 2102 document.dispatchEvent(new CustomEvent('languageChanged', { 2103 detail: { lang: selectedLanguage } 2104 })); 2105 }); 2106} 2107 2108window.PortalI18n = { 2109 t: function (key, options) { 2110 return i18next.t(key, options); 2111 }, 2112 apply: updateDataI18n, 2113 changeLanguage: changeLanguage 2114}; 2115 2116document.addEventListener('change', function (event) { 2117 const input = event.target; 2118 2119 if (!input.matches('.localized-file-input .custom-file-input')) { 2120 return; 2121 } 2122 2123 const label = input.parentNode.querySelector('.custom-file-label'); 2124 if (!label) { 2125 return; 2126 } 2127 2128 if (input.files && input.files.length) { 2129 label.removeAttribute('data-i18n'); 2130 label.textContent = input.files[0].name; 2131 } else { 2132 label.setAttribute('data-i18n', 'memberNoFileChosen'); 2133 label.textContent = i18next.t('memberNoFileChosen'); 2134 } 2135}); 2136 2137document.addEventListener('DOMContentLoaded', function () { 2138 updateDataI18n(); 2139});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.