feat(player): 注册账号、登录双模式与移动端性能优化
注册必填 7-32 位账号,手机号区号/本地号分存;登录默认账号模式并支持切换手机号登录;Player i18n 拆包与赛事接口优化。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
407
apps/player/src/i18n/en-US.ts
Normal file
407
apps/player/src/i18n/en-US.ts
Normal file
@@ -0,0 +1,407 @@
|
||||
export default {
|
||||
common: {
|
||||
pull_refresh: 'Pull to refresh',
|
||||
release_refresh: 'Release to refresh',
|
||||
refreshing: 'Refreshing…',
|
||||
loading_more: 'Loading more…',
|
||||
no_more: 'No more',
|
||||
load_failed: 'Failed to load',
|
||||
retry: 'Retry',
|
||||
},
|
||||
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',
|
||||
odds: 'Odds',
|
||||
ft: 'FT',
|
||||
ht: 'HT',
|
||||
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',
|
||||
back: 'Back',
|
||||
not_found: 'Bet not found',
|
||||
my_pick: 'My pick',
|
||||
my_bets: 'My bets',
|
||||
legs: 'Parlay legs',
|
||||
summary: 'Summary',
|
||||
bet_no: 'Bet ID',
|
||||
awaiting_result: 'Awaiting result…',
|
||||
filter_all: 'All',
|
||||
filter_won: 'Won',
|
||||
filter_lost: 'Lost',
|
||||
filter_pending: 'Pending',
|
||||
filter_push: 'Push',
|
||||
stats_total: 'Total',
|
||||
stats_won: 'Won',
|
||||
stats_lost: 'Lost',
|
||||
stats_pending: 'Pending',
|
||||
stats_push: 'Push',
|
||||
stats_stake: 'Total Stake',
|
||||
stats_return: 'Total Return',
|
||||
cashbacked: 'Cashbacked',
|
||||
},
|
||||
auth:
|
||||
{ login: 'Login',
|
||||
register: 'Create Account',
|
||||
logout: 'Log out',
|
||||
username: 'Username',
|
||||
password: 'Password',
|
||||
invite_code: 'Invitation Code',
|
||||
optional: 'Optional',
|
||||
captcha_placeholder: 'Code',
|
||||
captcha_refresh: 'Click to refresh',
|
||||
captcha_wrong: 'Incorrect captcha code',
|
||||
slide_to_verify: 'Slide to verify',
|
||||
click_to_verify: 'Click to verify',
|
||||
verified: 'Verified',
|
||||
login_required: 'Login Required',
|
||||
login_hint: 'Log in to place bets and access more features',
|
||||
go_login: 'Go to login',
|
||||
go_register: 'No account? Register now',
|
||||
have_account: 'Already have an account? Log in',
|
||||
register_btn: 'Register',
|
||||
register_failed: 'Registration failed, please try again',
|
||||
continue_browsing: 'Skip login',
|
||||
username_placeholder: 'Enter username',
|
||||
username_register_placeholder: '7-32 letters or digits',
|
||||
username_required: 'Username is required',
|
||||
username_format_invalid: 'Username must be 7-32 letters or digits',
|
||||
login_account: 'Phone / Username',
|
||||
login_by_phone: 'Log in with phone',
|
||||
login_by_account: 'Log in with username',
|
||||
login_account_placeholder: 'Phone number or username',
|
||||
login_username_placeholder: 'Phone number or username',
|
||||
confirm_password: 'Confirm password',
|
||||
password_mismatch: 'Passwords do not match',
|
||||
password_placeholder: 'Enter password',
|
||||
login_btn: 'Log In',
|
||||
login_failed: 'Login failed, please try again',
|
||||
phone: 'Phone',
|
||||
phone_placeholder: 'Enter phone number',
|
||||
phone_local_placeholder: 'Enter phone number',
|
||||
phone_required: 'Phone number is required',
|
||||
phone_invalid: 'Invalid phone number format',
|
||||
phone_country_unsupported: 'This country or region is not supported',
|
||||
sms_code: 'SMS Code',
|
||||
sms_code_placeholder: '6-digit code',
|
||||
sms_code_required: 'Please enter the SMS code',
|
||||
sms_required: 'Please request an SMS code first',
|
||||
send_sms: 'Get Code',
|
||||
resend_sms: 'Retry in {sec}s',
|
||||
country_search: 'Search country or code',
|
||||
country_not_found: 'No matching country',
|
||||
},
|
||||
support: {
|
||||
short: 'Support',
|
||||
title: 'Customer Support',
|
||||
open: 'Open customer support',
|
||||
close: 'Close',
|
||||
url_pending: 'Support URL is not configured yet.',
|
||||
},
|
||||
wallet: {
|
||||
balance: 'Balance',
|
||||
cash_balance: 'Cash Balance',
|
||||
card_holder: 'Cardholder',
|
||||
unsettled: 'Unsettled',
|
||||
available: 'Available',
|
||||
no_records: 'No records',
|
||||
tx_deposit: 'Deposit',
|
||||
tx_admin_deposit: 'Admin top-up',
|
||||
tx_agent_deposit: 'Agent top-up',
|
||||
tx_player_deposit: 'Self deposit',
|
||||
tx_withdraw: 'Withdrawal',
|
||||
tx_admin_withdraw: 'Admin withdraw',
|
||||
tx_agent_withdraw: 'Agent withdraw',
|
||||
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 credit',
|
||||
tx_resettle: 'Resettlement',
|
||||
summary_bet: 'Bet {betNo}',
|
||||
summary_opening_bonus: 'Opening bonus',
|
||||
stats_income: 'Income',
|
||||
stats_expense: 'Expense',
|
||||
stats_net: 'Net',
|
||||
stats_cashback: 'Cashback',
|
||||
filter_all: 'All',
|
||||
filter_deposit: 'Deposit',
|
||||
filter_withdraw: 'Withdraw',
|
||||
filter_bet: 'Bet',
|
||||
filter_cashback: 'Cashback',
|
||||
view_all: 'View all transactions',
|
||||
detail_summary: 'Details',
|
||||
detail_amount: 'Amount',
|
||||
detail_balance_before: 'Balance Before',
|
||||
detail_balance_after: 'Balance After',
|
||||
detail_frozen_before: 'Frozen Before',
|
||||
detail_frozen_after: 'Frozen After',
|
||||
detail_reference: 'Reference',
|
||||
detail_reference_type: 'Type',
|
||||
detail_reference_id: 'Reference ID',
|
||||
detail_remark: 'Remark',
|
||||
detail_bet_link: 'View Bet',
|
||||
detail_tx_id: 'Transaction ID',
|
||||
detail_not_found: 'Transaction not found',
|
||||
ref_bet: 'Bet',
|
||||
ref_deposit: 'Deposit',
|
||||
ref_withdraw: 'Withdraw',
|
||||
view_cashbacks: 'Cashback details',
|
||||
view_cashbacks_detail: 'View cashback details (period/rate)',
|
||||
cashback_filter_hint: 'This list shows wallet credits; see cashback details for period and rate.',
|
||||
ref_cashback: 'Cashback batch',
|
||||
detail_cashback_link: 'View cashback details',
|
||||
},
|
||||
recharge: {
|
||||
title: 'Recharge',
|
||||
history: 'History',
|
||||
history_title: 'Recharge History',
|
||||
bank_transfer: 'Bank Transfer',
|
||||
bank_name: 'Bank Name',
|
||||
account_holder: 'Account Holder',
|
||||
account_number: 'Account Number',
|
||||
usdt_address: 'USDT Address',
|
||||
amount_label: 'Amount',
|
||||
amount_placeholder: 'Enter recharge amount',
|
||||
screenshot_label: 'Upload Screenshot',
|
||||
upload_hint: 'Click to upload screenshot (max 5MB)',
|
||||
compressing: 'Compressing',
|
||||
submit: 'Submit',
|
||||
submitting: 'Submitting',
|
||||
submitted: 'Recharge Submitted',
|
||||
pending_review: 'Admin is reviewing, please wait',
|
||||
new_recharge: 'New Recharge',
|
||||
no_methods: 'No payment methods available',
|
||||
select_method: 'Please select a payment method',
|
||||
enter_amount: 'Please enter the amount',
|
||||
upload_screenshot: 'Please upload a screenshot',
|
||||
submit_failed: 'Submit failed, please retry',
|
||||
file_must_be_image: 'Please upload an image file',
|
||||
file_too_large: 'File exceeds 10MB',
|
||||
status_pending: 'Processing',
|
||||
status_approved: 'Approved',
|
||||
status_rejected: 'Rejected',
|
||||
no_orders: 'No recharge records',
|
||||
credited: 'Credited',
|
||||
reject_reason: 'Rejection reason',
|
||||
apply_time: 'Apply time',
|
||||
review_time: 'Review time',
|
||||
remark: 'Remark',
|
||||
},
|
||||
cashback: {
|
||||
title: 'Cashback Details',
|
||||
list_title: 'Payout details',
|
||||
total_received: 'Total cashback',
|
||||
record_count: '{n} record(s)',
|
||||
period: 'Period',
|
||||
effective_stake: 'Effective stake',
|
||||
bet_count: '{n} bet(s)',
|
||||
empty: 'No cashback records yet',
|
||||
empty_hint: 'Cashback is issued by the platform after each settlement period.',
|
||||
ledger_hint: 'Matches wallet entries under the Cashback filter; amounts are the same.',
|
||||
},
|
||||
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',
|
||||
show_open_only: 'Open only',
|
||||
show_all_matches: 'Show all',
|
||||
today: 'Today',
|
||||
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 2–5 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 2–5 legs from different matches. 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',
|
||||
match_phase_closed_pending: 'Closed pending',
|
||||
match_phase_settled: 'Settled',
|
||||
view_match: 'View match',
|
||||
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_lbl_handicap: 'Handicap',
|
||||
parlay_lbl_ou: 'O/U',
|
||||
parlay_lbl_1x2: '1X2',
|
||||
parlay_lbl_oe: 'Odd/Even',
|
||||
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',
|
||||
kickoff_time: 'Kickoff: ',
|
||||
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 (2–5 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 2–5 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: 2–5 legs from different matches (one per match). 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.',
|
||||
},
|
||||
} as const;
|
||||
Reference in New Issue
Block a user