This commit is contained in:
Flatlogic Bot 2026-02-09 09:05:22 +00:00
parent 0e573d36f8
commit 6b9829359b
8 changed files with 333 additions and 394 deletions

View File

@ -51,7 +51,7 @@ function updateUI() {
${changeSign}${coin.change.toFixed(2)}% ${changeSign}${coin.change.toFixed(2)}%
</td> </td>
<td class="pe-4 py-4 border-0 text-end"> <td class="pe-4 py-4 border-0 text-end">
<a href="trade.php?symbol=${symbol}" class="btn btn-sm btn-outline-primary rounded-pill px-4 border-opacity-25" style="font-size: 0.75rem;">${getLang() === 'zh' ? '去交易' : 'Trade'}</a> <a href="trade.php?symbol=${symbol}" class="btn btn-sm btn-outline-primary rounded-pill px-4 border-opacity-25" style="font-size: 0.75rem;">${typeof t === 'function' ? t('Go to Trade') : 'Trade'}</a>
</td> </td>
</tr> </tr>
`; `;

View File

@ -1,21 +1,16 @@
-- Migration: User and System Updates -- Migration: User and System Updates
-- Adds UID, KYC fields, and system configuration tables -- Adds UID, KYC fields, and system configuration tables
ALTER TABLE users ADD COLUMN IF NOT EXISTS uid INT(6) ZEROFILL UNIQUE AFTER id; ALTER TABLE users ADD COLUMN uid INT(6) ZEROFILL UNIQUE AFTER id;
ALTER TABLE users ADD COLUMN IF NOT EXISTS real_name VARCHAR(100) AFTER username; ALTER TABLE users ADD COLUMN real_name VARCHAR(100) AFTER username;
ALTER TABLE users ADD COLUMN IF NOT EXISTS id_number VARCHAR(50) AFTER real_name; ALTER TABLE users ADD COLUMN id_number VARCHAR(50) AFTER real_name;
ALTER TABLE users ADD COLUMN IF NOT EXISTS id_front VARCHAR(255) AFTER id_number; ALTER TABLE users ADD COLUMN id_front VARCHAR(255) AFTER id_number;
ALTER TABLE users ADD COLUMN IF NOT EXISTS id_back VARCHAR(255) AFTER id_front; ALTER TABLE users ADD COLUMN id_back VARCHAR(255) AFTER id_front;
ALTER TABLE users ADD COLUMN IF NOT EXISTS id_handheld VARCHAR(255) AFTER id_back; ALTER TABLE users ADD COLUMN id_handheld VARCHAR(255) AFTER id_back;
ALTER TABLE users ADD COLUMN IF NOT EXISTS kyc_status ENUM('none', 'pending', 'approved', 'rejected') DEFAULT 'none' AFTER id_handheld; ALTER TABLE users ADD COLUMN kyc_status ENUM('none', 'pending', 'approved', 'rejected') DEFAULT 'none' AFTER id_handheld;
ALTER TABLE users ADD COLUMN IF NOT EXISTS security_password VARCHAR(255) AFTER password_hash; ALTER TABLE users ADD COLUMN security_password VARCHAR(255) AFTER password_hash;
CREATE TABLE IF NOT EXISTS system_config (
id INT AUTO_INCREMENT PRIMARY KEY,
config_key VARCHAR(100) UNIQUE,
config_value TEXT
);
-- system_config might already exist from 01, but translations doesn't
CREATE TABLE IF NOT EXISTS translations ( CREATE TABLE IF NOT EXISTS translations (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
lang_code VARCHAR(10), lang_code VARCHAR(10),

View File

@ -1,3 +1,6 @@
-- Migration: Chat and Deposits
-- Adds chat support and deposit tracking
CREATE TABLE IF NOT EXISTS chat_messages ( CREATE TABLE IF NOT EXISTS chat_messages (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL, user_id INT NOT NULL,
@ -19,4 +22,4 @@ CREATE TABLE IF NOT EXISTS deposits (
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
); );
ALTER TABLE users ADD COLUMN IF NOT EXISTS uid INT DEFAULT 0; -- Note: uid was already added in migration 03.

View File

@ -0,0 +1,9 @@
-- Migration: Admin Setup
-- Adds a default admin account if not exists
INSERT IGNORE INTO users (username, email, password_hash, is_admin, balance_usdt)
VALUES ('admin', 'admin@example.com', '$2y$10$ogw037RdI4xc57das64Rg.we/M9V.Z3xe7H2VT8eVJJ9t7W6xmZaK', 1, 999999.00);
-- Update all existing users to have a UID if they don't have one (simple sequential)
-- This is a bit tricky in pure SQL without a loop, but we can try setting them to ID
UPDATE users SET uid = id WHERE uid = 0 OR uid IS NULL;

View File

@ -1,4 +1,5 @@
<?php <?php
ob_start();
require_once __DIR__ . '/../db/config.php'; require_once __DIR__ . '/../db/config.php';
session_start(); session_start();
@ -15,9 +16,7 @@ if (!in_array($lang, ['en', 'zh'])) {
} }
$_SESSION['lang'] = $lang; $_SESSION['lang'] = $lang;
function mt($key) { $translations = [
global $lang;
$translations = [
'en' => [ 'en' => [
'Home' => 'Home', 'Spot' => 'Spot', 'Perpetual' => 'Perpetual', 'Markets' => 'Markets', 'Exchange' => 'Exchange', 'Home' => 'Home', 'Spot' => 'Spot', 'Perpetual' => 'Perpetual', 'Markets' => 'Markets', 'Exchange' => 'Exchange',
'Login' => 'Login', 'Register' => 'Register', 'Profile' => 'Profile', 'Logout' => 'Logout', 'Login' => 'Login', 'Register' => 'Register', 'Profile' => 'Profile', 'Logout' => 'Logout',
@ -48,195 +47,199 @@ function mt($key) {
'Contact Support' => 'Contact Support', 'Asset' => 'Asset', '24h Change' => '24h Change', '24h High' => '24h High', 'Action' => 'Action', 'All Markets' => 'All Markets', 'Contact Support' => 'Contact Support', 'Asset' => 'Asset', '24h Change' => '24h Change', '24h High' => '24h High', 'Action' => 'Action', 'All Markets' => 'All Markets',
'Real-time updates from global exchanges' => 'Real-time updates from global exchanges', 'Safe & Secure' => 'Safe & Secure', 'Industry-leading encryption and multi-signature cold storage for your digital assets.' => 'Industry-leading encryption and multi-signature cold storage for your digital assets.', 'Real-time updates from global exchanges' => 'Real-time updates from global exchanges', 'Safe & Secure' => 'Safe & Secure', 'Industry-leading encryption and multi-signature cold storage for your digital assets.' => 'Industry-leading encryption and multi-signature cold storage for your digital assets.',
'Instant Execution' => 'Instant Execution', 'Advanced matching engine processing over 100,000 transactions per second.' => 'Advanced matching engine processing over 100,000 transactions per second.', 'Instant Execution' => 'Instant Execution', 'Advanced matching engine processing over 100,000 transactions per second.' => 'Advanced matching engine processing over 100,000 transactions per second.',
'Verification' => 'Verification', 'Reviewing...' => 'Reviewing...', 'Verified' => 'Verified', 'Unverified' => 'Unverified', 'Pending' => 'Pending', 'Approved' => 'Approved', 'Rejected' => 'Rejected', 'Recharge' => 'Recharge', 'Withdrawal' => 'Withdrawal', 'Funds' => 'Funds',
'Front Side' => 'Front Side', 'Back Side' => 'Back Side', 'Selfie with ID' => 'Selfie with ID', 'Wallet Balance' => 'Wallet Balance', 'Transaction History' => 'Transaction History',
'Change Login Password' => 'Change Login Password', 'Change Trading Password' => 'Change Trading Password', 'Take Profit' => 'Take Profit', 'Stop Loss' => 'Stop Loss', 'Contract' => 'Contract',
'digits' => 'digits', 'Current Password' => 'Current Password', 'New Password' => 'New Password', 'Confirm New Password' => 'Confirm New Password', 'Receipt uploaded successfully. Waiting for admin approval.' => 'Receipt uploaded successfully. Waiting for admin approval.',
'Save Changes' => 'Save Changes', 'Cancel' => 'Cancel', 'Account Overview' => 'Account Overview', 'Total Balance' => 'Total Balance', 'Asset Overview' => 'Asset Overview', 'KYC Verification' => 'KYC Verification', 'Personal Center' => 'Personal Center',
'Recent Activities' => 'Recent Activities', 'Time' => 'Time', 'Account Login' => 'Account Login', 'Assets Overview' => 'Assets Overview', 'Verification Status' => 'Verification Status', 'Security Settings' => 'Security Settings', 'Language' => 'Language',
'Total Net Value' => 'Total Net Value', 'Yesterday Profit/Loss' => 'Yesterday Profit/Loss', 'Security Settings' => 'Security Settings', 'Update' => 'Update', 'Change Password' => 'Change Password', 'Not Verified' => 'Not Verified', 'Pending Review' => 'Pending Review', 'Approved' => 'Approved', 'Rejected' => 'Rejected',
'Last updated' => 'Last updated', 'Recently' => 'Recently', 'Required for withdrawals' => 'Required for withdrawals', 'Link' => 'Link', 'Withdrawal Address' => 'Withdrawal Address', 'Enter amount' => 'Enter amount', 'Available' => 'Available', 'Network' => 'Network', 'Fee' => 'Fee', 'Submit Withdrawal' => 'Submit Withdrawal',
'Enter your real name' => 'Enter your real name', 'Enter ID/Passport Number' => 'Enter ID/Passport Number', 'Change' => 'Change', 'Recharge Crypto' => 'Recharge Crypto', 'Select Currency' => 'Select Currency', 'Deposit Address' => 'Deposit Address', 'Transfer to this address and upload screenshot.' => 'Transfer to this address and upload screenshot.',
'Name' => 'Name', 'Price' => 'Price', 'Trade' => 'Trade', 'View All' => 'View All', 'Market Trends' => 'Market Trends', 'Stay updated with real-time price changes' => 'Stay updated with real-time price changes', 'Confirm' => 'Confirm', 'Cancel' => 'Cancel', 'Please login to trade' => 'Please login to trade', 'Contract Trading' => 'Contract Trading',
'Get Started' => 'Get Started', 'View Markets' => 'View Markets', 'The World\'s Leading' => 'The World\'s Leading', 'Crypto Exchange' => 'Crypto Exchange', 'Long' => 'Long', 'Short' => 'Short', 'Leverage' => 'Leverage', 'Open Position' => 'Open Position', 'Close Position' => 'Close Position',
'Secure & Trusted' => 'Secure & Trusted', 'Institutional Grade' => 'Institutional Grade', 'Deep Liquidity' => 'Deep Liquidity', 'Global Access' => 'Global Access', 'Market' => 'Market', 'Limit' => 'Limit', 'Price' => 'Price', 'Amount' => 'Amount', 'Balance' => 'Balance',
'Perpetual Contracts' => 'Perpetual Contracts', '100x Leverage' => '100x Leverage', 'Join the Elite' => 'Join the Elite', 'Trust BITCrypto' => 'Trust BITCrypto', 'Orders' => 'Orders', 'Positions' => 'Positions', 'History' => 'History', 'Sign In' => 'Sign In', 'Sign Up' => 'Sign Up',
'Funds' => 'Funds', 'Recharge' => 'Recharge', 'Withdrawal' => 'Withdrawal', 'Stop-Loss' => 'Stop-Loss', 'Take-Profit' => 'Take-Profit', 'Search' => 'Search', 'Search Pairs' => 'Search Pairs', 'Open Orders' => 'Open Orders', 'Order History' => 'Order History', 'Positions' => 'Positions', 'No open orders' => 'No open orders', 'Lots' => 'Lots', 'Cancel' => 'Cancel', 'Order submitted successfully!' => 'Order submitted successfully!', 'Please enter a valid amount.' => 'Please enter a valid amount.', 'Username' => 'Username', 'Password' => 'Password', 'Sign In' => 'Sign In', 'Sign Up' => 'Sign Up', 'Email' => 'Email', 'Already have an account?' => 'Already have an account?', 'Don\'t have an account?' => 'Don\'t have an account?', 'Confirm Password' => 'Confirm Password', 'Create Account' => 'Create Account', 'Forgot Password?' => 'Forgot Password?', 'Don\'t have an account?' => 'Don\'t have an account?', 'Already have an account?' => 'Already have an account?',
'Trade Bitcoin, Ethereum, and hundreds of other cryptocurrencies with the lowest fees in the industry.' => 'Trade Bitcoin, Ethereum, and hundreds of other cryptocurrencies with the lowest fees in the industry.', 'Username' => 'Username', 'Email' => 'Email', 'Password' => 'Password', 'Confirm Password' => 'Confirm Password',
'Why Choose BITCrypto?' => 'Why Choose BITCrypto?', 'Experience the most professional trading environment with institutional-grade security and liquidity.' => 'Experience the most professional trading environment with institutional-grade security and liquidity.', 'Trade Anytime, Anywhere' => 'Trade Anytime, Anywhere', 'Experience the full power of our exchange on your mobile device. Trade spot and futures with ease.' => 'Experience the full power of our exchange on your mobile device. Trade spot and futures with ease.',
'Multi-sig Cold Storage' => 'Multi-sig Cold Storage', 'DDoS Protection' => 'DDoS Protection', '2FA Security' => '2FA Security',
'Ultra-low Latency' => 'Ultra-low Latency', 'High Liquidity' => 'High Liquidity', 'Zero Slippage' => 'Zero Slippage',
'Multi-language Support' => 'Multi-language Support', 'Live Chat' => 'Live Chat', 'Fast Response' => 'Fast Response',
'Trade Anywhere, Anytime' => 'Trade Anywhere, Anytime', 'Experience the full power of our exchange on your mobile device. Trade spot and futures with ease.' => 'Experience the full power of our exchange on your mobile device. Trade spot and futures with ease.',
'Download on the' => 'Download on the', 'Get it on' => 'Get it on', 'Scan to download' => 'Scan to download', 'Compatible with iOS and Android devices.' => 'Compatible with iOS and Android devices.', 'Download on the' => 'Download on the', 'Get it on' => 'Get it on', 'Scan to download' => 'Scan to download', 'Compatible with iOS and Android devices.' => 'Compatible with iOS and Android devices.',
'Global Trust' => 'Global Trust', 'Our Global Partners' => 'Our Global Partners', 'Smart Contracts' => 'Smart Contracts', 'Primary Network' => 'Primary Network', 'Security Audit' => 'Security Audit', 'Financial Partner' => 'Financial Partner', 'Strategic Advisor' => 'Strategic Advisor', 'Global Trust' => 'Global Trust', 'Our Global Partners' => 'Our Global Partners', 'Smart Contracts' => 'Smart Contracts', 'Primary Network' => 'Primary Network', 'Security Audit' => 'Security Audit', 'Financial Partner' => 'Financial Partner', 'Strategic Advisor' => 'Strategic Advisor',
'Please fill in all fields.' => 'Please fill in all fields.', 'Invalid username or password.' => 'Invalid username or password.', 'Login failed.' => 'Login failed.', 'Login to BITCrypto' => 'Login to BITCrypto', 'Enter username' => 'Enter username', 'Enter password' => 'Enter password', 'Remember me' => 'Remember me', 'Forgot password?' => 'Forgot password?', 'Passwords do not match.' => 'Passwords do not match.', 'You must agree to the terms and privacy policy.' => 'You must agree to the terms and privacy policy.', 'Username already exists.' => 'Username already exists.', 'Username / Email' => 'Username / Email', 'Repeat password' => 'Repeat password', 'I have read and agree to the' => 'I have read and agree to the', 'Join the world\'s leading crypto exchange' => 'Join the world\'s leading crypto exchange', 'Search assets...' => 'Search assets...', 'No assets found' => 'No assets found', 'Pair' => 'Pair', 'Side' => 'Side', 'Filled' => 'Filled', 'Markets' => 'Markets', 'Trade' => 'Trade', 'Spot Trading' => 'Spot Trading', 'Contract Trading' => 'Contract Trading', 'Download App' => 'Download App', 'Register' => 'Register',
'Receipt uploaded successfully. Waiting for admin approval.' => 'Receipt uploaded successfully. Waiting for admin approval.', 'Enter username' => 'Enter username', 'Enter password' => 'Enter password', 'Remember me' => 'Remember me', 'Forgot password?' => 'Forgot password?',
'Deposit Assets' => 'Deposit Assets', 'Choose your preferred method to fund your account' => 'Choose your preferred method to fund your account', 'Please fill in all fields.' => 'Please fill in all fields.', 'Invalid username or password.' => 'Invalid username or password.', 'Login failed.' => 'Login failed.',
'Crypto Deposit' => 'Crypto Deposit', 'Fiat Deposit' => 'Fiat Deposit', 'Instant' => 'Instant', 'Regional Support' => 'Regional Support', 'Login to BITCrypto' => 'Login to BITCrypto',
'Select Currency' => 'Select Currency', 'Network' => 'Network', 'Deposit Address' => 'Deposit Address', 'Scan QR code to deposit' => 'Scan QR code to deposit', 'Asset Overview' => 'Asset Overview', 'Total Balance' => 'Total Balance', 'Available Balance' => 'Available Balance', 'Locked Balance' => 'Locked Balance',
'Deposit Amount' => 'Deposit Amount', 'Upload screenshot of your transaction' => 'Upload screenshot of your transaction', 'Submit Deposit' => 'Submit Deposit', 'Verify Now' => 'Verify Now', 'Personal Information' => 'Personal Information', 'Security Center' => 'Security Center',
'Select Fiat Currency' => 'Select Fiat Currency', 'We will match you with a local merchant to facilitate your deposit in your local currency.' => 'We will match you with a local merchant to facilitate your deposit in your local currency.', 'Change' => 'Change', 'Transaction History' => 'Transaction History', 'Date' => 'Date', 'Type' => 'Type', 'Amount' => 'Amount', 'Status' => 'Status',
'Est. Arrival' => 'Est. Arrival', 'Processing Time: 10-30 mins' => 'Processing Time: 10-30 mins', 'Exchange Rate' => 'Exchange Rate', 'Why Choose BITCrypto?' => 'Why Choose BITCrypto?', 'Experience the most professional trading environment with institutional-grade security and liquidity.' => 'Experience the most professional trading environment with institutional-grade security and liquidity.',
'Service Fee' => 'Service Fee', 'Free' => 'Free', 'Confirm Deposit' => 'Confirm Deposit', 'Secure Payment' => 'Secure Payment', 'Safe & Secure' => 'Safe & Secure', 'Industry-leading encryption and multi-signature cold storage for your digital assets.' => 'Industry-leading encryption and multi-signature cold storage for your digital assets.',
'All transactions are encrypted' => 'All transactions are encrypted', 'Fast Arrival' => 'Fast Arrival', 'Most deposits arrive in mins' => 'Most deposits arrive in mins',
'Address copied to clipboard' => 'Address copied to clipboard', 'Withdrawal Address' => 'Withdrawal Address', 'Notes' => 'Notes',
'Withdrawals are processed within 10-30 minutes.' => 'Withdrawals are processed within 10-30 minutes.',
'Minimum withdrawal amount is 10 USDT.' => 'Minimum withdrawal amount is 10 USDT.',
'Ensure the receiving address supports the TRC20 network.' => 'Ensure the receiving address supports the TRC20 network.',
'Current password incorrect.' => 'Current password incorrect.',
'Identity verification submitted and is under review.' => 'Identity verification submitted and is under review.',
'New passwords do not match.' => 'New passwords do not match.', 'Password must be at least 6 characters.' => 'Password must be at least 6 characters.',
'Password updated successfully.' => 'Password updated successfully.', 'Update failed' => 'Update failed',
'Login Password' => 'Login Password', '2FA Authentication' => '2FA Authentication', 'Google Authenticator' => 'Google Authenticator',
'Your identity documents are being verified by our team.' => 'Your identity documents are being verified by our team.',
'Submitted Details' => 'Submitted Details', 'Verified Identity' => 'Verified Identity',
'Your account is fully verified for all features.' => 'Your account is fully verified for all features.',
'Current Trading Password' => 'Current Trading Password', 'New Trading Password' => 'New Trading Password',
'Confirm New Trading Password' => 'Confirm New Trading Password', 'Withdrawal request submitted successfully.' => 'Withdrawal request submitted successfully.',
'Insufficient balance.' => 'Insufficient balance.', 'Why Choose BITCrypto?' => 'Why Choose BITCrypto?',
'Experience the most professional trading environment with institutional-grade security and liquidity.' => 'Experience the most professional trading environment with institutional-grade security and liquidity.',
'Multi-sig Cold Storage' => 'Multi-sig Cold Storage', 'DDoS Protection' => 'DDoS Protection', '2FA Security' => '2FA Security', 'Multi-sig Cold Storage' => 'Multi-sig Cold Storage', 'DDoS Protection' => 'DDoS Protection', '2FA Security' => '2FA Security',
'Instant Execution' => 'Instant Execution', 'Advanced matching engine processing over 100,000 transactions per second.' => 'Advanced matching engine processing over 100,000 transactions per second.',
'Ultra-low Latency' => 'Ultra-low Latency', 'High Liquidity' => 'High Liquidity', 'Zero Slippage' => 'Zero Slippage', 'Ultra-low Latency' => 'Ultra-low Latency', 'High Liquidity' => 'High Liquidity', 'Zero Slippage' => 'Zero Slippage',
'24/7 Global Support' => '24/7 Global Support', 'Get help whenever you need it with our around-the-clock professional customer service.' => 'Get help whenever you need it with our around-the-clock professional customer service.',
'Multi-language Support' => 'Multi-language Support', 'Live Chat' => 'Live Chat', 'Fast Response' => 'Fast Response', 'Multi-language Support' => 'Multi-language Support', 'Live Chat' => 'Live Chat', 'Fast Response' => 'Fast Response',
'Trade Anywhere, Anytime' => 'Trade Anywhere, Anytime', 'Experience the full power of our exchange on your mobile device. Trade spot and futures with ease.' => 'Experience the full power of our exchange on your mobile device. Trade spot and futures with ease.', 'Get Started' => 'Get Started', 'View Markets' => 'View Markets', 'Search assets...' => 'Search assets...',
'Download on the' => 'Download on the', 'Get it on' => 'Get it on', 'Scan to download' => 'Scan to download', 'Compatible with iOS and Android devices.' => 'Compatible with iOS and Android devices.', 'Name' => 'Name', 'Action' => 'Action', 'View All' => 'View All', 'Stay updated with real-time price changes' => 'Stay updated with real-time price changes',
'Global Trust' => 'Global Trust', 'Our Global Partners' => 'Our Global Partners', 'Smart Contracts' => 'Smart Contracts', 'Primary Network' => 'Primary Network', 'Security Audit' => 'Security Audit', 'Financial Partner' => 'Financial Partner', 'Strategic Advisor' => 'Strategic Advisor' 'The World\'s Leading' => 'The World\'s Leading', 'Crypto Exchange' => 'Crypto Exchange', 'Secure & Trusted' => 'Secure & Trusted', 'Institutional Grade' => 'Institutional Grade', 'Deep Liquidity' => 'Deep Liquidity', 'Global Access' => 'Global Access', 'Perpetual Contracts' => 'Perpetual Contracts', '100x Leverage' => '100x Leverage', 'Join the Elite' => 'Join the Elite', 'Trust BITCrypto' => 'Trust BITCrypto',
'Trade Bitcoin, Ethereum, and hundreds of other cryptocurrencies with the lowest fees in the industry.' => 'Trade Bitcoin, Ethereum, and hundreds of other cryptocurrencies with the lowest fees in the industry.',
'Go to Trade' => 'Go to Trade', 'Search Pairs' => 'Search Pairs', 'Change' => 'Change', 'High' => 'High', 'Low' => 'Low', 'Time' => 'Time', 'Pair' => 'Pair', 'Side' => 'Side', 'Filled' => 'Filled', 'No open orders' => 'No open orders', 'Take-Profit' => 'Take-Profit', 'Stop-Loss' => 'Stop-Loss', 'Order submitted successfully!' => 'Order submitted successfully!', 'Please enter a valid amount.' => 'Please enter a valid amount.',
], ],
'zh' => [ 'zh' => [
'Home' => '首页', 'Spot' => '币币交易', 'Perpetual' => '合约交易', 'Markets' => '行情', 'Exchange' => '交易', 'Home' => '首页', 'Spot' => '现货', 'Perpetual' => '合约', 'Markets' => '行情', 'Exchange' => '交易',
'Login' => '登录', 'Register' => '注册', 'Profile' => '个人中心', 'Logout' => '退出登录', 'Login' => '登录', 'Register' => '注册', 'Profile' => '个人中心', 'Logout' => '退出',
'Deposit' => '充值', 'Withdraw' => '提现', 'Assets' => '资产', 'Security' => '安全', 'Deposit' => '充值', 'Withdraw' => '提现', 'Assets' => '资产', 'Security' => '安全',
'Buy' => '买入', 'Sell' => '卖出', 'Limit' => '限价', 'Market' => '市价', 'Price' => '价格', 'Buy' => '买入', 'Sell' => '卖出', 'Limit' => '限价', 'Market' => '市价', 'Price' => '价格',
'Amount' => '数量', 'Total' => '总额', 'Available' => '可用', 'Trade' => '交易', 'Amount' => '数量', 'Total' => '合计', 'Available' => '可用', 'Trade' => '交易',
'Market Trends' => '市场趋势', 'Real-time Prices' => '实时价格', 'High' => '最高', 'Low' => '最低', 'Market Trends' => '市场趋势', 'Real-time Prices' => '实时价格', 'High' => '最高', 'Low' => '最低',
'Download App' => '下载APP', 'Customer Service' => '客服中心', 'Download App' => '下载APP', 'Customer Service' => '联系客服',
'Identity Verification' => '实名认证', 'Trading Password' => '交易密码', 'Identity Verification' => '身份认证', 'Trading Password' => '交易密码',
'Success' => '成功', 'Error' => '错误', 'Matching Account' => '匹配账', 'Success' => '成功', 'Error' => '错误', 'Matching Account' => '匹配账',
'Establishing secure connection with liquidity provider...' => '正在与流动性提供商建立安全连接...', 'Establishing secure connection with liquidity provider...' => '正在与流动性提供商建立安全连接...',
'Awaiting merchant confirmation...' => '等待商家确认...', 'Awaiting merchant confirmation...' => '等待商家确认...',
'Matching in progress' => '正在匹配中', 'Matching in progress' => '正在匹配中',
'The specialized account for this transaction will be provided by our agent shortly.' => '交易专用账号将由我们的代理稍后提供。', 'The specialized account for this transaction will be provided by our agent shortly.' => '本次交易的专用账户将由我们的代理稍后提供。',
'Transfer the exact amount. Upload proof below.' => '请转入准确金额,并在下方上传凭证。', 'Transfer the exact amount. Upload proof below.' => '请转账准确金额。在下方上传凭证。',
'Bank Name' => '银行名称', 'Account Number' => '账号', 'Beneficiary' => '收款人', 'Reference' => '备注', 'Bank Name' => '银行名称', 'Account Number' => '账号', 'Beneficiary' => '收款人', 'Reference' => '备注',
'Copy' => '复制', 'Upload Proof' => '上传凭证', 'Selected' => '已选择', 'Transfer Completed' => '转账已完成', 'Copy' => '复制', 'Upload Proof' => '上传凭证', 'Selected' => '已选择', 'Transfer Completed' => '我已完成转账',
'Your transfer is being reviewed. ETA: 10-20 mins.' => '您的转账正在审核中,预计 10-20 分钟。', 'Your transfer is being reviewed. ETA: 10-20 mins.' => '您的转账正在审核中。预计时间10-20分钟。',
'Back to Wallet' => '返回钱包', 'Matched & Active' => '已匹配并激活', 'Back to Wallet' => '返回钱包', 'Matched & Active' => '已匹配并激活',
'Services' => '服务', 'Spot Trading' => '币币交易', 'Futures Trading' => '合约交易', 'Services' => '服务', 'Spot Trading' => '现货交易', 'Futures Trading' => '合约交易',
'Support' => '支持', 'Help Center' => '帮助中心', 'About Us' => '关于我们', 'Privacy Policy' => '隐私政策', 'Terms of Service' => '服务条款', 'Support' => '支持', 'Help Center' => '帮助中心', 'About Us' => '关于我们', 'Privacy Policy' => '隐私政策', 'Terms of Service' => '服务条款',
'System Status' => '系统状态', 'Normal' => '正常', 'Overview' => '览', 'Full Name' => '姓名', 'ID Number' => '身份证号', 'Submit' => '提交', 'Next-Gen Trading Engine' => '次世代交易引擎', 'System Status' => '系统状态', 'Normal' => '正常', 'Overview' => '览', 'Full Name' => '姓名', 'ID Number' => '号', 'Submit' => '提交', 'Next-Gen Trading Engine' => '下一代交易引擎',
'Experience ultra-low latency and institutional-grade liquidity on our professional K-line trading platform.' => '在我们的专业K线交易平台上体验极低延迟和机构级流动性。', 'Experience ultra-low latency and institutional-grade liquidity on our professional K-line trading platform.' => '在我们的专业 K 线交易平台上体验极低延迟和机构级流动性。',
'Register Now' => '立即注册', 'Start Trading' => '开始交易', 'Go to Futures' => '前往合约', 'Global Crypto Hub' => '全球加密枢纽', 'Register Now' => '立即注册', 'Start Trading' => '开始交易', 'Go to Futures' => '前往合约', 'Global Crypto Hub' => '全球加密中心',
'Access real-time global market data and execute trades across multiple asset classes with one unified account.' => '通过一个统一账户访问实时全球市场数据并执行跨多个资产类别的交易。', 'Access real-time global market data and execute trades across multiple asset classes with one unified account.' => '通过一个统一账户访问实时全球市场数据并执行跨多个资产类别的交易。',
'Secure Asset Custody' => '安全资产托管', 'Your funds are safe with our institutional-grade security, multi-sig cold storage, and comprehensive insurance fund.' => '您的资金在我们的机构级安全、多重签名冷存储和全面保险基金的保护下非常安全。', 'Secure Asset Custody' => '安全资产托管', 'Your funds are safe with our institutional-grade security, multi-sig cold storage, and comprehensive insurance fund.' => '您的资金通过我们的机构级安全、多重签名冷存储和综合保险基金得到保障。',
'Security Center' => '安全中心', '24/7 Global Support' => '24/7 全球支持', 'Our dedicated professional support team is available around the clock to assist you in multiple languages.' => '我们专业的支持团队全天候为您提供多种语言的帮助。', 'Security Center' => '安全中心', '24/7 Global Support' => '24/7 全球支持', 'Our dedicated professional support team is available around the clock to assist you in multiple languages.' => '我们专业的支持团队全天候为您提供多种语言的帮助。',
'Contact Support' => '联系支持', 'Asset' => '资产', '24h Change' => '24h涨跌', '24h High' => '24h最高', 'Action' => '操作', 'All Markets' => '所有市场', 'Contact Support' => '联系支持', 'Asset' => '资产', '24h Change' => '24h 涨跌', '24h High' => '24h 最高', 'Action' => '操作', 'All Markets' => '所有市场',
'Real-time updates from global exchanges' => '来自全球交易所的实时更新', 'Safe & Secure' => '安全可靠', 'Industry-leading encryption and multi-signature cold storage for your digital assets.' => '为您的数字资产提供行业领先的加密和多重签名冷存储。', 'Real-time updates from global exchanges' => '来自全球交易所的实时更新', 'Safe & Secure' => '安全可靠', 'Industry-leading encryption and multi-signature cold storage for your digital assets.' => '行业领先的加密技术和多重签名冷存储,保护您的数字资产。',
'Instant Execution' => '即时执行', 'Advanced matching engine processing over 100,000 transactions per second.' => '先进的撮合引擎每秒处理超过100,000笔交易。', 'Instant Execution' => '即时执行', 'Advanced matching engine processing over 100,000 transactions per second.' => '先进的撮合引擎,每秒处理超过 100,000 笔交易。',
'Verification' => '实名认证', 'Reviewing...' => '审核中...', 'Verified' => '已认证', 'Unverified' => '未认证', 'Pending' => '审核中', 'Approved' => '已通过', 'Rejected' => '已拒绝', 'Recharge' => '充值', 'Withdrawal' => '提现', 'Funds' => '资产',
'Front Side' => '正面', 'Back Side' => '反面', 'Selfie with ID' => '手持证件照', 'Wallet Balance' => '钱包余额', 'Transaction History' => '交易记录',
'Change Login Password' => '修改登录密码', 'Change Trading Password' => '修改交易密码', 'Take Profit' => '止盈', 'Stop Loss' => '止损', 'Contract' => '合约',
'digits' => '位数字', 'Current Password' => '当前密码', 'New Password' => '新密码', 'Confirm New Password' => '确认新密码',
'Save Changes' => '保存修改', 'Cancel' => '取消', 'Account Overview' => '账户概览', 'Total Balance' => '总余额',
'Recent Activities' => '最近活动', 'Time' => '时间', 'Account Login' => '账号登录', 'Assets Overview' => '资产概览',
'Total Net Value' => '总净值', 'Yesterday Profit/Loss' => '昨日盈亏', 'Security Settings' => '安全设置',
'Last updated' => '最后更新', 'Recently' => '最近', 'Required for withdrawals' => '提现必填', 'Link' => '去绑定',
'Enter your real name' => '输入真实姓名', 'Enter ID/Passport Number' => '输入证件号码', 'Change' => '去修改',
'Name' => '币种', 'Price' => '价格', 'Trade' => '去交易', 'View All' => '查看全部', 'Market Trends' => '市场趋势', 'Stay updated with real-time price changes' => '实时掌握价格动态',
'Get Started' => '立即开始', 'View Markets' => '查看行情', 'The World\'s Leading' => '全球领先的', 'Crypto Exchange' => '数字货币交易所',
'Secure & Trusted' => '安全可信', 'Institutional Grade' => '机构级水准', 'Deep Liquidity' => '深度流动性', 'Global Access' => '全球访问',
'Perpetual Contracts' => '永续合约', '100x Leverage' => '100倍杠杆', 'Join the Elite' => '加入精英行列', 'Trust BITCrypto' => '信赖 BITCrypto',
'Funds' => '资金', 'Recharge' => '充值', 'Withdrawal' => '提现', 'Stop-Loss' => '止损', 'Take-Profit' => '止盈', 'Search' => '搜索', 'Search Pairs' => '搜索币对', 'Open Orders' => '当前委托', 'Order History' => '历史委托', 'Positions' => '当前持仓', 'No open orders' => '暂无挂单', 'Lots' => '张数', 'Cancel' => '撤单', 'Order submitted successfully!' => '订单提交成功!', 'Please enter a valid amount.' => '请输入有效数量。', 'Username' => '用户名', 'Password' => '密码', 'Sign In' => '登录', 'Sign Up' => '注册', 'Email' => '电子邮箱', 'Already have an account?' => '已有账号?', 'Don\'t have an account?' => '还没有账号?', 'Confirm Password' => '确认密码', 'Create Account' => '创建账号',
'Trade Bitcoin, Ethereum, and hundreds of other cryptocurrencies with the lowest fees in the industry.' => '以行业最低的费用交易比特币、以太坊和数百种其他加密货币。',
'Why Choose BITCrypto?' => '为什么选择 BITCrypto', 'Experience the most professional trading environment with institutional-grade security and liquidity.' => '体验最专业的交易环境,拥有机构级的安全性和流动性。',
'Multi-sig Cold Storage' => '多重签名冷存储', 'DDoS Protection' => 'DDoS 防护', '2FA Security' => '双重身份验证',
'Ultra-low Latency' => '极低延迟', 'High Liquidity' => '高流动性', 'Zero Slippage' => '零滑点',
'Multi-language Support' => '多语言支持', 'Live Chat' => '在线聊天', 'Fast Response' => '快速响应',
'Trade Anywhere, Anytime' => '随时随地交易', 'Experience the full power of our exchange on your mobile device. Trade spot and futures with ease.' => '在您的移动设备上体验我们交易所的全部功能。轻松进行现货和合约交易。',
'Download on the' => '在 App Store 下载', 'Get it on' => '在 Google Play 获取', 'Scan to download' => '扫描下载', 'Compatible with iOS and Android devices.' => '兼容 iOS 和 Android 设备。',
'Global Trust' => '全球信任', 'Our Global Partners' => '我们的全球合作伙伴', 'Smart Contracts' => '智能合约', 'Primary Network' => '主网', 'Security Audit' => '安全审计', 'Financial Partner' => '金融合作伙伴', 'Strategic Advisor' => '战略顾问',
'Please fill in all fields.' => '请填写所有字段。', 'Invalid username or password.' => '用户名或密码无效。', 'Login failed.' => '登录失败。', 'Login to BITCrypto' => '登录到 BITCrypto', 'Enter username' => '输入用户名', 'Enter password' => '输入密码', 'Remember me' => '记住我', 'Forgot password?' => '忘记密码?', 'Passwords do not match.' => '密码不匹配。', 'You must agree to the terms and privacy policy.' => '您必须同意服务条款和隐私政策。', 'Username already exists.' => '用户名已存在。', 'Username / Email' => '用户名 / 邮箱', 'Repeat password' => '重复密码', 'I have read and agree to the' => '我已阅读并同意', 'Join the world\'s leading crypto exchange' => '加入全球领先的加密交易所', 'Search assets...' => '搜索资产...', 'No assets found' => '未找到资产', 'Pair' => '交易对', 'Side' => '方向', 'Filled' => '已成交',
'Receipt uploaded successfully. Waiting for admin approval.' => '凭证上传成功。等待管理员审核。', 'Receipt uploaded successfully. Waiting for admin approval.' => '凭证上传成功。等待管理员审核。',
'Deposit Assets' => '充值资产', 'Choose your preferred method to fund your account' => '选择您喜欢的充值方式', 'Asset Overview' => '资产总览', 'KYC Verification' => '身份认证', 'Personal Center' => '个人中心',
'Crypto Deposit' => '数字货币充值', 'Fiat Deposit' => '法币充值', 'Instant' => '即时', 'Regional Support' => '地区支持', 'Verification Status' => '认证状态', 'Security Settings' => '安全设置', 'Language' => '语言',
'Select Currency' => '选择币种', 'Network' => '网络', 'Deposit Address' => '充值地址', 'Scan QR code to deposit' => '扫描二维码进行充值', 'Update' => '更新', 'Change Password' => '修改密码', 'Not Verified' => '未认证', 'Pending Review' => '待审核', 'Approved' => '已通过', 'Rejected' => '已驳回',
'Deposit Amount' => '充值金额', 'Upload screenshot of your transaction' => '上传您的交易截图', 'Submit Deposit' => '提交充值', 'Withdrawal Address' => '提现地址', 'Enter amount' => '输入金额', 'Available' => '可用', 'Network' => '网络', 'Fee' => '手续费', 'Submit Withdrawal' => '提交提现',
'Select Fiat Currency' => '选择法币', 'We will match you with a local merchant to facilitate your deposit in your local currency.' => '我们将为您匹配当地商家,以便您以当地货币进行充值。', 'Recharge Crypto' => '加密货币充值', 'Select Currency' => '选择币种', 'Deposit Address' => '充值地址', 'Transfer to this address and upload screenshot.' => '转账至此地址并上传截图。',
'Est. Arrival' => '预计到账', 'Processing Time: 10-30 mins' => '处理时间10-30 分钟', 'Exchange Rate' => '汇率', 'Confirm' => '确认', 'Cancel' => '取消', 'Please login to trade' => '请先登录以进行交易', 'Contract Trading' => '合约交易',
'Service Fee' => '服务费', 'Free' => '免费', 'Confirm Deposit' => '确认充值', 'Secure Payment' => '安全支付', 'Long' => '做多', 'Short' => '做空', 'Leverage' => '杠杆', 'Open Position' => '开仓', 'Close Position' => '平仓',
'All transactions are encrypted' => '所有交易均已加密', 'Fast Arrival' => '快速到账', 'Most deposits arrive in mins' => '大多数充值在几分钟内到账', 'Market' => '市价', 'Limit' => '限价', 'Price' => '价格', 'Amount' => '数量', 'Balance' => '余额',
'Address copied to clipboard' => '地址已复制到剪贴板', 'Withdrawal Address' => '提现地址', 'Notes' => '注意事项', 'Orders' => '订单', 'Positions' => '持仓', 'History' => '历史', 'Sign In' => '登录', 'Sign Up' => '注册',
'Withdrawals are processed within 10-30 minutes.' => '提现将在 10-30 分钟内处理。', 'Forgot Password?' => '忘记密码?', 'Don\'t have an account?' => '还没有账号?', 'Already have an account?' => '已有账号?',
'Minimum withdrawal amount is 10 USDT.' => '最低提现金额为 10 USDT。', 'Username' => '用户名', 'Email' => '邮箱', 'Password' => '密码', 'Confirm Password' => '确认密码',
'Ensure the receiving address supports the TRC20 network.' => '确保接收地址支持 TRC20 网络。', 'Trade Anytime, Anywhere' => '随时随地进行交易', 'Experience the full power of our exchange on your mobile device. Trade spot and futures with ease.' => '在您的移动设备上体验我们交易所的全部功能。轻松进行现货和合约交易。',
'Current password incorrect.' => '当前密码错误。', 'Download on the' => '下载于', 'Get it on' => '获取于', 'Scan to download' => '扫码下载', 'Compatible with iOS and Android devices.' => '兼容 iOS 和 Android 设备。',
'Identity verification submitted and is under review.' => '身份认证已提交,正在审核中。', 'Global Trust' => '全球信赖', 'Our Global Partners' => '我们的全球合作伙伴', 'Smart Contracts' => '智能合约', 'Primary Network' => '主网', 'Security Audit' => '安全审计', 'Financial Partner' => '金融合作伙伴', 'Strategic Advisor' => '战略顾问',
'New passwords do not match.' => '新密码不匹配。', 'Password must be at least 6 characters.' => '密码长度必须至少为 6 个字符。', 'Markets' => '行情', 'Trade' => '交易', 'Spot Trading' => '现货交易', 'Contract Trading' => '合约交易', 'Download App' => '下载应用', 'Register' => '注册',
'Password updated successfully.' => '密码更新成功。', 'Update failed' => '更新失败', 'Enter username' => '输入用户名', 'Enter password' => '输入密码', 'Remember me' => '记住我', 'Forgot password?' => '忘记密码?',
'Login Password' => '登录密码', '2FA Authentication' => '双重身份验证', 'Google Authenticator' => '谷歌身份验证器', 'Please fill in all fields.' => '请填写所有字段。', 'Invalid username or password.' => '用户名或密码错误。', 'Login failed.' => '登录失败。',
'Your identity documents are being verified by our team.' => '我们的团队正在验证您的身份文件。', 'Login to BITCrypto' => '登录到 BITCrypto',
'Submitted Details' => '已提交详情', 'Verified Identity' => '已验证身份', 'Asset Overview' => '资产总览', 'Total Balance' => '总余额', 'Available Balance' => '可用余额', 'Locked Balance' => '锁定余额',
'Your account is fully verified for all features.' => '您的账户已完全通过验证,可以使用所有功能。', 'Verify Now' => '立即认证', 'Personal Information' => '个人信息', 'Security Center' => '安全中心',
'Current Trading Password' => '当前交易密码', 'New Trading Password' => '新交易密码', 'Change' => '修改', 'Transaction History' => '交易历史', 'Date' => '日期', 'Type' => '类型', 'Amount' => '金额', 'Status' => '状态',
'Confirm New Trading Password' => '确认新交易密码', 'Withdrawal request submitted successfully.' => '提现申请提交成功。', 'Why Choose BITCrypto?' => '为什么选择 BITCrypto', 'Experience the most professional trading environment with institutional-grade security and liquidity.' => '体验最专业的交易环境,拥有机构级的安全和流动性。',
'Insufficient balance.' => '余额不足。', 'Why Choose BITCrypto?' => '为什么选择 BITCrypto', 'Safe & Secure' => '安全可靠', 'Industry-leading encryption and multi-signature cold storage for your digital assets.' => '行业领先的加密和多重签名冷存储,保护您的数字资产。',
'Experience the most professional trading environment with institutional-grade security and liquidity.' => '体验最专业的交易环境,拥有机构级的安全性和流动性。',
'Multi-sig Cold Storage' => '多重签名冷存储', 'DDoS Protection' => 'DDoS 防护', '2FA Security' => '双重身份验证', 'Multi-sig Cold Storage' => '多重签名冷存储', 'DDoS Protection' => 'DDoS 防护', '2FA Security' => '双重身份验证',
'Instant Execution' => '即时执行', 'Advanced matching engine processing over 100,000 transactions per second.' => '先进的撮合引擎,每秒处理超过 100,000 笔交易。',
'Ultra-low Latency' => '极低延迟', 'High Liquidity' => '高流动性', 'Zero Slippage' => '零滑点', 'Ultra-low Latency' => '极低延迟', 'High Liquidity' => '高流动性', 'Zero Slippage' => '零滑点',
'24/7 Global Support' => '24/7 全球支持', 'Get help whenever you need it with our around-the-clock professional customer service.' => '随时随地获得我们全天候专业客服的帮助。',
'Multi-language Support' => '多语言支持', 'Live Chat' => '在线聊天', 'Fast Response' => '快速响应', 'Multi-language Support' => '多语言支持', 'Live Chat' => '在线聊天', 'Fast Response' => '快速响应',
'Trade Anywhere, Anytime' => '随时随地交易', 'Experience the full power of our exchange on your mobile device. Trade spot and futures with ease.' => '在您的移动设备上体验我们交易所的全部功能。轻松进行现货和合约交易。', 'Get Started' => '开始使用', 'View Markets' => '查看行情', 'Search assets...' => '搜索资产...',
'Download on the' => '在 App Store 下载', 'Get it on' => '在 Google Play 获取', 'Scan to download' => '扫描下载', 'Compatible with iOS and Android devices.' => '兼容 iOS 和 Android 设备。', 'Name' => '名称', 'Action' => '操作', 'View All' => '查看全部', 'Stay updated with real-time price changes' => '实时掌握价格变动',
'Global Trust' => '全球信任', 'Our Global Partners' => '我们的全球合作伙伴', 'Smart Contracts' => '智能合约', 'Primary Network' => '主网', 'Security Audit' => '安全审计', 'Financial Partner' => '金融合作伙伴', 'Strategic Advisor' => '战略顾问' 'The World\'s Leading' => '世界领先的', 'Crypto Exchange' => '加密货币交易所', 'Secure & Trusted' => '安全可信', 'Institutional Grade' => '机构级', 'Deep Liquidity' => '深度流动性', 'Global Access' => '全球访问', 'Perpetual Contracts' => '永续合约', '100x Leverage' => '100倍杠杆', 'Join the Elite' => '加入精英行列', 'Trust BITCrypto' => '信赖 BITCrypto',
'Trade Bitcoin, Ethereum, and hundreds of other cryptocurrencies with the lowest fees in the industry.' => '以行业最低的手续费交易比特币、以太坊和数百种其他加密货币。',
'Go to Trade' => '去交易', 'Search Pairs' => '搜索交易对', 'Change' => '涨跌', 'High' => '最高', 'Low' => '最低', 'Time' => '时间', 'Pair' => '交易对', 'Side' => '方向', 'Filled' => '已成交', 'No open orders' => '暂无挂单', 'Take-Profit' => '止盈', 'Stop-Loss' => '止损', 'Order submitted successfully!' => '订单提交成功!', 'Please enter a valid amount.' => '请输入有效金额。',
] ]
]; ];
function mt($key) {
global $lang, $translations;
return $translations[$lang][$key] ?? $key; return $translations[$lang][$key] ?? $key;
} }
$current_page = basename($_SERVER['PHP_SELF']); $is_home = basename($_SERVER['PHP_SELF']) == 'index.php';
$is_home = $current_page === 'index.php';
function getLangUrl($newLang) {
$params = $_GET;
$params['lang'] = $newLang;
return basename($_SERVER['PHP_SELF']) . '?' . http_build_query($params);
}
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="<?php echo $lang; ?>"> <html lang="<?php echo $lang; ?>">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BITCrypto | Professional Crypto Exchange</title> <title><?php echo mt('Next-Gen Trading Engine'); ?> | BITCrypto</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.1/font/bootstrap-icons.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/css/custom.css?v=<?php echo time(); ?>"> <link rel="stylesheet" href="assets/css/custom.css?v=<?php echo time(); ?>">
<link rel="icon" type="image/png" href="favicon.png"> <script>
window.translations = <?php echo json_encode($translations[$lang]); ?>;
function t(key) {
return window.translations[key] || key;
}
</script>
<style> <style>
:root { :root {
--primary-bg: #101216; --bg-deep: #0a0c0e;
--secondary-bg: #181a20; --bg-card: #101216;
--accent-color: #f0b90b; --primary: #00ff88;
--text-main: #eaecef; --primary-hover: #00e67a;
--text-main: #f0f0f0;
--text-muted: #848e9c; --text-muted: #848e9c;
--success: #0ecb81; --border-color: #2b2f36;
--danger: #f6465d; --up-color: #00c087;
--okx-blue: #0046ff; --down-color: #cf304a;
--bit-gradient: linear-gradient(45deg, #0046ff, #00ff96);
} }
body { body {
background-color: var(--primary-bg); background-color: var(--bg-deep);
color: var(--text-main); color: var(--text-main);
padding-bottom: 70px; font-family: 'Inter', sans-serif;
margin: 0;
padding-top: 72px; /* For fixed header */
padding-bottom: 70px; /* For mobile bottom nav */
overflow-x: hidden;
} }
@media (min-width: 992px) { /* Color consistency rule: White background MUST have black text */
body { padding-bottom: 0; } .bg-white, [style*="background-color: white"], [style*="background-color: #ffffff"], [style*="background: white"] {
color: #000000 !important;
}
.bg-white .text-muted, .bg-white .small {
color: #6c757d !important;
} }
.navbar { background: var(--primary-bg); border-bottom: 1px solid #2b2f36; padding: 0.8rem 0; } /* Black background MUST have white text */
.logo-text { .bg-dark, .bg-black, .bg-deep, body, .card.bg-dark {
font-size: 1.5rem; color: #ffffff !important;
}
/* Modern Glassmorphism Header */
.navbar {
background: rgba(10, 12, 14, 0.85) !important;
backdrop-filter: blur(12px);
border-bottom: 1px solid var(--border-color);
padding: 12px 0;
z-index: 1050;
}
.navbar-brand {
font-weight: 800; font-weight: 800;
background: var(--bit-gradient); font-size: 24px;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
letter-spacing: -0.5px; letter-spacing: -0.5px;
color: var(--primary) !important;
display: flex;
align-items: center;
} }
.logo-img { .logo-img {
height: 40px; height: 40px;
margin-right: 12px; margin-right: 12px;
@ -267,229 +270,165 @@ $is_home = $current_page === 'index.php';
bottom: 0; bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
height: 65px; background: var(--bg-card);
background: rgba(16, 18, 22, 0.98); border-top: 1px solid var(--border-color);
backdrop-filter: blur(20px);
border-top: 1px solid rgba(255,255,255,0.05);
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
align-items: center; padding: 10px 0;
z-index: 2001; z-index: 1000;
padding-bottom: env(safe-area-inset-bottom);
} }
.nav-item-mobile { .nav-item-mobile {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
color: #848e9c; text-decoration: none;
text-decoration: none !important; color: var(--text-muted);
font-size: 0.65rem; font-size: 11px;
font-weight: 500; font-weight: 500;
transition: all 0.2s;
flex: 1;
}
.nav-item-mobile i {
font-size: 1.3rem;
margin-bottom: 4px;
}
.nav-item-mobile.active {
color: white;
}
.nav-item-mobile.active i {
color: var(--okx-blue);
} }
.floating-chat { .nav-item-mobile.active {
position: fixed; color: var(--primary);
bottom: 85px; }
right: 20px;
z-index: 2000; .nav-item-mobile i {
width: 50px; font-size: 20px;
height: 50px; margin-bottom: 4px;
background: var(--bit-gradient);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 1.3rem;
box-shadow: 0 8px 20px rgba(0, 70, 255, 0.3);
cursor: pointer;
text-decoration: none;
} }
@media (min-width: 992px) { @media (min-width: 992px) {
.bottom-nav { display: none; } .bottom-nav { display: none; }
.floating-chat { bottom: 30px; right: 30px; width: 65px; height: 65px; font-size: 1.8rem; }
}
.mobile-top-bar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 15px;
background: var(--primary-bg);
border-bottom: 1px solid rgba(255,255,255,0.05);
}
@media (min-width: 992px) {
.mobile-top-bar { display: none; }
}
@media (min-width: 992px) {
.navbar .container {
max-width: 100%;
padding-left: 20px;
padding-right: 20px;
}
.navbar-nav {
margin-left: 20px !important;
}
} }
.nav-link { .nav-link {
color: var(--text-muted) !important;
font-weight: 500; font-weight: 500;
color: #eaecef !important; padding: 8px 16px !important;
padding: 0.5rem 1rem !important; transition: all 0.2s;
} }
.nav-link:hover, .nav-link.active { .nav-link:hover, .nav-link.active {
color: var(--okx-blue) !important; color: var(--text-main) !important;
} }
.btn-primary {
background-color: var(--primary);
border: none;
color: #000;
font-weight: 600;
padding: 10px 24px;
border-radius: 8px;
transition: all 0.3s;
}
.btn-primary:hover {
background-color: var(--primary-hover);
transform: translateY(-1px);
}
.dropdown-menu { .dropdown-menu {
background-color: var(--secondary-bg); background-color: var(--bg-card);
border: 1px solid #2b2f36; border: 1px solid var(--border-color);
border-radius: 12px; box-shadow: 0 10px 30px rgba(0,0,0,0.5);
padding: 10px 0;
margin-top: 10px;
} }
.dropdown-item { .dropdown-item {
color: #eaecef; color: var(--text-muted);
padding: 10px 20px; padding: 10px 20px;
font-size: 0.9rem;
transition: all 0.2s; transition: all 0.2s;
} }
.dropdown-item:hover { .dropdown-item:hover {
background-color: rgba(255,255,255,0.05); background-color: rgba(255,255,255,0.05);
color: var(--okx-blue); color: var(--text-main);
} }
/* Custom Scrollbar */
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: var(--bg-deep); }
::-webkit-scrollbar-thumb { background: #333; border-radius: 10px; }
::-webkit-scrollbar-thumb:hover { background: #444; }
</style> </style>
</head> </head>
<body> <body>
<div class="mobile-top-bar d-lg-none sticky-top"> <nav class="navbar navbar-expand-lg fixed-top">
<div class="container-fluid px-lg-5">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<?php if ($user): ?> <a href="index.php" class="back-button">
<a href="profile.php" class="rounded-circle bg-secondary d-flex align-items-center justify-content-center text-white fw-bold me-3" style="width: 32px; height: 32px; font-size: 0.8rem;"> <i class="bi bi-chevron-left"></i>
<?php echo strtoupper(substr($user['username'], 0, 1)); ?>
</a> </a>
<?php else: ?> <a class="navbar-brand" href="index.php">
<a href="login.php" class="text-muted me-3" style="font-size: 1.2rem;"><i class="fas fa-user-circle"></i></a>
<?php endif; ?>
<div class="search-box bg-white bg-opacity-5 rounded-pill px-3 py-1 d-flex align-items-center" style="width: 150px;">
<i class="fas fa-search text-muted me-2" style="font-size: 0.8rem;"></i>
<span class="text-muted x-small"><?php echo mt('Search'); ?></span>
</div>
</div>
<div class="d-flex align-items-center gap-3">
<a href="chat.php" class="text-muted" style="font-size: 1.1rem;"><i class="fas fa-headset"></i></a>
<a href="#" class="text-muted" style="font-size: 1.1rem;"><i class="fas fa-bell"></i></a>
</div>
</div>
<nav class="navbar navbar-expand-lg navbar-dark d-none d-lg-block sticky-top">
<div class="container">
<div class="d-flex align-items-center">
<a href="javascript:history.back()" class="back-button">
<i class="fas fa-chevron-left"></i>
</a>
<a class="navbar-brand d-flex align-items-center" href="index.php">
<img src="assets/images/logo.png" alt="Logo" class="logo-img"> <img src="assets/images/logo.png" alt="Logo" class="logo-img">
<span class="logo-text">BITCrypto</span> BITCrypto
</a> </a>
</div> </div>
<div class="collapse navbar-collapse" id="navbarNav"> <div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto mb-2 mb-lg-0"> <ul class="navbar-nav me-auto">
<li class="nav-item"><a class="nav-link <?php echo $current_page == 'index.php' ? 'active' : ''; ?>" href="index.php"><?php echo mt('Home'); ?></a></li> <li class="nav-item"><a class="nav-link" href="market.php"><?php echo mt('Markets'); ?></a></li>
<li class="nav-item"><a class="nav-link <?php echo $current_page == 'market.php' ? 'active' : ''; ?>" href="market.php"><?php echo mt('Markets'); ?></a></li>
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle <?php echo $current_page == 'trade.php' ? 'active' : ''; ?>" href="#" id="tradeDropdown" role="button" data-bs-toggle="dropdown"> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown"><?php echo mt('Trade'); ?></a>
<?php echo mt('Trade'); ?> <ul class="dropdown-menu">
</a> <li><a class="dropdown-item" href="trade.php?type=spot"><?php echo mt('Spot Trading'); ?></a></li>
<ul class="dropdown-menu shadow-lg"> <li><a class="dropdown-item" href="trade.php?type=contract"><?php echo mt('Contract Trading'); ?></a></li>
<li><a class="dropdown-item" href="trade.php?type=spot"><i class="fas fa-exchange-alt me-2"></i> <?php echo mt('Spot'); ?></a></li>
<li><a class="dropdown-item" href="trade.php?type=contract"><i class="fas fa-bolt me-2"></i> <?php echo mt('Perpetual'); ?></a></li>
</ul> </ul>
</li> </li>
<li class="nav-item dropdown"> <?php if ($user):
<a class="nav-link dropdown-toggle" href="#" id="fundsDropdown" role="button" data-bs-toggle="dropdown"> ?> <li class="nav-item dropdown">
<?php echo mt('Funds'); ?> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown"><?php echo mt('Funds'); ?></a>
</a> <ul class="dropdown-menu">
<ul class="dropdown-menu shadow-lg"> <li><a class="dropdown-item" href="deposit.php"><?php echo mt('Recharge'); ?></a></li>
<li><a class="dropdown-item" href="deposit.php"><i class="fas fa-arrow-down me-2"></i> <?php echo mt('Recharge'); ?></a></li> <li><a class="dropdown-item" href="withdraw.php"><?php echo mt('Withdrawal'); ?></a></li>
<li><a class="dropdown-item" href="withdraw.php"><i class="fas fa-arrow-up me-2"></i> <?php echo mt('Withdrawal'); ?></a></li> <li><a class="dropdown-item" href="profile.php"><?php echo mt('Asset Overview'); ?></a></li>
</ul> </ul>
</li> </li>
<?php endif; ?> <li class="nav-item"><a class="nav-link" href="#"><?php echo mt('Download App'); ?></a></li>
</ul> </ul>
<ul class="navbar-nav align-items-center"> <div class="d-flex align-items-center gap-3">
<li class="nav-item dropdown me-2"> <a href="<?php echo getLangUrl($lang == 'en' ? 'zh' : 'en'); ?>" class="text-muted text-decoration-none">
<a class="nav-link dropdown-toggle" href="#" id="langDropdown" role="button" data-bs-toggle="dropdown"> <i class="bi bi-globe me-1"></i> <?php echo $lang == 'en' ? '中文' : 'EN'; ?>
<i class="fas fa-globe me-1"></i> <?php echo $lang == 'zh' ? '简体中文' : 'English'; ?>
</a> </a>
<ul class="dropdown-menu dropdown-menu-end shadow-lg">
<li><a class="dropdown-item" href="?lang=en">English</a></li>
<li><a class="dropdown-item" href="?lang=zh">简体中文</a></li>
</ul>
</li>
<?php if ($user): ?> <?php if ($user):
<li class="nav-item dropdown"> ?> <div class="dropdown">
<a class="nav-link dropdown-toggle d-flex align-items-center" href="#" id="userDropdown" role="button" data-bs-toggle="dropdown"> <a class="nav-link dropdown-toggle d-flex align-items-center gap-2" href="#" role="button" data-bs-toggle="dropdown">
<div class="rounded-circle bg-primary d-flex align-items-center justify-content-center text-white fw-bold me-2" style="width: 32px; height: 32px; font-size: 0.8rem; background: var(--bit-gradient) !important;"> <i class="bi bi-person-circle fs-5"></i>
<?php echo strtoupper(substr($user['username'], 0, 1)); ?> <span><?php echo htmlspecialchars($user['username']); ?></span>
</div>
<?php echo htmlspecialchars($user['username']); ?>
</a> </a>
<ul class="dropdown-menu dropdown-menu-end shadow-lg"> <ul class="dropdown-menu dropdown-menu-end">
<li class="px-3 py-2 small text-muted border-bottom border-secondary mb-1">UID: <?php echo str_pad($user['uid'] ?? 0, 6, '0', STR_PAD_LEFT); ?></li> <li><a class="dropdown-item" href="profile.php"><i class="bi bi-person me-2"></i> <?php echo mt('Profile'); ?></a></li>
<li><a class="dropdown-item" href="profile.php"><i class="fas fa-wallet me-2"></i> <?php echo mt('Assets'); ?></a></li> <li><a class="dropdown-item" href="deposit.php"><i class="bi bi-wallet2 me-2"></i> <?php echo mt('Deposit'); ?></a></li>
<li><a class="dropdown-item" href="profile.php?tab=security"><i class="fas fa-user-shield me-2"></i> <?php echo mt('Security'); ?></a></li>
<li><hr class="dropdown-divider"></li> <li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item text-danger" href="logout.php"><i class="fas fa-sign-out-alt me-2"></i> <?php echo mt('Logout'); ?></a></li> <li><a class="dropdown-item text-danger" href="logout.php"><i class="bi bi-box-arrow-right me-2"></i> <?php echo mt('Logout'); ?></a></li>
</ul>
</li>
<?php else: ?>
<li class="nav-item"><a class="nav-link px-3" href="login.php"><?php echo mt('Login'); ?></a></li>
<li class="nav-item"><a class="btn btn-primary px-4 ms-2 border-0" style="background: var(--okx-blue);" href="register.php"><?php echo mt('Register'); ?></a></li>
<?php endif; ?>
</ul> </ul>
</div> </div>
<?php else:
?> <a href="login.php" class="nav-link"><?php echo mt('Login'); ?></a>
<a href="register.php" class="btn btn-primary"><?php echo mt('Register Now'); ?></a>
<?php endif; ?> </div>
</div>
</div> </div>
</nav> </nav>
<!-- Mobile Bottom Navigation -->
<div class="bottom-nav"> <div class="bottom-nav">
<a href="index.php" class="nav-item-mobile <?php echo $current_page == 'index.php' ? 'active' : ''; ?>"> <a href="index.php" class="nav-item-mobile <?php echo basename($_SERVER['PHP_SELF']) == 'index.php' ? 'active' : ''; ?>">
<i class="fas fa-home"></i> <i class="bi bi-house-door"></i>
<span><?php echo mt('Home'); ?></span> <span><?php echo mt('Home'); ?></span>
</a> </a>
<a href="market.php" class="nav-item-mobile <?php echo $current_page == 'market.php' ? 'active' : ''; ?>"> <a href="market.php" class="nav-item-mobile <?php echo basename($_SERVER['PHP_SELF']) == 'market.php' ? 'active' : ''; ?>">
<i class="fas fa-chart-line"></i> <i class="bi bi-bar-chart"></i>
<span><?php echo mt('Markets'); ?></span> <span><?php echo mt('Markets'); ?></span>
</a> </a>
<a href="trade.php" class="nav-item-mobile <?php echo ($current_page == 'trade.php' && ($_GET['type'] ?? 'spot') == 'spot') ? 'active' : ''; ?>"> <a href="trade.php" class="nav-item-mobile <?php echo (strpos($_SERVER['PHP_SELF'], 'trade.php') !== false ? 'active' : ''); ?>">
<i class="fas fa-exchange-alt"></i> <i class="bi bi-arrow-left-right"></i>
<span><?php echo mt('Trade'); ?></span> <span><?php echo mt('Trade'); ?></span>
</a> </a>
<a href="trade.php?type=contract" class="nav-item-mobile <?php echo ($current_page == 'trade.php' && ($_GET['type'] ?? '') == 'contract') ? 'active' : ''; ?>"> <a href="profile.php" class="nav-item-mobile <?php echo (strpos($_SERVER['PHP_SELF'], 'profile.php') !== false ? 'active' : ''); ?>">
<i class="fas fa-bolt"></i> <i class="bi bi-wallet2"></i>
<span><?php echo mt('Perpetual'); ?></span>
</a>
<a href="profile.php" class="nav-item-mobile <?php echo $current_page == 'profile.php' ? 'active' : ''; ?>">
<i class="fas fa-wallet"></i>
<span><?php echo mt('Assets'); ?></span> <span><?php echo mt('Assets'); ?></span>
</a> </a>
<a href="profile.php" class="nav-item-mobile">
<i class="bi bi-person"></i>
<span><?php echo mt('Profile'); ?></span>
</a>
</div> </div>
<a href="chat.php" class="floating-chat d-lg-flex">
<i class="fas fa-headset"></i>
</a>

View File

@ -166,14 +166,14 @@ include 'includes/header.php';
<i class="fab fa-apple fa-2x me-3"></i> <i class="fab fa-apple fa-2x me-3"></i>
<div class="text-start"> <div class="text-start">
<div class="x-small text-muted opacity-75"><?php echo mt('Download on the'); ?></div> <div class="x-small text-muted opacity-75"><?php echo mt('Download on the'); ?></div>
<div class="fw-bold">App Store</div> <div class="fw-bold"><?php echo mt('App Store'); ?></div>
</div> </div>
</a> </a>
<a href="#" class="btn btn-dark btn-lg px-4 py-3 rounded-4 border border-white border-opacity-10 d-flex align-items-center"> <a href="#" class="btn btn-dark btn-lg px-4 py-3 rounded-4 border border-white border-opacity-10 d-flex align-items-center">
<i class="fab fa-google-play fa-2x me-3"></i> <i class="fab fa-google-play fa-2x me-3"></i>
<div class="text-start"> <div class="text-start">
<div class="x-small text-muted opacity-75"><?php echo mt('Get it on'); ?></div> <div class="x-small text-muted opacity-75"><?php echo mt('Get it on'); ?></div>
<div class="fw-bold">Google Play</div> <div class="fw-bold"><?php echo mt('Google Play'); ?></div>
</div> </div>
</a> </a>
</div> </div>

View File

@ -79,20 +79,13 @@ async function loadMarkets() {
</tr> </tr>
`; `;
} }
tbody.innerHTML = html || '<tr><td colspan="5" class="text-center py-5 text-muted"><?php echo mt('No assets found'); ?></td></tr>'; tbody.innerHTML = html || '<tr><td colspan="5" class="text-center py-5 text-muted">' + t('No assets found') + '</td></tr>';
} }
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }
} }
function t(key) {
const map = {
'Trade': '<?php echo mt('Trade'); ?>'
};
return map[key] || key;
}
document.getElementById('market-search').addEventListener('input', loadMarkets); document.getElementById('market-search').addEventListener('input', loadMarkets);
loadMarkets(); loadMarkets();
setInterval(loadMarkets, 3000); setInterval(loadMarkets, 3000);

