Files
36-character-flower/src/locales/id-ID.ts
JiaJun 69cd9a7521 feat(game): 更新游戏规则并优化充值提现界面
- 在 api.type.ts 中为支付渠道、存款配置和取款字段添加新的接口属性
- 替换桌面端规则模态框中的纯文本内容为支持 Markdown 格式的组件
- 重构桌面端充值组件的 UI 结构,使用自定义按钮替代原生选择器
- 为取款组件添加最低最高金额验证及支付方式选择功能
- 更新英文本地化文件中的游戏规则内容,提供详细的玩法指南
2026-07-09 16:43:52 +08:00

830 lines
30 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* 以下为多语言中重复出现的文案,统一声明一次后在下方各 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 (020 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 (2030 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