PageSourceSearch

https://www.btmshuttle.id/locales/default.js?v=22

js btmshuttle.id collected 2026-09-27 21:18:18 UTC 108,157 bytes, 2,231 lines download raw bytes

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

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.