Files
36-character-flower/src/locales/ms-MY.ts
JiaJun bfb4b76611 refactor(game): 重构项目结构,优化链路, 移动端适配
- 移除 useGameBoardVm 数据层实施说明文档
- 移除核心玩法与前端规则摘要文档
- 移除游戏模块数据与界面分层第一阶段实施稿文档
- 清理与数据层重构相关的技术方案说明
- 删除关于 PC 和 Mobile 界面分离的设计规划
- 移除 view-model hooks 架构设计相关内容
2026-06-03 17:21:13 +08:00

658 lines
23 KiB
TypeScript

/* 以下为多语言中重复出现的文案,统一声明一次后在下方各 key 复用,避免同一文案多处声明。 */
/** @description 登录的统一文案。 */
const TEXT_LOGIN = 'Log Masuk'
/** @description 注册的统一文案。 */
const TEXT_REGISTER = 'Daftar'
/** @description “是”的统一文案。 */
const TEXT_YES = 'Ya'
/** @description “否”的统一文案。 */
const TEXT_NO = 'Tidak'
/** @description “查看”的统一文案。 */
const TEXT_VIEW = 'Semak'
/** @description 自动托管的统一文案。 */
const TEXT_AUTO_HOSTING = 'Putaran Auto'
/** @description 钱包流水的统一文案。 */
const TEXT_WALLET_RECORDS = 'Rekod Dompet'
/** @description 站内消息的统一文案。 */
const TEXT_SITE_MESSAGES = 'Mesej'
/** @description 分页“第x页/共x条”的统一文案。 */
const TEXT_PAGE_INDICATOR = 'Halaman {{page}} / jumlah {{total}}'
/** @description 上一页的统一文案。 */
const TEXT_PREV_PAGE = 'Sebelumnya'
/** @description 下一页的统一文案。 */
const TEXT_NEXT_PAGE = 'Seterusnya'
/** @description “时间”的统一文案。 */
const TEXT_TIME = 'Masa'
/** @description 超过单次投注限额的统一文案。 */
const TEXT_BET_LIMIT_EXCEEDED = 'Melebihi had taruhan tunggal'
/** @description “提交中...”的统一文案。 */
const TEXT_SUBMITTING = 'Menghantar...'
/** @description 手机号字段标签的统一文案。 */
const TEXT_MOBILE_LABEL = 'Nombor Telefon:'
/** @description 手机号输入占位的统一文案。 */
const TEXT_MOBILE_PLACEHOLDER = 'Masukkan nombor telefon'
/** @description 密码字段标签的统一文案。 */
const TEXT_PASSWORD_LABEL = 'Kata Laluan:'
/** @description 密码输入占位的统一文案。 */
const TEXT_PASSWORD_PLACEHOLDER = 'Masukkan kata laluan'
/** @description “确认”按钮的统一文案。 */
const TEXT_CONFIRM = 'Sahkan'
/** @description “加载中...”的统一文案。 */
const TEXT_LOADING = 'Memuatkan...'
/** @description 货币类型的统一文案。 */
const TEXT_CURRENCY_TYPE = 'Jenis Mata Wang'
/** @description 支付渠道的统一文案。 */
const TEXT_PAYMENT_CHANNEL = 'Saluran Pembayaran'
/** @description “已封盘”的统一文案。 */
const TEXT_LOCKED = 'Dikunci'
/** @description “已结算”的统一文案。 */
const TEXT_SETTLED = 'Selesai'
export default {
nav: {
home: 'Laman Utama',
game: 'Permainan',
},
shell: {
eyebrow: '36 Character Flower',
subtitle:
'Antara muka permainan cabutan masa nyata untuk mudah alih dan desktop',
},
notFound: {
eyebrow: '404',
title: 'Halaman yang anda minta tidak ditemui.',
description:
'Laluan ini tidak wujud. Kembali ke halaman utama rangka kerja.',
home: 'Kembali ke utama',
},
home: {
eyebrow: 'Rangka permainan sedang dibina',
title:
'Rangka permainan dwi-peranti 36-character-flower sedang dibangunkan.',
description:
'Projek ini telah melepasi peringkat rangka asas. Kini ia disusun dengan laluan permainan dikongsi, keadaan dikongsi, serta paparan berasingan untuk mudah alih dan desktop bagi pengalaman pertaruhan masa nyata.',
cards: {
routingMode: 'Laluan',
dataLayer: 'Model keadaan',
transport: 'Masa nyata',
auth: 'Produk',
metadata: 'Fokus semasa',
},
values: {
routingMode: 'URL dikongsi + paparan peranti berasingan',
dataLayer: 'Round / Bet / User / UI / Connection',
transport: 'HTTP + WebSocket',
auth: 'Permainan cabutan langsung grid 36',
metadata: 'Bina struktur dahulu sebelum kemasan state machine',
},
footnote:
'Seterusnya: laluan utama permainan, model perniagaan dikongsi, dan rangka halaman mudah alih serta desktop.',
primaryAction: 'Masuk lobi permainan',
secondaryAction: 'Lihat struktur projek',
},
language: {
label: 'Bahasa',
zhCN: '中文',
enUS: 'English',
msMY: 'Melayu',
idID: 'Indonesia',
},
game: {
metaTitle: 'Lobi Permainan',
metaDescription: 'Lobi permainan langsung 36-character-flower.',
lobbyTitle: 'Lobi 36 Character Flower',
lobbySubtitle:
'Di bawah satu laluan perniagaan yang dikongsi, mudah alih dan desktop memaparkan antara muka berbeza di atas data dan keadaan permainan yang sama.',
status: {
roundState: 'Keadaan pusingan',
currentRound: 'Pusingan semasa {{id}}',
tablePool: 'Dana meja',
onlineCount: '{{count}} dalam talian',
activeChip: 'Cip aktif',
announcementsRead: '{{read}}/{{total}} pengumuman dibaca',
connection: 'Sambungan',
connectionHealthy: 'Penyegerakan stabil',
connectionRecovering: 'Menunggu pemulihan',
synced: 'Disegerakkan',
degraded: 'Terganggu',
},
board: {
historyTitle: 'Sejarah pusingan',
historySubtitle: 'Rekod cabutan dan pembayaran terkini',
trendTitle: 'Radar trend',
trendSubtitle: 'Ringkasan momentum dan kekerapan miss',
stageTitle: 'Pentas cabutan',
stageSubtitle:
'Pentas ini memuatkan papan utama dan struktur kawalan sebelum integrasi penuh state machine serta animasi.',
currentPhase: 'Fasa semasa',
selectedBet: 'Pertaruhan {{amount}}',
hitCount: '{{count}} kena',
hitBadge: '{{count}}x',
badgeWin: 'Menang',
badgeBet: 'Taruhan',
cellLabel: 'Sel {{id}}',
winningCell: 'Sel menang {{id}}',
missedRounds: 'Terlepas {{count}} pusingan',
rising: 'Meningkat',
falling: 'Menurun',
steady: 'Stabil',
hitTotal: '{{count}} kena',
},
phases: {
betting: 'Taruhan',
locked: TEXT_LOCKED,
settled: TEXT_SETTLED,
},
roundBettingStart: {
title: 'Pusingan {{roundId}}',
action: 'Mula Bertaruh',
},
actions: {
unifiedBetHint: 'Taruhan seragam',
totalBet: 'Jumlah taruhan',
canBet: 'Boleh taruhan',
yes: TEXT_YES,
no: TEXT_NO,
quickBet: 'Taruhan cepat 08',
clearPending: 'Kosongkan belum sah',
autoModeDemo: 'Demo mod auto',
stopAuto: 'Henti auto',
},
modals: {
login: {
title: TEXT_LOGIN,
},
register: {
title: TEXT_REGISTER,
},
notice: {
title: 'Notis Acara',
content:
'Bahagian ini akan memuatkan kandungan notis acara sebenar, bahan visual, dan mesej boleh skrol yang lebih panjang. Versi semasa memfokuskan sambungan modal pelbagai bahasa.',
check: TEXT_VIEW,
},
entryNotice: {
title: 'Notis Laman',
subtitle:
'Sila baca notis berikut dan sahkan sebelum memasuki permainan.',
loading: 'Memuatkan notis...',
loadFailed: 'Gagal memuatkan notis. Sila cuba lagi.',
retry: 'Muat semula',
agreement: 'Saya telah membaca dan bersetuju.',
enterGame: 'Masuk Permainan',
},
rules: {
title: 'Peraturan Permainan',
content:
'1. Permainan Asas\n1) Selepas setiap pusingan bermula, pemain boleh memilih satu atau beberapa nombor pada papan untuk membuat taruhan.\n2) Selepas taruhan ditutup, sistem memasuki fasa cabutan dan menyelesaikan ganjaran berdasarkan keputusan pusingan.\n3) Tahap cip yang berbeza mewakili jumlah taruhan yang berbeza, tertakluk kepada had meja dan konfigurasi semasa.\n\n2. Nota Taruhan\n1) Taruhan hanya boleh dihantar semasa fasa taruhan.\n2) Sebelum mengesahkan, sila semak nombor yang dipilih, jumlah cip, dan jumlah taruhan keseluruhan.\n3) Jika baki tidak mencukupi, pusingan tidak lagi sah, atau taruhan telah ditutup, permintaan akan ditolak.\n\n3. Cabutan dan Penyelesaian\n1) Keputusan cabutan akhir yang dipaparkan sistem ialah keputusan yang sah.\n2) Peraturan kena, odds, bayaran, dan prestasi streak diselesaikan secara masa nyata mengikut konfigurasi bilik semasa.\n3) Jika berlaku gangguan rangkaian, sila rujuk data rasmi selepas penyegerakan semula.\n\n4. Nota Tambahan\n1) Sila urus masa permainan anda dengan bertanggungjawab.\n2) Sebarang tingkah laku tidak normal untuk mengganggu sistem, mengeksploitasi ganjaran, atau memintas kawalan risiko adalah dilarang sama sekali.\n3) Platform berhak menyemak pesanan, bayaran, dan status akaun dalam keadaan khas.',
confirm: 'Saya Faham',
},
procedures: {
title: 'Tambah Nilai / Pengeluaran',
contentPlaceholder: 'Pilih tindakan yang ingin anda teruskan',
withdraw: 'Keluarkan',
topup: 'Tambah Nilai',
},
autoSetting: {
title: TEXT_AUTO_HOSTING,
startAutoSpin: 'Mula Putaran Auto',
rows: {
stopIfBalanceLowerThan: 'Henti jika baki lebih rendah daripada',
stopIfSingleWinExceeds: 'Henti jika kemenangan tunggal melebihi',
stopOnAnyJackpot: 'Henti pada sebarang jackpot',
},
},
userInfo: {
title: 'Maklumat Pengguna',
tabs: {
profile: 'Profil',
financeRecords: 'Rekod Tambah Nilai / Pengeluaran',
walletRecords: TEXT_WALLET_RECORDS,
message: TEXT_SITE_MESSAGES,
},
profile: {
name: 'Nama',
tel: 'Telefon',
registeredAt: 'Tarikh daftar',
copyInviteLink: 'Salin pautan jemputan',
logout: 'Log Keluar',
loggingOut: 'Sedang log keluar...',
signature:
'Tandatangan saya unik seperti personaliti saya. Bahagian ini akan memaparkan ringkasan profil sebenar kemudian.',
},
message: {
title: TEXT_SITE_MESSAGES,
back: 'Kembali',
loading: 'Memuatkan mesej...',
loadFailed: 'Gagal memuatkan mesej. Sila cuba lagi kemudian.',
empty: 'Belum ada mesej',
read: 'Sudah dibaca',
unread: 'Belum dibaca',
eventBonus:
'[Acara Bonus Tambah Nilai] Dari 1 Oktober hingga 7 Oktober 2026, tuntut ganjaran rebat anda...',
check: TEXT_VIEW,
deleteRecords: 'Padam rekod',
},
financeRecords: {
deposit: 'Rekod Tambah Nilai',
withdraw: 'Rekod Pengeluaran',
orderNo: 'No. Pesanan',
amount: 'Jumlah',
bonusAmount: 'Jumlah Bonus',
loading: 'Memuatkan rekod...',
loadFailed: 'Gagal memuatkan rekod. Sila cuba lagi kemudian.',
empty: 'Belum ada rekod',
page: TEXT_PAGE_INDICATOR,
previous: TEXT_PREV_PAGE,
next: TEXT_NEXT_PAGE,
},
walletRecords: {
amount: 'Jumlah',
balanceAfter: 'Selepas',
balanceBefore: 'Sebelum',
empty: 'Belum ada rekod dompet',
loadFailed: 'Gagal memuatkan rekod dompet. Sila cuba lagi kemudian.',
loading: 'Memuatkan rekod dompet...',
next: TEXT_NEXT_PAGE,
page: TEXT_PAGE_INDICATOR,
previous: TEXT_PREV_PAGE,
remark: 'Catatan',
time: TEXT_TIME,
type: TEXT_WALLET_RECORDS,
},
},
withdrawTopup: {
applyWithdraw: 'Mohon Pengeluaran',
applyTopup: 'Mohon Tambah Nilai',
},
},
autoSpin: {
eyebrow: 'Putaran auto',
title: 'Putaran auto sedang berjalan',
description:
'Mod auto akan menutup papan sambil mengekalkan fokus sel sasaran dan kemajuan.',
runningRounds: 'Putaran auto berjalan, {{count}} pusingan selesai',
trailingLabel: 'Input manual dikunci',
},
footer: {
implementationTitle: 'Pelaksanaan semasa',
implementationSubtitle:
'Iterasi ini mengutamakan shell dwi-peranti, model dikongsi, dan sambungan logik perniagaan.',
implementationBody:
'Langkah seterusnya ialah API sebenar, WebSocket, UI store penuh, dan state machine kitaran pusingan.',
limitsTitle: 'Had meja',
limitsSubtitle: 'Diambil daripada data lobi semasa',
minBet: 'Taruhan minimum',
maxBet: 'Taruhan maksimum',
},
},
commonUi: {
dialog: {
close: 'Tutup notifikasi',
confirm: 'OK',
no: TEXT_NO,
yes: TEXT_YES,
},
modal: {
close: 'Tutup modal',
defaultAriaLabel: 'Modal',
},
toast: {
lobbyInitFailed: 'Gagal memuatkan lobi permainan',
loginRequired: 'Sila log masuk sebelum memasuki permainan',
loginSuccess: 'Log masuk berjaya',
logoutSuccess: 'Telah log keluar',
logoutLocalOnly:
'Permintaan log keluar gagal. Sesi tempatan telah dikosongkan.',
registerSuccess: 'Pendaftaran berjaya',
inviteLinkCopied: 'Pautan jemputan telah disalin',
inviteLinkCopyFailed:
'Gagal menyalin pautan jemputan. Sila salin secara manual.',
insufficientBalance: 'Baki tidak mencukupi. Sila laraskan taruhan.',
betLimitExceeded: TEXT_BET_LIMIT_EXCEEDED,
betUnavailable: 'Taruhan tidak tersedia untuk pusingan ini',
betPlaced: 'Taruhan berjaya dihantar',
noRecentSuccessfulBet:
'Tiada rekod taruhan berjaya untuk pusingan sebelumnya',
repeatSelectionsRestored:
'Pilihan dari pusingan berjaya terakhir telah dipulihkan',
betRejected: 'Taruhan tidak diterima',
betPlaceFailed: 'Gagal menghantar taruhan. Sila cuba lagi.',
selectNumbersBeforeAutoHosting: 'Sila pilih nombor terlebih dahulu',
autoHostingStarted: 'Putaran auto bermula',
autoHostingStopped: 'Putaran auto dihentikan',
autoHostingStoppedBalance:
'Syarat baki dicapai. Putaran auto telah dihentikan.',
autoHostingStoppedBetLimit:
'Melebihi had taruhan tunggal. Putaran auto telah dihentikan.',
autoHostingStoppedWin:
'Syarat kemenangan tunggal dicapai. Putaran auto telah dihentikan.',
autoHostingStoppedJackpot:
'Jackpot dicapai. Putaran auto telah dihentikan.',
autoHostingSubmitFailed:
'Taruhan putaran auto gagal. Putaran auto telah dihentikan.',
},
},
auth: {
common: {
arrowIconAlt: 'Anak panah',
actions: {
submitting: TEXT_SUBMITTING,
},
passwordVisibility: {
hide: 'Sembunyikan kata laluan',
show: 'Tunjukkan kata laluan',
},
},
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 akaun',
forgotPassword: 'Lupa kata laluan',
},
errors: {
submitFailed: 'Log masuk gagal. Sila cuba lagi kemudian.',
invalidCredentials: 'Akaun atau kata laluan tidak betul.',
},
},
register: {
actions: {
submit: TEXT_REGISTER,
},
fields: {
mobile: {
label: TEXT_MOBILE_LABEL,
placeholder: TEXT_MOBILE_PLACEHOLDER,
},
captcha: {
label: 'Kod:',
placeholder: 'Masukkan kod pengesahan',
},
password: {
label: TEXT_PASSWORD_LABEL,
placeholder: TEXT_PASSWORD_PLACEHOLDER,
},
confirmPassword: {
label: 'Sahkan Kata Laluan:',
placeholder: 'Masukkan semula kata laluan',
},
inviteCode: {
label: 'Kod Jemputan:',
placeholder: 'Masukkan kod jemputan',
},
},
footer: {
alreadyHaveAccount: 'Sudah ada akaun',
needHelp: 'Perlukan bantuan',
},
errors: {
submitFailed: 'Pendaftaran gagal. Sila cuba lagi kemudian.',
unauthorized: 'Pendaftaran tidak dibenarkan. Sila cuba lagi kemudian.',
},
sms: {
countdown: '{{seconds}}s',
errors: {
submitFailed: 'Gagal menghantar kod. Sila cuba lagi kemudian.',
},
send: 'Dapatkan kod',
sending: TEXT_SUBMITTING,
success: 'Kod pengesahan telah dihantar.',
},
},
validation: {
captcha: {
required: 'Sila masukkan kod pengesahan.',
},
username: {
required: 'Sila masukkan nombor telefon anda.',
invalidPhone: 'Sila masukkan nombor telefon yang sah.',
},
password: {
min: 'Kata laluan mesti sekurang-kurangnya 6 aksara.',
max: 'Kata laluan mesti maksimum 32 aksara.',
},
inviteCode: {
required: 'Sila masukkan kod jemputan.',
max: 'Kod jemputan mesti maksimum 32 aksara.',
},
confirmPassword: {
mismatch: 'Kedua-dua kata laluan tidak sepadan.',
},
},
errors: {
requestFailed: 'Permintaan gagal. Sila cuba lagi kemudian.',
authTokenConfigMissing:
'Konfigurasi pengesahan tiada. Sila hubungi sokongan.',
timeout: 'Permintaan tamat masa. Sila cuba lagi kemudian.',
serviceUnavailable:
'Perkhidmatan tidak tersedia buat sementara waktu. Sila cuba lagi kemudian.',
},
},
gameDesktop: {
header: {
systemTime: 'Masa Sistem',
rules: 'Peraturan',
message: TEXT_SITE_MESSAGES,
bgm: 'BGM',
id: 'ID',
fullscreen: 'Skrin',
login: TEXT_LOGIN,
register: TEXT_REGISTER,
},
control: {
trend: 'Trend',
map: 'Peta',
selected: 'Dipilih',
totalBet: 'Jumlah Taruhan',
confirm: TEXT_CONFIRM,
selectNumbers: 'Pilih Nombor',
insufficientBalance: 'Baki Tidak Mencukupi',
betLimitExceeded: 'Melebihi Had',
submitting: TEXT_SUBMITTING,
actions: {
clear: 'Kosongkan',
repeat: 'Ulang',
'auto-spin': TEXT_AUTO_HOSTING,
},
},
status: {
odds: 'Peluang',
streak: 'Streak',
limit: 'Had',
roundId: 'Pusingan',
phase: {
betting: {
label: 'Buka',
description: '(Menerima Taruhan)',
},
locked: {
label: TEXT_LOCKED,
description: '(Taruhan Ditutup)',
},
revealing: {
label: 'Cabutan',
description: '(Mendedahkan Hasil)',
},
settled: {
label: 'Cabutan',
description: '(Pusingan Tamat)',
},
waiting: {
label: 'Menunggu',
description: '(Menunggu Pusingan Seterusnya)',
},
},
},
title: {
announcement: 'Pengumuman',
},
animal: {
insufficientBalanceRecharge: 'Baki tidak mencukupi, sila tambah nilai',
betLimitExceeded: TEXT_BET_LIMIT_EXCEEDED,
loading: 'Memuatkan',
selectionLimitReached: 'Melebihi pilihan aksara yang dibenarkan',
tapToEnter: 'Ketik Untuk Masuk',
getStart: 'Mula',
noBet: 'Belum Bertaruh',
},
history: {
title: 'Sejarah',
pending: 'PENDING',
win: 'WIN',
lost: 'LOST',
orderNo: 'No. Pesanan',
roundId: 'ID Pusingan',
numbers: 'Nombor Pertaruhan',
createdAt: TEXT_TIME,
settledAt: 'Masa Selesai',
totalPoolAmount: 'Jumlah Pertaruhan',
winningResult: 'Keputusan Menang',
payout: 'Jumlah Menang',
empty: 'Belum ada sejarah',
end: 'Tiada lagi rekod',
loading: TEXT_LOADING,
settled: TEXT_SETTLED,
},
periodHistory: {
title: 'Sejarah Keputusan Cabutan',
close: 'Tutup sejarah keputusan cabutan',
empty: 'Belum ada keputusan cabutan',
failed: 'Gagal memuatkan keputusan cabutan',
loading: TEXT_LOADING,
retry: 'Cuba lagi',
},
topup: {
title: 'Konfigurasi Tambah Nilai',
platformCoinLabel: 'Syiling Platform',
currencyLabel: TEXT_CURRENCY_TYPE,
channelLabel: TEXT_PAYMENT_CHANNEL,
rateHint:
'Kadar pertukaran hanya untuk rujukan. Jumlah akhir tertakluk kepada kadar semasa tambah nilai.',
tier: {
bonus: 'Bonus',
coins: 'Syiling Diterima',
createSuccess: 'Pesanan tambah nilai berjaya dicipta',
empty: 'Tiada tier tambah nilai',
failed: 'Gagal memuatkan tier tambah nilai',
loading: 'Memuatkan tier tambah nilai...',
missingPayUrl: 'Pautan pembayaran tiada. Sila cuba lagi kemudian.',
openPayUrlFailed:
'Gagal membuka halaman pembayaran. Semak tetapan popup pelayar anda.',
source: 'Endpoint tier tambah nilai',
title: 'Tier Tambah Nilai',
},
preview: {
title: 'Pratonton Tambah Nilai',
depositTitle: 'Pilih mata wang tambah nilai dan saluran pembayaran',
depositRate: 'Kadar Tambah Nilai ({{currency}})',
depositRateValue: '1 {{currency}} = {{coins}} {{platformCoinLabel}}',
amount: 'Contoh Kredit',
},
},
mobile: {
placeholder: 'Halaman mudah alih sedang dibina',
},
withdraw: {
availableBalance: 'Baki tersedia: {{amount}}',
currencySelection: 'Pilihan jenis mata wang',
selectCurrency: 'Pilih jenis mata wang',
referenceRateNotice:
'Kadar pertukaran hanya untuk rujukan. Jumlah akhir tertakluk kepada kadar semasa pengeluaran.',
eWallet: 'Dompet elektronik',
bank: 'Bank',
minimumAmount: 'Minimum {{currency}} {{amount}}',
processingTime: 'Masa pemprosesan',
arrivalTimeValue: 'Masuk dalam 30 saat',
notice: 'Perhatian',
feeNotice:
'Transaksi antara RM10 dan RM99.99 akan dikenakan yuran pengeluaran minimum RM 1.',
cancel: 'Batal',
confirm: TEXT_CONFIRM,
submitSuccess: 'Permohonan pengeluaran telah dihantar',
withdrawal: 'Pengeluaran',
fields: {
diamondAmount: 'Jumlah Berlian Pengeluaran',
currencyType: TEXT_CURRENCY_TYPE,
paymentChannel: TEXT_PAYMENT_CHANNEL,
bankCode: 'Kod Bank',
cardHolderName: 'Nama Pemegang Kad',
bankAccountNumber: 'Nombor Akaun Bank',
receiverEmail: 'E-mel Penerima',
receiverPhone: 'Telefon Penerima',
},
placeholders: {
bankCode: 'Pilih kod bank',
cardHolderName: 'Masukkan nama pemegang kad',
bankAccountNumber: 'Masukkan nombor akaun bank',
receiverEmail: 'Masukkan e-mel penerima',
receiverPhone: 'Masukkan nombor telefon penerima',
},
errors: {
amountRequired: 'Sila masukkan jumlah berlian pengeluaran.',
amountBelowMinimum:
'Jumlah pengeluaran tidak boleh kurang daripada minimum ({{currency}} {{amount}} / {{diamonds}} berlian).',
bankCodeRequired: 'Sila pilih kod bank.',
bankCodeUnavailable: 'Tiada kod bank tersedia buat masa ini.',
cardHolderNameRequired: 'Sila masukkan nama pemegang kad.',
bankAccountRequired: 'Sila masukkan nombor akaun bank.',
paymentChannelRequired: 'Sila pilih saluran pembayaran.',
paymentChannelUnavailable:
'Tiada saluran pembayaran tersedia buat masa ini.',
receiverEmailInvalid: 'Sila masukkan alamat e-mel yang sah.',
receiverPhoneInvalid: 'Sila masukkan nombor telefon yang sah.',
amountExceedsBalance:
'Jumlah pengeluaran tidak boleh melebihi baki semasa.',
},
success: {
orderNo: 'No. pesanan: {{orderNo}}',
actualArrivalCoin: 'Berlian masuk sebenar: {{amount}}',
feeCoin: 'Berlian yuran: {{amount}}',
reviewRequired: 'Semakan risiko diperlukan: {{value}}',
},
preview: {
title: 'Pratonton Pertukaran',
diamondAmount: 'Jumlah Berlian',
exchangeRate: 'Kadar Pertukaran ({{currency}})',
exchangeRateValue: '{{coins}} {{platformCoinLabel}} = 1 {{currency}}',
convertible: 'Boleh Tukar {{currency}}',
fixedExchangeDiamondAmount: 'Jumlah Berlian Tukaran Tetap',
},
},
},
} as const