PageSourceSearch

https://www.banyumilitravel.id/locales/default.js?v=3.0

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

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.