/* 以下为多语言中重复出现的文案,统一声明一次后在下方各 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', }, jackpotPool: { ariaLabel: 'Pool jackpot saat ini {{amount}}', iconAlt: 'Pool jackpot', label: 'Jackpot', promoLine1: 'Menang 10 Ronde Beruntun', promoLine2: 'Dan Raih Super Jackpot', }, 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: [ '## Panduan Peraturan 36 Zihua', '', '### 1. Pengenalan Game', '', '**36 Zihua** adalah permainan prediksi angka. Dalam setiap putaran, **1 nomor pemenang** akan dipilih dari **36 simbol**. Pemain memilih nomor dan memasang taruhan pada tahap taruhan. Jika tebakan benar, pemain akan mendapatkan hadiah. Kemenangan beruntun dapat meningkatkan hadiah, dan setelah mencapai tier jackpot, pemain juga berkesempatan memenangkan **Jackpot Satu Juta**.', '', '---', '', '### 2. Cara Bermain', '', 'Setiap putaran dibagi menjadi beberapa tahap berikut:', '', '1. **Tahap Taruhan**', ' Pemain memilih nomor yang ingin dipertaruhkan dari 36 nomor, memilih chip, mengonfirmasi taruhan, dan sistem akan memotong saldo serta membuat catatan taruhan.', ' Jumlah maksimum nomor yang dapat dipilih per putaran bergantung pada konfigurasi sistem saat ini.', '', '2. **Tahap Penutupan Taruhan**', ' Setelah putaran memasuki tahap penutupan, sistem berhenti menerima taruhan baru.', '', '3. **Tahap Pengundian dan Penyelesaian**', ' Sistem akan mengumumkan nomor pemenang untuk putaran tersebut dan secara otomatis menyelesaikan hadiah sesuai aturan yang berlaku.', '', '4. **Putaran Berikutnya Dimulai**', ' Setelah putaran saat ini selesai diselesaikan, sistem akan otomatis memulai putaran berikutnya.', '', '---', '', '### 3. Aturan Kemenangan', '', '1. Hanya **1 nomor pemenang** yang akan dikeluarkan di setiap putaran.', '2. Jika nomor yang dipilih pemain **mencakup nomor pemenang**, maka taruhan tersebut dianggap menang.', '3. Dalam setiap putaran, pemain hanya boleh bertaruh pada **1–5 nomor**, dan tidak boleh melebihi **5 nomor**.', '4. Jika pemain memilih beberapa nomor dan jumlah taruhan untuk setiap nomor sama, maka:', '', '```text', 'Nilai Taruhan Nomor Menang = Total Taruhan ÷ Jumlah Nomor yang Dipilih', '```', '', '**Contoh:**', 'Jika pemain memilih **5 nomor** dengan total taruhan **💎50**, maka setiap nomor memiliki nilai taruhan **💎10**.', 'Jika nomor pemenang berada di antara 5 nomor tersebut, hadiah akan dihitung berdasarkan **💎10**.', '', '---', '', '### 4. Aturan Hadiah', '', 'Hadiah kemenangan beruntun dibagi menjadi **dua jenis**, dan hanya satu jenis yang berlaku pada setiap tier kemenangan beruntun:', '', '#### 1. Hadiah Koefisien', '', 'Hadiah dihitung dengan mengalikan nilai taruhan nomor menang dengan koefisien odds pada tier saat ini:', '', '```text', 'Jumlah Kemenangan = Nilai Taruhan Nomor Menang × Koefisien Odds', '```', '', '#### 2. Hadiah Tetap', '', 'Sistem akan langsung membayar jumlah tetap yang telah dikonfigurasi, tanpa bergantung pada jumlah taruhan pada putaran tersebut:', '', '```text', 'Jumlah Kemenangan = Jumlah Hadiah Tetap', '```', '', '#### 3. Catatan Tabel Hadiah', '', 'Tabel hadiah kemenangan beruntun saat ini mengikuti konfigurasi backend sistem, dan frontend harus menampilkannya berdasarkan data konfigurasi terbaru.', 'Setiap tier berisi informasi berikut:', '', '- Tier kemenangan beruntun', '- Jenis hadiah', '- Koefisien odds', '- Jumlah hadiah tetap', '- Apakah termasuk tier jackpot', '', 'Dengan kata lain, tabel hadiah tidak ditulis tetap. Isi sebenarnya selalu mengikuti konfigurasi sistem saat ini.', '', '---', '', '### 5. Aturan Kemenangan Berturut-turut', '', 'Saat pemain menang dalam beberapa putaran berturut-turut, pemain akan masuk ke status kemenangan beruntun. Semakin tinggi kemenangan beruntun, semakin tinggi tier hadiah.', '', '#### 1. Aturan Perhitungan Kemenangan Beruntun', '', '1. Setelah pemain menang, jumlah kemenangan beruntun akan bertambah.', '2. Hadiah dihitung berdasarkan **tier kemenangan beruntun saat taruhan dipasang**.', '3. Jika pemain kalah di putaran mana pun, kemenangan beruntun akan langsung direset ke **0**.', '4. Dalam implementasi saat ini, kemenangan biasa akan melanjutkan kemenangan beruntun, tetapi jika pemain mengenai **tier jackpot**, maka kemenangan beruntun akan langsung direset ke **0** setelah putaran tersebut selesai diselesaikan.', '', '#### 2. Batas Taruhan Saat Kemenangan Beruntun Jackpot', '', 'Ketika kemenangan beruntun pemain mencapai tier **jackpot pertama** yang dikonfigurasi oleh sistem, pemain akan masuk ke tahap pembatasan taruhan jackpot.', '', 'Aturannya sebagai berikut:', '', '1. Dalam setiap putaran berikutnya, **total jumlah taruhan** **tidak boleh melebihi** jumlah taruhan dari **putaran pertama yang memenangkan jackpot** dalam kemenangan beruntun saat ini.', '2. Batas ini akan tetap terkunci selama kemenangan beruntun saat ini berlangsung dan tidak akan berubah meskipun pemain kembali memenangkan jackpot setelah itu.', '3. Setelah kemenangan beruntun terputus, pembatasan ini akan langsung dihapus.', '4. Kemenangan beruntun biasa sebelum mencapai tier jackpot tidak terpengaruh oleh aturan ini.', '', '{{STREAK_REWARD_TABLE}}', '', '---', '', '### 6. Jackpot Satu Juta', '', 'Ketika pemain mencapai tier jackpot yang dikonfigurasi sistem melalui kemenangan beruntun, dan tier jackpot tersebut dikonfigurasi sebagai hadiah tetap, pemain bisa menerima Jackpot Satu Juta.', '', '#### 1. Syarat Pemicu', '', '1. Pemain harus terus menang sampai mencapai tier jackpot yang saat ini dikonfigurasi oleh sistem.', '2. Jika tier jackpot dikonfigurasi sebagai **hadiah tetap**, misalnya **💎1,000,000**, pemain akan langsung menerima Jackpot Satu Juta saat berhasil mengenai tier tersebut.', '3. Dalam implementasi saat ini, **tidak ada syarat taruhan minimum tambahan**. Selama pemain memenuhi jumlah taruhan minimum yang diizinkan oleh platform, pemain dapat mengikuti kemenangan beruntun jackpot.', '4. Setelah mengenai tier jackpot, begitu penyelesaian selesai, kemenangan beruntun akan direset ke **0**.', '', '#### 2. Aturan Pembayaran', '', '- Jika tier jackpot dikonfigurasi sebagai **hadiah tetap**, jumlah jackpot tetap yang telah dikonfigurasi akan dibayarkan langsung.', '- Jika tier jackpot dikonfigurasi sebagai **hadiah koefisien**, hadiah akan dihitung sebagai **nilai taruhan nomor menang × koefisien odds**, dan satu juta tetap tidak akan dibayarkan secara otomatis.', '', '**Contoh:**', '', '- Jika tier jackpot dikonfigurasi sebagai hadiah tetap **💎1,000,000**', '- Pemain mencapai tier jackpot tersebut dan menang', '- Maka pemain akan langsung menerima **💎1,000,000**', '', '---', ].join('\n'), confirm: 'Saya Mengerti', streakRewardTable: { title: 'Tabel Hadiah Kemenangan Beruntun', columns: { streak: 'Tier', rewardType: 'Jenis Hadiah', oddsFactor: 'Odds', fixedAmount: 'Hadiah Tetap', isJackpot: 'Jackpot', }, rewardTypes: { coefficient: 'Hadiah Koefisien', fixed: 'Hadiah Tetap', }, streakValue: 'Putaran {{streak}}', yes: TEXT_YES, no: TEXT_NO, empty: 'Belum ada konfigurasi hadiah', }, }, 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: { actions: { refreshBalance: 'Segarkan saldo', submitting: TEXT_SUBMITTING, }, 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}}', handlingFee: 'Biaya Penanganan', quickDiamondAmount: '{{amount}} diamond', quickHandlingFee: 'Biaya dipotong: {{fee}}', fixedExchangeDiamondAmount: 'Jumlah Berlian Tukar Tetap', }, }, }, } as const