Files
thebet365/apps/admin/src/i18n/admin-pages-ms.ts
Mars e7e938f261 feat: WC2026 赛事 seed、生产上线初始化脚本与目录归档
重构 seed 为 WC2026 72 场小组赛与 48 强优胜盘;新增 production 模式仅保留 admin 与赛事示例;提供 prod-init-db 全量重置脚本;管理端 i18n 分包与赛事归档能力。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 18:17:00 +08:00

909 lines
48 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.
/** 管理后台列表 / 弹窗 — 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, 332 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 (332 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;