Files
thebet365/apps/player/src/main.ts
Mars efff7c27e6 feat(admin,api,player): 结算预览分页、统计图表与返水限额
完善结算计算与预览 API(含后端分页),加强管理端结算/返水/权限,并优化玩家端投注单与队徽展示。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-05 13:54:33 +08:00

707 lines
32 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.
import { createApp } from 'vue';
import { createPinia } from 'pinia';
import { createI18n } from 'vue-i18n';
import App from './App.vue';
import router from './router/index.ts';
import './styles.css';
const i18n = createI18n({
legacy: false,
locale: localStorage.getItem('locale') || 'zh-CN',
fallbackLocale: ['en-US', 'zh-CN'],
messages: {
'zh-CN': {
nav: { home: '主页', bet: '投注', bet_history: '历史投注', wallet: '账单', profile: '我的' },
home: {
hot_matches: '热门赛事',
no_matches: '暂无赛事',
announcement_badge: '公告',
announcement_default:
'欢迎光临 TheBet365 · 足球赛事火热进行中 · 理性投注,量力而行',
banner_prev: '上一张',
banner_next: '下一张',
banner_slide: '第 {n} 张',
banner_fallback: 'Banner',
},
history: {
league_default: '足球',
stake: '投注 Stake',
return: '回报 Return',
est_return: '预计回报 Est. Return',
parlay_title: '串关 · {n} 场',
parlay_league: '串关 Parlay',
empty: '暂无投注记录',
no_more: '没有更多记录了',
status_won: 'WON 赢',
status_pending: 'PENDING 待定',
status_lost: 'LOST 输',
status_push: 'PUSH 走盘',
},
auth: {
login: '登录',
logout: '退出登录',
username: '账号',
password: '密码',
captcha_placeholder: 'Captcha',
captcha_refresh: '点击换一张',
captcha_wrong: '验证码错误',
},
wallet: {
balance: '余额',
cash_balance: '现金余额',
card_holder: '持卡人',
unsettled: '未结算',
available: '可用',
no_records: '暂无账单记录',
tx_deposit: '人工存款',
tx_withdraw: '人工提款',
tx_adjust: '人工调整',
tx_bet_freeze: '投注冻结',
tx_bet_deduct: '投注扣款',
tx_bet_win: '投注派彩',
tx_bet_lose: '投注结算',
tx_bet_push: '投注退水',
tx_bet_refund: '投注退款',
tx_bet_void: '投注撤销',
tx_cashback: '返水发放',
tx_resettle: '重新结算',
},
bet: {
bet_slip: '投注单',
stake: '投注金额',
place_bet: '确认下注',
place_bet_short: '下注',
parlay: '串关',
tab_matches: '球赛',
tab_outright: '优胜冠军',
tab_parlay: '串关投注',
tab_today: '今日',
tab_early: '早盘',
loading: '加载中…',
no_matches: '暂无赛事',
outright_coming: '优胜冠军玩法即将上线',
outright_enter_stake: '请输入投注金额',
outright_balance: '结余',
outright_stake_amount: '投注额度',
outright_success: '下注成功',
outright_done: '完毕',
outright_bet_failed: '下注失败',
outright_insufficient: '余额不足',
stake_label: '投注金额',
stake_placeholder: '输入金额',
stake_max: '全部',
placing: '提交中…',
no_outright: '暂无冠军盘口',
no_outright_hint: '请使用玩家账号登录;若仍无数据,请联系管理员在后台发布优胜冠军赛事',
outright_events_summary: '共 {events} 个冠军赛事 · {teams} 支队伍',
outright_teams_count: '{n} 支队伍',
outright_load_failed: '冠军盘加载失败,请检查网络或稍后重试',
outright_player_only: '请使用玩家账号登录后查看',
outright_shown_count: '已显示 {shown} / {total} 队',
outright_load_more: '加载更多',
cancel: '取消',
parlay_title: '串关投注',
parlay_guide_title: '串关怎么投?',
parlay_guide_help: '查看串关说明',
parlay_desc: '选择 25 场赛前赛事组合串关2 串 1 至 5 串 1。赔率相乘不含滚球、冠军盘与四分盘让球/大小。',
parlay_guide_1: '在列表中点击各场赔率,选中项显示金边;再点同一项可取消',
parlay_guide_2: '须选 25 项(可同场多项);冠军盘与四分盘让球/大小不可选',
parlay_guide_3: '选好后点底部「确认下单」打开投注单,填写金额并提交',
parlay_max_legs: '串关最多 5 项',
parlay_block_outright: '冠军盘不可串关',
parlay_block_quarter: '四分盘让球/大小不可串关',
parlay_block_not_allowed: '该玩法不可串关',
parlay_filter_all: '全部',
parlay_empty: '暂无可用串关赛事',
parlay_same_match: '同一场比赛不能串关',
parlay_same_match_singles: '已选 {n} 项,将分 {n} 笔单关下单',
parlay_confirm_singles: '确认下单({n}笔单关)',
parlay_confirm_parlay: '确认串关下单',
parlay_need_more: '请至少选择 2 项进行串关',
back: '返回',
refresh: '刷新',
download: '下载',
reward_active: '奖励生效中!',
market_closed: '暂未开盘',
expand_market: '展开玩法',
collapse_market: '收起玩法',
market_cs: '波胆',
market_ht_cs: '上半场波胆',
market_sh_cs: '下半场波胆',
market_ft_handicap: '全场 让球',
market_ft_ou: '全场 大小',
market_ft_1x2: '全场 独赢盘',
market_ft_oe: '全场 单/双',
market_ht_handicap: '半场 让球',
market_ht_ou: '半场 大小',
market_ht_1x2: '半场 独赢盘',
parlay_sel_home: '主',
parlay_sel_away: '客',
parlay_sel_draw: '和',
parlay_sel_over: '大',
parlay_sel_under: '小',
parlay_sel_odd: '单',
parlay_sel_even: '双',
cs_other_home: '主胜其它比分',
cs_other_draw: '和局其它比分',
cs_other_away: '客胜其它比分',
col_home: '主场',
col_draw: '平',
col_away: '客场',
cs_stake_required: '请至少在一个比分输入投注金额',
cs_confirm_title: '确认波胆下注',
cs_confirm_count: '共 {n} 注',
cs_confirm_total_stake: '总投注额',
cs_place_success: '下注成功',
cs_place_failed: '下注失败',
guide_title: '怎么下注?',
guide_help_aria: '查看下注说明',
guide_got_it: '知道了',
guide_flow_normal: '让球 / 大小 / 独赢等',
guide_normal_1: '点「展开玩法」打开赔率',
guide_normal_2: '点一项赔率选中(金边),再点同一项可取消',
guide_normal_3: '选中后在当前玩法底部点「确认下单」填金额并提交',
guide_flow_cs: '波胆(猜比分)',
guide_cs_1: '点「展开玩法」在表格里填各比分金额',
guide_cs_2: '填好金额后点该玩法底部「确认下单」,核对后提交',
guide_cs_3: '可一次填多个比分,会拆成多笔注单',
guide_flow_parlay: '串关25 场)',
guide_parlay_1: '本页为单关/波胆。串关:底部导航点「投注」,在页面顶部切换到「串关投注」,选 25 场不同赛事后在投注单提交。',
guide_rules_link: '完整规则见「我的」→ 投注规则。',
mode_cs_tag: '本页直接下注',
mode_slip_tag: '加入投注单',
cs_confirm_btn: '确认下注',
cs_confirm_cell: '确认下单',
cs_panel_hint: '在下方表格填写金额,填好后点上方「确认下注」',
slip_panel_hint: '点赔率加入投注单,选好后用页面底部入口打开投注单',
slip_pick_hint: '点选项加入投注单;金边表示已选,再点一次可取消',
picked_tag: '已选',
pick_added: '已加入投注单',
pick_removed: '已从投注单移除',
slip_bar_ready: '已选一项',
slip_bar_go: '投注单',
cs_top_hint: '① 在比分格填金额 ② 点上方「确认下注」',
slip_empty_hint: '点击赔率加入投注单',
slip_remove: '移除',
slip_singles_hint: '共 {n} 笔单关(串关请到「投注」页顶部「串关投注」)',
slip_stake_per_bet: '每笔投注金额',
slip_est_return: '预计总返还',
slip_parlay_odds: '组合赔率 {odds}',
place_success: '下注成功',
place_failed: '下注失败',
},
profile: {
edit: '修改资料',
language: '语言',
avatar: '选择头像',
avatar_change: '修改头像',
avatar_confirm: '确定',
section_contact: '联系方式',
section_account: '账号信息',
change_password: '修改密码',
show_password: '查看',
hide_password: '隐藏',
password_unavailable: '••••••••',
password_unavailable_hint: '密码不可查看,如需重置请联系客服',
section_password: '修改密码(可选)',
avatar_hint: '从内置球员中选择头像',
avatar_search: '搜索球员、位置或国家',
avatar_empty: '未找到匹配球员',
phone: '手机号',
email: '邮箱',
phone_placeholder: '请输入手机号',
email_placeholder: '请输入邮箱',
save: '保存',
password_optional_hint: '不修改密码可留空',
old_password_placeholder: '留空则不修改',
new_password_placeholder: '留空则不修改',
confirm_password_placeholder: '留空则不修改',
old_password: '当前密码',
new_password: '新密码',
confirm_password: '确认新密码',
back: '返回',
saved: '联系方式已保存',
save_failed: '保存失败',
password_changed: '密码已更新',
password_failed: '密码修改失败',
password_mismatch: '两次新密码不一致',
password_incomplete: '修改密码需填写当前密码、新密码及确认密码',
username_placeholder: '登录账号名',
username_readonly_hint: '账号名称由后台管理,如需修改请联系客服',
username_updated: '账号名称已更新',
password_disabled: '当前账号不允许自行修改密码,请联系客服',
rules_title: '投注规则',
rules_p1: '本平台第一版仅支持足球赛前盘不含滚球、Cash Out、改单及系统串关。',
rules_p2: '串关为 2 串 1 至 5 串 1同场可多选冠军盘、四分盘让球/大小不可进入串关。',
rules_p3: '赛果由平台根据官方录入的半场/全场比分结算,结算预览经确认后入账。',
rules_p4: '若本说明与后台公告冲突,以最新公告及实际盘口规则为准。',
rules_p5: '操作步骤:进入任意赛事详情,点右上角「?」查看玩法说明。',
},
},
'en-US': {
nav: { home: 'Home', bet: 'Bet', bet_history: 'History', wallet: 'Wallet', profile: 'Profile' },
home: {
hot_matches: 'Hot matches',
no_matches: 'No matches',
announcement_badge: 'Notice',
announcement_default:
'Welcome to TheBet365 · Football events are live · Bet responsibly',
banner_prev: 'Previous slide',
banner_next: 'Next slide',
banner_slide: 'Slide {n}',
banner_fallback: 'Banner',
},
history: {
league_default: 'Football',
stake: 'Stake 投注',
return: 'Return 回报',
est_return: 'Est. Return 预计回报',
parlay_title: 'Parlay · {n} legs',
parlay_league: 'Parlay 串关',
empty: 'No bets yet',
no_more: 'No more bets',
status_won: 'WON 赢',
status_pending: 'PENDING 待定',
status_lost: 'LOST 输',
status_push: 'PUSH 走盘',
},
auth: {
login: 'Login',
logout: 'Log out',
username: 'Username',
password: 'Password',
captcha_placeholder: 'Captcha',
captcha_refresh: 'Click to refresh',
captcha_wrong: 'Invalid captcha',
},
wallet: {
balance: 'Balance',
cash_balance: 'Cash Balance',
card_holder: 'Cardholder',
unsettled: 'Unsettled',
available: 'Available',
no_records: 'No records',
tx_deposit: 'Deposit',
tx_withdraw: 'Withdrawal',
tx_adjust: 'Manual Adjust',
tx_bet_freeze: 'Bet Frozen',
tx_bet_deduct: 'Bet Deducted',
tx_bet_win: 'Bet Payout',
tx_bet_lose: 'Bet Settled',
tx_bet_push: 'Bet Push',
tx_bet_refund: 'Bet Refund',
tx_bet_void: 'Bet Voided',
tx_cashback: 'Cashback Distribution',
tx_resettle: 'Resettlement',
},
bet: {
bet_slip: 'Bet Slip',
stake: 'Stake',
place_bet: 'Place Bet',
place_bet_short: 'Bet',
parlay: 'Parlay',
tab_matches: 'Matches',
tab_outright: 'Outright',
tab_parlay: 'Parlay',
tab_today: 'Today',
tab_early: 'Early',
loading: 'Loading…',
no_matches: 'No matches',
outright_coming: 'Outright markets coming soon',
outright_enter_stake: 'Enter stake',
outright_balance: 'Balance',
outright_stake_amount: 'Stake',
outright_success: 'Bet placed',
outright_done: 'Done',
outright_bet_failed: 'Bet failed',
outright_insufficient: 'Insufficient balance',
stake_label: 'Stake',
stake_placeholder: 'Enter amount',
stake_max: 'Max',
placing: 'Placing…',
no_outright: 'No outright markets',
no_outright_hint: 'Sign in as a player. If empty, ask admin to publish outright events.',
outright_events_summary: '{events} outright events · {teams} teams',
outright_teams_count: '{n} teams',
outright_load_failed: 'Failed to load outright markets',
outright_player_only: 'Player login required',
outright_shown_count: '{shown} / {total} teams shown',
outright_load_more: 'Load more',
cancel: 'Cancel',
parlay_title: 'Parlay',
parlay_guide_title: 'How to parlay',
parlay_guide_help: 'Parlay help',
parlay_desc: 'Combine 25 pre-match legs (2-fold to 5-fold). No live, outright, or quarter-ball HDP/O-U in parlay.',
parlay_guide_1: 'Tap odds in the list; selected cells show a gold border. Tap again to remove',
parlay_guide_2: 'Pick 25 legs (same match allowed). No outright or quarter-ball HDP/O-U',
parlay_guide_3: 'Tap Confirm order at the bottom, enter stake in the bet slip, and submit',
parlay_max_legs: 'Parlay allows up to 5 legs',
parlay_block_outright: 'Outright cannot be parlayed',
parlay_block_quarter: 'Quarter-ball HDP/O-U cannot be parlayed',
parlay_block_not_allowed: 'This market cannot be parlayed',
parlay_filter_all: 'All',
parlay_empty: 'No matches available for parlay betting',
parlay_same_match: 'Cannot parlay selections from the same match',
parlay_same_match_singles: '{n} selection(s) → {n} separate single bet(s)',
parlay_confirm_singles: 'Place {n} single bet(s)',
parlay_confirm_parlay: 'Place parlay',
parlay_need_more: 'Select at least 2 legs for parlay',
back: 'Back',
refresh: 'Refresh',
download: 'Download',
reward_active: 'Reward active!',
market_closed: 'Not open',
expand_market: 'Expand',
collapse_market: 'Collapse',
market_cs: 'Correct Score',
market_ht_cs: '1H Correct Score',
market_sh_cs: '2H Correct Score',
market_ft_handicap: 'FT Handicap',
market_ft_ou: 'FT O/U',
market_ft_1x2: 'FT 1X2',
market_ft_oe: 'FT Odd/Even',
market_ht_handicap: 'HT Handicap',
market_ht_ou: 'HT O/U',
market_ht_1x2: 'HT 1X2',
parlay_sel_home: 'H',
parlay_sel_away: 'A',
parlay_sel_draw: 'D',
parlay_sel_over: 'O',
parlay_sel_under: 'U',
parlay_sel_odd: 'Odd',
parlay_sel_even: 'Even',
cs_other_home: 'Home win (other score)',
cs_other_draw: 'Draw (other score)',
cs_other_away: 'Away win (other score)',
col_home: 'Home',
col_draw: 'Draw',
col_away: 'Away',
cs_stake_required: 'Enter stake on at least one score',
cs_confirm_title: 'Confirm correct score bets',
cs_confirm_count: '{n} bet(s)',
cs_confirm_total_stake: 'Total stake',
cs_place_success: 'Bet placed',
cs_place_failed: 'Bet failed',
guide_title: 'How to bet',
guide_help_aria: 'Betting help',
guide_got_it: 'Got it',
guide_flow_normal: 'Handicap / O-U / 1X2 etc.',
guide_normal_1: 'Tap Expand to show odds',
guide_normal_2: 'Tap one odds to select (gold border); tap again to cancel',
guide_normal_3: 'Tap Place order under that market, enter stake and confirm',
guide_flow_cs: 'Correct score',
guide_cs_1: 'Expand and enter stake on each score',
guide_cs_2: 'Enter stakes, then tap Place order at the bottom of that market',
guide_cs_3: 'Multiple scores = multiple bets',
guide_flow_parlay: 'Parlay (25 legs)',
guide_parlay_1: 'This page is for singles and correct score. Parlay: tap Bet in the bottom nav, then the Parlay tab at the top of that page, pick 25 different matches, and submit from the bet slip.',
guide_rules_link: 'Full rules: Profile → Betting Rules.',
mode_cs_tag: 'Bet here',
mode_slip_tag: 'Add to slip',
cs_confirm_btn: 'Confirm bet',
cs_confirm_cell: 'Place order',
cs_panel_hint: 'Enter stakes below, then tap Confirm bet above',
slip_panel_hint: 'Tap odds to add; use the bottom bar when done',
slip_pick_hint: 'Tap to add/remove from slip; gold border = selected',
picked_tag: 'Selected',
pick_added: 'Added to bet slip',
pick_removed: 'Removed from bet slip',
slip_bar_ready: '1 selection',
slip_bar_go: 'Bet slip',
cs_top_hint: '① Enter stake ② Tap Confirm bet above',
slip_empty_hint: 'Tap odds to add to bet slip',
slip_remove: 'Remove',
slip_singles_hint: '{n} single bet(s). Parlay: Bet page → top Parlay tab.',
slip_stake_per_bet: 'Stake per bet',
slip_est_return: 'Est. total return',
slip_parlay_odds: 'Combined odds {odds}',
place_success: 'Bet placed',
place_failed: 'Bet failed',
},
profile: {
edit: 'Edit Profile',
language: 'Language',
avatar: 'Avatar',
avatar_change: 'Change avatar',
avatar_confirm: 'Confirm',
section_contact: 'Contact',
section_account: 'Account',
change_password: 'Change password',
show_password: 'Show',
hide_password: 'Hide',
password_unavailable: '••••••••',
password_unavailable_hint: 'Password not available; contact support to reset',
section_password: 'Change password (optional)',
avatar_hint: 'Choose from built-in player portraits',
avatar_search: 'Search player, position or country',
avatar_empty: 'No players found',
phone: 'Phone',
email: 'Email',
phone_placeholder: 'Phone number',
email_placeholder: 'Email address',
save: 'Save',
password_optional_hint: 'Leave password fields blank to keep current password',
old_password_placeholder: 'Leave blank to skip',
new_password_placeholder: 'Leave blank to skip',
confirm_password_placeholder: 'Leave blank to skip',
old_password: 'Current password',
new_password: 'New password',
confirm_password: 'Confirm password',
back: 'Back',
saved: 'Contact saved',
save_failed: 'Save failed',
password_changed: 'Password updated',
password_failed: 'Password change failed',
password_mismatch: 'Passwords do not match',
password_incomplete: 'Fill current, new and confirm password to change password',
username_placeholder: 'Login username',
username_readonly_hint: 'Username is managed by admin; contact support to change',
username_updated: 'Username updated',
password_disabled: 'Password change is disabled for this account; contact support',
rules_title: 'Betting Rules',
rules_p1: 'Football pre-match only in v1. No live betting, Cash Out, bet edits, or system parlays.',
rules_p2: 'Parlays: 25 legs, same-match multi-select allowed. Outright and quarter-ball HDP/O-U are excluded.',
rules_p3: 'Results use admin-entered half-time and full-time scores; payouts apply after settlement preview is confirmed.',
rules_p4: 'If this text conflicts with site notices, the latest notice and market rules prevail.',
rules_p5: 'How to bet: open any match, tap the ? icon on the top right.',
},
},
'ms-MY': {
nav: {
home: 'Laman Utama',
bet: 'Pertaruhan',
bet_history: 'Sejarah',
wallet: 'Bil',
profile: 'Profil',
},
home: {
hot_matches: 'Perlawanan popular',
no_matches: 'Tiada perlawanan',
announcement_badge: 'Notis',
announcement_default:
'Selamat datang ke TheBet365 · Perlawanan bola sepak sedang berlangsung · Bertaruh secara bertanggungjawab',
banner_prev: 'Slaid sebelumnya',
banner_next: 'Slaid seterusnya',
banner_slide: 'Slaid {n}',
banner_fallback: 'Banner',
},
history: {
league_default: 'Bola Sepak',
stake: 'Stake',
return: 'Pulangan',
est_return: 'Anggaran pulangan',
parlay_title: 'Berganda · {n} perlawanan',
parlay_league: 'Berganda',
empty: 'Tiada rekod pertaruhan',
no_more: 'Tiada lagi rekod',
status_won: 'MENANG',
status_pending: 'MENUNGGU',
status_lost: 'KALAH',
status_push: 'SERI',
},
auth: {
login: 'Log Masuk',
logout: 'Log Keluar',
username: 'Nama Pengguna',
password: 'Kata Laluan',
captcha_placeholder: 'Captcha',
captcha_refresh: 'Klik untuk muat semula',
captcha_wrong: 'Kod pengesahan salah',
},
wallet: {
balance: 'Baki',
cash_balance: 'Baki Tunai',
card_holder: 'Pemegang',
unsettled: 'Belum Selesai',
available: 'Tersedia',
no_records: 'Tiada rekod',
tx_deposit: 'Deposit',
tx_withdraw: 'Pengeluaran',
tx_adjust: 'Pelarasan Manual',
tx_bet_freeze: 'Pertaruhan Ditahan',
tx_bet_deduct: 'Pertaruhan Ditolak',
tx_bet_win: 'Bayaran Pertaruhan',
tx_bet_lose: 'Pertaruhan Selesai',
tx_bet_push: 'Pertaruhan Seri',
tx_bet_refund: 'Bayaran Balik',
tx_bet_void: 'Pertaruhan Dibatalkan',
tx_cashback: 'Pembayaran Cashback',
tx_resettle: 'Penyelesaian Semula',
},
bet: {
bet_slip: 'Slip Pertaruhan',
stake: 'Jumlah',
place_bet: 'Letak Pertaruhan',
place_bet_short: 'Pertaruhan',
parlay: 'Berganda',
tab_matches: 'Perlawanan',
tab_outright: 'Juara',
tab_parlay: 'Berganda',
tab_today: 'Hari Ini',
tab_early: 'Awal',
loading: 'Memuatkan…',
no_matches: 'Tiada perlawanan',
outright_coming: 'Pasaran juara akan datang',
outright_enter_stake: 'Masukkan jumlah',
outright_balance: 'Baki',
outright_stake_amount: 'Jumlah pertaruhan',
outright_success: 'Pertaruhan berjaya',
outright_done: 'Selesai',
outright_bet_failed: 'Pertaruhan gagal',
outright_insufficient: 'Baki tidak mencukupi',
stake_label: 'Jumlah',
stake_placeholder: 'Masukkan jumlah',
stake_max: 'Maks',
placing: 'Memproses…',
no_outright: 'Tiada pasaran juara',
no_outright_hint: 'Log masuk sebagai pemain. Jika kosong, minta admin terbitkan acara juara.',
outright_events_summary: '{events} acara juara · {teams} pasukan',
outright_teams_count: '{n} pasukan',
outright_load_failed: 'Gagal memuatkan pasaran juara',
outright_player_only: 'Log masuk pemain diperlukan',
outright_shown_count: '{shown} / {total} pasukan dipaparkan',
outright_load_more: 'Muat lagi',
cancel: 'Batal',
parlay_title: 'Pertaruhan Berganda',
parlay_guide_title: 'Cara parlay',
parlay_guide_help: 'Bantuan parlay',
parlay_desc: 'Gabung 25 perlawanan pra-perlawanan (2 hingga 5 liputan). Tiada live, outright atau suku bola HDP/O-U.',
parlay_guide_1: 'Ketik odds dalam senarai; pilihan dipilih ada sempadan emas. Ketik lagi untuk batal',
parlay_guide_2: 'Pilih 25 pilihan (boleh perlawanan sama). Tiada outright atau suku bola HDP/O-U',
parlay_guide_3: 'Ketik Sahkan pesanan di bawah, isi pegangan dalam slip, dan hantar',
parlay_max_legs: 'Maksimum 5 pilihan parlay',
parlay_block_outright: 'Outright tidak boleh parlay',
parlay_block_quarter: 'HDP/O-U suku bola tidak boleh parlay',
parlay_block_not_allowed: 'Pasaran ini tidak boleh parlay',
parlay_filter_all: 'Semua',
parlay_empty: 'Tiada perlawanan untuk pertaruhan berganda',
parlay_same_match: 'Perlawanan sama tidak boleh berganda',
parlay_same_match_singles: '{n} pilihan → {n} pertaruhan tunggal berasingan',
parlay_confirm_singles: 'Sahkan {n} pertaruhan tunggal',
parlay_confirm_parlay: 'Sahkan parlay',
parlay_need_more: 'Pilih sekurang-kurangnya 2 pilihan',
back: 'Kembali',
refresh: 'Muat semula',
download: 'Muat turun',
reward_active: 'Ganjaran aktif!',
market_closed: 'Belum dibuka',
expand_market: 'Kembang',
collapse_market: 'Tutup',
market_cs: 'Skor Tepat',
market_ht_cs: 'Skor Tepat PB1',
market_sh_cs: 'Skor Tepat PB2',
market_ft_handicap: 'Handicap Penuh',
market_ft_ou: 'Atas/Bawah Penuh',
market_ft_1x2: '1X2 Penuh',
market_ft_oe: 'Ganjil/Genap Penuh',
market_ht_handicap: 'Handicap Separuh',
market_ht_ou: 'Atas/Bawah Separuh',
market_ht_1x2: '1X2 Separuh',
parlay_sel_home: 'R',
parlay_sel_away: 'P',
parlay_sel_draw: 'S',
parlay_sel_over: 'Atas',
parlay_sel_under: 'Bwh',
parlay_sel_odd: 'G',
parlay_sel_even: 'Gn',
cs_other_home: 'Menang rumah (skor lain)',
cs_other_draw: 'Seri (skor lain)',
cs_other_away: 'Menang pelawat (skor lain)',
col_home: 'Home',
col_draw: 'Seri',
col_away: 'Away',
cs_stake_required: 'Masukkan jumlah pada sekurang-kurangnya satu skor',
cs_confirm_title: 'Sahkan pertaruhan skor tepat',
cs_confirm_count: '{n} pertaruhan',
cs_confirm_total_stake: 'Jumlah pertaruhan',
cs_place_success: 'Pertaruhan berjaya',
cs_place_failed: 'Pertaruhan gagal',
guide_title: 'Cara pertaruhan',
guide_help_aria: 'Bantuan pertaruhan',
guide_got_it: 'Faham',
guide_flow_normal: 'Handicap / O-U / 1X2',
guide_normal_1: 'Ketik Kembang untuk lihat odds',
guide_normal_2: 'Pilih satu odds (sisi emas); ketik lagi untuk batal',
guide_normal_3: 'Ketik Sahkan pesanan di bawah pasaran, isi jumlah dan sahkan',
guide_flow_cs: 'Skor tepat',
guide_cs_1: 'Kembang dan isi jumlah setiap skor',
guide_cs_2: 'Isi jumlah, kemudian Sahkan pesanan di bawah pasaran itu',
guide_cs_3: 'Beberapa skor = beberapa pertaruhan',
guide_flow_parlay: 'Parlay (25 perlawanan)',
guide_parlay_1: 'Halaman ini untuk tunggal dan skor tepat. Parlay: ketik Pertaruhan di nav bawah, kemudian tab Parlay di bahagian atas halaman, pilih 25 perlawanan berbeza, hantar dari slip.',
guide_rules_link: 'Peraturan penuh: Profil → Peraturan Pertaruhan.',
mode_cs_tag: 'Pertaruhan di sini',
mode_slip_tag: 'Tambah ke slip',
cs_confirm_btn: 'Sahkan pertaruhan',
cs_confirm_cell: 'Sahkan pesanan',
cs_panel_hint: 'Isi jumlah di bawah, kemudian Sahkan di atas',
slip_panel_hint: 'Ketik odds; guna bar bawah apabila siap',
slip_pick_hint: 'Ketik untuk tambah/buang; sisi emas = dipilih',
picked_tag: 'Dipilih',
pick_added: 'Ditambah ke slip',
pick_removed: 'Dikeluarkan dari slip',
slip_bar_ready: '1 pilihan',
slip_bar_go: 'Buka slip',
cs_top_hint: '① Isi jumlah ② Ketik Sahkan di atas',
slip_empty_hint: 'Ketik odds untuk tambah ke slip',
slip_remove: 'Buang',
slip_singles_hint: '{n} pertaruhan tunggal. Parlay: halaman Pertaruhan → tab Berganda di atas.',
slip_stake_per_bet: 'Jumlah setiap pertaruhan',
slip_est_return: 'Anggaran pulangan',
slip_parlay_odds: 'Odds gabungan {odds}',
place_success: 'Pertaruhan berjaya',
place_failed: 'Pertaruhan gagal',
},
profile: {
edit: 'Edit Profil',
language: 'Bahasa',
avatar: 'Avatar',
avatar_change: 'Tukar avatar',
avatar_confirm: 'Sahkan',
section_contact: 'Maklumat hubungan',
section_account: 'Akaun',
change_password: 'Tukar kata laluan',
show_password: 'Lihat',
hide_password: 'Sembunyi',
password_unavailable: '••••••••',
password_unavailable_hint: 'Kata laluan tidak tersedia; hubungi sokongan',
section_password: 'Tukar kata laluan (pilihan)',
avatar_hint: 'Pilih dari potret pemain terbina',
avatar_search: 'Cari pemain, posisi atau negara',
avatar_empty: 'Tiada pemain dijumpai',
phone: 'Telefon',
email: 'E-mel',
phone_placeholder: 'Nombor telefon',
email_placeholder: 'Alamat e-mel',
save: 'Simpan',
password_optional_hint: 'Biarkan kosong jika tidak mahu tukar kata laluan',
old_password_placeholder: 'Biarkan kosong untuk langkau',
new_password_placeholder: 'Biarkan kosong untuk langkau',
confirm_password_placeholder: 'Biarkan kosong untuk langkau',
old_password: 'Kata laluan semasa',
new_password: 'Kata laluan baharu',
confirm_password: 'Sahkan kata laluan',
back: 'Kembali',
saved: 'Hubungan disimpan',
save_failed: 'Gagal simpan',
password_changed: 'Kata laluan dikemas kini',
password_failed: 'Gagal tukar kata laluan',
password_mismatch: 'Kata laluan tidak sepadan',
password_incomplete: 'Isi kata laluan semasa, baharu dan pengesahan untuk menukar',
username_placeholder: 'Nama log masuk',
username_readonly_hint: 'Nama akaun diurus admin; hubungi sokongan untuk ubah',
username_updated: 'Nama akaun dikemas kini',
password_disabled: 'Akaun ini tidak dibenarkan tukar kata laluan; hubungi sokongan',
rules_title: 'Peraturan Pertaruhan',
rules_p1: 'Versi pertama: hanya bola sepak pra-perlawanan. Tiada live, Cash Out, edit pertaruhan atau parlay sistem.',
rules_p2: 'Parlay 25 pilihan, boleh pilih berbilang dari perlawanan sama. Outright dan suku bola HDP/O-U tidak boleh parlay.',
rules_p3: 'Keputusan berdasarkan skor separuh masa/penuh yang dimasukkan admin; bayaran selepas pratonton disahkan.',
rules_p4: 'Jika bercanggah dengan notis laman, ikut notis terkini dan peraturan pasaran.',
rules_p5: 'Langkah operasi: buka butiran perlawanan, ketik ikon ? di atas kanan.',
},
},
},
});
createApp(App).use(createPinia()).use(router).use(i18n).mount('#app');