重构 seed 为 WC2026 72 场小组赛与 48 强优胜盘;新增 production 模式仅保留 admin 与赛事示例;提供 prod-init-db 全量重置脚本;管理端 i18n 分包与赛事归档能力。 Co-authored-by: Cursor <cursoragent@cursor.com>
909 lines
48 KiB
TypeScript
909 lines
48 KiB
TypeScript
/** 管理后台列表 / 弹窗 — Bahasa Melayu */
|
||
export const adminPagesMs: Record<string, string> = {
|
||
'common.detail': 'Butiran',
|
||
'common.create': 'Cipta',
|
||
'common.create_btn': '+ Baharu',
|
||
'common.save': 'Simpan',
|
||
'common.close': 'Tutup',
|
||
'common.import': 'Import',
|
||
'common.publish': 'Terbitkan',
|
||
'common.topup': 'Tambah baki',
|
||
'common.adjust_credit': 'Laraskan kredit',
|
||
'common.freeze': 'Bekukan',
|
||
'common.unfreeze': 'Nyahbeku',
|
||
'common.settle': 'Selesaikan',
|
||
'common.resettle': 'Selesaikan semula',
|
||
'common.close_betting': 'Tutup pertaruhan',
|
||
'common.reopen_betting': 'Buka semula pertaruhan',
|
||
'common.never_login': 'Belum pernah log masuk',
|
||
'common.optional': 'Pilihan',
|
||
'common.to': 'Hingga',
|
||
'common.module': 'Modul',
|
||
'common.col_id': 'ID',
|
||
'common.times': 'kali',
|
||
'common.bets_count_unit': 'pertaruhan',
|
||
|
||
'user.create_btn': '+ Pemain baharu',
|
||
'user.filter.username_ph': 'Nama pengguna',
|
||
'user.filter.agent': 'Ejen',
|
||
'user.filter.agent_ph': 'Semua',
|
||
'user.col.username': 'Nama pengguna',
|
||
'user.col.agent': 'Ejen',
|
||
'user.col.invite_code': 'Kod jemputan',
|
||
'user.col.balance': 'Tersedia / Dibekukan',
|
||
'user.col.bets': 'Pertaruhan',
|
||
'user.col.stake_payout': 'Stake / Bayaran',
|
||
'user.col.last_login': 'Log masuk terakhir',
|
||
'user.col.created': 'Daftar',
|
||
'user.status.ACTIVE': 'Aktif',
|
||
'user.status.SUSPENDED': 'Digantung',
|
||
'user.dialog.create': 'Pemain baharu',
|
||
'user.dialog.edit': 'Edit pemain',
|
||
'user.dialog.deposit': 'Tambah baki pemain',
|
||
'user.dialog.detail': 'Butiran pemain',
|
||
'user.field.password': 'Kata laluan',
|
||
'user.field.confirm_password': 'Sahkan kata laluan',
|
||
'user.field.initial_balance': 'Baki permulaan',
|
||
'user.field.deposit_remark': 'Nota tambah baki',
|
||
'user.field.amount': 'Jumlah',
|
||
'user.field.remark': 'Nota',
|
||
'user.field.account_status': 'Status akaun',
|
||
'user.field.available': 'Baki tersedia',
|
||
'user.field.frozen_balance': 'Baki dibekukan',
|
||
'user.field.bets_summary': 'Pertaruhan / stake',
|
||
'user.field.total_payout': 'Jumlah bayaran',
|
||
'user.field.login_fail': 'Log masuk gagal',
|
||
'user.field.phone': 'Telefon',
|
||
'user.field.email': 'E-mel',
|
||
'user.field.allow_password_change': 'Benarkan pemain tukar kata laluan',
|
||
'user.field.allow_username_change': 'Benarkan pemain tukar nama akaun',
|
||
'user.field.view_password': 'Kata laluan log masuk',
|
||
'user.field.reset_password': 'Set semula kata laluan',
|
||
'user.password_not_stored': 'Tiada rekod (pemain telah ubah sendiri)',
|
||
'user.btn.show_password': 'Lihat',
|
||
'user.btn.hide_password': 'Sembunyi',
|
||
'user.ph.reset_password': 'Biarkan kosong untuk kekalkan; nilai baharu boleh dilihat',
|
||
'user.ph.reset_password_short': 'Biarkan kosong',
|
||
'user.page_settings': 'Tetapan global',
|
||
'user.global_settings': 'Kata laluan & akaun (global)',
|
||
'user.global_settings_hint': 'Kawal sama ada semua pemain boleh ubah kata laluan/nama akaun dalam app',
|
||
'user.reset_database': 'Set semula pangkalan data',
|
||
'user.reset_database_hint': 'Padam semua data perniagaan dan pulihkan data demo awal. Tidak boleh dibatalkan.',
|
||
'user.reset_database_confirm_label': 'Taip RESET untuk sahkan',
|
||
'user.reset_database_confirm_ph': 'RESET',
|
||
'user.reset_database_btn': 'Set semula ke data awal',
|
||
'user.reset_database_disabled_prod': 'Dilumpuhkan dalam produksi melainkan ALLOW_DB_RESET=true',
|
||
'user.reset_database_success': 'Pangkalan data diset semula. Sila log masuk semula.',
|
||
'user.reset_database_accounts': 'Akaun demo',
|
||
'user.section.basic_info': 'Maklumat asas',
|
||
'user.section.affiliation': 'Affiliasi',
|
||
'user.section.contact': 'Hubungan',
|
||
'user.section.account_overview': 'Gambaran akaun',
|
||
'user.section.password_mgmt': 'Pengurusan kata laluan',
|
||
'user.field.current_password': 'Kata laluan semasa',
|
||
'user.msg.created_with_password': 'Pemain dicipta. Kata laluan: {password}',
|
||
'user.msg.password_saved': 'Kata laluan dikemas kini: {password}',
|
||
'user.hint.password_reset_to_view': 'Tiada rekod. Isi Set semula kata laluan di bawah dan simpan untuk lihat di sini.',
|
||
'user.ph.username_unique': 'Nama log masuk unik',
|
||
'user.ph.username_player': 'Huruf dan digit, 3–32 aksara',
|
||
'user.hint.username_player': 'Hanya huruf dan digit Inggeris; tiada Cina atau simbol khas',
|
||
'user.ph.no_agent': 'Tiada (terus platform)',
|
||
'user.hint.no_agent': 'Biarkan kosong untuk pemain diurus platform',
|
||
'user.hint.platform_direct_player': 'Pemain ini di bawah platform (terus admin).',
|
||
'user.hint.initial_balance': 'Auto tambah baki semasa cipta; 0 = tiada bonus',
|
||
'user.hint.deposit_remark': 'Ditulis ke lejar jika baki permulaan > 0',
|
||
'user.hint.freeze_in_list': 'Beku/nyahbeku dari lajur tindakan senarai',
|
||
'user.hint.agent_change': 'Kosong = terus platform; perubahan dikira semula kredit ejen',
|
||
'user.hint.agent_readonly': 'Ejen induk tidak boleh diubah selepas penciptaan',
|
||
'user.hint.allow_password_change': 'Matikan: semua pemain tidak boleh ubah kata laluan',
|
||
'user.hint.allow_username_change': 'Hidupkan: semua pemain boleh ubah nama log masuk',
|
||
'user.hint.view_password': 'Hanya kata laluan cipta/set semula admin; dibersihkan jika pemain ubah sendiri',
|
||
'user.hint.reset_password': 'Berkuat kuasa serta-merta dan kemas kini kata laluan boleh lihat',
|
||
'user.btn.create': 'Cipta',
|
||
'user.btn.save_profile': 'Simpan',
|
||
'user.btn.confirm_deposit': 'Sahkan tambah baki',
|
||
'user.deposit_remark_default': 'Tambah baki admin',
|
||
'user.withdraw_remark_default': 'Pengeluaran admin',
|
||
'user.field.account_type': 'Jenis akaun',
|
||
'user.type.player': 'Pemain',
|
||
'user.type.tier1_agent': 'Ejen peringkat 1',
|
||
'user.type.sub_agent': 'Ejen peringkat 2',
|
||
'user.hint.account_type': 'Ejen guna had kredit; pemain boleh di bawah ejen',
|
||
|
||
'agent.create_btn': '+ Ejen peringkat 1 baharu',
|
||
'agent.create_sub_btn': '+ Ejen peringkat 2 baharu',
|
||
'agent.create_sub': 'Cipta ejen peringkat 2',
|
||
'agent.create_child_btn': '+ Sub-ejen baharu',
|
||
'agent.dialog.create_child_agent': 'Sub-ejen baharu',
|
||
'agent.create_level_agent': 'Cipta ejen peringkat {level}',
|
||
'agent.create_level_agent_btn': '+ Ejen peringkat {level} baharu',
|
||
'agent.level_name': 'Ejen peringkat {level}',
|
||
'agent.level_tab': 'Ejen peringkat {level}',
|
||
'agent.dialog.create_level_agent': 'Ejen peringkat {level} baharu',
|
||
'agent.hint.select_parent_for_level': 'Pilih ejen peringkat {level} sebagai induk',
|
||
'agent.err.parent_level_mismatch': 'Peringkat induk tidak sah untuk cipta ejen peringkat {level}',
|
||
'agent.hint.creating_under_agent': 'Cipta akaun di bawah ejen ini',
|
||
'agent.filter.username_ph': 'Nama pengguna',
|
||
'agent_mgr.tab.players': 'Pemain',
|
||
'agent_mgr.tab.agents': 'Ejen',
|
||
'agent.col.level': 'Peringkat',
|
||
'agent.col.credit': 'Had / Digunakan / Tersedia',
|
||
'agent.col.direct_players': 'Pemain terus',
|
||
'agent.direct_players_title': 'Pemain terus · {name}',
|
||
'agent.platform_row_name': 'Platform',
|
||
'agent.col.sub_agents': 'Sub-ejen',
|
||
'agent.col.cashback': 'Kadar rebat',
|
||
'agent.col.phone': 'Telefon',
|
||
'agent.col.created': 'Dicipta',
|
||
'agent.dialog.create': 'Ejen peringkat 1 baharu',
|
||
'agent.dialog.edit': 'Edit ejen',
|
||
'agent.dialog.credit': 'Laraskan had kredit',
|
||
'agent.field.agent_id': 'ID ejen',
|
||
'agent.dialog.detail': 'Butiran ejen',
|
||
'agent.field.credit_limit': 'Had kredit',
|
||
'agent.field.cashback_rate': 'Kadar rebat',
|
||
'agent.field.adjust_amount': 'Pelarasan',
|
||
'agent.field.used_credit': 'Kredit digunakan',
|
||
'agent.field.available_credit': 'Kredit tersedia',
|
||
'agent.field.player_liability': 'Liabiliti pemain',
|
||
'agent.field.sub_agent_exposure': 'Pendedahan sub-ejen',
|
||
'agent.hint.credit_limit': 'Had maksimum tambah baki untuk pemain terus',
|
||
'agent.hint.cashback_example': 'cth. 1 bermaksud 1%',
|
||
'agent.hint.credit_adjust': 'Positif menambah, negatif mengurangkan',
|
||
'agent.hint.credit_remark': 'Pilihan, ditulis ke lejar kredit',
|
||
'agent.section.credit_log': 'Perubahan kredit terkini',
|
||
'agent.credit.increase': 'Tambah',
|
||
'agent.credit.decrease': 'Kurang',
|
||
'agent.col.credit_type': 'Jenis',
|
||
'agent.col.credit_change': 'Perubahan',
|
||
'agent.col.credit_before': 'Sebelum',
|
||
'agent.col.credit_after': 'Selepas',
|
||
'agent.credit_tx.filter_agent_ph': 'Nama pengguna ejen',
|
||
'agent.credit_tx.filter_agent_id': 'ID ejen',
|
||
'agent.credit_tx.filter_agent_id_ph': 'ID pengguna',
|
||
'agent.credit_tx.col.operator': 'Operator',
|
||
'agent.credit_tx.view_all': 'Lihat semua lejar kredit',
|
||
'finance.tab.credit': 'Lejar kredit',
|
||
'finance.tab.transfer': 'Lejar pemindahan',
|
||
'finance.tab.wallet': 'Lejar dompet',
|
||
'finance.filter.type_category': 'Jenis transaksi',
|
||
'finance.filter.type_category_all': 'Semua',
|
||
'finance.filter.type_category_deposit': 'Pemindahan',
|
||
'finance.filter.type_category_bet': 'Pertaruhan',
|
||
'finance.filter.type_category_cashback': 'Rebat',
|
||
'finance.col.frozen_before': 'Beku sebelum',
|
||
'finance.col.frozen_after': 'Beku selepas',
|
||
'finance.col.reference': 'Pertaruhan berkaitan',
|
||
'finance.tx.adjust': 'Pelarasan baki',
|
||
'finance.tx.bet_freeze': 'Beku pertaruhan',
|
||
'finance.tx.bet_deduct': 'Potong pertaruhan',
|
||
'finance.tx.bet_win': 'Bayaran pertaruhan',
|
||
'finance.tx.bet_lose': 'Penyelesaian pertaruhan',
|
||
'finance.tx.bet_push': 'Refund seri',
|
||
'finance.tx.bet_refund': 'Refund pertaruhan',
|
||
'finance.tx.bet_void': 'Pertaruhan batal',
|
||
'finance.tx.cashback': 'Rebat',
|
||
'finance.tx.resettle': 'Penyelesaian semula',
|
||
'user.action.view_wallet_ledger': 'Lihat lejar dompet',
|
||
'user.action.ledger_short': 'Lejar',
|
||
'user.wallet_ledger_dialog_title': 'Lejar dompet — {name}',
|
||
'agent.hierarchy.settings_title': 'Hierarki ejen',
|
||
'agent.hierarchy.settings_hint': '0 bermaksud tanpa had. Ejen di had atas tidak boleh cipta sub-ejen.',
|
||
'agent.hierarchy.max_level': 'Tahap ejen maksimum',
|
||
'agent.hierarchy.default_sub_credit_ratio': 'Nisbah kredit sub-ejen lalai',
|
||
'agent.hierarchy.create_credit_default_hint': 'Lalai {ratio}% ({amount}), tidak melebihi kredit induk; boleh diselaraskan',
|
||
'agent.hierarchy.create_credit_quick_hint': 'Kredit induk tersedia {amount} — klik nisbah untuk isi',
|
||
'agent.hierarchy.create_level_hint': 'Akan dicipta sebagai ejen peringkat {n}',
|
||
'agent.field.parent_agent': 'Ejen induk',
|
||
'agent.col.parent_chain': 'Rantaian induk',
|
||
'role.agent_level': 'Ejen peringkat {n}',
|
||
'finance.filter.date_range': 'Julat tarikh',
|
||
'finance.filter.player_ph': 'Nama pengguna pemain',
|
||
'finance.filter.parent_agent_ph': 'Nama/ID ejen induk',
|
||
'finance.filter.operator_ph': 'Nama pengguna operator',
|
||
'finance.col.player': 'Pemain',
|
||
'finance.col.parent_agent': 'Ejen induk',
|
||
'finance.col.tx_id': 'ID transaksi',
|
||
'finance.col.balance_change': 'Perubahan baki',
|
||
'finance.col.balance_before': 'Baki sebelum',
|
||
'finance.col.balance_after': 'Baki selepas',
|
||
'finance.col.tx_type': 'Jenis',
|
||
'finance.col.deposit_method': 'Kaedah deposit',
|
||
'finance.deposit_method.manual_admin': 'Deposit manual admin',
|
||
'finance.deposit_method.manual_agent': 'Deposit manual ejen',
|
||
'finance.deposit_method.manual': 'Deposit manual',
|
||
'finance.tx.deposit': 'Deposit',
|
||
'finance.tx.admin_deposit': 'Tambah baki admin',
|
||
'finance.tx.agent_deposit': 'Tambah baki ejen',
|
||
'finance.tx.initial_deposit': 'Bonus pembukaan',
|
||
'finance.tx.player_deposit': 'Deposit sendiri',
|
||
'finance.tx.withdraw': 'Pengeluaran',
|
||
'finance.tx.admin_withdraw': 'Pengeluaran admin',
|
||
'finance.tx.agent_withdraw': 'Pengeluaran ejen',
|
||
'finance.tx.request_id': 'ID permintaan',
|
||
'finance.remark.agent_deposit': 'Deposit ejen',
|
||
'finance.remark.agent_withdraw': 'Pengeluaran ejen',
|
||
'finance.remark.admin_deposit': 'Deposit admin',
|
||
'finance.remark.admin_withdraw': 'Pengeluaran admin',
|
||
'finance.remark.initial_balance': 'Baki permulaan akaun',
|
||
'agent.col.no_records': 'Tiada rekod',
|
||
'agent.btn.confirm_adjust': 'Sahkan',
|
||
'agent.field.select_user': 'Pilih pengguna',
|
||
'agent.ph.select_user': 'Cari nama pengguna pemain',
|
||
'agent.hint.select_user': 'Pilih akaun pemain sedia ada untuk naik taraf ke ejen peringkat 1',
|
||
|
||
'match.create_btn': '+ Liga baharu',
|
||
'match.create_fixture_btn': '+ Perlawanan baharu',
|
||
'match.btn.markets': 'Pasaran',
|
||
'match.filter.keyword_ph': 'Nama kejohanan / kod pasukan',
|
||
'match.col.league': 'Kejohanan',
|
||
'match.col.league_en': 'Liga (EN)',
|
||
'match.col.fixture_count': 'Perlawanan',
|
||
'match.col.bet_count': 'Pertaruhan',
|
||
'match.col.total_stake': 'Jumlah stake',
|
||
'match.col.pending_bets': 'Menunggu',
|
||
'match.col.league_code': 'Kod',
|
||
'match.col.matchup': 'Perlawanan',
|
||
'match.col.kickoff': 'Masa mula',
|
||
'match.dialog.create_league': 'Kejohanan baharu',
|
||
'match.dialog.edit_league': 'Edit kejohanan',
|
||
'match.dialog.create_fixture': 'Perlawanan tunggal baharu',
|
||
'match.dialog.create': 'Perlawanan tunggal baharu',
|
||
'match.dialog.edit': 'Edit perlawanan tunggal',
|
||
'match.dialog.import': 'Import perlawanan',
|
||
'match.field.league_en': 'Liga (EN)',
|
||
'match.field.league_zh': 'Liga (ZH)',
|
||
'match.field.league_ms': 'Liga (MS)',
|
||
'match.field.league_logo': 'Logo kejohanan',
|
||
'match.field.lang_zh': 'ZH',
|
||
'match.field.lang_en': 'EN',
|
||
'match.field.lang_ms': 'MS',
|
||
'match.field.kickoff': 'Masa mula',
|
||
'match.field.home_team': 'Pasukan tuan rumah',
|
||
'match.field.away_team': 'Pasukan pelawat',
|
||
'match.field.home_en': 'Tuan rumah (EN)',
|
||
'match.field.home_zh': 'Tuan rumah (ZH)',
|
||
'match.field.home_ms': 'Tuan rumah (MS)',
|
||
'match.field.away_en': 'Pelawat (EN)',
|
||
'match.field.away_zh': 'Pelawat (ZH)',
|
||
'match.field.away_ms': 'Pelawat (MS)',
|
||
'match.field.featured': 'Pilihan utama',
|
||
'match.hint.create_draft': 'Disimpan sebagai draf; kembangkan kejohanan dan terbitkan setiap perlawanan tunggal.',
|
||
'match.hint.create_league': 'Kejohanan baharu tidak diterbitkan secara lalai; terbitkan untuk paparan pemain, kemudian kembangkan untuk tambah perlawanan.',
|
||
'league.status.PUBLISHED': 'Diterbitkan',
|
||
'league.status.UNPUBLISHED': 'Tidak diterbitkan',
|
||
'league.btn.unpublish': 'Nyahterbit',
|
||
'league.confirm_unpublish': 'Pemain tidak lagi melihat kejohanan ini; anda masih boleh edit dan terbitkan semula di admin. Teruskan?',
|
||
'msg.league_published': 'Kejohanan diterbitkan',
|
||
'msg.league_unpublished': 'Kejohanan dinyahterbit',
|
||
'match.btn.unpublish': 'Nyahterbit',
|
||
'match.confirm_unpublish': 'Perlawanan kembali ke draf: tersembunyi dari pemain dan tiada pertaruhan baharu; pertaruhan belum selesai kekal. Teruskan?',
|
||
'msg.match_unpublished': 'Perlawanan dinyahterbit',
|
||
'match.hint.edit_published': 'Diterbitkan: edit masa mula, pilihan utama, nama paparan; tertutup/selesai dikunci.',
|
||
'match.expand_league_hint': 'Kembangkan liga untuk urus perlawanan; odds juara di tab Odds juara.',
|
||
'match.expand_outright_hint': 'Kembangkan liga untuk sunting odds juara; pasukan perlawanan disegerakkan auto, boleh tambah pasukan belum dijadualkan.',
|
||
'outright.odds_only_hint': 'Pasukan daripada perlawanan disegerakkan auto; boleh tambah pasukan manual dan sunting odds di sini. Pasaran juara ikut terbitan liga — tiada langkah terbit berasingan.',
|
||
'outright.league_unpublished_hint': 'Liga belum diterbitkan. Tetapkan liga kepada Diterbitkan di halaman ini untuk membuka pertaruhan juara secara automatik.',
|
||
'outright.unsettled_fixtures_hint': '{n} perlawanan dalam liga ini masih belum diselesaikan. Selesaikan dahulu sebelum juara.',
|
||
'outright.btn.reopen': 'Buka semula pertaruhan',
|
||
'outright.confirm_reopen': 'Membuka semula akan menerima pertaruhan juara baharu. Teruskan?',
|
||
'outright.fixture_sync_added': '{n} pasukan disegerakkan auto daripada perlawanan',
|
||
'outright.col.teams_from_fixtures': 'Pasukan (daripada perlawanan)',
|
||
'outright.col.teams_total': 'Pasukan odds juara',
|
||
'outright.empty_no_teams': 'Tiada pasukan — tambah perlawanan di Konfigurasi atau klik Tambah pasukan.',
|
||
'match.outright.setup': 'Sediakan',
|
||
'match.outright.section_hint': 'Pasaran juara untuk liga ini; perlawanan disenaraikan di bawah',
|
||
'match.expand_markets_hint': 'Klik Pasaran pada perlawanan tunggal untuk halaman pasaran berasingan.',
|
||
'match.no_fixtures': 'Tiada perlawanan tunggal di bawah kejohanan ini.',
|
||
'match.ph.league_ms': 'Piala Dunia 2027',
|
||
|
||
'bet.filter.keyword_ph': 'No. pertaruhan / nama pengguna',
|
||
'bet.filter.date_from': 'Tarikh pertaruhan dari',
|
||
'bet.filter.date_start_ph': 'Mula',
|
||
'bet.filter.date_end_ph': 'Tamat',
|
||
'bet.col.serial': 'No.',
|
||
'bet.col.bet_no': 'No. pertaruhan',
|
||
'bet.col.player': 'Pemain',
|
||
'bet.col.agent': 'Ejen',
|
||
'bet.col.selection': 'Pilihan',
|
||
'bet.col.content': 'Kandungan taruhan',
|
||
'bet.content.bet_counts': '{singles} tunggal · {parlays} parlay',
|
||
'bet.col.match': 'Perlawanan',
|
||
'bet.legs_more': '+{n} lagi…',
|
||
'bet.col.selection_count': 'Bil. pilihan',
|
||
'bet.col.stake': 'Stake',
|
||
'bet.col.odds': 'Odds',
|
||
'bet.col.payout': 'Bayaran',
|
||
'bet.col.placed_at': 'Masa pertaruhan',
|
||
'bet.col.cashbacked': 'Rebat dibayar',
|
||
'bet.dialog.detail': 'Butiran pertaruhan',
|
||
'bet.field.total_odds': 'Jumlah odds',
|
||
'bet.field.currency': 'Mata wang',
|
||
'bet.field.potential_win': 'Menang berpotensi',
|
||
'bet.field.actual_payout': 'Bayaran sebenar',
|
||
'bet.field.bet_status': 'Status pertaruhan',
|
||
'bet.field.settlement_status': 'Penyelesaian',
|
||
'bet.field.settled_at': 'Diselesaikan pada',
|
||
'bet.field.request_id': 'ID permintaan',
|
||
'bet.selections_title': 'Pilihan ({n})',
|
||
'bet.col.market': 'Pasaran',
|
||
'bet.col.period': 'Tempoh',
|
||
'bet.col.line': 'Garisan',
|
||
'bet.col.result': 'Keputusan',
|
||
|
||
'audit.module_ph': 'cth. USERS, AGENTS',
|
||
'audit.col.action': 'Tindakan',
|
||
'audit.col.module': 'Modul',
|
||
'audit.col.target_id': 'ID sasaran',
|
||
'audit.col.time': 'Masa',
|
||
'audit.action.CREATE_PLAYER': 'Cipta pemain',
|
||
'audit.action.UPDATE_PLAYER': 'Kemas kini pemain',
|
||
'audit.action.RESET_DATABASE': 'Set semula pangkalan data',
|
||
'audit.action.CREATE_AGENT': 'Cipta ejen',
|
||
'audit.action.UPDATE_AGENT': 'Kemas kini ejen',
|
||
'audit.action.UPDATE_PLAYER_ACCOUNT_SETTINGS': 'Kemas kini tetapan akaun pemain',
|
||
'audit.action.UPDATE_AGENT_SUSPEND_SETTINGS': 'Kemas kini tetapan penggantungan ejen',
|
||
'audit.action.UPDATE_BETTING_LIMITS': 'Kemas kini had pertaruhan',
|
||
'audit.action.CONFIRM_SETTLEMENT': 'Sahkan penyelesaian',
|
||
'audit.action.CONFIRM_RESETTLE': 'Sahkan penyelesaian semula',
|
||
'audit.action.CONFIRM_CASHBACK': 'Sahkan bayaran rebat',
|
||
'audit.action.CANCEL_CASHBACK': 'Batalkan kelompok rebat',
|
||
'audit.module.USERS': 'Pemain',
|
||
'audit.module.AGENTS': 'Ejen',
|
||
'audit.module.SYSTEM': 'Sistem',
|
||
'audit.module.SETTINGS': 'Tetapan',
|
||
'audit.module.SETTLEMENT': 'Penyelesaian',
|
||
'audit.module.CASHBACK': 'Rebat',
|
||
|
||
'cashback.start_date': 'Tarikh mula',
|
||
'cashback.end_date': 'Tarikh tamat',
|
||
'cashback.preview_btn': 'Pratonton',
|
||
'cashback.preview_title': 'Pratonton rebat',
|
||
'cashback.stat.players': 'Pemain',
|
||
'cashback.stat.total': 'Jumlah rebat',
|
||
'cashback.stat.lines': 'Baris butiran',
|
||
'cashback.stat.effective_stake': 'Jumlah stake berkesan',
|
||
'cashback.stat.bet_count': 'Bil. pertaruhan',
|
||
'cashback.stat.avg_rate': 'Kadar purata',
|
||
'cashback.batch_no': 'No. kelompok',
|
||
'cashback.history_title': 'Rekod rebat',
|
||
'cashback.history_empty': 'Tiada kelompok rebat',
|
||
'cashback.filter_status': 'Status',
|
||
'cashback.status.PREVIEW': 'Menunggu',
|
||
'cashback.status.CONFIRMED': 'Dibayar',
|
||
'cashback.col.period': 'Tempoh',
|
||
'cashback.col.status': 'Status',
|
||
'cashback.col.bet_count': 'Pertaruhan',
|
||
'cashback.col.created_at': 'Dicipta',
|
||
'cashback.col.confirmed_at': 'Dibayar pada',
|
||
'cashback.col.operator': 'Operator',
|
||
'cashback.view_detail': 'Butiran',
|
||
'cashback.detail_title': 'Butiran kelompok',
|
||
'cashback.detail_summary': 'Ringkasan kelompok',
|
||
'cashback.table_title': 'Butiran rebat pemain',
|
||
'cashback.table_total': 'Jumlah',
|
||
'cashback.empty_items': 'Tiada rebat layak dalam tempoh ini',
|
||
'cashback.col.index': '#',
|
||
'cashback.col.player': 'Pemain',
|
||
'cashback.col.agent': 'Ejen',
|
||
'cashback.col.balance': 'Baki semasa',
|
||
'cashback.col.effective_stake': 'Stake berkesan',
|
||
'cashback.col.rate': 'Kadar',
|
||
'cashback.col.amount': 'Rebat',
|
||
'cashback.confirm_issue': 'Sahkan bayaran',
|
||
'cashback.cancel_issue': 'Batalkan',
|
||
'cashback.confirm_prompt': 'Bayar rebat kelompok ini ke dompet pemain? Rebat dikreditkan terus oleh platform dan tidak ditolak daripada ejen. Tindakan ini tidak boleh dibatalkan.',
|
||
'cashback.cancel_prompt': 'Batalkan kelompok menunggu ini? Tiada kredit dompet; boleh pratonton semula.',
|
||
'cashback.status.CANCELLED': 'Dibatalkan',
|
||
'cashback.rules_title': 'Peraturan rebat',
|
||
'cashback.rule_period': 'Pilih julat tarikh. Taruhan dikira mengikut masa penyelesaian dalam tempoh tersebut.',
|
||
'cashback.rule_eligible': 'Termasuk: taruhan selesai WON/LOST (tunggal ikut stake; parlay sekali ikut stake parlay). Tidak termasuk: belum selesai, dibatalkan, batal, push, kadar 0, dan taruhan yang sudah dibayar rebat.',
|
||
'cashback.rule_formula': 'Setiap taruhan: stake × kadar rebat. Jumlah diagregat mengikut pemain.',
|
||
'cashback.rule_rate': 'Keutamaan kadar: pemain > ejen > global > kadar lalai (pemain bawah ejen guna kadar ejen; pemain terus platform guna kadar dalam Tetapan global; boleh ganti setiap pemain). Isi peratus, cth. 1 = 1%.',
|
||
'cashback.rule_flow': 'Aliran: pratonton (satu menunggu setiap tempoh) → semak → sahkan bayaran; batalkan jika tidak perlu. Tempoh dibayar tidak boleh pratonton semula.',
|
||
'cashback.rule_platform': 'Bayaran: rebat dikreditkan ke baki tunai pemain oleh platform; tidak ditolak daripada kredit atau baki ejen.',
|
||
'cashback.rule_note_zero': 'Jika 0, semak taruhan WON/LOST dalam tempoh dan kadar rebat > 0 (termasuk lalai terus platform dalam Tetapan global dan tetapan pemain/ejen).',
|
||
'cashback.use_custom_rate': 'Tetapkan kadar rebat khusus',
|
||
'cashback.use_default_rate': 'Guna kadar lalai {rate}',
|
||
'cashback.settings_title': 'Tetapan rebat',
|
||
'cashback.platform_direct_default_rate': 'Kadar rebat lalai terus platform',
|
||
'cashback.platform_direct_default_hint': 'Pemain daftar sendiri tanpa kod jemputan guna kadar ini melainkan ditetapkan secara individu.',
|
||
'cashback.admin_invite_default_rate': 'Kadar rebat jemputan admin',
|
||
'cashback.admin_invite_default_hint': 'Pemain daftar dengan kod jemputan admin; lalai sama dengan terus platform. Jemputan ejen guna kadar ejen yang ditetapkan admin.',
|
||
|
||
'user.field.player_id': 'ID pemain',
|
||
'user.field.bet_count': 'Bilangan pertaruhan',
|
||
'user.field.total_stake': 'Jumlah stake',
|
||
'user.field.registered_at': 'Daftar',
|
||
'user.ph.remark_initial': 'Nota lejar apabila baki permulaan > 0',
|
||
'user.bets_edit_value': '{n} pertaruhan / {stake}',
|
||
'user.login_fail_value': '{n} kali',
|
||
|
||
'match.import_hint': 'Tampal JSON dengan array matches. Import sebagai draf; terbitkan dari senarai.',
|
||
'match.import_start': 'Import',
|
||
'match.import_json_ph': '{"matches":[...]}',
|
||
'match.delete_confirm_title': 'Padam perlawanan',
|
||
'match.delete_confirm_body': 'Padam "{title}"? Data kekal tetapi disembunyikan.',
|
||
'archive.match_title': 'Padam perlawanan',
|
||
'archive.league_title': 'Padam liga',
|
||
'archive.target': 'Perlawanan: {title}',
|
||
'archive.league_target': 'Liga: {name}',
|
||
'archive.soft_delete_hint': 'Padam lembut: data kekal, disembunyikan dari senarai.',
|
||
'archive.pending_summary': '{count} pertaruhan tertunda, stake {stake}',
|
||
'archive.refund_pending': 'Bayar balik pertaruhan tertunda',
|
||
'archive.parlay_void_hint': 'Slip parlay yang melibatkan perlawanan ini akan dibatalkan sepenuhnya.',
|
||
'archive.force_delete': 'Padam paksa',
|
||
'archive.msg_done': 'Dipadam',
|
||
'archive.msg_done_refund': 'Dipadam; {n} pertaruhan dibayar balik',
|
||
'archive.league_hint': 'Liga hanya boleh dipadam apabila semua perlawanan dan outright selesai tanpa pertaruhan tertunda.',
|
||
'archive.league_blocked': 'Masih ada perlawanan belum selesai atau pertaruhan tertunda.',
|
||
'archive.league_ready': 'Liga ini boleh dipadam; semua acara anak akan disembunyikan.',
|
||
'archive.league_confirm': 'Padam liga',
|
||
'archive.league_done': 'Liga dipadam',
|
||
'archive.warning.PENDING_BETS': 'Terdapat pertaruhan tertunda',
|
||
'archive.warning.UNSETTLED_MATCH': 'Perlawanan belum dalam status akhir',
|
||
'archive.warning.PREVIEW_BATCH': 'Terdapat batch pratonton penyelesaian',
|
||
'common.type': 'Jenis',
|
||
'match.ph.league_en': 'FIFA World Cup 2026',
|
||
'match.ph.league_zh': 'Piala Dunia 2026',
|
||
'match.ph.kickoff': '2026-06-11T19:00:00Z',
|
||
'match.ph.home_en': 'Mexico',
|
||
'match.ph.home_zh': 'Mexico',
|
||
'match.ph.home_ms': 'Mexico',
|
||
'match.ph.away_en': 'South Africa',
|
||
'match.ph.away_zh': 'Afrika Selatan',
|
||
'match.ph.away_ms': 'Afrika Selatan',
|
||
|
||
'matchEditor.manage_btn': 'Maklumat asas',
|
||
'matchEditor.back': 'Kembali ke senarai',
|
||
'matchEditor.title': 'Edit maklumat asas',
|
||
'matchEditor.section_info': 'Maklumat asas',
|
||
'matchEditor.section_markets': 'Pasaran & odds',
|
||
'matchEditor.field.league_logo': 'Logo',
|
||
'matchEditor.field.home_logo': 'Logo',
|
||
'matchEditor.field.away_logo': 'Logo',
|
||
'matchEditor.field.pick_flag': 'Pilih bendera',
|
||
'matchEditor.field.custom_logo_url': 'URL imej tersuai',
|
||
'matchEditor.ph.logo_url': 'https://...',
|
||
'matchEditor.field.match_name': 'Nama paparan',
|
||
'matchEditor.field.stage': 'Peringkat',
|
||
'matchEditor.field.group': 'Kumpulan',
|
||
'matchEditor.field.display_order': 'Susunan',
|
||
'matchEditor.field.promo_label': 'Label promosi',
|
||
'matchEditor.field.promo_label_optional': 'Label promosi (pilihan)',
|
||
'matchEditor.field.line_value': 'Garisan',
|
||
'matchEditor.ph.kickoff': 'Pilih tarikh & masa mula',
|
||
'matchEditor.group.league': 'Liga',
|
||
'matchEditor.hint.league_readonly': 'Nama dan logo liga diselenggara dalam senarai kejohanan; paparan di sini hanya baca.',
|
||
'matchEditor.group.home': 'Tuan rumah',
|
||
'matchEditor.group.away': 'Pelawat',
|
||
'matchEditor.group.schedule': 'Jadual & paparan',
|
||
'matchEditor.save_info': 'Simpan maklumat',
|
||
'matchEditor.save_market': 'Simpan pasaran',
|
||
'matchEditor.save_odds': 'Simpan odds',
|
||
'matchEditor.generate_templates': 'Jana templat lalai',
|
||
'matchEditor.templates_generated': 'Templat pasaran dijana',
|
||
'matchEditor.no_markets': 'Tiada pasaran — terbitkan perlawanan atau jana templat.',
|
||
'matchEditor.market.FT_1X2': 'FT 1X2',
|
||
'matchEditor.market.FT_HANDICAP': 'FT handicap',
|
||
'matchEditor.market.FT_OVER_UNDER': 'FT O/U',
|
||
'matchEditor.market.FT_ODD_EVEN': 'FT ganjil/genap',
|
||
'matchEditor.market.HT_1X2': 'HT 1X2',
|
||
'matchEditor.market.HT_HANDICAP': 'HT handicap',
|
||
'matchEditor.market.HT_OVER_UNDER': 'HT O/U',
|
||
'matchEditor.market.FT_CORRECT_SCORE': 'FT skor tepat',
|
||
'matchEditor.market.HT_CORRECT_SCORE': 'HT skor tepat',
|
||
'matchEditor.market.SH_CORRECT_SCORE': '2H skor tepat',
|
||
'matchEditor.period.FT': 'Sepenuh masa',
|
||
'matchEditor.period.HT': 'Separuh masa',
|
||
'matchEditor.period.SH': 'Separuh masa ke-2',
|
||
'matchEditor.period.OUTRIGHT': 'Juara',
|
||
'matchEditor.selection.HOME': 'Tuan rumah',
|
||
'matchEditor.selection.DRAW': 'Seri',
|
||
'matchEditor.selection.AWAY': 'Pelawat',
|
||
'matchEditor.selection.OVER': 'Atas',
|
||
'matchEditor.selection.UNDER': 'Bawah',
|
||
'matchEditor.selection.ODD': 'Ganjil',
|
||
'matchEditor.selection.EVEN': 'Genap',
|
||
'matchEditor.selection.OTHER_DRAW': 'Seri (skor lain)',
|
||
'matchEditor.selection.OTHER_HOME': 'Menang rumah (skor lain)',
|
||
'matchEditor.selection.OTHER_AWAY': 'Menang pelawat (skor lain)',
|
||
'matchEditor.col.selection_code': 'Pilihan',
|
||
'matchEditor.col.selection_name': 'Nama paparan',
|
||
'matchEditor.col.odds': 'Odds',
|
||
'matchEditor.ph.selection_name': 'Nama dipaparkan kepada pemain',
|
||
|
||
'err.username_required': 'Sila isi nama pengguna',
|
||
'err.username_player_invalid': 'Nama pemain hanya huruf/digit Inggeris (3–32 aksara)',
|
||
'err.password_min': 'Kata laluan sekurang-kurangnya 8 aksara',
|
||
'err.password_mismatch': 'Kata laluan tidak sepadan',
|
||
'err.credit_negative': 'Had kredit tidak boleh negatif',
|
||
'err.insufficient_credit': 'Kredit tersedia tidak mencukupi. Kurangkan jumlah atau minta penambahan had.',
|
||
'err.kickoff_required': 'Sila isi masa mula',
|
||
'err.team_country_required': 'Pilih pasukan tuan rumah dan pelawat',
|
||
'err.teams_required': 'Isi nama pasukan tuan rumah dan pelawat (ZH atau EN)',
|
||
'err.teams_same': 'Pasukan tuan rumah dan pelawat mesti berbeza',
|
||
'err.league_required': 'Sila isi nama liga',
|
||
'err.user_required': 'Sila pilih pengguna',
|
||
'err.agent_no_parent': 'Ejen peringkat 1 tidak boleh ada pemain induk',
|
||
'err.agent_no_initial_deposit': 'Jangan isi baki permulaan pemain apabila cipta ejen',
|
||
|
||
'settlement.back': 'Kembali ke senarai',
|
||
'settlement.kickoff': 'Masa kick-off',
|
||
'settlement.stats_title': 'Statistik pertaruhan',
|
||
'settlement.stats_total_bets': 'Bil. pertaruhan',
|
||
'settlement.stats_single': 'Tunggal',
|
||
'settlement.stats_parlay': 'Parlay',
|
||
'settlement.stats_total_stake': 'Jumlah stake',
|
||
'settlement.stats_potential': 'Menang maksimum',
|
||
'settlement.chart.bet_type': 'Tunggal vs parlay',
|
||
'settlement.chart.status': 'Taburan status pertaruhan',
|
||
'settlement.chart.stake_by_selection': 'TOP6 pilihan mengikut taruhan tunggal',
|
||
'settlement.stats_by_market': 'Ikut pasaran / pilihan',
|
||
'settlement.bet_list': 'Pertaruhan berkaitan',
|
||
'settlement.bet_list_hint': 'Dikumpulkan mengikut pertaruhan; parlay sama perlawanan tunjuk ×kaki',
|
||
'settlement.no_bets': 'Tiada pertaruhan untuk perlawanan ini',
|
||
'settlement.col.market': 'Pasaran',
|
||
'settlement.col.selection': 'Pilihan',
|
||
'settlement.col.legs': 'Kaki',
|
||
'settlement.col.single_stake': 'Stake tunggal',
|
||
'settlement.col.parlay_legs': 'Kaki parlay',
|
||
'settlement.ht_score': 'Skor separuh masa',
|
||
'settlement.ft_score': 'Skor penuh masa',
|
||
'settlement.record_score': 'Simpan skor',
|
||
'settlement.preview_hint': 'Pratonton menukar perlawanan ke menunggu penyelesaian (skor disimpan selepas pengesahan; boleh buka semula sebelum itu)',
|
||
'settlement.preview_btn': 'Pratonton penyelesaian',
|
||
'settlement.preview_failed': 'Gagal menjana pratonton penyelesaian',
|
||
'settlement.err_score_not_recorded': 'Sila masukkan skor separuh masa dan penuh masa sebelum penyelesaian',
|
||
'settlement.must_close_first': 'Tutup pertaruhan sebelum penyelesaian',
|
||
'settlement.outright.page_title': 'Penyelesaian juara',
|
||
'settlement.outright.title': 'Juara outright',
|
||
'settlement.outright.winner': 'Pasukan juara',
|
||
'settlement.outright.winner_ph': 'Pilih juara',
|
||
'settlement.outright.preview_hint': 'Pilih juara, pratonton bayaran, kemudian sahkan penyelesaian',
|
||
'settlement.outright.winner_required': 'Sila pilih pasukan juara dahulu',
|
||
'settlement.preview_title': 'Pratonton penyelesaian',
|
||
'settlement.single_count': 'Pertaruhan tunggal',
|
||
'settlement.est_payout': 'Anggaran bayaran',
|
||
'settlement.refund_amount': 'Jumlah bayaran balik',
|
||
'settlement.confirm_btn': 'Sahkan penyelesaian',
|
||
'settlement.smart.btn': 'Skor pintar',
|
||
'settlement.smart.title': 'Cadangan skor pintar',
|
||
'settlement.smart.hint': 'Berdasarkan pertaruhan tunggal menunggu; parlay tidak disertakan. Klik kad untuk guna skor.',
|
||
'settlement.smart.target_hold': 'Sasaran pegangan',
|
||
'settlement.smart.recalc': 'Kira semula',
|
||
'settlement.smart.apply': 'Guna skor ini',
|
||
'settlement.smart.applied': 'Skor telah diisi',
|
||
'settlement.smart.no_bets': 'Tiada pertaruhan tunggal menunggu',
|
||
'settlement.smart.empty': 'Tiada cadangan',
|
||
'settlement.smart.meta': 'Tunggal {singles}, parlay {parlays} dilangkau, {n} skor dibanding',
|
||
'settlement.smart.hold': 'Pegangan',
|
||
'settlement.smart.payout': 'Bayaran',
|
||
'settlement.smart.win_stake': 'Stake menang %',
|
||
'settlement.smart.wl': 'Menang/Kalah',
|
||
'settlement.smart.strategy.MIN_PAYOUT': 'Pegangan maks (bayaran min)',
|
||
'settlement.smart.strategy.MAX_PAYOUT': 'Bayaran pemain maks',
|
||
'settlement.smart.strategy.BALANCED': 'Seimbang (~50% stake menang)',
|
||
'settlement.smart.strategy.TARGET_HOLD': 'Sasaran pegangan',
|
||
'msg.score_recorded': 'Skor disimpan',
|
||
'msg.settlement_confirmed': 'Penyelesaian disahkan',
|
||
|
||
'agent_portal.create_player_section': 'Cipta pemain',
|
||
'agent_portal.deposit_section': 'Tambah baki',
|
||
'agent_portal.create_player_btn': '+ Pemain baharu',
|
||
'agent_portal.create_tier2_btn': '+ Sub-ejen baharu',
|
||
'agent_portal.username_ph': 'Masukkan nama pengguna',
|
||
'agent_portal.agent_username_ph': 'Nama pengguna ejen',
|
||
'agent_portal.player_id_ph': 'ID pemain',
|
||
'agent_portal.withdraw_btn': 'Keluarkan {amount}',
|
||
'agent_portal.withdraw_btn_label': 'Keluarkan',
|
||
'agent_portal.transfer_title_deposit': 'Tambah baki {name}',
|
||
'agent_portal.transfer_title_withdraw': 'Keluarkan dari {name}',
|
||
'agent_portal.create_player_dialog': 'Pemain baharu',
|
||
'agent_portal.edit_player_dialog': 'Edit pemain langsung',
|
||
'agent_portal.credit_available_hint': 'Kredit tersedia: {amount} (tambah baki ditolak dari had)',
|
||
'agent_portal.initial_deposit_hint': 'Pilihan. Tambah baki awal dari kredit anda semasa pendaftaran',
|
||
'agent_portal.search_player_ph': 'Nama pengguna atau ID',
|
||
'agent_portal.no_players': 'Tiada pemain langsung. Klik butang di atas untuk cipta.',
|
||
'invite.title': 'Kod jemputan & pautan daftar',
|
||
'invite.menu_btn': 'Jemputan',
|
||
'invite.dialog_title': 'Pengurusan jemputan',
|
||
'invite.tab_generate': 'Jana jemputan',
|
||
'invite.tab_history': 'Sejarah',
|
||
'invite.hint': 'Klik untuk jana kod jemputan dan pautan daftar. Pemain boleh masukkan kod; kosongkan untuk terus platform.',
|
||
'invite.generate_btn': 'Jana kod / pautan',
|
||
'invite.regenerate_btn': 'Jana semula',
|
||
'invite.generate_ok': 'Kod jemputan dijana',
|
||
'invite.generate_failed': 'Gagal jana — sila cuba lagi',
|
||
'invite.not_generated': 'Belum jana kod jemputan',
|
||
'invite.code': 'Kod jemputan',
|
||
'invite.cashback_rate': 'Kadar rebat',
|
||
'invite.cashback_rate_hint': 'Pemain yang daftar dengan kod ini guna kadar ini. Lalai dari kadar jemputan admin global.',
|
||
'invite.link': 'Pautan daftar',
|
||
'invite.copy_code': 'Salin kod',
|
||
'invite.copy_code_short': 'Salin',
|
||
'invite.copy_link_short': 'Salin pautan',
|
||
'invite.copy_link': 'Salin pautan daftar',
|
||
'invite.copy_code_ok': 'Kod jemputan disalin',
|
||
'invite.copy_link_ok': 'Pautan daftar disalin',
|
||
'invite.copy_failed': 'Salinan gagal — sila salin secara manual',
|
||
'invite.unavailable': 'Kod jemputan tidak tersedia',
|
||
'invite.history_title': 'Sejarah jemputan',
|
||
'invite.view_history': 'Lihat sejarah',
|
||
'invite.history_hint': 'Admin lihat semua kod; ejen lihat kod sendiri dan ejen bawahan.',
|
||
'invite.page_desc': 'Lihat sejarah kod jemputan, status dan bilangan pendaftaran.',
|
||
'invite.history_load_failed': 'Gagal memuatkan sejarah jemputan',
|
||
'invite.filter_status': 'Status',
|
||
'invite.filter_sponsor': 'Penjemput',
|
||
'invite.filter_code': 'Kod',
|
||
'invite.filter_code_ph': 'Masukkan kod',
|
||
'invite.col_status': 'Status',
|
||
'invite.col_sponsor': 'Penjemput',
|
||
'invite.col_registrant': 'Pendaftar',
|
||
'invite.not_registered': 'Belum daftar',
|
||
'invite.col_cashback_rate': 'Rebat',
|
||
'invite.col_created': 'Dicipta',
|
||
'invite.col_revoked': 'Dibatalkan',
|
||
'invite.status.ACTIVE': 'Aktif',
|
||
'invite.status.USED': 'Digunakan',
|
||
'invite.status.REVOKED': 'Dibatalkan',
|
||
'invite.revoke_btn': 'Batalkan',
|
||
'invite.revoke_title': 'Batalkan kod jemputan',
|
||
'invite.revoke_confirm': 'Batalkan kod {code}? Kod tidak boleh digunakan untuk pendaftaran.',
|
||
'invite.revoke_ok': 'Kod jemputan dibatalkan',
|
||
'invite.revoke_failed': 'Gagal batalkan — sila cuba lagi',
|
||
'invite.delete_title': 'Padam rekod jemputan',
|
||
'invite.delete_confirm': 'Padam sejarah kod {code}? Tindakan ini tidak boleh dibatalkan.',
|
||
'invite.delete_ok': 'Rekod jemputan dipadam',
|
||
'invite.delete_failed': 'Gagal padam — sila cuba lagi',
|
||
'agent_portal.search_sub_agent_ph': 'Nama pengguna atau ID',
|
||
'agent_portal.no_sub_agents': 'Tiada ejen peringkat 2. Klik butang di atas untuk cipta.',
|
||
'agent_portal.no_sub_agents_level': 'Tiada ejen peringkat {level}. Klik butang di atas untuk cipta.',
|
||
'agent_portal.sub_agent_players_readonly': 'Pemain langsung di bawah sub-ejen ini hanya boleh dilihat. Pembukaan akaun dan tambah baki diurus oleh sub-ejen.',
|
||
'agent_portal.sub_agent_downline_readonly': 'Semua ejen dan pemain bawahan di bawah sub-ejen ini hanya boleh dilihat. Anda hanya boleh mengendalikan sub-ejen langsung; pembukaan akaun dan tambah baki diurus oleh setiap peringkat.',
|
||
'agent_portal.sub_agent_downline_readonly_level': 'Semua ejen dan pemain di bawah ejen peringkat {level} ini hanya boleh dilihat. Anda hanya boleh mengendalikan sub-ejen langsung; pembukaan akaun dan tambah baki diurus oleh setiap peringkat.',
|
||
'agent_portal.downline_agents_title': 'Ejen bawahan',
|
||
'agent_portal.downline_players_title': 'Pemain bawahan',
|
||
'agent_portal.no_downline_agents': 'Tiada ejen bawahan',
|
||
'agent_portal.no_downline_players': 'Tiada pemain bawahan',
|
||
'agent_portal.sub_agent_players_readonly_level': 'Pemain langsung di bawah ejen peringkat {level} ini hanya boleh dilihat. Pembukaan akaun dan tambah baki diurus oleh ejen tersebut.',
|
||
'agent_portal.create_sub_agent_dialog': 'Ejen peringkat 2 baharu',
|
||
'agent_portal.sub_agent_credit_hint': 'Kredit awal diperuntukkan dari had tersedia anda',
|
||
'agent_portal.adjust_credit_dialog': 'Laraskan kredit {name}',
|
||
'agent_portal.credit_adjust_hint': 'Positif untuk tambah, negatif untuk kurangkan',
|
||
'msg.agent_sub_created': 'Sub-ejen dicipta',
|
||
'msg.withdraw_ok': 'Pengeluaran berjaya',
|
||
|
||
'msg.form_invalid': 'Sila semak borang',
|
||
'msg.player_created': 'Pemain dicipta',
|
||
'msg.agent_created': 'Ejen dicipta',
|
||
'msg.create_failed': 'Gagal mencipta',
|
||
'msg.saved': 'Disimpan',
|
||
'msg.save_failed': 'Gagal menyimpan',
|
||
'msg.deleted': 'Dipadam',
|
||
'msg.delete_failed': 'Gagal memadam',
|
||
'msg.league_created': 'Kejohanan dicipta',
|
||
'msg.league_updated': 'Kejohanan dikemas kini',
|
||
'msg.match_created_draft': 'Perlawanan tunggal dicipta (draf)',
|
||
'msg.published': 'Diterbitkan dengan pasaran',
|
||
'msg.closed': 'Pertaruhan ditutup',
|
||
'msg.reopened': 'Pertaruhan dibuka semula',
|
||
'match.reopen_kickoff_title': 'Tetapkan masa mula baharu',
|
||
'match.reopen_kickoff_hint': 'Masa mula telah berlalu. Pilih masa mula baharu pada masa hadapan sebelum membuka semula.',
|
||
'match.reopen_kickoff_invalid': 'Sila pilih masa mula pada masa hadapan',
|
||
'msg.invalid_json': 'JSON tidak sah',
|
||
'msg.import_failed': 'Import gagal',
|
||
'msg.import_done': 'Import: {imported} ok, {skipped} dilangkau, {failed} gagal / {total} jumlah',
|
||
'msg.topup_ok': 'Tambah baki berjaya',
|
||
'msg.topup_failed': 'Tambah baki gagal',
|
||
'msg.transfer_failed': 'Operasi gagal',
|
||
'msg.amount_gt_zero': 'Jumlah mesti lebih daripada 0',
|
||
'msg.credit_zero': 'Pelarasan tidak boleh 0',
|
||
'msg.credit_adjusted': 'Kredit dikemas kini',
|
||
'msg.credit_adjust_failed': 'Pelarasan gagal',
|
||
'msg.outright_no_edit': 'Outright tidak boleh diedit di sini',
|
||
'msg.outright_odds_saved': 'Odds juara disimpan',
|
||
'msg.load_failed': 'Gagal memuatkan',
|
||
|
||
'content.btn.create': 'Kandungan baharu',
|
||
'content.btn.enable': 'Aktifkan',
|
||
'content.btn.disable': 'Nyahaktif',
|
||
'content.dialog.create': 'Kandungan awam baharu',
|
||
'content.dialog.edit': 'Edit kandungan awam',
|
||
'content.confirm_delete': 'Padam "{title}"?',
|
||
'content.type.BANNER': 'Banner laman utama',
|
||
'content.type.ANNOUNCEMENT': 'Pengumuman',
|
||
'content.hint.announcement': 'Dipaparkan di ticker atas pemain; isi tajuk atau kandungan',
|
||
'content.status.DRAFT': 'Draf',
|
||
'content.status.ACTIVE': 'Aktif',
|
||
'content.status.INACTIVE': 'Tidak aktif',
|
||
'content.col.sort': 'Susunan',
|
||
'content.col.preview': 'Pratonton',
|
||
'content.col.title': 'Tajuk / ringkasan',
|
||
'content.col.player_visible': 'Pemain nampak',
|
||
'content.col.schedule': 'Jadual',
|
||
'content.col.link': 'Pautan',
|
||
'content.field.link_type': 'Jenis pautan',
|
||
'content.field.link_target': 'Sasaran pautan',
|
||
'content.field.start_time': 'Masa mula',
|
||
'content.field.end_time': 'Masa tamat',
|
||
'content.field.title': 'Tajuk',
|
||
'content.field.title_ph': 'Pilihan',
|
||
'content.field.body': 'Kandungan',
|
||
'content.field.announce_text': 'Teks ticker',
|
||
'content.field.image_url': 'URL imej',
|
||
'content.upload.upload_btn': 'Muat naik imej',
|
||
'content.upload.uploading': 'Memuat naik…',
|
||
'content.upload.success': 'Imej berjaya dimuat naik',
|
||
'content.upload.failed': 'Gagal memuat naik',
|
||
'content.upload.size_error': 'Imej mestilah di bawah 5 MB',
|
||
'content.upload.remove': 'Buang imej',
|
||
'content.upload.pick_media': 'Pilih dari pustaka',
|
||
'content.upload.pick_media_title': 'Pilih Imej Banner',
|
||
'content.upload.no_media': 'Tiada imej banner dalam pustaka — muat naik dahulu',
|
||
'content.upload.url_placeholder': 'Atau tampal URL imej',
|
||
'content.link.none': 'Tiada pautan',
|
||
'content.locale.zh-CN': 'Cina Ringkas',
|
||
'content.locale.en-US': 'English',
|
||
'content.locale.ms-MY': 'Bahasa Melayu',
|
||
'content.hidden_reason.NOT_ACTIVE': 'Tidak aktif atau draf',
|
||
'content.hidden_reason.NOT_STARTED': 'Belum bermula',
|
||
'content.hidden_reason.EXPIRED': 'Tamat tempoh',
|
||
'content.hidden_reason.INCOMPLETE': 'Terjemahan tidak lengkap',
|
||
'content.batch.selected': '{n} dipilih',
|
||
'content.batch.enable': 'Aktifkan dipilih',
|
||
'content.batch.disable': 'Nyahaktif dipilih',
|
||
'content.batch.delete': 'Padam dipilih',
|
||
'content.confirm_batch_enable': 'Aktifkan {n} item dipilih?',
|
||
'content.confirm_batch_disable': 'Nyahaktif {n} item dipilih?',
|
||
'content.confirm_batch_delete': 'Padam {n} item dipilih?',
|
||
'content.batch.all_ok': '{n} item berjaya',
|
||
'content.batch.partial': '{ok} berjaya, {fail} gagal',
|
||
|
||
'page.outrights.title': 'Juara',
|
||
'page.outrights.desc': 'Cipta dan edit pasaran juara; Piala Dunia 2026 boleh import asas',
|
||
'outright.col.rank': 'Kedudukan',
|
||
'outright.col.team_zh': 'Pasukan (ZH)',
|
||
'outright.col.team_en': 'Pasukan (EN)',
|
||
'outright.col.code': 'Kod',
|
||
'outright.col.country': 'Negara',
|
||
'outright.col.odds': 'Odds juara',
|
||
'outright.country_ph': 'Cari atau pilih negara',
|
||
'teamLogo.kind.flag': 'Bendera',
|
||
'teamLogo.kind.crest': 'Lambang',
|
||
'outright.err_country': 'Sila pilih negara',
|
||
'outright.btn.save_odds': 'Simpan semua odds',
|
||
'outright.btn.close': 'Tutup pertaruhan',
|
||
'outright.btn.settle': 'Selesaikan',
|
||
'outright.confirm_close': 'Selepas tutup, tiada pertaruhan juara baharu. Teruskan?',
|
||
'outright.btn.apply_canonical': 'Guna data jadual asas',
|
||
'msg.outright_canonical_applied': 'Odds 48 pasukan telah dikemas kini',
|
||
'outright.team_count': '{n} / {total} pasukan',
|
||
'outright.err_odds_min': 'Odds mesti lebih 1.00',
|
||
'outright.field.title_zh': 'Tajuk (ZH)',
|
||
'outright.field.title_en': 'Tajuk (EN)',
|
||
'outright.field.title_ms': 'Tajuk (MS)',
|
||
'outright.btn.create_event': 'Acara juara baharu',
|
||
'outright.fixtures_sync_hint': 'Pasukan daripada perlawanan liga; hanya laraskan odds dan status terbit.',
|
||
'outright.empty_no_fixtures': 'Tiada perlawanan dalam liga ini — tambah di Konfigurasi perlawanan dahulu.',
|
||
'outright.btn.add_team': 'Tambah pasukan',
|
||
'outright.add.filter_fixture': 'Pasukan sedia ada',
|
||
'outright.add.filter_all': 'Semua terbina dalam',
|
||
'outright.add.filter_custom': 'Tersuai',
|
||
'outright.add.custom_hint': 'Isi kod pasukan dan nama Cina/Inggeris; logo melalui muat naik atau URL.',
|
||
'outright.add.field_code': 'Kod pasukan',
|
||
'outright.add.field_logo': 'Logo',
|
||
'outright.add.ph_code': 'cth. TEAM01',
|
||
'outright.add.ph_name_zh': 'Nama Cina',
|
||
'outright.add.ph_name_en': 'Nama Inggeris',
|
||
'outright.add.err_code_required': 'Sila isi kod pasukan',
|
||
'outright.add.err_name_required': 'Sila isi sekurang-kurangnya nama Cina atau Inggeris',
|
||
'outright.add.err_duplicate': 'Kod pasukan ini sudah ada dalam pasaran juara',
|
||
'outright.add.select_all': 'Pilih semua',
|
||
'outright.add.clear_selection': 'Kosongkan pilihan',
|
||
'outright.add.selected_count': '{n} dipilih',
|
||
'outright.add.empty_fixture': 'Tiada pasukan perlawanan untuk ditambah (pasukan dalam perlawanan tetapi belum dalam pasaran juara)',
|
||
'outright.add.empty_all': 'Semua pasukan terbina dalam sudah dalam pasaran juara',
|
||
'outright.add.default_odds': 'Odds lalai',
|
||
'outright.add.search_ph': 'Cari nama atau kod',
|
||
'outright.add.err_none': 'Sila pilih sekurang-kurangnya satu pasukan',
|
||
'outright.batch.mode': 'Urus kelompok',
|
||
'outright.batch.exit': 'Keluar kelompok',
|
||
'outright.batch.apply_odds': 'Guna odds',
|
||
'outright.batch.remove': 'Buang terpilih',
|
||
'outright.batch.confirm_remove': 'Buang {n} pasukan terpilih?',
|
||
'outright.batch.err_none': 'Sila pilih pasukan dahulu',
|
||
'outright.batch.apply_ok': 'Odds {n} pasukan dikemas kini — simpan semua odds',
|
||
'outright.batch.remove_ok': '{n} pasukan dibuang',
|
||
'outright.batch.remove_partial': '{ok} berjaya, {fail} gagal',
|
||
'outright.sort.label': 'Susun',
|
||
'outright.sort.rank': 'Kedudukan',
|
||
'outright.sort.name': 'Nama pasukan',
|
||
'outright.sort.code': 'Kod',
|
||
'outright.sort.odds': 'Odds (semasa)',
|
||
'outright.sort.saved_odds': 'Odds (disimpan)',
|
||
'outright.sort.asc': 'Menaik',
|
||
'outright.sort.desc': 'Menurun',
|
||
'msg.outright_teams_added': '{n} pasukan ditambah ({skipped} dilangkau)',
|
||
'msg.load_matches_failed': 'Gagal memuatkan perlawanan',
|
||
'msg.cashback_issued': 'Rebat telah dikeluarkan',
|
||
'msg.cashback_cancelled': 'Kelompok rebat dibatalkan',
|
||
'msg.cashback_preview_ready': 'Pratonton sedia — semak dan sahkan bayaran',
|
||
'msg.cashback_preview_replaced': 'Menggantikan {n} pratonton lama untuk tempoh ini',
|
||
'msg.freeze_confirm_title': '{action} akaun',
|
||
'msg.freeze_confirm_body': '{action} pemain "{name}"?{extra}',
|
||
'msg.freeze_extra': ' Mereka tidak akan dapat log masuk.',
|
||
'msg.freeze_done': '{action} selesai',
|
||
'msg.freeze_failed': '{action} gagal',
|
||
|
||
'smoke.intro': 'Jalankan ujian asap automatik: penyelesaian, peraturan pertaruhan, kredit ejen, rebat, sondakan DB, dan integrasi pertaruhan→penyelesaian→dompet.',
|
||
'smoke.intro_rule': 'Kes peraturan menggunakan logik sama seperti ujian unit Jest; tiada data perniagaan ditulis.',
|
||
'smoke.intro_db': 'Kit Database hanya semak sambungan dan konfigurasi (baca sahaja).',
|
||
'smoke.intro_bet_flow': 'Kit aliran pertaruhan mencipta perlawanan/pemain sementara, mengesahkan bekuan/payout/kredit ejen, kemudian membersihkan.',
|
||
'smoke.intro_note': 'Merangkumi kebanyakan regresi UAT; semak rebat secara manual jika perlu.',
|
||
'smoke.field.suites': 'Kit ujian',
|
||
'smoke.ph.suites': 'Pilih kit untuk dijalankan',
|
||
'smoke.btn.run': 'Jalankan ujian',
|
||
'smoke.last_run': 'Jalanan terakhir',
|
||
'smoke.results_title': 'Keputusan kes',
|
||
'smoke.empty': 'Belum dijalankan. Klik Jalankan ujian.',
|
||
'smoke.stat.pass': 'Lulus',
|
||
'smoke.stat.fail': 'Gagal',
|
||
'smoke.stat.total': 'Jumlah',
|
||
'smoke.col.id': 'ID',
|
||
'smoke.col.suite': 'Kit',
|
||
'smoke.col.name': 'Kes',
|
||
'smoke.col.uat': 'UAT',
|
||
'smoke.col.duration': 'Masa',
|
||
'smoke.col.steps': 'Langkah',
|
||
'smoke.col.message': 'Mesej',
|
||
'smoke.no_steps': 'Tiada butiran langkah',
|
||
'smoke.status.PASS': 'Lulus',
|
||
'smoke.status.FAIL': 'Gagal',
|
||
'smoke.status.SKIP': 'Langkau',
|
||
'smoke.msg.all_passed': 'Semua lulus ({n})',
|
||
'smoke.msg.has_failures': '{n} kes gagal',
|
||
'smoke.msg.run_failed': 'Gagal menjalankan ujian',
|
||
'smoke.log_title': 'Log terperinci',
|
||
'smoke.btn.copy_all': 'Salin semua log',
|
||
'smoke.btn.copy_one': 'Salin',
|
||
'smoke.msg.copy_ok': 'Disalin ke papan keratan',
|
||
'smoke.msg.copy_failed': 'Gagal menyalin — pilih log secara manual',
|
||
'audit.action.RUN_SMOKE_TESTS': 'Jalankan ujian asap',
|
||
|
||
'media.title': 'Perpustakaan Media',
|
||
'media.upload_btn': 'Muat Naik Fail',
|
||
'media.category.all': 'Semua',
|
||
'media.category.banners': 'Banner',
|
||
'media.category.teams': 'Logo Pasukan',
|
||
'media.category.contents': 'Gambar Kandungan',
|
||
'media.col.preview': 'Pratonton',
|
||
'media.col.filename': 'Nama Fail',
|
||
'media.col.category': 'Kategori',
|
||
'media.col.size': 'Saiz',
|
||
'media.col.status': 'Status',
|
||
'media.col.uploaded': 'Dimuat Naik',
|
||
'media.col.actions': 'Tindakan',
|
||
'media.status.used': 'Digunakan',
|
||
'media.status.unused': 'Tidak Digunakan',
|
||
'media.purge_btn': 'Buang Yang Tidak Digunakan',
|
||
'media.purge_confirm': 'Padam {n} fail yang tidak digunakan? Ini tidak boleh dibatalkan.',
|
||
'media.purge_none': 'Tiada fail yang tidak digunakan',
|
||
'media.purge_success': '{n} fail dipadam',
|
||
'media.delete_confirm': 'Padam fail ini?',
|
||
'media.delete_success': 'Dipadam',
|
||
'media.upload_success': 'Berjaya dimuat naik',
|
||
'media.upload_failed': 'Muat naik gagal',
|
||
'media.copy_url': 'Salin URL',
|
||
'media.url_copied': 'URL disalin',
|
||
'media.upload_dialog': 'Muat Naik Fail',
|
||
'media.upload_hint': 'PNG, JPG, WEBP, GIF, SVG — maks 5 MB',
|
||
'media.upload_category': 'Kategori',
|
||
'media.drop_hint': 'Lepaskan fail di sini atau klik untuk pilih',
|
||
'media.no_files': 'Tiada fail lagi',
|
||
'media.refresh': 'Muat Semula',
|
||
'media.unused_count': '{n} tidak digunakan',
|
||
};
|
||
|
||
export default adminPagesMs;
|