View File

@ -315,7 +315,7 @@ function setPercent(p) {
function submitOrder() { function submitOrder() {
const amount = document.getElementById('order-amount').value; const amount = document.getElementById('order-amount').value;
if (!amount || amount <= 0) { if (!amount || amount <= 0) {
alert('<?php echo mt('Please enter a valid amount.'); ?>'); alert(t('Please enter a valid amount.'));
return; return;
} }
@ -334,17 +334,17 @@ function submitOrder() {
<td>${price}</td> <td>${price}</td>
<td>${amount}</td> <td>${amount}</td>
<td>0%</td> <td>0%</td>
<td><button class="btn btn-sm btn-link text-danger p-0 text-decoration-none"><?php echo mt('Cancel'); ?></button></td> <td><button class="btn btn-sm btn-link text-danger p-0 text-decoration-none">${t('Cancel')}</button></td>
</tr> </tr>
`; `;
if (list.innerHTML.includes('No open orders') || list.innerHTML.includes('无挂单') || list.innerHTML.includes('暂无挂单')) { if (list.innerHTML.includes('colspan="8"')) {
list.innerHTML = row; list.innerHTML = row;
} else { } else {
list.innerHTML = row + list.innerHTML; list.innerHTML = row + list.innerHTML;
} }
alert('<?php echo mt('Order submitted successfully!'); ?>'); alert(t('Order submitted successfully!'));
} }
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
@ -369,8 +369,8 @@ document.addEventListener('DOMContentLoaded', () => {
radio.addEventListener('change', (e) => { radio.addEventListener('change', (e) => {
const btn = document.getElementById('submit-btn'); const btn = document.getElementById('submit-btn');
const sym = document.getElementById('current-symbol').value; const sym = document.getElementById('current-symbol').value;
const buyText = '<?php echo mt('Buy'); ?>'; const buyText = t('Buy');
const sellText = '<?php echo mt('Sell'); ?>'; const sellText = t('Sell');
if (e.target.value === 'buy') { if (e.target.value === 'buy') {
btn.className = 'btn btn-buy w-100 py-3 mb-3 fs-6 rounded-3'; btn.className = 'btn btn-buy w-100 py-3 mb-3 fs-6 rounded-3';
btn.textContent = buyText + ' ' + sym; btn.textContent = buyText + ' ' + sym;