/** 管理后台:中文 + 英文 + 马来语(核心短文案) * 列表页/弹窗大段文案通过 bundles/ 动态 chunk 平载入,不再静态 import admin-pages。 */ export type AdminLocale = 'zh-CN' | 'en-US' | 'ms-MY'; export const ADMIN_LOCALES: { code: AdminLocale; label: string; }[] = [ { code: 'zh-CN', label: '中文' }, { code: 'en-US', label: 'English' }, { code: 'ms-MY', label: 'Bahasa Melayu' }, ]; const zh: Record = { 'login.title': '管理后台', 'login.username': '用户名', 'login.password': '密码', 'login.submit': '登录', 'login.username_ph': '请输入用户名', 'login.password_ph': '请输入密码', 'login.err_captcha': '验证码错误,请重试', 'login.err_failed': '登录失败,请检查账号与密码', 'login.err_quick': '快速登录失败', 'login.quick_label': '快速登录(调试)', 'login.quick_admin': '管理员', 'login.quick_agent': '一级代理', 'login.quick_agent2': '二级代理', 'login.quick_match_admin': '赛事管理员', 'login.quick_finance_admin': '财务管理员', 'login.quick_support': '客服查询员', 'staff.create_btn': '创建后台账号', 'staff.col.role': '角色', 'staff.col.last_login': '最近登录', 'staff.dialog.create': '创建后台账号', 'staff.dialog.edit': '编辑后台账号', 'staff.field.visible_menus': '菜单权限', 'login.captcha_ph': '验证码', 'login.captcha_refresh': '点击刷新', 'nav.dashboard': '概览', 'nav.dashboard.matches': '赛事概览', 'nav.dashboard.players': '玩家概览', 'nav.invites': '邀请管理', 'nav.users': '玩家管理', 'nav.agents': '代理管理', 'nav.agents_players': '代理&玩家', 'nav.matches': '赛事管理', 'nav.outrights': '优胜冠军', 'nav.bets': '注单管理', 'nav.credit_transactions': '额度流水', 'nav.finance_logs': '财务流水', 'nav.cashback': '返水管理', 'nav.contents': '公共管理', 'nav.audit': '操作日志', 'nav.smoke_tests': '自动化测试', 'nav.media': '媒体库', 'nav.payment_methods': '收款方式', 'nav.deposit_orders': '充值审核', 'nav.deposit_manage': '充值管理', 'nav.staff': '后台账号', 'nav.players': '直属玩家', 'deposit.payment_methods_title': '收款方式管理', 'deposit.deposit_orders_title': '充值审核', 'deposit.all_status': '所有状态', 'deposit.all_types': '所有类型', 'deposit.status_pending': '待审核', 'deposit.status_approved': '已通过', 'deposit.status_rejected': '已拒绝', 'deposit.search_player_ph': '搜索玩家...', 'deposit.pending_badge': '待审核 {n} 笔', 'deposit.order_no': '订单号', 'deposit.player': '玩家', 'deposit.amount': '金额', 'deposit.screenshot': '截图', 'deposit.approved_amount': '批准金额', 'deposit.reviewer': '审核人', 'deposit.time': '时间', 'deposit.approve': '批准', 'deposit.reject': '拒绝', 'deposit.approve_title': '批准充值', 'deposit.reject_title': '拒绝充值', 'deposit.submitted_amount': '申报金额', 'deposit.approved_amount_label': '批准金额(可调整)', 'deposit.remark_label': '备注(可选)', 'deposit.confirm_approve': '确认批准', 'deposit.approve_check_hint': '请仔细核对截图中的转账金额,确保与下方「批准金额」完全一致后再提交。', 'deposit.confirm_approve_message': '即将批准金额 {amount}。请再次确认该金额与截图一致,确认后将入账玩家钱包。', 'deposit.confirm_reject': '确认拒绝', 'deposit.reject_reason_label': '拒绝原因 *', 'deposit.reject_reason_ph': '请输入拒绝原因...', 'deposit.reason_required': '请输入拒绝原因', 'deposit.revoke': '撤回', 'deposit.confirm_revoke': '将作废批准后 5 分钟内的待结算注单、扣回已入账金额,并恢复为待审核。确定撤回?', 'deposit.reopen_review': '重新审核', 'deposit.confirm_reopen': '订单将恢复为待审核,可再次批准或拒绝。确定继续?', 'deposit.delete': '删除', 'deposit.confirm_delete': '【仅删除记录】将永久删除本订单记录及截图文件。确定继续?', 'deposit.delete_failed': '删除失败', 'deposit.prev': '上一页', 'deposit.next': '下一页', 'deposit.audit_history': '审核记录', 'deposit.audit_action': '操作', 'deposit.audit_actor': '操作人', 'deposit.audit_time': '时间', 'deposit.audit_remark': '备注', 'deposit.audit_submitted': '提交申请', 'deposit.audit_approved': '审核通过', 'deposit.audit_rejected': '审核拒绝', 'deposit.audit_revoked': '撤销审核', 'deposit.audit_reopened': '重新审核', 'deposit.audit_deleted': '已删除', 'deposit.audit_empty': '暂无审核记录', 'deposit.add_method': '+ 添加', 'deposit.display_name': '展示名称', 'deposit.details': '详情', 'deposit.sort': '排序值', 'deposit.active': '启用', 'deposit.show_player': '前台展示', 'deposit.edit_method': '编辑收款方式', 'deposit.create_method': '新建收款方式', 'deposit.bank_name': '银行名称', 'deposit.account_holder': '账户持有人', 'deposit.account_number': '银行账号', 'deposit.usdt_address': 'USDT 地址', 'deposit.qr_code': '二维码', 'deposit.sort_order': '排序值', 'deposit.show_on_player': '展示给玩家', 'deposit.save': '保存', 'deposit.confirm_deactivate': '确认停用此收款方式?', 'deposit.lang_zh': '中文', 'deposit.lang_en': 'English', 'deposit.lang_ms': 'Bahasa', 'deposit.multilingual_hint': '为不同语言设置显示名称,留空则使用默认值', 'nav.subAgents': '二级代理', 'nav.myBets': '注单查询', 'nav.open_menu': '打开菜单', 'nav.close_menu': '关闭菜单', 'breadcrumb.settlement': '赛事结算', 'breadcrumb.match_edit': '编辑赛事', 'breadcrumb.match_markets': '盘口管理', 'breadcrumb.outright_edit': '编辑优胜冠军', 'role.admin': '系统管理员', 'role.super_admin': '超级管理员', 'role.match_admin': '赛事管理员', 'role.finance_admin': '财务管理员', 'role.support': '客服查询员', 'role.agent': '代理账号', 'role.tier1_agent': '一级代理', 'role.tier2_agent': '二级代理', 'logout': '退出', 'lang': '语言', 'portal.admin': '平台后台管理', 'portal.agent': '代理后台管理', 'common.all': '全部', 'common.search': '查询', 'common.refresh': '刷新', 'common.reset': '重置', 'common.edit': '编辑', 'common.yes': '是', 'common.no': '否', 'common.delete': '删除', 'common.cancel': '取消', 'common.confirm': '确定', 'common.retry': '重试', 'common.status': '状态', 'user.status.ACTIVE': '正常', 'user.status.SUSPENDED': '已冻结', 'user.status.DISABLED': '已停用', 'common.type': '类型', 'common.keyword': '关键词', 'common.actions': '操作', 'common.seq': '序号', 'common.more': '更多', 'common.loading': '加载中…', 'common.no_data': '暂无数据', 'common.yesterday': '昨日', 'common.vs_yesterday': '较昨日', 'common.people': '人', 'common.bets_unit': '单', 'common.matches_unit': '场赛事', 'common.frozen': '冻结', 'common.used': '已用', 'common.platform_direct': '平台直属', 'common.updated_at': '更新于', 'common.enable': '启用', 'common.disable': '停用', 'common.show_player': '前台展示', 'common.hide_player': '前台隐藏', 'dash.title': '概览', 'dash.desc': '平台整体运行概况', 'dash.board_title': '整体概览', 'dash.board_hint': '一屏查看经营趋势与平台分布', 'dash.kpi_bet_count': '今日投注笔数', 'dash.kpi_stake': '今日投注额', 'dash.kpi_payout': '今日派彩', 'dash.kpi_ggr': '今日毛利', 'dash.kpi_users': '玩家 / 代理', 'dash.kpi_new_players': '今日新增 {n} 人', 'dash.kpi_pending': '待结算', 'dash.kpi_pending_sub': '{bets} 单 · {matches} 场赛事', 'dash.load_error_hint': '无法加载概览数据,请检查网络或稍后重试。', 'dash.kpi_wallet': '玩家余额', 'dash.kpi_credit': '代理授信', 'dash.trend_caption': '近 7 日经营趋势(金额折线 + 注单柱)', 'dash.chart_stake': '投注额', 'dash.chart_payout': '派彩', 'dash.chart_ggr': '毛利', 'dash.chart_bet_count': '注单笔数', 'dash.axis_amount': '金额', 'dash.axis_count': '笔数', 'dash.count_suffix': '笔', 'dash.chart_tooltip': '{b}:{c}({d}%)', 'dash.pie_empty': '暂无', 'dash.pie_matches': '赛事', 'dash.pie_bets': '今日注单', 'dash.pie_users': '用户', 'dash.match_draft': '草稿', 'dash.match_published': '已发布', 'dash.match_closed': '已封盘', 'dash.match_pending_settle': '待结算', 'dash.match_settled': '已结算', 'dash.user_active': '正常玩家', 'dash.user_online': '当前在线', 'dash.players_online': '当前在线', 'dash.players_online_hint': '约 2 分钟内活跃', 'dash.user_suspended': '停用', 'dash.user_direct': '直属', 'dash.user_agents': '代理', 'dash.section_matches_hint': '投注经营与赛事状态分布', 'dash.section_match_ops_hint': '赛事状态与待办', 'dash.trend_bet_count_caption': '近 7 日注单量趋势', 'dash.section_players_hint': '玩家、代理与资金概况', 'dash.kpi_match_total': '赛事总数', 'dash.kpi_match_total_sub': '草稿 {draft} · 已发布 {published}', 'dash.kpi_match_closed': '已封盘', 'dash.kpi_match_closed_sub': '已取消 {n} 场', 'dash.kpi_match_settled': '已结算赛事', 'dash.kpi_match_settled_sub': '已完成结算的场次', 'dash.kpi_agents_active': '活跃代理', 'dash.kpi_agents_active_sub': '停用玩家 {suspended} 人', 'dash.recent_players': '最新注册玩家', 'dash.recent_bets': '最新注单', 'dash.col_parent': '上级', 'dash.col_bet_no': '注单号', 'dash.col_stake': '投注额', 'dash.col_placed_at': '下注时间', 'page.users.title': '玩家管理', 'page.users.desc': '创建玩家、查看余额与投注概况,支持上分与状态管理', 'page.agents.title': '代理管理', 'page.agents.desc': '创建一级代理、调整授信额度、查看直属玩家与额度占用', 'nav.matches.fixtures': '赛事配置', 'nav.matches.outrights': '优胜赛配置(盘口)', 'nav.matches.market_templates': '盘口模板', 'nav.matches.audit_logs': '赛事日志', 'page.matches.title': '赛事管理', 'page.matches.desc': '草稿可编辑、删除;已发布可改开赛时间与热门;未结算可下架', 'page.bets.title': '注单管理', 'page.bets.desc': '筛选、分页查看全平台注单,支持详情与投注项', 'page.cashback.title': '返水管理', 'page.cashback.desc': '按周期生成返水并发放', 'page.audit.title': '操作日志', 'page.audit.desc': '账务、用户、结算等非赛事类管理操作', 'page.matches_audit.title': '赛事日志', 'page.matches_audit.desc': '联赛、赛事、盘口、赔率、冠军盘等赛事管理操作', 'page.settlement.title': '赛事结算', 'page.agent_dash.title': '代理概览', 'page.agent_dash.desc': '下线经营概况与分布', 'agent_dash.load_error_hint': '无法加载概览数据,请检查网络或重新登录后再试。', 'agent_dash.board_hint': '一屏查看下线经营趋势与分布', 'agent_dash.kpi_players': '直属玩家 / 下级代理', 'agent_dash.kpi_pending_sub': '{bets} 单待结算', 'agent_dash.pie_credit': '授信占用', 'agent_dash.pie_players': '直属玩家', 'agent_dash.credit_available': '可用额度', 'agent_dash.credit_used': '已用额度', 'agent_dash.liability_direct': '玩家余额占用', 'agent_dash.liability_child': '下级代理占用', 'page.agent_players.title': '直属玩家', 'page.agent_players.desc': '管理你名下的直属玩家', 'page.agent_sub.title': '二级代理', 'page.agent_sub.desc': '管理二级代理账号与授信分配', 'page.agent_bets.title': '注单查询', 'page.agent_bets.desc': '下级玩家的全部投注记录', 'agent.credit_limit': '授信额度', 'agent.credit_total': '总额度', 'agent.credit_used': '已用额度', 'agent.credit_occupied': '已占用', 'agent.direct_players': '直属玩家', 'agent.player_count': '玩家数', 'agent.today_stake': '今日投注', 'agent.currency_cny': '人民币', 'bet.status.PENDING': '待结算', 'bet.status.WON': '已赢', 'bet.status.LOST': '已输', 'bet.status.VOID': '作废', 'bet.status.REFUNDED': '已退款', 'bet.type.SINGLE': '单关', 'bet.type.PARLAY': '串关', 'bet.settlement.PENDING': '待结算', 'bet.settlement.SETTLED': '已结算', 'bet.settlement.VOID': '已作废', 'bet.result.WON': '赢', 'bet.result.LOST': '输', 'bet.result.VOID': '走水', 'bet.result.PUSH': '走盘', 'bet.result.HALF_WON': '半赢', 'bet.result.HALF_LOST': '半输', 'match.status.DRAFT': '草稿', 'match.status.PUBLISHED': '已发布', 'match.status.CLOSED': '已封盘', 'match.status.SETTLED': '已结算', 'match.status.PENDING_SETTLEMENT': '待结算', 'match.filter.has_bets': '仅显示有下注', 'match.sort.default': '默认排序', 'match.sort.bet_count': '按注单数', 'match.sort.total_stake': '按投注额', // 列表页/弹窗文案通过 bundles/zh-CN 动态平载,不在此处静态 spread }; const en: Record = { 'login.title': 'Admin Console', 'login.username': 'Username', 'login.password': 'Password', 'login.submit': 'Sign in', 'login.username_ph': 'Enter username', 'login.password_ph': 'Enter password', 'login.err_captcha': 'Captcha incorrect, try again', 'login.err_failed': 'Sign-in failed. Check username and password', 'login.err_quick': 'Quick sign-in failed', 'login.quick_label': 'Quick sign-in (debug)', 'login.quick_admin': 'Admin', 'login.quick_agent': 'Tier-1 agent', 'login.quick_agent2': 'Tier-2 agent', 'login.quick_match_admin': 'Match admin', 'login.quick_finance_admin': 'Finance admin', 'login.quick_support': 'Support', 'staff.create_btn': 'Create staff account', 'staff.col.role': 'Role', 'staff.col.last_login': 'Last login', 'staff.dialog.create': 'Create staff account', 'staff.dialog.edit': 'Edit staff account', 'staff.field.visible_menus': 'Menu Permissions', 'login.captcha_ph': 'Captcha', 'login.captcha_refresh': 'Click to refresh', 'nav.dashboard': 'Overview', 'nav.dashboard.matches': 'Match overview', 'nav.dashboard.players': 'Player overview', 'nav.invites': 'Invitations', 'nav.users': 'Players', 'nav.agents': 'Agents', 'nav.agents_players': 'Agents & Players', 'nav.matches': 'Matches', 'nav.outrights': 'Outrights', 'nav.bets': 'Bets', 'nav.credit_transactions': 'Credit ledger', 'nav.finance_logs': 'Finance ledger', 'nav.cashback': 'Cashback', 'nav.contents': 'Public Content', 'nav.audit': 'Audit Log', 'nav.smoke_tests': 'Smoke tests', 'nav.media': 'Media Library', 'nav.payment_methods': 'Payment Methods', 'nav.deposit_orders': 'Deposit Review', 'nav.deposit_manage': 'Deposit Mgmt', 'nav.staff': 'Staff accounts', 'nav.players': 'My Players', 'nav.subAgents': 'Tier-2 agents', 'nav.myBets': 'Bet Search', 'deposit.payment_methods_title': 'Payment Methods', 'deposit.deposit_orders_title': 'Deposit Review', 'deposit.all_status': 'All Status', 'deposit.all_types': 'All Types', 'deposit.status_pending': 'Pending', 'deposit.status_approved': 'Approved', 'deposit.status_rejected': 'Rejected', 'deposit.search_player_ph': 'Search player...', 'deposit.pending_badge': '{n} pending', 'deposit.order_no': 'Order No', 'deposit.player': 'Player', 'deposit.amount': 'Amount', 'deposit.screenshot': 'Screenshot', 'deposit.approved_amount': 'Approved Amt', 'deposit.reviewer': 'Reviewer', 'deposit.time': 'Time', 'deposit.approve': 'Approve', 'deposit.reject': 'Reject', 'deposit.approve_title': 'Approve Deposit', 'deposit.reject_title': 'Reject Deposit', 'deposit.submitted_amount': 'Submitted Amount', 'deposit.approved_amount_label': 'Approved Amount (adjust if needed)', 'deposit.remark_label': 'Remark (optional)', 'deposit.confirm_approve': 'Confirm Approve', 'deposit.approve_check_hint': 'Carefully verify the transfer amount in the screenshot matches the approved amount below before submitting.', 'deposit.confirm_approve_message': 'You are about to approve {amount}. Confirm it matches the screenshot; this will credit the player wallet.', 'deposit.confirm_reject': 'Confirm Reject', 'deposit.reject_reason_label': 'Reject Reason *', 'deposit.reject_reason_ph': 'Enter the reason for rejection...', 'deposit.reason_required': 'Please enter a reject reason', 'deposit.revoke': 'Revoke', 'deposit.confirm_revoke': 'Pending bets placed within 5 minutes of approval will be voided, credited balance reversed, and the order reset to pending. Continue?', 'deposit.reopen_review': 'Re-review', 'deposit.confirm_reopen': 'The order will return to pending for approve or reject. Continue?', 'deposit.delete': 'Delete', 'deposit.confirm_delete': '[Records only] Permanently delete this order record and screenshot. Continue?', 'deposit.delete_failed': 'Delete failed', 'deposit.prev': 'Prev', 'deposit.next': 'Next', 'deposit.audit_history': 'Review history', 'deposit.audit_action': 'Action', 'deposit.audit_actor': 'Actor', 'deposit.audit_time': 'Time', 'deposit.audit_remark': 'Remark', 'deposit.audit_submitted': 'Submitted', 'deposit.audit_approved': 'Approved', 'deposit.audit_rejected': 'Rejected', 'deposit.audit_revoked': 'Approval revoked', 'deposit.audit_reopened': 'Reopened for review', 'deposit.audit_deleted': 'Deleted', 'deposit.audit_empty': 'No review history yet', 'deposit.add_method': '+ Add', 'deposit.display_name': 'Display Name', 'deposit.details': 'Details', 'deposit.sort': 'Sort', 'deposit.active': 'Active', 'deposit.show_player': 'Show Player', 'deposit.edit_method': 'Edit Payment Method', 'deposit.create_method': 'Create Payment Method', 'deposit.bank_name': 'Bank Name', 'deposit.account_holder': 'Account Holder', 'deposit.account_number': 'Account Number', 'deposit.usdt_address': 'USDT Address', 'deposit.qr_code': 'QR Code', 'deposit.sort_order': 'Sort Order', 'deposit.show_on_player': 'Show on Player', 'deposit.save': 'Save', 'deposit.confirm_deactivate': 'Confirm deactivate this payment method?', 'deposit.lang_zh': 'Chinese', 'deposit.lang_en': 'English', 'deposit.lang_ms': 'Malay', 'deposit.multilingual_hint': 'Set display names for each language. Leave blank to use default.', 'nav.open_menu': 'Open menu', 'nav.close_menu': 'Close menu', 'breadcrumb.settlement': 'Settlement', 'breadcrumb.match_edit': 'Edit match', 'breadcrumb.match_markets': 'Markets', 'breadcrumb.outright_edit': 'Edit outright', 'role.admin': 'Administrator', 'role.super_admin': 'Super admin', 'role.match_admin': 'Match admin', 'role.finance_admin': 'Finance admin', 'role.support': 'Support', 'role.agent': 'Agent', 'role.tier1_agent': 'Tier-1 Agent', 'role.tier2_agent': 'Tier-2 Agent', 'logout': 'Logout', 'lang': 'Language', 'portal.admin': 'Admin Console', 'portal.agent': 'Agent Console', 'common.all': 'All', 'common.search': 'Search', 'common.refresh': 'Refresh', 'common.reset': 'Reset', 'common.edit': 'Edit', 'common.yes': 'Yes', 'common.no': 'No', 'common.delete': 'Delete', 'common.cancel': 'Cancel', 'common.confirm': 'OK', 'common.retry': 'Retry', 'common.status': 'Status', 'user.status.ACTIVE': 'Active', 'user.status.SUSPENDED': 'Suspended', 'user.status.DISABLED': 'Disabled', 'common.type': 'Type', 'common.keyword': 'Keyword', 'common.actions': 'Actions', 'common.seq': 'No.', 'common.more': 'More', 'common.loading': 'Loading…', 'common.no_data': 'No data', 'common.yesterday': 'Yesterday', 'common.vs_yesterday': 'vs yesterday', 'common.people': 'users', 'common.bets_unit': 'bets', 'common.matches_unit': 'matches', 'common.frozen': 'Frozen', 'common.used': 'Used', 'common.platform_direct': 'Platform direct', 'common.updated_at': 'Updated', 'common.enable': 'Enable', 'common.disable': 'Disable', 'common.show_player': 'Show player', 'common.hide_player': 'Hide player', 'dash.title': 'Overview', 'dash.desc': 'Platform overview', 'dash.board_title': 'Overview', 'dash.board_hint': 'Trends and distribution at a glance', 'dash.kpi_bet_count': "Today's bet count", 'dash.kpi_stake': "Today's stake", 'dash.kpi_payout': "Today's payout", 'dash.kpi_ggr': "Today's GGR", 'dash.kpi_users': 'Players / Agents', 'dash.kpi_new_players': '{n} new today', 'dash.kpi_pending': 'Pending settlement', 'dash.kpi_pending_sub': '{bets} bets · {matches} matches', 'dash.load_error_hint': 'Could not load overview data. Check your connection and try again.', 'dash.kpi_wallet': 'Player balance', 'dash.kpi_credit': 'Agent credit', 'dash.trend_caption': 'Last 7 days (amount lines + bet bars)', 'dash.chart_stake': 'Stake', 'dash.chart_payout': 'Payout', 'dash.chart_ggr': 'GGR', 'dash.chart_bet_count': 'Bet count', 'dash.axis_amount': 'Amount', 'dash.axis_count': 'Count', 'dash.count_suffix': 'bets', 'dash.chart_tooltip': '{b}: {c} ({d}%)', 'dash.pie_empty': 'N/A', 'dash.pie_matches': 'Matches', 'dash.pie_bets': "Today's bets", 'dash.pie_users': 'Users', 'dash.match_draft': 'Draft', 'dash.match_published': 'Published', 'dash.match_closed': 'Closed', 'dash.match_pending_settle': 'Pending settlement', 'dash.match_settled': 'Settled', 'dash.user_active': 'Active players', 'dash.user_online': 'Online now', 'dash.players_online': 'Online now', 'dash.players_online_hint': 'Active within ~2 min', 'dash.user_suspended': 'Suspended', 'dash.user_direct': 'Direct', 'dash.user_agents': 'Agents', 'dash.section_matches_hint': 'Betting performance and match distribution', 'dash.section_match_ops_hint': 'Match status and pending work', 'dash.trend_bet_count_caption': '7-day bet volume trend', 'dash.section_players_hint': 'Players, agents, and wallet summary', 'dash.kpi_match_total': 'Total matches', 'dash.kpi_match_total_sub': 'Draft {draft} · Published {published}', 'dash.kpi_match_closed': 'Closed', 'dash.kpi_match_closed_sub': '{n} cancelled', 'dash.kpi_match_settled': 'Settled matches', 'dash.kpi_match_settled_sub': 'Matches fully settled', 'dash.kpi_agents_active': 'Active agents', 'dash.kpi_agents_active_sub': '{suspended} suspended players', 'dash.recent_players': 'Recent sign-ups', 'dash.recent_bets': 'Recent bets', 'dash.col_parent': 'Parent', 'dash.col_bet_no': 'Bet No.', 'dash.col_stake': 'Stake', 'dash.col_placed_at': 'Placed at', 'page.users.title': 'Players', 'page.users.desc': 'Create players, balances, stakes, top-ups, and status', 'page.agents.title': 'Agents', 'page.agents.desc': 'Tier-1 agents, credit limits, players, and usage', 'nav.matches.fixtures': 'Fixtures', 'nav.matches.outrights': 'Outright odds', 'nav.matches.market_templates': 'Market templates', 'nav.matches.audit_logs': 'Match logs', 'page.matches.title': 'Matches', 'page.matches.desc': 'Edit/delete drafts; adjust kickoff and featured when published; unpublish while unsettled', 'page.bets.title': 'Bets', 'page.bets.desc': 'Filter and paginate all bets with leg details', 'page.cashback.title': 'Cashback', 'page.cashback.desc': 'Generate and issue cashback by period', 'page.audit.title': 'Audit Log', 'page.audit.desc': 'Non-catalog admin actions: users, wallet, settlement, etc.', 'page.matches_audit.title': 'Match Logs', 'page.matches_audit.desc': 'Leagues, fixtures, markets, odds, and outright operations', 'page.settlement.title': 'Settlement', 'page.agent_dash.title': 'Agent overview', 'page.agent_dash.desc': 'Downline performance at a glance', 'agent_dash.load_error_hint': 'Could not load overview. Check your network or sign in again.', 'agent_dash.board_hint': 'Trends and distribution for your downline', 'agent_dash.kpi_players': 'Direct players / Sub-agents', 'agent_dash.kpi_pending_sub': '{bets} pending bets', 'agent_dash.pie_credit': 'Credit usage', 'agent_dash.pie_players': 'Direct players', 'agent_dash.credit_available': 'Available', 'agent_dash.credit_used': 'Used', 'agent_dash.liability_direct': 'Player balance', 'agent_dash.liability_child': 'Sub-agent exposure', 'page.agent_players.title': 'My players', 'page.agent_players.desc': 'Players under your account', 'page.agent_sub.title': 'Tier-2 agents', 'page.agent_sub.desc': 'Manage tier-2 agents and credit allocation', 'page.agent_bets.title': 'Bet search', 'page.agent_bets.desc': 'All bets from downstream players', 'agent.credit_limit': 'Credit limit', 'agent.credit_total': 'Total limit', 'agent.credit_used': 'Used credit', 'agent.credit_occupied': 'In use', 'agent.direct_players': 'Direct players', 'agent.player_count': 'Players', 'agent.today_stake': "Today's stake", 'agent.currency_cny': 'CNY', 'bet.status.PENDING': 'Pending', 'bet.status.WON': 'Won', 'bet.status.LOST': 'Lost', 'bet.status.VOID': 'Void', 'bet.status.REFUNDED': 'Refunded', 'bet.type.SINGLE': 'Single', 'bet.type.PARLAY': 'Parlay', 'bet.settlement.PENDING': 'Pending', 'bet.settlement.SETTLED': 'Settled', 'bet.settlement.VOID': 'Void', 'bet.result.WON': 'Won', 'bet.result.LOST': 'Lost', 'bet.result.VOID': 'Void', 'bet.result.PUSH': 'Push', 'bet.result.HALF_WON': 'Half won', 'bet.result.HALF_LOST': 'Half lost', 'match.status.DRAFT': 'Draft', 'match.status.PUBLISHED': 'Published', 'match.status.CLOSED': 'Closed', 'match.status.SETTLED': 'Settled', 'match.status.PENDING_SETTLEMENT': 'Pending settlement', 'match.filter.has_bets': 'Show Placed Bets Only', 'match.sort.default': 'Default Order', 'match.sort.bet_count': 'By Bet Count', 'match.sort.total_stake': 'By Stake Amount', // 列表页/弹窗文案通过 bundles/en-US 动态平载,不在此处静态 spread }; const ms: Record = { 'login.title': 'Konsol Admin', 'login.username': 'Nama pengguna', 'login.password': 'Kata laluan', 'login.submit': 'Log masuk', 'login.username_ph': 'Masukkan nama pengguna', 'login.password_ph': 'Masukkan kata laluan', 'login.err_captcha': 'Captcha salah, cuba lagi', 'login.err_failed': 'Log masuk gagal. Semak nama pengguna dan kata laluan', 'login.err_quick': 'Log masuk pantas gagal', 'login.quick_label': 'Log masuk pantas (debug)', 'login.quick_admin': 'Admin', 'login.quick_agent': 'Ejen peringkat 1', 'login.quick_agent2': 'Ejen peringkat 2', 'login.quick_match_admin': 'Pentadbir perlawanan', 'login.quick_finance_admin': 'Pentadbir kewangan', 'login.quick_support': 'Sokongan', 'staff.create_btn': 'Cipta akaun kakitangan', 'staff.col.role': 'Peranan', 'staff.col.last_login': 'Log masuk terakhir', 'staff.dialog.create': 'Cipta akaun kakitangan', 'staff.dialog.edit': 'Edit akaun kakitangan', 'staff.field.visible_menus': 'Kebenaran Menu', 'login.captcha_ph': 'Captcha', 'login.captcha_refresh': 'Klik untuk muat semula', 'nav.dashboard': 'Gambaran', 'nav.dashboard.matches': 'Gambaran perlawanan', 'nav.dashboard.players': 'Gambaran pemain', 'nav.invites': 'Jemputan', 'nav.users': 'Pemain', 'nav.agents': 'Ejen', 'nav.agents_players': 'Ejen & Pemain', 'nav.matches': 'Perlawanan', 'nav.outrights': 'Juara', 'nav.bets': 'Pertaruhan', 'nav.credit_transactions': 'Lejar kredit', 'nav.finance_logs': 'Lejar kewangan', 'nav.cashback': 'Rebat', 'nav.contents': 'Kandungan awam', 'nav.audit': 'Log audit', 'nav.smoke_tests': 'Ujian asap', 'nav.media': 'Perpustakaan Media', 'nav.payment_methods': 'Kaedah Pembayaran', 'nav.deposit_orders': 'Semakan Deposit', 'nav.deposit_manage': 'Urus Deposit', 'nav.staff': 'Akaun kakitangan', 'nav.players': 'Pemain saya', 'nav.subAgents': 'Ejen peringkat 2', 'nav.myBets': 'Carian pertaruhan', 'deposit.payment_methods_title': 'Kaedah Pembayaran', 'deposit.deposit_orders_title': 'Semakan Deposit', 'deposit.all_status': 'Semua Status', 'deposit.all_types': 'Semua Jenis', 'deposit.status_pending': 'Menunggu', 'deposit.status_approved': 'Diluluskan', 'deposit.status_rejected': 'Ditolak', 'deposit.search_player_ph': 'Cari pemain...', 'deposit.pending_badge': '{n} menunggu', 'deposit.order_no': 'No. Pesanan', 'deposit.player': 'Pemain', 'deposit.amount': 'Jumlah', 'deposit.screenshot': 'Tangkapan skrin', 'deposit.approved_amount': 'Jml Diluluskan', 'deposit.reviewer': 'Pengulas', 'deposit.time': 'Masa', 'deposit.approve': 'Luluskan', 'deposit.reject': 'Tolak', 'deposit.approve_title': 'Luluskan Deposit', 'deposit.reject_title': 'Tolak Deposit', 'deposit.submitted_amount': 'Jumlah Dihantar', 'deposit.approved_amount_label': 'Jumlah Diluluskan (laraskan jika perlu)', 'deposit.remark_label': 'Catatan (pilihan)', 'deposit.confirm_approve': 'Sahkan Luluskan', 'deposit.approve_check_hint': 'Semak jumlah pindahan dalam tangkapan skrin sepadan dengan jumlah diluluskan di bawah sebelum hantar.', 'deposit.confirm_approve_message': 'Akan meluluskan {amount}. Sahkan ia sepadan dengan tangkapan skrin; baki pemain akan dikreditkan.', 'deposit.confirm_reject': 'Sahkan Tolak', 'deposit.reject_reason_label': 'Sebab Penolakan *', 'deposit.reject_reason_ph': 'Masukkan sebab penolakan...', 'deposit.reason_required': 'Sila masukkan sebab penolakan', 'deposit.revoke': 'Tarik balik', 'deposit.confirm_revoke': 'Pertaruhan menunggu dalam 5 minit selepas kelulusan akan dibatalkan, baki dikembalikan, dan pesanan kembali menunggu. Teruskan?', 'deposit.reopen_review': 'Semak semula', 'deposit.confirm_reopen': 'Pesanan kembali menunggu untuk lulus atau tolak. Teruskan?', 'deposit.delete': 'Padam', 'deposit.confirm_delete': '[Rekod sahaja] Padam rekod pesanan dan tangkapan skrin. Teruskan?', 'deposit.delete_failed': 'Gagal memadam', 'deposit.prev': 'Sebelum', 'deposit.next': 'Seterus', 'deposit.audit_history': 'Sejarah semakan', 'deposit.audit_action': 'Tindakan', 'deposit.audit_actor': 'Pengendali', 'deposit.audit_time': 'Masa', 'deposit.audit_remark': 'Catatan', 'deposit.audit_submitted': 'Dihantar', 'deposit.audit_approved': 'Diluluskan', 'deposit.audit_rejected': 'Ditolak', 'deposit.audit_revoked': 'Kelulusan dibatalkan', 'deposit.audit_reopened': 'Dibuka semula', 'deposit.audit_deleted': 'Dipadam', 'deposit.audit_empty': 'Tiada sejarah semakan', 'deposit.add_method': '+ Tambah', 'deposit.display_name': 'Nama Paparan', 'deposit.details': 'Butiran', 'deposit.sort': 'Isih', 'deposit.active': 'Aktif', 'deposit.show_player': 'Papar Pemain', 'deposit.edit_method': 'Edit Kaedah Pembayaran', 'deposit.create_method': 'Cipta Kaedah Pembayaran', 'deposit.bank_name': 'Nama Bank', 'deposit.account_holder': 'Pemegang Akaun', 'deposit.account_number': 'Nombor Akaun', 'deposit.usdt_address': 'Alamat USDT', 'deposit.qr_code': 'Kod QR', 'deposit.sort_order': 'Susunan Isih', 'deposit.show_on_player': 'Papar kepada Pemain', 'deposit.save': 'Simpan', 'deposit.confirm_deactivate': 'Sahkan nyahaktifkan kaedah pembayaran ini?', 'deposit.lang_zh': 'Cina', 'deposit.lang_en': 'Inggeris', 'deposit.lang_ms': 'Melayu', 'deposit.multilingual_hint': 'Tetapkan nama paparan untuk setiap bahasa. Kosongkan untuk guna nilai lalai.', 'nav.open_menu': 'Buka menu', 'nav.close_menu': 'Tutup menu', 'breadcrumb.settlement': 'Penyelesaian', 'breadcrumb.match_edit': 'Edit perlawanan', 'breadcrumb.match_markets': 'Pasaran', 'breadcrumb.outright_edit': 'Edit juara', 'role.admin': 'Pentadbir', 'role.super_admin': 'Super pentadbir', 'role.match_admin': 'Pentadbir perlawanan', 'role.finance_admin': 'Pentadbir kewangan', 'role.support': 'Sokongan', 'role.agent': 'Ejen', 'role.tier1_agent': 'Ejen Peringkat 1', 'role.tier2_agent': 'Ejen Peringkat 2', 'logout': 'Log keluar', 'lang': 'Bahasa', 'portal.admin': 'Pengurusan Admin', 'portal.agent': 'Pengurusan Ejen', 'common.all': 'Semua', 'common.search': 'Cari', 'common.refresh': 'Muat semula', 'common.reset': 'Set semula', 'common.edit': 'Edit', 'common.yes': 'Ya', 'common.no': 'Tidak', 'common.delete': 'Padam', 'common.cancel': 'Batal', 'common.confirm': 'OK', 'common.retry': 'Cuba lagi', 'common.status': 'Status', 'user.status.ACTIVE': 'Aktif', 'user.status.SUSPENDED': 'Digantung', 'user.status.DISABLED': 'Dinyahaktifkan', 'common.type': 'Jenis', 'common.keyword': 'Kata kunci', 'common.actions': 'Tindakan', 'common.seq': 'No.', 'common.more': 'Lagi', 'common.loading': 'Memuatkan…', 'common.no_data': 'Tiada data', 'common.yesterday': 'Semalam', 'common.vs_yesterday': 'berbanding semalam', 'common.people': 'pengguna', 'common.bets_unit': 'pertaruhan', 'common.matches_unit': 'perlawanan', 'common.frozen': 'Dibekukan', 'common.used': 'Digunakan', 'common.platform_direct': 'Terus platform', 'common.updated_at': 'Dikemas kini', 'common.enable': 'Aktifkan', 'common.disable': 'Nyahaktif', 'common.show_player': 'Papar pemain', 'common.hide_player': 'Sembunyikan pemain', 'dash.title': 'Gambaran', 'dash.desc': 'Gambaran keseluruhan platform', 'dash.board_title': 'Gambaran', 'dash.board_hint': 'Trend dan taburan sepintas lalu', 'dash.kpi_bet_count': 'Bilangan pertaruhan hari ini', 'dash.kpi_stake': 'Stake hari ini', 'dash.kpi_payout': 'Bayaran hari ini', 'dash.kpi_ggr': 'GGR hari ini', 'dash.kpi_users': 'Pemain / Ejen', 'dash.kpi_new_players': '{n} baharu hari ini', 'dash.kpi_pending': 'Menunggu penyelesaian', 'dash.kpi_pending_sub': '{bets} pertaruhan · {matches} perlawanan', 'dash.load_error_hint': 'Tidak dapat memuatkan data gambaran. Semak sambungan dan cuba lagi.', 'dash.kpi_wallet': 'Baki pemain', 'dash.kpi_credit': 'Kredit ejen', 'dash.trend_caption': '7 hari lepas (garis jumlah + palang pertaruhan)', 'dash.chart_stake': 'Stake', 'dash.chart_payout': 'Bayaran', 'dash.chart_ggr': 'GGR', 'dash.chart_bet_count': 'Bilangan pertaruhan', 'dash.axis_amount': 'Jumlah', 'dash.axis_count': 'Kiraan', 'dash.count_suffix': 'pertaruhan', 'dash.chart_tooltip': '{b}: {c} ({d}%)', 'dash.pie_empty': 'Tiada', 'dash.pie_matches': 'Perlawanan', 'dash.pie_bets': 'Pertaruhan hari ini', 'dash.pie_users': 'Pengguna', 'dash.match_draft': 'Draf', 'dash.match_published': 'Diterbitkan', 'dash.match_closed': 'Ditutup', 'dash.match_pending_settle': 'Menunggu penyelesaian', 'dash.match_settled': 'Diselesaikan', 'dash.user_active': 'Pemain aktif', 'dash.user_online': 'Dalam talian', 'dash.players_online': 'Dalam talian', 'dash.players_online_hint': 'Aktif dalam ~2 min', 'dash.user_suspended': 'Digantung', 'dash.user_direct': 'Terus', 'dash.user_agents': 'Ejen', 'dash.section_matches_hint': 'Prestasi pertaruhan dan taburan perlawanan', 'dash.section_match_ops_hint': 'Status perlawanan dan tugasan', 'dash.trend_bet_count_caption': 'Trend bilangan pertaruhan 7 hari', 'dash.section_players_hint': 'Pemain, ejen, dan ringkasan dana', 'dash.kpi_match_total': 'Jumlah perlawanan', 'dash.kpi_match_total_sub': 'Draf {draft} · Diterbitkan {published}', 'dash.kpi_match_closed': 'Ditutup', 'dash.kpi_match_closed_sub': '{n} dibatalkan', 'dash.kpi_match_settled': 'Perlawanan diselesaikan', 'dash.kpi_match_settled_sub': 'Perlawanan yang telah diselesaikan', 'dash.kpi_agents_active': 'Ejen aktif', 'dash.kpi_agents_active_sub': '{suspended} pemain digantung', 'dash.recent_players': 'Pendaftaran terkini', 'dash.recent_bets': 'Pertaruhan terkini', 'dash.col_parent': 'Induk', 'dash.col_bet_no': 'No. pertaruhan', 'dash.col_stake': 'Stake', 'dash.col_placed_at': 'Masa pertaruhan', 'page.users.title': 'Pemain', 'page.users.desc': 'Cipta pemain, baki, stake, tambah baki dan status', 'page.agents.title': 'Ejen', 'page.agents.desc': 'Ejen peringkat 1, had kredit, pemain dan penggunaan', 'nav.matches.fixtures': 'Konfigurasi perlawanan', 'nav.matches.outrights': 'Odds juara', 'nav.matches.market_templates': 'Templat pasaran', 'nav.matches.audit_logs': 'Log perlawanan', 'page.matches.title': 'Perlawanan', 'page.matches.desc': 'Edit/padam draf; laraskan masa mula bila diterbitkan; nyahterbit jika belum selesai', 'page.bets.title': 'Pertaruhan', 'page.bets.desc': 'Tapis dan halaman semua pertaruhan dengan butiran pilihan', 'page.cashback.title': 'Rebat', 'page.cashback.desc': 'Jana dan keluarkan rebat mengikut tempoh', 'page.audit.title': 'Log audit', 'page.audit.desc': 'Tindakan bukan katalog: pengguna, dompet, penyelesaian, dll.', 'page.matches_audit.title': 'Log perlawanan', 'page.matches_audit.desc': 'Liga, perlawanan, pasaran, odds, dan outright', 'page.settlement.title': 'Penyelesaian', 'page.agent_dash.title': 'Gambaran ejen', 'page.agent_dash.desc': 'Prestasi downline sepintas lalu', 'agent_dash.load_error_hint': 'Gagal memuatkan gambaran. Semak rangkaian atau log masuk semula.', 'agent_dash.board_hint': 'Trend dan taburan downline anda', 'agent_dash.kpi_players': 'Pemain terus / Ejen bawahan', 'agent_dash.kpi_pending_sub': '{bets} pertaruhan belum selesai', 'agent_dash.pie_credit': 'Penggunaan kredit', 'agent_dash.pie_players': 'Pemain terus', 'agent_dash.credit_available': 'Tersedia', 'agent_dash.credit_used': 'Digunakan', 'agent_dash.liability_direct': 'Baki pemain', 'agent_dash.liability_child': 'Pendedahan ejen bawahan', 'page.agent_players.title': 'Pemain saya', 'page.agent_players.desc': 'Pemain di bawah akaun anda', 'page.agent_sub.title': 'Ejen peringkat 2', 'page.agent_sub.desc': 'Urus ejen peringkat 2 dan peruntukan kredit', 'page.agent_bets.title': 'Carian pertaruhan', 'page.agent_bets.desc': 'Semua pertaruhan pemain hiliran', 'agent.credit_limit': 'Had kredit', 'agent.credit_total': 'Jumlah had', 'agent.credit_used': 'Kredit digunakan', 'agent.credit_occupied': 'Sedang digunakan', 'agent.direct_players': 'Pemain terus', 'agent.player_count': 'Pemain', 'agent.today_stake': 'Stake hari ini', 'agent.currency_cny': 'CNY', 'bet.status.PENDING': 'Menunggu', 'bet.status.WON': 'Menang', 'bet.status.LOST': 'Kalah', 'bet.status.VOID': 'Batal', 'bet.status.REFUNDED': 'Dibayar balik', 'bet.type.SINGLE': 'Tunggal', 'bet.type.PARLAY': 'Berganda', 'bet.settlement.PENDING': 'Menunggu', 'bet.settlement.SETTLED': 'Diselesaikan', 'bet.settlement.VOID': 'Batal', 'bet.result.WON': 'Menang', 'bet.result.LOST': 'Kalah', 'bet.result.VOID': 'Batal', 'bet.result.PUSH': 'Seri', 'bet.result.HALF_WON': 'Separuh menang', 'bet.result.HALF_LOST': 'Separuh kalah', 'match.status.DRAFT': 'Draf', 'match.status.PUBLISHED': 'Diterbitkan', 'match.status.CLOSED': 'Ditutup', 'match.status.SETTLED': 'Diselesaikan', 'match.status.PENDING_SETTLEMENT': 'Menunggu penyelesaian', 'match.filter.has_bets': 'Tunjukkan Pertaruhan Sahaja', 'match.sort.default': 'Susunan Lalai', 'match.sort.bet_count': 'Ikut Bil. Pertaruhan', 'match.sort.total_stake': 'Ikut Jumlah Taruhan', // 列表页/弹窗文案通过 bundles/ms-MY 动态平载,不在此处静态 spread }; /** vue-i18n 文案表(扁平 key,与原先 adminT 一致) */ export const adminMessages: Record> = { 'zh-CN': zh, 'en-US': en, 'ms-MY': ms, };