/* 以下为多语言中重复出现的文案,统一声明一次后在下方各 key 复用,避免同一文案多处声明。 */ /** @description 登录的统一文案。 */ const TEXT_LOGIN = 'Masuk' /** @description 注册的统一文案。 */ const TEXT_REGISTER = 'Daftar' /** @description “是”的统一文案。 */ const TEXT_YES = 'Ya' /** @description “否”的统一文案。 */ const TEXT_NO = 'Tidak' /** @description “查看”的统一文案。 */ const TEXT_VIEW = 'Lihat' /** @description 自动托管的统一文案。 */ const TEXT_AUTO_HOSTING = 'Auto Spin' /** @description 钱包流水的统一文案。 */ const TEXT_WALLET_RECORDS = 'Riwayat Dompet' /** @description 站内消息的统一文案。 */ const TEXT_SITE_MESSAGES = 'Pesan' /** @description 分页“第x页/共x条”的统一文案。 */ const TEXT_PAGE_INDICATOR = 'Halaman {{page}} / total {{total}}' /** @description 上一页的统一文案。 */ const TEXT_PREV_PAGE = 'Sebelumnya' /** @description 下一页的统一文案。 */ const TEXT_NEXT_PAGE = 'Berikutnya' /** @description “时间”的统一文案。 */ const TEXT_TIME = 'Waktu' /** @description 超过单次投注限额的统一文案。 */ const TEXT_BET_LIMIT_EXCEEDED = 'Melebihi batas taruhan tunggal' /** @description “提交中...”的统一文案。 */ const TEXT_SUBMITTING = 'Mengirim...' /** @description 手机号字段标签的统一文案。 */ const TEXT_MOBILE_LABEL = 'Nomor Ponsel:' /** @description 手机号输入占位的统一文案。 */ const TEXT_MOBILE_PLACEHOLDER = 'Masukkan nomor ponsel' /** @description 密码字段标签的统一文案。 */ const TEXT_PASSWORD_LABEL = 'Kata Sandi:' /** @description 密码输入占位的统一文案。 */ const TEXT_PASSWORD_PLACEHOLDER = 'Masukkan kata sandi' /** @description “确认”按钮的统一文案。 */ const TEXT_CONFIRM = 'Konfirmasi' /** @description “加载中...”的统一文案。 */ const TEXT_LOADING = 'Memuat...' /** @description 货币类型的统一文案。 */ const TEXT_CURRENCY_TYPE = 'Jenis Mata Uang' /** @description 支付渠道的统一文案。 */ const TEXT_PAYMENT_CHANNEL = 'Saluran Pembayaran' /** @description “已封盘”的统一文案。 */ const TEXT_LOCKED = 'Terkunci' /** @description “已结算”的统一文案。 */ const TEXT_SETTLED = 'Selesai' export default { nav: { home: 'Beranda', game: 'Game', }, shell: { eyebrow: '36 Character Flower', subtitle: 'Frontend game undian real-time untuk mobile dan desktop', }, notFound: { eyebrow: '404', title: 'Halaman yang kamu minta tidak ditemukan.', description: 'Rute ini tidak ada. Kembali ke halaman utama scaffold.', home: 'Kembali ke beranda', }, home: { eyebrow: 'Shell game sedang dibangun', title: 'Framework game dual-device 36-character-flower sedang dibangun.', description: 'Proyek ini sudah melewati tahap scaffold umum. Sekarang strukturnya dibangun dengan rute game bersama, state bersama, serta tampilan mobile dan desktop terpisah untuk pengalaman betting real-time.', cards: { routingMode: 'Routing', dataLayer: 'Model state', transport: 'Real-time', auth: 'Produk', metadata: 'Fokus saat ini', }, values: { routingMode: 'URL bersama + tampilan device terpisah', dataLayer: 'Round / Bet / User / UI / Connection', transport: 'HTTP + WebSocket', auth: 'Gameplay live draw 36-grid', metadata: 'Bangun struktur dulu sebelum polishing state machine', }, footnote: 'Berikutnya: rute utama game, model bisnis bersama, dan shell halaman mobile serta desktop.', primaryAction: 'Masuk lobby game', secondaryAction: 'Lihat struktur proyek', }, language: { label: 'Bahasa', zhCN: '中文', enUS: 'English', msMY: 'Melayu', idID: 'Indonesia', }, game: { metaTitle: 'Lobby Game', metaDescription: 'Lobby game live 36-character-flower.', lobbyTitle: 'Lobby 36 Character Flower', lobbySubtitle: 'Dalam satu rute bisnis bersama, mobile dan desktop memasang tampilan berbeda di atas data dan state game yang sama.', status: { roundState: 'Status ronde', currentRound: 'Ronde saat ini {{id}}', tablePool: 'Pool meja', onlineCount: '{{count}} online', activeChip: 'Chip aktif', announcementsRead: '{{read}}/{{total}} pengumuman dibaca', connection: 'Koneksi', connectionHealthy: 'Sinkronisasi stabil', connectionRecovering: 'Menunggu pemulihan', synced: 'Tersinkron', degraded: 'Menurun', }, board: { historyTitle: 'Riwayat ronde', historySubtitle: 'Jejak undian dan payout terbaru', trendTitle: 'Radar tren', trendSubtitle: 'Ringkasan momentum dan miss streak', stageTitle: 'Panggung undian', stageSubtitle: 'Panggung ini menampung papan utama dan struktur kontrol sebelum integrasi penuh state machine dan animasi.', currentPhase: 'Fase saat ini', selectedBet: 'Bet {{amount}}', hitCount: '{{count}} hit', hitBadge: '{{count}}x', badgeWin: 'Menang', badgeBet: 'Bet', cellLabel: 'Sel {{id}}', winningCell: 'Sel pemenang {{id}}', missedRounds: 'Miss {{count}} ronde', rising: 'Naik', falling: 'Turun', steady: 'Stabil', hitTotal: '{{count}} hit', }, phases: { betting: 'Betting', locked: TEXT_LOCKED, settled: TEXT_SETTLED, }, roundBettingStart: { title: 'Ronde {{roundId}}', action: 'Mulai Bertaruh', }, jackpotBroadcast: { ariaLabel: 'Siaran jackpot', ariaMessage: '{{nickname}} sedang streak {{streak}} menang dan memenangkan {{amount}}', iconAlt: 'Siaran', prefix: 'Jackpot kena', separator: 'dengan', streak: 'streak {{count}} menang', winAction: 'memenangkan', }, actions: { unifiedBetHint: 'Bet seragam', totalBet: 'Total bet', canBet: 'Bisa bet', yes: TEXT_YES, no: TEXT_NO, quickBet: 'Quick bet 08', clearPending: 'Hapus pending', autoModeDemo: 'Demo mode auto', stopAuto: 'Stop auto', }, modals: { login: { title: TEXT_LOGIN, }, register: { title: TEXT_REGISTER, }, notice: { title: 'Pengumuman Acara', content: 'Bagian ini nantinya akan memuat konten pengumuman acara yang sebenarnya, materi visual, dan pesan panjang yang dapat digulir. Versi saat ini fokus pada sambungan modal multibahasa.', check: TEXT_VIEW, }, entryNotice: { title: 'Pengumuman Situs', subtitle: 'Silakan baca pengumuman berikut dan konfirmasi sebelum masuk ke game.', loading: 'Memuat pengumuman...', loadFailed: 'Gagal memuat pengumuman. Silakan coba lagi.', retry: 'Muat Ulang', agreement: 'Saya telah membaca dan setuju.', enterGame: 'Masuk Game', }, rules: { title: 'Aturan Permainan', content: [ '## 36 Zihua · Panduan Permainan', '', '### 1. Pengenalan Permainan', '', '**36 Zihua** adalah permainan tebak angka berkecepatan tinggi dengan **satu putaran setiap 30 detik**. Setiap putaran, sistem mengeluarkan **satu nomor pemenang** dari **36 simbol** (Tikus, Kerbau, Harimau… Naga Biru, Harimau Putih, Burung Merah, Kura-kura Hitam, dan lainnya). Selama periode taruhan, pemain memilih nomor dan memasang taruhan. Tebak dengan benar untuk memenangkan hadiah. Menang berturut-turut dapat meningkatkan hadiah Anda — **10 kemenangan berturut-turut** dapat memberikan **Jackpot Satu Juta**.', '', '---', '', '### 2. Cara Bermain', '', 'Setiap putaran berlangsung sekitar **30 detik**:', '', '**Langkah 1 — Periode taruhan (0–20 detik)**', 'Pilih nomor pada grid 36 kotak (default maksimum **5 nomor**), pilih nilai chip (mis. 💎1, 5, 10, 25, 50, 100), lalu konfirmasi taruhan. Saldo Anda akan dipotong dan taruhan dikonfirmasi.', '', '**Langkah 2 — Penutupan (pada detik ke-20)**', 'Tidak ada taruhan baru yang diterima. Taruhan yang dipasang setelah penutupan tidak berlaku.', '', '**Langkah 3 — Pengundian & penyelesaian (20–30 detik)**', 'Nomor pemenang diumumkan dan hadiah dibayarkan sesuai aturan hadiah.', '', '**Langkah 4 — Putaran berikutnya**', 'Setelah penyelesaian, putaran berikutnya dimulai secara otomatis.', '', '---', '', '### 3. Aturan Kemenangan', '', '- Hanya **satu** nomor pemenang yang dikeluarkan setiap putaran (dari 1 hingga 36).', '- Anda menang jika **nomor yang dipilih mencakup nomor pemenang**.', '- Jika tidak kena, tidak ada hadiah untuk putaran tersebut.', '', '**Jumlah taruhan pada nomor kena:**', '- Jika setiap nomor dipilih dengan jumlah taruhan yang sama:', ' **Jumlah taruhan pada nomor kena = total taruhan ÷ jumlah nomor yang dipilih**', '- Contoh: 5 nomor, total taruhan 💎50 → 💎10 per nomor. Jika nomor pemenang termasuk dalam pilihan Anda, 💎10 digunakan untuk perhitungan hadiah.', '', '---', '', '### 4. Jenis Hadiah', '', 'Hadiah kemenangan berturut-turut terdiri dari **dua jenis**. Setiap tingkat hanya menggunakan **satu jenis** — **tidak digabungkan**:', '', '#### Jenis A — Hadiah Koefisien', '', 'Hadiah dihitung menggunakan pengali odds:', '', '```', 'Hadiah = jumlah taruhan pada nomor kena × koefisien odds', '```', '', '#### Jenis B — Hadiah Tetap', '', 'Anda menerima **jumlah tetap** yang ditetapkan dalam konfigurasi.', '**Tidak bergantung pada jumlah taruhan dan tidak menggunakan koefisien odds.**', '', '```', 'Hadiah = jumlah tetap', '```', '', '**Perbandingan (contoh Tingkat 10):**', '', '| Jenis Hadiah | Jumlah Taruhan pada Nomor Kena | Hadiah |', '|:---:|:---:|:---:|', '| Koefisien (1:330) | 💎50 | 💎50 × 330 = **16.500** |', '| Hadiah tetap | Berapa pun | **1.000.000** (nilai konfigurasi) |', '', '---', '', '### 5. Aturan Kemenangan Berturut-turut', '', 'Saat Anda **menang berturut-turut**, hadiah meningkat sesuai tingkat kemenangan. Secara default, **hadiah koefisien** digunakan dengan odds yang meningkat:', '', '| Kemenangan Berturut-turut | Odds | Koefisien |', '|:---:|:---:|:---:|', '| Kemenangan ke-1 | 1:33 | 33 |', '| 2 berturut-turut | 1:66 | 66 |', '| 3 berturut-turut | 1:99 | 99 |', '| 4 berturut-turut | 1:132 | 132 |', '| 5 berturut-turut | 1:165 | 165 |', '| 6 berturut-turut | 1:198 | 198 |', '| 7 berturut-turut | 1:231 | 231 |', '| 8 berturut-turut | 1:264 | 264 |', '| 9 berturut-turut | 1:297 | 297 |', '| 10 berturut-turut | 1:330 | 330 |', '', '**Aturan kemenangan berturut-turut:**', '', '- Hadiah dihitung berdasarkan **status kemenangan berturut-turut saat Anda memasang taruhan**: jika Anda sudah memiliki N kemenangan berturut-turut, kemenangan putaran ini dibayar pada tingkat **(N+1)**.', '- **Putaran tanpa kemenangan** akan mengatur ulang kemenangan berturut-turut ke nol — Anda mulai lagi dari tingkat 1.', '- **Melewatkan putaran** (tidak memasang taruhan) selama kemenangan berturut-turut aktif juga akan **mengatur ulang kemenangan berturut-turut ke nol**.', '', '**Contoh (hadiah koefisien):**', '', '| Skenario | Jumlah Taruhan pada Nomor Kena | Tingkat | Odds | Hadiah |', '|:---:|:---:|:---:|:---:|:---:|', '| Kemenangan pertama | 💎10 | Ke-1 | 1:33 | **330** |', '| 3 kemenangan berturut-turut | 💎50 | Ke-3 | 1:99 | **4.950** |', '| 10 kemenangan berturut-turut | 💎50 | Ke-10 | 1:330 | **16.500** |', '', '---', '', '### 6. Jackpot Satu Juta', '', 'Saat pemain **bertaruh dan menang 10 putaran berturut-turut**, dan setiap taruhan selama kemenangan berturut-turut **minimal 💎50**, Jackpot Satu Juta akan dipicu.', '', '**Syarat:**', '', '1. **10 putaran berturut-turut** dengan taruhan dipasang dan dimenangkan di setiap putaran;', '2. **Setiap putaran** dalam kemenangan berturut-turut harus memiliki taruhan **minimal 💎50**;', '3. Jika ada putaran dalam kemenangan berturut-turut di bawah 💎50, Anda hanya menerima hadiah kemenangan berturut-turut biasa — **Jackpot Satu Juta tidak berlaku**.', '', '**Cara pembayaran (tergantung konfigurasi backend):**', '', '- **Hadiah tetap**: Jika tingkat 10 ditetapkan sebagai jumlah tetap, 10 kemenangan berturut-turut membayar **💎1.000.000** secara langsung.', '- **Hadiah koefisien**: Jika tingkat 10 menggunakan odds koefisien, Anda menerima hadiah reguler pada **1:330** terlebih dahulu, ditambah jackpot tambahan sesuai aturan kampanye.', '', '**Contoh — hadiah tetap pada tingkat 10 (💎1.000.000), jumlah taruhan pada nomor kena 💎50 setiap putaran:**', '', '- 10 kemenangan berturut-turut → **💎1.000.000**', '- Kemenangan berturut-turut diatur ulang ke **nol** setelah jackpot diberikan', '', '**Contoh — hadiah koefisien pada tingkat 10 (1:330), jumlah taruhan pada nomor kena 💎50:**', '', '- Hadiah reguler tingkat 10: 💎50 × 330 = **💎16.500**', '- Jika kampanye Jackpot terpisah berlaku, hadiah satu juta tambahan dapat ditambahkan di atasnya', ].join('\n'), confirm: 'Saya Mengerti', }, procedures: { title: 'Isi Ulang / Tarik Dana', contentPlaceholder: 'Pilih tindakan yang ingin kamu lanjutkan', withdraw: 'Tarik Dana', topup: 'Isi Ulang', }, autoSetting: { title: TEXT_AUTO_HOSTING, startAutoSpin: 'Mulai Auto Spin', rows: { stopIfBalanceLowerThan: 'Berhenti jika saldo lebih rendah dari', stopIfSingleWinExceeds: 'Berhenti jika kemenangan tunggal melebihi', stopOnAnyJackpot: 'Berhenti pada jackpot apa pun', }, }, userInfo: { title: 'Info Pengguna', tabs: { profile: 'Profil', financeRecords: 'Riwayat Isi Ulang / Penarikan', walletRecords: TEXT_WALLET_RECORDS, message: TEXT_SITE_MESSAGES, }, profile: { name: 'Nama', tel: 'Telepon', registeredAt: 'Tanggal daftar', copyInviteLink: 'Salin tautan undangan', logout: 'Keluar', loggingOut: 'Keluar...', signature: 'Tanda tanganku seunik diriku. Bagian ini nantinya akan menampilkan ringkasan profil yang sebenarnya.', }, message: { title: TEXT_SITE_MESSAGES, back: 'Kembali', loading: 'Memuat pesan...', loadFailed: 'Gagal memuat pesan. Silakan coba lagi nanti.', empty: 'Belum ada pesan', read: 'Sudah dibaca', unread: 'Belum dibaca', eventBonus: '[Event Bonus Isi Ulang] Dari 1 Oktober hingga 7 Oktober 2026, klaim hadiah rebate kamu...', check: TEXT_VIEW, deleteRecords: 'Hapus riwayat', }, financeRecords: { deposit: 'Riwayat Isi Ulang', withdraw: 'Riwayat Penarikan', orderNo: 'No. Pesanan', amount: 'Jumlah', bonusAmount: 'Jumlah Bonus', status: 'Status', statuses: { pending_review: 'Menunggu Tinjauan', approved: 'Disetujui', rejected: 'Ditolak', failed: 'Gagal', }, loading: 'Memuat riwayat...', loadFailed: 'Gagal memuat riwayat. Silakan coba lagi nanti.', empty: 'Belum ada riwayat', page: TEXT_PAGE_INDICATOR, previous: TEXT_PREV_PAGE, next: TEXT_NEXT_PAGE, }, walletRecords: { amount: 'Jumlah', balanceAfter: 'Sesudah', balanceBefore: 'Sebelum', empty: 'Belum ada riwayat dompet', loadFailed: 'Gagal memuat riwayat dompet. Silakan coba lagi nanti.', loading: 'Memuat riwayat dompet...', next: TEXT_NEXT_PAGE, page: TEXT_PAGE_INDICATOR, previous: TEXT_PREV_PAGE, remark: 'Catatan', time: TEXT_TIME, type: TEXT_WALLET_RECORDS, }, }, withdrawTopup: { applyWithdraw: 'Ajukan Penarikan', applyTopup: 'Ajukan Isi Ulang', }, }, autoSpin: { eyebrow: 'Auto spin', title: 'Auto spin berjalan', description: 'Mode auto akan menutupi board sambil mempertahankan fokus sel target dan progres.', runningRounds: 'Auto spin berjalan, {{count}} ronde selesai', trailingLabel: 'Input manual terkunci', }, footer: { implementationTitle: 'Implementasi saat ini', implementationSubtitle: 'Iterasi ini memprioritaskan shell dual-device, model bersama, dan wiring bisnis.', implementationBody: 'Langkah berikutnya adalah API nyata, WebSocket, UI store penuh, dan state machine siklus ronde.', limitsTitle: 'Batas meja', limitsSubtitle: 'Berasal dari data lobby saat ini', minBet: 'Bet minimum', maxBet: 'Bet maksimum', }, }, commonUi: { dialog: { close: 'Tutup notifikasi', confirm: 'OK', no: TEXT_NO, yes: TEXT_YES, }, modal: { close: 'Tutup modal', defaultAriaLabel: 'Modal', }, boot: { loading: 'Memuat sumber daya', syncing: 'Menyinkronkan deck bunga dan antarmuka game', }, support: { title: 'Dukungan Langsung', connecting: 'Menghubungkan ke dukungan', }, toast: { lobbyInitFailed: 'Gagal memuat lobby game', loginRequired: 'Silakan masuk sebelum memasuki game', loginSuccess: 'Berhasil masuk', logoutSuccess: 'Berhasil keluar', logoutLocalOnly: 'Permintaan keluar gagal. Sesi lokal telah dibersihkan.', registerSuccess: 'Pendaftaran berhasil', inviteLinkCopied: 'Tautan undangan disalin', inviteLinkCopyFailed: 'Gagal menyalin tautan undangan. Silakan salin secara manual.', insufficientBalance: 'Saldo tidak cukup. Silakan sesuaikan taruhan.', betLimitExceeded: TEXT_BET_LIMIT_EXCEEDED, betUnavailable: 'Taruhan tidak tersedia untuk ronde ini', betPlaced: 'Taruhan berhasil dikirim', noRecentSuccessfulBet: 'Tidak ada riwayat taruhan berhasil dari ronde sebelumnya', repeatSelectionsRestored: 'Pilihan dari ronde berhasil terakhir telah dipulihkan', betRejected: 'Taruhan tidak diterima', betPlaceFailed: 'Gagal mengirim taruhan. Silakan coba lagi.', selectNumbersBeforeAutoHosting: 'Pilih angka terlebih dahulu', autoHostingStarted: 'Auto spin dimulai', autoHostingStopped: 'Auto spin berhenti', autoHostingStoppedBalance: 'Kondisi saldo tercapai. Auto spin telah berhenti.', autoHostingStoppedBetLimit: 'Melebihi batas taruhan tunggal. Auto spin telah berhenti.', autoHostingStoppedWin: 'Kondisi kemenangan tunggal tercapai. Auto spin telah berhenti.', autoHostingStoppedJackpot: 'Jackpot tercapai. Auto spin telah berhenti.', autoHostingSubmitFailed: 'Taruhan auto-hosting gagal. Auto-hosting telah dihentikan.', requestFailed: 'Permintaan gagal. Silakan coba lagi nanti.', configError: 'Kesalahan konfigurasi. Silakan hubungi dukungan.', }, }, auth: { common: { arrowIconAlt: 'Panah', actions: { submitting: TEXT_SUBMITTING, }, passwordVisibility: { hide: 'Sembunyikan kata sandi', show: 'Tampilkan kata sandi', }, }, login: { actions: { submit: TEXT_LOGIN, }, fields: { username: { label: TEXT_MOBILE_LABEL, placeholder: TEXT_MOBILE_PLACEHOLDER, }, password: { label: TEXT_PASSWORD_LABEL, placeholder: TEXT_PASSWORD_PLACEHOLDER, }, }, footer: { registerAccount: 'Daftar akun', forgotPassword: 'Lupa kata sandi', }, errors: { submitFailed: 'Login gagal. Silakan coba lagi nanti.', invalidCredentials: 'Akun atau kata sandi salah.', }, }, register: { actions: { submit: TEXT_REGISTER, }, fields: { mobile: { label: TEXT_MOBILE_LABEL, placeholder: TEXT_MOBILE_PLACEHOLDER, }, captcha: { label: 'Kode:', placeholder: 'Masukkan kode verifikasi', }, password: { label: TEXT_PASSWORD_LABEL, placeholder: TEXT_PASSWORD_PLACEHOLDER, }, confirmPassword: { label: 'Konfirmasi Kata Sandi:', placeholder: 'Masukkan ulang kata sandi', }, inviteCode: { label: 'Kode Undangan:', placeholder: 'Masukkan kode undangan', }, }, footer: { alreadyHaveAccount: 'Sudah punya akun', needHelp: 'Butuh bantuan', }, errors: { submitFailed: 'Pendaftaran gagal. Silakan coba lagi nanti.', unauthorized: 'Pendaftaran tidak diizinkan. Silakan coba lagi nanti.', }, sms: { countdown: '{{seconds}}d', errors: { submitFailed: 'Gagal mengirim kode. Silakan coba lagi nanti.', }, send: 'Ambil kode', sending: TEXT_SUBMITTING, success: 'Kode verifikasi telah dikirim.', }, }, validation: { captcha: { required: 'Silakan masukkan kode verifikasi.', }, username: { required: 'Silakan masukkan nomor ponsel.', invalidPhone: 'Silakan masukkan nomor ponsel yang valid.', }, password: { min: 'Kata sandi minimal 6 karakter.', max: 'Kata sandi maksimal 32 karakter.', }, inviteCode: { required: 'Silakan masukkan kode undangan.', max: 'Kode undangan maksimal 32 karakter.', }, confirmPassword: { mismatch: 'Kedua kata sandi tidak sama.', }, }, errors: { requestFailed: 'Permintaan gagal. Silakan coba lagi nanti.', authTokenConfigMissing: 'Konfigurasi autentikasi tidak ada. Silakan hubungi dukungan.', timeout: 'Permintaan habis waktu. Silakan coba lagi nanti.', serviceUnavailable: 'Layanan sedang tidak tersedia. Silakan coba lagi nanti.', }, }, gameDesktop: { header: { systemTime: 'Waktu Sistem', rules: 'Aturan', message: TEXT_SITE_MESSAGES, bgm: 'BGM', id: 'ID', fullscreen: 'Layar', login: TEXT_LOGIN, register: TEXT_REGISTER, }, control: { trend: 'Tren', map: 'Peta', selected: 'Dipilih', totalBet: 'Total Bet', confirm: TEXT_CONFIRM, selectNumbers: 'Pilih Nombor', insufficientBalance: 'Saldo Tidak Cukup', betLimitExceeded: 'Batas Terlampaui', submitting: TEXT_SUBMITTING, actions: { clear: 'Hapus', repeat: 'Ulang', 'auto-spin': TEXT_AUTO_HOSTING, }, }, status: { odds: 'Odds', streak: 'Streak', limit: 'Batas', roundId: 'Ronde', phase: { betting: { label: 'Buka', description: '(Menerima Bet)', }, locked: { label: TEXT_LOCKED, description: '(Bet Ditutup)', }, revealing: { label: 'Drawing', description: '(Mengungkap Hasil)', }, settled: { label: 'Drawing', description: '(Ronde Selesai)', }, waiting: { label: 'Menunggu', description: '(Menunggu Ronde Berikutnya)', }, }, }, title: { announcement: 'Pengumuman', }, animal: { insufficientBalanceRecharge: 'Saldo tidak cukup, silakan isi ulang', betLimitExceeded: TEXT_BET_LIMIT_EXCEEDED, loading: 'Memuat', selectionLimitReached: 'Melebihi pilihan yang diizinkan', tapToEnter: 'Ketuk Untuk Masuk', getStart: 'Mulai', noBet: 'Belum Bertaruh', noReward: 'Belum Menang Ronde Ini', selectedResult: 'Pilihan Kamu', winningResult: 'Bunga Menang', }, history: { title: 'Riwayat', pending: 'PENDING', win: 'WIN', lost: 'LOST', orderNo: 'No. Order', roundId: 'ID Ronde', numbers: 'Nomor Taruhan', createdAt: TEXT_TIME, settledAt: 'Waktu Selesai', totalPoolAmount: 'Jumlah Taruhan', winningResult: 'Hasil Menang', payout: 'Jumlah Menang', empty: 'Belum ada riwayat', end: 'Tidak ada catatan lagi', loading: TEXT_LOADING, settled: TEXT_SETTLED, }, periodHistory: { title: 'Riwayat Hasil Undian', close: 'Tutup riwayat hasil undian', empty: 'Belum ada hasil undian', failed: 'Gagal memuat hasil undian', loading: TEXT_LOADING, retry: 'Coba lagi', }, topup: { title: 'Konfigurasi Isi Ulang', platformCoinLabel: 'Koin Platform', currencyLabel: TEXT_CURRENCY_TYPE, channelLabel: TEXT_PAYMENT_CHANNEL, rateHint: 'Kurs hanya sebagai referensi. Jumlah akhir mengikuti kurs saat isi ulang.', flow: { channelTitle: 'Pilih Saluran Pembayaran', currencyTitle: 'Mata Uang', methodTitle: 'Metode Isi Ulang', bankTitle: 'Bank', bankPlaceholder: 'Pilih bank', noBank: 'Tidak ada bank tersedia', paymentMethods: { QR: 'Kode QR', ONLINE_DEBIT: 'Perbankan Online', E_WALLET: 'Dompet Elektronik', }, }, tier: { bonus: 'Bonus', coins: 'Koin Masuk', createSuccess: 'Order isi ulang berhasil dibuat', empty: 'Belum ada tier isi ulang', failed: 'Gagal memuat tier isi ulang', loading: 'Memuat tier isi ulang...', missingPayUrl: 'Tautan pembayaran tidak tersedia. Silakan coba lagi nanti.', openPayUrlFailed: 'Gagal membuka halaman pembayaran. Periksa pengaturan popup browser Anda.', source: 'Endpoint tier isi ulang', title: 'Tier Isi Ulang', }, preview: { title: 'Pratinjau Isi Ulang', depositTitle: 'Pilih mata uang isi ulang dan saluran pembayaran', depositRate: 'Rasio Isi Ulang ({{currency}})', depositRateValue: '1 {{currency}} = {{coins}} {{platformCoinLabel}}', amount: 'Contoh Kredit', }, }, mobile: { placeholder: 'Halaman mobile sedang dibangun', }, withdraw: { availableBalance: 'Saldo tersedia: {{amount}}', currencySelection: 'Pilihan jenis mata uang', selectCurrency: 'Pilih jenis mata uang', referenceRateNotice: 'Kurs hanya sebagai referensi. Jumlah akhir mengikuti kurs saat penarikan.', eWallet: 'Dompet elektronik', bank: 'Bank', minimumAmount: 'Minimum {{currency}} {{amount}}', processingTime: 'Waktu proses', arrivalTimeValue: 'Masuk dalam 30 detik', notice: 'Perhatian', feeNotice: 'Transaksi antara RM10 dan RM99.99 akan dikenakan biaya penarikan minimum RM 1.', cancel: 'Batal', confirm: TEXT_CONFIRM, submitSuccess: 'Permintaan penarikan berhasil dikirim', withdrawal: 'Penarikan', fields: { diamondAmount: 'Jumlah Berlian Penarikan', currencyType: TEXT_CURRENCY_TYPE, paymentChannel: TEXT_PAYMENT_CHANNEL, paymentType: 'Jenis Pembayaran', bankCode: 'Kode Bank', cardHolderName: 'Nama Pemilik Rekening', bankAccountNumber: 'Nomor Rekening Bank', receiverEmail: 'Email Penerima', receiverPhone: 'Telepon Penerima', }, placeholders: { bankCode: 'Pilih kode bank', paymentType: 'Pilih jenis pembayaran', cardHolderName: 'Masukkan nama pemilik rekening', bankAccountNumber: 'Masukkan nomor rekening bank', receiverEmail: 'Masukkan email penerima', receiverPhone: 'Masukkan nomor telepon penerima', }, errors: { amountRequired: 'Silakan masukkan jumlah diamond penarikan.', amountBelowMinimum: 'Jumlah penarikan tidak boleh lebih kecil dari minimum ({{currency}} {{amount}} / {{diamonds}} diamond).', amountBelowPaymentMinimum: 'Jumlah penarikan tidak boleh lebih kecil dari minimum jenis pembayaran ini ({{amount}}).', amountAbovePaymentMaximum: 'Jumlah penarikan tidak boleh melebihi maksimum jenis pembayaran ini ({{amount}}).', bankCodeRequired: 'Silakan pilih kode bank.', bankCodeUnavailable: 'Saat ini tidak ada kode bank yang tersedia.', cardHolderNameRequired: 'Silakan masukkan nama pemilik rekening.', bankAccountRequired: 'Silakan masukkan nomor rekening bank.', paymentChannelRequired: 'Silakan pilih saluran pembayaran.', paymentChannelUnavailable: 'Saat ini tidak ada saluran pembayaran yang tersedia.', paymentTypeRequired: 'Silakan pilih jenis pembayaran.', receiverEmailInvalid: 'Silakan masukkan alamat email yang valid.', receiverPhoneInvalid: 'Silakan masukkan nomor telepon yang valid.', amountExceedsBalance: 'Jumlah penarikan tidak boleh melebihi saldo saat ini.', }, success: { orderNo: 'No. pesanan: {{orderNo}}', actualArrivalCoin: 'Diamond masuk aktual: {{amount}}', feeCoin: 'Diamond biaya: {{amount}}', reviewRequired: 'Perlu tinjauan risiko: {{value}}', }, preview: { title: 'Pratinjau Penukaran', diamondAmount: 'Jumlah Berlian', exchangeRate: 'Rasio Penukaran ({{currency}})', exchangeRateValue: '{{coins}} {{platformCoinLabel}} = 1 {{currency}}', convertible: 'Bisa Ditukar {{currency}}', fixedExchangeDiamondAmount: 'Jumlah Berlian Tukar Tetap', }, }, }, } as const