mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-14 00:07:01 +08:00
- Add aiScanInterval and scanIntervalRecommend translation keys to translations.ts - Update TraderConfigModal to use internationalized text instead of hardcoded Chinese - Support language switching for scan interval labels and recommendations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
846 lines
35 KiB
TypeScript
846 lines
35 KiB
TypeScript
export type Language = 'en' | 'zh';
|
||
|
||
export const translations = {
|
||
en: {
|
||
// Header
|
||
appTitle: 'NOFX',
|
||
subtitle: 'Multi-AI Model Trading Platform',
|
||
aiTraders: 'AI Traders',
|
||
details: 'Details',
|
||
tradingPanel: 'Trading Panel',
|
||
competition: 'Competition',
|
||
running: 'RUNNING',
|
||
stopped: 'STOPPED',
|
||
adminMode: 'Admin Mode',
|
||
logout: 'Logout',
|
||
switchTrader: 'Switch Trader:',
|
||
view: 'View',
|
||
|
||
// Navigation
|
||
realtimeNav: 'Live',
|
||
configNav: 'Config',
|
||
dashboardNav: 'Dashboard',
|
||
|
||
// Footer
|
||
footerTitle: 'NOFX - AI Trading System',
|
||
footerWarning: '⚠️ Trading involves risk. Use at your own discretion.',
|
||
|
||
// Stats Cards
|
||
totalEquity: 'Total Equity',
|
||
availableBalance: 'Available Balance',
|
||
totalPnL: 'Total P&L',
|
||
positions: 'Positions',
|
||
margin: 'Margin',
|
||
free: 'Free',
|
||
|
||
// Positions Table
|
||
currentPositions: 'Current Positions',
|
||
active: 'Active',
|
||
symbol: 'Symbol',
|
||
side: 'Side',
|
||
entryPrice: 'Entry Price',
|
||
markPrice: 'Mark Price',
|
||
quantity: 'Quantity',
|
||
positionValue: 'Position Value',
|
||
leverage: 'Leverage',
|
||
unrealizedPnL: 'Unrealized P&L',
|
||
liqPrice: 'Liq. Price',
|
||
long: 'LONG',
|
||
short: 'SHORT',
|
||
noPositions: 'No Positions',
|
||
noActivePositions: 'No active trading positions',
|
||
|
||
// Recent Decisions
|
||
recentDecisions: 'Recent Decisions',
|
||
lastCycles: 'Last {count} trading cycles',
|
||
noDecisionsYet: 'No Decisions Yet',
|
||
aiDecisionsWillAppear: 'AI trading decisions will appear here',
|
||
cycle: 'Cycle',
|
||
success: 'Success',
|
||
failed: 'Failed',
|
||
inputPrompt: 'Input Prompt',
|
||
aiThinking: 'AI Chain of Thought',
|
||
collapse: 'Collapse',
|
||
expand: 'Expand',
|
||
|
||
// Equity Chart
|
||
accountEquityCurve: 'Account Equity Curve',
|
||
noHistoricalData: 'No Historical Data',
|
||
dataWillAppear: 'Equity curve will appear after running a few cycles',
|
||
initialBalance: 'Initial Balance',
|
||
currentEquity: 'Current Equity',
|
||
historicalCycles: 'Historical Cycles',
|
||
displayRange: 'Display Range',
|
||
recent: 'Recent',
|
||
allData: 'All Data',
|
||
cycles: 'Cycles',
|
||
|
||
// Comparison Chart
|
||
comparisonMode: 'Comparison Mode',
|
||
dataPoints: 'Data Points',
|
||
currentGap: 'Current Gap',
|
||
count: '{count} pts',
|
||
|
||
// Competition Page
|
||
aiCompetition: 'AI Competition',
|
||
traders: 'traders',
|
||
liveBattle: 'Live Battle',
|
||
realTimeBattle: 'Real-time Battle',
|
||
leader: 'Leader',
|
||
leaderboard: 'Leaderboard',
|
||
live: 'LIVE',
|
||
realTime: 'LIVE',
|
||
performanceComparison: 'Performance Comparison',
|
||
realTimePnL: 'Real-time PnL %',
|
||
realTimePnLPercent: 'Real-time PnL %',
|
||
headToHead: 'Head-to-Head Battle',
|
||
leadingBy: 'Leading by {gap}%',
|
||
behindBy: 'Behind by {gap}%',
|
||
equity: 'Equity',
|
||
pnl: 'P&L',
|
||
pos: 'Pos',
|
||
|
||
// AI Learning
|
||
aiLearning: 'AI Learning & Reflection',
|
||
tradesAnalyzed: '{count} trades analyzed · Real-time evolution',
|
||
latestReflection: 'Latest Reflection',
|
||
fullCoT: 'Full Chain of Thought',
|
||
totalTrades: 'Total Trades',
|
||
winRate: 'Win Rate',
|
||
avgWin: 'Avg Win',
|
||
avgLoss: 'Avg Loss',
|
||
profitFactor: 'Profit Factor',
|
||
avgWinDivLoss: 'Avg Win ÷ Avg Loss',
|
||
excellent: '🔥 Excellent - Strong profitability',
|
||
good: '✓ Good - Stable profits',
|
||
fair: '⚠️ Fair - Needs optimization',
|
||
poor: '❌ Poor - Losses exceed gains',
|
||
bestPerformer: 'Best Performer',
|
||
worstPerformer: 'Worst Performer',
|
||
symbolPerformance: 'Symbol Performance',
|
||
tradeHistory: 'Trade History',
|
||
completedTrades: 'Recent {count} completed trades',
|
||
noCompletedTrades: 'No completed trades yet',
|
||
completedTradesWillAppear: 'Completed trades will appear here',
|
||
entry: 'Entry',
|
||
exit: 'Exit',
|
||
stopLoss: 'Stop Loss',
|
||
latest: 'Latest',
|
||
|
||
// AI Learning Description
|
||
howAILearns: 'How AI Learns & Evolves',
|
||
aiLearningPoint1: 'Analyzes last 20 trading cycles before each decision',
|
||
aiLearningPoint2: 'Identifies best & worst performing symbols',
|
||
aiLearningPoint3: 'Optimizes position sizing based on win rate',
|
||
aiLearningPoint4: 'Avoids repeating past mistakes',
|
||
|
||
// AI Traders Management
|
||
manageAITraders: 'Manage your AI trading bots',
|
||
aiModels: 'AI Models',
|
||
exchanges: 'Exchanges',
|
||
createTrader: 'Create Trader',
|
||
modelConfiguration: 'Model Configuration',
|
||
configured: 'Configured',
|
||
notConfigured: 'Not Configured',
|
||
currentTraders: 'Current Traders',
|
||
noTraders: 'No AI Traders',
|
||
createFirstTrader: 'Create your first AI trader to get started',
|
||
configureModelsFirst: 'Please configure AI models first',
|
||
configureExchangesFirst: 'Please configure exchanges first',
|
||
configureModelsAndExchangesFirst: 'Please configure AI models and exchanges first',
|
||
modelNotConfigured: 'Selected model is not configured',
|
||
exchangeNotConfigured: 'Selected exchange is not configured',
|
||
confirmDeleteTrader: 'Are you sure you want to delete this trader?',
|
||
status: 'Status',
|
||
start: 'Start',
|
||
stop: 'Stop',
|
||
createNewTrader: 'Create New AI Trader',
|
||
selectAIModel: 'Select AI Model',
|
||
selectExchange: 'Select Exchange',
|
||
traderName: 'Trader Name',
|
||
enterTraderName: 'Enter trader name',
|
||
cancel: 'Cancel',
|
||
create: 'Create',
|
||
configureAIModels: 'Configure AI Models',
|
||
configureExchanges: 'Configure Exchanges',
|
||
aiScanInterval: 'AI Scan Decision Interval (minutes)',
|
||
scanIntervalRecommend: 'Recommended: 3-10 minutes',
|
||
useTestnet: 'Use Testnet',
|
||
enabled: 'Enabled',
|
||
save: 'Save',
|
||
|
||
// AI Model Configuration
|
||
officialAPI: 'Official API',
|
||
customAPI: 'Custom API',
|
||
apiKey: 'API Key',
|
||
customAPIURL: 'Custom API URL',
|
||
enterAPIKey: 'Enter API Key',
|
||
enterCustomAPIURL: 'Enter custom API endpoint URL',
|
||
useOfficialAPI: 'Use official API service',
|
||
useCustomAPI: 'Use custom API endpoint',
|
||
|
||
// Exchange Configuration
|
||
secretKey: 'Secret Key',
|
||
privateKey: 'Private Key',
|
||
walletAddress: 'Wallet Address',
|
||
user: 'User',
|
||
signer: 'Signer',
|
||
passphrase: 'Passphrase',
|
||
enterPrivateKey: 'Enter Private Key',
|
||
enterWalletAddress: 'Enter Wallet Address',
|
||
enterUser: 'Enter User',
|
||
enterSigner: 'Enter Signer Address',
|
||
enterSecretKey: 'Enter Secret Key',
|
||
enterPassphrase: 'Enter Passphrase (Required for OKX)',
|
||
hyperliquidPrivateKeyDesc: 'Hyperliquid uses private key for trading authentication',
|
||
hyperliquidWalletAddressDesc: 'Wallet address corresponding to the private key',
|
||
testnetDescription: 'Enable to connect to exchange test environment for simulated trading',
|
||
securityWarning: 'Security Warning',
|
||
saveConfiguration: 'Save Configuration',
|
||
|
||
// Trader Configuration
|
||
positionMode: 'Position Mode',
|
||
crossMarginMode: 'Cross Margin',
|
||
isolatedMarginMode: 'Isolated Margin',
|
||
crossMarginDescription: 'Cross margin: All positions share account balance as collateral',
|
||
isolatedMarginDescription: 'Isolated margin: Each position manages collateral independently, risk isolation',
|
||
leverageConfiguration: 'Leverage Configuration',
|
||
btcEthLeverage: 'BTC/ETH Leverage',
|
||
altcoinLeverage: 'Altcoin Leverage',
|
||
leverageRecommendation: 'Recommended: BTC/ETH 5-10x, Altcoins 3-5x for risk control',
|
||
tradingSymbols: 'Trading Symbols',
|
||
tradingSymbolsPlaceholder: 'Enter symbols, comma separated (e.g., BTCUSDT,ETHUSDT,SOLUSDT)',
|
||
selectSymbols: 'Select Symbols',
|
||
selectTradingSymbols: 'Select Trading Symbols',
|
||
selectedSymbolsCount: 'Selected {count} symbols',
|
||
clearSelection: 'Clear All',
|
||
confirmSelection: 'Confirm',
|
||
tradingSymbolsDescription: 'Empty = use default symbols. Must end with USDT (e.g., BTCUSDT, ETHUSDT)',
|
||
btcEthLeverageValidation: 'BTC/ETH leverage must be between 1-50x',
|
||
altcoinLeverageValidation: 'Altcoin leverage must be between 1-20x',
|
||
invalidSymbolFormat: 'Invalid symbol format: {symbol}, must end with USDT',
|
||
|
||
// Loading & Error
|
||
loading: 'Loading...',
|
||
loadingError: '⚠️ Failed to load AI learning data',
|
||
noCompleteData: 'No complete trading data (needs to complete open → close cycle)',
|
||
|
||
// AI Traders Page - Additional
|
||
inUse: 'In Use',
|
||
noModelsConfigured: 'No configured AI models',
|
||
noExchangesConfigured: 'No configured exchanges',
|
||
signalSource: 'Signal Source',
|
||
signalSourceConfig: 'Signal Source Configuration',
|
||
coinPoolDescription: 'API endpoint for coin pool data, leave blank to disable this signal source',
|
||
oiTopDescription: 'API endpoint for open interest rankings, leave blank to disable this signal source',
|
||
information: 'Information',
|
||
signalSourceInfo1: '• Signal source configuration is per-user, each user can set their own URLs',
|
||
signalSourceInfo2: '• When creating traders, you can choose whether to use these signal sources',
|
||
signalSourceInfo3: '• Configured URLs will be used to fetch market data and trading signals',
|
||
editAIModel: 'Edit AI Model',
|
||
addAIModel: 'Add AI Model',
|
||
confirmDeleteModel: 'Are you sure you want to delete this AI model configuration?',
|
||
selectModel: 'Select AI Model',
|
||
pleaseSelectModel: 'Please select a model',
|
||
customBaseURL: 'Base URL (Optional)',
|
||
customBaseURLPlaceholder: 'Custom API base URL, e.g.: https://api.openai.com/v1',
|
||
leaveBlankForDefault: 'Leave blank to use default API address',
|
||
modelConfigInfo1: '• API Key will be encrypted and stored, please ensure it is valid',
|
||
modelConfigInfo2: '• Base URL is used for custom API server address',
|
||
modelConfigInfo3: '• After deleting configuration, traders using this model will not work properly',
|
||
saveConfig: 'Save Configuration',
|
||
editExchange: 'Edit Exchange',
|
||
addExchange: 'Add Exchange',
|
||
confirmDeleteExchange: 'Are you sure you want to delete this exchange configuration?',
|
||
pleaseSelectExchange: 'Please select an exchange',
|
||
exchangeConfigWarning1: '• API keys will be encrypted, recommend using read-only or futures trading permissions',
|
||
exchangeConfigWarning2: '• Do not grant withdrawal permissions to ensure fund security',
|
||
exchangeConfigWarning3: '• After deleting configuration, related traders will not be able to trade',
|
||
edit: 'Edit',
|
||
|
||
// Error Messages
|
||
createTraderFailed: 'Failed to create trader',
|
||
getTraderConfigFailed: 'Failed to get trader configuration',
|
||
modelConfigNotExist: 'Model configuration does not exist or is not enabled',
|
||
exchangeConfigNotExist: 'Exchange configuration does not exist or is not enabled',
|
||
updateTraderFailed: 'Failed to update trader',
|
||
deleteTraderFailed: 'Failed to delete trader',
|
||
operationFailed: 'Operation failed',
|
||
deleteConfigFailed: 'Failed to delete configuration',
|
||
modelNotExist: 'Model does not exist',
|
||
saveConfigFailed: 'Failed to save configuration',
|
||
exchangeNotExist: 'Exchange does not exist',
|
||
deleteExchangeConfigFailed: 'Failed to delete exchange configuration',
|
||
saveSignalSourceFailed: 'Failed to save signal source configuration',
|
||
|
||
// Login & Register
|
||
login: 'Sign In',
|
||
register: 'Sign Up',
|
||
email: 'Email',
|
||
password: 'Password',
|
||
confirmPassword: 'Confirm Password',
|
||
emailPlaceholder: 'your@email.com',
|
||
passwordPlaceholder: 'Enter your password',
|
||
confirmPasswordPlaceholder: 'Re-enter your password',
|
||
otpPlaceholder: '000000',
|
||
loginTitle: 'Sign in to your account',
|
||
registerTitle: 'Create a new account',
|
||
loginButton: 'Sign In',
|
||
registerButton: 'Sign Up',
|
||
back: 'Back',
|
||
noAccount: "Don't have an account?",
|
||
hasAccount: 'Already have an account?',
|
||
registerNow: 'Sign up now',
|
||
loginNow: 'Sign in now',
|
||
forgotPassword: 'Forgot password?',
|
||
rememberMe: 'Remember me',
|
||
otpCode: 'OTP Code',
|
||
scanQRCode: 'Scan QR Code',
|
||
enterOTPCode: 'Enter 6-digit OTP code',
|
||
verifyOTP: 'Verify OTP',
|
||
setupTwoFactor: 'Set up two-factor authentication',
|
||
setupTwoFactorDesc: 'Follow the steps below to secure your account with Google Authenticator',
|
||
scanQRCodeInstructions: 'Scan this QR code with Google Authenticator or Authy',
|
||
otpSecret: 'Or enter this secret manually:',
|
||
qrCodeHint: 'QR code (if scanning fails, use the secret below):',
|
||
authStep1Title: 'Step 1: Install Google Authenticator',
|
||
authStep1Desc: 'Download and install Google Authenticator from your app store',
|
||
authStep2Title: 'Step 2: Add account',
|
||
authStep2Desc: 'Tap "+", then choose "Scan QR code" or "Enter a setup key"',
|
||
authStep3Title: 'Step 3: Verify setup',
|
||
authStep3Desc: 'After setup, continue to enter the 6-digit code',
|
||
setupCompleteContinue: 'I have completed setup, continue',
|
||
copy: 'Copy',
|
||
completeRegistration: 'Complete Registration',
|
||
completeRegistrationSubtitle: 'to complete registration',
|
||
loginSuccess: 'Login successful',
|
||
registrationSuccess: 'Registration successful',
|
||
loginFailed: 'Login failed',
|
||
registrationFailed: 'Registration failed',
|
||
verificationFailed: 'OTP verification failed',
|
||
invalidCredentials: 'Invalid email or password',
|
||
passwordMismatch: 'Passwords do not match',
|
||
emailRequired: 'Email is required',
|
||
passwordRequired: 'Password is required',
|
||
invalidEmail: 'Invalid email format',
|
||
passwordTooShort: 'Password must be at least 6 characters',
|
||
|
||
// Landing Page
|
||
features: 'Features',
|
||
howItWorks: 'How it Works',
|
||
community: 'Community',
|
||
language: 'Language',
|
||
loggedInAs: 'Logged in as',
|
||
exitLogin: 'Sign Out',
|
||
signIn: 'Sign In',
|
||
signUp: 'Sign Up',
|
||
|
||
// Hero Section
|
||
githubStarsInDays: '2.5K+ GitHub Stars in 3 days',
|
||
heroTitle1: 'Read the Market.',
|
||
heroTitle2: 'Write the Trade.',
|
||
heroDescription: 'NOFX is the future standard for AI trading — an open, community-driven agentic trading OS. Supporting Binance, Aster DEX and other exchanges, self-hosted, multi-agent competition, let AI automatically make decisions, execute and optimize trades for you.',
|
||
poweredBy: 'Powered by Aster DEX and Binance, strategically invested by Amber.ac.',
|
||
|
||
// Landing Page CTA
|
||
readyToDefine: 'Ready to define the future of AI trading?',
|
||
startWithCrypto: 'Starting with crypto markets, expanding to TradFi. NOFX is the infrastructure of AgentFi.',
|
||
getStartedNow: 'Get Started Now',
|
||
viewSourceCode: 'View Source Code',
|
||
|
||
// Features Section
|
||
coreFeatures: 'Core Features',
|
||
whyChooseNofx: 'Why Choose NOFX?',
|
||
openCommunityDriven: 'Open source, transparent, community-driven AI trading OS',
|
||
openSourceSelfHosted: '100% Open Source & Self-Hosted',
|
||
openSourceDesc: 'Your framework, your rules. Non-black box, supports custom prompts and multi-models.',
|
||
openSourceFeatures1: 'Fully open source code',
|
||
openSourceFeatures2: 'Self-hosting deployment support',
|
||
openSourceFeatures3: 'Custom AI prompts',
|
||
openSourceFeatures4: 'Multi-model support (DeepSeek, Qwen)',
|
||
multiAgentCompetition: 'Multi-Agent Intelligent Competition',
|
||
multiAgentDesc: 'AI strategies battle at high speed in sandbox, survival of the fittest, achieving strategy evolution.',
|
||
multiAgentFeatures1: 'Multiple AI agents running in parallel',
|
||
multiAgentFeatures2: 'Automatic strategy optimization',
|
||
multiAgentFeatures3: 'Sandbox security testing',
|
||
multiAgentFeatures4: 'Cross-market strategy porting',
|
||
secureReliableTrading: 'Secure and Reliable Trading',
|
||
secureDesc: 'Enterprise-grade security, complete control over your funds and trading strategies.',
|
||
secureFeatures1: 'Local private key management',
|
||
secureFeatures2: 'Fine-grained API permission control',
|
||
secureFeatures3: 'Real-time risk monitoring',
|
||
secureFeatures4: 'Trading log auditing',
|
||
|
||
// About Section
|
||
aboutNofx: 'About NOFX',
|
||
whatIsNofx: 'What is NOFX?',
|
||
nofxNotAnotherBot: "NOFX is not another trading bot, but the 'Linux' of AI trading —",
|
||
nofxDescription1: 'a transparent, trustworthy open source OS that provides a unified',
|
||
nofxDescription2: "'decision-risk-execution' layer, supporting all asset classes.",
|
||
nofxDescription3: 'Starting with crypto markets (24/7, high volatility perfect testing ground), future expansion to stocks, futures, forex. Core: open architecture, AI',
|
||
nofxDescription4: 'Darwinism (multi-agent self-competition, strategy evolution), CodeFi',
|
||
nofxDescription5: 'flywheel (developers get point rewards for PR contributions).',
|
||
youFullControl: 'You 100% Control',
|
||
fullControlDesc: 'Complete control over AI prompts and funds',
|
||
startupMessages1: 'Starting automated trading system...',
|
||
startupMessages2: 'API server started on port 8080',
|
||
startupMessages3: 'Web console http://localhost:3000',
|
||
|
||
// How It Works Section
|
||
howToStart: 'How to Get Started with NOFX',
|
||
fourSimpleSteps: 'Four simple steps to start your AI automated trading journey',
|
||
step1Title: 'Clone GitHub Repository',
|
||
step1Desc: 'git clone https://github.com/tinkle-community/nofx and switch to dev branch to test new features.',
|
||
step2Title: 'Configure Environment',
|
||
step2Desc: 'Frontend setup for exchange APIs (like Binance, Hyperliquid), AI models and custom prompts.',
|
||
step3Title: 'Deploy & Run',
|
||
step3Desc: 'One-click Docker deployment, start AI agents. Note: High-risk market, only test with money you can afford to lose.',
|
||
step4Title: 'Optimize & Contribute',
|
||
step4Desc: 'Monitor trading, submit PRs to improve framework. Join Telegram to share strategies.',
|
||
importantRiskWarning: 'Important Risk Warning',
|
||
riskWarningText: 'Dev branch is unstable, do not use funds you cannot afford to lose. NOFX is non-custodial, no official strategies. Trading involves risks, invest carefully.',
|
||
|
||
// Community Section (testimonials are kept as-is since they are quotes)
|
||
|
||
// Footer Section
|
||
futureStandardAI: 'The future standard of AI trading',
|
||
links: 'Links',
|
||
resources: 'Resources',
|
||
documentation: 'Documentation',
|
||
supporters: 'Supporters',
|
||
strategicInvestment: '(Strategic Investment)',
|
||
|
||
// Login Modal
|
||
accessNofxPlatform: 'Access NOFX Platform',
|
||
loginRegisterPrompt: 'Please login or register to access the full AI trading platform',
|
||
registerNewAccount: 'Register New Account',
|
||
},
|
||
zh: {
|
||
// Header
|
||
appTitle: 'NOFX',
|
||
subtitle: '多AI模型交易平台',
|
||
aiTraders: 'AI交易员',
|
||
details: '详情',
|
||
tradingPanel: '交易面板',
|
||
competition: '竞赛',
|
||
running: '运行中',
|
||
stopped: '已停止',
|
||
adminMode: '管理员模式',
|
||
logout: '退出',
|
||
switchTrader: '切换交易员:',
|
||
view: '查看',
|
||
|
||
// Navigation
|
||
realtimeNav: '实时',
|
||
configNav: '配置',
|
||
dashboardNav: '看板',
|
||
|
||
// Footer
|
||
footerTitle: 'NOFX - AI交易系统',
|
||
footerWarning: '⚠️ 交易有风险,请谨慎使用。',
|
||
|
||
// Stats Cards
|
||
totalEquity: '总净值',
|
||
availableBalance: '可用余额',
|
||
totalPnL: '总盈亏',
|
||
positions: '持仓',
|
||
margin: '保证金',
|
||
free: '空闲',
|
||
|
||
// Positions Table
|
||
currentPositions: '当前持仓',
|
||
active: '活跃',
|
||
symbol: '币种',
|
||
side: '方向',
|
||
entryPrice: '入场价',
|
||
markPrice: '标记价',
|
||
quantity: '数量',
|
||
positionValue: '仓位价值',
|
||
leverage: '杠杆',
|
||
unrealizedPnL: '未实现盈亏',
|
||
liqPrice: '强平价',
|
||
long: '多头',
|
||
short: '空头',
|
||
noPositions: '无持仓',
|
||
noActivePositions: '当前没有活跃的交易持仓',
|
||
|
||
// Recent Decisions
|
||
recentDecisions: '最近决策',
|
||
lastCycles: '最近 {count} 个交易周期',
|
||
noDecisionsYet: '暂无决策',
|
||
aiDecisionsWillAppear: 'AI交易决策将显示在这里',
|
||
cycle: '周期',
|
||
success: '成功',
|
||
failed: '失败',
|
||
inputPrompt: '输入提示',
|
||
aiThinking: '💭 AI思维链分析',
|
||
collapse: '▼ 收起',
|
||
expand: '▶ 展开',
|
||
|
||
// Equity Chart
|
||
accountEquityCurve: '账户净值曲线',
|
||
noHistoricalData: '暂无历史数据',
|
||
dataWillAppear: '运行几个周期后将显示收益率曲线',
|
||
initialBalance: '初始余额',
|
||
currentEquity: '当前净值',
|
||
historicalCycles: '历史周期',
|
||
displayRange: '显示范围',
|
||
recent: '最近',
|
||
allData: '全部数据',
|
||
cycles: '个',
|
||
|
||
// Comparison Chart
|
||
comparisonMode: '对比模式',
|
||
dataPoints: '数据点数',
|
||
currentGap: '当前差距',
|
||
count: '{count} 个',
|
||
|
||
// Competition Page
|
||
aiCompetition: 'AI竞赛',
|
||
traders: '交易员',
|
||
liveBattle: '实时对战',
|
||
realTimeBattle: '实时对战',
|
||
leader: '领先者',
|
||
leaderboard: '排行榜',
|
||
live: '实时',
|
||
realTime: '实时',
|
||
performanceComparison: '表现对比',
|
||
realTimePnL: '实时收益率',
|
||
realTimePnLPercent: '实时收益率',
|
||
headToHead: '正面对决',
|
||
leadingBy: '领先 {gap}%',
|
||
behindBy: '落后 {gap}%',
|
||
equity: '权益',
|
||
pnl: '收益',
|
||
pos: '持仓',
|
||
|
||
// AI Learning
|
||
aiLearning: 'AI学习与反思',
|
||
tradesAnalyzed: '已分析 {count} 笔交易 · 实时演化',
|
||
latestReflection: '最新反思',
|
||
fullCoT: '📋 完整思维链',
|
||
totalTrades: '总交易数',
|
||
winRate: '胜率',
|
||
avgWin: '平均盈利',
|
||
avgLoss: '平均亏损',
|
||
profitFactor: '盈亏比',
|
||
avgWinDivLoss: '平均盈利 ÷ 平均亏损',
|
||
excellent: '🔥 优秀 - 盈利能力强',
|
||
good: '✓ 良好 - 稳定盈利',
|
||
fair: '⚠️ 一般 - 需要优化',
|
||
poor: '❌ 较差 - 亏损超过盈利',
|
||
bestPerformer: '最佳表现',
|
||
worstPerformer: '最差表现',
|
||
symbolPerformance: '📊 币种表现',
|
||
tradeHistory: '历史成交',
|
||
completedTrades: '最近 {count} 笔已完成交易',
|
||
noCompletedTrades: '暂无完成的交易',
|
||
completedTradesWillAppear: '已完成的交易将显示在这里',
|
||
entry: '入场',
|
||
exit: '出场',
|
||
stopLoss: '止损',
|
||
latest: '最新',
|
||
|
||
// AI Learning Description
|
||
howAILearns: '💡 AI如何学习和进化',
|
||
aiLearningPoint1: '每次决策前分析最近20个交易周期',
|
||
aiLearningPoint2: '识别表现最好和最差的币种',
|
||
aiLearningPoint3: '根据胜率优化仓位大小',
|
||
aiLearningPoint4: '避免重复过去的错误',
|
||
|
||
// AI Traders Management
|
||
manageAITraders: '管理您的AI交易机器人',
|
||
aiModels: 'AI模型',
|
||
exchanges: '交易所',
|
||
createTrader: '创建交易员',
|
||
modelConfiguration: '模型配置',
|
||
configured: '已配置',
|
||
notConfigured: '未配置',
|
||
currentTraders: '当前交易员',
|
||
noTraders: '暂无AI交易员',
|
||
createFirstTrader: '创建您的第一个AI交易员开始使用',
|
||
configureModelsFirst: '请先配置AI模型',
|
||
configureExchangesFirst: '请先配置交易所',
|
||
configureModelsAndExchangesFirst: '请先配置AI模型和交易所',
|
||
modelNotConfigured: '所选模型未配置',
|
||
exchangeNotConfigured: '所选交易所未配置',
|
||
confirmDeleteTrader: '确定要删除这个交易员吗?',
|
||
status: '状态',
|
||
start: '启动',
|
||
stop: '停止',
|
||
createNewTrader: '创建新的AI交易员',
|
||
selectAIModel: '选择AI模型',
|
||
selectExchange: '选择交易所',
|
||
traderName: '交易员名称',
|
||
enterTraderName: '输入交易员名称',
|
||
cancel: '取消',
|
||
create: '创建',
|
||
configureAIModels: '配置AI模型',
|
||
configureExchanges: '配置交易所',
|
||
aiScanInterval: 'AI 扫描决策间隔 (分钟)',
|
||
scanIntervalRecommend: '建议: 3-10分钟',
|
||
useTestnet: '使用测试网',
|
||
enabled: '启用',
|
||
save: '保存',
|
||
|
||
// AI Model Configuration
|
||
officialAPI: '官方API',
|
||
customAPI: '自定义API',
|
||
apiKey: 'API密钥',
|
||
customAPIURL: '自定义API地址',
|
||
enterAPIKey: '请输入API密钥',
|
||
enterCustomAPIURL: '请输入自定义API端点地址',
|
||
useOfficialAPI: '使用官方API服务',
|
||
useCustomAPI: '使用自定义API端点',
|
||
|
||
// Exchange Configuration
|
||
secretKey: '密钥',
|
||
privateKey: '私钥',
|
||
walletAddress: '钱包地址',
|
||
user: '用户名',
|
||
signer: '签名者',
|
||
passphrase: '口令',
|
||
enterSecretKey: '输入密钥',
|
||
enterPrivateKey: '输入私钥',
|
||
enterWalletAddress: '输入钱包地址',
|
||
enterUser: '输入用户名',
|
||
enterSigner: '输入签名者地址',
|
||
enterPassphrase: '输入Passphrase (OKX必填)',
|
||
hyperliquidPrivateKeyDesc: 'Hyperliquid 使用私钥进行交易认证',
|
||
hyperliquidWalletAddressDesc: '与私钥对应的钱包地址',
|
||
testnetDescription: '启用后将连接到交易所测试环境,用于模拟交易',
|
||
securityWarning: '安全提示',
|
||
saveConfiguration: '保存配置',
|
||
|
||
// Trader Configuration
|
||
positionMode: '仓位模式',
|
||
crossMarginMode: '全仓模式',
|
||
isolatedMarginMode: '逐仓模式',
|
||
crossMarginDescription: '全仓模式:所有仓位共享账户余额作为保证金',
|
||
isolatedMarginDescription: '逐仓模式:每个仓位独立管理保证金,风险隔离',
|
||
leverageConfiguration: '杠杆配置',
|
||
btcEthLeverage: 'BTC/ETH杠杆',
|
||
altcoinLeverage: '山寨币杠杆',
|
||
leverageRecommendation: '推荐:BTC/ETH 5-10倍,山寨币 3-5倍,控制风险',
|
||
tradingSymbols: '交易币种',
|
||
tradingSymbolsPlaceholder: '输入币种,逗号分隔(如:BTCUSDT,ETHUSDT,SOLUSDT)',
|
||
selectSymbols: '选择币种',
|
||
selectTradingSymbols: '选择交易币种',
|
||
selectedSymbolsCount: '已选择 {count} 个币种',
|
||
clearSelection: '清空选择',
|
||
confirmSelection: '确认选择',
|
||
tradingSymbolsDescription: '留空 = 使用默认币种。必须以USDT结尾(如:BTCUSDT, ETHUSDT)',
|
||
btcEthLeverageValidation: 'BTC/ETH杠杆必须在1-50倍之间',
|
||
altcoinLeverageValidation: '山寨币杠杆必须在1-20倍之间',
|
||
invalidSymbolFormat: '无效的币种格式:{symbol},必须以USDT结尾',
|
||
|
||
// Loading & Error
|
||
loading: '加载中...',
|
||
loadingError: '⚠️ 加载AI学习数据失败',
|
||
noCompleteData: '暂无完整交易数据(需要完成开仓→平仓的完整周期)',
|
||
|
||
// AI Traders Page - Additional
|
||
inUse: '正在使用',
|
||
noModelsConfigured: '暂无已配置的AI模型',
|
||
noExchangesConfigured: '暂无已配置的交易所',
|
||
signalSource: '信号源',
|
||
signalSourceConfig: '信号源配置',
|
||
coinPoolDescription: '用于获取币种池数据的API地址,留空则不使用此信号源',
|
||
oiTopDescription: '用于获取持仓量排行数据的API地址,留空则不使用此信号源',
|
||
information: '说明',
|
||
signalSourceInfo1: '• 信号源配置为用户级别,每个用户可以设置自己的信号源URL',
|
||
signalSourceInfo2: '• 在创建交易员时可以选择是否使用这些信号源',
|
||
signalSourceInfo3: '• 配置的URL将用于获取市场数据和交易信号',
|
||
editAIModel: '编辑AI模型',
|
||
addAIModel: '添加AI模型',
|
||
confirmDeleteModel: '确定要删除此AI模型配置吗?',
|
||
selectModel: '选择AI模型',
|
||
pleaseSelectModel: '请选择模型',
|
||
customBaseURL: 'Base URL (可选)',
|
||
customBaseURLPlaceholder: '自定义API基础URL,如: https://api.openai.com/v1',
|
||
leaveBlankForDefault: '留空则使用默认API地址',
|
||
modelConfigInfo1: '• API Key将被加密存储,请确保密钥有效',
|
||
modelConfigInfo2: '• Base URL用于自定义API服务器地址',
|
||
modelConfigInfo3: '• 删除配置后,使用此模型的交易员将无法正常工作',
|
||
saveConfig: '保存配置',
|
||
editExchange: '编辑交易所',
|
||
addExchange: '添加交易所',
|
||
confirmDeleteExchange: '确定要删除此交易所配置吗?',
|
||
pleaseSelectExchange: '请选择交易所',
|
||
exchangeConfigWarning1: '• API密钥将被加密存储,建议使用只读或期货交易权限',
|
||
exchangeConfigWarning2: '• 不要授予提现权限,确保资金安全',
|
||
exchangeConfigWarning3: '• 删除配置后,相关交易员将无法正常交易',
|
||
edit: '编辑',
|
||
|
||
// Error Messages
|
||
createTraderFailed: '创建交易员失败',
|
||
getTraderConfigFailed: '获取交易员配置失败',
|
||
modelConfigNotExist: 'AI模型配置不存在或未启用',
|
||
exchangeConfigNotExist: '交易所配置不存在或未启用',
|
||
updateTraderFailed: '更新交易员失败',
|
||
deleteTraderFailed: '删除交易员失败',
|
||
operationFailed: '操作失败',
|
||
deleteConfigFailed: '删除配置失败',
|
||
modelNotExist: '模型不存在',
|
||
saveConfigFailed: '保存配置失败',
|
||
exchangeNotExist: '交易所不存在',
|
||
deleteExchangeConfigFailed: '删除交易所配置失败',
|
||
saveSignalSourceFailed: '保存信号源配置失败',
|
||
|
||
// Login & Register
|
||
login: '登录',
|
||
register: '注册',
|
||
email: '邮箱',
|
||
password: '密码',
|
||
confirmPassword: '确认密码',
|
||
emailPlaceholder: '请输入邮箱地址',
|
||
passwordPlaceholder: '请输入密码(至少6位)',
|
||
confirmPasswordPlaceholder: '请再次输入密码',
|
||
otpPlaceholder: '000000',
|
||
loginTitle: '登录到您的账户',
|
||
registerTitle: '创建新账户',
|
||
loginButton: '登录',
|
||
registerButton: '注册',
|
||
back: '返回',
|
||
noAccount: '还没有账户?',
|
||
hasAccount: '已有账户?',
|
||
registerNow: '立即注册',
|
||
loginNow: '立即登录',
|
||
forgotPassword: '忘记密码?',
|
||
rememberMe: '记住我',
|
||
otpCode: 'OTP验证码',
|
||
scanQRCode: '扫描二维码',
|
||
enterOTPCode: '输入6位OTP验证码',
|
||
verifyOTP: '验证OTP',
|
||
setupTwoFactor: '设置双因素认证',
|
||
setupTwoFactorDesc: '请按以下步骤设置Google验证器以保护您的账户安全',
|
||
scanQRCodeInstructions: '使用Google Authenticator或Authy扫描此二维码',
|
||
otpSecret: '或手动输入此密钥:',
|
||
qrCodeHint: '二维码(如果无法扫描,请使用下方密钥):',
|
||
authStep1Title: '步骤1:下载Google Authenticator',
|
||
authStep1Desc: '在手机应用商店下载并安装Google Authenticator应用',
|
||
authStep2Title: '步骤2:添加账户',
|
||
authStep2Desc: '在应用中点击“+”,选择“扫描二维码”或“手动输入密钥”',
|
||
authStep3Title: '步骤3:验证设置',
|
||
authStep3Desc: '设置完成后,点击下方按钮输入6位验证码',
|
||
setupCompleteContinue: '我已完成设置,继续',
|
||
copy: '复制',
|
||
completeRegistration: '完成注册',
|
||
completeRegistrationSubtitle: '以完成注册',
|
||
loginSuccess: '登录成功',
|
||
registrationSuccess: '注册成功',
|
||
loginFailed: '登录失败',
|
||
registrationFailed: '注册失败',
|
||
verificationFailed: 'OTP验证失败',
|
||
invalidCredentials: '邮箱或密码错误',
|
||
passwordMismatch: '两次输入的密码不一致',
|
||
emailRequired: '请输入邮箱',
|
||
passwordRequired: '请输入密码',
|
||
invalidEmail: '邮箱格式不正确',
|
||
passwordTooShort: '密码至少需要6个字符',
|
||
|
||
// Landing Page
|
||
features: '功能',
|
||
howItWorks: '如何运作',
|
||
community: '社区',
|
||
language: '语言',
|
||
loggedInAs: '已登录为',
|
||
exitLogin: '退出登录',
|
||
signIn: '登录',
|
||
signUp: '注册',
|
||
|
||
// Hero Section
|
||
githubStarsInDays: '3 天内 2.5K+ GitHub Stars',
|
||
heroTitle1: 'Read the Market.',
|
||
heroTitle2: 'Write the Trade.',
|
||
heroDescription: 'NOFX 是 AI 交易的未来标准——一个开放、社区驱动的代理式交易操作系统。支持 Binance、Aster DEX 等交易所,自托管、多代理竞争,让 AI 为你自动决策、执行和优化交易。',
|
||
poweredBy: '由 Aster DEX 和 Binance 提供支持,Amber.ac 战略投资。',
|
||
|
||
// Landing Page CTA
|
||
readyToDefine: '准备好定义 AI 交易的未来吗?',
|
||
startWithCrypto: '从加密市场起步,扩展到 TradFi。NOFX 是 AgentFi 的基础架构。',
|
||
getStartedNow: '立即开始',
|
||
viewSourceCode: '查看源码',
|
||
|
||
// Features Section
|
||
coreFeatures: '核心功能',
|
||
whyChooseNofx: '为什么选择 NOFX?',
|
||
openCommunityDriven: '开源、透明、社区驱动的 AI 交易操作系统',
|
||
openSourceSelfHosted: '100% 开源与自托管',
|
||
openSourceDesc: '你的框架,你的规则。非黑箱,支持自定义提示词和多模型。',
|
||
openSourceFeatures1: '完全开源代码',
|
||
openSourceFeatures2: '支持自托管部署',
|
||
openSourceFeatures3: '自定义 AI 提示词',
|
||
openSourceFeatures4: '多模型支持(DeepSeek、Qwen)',
|
||
multiAgentCompetition: '多代理智能竞争',
|
||
multiAgentDesc: 'AI 策略在沙盒中高速战斗,最优者生存,实现策略进化。',
|
||
multiAgentFeatures1: '多 AI 代理并行运行',
|
||
multiAgentFeatures2: '策略自动优化',
|
||
multiAgentFeatures3: '沙盒安全测试',
|
||
multiAgentFeatures4: '跨市场策略移植',
|
||
secureReliableTrading: '安全可靠交易',
|
||
secureDesc: '企业级安全保障,完全掌控你的资金和交易策略。',
|
||
secureFeatures1: '本地私钥管理',
|
||
secureFeatures2: 'API 权限精细控制',
|
||
secureFeatures3: '实时风险监控',
|
||
secureFeatures4: '交易日志审计',
|
||
|
||
// About Section
|
||
aboutNofx: '关于 NOFX',
|
||
whatIsNofx: '什么是 NOFX?',
|
||
nofxNotAnotherBot: 'NOFX 不是另一个交易机器人,而是 AI 交易的 \'Linux\' ——',
|
||
nofxDescription1: '一个透明、可信任的开源 OS,提供统一的 \'决策-风险-执行\'',
|
||
nofxDescription2: '层,支持所有资产类别。',
|
||
nofxDescription3: '从加密市场起步(24/7、高波动性完美测试场),未来扩展到股票、期货、外汇。核心:开放架构、AI',
|
||
nofxDescription4: '达尔文主义(多代理自竞争、策略进化)、CodeFi 飞轮(开发者 PR',
|
||
nofxDescription5: '贡献获积分奖励)。',
|
||
youFullControl: '你 100% 掌控',
|
||
fullControlDesc: '完全掌控 AI 提示词和资金',
|
||
startupMessages1: ' 启动自动交易系统...',
|
||
startupMessages2: ' API服务器启动在端口 8080',
|
||
startupMessages3: ' Web 控制台 http://localhost:3000',
|
||
|
||
// How It Works Section
|
||
howToStart: '如何开始使用 NOFX',
|
||
fourSimpleSteps: '四个简单步骤,开启 AI 自动交易之旅',
|
||
step1Title: '拉取 GitHub 仓库',
|
||
step1Desc: 'git clone https://github.com/tinkle-community/nofx 并切换到 dev 分支测试新功能。',
|
||
step2Title: '配置环境',
|
||
step2Desc: '前端设置交易所 API(如 Binance、Hyperliquid)、AI 模型和自定义提示词。',
|
||
step3Title: '部署与运行',
|
||
step3Desc: '一键 Docker 部署,启动 AI 代理。注意:高风险市场,仅用闲钱测试。',
|
||
step4Title: '优化与贡献',
|
||
step4Desc: '监控交易,提交 PR 改进框架。加入 Telegram 分享策略。',
|
||
importantRiskWarning: '重要风险提示',
|
||
riskWarningText: 'dev 分支不稳定,勿用无法承受损失的资金。NOFX 非托管,无官方策略。交易有风险,投资需谨慎。',
|
||
|
||
// Community Section (testimonials are kept as-is since they are quotes)
|
||
|
||
// Footer Section
|
||
futureStandardAI: 'AI 交易的未来标准',
|
||
links: '链接',
|
||
resources: '资源',
|
||
documentation: '文档',
|
||
supporters: '支持方',
|
||
strategicInvestment: '(战略投资)',
|
||
|
||
// Login Modal
|
||
accessNofxPlatform: '访问 NOFX 平台',
|
||
loginRegisterPrompt: '请选择登录或注册以访问完整的 AI 交易平台',
|
||
registerNewAccount: '注册新账号',
|
||
}
|
||
};
|
||
|
||
export function t(key: string, lang: Language, params?: Record<string, string | number>): string {
|
||
let text = translations[lang][key as keyof typeof translations['en']] || key;
|
||
|
||
// Replace parameters like {count}, {gap}, etc.
|
||
if (params) {
|
||
Object.entries(params).forEach(([param, value]) => {
|
||
text = text.replace(`{${param}}`, String(value));
|
||
});
|
||
}
|
||
|
||
return text;
|
||
}
|