Эх сурвалжийг харах

新增修改国际化语义文件

liqingshan 1 сар өмнө
parent
commit
2ae008c2f3

+ 11 - 4
code/src/components/market/MarketTable.vue

@@ -96,8 +96,8 @@ const sortedList = computed(() => {
             >
               {{ col.label }}
               <span class="sort-icon">
-                <span :class="sortKey === col.key && sortDir === 'asc' ? 'sort-up' : ''">↑</span>
-                <span :class="sortKey === col.key && sortDir === 'desc' ? 'sort-down' : ''">↓</span>
+				<span class="sort-up" :class="{ active: sortKey === col.key && sortDir === 'desc' }">↑</span>
+                <span class="sort-down" :class="{ active: sortKey === col.key && sortDir === 'asc' }">↓</span>
               </span>
             </th>
           </tr>
@@ -197,8 +197,15 @@ const sortedList = computed(() => {
   gap: 1px;
   vertical-align: middle;
 }
-.th:hover .sort-icon { opacity: 0.7; }
-.sort-up, .sort-down { opacity: 1 !important; color: var(--color-primary); }
+.th:hover .sort-icon { opacity: 0.8; }
+/* .sort-up, .sort-down { opacity: 1 !important; color: var(--color-primary); } */
+.sort-up, .sort-down {
+  opacity: 0.2;
+}
+.sort-up.active, .sort-down.active {
+  opacity: 1 !important;
+  color: var(--color-primary);
+}
 
 /* Loading skeleton */
 .skeleton-row td { padding: var(--space-3) var(--space-4); }

+ 4 - 1
code/src/composables/useMarketWs.ts

@@ -4,7 +4,7 @@ const WS_URL = import.meta.env.VITE_WS_MARKET_URL as string
 
 const RES_MAP: Record<KlineResolution, string> = {
   '1': '1m', '5': '5m', '15': '15m', '30': '30m',
-  '60': '1h', '240': '4h', '1D': '1d',
+  '60': '1h', '240': '4h', '1D': '1d', '1W': '1w', '1M': '1mon', '3M': '3mon',
 }
 
 // 每根 K 线对应的毫秒数
@@ -16,6 +16,9 @@ export const BAR_MS: Record<KlineResolution, number> = {
   '60':  3_600_000,
   '240': 14_400_000,
   '1D':  86_400_000,
+  '1W':  604_800_000,
+  '1M':  2_592_000_000,
+  '3M':  7_776_000_000,
 }
 export const BAR_COUNT = 200
 

+ 4 - 1
code/src/composables/useSpotMarketWs.ts

@@ -16,7 +16,7 @@ const WS_URL = import.meta.env.VITE_WS_SPOT_URL as string
 /** 现货 WS K 线 period 后缀(与 Flutter spotWsKlinePeriod 一致) */
 const SPOT_INTERVAL: Record<KlineResolution, string> = {
   '1': '1min', '5': '5min', '15': '15min', '30': '30min',
-  '60': '60min', '240': '4h', '1D': '1day',
+  '60': '60min', '240': '4h', '1D': '1day', '1W': '1week', '1M': '1month', '3M': '3month',
 }
 
 export const BAR_MS: Record<KlineResolution, number> = {
@@ -27,6 +27,9 @@ export const BAR_MS: Record<KlineResolution, number> = {
   '60':  3_600_000,
   '240': 14_400_000,
   '1D':  86_400_000,
+  '1W':  604_800_000,
+  '1M':  2_592_000_000,
+  '3M':  7_776_000_000,
 }
 export const BAR_COUNT = 200
 

+ 1065 - 0
code/src/locales/de.ts

@@ -0,0 +1,1065 @@
+import { futuresPageByLocale } from './futuresPage.i18n'
+import { financePageByLocale } from './financePage.i18n'
+
+export default {
+	nav: {
+		home: 'Startseite',
+		market: 'Markt',
+		spot: 'Spot',
+		futures: 'Futures',
+		copyTrade: 'Copy Trading',
+		finance: 'Finanzprodukte',
+		idoPresale: 'IDO-Vorverkauf',
+		claimAirdrop: 'Airdrop einlösen',
+		announcements: 'Ankündigungen',
+		download: 'Herunterladen',
+	},
+	lang: {
+		title: '语言',
+		zhCN: '简体中文',
+		zhTW: '繁體中文',
+		en: 'English',
+		ko: '한국어',
+		ja: '日本語',
+		hi: 'हिन्दी',
+		id: 'Bahasa Indonesia',
+		es: 'Español',		   // 西班牙语
+		ru: 'Русский',         // 俄语
+		pt: 'Português',       // 葡萄牙语
+		de: 'Deutsch',         // 德语
+		fr: 'Français',        // 法语
+		tr: 'Türkçe',          // 土耳其语
+		vi: 'Tiếng Việt'       // 越南语
+	},
+	header: {
+		login: 'Anmelden',
+		register: 'Registrieren',
+		account: 'Mein Konto',
+		assets: 'Meine Vermögenswerte',
+		security: 'Sicherheit',
+		broker: 'Broker',
+		logout: 'Abmelden',
+		logoutShort: 'Abmelden',
+		downloadTitle: 'App herunterladen',
+		brokerApplyTitle: 'Broker-Antrag stellen',
+		brokerApplyDesc: 'Sie sind noch kein Broker. Ihre Anfrage wird mit Ihren Kontodaten eingereicht und nach Prüfung freigeschaltet.',
+		cancel: 'Abbrechen',
+		applyNow: 'Jetzt beantragen',
+		viewApplyList: 'Antragsstatus prüfen',
+		submitting: 'Wird gesendet...',
+		menu: 'Menü',
+	},
+	common: {
+		loading: 'Wird geladen...',
+		retry: 'Erneut versuchen',
+		cancel: 'Abbrechen',
+		confirm: 'Bestätigen',
+		submit: 'Absenden',
+		save: 'Speichern',
+		send: 'Senden',
+		back: 'Zurück',
+		next: 'Weiter',
+		done: 'Fertig',
+		noData: 'Keine Daten vorhanden',
+		noRecord: 'Keine Einträge',
+		search: 'Suchen',
+		all: 'Alle',
+		max: 'Max',
+		copied: 'Kopiert',
+		networkError: 'Netzwerkfehler, bitte später erneut versuchen',
+		loadFailed: 'Laden fehlgeschlagen',
+		operationFailed: 'Vorgang fehlgeschlagen, erneut versuchen',
+		saveSuccess: 'Erfolgreich gespeichert',
+		more: 'Mehr',
+		perpetual: 'Perpetual-Futures',
+		set: 'Eingestellt',
+		notSet: 'Nicht eingestellt',
+		change: 'Ändern',
+		bind: 'Binden',
+		unbind: 'Lösen',
+		on: 'Aktiv',
+		off: 'Inaktiv',
+		status: 'Status',
+		time: 'Datum',
+		amount: 'Betrag',
+		type: 'Typ',
+		coin: 'Coin',
+		from: 'Von',
+		to: 'Nach',
+		close: 'Schließen',
+		contactService: 'Support kontaktieren',
+	},
+	home: {
+		heroTitle: 'Sichere und effiziente globale Handelsplattform für digitale Vermögenswerte',
+		heroDesc: 'iBit bietet stabilen, transparenten und professionellen Handel durch fortschrittliche Architektur und strenges Risikomanagement.',
+		register: 'Registrieren',
+		viewMarket: 'Markt ansehen',
+		downloadApp: 'App herunterladen',
+		coreAdvantages: 'Kernvorteile',
+		assetSafetyTitle: 'Vermögenssicherheit',
+		assetSafetyDesc: 'Getrennte Hot-/Cold-Wallets, Multi-Signatur und 24h-Überwachung zum Schutz Ihrer Mittel.',
+		highPerfTitle: 'Hohe Performance',
+		highPerfDesc: 'Eigene Matching-Engine mit millisekundenschneller Auftragsausführung für stabilen Handel.',
+		globalComplianceTitle: 'Globale Compliance',
+		globalComplianceDesc: 'Einhaltung internationaler Regularien für sicheren weltweiten Handel.',
+		transparentFeeTitle: 'Transparente Gebühren',
+		transparentFeeDesc: 'Fest definierte Gebühren ohne versteckte Kosten.',
+		aboutUs: 'Über uns',
+		aboutDesc: 'iBit ist eine globale Digitale-Vermögenswert-Börse mit Fokus auf Sicherheit, Stabilität und Effizienz.',
+		foundedYear: 'Gegründet 2023',
+		headquarters: 'In Dubai registriert, mit Lizenzen in USA, Kanada, Australien und Dubai.',
+		ourVision: 'Unsere Vision',
+		visionSubtitle: 'Aufbau einer vertrauenswürdigen Infrastruktur für globalen Digitalhandel',
+		ecoTitle: 'Ökosystem',
+		ecoDesc: 'Aufbau eines neuen Krypto-Handelsökosystems',
+		missionTitle: 'Mission',
+		missionDesc: 'Förderung des globalen Flusses digitaler Werte',
+		purposeTitle: 'Ziel',
+		purposeDesc: 'Vereinfachung von Investition und Verwaltung von Kryptowerten für Nutzer',
+		heroImageAlt: 'iBit Handelsplattform',
+		aboutImageAlt: 'Unternehmensvorstellung',
+	},
+	market: {
+		title: 'Echtzeitmarkt',
+		desc: 'Aktuelle Preise, Volumina und Kursschwankungen zur Marktverfolgung.',
+		hot: 'Beliebt',
+		topVolume: 'Höchstes Volumen',
+		gainers: 'Gewinner',
+		losers: 'Verlierer',
+		perpetual: 'Perpetual',
+		name: 'Name',
+		latestPrice: 'Preis',
+		change24h: '24h-Veränderung',
+		turnover: 'Volumen',
+		searchPair: 'Handelspaar suchen',
+		searchMarket: 'Coin, Paar oder Future suchen',
+		price: 'Preis',
+		change24hShort: '24h Änd.',
+		high24h: '24h Hoch',
+		low24h: '24h Tief',
+		volume24hLabel: '24h-Volumen',
+	},
+	auth: {
+		loginTitle: 'Anmeldung',
+		emailLogin: 'Anmeldung per E-Mail',
+		emailPlaceholder: 'E-Mail eingeben',
+		password: 'Passwort',
+		passwordPlaceholder: 'Passwort eingeben',
+		forgotPassword: 'Passwort vergessen?',
+		loginBtn: 'Anmelden',
+		noAccount: 'Kein Konto?',
+		registerNow: 'Jetzt registrieren',
+		verifyTitle: 'Verifizierungscode',
+		codeSentDesc: 'Code wurde an {email} gesendet, bitte Posteingang prüfen.',
+		codeSendDesc: 'Klicken, um Code an {email} zu senden.',
+		countdownResend: 'Erneut senden in {n}s',
+		resendCode: 'Code erneut senden',
+		confirmBtn: 'Bestätigen',
+		sendCode: 'Code senden',
+		forgotVerify: 'Verifizierungsmethode vergessen?',
+		loginSuccess: 'Erfolgreich angemeldet',
+		codeSentAgain: 'Code erneut versandt',
+		registerTitle: 'Registrierung',
+		emailRegister: 'Registrierung per E-Mail',
+		inviteCodeLabel: 'Einladungscode (optional)',
+		inviteCodePlaceholder: 'Einladungscode eintragen',
+		hasAccount: 'Bereits Konto vorhanden?',
+		loginNow: 'Anmelden',
+		verifyPageTitle: 'Sicherheitsverifizierung',
+		emailVerifyLabel: 'E-Mail-Verifizierung',
+		codePlaceholder: 'Code eingeben',
+		sendBtn: 'Senden',
+		passwordTitle: 'Passwort erstellen',
+		backBtn: '‹ Zurück',
+		inputPasswordLabel: 'Passwort',
+		confirmPasswordLabel: 'Passwort bestätigen',
+		confirmPasswordPlaceholder: 'Passwort wiederholen',
+		doneBtn: 'Fertig',
+		resetSuccess: 'Passwort geändert, mit neuen Zugangsdaten einloggen.',
+		registerSuccess: 'Registrierung abgeschlossen',
+		welcomeJoin: 'Willkommen bei iBit',
+		loginNowBtn: 'Anmelden',
+		forgotPasswordTitle: 'Passwort zurücksetzen',
+		emailLabel: 'E-Mail',
+		emailRegisteredPlaceholder: 'Registrierte E-Mail eingeben',
+		codeSentToast: 'Code versandt',
+	},
+	error: {
+		emailRequired: 'E-Mail erforderlich',
+		emailInvalid: 'Ungültiges E-Mail-Format',
+		passwordRequired: 'Passwort eingeben',
+		code6Required: '6-stelliger Verifizierungscode nötig',
+		codeRequired: 'Verifizierungscode eingeben',
+		loginFailed: 'Falsche E-Mail oder Passwort',
+		networkError: 'Netzwerkstörung, später versuchen',
+		emailAlreadyRegistered: 'Diese E-Mail ist bereits registriert, bitte anmelden',
+		confirmPasswordRequired: 'Passwortbestätigung erforderlich',
+		passwordMismatch: 'Passwörter stimmen nicht überein',
+		loadFailed: 'Sicherheitsdaten konnten nicht geladen werden',
+		refreshFailed: 'Aktualisierung fehlgeschlagen',
+		statusUpdated: 'Status aktualisiert',
+		currentPasswordRequired: 'Aktuelles Passwort eingeben',
+		sixDigitCode: '6-stelliger E-Mail-Code',
+		sixDigitGoogleCode: '6-stelliger Google-Code',
+		sendFailed: 'Senden fehlgeschlagen',
+		operationFailed: 'Vorgang fehlgeschlagen',
+	},
+	security: {
+		title: 'Sicherheitseinstellungen',
+		back: '‹ Zurück',
+		warningBanner: 'Bestätigen Sie E-Mail, Google Auth und Finanzpasswort zum Schutz Ihres Kontos.',
+		accountSecurity: 'Kontosicherheit',
+		loginPassword: 'Anmeldepasswort',
+		loginPasswordDesc: 'Regelmäßige Änderung erhöht die Kontosicherheit',
+		emailVerify: 'E-Mail-Bindung',
+		emailVerifyDesc: 'E-Mail binden zur Kontowiederherstellung',
+		googleAuth: 'Google-Authentifizierung',
+		googleAuthDesc: 'Google Authenticator aktivieren für besseren Schutz',
+		fundPassword: 'Finanzpasswort',
+		fundPasswordDesc: 'Spezielles Passwort für Auszahlungen und Überweisungen',
+		set: 'Festgelegt',
+		notSet: 'Nicht festgelegt',
+		change: 'Ändern',
+		bind: 'Binden',
+		set2: 'Festlegen',
+		statusUpdated: 'Status aktualisiert',
+		loadFailed: 'Datenladung fehlgeschlagen',
+		refreshFailed: 'Aktualisierung fehlgeschlagen',
+		bound: 'Gebunden',
+		notBound: 'Nicht gebunden',
+		refresh: 'Aktualisieren',
+		googleHelpTitle: 'Hilfe zu Google Authenticator',
+		googleHelpDesc: 'Bei Code-Fehler oder Entbindung kontaktieren Sie bitte den Support.',
+		changeLoginPassword: 'Anmeldepasswort ändern',
+		changePasswordHint: 'Nach Änderung neues Passwort nutzen, Code per Mail versandt.',
+		currentPassword: 'Aktuelles Passwort',
+		newPassword: 'Neues Passwort',
+		confirmNewPassword: 'Neues Passwort bestätigen',
+		emailCode: 'E-Mail-Code',
+		sendCode: 'Code senden',
+		codeSent: 'Code per E-Mail gesendet',
+		changeSuccess: 'Passwort erfolgreich geändert',
+		confirmChange: 'Änderung bestätigen',
+		submitting: 'Wird gesendet...',
+		setFundPassword: 'Finanzpasswort festlegen',
+		resetFundPassword: 'Finanzpasswort zurücksetzen',
+		fundPasswordHint: 'Benötigt für Auszahlungen/Überweisungen, sicher aufbewahren.',
+		fundPasswordResetHint: 'Zurücksetzen, Bestätigungscode per Mail.',
+		newFundPassword: 'Neues Finanzpasswort',
+		confirmFundPassword: 'Passwort bestätigen',
+		fundPasswordUpdated: 'Finanzpasswort aktualisiert',
+		fundPasswordSet: 'Finanzpasswort angelegt',
+		bindGoogle: 'Google Authenticator binden',
+		boundEmail: 'Gebundene E-Mail:',
+		googleQrStep: '1. QR scannen oder Schlüssel manuell eintragen',
+		googleCodeStep: '2. 6-stelliger dynamischer Google-Code',
+		emailCodeStep: '3. E-Mail-Bestätigungscode',
+		copyKey: 'Schlüssel kopieren',
+		keyCopied: 'Schlüssel kopiert',
+		copyFailed: 'Kopieren fehlgeschlagen, manuell übernehmen',
+		clipboardDeniedMac: 'Zwischenablage-Zugriff verweigert, Browsereinstellungen prüfen',
+		clipboardDenied: 'Zwischenablage blockiert, Berechtigung aktivieren',
+		invalidSecret: 'Ungültiger Schlüssel, Seite neu laden',
+		googleCodeRequired: '6-stelligen Google-Code eingeben',
+		emailCodeSent: 'E-Mail-Code versandt',
+		bindSuccess: 'Bindung erfolgreich abgeschlossen',
+		confirmBind: 'Bindung bestätigen',
+		googleAuthLead: 'Google/Microsoft Authenticator im App-Store herunterladen.',
+		googleAuthTip1: 'Nach Bindung wird Code bei Login und Finanzvorgängen abgefragt.',
+		googleAuthTip2: 'Gerät sicher verwahren, bei Verlust Support kontaktieren.',
+		googleAuthStart: 'Bereits installiert, Bindung starten',
+	},
+	assets: {
+		title: 'Meine Vermögenswerte',
+		totalAssets: 'Gesamtwert der Vermögenswerte',
+		todayPnl: 'Tagesgewinn/-verlust',
+		deposit: 'Einzahlen',
+		withdraw: 'Auszahlen',
+		transfer: 'Überweisen',
+		history: 'Verlauf',
+		spot: 'Spot',
+		futures: 'Futures',
+		copyTrade: 'Copy Trade',
+		fund: 'Auszahlbar',
+		walletBalance: 'Wallet-Guthaben',
+		unrealizedPnl: 'Nicht realisierter Gewinn/Verlust',
+		positions: 'Offene Positionen',
+		noPositions: 'Keine offenen Positionen',
+		assetBalance: 'Asset-Guthaben',
+		unavailable: 'Nicht verfügbar',
+		depositCoin: 'Einzahlung',
+		withdrawCoin: 'Auszahlung',
+		depositRecord: 'Einzahlungsverlauf',
+		withdrawRecord: 'Auszahlungsverlauf',
+		transferRecord: 'Überweisungsverlauf',
+		assetRecord: 'Vermögensbewegungen',
+		overview: 'Übersicht',
+		spotAccount: 'Spot-Konto',
+		swapAccount: 'Futures-Konto',
+		followAccount: 'Copy-Trade-Konto',
+		fundAccount: 'Auszahlkonto',
+		spotTradingAccount: 'Spot-Handelskonto',
+		ibitAccount: 'iBit-Konto',
+		lockedStakingAccount: 'Gesperrtes Staking',
+		stakingTab: 'Staking',
+		ibitUnit: 'iBit',
+		releaseTotal: 'Insgesamt freigegeben',
+		totalLockedBalance: 'Gesamt gesperrt (iBit)',
+		myStakingOrders: 'Meine Staking-Aufträge',
+		stakingOrderNo: 'Auftragsnummer',
+		purchaseQty: 'Gekaufte Menge',
+		stakingTotal: 'Gesperrt',
+		released: 'Freigegeben',
+		pendingRelease: 'Warte auf Freigabe',
+		startTime: 'Startdatum',
+		subscribing: 'Aktiv gebucht',
+		releasing: 'In Freigabe',
+		completed: 'Abgeschlossen',
+		pullToRefresh: 'Nach unten ziehen zum Aktualisieren',
+		releaseToRefresh: 'Loslassen zum Aktualisieren',
+		refreshing: 'Wird aktualisiert...',
+		totalAccount: 'Gesamtkontowert',
+		showBalance: 'Guthaben anzeigen',
+		hideBalance: 'Guthaben ausblenden',
+		followBalance: 'Copy-Trade-Guthaben',
+		accountTransfer: 'Kontoübertragung',
+		transferFrom: 'Von',
+		transferTo: 'Nach',
+		available: 'Verfügbar',
+		freeTransfer: 'Gebührenfreie Sofortüberweisung',
+		followPositions: 'Aktive Copy-Positionen',
+		noFollowPositions: 'Keine Copy-Positionen',
+		followLoading: 'Wird geladen...',
+		long: 'Long (Kaufen)',
+		short: 'Short (Verkaufen)',
+		trader: 'Trader',
+		openPrice: 'Eröffnungspreis',
+		currentPrice: 'Aktueller Preis',
+		amountLever: 'Menge · Hebel',
+		closing: 'Wird geschlossen...',
+		closePosition: 'Position schließen',
+		noLossPosition: 'Verlustgeschützte Copy-Positionen lassen sich nicht manuell schließen',
+		invalidPosition: 'Positionsdaten ungültig, Schließen nicht möglich',
+		confirmClose: 'Position wirklich schließen? Finale Gewinne gehen verloren.',
+		closeSuccess: 'Position geschlossen',
+		closeFailed: 'Schließen fehlgeschlagen',
+		sameAccountError: 'Quell- und Zielkonto dürfen nicht identisch sein',
+		amountError: 'Gültigen Betrag eingeben',
+		insufficientBalance: 'Nicht genügend Guthaben',
+		transferSuccess: 'Überweisung erfolgreich',
+		transferFailed: 'Überweisung fehlgeschlagen',
+		goCopyTrade: 'Copy Trade',
+		goSpotTrade: 'Zum Handel',
+		hideZeroBalance: 'Assets mit Nullguthaben ausblenden',
+		depositRecord2: 'Einzahlungsverlauf',
+		amountUsdt: 'Betrag (USDT)',
+		amountCoin: 'Betrag ({coin})',
+		availableCoin: 'Verfügbar: {available} {coin}',
+		transferring: 'Wird überwiesen...',
+		confirmTransferBtn: 'Überweisung bestätigen',
+		statementPageTitle: 'Vermögensauszug',
+		statementStartDate: 'Startdatum',
+		statementEndDate: 'Enddatum',
+		statementReset: 'Zurücksetzen',
+		statementSearch: 'Suchen',
+		statementSearching: 'Suche läuft...',
+		statementEmpty: 'Keine Einträge',
+		statementDirectionOpen: 'Position eröffnet',
+		statementDirectionClose: 'Position geschlossen',
+		statementTypes: {
+			'43': 'Spot-Gewinn',
+			'44': 'Spot-Verlust',
+			'45': 'Spot-Gebühr',
+			'46': 'Spot-Gebührenerstattung',
+			'48': 'Spot-Handel',
+			'49': 'Staking',
+			'50': 'Staking-Freigabe',
+			'51': 'Airdrop-Prämie',
+			'52': 'Einzahlung Staking-Wallet',
+			'53': 'Auszahlung Staking-Wallet',
+		},
+	},
+	finance: { ...financePageByLocale.de },
+	copyTrade: {
+		comprehensive: 'Übersicht',
+		winRate14d: '14d-Trefferquote',
+		profit14d: '14d-Rendite',
+		normal: 'Standard-Copy',
+		lossless: 'Verlustgeschützter Copy',
+		favorite: 'Favoriten',
+		topTraders: 'Top-Trader',
+		twoWeekReturn: '2-Wochen-Rendite',
+		followers: 'Follower',
+		days: 'Tage',
+		applyTrader: 'Als Lead-Trader bewerben',
+		myFollowing: 'Meine Copy-Folge',
+		myTrading: 'Meine Trades',
+		traderIdentity: 'Lead-Trader',
+		myFollowingAccount: 'Copy-Konto',
+		leadManage: 'Lead-Verwaltung',
+		applyLead: 'Zur Lead-Bewerbung',
+		pageTitle: 'Copy Trading',
+		heroDesc: 'Mit einem Klick Trades erfahrener Händler kopieren und Gewinne erzielen.',
+		traderOverview: 'Trader-Übersicht',
+		copyFollowersCount: 'Anzahl Follower',
+		cumulativeTradingDays: 'Gesamt Handeltage',
+		cumulativeLeadProfit: 'Gesamt-Copy-Gewinn',
+		goLeadManage: 'Zur Lead-Verwaltung →',
+		copyWalletTitle: 'Copy-Konto-Guthaben',
+		cumulativePnlUsdt: 'Gesamt Copy-Gewinn(USDT)',
+		availableUsdt: 'Verfügbar (USDT)',
+		unrealizedPnlUsdtShort: 'Nicht realisierter Gewinn/Verlust(USDT)',
+		followingTradersSummary: 'Folge {n} Trader',
+		newBadge: 'NEU',
+		losslessShieldTitle: 'Verlustschutz',
+		losslessShieldDesc: ': Bei Verlusten erfolgt Ausgleich im vereinbarten Rahmen.',
+		learnHowItWorks: 'Mehr erfahren →',
+		myStarredTraders: 'Gespeicherte Trader',
+		traderTotalCount: '{count> verfügbare Trader',
+		filterLoadingShort: 'Wird geladen...',
+		loadTraderListFailed: 'Trader-Liste laden fehlgeschlagen',
+		loadFavoritesFailed: 'Favoriten laden fehlgeschlagen',
+		favoritedToast: 'Zu Favoriten hinzugefügt',
+		defaultTraderName: 'Trader',
+		levelJunior: 'Einsteiger',
+		badgeLossless: 'Verlustgeschützt',
+		metaDaysTrades: '{days}T · {trades} Trades',
+		followAction: 'Kopieren',
+		profitUsdtBracket: 'Gewinn (USDT)',
+		profitShareRate: 'Gewinnbeteiligung %',
+		trend14Days: '14-Tage-Chart',
+		emptyFavoriteHint: 'Keine Favoriten, neue Trader suchen',
+		emptyTraderListDefault: 'Keine verfügbaren Trader',
+		emptyTraderListLossless: 'Keine verlustgeschützten Trader',
+		browseTraders: 'Trader durchstöbern',
+		losslessInfoHeading: 'Funktionsweise Verlustschutz-Copy',
+		llInfoCard1Title: 'Bedingter Ausgleich',
+		llInfoCard1Body: 'Ausgleich nur bei Einhaltung der Risikoregeln gültig.',
+		llInfoCard2Title: 'Begrenzte Haftung',
+		llInfoCard2Body: 'Erstattung überschreitet nicht das pro Trade vereinbarte Limit.',
+		llInfoCard3Title: 'Risikokontrolle',
+		llInfoCard3Body: 'Bei hohen Verlusten greift automatischer Schutz.',
+		llInfoCard4Title: 'Risikohinweis',
+		llInfoCard4Body: 'Kryptohandel birgt hohes Risiko, Verlustschutz garantiert keine Gewinne.',
+		followingPlaza: 'Copy-Plaza',
+		followingWalletFail: 'Copy-Konto laden fehlgeschlagen',
+		followingTabPositions: 'Offene Positionen',
+		followingTabTraders: 'Meine Trader',
+		followingTabHistory: 'Copy-Verlauf',
+		followingHistEmpty: 'Kein Copy-Verlauf',
+		followingNoTradersYet: 'Noch kein Trader gefolgt',
+		followingGoPlaza: 'Zur Copy-Plaza',
+		confirmStopFollow: 'Folge "{name}" wirklich beenden?',
+		noLossManualCloseTooltip: 'Verlustschutz-Copy nicht manuell schließbar',
+		followingThContract: 'Kontrakt',
+		followingThDirection: 'Richtung',
+		followingThOpenPrice: 'Eröffnungspreis',
+		followingThCurPrice: 'Aktpreis',
+		followingThQty: 'Menge',
+		followingThLever: 'Hebel',
+		followingThUnrealized: 'Nicht real. Gewinn/Verlust',
+		followingThOpenTime: 'Eröffnungsdatum',
+		followingThAction: 'Aktion',
+		followingOpenLong: 'Long eröffnet',
+		followingOpenShort: 'Short eröffnet',
+		closeQtyWithBase: 'Schlussmenge({base})',
+		followingRealizedPnlUsdt: 'Real. Gewinn/Verlust(USDT)',
+		followingYieldRate: 'Rendite',
+		followingAvgOpenUsdt: 'Ø-Eröffnungspreis(USDT)',
+		followingAvgCloseUsdt: 'Ø-Schlusspreis(USDT)',
+		marginCrossMode: 'Cross-Marge',
+		marginIsolatedMode: 'Isolierte Marge',
+		stopFollowing: 'Folge beenden',
+		lead: {
+			pageTitle: 'Meine Lead-Trades',
+			navMyFollowing: 'Meine Copy-Folge →',
+			becomeTitle: 'Lead-Trader werden',
+			becomeDesc: 'Voraussetzungen erfüllen für Bewerbung.',
+			condMinBalance: 'Futures-Konto ≥ {min} USDT',
+			goTransfer: 'Guthaben überweisen',
+			condNotFollowing: 'Keine anderen Trader folgen',
+			agreePrefix: 'Ich akzeptiere die',
+			agreeLink: 'Lead-Trader-Vereinbarung',
+			submitting: 'Wird gesendet...',
+			submitApply: 'Bewerbung absenden',
+			applyFailed: 'Bewerbung fehlgeschlagen, später versuchen',
+			reviewingTitle: 'Bewerbung in Prüfung',
+			reviewingDesc: 'Auf Genehmigung warten zum Lead-Start.',
+			agreementTitle: 'Trader-Vertrag',
+			agreementEmpty: 'Vertrag konnte nicht geladen werden.',
+			leadingBadge: 'Aktiver Lead',
+			noBio: 'Keine Beschreibung',
+			cancelLeadProcessing: 'Bearbeitung läuft...',
+			cancelLeadApply: 'Lead-Amt kündigen',
+			confirmCancelLead: 'Lead wirklich beenden? Alle laufenden Copy-Folgen enden.',
+			operationFailed: 'Vorgang fehlgeschlagen',
+			statFollowers: 'Aktuelle Follower',
+			statRegisterDays: 'Tage auf Plattform',
+			statCapital: 'Kapital',
+			statCumulativeProfit: 'Gesamt Copy-Gewinn(USDT)',
+			statTotalFollowers: 'Gesamt Follower (Historie)',
+			statTradingDays: 'Gesamt Handeltage',
+			tabFollowers: 'Follower ({n})',
+			tabCurrent: 'Aktuelle Trades',
+			tabHistory: 'Lead-Verlauf',
+			tabSettings: 'Trader-Einstellungen',
+			emptyFollowers: 'Keine Follower',
+			removeFollower: 'Entfernen',
+			followerEquity: 'Kontoguthaben(USDT)',
+			followerTotalShare: 'Gesamt Gewinnbeteiligung(USDT)',
+			followerLastShare: 'Letzte Ausschüttung',
+			followerSince: 'Folge seit: {time}',
+			emptyCurrent: 'Keine offenen Trades',
+			emptyHistory: 'Kein Lead-Verlauf',
+			settingsBasic: 'Basisdaten',
+			avatar: 'Avatar',
+			nickname: 'Spitzname',
+			nicknamePlaceholder: 'max. 10 Zeichen',
+			bio: 'Beschreibung',
+			bioPlaceholder: 'max. 25 Zeichen',
+			saveSuccess: 'Gespeichert',
+			saveBasicProcessing: 'Speichere...',
+			saveBasic: 'Basisdaten sichern',
+			leadSymbols: 'Handelbare Kontrakte als Lead',
+			saveProcessing: 'Speichere...',
+			save: 'Speichern',
+			tagsTitle: 'Tags (max.4)',
+			confirmRemoveFollower: 'Follower "{name}" entfernen?',
+			saveFailed: 'Speichern fehlgeschlagen',
+			uploadFailed: 'Upload fehlgeschlagen',
+			defaultFollower: 'Follower',
+			defaultUser: 'Nutzer',
+		},
+	},
+	footer: {
+		aboutSection: 'Über Uns',
+		companyIntro: 'Unternehmensvorstellung',
+		brand: 'Marke',
+		community: 'Community',
+		riskWarning: 'Risikohinweis',
+		terms: 'Nutzungsbedingungen',
+		privacy: 'Datenschutz',
+		futuresTrade: 'Futures-Handel',
+		spotTrade: 'Spot-Handel',
+		losslessCopy: 'Verlustschutz-Copy',
+		beginnerGuide: 'Einsteigerleitfaden',
+		helpCenter: 'Hilfezentrum',
+		glossary: 'Glossar',
+		compliance: 'Rechtliche Hinweise',
+		products: 'Produkte',
+		resources: 'Ressourcen',
+	},
+	announcements: {
+		title: 'Systemankündigungen',
+		noAnnouncements: 'Keine Ankündigungen',
+		back: 'Zurück',
+		backToList: 'Zur Liste',
+		loadMore: 'Mehr laden',
+	},
+	download: {
+		title: 'iBit herunterladen',
+		heroTitle: 'Echtzeitkurse\nJederzeit handeln',
+		desc: 'Preise verfolgen und von überall Positionen eröffnen',
+		appDesc: 'Alle Features in der mobilen App, mobil handeln',
+		latestVersion: 'Neueste Version',
+		updateNotes: 'Update-Hinweise',
+		ios: 'iOS Download',
+		iosNotReleased: 'iOS noch nicht veröffentlicht',
+		android: 'Android Download',
+		androidNotReleased: 'Android noch nicht veröffentlicht',
+		scanToDownload: 'QR scannen zum Download',
+	},
+	account: {
+		title: 'Nutzerbereich',
+		uid: 'UID',
+		email: 'E-Mail',
+		profile: 'Profil',
+		security: 'Sicherheit',
+		securityDesc: 'Passwörter, Auth & Finanzpasswort',
+		assets: 'Meine Vermögenswerte',
+		assetsDesc: 'Ein-, Aus- und Überweisungen',
+		inviteCode: 'Einladungscode',
+		inviteFriends: 'Freunde einladen',
+		inviteDesc: 'Freunde einladen und Provision auf deren Trades erhalten',
+		helpSupport: 'Hilfe & Support',
+		helpDesc: 'FAQ & Kundenservice',
+		broker: 'Broker',
+		brokerDesc: 'Provisionsverwaltung & Team',
+		logout: 'Abmelden',
+		securityScore: 'Sicherheitswertung',
+		twofa: 'Google-Authentifizierung',
+		supportTitle: 'Support kontaktieren',
+		supportHours: '24h Support',
+		onlineSupport: 'Online-Chat',
+		instantChat: 'Schnellchat',
+		telegramSupport: 'Telegram-Support',
+		emailSupport: 'E-Mail-Support',
+		applySubmitted: 'Antrag eingereicht, auf Prüfung warten',
+		scoreHigh: 'Ausgezeichnet',
+		scoreMedium: 'Durchschnitt',
+		scoreLow: 'Verbesserung nötig',
+	},
+	transfer: {
+		title: 'Überweisung',
+		amount: 'Überweisungsbetrag',
+		amountPlaceholder: 'Betrag eingeben',
+		maxTransferable: 'Max verfügbar',
+		success: 'Überweisung erfolgreich',
+		selectCoin: 'Coin auswählen',
+		enterAmount: 'Betrag eingeben',
+		histEmpty: 'Kein Überweisungsverlauf',
+		balanceLabel: 'Guthaben',
+	},
+	withdraw: {
+		title: 'Auszahlung',
+		network: 'Netzwerk',
+		networkTip: 'Netzwerk muss zur Zielwallet passen, falsches Netz = Kapitalverlust.',
+		address: 'Auszahladresse',
+		addressPlaceholder: 'Zieladresse eingeben',
+		amount: 'Auszahlbetrag',
+		received: 'Tatsächlich erhalten',
+		fee: 'Gebühr',
+		submitted: 'Auszahlantrag eingereicht',
+		fundPassword: 'Finanzpasswort',
+		emailCode: 'E-Mail-Code',
+		googleCode: 'Google-Code',
+		securityVerification: 'Sicherheitsverifizierung',
+		recordTitle: 'Auszahlverlauf',
+		recordEmpty: 'Keine Auszahlanträge',
+		confirmCancelApply: 'Auszahlantrag wirklich stornieren?',
+		withdrawCancelledToast: 'Storniert',
+		withdrawCancelFailedToast: 'Stornierung fehlgeschlagen',
+		statusPending: 'In Prüfung',
+		statusReleasing: 'Wird ausgezahlt',
+		statusWithdrawFailed: 'Fehlgeschlagen',
+		statusWithdrawSuccess: 'Erfolgreich',
+		statusWithdrawCancelled: 'Storniert',
+		typeInternalTransfer: 'Interne Überweisung',
+		typeOnChainWithdraw: 'On-Chain-Auszahlung',
+		cancelApplyBtn: 'Stornieren',
+		initFailed: 'Initialisierung fehlgeschlagen',
+		submitOnChainFailed: 'Auszahlung senden fehlgeschlagen',
+		transferSubmitFailed: 'Interne Überweisung fehlgeschlagen',
+		availWithdrawBalance: 'Auszahlbar:',
+		availTransferBalance: 'Überweisbar:',
+		coinLabel: 'Coin',
+		subCoin: 'Subcoin',
+		mainCoinLabel: 'Hauptcoin',
+		transferMainCoinHint: 'Interne Überweisung nur Hauptcoin, keine TUSDT/EUSDT.',
+		withdrawNetworkLabel: 'Auszahlnetzwerk',
+		withdrawAmountUsdt: 'Auszahlbetrag (USDT)',
+		withdrawAmountCoin: 'Auszahlbetrag ({coin})',
+		transferAmountUsdt: 'Überweisungsbetrag (USDT)',
+		transferAmountCoin: 'Überweisungsbetrag ({coin})',
+		addressForCoin: '{coin}-Wallet-Adresse',
+		expectedArrival: 'Voraussichtliche Ankunft',
+		minWithdrawRowLabel: 'Mindestauszahlung',
+		internalTransferFeeLabel: 'Int. Überweisungsgebühr',
+		free: 'Gratis',
+		minTransferRowLabel: 'Mindestüberweisung',
+		recipientUidLabel: 'Ziel-UID',
+		recipientUidPlaceholder: 'Zielkonto UID eintragen',
+		addressForNetwork: 'USDT-{network} Adresse',
+		codePlaceholder6Digits: '6-stelliger Code',
+		googlePlaceholder6: '6-stelliger Google-Code',
+		sendVerificationCode: 'Code senden',
+		confirmWithdrawSubmit: 'Auszahlung bestätigen',
+		confirmTransferSubmit: 'Überweisung bestätigen',
+		codeSentToEmailToast: 'Code per Mail versandt',
+		onchainSubmittedPendingToast: 'Antrag erstellt, in Prüfung',
+		transferSubmittedToast: 'Interne Überweisung eingereicht',
+		submitFailed: 'Senden fehlgeschlagen',
+		detailTitleOnChain: 'On-Chain-Auszahldetails',
+		detailTitleTransfer: 'Int. Überweisungsdetails',
+		amountHeroWithdraw: 'Auszahlbetrag',
+		amountHeroTransfer: 'Überweisungsbetrag',
+		stepApplied: 'Beantragt',
+		stepDone: 'Abgeschlossen',
+		recipientLabel: 'Empfänger',
+		appliedAt: 'Antragsdatum',
+		finishedAt: 'Abschlussdatum',
+		cancelApplyFull: 'Antrag stornieren',
+		copyBtn: 'Kopieren',
+		bindGoogleFirst: 'Zuerst Google Auth binden',
+		errFillAddressBeforeCode: 'Zuerst Auszahladresse ausfüllen',
+		errFillAmountBeforeCode: 'Zuerst Auszahlbetrag eintragen',
+		errFillUidBeforeCode: 'Zuerst Ziel-UID eintragen',
+		errFillTransferAmtBeforeCode: 'Zuerst Überweisungsbetrag eintragen',
+		errEnterWithdrawAddress: 'Auszahladresse angeben',
+		errEnterWithdrawAmount: 'Auszahlbetrag eingeben',
+		errMinWithdrawWithAmt: 'Mindestauszahl {min} {coin}',
+		errMinWithdrawWithAmtUsdt: 'Mindestauszahl {min} USDT',
+		errExceedWithdrawBalance: 'Betrag übersteigt verfügbares Guthaben',
+		errEnterFundPassword: 'Finanzpasswort eingeben',
+		errEnterEmailCode: 'E-Mail-Code eintragen',
+		errEnterGoogleCode: 'Google-Code eintragen',
+		errEnterRecipientUid: 'Ziel-UID eingeben',
+		errEnterTransferAmount: 'Überweisungsbetrag eintragen',
+		errMinTransferWithAmt: 'Mindestüberweisung {min} {coin}',
+		errMinTransferWithAmtUsdt: 'Mindestüberweisung {min} USDT',
+		errExceedTransferBalance: 'Überweisungsbetrag übersteigt verfügbares Guthaben',
+	},
+	deposit: {
+		title: 'Einzahlung',
+		address: 'Einzahladresse',
+		network: 'Netzwerk',
+		saveQrCode: 'QR speichern',
+		addressCopied: 'Adresse kopiert',
+		minDeposit: 'Mindesteinzahlung',
+		arrivals: 'Netzbestätigungen',
+		coin: 'Coin',
+		protocol: 'Netz/Protokoll',
+		subCoin: 'Subcoin',
+		contract: 'Kontrakt',
+		depositAmount: 'Einzahlbetrag',
+		amountPlaceholder: 'Betrag eingeben',
+		generateOrder: 'Einzahlauftrag erstellen',
+		generating: 'Wird erstellt...',
+		notice: 'Wichtiger Hinweis',
+		notice1: 'Zuerst Auftrag erstellen, nur angezeigte Adresse+Betrag nutzen.',
+		notice2: 'Falsches Netz/Kontrakt = dauerhafter Kapitalverlust.',
+		notice3: 'Nach Überweisung TxHash zur Gutschrift einreichen.',
+		intro: 'Anleitung',
+		introText: 'Coin+Netz wählen, Betrag eintragen → individuelle Adresse erhalten; nach Transfer TxHash absenden.',
+		newDeposit: '← Neue Einzahlung',
+		orderInfo: 'Auftragsdaten',
+		orderNo: 'Auftragsnummer',
+		status: 'Status',
+		coinLabel: 'Coin',
+		networkLabel: 'Netz',
+		amount: 'Betrag',
+		payAddress: 'Empfangsadresse',
+		payAddressHint: 'Exakten Betrag auf korrektem Netz an diese Adresse senden',
+		qrTitle: 'QR-Zahlung',
+		qrHint: 'Wallet scannen, Adresse/Betrag nicht verändern',
+		contractAddress: 'Kontraktadresse',
+		copy: '⎘ Kopieren',
+		copyAddress: 'Adresse kopieren',
+		submitHash: 'TxHash einreichen',
+		submittingHash: 'Wird gesendet...',
+		hashPlaceholder: 'TxHash/TxID Tron einfügen',
+		orSubmitHash: 'Oder Hash nach Transfer einreichen',
+		hashRequired: 'TxHash erforderlich',
+		statusNotSubmittable: 'Hash aktuell nicht einreichbar',
+		orderCreated: 'Auftrag erstellt, auf angezeigte Adresse überweisen',
+		orderFailed: 'Auftrag erstellen fehlgeschlagen',
+		addressCopy: 'Adresse kopiert',
+		orderNoCopy: 'Auftragsnummer kopiert',
+		hashSubmitted: 'Hash eingereicht, auf Netzbestätigung warten',
+		hashFailed: 'Hash senden fehlgeschlagen',
+		broadcastSuccess: 'Transaktion gesendet, Hash gespeichert',
+		tronBroadcastSuccess: 'Tron-Tx gesendet, TxID gespeichert',
+		noNetwork: 'Keine verfügbaren Netze',
+		noSubCoin: 'Keine Subcoins auf diesem Netz',
+		amountRequired: 'Einzahlbetrag eingeben',
+		amountPositive: 'Betrag >0',
+		submittedHash: 'Eingereichter Hash: ',
+		manualDepositTab: 'Manuelle Einzahlung',
+		walletDepositTab: 'Wallet-Einzahlung',
+		walletPayEvm: 'EVM-Wallet verbinden & zahlen',
+		walletPayingEvm: 'EVM-Zahlung läuft...',
+		walletPayTron: 'Tron-Wallet verbinden & zahlen',
+		walletPayingTron: 'Tron-Zahlung läuft...',
+		histLink: 'Einzahlverlauf',
+		retryBtn: 'Erneut versuchen',
+		backWithArrow: '‹ Zurück',
+		rechargeStatus0: 'Warte auf Zahlung',
+		rechargeStatus1: 'Warte auf Netzbestätigung',
+		rechargeStatus2: 'Abgeschlossen',
+		rechargeStatus3: 'Storniert',
+		rechargeStatus4: 'Fehlgeschlagen',
+		statusUnknown: 'Status {status}',
+		qrAlt: 'Einzahl-QR-Code',
+		loadNetworksFailed: 'Netze laden fehlgeschlagen',
+		wcHintEvmConfigured:
+			'WalletConnect EVM verbinden, Netz+Coin abgleichen.',
+		wcHintEvmUnconfigured:
+			'VITE_WALLETCONNECT_PROJECT_ID nicht gesetzt → manueller Hash-Eintrag.',
+		wcHintTronConfigured:
+			'WalletConnect Tron signiert Tx, TxID ohne 0x eintragen.',
+		wcHintTronUnconfigured:
+			'Tron WC nicht konfiguriert → manuelle Einzahlung.',
+		wcHintTronManualOnly:
+			'Dieses Netz unterstützt keine automatische Walletzahlung, manuell Hash senden.',
+		walletPayFallback: 'EVM-Wallet-Zahlung fehlgeschlagen',
+		tronWalletPayFallback: 'Tron-Wallet-Zahlung fehlgeschlagen',
+		currentPrefix: 'Aktuell:',
+		histEmpty: 'Kein Einzahlverlauf',
+		histOrderNo: 'Auftragsnr',
+		histTx: 'TX:',
+		histLoadMore: 'Mehr laden',
+		histLoadedAll: 'Alle Einträge geladen',
+	},
+	broker: {
+		title: 'Broker-Center',
+		applyTitle: 'Als Broker bewerben',
+		myBrokerCode: 'Mein Broker-Code',
+		referralCount: 'Geworbene Nutzer',
+		totalCommission: 'Gesamtprovision',
+		applyStatus: 'Antragsstatus',
+		pending: 'In Prüfung',
+		approved: 'Genehmigt',
+		rejected: 'Abgelehnt',
+		defaultName: 'Broker',
+		greeting: 'Hallo, {name}',
+		uidLabel: 'UID: {uid}',
+		introBanner: 'Provision auf Trades der Geworbenen, tägliche Gutschrift.',
+		statNewToday: 'Neu heute',
+		statTradeToday: 'Heute aktiv handelnd',
+		statRebateToday: 'Tagesprovision (USDT)',
+		inviteList: 'Geworbenen-Liste',
+		emptyInviteList: 'Keine Geworbenen',
+		thAccount: 'Konto',
+		thLevel: 'Stufe',
+		thPerpCopy: 'Perpetual / Copy',
+		levelBroker: 'Broker',
+		levelNormal: 'Standard',
+		editRateTooltip: 'Provisionssatz bearbeiten',
+		todayRebate: 'Tagesprovisionen',
+		emptyTodayRebate: 'Keine Tagesprovisionen',
+		thId: 'ID',
+		rebateUsdt: 'Provision (USDT)',
+		teamDetails: 'Teamdetails',
+		filterAll: 'Alle',
+		filterWeek: 'Letzte 7 Tage',
+		filterToday: 'Heute',
+		filterMonth: 'Aktueller Monat',
+		teamTotalAssets: 'Team-Gesamtvermögen',
+		rebateHistory: 'Provisionsverlauf',
+		emptyRebateHistory: 'Kein Provisionsverlauf',
+		amountUsdt: 'Betrag (USDT)',
+		loadMore: 'Mehr laden',
+		loadingMore: 'Wird geladen...',
+		loadedAll: 'Alles geladen',
+		editModalTitle: 'Provisionsrate bearbeiten',
+		perpRebateRate: 'Perpetual-Provisions%',
+		copyRebateRate: 'Copy-Provisions%',
+		editTip: 'Änderungen sofort aktiv, vorsichtig bearbeiten.',
+		perpRateError: 'Perpetual % muss 0~100 Ganzzahl sein',
+		copyRateError: 'Copy % muss 0~100 Ganzzahl sein',
+		setSuccess: 'Gespeichert, Änderungen aktiv',
+	},
+	help: {
+		title: 'Hilfezentrum',
+		supportTitle: 'Support',
+		search: 'Suchen',
+		searchPlaceholder: 'Stichwort eingeben',
+		telegramSupport: 'Telegram-Support',
+		quickResponse: 'Schnellantwort',
+		emailSupport: 'E-Mail-Support',
+		docs: 'Dokumentation',
+		viewFullGuide: 'Vollständige Anleitung öffnen',
+		detailTitle: 'Hilfedetails',
+		backToHelp: 'Zurück zum Hilfezentrum',
+	},
+	invite: {
+		title: 'Freunde einladen',
+		myCode: 'Mein Einladungscode',
+		copy: 'Code kopieren',
+		copied: 'Code kopiert',
+		share: 'Einladelink teilen',
+		shareLink: 'Einladelink kopieren',
+		linkCopied: 'Link kopiert',
+		desc: 'Freunde einladen & % auf deren Handelsgebühren erhalten',
+		totalInvited: 'Gesamt eingeladen',
+		totalReward: 'Gesamtprämie',
+		noRecord: 'Keine Einladungsdaten',
+		heroLine1: 'Freunde einladen',
+		heroLine2: 'Provision verdienen',
+		heroDesc:
+			'Nutzer registrieren via deinem Link, du bekommst Anteil an deren Handelsgebühren.',
+		myInviteInfo: 'Einladungsdaten',
+		inviteCodeLabel: 'Einladungscode',
+		inviteLinkShort: 'Einladelink',
+		qrCodeLabel: 'QR-Code',
+		copyShort: 'Kopieren',
+		copiedDone: 'Kopiert ✓',
+		qrInviteAlt: 'Einlade-QR',
+		scanToRegister: 'Scannen zur Registrierung',
+		rebateRulesTitle: 'Provisionsregeln',
+		step1Title: 'Code teilen',
+		step1Desc: 'Code/Link an Kontakte senden',
+		step2Title: 'Freund registriert',
+		step2Desc: 'Nutzer erstellt Konto über deinen Link',
+		step3Title: 'Provision erhalten',
+		step3Desc: 'Anteil aus deren Handelsgebühren gutgeschrieben',
+	},
+	futuresPage: futuresPageByLocale.de,
+	spot: {
+		tag: 'Spot',
+		side: { buy: 'Kaufen', sell: 'Verkaufen' },
+		orderType: { limit: 'Limit', market: 'Markt' },
+		orderStatus: {
+			pending: 'Offen',
+			partial: 'Teilausgeführt',
+			filled: 'Voll ausgeführt',
+			cancelled: 'Storniert',
+			pending_cancel: 'Wird storniert',
+			expired: 'Abgelaufen',
+			init: 'Wird erstellt',
+		},
+		recordType: {
+			transferIn: "Geldeingang",
+			transferOut: "Geldausgang",
+			orderFreeze: "Auftrags-Sperrung",
+			cancelUnfreeze: "Entsperrung nach Stornierung",
+			trade: "Handelsabschluss",
+			fee: "Gebühr",
+			unfreeze: "Entsperrung",
+			unknown: "Typ {type}",
+		},
+		tabs: {
+			currentOrders: "Laufende Aufträge",
+			historyOrders: "Historische Aufträge",
+			trades: "Handelsdetails",
+			funding: "Kontobewegungen",
+		},
+		table: {
+			pair: "Handelspaar",
+			side: "Richtung",
+			type: "Typ",
+			price: "Preis",
+			orderPrice: "Limitpreis",
+			amount: "Menge",
+			orderAmount: "Auftragsmenge",
+			filled: "Ausgeführt",
+			status: "Status",
+			time: "Zeit",
+			action: "Aktion",
+			dealPrice: "Ausführungspreis",
+			dealVolume: "Handelsvolumen",
+			turnover: "Umsatz",
+			recordType: "Typ",
+			quantity: "Anzahl",
+			coin: "Währung",
+		},
+		trade: {
+			buy: "Kaufen",
+			sell: "Verkaufen",
+			limit: "Limit",
+			market: "Markt",
+			processing: "Wird verarbeitet...",
+			buySymbol: "{symbol} kaufen",
+			sellSymbol: "{symbol} verkaufen",
+			priceUsdt: "Preis (USDT)",
+			limitPlaceholder: "Limitpreis eingeben",
+			marketHint: "Ausführung zum besten Marktpreis",
+			amountUsdt: "Betrag (USDT)",
+			amountBase: "Menge ({base})",
+			available: "Verfügbar",
+			transfer: "Überweisung",
+			loginForBalance: "Anmelden um verfügbares Guthaben einzusehen",
+			spotAssets: "Spot-Vermögenswerte",
+		},
+		order: {
+			cancel: "Stornieren",
+			cancelAll: "Alle stornieren",
+		},
+		empty: {
+			loginLink: "Anmelden",
+			loginOrdersPrompt: "{link} um Aufträge einzusehen",
+			loginViewPrompt: "{link} um Details einzusehen",
+			noOrders: "Keine laufenden Aufträge vorhanden",
+			noHistoryOrders: "Keine historischen Aufträge vorhanden",
+			noTrades: "Keine Handelsaufzeichnungen",
+			noFunding: "Keine Einträge vorhanden",
+		},
+		errors: {
+			symbolNotReady: "Handelspaar derzeit nicht verfügbar",
+			invalidAmount: "Bitte gültige Menge eingeben",
+			invalidPrice: "Bitte gültigen Preis eingeben",
+			minLimitVolume: "Menge darf nicht unter {min} liegen",
+			minMarketBuy: "Mindestkaufbetrag bei Marktorder: {min} USDT",
+			minMarketSell: "Mindestverkaufsmenge bei Marktorder: {min}",
+			orderSubmitted: "Auftrag wurde eingereicht",
+			orderFailed: "Auftrag fehlgeschlagen",
+			cancelSuccess: "Erfolgreich storniert",
+			cancelFailed: "Stornierung fehlgeschlagen",
+			cancelAllSuccess: "Alle Aufträge storniert",
+			cancelAllPartialFailed: "Teilstornierung fehlgeschlagen",
+		},
+		loadedAll: "Alle Daten geladen",
+		ticker: {
+			change24h: "24h-Veränderung",
+			high24h: "24h-Höchstpreis",
+			low24h: "24h-Tiefstpreis",
+			turnover24h: "24h-Umsatz",
+		},
+		chartSub: { chart: "Chart", coinInfo: "Coin-Informationen" },
+		tf: {
+			m1: "1min",
+			m5: "5min",
+			m15: "15min",
+			m30: "30min",
+			h1: "1Std",
+			h4: "4Std",
+			d1: "1Tag",
+			w1: "1Woche",
+			mo1: "1Monat",
+			mo3: "3Monate"
+		},
+		ohlcv: {
+			spotLabel: "Spot",
+			open: "Eröffnung",
+			high: "Hoch",
+			low: "Tief",
+			close: "Schluss",
+			volume: "Volumen",
+			changePct: "Prozentveränderung",
+		},
+		draw: {
+			cursor: "Cursor",
+			trend: "Trendlinie",
+			hline: "Horizontale Linie",
+			ray: "Strahl",
+			channel: "Kanal",
+			fib: "Fibonacci-Retracement",
+			text: "Textbeschriftung",
+			clearAll: "Alle Markierungen löschen",
+			zoomOut: "Verkleinern",
+		},
+		mobileTab: { chart: "Kurs", trade: "Handel" },
+		pair: {
+			search: "Suchen",
+			loading: "Laden…",
+			noMatch: "Keine passenden Ergebnisse",
+			retryLater: ", bitte später erneut versuchen",
+		},
+		book: {
+			waiting: "Warte auf Daten…",
+			orderbook: "Orderbuch",
+			trades: "Letzte Trades",
+			priceUsdt: "Preis(USDT)",
+			amountBase: "Menge({base})",
+			total: "Gesamt",
+			buyRatio: "Kauf {n}%",
+			sellRatio: "{n}% Verkauf",
+			price: "Preis",
+			amount: "Menge",
+			time: "Zeit",
+			pricePrecision: "Preisgenauigkeit",
+		},
+		coinInfo: {
+			marketCap: "Marktkapitalisierung",
+			circulating: "Umlaufmenge",
+			issuePrice: "Emissionspreis",
+			ath: "Allzeithoch",
+			athDate: "Datum Allzeithoch",
+			whitepaper: "Whitepaper",
+			empty: "Keine Coin-Daten verfügbar",
+			reload: "Neu laden",
+		},
+		transferModal: {
+			title: "Geldüberweisung",
+			selectCoin: "Währung auswählen",
+			amount: "Überweisungsmenge",
+			amountPlaceholder: "Menge eingeben",
+			availableUsdt: "Verfügbarer USDT-Betrag: ",
+			availableCoin: "Verfügbare {coin}-Menge: ",
+			transferring: "Überweisung läuft...",
+			invalidAmount: "Bitte gültige Überweisungsmenge eingeben",
+			insufficientBalance: "Überweisungsmenge übersteigt verfügbares Guthaben",
+			transferFailed: "Überweisung fehlgeschlagen, später erneut versuchen",
+		},
+	}
+}

+ 1055 - 1037
code/src/locales/en.ts

@@ -2,1040 +2,1058 @@ import { futuresPageByLocale } from './futuresPage.i18n'
 import { financePageByLocale } from './financePage.i18n'
 
 export default {
-  nav: {
-    home: 'Home',
-    market: 'Market',
-    spot: 'Spot',
-    futures: 'Futures',
-    copyTrade: 'Copy',
-    finance: 'Earn',
-    idoPresale: 'IDO Presale',
-    claimAirdrop: 'Claim Airdrop',
-    announcements: 'Announcements',
-    download: 'Download',
-  },
-  lang: {
-    title: 'Language',
-    zhCN: '简体中文',
-    zhTW: '繁體中文',
-    en: 'English',
-    ko: '한국어',
-    ja: '日本語',
-    hi: 'हिन्दी',
-    id: 'Bahasa Indonesia',
-  },
-  header: {
-    login: 'Login',
-    register: 'Register',
-    account: 'Account',
-    assets: 'My Assets',
-    security: 'Security',
-    broker: 'Broker',
-    logout: 'Logout',
-    logoutShort: 'Logout',
-    downloadTitle: 'Download',
-    brokerApplyTitle: 'Apply as Broker',
-    brokerApplyDesc: 'You are not a broker yet. The system will automatically submit an application using your account information. You can use broker features once approved.',
-    cancel: 'Cancel',
-    applyNow: 'Apply Now',
-    viewApplyList: 'View Application Status',
-    submitting: 'Submitting…',
-    menu: 'Menu',
-  },
-  common: {
-    loading: 'Loading...',
-    retry: 'Retry',
-    cancel: 'Cancel',
-    confirm: 'Confirm',
-    submit: 'Submit',
-    save: 'Save',
-    send: 'Send',
-    back: 'Back',
-    next: 'Next',
-    done: 'Done',
-    noData: 'No Data',
-    noRecord: 'No Records',
-    search: 'Search',
-    all: 'All',
-    max: 'Max',
-    copied: 'Copied',
-    networkError: 'Network error, please retry',
-    loadFailed: 'Load Failed',
-    operationFailed: 'Operation failed, please retry',
-    saveSuccess: 'Saved',
-    more: 'More',
-    perpetual: 'Perp',
-    set: 'Set',
-    notSet: 'Not Set',
-    change: 'Change',
-    bind: 'Bind',
-    unbind: 'Unbind',
-    on: 'On',
-    off: 'Off',
-    status: 'Status',
-    time: 'Time',
-    amount: 'Amount',
-    type: 'Type',
-    coin: 'Coin',
-    from: 'From',
-    to: 'To',
-    close: 'Close',
-    contactService: 'Contact Support',
-  },
-  home: {
-    heroTitle: 'Secure · Efficient · Global\nDigital Asset Exchange',
-    heroDesc: 'iBit is dedicated to providing stable, transparent, and professional digital asset trading services to global users through leading technology and strict risk management.',
-    register: 'Register',
-    viewMarket: 'View Markets',
-    downloadApp: 'Download App',
-    coreAdvantages: 'Core Advantages',
-    assetSafetyTitle: 'Asset Security',
-    assetSafetyDesc: 'Cold/hot wallet isolation, multi-signature and permission controls, plus 24/7 risk monitoring to fully protect user assets.',
-    highPerfTitle: 'High Performance',
-    highPerfDesc: 'Proprietary matching engine with millisecond order processing, delivering a stable and smooth trading experience in low-latency environments.',
-    globalComplianceTitle: 'Global Compliance',
-    globalComplianceDesc: 'Adhering to multi-regional compliance standards and continuously advancing compliance, providing a trustworthy trading environment for global users.',
-    transparentFeeTitle: 'Transparent Fees',
-    transparentFeeDesc: 'Clear and transparent fee structure with no hidden costs, helping users effectively manage trading costs.',
-    aboutUs: 'About Us',
-    aboutDesc: 'iBit is a global digital asset exchange dedicated to providing safe, stable, and efficient trading services through technology innovation and compliant operations.',
-    foundedYear: 'Founded in 2023',
-    headquarters: 'Singapore HQ',
-    ourVision: 'Our Vision',
-    visionSubtitle: 'Building a globally trusted digital asset trading infrastructure for the long term',
-    ecoTitle: 'Ecosystem',
-    ecoDesc: 'Building a new-generation Crypto digital asset trading ecosystem',
-    missionTitle: 'Mission',
-    missionDesc: 'Driving the flow of digital value across global scenarios',
-    purposeTitle: 'Purpose',
-    purposeDesc: 'Helping users easily manage and invest in crypto digital assets',
-    heroImageAlt: 'iBit Trading Platform',
-    aboutImageAlt: 'About Us',
-  },
-  market: {
-    title: 'Live Market',
-    desc: 'Real-time prices, volumes, and 24h changes for major digital assets to help users stay on top of market trends.',
-    hot: 'Hot',
-    topVolume: 'Top Volume',
-    gainers: 'Gainers',
-    losers: 'Losers',
-    perpetual: 'Perp',
-    name: 'Name',
-    latestPrice: 'Price',
-    change24h: '24h Change',
-    turnover: 'Volume',
-    searchPair: 'Search pairs',
-    searchMarket: 'Search coins, pairs, futures',
-    price: 'Price',
-    change24hShort: '24h Change',
-    high24h: '24h High',
-    low24h: '24h Low',
-    volume24hLabel: '24h Volume',
-  },
-  auth: {
-    loginTitle: 'Login',
-    emailLogin: 'Email Login',
-    emailPlaceholder: 'Enter your email',
-    password: 'Password',
-    passwordPlaceholder: 'Enter your password',
-    forgotPassword: 'Forgot Password?',
-    loginBtn: 'Login',
-    noAccount: "Don't have an account?",
-    registerNow: 'Register Now',
-    verifyTitle: 'Enter Verification Code',
-    codeSentDesc: 'A verification code has been sent to {email}. Please check your inbox.',
-    codeSendDesc: 'Click the button below to send a verification code to {email}.',
-    countdownResend: 'Resend in {n}s',
-    resendCode: 'Resend Code',
-    confirmBtn: 'Confirm',
-    sendCode: 'Send Code',
-    forgotVerify: 'Forgot verification method?',
-    loginSuccess: 'Login successful',
-    codeSentAgain: 'Code resent',
-    registerTitle: 'Register',
-    emailRegister: 'Email Registration',
-    inviteCodeLabel: 'Invite Code (optional)',
-    inviteCodePlaceholder: 'Enter invite code',
-    hasAccount: 'Already have an account?',
-    loginNow: 'Login Now',
-    verifyPageTitle: 'Security Verification',
-    emailVerifyLabel: 'Email Verification',
-    codePlaceholder: 'Enter verification code',
-    sendBtn: 'Send',
-    passwordTitle: 'Create Password',
-    backBtn: '‹ Back',
-    inputPasswordLabel: 'Password',
-    confirmPasswordLabel: 'Confirm Password',
-    confirmPasswordPlaceholder: 'Re-enter password',
-    doneBtn: 'Done',
-    resetSuccess: 'Password reset successful. Please log in with your new password.',
-    registerSuccess: 'Registration Successful',
-    welcomeJoin: 'Welcome to iBit',
-    loginNowBtn: 'Login Now',
-    forgotPasswordTitle: 'Reset Password',
-    emailLabel: 'Email',
-    emailRegisteredPlaceholder: 'Enter your registered email',
-    codeSentToast: 'Code sent',
-  },
-  error: {
-    emailRequired: 'Please enter your email',
-    emailInvalid: 'Invalid email format',
-    passwordRequired: 'Please enter your password',
-    code6Required: 'Please enter the 6-digit code',
-    codeRequired: 'Please enter the verification code',
-    loginFailed: 'Incorrect username or password',
-    networkError: 'Network error, please try again',
-    emailAlreadyRegistered: 'This email is already registered. Please log in.',
-    confirmPasswordRequired: 'Please re-enter your password',
-    passwordMismatch: 'Passwords do not match',
-    loadFailed: 'Failed to load security info',
-    refreshFailed: 'Refresh failed',
-    statusUpdated: 'Status updated',
-    currentPasswordRequired: 'Please enter your current password',
-    sixDigitCode: 'Please enter the 6-digit email verification code',
-    sixDigitGoogleCode: 'Please enter the 6-digit Google code',
-    sendFailed: 'Send failed',
-    operationFailed: 'Operation failed',
-  },
-  security: {
-    title: 'Security Settings',
-    back: '‹ Back',
-    warningBanner: 'We recommend completing email verification, Google Authenticator, and fund password setup to enhance account security.',
-    accountSecurity: 'Account Security',
-    loginPassword: 'Login Password',
-    loginPasswordDesc: 'Changing your password regularly improves account security',
-    emailVerify: 'Email Verification',
-    emailVerifyDesc: 'Bind your email for account verification and password recovery',
-    googleAuth: 'Google Authenticator',
-    googleAuthDesc: 'Bind Google Authenticator to enhance account security',
-    fundPassword: 'Fund Password',
-    fundPasswordDesc: 'Set a fund password to protect your assets',
-    set: 'Set',
-    notSet: 'Not Set',
-    change: 'Change',
-    bind: 'Bind',
-    set2: 'Set',
-    statusUpdated: 'Status updated',
-    loadFailed: 'Failed to load security info',
-    refreshFailed: 'Refresh failed',
-    bound: 'Bound',
-    notBound: 'Not Bound',
-    refresh: 'Refresh',
-    googleHelpTitle: 'Google Authenticator Help',
-    googleHelpDesc: 'If you cannot receive the verification code or need to unbind, please contact online support.',
-    changeLoginPassword: 'Change Login Password',
-    changePasswordHint: 'After changing, please use your new password to log in. The verification code will be sent to your bound email.',
-    currentPassword: 'Current Password',
-    newPassword: 'New Password',
-    confirmNewPassword: 'Confirm New Password',
-    emailCode: 'Email Verification Code',
-    sendCode: 'Send Code',
-    codeSent: 'Verification code sent to email',
-    changeSuccess: 'Password changed successfully',
-    confirmChange: 'Confirm Change',
-    submitting: 'Submitting…',
-    setFundPassword: 'Set Fund Password',
-    resetFundPassword: 'Reset Fund Password',
-    fundPasswordHint: 'The fund password is used for withdrawals, transfers and other sensitive operations. Please keep it safe.',
-    fundPasswordResetHint: 'Please reset your fund password. A verification code will be sent to your bound email.',
-    newFundPassword: 'New Fund Password',
-    confirmFundPassword: 'Confirm Password',
-    fundPasswordUpdated: 'Fund password updated',
-    fundPasswordSet: 'Fund password set successfully',
-    bindGoogle: 'Bind Google Authenticator',
-    boundEmail: 'Bound Email:',
-    googleQrStep: '1. Scan the QR code or enter the key manually',
-    googleCodeStep: '2. Google Authenticator Code (6 digits)',
-    emailCodeStep: '3. Email Verification Code',
-    copyKey: 'Copy Key',
-    keyCopied: 'Key copied',
-    copyFailed: 'Copy failed, please select the key text manually',
-    clipboardDeniedMac: 'Clipboard access denied. Click the lock icon in the address bar → Site settings → set Clipboard to Allow, then try again.',
-    clipboardDenied: 'Clipboard access denied. Allow clipboard permission for this site in your browser settings, then try again.',
-    invalidSecret: 'Invalid key, please refresh and try again',
-    googleCodeRequired: 'Please enter the 6-digit Google code',
-    emailCodeSent: 'Email verification code sent',
-    bindSuccess: 'Bound successfully',
-    confirmBind: 'Confirm Bind',
-    googleAuthLead: 'Please first download Google Authenticator or Microsoft Authenticator from your phone\'s app store to store your one-time verification codes.',
-    googleAuthTip1: 'After binding, login and sensitive operations may require the 6-digit code from the app.',
-    googleAuthTip2: 'Keep your device safe. If you cannot receive the code, please contact customer support.',
-    googleAuthStart: 'I\'ve downloaded it, bind now',
-  },
-  assets: {
-    title: 'My Assets',
-    totalAssets: 'Total Assets',
-    todayPnl: "Today's P&L",
-    deposit: 'Deposit',
-    withdraw: 'Withdraw',
-    transfer: 'Transfer',
-    history: 'History',
-    spot: 'Spot',
-    futures: 'Futures',
-    copyTrade: 'Copy',
-    fund: 'Withdrawable',
-    walletBalance: 'Wallet Balance',
-    unrealizedPnl: 'Unrealized PnL',
-    positions: 'Positions',
-    noPositions: 'No Positions',
-    assetBalance: 'Asset Balance',
-    unavailable: 'Unavailable',
-    depositCoin: 'Deposit',
-    withdrawCoin: 'Withdraw',
-    depositRecord: 'Deposit History',
-    withdrawRecord: 'Withdraw History',
-    transferRecord: 'Transfer History',
-    assetRecord: 'Transaction History',
-    overview: 'Overview',
-    spotAccount: 'Spot Account',
-    swapAccount: 'Futures Account',
-    followAccount: 'Copy Account',
-    fundAccount: 'Withdrawable Account',
-    spotTradingAccount: 'Spot Trading Account',
-    ibitAccount: 'iBit Account',
-    lockedStakingAccount: 'Locked Account',
-    stakingTab: 'Lock-up',
-    ibitUnit: 'iBit',
-    releaseTotal: 'Total Released',
-    totalLockedBalance: 'Total Locked Balance (iBit)',
-    myStakingOrders: 'My Locked Orders',
-    stakingOrderNo: 'Order No.',
-    purchaseQty: 'Purchase Qty',
-    stakingTotal: 'Locked Amount',
-    released: 'Released',
-    pendingRelease: 'Pending Release',
-    startTime: 'Start Time',
-    subscribing: 'Subscribing',
-    releasing: 'Releasing',
-    completed: 'Completed',
-    pullToRefresh: 'Pull down to refresh',
-    releaseToRefresh: 'Release to refresh',
-    refreshing: 'Refreshing...',
-    totalAccount: 'Total Account Value',
-    showBalance: 'Show Balance',
-    hideBalance: 'Hide Balance',
-    followBalance: 'Copy Balance',
-    accountTransfer: 'Account Transfer',
-    transferFrom: 'From',
-    transferTo: 'To',
-    available: 'Available',
-    freeTransfer: 'Free transfer, instant arrival',
-    followPositions: 'Current Copy Positions',
-    noFollowPositions: 'No copy positions',
-    followLoading: 'Loading…',
-    long: 'Long',
-    short: 'Short',
-    trader: 'Trader',
-    openPrice: 'Open Price',
-    currentPrice: 'Current Price',
-    amountLever: 'Amount · Leverage',
-    closing: 'Closing…',
-    closePosition: 'Close',
-    noLossPosition: 'Lossless copy positions cannot be closed manually',
-    invalidPosition: 'Position info invalid, cannot close',
-    confirmClose: 'Close this position? Once closed, you will not receive final profit from this order.',
-    closeSuccess: 'Position closed successfully',
-    closeFailed: 'Failed to close position',
-    sameAccountError: 'Source and destination accounts cannot be the same',
-    amountError: 'Please enter a valid amount',
-    insufficientBalance: 'Insufficient available balance',
-    transferSuccess: 'Transfer successful',
-    transferFailed: 'Transfer failed',
-    goCopyTrade: 'Copy Trade',
-    goSpotTrade: 'Go to Trade',
-    hideZeroBalance: 'Hide zero balance assets',
-    depositRecord2: 'Deposit History',
-    amountUsdt: 'Amount (USDT)',
-    amountCoin: 'Amount ({coin})',
-    availableCoin: 'Available: {available} {coin}',
-    transferring: 'Transferring…',
-    confirmTransferBtn: 'Confirm Transfer',
-    statementPageTitle: 'Transaction Statement',
-    statementStartDate: 'Start date',
-    statementEndDate: 'End date',
-    statementReset: 'Reset',
-    statementSearch: 'Search',
-    statementSearching: 'Searching…',
-    statementEmpty: 'No records',
-    statementDirectionOpen: 'Open',
-    statementDirectionClose: 'Close',
-    statementTypes: {
-      '43': 'Spot profit',
-      '44': 'Spot loss',
-      '45': 'Spot trading fee',
-      '46': 'Spot rebate',
-      '48': 'Spot trade',
-      '49': 'Staking',
-      '50': 'Staking unlock release',
-      '51': 'Airdrop reward',
-      '52': 'Transfer to staking wallet',
-      '53': 'Transfer from staking wallet',
-    },
-  },
-  finance: {
-    ...financePageByLocale.en,
-  },
-  copyTrade: {
-    comprehensive: 'Comprehensive',
-    winRate14d: '14D Win Rate',
-    profit14d: '14D Return',
-    normal: 'Regular Copy',
-    lossless: 'Lossless Copy',
-    favorite: 'Favorites',
-    topTraders: 'Top Traders',
-    twoWeekReturn: '2W Return',
-    followers: 'Followers',
-    days: 'Days',
-    applyTrader: 'Apply as Trader',
-    myFollowing: 'My Copy Trading',
-    myTrading: 'My Trading',
-    traderIdentity: 'Lead trader',
-    myFollowingAccount: 'My copy account',
-    leadManage: 'Lead dashboard',
-    applyLead: 'Apply to lead',
-    pageTitle: 'Copy Trading',
-    heroDesc: 'Follow elite traders with one tap and let professional strategies work for you.',
-    traderOverview: 'Lead trader overview',
-    copyFollowersCount: 'Copy followers',
-    cumulativeTradingDays: 'Total trading days',
-    cumulativeLeadProfit: 'Cumulative copy profit',
-    goLeadManage: 'Open lead dashboard →',
-    copyWalletTitle: 'Copy account',
-    cumulativePnlUsdt: 'Cumulative copy PnL (USDT)',
-    availableUsdt: 'Available (USDT)',
-    unrealizedPnlUsdtShort: 'Unrealized PnL (USDT)',
-    followingTradersSummary: 'Following {n} traders',
-    newBadge: 'NEW',
-    losslessShieldTitle: 'Lossless protection',
-    losslessShieldDesc: ': If copy trades lose, the platform may provide risk relief so you pursue returns within controlled risk.',
-    learnHowItWorks: 'How it works →',
-    myStarredTraders: 'Traders you saved',
-    traderTotalCount: '{count} traders',
-    filterLoadingShort: 'Loading…',
-    loadTraderListFailed: 'Could not load traders',
-    loadFavoritesFailed: 'Could not load favorites',
-    favoritedToast: 'Saved',
-    defaultTraderName: 'Trader',
-    levelJunior: 'Junior',
-    badgeLossless: 'Lossless',
-    metaDaysTrades: '{days}d · {trades} trades',
-    followAction: 'Copy',
-    profitUsdtBracket: 'P&L (USDT)',
-    profitShareRate: 'Profit share',
-    trend14Days: '14-day trend',
-    emptyFavoriteHint: 'No favorites yet—discover great traders.',
-    emptyTraderListDefault: 'No traders to show',
-    emptyTraderListLossless: 'No lossless traders yet',
-    browseTraders: 'Browse traders',
-    losslessInfoHeading: 'How lossless copy works',
-    llInfoCard1Title: 'Conditional protection',
-    llInfoCard1Body: 'Protection applies when rules and trigger conditions are met; handled by platform risk systems.',
-    llInfoCard2Title: 'Limited liability',
-    llInfoCard2Body: 'Compensation is capped per eligible copy trade; losses beyond the agreed scope are not covered.',
-    llInfoCard3Title: 'Risk control first',
-    llInfoCard3Body: 'If losses exceed risk limits, protection systems activate first to keep copy trading fair.',
-    llInfoCard4Title: 'Risk notice',
-    llInfoCard4Body: 'Digital assets are highly risky; lossless copy is not risk-free—only trade what you can afford to lose.',
-    followingPlaza: 'Copy plaza',
-    followingWalletFail: 'Failed to load copy account overview',
-    followingTabPositions: 'Open Positions',
-    followingTabTraders: 'My Traders',
-    followingTabHistory: 'History',
-    followingHistEmpty: 'No historical copy trades',
-    followingNoTradersYet: 'You are not following any traders yet',
-    followingGoPlaza: 'Go to copy plaza',
-    confirmStopFollow: 'Stop following "{name}"?',
-    noLossManualCloseTooltip: 'Lossless copies cannot be closed manually',
-    followingThContract: 'Contract',
-    followingThDirection: 'Side',
-    followingThOpenPrice: 'Entry',
-    followingThCurPrice: 'Mark',
-    followingThQty: 'Size',
-    followingThLever: 'Leverage',
-    followingThUnrealized: 'Unrealized PnL',
-    followingThOpenTime: 'Open time',
-    followingThAction: 'Action',
-    followingOpenLong: 'Long Open',
-    followingOpenShort: 'Short Open',
-    closeQtyWithBase: 'Close size ({base})',
-    followingRealizedPnlUsdt: 'Realized PnL (USDT)',
-    followingYieldRate: 'Return',
-    followingAvgOpenUsdt: 'Avg entry (USDT)',
-    followingAvgCloseUsdt: 'Avg exit (USDT)',
-    marginCrossMode: 'Cross',
-    marginIsolatedMode: 'Isolated',
-    stopFollowing: 'Unfollow',
-    lead: {
-      pageTitle: 'My Lead Trading',
-      navMyFollowing: 'My Copy Trading →',
-      becomeTitle: 'Become a Lead Trader',
-      becomeDesc: 'Meet the requirements below to apply as a lead trader.',
-      condMinBalance: 'Futures account balance ≥ {min} USDT',
-      goTransfer: 'Transfer',
-      condNotFollowing: 'Must not be following another trader',
-      agreePrefix: 'I have read and agree to the',
-      agreeLink: 'Trader Agreement',
-      submitting: 'Submitting…',
-      submitApply: 'Submit Application',
-      applyFailed: 'Application failed, please try again later',
-      reviewingTitle: 'Application Under Review',
-      reviewingDesc: 'Your trader application is under review. You can start leading once approved.',
-      agreementTitle: 'Trader Agreement',
-      agreementEmpty: 'Agreement could not be loaded. Please try again later.',
-      leadingBadge: 'Leading',
-      noBio: 'No bio yet',
-      cancelLeadProcessing: 'Processing…',
-      cancelLeadApply: 'Request to Stop Leading',
-      confirmCancelLead: 'Stop leading? This will end all copy relationships.',
-      operationFailed: 'Operation failed',
-      statFollowers: 'Current copy followers',
-      statRegisterDays: 'Days on platform',
-      statCapital: 'Capital strength',
-      statCumulativeProfit: 'Cumulative copy profit (USDT)',
-      statTotalFollowers: 'Total copy followers',
-      statTradingDays: 'Total trading days',
-      tabFollowers: 'Followers ({n})',
-      tabCurrent: 'Open leads',
-      tabHistory: 'Lead history',
-      tabSettings: 'Trader settings',
-      emptyFollowers: 'No followers yet',
-      removeFollower: 'Remove',
-      followerEquity: 'Account equity (USDT)',
-      followerTotalShare: 'Total profit share (USDT)',
-      followerLastShare: 'Last period share',
-      followerSince: 'Following since: {time}',
-      emptyCurrent: 'No open lead positions',
-      emptyHistory: 'No lead history',
-      settingsBasic: 'Basic info',
-      avatar: 'Avatar',
-      nickname: 'Nickname',
-      nicknamePlaceholder: 'Up to 10 characters',
-      bio: 'Bio',
-      bioPlaceholder: 'Up to 25 characters',
-      saveSuccess: 'Saved',
-      saveBasicProcessing: 'Saving…',
-      saveBasic: 'Save basic info',
-      leadSymbols: 'Lead contracts',
-      saveProcessing: 'Saving…',
-      save: 'Save',
-      tagsTitle: 'Tags (up to 4)',
-      confirmRemoveFollower: 'Remove follower "{name}"?',
-      saveFailed: 'Save failed',
-      uploadFailed: 'Upload failed, please retry',
-      defaultFollower: 'Follower',
-      defaultUser: 'User',
-    },
-  },
-  footer: {
-    aboutSection: 'About Us',
-    companyIntro: 'Company Introduction',
-    brand: 'Brand',
-    community: 'Join iBit Community',
-    riskWarning: 'Risk Disclosure',
-    terms: 'Terms of Service',
-    privacy: 'Privacy Policy',
-    futuresTrade: 'Futures Trading',
-    spotTrade: 'Spot Trading',
-    losslessCopy: 'Lossless Copy',
-    beginnerGuide: 'Beginner Guide',
-    helpCenter: 'Help Center',
-    glossary: 'Glossary',
-    compliance: 'Compliance',
-    products: 'Products',
-    resources: 'Resources',
-  },
-  announcements: {
-    title: 'Announcements',
-    noAnnouncements: 'No announcements',
-    back: 'Back',
-    backToList: 'Back to List',
-    loadMore: 'Load More',
-  },
-  download: {
-    title: 'Download iBit',
-    heroTitle: 'Real-Time Market\nTrade Anytime, Anywhere',
-    desc: 'Trade anytime, anywhere',
-    appDesc: 'All popular features supported in-app, trade anytime anywhere',
-    latestVersion: 'Latest Version',
-    updateNotes: 'Update Notes',
-    ios: 'iOS Download',
-    iosNotReleased: 'iOS Not Available',
-    android: 'Android Download',
-    androidNotReleased: 'Android Not Available',
-    scanToDownload: 'Scan to download',
-  },
-  account: {
-    title: 'Account Center',
-    uid: 'UID',
-    email: 'Email',
-    profile: 'Profile',
-    security: 'Security',
-    securityDesc: 'Password, authentication, fund password',
-    assets: 'My Assets',
-    assetsDesc: 'Deposit, withdraw, transfer',
-    inviteCode: 'Invite Code',
-    inviteFriends: 'Invite Friends',
-    inviteDesc: 'Invite friends and earn rebate rewards',
-    helpSupport: 'Help & Support',
-    helpDesc: 'FAQ and tickets',
-    broker: 'Broker',
-    brokerDesc: 'Rebate management, team details',
-    logout: 'Log Out',
-    securityScore: 'Security Score',
-    twofa: 'Google Auth',
-    supportTitle: 'Contact Support',
-    supportHours: '7×24 Online Support',
-    onlineSupport: 'Online Chat',
-    instantChat: 'Instant Chat',
-    telegramSupport: 'Telegram Support',
-    emailSupport: 'Email Support',
-    applySubmitted: 'Application submitted, pending review',
-    scoreHigh: 'Excellent',
-    scoreMedium: 'Average',
-    scoreLow: 'Needs Improvement',
-  },
-  transfer: {
-    title: 'Transfer',
-    amount: 'Transfer Amount',
-    amountPlaceholder: 'Enter transfer amount',
-    maxTransferable: 'Max Transferable',
-    success: 'Transfer Successful',
-    selectCoin: 'Select Coin',
-    enterAmount: 'Please enter transfer amount',
-    histEmpty: 'No transfer records',
-    balanceLabel: 'Balance',
-  },
-  withdraw: {
-    title: 'Withdraw',
-    network: 'Network',
-    networkTip: 'Please ensure the withdrawal network matches the network on the receiving platform, otherwise assets may be lost.',
-    address: 'Withdraw Address',
-    addressPlaceholder: 'Enter withdraw address',
-    amount: 'Withdraw Amount',
-    received: 'Received Amount',
-    fee: 'Fee',
-    submitted: 'Withdrawal Submitted',
-    fundPassword: 'Fund Password',
-    emailCode: 'Email Code',
-    googleCode: 'Google Code',
-    securityVerification: 'Security Verification',
-    recordTitle: 'Withdrawal Records',
-    recordEmpty: 'No withdrawal records',
-    confirmCancelApply: 'Cancel this withdrawal request?',
-    withdrawCancelledToast: 'Cancelled',
-    withdrawCancelFailedToast: 'Cancellation failed',
-    statusPending: 'Under review',
-    statusReleasing: 'Releasing',
-    statusWithdrawFailed: 'Failed',
-    statusWithdrawSuccess: 'Succeeded',
-    statusWithdrawCancelled: 'Cancelled',
-    typeInternalTransfer: 'Internal Transfer',
-    typeOnChainWithdraw: 'On-chain Withdrawal',
-    cancelApplyBtn: 'Cancel',
-    initFailed: 'Failed to initialize',
-    submitOnChainFailed: 'Withdrawal failed',
-    transferSubmitFailed: 'Transfer failed',
-    availWithdrawBalance: 'Withdrawable balance:',
-    availTransferBalance: 'Transferable balance:',
-    coinLabel: 'Coin',
-    subCoin: 'Sub-coin',
-    mainCoinLabel: 'Main coin',
-    transferMainCoinHint: 'Internal transfer supports main coins only, not on-chain sub-tokens (e.g. TUSDT, EUSDT).',
-    withdrawNetworkLabel: 'Withdrawal network',
-    withdrawAmountUsdt: 'Withdraw amount (USDT)',
-    withdrawAmountCoin: 'Withdraw amount ({coin})',
-    transferAmountUsdt: 'Transfer amount (USDT)',
-    transferAmountCoin: 'Transfer amount ({coin})',
-    addressForCoin: 'Enter {coin} address',
-    expectedArrival: 'Est. received',
-    minWithdrawRowLabel: 'Min withdrawal',
-    internalTransferFeeLabel: 'Internal transfer fee',
-    free: 'Free',
-    minTransferRowLabel: 'Min transfer',
-    recipientUidLabel: 'Recipient (UID)',
-    recipientUidPlaceholder: "Enter recipient's UID",
-    addressForNetwork: 'Enter USDT-{network} address',
-    codePlaceholder6Digits: '6-digit code',
-    googlePlaceholder6: '6-digit authenticator code',
-    sendVerificationCode: 'Send code',
-    confirmWithdrawSubmit: 'Confirm withdrawal',
-    confirmTransferSubmit: 'Confirm transfer',
-    codeSentToEmailToast: 'Verification code sent to email',
-    onchainSubmittedPendingToast: 'Withdrawal submitted, pending review',
-    transferSubmittedToast: 'Internal transfer submitted',
-    submitFailed: 'Submit failed',
-    detailTitleOnChain: 'Withdrawal details',
-    detailTitleTransfer: 'Internal transfer details',
-    amountHeroWithdraw: 'Withdraw amount',
-    amountHeroTransfer: 'Transfer amount',
-    stepApplied: 'Submitted',
-    stepDone: 'Complete',
-    recipientLabel: 'Recipient',
-    appliedAt: 'Submitted at',
-    finishedAt: 'Completed at',
-    cancelApplyFull: 'Cancel request',
-    copyBtn: 'Copy',
-    bindGoogleFirst: 'Please bind Google Authenticator first',
-    errFillAddressBeforeCode: 'Please enter withdrawal address first',
-    errFillAmountBeforeCode: 'Please enter withdrawal amount first',
-    errFillUidBeforeCode: "Please enter recipient's UID first",
-    errFillTransferAmtBeforeCode: 'Please enter transfer amount first',
-    errEnterWithdrawAddress: 'Enter withdrawal address',
-    errEnterWithdrawAmount: 'Enter withdrawal amount',
-    errMinWithdrawWithAmt: 'Min withdrawal {min} {coin}',
-    errMinWithdrawWithAmtUsdt: 'Min withdrawal {min} USDT',
-    errExceedWithdrawBalance: 'Exceeds withdrawable balance',
-    errEnterFundPassword: 'Enter fund password',
-    errEnterEmailCode: 'Enter email code',
-    errEnterGoogleCode: 'Enter Google code',
-    errEnterRecipientUid: "Enter recipient's UID",
-    errEnterTransferAmount: 'Enter transfer amount',
-    errMinTransferWithAmt: 'Min transfer {min} {coin}',
-    errMinTransferWithAmtUsdt: 'Min transfer {min} USDT',
-    errExceedTransferBalance: 'Exceeds transferable balance',
-  },
-  deposit: {
-    title: 'Deposit',
-    address: 'Deposit Address',
-    network: 'Network',
-    saveQrCode: 'Save QR Code',
-    addressCopied: 'Address Copied',
-    minDeposit: 'Min Deposit',
-    arrivals: 'Confirmations',
-    coin: 'Coin',
-    protocol: 'Network / Protocol',
-    subCoin: 'Sub Coin',
-    contract: 'Contract',
-    depositAmount: 'Deposit Amount',
-    amountPlaceholder: 'Enter amount',
-    generateOrder: 'Generate Order',
-    generating: 'Generating…',
-    notice: 'Notice',
-    notice1: 'Please create an order before transferring; use the address and amount shown in the order.',
-    notice2: 'Do not deposit into the wrong network or contract, as this may result in permanent loss.',
-    notice3: 'Please submit the transaction hash as soon as the transfer is complete so the system can confirm receipt.',
-    intro: 'Introduction',
-    introText: 'Select a coin and network, enter the amount, then click "Generate Order" to get a dedicated receiving address and order number. After completing the on-chain transfer, submit the TxHash on this page.',
-    newDeposit: '← New Deposit',
-    orderInfo: 'Order Info',
-    orderNo: 'Order No.',
-    status: 'Status',
-    coinLabel: 'Coin',
-    networkLabel: 'Network',
-    amount: 'Amount',
-    payAddress: 'Payment Address',
-    payAddressHint: 'Transfer to this address in the exact amount shown; coin and network must match the order',
-    qrTitle: 'QR Code Payment',
-    qrHint: 'Scan with your wallet to transfer to the above address (do not modify the address or amount)',
-    contractAddress: 'Contract Address',
-    copy: '⎘ Copy',
-    copyAddress: 'Copy',
-    submitHash: 'Submit Transaction Hash',
-    submittingHash: 'Submitting…',
-    hashPlaceholder: 'Paste on-chain Tx Hash / Tron TxID',
-    orSubmitHash: 'Or: submit the transaction hash / TxID after transfer is complete',
-    hashRequired: 'Please enter the transaction hash',
-    statusNotSubmittable: 'Cannot submit hash in current status',
-    orderCreated: 'Order created, please transfer to the address below',
-    orderFailed: 'Failed to create order',
-    addressCopy: 'Address copied',
-    orderNoCopy: 'Order number copied',
-    hashSubmitted: 'Submitted, awaiting on-chain confirmation',
-    hashFailed: 'Submission failed',
-    broadcastSuccess: 'Transaction broadcast, hash submitted',
-    tronBroadcastSuccess: 'Transaction broadcast, TxID submitted',
-    noNetwork: 'No networks available',
-    noSubCoin: 'No sub-coins on this network',
-    amountRequired: 'Please enter deposit amount',
-    amountPositive: 'Please enter an amount greater than 0',
-    submittedHash: 'Submitted Hash: ',
-    manualDepositTab: 'Manual Deposit',
-    walletDepositTab: 'On-chain Deposit',
-    walletPayEvm: 'Connect wallet and pay (EVM)',
-    walletPayingEvm: 'Processing wallet…',
-    walletPayTron: 'Connect wallet and pay (Tron)',
-    walletPayingTron: 'Processing Tron wallet…',
-    histLink: 'Deposit History',
-    retryBtn: 'Retry',
-    backWithArrow: '‹ Back',
-    rechargeStatus0: 'Pending payment',
-    rechargeStatus1: 'Awaiting confirmation',
-    rechargeStatus2: 'Completed',
-    rechargeStatus3: 'Cancelled',
-    rechargeStatus4: 'Failed',
-    statusUnknown: 'Status {status}',
-    qrAlt: 'Receiving address QR code',
-    loadNetworksFailed: 'Failed to load networks',
-    wcHintEvmConfigured:
-      'You can use WalletConnect with an EVM wallet to send the order amount to the receiving address (ensure network and coin match).',
-    wcHintEvmUnconfigured:
-      'EVM WalletConnect is not configured: set VITE_WALLETCONNECT_PROJECT_ID in environment variables, or switch to Manual Deposit to submit the transaction hash.',
-    wcHintTronConfigured:
-      'You can use WalletConnect (Tron namespace) with a compatible wallet; after signing the transaction is broadcast and you submit a Tron TxID (not a 0x Ethereum hash).',
-    wcHintTronUnconfigured:
-      'Tron WalletConnect requires VITE_WALLETCONNECT_PROJECT_ID; if not configured, switch to Manual Deposit to submit the TxID.',
-    wcHintTronManualOnly:
-      'Wallet wake-up is not supported for this network. Switch to Manual Deposit to submit the TxID.',
-    walletPayFallback: 'Wallet payment failed',
-    tronWalletPayFallback: 'Tron wallet payment failed',
-    currentPrefix: 'Current:',
-    histEmpty: 'No deposit records',
-    histOrderNo: 'Order No.',
-    histTx: 'TX:',
-    histLoadMore: 'Load more',
-    histLoadedAll: 'All records loaded',
-  },
-  broker: {
-    title: 'Broker Center',
-    applyTitle: 'Apply as Broker',
-    myBrokerCode: 'My Broker Code',
-    referralCount: 'Referrals',
-    totalCommission: 'Total Commission',
-    applyStatus: 'Application Status',
-    pending: 'Under Review',
-    approved: 'Approved',
-    rejected: 'Rejected',
-    defaultName: 'Broker',
-    greeting: 'Hello, {name}',
-    uidLabel: 'UID: {uid}',
-    introBanner: 'Invite users to register and trade to earn rebates. Rebates settle in real time and are credited to your account daily.',
-    statNewToday: 'New today (users)',
-    statTradeToday: 'Traded today (users)',
-    statRebateToday: 'Rebate today (USDT)',
-    inviteList: 'Invitations',
-    emptyInviteList: 'No invitations yet',
-    thAccount: 'Account',
-    thLevel: 'Level',
-    thPerpCopy: 'Perp / Copy',
-    levelBroker: 'Broker',
-    levelNormal: 'Standard',
-    editRateTooltip: 'Edit rebate rate',
-    todayRebate: "Today's rebates",
-    emptyTodayRebate: 'No rebates today',
-    thId: 'ID',
-    rebateUsdt: 'Rebate (USDT)',
-    teamDetails: 'Team details',
-    filterAll: 'All',
-    filterWeek: 'Last 7 days',
-    filterToday: 'Today',
-    filterMonth: 'This month',
-    teamTotalAssets: 'Total team assets',
-    rebateHistory: 'Rebate history',
-    emptyRebateHistory: 'No rebate records',
-    amountUsdt: 'Amount (USDT)',
-    loadMore: 'Load more',
-    loadingMore: 'Loading…',
-    loadedAll: 'All records loaded',
-    editModalTitle: 'Edit rebate rate',
-    perpRebateRate: 'Perpetual rebate rate',
-    copyRebateRate: 'Copy-trade rebate rate',
-    editTip: 'Changes take effect immediately. Proceed with care.',
-    perpRateError: 'Perpetual rebate rate must be an integer from 0 to 100',
-    copyRateError: 'Copy-trade rebate rate must be an integer from 0 to 100',
-    setSuccess: 'Saved and applied in real time',
-  },
-  help: {
-    title: 'Help Center',
-    supportTitle: 'Help & Support',
-    search: 'Search',
-    searchPlaceholder: 'Search keywords',
-    telegramSupport: 'Telegram Support',
-    quickResponse: 'Quick Response',
-    emailSupport: 'Email Support',
-    docs: 'Help Docs',
-    viewFullGuide: 'View Full Guide',
-    detailTitle: 'Help Detail',
-    backToHelp: 'Back to Help Center',
-  },
-  invite: {
-    title: 'Invite Friends',
-    myCode: 'My Invite Code',
-    copy: 'Copy Code',
-    copied: 'Code Copied',
-    share: 'Share Invite Link',
-    shareLink: 'Copy Invite Link',
-    linkCopied: 'Link Copied',
-    desc: 'Invite friends to register and earn rebate rewards when they trade',
-    totalInvited: 'Total Invited',
-    totalReward: 'Total Rebate',
-    noRecord: 'No invite records',
-    heroLine1: 'Invite Friends',
-    heroLine2: 'Earn Rebates',
-    heroDesc:
-      'For each friend who registers successfully through your invitation, you may qualify for the platform invite rebate program. Final rules follow official announcements.',
-    myInviteInfo: 'My Invite Info',
-    inviteCodeLabel: 'Invite Code',
-    inviteLinkShort: 'Invite Link',
-    qrCodeLabel: 'QR Code',
-    copyShort: 'Copy',
-    copiedDone: 'Copied ✓',
-    qrInviteAlt: 'Invitation QR Code',
-    scanToRegister: 'Scan to register',
-    rebateRulesTitle: 'Rebate Rules',
-    step1Title: 'Share your code',
-    step1Desc: 'Send your exclusive invite code or link to friends',
-    step2Title: 'Friend registers',
-    step2Desc: 'Friends complete signup via your link (including verification as required)',
-    step3Title: 'Earn rebates',
-    step3Desc: 'Trading fees from your invitees settle as rebates according to platform rules',
-  },
-  futuresPage: futuresPageByLocale.en,
-  spot: {
-    tag: 'Spot',
-    side: { buy: 'Buy', sell: 'Sell' },
-    orderType: { limit: 'Limit', market: 'Market' },
-    orderStatus: {
-      pending: 'Open',
-      partial: 'Partially Filled',
-      filled: 'Filled',
-      cancelled: 'Cancelled',
-      pending_cancel: 'Cancelling',
-      expired: 'Expired',
-      init: 'Initializing',
-    },
-    recordType: {
-      transferIn: 'Transfer In',
-      transferOut: 'Transfer Out',
-      orderFreeze: 'Order Freeze',
-      cancelUnfreeze: 'Cancel Unfreeze',
-      trade: 'Trade',
-      fee: 'Fee',
-      unfreeze: 'Unfreeze',
-      unknown: 'Type {type}',
-    },
-    tabs: {
-      currentOrders: 'Open Orders',
-      historyOrders: 'Order History',
-      trades: 'Trade History',
-      funding: 'Funding History',
-    },
-    table: {
-      pair: 'Pair',
-      side: 'Side',
-      type: 'Type',
-      price: 'Price',
-      orderPrice: 'Order Price',
-      amount: 'Amount',
-      orderAmount: 'Order Qty',
-      filled: 'Filled',
-      status: 'Status',
-      time: 'Time',
-      action: 'Action',
-      dealPrice: 'Price',
-      dealVolume: 'Volume',
-      turnover: 'Turnover',
-      recordType: 'Type',
-      quantity: 'Amount',
-      coin: 'Coin',
-    },
-    trade: {
-      buy: 'Buy',
-      sell: 'Sell',
-      limit: 'Limit',
-      market: 'Market',
-      processing: 'Processing...',
-      buySymbol: 'Buy {symbol}',
-      sellSymbol: 'Sell {symbol}',
-      priceUsdt: 'Price (USDT)',
-      limitPlaceholder: 'Limit',
-      marketHint: 'Execute at best market price',
-      amountUsdt: 'Amount (USDT)',
-      amountBase: 'Amount ({base})',
-      available: 'Available',
-      transfer: 'Transfer',
-      loginForBalance: 'Log in to view balance',
-      spotAssets: 'Spot Assets',
-    },
-    order: { cancel: 'Cancel', cancelAll: 'Cancel All' },
-    empty: {
-      loginLink: 'Log in',
-      loginOrdersPrompt: '{link} to view orders',
-      loginViewPrompt: '{link} to view',
-      noOrders: 'No open orders',
-      noHistoryOrders: 'No order history',
-      noTrades: 'No trades',
-      noFunding: 'No records',
-    },
-    errors: {
-      symbolNotReady: 'Trading pair not ready',
-      invalidAmount: 'Enter a valid amount',
-      invalidPrice: 'Enter a valid price',
-      minLimitVolume: 'Amount must be at least {min}',
-      minMarketBuy: 'Market buy amount must be at least {min} USDT',
-      minMarketSell: 'Market sell amount must be at least {min}',
-      orderSubmitted: 'Order submitted',
-      orderFailed: 'Order failed',
-      cancelSuccess: 'Order cancelled',
-      cancelFailed: 'Cancel failed',
-      cancelAllSuccess: 'All orders cancelled',
-      cancelAllPartialFailed: 'Some orders failed to cancel',
-    },
-    loadedAll: 'All loaded',
-    ticker: {
-      change24h: '24h Change',
-      high24h: '24h High',
-      low24h: '24h Low',
-      turnover24h: '24h Volume',
-    },
-    chartSub: { chart: 'Chart', coinInfo: 'Coin Info' },
-    tf: { m1: '1m', m5: '5m', m15: '15m', m30: '30m', h1: '1h', h4: '4h', d1: '1D' },
-    ohlcv: {
-      spotLabel: 'Spot',
-      open: 'O',
-      high: 'H',
-      low: 'L',
-      close: 'C',
-      volume: 'Vol',
-      changePct: 'Change',
-    },
-    draw: {
-      cursor: 'Cursor',
-      trend: 'Trend line',
-      hline: 'Horizontal',
-      ray: 'Ray',
-      channel: 'Channel',
-      fib: 'Fibonacci',
-      text: 'Text',
-      clearAll: 'Clear drawings',
-      zoomOut: 'Zoom out',
-    },
-    mobileTab: { chart: 'Markets', trade: 'Trade' },
-    pair: { search: 'Search', loading: 'Loading…', noMatch: 'No results', retryLater: ', please retry' },
-    book: {
-      waiting: 'Waiting for data…',
-      orderbook: 'Order book',
-      trades: 'Trades',
-      priceUsdt: 'Price (USDT)',
-      amountBase: 'Amount ({base})',
-      total: 'Total',
-      buyRatio: 'Buy {n}%',
-      sellRatio: '{n}% Sell',
-      price: 'Price',
-      amount: 'Amount',
-      time: 'Time',
-      pricePrecision: 'Price precision',
-    },
-    coinInfo: {
-      marketCap: 'Market cap',
-      circulating: 'Circulating supply',
-      issuePrice: 'Issue price',
-      ath: 'All-time high',
-      athDate: 'ATH date',
-      whitepaper: 'Whitepaper',
-      empty: 'No coin info',
-      reload: 'Reload',
-    },
-    transferModal: {
-      title: 'Transfer',
-      selectCoin: 'Coin',
-      amount: 'Amount',
-      amountPlaceholder: 'Enter amount',
-      availableUsdt: 'Available USDT:',
-      availableCoin: 'Available {coin}:',
-      transferring: 'Transferring...',
-      invalidAmount: 'Enter a valid transfer amount',
-      insufficientBalance: 'Amount exceeds available balance',
-      transferFailed: 'Transfer failed, please try again',
-    },
-  },
-}
+	nav: {
+		home: 'Home',
+		market: 'Market',
+		spot: 'Spot',
+		futures: 'Futures',
+		copyTrade: 'Copy',
+		finance: 'Earn',
+		idoPresale: 'IDO Presale',
+		claimAirdrop: 'Claim Airdrop',
+		announcements: 'Announcements',
+		download: 'Download',
+	},
+	lang: {
+		title: '语言',
+		zhCN: '简体中文',
+		zhTW: '繁體中文',
+		en: 'English',
+		ko: '한국어',
+		ja: '日本語',
+		hi: 'हिन्दी',
+		id: 'Bahasa Indonesia',
+		es: 'Español',		   // 西班牙语
+		ru: 'Русский',         // 俄语
+		pt: 'Português',       // 葡萄牙语
+		de: 'Deutsch',         // 德语
+		fr: 'Français',        // 法语
+		tr: 'Türkçe',          // 土耳其语
+		vi: 'Tiếng Việt'       // 越南语
+	},
+	header: {
+		login: 'Login',
+		register: 'Register',
+		account: 'Account',
+		assets: 'My Assets',
+		security: 'Security',
+		broker: 'Broker',
+		logout: 'Logout',
+		logoutShort: 'Logout',
+		downloadTitle: 'Download',
+		brokerApplyTitle: 'Apply as Broker',
+		brokerApplyDesc: 'You are not a broker yet. The system will automatically submit an application using your account information. You can use broker features once approved.',
+		cancel: 'Cancel',
+		applyNow: 'Apply Now',
+		viewApplyList: 'View Application Status',
+		submitting: 'Submitting…',
+		menu: 'Menu',
+	},
+	common: {
+		loading: 'Loading...',
+		retry: 'Retry',
+		cancel: 'Cancel',
+		confirm: 'Confirm',
+		submit: 'Submit',
+		save: 'Save',
+		send: 'Send',
+		back: 'Back',
+		next: 'Next',
+		done: 'Done',
+		noData: 'No Data',
+		noRecord: 'No Records',
+		search: 'Search',
+		all: 'All',
+		max: 'Max',
+		copied: 'Copied',
+		networkError: 'Network error, please retry',
+		loadFailed: 'Load Failed',
+		operationFailed: 'Operation failed, please retry',
+		saveSuccess: 'Saved',
+		more: 'More',
+		perpetual: 'Perp',
+		set: 'Set',
+		notSet: 'Not Set',
+		change: 'Change',
+		bind: 'Bind',
+		unbind: 'Unbind',
+		on: 'On',
+		off: 'Off',
+		status: 'Status',
+		time: 'Time',
+		amount: 'Amount',
+		type: 'Type',
+		coin: 'Coin',
+		from: 'From',
+		to: 'To',
+		close: 'Close',
+		contactService: 'Contact Support',
+	},
+	home: {
+		heroTitle: 'Secure · Efficient · Global\nDigital Asset Exchange',
+		heroDesc: 'iBit is dedicated to providing stable, transparent, and professional digital asset trading services to global users through leading technology and strict risk management.',
+		register: 'Register',
+		viewMarket: 'View Markets',
+		downloadApp: 'Download App',
+		coreAdvantages: 'Core Advantages',
+		assetSafetyTitle: 'Asset Security',
+		assetSafetyDesc: 'Cold/hot wallet isolation, multi-signature and permission controls, plus 24/7 risk monitoring to fully protect user assets.',
+		highPerfTitle: 'High Performance',
+		highPerfDesc: 'Proprietary matching engine with millisecond order processing, delivering a stable and smooth trading experience in low-latency environments.',
+		globalComplianceTitle: 'Global Compliance',
+		globalComplianceDesc: 'Adhering to multi-regional compliance standards and continuously advancing compliance, providing a trustworthy trading environment for global users.',
+		transparentFeeTitle: 'Transparent Fees',
+		transparentFeeDesc: 'Clear and transparent fee structure with no hidden costs, helping users effectively manage trading costs.',
+		aboutUs: 'About Us',
+		aboutDesc: 'iBit is a global digital asset exchange dedicated to providing safe, stable, and efficient trading services through technology innovation and compliant operations.',
+		foundedYear: 'Founded in 2023',
+		headquarters: 'Headquartered and registered in Dubai, the company holds relevant licenses issued by regulatory authorities of the United States, Canada, Australia and Dubai',
+		ourVision: 'Our Vision',
+		visionSubtitle: 'Building a globally trusted digital asset trading infrastructure for the long term',
+		ecoTitle: 'Ecosystem',
+		ecoDesc: 'Building a new-generation Crypto digital asset trading ecosystem',
+		missionTitle: 'Mission',
+		missionDesc: 'Driving the flow of digital value across global scenarios',
+		purposeTitle: 'Purpose',
+		purposeDesc: 'Helping users easily manage and invest in crypto digital assets',
+		heroImageAlt: 'iBit Trading Platform',
+		aboutImageAlt: 'About Us',
+	},
+	market: {
+		title: 'Live Market',
+		desc: 'Real-time prices, volumes, and 24h changes for major digital assets to help users stay on top of market trends.',
+		hot: 'Hot',
+		topVolume: 'Top Volume',
+		gainers: 'Gainers',
+		losers: 'Losers',
+		perpetual: 'Perp',
+		name: 'Name',
+		latestPrice: 'Price',
+		change24h: '24h Change',
+		turnover: 'Volume',
+		searchPair: 'Search pairs',
+		searchMarket: 'Search coins, pairs, futures',
+		price: 'Price',
+		change24hShort: '24h Change',
+		high24h: '24h High',
+		low24h: '24h Low',
+		volume24hLabel: '24h Volume',
+	},
+	auth: {
+		loginTitle: 'Login',
+		emailLogin: 'Email Login',
+		emailPlaceholder: 'Enter your email',
+		password: 'Password',
+		passwordPlaceholder: 'Enter your password',
+		forgotPassword: 'Forgot Password?',
+		loginBtn: 'Login',
+		noAccount: "Don't have an account?",
+		registerNow: 'Register Now',
+		verifyTitle: 'Enter Verification Code',
+		codeSentDesc: 'A verification code has been sent to {email}. Please check your inbox.',
+		codeSendDesc: 'Click the button below to send a verification code to {email}.',
+		countdownResend: 'Resend in {n}s',
+		resendCode: 'Resend Code',
+		confirmBtn: 'Confirm',
+		sendCode: 'Send Code',
+		forgotVerify: 'Forgot verification method?',
+		loginSuccess: 'Login successful',
+		codeSentAgain: 'Code resent',
+		registerTitle: 'Register',
+		emailRegister: 'Email Registration',
+		inviteCodeLabel: 'Invite Code (optional)',
+		inviteCodePlaceholder: 'Enter invite code',
+		hasAccount: 'Already have an account?',
+		loginNow: 'Login Now',
+		verifyPageTitle: 'Security Verification',
+		emailVerifyLabel: 'Email Verification',
+		codePlaceholder: 'Enter verification code',
+		sendBtn: 'Send',
+		passwordTitle: 'Create Password',
+		backBtn: '‹ Back',
+		inputPasswordLabel: 'Password',
+		confirmPasswordLabel: 'Confirm Password',
+		confirmPasswordPlaceholder: 'Re-enter password',
+		doneBtn: 'Done',
+		resetSuccess: 'Password reset successful. Please log in with your new password.',
+		registerSuccess: 'Registration Successful',
+		welcomeJoin: 'Welcome to iBit',
+		loginNowBtn: 'Login Now',
+		forgotPasswordTitle: 'Reset Password',
+		emailLabel: 'Email',
+		emailRegisteredPlaceholder: 'Enter your registered email',
+		codeSentToast: 'Code sent',
+	},
+	error: {
+		emailRequired: 'Please enter your email',
+		emailInvalid: 'Invalid email format',
+		passwordRequired: 'Please enter your password',
+		code6Required: 'Please enter the 6-digit code',
+		codeRequired: 'Please enter the verification code',
+		loginFailed: 'Incorrect username or password',
+		networkError: 'Network error, please try again',
+		emailAlreadyRegistered: 'This email is already registered. Please log in.',
+		confirmPasswordRequired: 'Please re-enter your password',
+		passwordMismatch: 'Passwords do not match',
+		loadFailed: 'Failed to load security info',
+		refreshFailed: 'Refresh failed',
+		statusUpdated: 'Status updated',
+		currentPasswordRequired: 'Please enter your current password',
+		sixDigitCode: 'Please enter the 6-digit email verification code',
+		sixDigitGoogleCode: 'Please enter the 6-digit Google code',
+		sendFailed: 'Send failed',
+		operationFailed: 'Operation failed',
+	},
+	security: {
+		title: 'Security Settings',
+		back: '‹ Back',
+		warningBanner: 'We recommend completing email verification, Google Authenticator, and fund password setup to enhance account security.',
+		accountSecurity: 'Account Security',
+		loginPassword: 'Login Password',
+		loginPasswordDesc: 'Changing your password regularly improves account security',
+		emailVerify: 'Email Verification',
+		emailVerifyDesc: 'Bind your email for account verification and password recovery',
+		googleAuth: 'Google Authenticator',
+		googleAuthDesc: 'Bind Google Authenticator to enhance account security',
+		fundPassword: 'Fund Password',
+		fundPasswordDesc: 'Set a fund password to protect your assets',
+		set: 'Set',
+		notSet: 'Not Set',
+		change: 'Change',
+		bind: 'Bind',
+		set2: 'Set',
+		statusUpdated: 'Status updated',
+		loadFailed: 'Failed to load security info',
+		refreshFailed: 'Refresh failed',
+		bound: 'Bound',
+		notBound: 'Not Bound',
+		refresh: 'Refresh',
+		googleHelpTitle: 'Google Authenticator Help',
+		googleHelpDesc: 'If you cannot receive the verification code or need to unbind, please contact online support.',
+		changeLoginPassword: 'Change Login Password',
+		changePasswordHint: 'After changing, please use your new password to log in. The verification code will be sent to your bound email.',
+		currentPassword: 'Current Password',
+		newPassword: 'New Password',
+		confirmNewPassword: 'Confirm New Password',
+		emailCode: 'Email Verification Code',
+		sendCode: 'Send Code',
+		codeSent: 'Verification code sent to email',
+		changeSuccess: 'Password changed successfully',
+		confirmChange: 'Confirm Change',
+		submitting: 'Submitting…',
+		setFundPassword: 'Set Fund Password',
+		resetFundPassword: 'Reset Fund Password',
+		fundPasswordHint: 'The fund password is used for withdrawals, transfers and other sensitive operations. Please keep it safe.',
+		fundPasswordResetHint: 'Please reset your fund password. A verification code will be sent to your bound email.',
+		newFundPassword: 'New Fund Password',
+		confirmFundPassword: 'Confirm Password',
+		fundPasswordUpdated: 'Fund password updated',
+		fundPasswordSet: 'Fund password set successfully',
+		bindGoogle: 'Bind Google Authenticator',
+		boundEmail: 'Bound Email:',
+		googleQrStep: '1. Scan the QR code or enter the key manually',
+		googleCodeStep: '2. Google Authenticator Code (6 digits)',
+		emailCodeStep: '3. Email Verification Code',
+		copyKey: 'Copy Key',
+		keyCopied: 'Key copied',
+		copyFailed: 'Copy failed, please select the key text manually',
+		clipboardDeniedMac: 'Clipboard access denied. Click the lock icon in the address bar → Site settings → set Clipboard to Allow, then try again.',
+		clipboardDenied: 'Clipboard access denied. Allow clipboard permission for this site in your browser settings, then try again.',
+		invalidSecret: 'Invalid key, please refresh and try again',
+		googleCodeRequired: 'Please enter the 6-digit Google code',
+		emailCodeSent: 'Email verification code sent',
+		bindSuccess: 'Bound successfully',
+		confirmBind: 'Confirm Bind',
+		googleAuthLead: 'Please first download Google Authenticator or Microsoft Authenticator from your phone\'s app store to store your one-time verification codes.',
+		googleAuthTip1: 'After binding, login and sensitive operations may require the 6-digit code from the app.',
+		googleAuthTip2: 'Keep your device safe. If you cannot receive the code, please contact customer support.',
+		googleAuthStart: 'I\'ve downloaded it, bind now',
+	},
+	assets: {
+		title: 'My Assets',
+		totalAssets: 'Total Assets',
+		todayPnl: "Today's P&L",
+		deposit: 'Deposit',
+		withdraw: 'Withdraw',
+		transfer: 'Transfer',
+		history: 'History',
+		spot: 'Spot',
+		futures: 'Futures',
+		copyTrade: 'Copy',
+		fund: 'Withdrawable',
+		walletBalance: 'Wallet Balance',
+		unrealizedPnl: 'Unrealized PnL',
+		positions: 'Positions',
+		noPositions: 'No Positions',
+		assetBalance: 'Asset Balance',
+		unavailable: 'Unavailable',
+		depositCoin: 'Deposit',
+		withdrawCoin: 'Withdraw',
+		depositRecord: 'Deposit History',
+		withdrawRecord: 'Withdraw History',
+		transferRecord: 'Transfer History',
+		assetRecord: 'Transaction History',
+		overview: 'Overview',
+		spotAccount: 'Spot Account',
+		swapAccount: 'Futures Account',
+		followAccount: 'Copy Account',
+		fundAccount: 'Withdrawable Account',
+		spotTradingAccount: 'Spot Trading Account',
+		ibitAccount: 'iBit Account',
+		lockedStakingAccount: 'Locked Account',
+		stakingTab: 'Lock-up',
+		ibitUnit: 'iBit',
+		releaseTotal: 'Total Released',
+		totalLockedBalance: 'Total Locked Balance (iBit)',
+		myStakingOrders: 'My Locked Orders',
+		stakingOrderNo: 'Order No.',
+		purchaseQty: 'Purchase Qty',
+		stakingTotal: 'Locked Amount',
+		released: 'Released',
+		pendingRelease: 'Pending Release',
+		startTime: 'Start Time',
+		subscribing: 'Subscribing',
+		releasing: 'Releasing',
+		completed: 'Completed',
+		pullToRefresh: 'Pull down to refresh',
+		releaseToRefresh: 'Release to refresh',
+		refreshing: 'Refreshing...',
+		totalAccount: 'Total Account Value',
+		showBalance: 'Show Balance',
+		hideBalance: 'Hide Balance',
+		followBalance: 'Copy Balance',
+		accountTransfer: 'Account Transfer',
+		transferFrom: 'From',
+		transferTo: 'To',
+		available: 'Available',
+		freeTransfer: 'Free transfer, instant arrival',
+		followPositions: 'Current Copy Positions',
+		noFollowPositions: 'No copy positions',
+		followLoading: 'Loading…',
+		long: 'Long',
+		short: 'Short',
+		trader: 'Trader',
+		openPrice: 'Open Price',
+		currentPrice: 'Current Price',
+		amountLever: 'Amount · Leverage',
+		closing: 'Closing…',
+		closePosition: 'Close',
+		noLossPosition: 'Lossless copy positions cannot be closed manually',
+		invalidPosition: 'Position info invalid, cannot close',
+		confirmClose: 'Close this position? Once closed, you will not receive final profit from this order.',
+		closeSuccess: 'Position closed successfully',
+		closeFailed: 'Failed to close position',
+		sameAccountError: 'Source and destination accounts cannot be the same',
+		amountError: 'Please enter a valid amount',
+		insufficientBalance: 'Insufficient available balance',
+		transferSuccess: 'Transfer successful',
+		transferFailed: 'Transfer failed',
+		goCopyTrade: 'Copy Trade',
+		goSpotTrade: 'Go to Trade',
+		hideZeroBalance: 'Hide zero balance assets',
+		depositRecord2: 'Deposit History',
+		amountUsdt: 'Amount (USDT)',
+		amountCoin: 'Amount ({coin})',
+		availableCoin: 'Available: {available} {coin}',
+		transferring: 'Transferring…',
+		confirmTransferBtn: 'Confirm Transfer',
+		statementPageTitle: 'Transaction Statement',
+		statementStartDate: 'Start date',
+		statementEndDate: 'End date',
+		statementReset: 'Reset',
+		statementSearch: 'Search',
+		statementSearching: 'Searching…',
+		statementEmpty: 'No records',
+		statementDirectionOpen: 'Open',
+		statementDirectionClose: 'Close',
+		statementTypes: {
+			'43': 'Spot profit',
+			'44': 'Spot loss',
+			'45': 'Spot trading fee',
+			'46': 'Spot rebate',
+			'48': 'Spot trade',
+			'49': 'Staking',
+			'50': 'Staking unlock release',
+			'51': 'Airdrop reward',
+			'52': 'Transfer to staking wallet',
+			'53': 'Transfer from staking wallet',
+		},
+	},
+	finance: {
+		...financePageByLocale.en,
+	},
+	copyTrade: {
+		comprehensive: 'Comprehensive',
+		winRate14d: '14D Win Rate',
+		profit14d: '14D Return',
+		normal: 'Regular Copy',
+		lossless: 'Lossless Copy',
+		favorite: 'Favorites',
+		topTraders: 'Top Traders',
+		twoWeekReturn: '2W Return',
+		followers: 'Followers',
+		days: 'Days',
+		applyTrader: 'Apply as Trader',
+		myFollowing: 'My Copy Trading',
+		myTrading: 'My Trading',
+		traderIdentity: 'Lead trader',
+		myFollowingAccount: 'My copy account',
+		leadManage: 'Lead dashboard',
+		applyLead: 'Apply to lead',
+		pageTitle: 'Copy Trading',
+		heroDesc: 'Follow elite traders with one tap and let professional strategies work for you.',
+		traderOverview: 'Lead trader overview',
+		copyFollowersCount: 'Copy followers',
+		cumulativeTradingDays: 'Total trading days',
+		cumulativeLeadProfit: 'Cumulative copy profit',
+		goLeadManage: 'Open lead dashboard →',
+		copyWalletTitle: 'Copy account',
+		cumulativePnlUsdt: 'Cumulative copy PnL (USDT)',
+		availableUsdt: 'Available (USDT)',
+		unrealizedPnlUsdtShort: 'Unrealized PnL (USDT)',
+		followingTradersSummary: 'Following {n} traders',
+		newBadge: 'NEW',
+		losslessShieldTitle: 'Lossless protection',
+		losslessShieldDesc: ': If copy trades lose, the platform may provide risk relief so you pursue returns within controlled risk.',
+		learnHowItWorks: 'How it works →',
+		myStarredTraders: 'Traders you saved',
+		traderTotalCount: '{count} traders',
+		filterLoadingShort: 'Loading…',
+		loadTraderListFailed: 'Could not load traders',
+		loadFavoritesFailed: 'Could not load favorites',
+		favoritedToast: 'Saved',
+		defaultTraderName: 'Trader',
+		levelJunior: 'Junior',
+		badgeLossless: 'Lossless',
+		metaDaysTrades: '{days}d · {trades} trades',
+		followAction: 'Copy',
+		profitUsdtBracket: 'P&L (USDT)',
+		profitShareRate: 'Profit share',
+		trend14Days: '14-day trend',
+		emptyFavoriteHint: 'No favorites yet—discover great traders.',
+		emptyTraderListDefault: 'No traders to show',
+		emptyTraderListLossless: 'No lossless traders yet',
+		browseTraders: 'Browse traders',
+		losslessInfoHeading: 'How lossless copy works',
+		llInfoCard1Title: 'Conditional protection',
+		llInfoCard1Body: 'Protection applies when rules and trigger conditions are met; handled by platform risk systems.',
+		llInfoCard2Title: 'Limited liability',
+		llInfoCard2Body: 'Compensation is capped per eligible copy trade; losses beyond the agreed scope are not covered.',
+		llInfoCard3Title: 'Risk control first',
+		llInfoCard3Body: 'If losses exceed risk limits, protection systems activate first to keep copy trading fair.',
+		llInfoCard4Title: 'Risk notice',
+		llInfoCard4Body: 'Digital assets are highly risky; lossless copy is not risk-free—only trade what you can afford to lose.',
+		followingPlaza: 'Copy plaza',
+		followingWalletFail: 'Failed to load copy account overview',
+		followingTabPositions: 'Open Positions',
+		followingTabTraders: 'My Traders',
+		followingTabHistory: 'History',
+		followingHistEmpty: 'No historical copy trades',
+		followingNoTradersYet: 'You are not following any traders yet',
+		followingGoPlaza: 'Go to copy plaza',
+		confirmStopFollow: 'Stop following "{name}"?',
+		noLossManualCloseTooltip: 'Lossless copies cannot be closed manually',
+		followingThContract: 'Contract',
+		followingThDirection: 'Side',
+		followingThOpenPrice: 'Entry',
+		followingThCurPrice: 'Mark',
+		followingThQty: 'Size',
+		followingThLever: 'Leverage',
+		followingThUnrealized: 'Unrealized PnL',
+		followingThOpenTime: 'Open time',
+		followingThAction: 'Action',
+		followingOpenLong: 'Long Open',
+		followingOpenShort: 'Short Open',
+		closeQtyWithBase: 'Close size ({base})',
+		followingRealizedPnlUsdt: 'Realized PnL (USDT)',
+		followingYieldRate: 'Return',
+		followingAvgOpenUsdt: 'Avg entry (USDT)',
+		followingAvgCloseUsdt: 'Avg exit (USDT)',
+		marginCrossMode: 'Cross',
+		marginIsolatedMode: 'Isolated',
+		stopFollowing: 'Unfollow',
+		lead: {
+			pageTitle: 'My Lead Trading',
+			navMyFollowing: 'My Copy Trading →',
+			becomeTitle: 'Become a Lead Trader',
+			becomeDesc: 'Meet the requirements below to apply as a lead trader.',
+			condMinBalance: 'Futures account balance ≥ {min} USDT',
+			goTransfer: 'Transfer',
+			condNotFollowing: 'Must not be following another trader',
+			agreePrefix: 'I have read and agree to the',
+			agreeLink: 'Trader Agreement',
+			submitting: 'Submitting…',
+			submitApply: 'Submit Application',
+			applyFailed: 'Application failed, please try again later',
+			reviewingTitle: 'Application Under Review',
+			reviewingDesc: 'Your trader application is under review. You can start leading once approved.',
+			agreementTitle: 'Trader Agreement',
+			agreementEmpty: 'Agreement could not be loaded. Please try again later.',
+			leadingBadge: 'Leading',
+			noBio: 'No bio yet',
+			cancelLeadProcessing: 'Processing…',
+			cancelLeadApply: 'Request to Stop Leading',
+			confirmCancelLead: 'Stop leading? This will end all copy relationships.',
+			operationFailed: 'Operation failed',
+			statFollowers: 'Current copy followers',
+			statRegisterDays: 'Days on platform',
+			statCapital: 'Capital strength',
+			statCumulativeProfit: 'Cumulative copy profit (USDT)',
+			statTotalFollowers: 'Total copy followers',
+			statTradingDays: 'Total trading days',
+			tabFollowers: 'Followers ({n})',
+			tabCurrent: 'Open leads',
+			tabHistory: 'Lead history',
+			tabSettings: 'Trader settings',
+			emptyFollowers: 'No followers yet',
+			removeFollower: 'Remove',
+			followerEquity: 'Account equity (USDT)',
+			followerTotalShare: 'Total profit share (USDT)',
+			followerLastShare: 'Last period share',
+			followerSince: 'Following since: {time}',
+			emptyCurrent: 'No open lead positions',
+			emptyHistory: 'No lead history',
+			settingsBasic: 'Basic info',
+			avatar: 'Avatar',
+			nickname: 'Nickname',
+			nicknamePlaceholder: 'Up to 10 characters',
+			bio: 'Bio',
+			bioPlaceholder: 'Up to 25 characters',
+			saveSuccess: 'Saved',
+			saveBasicProcessing: 'Saving…',
+			saveBasic: 'Save basic info',
+			leadSymbols: 'Lead contracts',
+			saveProcessing: 'Saving…',
+			save: 'Save',
+			tagsTitle: 'Tags (up to 4)',
+			confirmRemoveFollower: 'Remove follower "{name}"?',
+			saveFailed: 'Save failed',
+			uploadFailed: 'Upload failed, please retry',
+			defaultFollower: 'Follower',
+			defaultUser: 'User',
+		},
+	},
+	footer: {
+		aboutSection: 'About Us',
+		companyIntro: 'Company Introduction',
+		brand: 'Brand',
+		community: 'Join iBit Community',
+		riskWarning: 'Risk Disclosure',
+		terms: 'Terms of Service',
+		privacy: 'Privacy Policy',
+		futuresTrade: 'Futures Trading',
+		spotTrade: 'Spot Trading',
+		losslessCopy: 'Lossless Copy',
+		beginnerGuide: 'Beginner Guide',
+		helpCenter: 'Help Center',
+		glossary: 'Glossary',
+		compliance: 'Compliance',
+		products: 'Products',
+		resources: 'Resources',
+	},
+	announcements: {
+		title: 'Announcements',
+		noAnnouncements: 'No announcements',
+		back: 'Back',
+		backToList: 'Back to List',
+		loadMore: 'Load More',
+	},
+	download: {
+		title: 'Download iBit',
+		heroTitle: 'Real-Time Market\nTrade Anytime, Anywhere',
+		desc: 'Trade anytime, anywhere',
+		appDesc: 'All popular features supported in-app, trade anytime anywhere',
+		latestVersion: 'Latest Version',
+		updateNotes: 'Update Notes',
+		ios: 'iOS Download',
+		iosNotReleased: 'iOS Not Available',
+		android: 'Android Download',
+		androidNotReleased: 'Android Not Available',
+		scanToDownload: 'Scan to download',
+	},
+	account: {
+		title: 'Account Center',
+		uid: 'UID',
+		email: 'Email',
+		profile: 'Profile',
+		security: 'Security',
+		securityDesc: 'Password, authentication, fund password',
+		assets: 'My Assets',
+		assetsDesc: 'Deposit, withdraw, transfer',
+		inviteCode: 'Invite Code',
+		inviteFriends: 'Invite Friends',
+		inviteDesc: 'Invite friends and earn rebate rewards',
+		helpSupport: 'Help & Support',
+		helpDesc: 'FAQ and tickets',
+		broker: 'Broker',
+		brokerDesc: 'Rebate management, team details',
+		logout: 'Log Out',
+		securityScore: 'Security Score',
+		twofa: 'Google Auth',
+		supportTitle: 'Contact Support',
+		supportHours: '7×24 Online Support',
+		onlineSupport: 'Online Chat',
+		instantChat: 'Instant Chat',
+		telegramSupport: 'Telegram Support',
+		emailSupport: 'Email Support',
+		applySubmitted: 'Application submitted, pending review',
+		scoreHigh: 'Excellent',
+		scoreMedium: 'Average',
+		scoreLow: 'Needs Improvement',
+	},
+	transfer: {
+		title: 'Transfer',
+		amount: 'Transfer Amount',
+		amountPlaceholder: 'Enter transfer amount',
+		maxTransferable: 'Max Transferable',
+		success: 'Transfer Successful',
+		selectCoin: 'Select Coin',
+		enterAmount: 'Please enter transfer amount',
+		histEmpty: 'No transfer records',
+		balanceLabel: 'Balance',
+	},
+	withdraw: {
+		title: 'Withdraw',
+		network: 'Network',
+		networkTip: 'Please ensure the withdrawal network matches the network on the receiving platform, otherwise assets may be lost.',
+		address: 'Withdraw Address',
+		addressPlaceholder: 'Enter withdraw address',
+		amount: 'Withdraw Amount',
+		received: 'Received Amount',
+		fee: 'Fee',
+		submitted: 'Withdrawal Submitted',
+		fundPassword: 'Fund Password',
+		emailCode: 'Email Code',
+		googleCode: 'Google Code',
+		securityVerification: 'Security Verification',
+		recordTitle: 'Withdrawal Records',
+		recordEmpty: 'No withdrawal records',
+		confirmCancelApply: 'Cancel this withdrawal request?',
+		withdrawCancelledToast: 'Cancelled',
+		withdrawCancelFailedToast: 'Cancellation failed',
+		statusPending: 'Under review',
+		statusReleasing: 'Releasing',
+		statusWithdrawFailed: 'Failed',
+		statusWithdrawSuccess: 'Succeeded',
+		statusWithdrawCancelled: 'Cancelled',
+		typeInternalTransfer: 'Internal Transfer',
+		typeOnChainWithdraw: 'On-chain Withdrawal',
+		cancelApplyBtn: 'Cancel',
+		initFailed: 'Failed to initialize',
+		submitOnChainFailed: 'Withdrawal failed',
+		transferSubmitFailed: 'Transfer failed',
+		availWithdrawBalance: 'Withdrawable balance:',
+		availTransferBalance: 'Transferable balance:',
+		coinLabel: 'Coin',
+		subCoin: 'Sub-coin',
+		mainCoinLabel: 'Main coin',
+		transferMainCoinHint: 'Internal transfer supports main coins only, not on-chain sub-tokens (e.g. TUSDT, EUSDT).',
+		withdrawNetworkLabel: 'Withdrawal network',
+		withdrawAmountUsdt: 'Withdraw amount (USDT)',
+		withdrawAmountCoin: 'Withdraw amount ({coin})',
+		transferAmountUsdt: 'Transfer amount (USDT)',
+		transferAmountCoin: 'Transfer amount ({coin})',
+		addressForCoin: 'Enter {coin} address',
+		expectedArrival: 'Est. received',
+		minWithdrawRowLabel: 'Min withdrawal',
+		internalTransferFeeLabel: 'Internal transfer fee',
+		free: 'Free',
+		minTransferRowLabel: 'Min transfer',
+		recipientUidLabel: 'Recipient (UID)',
+		recipientUidPlaceholder: "Enter recipient's UID",
+		addressForNetwork: 'Enter USDT-{network} address',
+		codePlaceholder6Digits: '6-digit code',
+		googlePlaceholder6: '6-digit authenticator code',
+		sendVerificationCode: 'Send code',
+		confirmWithdrawSubmit: 'Confirm withdrawal',
+		confirmTransferSubmit: 'Confirm transfer',
+		codeSentToEmailToast: 'Verification code sent to email',
+		onchainSubmittedPendingToast: 'Withdrawal submitted, pending review',
+		transferSubmittedToast: 'Internal transfer submitted',
+		submitFailed: 'Submit failed',
+		detailTitleOnChain: 'Withdrawal details',
+		detailTitleTransfer: 'Internal transfer details',
+		amountHeroWithdraw: 'Withdraw amount',
+		amountHeroTransfer: 'Transfer amount',
+		stepApplied: 'Submitted',
+		stepDone: 'Complete',
+		recipientLabel: 'Recipient',
+		appliedAt: 'Submitted at',
+		finishedAt: 'Completed at',
+		cancelApplyFull: 'Cancel request',
+		copyBtn: 'Copy',
+		bindGoogleFirst: 'Please bind Google Authenticator first',
+		errFillAddressBeforeCode: 'Please enter withdrawal address first',
+		errFillAmountBeforeCode: 'Please enter withdrawal amount first',
+		errFillUidBeforeCode: "Please enter recipient's UID first",
+		errFillTransferAmtBeforeCode: 'Please enter transfer amount first',
+		errEnterWithdrawAddress: 'Enter withdrawal address',
+		errEnterWithdrawAmount: 'Enter withdrawal amount',
+		errMinWithdrawWithAmt: 'Min withdrawal {min} {coin}',
+		errMinWithdrawWithAmtUsdt: 'Min withdrawal {min} USDT',
+		errExceedWithdrawBalance: 'Exceeds withdrawable balance',
+		errEnterFundPassword: 'Enter fund password',
+		errEnterEmailCode: 'Enter email code',
+		errEnterGoogleCode: 'Enter Google code',
+		errEnterRecipientUid: "Enter recipient's UID",
+		errEnterTransferAmount: 'Enter transfer amount',
+		errMinTransferWithAmt: 'Min transfer {min} {coin}',
+		errMinTransferWithAmtUsdt: 'Min transfer {min} USDT',
+		errExceedTransferBalance: 'Exceeds transferable balance',
+	},
+	deposit: {
+		title: 'Deposit',
+		address: 'Deposit Address',
+		network: 'Network',
+		saveQrCode: 'Save QR Code',
+		addressCopied: 'Address Copied',
+		minDeposit: 'Min Deposit',
+		arrivals: 'Confirmations',
+		coin: 'Coin',
+		protocol: 'Network / Protocol',
+		subCoin: 'Sub Coin',
+		contract: 'Contract',
+		depositAmount: 'Deposit Amount',
+		amountPlaceholder: 'Enter amount',
+		generateOrder: 'Generate Order',
+		generating: 'Generating…',
+		notice: 'Notice',
+		notice1: 'Please create an order before transferring; use the address and amount shown in the order.',
+		notice2: 'Do not deposit into the wrong network or contract, as this may result in permanent loss.',
+		notice3: 'Please submit the transaction hash as soon as the transfer is complete so the system can confirm receipt.',
+		intro: 'Introduction',
+		introText: 'Select a coin and network, enter the amount, then click "Generate Order" to get a dedicated receiving address and order number. After completing the on-chain transfer, submit the TxHash on this page.',
+		newDeposit: '← New Deposit',
+		orderInfo: 'Order Info',
+		orderNo: 'Order No.',
+		status: 'Status',
+		coinLabel: 'Coin',
+		networkLabel: 'Network',
+		amount: 'Amount',
+		payAddress: 'Payment Address',
+		payAddressHint: 'Transfer to this address in the exact amount shown; coin and network must match the order',
+		qrTitle: 'QR Code Payment',
+		qrHint: 'Scan with your wallet to transfer to the above address (do not modify the address or amount)',
+		contractAddress: 'Contract Address',
+		copy: '⎘ Copy',
+		copyAddress: 'Copy',
+		submitHash: 'Submit Transaction Hash',
+		submittingHash: 'Submitting…',
+		hashPlaceholder: 'Paste on-chain Tx Hash / Tron TxID',
+		orSubmitHash: 'Or: submit the transaction hash / TxID after transfer is complete',
+		hashRequired: 'Please enter the transaction hash',
+		statusNotSubmittable: 'Cannot submit hash in current status',
+		orderCreated: 'Order created, please transfer to the address below',
+		orderFailed: 'Failed to create order',
+		addressCopy: 'Address copied',
+		orderNoCopy: 'Order number copied',
+		hashSubmitted: 'Submitted, awaiting on-chain confirmation',
+		hashFailed: 'Submission failed',
+		broadcastSuccess: 'Transaction broadcast, hash submitted',
+		tronBroadcastSuccess: 'Transaction broadcast, TxID submitted',
+		noNetwork: 'No networks available',
+		noSubCoin: 'No sub-coins on this network',
+		amountRequired: 'Please enter deposit amount',
+		amountPositive: 'Please enter an amount greater than 0',
+		submittedHash: 'Submitted Hash: ',
+		manualDepositTab: 'Manual Deposit',
+		walletDepositTab: 'On-chain Deposit',
+		walletPayEvm: 'Connect wallet and pay (EVM)',
+		walletPayingEvm: 'Processing wallet…',
+		walletPayTron: 'Connect wallet and pay (Tron)',
+		walletPayingTron: 'Processing Tron wallet…',
+		histLink: 'Deposit History',
+		retryBtn: 'Retry',
+		backWithArrow: '‹ Back',
+		rechargeStatus0: 'Pending payment',
+		rechargeStatus1: 'Awaiting confirmation',
+		rechargeStatus2: 'Completed',
+		rechargeStatus3: 'Cancelled',
+		rechargeStatus4: 'Failed',
+		statusUnknown: 'Status {status}',
+		qrAlt: 'Receiving address QR code',
+		loadNetworksFailed: 'Failed to load networks',
+		wcHintEvmConfigured:
+			'You can use WalletConnect with an EVM wallet to send the order amount to the receiving address (ensure network and coin match).',
+		wcHintEvmUnconfigured:
+			'EVM WalletConnect is not configured: set VITE_WALLETCONNECT_PROJECT_ID in environment variables, or switch to Manual Deposit to submit the transaction hash.',
+		wcHintTronConfigured:
+			'You can use WalletConnect (Tron namespace) with a compatible wallet; after signing the transaction is broadcast and you submit a Tron TxID (not a 0x Ethereum hash).',
+		wcHintTronUnconfigured:
+			'Tron WalletConnect requires VITE_WALLETCONNECT_PROJECT_ID; if not configured, switch to Manual Deposit to submit the TxID.',
+		wcHintTronManualOnly:
+			'Wallet wake-up is not supported for this network. Switch to Manual Deposit to submit the TxID.',
+		walletPayFallback: 'Wallet payment failed',
+		tronWalletPayFallback: 'Tron wallet payment failed',
+		currentPrefix: 'Current:',
+		histEmpty: 'No deposit records',
+		histOrderNo: 'Order No.',
+		histTx: 'TX:',
+		histLoadMore: 'Load more',
+		histLoadedAll: 'All records loaded',
+	},
+	broker: {
+		title: 'Broker Center',
+		applyTitle: 'Apply as Broker',
+		myBrokerCode: 'My Broker Code',
+		referralCount: 'Referrals',
+		totalCommission: 'Total Commission',
+		applyStatus: 'Application Status',
+		pending: 'Under Review',
+		approved: 'Approved',
+		rejected: 'Rejected',
+		defaultName: 'Broker',
+		greeting: 'Hello, {name}',
+		uidLabel: 'UID: {uid}',
+		introBanner: 'Invite users to register and trade to earn rebates. Rebates settle in real time and are credited to your account daily.',
+		statNewToday: 'New today (users)',
+		statTradeToday: 'Traded today (users)',
+		statRebateToday: 'Rebate today (USDT)',
+		inviteList: 'Invitations',
+		emptyInviteList: 'No invitations yet',
+		thAccount: 'Account',
+		thLevel: 'Level',
+		thPerpCopy: 'Perp / Copy',
+		levelBroker: 'Broker',
+		levelNormal: 'Standard',
+		editRateTooltip: 'Edit rebate rate',
+		todayRebate: "Today's rebates",
+		emptyTodayRebate: 'No rebates today',
+		thId: 'ID',
+		rebateUsdt: 'Rebate (USDT)',
+		teamDetails: 'Team details',
+		filterAll: 'All',
+		filterWeek: 'Last 7 days',
+		filterToday: 'Today',
+		filterMonth: 'This month',
+		teamTotalAssets: 'Total team assets',
+		rebateHistory: 'Rebate history',
+		emptyRebateHistory: 'No rebate records',
+		amountUsdt: 'Amount (USDT)',
+		loadMore: 'Load more',
+		loadingMore: 'Loading…',
+		loadedAll: 'All records loaded',
+		editModalTitle: 'Edit rebate rate',
+		perpRebateRate: 'Perpetual rebate rate',
+		copyRebateRate: 'Copy-trade rebate rate',
+		editTip: 'Changes take effect immediately. Proceed with care.',
+		perpRateError: 'Perpetual rebate rate must be an integer from 0 to 100',
+		copyRateError: 'Copy-trade rebate rate must be an integer from 0 to 100',
+		setSuccess: 'Saved and applied in real time',
+	},
+	help: {
+		title: 'Help Center',
+		supportTitle: 'Help & Support',
+		search: 'Search',
+		searchPlaceholder: 'Search keywords',
+		telegramSupport: 'Telegram Support',
+		quickResponse: 'Quick Response',
+		emailSupport: 'Email Support',
+		docs: 'Help Docs',
+		viewFullGuide: 'View Full Guide',
+		detailTitle: 'Help Detail',
+		backToHelp: 'Back to Help Center',
+	},
+	invite: {
+		title: 'Invite Friends',
+		myCode: 'My Invite Code',
+		copy: 'Copy Code',
+		copied: 'Code Copied',
+		share: 'Share Invite Link',
+		shareLink: 'Copy Invite Link',
+		linkCopied: 'Link Copied',
+		desc: 'Invite friends to register and earn rebate rewards when they trade',
+		totalInvited: 'Total Invited',
+		totalReward: 'Total Rebate',
+		noRecord: 'No invite records',
+		heroLine1: 'Invite Friends',
+		heroLine2: 'Earn Rebates',
+		heroDesc:
+			'For each friend who registers successfully through your invitation, you may qualify for the platform invite rebate program. Final rules follow official announcements.',
+		myInviteInfo: 'My Invite Info',
+		inviteCodeLabel: 'Invite Code',
+		inviteLinkShort: 'Invite Link',
+		qrCodeLabel: 'QR Code',
+		copyShort: 'Copy',
+		copiedDone: 'Copied ✓',
+		qrInviteAlt: 'Invitation QR Code',
+		scanToRegister: 'Scan to register',
+		rebateRulesTitle: 'Rebate Rules',
+		step1Title: 'Share your code',
+		step1Desc: 'Send your exclusive invite code or link to friends',
+		step2Title: 'Friend registers',
+		step2Desc: 'Friends complete signup via your link (including verification as required)',
+		step3Title: 'Earn rebates',
+		step3Desc: 'Trading fees from your invitees settle as rebates according to platform rules',
+	},
+	futuresPage: futuresPageByLocale.en,
+	spot: {
+		tag: 'Spot',
+		side: { buy: 'Buy', sell: 'Sell' },
+		orderType: { limit: 'Limit', market: 'Market' },
+		orderStatus: {
+			pending: 'Open',
+			partial: 'Partially Filled',
+			filled: 'Filled',
+			cancelled: 'Cancelled',
+			pending_cancel: 'Cancelling',
+			expired: 'Expired',
+			init: 'Initializing',
+		},
+		recordType: {
+			transferIn: 'Transfer In',
+			transferOut: 'Transfer Out',
+			orderFreeze: 'Order Freeze',
+			cancelUnfreeze: 'Cancel Unfreeze',
+			trade: 'Trade',
+			fee: 'Fee',
+			unfreeze: 'Unfreeze',
+			unknown: 'Type {type}',
+		},
+		tabs: {
+			currentOrders: 'Open Orders',
+			historyOrders: 'Order History',
+			trades: 'Trade History',
+			funding: 'Funding History',
+		},
+		table: {
+			pair: 'Pair',
+			side: 'Side',
+			type: 'Type',
+			price: 'Price',
+			orderPrice: 'Order Price',
+			amount: 'Amount',
+			orderAmount: 'Order Qty',
+			filled: 'Filled',
+			status: 'Status',
+			time: 'Time',
+			action: 'Action',
+			dealPrice: 'Price',
+			dealVolume: 'Volume',
+			turnover: 'Turnover',
+			recordType: 'Type',
+			quantity: 'Amount',
+			coin: 'Coin',
+		},
+		trade: {
+			buy: 'Buy',
+			sell: 'Sell',
+			limit: 'Limit',
+			market: 'Market',
+			processing: 'Processing...',
+			buySymbol: 'Buy {symbol}',
+			sellSymbol: 'Sell {symbol}',
+			priceUsdt: 'Price (USDT)',
+			limitPlaceholder: 'Limit',
+			marketHint: 'Execute at best market price',
+			amountUsdt: 'Amount (USDT)',
+			amountBase: 'Amount ({base})',
+			available: 'Available',
+			transfer: 'Transfer',
+			loginForBalance: 'Log in to view balance',
+			spotAssets: 'Spot Assets',
+		},
+		order: { cancel: 'Cancel', cancelAll: 'Cancel All' },
+		empty: {
+			loginLink: 'Log in',
+			loginOrdersPrompt: '{link} to view orders',
+			loginViewPrompt: '{link} to view',
+			noOrders: 'No open orders',
+			noHistoryOrders: 'No order history',
+			noTrades: 'No trades',
+			noFunding: 'No records',
+		},
+		errors: {
+			symbolNotReady: 'Trading pair not ready',
+			invalidAmount: 'Enter a valid amount',
+			invalidPrice: 'Enter a valid price',
+			minLimitVolume: 'Amount must be at least {min}',
+			minMarketBuy: 'Market buy amount must be at least {min} USDT',
+			minMarketSell: 'Market sell amount must be at least {min}',
+			orderSubmitted: 'Order submitted',
+			orderFailed: 'Order failed',
+			cancelSuccess: 'Order cancelled',
+			cancelFailed: 'Cancel failed',
+			cancelAllSuccess: 'All orders cancelled',
+			cancelAllPartialFailed: 'Some orders failed to cancel',
+		},
+		loadedAll: 'All loaded',
+		ticker: {
+			change24h: '24h Change',
+			high24h: '24h High',
+			low24h: '24h Low',
+			turnover24h: '24h Volume',
+		},
+		chartSub: { chart: 'Chart', coinInfo: 'Coin Info' },
+		tf: {
+			m1: '1m',
+			m5: '5m',
+			m15: '15m',
+			m30: '30m',
+			h1: '1h',
+			h4: '4h',
+			d1: '1d',
+			w1: '1w',
+			mo1: '1mon',
+			mo3: '3mon'
+		},
+		ohlcv: {
+			spotLabel: 'Spot',
+			open: 'O',
+			high: 'H',
+			low: 'L',
+			close: 'C',
+			volume: 'Vol',
+			changePct: 'Change',
+		},
+		draw: {
+			cursor: 'Cursor',
+			trend: 'Trend line',
+			hline: 'Horizontal',
+			ray: 'Ray',
+			channel: 'Channel',
+			fib: 'Fibonacci',
+			text: 'Text',
+			clearAll: 'Clear drawings',
+			zoomOut: 'Zoom out',
+		},
+		mobileTab: { chart: 'Markets', trade: 'Trade' },
+		pair: { search: 'Search', loading: 'Loading…', noMatch: 'No results', retryLater: ', please retry' },
+		book: {
+			waiting: 'Waiting for data…',
+			orderbook: 'Order book',
+			trades: 'Trades',
+			priceUsdt: 'Price (USDT)',
+			amountBase: 'Amount ({base})',
+			total: 'Total',
+			buyRatio: 'Buy {n}%',
+			sellRatio: '{n}% Sell',
+			price: 'Price',
+			amount: 'Amount',
+			time: 'Time',
+			pricePrecision: 'Price precision',
+		},
+		coinInfo: {
+			marketCap: 'Market cap',
+			circulating: 'Circulating supply',
+			issuePrice: 'Issue price',
+			ath: 'All-time high',
+			athDate: 'ATH date',
+			whitepaper: 'Whitepaper',
+			empty: 'No coin info',
+			reload: 'Reload',
+		},
+		transferModal: {
+			title: 'Transfer',
+			selectCoin: 'Coin',
+			amount: 'Amount',
+			amountPlaceholder: 'Enter amount',
+			availableUsdt: 'Available USDT:',
+			availableCoin: 'Available {coin}:',
+			transferring: 'Transferring...',
+			invalidAmount: 'Enter a valid transfer amount',
+			insufficientBalance: 'Amount exceeds available balance',
+			transferFailed: 'Transfer failed, please try again',
+		},
+	},
+}

+ 1064 - 0
code/src/locales/es.ts

@@ -0,0 +1,1064 @@
+import { futuresPageByLocale } from './futuresPage.i18n'
+import { financePageByLocale } from './financePage.i18n'
+
+export default {
+  nav: {
+    home: 'Inicio',
+    market: 'Mercado',
+    spot: 'Spot',
+    futures: 'Futuros',
+    copyTrade: 'Copy Trading',
+    finance: 'Inversiones',
+    idoPresale: 'Preventa IDO',
+    claimAirdrop: 'Reclamar Airdrop',
+    announcements: 'Anuncios',
+    download: 'Descargar',
+  },
+  lang: {
+    title: 'Idioma',
+    zhCN: '简体中文',
+    zhTW: '繁體中文',
+    en: 'English',
+    ko: '한국어',
+    ja: '日本語',
+    hi: 'हिन्दी',
+    id: 'Bahasa Indonesia',
+    es: 'Español',
+    ru: 'Русский',
+    pt: 'Português',
+    de: 'Deutsch',
+    fr: 'Français',
+    tr: 'Türkçe',
+    vi: 'Tiếng Việt'
+  },
+  header: {
+    login: 'Iniciar Sesión',
+    register: 'Registrarse',
+    account: 'Mi Cuenta',
+    assets: 'Mis Activos',
+    security: 'Seguridad',
+    broker: 'Broker',
+    logout: 'Cerrar Sesión',
+    logoutShort: 'Salir',
+    downloadTitle: 'Descargar',
+    brokerApplyTitle: 'Solicitar ser Broker',
+    brokerApplyDesc: 'Aún no eres broker. El sistema enviará tu solicitud con los datos de tu cuenta, podrás usar las funciones tras aprobación.',
+    cancel: 'Cancelar',
+    applyNow: 'Solicitar Ahora',
+    viewApplyList: 'Ver Estado Solicitud',
+    submitting: 'Enviando…',
+    menu: 'Menú',
+  },
+  common: {
+    loading: 'Cargando...',
+    retry: 'Reintentar',
+    cancel: 'Cancelar',
+    confirm: 'Confirmar',
+    submit: 'Enviar',
+    save: 'Guardar',
+    send: 'Enviar',
+    back: 'Volver',
+    next: 'Siguiente',
+    done: 'Listo',
+    noData: 'Sin Datos',
+    noRecord: 'Sin Registros',
+    search: 'Buscar',
+    all: 'Todo',
+    max: 'Máx',
+    copied: 'Copiado',
+    networkError: 'Error de red, reintenta',
+    loadFailed: 'Fallo al cargar',
+    operationFailed: 'Operación fallida, reintenta',
+    saveSuccess: 'Guardado correctamente',
+    more: 'Más',
+    perpetual: 'Perpetuo',
+    set: 'Configurado',
+    notSet: 'Sin configurar',
+    change: 'Modificar',
+    bind: 'Vincular',
+    unbind: 'Desvincular',
+    on: 'Activado',
+    off: 'Desactivado',
+    status: 'Estado',
+    time: 'Fecha',
+    amount: 'Cantidad',
+    type: 'Tipo',
+    coin: 'Moneda',
+    from: 'Desde',
+    to: 'Hasta',
+    close: 'Cerrar',
+    contactService: 'Contactar Soporte',
+  },
+  home: {
+    heroTitle: 'Seguro · Eficiente · Plataforma Global\nde Activos Digitales',
+    heroDesc: 'iBit brinda servicios de trading estables, transparentes y profesionales para usuarios globales con arquitectura tecnológica líder y estrictos controles de riesgo.',
+    register: 'Registrarse',
+    viewMarket: 'Ver Mercados',
+    downloadApp: 'Descargar App',
+    coreAdvantages: 'Ventajas Principales',
+    assetSafetyTitle: 'Seguridad de Activos',
+    assetSafetyDesc: 'Carteras frías/calientes separadas, firma múltiple y control de permisos con monitoreo 24h para proteger tus fondos.',
+    highPerfTitle: 'Alto Rendimiento',
+    highPerfDesc: 'Motor de emparejamiento propio con procesamiento en milésimas de segundo para operaciones fluidas y estables.',
+    globalComplianceTitle: 'Cumplimiento Global',
+    globalComplianceDesc: 'Cumplimos normativas internacionales para ofrecer un entorno de trading confiable en todo el mundo.',
+    transparentFeeTitle: 'Comisiones Transparentes',
+    transparentFeeDesc: 'Estructura de tarifas clara sin costos ocultos para optimizar tus gastos en trading.',
+    aboutUs: 'Sobre Nosotros',
+    aboutDesc: 'iBit es una plataforma global de intercambio de activos digitales enfocada en seguridad, estabilidad y eficiencia mediante innovación y regulación.',
+    foundedYear: 'Fundada en 2023',
+    headquarters: 'Sede y registro en Dubái, contamos con licencias en EE.UU., Canadá, Australia y Dubái.',
+    ourVision: 'Nuestra Visión',
+    visionSubtitle: 'Construir infraestructura de trading digital confiable a nivel mundial',
+    ecoTitle: 'Ecosistema',
+    ecoDesc: 'Desarrollar un nuevo ecosistema de trading de criptomonedas',
+    missionTitle: 'Misión',
+    missionDesc: 'Impulsar la circulación global del valor digital',
+    purposeTitle: 'Propósito',
+    purposeDesc: 'Facilitar la gestión e inversión en activos criptográficos a los usuarios',
+    heroImageAlt: 'Plataforma de trading iBit',
+    aboutImageAlt: 'Sobre Nosotros',
+  },
+  market: {
+    title: 'Mercado en Vivo',
+    desc: 'Precios en tiempo real, volúmenes y variaciones para monitorear la evolución del mercado.',
+    hot: 'Populares',
+    topVolume: 'Mayor Volumen',
+    gainers: 'Subidas',
+    losers: 'Bajadas',
+    perpetual: 'Perpetuo',
+    name: 'Nombre',
+    latestPrice: 'Precio',
+    change24h: 'Var. 24h',
+    turnover: 'Volumen',
+    searchPair: 'Buscar pares',
+    searchMarket: 'Buscar monedas, pares, futuros',
+    price: 'Precio',
+    change24hShort: 'Var 24h',
+    high24h: 'Máx 24h',
+    low24h: 'Mín 24h',
+    volume24hLabel: 'Volumen 24h',
+  },
+  auth: {
+    loginTitle: 'Iniciar Sesión',
+    emailLogin: 'Acceso por Correo',
+    emailPlaceholder: 'Ingresa tu correo',
+    password: 'Contraseña',
+    passwordPlaceholder: 'Ingresa tu contraseña',
+    forgotPassword: '¿Olvidaste tu contraseña?',
+    loginBtn: 'Ingresar',
+    noAccount: '¿No tienes cuenta?',
+    registerNow: 'Regístrate',
+    verifyTitle: 'Ingresa Código de Verificación',
+    codeSentDesc: 'Código enviado a {email}, revisa tu bandeja de entrada.',
+    codeSendDesc: 'Pulsa el botón para enviar código a {email}.',
+    countdownResend: 'Reenviar en {n}s',
+    resendCode: 'Reenviar Código',
+    confirmBtn: 'Confirmar',
+    sendCode: 'Enviar Código',
+    forgotVerify: '¿Olvidaste método de verificación?',
+    loginSuccess: 'Sesión iniciada correctamente',
+    codeSentAgain: 'Código reenviado',
+    registerTitle: 'Registro',
+    emailRegister: 'Registro por Correo',
+    inviteCodeLabel: 'Código Invitación (opcional)',
+    inviteCodePlaceholder: 'Ingresa código de invitación',
+    hasAccount: '¿Ya tienes cuenta?',
+    loginNow: 'Inicia Sesión',
+    verifyPageTitle: 'Verificación de Seguridad',
+    emailVerifyLabel: 'Verificación por Correo',
+    codePlaceholder: 'Ingresa código',
+    sendBtn: 'Enviar',
+    passwordTitle: 'Crear Contraseña',
+    backBtn: '‹ Volver',
+    inputPasswordLabel: 'Contraseña',
+    confirmPasswordLabel: 'Confirmar Contraseña',
+    confirmPasswordPlaceholder: 'Repite tu contraseña',
+    doneBtn: 'Listo',
+    resetSuccess: 'Contraseña restablecida, accede con tu nueva clave.',
+    registerSuccess: 'Registro Exitoso',
+    welcomeJoin: 'Bienvenido a iBit',
+    loginNowBtn: 'Iniciar Sesión',
+    forgotPasswordTitle: 'Restablecer Contraseña',
+    emailLabel: 'Correo',
+    emailRegisteredPlaceholder: 'Ingresa tu correo registrado',
+    codeSentToast: 'Código enviado',
+  },
+  error: {
+    emailRequired: 'Ingresa tu correo',
+    emailInvalid: 'Formato de correo inválido',
+    passwordRequired: 'Ingresa contraseña',
+    code6Required: 'Ingresa código de 6 dígitos',
+    codeRequired: 'Ingresa código de verificación',
+    loginFailed: 'Correo o contraseña incorrectos',
+    networkError: 'Fallo de red, inténtalo luego',
+    emailAlreadyRegistered: 'Este correo ya está registrado, inicia sesión',
+    confirmPasswordRequired: 'Repite tu contraseña',
+    passwordMismatch: 'Las contraseñas no coinciden',
+    loadFailed: 'No se pudo cargar datos de seguridad',
+    refreshFailed: 'Error al actualizar',
+    statusUpdated: 'Estado actualizado',
+    currentPasswordRequired: 'Ingresa contraseña actual',
+    sixDigitCode: 'Ingresa código de 6 dígitos del correo',
+    sixDigitGoogleCode: 'Ingresa código de 6 dígitos de Google',
+    sendFailed: 'Fallo al enviar',
+    operationFailed: 'Operación fallida',
+  },
+  security: {
+    title: 'Configuración de Seguridad',
+    back: '‹ Volver',
+    warningBanner: 'Completa verificación de correo, Google Authenticator y contraseña de fondos para proteger tu cuenta.',
+    accountSecurity: 'Seguridad de Cuenta',
+    loginPassword: 'Contraseña de Acceso',
+    loginPasswordDesc: 'Cambia tu clave periódicamente para mayor seguridad',
+    emailVerify: 'Verificación de Correo',
+    emailVerifyDesc: 'Vincula correo para recuperación y validaciones',
+    googleAuth: 'Autenticación Google',
+    googleAuthDesc: 'Vincula Google Authenticator para reforzar la seguridad',
+    fundPassword: 'Contraseña de Fondos',
+    fundPasswordDesc: 'Establece clave exclusiva para operaciones de retiro y transferencia',
+    set: 'Config',
+    notSet: 'Sin config',
+    change: 'Modificar',
+    bind: 'Vincular',
+    set2: 'Establecer',
+    statusUpdated: 'Estado actualizado',
+    loadFailed: 'Fallo carga datos seguridad',
+    refreshFailed: 'Error refrescar',
+    bound: 'Vinculado',
+    notBound: 'Sin vincular',
+    refresh: 'Refrescar',
+    googleHelpTitle: 'Ayuda Google Authenticator',
+    googleHelpDesc: 'Si no recibes código o quieres desvincular, contacta soporte.',
+    changeLoginPassword: 'Cambiar Contraseña de Acceso',
+    changePasswordHint: 'Tras modificar usa la nueva contraseña, código enviado al correo vinculado.',
+    currentPassword: 'Contraseña Actual',
+    newPassword: 'Nueva Contraseña',
+    confirmNewPassword: 'Confirmar Nueva Clave',
+    emailCode: 'Código Correo',
+    sendCode: 'Enviar Código',
+    codeSent: 'Código enviado al correo',
+    changeSuccess: 'Contraseña modificada correctamente',
+    confirmChange: 'Confirmar Cambio',
+    submitting: 'Enviando…',
+    setFundPassword: 'Establecer Clave de Fondos',
+    resetFundPassword: 'Restablecer Clave de Fondos',
+    fundPasswordHint: 'Clave requerida para retiros y movimientos, guárdala bien.',
+    fundPasswordResetHint: 'Restablece tu clave, código enviado al correo registrado.',
+    newFundPassword: 'Nueva Clave Fondos',
+    confirmFundPassword: 'Confirmar Clave',
+    fundPasswordUpdated: 'Clave fondos actualizada',
+    fundPasswordSet: 'Clave fondos configurada',
+    bindGoogle: 'Vincular Google Authenticator',
+    boundEmail: 'Correo vinculado:',
+    googleQrStep: '1. Escanea QR o ingresa clave manual',
+    googleCodeStep: '2. Código dinámico Google (6 dígitos)',
+    emailCodeStep: '3. Código de correo',
+    copyKey: 'Copiar Clave',
+    keyCopied: 'Clave copiada',
+    copyFailed: 'No se pudo copiar, selecciona el texto manualmente',
+    clipboardDeniedMac: 'Sin permiso portapapeles: configura permisos desde el candado de la URL',
+    clipboardDenied: 'Permiso portapapeles denegado, habilítalo en ajustes del navegador',
+    invalidSecret: 'Clave inválida, refresca página',
+    googleCodeRequired: 'Ingresa código Google de 6 dígitos',
+    emailCodeSent: 'Código correo enviado',
+    bindSuccess: 'Vinculación completada',
+    confirmBind: 'Confirmar Vinculación',
+    googleAuthLead: 'Descarga Google Authenticator o Microsoft Authenticator desde tienda de apps.',
+    googleAuthTip1: 'Tras vincular necesitarás el código de 6 dígitos en accesos y operaciones sensibles.',
+    googleAuthTip2: 'Conserva tu dispositivo seguro; si pierdes acceso contacta soporte.',
+    googleAuthStart: 'Lo tengo instalado, vincular ahora',
+  },
+  assets: {
+    title: 'Mis Activos',
+    totalAssets: 'Valor Total Activos',
+    todayPnl: 'Gan/Pér Hoy',
+    deposit: 'Depositar',
+    withdraw: 'Retirar',
+    transfer: 'Transferir',
+    history: 'Historial',
+    spot: 'Spot',
+    futures: 'Futuros',
+    copyTrade: 'Copy',
+    fund: 'Retirable',
+    walletBalance: 'Saldo Billetera',
+    unrealizedPnl: 'Gan/Pér No Realizada',
+    positions: 'Posiciones',
+    noPositions: 'Sin posiciones',
+    assetBalance: 'Saldo Activo',
+    unavailable: 'No Disponible',
+    depositCoin: 'Depósito',
+    withdrawCoin: 'Retiro',
+    depositRecord: 'Historial Depósitos',
+    withdrawRecord: 'Historial Retiros',
+    transferRecord: 'Historial Transferencias',
+    assetRecord: 'Movimientos',
+    overview: 'Resumen',
+    spotAccount: 'Cuenta Spot',
+    swapAccount: 'Cuenta Futuros',
+    followAccount: 'Cuenta Copy',
+    fundAccount: 'Cuenta Retirable',
+    spotTradingAccount: 'Cuenta Trading Spot',
+    ibitAccount: 'Cuenta iBit',
+    lockedStakingAccount: 'Cuenta Bloqueada',
+    stakingTab: 'Bloqueos',
+    ibitUnit: 'iBit',
+    releaseTotal: 'Total Liberado',
+    totalLockedBalance: 'Saldo Total Bloqueado(iBit)',
+    myStakingOrders: 'Mis Órdenes Bloqueo',
+    stakingOrderNo: 'Nº Orden',
+    purchaseQty: 'Cantidad Comprada',
+    stakingTotal: 'Total Bloqueado',
+    released: 'Liberado',
+    pendingRelease: 'Pendiente Liberación',
+    startTime: 'Fecha Inicio',
+    subscribing: 'En Suscripción',
+    releasing: 'En Liberación',
+    completed: 'Finalizado',
+    pullToRefresh: 'Desliza abajo para actualizar',
+    releaseToRefresh: 'Suelta para refrescar',
+    refreshing: 'Actualizando...',
+    totalAccount: 'Valor Total Cuenta',
+    showBalance: 'Mostrar Saldo',
+    hideBalance: 'Ocultar Saldo',
+    followBalance: 'Saldo Copy',
+    accountTransfer: 'Transferencia entre Cuentas',
+    transferFrom: 'Origen',
+    transferTo: 'Destino',
+    available: 'Disponible',
+    freeTransfer: 'Transferencia gratuita, abono instantáneo',
+    followPositions: 'Posiciones Copy Activas',
+    noFollowPositions: 'Sin posiciones copy',
+    followLoading: 'Cargando…',
+    long: 'Largo',
+    short: 'Corto',
+    trader: 'Trader',
+    openPrice: 'Precio Apertura',
+    currentPrice: 'Precio Actual',
+    amountLever: 'Cantidad · Apalancamiento',
+    closing: 'Cerrando…',
+    closePosition: 'Cerrar',
+    noLossPosition: 'Las órdenes copy sin pérdida no se pueden cerrar manualmente',
+    invalidPosition: 'Datos posición erróneos, no cerrar',
+    confirmClose: '¿Cerrar esta posición? Perderás acceso a beneficios finales de la orden.',
+    closeSuccess: 'Posición cerrada correctamente',
+    closeFailed: 'Fallo al cerrar posición',
+    sameAccountError: 'Origen y destino no pueden ser la misma cuenta',
+    amountError: 'Ingresa cantidad válida',
+    insufficientBalance: 'Saldo disponible insuficiente',
+    transferSuccess: 'Transferencia exitosa',
+    transferFailed: 'Fallo transferencia',
+    goCopyTrade: 'Copy Trading',
+    goSpotTrade: 'Ir a Trading',
+    hideZeroBalance: 'Ocultar activos sin saldo',
+    depositRecord2: 'Historial Depósitos',
+    amountUsdt: 'Cantidad (USDT)',
+    amountCoin: 'Cantidad ({coin})',
+    availableCoin: 'Disponible: {available} {coin}',
+    transferring: 'Transfiriendo…',
+    confirmTransferBtn: 'Confirmar Transferencia',
+    statementPageTitle: 'Extracto de Movimientos',
+    statementStartDate: 'Fecha Inicio',
+    statementEndDate: 'Fecha Fin',
+    statementReset: 'Restablecer',
+    statementSearch: 'Buscar',
+    statementSearching: 'Buscando…',
+    statementEmpty: 'Sin registros',
+    statementDirectionOpen: 'Apertura',
+    statementDirectionClose: 'Cierre',
+    statementTypes: {
+      '43': 'Ganancia Spot',
+      '44': 'Pérdida Spot',
+      '45': 'Comisión Spot',
+      '46': 'Reembolso Spot',
+      '48': 'Operación Spot',
+      '49': 'Staking',
+      '50': 'Desbloqueo Staking',
+      '51': 'Recompensa Airdrop',
+      '52': 'Ingreso cartera staking',
+      '53': 'Salida cartera staking',
+    },
+  },
+  finance: {
+    ...financePageByLocale.es,
+  },
+  copyTrade: {
+    comprehensive: 'General',
+    winRate14d: 'Tasa Gan. 14d',
+    profit14d: 'Rentab.14d',
+    normal: 'Copy Normal',
+    lossless: 'Copy Sin Pérdida',
+    favorite: 'Favoritos',
+    topTraders: 'Mejores Traders',
+    twoWeekReturn: 'Rentab. 2 Sem',
+    followers: 'Seguidores',
+    days: 'Días',
+    applyTrader: 'Ser Trader Líder',
+    myFollowing: 'Mis Copias',
+    myTrading: 'Mis Operaciones',
+    traderIdentity: 'Trader Líder',
+    myFollowingAccount: 'Mi Cuenta Copy',
+    leadManage: 'Panel Líder',
+    applyLead: 'Solicitar Ser Líder',
+    pageTitle: 'Copy Trading',
+    heroDesc: 'Copia operaciones de traders expertos con un clic para rentabilizar tu inversión.',
+    traderOverview: 'Resumen Trader',
+    copyFollowersCount: 'Seguidores Copy',
+    cumulativeTradingDays: 'Días totales operando',
+    cumulativeLeadProfit: 'Ganancia total copy',
+    goLeadManage: 'Ir al panel líder →',
+    copyWalletTitle: 'Saldo Cuenta Copy',
+    cumulativePnlUsdt: 'Ganancia total Copy (USDT)',
+    availableUsdt: 'Disponible (USDT)',
+    unrealizedPnlUsdtShort: 'Gan/Pér No Real.(USDT)',
+    followingTradersSummary: 'Siguiendo a {n} traders',
+    newBadge: 'NUEVO',
+    losslessShieldTitle: 'Protección Sin Pérdida',
+    losslessShieldDesc: ': Si tu copy genera pérdidas la plataforma compensa dentro de los límites definidos.',
+    learnHowItWorks: 'Saber más →',
+    myStarredTraders: 'Traders Guardados',
+    traderTotalCount: '{count} traders disponibles',
+    filterLoadingShort: 'Cargando…',
+    loadTraderListFailed: 'Fallo al cargar lista traders',
+    loadFavoritesFailed: 'No se pudo cargar favoritos',
+    favoritedToast: 'Añadido a favoritos',
+    defaultTraderName: 'Trader',
+    levelJunior: 'Junior',
+    badgeLossless: 'Sin Pérdida',
+    metaDaysTrades: '{days}d · {trades} ops',
+    followAction: 'Copiar',
+    profitUsdtBracket: 'Ganancia (USDT)',
+    profitShareRate: '% Reparto Ganancias',
+    trend14Days: 'Gráfico 14 días',
+    emptyFavoriteHint: 'Sin favoritos aún, descubre traders',
+    emptyTraderListDefault: 'Sin traders disponibles',
+    emptyTraderListLossless: 'Sin traders copy sin pérdida',
+    browseTraders: 'Ver Traders',
+    losslessInfoHeading: 'Funcionamiento Copy Sin Pérdida',
+    llInfoCard1Title: 'Protección Condicional',
+    llInfoCard1Body: 'La compensación se activa solo al cumplir reglas definidas por control de riesgos.',
+    llInfoCard2Title: 'Responsabilidad Limitada',
+    llInfoCard2Body: 'La plataforma solo compensa hasta el límite fijado por cada operación copy.',
+    llInfoCard3Title: 'Prioridad Gestión Riesgo',
+    llInfoCard3Body: 'Ante pérdidas extremas se activa sistema de protección para equidad del copy.',
+    llInfoCard4Title: 'Aviso Riesgo',
+    llInfoCard4Body: 'El trading cripto es de alto riesgo; copy sin pérdida no es garantía de ganancia.',
+    followingPlaza: 'Plaza Copy',
+    followingWalletFail: 'Error carga datos cuenta copy',
+    followingTabPositions: 'Posiciones Abiertas',
+    followingTabTraders: 'Mis Traders',
+    followingTabHistory: 'Historial Copy',
+    followingHistEmpty: 'Sin historial copy',
+    followingNoTradersYet: 'No sigues ningún trader',
+    followingGoPlaza: 'Ir a plaza copy',
+    confirmStopFollow: '¿Dejar de seguir a "{name}"?',
+    noLossManualCloseTooltip: 'Copy sin pérdida no admite cierre manual',
+    followingThContract: 'Contrato',
+    followingThDirection: 'Sentido',
+    followingThOpenPrice: 'Precio Apertura',
+    followingThCurPrice: 'Precio Actual',
+    followingThQty: 'Cantidad',
+    followingThLever: 'Apalanc.',
+    followingThUnrealized: 'Gan/Pér No Real',
+    followingThOpenTime: 'Fecha Apertura',
+    followingThAction: 'Acción',
+    followingOpenLong: 'Apertura Larga',
+    followingOpenShort: 'Apertura Corta',
+    closeQtyWithBase: 'Cantidad Cierre({base})',
+    followingRealizedPnlUsdt: 'Gan/Pér Real(USDT)',
+    followingYieldRate: 'Rentabilidad',
+    followingAvgOpenUsdt: 'Precio Medio Apertura(USDT)',
+    followingAvgCloseUsdt: 'Precio Medio Cierre(USDT)',
+    marginCrossMode: 'Todo en común',
+    marginIsolatedMode: 'Apalanc. Aislado',
+    stopFollowing: 'Dejar de Seguir',
+    lead: {
+      pageTitle: 'Mis Operaciones Líder',
+      navMyFollowing: 'Mis Copias →',
+      becomeTitle: 'Conviértete en Trader Líder',
+      becomeDesc: 'Cumple los requisitos para enviar tu solicitud.',
+      condMinBalance: 'Saldo cuenta futuros ≥ {min} USDT',
+      goTransfer: 'Transferir',
+      condNotFollowing: 'No puedes seguir a otro trader',
+      agreePrefix: 'He leído y acepto el',
+      agreeLink: 'Acuerdo de Trader',
+      submitting: 'Enviando…',
+      submitApply: 'Enviar Solicitud',
+      applyFailed: 'Solicitud fallida, reintenta luego',
+      reviewingTitle: 'Solicitud en Revisión',
+      reviewingDesc: 'Tu solicitud está en proceso, podrás liderar tras aprobación.',
+      agreementTitle: 'Acuerdo de Trader',
+      agreementEmpty: 'No se pudo cargar el acuerdo, inténtalo después.',
+      leadingBadge: 'Liderando',
+      noBio: 'Sin descripción',
+      cancelLeadProcessing: 'Procesando…',
+      cancelLeadApply: 'Solicitar dejar de liderar',
+      confirmCancelLead: '¿Dejar de ser líder? Se cancelarán todas las copias activas.',
+      operationFailed: 'Operación fallida',
+      statFollowers: 'Seguidores actuales',
+      statRegisterDays: 'Días en plataforma',
+      statCapital: 'Solvencia',
+      statCumulativeProfit: 'Ganancia total copy(USDT)',
+      statTotalFollowers: 'Total seguidores históricos',
+      statTradingDays: 'Días totales operando',
+      tabFollowers: 'Seguidores ({n})',
+      tabCurrent: 'Operaciones Activas',
+      tabHistory: 'Historial Liderazgo',
+      tabSettings: 'Ajustes Trader',
+      emptyFollowers: 'Sin seguidores',
+      removeFollower: 'Eliminar',
+      followerEquity: 'Saldo Cuenta(USDT)',
+      followerTotalShare: 'Reparto total ganancias(USDT)',
+      followerLastShare: 'Último reparto',
+      followerSince: 'Sigue desde: {time}',
+      emptyCurrent: 'Sin operaciones activas',
+      emptyHistory: 'Sin historial liderazgo',
+      settingsBasic: 'Datos Básicos',
+      avatar: 'Foto Perfil',
+      nickname: 'Alias',
+      nicknamePlaceholder: 'Máx 10 caracteres',
+      bio: 'Descripción',
+      bioPlaceholder: 'Máx 25 caracteres',
+      saveSuccess: 'Guardado correctamente',
+      saveBasicProcessing: 'Guardando…',
+      saveBasic: 'Guardar Datos',
+      leadSymbols: 'Contratos para Liderar',
+      saveProcessing: 'Guardando…',
+      save: 'Guardar',
+      tagsTitle: 'Etiquetas (máx 4)',
+      confirmRemoveFollower: '¿Eliminar seguidor "{name}"?',
+      saveFailed: 'Fallo al guardar',
+      uploadFailed: 'Error subir archivo',
+      defaultFollower: 'Seguidor',
+      defaultUser: 'Usuario',
+    },
+  },
+  footer: {
+    aboutSection: 'Sobre Nosotros',
+    companyIntro: 'Presentación Empresa',
+    brand: 'Marca',
+    community: 'Únete a nuestra Comunidad',
+    riskWarning: 'Aviso de Riesgo',
+    terms: 'Términos de Servicio',
+    privacy: 'Política Privacidad',
+    futuresTrade: 'Trading Futuros',
+    spotTrade: 'Trading Spot',
+    losslessCopy: 'Copy Sin Pérdida',
+    beginnerGuide: 'Guía Principiantes',
+    helpCenter: 'Centro Ayuda',
+    glossary: 'Glosario',
+    compliance: 'Normativa Legal',
+    products: 'Productos',
+    resources: 'Recursos',
+  },
+  announcements: {
+    title: 'Anuncios del Sistema',
+    noAnnouncements: 'Sin anuncios',
+    back: 'Volver',
+    backToList: 'Volver Lista',
+    loadMore: 'Cargar Más',
+  },
+  download: {
+    title: 'Descargar iBit',
+    heroTitle: 'Mercado en Tiempo Real\nOpera en Cualquier Momento',
+    desc: 'Controla cotizaciones y opera desde cualquier lugar',
+    appDesc: 'Todas las funciones disponibles en app, trading desde móvil',
+    latestVersion: 'Última Versión',
+    updateNotes: 'Notas Actualización',
+    ios: 'Descargar iOS',
+    iosNotReleased: 'iOS no disponible',
+    android: 'Descargar Android',
+    androidNotReleased: 'Android no disponible',
+    scanToDownload: 'Escanea para descargar',
+  },
+  account: {
+    title: 'Centro de Cuenta',
+    uid: 'UID',
+    email: 'Correo',
+    profile: 'Perfil',
+    security: 'Seguridad',
+    securityDesc: 'Contraseñas, verificaciones y clave fondos',
+    assets: 'Mis Activos',
+    assetsDesc: 'Depósito, retiro y transferencias',
+    inviteCode: 'Código Invitación',
+    inviteFriends: 'Invitar Amigos',
+    inviteDesc: 'Invita usuarios y obtén comisiones por sus operaciones',
+    helpSupport: 'Ayuda y Soporte',
+    helpDesc: 'Preguntas frecuentes y tickets',
+    broker: 'Broker',
+    brokerDesc: 'Gestión comisiones y equipo',
+    logout: 'Cerrar Sesión',
+    securityScore: 'Puntuación Seguridad',
+    twofa: 'Autenticación Google',
+    supportTitle: 'Contactar Soporte',
+    supportHours: 'Atención 7×24h',
+    onlineSupport: 'Chat Online',
+    instantChat: 'Chat Directo',
+    telegramSupport: 'Soporte Telegram',
+    emailSupport: 'Soporte Correo',
+    applySubmitted: 'Solicitud enviada, pendiente aprobación',
+    scoreHigh: 'Excelente',
+    scoreMedium: 'Regular',
+    scoreLow: 'Mejorable',
+  },
+  transfer: {
+    title: 'Transferencia',
+    amount: 'Cantidad a Transferir',
+    amountPlaceholder: 'Ingresa cantidad',
+    maxTransferable: 'Máximo Transferible',
+    success: 'Transferencia Exitosa',
+    selectCoin: 'Seleccionar Moneda',
+    enterAmount: 'Ingresa importe',
+    histEmpty: 'Sin registros transferencia',
+    balanceLabel: 'Saldo',
+  },
+  withdraw: {
+    title: 'Retirar Fondos',
+    network: 'Red',
+    networkTip: 'Confirma coincidencia de red con plataforma destino o puedes perder tus activos.',
+    address: 'Dirección Retiro',
+    addressPlaceholder: 'Ingresa dirección destino',
+    amount: 'Cantidad Retiro',
+    received: 'Importe Recibido',
+    fee: 'Comisión',
+    submitted: 'Solicitud de retiro enviada',
+    fundPassword: 'Clave Fondos',
+    emailCode: 'Código Correo',
+    googleCode: 'Código Google',
+    securityVerification: 'Verificación Seguridad',
+    recordTitle: 'Historial Retiros',
+    recordEmpty: 'Sin retiros registrados',
+    confirmCancelApply: '¿Cancelar esta solicitud de retiro?',
+    withdrawCancelledToast: 'Cancelado',
+    withdrawCancelFailedToast: 'Fallo al cancelar',
+    statusPending: 'En revisión',
+    statusReleasing: 'En proceso de pago',
+    statusWithdrawFailed: 'Fallido',
+    statusWithdrawSuccess: 'Completado',
+    statusWithdrawCancelled: 'Cancelado',
+    typeInternalTransfer: 'Transferencia Interna',
+    typeOnChainWithdraw: 'Retiro en Cadena',
+    cancelApplyBtn: 'Cancelar',
+    initFailed: 'Error inicialización',
+    submitOnChainFailed: 'Fallo envío retiro cadena',
+    transferSubmitFailed: 'Fallo transferencia interna',
+    availWithdrawBalance: 'Saldo retirable:',
+    availTransferBalance: 'Saldo transferible:',
+    coinLabel: 'Moneda',
+    subCoin: 'Submoneda',
+    mainCoinLabel: 'Moneda Principal',
+    transferMainCoinHint: 'Transferencia interna solo monedas principales, no tokens derivados (TUSDT/EUSDT).',
+    withdrawNetworkLabel: 'Red Retiro',
+    withdrawAmountUsdt: 'Cantidad Retiro (USDT)',
+    withdrawAmountCoin: 'Cantidad Retiro ({coin})',
+    transferAmountUsdt: 'Cantidad Transferencia (USDT)',
+    transferAmountCoin: 'Cantidad Transferencia ({coin})',
+    addressForCoin: 'Ingresa dirección {coin}',
+    expectedArrival: 'Estimado recibo',
+    minWithdrawRowLabel: 'Retiro Mínimo',
+    internalTransferFeeLabel: 'Comisión Transfer. Interna',
+    free: 'Gratis',
+    minTransferRowLabel: 'Transferencia Mínima',
+    recipientUidLabel: 'UID Destino',
+    recipientUidPlaceholder: 'Ingresa UID del destinatario',
+    addressForNetwork: 'Dirección USDT-{network}',
+    codePlaceholder6Digits: 'Código 6 dígitos',
+    googlePlaceholder6: 'Código autenticador 6 dígitos',
+    sendVerificationCode: 'Enviar Código',
+    confirmWithdrawSubmit: 'Confirmar Retiro',
+    confirmTransferSubmit: 'Confirmar Transferencia',
+    codeSentToEmailToast: 'Código enviado al correo',
+    onchainSubmittedPendingToast: 'Retiro enviado, pendiente revisión',
+    transferSubmittedToast: 'Transferencia interna enviada',
+    submitFailed: 'Fallo envío',
+    detailTitleOnChain: 'Detalle Retiro Cadena',
+    detailTitleTransfer: 'Detalle Transferencia Interna',
+    amountHeroWithdraw: 'Cantidad Retirada',
+    amountHeroTransfer: 'Cantidad Transferida',
+    stepApplied: 'Enviada',
+    stepDone: 'Finalizada',
+    recipientLabel: 'Destinatario',
+    appliedAt: 'Fecha Envío',
+    finishedAt: 'Fecha Finalización',
+    cancelApplyFull: 'Anular Solicitud',
+    copyBtn: 'Copiar',
+    bindGoogleFirst: 'Primero vincula autenticación Google',
+    errFillAddressBeforeCode: 'Completa dirección antes de pedir código',
+    errFillAmountBeforeCode: 'Ingresa importe antes de solicitar código',
+    errFillUidBeforeCode: 'Completa UID destino antes de código',
+    errFillTransferAmtBeforeCode: 'Ingresa importe transferencia primero',
+    errEnterWithdrawAddress: 'Escribe dirección retiro',
+    errEnterWithdrawAmount: 'Ingresa cantidad a retirar',
+    errMinWithdrawWithAmt: 'Retiro mínimo {min} {coin}',
+    errMinWithdrawWithAmtUsdt: 'Retiro mínimo {min} USDT',
+    errExceedWithdrawBalance: 'Supera saldo retirable',
+    errEnterFundPassword: 'Ingresa clave fondos',
+    errEnterEmailCode: 'Ingresa código correo',
+    errEnterGoogleCode: 'Ingresa código Google',
+    errEnterRecipientUid: 'Escribe UID destinatario',
+    errEnterTransferAmount: 'Ingresa importe transferencia',
+    errMinTransferWithAmt: 'Transferencia mínima {min} {coin}',
+    errMinTransferWithAmtUsdt: 'Transferencia mínima {min} USDT',
+    errExceedTransferBalance: 'Supera saldo transferible',
+  },
+  deposit: {
+    title: 'Depositar',
+    address: 'Dirección Depósito',
+    network: 'Red',
+    saveQrCode: 'Guardar Código QR',
+    addressCopied: 'Dirección Copiada',
+    minDeposit: 'Depósito Mínimo',
+    arrivals: 'Confirmaciones',
+    coin: 'Moneda',
+    protocol: 'Red / Protocolo',
+    subCoin: 'Submoneda',
+    contract: 'Contrato',
+    depositAmount: 'Importe Depósito',
+    amountPlaceholder: 'Ingresa cantidad',
+    generateOrder: 'Crear Orden',
+    generating: 'Generando…',
+    notice: 'Aviso',
+    notice1: 'Crea orden antes de transferir, usa dirección e importe de la orden.',
+    notice2: 'No envíes fondos a red o contrato erróneo, pérdida irreversible.',
+    notice3: 'Tras transferir envía hash de transacción para confirmar abono.',
+    intro: 'Explicación',
+    introText: 'Elige moneda y red, define importe, genera orden con dirección exclusiva; tras transferir en cadena adjunta TxHash.',
+    newDeposit: '← Nuevo Depósito',
+    orderInfo: 'Datos Orden',
+    orderNo: 'Nº Orden',
+    status: 'Estado',
+    coinLabel: 'Moneda',
+    networkLabel: 'Red',
+    amount: 'Importe',
+    payAddress: 'Dirección Recepción',
+    payAddressHint: 'Transfiere el importe exacto con red y moneda igual a la orden',
+    qrTitle: 'Pago QR',
+    qrHint: 'Escanea con tu billetera, no modifiques dirección ni valor',
+    contractAddress: 'Dirección Contrato',
+    copy: '⎘ Copiar',
+    copyAddress: 'Copiar Dirección',
+    submitHash: 'Enviar Hash Transacción',
+    submittingHash: 'Enviando…',
+    hashPlaceholder: 'Pega Hash cadena / TxID Tron',
+    orSubmitHash: 'O envía hash tras completar transferencia',
+    hashRequired: 'Ingresa hash de transacción',
+    statusNotSubmittable: 'No admite envío hash en este estado',
+    orderCreated: 'Orden creada, transfiere a la dirección indicada',
+    orderFailed: 'Fallo creación orden',
+    addressCopy: 'Dirección copiada',
+    orderNoCopy: 'Número orden copiado',
+    hashSubmitted: 'Enviado, esperando confirmación cadena',
+    hashFailed: 'Fallo envío hash',
+    broadcastSuccess: 'Transacción emitida, hash registrado',
+    tronBroadcastSuccess: 'Tx Tron emitida, TxID registrado',
+    noNetwork: 'Sin redes disponibles',
+    noSubCoin: 'Sin submonedas en esta red',
+    amountRequired: 'Ingresa importe depósito',
+    amountPositive: 'El valor debe ser superior a 0',
+    submittedHash: 'Hash enviado: ',
+    manualDepositTab: 'Depósito Manual',
+    walletDepositTab: 'Depósito con Billetera',
+    walletPayEvm: 'Conectar billetera EVM y pagar',
+    walletPayingEvm: 'Procesando billetera EVM…',
+    walletPayTron: 'Conectar billetera Tron y pagar',
+    walletPayingTron: 'Procesando billetera Tron…',
+    histLink: 'Historial Depósitos',
+    retryBtn: 'Reintentar',
+    backWithArrow: '‹ Volver',
+    rechargeStatus0: 'Pendiente Pago',
+    rechargeStatus1: 'Pendiente Confirmación Cadena',
+    rechargeStatus2: 'Completado',
+    rechargeStatus3: 'Cancelado',
+    rechargeStatus4: 'Fallido',
+    statusUnknown: 'Estado {status}',
+    qrAlt: 'QR dirección depósito',
+    loadNetworksFailed: 'Fallo carga redes',
+    wcHintEvmConfigured:
+      'Conecta WalletConnect EVM para pagar automáticamente, verifica red y moneda coincidan.',
+    wcHintEvmUnconfigured:
+      'Falta VITE_WALLETCONNECT_PROJECT_ID, usa depósito manual y envía hash.',
+    wcHintTronConfigured:
+      'WalletConnect Tron firma y envía operación, adjunta TxID Tron sin prefijo 0x.',
+    wcHintTronUnconfigured:
+      'Sin configuración WalletConnect Tron, usa depósito manual con TxID.',
+    wcHintTronManualOnly:
+      'No soporta conexión automática para esta red, usa depósito manual.',
+    walletPayFallback: 'Fallo pago billetera EVM',
+    tronWalletPayFallback: 'Fallo pago billetera Tron',
+    currentPrefix: 'Actual:',
+    histEmpty: 'Sin registros depósito',
+    histOrderNo: 'Nº Orden',
+    histTx: 'TX:',
+    histLoadMore: 'Cargar más',
+    histLoadedAll: 'Todos los registros cargados',
+  },
+  broker: {
+    title: 'Centro Broker',
+    applyTitle: 'Solicitar Ser Broker',
+    myBrokerCode: 'Mi Código Broker',
+    referralCount: 'Usuarios Referidos',
+    totalCommission: 'Comisión Total',
+    applyStatus: 'Estado Solicitud',
+    pending: 'En Revisión',
+    approved: 'Aprobado',
+    rejected: 'Rechazado',
+    defaultName: 'Broker',
+    greeting: 'Hola, {name}',
+    uidLabel: 'UID: {uid}',
+    introBanner: 'Gana comisiones por cada operación de tus invitados, abono diario instantáneo.',
+    statNewToday: 'Nuevos hoy (usuarios)',
+    statTradeToday: 'Operantes hoy (usuarios)',
+    statRebateToday: 'Comisión hoy (USDT)',
+    inviteList: 'Lista Invitados',
+    emptyInviteList: 'Sin invitados',
+    thAccount: 'Cuenta',
+    thLevel: 'Nivel',
+    thPerpCopy: 'Perpetuo / Copy',
+    levelBroker: 'Broker',
+    levelNormal: 'Estándar',
+    editRateTooltip: 'Modificar % comisión',
+    todayRebate: 'Comisiones Hoy',
+    emptyTodayRebate: 'Sin comisiones hoy',
+    thId: 'ID',
+    rebateUsdt: 'Comisión (USDT)',
+    teamDetails: 'Detalles Equipo',
+    filterAll: 'Todo',
+    filterWeek: 'Últimos 7 días',
+    filterToday: 'Hoy',
+    filterMonth: 'Este Mes',
+    teamTotalAssets: 'Activos Totales Equipo',
+    rebateHistory: 'Historial Comisiones',
+    emptyRebateHistory: 'Sin registros comisión',
+    amountUsdt: 'Importe (USDT)',
+    loadMore: 'Cargar más',
+    loadingMore: 'Cargando…',
+    loadedAll: 'Todos cargados',
+    editModalTitle: 'Editar % Comisión',
+    perpRebateRate: '% Comisión Futuros Perpetuos',
+    copyRebateRate: '% Comisión Copy Trading',
+    editTip: 'Los cambios aplican inmediatamente, modifica con precaución.',
+    perpRateError: '% perpetuo debe ser entero entre 0 y 100',
+    copyRateError: '% copy debe ser entero entre 0 y 100',
+    setSuccess: 'Guardado, cambios activos',
+  },
+  help: {
+    title: 'Centro de Ayuda',
+    supportTitle: 'Ayuda y Soporte',
+    search: 'Buscar',
+    searchPlaceholder: 'Palabras clave',
+    telegramSupport: 'Soporte Telegram',
+    quickResponse: 'Respuesta Rápida',
+    emailSupport: 'Soporte Correo',
+    docs: 'Documentación',
+    viewFullGuide: 'Ver Guía Completa',
+    detailTitle: 'Detalle Ayuda',
+    backToHelp: 'Volver Centro Ayuda',
+  },
+  invite: {
+    title: 'Invitar Amigos',
+    myCode: 'Mi Código Invitación',
+    copy: 'Copiar Código',
+    copied: 'Código Copiado',
+    share: 'Compartir Enlace',
+    shareLink: 'Copiar Enlace',
+    linkCopied: 'Enlace Copiado',
+    desc: 'Invita amigos y obtén comisiones por sus operaciones',
+    totalInvited: 'Total Invitados',
+    totalReward: 'Comisión Total',
+    noRecord: 'Sin registros invitación',
+    heroLine1: 'Invita Amigos',
+    heroLine2: 'Gana Comisiones',
+    heroDesc:
+      'Cada usuario registrado por tu enlace te habilita para el plan de comisiones según reglas oficiales.',
+    myInviteInfo: 'Mis Datos Invitación',
+    inviteCodeLabel: 'Código Invitación',
+    inviteLinkShort: 'Enlace Invitación',
+    qrCodeLabel: 'Código QR',
+    copyShort: 'Copiar',
+    copiedDone: 'Copiado ✓',
+    qrInviteAlt: 'QR Invitación',
+    scanToRegister: 'Escanea para registrarse',
+    rebateRulesTitle: 'Normativa Comisiones',
+    step1Title: 'Comparte tu código',
+    step1Desc: 'Envía código o enlace exclusivo a tus contactos',
+    step2Title: 'Registro Amigo',
+    step2Desc: 'El usuario completa registro desde tu enlace',
+    step3Title: 'Obtén Comisión',
+    step3Desc: 'Recibes porcentaje de las comisiones generadas por sus operaciones',
+  },
+  futuresPage: futuresPageByLocale.es,
+  spot: {
+    tag: 'Spot',
+    side: { buy: 'Comprar', sell: 'Vender' },
+    orderType: { limit: 'Limitada', market: 'Mercado' },
+    orderStatus: {
+      pending: 'Abierta',
+      partial: 'Parcialmente Ejecutada',
+      filled: 'Ejecutada',
+      cancelled: 'Cancelada',
+      pending_cancel: 'Cancelando',
+      expired: 'Expirada',
+      init: 'Inicializando',
+    },
+    recordType: {
+      transferIn: 'Ingreso Fondos',
+      transferOut: 'Salida Fondos',
+      orderFreeze: 'Bloqueo por Orden',
+      cancelUnfreeze: 'Desbloqueo Cancelación',
+      trade: 'Operación',
+      fee: 'Comisión',
+      unfreeze: 'Desbloqueo',
+      unknown: 'Tipo {type}',
+    },
+    tabs: {
+      currentOrders: 'Órdenes Abiertas',
+      historyOrders: 'Historial Órdenes',
+      trades: 'Historial Operaciones',
+      funding: 'Movimientos Fondos',
+    },
+    table: {
+      pair: 'Par',
+      side: 'Sentido',
+      type: 'Tipo',
+      price: 'Precio',
+      orderPrice: 'Precio Orden',
+      amount: 'Cantidad',
+      orderAmount: 'Cantidad Orden',
+      filled: 'Ejecutado',
+      status: 'Estado',
+      time: 'Fecha',
+      action: 'Acción',
+      dealPrice: 'Precio Ejecución',
+      dealVolume: 'Volumen Ejecutado',
+      turnover: 'Volumen Total',
+      recordType: 'Tipo Mov.',
+      quantity: 'Cantidad',
+      coin: 'Moneda',
+    },
+    trade: {
+      buy: 'Comprar',
+      sell: 'Vender',
+      limit: 'Limitada',
+      market: 'Mercado',
+      processing: 'Procesando...',
+      buySymbol: 'Comprar {symbol}',
+      sellSymbol: 'Vender {symbol}',
+      priceUsdt: 'Precio (USDT)',
+      limitPlaceholder: 'Precio límite',
+      marketHint: 'Compra/venta al mejor precio disponible',
+      amountUsdt: 'Importe (USDT)',
+      amountBase: 'Cantidad ({base})',
+      available: 'Disponible',
+      transfer: 'Transferir',
+      loginForBalance: 'Inicia sesión para ver saldo',
+      spotAssets: 'Saldo Spot',
+    },
+    order: { cancel: 'Cancelar', cancelAll: 'Cancelar Todas' },
+    empty: {
+      loginLink: 'Iniciar Sesión',
+      loginOrdersPrompt: '{link} para ver órdenes',
+      loginViewPrompt: '{link} para consultar',
+      noOrders: 'Sin órdenes abiertas',
+      noHistoryOrders: 'Sin historial órdenes',
+      noTrades: 'Sin operaciones',
+      noFunding: 'Sin registros',
+    },
+    errors: {
+      symbolNotReady: 'Par de cotización no disponible',
+      invalidAmount: 'Ingresa cantidad válida',
+      invalidPrice: 'Precio no válido',
+      minLimitVolume: 'Cantidad mínima {min}',
+      minMarketBuy: 'Compra mercado mínimo {min} USDT',
+      minMarketSell: 'Venta mercado mínima {min}',
+      orderSubmitted: 'Orden enviada',
+      orderFailed: 'Fallo envío orden',
+      cancelSuccess: 'Orden cancelada',
+      cancelFailed: 'Fallo cancelación',
+      cancelAllSuccess: 'Todas canceladas',
+      cancelAllPartialFailed: 'Algunas no pudieron cancelarse',
+    },
+    loadedAll: 'Todos cargados',
+    ticker: {
+      change24h: 'Var.24h',
+      high24h: 'Máx 24h',
+      low24h: 'Mín 24h',
+      turnover24h: 'Volumen 24h',
+    },
+    chartSub: { chart: 'Gráfico', coinInfo: 'Datos Moneda' },
+    tf: {
+    	m1: '1m', 
+    	m5: '5m', 
+    	m15: '15m', 
+    	m30: '30m', 
+    	h1: '1h', 
+    	h4: '4h', 
+    	d1: '1d',
+    	w1: '1w',
+    	mo1: '1mon',
+    	mo3: '3mon'
+    },
+    ohlcv: {
+      spotLabel: 'Spot',
+      open: 'Apert',
+      high: 'Máx',
+      low: 'Mín',
+      close: 'Cierr',
+      volume: 'Vol',
+      changePct: 'Var%',
+    },
+    draw: {
+      cursor: 'Cursor',
+      trend: 'Línea Tendencia',
+      hline: 'Línea Horizontal',
+      ray: 'Rayo',
+      channel: 'Canal',
+      fib: 'Fibonacci',
+      text: 'Texto',
+      clearAll: 'Borrar Todo',
+      zoomOut: 'Alejar',
+    },
+    mobileTab: { chart: 'Mercado', trade: 'Operar' },
+        pair: {
+          search: 'Buscar',
+          loading: 'Cargando…',
+          noMatch: 'Sin resultados',
+          retryLater: ', reintenta más tarde'
+        },
+        book: {
+          waiting: 'Esperando datos…',
+          orderbook: 'Libro de órdenes',
+          trades: 'Operaciones',
+          priceUsdt: 'Precio (USDT)',
+          amountBase: 'Cantidad ({base})',
+          total: 'Total',
+          buyRatio: 'Compra {n}%',
+          sellRatio: '{n}% Venta',
+          price: 'Precio',
+          amount: 'Cantidad',
+          time: 'Fecha',
+          pricePrecision: 'Precisión de precio'
+        },
+        coinInfo: {
+          marketCap: 'Capitalización',
+          circulating: 'Suministro circulante',
+          issuePrice: 'Precio de emisión',
+          ath: 'Máximo histórico',
+          athDate: 'Fecha máximo histórico',
+          whitepaper: 'Libro blanco',
+          empty: 'Sin datos de la moneda',
+          reload: 'Recargar'
+        },
+        transferModal: {
+          title: 'Transferencia',
+          selectCoin: 'Moneda',
+          amount: 'Cantidad',
+          amountPlaceholder: 'Ingresa importe',
+          availableUsdt: 'Disponible USDT:',
+          availableCoin: 'Disponible {coin}:',
+          transferring: 'Transfiriendo...',
+          invalidAmount: 'Ingresa un importe válido',
+          insufficientBalance: 'El importe supera el saldo disponible',
+          transferFailed: 'Fallo de transferencia, reintenta'
+        },
+      },
+    }

+ 584 - 4
code/src/locales/financePage.i18n.ts

@@ -27,7 +27,7 @@ export const financePageByLocale: Record<SupportedLocale, Record<string, string>
     joinPresale: '参与预售',
     subscribeQty: '认购数量',
     availableIbit: '可提现可用 iBit',
-    availableUsdt: '可提现可用 USDT',
+    availableUsdt: '可提现可用',
     availableIbitLine: '可用 iBit:{amount} {unit}',
     priceUnavailable: '暂无行情价格,请稍后再试',
     ibitUnitPrice: '当前价格',
@@ -109,7 +109,8 @@ export const financePageByLocale: Record<SupportedLocale, Record<string, string>
     teamLoadMore: '載入更多',
     joinPresale: '參與預售',
     subscribeQty: '認購數量',
-    availableIbit: '可提现可用 iBit',
+    availableIbit: '可提現可用 iBit',
+	availableUsdt: '可提現可用',
     availableIbitLine: '可用 iBit:{amount} {unit}',
     ibitUnitPrice: '當前價格',
     ibitUnitPriceLine: '當前價格:{price} USDT',
@@ -190,7 +191,7 @@ export const financePageByLocale: Record<SupportedLocale, Record<string, string>
     joinPresale: 'Join Presale',
     subscribeQty: 'Subscription Amount',
     availableIbit: 'Withdrawable iBit',
-    availableUsdt: 'Withdrawable USDT',
+    availableUsdt: 'Withdrawable',
     availableIbitLine: 'Available iBit: {amount} {unit}',
     priceUnavailable: 'Price unavailable. Please try again later',
     ibitUnitPrice: 'Current Price',
@@ -273,6 +274,7 @@ export const financePageByLocale: Record<SupportedLocale, Record<string, string>
     joinPresale: '프리세일 참여',
     subscribeQty: '청약 수량',
     availableIbit: '출금 가능 iBit',
+	availableUsdt: '출금 가능 잔액',
     availableIbitLine: '사용 가능 iBit: {amount} {unit}',
     ibitUnitPrice: '현재 가격',
     ibitUnitPriceLine: '현재 가격: {price} USDT',
@@ -353,6 +355,7 @@ export const financePageByLocale: Record<SupportedLocale, Record<string, string>
     joinPresale: 'プレセール参加',
     subscribeQty: '申込数量',
     availableIbit: '出金可能 iBit',
+	availableUsdt: '出金可能残高',
     availableIbitLine: '利用可能 iBit:{amount} {unit}',
     ibitUnitPrice: '現在価格',
     ibitUnitPriceLine: '現在価格:{price} USDT',
@@ -433,6 +436,7 @@ export const financePageByLocale: Record<SupportedLocale, Record<string, string>
     joinPresale: 'प्रीसेल में शामिल हों',
     subscribeQty: 'सदस्यता राशि',
     availableIbit: 'निकासी योग्य iBit',
+	availableUsdt: 'निकासी योग्य उपलब्ध राशि',
     availableIbitLine: 'उपलब्ध iBit: {amount} {unit}',
     ibitUnitPrice: 'वर्तमान मूल्य',
     ibitUnitPriceLine: 'वर्तमान मूल्य: {price} USDT',
@@ -513,6 +517,7 @@ export const financePageByLocale: Record<SupportedLocale, Record<string, string>
     joinPresale: 'Ikut Presale',
     subscribeQty: 'Jumlah Langganan',
     availableIbit: 'iBit dapat ditarik',
+	availableUsdt: 'Saldo Tersedia untuk Penarikan',
     availableIbitLine: 'iBit tersedia: {amount} {unit}',
     ibitUnitPrice: 'Harga Saat Ini',
     ibitUnitPriceLine: 'Harga saat ini: {price} USDT',
@@ -569,4 +574,579 @@ export const financePageByLocale: Record<SupportedLocale, Record<string, string>
     airdropRecordRejectReason: 'Alasan penolakan',
     airdropRecordsLoadMore: 'Muat lebih banyak',
   },
-}
+  es: {
+    idoTitle: 'Preventa IDO',
+    idoRuleLabel: 'Reglas: ',
+    idoRuleOnce: 'Los miembros compran una cantidad fija del token principal de la plataforma; los fondos se bloquean automáticamente. Bloqueado durante {lock} mes(es), luego liberado en su totalidad.',
+    idoRuleBatch: 'Los miembros compran una cantidad fija del token principal de la plataforma; los fondos se bloquean automáticamente. Bloqueado durante {lock} mes(es), liberado durante {release} mes(es).',
+    myTeam: 'Mi Equipo',
+    currentNodeLevel: 'Nivel de Nodo Actual',
+    directNumLabel: 'Referidos Directos',
+    teamNumLabel: 'Tamaño del Equipo',
+    teamPerformanceLabel: 'Volumen del Equipo (iBit)',
+    totalRevenueLabel: 'Ingresos Totales (USDT)',
+    directListTitle: 'Referidos Directos',
+    directAddress: 'Dirección',
+    levelCol: 'Nivel',
+    buyAmountCol: 'Compra (iBit)',
+    myRewardCol: 'Mi Recompensa (U)',
+    nodeLevelNormal: 'Sin Nodo',
+    nodeLevelCommunity: 'Nodo Comunitario',
+    nodeLevelCity: 'Nodo Ciudad',
+    nodeLevelApac: 'Nodo APAC',
+    nodeLevelGlobal: 'Nodo Global',
+    teamLoadMore: 'Cargar más',
+    joinPresale: 'Unirse a la Preventa',
+    subscribeQty: 'Cantidad de Suscripción',
+    availableIbit: 'iBit Retirable',
+    availableUsdt: 'Saldo Retirable',
+    availableIbitLine: 'iBit disponible: {amount} {unit}',
+    priceUnavailable: 'Precio no disponible. Inténtalo de nuevo más tarde',
+    ibitUnitPrice: 'Precio Actual',
+    ibitUnitPriceLine: 'Precio actual: {price} USDT',
+    correspondingPrice: 'Precio en USDT',
+    ibitTransfer: 'Transferir',
+    confirmPresale: 'Confirmar Preventa',
+    estimatedUnlock: 'Fecha Estimada de Liberación',
+    estimatedUnlockLine: 'Fecha estimada de liberación: {date}',
+    coin: 'Moneda de Staking',
+    lockDays: 'Días de Bloqueo',
+    days: 'días',
+    releaseRule: 'Regla de Liberación',
+    releaseOnce: 'Liberación completa después de {days} días bloqueados',
+    releaseBatch: 'Cada {period} días se libera {pct}% después de {days} días bloqueados',
+    minAmount: 'Stake Mínimo',
+    maxAmount: 'Stake Máximo',
+    walletAvailable: 'Saldo Disponible en Monedero de Staking',
+    stakeAmount: 'Cantidad a Stakear',
+    stakeHint: 'Se descuenta del saldo disponible del monedero de staking. Transfiere desde la cuenta retir-able en la página de Activos si es insuficiente.',
+    confirmStake: 'Confirmar Staking',
+    stakeSuccess: 'Staking exitoso',
+    stakeFailed: 'Staking fallido',
+    amountRequired: 'Por favor, ingresa la cantidad de suscripción',
+    belowMin: 'Debe ser al menos {min}',
+    aboveMax: 'No debe exceder {max}',
+    configNotFound: 'Producto no encontrado o desactivado',
+    loginToStake: 'Inicia sesión para unirte a la preventa IDO',
+    airdropTitle: 'Reclamar Airdrop',
+    airdropRule:
+      'Reglas: Después de completar las tareas y solicitarlo, la plataforma revisará y distribuirá en días hábiles.',
+    airdropApplyTitle: 'Solicitar Airdrop',
+    task1Label: 'Tarea 1',
+    task1Title: 'Invita a 3 amigos a registrarse en iBit',
+    inviteProgress: 'Invitados ({current}/{required})',
+    inviteDone: 'Completado',
+    goInvite: 'Invitar',
+    claimAirdropBtn: 'Reclamar Airdrop',
+    claimSuccess: 'Enviado correctamente. Espera la revisión de la plataforma.',
+    claimSuccessTitle: 'Solicitud enviada',
+    claimFailed: 'Reclamación fallida',
+    loginToClaim: 'Inicia sesión para reclamar el airdrop',
+    noPendingAirdrop: 'No hay airdrops pendientes para reclamar',
+    needActiveStaking: 'Se requiere una orden de staking activa',
+    claimableAmountLabel: 'Cantidad a reclamar',
+    airdropRecordsTitle: 'Historial de reclamaciones de airdrop',
+    airdropRecordsEmpty: 'Aún no hay registros',
+    airdropRecordStatus0: 'Pendiente',
+    airdropRecordStatus1: 'Distribuido',
+    airdropRecordStatus2: 'En revisión',
+    airdropRecordStatus3: 'Rechazado',
+    airdropRecordTimeCreate: 'Asignado',
+    airdropRecordTimeSubmit: 'Enviado',
+    airdropRecordTimeAudit: 'Revisado',
+    airdropRecordRejectReason: 'Motivo',
+    airdropRecordsLoadMore: 'Cargar más',
+  },
+  ru: {
+    idoTitle: 'IDO Пресейл',
+    idoRuleLabel: 'Правила: ',
+    idoRuleOnce: 'Пользователи покупают определенное количество основной токена платформы; средства автоматически блокируются. Заблокировано на {lock} мес., затем разблокируется полностью.',
+    idoRuleBatch: 'Пользователи покупают определенное количество основной токена платформы; средства автоматически блокируются. Заблокировано на {lock} мес., выпускается в течение {release} мес.',
+    myTeam: 'Моя команда',
+    currentNodeLevel: 'Текущий уровень ноды',
+    directNumLabel: 'Прямые приглашения',
+    teamNumLabel: 'Размер команды',
+    teamPerformanceLabel: 'Объем команды (iBit)',
+    totalRevenueLabel: 'Общий доход (USDT)',
+    directListTitle: 'Прямые приглашения',
+    directAddress: 'Адрес',
+    levelCol: 'Уровень',
+    buyAmountCol: 'Покупка (iBit)',
+    myRewardCol: 'Моя награда (U)',
+    nodeLevelNormal: 'Без ноды',
+    nodeLevelCommunity: 'Комьюнити-нода',
+    nodeLevelCity: 'Городская нода',
+    nodeLevelApac: 'APAC-нода',
+    nodeLevelGlobal: 'Глобальная нода',
+    teamLoadMore: 'Загрузить еще',
+    joinPresale: 'Участвовать в пресейле',
+    subscribeQty: 'Сумма подписки',
+    availableIbit: 'Выводимый iBit',
+    availableUsdt: 'Доступно для вывода',
+    availableIbitLine: 'Доступно iBit: {amount} {unit}',
+    priceUnavailable: 'Цена недоступна. Повторите попытку позже',
+    ibitUnitPrice: 'Текущая цена',
+    ibitUnitPriceLine: 'Текущая цена: {price} USDT',
+    correspondingPrice: 'Цена в USDT',
+    ibitTransfer: 'Перевод',
+    confirmPresale: 'Подтвердить пресейл',
+    estimatedUnlock: 'Предполагаемая дата разблокировки',
+    estimatedUnlockLine: 'Предполагаемая дата разблокировки: {date}',
+    coin: 'Монета стейкинга',
+    lockDays: 'Период блокировки (дни)',
+    days: 'дни',
+    releaseRule: 'Правило выпуска',
+    releaseOnce: 'Полный выпуск после {days} дней блокировки',
+    releaseBatch: 'Каждые {period} дней выпуск {pct}% после {days} дней блокировки',
+    minAmount: 'Мин. стейк',
+    maxAmount: 'Макс. стейк',
+    walletAvailable: 'Доступно на кошельке стейкинга',
+    stakeAmount: 'Сумма стейкинга',
+    stakeHint: 'Списывается с доступного баланса кошелька стейкинга. Переведите с выводимого счета на странице Активы при недостатке.',
+    confirmStake: 'Подтвердить стейкинг',
+    stakeSuccess: 'Стейкинг успешен',
+    stakeFailed: 'Стейкинг не удался',
+    amountRequired: 'Введите сумму подписки',
+    belowMin: 'Не менее {min}',
+    aboveMax: 'Не более {max}',
+    configNotFound: 'Продукт не найден или отключен',
+    loginToStake: 'Войдите для участия в IDO пресейле',
+    airdropTitle: 'Получить аирдроп',
+    airdropRule: 'Правила: После выполнения заданий и подачи заявки платформа проверит и распределит в рабочие дни.',
+    airdropApplyTitle: 'Подать заявку на аирдроп',
+    task1Label: 'Задание 1',
+    task1Title: 'Пригласите 3 друзей зарегистрироваться в iBit',
+    inviteProgress: 'Приглашено ({current}/{required})',
+    inviteDone: 'Выполнено',
+    goInvite: 'Пригласить',
+    claimAirdropBtn: 'Получить аирдроп',
+    claimSuccess: 'Заявка отправлена. Ожидайте проверки платформой.',
+    claimSuccessTitle: 'Заявка отправлена',
+    claimFailed: 'Не удалось получить',
+    loginToClaim: 'Войдите для получения аирдропа',
+    noPendingAirdrop: 'Нет ожидающих аирдропов',
+    needActiveStaking: 'Требуется активный заказ стейкинга',
+    claimableAmountLabel: 'Сумма для получения',
+    airdropRecordsTitle: 'История получения аирдропов',
+    airdropRecordsEmpty: 'Нет записей',
+    airdropRecordStatus0: 'Ожидает',
+    airdropRecordStatus1: 'Выдан',
+    airdropRecordStatus2: 'На проверке',
+    airdropRecordStatus3: 'Отклонено',
+    airdropRecordTimeCreate: 'Выделено',
+    airdropRecordTimeSubmit: 'Отправлено',
+    airdropRecordTimeAudit: 'Проверено',
+    airdropRecordRejectReason: 'Причина',
+    airdropRecordsLoadMore: 'Загрузить еще',
+  },
+  pt: {
+    idoTitle: 'Pré-venda IDO',
+    idoRuleLabel: 'Regras: ',
+    idoRuleOnce: 'Membros compram uma quantidade fixa do token principal da plataforma; fundos são bloqueados automaticamente. Bloqueado por {lock} mês(es), então liberado integralmente.',
+    idoRuleBatch: 'Membros compram uma quantidade fixa do token principal da plataforma; fundos são bloqueados automaticamente. Bloqueado por {lock} mês(es), liberado ao longo de {release} mês(es).',
+    myTeam: 'Minha Equipe',
+    currentNodeLevel: 'Nível de Nó Atual',
+    directNumLabel: 'Indicações Diretas',
+    teamNumLabel: 'Tamanho da Equipe',
+    teamPerformanceLabel: 'Volume da Equipe (iBit)',
+    totalRevenueLabel: 'Receita Total (USDT)',
+    directListTitle: 'Indicações Diretas',
+    directAddress: 'Endereço',
+    levelCol: 'Nível',
+    buyAmountCol: 'Compra (iBit)',
+    myRewardCol: 'Minha Recompensa (U)',
+    nodeLevelNormal: 'Sem Nó',
+    nodeLevelCommunity: 'Nó Comunitário',
+    nodeLevelCity: 'Nó Cidade',
+    nodeLevelApac: 'Nó APAC',
+    nodeLevelGlobal: 'Nó Global',
+    teamLoadMore: 'Carregar mais',
+    joinPresale: 'Participar da Pré-venda',
+    subscribeQty: 'Valor de Assinatura',
+    availableIbit: 'iBit Sacável',
+    availableUsdt: 'Saldos Sacáveis',
+    availableIbitLine: 'iBit disponível: {amount} {unit}',
+    priceUnavailable: 'Preço indisponível. Tente novamente mais tarde',
+    ibitUnitPrice: 'Preço Atual',
+    ibitUnitPriceLine: 'Preço atual: {price} USDT',
+    correspondingPrice: 'Preço em USDT',
+    ibitTransfer: 'Transferir',
+    confirmPresale: 'Confirmar Pré-venda',
+    estimatedUnlock: 'Data Estimada de Liberação',
+    estimatedUnlockLine: 'Data estimada de liberação: {date}',
+    coin: 'Moeda de Staking',
+    lockDays: 'Período de Bloqueio (dias)',
+    days: 'dias',
+    releaseRule: 'Regra de Liberação',
+    releaseOnce: 'Liberação completa após {days} dias bloqueados',
+    releaseBatch: 'A cada {period} dias libera {pct}% após {days} dias bloqueados',
+    minAmount: 'Stake Mínimo',
+    maxAmount: 'Stake Máximo',
+    walletAvailable: 'Saldo Disponível na Carteira de Staking',
+    stakeAmount: 'Valor do Stake',
+    stakeHint: 'Descontado do saldo disponível da carteira de staking. Transfira da conta sacável na página de Ativos se insuficiente.',
+    confirmStake: 'Confirmar Staking',
+    stakeSuccess: 'Staking bem-sucedido',
+    stakeFailed: 'Staking falhou',
+    amountRequired: 'Insira o valor da assinatura',
+    belowMin: 'Deve ser pelo menos {min}',
+    aboveMax: 'Não deve exceder {max}',
+    configNotFound: 'Produto não encontrado ou desativado',
+    loginToStake: 'Faça login para participar da pré-venda IDO',
+    airdropTitle: 'Resgatar Airdrop',
+    airdropRule: 'Regras: Após concluir as tarefas e se candidatar, a plataforma revisará e distribuirá em dias úteis.',
+    airdropApplyTitle: 'Solicitar Airdrop',
+    task1Label: 'Tarefa 1',
+    task1Title: 'Convide 3 amigos para se registrar no iBit',
+    inviteProgress: 'Convidados ({current}/{required})',
+    inviteDone: 'Concluído',
+    goInvite: 'Convidar',
+    claimAirdropBtn: 'Resgatar Airdrop',
+    claimSuccess: 'Enviado com sucesso. Aguarde a revisão da plataforma.',
+    claimSuccessTitle: 'Solicitação enviada',
+    claimFailed: 'Falha no resgate',
+    loginToClaim: 'Faça login para resgatar o airdrop',
+    noPendingAirdrop: 'Nenhum airdrop pendente para resgatar',
+    needActiveStaking: 'Ordem de staking ativa necessária',
+    claimableAmountLabel: 'Valor resgatável',
+    airdropRecordsTitle: 'Histórico de resgate de airdrop',
+    airdropRecordsEmpty: 'Nenhum registro ainda',
+    airdropRecordStatus0: 'Pendente',
+    airdropRecordStatus1: 'Distribuído',
+    airdropRecordStatus2: 'Em revisão',
+    airdropRecordStatus3: 'Rejeitado',
+    airdropRecordTimeCreate: 'Alocado',
+    airdropRecordTimeSubmit: 'Enviado',
+    airdropRecordTimeAudit: 'Revisado',
+    airdropRecordRejectReason: 'Motivo',
+    airdropRecordsLoadMore: 'Carregar mais',
+  },
+  de: {
+    idoTitle: 'IDO-Vorverkauf',
+    idoRuleLabel: 'Regeln: ',
+    idoRuleOnce: 'Mitglieder kaufen einen festen Betrag des Plattform-Haupttokens; Gelder werden automatisch gesperrt. Gesperrt für {lock} Monat(e), dann vollständig freigegeben.',
+    idoRuleBatch: 'Mitglieder kaufen einen festen Betrag des Plattform-Haupttokens; Gelder werden automatisch gesperrt. Gesperrt für {lock} Monat(e), freigegeben über {release} Monat(e).',
+    myTeam: 'Mein Team',
+    currentNodeLevel: 'Aktueller Knotenlevel',
+    directNumLabel: 'Direkte Empfehlungen',
+    teamNumLabel: 'Teamgröße',
+    teamPerformanceLabel: 'Teamvolumen (iBit)',
+    totalRevenueLabel: 'Gesamteinnahmen (USDT)',
+    directListTitle: 'Direkte Empfehlungen',
+    directAddress: 'Adresse',
+    levelCol: 'Level',
+    buyAmountCol: 'Kauf (iBit)',
+    myRewardCol: 'Meine Belohnung (U)',
+    nodeLevelNormal: 'Kein Knoten',
+    nodeLevelCommunity: 'Community-Knoten',
+    nodeLevelCity: 'Stadtknoten',
+    nodeLevelApac: 'APAC-Knoten',
+    nodeLevelGlobal: 'Globaler Knoten',
+    teamLoadMore: 'Mehr laden',
+    joinPresale: 'Am Vorverkauf teilnehmen',
+    subscribeQty: 'Abonnementbetrag',
+    availableIbit: 'Auszahlbares iBit',
+    availableUsdt: 'Auszahlbarer Saldo',
+    availableIbitLine: 'Verfügbares iBit: {amount} {unit}',
+    priceUnavailable: 'Preis nicht verfügbar. Bitte versuchen Sie es später erneut',
+    ibitUnitPrice: 'Aktueller Preis',
+    ibitUnitPriceLine: 'Aktueller Preis: {price} USDT',
+    correspondingPrice: 'Preis in USDT',
+    ibitTransfer: 'Überweisen',
+    confirmPresale: 'Vorverkauf bestätigen',
+    estimatedUnlock: 'Voraussichtliches Entsperrdatum',
+    estimatedUnlockLine: 'Voraussichtliches Entsperrdatum: {date}',
+    coin: 'Staking-Münze',
+    lockDays: 'Sperrzeit (Tage)',
+    days: 'Tage',
+    releaseRule: 'Freigaberegel',
+    releaseOnce: 'Vollständige Freigabe nach {days} Tagen Sperrung',
+    releaseBatch: 'Alle {period} Tage Freigabe von {pct}% nach {days} Tagen Sperrung',
+    minAmount: 'Min. Stake',
+    maxAmount: 'Max. Stake',
+    walletAvailable: 'Verfügbares Guthaben Staking-Wallet',
+    stakeAmount: 'Stake-Betrag',
+    stakeHint: 'Abzug vom verfügbaren Guthaben des Staking-Wallets. Bei unzureichendem Guthaben von Auszahlungskonto auf Aktiven-Seite überweisen.',
+    confirmStake: 'Staking bestätigen',
+    stakeSuccess: 'Staking erfolgreich',
+    stakeFailed: 'Staking fehlgeschlagen',
+    amountRequired: 'Abonnementbetrag eingeben',
+    belowMin: 'Muss mindestens {min} sein',
+    aboveMax: 'Darf {max} nicht überschreiten',
+    configNotFound: 'Produkt nicht gefunden oder deaktiviert',
+    loginToStake: 'Anmelden, um am IDO-Vorverkauf teilzunehmen',
+    airdropTitle: 'Airdrop beanspruchen',
+    airdropRule: 'Regeln: Nach Abschluss der Aufgaben und Bewerbung prüft die Plattform und verteilt innerhalb von Werktagen.',
+    airdropApplyTitle: 'Airdrop beantragen',
+    task1Label: 'Aufgabe 1',
+    task1Title: 'Lade 3 Freunde ein, sich bei iBit zu registrieren',
+    inviteProgress: 'Eingeladen ({current}/{required})',
+    inviteDone: 'Abgeschlossen',
+    goInvite: 'Einladen',
+    claimAirdropBtn: 'Airdrop beanspruchen',
+    claimSuccess: 'Erfolgreich übermittelt. Bitte warten Sie auf die Prüfung durch die Plattform.',
+    claimSuccessTitle: 'Antrag übermittelt',
+    claimFailed: 'Beanspruchung fehlgeschlagen',
+    loginToClaim: 'Anmelden, um Airdrop zu beanspruchen',
+    noPendingAirdrop: 'Kein ausstehender Airdrop zum Beanspruchen',
+    needActiveStaking: 'Aktive Staking-Order erforderlich',
+    claimableAmountLabel: 'Beanspruchbarer Betrag',
+    airdropRecordsTitle: 'Verlauf der Airdrop-Beanspruchungen',
+    airdropRecordsEmpty: 'Noch keine Einträge',
+    airdropRecordStatus0: 'Ausstehend',
+    airdropRecordStatus1: 'Verteilt',
+    airdropRecordStatus2: 'In Prüfung',
+    airdropRecordStatus3: 'Abgelehnt',
+    airdropRecordTimeCreate: 'Zugewiesen',
+    airdropRecordTimeSubmit: 'Übermittelt',
+    airdropRecordTimeAudit: 'Geprüft',
+    airdropRecordRejectReason: 'Grund',
+    airdropRecordsLoadMore: 'Mehr laden',
+  },
+  fr: {
+    idoTitle: 'Pré-vente IDO',
+    idoRuleLabel: 'Règles: ',
+    idoRuleOnce: 'Les membres achètent un montant fixe du token principal de la plateforme ; les fonds sont bloqués automatiquement. Bloqué pendant {lock} mois, puis libéré intégralement.',
+    idoRuleBatch: 'Les membres achètent un montant fixe du token principal de la plateforme ; les fonds sont bloqués automatiquement. Bloqué pendant {lock} mois, libéré sur {release} mois.',
+    myTeam: 'Mon Équipe',
+    currentNodeLevel: 'Niveau de nœud actuel',
+    directNumLabel: 'Parrainages directs',
+    teamNumLabel: 'Taille de l’équipe',
+    teamPerformanceLabel: 'Volume de l’équipe (iBit)',
+    totalRevenueLabel: 'Revenu total (USDT)',
+    directListTitle: 'Parrainages directs',
+    directAddress: 'Adresse',
+    levelCol: 'Niveau',
+    buyAmountCol: 'Achat (iBit)',
+    myRewardCol: 'Ma récompense (U)',
+    nodeLevelNormal: 'Sans nœud',
+    nodeLevelCommunity: 'Nœud communautaire',
+    nodeLevelCity: 'Nœud ville',
+    nodeLevelApac: 'Nœud APAC',
+    nodeLevelGlobal: 'Nœud global',
+    teamLoadMore: 'Charger plus',
+    joinPresale: 'Participer à la pré-vente',
+    subscribeQty: 'Montant de souscription',
+    availableIbit: 'iBit retirable',
+    availableUsdt: 'Solde retirable',
+    availableIbitLine: 'iBit disponible: {amount} {unit}',
+    priceUnavailable: 'Prix indisponible. Réessayez plus tard',
+    ibitUnitPrice: 'Prix actuel',
+    ibitUnitPriceLine: 'Prix actuel: {price} USDT',
+    correspondingPrice: 'Prix en USDT',
+    ibitTransfer: 'Transférer',
+    confirmPresale: 'Confirmer la pré-vente',
+    estimatedUnlock: 'Date de déblocage estimée',
+    estimatedUnlockLine: 'Date de déblocage estimée: {date}',
+    coin: 'Pièce de staking',
+    lockDays: 'Période de blocage (jours)',
+    days: 'jours',
+    releaseRule: 'Règle de libération',
+    releaseOnce: 'Libération complète après {days} jours de blocage',
+    releaseBatch: 'Toutes les {period} jours, libération de {pct}% après {days} jours de blocage',
+    minAmount: 'Stake min',
+    maxAmount: 'Stake max',
+    walletAvailable: 'Solde disponible portefeuille staking',
+    stakeAmount: 'Montant du stake',
+    stakeHint: 'Déduit du solde disponible du portefeuille de staking. Transférez depuis le compte retirable sur la page Actifs si insuffisant.',
+    confirmStake: 'Confirmer le staking',
+    stakeSuccess: 'Staking réussi',
+    stakeFailed: 'Staking échoué',
+    amountRequired: 'Veuillez saisir le montant de souscription',
+    belowMin: 'Doit être au moins {min}',
+    aboveMax: 'Ne doit pas dépasser {max}',
+    configNotFound: 'Produit introuvable ou désactivé',
+    loginToStake: 'Connectez-vous pour participer à la pré-vente IDO',
+    airdropTitle: 'Récupérer l’airdrop',
+    airdropRule: 'Règles: Après avoir terminé les tâches et postulé, la plateforme examinera et distribuera dans les jours ouvrables.',
+    airdropApplyTitle: 'Demander l’airdrop',
+    task1Label: 'Tâche 1',
+    task1Title: 'Invitez 3 amis à s’inscrire sur iBit',
+    inviteProgress: 'Invités ({current}/{required})',
+    inviteDone: 'Terminé',
+    goInvite: 'Inviter',
+    claimAirdropBtn: 'Récupérer l’airdrop',
+    claimSuccess: 'Envoyé avec succès. Veuillez attendre la vérification de la plateforme.',
+    claimSuccessTitle: 'Demande envoyée',
+    claimFailed: 'Échec de la récupération',
+    loginToClaim: 'Connectez-vous pour récupérer l’airdrop',
+    noPendingAirdrop: 'Aucun airdrop en attente à récupérer',
+    needActiveStaking: 'Commande de staking active requise',
+    claimableAmountLabel: 'Montant récupérable',
+    airdropRecordsTitle: 'Historique de récupération d’airdrop',
+    airdropRecordsEmpty: 'Aucun enregistrement pour le moment',
+    airdropRecordStatus0: 'En attente',
+    airdropRecordStatus1: 'Distribué',
+    airdropRecordStatus2: 'En examen',
+    airdropRecordStatus3: 'Refusé',
+    airdropRecordTimeCreate: 'Attribué',
+    airdropRecordTimeSubmit: 'Envoyé',
+    airdropRecordTimeAudit: 'Vérifié',
+    airdropRecordRejectReason: 'Motif',
+    airdropRecordsLoadMore: 'Charger plus',
+  },
+  tr: {
+    idoTitle: 'IDO Ön Satış',
+    idoRuleLabel: 'Kurallar: ',
+    idoRuleOnce: 'Üyeler platformun ana zincir tokeninden belirli miktar satın alır; fonlar otomatik olarak kilitlenir. {lock} ay kilitli kalır, sonra tamamen serbest bırakılır.',
+    idoRuleBatch: 'Üyeler platformun ana zincir tokeninden belirli miktar satın alır; fonlar otomatik olarak kilitlenir. {lock} ay kilitli kalır, {release} ay boyunca serbest bırakılır.',
+    myTeam: 'Ekibim',
+    currentNodeLevel: 'Mevcut Düğüm Seviyesi',
+    directNumLabel: 'Doğrudan Yönlendirmeler',
+    teamNumLabel: 'Ekip Büyüklüğü',
+    teamPerformanceLabel: 'Ekip Hacmi (iBit)',
+    totalRevenueLabel: 'Toplam Gelir (USDT)',
+    directListTitle: 'Doğrudan Yönlendirmeler',
+    directAddress: 'Adres',
+    levelCol: 'Seviye',
+    buyAmountCol: 'Satın Alma (iBit)',
+    myRewardCol: 'Ödülüm (U)',
+    nodeLevelNormal: 'Düğüm Yok',
+    nodeLevelCommunity: 'Topluluk Düğümü',
+    nodeLevelCity: 'Şehir Düğümü',
+    nodeLevelApac: 'APAC Düğümü',
+    nodeLevelGlobal: 'Küresel Düğüm',
+    teamLoadMore: 'Daha Fazla Yükle',
+    joinPresale: 'Ön Satışa Katıl',
+    subscribeQty: 'Abelik Miktarı',
+    availableIbit: 'Çekilebilir iBit',
+    availableUsdt: 'Çekilebilir Bakiye',
+    availableIbitLine: 'Kullanılabilir iBit: {amount} {unit}',
+    priceUnavailable: 'Fiyat kullanılamıyor. Lütfen daha sonra tekrar deneyin',
+    ibitUnitPrice: 'Mevcut Fiyat',
+    ibitUnitPriceLine: 'Mevcut fiyat: {price} USDT',
+    correspondingPrice: 'USDT Cinsinden Fiyat',
+    ibitTransfer: 'Transfer',
+    confirmPresale: 'Ön Satışı Onayla',
+    estimatedUnlock: 'Tahmini Açılış Tarihi',
+    estimatedUnlockLine: 'Tahmini açılış tarihi: {date}',
+    coin: 'Staking Coin',
+    lockDays: 'Kilit Süresi (gün)',
+    days: 'gün',
+    releaseRule: 'Çıkarma Kuralı',
+    releaseOnce: '{days} gün kilitlendikten sonra tamamen serbest bırakılır',
+    releaseBatch: '{days} gün kilitlendikten sonra her {period} günde {pct}% serbest bırakılır',
+    minAmount: 'Min. Stake',
+    maxAmount: 'Maks. Stake',
+    walletAvailable: 'Staking Cüzdan Kullanılabilir Bakiye',
+    stakeAmount: 'Stake Miktarı',
+    stakeHint: 'Staking cüzdan kullanılabilir bakiyesinden düşülür. Yetersizse Varlıklar sayfasında çekilebilir hesaptan transfer yapın.',
+    confirmStake: 'Staking\'i Onayla',
+    stakeSuccess: 'Staking başarılı',
+    stakeFailed: 'Staking başarısız',
+    amountRequired: 'Lütfen abonelik miktarını girin',
+    belowMin: 'En az {min} olmalı',
+    aboveMax: '{max}\'i geçemez',
+    configNotFound: 'Ürün bulunamadı veya devre dışı',
+    loginToStake: 'IDO ön satışına katılmak için giriş yapın',
+    airdropTitle: 'Airdrop Talep Et',
+    airdropRule: 'Kurallar: Görevleri tamamlayıp başvurduktan sonra platform inceleyip iş günlerinde dağıtım yapacaktır.',
+    airdropApplyTitle: 'Airdrop Başvurusu',
+    task1Label: 'Görev 1',
+    task1Title: '3 arkadaşını iBit\'e kayıt olmaya davet et',
+    inviteProgress: 'Davet edilen ({current}/{required})',
+    inviteDone: 'Tamamlandı',
+    goInvite: 'Davet Et',
+    claimAirdropBtn: 'Airdrop Talep Et',
+    claimSuccess: 'Başarıyla gönderildi. Lütfen platform incelemesini bekleyin.',
+    claimSuccessTitle: 'Başvuru gönderildi',
+    claimFailed: 'Talep başarısız',
+    loginToClaim: 'Airdrop talep etmek için giriş yapın',
+    noPendingAirdrop: 'Talep edilecek bekleyen airdrop yok',
+    needActiveStaking: 'Aktif staking emri gereklidir',
+    claimableAmountLabel: 'Talep edilebilir miktar',
+    airdropRecordsTitle: 'Airdrop talep geçmişi',
+    airdropRecordsEmpty: 'Henüz kayıt yok',
+    airdropRecordStatus0: 'Bekliyor',
+    airdropRecordStatus1: 'Dağıtıldı',
+    airdropRecordStatus2: 'İncelemede',
+    airdropRecordStatus3: 'Reddedildi',
+    airdropRecordTimeCreate: 'Ayrıldı',
+    airdropRecordTimeSubmit: 'Gönderildi',
+    airdropRecordTimeAudit: 'İncelendi',
+    airdropRecordRejectReason: 'Neden',
+    airdropRecordsLoadMore: 'Daha Fazla Yükle',
+  },
+  vi: {
+    idoTitle: 'IDO Trước bán',
+    idoRuleLabel: 'Quy tắc: ',
+    idoRuleOnce: 'Thành viên mua một lượng token chính của nền tảng; tiền tự động bị khóa. Khóa {lock} tháng, sau đó giải phóng toàn bộ.',
+    idoRuleBatch: 'Thành viên mua một lượng token chính của nền tảng; tiền tự động bị khóa. Khóa {lock} tháng, giải phóng trong {release} tháng.',
+    myTeam: 'Đội nhóm của tôi',
+    currentNodeLevel: 'Cấp nút hiện tại',
+    directNumLabel: 'Giới thiệu trực tiếp',
+    teamNumLabel: 'Quy mô đội',
+    teamPerformanceLabel: 'Doanh số đội (iBit)',
+    totalRevenueLabel: 'Tổng thu nhập (USDT)',
+    directListTitle: 'Danh sách giới thiệu trực tiếp',
+    directAddress: 'Địa chỉ',
+    levelCol: 'Cấp',
+    buyAmountCol: 'Mua (iBit)',
+    myRewardCol: 'Thưởng của tôi (U)',
+    nodeLevelNormal: 'Không có nút',
+    nodeLevelCommunity: 'Nút cộng đồng',
+    nodeLevelCity: 'Nút thành phố',
+    nodeLevelApac: 'Nút APAC',
+    nodeLevelGlobal: 'Nút toàn cầu',
+    teamLoadMore: 'Tải thêm',
+    joinPresale: 'Tham gia trước bán',
+    subscribeQty: 'Số lượng đăng ký',
+    availableIbit: 'iBit có thể rút',
+    availableUsdt: 'Số dư có thể rút',
+    availableIbitLine: 'iBit khả dụng: {amount} {unit}',
+    priceUnavailable: 'Giá không có sẵn. Vui lòng thử lại sau',
+    ibitUnitPrice: 'Giá hiện tại',
+    ibitUnitPriceLine: 'Giá hiện tại: {price} USDT',
+    correspondingPrice: 'Giá tính bằng USDT',
+    ibitTransfer: 'Chuyển',
+    confirmPresale: 'Xác nhận trước bán',
+    estimatedUnlock: 'Ngày mở khóa dự kiến',
+    estimatedUnlockLine: 'Ngày mở khóa dự kiến: {date}',
+    coin: 'Coin Staking',
+    lockDays: 'Thời gian khóa (ngày)',
+    days: 'ngày',
+    releaseRule: 'Quy tắc giải phóng',
+    releaseOnce: 'Giải phóng toàn bộ sau {days} ngày khóa',
+    releaseBatch: 'Mỗi {period} ngày giải phóng {pct}% sau {days} ngày khóa',
+    minAmount: 'Stake tối thiểu',
+    maxAmount: 'Stake tối đa',
+    walletAvailable: 'Số dư khả dụng ví staking',
+    stakeAmount: 'Số lượng stake',
+    stakeHint: 'Trừ từ số dư khả dụng ví staking. Chuyển từ tài khoản có thể rút ở trang Tài sản nếu không đủ.',
+    confirmStake: 'Xác nhận Staking',
+    stakeSuccess: 'Staking thành công',
+    stakeFailed: 'Staking thất bại',
+    amountRequired: 'Vui lòng nhập số lượng đăng ký',
+    belowMin: 'Phải ít nhất {min}',
+    aboveMax: 'Không được vượt quá {max}',
+    configNotFound: 'Sản phẩm không tìm thấy hoặc đã tắt',
+    loginToStake: 'Đăng nhập để tham gia IDO trước bán',
+    airdropTitle: 'Nhận Airdrop',
+    airdropRule: 'Quy tắc: Sau khi hoàn thành nhiệm vụ và đăng ký, nền tảng sẽ xem xét và phân phối trong ngày làm việc.',
+    airdropApplyTitle: 'Đăng ký nhận Airdrop',
+    task1Label: 'Nhiệm vụ 1',
+    task1Title: 'Mời 3 bạn bè đăng ký iBit',
+    inviteProgress: 'Đã mời ({current}/{required})',
+    inviteDone: 'Hoàn thành',
+    goInvite: 'Mời',
+    claimAirdropBtn: 'Nhận Airdrop',
+    claimSuccess: 'Gửi thành công. Vui lòng chờ nền tảng xem xét.',
+    claimSuccessTitle: 'Đã gửi yêu cầu',
+    claimFailed: 'Nhận thất bại',
+    loginToClaim: 'Đăng nhập để nhận airdrop',
+    noPendingAirdrop: 'Không có airdrop chờ nhận',
+    needActiveStaking: 'Cần lệnh staking hoạt động',
+    claimableAmountLabel: 'Số lượng có thể nhận',
+    airdropRecordsTitle: 'Lịch sử nhận airdrop',
+    airdropRecordsEmpty: 'Chưa có bản ghi',
+    airdropRecordStatus0: 'Chờ nhận',
+    airdropRecordStatus1: 'Đã phân phối',
+    airdropRecordStatus2: 'Đang xem xét',
+    airdropRecordStatus3: 'Bị từ chối',
+    airdropRecordTimeCreate: 'Đã phân bổ',
+    airdropRecordTimeSubmit: 'Đã gửi',
+    airdropRecordTimeAudit: 'Đã xem xét',
+    airdropRecordRejectReason: 'Lý do',
+    airdropRecordsLoadMore: 'Tải thêm',
+  },
+}

+ 1061 - 0
code/src/locales/fr.ts

@@ -0,0 +1,1061 @@
+import { futuresPageByLocale } from './futuresPage.i18n'
+import { financePageByLocale } from './financePage.i18n'
+
+export default {
+  nav: {
+    home: 'Accueil',
+    market: 'Marché',
+    spot: 'Spot',
+    futures: 'Futures',
+    copyTrade: 'Copy Trading',
+    finance: 'Finance',
+    idoPresale: 'Pré-vente IDO',
+    claimAirdrop: 'Réclamer Airdrop',
+    announcements: 'Annonces',
+    download: 'Télécharger',
+  },
+  lang: {
+    title: 'Langue',
+    zhCN: '简体中文',
+    zhTW: '繁體中文',
+    en: 'English',
+    ko: '한국어',
+    ja: '日本語',
+    hi: 'हिन्दी',
+    id: 'Bahasa Indonesia',
+    es: 'Español',
+    ru: 'Русский',
+    pt: 'Português',
+    de: 'Deutsch',
+    fr: 'Français',
+    tr: 'Türkçe',
+    vi: 'Tiếng Việt'
+  },
+  header: {
+    login: 'Connexion',
+    register: 'Inscription',
+    account: 'Mon Compte',
+    assets: 'Mes Actifs',
+    security: 'Sécurité',
+    broker: 'Broker',
+    logout: 'Déconnexion',
+    logoutShort: 'Déconnexion',
+    downloadTitle: 'Télécharger l’app',
+    brokerApplyTitle: 'Devenir Broker',
+    brokerApplyDesc: 'Vous n’êtes pas broker. Votre demande sera soumise automatiquement.',
+    cancel: 'Annuler',
+    applyNow: 'Postuler maintenant',
+    viewApplyList: 'Voir la demande',
+    submitting: 'Envoi en cours…',
+    menu: 'Menu',
+  },
+  common: {
+    loading: 'Chargement…',
+    retry: 'Réessayer',
+    cancel: 'Annuler',
+    confirm: 'Confirmer',
+    submit: 'Envoyer',
+    save: 'Enregistrer',
+    send: 'Envoyer',
+    back: 'Retour',
+    next: 'Suivant',
+    done: 'Terminé',
+    noData: 'Aucune donnée',
+    noRecord: 'Aucun enregistrement',
+    search: 'Rechercher',
+    all: 'Tout',
+    max: 'Max',
+    copied: 'Copié',
+    networkError: 'Erreur réseau, veuillez réessayer',
+    loadFailed: 'Échec du chargement',
+    operationFailed: 'Échec de l’opération',
+    saveSuccess: 'Enregistré avec succès',
+    more: 'Plus',
+    perpetual: 'Perpétuel',
+    set: 'Défini',
+    notSet: 'Non défini',
+    change: 'Modifier',
+    bind: 'Lier',
+    unbind: 'Délier',
+    on: 'Activé',
+    off: 'Désactivé',
+    status: 'Statut',
+    time: 'Heure',
+    amount: 'Montant',
+    type: 'Type',
+    coin: 'Coin',
+    from: 'De',
+    to: 'À',
+    close: 'Fermer',
+    contactService: 'Contacter le support',
+  },
+  home: {
+    heroTitle: 'Plateforme sécurisée, efficace et globale d’actifs numériques',
+    heroDesc: 'iBit offre des services de trading stables, transparents et professionnels.',
+    register: 'S’inscrire',
+    viewMarket: 'Voir le marché',
+    downloadApp: 'Télécharger l’app',
+    coreAdvantages: 'Avantages',
+    assetSafetyTitle: 'Sécurité des actifs',
+    assetSafetyDesc: 'Portefeuilles froids/chauds, signature multiple, surveillance 24h/24.',
+    highPerfTitle: 'Haute performance',
+    highPerfDesc: 'Moteur de matching interne, exécution milliseconde.',
+    globalComplianceTitle: 'Conformité mondiale',
+    globalComplianceDesc: 'Respect des réglementations internationales.',
+    transparentFeeTitle: 'Frais transparents',
+    transparentFeeDesc: 'Structure de frais claire sans coûts cachés.',
+    aboutUs: 'À propos',
+    aboutDesc: 'iBit est une plateforme mondiale d’échange d’actifs numériques.',
+    foundedYear: 'Fondée en 2023',
+    headquarters: 'Basée à Dubaï, licences aux USA, Canada, Australie.',
+    ourVision: 'Notre vision',
+    visionSubtitle: 'Construire une infrastructure de confiance',
+    ecoTitle: 'Écosystème',
+    ecoDesc: 'Créer un écosystème crypto innovant',
+    missionTitle: 'Mission',
+    missionDesc: 'Faciliter la circulation des valeurs numériques',
+    purposeTitle: 'Objectif',
+    purposeDesc: 'Aider les utilisateurs à gérer leurs actifs',
+    heroImageAlt: 'Plateforme iBit',
+    aboutImageAlt: 'À propos de nous',
+  },
+  market: {
+    title: 'Marché en temps réel',
+    desc: 'Prix, volumes et variations en temps réel.',
+    hot: 'Populaire',
+    topVolume: 'Volumes',
+    gainers: 'Hausses',
+    losers: 'Baisses',
+    perpetual: 'Perpétuel',
+    name: 'Nom',
+    latestPrice: 'Dernier prix',
+    change24h: 'Variation 24h',
+    turnover: 'Volume',
+    searchPair: 'Rechercher une paire',
+    searchMarket: 'Rechercher coin, paire, future',
+    price: 'Prix',
+    change24hShort: 'Var 24h',
+    high24h: 'Haut 24h',
+    low24h: 'Bas 24h',
+    volume24hLabel: 'Volume 24h',
+  },
+  auth: {
+    loginTitle: 'Connexion',
+    emailLogin: 'Connexion email',
+    emailPlaceholder: 'Saisissez votre email',
+    password: 'Mot de passe',
+    passwordPlaceholder: 'Saisissez votre mot de passe',
+    forgotPassword: 'Mot de passe oublié ?',
+    loginBtn: 'Se connecter',
+    noAccount: 'Pas de compte ?',
+    registerNow: 'S’inscrire',
+    verifyTitle: 'Code de vérification',
+    codeSentDesc: 'Code envoyé à {email}',
+    codeSendDesc: 'Cliquez pour envoyer le code à {email}',
+    countdownResend: 'Renvoyer dans {n}s',
+    resendCode: 'Renvoyer le code',
+    confirmBtn: 'Confirmer',
+    sendCode: 'Envoyer le code',
+    forgotVerify: 'Méthode oubliée ?',
+    loginSuccess: 'Connecté avec succès',
+    codeSentAgain: 'Code renvoyé',
+    registerTitle: 'Inscription',
+    emailRegister: 'Inscription email',
+    inviteCodeLabel: 'Code d’invitation (facultatif)',
+    inviteCodePlaceholder: 'Saisissez le code',
+    hasAccount: 'Déjà un compte ?',
+    loginNow: 'Se connecter',
+    verifyPageTitle: 'Vérification de sécurité',
+    emailVerifyLabel: 'Vérification email',
+    codePlaceholder: 'Saisissez le code',
+    sendBtn: 'Envoyer',
+    passwordTitle: 'Créer un mot de passe',
+    backBtn: '‹ Retour',
+    inputPasswordLabel: 'Mot de passe',
+    confirmPasswordLabel: 'Confirmer',
+    confirmPasswordPlaceholder: 'Répétez le mot de passe',
+    doneBtn: 'Terminé',
+    resetSuccess: 'Mot de passe réinitialisé',
+    registerSuccess: 'Inscription réussie',
+    welcomeJoin: 'Bienvenue sur iBit',
+    loginNowBtn: 'Se connecter',
+    forgotPasswordTitle: 'Réinitialiser le mot de passe',
+    emailLabel: 'Email',
+    emailRegisteredPlaceholder: 'Email enregistré',
+    codeSentToast: 'Code envoyé',
+  },
+  error: {
+    emailRequired: 'Email requis',
+    emailInvalid: 'Email invalide',
+    passwordRequired: 'Mot de passe requis',
+    code6Required: 'Code 6 chiffres requis',
+    codeRequired: 'Code requis',
+    loginFailed: 'Email ou mot de passe incorrect',
+    networkError: 'Erreur réseau',
+    emailAlreadyRegistered: 'Email déjà utilisé',
+    confirmPasswordRequired: 'Confirmez le mot de passe',
+    passwordMismatch: 'Mots de passe différents',
+    loadFailed: 'Échec chargement',
+    refreshFailed: 'Échec actualisation',
+    statusUpdated: 'Statut mis à jour',
+    currentPasswordRequired: 'Mot de passe actuel requis',
+    sixDigitCode: 'Code email 6 chiffres',
+    sixDigitGoogleCode: 'Code Google 6 chiffres',
+    sendFailed: 'Échec envoi',
+    operationFailed: 'Échec opération',
+  },
+  security: {
+    title: 'Sécurité',
+    back: '‹ Retour',
+    warningBanner: 'Vérifiez email, Google Auth et mot de passe de fonds.',
+    accountSecurity: 'Sécurité du compte',
+    loginPassword: 'Mot de passe connexion',
+    loginPasswordDesc: 'Changez-le régulièrement',
+    emailVerify: 'Vérification email',
+    emailVerifyDesc: 'Lier pour récupérer le compte',
+    googleAuth: 'Google Authenticator',
+    googleAuthDesc: 'Sécurité renforcée',
+    fundPassword: 'Mot de passe des fonds',
+    fundPasswordDesc: 'Pour retraits et transferts',
+    set: 'Défini',
+    notSet: 'Non défini',
+    change: 'Modifier',
+    bind: 'Lier',
+    set2: 'Définir',
+    statusUpdated: 'À jour',
+    loadFailed: 'Échec chargement',
+    refreshFailed: 'Échec actualisation',
+    bound: 'Lié',
+    notBound: 'Non lié',
+    refresh: 'Actualiser',
+    googleHelpTitle: 'Aide Google Auth',
+    googleHelpDesc: 'Contactez le support en cas de problème',
+    changeLoginPassword: 'Changer mot de passe',
+    changePasswordHint: 'Utilisez le nouveau mot de passe',
+    currentPassword: 'Actuel',
+    newPassword: 'Nouveau',
+    confirmNewPassword: 'Confirmer',
+    emailCode: 'Code email',
+    sendCode: 'Envoyer',
+    codeSent: 'Code envoyé',
+    changeSuccess: 'Mot de passe changé',
+    confirmChange: 'Confirmer',
+    submitting: 'Envoi…',
+    setFundPassword: 'Définir mot de passe fonds',
+    resetFundPassword: 'Réinitialiser',
+    fundPasswordHint: 'Garder-le secret',
+    fundPasswordResetHint: 'Code envoyé par email',
+    newFundPassword: 'Nouveau mot de passe',
+    confirmFundPassword: 'Confirmer',
+    fundPasswordUpdated: 'Mot de passe fonds mis à jour',
+    fundPasswordSet: 'Mot de passe défini',
+    bindGoogle: 'Lier Google Auth',
+    boundEmail: 'Email lié :',
+    googleQrStep: '1. Scanner QR ou saisir clé',
+    googleCodeStep: '2. Code Google 6 chiffres',
+    emailCodeStep: '3. Code email',
+    copyKey: 'Copier clé',
+    keyCopied: 'Clé copiée',
+    copyFailed: 'Échec copie',
+    clipboardDeniedMac: 'Autorisez le presse-papiers',
+    clipboardDenied: 'Presse-papiers refusé',
+    invalidSecret: 'Clé invalide',
+    googleCodeRequired: 'Code Google requis',
+    emailCodeSent: 'Code envoyé',
+    bindSuccess: 'Lié avec succès',
+    confirmBind: 'Confirmer la liaison',
+    googleAuthLead: 'Téléchargez Google Authenticator',
+    googleAuthTip1: 'Code requis pour connexion et fonds',
+    googleAuthTip2: 'Gardez votre appareil en sécurité',
+    googleAuthStart: 'J’ai installé, lier maintenant',
+  },
+  assets: {
+    title: 'Mes Actifs',
+    totalAssets: 'Total des actifs',
+    todayPnl: 'P&L du jour',
+    deposit: 'Dépôt',
+    withdraw: 'Retrait',
+    transfer: 'Transfert',
+    history: 'Historique',
+    spot: 'Spot',
+    futures: 'Futures',
+    copyTrade: 'Copy Trading',
+    fund: 'Disponible',
+    walletBalance: 'Solde portefeuille',
+    unrealizedPnl: 'P&L non réalisé',
+    positions: 'Positions',
+    noPositions: 'Aucune position',
+    assetBalance: 'Solde',
+    unavailable: 'Indisponible',
+    depositCoin: 'Dépôt',
+    withdrawCoin: 'Retrait',
+    depositRecord: 'Historique dépôts',
+    withdrawRecord: 'Historique retraits',
+    transferRecord: 'Historique transferts',
+    assetRecord: 'Mouvements',
+    overview: 'Aperçu',
+    spotAccount: 'Compte Spot',
+    swapAccount: 'Compte Futures',
+    followAccount: 'Compte Copy',
+    fundAccount: 'Compte disponible',
+    spotTradingAccount: 'Compte trading spot',
+    ibitAccount: 'Compte iBit',
+    lockedStakingAccount: 'Staking verrouillé',
+    stakingTab: 'Staking',
+    ibitUnit: 'iBit',
+    releaseTotal: 'Total libéré',
+    totalLockedBalance: 'Total verrouillé (iBit)',
+    myStakingOrders: 'Mes commandes staking',
+    stakingOrderNo: 'N° commande',
+    purchaseQty: 'Quantité achetée',
+    stakingTotal: 'Total staké',
+    released: 'Libéré',
+    pendingRelease: 'En attente',
+    startTime: 'Date de début',
+    subscribing: 'En souscription',
+    releasing: 'En libération',
+    completed: 'Terminé',
+    pullToRefresh: 'Tirer pour actualiser',
+    releaseToRefresh: 'Relâcher pour actualiser',
+    refreshing: 'Actualisation…',
+    totalAccount: 'Total du compte',
+    showBalance: 'Afficher solde',
+    hideBalance: 'Masquer solde',
+    followBalance: 'Solde copy',
+    accountTransfer: 'Transfert compte',
+    transferFrom: 'Depuis',
+    transferTo: 'Vers',
+    available: 'Disponible',
+    freeTransfer: 'Transfert gratuit et instantané',
+    followPositions: 'Positions copy',
+    noFollowPositions: 'Aucune position',
+    followLoading: 'Chargement…',
+    long: 'Long',
+    short: 'Short',
+    trader: 'Trader',
+    openPrice: 'Prix d’entrée',
+    currentPrice: 'Prix actuel',
+    amountLever: 'Montant · Levier',
+    closing: 'Clôture…',
+    closePosition: 'Fermer position',
+    noLossPosition: 'Non fermable manuellement',
+    invalidPosition: 'Position invalide',
+    confirmClose: 'Confirmer la fermeture ?',
+    closeSuccess: 'Fermée',
+    closeFailed: 'Échec fermeture',
+    sameAccountError: 'Même compte',
+    amountError: 'Montant invalide',
+    insufficientBalance: 'Solde insuffisant',
+    transferSuccess: 'Transfert réussi',
+    transferFailed: 'Échec transfert',
+    goCopyTrade: 'Copy Trading',
+    goSpotTrade: 'Trader',
+    hideZeroBalance: 'Masquer solde nul',
+    depositRecord2: 'Historique dépôts',
+    amountUsdt: 'Montant (USDT)',
+    amountCoin: 'Montant ({coin})',
+    availableCoin: 'Disponible : {available} {coin}',
+    transferring: 'Transfert…',
+    confirmTransferBtn: 'Confirmer',
+    statementPageTitle: 'Relevé',
+    statementStartDate: 'Début',
+    statementEndDate: 'Fin',
+    statementReset: 'Réinitialiser',
+    statementSearch: 'Rechercher',
+    statementSearching: 'Recherche…',
+    statementEmpty: 'Aucun mouvement',
+    statementDirectionOpen: 'Ouvert',
+    statementDirectionClose: 'Fermé',
+    statementTypes: {
+      '43': 'Gain Spot',
+      '44': 'Perte Spot',
+      '45': 'Frais Spot',
+      '46': 'Remboursement Spot',
+      '48': 'Trade Spot',
+      '49': 'Staking',
+      '50': 'Libération staking',
+      '51': 'Récompense Airdrop',
+      '52': 'Vers staking',
+      '53': 'Depuis staking',
+    },
+  },
+  finance: { ...financePageByLocale.fr },
+  copyTrade: {
+    comprehensive: 'Général',
+    winRate14d: 'Taux de réussite 14j',
+    profit14d: 'Rendement 14j',
+    normal: 'Copy normal',
+    lossless: 'Copy sans perte',
+    favorite: 'Favoris',
+    topTraders: 'Top Traders',
+    twoWeekReturn: 'Rendement 2 semaines',
+    followers: 'Abonnés',
+    days: 'Jours',
+    applyTrader: 'Devenir trader',
+    myFollowing: 'Mes abonnements',
+    myTrading: 'Mes trades',
+    traderIdentity: 'Trader',
+    myFollowingAccount: 'Compte copy',
+    leadManage: 'Gestion trader',
+    applyLead: 'Postuler',
+    pageTitle: 'Copy Trading',
+    heroDesc: 'Suivez les meilleurs traders en un clic',
+    traderOverview: 'Aperçu trader',
+    copyFollowersCount: 'Nombre abonnés',
+    cumulativeTradingDays: 'Jours de trading',
+    cumulativeLeadProfit: 'Gain total copy',
+    goLeadManage: 'Gestion →',
+    copyWalletTitle: 'Solde compte copy',
+    cumulativePnlUsdt: 'P&L total (USDT)',
+    availableUsdt: 'Disponible (USDT)',
+    unrealizedPnlUsdtShort: 'P&L non réalisé (USDT)',
+    followingTradersSummary: 'Vous suivez {n} traders',
+    newBadge: 'NOUVEAU',
+    losslessShieldTitle: 'Protection sans perte',
+    losslessShieldDesc: ' : Compensé en cas de perte dans les limites',
+    learnHowItWorks: 'En savoir plus →',
+    myStarredTraders: 'Traders favoris',
+    traderTotalCount: '{count} traders',
+    filterLoadingShort: 'Chargement…',
+    loadTraderListFailed: 'Échec chargement liste',
+    loadFavoritesFailed: 'Échec chargement favoris',
+    favoritedToast: 'Ajouté aux favoris',
+    defaultTraderName: 'Trader',
+    levelJunior: 'Débutant',
+    badgeLossless: 'Sans perte',
+    metaDaysTrades: '{days}j · {trades} trades',
+    followAction: 'Suivre',
+    profitUsdtBracket: 'Gain (USDT)',
+    profitShareRate: 'Partage gains %',
+    trend14Days: 'Tendance 14 jours',
+    emptyFavoriteHint: 'Aucun favori',
+    emptyTraderListDefault: 'Aucun trader',
+    emptyTraderListLossless: 'Aucun trader sans perte',
+    browseTraders: 'Parcourir traders',
+    losslessInfoHeading: 'Fonctionnement copy sans perte',
+    llInfoCard1Title: 'Protection conditionnelle',
+    llInfoCard1Body: 'Sous réserve des règles de risque',
+    llInfoCard2Title: 'Responsabilité limitée',
+    llInfoCard2Body: 'Compensation dans la limite définie',
+    llInfoCard3Title: 'Contrôle risque',
+    llInfoCard3Body: 'Protection automatique en cas de perte',
+    llInfoCard4Title: 'Avertissement risque',
+    llInfoCard4Body: 'Le trading comporte des risques',
+    unitYi: 'Milliard',
+    unitWan: 'Millier',
+    followingPlaza: 'Place copy',
+    followingWalletFail: 'Échec chargement solde',
+    followingTabPositions: 'Positions',
+    followingTabTraders: 'Traders',
+    followingTabHistory: 'Historique',
+    followingHistEmpty: 'Aucun historique',
+    followingNoTradersYet: 'Aucun abonnement',
+    followingGoPlaza: 'Aller à la place',
+    confirmStopFollow: 'Arrêter de suivre {name} ?',
+    noLossManualCloseTooltip: 'Non fermable manuellement',
+    followingThContract: 'Contrat',
+    followingThDirection: 'Sens',
+    followingThOpenPrice: 'Prix entrée',
+    followingThCurPrice: 'Prix actuel',
+    followingThQty: 'Quantité',
+    followingThLever: 'Levier',
+    followingThUnrealized: 'P&L non réalisé',
+    followingThOpenTime: 'Date',
+    followingThAction: 'Action',
+    followingOpenLong: 'Long',
+    followingOpenShort: 'Short',
+    closeQtyWithBase: 'Qté fermée ({base})',
+    followingRealizedPnlUsdt: 'P&L réalisé (USDT)',
+    followingYieldRate: 'Rendement',
+    followingAvgOpenUsdt: 'Prix moy. entrée (USDT)',
+    followingAvgCloseUsdt: 'Prix moy. fermeture (USDT)',
+    marginCrossMode: 'Cross',
+    marginIsolatedMode: 'Isolé',
+    stopFollowing: 'Arrêter de suivre',
+    lead: {
+      pageTitle: 'Mon trading',
+      navMyFollowing: 'Mes abonnements →',
+      becomeTitle: 'Devenir trader',
+      becomeDesc: 'Remplissez les conditions',
+      condMinBalance: 'Compte futures ≥ {min} USDT',
+      goTransfer: 'Transférer',
+      condNotFollowing: 'Ne pas suivre de trader',
+      agreePrefix: 'J’accepte',
+      agreeLink: 'l’accord trader',
+      submitting: 'Envoi…',
+      submitApply: 'Envoyer la demande',
+      applyFailed: 'Échec demande',
+      reviewingTitle: 'En cours d’examen',
+      reviewingDesc: 'Votre demande est en traitement',
+      agreementTitle: 'Accord trader',
+      agreementEmpty: 'Impossible de charger l’accord',
+      leadingBadge: 'En activité',
+      noBio: 'Aucune bio',
+      cancelLeadProcessing: 'Traitement…',
+      cancelLeadApply: 'Arrêter trader',
+      confirmCancelLead: 'Confirmer l’arrêt ?',
+      operationFailed: 'Échec opération',
+      statFollowers: 'Abonnés actuels',
+      statRegisterDays: 'Jours inscrit',
+      statCapital: 'Capital',
+      statCumulativeProfit: 'Gain total (USDT)',
+      statTotalFollowers: 'Total abonnés',
+      statTradingDays: 'Jours de trading',
+      tabFollowers: 'Abonnés ({n})',
+      tabCurrent: 'Positions',
+      tabHistory: 'Historique',
+      tabSettings: 'Paramètres',
+      emptyFollowers: 'Aucun abonné',
+      removeFollower: 'Supprimer',
+      followerEquity: 'Solde (USDT)',
+      followerTotalShare: 'Partage total (USDT)',
+      followerLastShare: 'Dernier partage',
+      followerSince: 'Suivi depuis : {time}',
+      emptyCurrent: 'Aucune position',
+      emptyHistory: 'Aucun historique',
+      settingsBasic: 'Infos basiques',
+      avatar: 'Avatar',
+      nickname: 'Pseudo',
+      nicknamePlaceholder: '10 caractères max',
+      bio: 'Bio',
+      bioPlaceholder: '25 caractères max',
+      saveSuccess: 'Enregistré',
+      saveBasicProcessing: 'Enregistrement…',
+      saveBasic: 'Enregistrer',
+      leadSymbols: 'Contrats trader',
+      saveProcessing: 'Enregistrement…',
+      save: 'Enregistrer',
+      tagsTitle: 'Tags (max 4)',
+      confirmRemoveFollower: 'Supprimer {name} ?',
+      saveFailed: 'Échec enregistrement',
+      uploadFailed: 'Échec upload',
+      defaultFollower: 'Abonné',
+      defaultUser: 'Utilisateur',
+    },
+  },
+  footer: {
+    aboutSection: 'À propos',
+    companyIntro: 'Présentation',
+    brand: 'Marque',
+    community: 'Communauté',
+    riskWarning: 'Avertissement risque',
+    terms: 'Conditions',
+    privacy: 'Confidentialité',
+    futuresTrade: 'Futures',
+    spotTrade: 'Spot',
+    losslessCopy: 'Copy sans perte',
+    beginnerGuide: 'Guide débutant',
+    helpCenter: 'Aide',
+    glossary: 'Glossaire',
+    compliance: 'Conformité',
+    products: 'Produits',
+    resources: 'Ressources',
+  },
+  announcements: {
+    title: 'Annonces',
+    noAnnouncements: 'Aucune annonce',
+    back: 'Retour',
+    backToList: 'Retour liste',
+    loadMore: 'Charger plus',
+  },
+  download: {
+    title: 'Télécharger iBit',
+    heroTitle: 'Marché en temps réel\nProtégé',
+    desc: 'Trader partout, facilement',
+    appDesc: 'Toutes les fonctions dans l’app',
+    latestVersion: 'Dernière version',
+    updateNotes: 'Notes de mise à jour',
+    ios: 'Télécharger iOS',
+    iosNotReleased: 'iOS pas encore disponible',
+    android: 'Télécharger Android',
+    androidNotReleased: 'Android pas encore disponible',
+    scanToDownload: 'Scanner pour télécharger',
+  },
+  account: {
+    title: 'Mon Compte',
+    uid: 'UID',
+    email: 'Email',
+    profile: 'Profil',
+    security: 'Sécurité',
+    securityDesc: 'Mots de passe, auth',
+    assets: 'Actifs',
+    assetsDesc: 'Dépôt, retrait, transfert',
+    inviteCode: 'Code d’invitation',
+    inviteFriends: 'Inviter amis',
+    inviteDesc: 'Gagnez des commissions',
+    helpSupport: 'Aide',
+    helpDesc: 'FAQ et support',
+    broker: 'Broker',
+    brokerDesc: 'Commissions, équipe',
+    logout: 'Déconnexion',
+    securityScore: 'Score sécurité',
+    twofa: 'Google Auth',
+    supportTitle: 'Support',
+    supportHours: '24h/24',
+    onlineSupport: 'Chat en ligne',
+    instantChat: 'Chat instantané',
+    telegramSupport: 'Telegram',
+    emailSupport: 'Email',
+    applySubmitted: 'Demande envoyée',
+    scoreHigh: 'Excellent',
+    scoreMedium: 'Moyen',
+    scoreLow: 'Améliorer',
+  },
+  transfer: {
+    title: 'Transfert',
+    amount: 'Montant',
+    amountPlaceholder: 'Saisissez le montant',
+    maxTransferable: 'Max transférable',
+    success: 'Transfert réussi',
+    selectCoin: 'Choisir coin',
+    enterAmount: 'Saisissez le montant',
+    histEmpty: 'Aucun historique',
+    balanceLabel: 'Solde',
+  },
+  withdraw: {
+    title: 'Retrait',
+    network: 'Réseau',
+    networkTip: 'Vérifiez le réseau pour ne pas perdre vos fonds',
+    address: 'Adresse de retrait',
+    addressPlaceholder: 'Saisissez l’adresse',
+    amount: 'Montant',
+    received: 'Reçu',
+    fee: 'Frais',
+    submitted: 'Demande envoyée',
+    fundPassword: 'Mot de passe fonds',
+    emailCode: 'Code email',
+    googleCode: 'Code Google',
+    securityVerification: 'Vérification',
+    recordTitle: 'Historique retraits',
+    recordEmpty: 'Aucun retrait',
+    confirmCancelApply: 'Annuler la demande ?',
+    withdrawCancelledToast: 'Annulé',
+    withdrawCancelFailedToast: 'Échec annulation',
+    statusPending: 'En attente',
+    statusReleasing: 'En cours',
+    statusWithdrawFailed: 'Échoué',
+    statusWithdrawSuccess: 'Réussi',
+    statusWithdrawCancelled: 'Annulé',
+    typeInternalTransfer: 'Transfert interne',
+    typeOnChainWithdraw: 'Retrait on-chain',
+    cancelApplyBtn: 'Annuler',
+    initFailed: 'Échec initialisation',
+    submitOnChainFailed: 'Échec retrait',
+    transferSubmitFailed: 'Échec transfert',
+    availWithdrawBalance: 'Disponible :',
+    availTransferBalance: 'Transférable :',
+    coinLabel: 'Coin',
+    subCoin: 'Sous-coin',
+    mainCoinLabel: 'Coin principal',
+    transferMainCoinHint: 'Transfert interne : coin principal seulement',
+    withdrawNetworkLabel: 'Réseau',
+    withdrawAmountUsdt: 'Montant (USDT)',
+    withdrawAmountCoin: 'Montant ({coin})',
+    transferAmountUsdt: 'Montant (USDT)',
+    transferAmountCoin: 'Montant ({coin})',
+    addressForCoin: 'Adresse {coin}',
+    expectedArrival: 'Arrivée prévue',
+    minWithdrawRowLabel: 'Retrait minimum',
+    internalTransferFeeLabel: 'Frais transfert interne',
+    free: 'Gratuit',
+    minTransferRowLabel: 'Transfert minimum',
+    recipientUidLabel: 'UID destinataire',
+    recipientUidPlaceholder: 'Saisissez UID',
+    addressForNetwork: 'Adresse USDT-{network}',
+    codePlaceholder6Digits: '6 chiffres',
+    googlePlaceholder6: 'Code Google 6 chiffres',
+    sendVerificationCode: 'Envoyer code',
+    confirmWithdrawSubmit: 'Confirmer retrait',
+    confirmTransferSubmit: 'Confirmer transfert',
+    codeSentToEmailToast: 'Code envoyé',
+    onchainSubmittedPendingToast: 'Demande envoyée',
+    transferSubmittedToast: 'Transfert envoyé',
+    submitFailed: 'Échec envoi',
+    detailTitleOnChain: 'Détails retrait',
+    detailTitleTransfer: 'Détails transfert',
+    amountHeroWithdraw: 'Montant retrait',
+    amountHeroTransfer: 'Montant transfert',
+    stepApplied: 'Demandé',
+    stepDone: 'Terminé',
+    recipientLabel: 'Destinataire',
+    appliedAt: 'Date demande',
+    finishedAt: 'Date fin',
+    cancelApplyFull: 'Annuler demande',
+    copyBtn: 'Copier',
+    bindGoogleFirst: 'Liez Google Auth d’abord',
+    errFillAddressBeforeCode: 'Saisissez l’adresse',
+    errFillAmountBeforeCode: 'Saisissez le montant',
+    errFillUidBeforeCode: 'Saisissez UID',
+    errFillTransferAmtBeforeCode: 'Saisissez montant',
+    errEnterWithdrawAddress: 'Adresse requise',
+    errEnterWithdrawAmount: 'Montant requis',
+    errMinWithdrawWithAmt: 'Min {min} {coin}',
+    errMinWithdrawWithAmtUsdt: 'Min {min} USDT',
+    errExceedWithdrawBalance: 'Solde insuffisant',
+    errEnterFundPassword: 'Mot de passe fonds requis',
+    errEnterEmailCode: 'Code email requis',
+    errEnterGoogleCode: 'Code Google requis',
+    errEnterRecipientUid: 'UID requis',
+    errEnterTransferAmount: 'Montant requis',
+    errMinTransferWithAmt: 'Min {min} {coin}',
+    errMinTransferWithAmtUsdt: 'Min {min} USDT',
+    errExceedTransferBalance: 'Solde insuffisant',
+  },
+  deposit: {
+    title: 'Dépôt',
+    address: 'Adresse de dépôt',
+    network: 'Réseau',
+    saveQrCode: 'Enregistrer QR',
+    addressCopied: 'Adresse copiée',
+    minDeposit: 'Dépôt minimum',
+    arrivals: 'Confirmations',
+    coin: 'Coin',
+    protocol: 'Protocole',
+    subCoin: 'Sous-coin',
+    contract: 'Contrat',
+    depositAmount: 'Montant',
+    amountPlaceholder: 'Saisissez le montant',
+    generateOrder: 'Créer commande',
+    generating: 'Création…',
+    notice: 'Important',
+    notice1: 'Créez la commande avant d’envoyer',
+    notice2: 'Mauvais réseau = perte de fonds',
+    notice3: 'Envoyez le TxHash après transfert',
+    intro: 'Règles',
+    introText: 'Choisissez coin + réseau → créez commande → envoyez',
+    newDeposit: '← Nouveau dépôt',
+    orderInfo: 'Infos commande',
+    orderNo: 'N° commande',
+    status: 'Statut',
+    coinLabel: 'Coin',
+    networkLabel: 'Réseau',
+    amount: 'Montant',
+    payAddress: 'Adresse de réception',
+    payAddressHint: 'Envoyez à cette adresse',
+    qrTitle: 'QR code',
+    qrHint: 'Scanner avec portefeuille',
+    contractAddress: 'Adresse contrat',
+    copy: '⎘ Copier',
+    copyAddress: 'Copier adresse',
+    submitHash: 'Envoyer TxHash',
+    submittingHash: 'Envoi…',
+    hashPlaceholder: 'Coller TxHash',
+    orSubmitHash: 'Ou soumettre le hash',
+    hashRequired: 'Hash requis',
+    statusNotSubmittable: 'Non soumissible',
+    orderCreated: 'Commande créée',
+    orderFailed: 'Échec création',
+    addressCopy: 'Adresse copiée',
+    orderNoCopy: 'N° copié',
+    hashSubmitted: 'Hash envoyé',
+    hashFailed: 'Échec envoi',
+    broadcastSuccess: 'Transaction envoyée',
+    tronBroadcastSuccess: 'Tx Tron envoyée',
+    noNetwork: 'Aucun réseau',
+    noSubCoin: 'Aucun sous-coin',
+    amountRequired: 'Montant requis',
+    amountPositive: 'Montant > 0',
+    submittedHash: 'Hash :',
+    manualDepositTab: 'Dépôt manuel',
+    walletDepositTab: 'Dépôt portefeuille',
+    walletPayEvm: 'Payer avec EVM',
+    walletPayingEvm: 'Paiement…',
+    walletPayTron: 'Payer avec Tron',
+    walletPayingTron: 'Paiement…',
+    histLink: 'Historique dépôts',
+    retryBtn: 'Réessayer',
+    backWithArrow: '‹ Retour',
+    rechargeStatus0: 'En attente paiement',
+    rechargeStatus1: 'En attente confirmation',
+    rechargeStatus2: 'Terminé',
+    rechargeStatus3: 'Annulé',
+    rechargeStatus4: 'Échoué',
+    statusUnknown: 'Statut {status}',
+    qrAlt: 'QR dépôt',
+    loadNetworksFailed: 'Échec chargement réseaux',
+    wcHintEvmConfigured: 'Utiliser WalletConnect EVM',
+    wcHintEvmUnconfigured: 'WalletConnect non configuré',
+    wcHintTronConfigured: 'WalletConnect Tron',
+    wcHintTronUnconfigured: 'Utiliser dépôt manuel',
+    wcHintTronManualOnly: 'Dépôt manuel seulement',
+    walletPayFallback: 'Échec paiement EVM',
+    tronWalletPayFallback: 'Échec paiement Tron',
+    currentPrefix: 'Actuel :',
+    histEmpty: 'Aucun dépôt',
+    histOrderNo: 'N° commande',
+    histTx: 'TX :',
+    histLoadMore: 'Charger plus',
+    histLoadedAll: 'Tout chargé',
+  },
+  broker: {
+    title: 'Espace Broker',
+    applyTitle: 'Devenir Broker',
+    myBrokerCode: 'Mon code broker',
+    referralCount: 'Utilisateurs parrainés',
+    totalCommission: 'Commissions totales',
+    applyStatus: 'Statut demande',
+    pending: 'En attente',
+    approved: 'Approuvé',
+    rejected: 'Rejeté',
+    defaultName: 'Broker',
+    greeting: 'Bonjour {name}',
+    uidLabel: 'UID : {uid}',
+    introBanner: 'Gagnez des commissions sur les trades',
+    statNewToday: 'Nouveaux aujourd’hui',
+    statTradeToday: 'Actifs aujourd’hui',
+    statRebateToday: 'Commissions aujourd’hui (USDT)',
+    inviteList: 'Liste parrainages',
+    emptyInviteList: 'Aucun parrainage',
+    thAccount: 'Compte',
+    thLevel: 'Niveau',
+    thPerpCopy: 'Perpétuel / Copy',
+    levelBroker: 'Broker',
+    levelNormal: 'Normal',
+    editRateTooltip: 'Modifier taux',
+    todayRebate: 'Commissions du jour',
+    emptyTodayRebate: 'Aucune commission',
+    thId: 'ID',
+    rebateUsdt: 'Commission (USDT)',
+    teamDetails: 'Équipe',
+    filterAll: 'Tout',
+    filterWeek: '7 derniers jours',
+    filterToday: 'Aujourd’hui',
+    filterMonth: 'Ce mois',
+    teamTotalAssets: 'Actifs équipe',
+    rebateHistory: 'Historique commissions',
+    emptyRebateHistory: 'Aucune commission',
+    amountUsdt: 'Montant (USDT)',
+    loadMore: 'Charger plus',
+    loadingMore: 'Chargement…',
+    loadedAll: 'Tout chargé',
+    editModalTitle: 'Modifier taux',
+    perpRebateRate: 'Taux perpétuel %',
+    copyRebateRate: 'Taux copy %',
+    editTip: 'Modification instantanée',
+    perpRateError: '0–100 seulement',
+    copyRateError: '0–100 seulement',
+    setSuccess: 'Mis à jour',
+  },
+  help: {
+    title: 'Aide',
+    supportTitle: 'Support',
+    search: 'Rechercher',
+    searchPlaceholder: 'Rechercher un sujet',
+    telegramSupport: 'Telegram',
+    quickResponse: 'Réponse rapide',
+    emailSupport: 'Email',
+    docs: 'Docs',
+    viewFullGuide: 'Voir guide complet',
+    detailTitle: 'Détails',
+    backToHelp: 'Retour aide',
+  },
+  invite: {
+    title: 'Inviter des amis',
+    myCode: 'Mon code',
+    copy: 'Copier code',
+    copied: 'Code copié',
+    share: 'Partager lien',
+    shareLink: 'Copier lien',
+    linkCopied: 'Lien copié',
+    desc: 'Invitez des amis et gagnez des commissions',
+    totalInvited: 'Total invités',
+    totalReward: 'Récompenses totales',
+    noRecord: 'Aucune invitation',
+    heroLine1: 'Invitez des amis',
+    heroLine2: 'Gagnez des récompenses',
+    heroDesc: 'Gagnez une partie des frais de leurs trades',
+    myInviteInfo: 'Mes infos',
+    inviteCodeLabel: 'Code',
+    inviteLinkShort: 'Lien',
+    qrCodeLabel: 'QR code',
+    copyShort: 'Copier',
+    copiedDone: 'Copié ✓',
+    qrInviteAlt: 'QR invitation',
+    scanToRegister: 'Scanner pour s’inscrire',
+    rebateRulesTitle: 'Règles commissions',
+    step1Title: 'Partagez votre code',
+    step1Desc: 'Envoyez à vos amis',
+    step2Title: 'Inscription',
+    step2Desc: 'Vos amis s’inscrivent',
+    step3Title: 'Gagnez des commissions',
+    step3Desc: 'Sur leurs frais de trading',
+  },
+  futuresPage: futuresPageByLocale.fr,
+  spot: {
+    tag: 'Spot',
+    side: { buy: 'Achat', sell: 'Vente' },
+    orderType: { limit: 'Limit', market: 'Marché' },
+    orderStatus: {
+      pending: 'En attente',
+      partial: 'Partiellement exécuté',
+      filled: 'Exécuté',
+      cancelled: 'Annulé',
+      pending_cancel: 'Annulation en cours',
+      expired: 'Expiré',
+      init: 'Initialisation',
+    },
+    recordType: {
+      transferIn: 'Versement',
+      transferOut: 'Retrait',
+      orderFreeze: 'Blocage',
+      cancelUnfreeze: 'Déblocage',
+      trade: 'Trade',
+      fee: 'Frais',
+      unfreeze: 'Déblocage',
+      unknown: 'Type {type}',
+    },
+    tabs: {
+      currentOrders: 'Ordres en cours',
+      historyOrders: 'Historique ordres',
+      trades: 'Trades',
+      funding: 'Mouvements',
+    },
+    table: {
+      pair: 'Paire',
+      side: 'Sens',
+      type: 'Type',
+      price: 'Prix',
+      orderPrice: 'Prix limit',
+      amount: 'Montant',
+      orderAmount: 'Montant ordre',
+      filled: 'Exécuté',
+      status: 'Statut',
+      time: 'Heure',
+      action: 'Action',
+      dealPrice: 'Prix exécuté',
+      dealVolume: 'Volume',
+      turnover: 'Chiffre affaires',
+      recordType: 'Type',
+      quantity: 'Quantité',
+      coin: 'Coin',
+    },
+    trade: {
+      buy: 'Acheter',
+      sell: 'Vendre',
+      limit: 'Limit',
+      market: 'Marché',
+      processing: 'Traitement…',
+      buySymbol: 'Acheter {symbol}',
+      sellSymbol: 'Vendre {symbol}',
+      priceUsdt: 'Prix (USDT)',
+      limitPlaceholder: 'Prix limit',
+      marketHint: 'Meilleur prix du marché',
+      amountUsdt: 'Montant (USDT)',
+      amountBase: 'Montant ({base})',
+      available: 'Disponible',
+      transfer: 'Transfert',
+      loginForBalance: 'Connectez-vous pour voir le solde',
+      spotAssets: 'Actifs spot',
+    },
+    order: {
+      cancel: 'Annuler',
+      cancelAll: 'Tout annuler',
+    },
+    empty: {
+      loginLink: 'Connexion',
+      loginOrdersPrompt: '{link} pour voir les ordres',
+      loginViewPrompt: '{link} pour voir',
+      noOrders: 'Aucun ordre',
+      noHistoryOrders: 'Aucun historique',
+      noTrades: 'Aucun trade',
+      noFunding: 'Aucun mouvement',
+    },
+    errors: {
+      symbolNotReady: 'Paire non disponible',
+      invalidAmount: 'Montant invalide',
+      invalidPrice: 'Prix invalide',
+      minLimitVolume: 'Min {min}',
+      minMarketBuy: 'Min {min} USDT',
+      minMarketSell: 'Min {min}',
+      orderSubmitted: 'Ordre envoyé',
+      orderFailed: 'Échec ordre',
+      cancelSuccess: 'Annulé',
+      cancelFailed: 'Échec annulation',
+      cancelAllSuccess: 'Tout annulé',
+      cancelAllPartialFailed: 'Échec partiel',
+    },
+    loadedAll: 'Tout chargé',
+    ticker: {
+      change24h: 'Var 24h',
+      high24h: 'Haut 24h',
+      low24h: 'Bas 24h',
+      turnover24h: 'Volume 24h',
+    },
+    chartSub: { chart: 'Graphique', coinInfo: 'Infos coin' },
+    tf: { 
+		m1: '1m', 
+		m5: '5m', 
+		m15: '15m', 
+		m30: '30m', 
+		h1: '1h', 
+		h4: '4h', 
+		d1: '1d',
+		w1: '1w',
+		mo1: '1mon',
+		mo3: '3mon'
+    },
+    ohlcv: {
+      spotLabel: 'Spot',
+      open: 'Ouverture',
+      high: 'Haut',
+      low: 'Bas',
+      close: 'Fermeture',
+      volume: 'Volume',
+      changePct: 'Variation %',
+    },
+    draw: {
+      cursor: 'Curseur',
+      trend: 'Ligne tendance',
+      hline: 'Ligne horizontale',
+      ray: 'Rayon',
+      channel: 'Canal',
+      fib: 'Fibonacci',
+      text: 'Texte',
+      clearAll: 'Tout effacer',
+      zoomOut: 'Dézoomer',
+    },
+    mobileTab: { chart: 'Marché', trade: 'Trader' },
+    pair: {
+      search: 'Rechercher',
+      loading: 'Chargement…',
+      noMatch: 'Aucun résultat',
+      retryLater: ', réessayez plus tard',
+    },
+    book: {
+      waiting: 'En attente…',
+      orderbook: 'Carnet ordres',
+      trades: 'Derniers trades',
+      priceUsdt: 'Prix (USDT)',
+      amountBase: 'Montant ({base})',
+      total: 'Total',
+      buyRatio: 'Achat {n}%',
+      sellRatio: '{n}% Vente',
+      price: 'Prix',
+      amount: 'Montant',
+      time: 'Heure',
+      pricePrecision: 'Précision prix',
+    },
+    coinInfo: {
+      marketCap: 'Capitalisation',
+      circulating: 'Circulation',
+      issuePrice: 'Prix émission',
+      ath: 'ATH',
+      athDate: 'Date ATH',
+      whitepaper: 'Whitepaper',
+      empty: 'Aucune info',
+      reload: 'Recharger',
+    },
+    transferModal: {
+      title: 'Transfert',
+      selectCoin: 'Choisir coin',
+      amount: 'Montant',
+      amountPlaceholder: 'Saisissez le montant',
+      availableUsdt: 'Disponible :',
+      availableCoin: 'Disponible {coin} :',
+      transferring: 'Transfert…',
+      invalidAmount: 'Montant invalide',
+      insufficientBalance: 'Solde insuffisant',
+      transferFailed: 'Échec transfert',
+    },
+  }
+}

+ 1892 - 1451
code/src/locales/futuresPage.i18n.ts

@@ -3,1492 +3,1933 @@ import { koUiOverlay } from './futuresPage/overlays/ko'
 import { jaUiOverlay } from './futuresPage/overlays/ja'
 import { hiUiOverlay } from './futuresPage/overlays/hi'
 import { idUiOverlay } from './futuresPage/overlays/id'
+import { esUiOverlay } from './futuresPage/overlays/es'
+import { ruUiOverlay } from './futuresPage/overlays/ru'
+import { ptUiOverlay } from './futuresPage/overlays/pt'
+import { deUiOverlay } from './futuresPage/overlays/de'
+import { frUiOverlay } from './futuresPage/overlays/fr'
+import { trUiOverlay } from './futuresPage/overlays/tr'
+import { viUiOverlay } from './futuresPage/overlays/vi'
 
 /** 深度可选(用于各语言 overlay 局部覆盖) */
 export type DeepPartial<T> = {
-  [P in keyof T]?: T[P] extends Record<string, unknown> ? DeepPartial<T[P]> : T[P]
+	[P in keyof T]?: T[P] extends Record<string, unknown> ? DeepPartial<T[P]> : T[P]
 }
 
 /** 合约页(FuturesView)文案:供各语言入口复用,禁止在组件内硬编码用户可见中文。 */
 export type FuturesPageMessages = {
-  perpetual: string
-  /** 资金流水币种后缀,如 USDT + 永续 */
-  perpetualTag: string
-  pairSearchPlaceholder: string
-  pairEmpty: string
-  stats: {
-    change24h: string
-    markPrice: string
-    high24h: string
-    low24h: string
-    volume24h: string
-    fundingCountdown: string
-  }
-  mobileTabs: { chart: string; trade: string }
-  chartSub: { chart: string; coinInfo: string; fundingHistory: string }
-  tf: { m1: string; m5: string; m15: string; m30: string; h1: string; h4: string; d1: string }
-  chartTools: { fullscreen: string; alert: string }
-  draw: {
-    cursor: string
-    trend: string
-    hline: string
-    ray: string
-    channel: string
-    fib: string
-    text: string
-    clearAll: string
-    zoomOut: string
-  }
-  ohlcv: { open: string; high: string; low: string; close: string; volume: string; changePct: string; amplitude: string }
-  coinInfo: {
-    marketCap: string
-    circulating: string
-    issuePrice: string
-    ath: string
-    athDate: string
-    whitepaper: string
-    empty: string
-    reload: string
-  }
-  fundingPanel: {
-    rate: string
-    period: string
-    nextCountdown: string
-    noChart: string
-    settleTime: string
-    rateCol: string
-    empty7d: string
-  }
-  book: {
-    orderBook: string
-    trades: string
-    priceQuote: string
-    amountBase: string
-    totalBase: string
-    time: string
-    buy: string
-    sell: string
-    buyRatio: string
-    sellRatio: string
-    noTrades: string
-  }
-  margin: { cross: string; split: string; experience: string }
-  amountUnit: { lots: string; usdt: string }
-  leverage: { adjustTitle: string }
-  order: {
-    limit: string
-    market: string
-    conditional: string
-    condMarket: string
-    condLimit: string
-    available: string
-    maxOpen: string
-    triggerPriceLabel: string
-    priceLabel: string
-    latestBtn: string
-    marketExe: string
-    condMarketExe: string
-    qtyLabel: string
-    transferTitle: string
-    openLong: string
-    openShort: string
-    contractInfoTitle: string
-    indexSource: string
-    marginCoin: string
-    maxLeverage: string
-    maintMargin: string
-    openFee: string
-    closeFee: string
-    contractValue: string
-    minOrder: string
-    maxOrder: string
-  }
-  placeholders: {
-    searchPair: string
-    triggerPrice: string
-    price: string
-    amount: string
-  }
-    bottom: {
-      positions: string
-      openOrders: string
-      historyOrders: string
-      historyPositions: string
-      tradeDetails: string
-      fundingFlow: string
-      assets: string
-      closeAllPositions: string
-      cancelAllOrders: string
-      loginPromptOr: string
-      registerNow: string
-      startTrading: string
-    }
-  table: {
-    contract: string
-    dirLeverage: string
-    openPrice: string
-    markPrice: string
-    positionSize: string
-    margin: string
-    marginRate: string
-    unrealizedPnl: string
-    roe: string
-    liqPrice: string
-    openTime: string
-    action: string
-    type: string
-    orderPrice: string
-    entrustPriceHist: string
-    triggerPrice: string
-    orderAmt: string
-    filled: string
-    tpPrice: string
-    slPrice: string
-    time: string
-    orderTime: string
-    fillTime: string
-    profitUsdt: string
-    tradedVol: string
-    closeAvg: string
-    profitRate: string
-    closeTime: string
-    directionOpenClose: string
-    dealPrice: string
-    fee: string
-    fundType: string
-    amount: string
-    coin: string
-    settlementTime: string
-    fundingRate: string
-    totalBal: string
-    availMargin: string
-    usedMargin: string
-    unrealized: string
-    spotWalletBal: string
-    fundTransfer: string
-    avgOpenPrice: string
-    feeHint: string
-    estimatedPnlRow: string
-    triggerUsdt: string
-    orderPriceUsdt: string
-    openAvgUsdt: string
-    closeAvgUsdt: string
-    tpUsdt: string
-    slUsdt: string
-    marginUsdtBracket: string
-    notionalUsdt: string
-    estLiqPx: string
-    profitBracketUsdt: string
-    entrustVolCoin: string
-    filledVolCoin: string
-    closeAvail: string
-    markPriceBtn: string
-  }
-  empty: {
-    noPositions: string
-    noOrders: string
-    noHistPositions: string
-    noHistOrders: string
-    noTradeRecords: string
-    noFunding: string
-  }
-  modal: {
-    confirmDefaultTitle: string
-    positionDetailTitle: string
-    orderDetailTitle: string
-    histPositionDetailTitle: string
-    histOrderDetailTitle: string
-    closePositionTitlePrefix: string
-    modifyTpSl: string
-    setTpSl: string
-    posQtyLabel: string
-    currentTpSlSection: string
-    modifyToSection: string
-    setPricesSection: string
-    tpTriggerLabel: string
-    tpHintOptionalClear: string
-    slTriggerLabel: string
-    slHintOptionalClear: string
-    placeholderTpTrigger: string
-    placeholderSlTrigger: string
-    confirmCloseBtn: string
-    ok: string
-    closeTypeLiquidation: string
-    tpBadge: string
-    slBadge: string
-    tpPriceWord: string
-    slPriceWord: string
-    volLabel: string
-    marginSplitMode: string
-    directionLabel: string
-    entrustTypeLabel: string
-    leverageLabel: string
-  }
-  actions: {
-    tpSl: string
-    reverse: string
-    close: string
-    marketCloseAll: string
-    cancelOrder: string
-  }
-  positionRow: {
-    hintCross: string
-    hintExperience: string
-  }
-  errors: {
-    enterTriggerPrice: string
-    enterPrice: string
-    priceNotReadyConvert: string
-    invalidQtyCheckMin: string
-    priceNotReadyRetry: string
-    enterQty: string
-    qtyExceedAvail: string
-    closeFailed: string
-    modifyTpSlFailed: string
-    txFallback: string
-  }
-  confirm: {
-    reverseTitle: string
-    reverseBody: string
-    cancelAllTitle: string
-    cancelAllBody: string
-    closeAllTitle: string
-    closeAllBody: string
-    sideLongWord: string
-    sideShortWord: string
-  }
-  directions: {
-    long: string
-    short: string
-    openLong: string
-    openShort: string
-    closeShort: string
-    closeLong: string
-    openTag: string
-    closeTag: string
-  }
-  orderTypes: {
-    limit: string
-    plan: string
-    takeProfit: string
-    stopLoss: string
-    marketShort: string
-  }
-  orderStatus: {
-    filled: string
-    open: string
-    cancelled: string
-    failed: string
-  }
-  closeTypes: {
-    market: string
-    oneClick: string
-    reverseOpen: string
-    tpSl: string
-    liquidation: string
-    admin: string
-  }
-  fundingTx: Record<string, string>
+	perpetual : string
+	/** 资金流水币种后缀,如 USDT + 永续 */
+	perpetualTag : string
+	pairSearchPlaceholder : string
+	pairSearchTag:{
+		oneType: string,
+		twoType: string,
+		threeType: string,
+		fourType: string,
+	},
+	pairEmpty : string
+	stats : {
+		change24h : string
+		markPrice : string
+		high24h : string
+		low24h : string
+		volume24h : string
+		fundingCountdown : string
+	}
+	mobileTabs : { chart : string; trade : string }
+	chartSub : { chart : string; coinInfo : string; fundingHistory : string }
+	tf : { m1 : string; m5 : string; m15 : string; m30 : string; h1 : string; h4 : string; d1 : string, w1 : string, mo1 : string, mo3 : string }
+	chartTools : { fullscreen : string; alert : string }
+	draw : {
+		cursor : string
+		trend : string
+		hline : string
+		ray : string
+		channel : string
+		fib : string
+		text : string
+		clearAll : string
+		zoomOut : string
+	}
+	ohlcv : { open : string; high : string; low : string; close : string; volume : string; changePct : string; amplitude : string }
+	coinInfo : {
+		marketCap : string
+		circulating : string
+		issuePrice : string
+		ath : string
+		athDate : string
+		whitepaper : string
+		empty : string
+		reload : string
+	}
+	fundingPanel : {
+		rate : string
+		period : string
+		nextCountdown : string
+		noChart : string
+		settleTime : string
+		rateCol : string
+		empty7d : string
+	}
+	book : {
+		orderBook : string
+		trades : string
+		priceQuote : string
+		amountBase : string
+		totalBase : string
+		time : string
+		buy : string
+		sell : string
+		buyRatio : string
+		sellRatio : string
+		noTrades : string
+	}
+	margin : { cross : string; split : string; experience : string }
+	amountUnit : { lots : string; usdt : string }
+	leverage : { adjustTitle : string }
+	order : {
+		limit : string
+		market : string
+		conditional : string
+		condMarket : string
+		condLimit : string
+		available : string
+		maxOpen : string
+		triggerPriceLabel : string
+		priceLabel : string
+		latestBtn : string
+		marketExe : string
+		condMarketExe : string
+		qtyLabel : string
+		transferTitle : string
+		openLong : string
+		openShort : string
+		contractInfoTitle : string
+		indexSource : string
+		marginCoin : string
+		maxLeverage : string
+		maintMargin : string
+		openFee : string
+		closeFee : string
+		contractValue : string
+		minOrder : string
+		maxOrder : string
+	}
+	placeholders : {
+		searchPair : string
+		triggerPrice : string
+		price : string
+		amount : string
+	}
+	bottom : {
+		positions : string
+		openOrders : string
+		historyOrders : string
+		historyPositions : string
+		tradeDetails : string
+		fundingFlow : string
+		assets : string
+		closeAllPositions : string
+		cancelAllOrders : string
+		loginPromptOr : string
+		registerNow : string
+		startTrading : string
+	}
+	table : {
+		contract : string
+		dirLeverage : string
+		openPrice : string
+		markPrice : string
+		positionSize : string
+		margin : string
+		marginRate : string
+		unrealizedPnl : string
+		roe : string
+		liqPrice : string
+		openTime : string
+		action : string
+		type : string
+		orderPrice : string
+		entrustPriceHist : string
+		triggerPrice : string
+		orderAmt : string
+		filled : string
+		tpPrice : string
+		slPrice : string
+		time : string
+		orderTime : string
+		fillTime : string
+		profitUsdt : string
+		tradedVol : string
+		closeAvg : string
+		profitRate : string
+		closeTime : string
+		directionOpenClose : string
+		dealPrice : string
+		fee : string
+		fundType : string
+		amount : string
+		coin : string
+		settlementTime : string
+		fundingRate : string
+		totalBal : string
+		availMargin : string
+		usedMargin : string
+		unrealized : string
+		spotWalletBal : string
+		fundTransfer : string
+		avgOpenPrice : string
+		feeHint : string
+		estimatedPnlRow : string
+		triggerUsdt : string
+		orderPriceUsdt : string
+		openAvgUsdt : string
+		closeAvgUsdt : string
+		tpUsdt : string
+		slUsdt : string
+		marginUsdtBracket : string
+		notionalUsdt : string
+		estLiqPx : string
+		profitBracketUsdt : string
+		entrustVolCoin : string
+		filledVolCoin : string
+		closeAvail : string
+		markPriceBtn : string
+	}
+	empty : {
+		noPositions : string
+		noOrders : string
+		noHistPositions : string
+		noHistOrders : string
+		noTradeRecords : string
+		noFunding : string
+	}
+	modal : {
+		confirmDefaultTitle : string
+		positionDetailTitle : string
+		orderDetailTitle : string
+		histPositionDetailTitle : string
+		histOrderDetailTitle : string
+		closePositionTitlePrefix : string
+		modifyTpSl : string
+		setTpSl : string
+		posQtyLabel : string
+		currentTpSlSection : string
+		modifyToSection : string
+		setPricesSection : string
+		tpTriggerLabel : string
+		tpHintOptionalClear : string
+		slTriggerLabel : string
+		slHintOptionalClear : string
+		placeholderTpTrigger : string
+		placeholderSlTrigger : string
+		confirmCloseBtn : string
+		ok : string
+		closeTypeLiquidation : string
+		tpBadge : string
+		slBadge : string
+		tpPriceWord : string
+		slPriceWord : string
+		volLabel : string
+		marginSplitMode : string
+		directionLabel : string
+		entrustTypeLabel : string
+		leverageLabel : string
+	}
+	actions : {
+		tpSl : string
+		reverse : string
+		close : string
+		marketCloseAll : string
+		cancelOrder : string
+	}
+	positionRow : {
+		hintCross : string
+		hintExperience : string
+	}
+	errors : {
+		enterTriggerPrice : string
+		enterPrice : string
+		priceNotReadyConvert : string
+		invalidQtyCheckMin : string
+		priceNotReadyRetry : string
+		enterQty : string
+		qtyExceedAvail : string
+		closeFailed : string
+		modifyTpSlFailed : string
+		txFallback : string
+	}
+	confirm : {
+		reverseTitle : string
+		reverseBody : string
+		cancelAllTitle : string
+		cancelAllBody : string
+		closeAllTitle : string
+		closeAllBody : string
+		sideLongWord : string
+		sideShortWord : string
+	}
+	directions : {
+		long : string
+		short : string
+		openLong : string
+		openShort : string
+		closeShort : string
+		closeLong : string
+		openTag : string
+		closeTag : string
+	}
+	orderTypes : {
+		limit : string
+		plan : string
+		takeProfit : string
+		stopLoss : string
+		marketShort : string
+	}
+	orderStatus : {
+		filled : string
+		open : string
+		cancelled : string
+		failed : string
+	}
+	closeTypes : {
+		market : string
+		oneClick : string
+		reverseOpen : string
+		tpSl : string
+		liquidation : string
+		admin : string
+	}
+	fundingTx : Record<string, string>
 }
 
-const fundingTxZh: Record<string, string> = {
-  '0': '充值',
-  '1': '提现',
-  '2': '转账',
-  '3': '币币交易',
-  '4': '法币买入',
-  '5': '法币卖出',
-  '6': '签到奖励',
-  '7': '推广奖励',
-  '8': '合约跟单奖励',
-  '9': '投票',
-  '10': '人工充值',
-  '11': '配对',
-  '12': '交易奖励',
-  '13': 'CTC买入',
-  '14': 'CTC卖出',
-  '15': '红包发出',
-  '16': '红包领取',
-  '17': '提现码提现',
-  '18': '提现码充值',
-  '19': '永续合约手续费',
-  '20': '永续合约盈利',
-  '21': '永续合约亏损',
-  '22': '期权合约失败',
-  '23': '期权合约手续费',
-  '24': '期权合约奖金',
-  '25': '合约返佣',
-  '26': '合约资金费率',
-  '27': '永续合约爆仓',
-  '28': '活动手续费',
-  '29': '活动盈利',
-  '30': '活动亏损',
-  '31': '活动返佣',
-  '32': '平级奖励',
-  '33': '平台手续费收入',
-  '34': '秒合约失败',
-  '35': '秒合约奖金',
-  '36': '理财利息',
-  '37': '合约跟单手续费',
-  '38': '合约跟单盈利',
-  '39': '合约跟单亏损',
-  '40': '合约跟单分润',
-  '41': '合约跟单返佣',
-  '42': '跟单资金费率',
-  '47': '体验金提现',
-  '49': '质押',
-  '50': '质押解冻释放',
-  '51': '空投奖励',
-  '52': '划入质押钱包',
-  '53': '质押钱包划出',
+const fundingTxZh : Record<string, string> = {
+	'0': '充值',
+	'1': '提现',
+	'2': '转账',
+	'3': '币币交易',
+	'4': '法币买入',
+	'5': '法币卖出',
+	'6': '签到奖励',
+	'7': '推广奖励',
+	'8': '合约跟单奖励',
+	'9': '投票',
+	'10': '人工充值',
+	'11': '配对',
+	'12': '交易奖励',
+	'13': 'CTC买入',
+	'14': 'CTC卖出',
+	'15': '红包发出',
+	'16': '红包领取',
+	'17': '提现码提现',
+	'18': '提现码充值',
+	'19': '永续合约手续费',
+	'20': '永续合约盈利',
+	'21': '永续合约亏损',
+	'22': '期权合约失败',
+	'23': '期权合约手续费',
+	'24': '期权合约奖金',
+	'25': '合约返佣',
+	'26': '合约资金费率',
+	'27': '永续合约爆仓',
+	'28': '活动手续费',
+	'29': '活动盈利',
+	'30': '活动亏损',
+	'31': '活动返佣',
+	'32': '平级奖励',
+	'33': '平台手续费收入',
+	'34': '秒合约失败',
+	'35': '秒合约奖金',
+	'36': '理财利息',
+	'37': '合约跟单手续费',
+	'38': '合约跟单盈利',
+	'39': '合约跟单亏损',
+	'40': '合约跟单分润',
+	'41': '合约跟单返佣',
+	'42': '跟单资金费率',
+	'47': '体验金提现',
+	'49': '质押',
+	'50': '质押解冻释放',
+	'51': '空投奖励',
+	'52': '划入质押钱包',
+	'53': '质押钱包划出',
 }
 
-const fundingTxEn: Record<string, string> = {
-  '0': 'Deposit',
-  '1': 'Withdrawal',
-  '2': 'Transfer',
-  '3': 'Spot trade',
-  '4': 'Fiat buy',
-  '5': 'Fiat sell',
-  '6': 'Check-in reward',
-  '7': 'Referral reward',
-  '8': 'Copy-trading reward',
-  '9': 'Vote',
-  '10': 'Manual deposit',
-  '11': 'Pairing',
-  '12': 'Trading reward',
-  '13': 'CTC buy',
-  '14': 'CTC sell',
-  '15': 'Red packet sent',
-  '16': 'Red packet received',
-  '17': 'Withdrawal code payout',
-  '18': 'Withdrawal code deposit',
-  '19': 'Perp trading fee',
-  '20': 'Perp profit',
-  '21': 'Perp loss',
-  '22': 'Option failure',
-  '23': 'Option fee',
-  '24': 'Option bonus',
-  '25': 'Contract rebate',
-  '26': 'Funding fee',
-  '27': 'Perp liquidation',
-  '28': 'Campaign fee',
-  '29': 'Campaign profit',
-  '30': 'Campaign loss',
-  '31': 'Campaign rebate',
-  '32': 'Peer reward',
-  '33': 'Platform fee income',
-  '34': 'Quick contract failure',
-  '35': 'Quick contract bonus',
-  '36': 'Wealth interest',
-  '37': 'Copy-trading fee',
-  '38': 'Copy-trading profit',
-  '39': 'Copy-trading loss',
-  '40': 'Copy-trading profit share',
-  '41': 'Copy-trading rebate',
-  '42': 'Copy funding fee',
-  '47': 'Bonus withdrawal',
-  '49': 'Staking',
-  '50': 'Staking unlock release',
-  '51': 'Airdrop reward',
-  '52': 'Transfer to staking wallet',
-  '53': 'Transfer from staking wallet',
+const fundingTxEn : Record<string, string> = {
+	'0': 'Deposit',
+	'1': 'Withdrawal',
+	'2': 'Transfer',
+	'3': 'Spot trade',
+	'4': 'Fiat buy',
+	'5': 'Fiat sell',
+	'6': 'Check-in reward',
+	'7': 'Referral reward',
+	'8': 'Copy-trading reward',
+	'9': 'Vote',
+	'10': 'Manual deposit',
+	'11': 'Pairing',
+	'12': 'Trading reward',
+	'13': 'CTC buy',
+	'14': 'CTC sell',
+	'15': 'Red packet sent',
+	'16': 'Red packet received',
+	'17': 'Withdrawal code payout',
+	'18': 'Withdrawal code deposit',
+	'19': 'Perp trading fee',
+	'20': 'Perp profit',
+	'21': 'Perp loss',
+	'22': 'Option failure',
+	'23': 'Option fee',
+	'24': 'Option bonus',
+	'25': 'Contract rebate',
+	'26': 'Funding fee',
+	'27': 'Perp liquidation',
+	'28': 'Campaign fee',
+	'29': 'Campaign profit',
+	'30': 'Campaign loss',
+	'31': 'Campaign rebate',
+	'32': 'Peer reward',
+	'33': 'Platform fee income',
+	'34': 'Quick contract failure',
+	'35': 'Quick contract bonus',
+	'36': 'Wealth interest',
+	'37': 'Copy-trading fee',
+	'38': 'Copy-trading profit',
+	'39': 'Copy-trading loss',
+	'40': 'Copy-trading profit share',
+	'41': 'Copy-trading rebate',
+	'42': 'Copy funding fee',
+	'47': 'Bonus withdrawal',
+	'49': 'Staking',
+	'50': 'Staking unlock release',
+	'51': 'Airdrop reward',
+	'52': 'Transfer to staking wallet',
+	'53': 'Transfer from staking wallet',
 }
 
-const fundingTw: Record<string, string> = {
-  '0': '儲值',
-  '1': '提現',
-  '2': '轉帳',
-  '3': '幣幣交易',
-  '4': '法幣買入',
-  '5': '法幣賣出',
-  '6': '簽到獎勵',
-  '7': '推廣獎勵',
-  '8': '合約跟單獎勵',
-  '9': '投票',
-  '10': '人工儲值',
-  '11': '配對',
-  '12': '交易獎勵',
-  '13': 'CTC買入',
-  '14': 'CTC賣出',
-  '15': '紅包發出',
-  '16': '紅包領取',
-  '17': '提現碼提現',
-  '18': '提現碼充值',
-  '19': '永續合約手續費',
-  '20': '永續合約盈利',
-  '21': '永續合約虧損',
-  '22': '選擇權合約失敗',
-  '23': '選擇權合約手續費',
-  '24': '選擇權合約獎金',
-  '25': '合約返佣',
-  '26': '合約資金費率',
-  '27': '永續合約爆倉',
-  '28': '活動手續費',
-  '29': '活動盈利',
-  '30': '活動虧損',
-  '31': '活動返佣',
-  '32': '平級獎勵',
-  '33': '平台手續費收入',
-  '34': '秒合約失敗',
-  '35': '秒合約獎金',
-  '36': '理財利息',
-  '37': '合約跟單手續費',
-  '38': '合約跟單盈利',
-  '39': '合約跟單虧損',
-  '40': '合約跟單分潤',
-  '41': '合約跟單返佣',
-  '42': '跟單資金費率',
-  '47': '體驗金提現',
-  '49': '質押',
-  '50': '質押解凍釋放',
-  '51': '空投獎勵',
-  '52': '劃入質押錢包',
-  '53': '質押錢包劃出',
+const fundingTw : Record<string, string> = {
+	'0': '儲值',
+	'1': '提現',
+	'2': '轉帳',
+	'3': '幣幣交易',
+	'4': '法幣買入',
+	'5': '法幣賣出',
+	'6': '簽到獎勵',
+	'7': '推廣獎勵',
+	'8': '合約跟單獎勵',
+	'9': '投票',
+	'10': '人工儲值',
+	'11': '配對',
+	'12': '交易獎勵',
+	'13': 'CTC買入',
+	'14': 'CTC賣出',
+	'15': '紅包發出',
+	'16': '紅包領取',
+	'17': '提現碼提現',
+	'18': '提現碼充值',
+	'19': '永續合約手續費',
+	'20': '永續合約盈利',
+	'21': '永續合約虧損',
+	'22': '選擇權合約失敗',
+	'23': '選擇權合約手續費',
+	'24': '選擇權合約獎金',
+	'25': '合約返佣',
+	'26': '合約資金費率',
+	'27': '永續合約爆倉',
+	'28': '活動手續費',
+	'29': '活動盈利',
+	'30': '活動虧損',
+	'31': '活動返佣',
+	'32': '平級獎勵',
+	'33': '平台手續費收入',
+	'34': '秒合約失敗',
+	'35': '秒合約獎金',
+	'36': '理財利息',
+	'37': '合約跟單手續費',
+	'38': '合約跟單盈利',
+	'39': '合約跟單虧損',
+	'40': '合約跟單分潤',
+	'41': '合約跟單返佣',
+	'42': '跟單資金費率',
+	'47': '體驗金提現',
+	'49': '質押',
+	'50': '質押解凍釋放',
+	'51': '空投獎勵',
+	'52': '劃入質押錢包',
+	'53': '質押錢包劃出',
 }
 
-const fundingTxKo: Record<string, string> = {
-  '0': '입금',
-  '1': '출금',
-  '2': '이체',
-  '3': '현물 거래',
-  '4': '법정화폐 매수',
-  '5': '법정화폐 매도',
-  '6': '출석 보상',
-  '7': '추천 보상',
-  '8': '카피 트레이딩 보상',
-  '9': '투표',
-  '10': '수동 입금',
-  '11': '페어링',
-  '12': '거래 보상',
-  '13': 'CTC 매수',
-  '14': 'CTC 매도',
-  '15': '홍바오 발송',
-  '16': '홍바오 수령',
-  '17': '출금 코드 출금',
-  '18': '출금 코드 입금',
-  '19': '영구 계약 수수료',
-  '20': '영구 계약 수익',
-  '21': '영구 계약 손실',
-  '22': '옵션 실패',
-  '23': '옵션 수수료',
-  '24': '옵션 보너스',
-  '25': '계약 리베이트',
-  '26': '펀딩비',
-  '27': '영구 계약 청산',
-  '28': '이벤트 수수료',
-  '29': '이벤트 수익',
-  '30': '이벤트 손실',
-  '31': '이벤트 리베이트',
-  '32': '동급 보상',
-  '33': '플랫폼 수수료 수입',
-  '34': '초단기 계약 실패',
-  '35': '초단기 계약 보너스',
-  '36': '재테크 이자',
-  '37': '카피 트레이딩 수수료',
-  '38': '카피 트레이딩 수익',
-  '39': '카피 트레이딩 손실',
-  '40': '카피 트레이딩 분배',
-  '41': '카피 트레이딩 리베이트',
-  '42': '카피 펀딩비',
-  '47': '체험금 출금',
-  '49': '스테이킹',
-  '50': '스테이킹 잠금 해제',
-  '51': '에어드롭 보상',
-  '52': '스테이킹 지갑 입금',
-  '53': '스테이킹 지갑 출금',
+const fundingTxKo : Record<string, string> = {
+	'0': '입금',
+	'1': '출금',
+	'2': '이체',
+	'3': '현물 거래',
+	'4': '법정화폐 매수',
+	'5': '법정화폐 매도',
+	'6': '출석 보상',
+	'7': '추천 보상',
+	'8': '카피 트레이딩 보상',
+	'9': '투표',
+	'10': '수동 입금',
+	'11': '페어링',
+	'12': '거래 보상',
+	'13': 'CTC 매수',
+	'14': 'CTC 매도',
+	'15': '홍바오 발송',
+	'16': '홍바오 수령',
+	'17': '출금 코드 출금',
+	'18': '출금 코드 입금',
+	'19': '영구 계약 수수료',
+	'20': '영구 계약 수익',
+	'21': '영구 계약 손실',
+	'22': '옵션 실패',
+	'23': '옵션 수수료',
+	'24': '옵션 보너스',
+	'25': '계약 리베이트',
+	'26': '펀딩비',
+	'27': '영구 계약 청산',
+	'28': '이벤트 수수료',
+	'29': '이벤트 수익',
+	'30': '이벤트 손실',
+	'31': '이벤트 리베이트',
+	'32': '동급 보상',
+	'33': '플랫폼 수수료 수입',
+	'34': '초단기 계약 실패',
+	'35': '초단기 계약 보너스',
+	'36': '재테크 이자',
+	'37': '카피 트레이딩 수수료',
+	'38': '카피 트레이딩 수익',
+	'39': '카피 트레이딩 손실',
+	'40': '카피 트레이딩 분배',
+	'41': '카피 트레이딩 리베이트',
+	'42': '카피 펀딩비',
+	'47': '체험금 출금',
+	'49': '스테이킹',
+	'50': '스테이킹 잠금 해제',
+	'51': '에어드롭 보상',
+	'52': '스테이킹 지갑 입금',
+	'53': '스테이킹 지갑 출금',
 }
 
-const fundingTxJa: Record<string, string> = {
-  '0': '入金',
-  '1': '出金',
-  '2': '振替',
-  '3': '現物取引',
-  '4': '法定通貨購入',
-  '5': '法定通貨売却',
-  '6': 'チェックイン報酬',
-  '7': '紹介報酬',
-  '8': 'コピートレード報酬',
-  '9': '投票',
-  '10': '手動入金',
-  '11': 'ペアリング',
-  '12': '取引報酬',
-  '13': 'CTC購入',
-  '14': 'CTC売却',
-  '15': 'お年玉送信',
-  '16': 'お年玉受取',
-  '17': '出金コード出金',
-  '18': '出金コード入金',
-  '19': '無期限契約手数料',
-  '20': '無期限契約利益',
-  '21': '無期限契約損失',
-  '22': 'オプション失敗',
-  '23': 'オプション手数料',
-  '24': 'オプションボーナス',
-  '25': '契約リベート',
-  '26': '資金調達率',
-  '27': '無期限契約強制決済',
-  '28': 'キャンペーン手数料',
-  '29': 'キャンペーン利益',
-  '30': 'キャンペーン損失',
-  '31': 'キャンペーンリベート',
-  '32': '同級報酬',
-  '33': 'プラットフォーム手数料収入',
-  '34': '秒契約失敗',
-  '35': '秒契約ボーナス',
-  '36': '運用利息',
-  '37': 'コピートレード手数料',
-  '38': 'コピートレード利益',
-  '39': 'コピートレード損失',
-  '40': 'コピートレード分配',
-  '41': 'コピートレードリベート',
-  '42': 'コピー資金調達率',
-  '47': '体験金出金',
-  '49': 'ステーキング',
-  '50': 'ステーキング解除',
-  '51': 'エアドロップ報酬',
-  '52': 'ステーキングウォレット入金',
-  '53': 'ステーキングウォレット出金',
+const fundingTxJa : Record<string, string> = {
+	'0': '入金',
+	'1': '出金',
+	'2': '振替',
+	'3': '現物取引',
+	'4': '法定通貨購入',
+	'5': '法定通貨売却',
+	'6': 'チェックイン報酬',
+	'7': '紹介報酬',
+	'8': 'コピートレード報酬',
+	'9': '投票',
+	'10': '手動入金',
+	'11': 'ペアリング',
+	'12': '取引報酬',
+	'13': 'CTC購入',
+	'14': 'CTC売却',
+	'15': 'お年玉送信',
+	'16': 'お年玉受取',
+	'17': '出金コード出金',
+	'18': '出金コード入金',
+	'19': '無期限契約手数料',
+	'20': '無期限契約利益',
+	'21': '無期限契約損失',
+	'22': 'オプション失敗',
+	'23': 'オプション手数料',
+	'24': 'オプションボーナス',
+	'25': '契約リベート',
+	'26': '資金調達率',
+	'27': '無期限契約強制決済',
+	'28': 'キャンペーン手数料',
+	'29': 'キャンペーン利益',
+	'30': 'キャンペーン損失',
+	'31': 'キャンペーンリベート',
+	'32': '同級報酬',
+	'33': 'プラットフォーム手数料収入',
+	'34': '秒契約失敗',
+	'35': '秒契約ボーナス',
+	'36': '運用利息',
+	'37': 'コピートレード手数料',
+	'38': 'コピートレード利益',
+	'39': 'コピートレード損失',
+	'40': 'コピートレード分配',
+	'41': 'コピートレードリベート',
+	'42': 'コピー資金調達率',
+	'47': '体験金出金',
+	'49': 'ステーキング',
+	'50': 'ステーキング解除',
+	'51': 'エアドロップ報酬',
+	'52': 'ステーキングウォレット入金',
+	'53': 'ステーキングウォレット出金',
 }
 
-const fundingTxHi: Record<string, string> = {
-  '0': 'जमा',
-  '1': 'निकासी',
-  '2': 'ट्रांसफर',
-  '3': 'स्पॉट ट्रेड',
-  '4': 'फिएट खरीद',
-  '5': 'फिएट बिक्री',
-  '6': 'चेक-इन इनाम',
-  '7': 'रेफरल इनाम',
-  '8': 'कॉपी ट्रेडिंग इनाम',
-  '9': 'वोट',
-  '10': 'मैन्युअल जमा',
-  '11': 'पेयरिंग',
-  '12': 'ट्रेडिंग इनाम',
-  '13': 'CTC खरीद',
-  '14': 'CTC बिक्री',
-  '15': 'रेड पैकेट भेजा',
-  '16': 'रेड पैकेट प्राप्त',
-  '17': 'निकासी कोड भुगतान',
-  '18': 'निकासी कोड जमा',
-  '19': 'परपेचुअल ट्रेडिंग शुल्क',
-  '20': 'परपेचुअल लाभ',
-  '21': 'परपेचुअल हानि',
-  '22': 'ऑप्शन विफल',
-  '23': 'ऑप्शन शुल्क',
-  '24': 'ऑप्शन बोनस',
-  '25': 'कॉन्ट्रैक्ट रिबेट',
-  '26': 'फंडिंग शुल्क',
-  '27': 'परपेचुअल लिक्विडेशन',
-  '28': 'अभियान शुल्क',
-  '29': 'अभियान लाभ',
-  '30': 'अभियान हानि',
-  '31': 'अभियान रिबेट',
-  '32': 'सहकर्मी इनाम',
-  '33': 'प्लेटफॉर्म शुल्क आय',
-  '34': 'त्वरित कॉन्ट्रैक्ट विफल',
-  '35': 'त्वरित कॉन्ट्रैक्ट बोनस',
-  '36': 'वेल्थ ब्याज',
-  '37': 'कॉपी ट्रेडिंग शुल्क',
-  '38': 'कॉपी ट्रेडिंग लाभ',
-  '39': 'कॉपी ट्रेडिंग हानि',
-  '40': 'कॉपी ट्रेडिंग लाभांश',
-  '41': 'कॉपी ट्रेडिंग रिबेट',
-  '42': 'कॉपी फंडिंग शुल्क',
-  '47': 'बोनस निकासी',
-  '49': 'स्टेकिंग',
-  '50': 'स्टेकिंग अनलॉक रिलीज',
-  '51': 'एयरड्रॉप इनाम',
-  '52': 'स्टेकिंग वॉलेट में ट्रांसफर',
-  '53': 'स्टेकिंग वॉलेट से ट्रांसफर',
+const fundingTxHi : Record<string, string> = {
+	'0': 'जमा',
+	'1': 'निकासी',
+	'2': 'ट्रांसफर',
+	'3': 'स्पॉट ट्रेड',
+	'4': 'फिएट खरीद',
+	'5': 'फिएट बिक्री',
+	'6': 'चेक-इन इनाम',
+	'7': 'रेफरल इनाम',
+	'8': 'कॉपी ट्रेडिंग इनाम',
+	'9': 'वोट',
+	'10': 'मैन्युअल जमा',
+	'11': 'पेयरिंग',
+	'12': 'ट्रेडिंग इनाम',
+	'13': 'CTC खरीद',
+	'14': 'CTC बिक्री',
+	'15': 'रेड पैकेट भेजा',
+	'16': 'रेड पैकेट प्राप्त',
+	'17': 'निकासी कोड भुगतान',
+	'18': 'निकासी कोड जमा',
+	'19': 'परपेचुअल ट्रेडिंग शुल्क',
+	'20': 'परपेचुअल लाभ',
+	'21': 'परपेचुअल हानि',
+	'22': 'ऑप्शन विफल',
+	'23': 'ऑप्शन शुल्क',
+	'24': 'ऑप्शन बोनस',
+	'25': 'कॉन्ट्रैक्ट रिबेट',
+	'26': 'फंडिंग शुल्क',
+	'27': 'परपेचुअल लिक्विडेशन',
+	'28': 'अभियान शुल्क',
+	'29': 'अभियान लाभ',
+	'30': 'अभियान हानि',
+	'31': 'अभियान रिबेट',
+	'32': 'सहकर्मी इनाम',
+	'33': 'प्लेटफॉर्म शुल्क आय',
+	'34': 'त्वरित कॉन्ट्रैक्ट विफल',
+	'35': 'त्वरित कॉन्ट्रैक्ट बोनस',
+	'36': 'वेल्थ ब्याज',
+	'37': 'कॉपी ट्रेडिंग शुल्क',
+	'38': 'कॉपी ट्रेडिंग लाभ',
+	'39': 'कॉपी ट्रेडिंग हानि',
+	'40': 'कॉपी ट्रेडिंग लाभांश',
+	'41': 'कॉपी ट्रेडिंग रिबेट',
+	'42': 'कॉपी फंडिंग शुल्क',
+	'47': 'बोनस निकासी',
+	'49': 'स्टेकिंग',
+	'50': 'स्टेकिंग अनलॉक रिलीज',
+	'51': 'एयरड्रॉप इनाम',
+	'52': 'स्टेकिंग वॉलेट में ट्रांसफर',
+	'53': 'स्टेकिंग वॉलेट से ट्रांसफर',
 }
 
-const fundingTxId: Record<string, string> = {
-  '0': 'Deposit',
-  '1': 'Penarikan',
-  '2': 'Transfer',
-  '3': 'Perdagangan spot',
-  '4': 'Beli fiat',
-  '5': 'Jual fiat',
-  '6': 'Hadiah check-in',
-  '7': 'Hadiah referral',
-  '8': 'Hadiah copy trading',
-  '9': 'Voting',
-  '10': 'Deposit manual',
-  '11': 'Pairing',
-  '12': 'Hadiah trading',
-  '13': 'Beli CTC',
-  '14': 'Jual CTC',
-  '15': 'Angpao terkirim',
-  '16': 'Angpao diterima',
-  '17': 'Penarikan kode',
-  '18': 'Deposit kode',
-  '19': 'Biaya perdagangan perpetual',
-  '20': 'Laba perpetual',
-  '21': 'Rugi perpetual',
-  '22': 'Opsi gagal',
-  '23': 'Biaya opsi',
-  '24': 'Bonus opsi',
-  '25': 'Rebate kontrak',
-  '26': 'Biaya funding',
-  '27': 'Likuidasi perpetual',
-  '28': 'Biaya kampanye',
-  '29': 'Laba kampanye',
-  '30': 'Rugi kampanye',
-  '31': 'Rebate kampanye',
-  '32': 'Hadiah sejawat',
-  '33': 'Pendapatan biaya platform',
-  '34': 'Kontrak cepat gagal',
-  '35': 'Bonus kontrak cepat',
-  '36': 'Bunga wealth',
-  '37': 'Biaya copy trading',
-  '38': 'Laba copy trading',
-  '39': 'Rugi copy trading',
-  '40': 'Bagi hasil copy trading',
-  '41': 'Rebate copy trading',
-  '42': 'Biaya funding copy',
-  '47': 'Penarikan bonus',
-  '49': 'Staking',
-  '50': 'Pembukaan staking',
-  '51': 'Hadiah airdrop',
-  '52': 'Transfer ke dompet staking',
-  '53': 'Transfer dari dompet staking',
+const fundingTxId : Record<string, string> = {
+	'0': 'Deposit',
+	'1': 'Penarikan',
+	'2': 'Transfer',
+	'3': 'Perdagangan spot',
+	'4': 'Beli fiat',
+	'5': 'Jual fiat',
+	'6': 'Hadiah check-in',
+	'7': 'Hadiah referral',
+	'8': 'Hadiah copy trading',
+	'9': 'Voting',
+	'10': 'Deposit manual',
+	'11': 'Pairing',
+	'12': 'Hadiah trading',
+	'13': 'Beli CTC',
+	'14': 'Jual CTC',
+	'15': 'Angpao terkirim',
+	'16': 'Angpao diterima',
+	'17': 'Penarikan kode',
+	'18': 'Deposit kode',
+	'19': 'Biaya perdagangan perpetual',
+	'20': 'Laba perpetual',
+	'21': 'Rugi perpetual',
+	'22': 'Opsi gagal',
+	'23': 'Biaya opsi',
+	'24': 'Bonus opsi',
+	'25': 'Rebate kontrak',
+	'26': 'Biaya funding',
+	'27': 'Likuidasi perpetual',
+	'28': 'Biaya kampanye',
+	'29': 'Laba kampanye',
+	'30': 'Rugi kampanye',
+	'31': 'Rebate kampanye',
+	'32': 'Hadiah sejawat',
+	'33': 'Pendapatan biaya platform',
+	'34': 'Kontrak cepat gagal',
+	'35': 'Bonus kontrak cepat',
+	'36': 'Bunga wealth',
+	'37': 'Biaya copy trading',
+	'38': 'Laba copy trading',
+	'39': 'Rugi copy trading',
+	'40': 'Bagi hasil copy trading',
+	'41': 'Rebate copy trading',
+	'42': 'Biaya funding copy',
+	'47': 'Penarikan bonus',
+	'49': 'Staking',
+	'50': 'Pembukaan staking',
+	'51': 'Hadiah airdrop',
+	'52': 'Transfer ke dompet staking',
+	'53': 'Transfer dari dompet staking',
 }
 
-function buildZhCN(): FuturesPageMessages {
-  return {
-    perpetual: '永续合约',
-    perpetualTag: '永续',
-    pairSearchPlaceholder: '搜索',
-    pairEmpty: '无匹配结果',
-    stats: {
-      change24h: '24h涨跌',
-      markPrice: '标记价格',
-      high24h: '24h最高价',
-      low24h: '24h最低价',
-      volume24h: '24h成交量',
-      fundingCountdown: '资金费率 / 倒计时',
-    },
-    mobileTabs: { chart: '行情', trade: '交易' },
-    chartSub: { chart: '图表', coinInfo: '币种资料', fundingHistory: '历史资金费率' },
-    tf: {
-      m1: '1分',
-      m5: '5分',
-      m15: '15分',
-      m30: '30分',
-      h1: '1小时',
-      h4: '4小时',
-      d1: '1日',
-    },
-    chartTools: { fullscreen: '全屏', alert: '提醒' },
-    draw: {
-      cursor: '光标',
-      trend: '趋势线',
-      hline: '水平线',
-      ray: '射线',
-      channel: '通道线',
-      fib: '斐波那契回撤',
-      text: '文字标注',
-      clearAll: '删除所有标注',
-      zoomOut: '缩小',
-    },
-    ohlcv: {
-      open: '开',
-      high: '高',
-      low: '低',
-      close: '收',
-      volume: '成交量',
-      changePct: '涨幅',
-      amplitude: '振幅',
-    },
-    coinInfo: {
-      marketCap: '市值',
-      circulating: '流通量',
-      issuePrice: '发行价',
-      ath: '历史最高',
-      athDate: 'ATH 日期',
-      whitepaper: '白皮书',
-      empty: '暂无币种资料',
-      reload: '重新加载',
-    },
-    fundingPanel: {
-      rate: '资金费率',
-      period: '结算周期',
-      nextCountdown: '下次结算倒计时',
-      noChart: '暂无图表数据',
-      settleTime: '结算时间',
-      rateCol: '资金费率',
-      empty7d: '暂无近7天数据',
-    },
-    book: {
-      orderBook: '订单簿',
-      trades: '最新成交',
-      priceQuote: '价格(USDT)',
-      amountBase: '数量({base})',
-      totalBase: '总量({base})',
-      time: '时间',
-      buy: '买',
-      sell: '卖',
-      buyRatio: '买 {n}%',
-      sellRatio: '{n}% 卖',
-      noTrades: '暂无成交数据',
-    },
-    margin: { cross: '全仓', split: '分仓', experience: '体验金' },
-    amountUnit: { lots: '张', usdt: 'USDT' },
-    leverage: { adjustTitle: '调整杠杆' },
-    order: {
-      limit: '限价',
-      market: '市价',
-      conditional: '条件委托',
-      condMarket: '市价委托',
-      condLimit: '限价委托',
-      available: '可用',
-      maxOpen: '最大可开',
-      triggerPriceLabel: '触发价 ({q})',
-      priceLabel: '价格 ({q})',
-      latestBtn: '最新',
-      marketExe: '市价成交',
-      condMarketExe: '触发后市价成交',
-      qtyLabel: '数量 ({u})',
-      transferTitle: '划转',
-      openLong: '开多',
-      openShort: '开空',
-      contractInfoTitle: '合约信息',
-      indexSource: '指数来源',
-      marginCoin: '保证金币种',
-      maxLeverage: '最大杠杆',
-      maintMargin: '维持保证金率',
-      openFee: '开仓手续费',
-      closeFee: '平仓手续费',
-      contractValue: '合约面值',
-      minOrder: '最小下单量',
-      maxOrder: '最大下单量',
-    },
-    placeholders: { searchPair: '搜索', triggerPrice: '请输入触发价', price: '请输入价格', amount: '请输入数量' },
-    bottom: {
-      positions: '仓位',
-      openOrders: '当前委托',
-      historyOrders: '历史委托',
-      historyPositions: '历史仓位',
-      tradeDetails: '成交明细',
-      fundingFlow: '资金流水',
-      assets: '资产',
-      closeAllPositions: '一键平仓',
-      cancelAllOrders: '全部撤单',
-      loginPromptOr: '或',
-      registerNow: '立即注册',
-      startTrading: '开始交易',
-    },
-    table: {
-      contract: '合约',
-      dirLeverage: '方向/杠杆',
-      openPrice: '开仓价',
-      markPrice: '标记价',
-      positionSize: '持仓量',
-      margin: '保证金',
-      marginRate: '保证金率',
-      unrealizedPnl: '浮动盈亏',
-      roe: '收益率',
-      liqPrice: '强平价',
-      openTime: '开仓时间',
-      action: '操作',
-      type: '类型',
-      orderPrice: '委托价',
-      entrustPriceHist: '委托价格',
-      triggerPrice: '触发价',
-      orderAmt: '委托量',
-      filled: '已成交',
-      tpPrice: '止盈价',
-      slPrice: '止损价',
-      time: '时间',
-      orderTime: '委托时间',
-      fillTime: '成交时间',
-      profitUsdt: '收益(USDT)',
-      tradedVol: '已成交量',
-      closeAvg: '平仓均价',
-      profitRate: '收益率',
-      closeTime: '平仓时间',
-      directionOpenClose: '方向/开平',
-      dealPrice: '成交价',
-      fee: '手续费',
-      fundType: '类型',
-      amount: '数量',
-      coin: '币种',
-      settlementTime: '结算时间',
-      fundingRate: '资金费率',
-      totalBal: '合约账户总余额',
-      availMargin: '可用保证金',
-      usedMargin: '已用保证金',
-      unrealized: '未实现盈亏',
-      spotWalletBal: '可提现账户余额',
-      fundTransfer: '资金划转',
-      avgOpenPrice: '开仓均价',
-      feeHint: '手续费(USDT)',
-      estimatedPnlRow: '预计盈亏',
-      triggerUsdt: '触发价(USDT)',
-      orderPriceUsdt: '委托价(USDT)',
-      openAvgUsdt: '开仓均价(USDT)',
-      closeAvgUsdt: '平仓均价(USDT)',
-      tpUsdt: '止盈价(USDT)',
-      slUsdt: '止损价(USDT)',
-      marginUsdtBracket: '保证金(USDT)',
-      notionalUsdt: '仓位价值(USDT)',
-      estLiqPx: '预估强平价',
-      profitBracketUsdt: '收益(USDT)',
-      entrustVolCoin: '委托量({base})',
-      filledVolCoin: '已成交量({base})',
-      closeAvail: '可平:',
-      markPriceBtn: '标记价',
-    },
-    empty: {
-      noPositions: '暂无持仓',
-      noOrders: '暂无委托',
-      noHistPositions: '暂无历史仓位',
-      noHistOrders: '暂无历史委托',
-      noTradeRecords: '暂无成交记录',
-      noFunding: '暂无资金流水',
-    },
-    modal: {
-      confirmDefaultTitle: '请确认',
-      positionDetailTitle: '仓位详情',
-      orderDetailTitle: '委托详情',
-      histPositionDetailTitle: '历史仓位详情',
-      histOrderDetailTitle: '历史委托详情',
-      closePositionTitlePrefix: '平仓',
-      modifyTpSl: '修改止盈止损',
-      setTpSl: '设置止盈止损',
-      posQtyLabel: '持仓量:',
-      currentTpSlSection: '当前止盈止损委托',
-      modifyToSection: '修改为',
-      setPricesSection: '设置价格',
-      tpTriggerLabel: '止盈触发价 ',
-      tpHintOptionalClear: '(不填则清除止盈)',
-      slTriggerLabel: '止损触发价 ',
-      slHintOptionalClear: '(不填则清除止损)',
-      placeholderTpTrigger: '输入止盈触发价',
-      placeholderSlTrigger: '输入止损触发价',
-      confirmCloseBtn: '确认平仓',
-      ok: '确定',
-      closeTypeLiquidation: '爆仓',
-      tpBadge: '止盈',
-      slBadge: '止损',
-      tpPriceWord: '止盈价 ',
-      slPriceWord: '止损价 ',
-      volLabel: '数量:',
-      marginSplitMode: '全仓/分仓',
-      directionLabel: '方向',
-      entrustTypeLabel: '委托类型',
-      leverageLabel: '杠杆',
-    },
-    actions: { tpSl: '止盈止损', reverse: '反手', close: '平仓', marketCloseAll: '市价全平', cancelOrder: '撤单' },
-    positionRow: { hintCross: '全仓', hintExperience: '体验金' },
-    errors: {
-      enterTriggerPrice: '请输入触发价',
-      enterPrice: '请输入价格',
-      priceNotReadyConvert: '价格未就绪,无法换算数量',
-      invalidQtyCheckMin: '数量无效,请检查精度与最小下单量',
-      priceNotReadyRetry: '价格未就绪,请稍后重试',
-      enterQty: '请输入数量',
-      qtyExceedAvail: '数量超出可平量',
-      closeFailed: '平仓失败',
-      modifyTpSlFailed: '修改失败,请稍后重试',
-      txFallback: '类型{n}',
-    },
-    confirm: {
-      reverseTitle: '一键反手',
-      reverseBody: '确认对 {pair} {side} 仓位执行一键反手吗?',
-      cancelAllTitle: '全部撤单',
-      cancelAllBody: '确认撤销当前 {n} 个委托吗?',
-      closeAllTitle: '一键平仓',
-      closeAllBody: '确认对当前 {n} 个持仓执行一键平仓吗?',
-      sideLongWord: '做多',
-      sideShortWord: '做空',
-    },
-    directions: {
-      long: '做多',
-      short: '做空',
-      openLong: '开多',
-      openShort: '开空',
-      closeShort: '平空',
-      closeLong: '平多',
-      openTag: '开',
-      closeTag: '平',
-    },
-    orderTypes: { limit: '限价', plan: '计划委托', takeProfit: '止盈', stopLoss: '止损', marketShort: '市价' },
-    orderStatus: { filled: '已成交', open: '委托中', cancelled: '已撤销', failed: '失败' },
-    closeTypes: {
-      market: '市价平仓',
-      oneClick: '一键平仓',
-      reverseOpen: '反向开仓',
-      tpSl: '止盈止损',
-      liquidation: '爆仓',
-      admin: '管理员平仓',
-    },
-    fundingTx: fundingTxZh,
-  }
+const fundingTxEs : Record<string, string> = {
+	'0': 'Depósito',
+	'1': 'Retiro',
+	'2': 'Transferencia',
+	'3': 'Operación al contado',
+	'4': 'Compra fiat',
+	'5': 'Venta fiat',
+	'6': 'Recompensa por inicio de sesión',
+	'7': 'Recompensa por referido',
+	'8': 'Recompensa por copy trading',
+	'9': 'Votación',
+	'10': 'Depósito manual',
+	'11': 'Emparejamiento',
+	'12': 'Recompensa por operación',
+	'13': 'Compra CTC',
+	'14': 'Venta CTC',
+	'15': 'Sobre rojo enviado',
+	'16': 'Sobre rojo recibido',
+	'17': 'Pago por código de retiro',
+	'18': 'Depósito por código de retiro',
+	'19': 'Comisión de perpetuos',
+	'20': 'Beneficio de perpetuos',
+	'21': 'Pérdida de perpetuos',
+	'22': 'Opción fallida',
+	'23': 'Comisión de opción',
+	'24': 'Bono de opción',
+	'25': 'Reembolso de contrato',
+	'26': 'Comisión de financiación',
+	'27': 'Liquidación de perpetuos',
+	'28': 'Comisión de campaña',
+	'29': 'Beneficio de campaña',
+	'30': 'Pérdida de campaña',
+	'31': 'Reembolso de campaña',
+	'32': 'Recompensa de igual nivel',
+	'33': 'Ingreso por comisión de plataforma',
+	'34': 'Contrato rápido fallido',
+	'35': 'Bono de contrato rápido',
+	'36': 'Interés de inversión',
+	'37': 'Comisión de copy trading',
+	'38': 'Beneficio de copy trading',
+	'39': 'Pérdida de copy trading',
+	'40': 'Participación en beneficios de copy trading',
+	'41': 'Reembolso de copy trading',
+	'42': 'Comisión de financiación de copy',
+	'47': 'Retiro de bono',
+	'49': 'Staking',
+	'50': 'Liberación de staking',
+	'51': 'Recompensa de airdrop',
+	'52': 'Transferencia a monedero de staking',
+	'53': 'Transferencia desde monedero de staking',
 }
 
-function buildEn(): FuturesPageMessages {
-  const b = buildZhCN()
-  return {
-    ...b,
-    perpetual: 'Perpetual',
-    perpetualTag: 'Perpetual',
-    pairSearchPlaceholder: 'Search',
-    pairEmpty: 'No matching pairs',
-    stats: {
-      change24h: '24h Change',
-      markPrice: 'Mark',
-      high24h: '24h High',
-      low24h: '24h Low',
-      volume24h: '24h Volume',
-      fundingCountdown: 'Funding / Countdown',
-    },
-    mobileTabs: { chart: 'Chart', trade: 'Trade' },
-    chartSub: { chart: 'Chart', coinInfo: 'Coin Info', fundingHistory: 'Funding History' },
-    tf: {
-      m1: '1m',
-      m5: '5m',
-      m15: '15m',
-      m30: '30m',
-      h1: '1h',
-      h4: '4h',
-      d1: '1d',
-    },
-    chartTools: { fullscreen: 'Fullscreen', alert: 'Alerts' },
-    draw: {
-      cursor: 'Cursor',
-      trend: 'Trend line',
-      hline: 'Horizontal',
-      ray: 'Ray',
-      channel: 'Channel',
-      fib: 'Fib retracement',
-      text: 'Text',
-      clearAll: 'Clear drawings',
-      zoomOut: 'Zoom out',
-    },
-    ohlcv: {
-      open: 'O',
-      high: 'H',
-      low: 'L',
-      close: 'C',
-      volume: 'Volume',
-      changePct: 'Change',
-      amplitude: 'Range',
-    },
-    coinInfo: {
-      marketCap: 'Market cap',
-      circulating: 'Circulating supply',
-      issuePrice: 'Issue price',
-      ath: 'All-time high',
-      athDate: 'ATH date',
-      whitepaper: 'Whitepaper',
-      empty: 'No coin info',
-      reload: 'Reload',
-    },
-    fundingPanel: {
-      rate: 'Funding rate',
-      period: 'Settlement period',
-      nextCountdown: 'Next countdown',
-      noChart: 'No chart data',
-      settleTime: 'Settlement',
-      rateCol: 'Funding rate',
-      empty7d: 'No last-7-days data',
-    },
-    book: {
-      orderBook: 'Order book',
-      trades: 'Trades',
-      priceQuote: 'Price (USDT)',
-      amountBase: 'Amount ({base})',
-      totalBase: 'Total ({base})',
-      time: 'Time',
-      buy: 'Buy',
-      sell: 'Sell',
-      buyRatio: 'Buy {n}%',
-      sellRatio: '{n}% Sell',
-      noTrades: 'No trades',
-    },
-    margin: { cross: 'Cross', split: 'Isolated', experience: 'Bonus' },
-    amountUnit: { lots: 'Cont', usdt: 'USDT' },
-    leverage: { adjustTitle: 'Adjust leverage' },
-    order: {
-      limit: 'Limit',
-      market: 'Market',
-      conditional: 'Conditional',
-      condMarket: 'Market conditional',
-      condLimit: 'Limit conditional',
-      available: 'Available',
-      maxOpen: 'Max to open',
-      triggerPriceLabel: 'Trigger ({q})',
-      priceLabel: 'Price ({q})',
-      latestBtn: 'Last',
-      marketExe: 'Market',
-      condMarketExe: 'Market after trigger',
-      qtyLabel: 'Amount ({u})',
-      transferTitle: 'Transfer',
-      openLong: 'Buy / Long',
-      openShort: 'Sell / Short',
-      contractInfoTitle: 'Contract info',
-      indexSource: 'Index sources',
-      marginCoin: 'Margin asset',
-      maxLeverage: 'Max leverage',
-      maintMargin: 'Maint. margin rate',
-      openFee: 'Open fee',
-      closeFee: 'Close fee',
-      contractValue: 'Contract value',
-      minOrder: 'Min order size',
-      maxOrder: 'Max order size',
-    },
-    placeholders: {
-      searchPair: 'Search',
-      triggerPrice: 'Enter trigger price',
-      price: 'Enter price',
-      amount: 'Enter amount',
-    },
-    bottom: {
-      positions: 'Positions',
-      openOrders: 'Open orders',
-      historyOrders: 'Order history',
-      historyPositions: 'Position history',
-      tradeDetails: 'Trades',
-      fundingFlow: 'Funding',
-      assets: 'Assets',
-      closeAllPositions: 'Close all',
-      cancelAllOrders: 'Cancel all',
-      loginPromptOr: 'or',
-      registerNow: 'Register now',
-      startTrading: 'to start trading',
-    },
-    table: {
-      contract: 'Contract',
-      dirLeverage: 'Dir./Lev.',
-      openPrice: 'Open',
-      markPrice: 'Mark',
-      positionSize: 'Size',
-      margin: 'Margin',
-      marginRate: 'Margin ratio',
-      unrealizedPnl: 'UPnL',
-      roe: 'ROE',
-      liqPrice: 'Liq. price',
-      openTime: 'Open time',
-      action: 'Action',
-      type: 'Type',
-      orderPrice: 'Price',
-      entrustPriceHist: 'Order price',
-      triggerPrice: 'Trigger',
-      orderAmt: 'Order qty',
-      filled: 'Filled',
-      tpPrice: 'Take profit',
-      slPrice: 'Stop loss',
-      time: 'Time',
-      orderTime: 'Order time',
-      fillTime: 'Fill time',
-      profitUsdt: 'P&L (USDT)',
-      tradedVol: 'Filled qty',
-      closeAvg: 'Close avg.',
-      profitRate: 'ROE',
-      closeTime: 'Close time',
-      directionOpenClose: 'Side/O-C',
-      dealPrice: 'Fill price',
-      fee: 'Fee',
-      fundType: 'Type',
-      amount: 'Amount',
-      coin: 'Coin',
-      settlementTime: 'Settlement',
-      fundingRate: 'Funding rate',
-      totalBal: 'Futures balance',
-      availMargin: 'Available margin',
-      usedMargin: 'Used margin',
-      unrealized: 'Unrealized P&L',
-      spotWalletBal: 'Withdrawable account balance',
-      fundTransfer: 'Transfer',
-      avgOpenPrice: 'Avg. open',
-      feeHint: 'Fee (USDT)',
-      estimatedPnlRow: 'Est. P&L',
-      triggerUsdt: 'Trigger (USDT)',
-      orderPriceUsdt: 'Order price (USDT)',
-      openAvgUsdt: 'Avg. entry (USDT)',
-      closeAvgUsdt: 'Avg. exit (USDT)',
-      tpUsdt: 'TP (USDT)',
-      slUsdt: 'SL (USDT)',
-      marginUsdtBracket: 'Margin (USDT)',
-      notionalUsdt: 'Position value (USDT)',
-      estLiqPx: 'Est. liq. price',
-      profitBracketUsdt: 'P&L (USDT)',
-      entrustVolCoin: 'Order qty ({base})',
-      filledVolCoin: 'Filled ({base})',
-      closeAvail: 'Closable:',
-      markPriceBtn: 'Mark',
-    },
-    empty: {
-      noPositions: 'No positions',
-      noOrders: 'No orders',
-      noHistPositions: 'No position history',
-      noHistOrders: 'No historical orders',
-      noTradeRecords: 'No fills',
-      noFunding: 'No funding records',
-    },
-    modal: {
-      confirmDefaultTitle: 'Please confirm',
-      positionDetailTitle: 'Position detail',
-      orderDetailTitle: 'Order detail',
-      histPositionDetailTitle: 'Historical position',
-      histOrderDetailTitle: 'Historical order',
-      closePositionTitlePrefix: 'Close',
-      modifyTpSl: 'Edit TP/SL',
-      setTpSl: 'Set TP/SL',
-      posQtyLabel: 'Size:',
-      currentTpSlSection: 'Active TP/SL orders',
-      modifyToSection: 'Change to',
-      setPricesSection: 'Prices',
-      tpTriggerLabel: 'Take-profit trigger ',
-      tpHintOptionalClear: '(Leave empty to clear TP)',
-      slTriggerLabel: 'Stop-loss trigger ',
-      slHintOptionalClear: '(Leave empty to clear SL)',
-      placeholderTpTrigger: 'TP trigger price',
-      placeholderSlTrigger: 'SL trigger price',
-      confirmCloseBtn: 'Confirm close',
-      ok: 'OK',
-      closeTypeLiquidation: 'Liquidated',
-      tpBadge: 'TP',
-      slBadge: 'SL',
-      tpPriceWord: 'TP ',
-      slPriceWord: 'SL ',
-      volLabel: 'Qty:',
-      marginSplitMode: 'Cross / Isolated',
-      directionLabel: 'Side',
-      entrustTypeLabel: 'Order type',
-      leverageLabel: 'Leverage',
-    },
-    actions: { tpSl: 'TP/SL', reverse: 'Reverse', close: 'Close', marketCloseAll: 'Market close all', cancelOrder: 'Cancel' },
-    positionRow: { hintCross: 'Cross', hintExperience: 'Bonus' },
-    errors: {
-      enterTriggerPrice: 'Enter trigger price',
-      enterPrice: 'Enter price',
-      priceNotReadyConvert: 'Price not ready — cannot convert size',
-      invalidQtyCheckMin: 'Invalid size — check precision and minimum order',
-      priceNotReadyRetry: 'Price not ready, please retry',
-      enterQty: 'Enter quantity',
-      qtyExceedAvail: 'Qty exceeds closeable amount',
-      closeFailed: 'Close failed',
-      modifyTpSlFailed: 'Update failed — try later',
-      txFallback: 'Type {n}',
-    },
-    confirm: {
-      reverseTitle: 'Reverse position',
-      reverseBody: 'Reverse {pair} {side}?',
-      cancelAllTitle: 'Cancel all',
-      cancelAllBody: 'Cancel {n} orders?',
-      closeAllTitle: 'Close all',
-      closeAllBody: 'Market-close {n} positions?',
-      sideLongWord: 'long',
-      sideShortWord: 'short',
-    },
-    directions: {
-      long: 'Long',
-      short: 'Short',
-      openLong: 'Open long',
-      openShort: 'Open short',
-      closeShort: 'Close short',
-      closeLong: 'Close long',
-      openTag: 'O',
-      closeTag: 'C',
-    },
-    orderTypes: { limit: 'Limit', plan: 'Trigger', takeProfit: 'Take profit', stopLoss: 'Stop loss', marketShort: 'Market' },
-    orderStatus: { filled: 'Filled', open: 'Open', cancelled: 'Cancelled', failed: 'Failed' },
-    closeTypes: {
-      market: 'Market close',
-      oneClick: 'Bulk close',
-      reverseOpen: 'Reverse open',
-      tpSl: 'TP/SL',
-      liquidation: 'Liquidation',
-      admin: 'Admin close',
-    },
-    fundingTx: fundingTxEn,
-  }
+// 俄语
+const fundingTxRu : Record<string, string> = {
+	'0': 'Депозит',
+	'1': 'Вывод',
+	'2': 'Перевод',
+	'3': 'Спот-торговля',
+	'4': 'Покупка фиата',
+	'5': 'Продажа фиата',
+	'6': 'Награда за посещение',
+	'7': 'Реферальная награда',
+	'8': 'Награда за копи-трейдинг',
+	'9': 'Голосование',
+	'10': 'Ручной депозит',
+	'11': 'Сопоставление',
+	'12': 'Торговая награда',
+	'13': 'Покупка CTC',
+	'14': 'Продажа CTC',
+	'15': 'Красный конверт отправлен',
+	'16': 'Красный конверт получен',
+	'17': 'Вывод по коду',
+	'18': 'Депозит по коду',
+	'19': 'Комиссия за бессрочный контракт',
+	'20': 'Прибыль по бессрочному контракту',
+	'21': 'Убыток по бессрочному контракту',
+	'22': 'Опцион не выполнен',
+	'23': 'Комиссия за опцион',
+	'24': 'Бонус за опцион',
+	'25': 'Ребейт по контракту',
+	'26': 'Фандинг-сбор',
+	'27': 'Ликвидация бессрочного контракта',
+	'28': 'Комиссия за кампанию',
+	'29': 'Прибыль по кампании',
+	'30': 'Убыток по кампании',
+	'31': 'Ребейт по кампании',
+	'32': 'Награда равного уровня',
+	'33': 'Доход от платформенных комиссий',
+	'34': 'Моментальный контракт не выполнен',
+	'35': 'Бонус моментального контракта',
+	'36': 'Проценты по вкладам',
+	'37': 'Комиссия за копи-трейдинг',
+	'38': 'Прибыль от копи-трейдинга',
+	'39': 'Убыток от копи-трейдинга',
+	'40': 'Доля прибыли копи-трейдинга',
+	'41': 'Ребейт копи-трейдинга',
+	'42': 'Фандинг-сбор копи-трейдинга',
+	'47': 'Вывод бонусов',
+	'49': 'Стейкинг',
+	'50': 'Разблокировка стейкинга',
+	'51': 'Бонус за аэродроп',
+	'52': 'Перевод в кошелек стейкинга',
+	'53': 'Перевод из кошелька стейкинга',
 }
 
-function buildZhTW(): FuturesPageMessages {
-  const cn = buildZhCN()
-  return {
-    ...cn,
-    perpetual: '永續合約',
-    perpetualTag: '永續',
-    pairSearchPlaceholder: '搜尋',
-    pairEmpty: '無符合結果',
-    stats: {
-      change24h: '24h漲跌',
-      markPrice: '標記價格',
-      high24h: '24h最高價',
-      low24h: '24h最低價',
-      volume24h: '24h成交量',
-      fundingCountdown: '資金費率 / 倒計時',
-    },
-    mobileTabs: { chart: '行情', trade: '交易' },
-    chartSub: { chart: '圖表', coinInfo: '幣種資料', fundingHistory: '歷史資金費率' },
-    tf: { m1: '1分', m5: '5分', m15: '15分', m30: '30分', h1: '1小時', h4: '4小時', d1: '1日' },
-    chartTools: { fullscreen: '全螢幕', alert: '提醒' },
-    draw: {
-      cursor: '游標',
-      trend: '趨勢線',
-      hline: '水平線',
-      ray: '射線',
-      channel: '通道線',
-      fib: '斐波那契回撤',
-      text: '文字標註',
-      clearAll: '刪除所有標註',
-      zoomOut: '縮小',
-    },
-    ohlcv: { ...cn.ohlcv, volume: '成交量', changePct: '漲幅', amplitude: '振幅' },
-    coinInfo: {
-      marketCap: '市值',
-      circulating: '流通量',
-      issuePrice: '發行價',
-      ath: '歷史最高',
-      athDate: 'ATH 日期',
-      whitepaper: '白皮書',
-      empty: '暫無幣種資料',
-      reload: '重新載入',
-    },
-    fundingPanel: {
-      rate: '資金費率',
-      period: '結算週期',
-      nextCountdown: '下次結算倒計時',
-      noChart: '暫無圖表數據',
-      settleTime: '結算時間',
-      rateCol: '資金費率',
-      empty7d: '暫無近7天數據',
-    },
-    book: {
-      orderBook: '訂單簿',
-      trades: '最新成交',
-      priceQuote: '價格(USDT)',
-      amountBase: '數量({base})',
-      totalBase: '總量({base})',
-      time: '時間',
-      buy: '買',
-      sell: '賣',
-      buyRatio: '買 {n}%',
-      sellRatio: '{n}% 賣',
-      noTrades: '暫無成交資料',
-    },
-    margin: { cross: '全倉', split: '分倉', experience: '體驗金' },
-    amountUnit: { lots: '張', usdt: 'USDT' },
-    leverage: { adjustTitle: '調整槓桿' },
-    order: {
-      limit: '限價',
-      market: '市價',
-      conditional: '條件委託',
-      condMarket: '市價委託',
-      condLimit: '限價委託',
-      available: '可用',
-      maxOpen: '最大可開',
-      triggerPriceLabel: '觸發價 ({q})',
-      priceLabel: '價格 ({q})',
-      latestBtn: '最新',
-      marketExe: '市價成交',
-      condMarketExe: '觸發後市價成交',
-      qtyLabel: '數量 ({u})',
-      transferTitle: '劃轉',
-      openLong: '開多',
-      openShort: '開空',
-      contractInfoTitle: '合約資訊',
-      indexSource: '指數來源',
-      marginCoin: '保證金幣種',
-      maxLeverage: '最大槓桿',
-      maintMargin: '維持保證金率',
-      openFee: '開倉手續費',
-      closeFee: '平倉手續費',
-      contractValue: '合約面值',
-      minOrder: '最小下單量',
-      maxOrder: '最大下單量',
-    },
-    placeholders: { searchPair: '搜尋', triggerPrice: '請輸入觸發價', price: '請輸入價格', amount: '請輸入數量' },
-    bottom: {
-      positions: '倉位',
-      openOrders: '當前委託',
-      historyOrders: '歷史委託',
-      historyPositions: '歷史倉位',
-      tradeDetails: '成交明細',
-      fundingFlow: '資金流水',
-      assets: '資產',
-      closeAllPositions: '一鍵平倉',
-      cancelAllOrders: '全部撤單',
-      loginPromptOr: '或',
-      registerNow: '立即註冊',
-      startTrading: '開始交易',
-    },
-    table: {
-      contract: '合約',
-      dirLeverage: '方向/槓桿',
-      openPrice: '開倉價',
-      markPrice: '標記價',
-      positionSize: '持倉量',
-      margin: '保證金',
-      marginRate: '保證金率',
-      unrealizedPnl: '浮動盈虧',
-      roe: '收益率',
-      liqPrice: '強平價',
-      openTime: '開倉時間',
-      action: '操作',
-      type: '類型',
-      orderPrice: '委託價',
-      entrustPriceHist: '委託價格',
-      triggerPrice: '觸發價',
-      orderAmt: '委託量',
-      filled: '已成交',
-      tpPrice: '止盈價',
-      slPrice: '止損價',
-      time: '時間',
-      orderTime: '委託時間',
-      fillTime: '成交時間',
-      profitUsdt: '收益(USDT)',
-      tradedVol: '已成交量',
-      closeAvg: '平倉均價',
-      profitRate: '收益率',
-      closeTime: '平倉時間',
-      directionOpenClose: '方向/開平',
-      dealPrice: '成交價',
-      fee: '手續費',
-      fundType: '類型',
-      amount: '數量',
-      coin: '幣種',
-      settlementTime: '結算時間',
-      fundingRate: '資金費率',
-      totalBal: '合約帳戶總餘額',
-      availMargin: '可用保證金',
-      usedMargin: '已用保證金',
-      unrealized: '未實現盈虧',
-      spotWalletBal: '可提現帳戶餘額',
-      fundTransfer: '資金劃轉',
-      avgOpenPrice: '開倉均價',
-      feeHint: '手續費(USDT)',
-      estimatedPnlRow: '預計盈虧',
-      triggerUsdt: '觸發價(USDT)',
-      orderPriceUsdt: '委託價(USDT)',
-      openAvgUsdt: '開倉均價(USDT)',
-      closeAvgUsdt: '平倉均價(USDT)',
-      tpUsdt: '止盈價(USDT)',
-      slUsdt: '止損價(USDT)',
-      marginUsdtBracket: '保證金(USDT)',
-      notionalUsdt: '倉位價值(USDT)',
-      estLiqPx: '預估強平價',
-      profitBracketUsdt: '收益(USDT)',
-      entrustVolCoin: '委託量({base})',
-      filledVolCoin: '已成交量({base})',
-      closeAvail: '可平:',
-      markPriceBtn: '標記價',
-    },
-    empty: {
-      noPositions: '暫無持倉',
-      noOrders: '暫無委託',
-      noHistPositions: '暫無歷史倉位',
-      noHistOrders: '暫無歷史委託',
-      noTradeRecords: '暫無成交記錄',
-      noFunding: '暫無資金流水',
-    },
-    modal: {
-      confirmDefaultTitle: '請確認',
-      positionDetailTitle: '倉位詳情',
-      orderDetailTitle: '委託詳情',
-      histPositionDetailTitle: '歷史倉位詳情',
-      histOrderDetailTitle: '歷史委託詳情',
-      closePositionTitlePrefix: '平倉',
-      modifyTpSl: '修改止盈止損',
-      setTpSl: '設置止盈止損',
-      posQtyLabel: '持倉量:',
-      currentTpSlSection: '當前止盈止損委託',
-      modifyToSection: '修改為',
-      setPricesSection: '設置價格',
-      tpTriggerLabel: '止盈觸發價 ',
-      tpHintOptionalClear: '(不填則清除止盈)',
-      slTriggerLabel: '止損觸發價 ',
-      slHintOptionalClear: '(不填則清除止損)',
-      placeholderTpTrigger: '輸入止盈觸發價',
-      placeholderSlTrigger: '輸入止損觸發價',
-      confirmCloseBtn: '確認平倉',
-      ok: '確定',
-      closeTypeLiquidation: '爆倉',
-      tpBadge: '止盈',
-      slBadge: '止損',
-      tpPriceWord: '止盈價 ',
-      slPriceWord: '止損價 ',
-      volLabel: '數量:',
-      marginSplitMode: '全倉/分倉',
-      directionLabel: '方向',
-      entrustTypeLabel: '委託類型',
-      leverageLabel: '槓桿',
-    },
-    actions: { tpSl: '止盈止損', reverse: '反手', close: '平倉', marketCloseAll: '市價全平', cancelOrder: '撤單' },
-    positionRow: { hintCross: '全倉', hintExperience: '體驗金' },
-    errors: {
-      enterTriggerPrice: '請輸入觸發價',
-      enterPrice: '請輸入價格',
-      priceNotReadyConvert: '價格未就緒,無法換算數量',
-      invalidQtyCheckMin: '數量無效,請檢查精度與最小下單量',
-      priceNotReadyRetry: '價格未就緒,請稍後重試',
-      enterQty: '請輸入數量',
-      qtyExceedAvail: '數量超出可平量',
-      closeFailed: '平倉失敗',
-      modifyTpSlFailed: '修改失敗,請稍後重試',
-      txFallback: '類型{n}',
-    },
-    confirm: {
-      reverseTitle: '一鍵反手',
-      reverseBody: '確認對 {pair} {side} 倉位執行一鍵反手嗎?',
-      cancelAllTitle: '全部撤單',
-      cancelAllBody: '確認撤銷當前 {n} 個委託嗎?',
-      closeAllTitle: '一鍵平倉',
-      closeAllBody: '確認對當前 {n} 個持倉執行一鍵平倉嗎?',
-      sideLongWord: '做多',
-      sideShortWord: '做空',
-    },
-    directions: {
-      long: '做多',
-      short: '做空',
-      openLong: '開多',
-      openShort: '開空',
-      closeShort: '平空',
-      closeLong: '平多',
-      openTag: '開',
-      closeTag: '平',
-    },
-    orderTypes: { limit: '限價', plan: '計畫委託', takeProfit: '止盈', stopLoss: '止損', marketShort: '市價' },
-    orderStatus: { filled: '已成交', open: '委託中', cancelled: '已撤銷', failed: '失敗' },
-    closeTypes: {
-      market: '市價平倉',
-      oneClick: '一鍵平倉',
-      reverseOpen: '反向開倉',
-      tpSl: '止盈止損',
-      liquidation: '爆倉',
-      admin: '管理員平倉',
-    },
-    fundingTx: fundingTw,
-  }
+// 葡萄牙语
+const fundingTxPt : Record<string, string> = {
+	'0': 'Depósito',
+	'1': 'Saque',
+	'2': 'Transferência',
+	'3': 'Negociação à vista',
+	'4': 'Compra de fiat',
+	'5': 'Venda de fiat',
+	'6': 'Recompensa de check-in',
+	'7': 'Recompensa de indicação',
+	'8': 'Recompensa de copy trading',
+	'9': 'Votação',
+	'10': 'Depósito manual',
+	'11': 'Emparelhamento',
+	'12': 'Recompensa de negociação',
+	'13': 'Compra CTC',
+	'14': 'Venda CTC',
+	'15': 'Pacote vermelho enviado',
+	'16': 'Pacote vermelho recebido',
+	'17': 'Saque por código',
+	'18': 'Depósito por código',
+	'19': 'Taxa de contrato perpétuo',
+	'20': 'Lucro de contrato perpétuo',
+	'21': 'Prejuízo de contrato perpétuo',
+	'22': 'Opção falhou',
+	'23': 'Taxa de opção',
+	'24': 'Bônus de opção',
+	'25': 'Reembolso de contrato',
+	'26': 'Taxa de financiamento',
+	'27': 'Liquidação de contrato perpétuo',
+	'28': 'Taxa de campanha',
+	'29': 'Lucro de campanha',
+	'30': 'Prejuízo de campanha',
+	'31': 'Reembolso de campanha',
+	'32': 'Recompensa de mesmo nível',
+	'33': 'Renda de taxa de plataforma',
+	'34': 'Contrato rápido falhou',
+	'35': 'Bônus de contrato rápido',
+	'36': 'Juros de investimento',
+	'37': 'Taxa de copy trading',
+	'38': 'Lucro de copy trading',
+	'39': 'Prejuízo de copy trading',
+	'40': 'Participação nos lucros de copy trading',
+	'41': 'Reembolso de copy trading',
+	'42': 'Taxa de financiamento de copy trading',
+	'47': 'Saque de bônus',
+	'49': 'Staking',
+	'50': 'Liberação de staking',
+	'51': 'Recompensa de airdrop',
+	'52': 'Transferência para carteira de staking',
+	'53': 'Transferência da carteira de staking',
 }
 
-function buildKo(): FuturesPageMessages {
-  return deepMerge(buildEn(), { ...koUiOverlay, fundingTx: fundingTxKo }) as FuturesPageMessages
+// 德语
+const fundingTxDe : Record<string, string> = {
+	'0': 'Einzahlung',
+	'1': 'Auszahlung',
+	'2': 'Überweisung',
+	'3': 'Spot-Handel',
+	'4': 'Fiat-Kauf',
+	'5': 'Fiat-Verkauf',
+	'6': 'Check-in-Belohnung',
+	'7': 'Empfehlungsbelohnung',
+	'8': 'Copy-Trading-Belohnung',
+	'9': 'Abstimmung',
+	'10': 'Manuelle Einzahlung',
+	'11': 'Paarung',
+	'12': 'Handelsbelohnung',
+	'13': 'CTC-Kauf',
+	'14': 'CTC-Verkauf',
+	'15': 'Rotumschlag gesendet',
+	'16': 'Rotumschlag erhalten',
+	'17': 'Auszahlung per Code',
+	'18': 'Einzahlung per Code',
+	'19': 'Ewiger Vertragsgebühr',
+	'20': 'Ewiger Vertragsgewinn',
+	'21': 'Ewiger Vertragsverlust',
+	'22': 'Option fehlgeschlagen',
+	'23': 'Optionsgebühr',
+	'24': 'Optionsbonus',
+	'25': 'Vertragsrabatt',
+	'26': 'Finanzierungsgebühr',
+	'27': 'Ewige Vertragsliquidation',
+	'28': 'Kampagnengebühr',
+	'29': 'Kampagnengewinn',
+	'30': 'Kampagnenverlust',
+	'31': 'Kampagnenrabatt',
+	'32': 'Gleichstufige Belohnung',
+	'33': 'Plattformgebühreinnahmen',
+	'34': 'Schnellvertrag fehlgeschlagen',
+	'35': 'Schnellvertragsbonus',
+	'36': 'Vermögenszinsen',
+	'37': 'Copy-Trading-Gebühr',
+	'38': 'Copy-Trading-Gewinn',
+	'39': 'Copy-Trading-Verlust',
+	'40': 'Copy-Trading-Gewinnbeteiligung',
+	'41': 'Copy-Trading-Rabatt',
+	'42': 'Copy-Finanzierungsgebühr',
+	'47': 'Bonusauszahlung',
+	'49': 'Staking',
+	'50': 'Staking-Freigabe',
+	'51': 'Airdrop-Belohnung',
+	'52': 'Überweisung zum Staking-Wallet',
+	'53': 'Überweisung vom Staking-Wallet',
 }
 
-function buildJa(): FuturesPageMessages {
-  return deepMerge(buildEn(), { ...jaUiOverlay, fundingTx: fundingTxJa }) as FuturesPageMessages
+// 法语
+const fundingTxFr : Record<string, string> = {
+	'0': 'Dépôt',
+	'1': 'Retrait',
+	'2': 'Transfert',
+	'3': 'Trading au comptant',
+	'4': 'Achat de fiat',
+	'5': 'Vente de fiat',
+	'6': 'Récompense de connexion',
+	'7': 'Récompense de parrainage',
+	'8': 'Récompense de copy trading',
+	'9': 'Vote',
+	'10': 'Dépôt manuel',
+	'11': 'Appariement',
+	'12': 'Récompense de trading',
+	'13': 'Achat CTC',
+	'14': 'Vente CTC',
+	'15': 'Paquet rouge envoyé',
+	'16': 'Paquet rouge reçu',
+	'17': 'Retrait par code',
+	'18': 'Dépôt par code',
+	'19': 'Frais de contrat perpétuel',
+	'20': 'Profit de contrat perpétuel',
+	'21': 'Perte de contrat perpétuel',
+	'22': 'Option échouée',
+	'23': 'Frais d\'option',
+	'24': 'Bonus d\'option',
+	'25': 'Remboursement de contrat',
+	'26': 'Frais de financement',
+	'27': 'Liquidation de contrat perpétuel',
+	'28': 'Frais de campagne',
+	'29': 'Profit de campagne',
+	'30': 'Perte de campagne',
+	'31': 'Remboursement de campagne',
+	'32': 'Récompense de même niveau',
+	'33': 'Revenu de frais de plateforme',
+	'34': 'Contrat rapide échoué',
+	'35': 'Bonus de contrat rapide',
+	'36': 'Intérêts de placement',
+	'37': 'Frais de copy trading',
+	'38': 'Profit de copy trading',
+	'39': 'Perte de copy trading',
+	'40': 'Partage des bénéfices de copy trading',
+	'41': 'Remboursement de copy trading',
+	'42': 'Frais de financement de copy trading',
+	'47': 'Retrait de bonus',
+	'49': 'Staking',
+	'50': 'Libération de staking',
+	'51': 'Récompense d\'airdrop',
+	'52': 'Transfert vers portefeuille de staking',
+	'53': 'Transfert depuis portefeuille de staking',
 }
 
-function buildHi(): FuturesPageMessages {
-  return deepMerge(buildEn(), { ...hiUiOverlay, fundingTx: fundingTxHi }) as FuturesPageMessages
+// 土耳其语
+const fundingTxTr : Record<string, string> = {
+	'0': 'Yatırma',
+	'1': 'Çekme',
+	'2': 'Transfer',
+	'3': 'Spot işlem',
+	'4': 'Fiat alımı',
+	'5': 'Fiat satımı',
+	'6': 'Giriş ödülü',
+	'7': 'Referans ödülü',
+	'8': 'Kopya işlem ödülü',
+	'9': 'Oylama',
+	'10': 'Manuel yatırma',
+	'11': 'Eşleştirme',
+	'12': 'İşlem ödülü',
+	'13': 'CTC alımı',
+	'14': 'CTC satımı',
+	'15': 'Kırmızı zarf gönderildi',
+	'16': 'Kırmızı zarf alındı',
+	'17': 'Kod ile çekme',
+	'18': 'Kod ile yatırma',
+	'19': 'Sürekli sözleşme ücreti',
+	'20': 'Sürekli sözleşme karı',
+	'21': 'Sürekli sözleşme zararı',
+	'22': 'Seçenek başarısız',
+	'23': 'Seçenek ücreti',
+	'24': 'Seçenek bonusu',
+	'25': 'Sözleşme indirimi',
+	'26': 'Finansman ücreti',
+	'27': 'Sürekli sözleşme likidasyonu',
+	'28': 'Kampanya ücreti',
+	'29': 'Kampanya karı',
+	'30': 'Kampanya zararı',
+	'31': 'Kampanya indirimi',
+	'32': 'Eş düzey ödülü',
+	'33': 'Platform ücreti geliri',
+	'34': 'Hızlı sözleşme başarısız',
+	'35': 'Hızlı sözleşme bonusu',
+	'36': 'Servet faizi',
+	'37': 'Kopya işlem ücreti',
+	'38': 'Kopya işlem karı',
+	'39': 'Kopya işlem zararı',
+	'40': 'Kopya işlem kar payı',
+	'41': 'Kopya işlem indirimi',
+	'42': 'Kopya finansman ücreti',
+	'47': 'Bonus çekme',
+	'49': 'Staking',
+	'50': 'Staking serbest bırakma',
+	'51': 'Hava düşü ödülü',
+	'52': 'Staking cüzdanına transfer',
+	'53': 'Staking cüzdanından transfer',
 }
 
-function buildId(): FuturesPageMessages {
-  return deepMerge(buildEn(), { ...idUiOverlay, fundingTx: fundingTxId }) as FuturesPageMessages
+// 越南语
+const fundingTxVi : Record<string, string> = {
+	'0': 'Nạp tiền',
+	'1': 'Rút tiền',
+	'2': 'Chuyển khoản',
+	'3': 'Giao dịch spot',
+	'4': 'Mua fiat',
+	'5': 'Bán fiat',
+	'6': 'Thưởng đăng nhập',
+	'7': 'Thưởng giới thiệu',
+	'8': 'Thưởng copy trading',
+	'9': 'Bình chọn',
+	'10': 'Nạp tiền thủ công',
+	'11': 'Ghép cặp',
+	'12': 'Thưởng giao dịch',
+	'13': 'Mua CTC',
+	'14': 'Bán CTC',
+	'15': 'Thư đỏ đã gửi',
+	'16': 'Thư đỏ đã nhận',
+	'17': 'Rút tiền bằng mã',
+	'18': 'Nạp tiền bằng mã',
+	'19': 'Phí hợp đồng vĩnh viễn',
+	'20': 'Lợi nhuận hợp đồng vĩnh viễn',
+	'21': 'Thua lỗ hợp đồng vĩnh viễn',
+	'22': 'Lựa chọn thất bại',
+	'23': 'Phí lựa chọn',
+	'24': 'Thưởng lựa chọn',
+	'25': 'Hoàn phí hợp đồng',
+	'26': 'Phí tài trợ',
+	'27': 'Thanh lý hợp đồng vĩnh viễn',
+	'28': 'Phí chiến dịch',
+	'29': 'Lợi nhuận chiến dịch',
+	'30': 'Thua lỗ chiến dịch',
+	'31': 'Hoàn phí chiến dịch',
+	'32': 'Thưởng cấp bằng',
+	'33': 'Thu nhập phí nền tảng',
+	'34': 'Hợp đồng nhanh thất bại',
+	'35': 'Thưởng hợp đồng nhanh',
+	'36': 'Lãi suất tài chính',
+	'37': 'Phí copy trading',
+	'38': 'Lợi nhuận copy trading',
+	'39': 'Thua lỗ copy trading',
+	'40': 'Chia sẻ lợi nhuận copy trading',
+	'41': 'Hoàn phí copy trading',
+	'42': 'Phí tài trợ copy trading',
+	'47': 'Rút thưởng',
+	'49': 'Staking',
+	'50': 'Giải phóng staking',
+	'51': 'Thưởng airdrop',
+	'52': 'Chuyển đến ví staking',
+	'53': 'Chuyển từ ví staking',
+}
+
+function buildZhCN() : FuturesPageMessages {
+	return {
+		perpetual: '永续合约',
+		perpetualTag: '永续',
+		pairSearchPlaceholder: '搜索',
+		pairSearchTag:{
+			oneType: '加密货币',
+			twoType: '大宗商品',
+			threeType: '贵金属',
+			fourType: '外汇',
+		},
+		pairEmpty: '无匹配结果',
+		stats: {
+			change24h: '24h涨跌',
+			markPrice: '标记价格',
+			high24h: '24h最高价',
+			low24h: '24h最低价',
+			volume24h: '24h成交量',
+			fundingCountdown: '资金费率 / 倒计时',
+		},
+		mobileTabs: { chart: '行情', trade: '交易' },
+		chartSub: { chart: '图表', coinInfo: '币种资料', fundingHistory: '历史资金费率' },
+		tf: {
+			m1: '1分',
+			m5: '5分',
+			m15: '15分',
+			m30: '30分',
+			h1: '1小时',
+			h4: '4小时',
+			d1: '1日',
+			w1: '1周',
+			mo1: '1月',
+			mo3: '3月',
+		},
+		chartTools: { fullscreen: '全屏', alert: '提醒' },
+		draw: {
+			cursor: '光标',
+			trend: '趋势线',
+			hline: '水平线',
+			ray: '射线',
+			channel: '通道线',
+			fib: '斐波那契回撤',
+			text: '文字标注',
+			clearAll: '删除所有标注',
+			zoomOut: '缩小',
+		},
+		ohlcv: {
+			open: '开',
+			high: '高',
+			low: '低',
+			close: '收',
+			volume: '成交量',
+			changePct: '涨幅',
+			amplitude: '振幅',
+		},
+		coinInfo: {
+			marketCap: '市值',
+			circulating: '流通量',
+			issuePrice: '发行价',
+			ath: '历史最高',
+			athDate: 'ATH 日期',
+			whitepaper: '白皮书',
+			empty: '暂无币种资料',
+			reload: '重新加载',
+		},
+		fundingPanel: {
+			rate: '资金费率',
+			period: '结算周期',
+			nextCountdown: '下次结算倒计时',
+			noChart: '暂无图表数据',
+			settleTime: '结算时间',
+			rateCol: '资金费率',
+			empty7d: '暂无近7天数据',
+		},
+		book: {
+			orderBook: '订单簿',
+			trades: '最新成交',
+			priceQuote: '价格(USDT)',
+			amountBase: '数量({base})',
+			totalBase: '总量({base})',
+			time: '时间',
+			buy: '买',
+			sell: '卖',
+			buyRatio: '买 {n}%',
+			sellRatio: '{n}% 卖',
+			noTrades: '暂无成交数据',
+		},
+		margin: { cross: '全仓', split: '分仓', experience: '体验金' },
+		amountUnit: { lots: '张', usdt: 'USDT' },
+		leverage: { adjustTitle: '调整杠杆' },
+		order: {
+			limit: '限价',
+			market: '市价',
+			conditional: '条件委托',
+			condMarket: '市价委托',
+			condLimit: '限价委托',
+			available: '可用',
+			maxOpen: '最大可开',
+			triggerPriceLabel: '触发价 ({q})',
+			priceLabel: '价格 ({q})',
+			latestBtn: '最新',
+			marketExe: '市价成交',
+			condMarketExe: '触发后市价成交',
+			qtyLabel: '数量 ({u})',
+			transferTitle: '划转',
+			openLong: '开多',
+			openShort: '开空',
+			contractInfoTitle: '合约信息',
+			indexSource: '指数来源',
+			marginCoin: '保证金币种',
+			maxLeverage: '最大杠杆',
+			maintMargin: '维持保证金率',
+			openFee: '开仓手续费',
+			closeFee: '平仓手续费',
+			contractValue: '合约面值',
+			minOrder: '最小下单量',
+			maxOrder: '最大下单量',
+		},
+		placeholders: { searchPair: '搜索', triggerPrice: '请输入触发价', price: '请输入价格', amount: '请输入数量' },
+		bottom: {
+			positions: '仓位',
+			openOrders: '当前委托',
+			historyOrders: '历史委托',
+			historyPositions: '历史仓位',
+			tradeDetails: '成交明细',
+			fundingFlow: '资金流水',
+			assets: '资产',
+			closeAllPositions: '一键平仓',
+			cancelAllOrders: '全部撤单',
+			loginPromptOr: '或',
+			registerNow: '立即注册',
+			startTrading: '开始交易',
+		},
+		table: {
+			contract: '合约',
+			dirLeverage: '方向/杠杆',
+			openPrice: '开仓价',
+			markPrice: '标记价',
+			positionSize: '持仓量',
+			margin: '保证金',
+			marginRate: '保证金率',
+			unrealizedPnl: '浮动盈亏',
+			roe: '收益率',
+			liqPrice: '强平价',
+			openTime: '开仓时间',
+			action: '操作',
+			type: '类型',
+			orderPrice: '委托价',
+			entrustPriceHist: '委托价格',
+			triggerPrice: '触发价',
+			orderAmt: '委托量',
+			filled: '已成交',
+			tpPrice: '止盈价',
+			slPrice: '止损价',
+			time: '时间',
+			orderTime: '委托时间',
+			fillTime: '成交时间',
+			profitUsdt: '收益(USDT)',
+			tradedVol: '已成交量',
+			closeAvg: '平仓均价',
+			profitRate: '收益率',
+			closeTime: '平仓时间',
+			directionOpenClose: '方向/开平',
+			dealPrice: '成交价',
+			fee: '手续费',
+			fundType: '类型',
+			amount: '数量',
+			coin: '币种',
+			settlementTime: '结算时间',
+			fundingRate: '资金费率',
+			totalBal: '合约账户总余额',
+			availMargin: '可用保证金',
+			usedMargin: '已用保证金',
+			unrealized: '未实现盈亏',
+			spotWalletBal: '可提现账户余额',
+			fundTransfer: '资金划转',
+			avgOpenPrice: '开仓均价',
+			feeHint: '手续费(USDT)',
+			estimatedPnlRow: '预计盈亏',
+			triggerUsdt: '触发价(USDT)',
+			orderPriceUsdt: '委托价(USDT)',
+			openAvgUsdt: '开仓均价(USDT)',
+			closeAvgUsdt: '平仓均价(USDT)',
+			tpUsdt: '止盈价(USDT)',
+			slUsdt: '止损价(USDT)',
+			marginUsdtBracket: '保证金(USDT)',
+			notionalUsdt: '仓位价值(USDT)',
+			estLiqPx: '预估强平价',
+			profitBracketUsdt: '收益(USDT)',
+			entrustVolCoin: '委托量({base})',
+			filledVolCoin: '已成交量({base})',
+			closeAvail: '可平:',
+			markPriceBtn: '标记价',
+		},
+		empty: {
+			noPositions: '暂无持仓',
+			noOrders: '暂无委托',
+			noHistPositions: '暂无历史仓位',
+			noHistOrders: '暂无历史委托',
+			noTradeRecords: '暂无成交记录',
+			noFunding: '暂无资金流水',
+		},
+		modal: {
+			confirmDefaultTitle: '请确认',
+			positionDetailTitle: '仓位详情',
+			orderDetailTitle: '委托详情',
+			histPositionDetailTitle: '历史仓位详情',
+			histOrderDetailTitle: '历史委托详情',
+			closePositionTitlePrefix: '平仓',
+			modifyTpSl: '修改止盈止损',
+			setTpSl: '设置止盈止损',
+			posQtyLabel: '持仓量:',
+			currentTpSlSection: '当前止盈止损委托',
+			modifyToSection: '修改为',
+			setPricesSection: '设置价格',
+			tpTriggerLabel: '止盈触发价 ',
+			tpHintOptionalClear: '(不填则清除止盈)',
+			slTriggerLabel: '止损触发价 ',
+			slHintOptionalClear: '(不填则清除止损)',
+			placeholderTpTrigger: '输入止盈触发价',
+			placeholderSlTrigger: '输入止损触发价',
+			confirmCloseBtn: '确认平仓',
+			ok: '确定',
+			closeTypeLiquidation: '爆仓',
+			tpBadge: '止盈',
+			slBadge: '止损',
+			tpPriceWord: '止盈价 ',
+			slPriceWord: '止损价 ',
+			volLabel: '数量:',
+			marginSplitMode: '全仓/分仓',
+			directionLabel: '方向',
+			entrustTypeLabel: '委托类型',
+			leverageLabel: '杠杆',
+		},
+		actions: { tpSl: '止盈止损', reverse: '反手', close: '平仓', marketCloseAll: '市价全平', cancelOrder: '撤单' },
+		positionRow: { hintCross: '全仓', hintExperience: '体验金' },
+		errors: {
+			enterTriggerPrice: '请输入触发价',
+			enterPrice: '请输入价格',
+			priceNotReadyConvert: '价格未就绪,无法换算数量',
+			invalidQtyCheckMin: '数量无效,请检查精度与最小下单量',
+			priceNotReadyRetry: '价格未就绪,请稍后重试',
+			enterQty: '请输入数量',
+			qtyExceedAvail: '数量超出可平量',
+			closeFailed: '平仓失败',
+			modifyTpSlFailed: '修改失败,请稍后重试',
+			txFallback: '类型{n}',
+		},
+		confirm: {
+			reverseTitle: '一键反手',
+			reverseBody: '确认对 {pair} {side} 仓位执行一键反手吗?',
+			cancelAllTitle: '全部撤单',
+			cancelAllBody: '确认撤销当前 {n} 个委托吗?',
+			closeAllTitle: '一键平仓',
+			closeAllBody: '确认对当前 {n} 个持仓执行一键平仓吗?',
+			sideLongWord: '做多',
+			sideShortWord: '做空',
+		},
+		directions: {
+			long: '做多',
+			short: '做空',
+			openLong: '开多',
+			openShort: '开空',
+			closeShort: '平空',
+			closeLong: '平多',
+			openTag: '开',
+			closeTag: '平',
+		},
+		orderTypes: { limit: '限价', plan: '计划委托', takeProfit: '止盈', stopLoss: '止损', marketShort: '市价' },
+		orderStatus: { filled: '已成交', open: '委托中', cancelled: '已撤销', failed: '失败' },
+		closeTypes: {
+			market: '市价平仓',
+			oneClick: '一键平仓',
+			reverseOpen: '反向开仓',
+			tpSl: '止盈止损',
+			liquidation: '爆仓',
+			admin: '管理员平仓',
+		},
+		fundingTx: fundingTxZh,
+	}
+}
+
+function buildEn() : FuturesPageMessages {
+	const b = buildZhCN()
+	return {
+		...b,
+		perpetual: 'Perpetual',
+		perpetualTag: 'Perpetual',
+		pairSearchPlaceholder: 'Search',
+		pairEmpty: 'No matching pairs',
+		stats: {
+			change24h: '24h Change',
+			markPrice: 'Mark',
+			high24h: '24h High',
+			low24h: '24h Low',
+			volume24h: '24h Volume',
+			fundingCountdown: 'Funding / Countdown',
+		},
+		mobileTabs: { chart: 'Chart', trade: 'Trade' },
+		chartSub: { chart: 'Chart', coinInfo: 'Coin Info', fundingHistory: 'Funding History' },
+		tf: {
+			m1: '1m',
+			m5: '5m',
+			m15: '15m',
+			m30: '30m',
+			h1: '1h',
+			h4: '4h',
+			d1: '1d',
+			w1: '1w',
+			mo1: '1mon',
+			mo3: '3mon'
+		},
+		chartTools: { fullscreen: 'Fullscreen', alert: 'Alerts' },
+		draw: {
+			cursor: 'Cursor',
+			trend: 'Trend line',
+			hline: 'Horizontal',
+			ray: 'Ray',
+			channel: 'Channel',
+			fib: 'Fib retracement',
+			text: 'Text',
+			clearAll: 'Clear drawings',
+			zoomOut: 'Zoom out',
+		},
+		ohlcv: {
+			open: 'O',
+			high: 'H',
+			low: 'L',
+			close: 'C',
+			volume: 'Volume',
+			changePct: 'Change',
+			amplitude: 'Range',
+		},
+		coinInfo: {
+			marketCap: 'Market cap',
+			circulating: 'Circulating supply',
+			issuePrice: 'Issue price',
+			ath: 'All-time high',
+			athDate: 'ATH date',
+			whitepaper: 'Whitepaper',
+			empty: 'No coin info',
+			reload: 'Reload',
+		},
+		fundingPanel: {
+			rate: 'Funding rate',
+			period: 'Settlement period',
+			nextCountdown: 'Next countdown',
+			noChart: 'No chart data',
+			settleTime: 'Settlement',
+			rateCol: 'Funding rate',
+			empty7d: 'No last-7-days data',
+		},
+		book: {
+			orderBook: 'Order book',
+			trades: 'Trades',
+			priceQuote: 'Price (USDT)',
+			amountBase: 'Amount ({base})',
+			totalBase: 'Total ({base})',
+			time: 'Time',
+			buy: 'Buy',
+			sell: 'Sell',
+			buyRatio: 'Buy {n}%',
+			sellRatio: '{n}% Sell',
+			noTrades: 'No trades',
+		},
+		margin: { cross: 'Cross', split: 'Isolated', experience: 'Bonus' },
+		amountUnit: { lots: 'Cont', usdt: 'USDT' },
+		leverage: { adjustTitle: 'Adjust leverage' },
+		order: {
+			limit: 'Limit',
+			market: 'Market',
+			conditional: 'Conditional',
+			condMarket: 'Market conditional',
+			condLimit: 'Limit conditional',
+			available: 'Available',
+			maxOpen: 'Max to open',
+			triggerPriceLabel: 'Trigger ({q})',
+			priceLabel: 'Price ({q})',
+			latestBtn: 'Last',
+			marketExe: 'Market',
+			condMarketExe: 'Market after trigger',
+			qtyLabel: 'Amount ({u})',
+			transferTitle: 'Transfer',
+			openLong: 'Buy / Long',
+			openShort: 'Sell / Short',
+			contractInfoTitle: 'Contract info',
+			indexSource: 'Index sources',
+			marginCoin: 'Margin asset',
+			maxLeverage: 'Max leverage',
+			maintMargin: 'Maint. margin rate',
+			openFee: 'Open fee',
+			closeFee: 'Close fee',
+			contractValue: 'Contract value',
+			minOrder: 'Min order size',
+			maxOrder: 'Max order size',
+		},
+		placeholders: {
+			searchPair: 'Search',
+			triggerPrice: 'Enter trigger price',
+			price: 'Enter price',
+			amount: 'Enter amount',
+		},
+		bottom: {
+			positions: 'Positions',
+			openOrders: 'Open orders',
+			historyOrders: 'Order history',
+			historyPositions: 'Position history',
+			tradeDetails: 'Trades',
+			fundingFlow: 'Funding',
+			assets: 'Assets',
+			closeAllPositions: 'Close all',
+			cancelAllOrders: 'Cancel all',
+			loginPromptOr: 'or',
+			registerNow: 'Register now',
+			startTrading: 'to start trading',
+		},
+		table: {
+			contract: 'Contract',
+			dirLeverage: 'Dir./Lev.',
+			openPrice: 'Open',
+			markPrice: 'Mark',
+			positionSize: 'Size',
+			margin: 'Margin',
+			marginRate: 'Margin ratio',
+			unrealizedPnl: 'UPnL',
+			roe: 'ROE',
+			liqPrice: 'Liq. price',
+			openTime: 'Open time',
+			action: 'Action',
+			type: 'Type',
+			orderPrice: 'Price',
+			entrustPriceHist: 'Order price',
+			triggerPrice: 'Trigger',
+			orderAmt: 'Order qty',
+			filled: 'Filled',
+			tpPrice: 'Take profit',
+			slPrice: 'Stop loss',
+			time: 'Time',
+			orderTime: 'Order time',
+			fillTime: 'Fill time',
+			profitUsdt: 'P&L (USDT)',
+			tradedVol: 'Filled qty',
+			closeAvg: 'Close avg.',
+			profitRate: 'ROE',
+			closeTime: 'Close time',
+			directionOpenClose: 'Side/O-C',
+			dealPrice: 'Fill price',
+			fee: 'Fee',
+			fundType: 'Type',
+			amount: 'Amount',
+			coin: 'Coin',
+			settlementTime: 'Settlement',
+			fundingRate: 'Funding rate',
+			totalBal: 'Futures balance',
+			availMargin: 'Available margin',
+			usedMargin: 'Used margin',
+			unrealized: 'Unrealized P&L',
+			spotWalletBal: 'Withdrawable account balance',
+			fundTransfer: 'Transfer',
+			avgOpenPrice: 'Avg. open',
+			feeHint: 'Fee (USDT)',
+			estimatedPnlRow: 'Est. P&L',
+			triggerUsdt: 'Trigger (USDT)',
+			orderPriceUsdt: 'Order price (USDT)',
+			openAvgUsdt: 'Avg. entry (USDT)',
+			closeAvgUsdt: 'Avg. exit (USDT)',
+			tpUsdt: 'TP (USDT)',
+			slUsdt: 'SL (USDT)',
+			marginUsdtBracket: 'Margin (USDT)',
+			notionalUsdt: 'Position value (USDT)',
+			estLiqPx: 'Est. liq. price',
+			profitBracketUsdt: 'P&L (USDT)',
+			entrustVolCoin: 'Order qty ({base})',
+			filledVolCoin: 'Filled ({base})',
+			closeAvail: 'Closable:',
+			markPriceBtn: 'Mark',
+		},
+		empty: {
+			noPositions: 'No positions',
+			noOrders: 'No orders',
+			noHistPositions: 'No position history',
+			noHistOrders: 'No historical orders',
+			noTradeRecords: 'No fills',
+			noFunding: 'No funding records',
+		},
+		modal: {
+			confirmDefaultTitle: 'Please confirm',
+			positionDetailTitle: 'Position detail',
+			orderDetailTitle: 'Order detail',
+			histPositionDetailTitle: 'Historical position',
+			histOrderDetailTitle: 'Historical order',
+			closePositionTitlePrefix: 'Close',
+			modifyTpSl: 'Edit TP/SL',
+			setTpSl: 'Set TP/SL',
+			posQtyLabel: 'Size:',
+			currentTpSlSection: 'Active TP/SL orders',
+			modifyToSection: 'Change to',
+			setPricesSection: 'Prices',
+			tpTriggerLabel: 'Take-profit trigger ',
+			tpHintOptionalClear: '(Leave empty to clear TP)',
+			slTriggerLabel: 'Stop-loss trigger ',
+			slHintOptionalClear: '(Leave empty to clear SL)',
+			placeholderTpTrigger: 'TP trigger price',
+			placeholderSlTrigger: 'SL trigger price',
+			confirmCloseBtn: 'Confirm close',
+			ok: 'OK',
+			closeTypeLiquidation: 'Liquidated',
+			tpBadge: 'TP',
+			slBadge: 'SL',
+			tpPriceWord: 'TP ',
+			slPriceWord: 'SL ',
+			volLabel: 'Qty:',
+			marginSplitMode: 'Cross / Isolated',
+			directionLabel: 'Side',
+			entrustTypeLabel: 'Order type',
+			leverageLabel: 'Leverage',
+		},
+		actions: { tpSl: 'TP/SL', reverse: 'Reverse', close: 'Close', marketCloseAll: 'Market close all', cancelOrder: 'Cancel' },
+		positionRow: { hintCross: 'Cross', hintExperience: 'Bonus' },
+		errors: {
+			enterTriggerPrice: 'Enter trigger price',
+			enterPrice: 'Enter price',
+			priceNotReadyConvert: 'Price not ready — cannot convert size',
+			invalidQtyCheckMin: 'Invalid size — check precision and minimum order',
+			priceNotReadyRetry: 'Price not ready, please retry',
+			enterQty: 'Enter quantity',
+			qtyExceedAvail: 'Qty exceeds closeable amount',
+			closeFailed: 'Close failed',
+			modifyTpSlFailed: 'Update failed — try later',
+			txFallback: 'Type {n}',
+		},
+		confirm: {
+			reverseTitle: 'Reverse position',
+			reverseBody: 'Reverse {pair} {side}?',
+			cancelAllTitle: 'Cancel all',
+			cancelAllBody: 'Cancel {n} orders?',
+			closeAllTitle: 'Close all',
+			closeAllBody: 'Market-close {n} positions?',
+			sideLongWord: 'long',
+			sideShortWord: 'short',
+		},
+		directions: {
+			long: 'Long',
+			short: 'Short',
+			openLong: 'Open long',
+			openShort: 'Open short',
+			closeShort: 'Close short',
+			closeLong: 'Close long',
+			openTag: 'O',
+			closeTag: 'C',
+		},
+		orderTypes: { limit: 'Limit', plan: 'Trigger', takeProfit: 'Take profit', stopLoss: 'Stop loss', marketShort: 'Market' },
+		orderStatus: { filled: 'Filled', open: 'Open', cancelled: 'Cancelled', failed: 'Failed' },
+		closeTypes: {
+			market: 'Market close',
+			oneClick: 'Bulk close',
+			reverseOpen: 'Reverse open',
+			tpSl: 'TP/SL',
+			liquidation: 'Liquidation',
+			admin: 'Admin close',
+		},
+		fundingTx: fundingTxEn,
+	}
+}
+
+function buildZhTW() : FuturesPageMessages {
+	const cn = buildZhCN()
+	return {
+		...cn,
+		perpetual: '永續合約',
+		perpetualTag: '永續',
+		pairSearchPlaceholder: '搜尋',
+		pairEmpty: '無符合結果',
+		stats: {
+			change24h: '24h漲跌',
+			markPrice: '標記價格',
+			high24h: '24h最高價',
+			low24h: '24h最低價',
+			volume24h: '24h成交量',
+			fundingCountdown: '資金費率 / 倒計時',
+		},
+		mobileTabs: { chart: '行情', trade: '交易' },
+		chartSub: { chart: '圖表', coinInfo: '幣種資料', fundingHistory: '歷史資金費率' },
+		tf: {
+			m1: '1分',
+			m5: '5分',
+			m15: '15分',
+			m30: '30分',
+			h1: '1小時',
+			h4: '4小時',
+			d1: '1日',
+			w1: '1週',
+			mo1: '1月',
+			mo3: '3月'
+		},
+		chartTools: { fullscreen: '全螢幕', alert: '提醒' },
+		draw: {
+			cursor: '游標',
+			trend: '趨勢線',
+			hline: '水平線',
+			ray: '射線',
+			channel: '通道線',
+			fib: '斐波那契回撤',
+			text: '文字標註',
+			clearAll: '刪除所有標註',
+			zoomOut: '縮小',
+		},
+		ohlcv: { ...cn.ohlcv, volume: '成交量', changePct: '漲幅', amplitude: '振幅' },
+		coinInfo: {
+			marketCap: '市值',
+			circulating: '流通量',
+			issuePrice: '發行價',
+			ath: '歷史最高',
+			athDate: 'ATH 日期',
+			whitepaper: '白皮書',
+			empty: '暫無幣種資料',
+			reload: '重新載入',
+		},
+		fundingPanel: {
+			rate: '資金費率',
+			period: '結算週期',
+			nextCountdown: '下次結算倒計時',
+			noChart: '暫無圖表數據',
+			settleTime: '結算時間',
+			rateCol: '資金費率',
+			empty7d: '暫無近7天數據',
+		},
+		book: {
+			orderBook: '訂單簿',
+			trades: '最新成交',
+			priceQuote: '價格(USDT)',
+			amountBase: '數量({base})',
+			totalBase: '總量({base})',
+			time: '時間',
+			buy: '買',
+			sell: '賣',
+			buyRatio: '買 {n}%',
+			sellRatio: '{n}% 賣',
+			noTrades: '暫無成交資料',
+		},
+		margin: { cross: '全倉', split: '分倉', experience: '體驗金' },
+		amountUnit: { lots: '張', usdt: 'USDT' },
+		leverage: { adjustTitle: '調整槓桿' },
+		order: {
+			limit: '限價',
+			market: '市價',
+			conditional: '條件委託',
+			condMarket: '市價委託',
+			condLimit: '限價委託',
+			available: '可用',
+			maxOpen: '最大可開',
+			triggerPriceLabel: '觸發價 ({q})',
+			priceLabel: '價格 ({q})',
+			latestBtn: '最新',
+			marketExe: '市價成交',
+			condMarketExe: '觸發後市價成交',
+			qtyLabel: '數量 ({u})',
+			transferTitle: '劃轉',
+			openLong: '開多',
+			openShort: '開空',
+			contractInfoTitle: '合約資訊',
+			indexSource: '指數來源',
+			marginCoin: '保證金幣種',
+			maxLeverage: '最大槓桿',
+			maintMargin: '維持保證金率',
+			openFee: '開倉手續費',
+			closeFee: '平倉手續費',
+			contractValue: '合約面值',
+			minOrder: '最小下單量',
+			maxOrder: '最大下單量',
+		},
+		placeholders: { searchPair: '搜尋', triggerPrice: '請輸入觸發價', price: '請輸入價格', amount: '請輸入數量' },
+		bottom: {
+			positions: '倉位',
+			openOrders: '當前委託',
+			historyOrders: '歷史委託',
+			historyPositions: '歷史倉位',
+			tradeDetails: '成交明細',
+			fundingFlow: '資金流水',
+			assets: '資產',
+			closeAllPositions: '一鍵平倉',
+			cancelAllOrders: '全部撤單',
+			loginPromptOr: '或',
+			registerNow: '立即註冊',
+			startTrading: '開始交易',
+		},
+		table: {
+			contract: '合約',
+			dirLeverage: '方向/槓桿',
+			openPrice: '開倉價',
+			markPrice: '標記價',
+			positionSize: '持倉量',
+			margin: '保證金',
+			marginRate: '保證金率',
+			unrealizedPnl: '浮動盈虧',
+			roe: '收益率',
+			liqPrice: '強平價',
+			openTime: '開倉時間',
+			action: '操作',
+			type: '類型',
+			orderPrice: '委託價',
+			entrustPriceHist: '委託價格',
+			triggerPrice: '觸發價',
+			orderAmt: '委託量',
+			filled: '已成交',
+			tpPrice: '止盈價',
+			slPrice: '止損價',
+			time: '時間',
+			orderTime: '委託時間',
+			fillTime: '成交時間',
+			profitUsdt: '收益(USDT)',
+			tradedVol: '已成交量',
+			closeAvg: '平倉均價',
+			profitRate: '收益率',
+			closeTime: '平倉時間',
+			directionOpenClose: '方向/開平',
+			dealPrice: '成交價',
+			fee: '手續費',
+			fundType: '類型',
+			amount: '數量',
+			coin: '幣種',
+			settlementTime: '結算時間',
+			fundingRate: '資金費率',
+			totalBal: '合約帳戶總餘額',
+			availMargin: '可用保證金',
+			usedMargin: '已用保證金',
+			unrealized: '未實現盈虧',
+			spotWalletBal: '可提現帳戶餘額',
+			fundTransfer: '資金劃轉',
+			avgOpenPrice: '開倉均價',
+			feeHint: '手續費(USDT)',
+			estimatedPnlRow: '預計盈虧',
+			triggerUsdt: '觸發價(USDT)',
+			orderPriceUsdt: '委託價(USDT)',
+			openAvgUsdt: '開倉均價(USDT)',
+			closeAvgUsdt: '平倉均價(USDT)',
+			tpUsdt: '止盈價(USDT)',
+			slUsdt: '止損價(USDT)',
+			marginUsdtBracket: '保證金(USDT)',
+			notionalUsdt: '倉位價值(USDT)',
+			estLiqPx: '預估強平價',
+			profitBracketUsdt: '收益(USDT)',
+			entrustVolCoin: '委託量({base})',
+			filledVolCoin: '已成交量({base})',
+			closeAvail: '可平:',
+			markPriceBtn: '標記價',
+		},
+		empty: {
+			noPositions: '暫無持倉',
+			noOrders: '暫無委託',
+			noHistPositions: '暫無歷史倉位',
+			noHistOrders: '暫無歷史委託',
+			noTradeRecords: '暫無成交記錄',
+			noFunding: '暫無資金流水',
+		},
+		modal: {
+			confirmDefaultTitle: '請確認',
+			positionDetailTitle: '倉位詳情',
+			orderDetailTitle: '委託詳情',
+			histPositionDetailTitle: '歷史倉位詳情',
+			histOrderDetailTitle: '歷史委託詳情',
+			closePositionTitlePrefix: '平倉',
+			modifyTpSl: '修改止盈止損',
+			setTpSl: '設置止盈止損',
+			posQtyLabel: '持倉量:',
+			currentTpSlSection: '當前止盈止損委託',
+			modifyToSection: '修改為',
+			setPricesSection: '設置價格',
+			tpTriggerLabel: '止盈觸發價 ',
+			tpHintOptionalClear: '(不填則清除止盈)',
+			slTriggerLabel: '止損觸發價 ',
+			slHintOptionalClear: '(不填則清除止損)',
+			placeholderTpTrigger: '輸入止盈觸發價',
+			placeholderSlTrigger: '輸入止損觸發價',
+			confirmCloseBtn: '確認平倉',
+			ok: '確定',
+			closeTypeLiquidation: '爆倉',
+			tpBadge: '止盈',
+			slBadge: '止損',
+			tpPriceWord: '止盈價 ',
+			slPriceWord: '止損價 ',
+			volLabel: '數量:',
+			marginSplitMode: '全倉/分倉',
+			directionLabel: '方向',
+			entrustTypeLabel: '委託類型',
+			leverageLabel: '槓桿',
+		},
+		actions: { tpSl: '止盈止損', reverse: '反手', close: '平倉', marketCloseAll: '市價全平', cancelOrder: '撤單' },
+		positionRow: { hintCross: '全倉', hintExperience: '體驗金' },
+		errors: {
+			enterTriggerPrice: '請輸入觸發價',
+			enterPrice: '請輸入價格',
+			priceNotReadyConvert: '價格未就緒,無法換算數量',
+			invalidQtyCheckMin: '數量無效,請檢查精度與最小下單量',
+			priceNotReadyRetry: '價格未就緒,請稍後重試',
+			enterQty: '請輸入數量',
+			qtyExceedAvail: '數量超出可平量',
+			closeFailed: '平倉失敗',
+			modifyTpSlFailed: '修改失敗,請稍後重試',
+			txFallback: '類型{n}',
+		},
+		confirm: {
+			reverseTitle: '一鍵反手',
+			reverseBody: '確認對 {pair} {side} 倉位執行一鍵反手嗎?',
+			cancelAllTitle: '全部撤單',
+			cancelAllBody: '確認撤銷當前 {n} 個委託嗎?',
+			closeAllTitle: '一鍵平倉',
+			closeAllBody: '確認對當前 {n} 個持倉執行一鍵平倉嗎?',
+			sideLongWord: '做多',
+			sideShortWord: '做空',
+		},
+		directions: {
+			long: '做多',
+			short: '做空',
+			openLong: '開多',
+			openShort: '開空',
+			closeShort: '平空',
+			closeLong: '平多',
+			openTag: '開',
+			closeTag: '平',
+		},
+		orderTypes: { limit: '限價', plan: '計畫委託', takeProfit: '止盈', stopLoss: '止損', marketShort: '市價' },
+		orderStatus: { filled: '已成交', open: '委託中', cancelled: '已撤銷', failed: '失敗' },
+		closeTypes: {
+			market: '市價平倉',
+			oneClick: '一鍵平倉',
+			reverseOpen: '反向開倉',
+			tpSl: '止盈止損',
+			liquidation: '爆倉',
+			admin: '管理員平倉',
+		},
+		fundingTx: fundingTw,
+	}
+}
+
+function buildKo() : FuturesPageMessages {
+	return deepMerge(buildEn(), { ...koUiOverlay, fundingTx: fundingTxKo }) as FuturesPageMessages
+}
+
+function buildJa() : FuturesPageMessages {
+	return deepMerge(buildEn(), { ...jaUiOverlay, fundingTx: fundingTxJa }) as FuturesPageMessages
+}
+
+function buildHi() : FuturesPageMessages {
+	return deepMerge(buildEn(), { ...hiUiOverlay, fundingTx: fundingTxHi }) as FuturesPageMessages
+}
+
+function buildId() : FuturesPageMessages {
+	return deepMerge(buildEn(), { ...idUiOverlay, fundingTx: fundingTxId }) as FuturesPageMessages
+}
+
+function buildEs() : FuturesPageMessages {
+	return deepMerge(buildEn(), { ...esUiOverlay, fundingTx: fundingTxEs }) as FuturesPageMessages
+}
+
+function buildRu() : FuturesPageMessages {
+	return deepMerge(buildEn(), { ...ruUiOverlay, fundingTx: fundingTxRu }) as FuturesPageMessages
+}
+
+function buildPt() : FuturesPageMessages {
+	return deepMerge(buildEn(), { ...ptUiOverlay, fundingTx: fundingTxPt }) as FuturesPageMessages
+}
+
+function buildDe() : FuturesPageMessages {
+	return deepMerge(buildEn(), { ...deUiOverlay, fundingTx: fundingTxDe }) as FuturesPageMessages
+}
+
+function buildFr() : FuturesPageMessages {
+	return deepMerge(buildEn(), { ...frUiOverlay, fundingTx: fundingTxFr }) as FuturesPageMessages
+}
+
+function buildTr() : FuturesPageMessages {
+	return deepMerge(buildEn(), { ...trUiOverlay, fundingTx: fundingTxTr }) as FuturesPageMessages
+}
+
+function buildVi() : FuturesPageMessages {
+	return deepMerge(buildEn(), { ...viUiOverlay, fundingTx: fundingTxVi }) as FuturesPageMessages
 }
 
 export const futuresPageByLocale = {
-  'zh-CN': buildZhCN(),
-  'zh-TW': buildZhTW(),
-  en: buildEn(),
-  ko: buildKo(),
-  ja: buildJa(),
-  hi: buildHi(),
-  id: buildId(),
-} as const
+	'zh-CN': buildZhCN(),
+	'zh-TW': buildZhTW(),
+	en: buildEn(),
+	ko: buildKo(),
+	ja: buildJa(),
+	hi: buildHi(),
+	id: buildId(),
+	es: buildEs(),
+	ru: buildRu(),
+	pt: buildPt(),
+	de: buildDe(),
+	fr: buildFr(),
+	tr: buildTr(),
+	vi: buildVi(),
+} as const

+ 267 - 0
code/src/locales/futuresPage/overlays/de.ts

@@ -0,0 +1,267 @@
+import type { DeepPartial, FuturesPageMessages } from '../../futuresPage.i18n'
+
+export const deUiOverlay: DeepPartial<FuturesPageMessages> = {
+  perpetual: 'Perpetual Futures',
+  perpetualTag: 'Perpetual',
+  pairSearchPlaceholder: 'Suchen',
+  pairEmpty: 'Keine Treffer',
+  stats: {
+    change24h: '24h Änderung',
+    markPrice: 'Markkurs',
+    high24h: '24h Hoch',
+    low24h: '24h Tief',
+    volume24h: '24h Volumen',
+    fundingCountdown: 'Funding / Countdown',
+  },
+  mobileTabs: { chart: 'Chart', trade: 'Handel' },
+  chartSub: { chart: 'Chart', coinInfo: 'Coin-Info', fundingHistory: 'Funding-Verlauf' },
+  chartTools: { fullscreen: 'Vollbild', alert: 'Benachrichtigung' },
+  draw: {
+    cursor: 'Cursor',
+    trend: 'Trendlinie',
+    hline: 'Horizontale',
+    ray: 'Strahl',
+    channel: 'Kanal',
+    fib: 'Fibonacci',
+    text: 'Text',
+    clearAll: 'Zeichnungen löschen',
+    zoomOut: 'Verkleinern',
+  },
+  ohlcv: {
+    open: 'Eröff',
+    high: 'Hoch',
+    low: 'Tief',
+    close: 'Schluss',
+    volume: 'Volumen',
+    changePct: 'Änderung',
+    amplitude: 'Spannweite',
+  },
+  coinInfo: {
+    marketCap: 'Marktkapital',
+    circulating: 'Umlaufmenge',
+    issuePrice: 'Ausgabepreis',
+    ath: 'Allzeithoch',
+    athDate: 'ATH-Datum',
+    whitepaper: 'Whitepaper',
+    empty: 'Keine Coin-Daten',
+    reload: 'Neu laden',
+  },
+  fundingPanel: {
+    rate: 'Funding-Satz',
+    period: 'Abrechnungszyklus',
+    nextCountdown: 'Nächster Countdown',
+    noChart: 'Keine Chartdaten',
+    settleTime: 'Abrechnung',
+    rateCol: 'Funding-Satz',
+    empty7d: 'Keine 7-Tage-Daten',
+  },
+  book: {
+    orderBook: 'Orderbuch',
+    trades: 'Trades',
+    priceQuote: 'Preis (USDT)',
+    amountBase: 'Menge ({base})',
+    totalBase: 'Gesamt ({base})',
+    time: 'Zeit',
+    buy: 'Kaufen',
+    sell: 'Verkaufen',
+    buyRatio: 'Kauf {n}%',
+    sellRatio: '{n}% Verkauf',
+    noTrades: 'Keine Trades',
+  },
+  margin: { cross: 'Cross', split: 'Isoliert', experience: 'Bonus' },
+  amountUnit: { lots: 'Kontrakt', usdt: 'USDT' },
+  leverage: { adjustTitle: 'Hebel anpassen' },
+  order: {
+    limit: 'Limit',
+    market: 'Market',
+    conditional: 'Bedingt',
+    condMarket: 'Bedingt Market',
+    condLimit: 'Bedingt Limit',
+    available: 'Verfügbar',
+    maxOpen: 'Max öffnen',
+    triggerPriceLabel: 'Trigger ({q})',
+    priceLabel: 'Preis ({q})',
+    latestBtn: 'Letzt',
+    marketExe: 'Market',
+    condMarketExe: 'Market nach Trigger',
+    qtyLabel: 'Menge ({u})',
+    transferTitle: 'Überweisung',
+    openLong: 'Kauf / Long',
+    openShort: 'Verkauf / Short',
+    contractInfoTitle: 'Kontraktinfo',
+    indexSource: 'Indexquelle',
+    marginCoin: 'Margin-Asset',
+    maxLeverage: 'Max Hebel',
+    maintMargin: 'Erhaltungsmargin',
+    openFee: 'Eröffnungsgebühr',
+    closeFee: 'Schlussgebühr',
+    contractValue: 'Kontraktwert',
+    minOrder: 'Mindestorder',
+    maxOrder: 'Maxorder',
+  },
+  placeholders: {
+    searchPair: 'Suchen',
+    triggerPrice: 'Triggerpreis eingeben',
+    price: 'Preis eingeben',
+    amount: 'Menge eingeben',
+  },
+  bottom: {
+    positions: 'Positionen',
+    openOrders: 'Offene Orders',
+    historyOrders: 'Orderhistorie',
+    historyPositions: 'Positionshistorie',
+    tradeDetails: 'Abschlüsse',
+    fundingFlow: 'Geldfluss',
+    assets: 'Vermögen',
+    closeAllPositions: 'Alles schließen',
+    cancelAllOrders: 'Alles stornieren',
+    loginPromptOr: 'oder',
+    registerNow: 'Registrieren',
+    startTrading: 'Handel starten',
+  },
+  table: {
+    contract: 'Kontrakt',
+    dirLeverage: 'Richtung/Hebel',
+    openPrice: 'Eröffnung',
+    markPrice: 'Markkurs',
+    positionSize: 'Größe',
+    margin: 'Margin',
+    marginRate: 'Marginquote',
+    unrealizedPnl: 'Unreal. Gewinn',
+    roe: 'ROE',
+    liqPrice: 'Liquidationskurs',
+    openTime: 'Eröffnungszeit',
+    action: 'Aktion',
+    type: 'Typ',
+    orderPrice: 'Orderpreis',
+    entrustPriceHist: 'Auftragspreis',
+    triggerPrice: 'Trigger',
+    orderAmt: 'Ordermenge',
+    filled: 'Ausgeführt',
+    tpPrice: 'Take Profit',
+    slPrice: 'Stop Loss',
+    time: 'Zeit',
+    orderTime: 'Orderzeit',
+    fillTime: 'Ausführungszeit',
+    profitUsdt: 'Gewinn (USDT)',
+    tradedVol: 'Ausgefüllt',
+    closeAvg: 'Schlussdurchschnitt',
+    profitRate: 'ROE',
+    closeTime: 'Schlusszeit',
+    directionOpenClose: 'Richtung/Auf-Zu',
+    dealPrice: 'Ausführungspreis',
+    fee: 'Gebühr',
+    fundType: 'Typ',
+    amount: 'Menge',
+    coin: 'Coin',
+    settlementTime: 'Abrechnung',
+    fundingRate: 'Fundingsatz',
+    totalBal: 'Futures-Saldo',
+    availMargin: 'Verfügbare Margin',
+    usedMargin: 'Verbrauchte Margin',
+    unrealized: 'Unreal. Gewinn',
+    spotWalletBal: 'Auszahlbarer Saldo',
+    fundTransfer: 'Überweisung',
+    avgOpenPrice: 'Eröffnungsdurchschnitt',
+    feeHint: 'Gebühr (USDT)',
+    estimatedPnlRow: 'Erwarteter Gewinn',
+    triggerUsdt: 'Trigger (USDT)',
+    orderPriceUsdt: 'Orderpreis (USDT)',
+    openAvgUsdt: 'Einstieg durchschn (USDT)',
+    closeAvgUsdt: 'Ausstieg durchschn (USDT)',
+    tpUsdt: 'TP (USDT)',
+    slUsdt: 'SL (USDT)',
+    marginUsdtBracket: 'Margin (USDT)',
+    notionalUsdt: 'Positionswert (USDT)',
+    estLiqPx: 'Geschätzter Liquidkurs',
+    profitBracketUsdt: 'Gewinn (USDT)',
+    entrustVolCoin: 'Order ({base})',
+    filledVolCoin: 'Ausgefüllt ({base})',
+    closeAvail: 'Schließbar:',
+    markPriceBtn: 'Markkurs',
+  },
+  empty: {
+    noPositions: 'Keine Positionen',
+    noOrders: 'Keine Orders',
+    noHistPositions: 'Keine Positionsverlauf',
+    noHistOrders: 'Keine Orderverlauf',
+    noTradeRecords: 'Keine Abschlüsse',
+    noFunding: 'Keine Geldflussdaten',
+  },
+  modal: {
+    confirmDefaultTitle: 'Bestätigen',
+    positionDetailTitle: 'Positionsdetails',
+    orderDetailTitle: 'Orderdetails',
+    histPositionDetailTitle: 'Alte Position',
+    histOrderDetailTitle: 'Alte Order',
+    closePositionTitlePrefix: 'Schließen',
+    modifyTpSl: 'TP/SL bearbeiten',
+    setTpSl: 'TP/SL festlegen',
+    posQtyLabel: 'Größe:',
+    currentTpSlSection: 'Aktive TP/SL-Orders',
+    modifyToSection: 'Ändern auf',
+    setPricesSection: 'Preise',
+    tpTriggerLabel: 'TP-Trigger ',
+    tpHintOptionalClear: '(leer = TP löschen)',
+    slTriggerLabel: 'SL-Trigger ',
+    slHintOptionalClear: '(leer = SL löschen)',
+    placeholderTpTrigger: 'TP Triggerpreis',
+    placeholderSlTrigger: 'SL Triggerpreis',
+    confirmCloseBtn: 'Schließen bestätigen',
+    ok: 'OK',
+    closeTypeLiquidation: 'Liquidiert',
+    tpBadge: 'TP',
+    slBadge: 'SL',
+    tpPriceWord: 'TP ',
+    slPriceWord: 'SL ',
+    volLabel: 'Menge:',
+    marginSplitMode: 'Cross / Isoliert',
+    directionLabel: 'Richtung',
+    entrustTypeLabel: 'Ordertyp',
+    leverageLabel: 'Hebel',
+  },
+  actions: { tpSl: 'TP/SL', reverse: 'Umkehren', close: 'Schließen', marketCloseAll: 'Alles Markt schließen', cancelOrder: 'Stornieren' },
+  positionRow: { hintCross: 'Cross', hintExperience: 'Bonus' },
+  errors: {
+    enterTriggerPrice: 'Triggerpreis eingeben',
+    enterPrice: 'Preis eingeben',
+    priceNotReadyConvert: 'Preis nicht verfügbar, Umrechnung fehlgeschlagen',
+    invalidQtyCheckMin: 'Menge ungültig, Mindestwert prüfen',
+    priceNotReadyRetry: 'Preis nicht verfügbar, später wiederholen',
+    enterQty: 'Menge eingeben',
+    qtyExceedAvail: 'Menge übersteigt schließbare Größe',
+    closeFailed: 'Schließen fehlgeschlagen',
+    modifyTpSlFailed: 'Änderung fehlgeschlagen, später versuchen',
+    txFallback: 'Typ {n}',
+  },
+  confirm: {
+    reverseTitle: 'Position umkehren',
+    reverseBody: '{pair} {side} umkehren?',
+    cancelAllTitle: 'Alle stornieren',
+    cancelAllBody: '{n} Orders stornieren?',
+    closeAllTitle: 'Alle schließen',
+    closeAllBody: '{n} Positionen marktschließen?',
+    sideLongWord: 'Long',
+    sideShortWord: 'Short',
+  },
+  directions: {
+    long: 'Long',
+    short: 'Short',
+    openLong: 'Long eröffnen',
+    openShort: 'Short eröffnen',
+    closeShort: 'Short schließen',
+    closeLong: 'Long schließen',
+    openTag: 'E',
+    closeTag: 'S',
+  },
+  orderTypes: { limit: 'Limit', plan: 'Trigger', takeProfit: 'Take Profit', stopLoss: 'Stop Loss', marketShort: 'Market' },
+  orderStatus: { filled: 'Ausgeführt', open: 'Offen', cancelled: 'Storniert', failed: 'Fehlgeschlagen' },
+  closeTypes: {
+    market: 'Marktschluss',
+    oneClick: 'Ein-Klick-Schluss',
+    reverseOpen: 'Gegenposition öffnen',
+    tpSl: 'TP/SL',
+    liquidation: 'Liquidation',
+    admin: 'Admin-Schluss',
+  },
+}

+ 268 - 0
code/src/locales/futuresPage/overlays/es.ts

@@ -0,0 +1,268 @@
+import type { DeepPartial, FuturesPageMessages } from '../../futuresPage.i18n'
+
+/** 合约页 UI:在 buildEn 基础上覆盖为西班牙语 */
+export const esUiOverlay: DeepPartial<FuturesPageMessages> = {
+  perpetual: 'Contratos perpetuos',
+  perpetualTag: 'Perpetuo',
+  pairSearchPlaceholder: 'Buscar',
+  pairEmpty: 'Sin coincidencias',
+  stats: {
+    change24h: 'Cambio 24h',
+    markPrice: 'Marca',
+    high24h: 'Máx 24h',
+    low24h: 'Mín 24h',
+    volume24h: 'Volumen 24h',
+    fundingCountdown: 'Financiación / Cuenta atrás',
+  },
+  mobileTabs: { chart: 'Gráfico', trade: 'Operar' },
+  chartSub: { chart: 'Gráfico', coinInfo: 'Info moneda', fundingHistory: 'Historial financiación' },
+  chartTools: { fullscreen: 'Pantalla completa', alert: 'Alertas' },
+  draw: {
+    cursor: 'Cursor',
+    trend: 'Línea tendencia',
+    hline: 'Horizontal',
+    ray: 'Ray',
+    channel: 'Canal',
+    fib: 'Fibonacci',
+    text: 'Texto',
+    clearAll: 'Borrar dibujos',
+    zoomOut: 'Alejar',
+  },
+  ohlcv: {
+    open: 'A',
+    high: 'M',
+    low: 'm',
+    close: 'C',
+    volume: 'Volumen',
+    changePct: 'Cambio',
+    amplitude: 'Rango',
+  },
+  coinInfo: {
+    marketCap: 'Cap. mercado',
+    circulating: 'Suministro circulante',
+    issuePrice: 'Precio emisión',
+    ath: 'Máx histórico',
+    athDate: 'Fecha ATH',
+    whitepaper: 'Whitepaper',
+    empty: 'Sin info de moneda',
+    reload: 'Recargar',
+  },
+  fundingPanel: {
+    rate: 'Tasa financiación',
+    period: 'Período liquidación',
+    nextCountdown: 'Próxima cuenta atrás',
+    noChart: 'Sin datos de gráfico',
+    settleTime: 'Liquidación',
+    rateCol: 'Tasa financiación',
+    empty7d: 'Sin datos últimos 7 días',
+  },
+  book: {
+    orderBook: 'Libro órdenes',
+    trades: 'Operaciones',
+    priceQuote: 'Precio (USDT)',
+    amountBase: 'Cantidad ({base})',
+    totalBase: 'Total ({base})',
+    time: 'Hora',
+    buy: 'Compra',
+    sell: 'Venta',
+    buyRatio: 'Compra {n}%',
+    sellRatio: '{n}% Venta',
+    noTrades: 'Sin operaciones',
+  },
+  margin: { cross: 'Cruzado', split: 'Aislado', experience: 'Bonus' },
+  amountUnit: { lots: 'Contratos', usdt: 'USDT' },
+  leverage: { adjustTitle: 'Ajustar apalancamiento' },
+  order: {
+    limit: 'Límite',
+    market: 'Mercado',
+    conditional: 'Condicional',
+    condMarket: 'Mercado condicional',
+    condLimit: 'Límite condicional',
+    available: 'Disponible',
+    maxOpen: 'Máx a abrir',
+    triggerPriceLabel: 'Disparador ({q})',
+    priceLabel: 'Precio ({q})',
+    latestBtn: 'Último',
+    marketExe: 'Mercado',
+    condMarketExe: 'Mercado después disparador',
+    qtyLabel: 'Cantidad ({u})',
+    transferTitle: 'Transferir',
+    openLong: 'Comprar / Long',
+    openShort: 'Vender / Short',
+    contractInfoTitle: 'Info contrato',
+    indexSource: 'Fuentes índice',
+    marginCoin: 'Activo margen',
+    maxLeverage: 'Apalancamiento máx',
+    maintMargin: 'Tasa margen mantenimiento',
+    openFee: 'Comisión apertura',
+    closeFee: 'Comisión cierre',
+    contractValue: 'Valor contrato',
+    minOrder: 'Mín. orden',
+    maxOrder: 'Máx. orden',
+  },
+  placeholders: {
+    searchPair: 'Buscar',
+    triggerPrice: 'Ingresar precio disparador',
+    price: 'Ingresar precio',
+    amount: 'Ingresar cantidad',
+  },
+  bottom: {
+    positions: 'Posiciones',
+    openOrders: 'Órdenes abiertas',
+    historyOrders: 'Historial órdenes',
+    historyPositions: 'Historial posiciones',
+    tradeDetails: 'Operaciones',
+    fundingFlow: 'Flujo fondos',
+    assets: 'Activos',
+    closeAllPositions: 'Cerrar todas',
+    cancelAllOrders: 'Cancelar todas',
+    loginPromptOr: 'o',
+    registerNow: 'Registrarse',
+    startTrading: 'para operar',
+  },
+  table: {
+    contract: 'Contrato',
+    dirLeverage: 'Dir./Ap.',
+    openPrice: 'Apertura',
+    markPrice: 'Marca',
+    positionSize: 'Tamaño',
+    margin: 'Margen',
+    marginRate: 'Tasa margen',
+    unrealizedPnl: 'PnL no realizado',
+    roe: 'ROE',
+    liqPrice: 'Precio liquidación',
+    openTime: 'Hora apertura',
+    action: 'Acción',
+    type: 'Tipo',
+    orderPrice: 'Precio',
+    entrustPriceHist: 'Precio orden',
+    triggerPrice: 'Disparador',
+    orderAmt: 'Cantidad orden',
+    filled: 'Ejecutada',
+    tpPrice: 'Take profit',
+    slPrice: 'Stop loss',
+    time: 'Hora',
+    orderTime: 'Hora orden',
+    fillTime: 'Hora ejecución',
+    profitUsdt: 'PnL (USDT)',
+    tradedVol: 'Cantidad ejecutada',
+    closeAvg: 'Media cierre',
+    profitRate: 'ROE',
+    closeTime: 'Hora cierre',
+    directionOpenClose: 'Lado/A-C',
+    dealPrice: 'Precio ejecución',
+    fee: 'Comisión',
+    fundType: 'Tipo',
+    amount: 'Cantidad',
+    coin: 'Moneda',
+    settlementTime: 'Liquidación',
+    fundingRate: 'Tasa financiación',
+    totalBal: 'Saldo futuros',
+    availMargin: 'Margen disponible',
+    usedMargin: 'Margen usado',
+    unrealized: 'PnL no realizado',
+    spotWalletBal: 'Saldo cuenta retirable',
+    fundTransfer: 'Transferir',
+    avgOpenPrice: 'Media apertura',
+    feeHint: 'Comisión (USDT)',
+    estimatedPnlRow: 'PnL estimado',
+    triggerUsdt: 'Disparador (USDT)',
+    orderPriceUsdt: 'Precio orden (USDT)',
+    openAvgUsdt: 'Media entrada (USDT)',
+    closeAvgUsdt: 'Media salida (USDT)',
+    tpUsdt: 'TP (USDT)',
+    slUsdt: 'SL (USDT)',
+    marginUsdtBracket: 'Margen (USDT)',
+    notionalUsdt: 'Valor posición (USDT)',
+    estLiqPx: 'Liq. estimada',
+    profitBracketUsdt: 'PnL (USDT)',
+    entrustVolCoin: 'Orden ({base})',
+    filledVolCoin: 'Ejecutada ({base})',
+    closeAvail: 'Cerrable:',
+    markPriceBtn: 'Marca',
+  },
+  empty: {
+    noPositions: 'Sin posiciones',
+    noOrders: 'Sin órdenes',
+    noHistPositions: 'Sin historial posiciones',
+    noHistOrders: 'Sin historial órdenes',
+    noTradeRecords: 'Sin ejecuciones',
+    noFunding: 'Sin registros financiación',
+  },
+  modal: {
+    confirmDefaultTitle: 'Confirmar',
+    positionDetailTitle: 'Detalle posición',
+    orderDetailTitle: 'Detalle orden',
+    histPositionDetailTitle: 'Posición histórica',
+    histOrderDetailTitle: 'Orden histórica',
+    closePositionTitlePrefix: 'Cerrar',
+    modifyTpSl: 'Editar TP/SL',
+    setTpSl: 'Configurar TP/SL',
+    posQtyLabel: 'Tamaño:',
+    currentTpSlSection: 'Órdenes TP/SL activas',
+    modifyToSection: 'Cambiar a',
+    setPricesSection: 'Precios',
+    tpTriggerLabel: 'Disparador take-profit ',
+    tpHintOptionalClear: '(Vacío para borrar TP)',
+    slTriggerLabel: 'Disparador stop-loss ',
+    slHintOptionalClear: '(Vacío para borrar SL)',
+    placeholderTpTrigger: 'Precio disparador TP',
+    placeholderSlTrigger: 'Precio disparador SL',
+    confirmCloseBtn: 'Confirmar cierre',
+    ok: 'OK',
+    closeTypeLiquidation: 'Liquidado',
+    tpBadge: 'TP',
+    slBadge: 'SL',
+    tpPriceWord: 'TP ',
+    slPriceWord: 'SL ',
+    volLabel: 'Cantidad:',
+    marginSplitMode: 'Cruzado / Aislado',
+    directionLabel: 'Lado',
+    entrustTypeLabel: 'Tipo orden',
+    leverageLabel: 'Apalancamiento',
+  },
+  actions: { tpSl: 'TP/SL', reverse: 'Invertir', close: 'Cerrar', marketCloseAll: 'Cerrar todas mercado', cancelOrder: 'Cancelar' },
+  positionRow: { hintCross: 'Cruzado', hintExperience: 'Bonus' },
+  errors: {
+    enterTriggerPrice: 'Ingresar precio disparador',
+    enterPrice: 'Ingresar precio',
+    priceNotReadyConvert: 'Precio no disponible — no se puede convertir',
+    invalidQtyCheckMin: 'Cantidad inválida — revisar mínimo',
+    priceNotReadyRetry: 'Precio no disponible, inténtelo de nuevo',
+    enterQty: 'Ingresar cantidad',
+    qtyExceedAvail: 'Cantidad excede límite cierre',
+    closeFailed: 'Error al cerrar',
+    modifyTpSlFailed: 'Error al actualizar — inténtelo más tarde',
+    txFallback: 'Tipo {n}',
+  },
+  confirm: {
+    reverseTitle: 'Invertir posición',
+    reverseBody: 'Invertir {pair} {side}?',
+    cancelAllTitle: 'Cancelar todas',
+    cancelAllBody: 'Cancelar {n} órdenes?',
+    closeAllTitle: 'Cerrar todas',
+    closeAllBody: 'Cerrar {n} posiciones en mercado?',
+    sideLongWord: 'long',
+    sideShortWord: 'short',
+  },
+  directions: {
+    long: 'Long',
+    short: 'Short',
+    openLong: 'Abrir long',
+    openShort: 'Abrir short',
+    closeShort: 'Cerrar short',
+    closeLong: 'Cerrar long',
+    openTag: 'A',
+    closeTag: 'C',
+  },
+  orderTypes: { limit: 'Límite', plan: 'Disparador', takeProfit: 'Take profit', stopLoss: 'Stop loss', marketShort: 'Mercado' },
+  orderStatus: { filled: 'Ejecutada', open: 'Abierta', cancelled: 'Cancelada', failed: 'Fallida' },
+  closeTypes: {
+    market: 'Cierre mercado',
+    oneClick: 'Cierre un clic',
+    reverseOpen: 'Abrir opuesta',
+    tpSl: 'TP/SL',
+    liquidation: 'Liquidación',
+    admin: 'Cierre admin',
+  },
+}

+ 267 - 0
code/src/locales/futuresPage/overlays/fr.ts

@@ -0,0 +1,267 @@
+import type { DeepPartial, FuturesPageMessages } from '../../futuresPage.i18n'
+
+export const frUiOverlay: DeepPartial<FuturesPageMessages> = {
+  perpetual: 'Contrats perpétuels',
+  perpetualTag: 'Perpétuel',
+  pairSearchPlaceholder: 'Rechercher',
+  pairEmpty: 'Aucun résultat',
+  stats: {
+    change24h: 'Variation 24h',
+    markPrice: 'Prix marque',
+    high24h: 'Haut 24h',
+    low24h: 'Bas 24h',
+    volume24h: 'Volume 24h',
+    fundingCountdown: 'Financement / Compte à rebours',
+  },
+  mobileTabs: { chart: 'Graphique', trade: 'Trader' },
+  chartSub: { chart: 'Graphique', coinInfo: 'Info crypto', fundingHistory: 'Historique financement' },
+  chartTools: { fullscreen: 'Plein écran', alert: 'Alertes' },
+  draw: {
+    cursor: 'Curseur',
+    trend: 'Ligne de tendance',
+    hline: 'Horizontale',
+    ray: 'Rayon',
+    channel: 'Canal',
+    fib: 'Fibonacci',
+    text: 'Texte',
+    clearAll: 'Effacer dessins',
+    zoomOut: 'Dézoomer',
+  },
+  ohlcv: {
+    open: 'Ouv',
+    high: 'Haut',
+    low: 'Bas',
+    close: 'Ferm',
+    volume: 'Volume',
+    changePct: 'Variation',
+    amplitude: 'Amplitude',
+  },
+  coinInfo: {
+    marketCap: 'Cap. marché',
+    circulating: 'Offre circulante',
+    issuePrice: 'Prix émission',
+    ath: 'Plus haut historique',
+    athDate: 'Date ATH',
+    whitepaper: 'Livre blanc',
+    empty: 'Aucune donnée crypto',
+    reload: 'Recharger',
+  },
+  fundingPanel: {
+    rate: 'Taux financement',
+    period: 'Période règlement',
+    nextCountdown: 'Prochain compte à rebours',
+    noChart: 'Pas de données graphique',
+    settleTime: 'Règlement',
+    rateCol: 'Taux financement',
+    empty7d: 'Pas de données 7j',
+  },
+  book: {
+    orderBook: 'Carnet d\'ordres',
+    trades: 'Transactions',
+    priceQuote: 'Prix (USDT)',
+    amountBase: 'Quantité ({base})',
+    totalBase: 'Total ({base})',
+    time: 'Heure',
+    buy: 'Achat',
+    sell: 'Vente',
+    buyRatio: 'Achat {n}%',
+    sellRatio: '{n}% Vente',
+    noTrades: 'Aucune transaction',
+  },
+  margin: { cross: 'Croisé', split: 'Isolé', experience: 'Bonus' },
+  amountUnit: { lots: 'Contrat', usdt: 'USDT' },
+  leverage: { adjustTitle: 'Ajuster levier' },
+  order: {
+    limit: 'Limite',
+    market: 'Marché',
+    conditional: 'Conditionnel',
+    condMarket: 'Marché conditionnel',
+    condLimit: 'Limite conditionnel',
+    available: 'Disponible',
+    maxOpen: 'Max ouverture',
+    triggerPriceLabel: 'Déclencheur ({q})',
+    priceLabel: 'Prix ({q})',
+    latestBtn: 'Dernier',
+    marketExe: 'Marché',
+    condMarketExe: 'Marché après déclenchement',
+    qtyLabel: 'Quantité ({u})',
+    transferTitle: 'Transfert',
+    openLong: 'Achat / Long',
+    openShort: 'Vente / Short',
+    contractInfoTitle: 'Info contrat',
+    indexSource: 'Source indice',
+    marginCoin: 'Actif marge',
+    maxLeverage: 'Levier max',
+    maintMargin: 'Taux marge maintien',
+    openFee: 'Frais ouverture',
+    closeFee: 'Frais fermeture',
+    contractValue: 'Valeur contrat',
+    minOrder: 'Ordre min',
+    maxOrder: 'Ordre max',
+  },
+  placeholders: {
+    searchPair: 'Rechercher',
+    triggerPrice: 'Saisir prix déclencheur',
+    price: 'Saisir prix',
+    amount: 'Saisir quantité',
+  },
+  bottom: {
+    positions: 'Positions',
+    openOrders: 'Ordres ouverts',
+    historyOrders: 'Historique ordres',
+    historyPositions: 'Historique positions',
+    tradeDetails: 'Trades',
+    fundingFlow: 'Flux fonds',
+    assets: 'Actifs',
+    closeAllPositions: 'Tout fermer',
+    cancelAllOrders: 'Tout annuler',
+    loginPromptOr: 'ou',
+    registerNow: 'S\'inscrire',
+    startTrading: 'commencer le trading',
+  },
+  table: {
+    contract: 'Contrat',
+    dirLeverage: 'Sens/Levier',
+    openPrice: 'Ouverture',
+    markPrice: 'Marque',
+    positionSize: 'Taille',
+    margin: 'Marge',
+    marginRate: 'Taux marge',
+    unrealizedPnl: 'P&L non réalisé',
+    roe: 'ROE',
+    liqPrice: 'Prix liquidation',
+    openTime: 'Heure ouverture',
+    action: 'Action',
+    type: 'Type',
+    orderPrice: 'Prix ordre',
+    entrustPriceHist: 'Prix demande',
+    triggerPrice: 'Déclencheur',
+    orderAmt: 'Qté ordre',
+    filled: 'Exécuté',
+    tpPrice: 'Take Profit',
+    slPrice: 'Stop Loss',
+    time: 'Heure',
+    orderTime: 'Heure ordre',
+    fillTime: 'Heure exécution',
+    profitUsdt: 'P&L (USDT)',
+    tradedVol: 'Qté exécutée',
+    closeAvg: 'Moy fermeture',
+    profitRate: 'ROE',
+    closeTime: 'Heure fermeture',
+    directionOpenClose: 'Sens/O-F',
+    dealPrice: 'Prix exéc',
+    fee: 'Frais',
+    fundType: 'Type',
+    amount: 'Quantité',
+    coin: 'Crypto',
+    settlementTime: 'Règlement',
+    fundingRate: 'Taux financement',
+    totalBal: 'Solde futures',
+    availMargin: 'Marge disp',
+    usedMargin: 'Marge utilisée',
+    unrealized: 'P&L non réalisé',
+    spotWalletBal: 'Solde retirable',
+    fundTransfer: 'Transfert',
+    avgOpenPrice: 'Moy ouverture',
+    feeHint: 'Frais (USDT)',
+    estimatedPnlRow: 'P&L estimé',
+    triggerUsdt: 'Déclencheur (USDT)',
+    orderPriceUsdt: 'Prix ordre (USDT)',
+    openAvgUsdt: 'Moy entrée (USDT)',
+    closeAvgUsdt: 'Moy sortie (USDT)',
+    tpUsdt: 'TP (USDT)',
+    slUsdt: 'SL (USDT)',
+    marginUsdtBracket: 'Marge (USDT)',
+    notionalUsdt: 'Valeur pos (USDT)',
+    estLiqPx: 'Prix liq estimé',
+    profitBracketUsdt: 'P&L (USDT)',
+    entrustVolCoin: 'Ordre ({base})',
+    filledVolCoin: 'Exécuté ({base})',
+    closeAvail: 'Fermable :',
+    markPriceBtn: 'Marque',
+  },
+  empty: {
+    noPositions: 'Aucune position',
+    noOrders: 'Aucun ordre',
+    noHistPositions: 'Pas d\'historique position',
+    noHistOrders: 'Pas d\'historique ordre',
+    noTradeRecords: 'Aucun trade',
+    noFunding: 'Aucun flux financement',
+  },
+  modal: {
+    confirmDefaultTitle: 'Confirmer',
+    positionDetailTitle: 'Détail position',
+    orderDetailTitle: 'Détail ordre',
+    histPositionDetailTitle: 'Position historique',
+    histOrderDetailTitle: 'Ordre historique',
+    closePositionTitlePrefix: 'Fermer',
+    modifyTpSl: 'Modifier TP/SL',
+    setTpSl: 'Paramétrer TP/SL',
+    posQtyLabel: 'Taille :',
+    currentTpSlSection: 'Ordres TP/SL actifs',
+    modifyToSection: 'Modifier vers',
+    setPricesSection: 'Prix',
+    tpTriggerLabel: 'Déclencheur TP ',
+    tpHintOptionalClear: '(vide = supprimer TP)',
+    slTriggerLabel: 'Déclencheur SL ',
+    slHintOptionalClear: '(vide = supprimer SL)',
+    placeholderTpTrigger: 'Prix déclencheur TP',
+    placeholderSlTrigger: 'Prix déclencheur SL',
+    confirmCloseBtn: 'Confirmer fermeture',
+    ok: 'OK',
+    closeTypeLiquidation: 'Liquidé',
+    tpBadge: 'TP',
+    slBadge: 'SL',
+    tpPriceWord: 'TP ',
+    slPriceWord: 'SL ',
+    volLabel: 'Quantité :',
+    marginSplitMode: 'Croisé / Isolé',
+    directionLabel: 'Sens',
+    entrustTypeLabel: 'Type ordre',
+    leverageLabel: 'Levier',
+  },
+  actions: { tpSl: 'TP/SL', reverse: 'Inverser', close: 'Fermer', marketCloseAll: 'Fermeture marché tout', cancelOrder: 'Annuler' },
+  positionRow: { hintCross: 'Croisé', hintExperience: 'Bonus' },
+  errors: {
+    enterTriggerPrice: 'Saisir prix déclencheur',
+    enterPrice: 'Saisir prix',
+    priceNotReadyConvert: 'Prix indisponible, conversion échouée',
+    invalidQtyCheckMin: 'Qté invalide, vérifier minimum',
+    priceNotReadyRetry: 'Prix indisponible, réessayer plus tard',
+    enterQty: 'Saisir quantité',
+    qtyExceedAvail: 'Qté supérieure à fermable',
+    closeFailed: 'Échec fermeture',
+    modifyTpSlFailed: 'Échec modification, réessayer',
+    txFallback: 'Type {n}',
+  },
+  confirm: {
+    reverseTitle: 'Inverser position',
+    reverseBody: 'Inverser {pair} {side} ?',
+    cancelAllTitle: 'Annuler tout',
+    cancelAllBody: 'Annuler {n} ordres ?',
+    closeAllTitle: 'Fermer tout',
+    closeAllBody: 'Fermer {n} positions au marché ?',
+    sideLongWord: 'long',
+    sideShortWord: 'short',
+  },
+  directions: {
+    long: 'Long',
+    short: 'Short',
+    openLong: 'Ouvrir long',
+    openShort: 'Ouvrir short',
+    closeShort: 'Fermer short',
+    closeLong: 'Fermer long',
+    openTag: 'O',
+    closeTag: 'F',
+  },
+  orderTypes: { limit: 'Limite', plan: 'Déclencheur', takeProfit: 'Take Profit', stopLoss: 'Stop Loss', marketShort: 'Marché' },
+  orderStatus: { filled: 'Exécuté', open: 'Ouvert', cancelled: 'Annulé', failed: 'Échoué' },
+  closeTypes: {
+    market: 'Fermeture marché',
+    oneClick: 'Fermeture 1 clic',
+    reverseOpen: 'Ouverture inverse',
+    tpSl: 'TP/SL',
+    liquidation: 'Liquidation',
+    admin: 'Fermeture admin',
+  },
+}

+ 267 - 0
code/src/locales/futuresPage/overlays/pt.ts

@@ -0,0 +1,267 @@
+import type { DeepPartial, FuturesPageMessages } from '../../futuresPage.i18n'
+
+export const ptUiOverlay: DeepPartial<FuturesPageMessages> = {
+  perpetual: 'Contrato Perpétuo',
+  perpetualTag: 'Perpétuo',
+  pairSearchPlaceholder: 'Buscar',
+  pairEmpty: 'Sem resultados',
+  stats: {
+    change24h: 'Variação 24h',
+    markPrice: 'Preço marca',
+    high24h: 'Máx 24h',
+    low24h: 'Mín 24h',
+    volume24h: 'Volume 24h',
+    fundingCountdown: 'Funding / Contagem regressiva',
+  },
+  mobileTabs: { chart: 'Gráfico', trade: 'Negociar' },
+  chartSub: { chart: 'Gráfico', coinInfo: 'Info moeda', fundingHistory: 'Histórico funding' },
+  chartTools: { fullscreen: 'Tela cheia', alert: 'Alertas' },
+  draw: {
+    cursor: 'Cursor',
+    trend: 'Linha de tendência',
+    hline: 'Horizontal',
+    ray: 'Raio',
+    channel: 'Canal',
+    fib: 'Fibonacci',
+    text: 'Texto',
+    clearAll: 'Apagar desenhos',
+    zoomOut: 'Afastar',
+  },
+  ohlcv: {
+    open: 'Abert',
+    high: 'Máx',
+    low: 'Mín',
+    close: 'Fech',
+    volume: 'Volume',
+    changePct: 'Variação',
+    amplitude: 'Amplitude',
+  },
+  coinInfo: {
+    marketCap: 'Cap mercado',
+    circulating: 'Oferta circulante',
+    issuePrice: 'Preço emissão',
+    ath: 'Máximo histórico',
+    athDate: 'Data ATH',
+    whitepaper: 'Whitepaper',
+    empty: 'Sem dados da moeda',
+    reload: 'Recarregar',
+  },
+  fundingPanel: {
+    rate: 'Taxa funding',
+    period: 'Período liquidação',
+    nextCountdown: 'Próxima contagem',
+    noChart: 'Sem dados gráfico',
+    settleTime: 'Liquidação',
+    rateCol: 'Taxa funding',
+    empty7d: 'Sem dados 7 dias',
+  },
+  book: {
+    orderBook: 'Livro de ordens',
+    trades: 'Negociações',
+    priceQuote: 'Preço (USDT)',
+    amountBase: 'Quant. ({base})',
+    totalBase: 'Total ({base})',
+    time: 'Horário',
+    buy: 'Compra',
+    sell: 'Venda',
+    buyRatio: 'Compra {n}%',
+    sellRatio: '{n}% Venda',
+    noTrades: 'Sem negociações',
+  },
+  margin: { cross: 'Cruzada', split: 'Isolada', experience: 'Bônus' },
+  amountUnit: { lots: 'Contrato', usdt: 'USDT' },
+  leverage: { adjustTitle: 'Ajustar alavancagem' },
+  order: {
+    limit: 'Limite',
+    market: 'Mercado',
+    conditional: 'Condicional',
+    condMarket: 'Mercado condicional',
+    condLimit: 'Limite condicional',
+    available: 'Disponível',
+    maxOpen: 'Máx abrir',
+    triggerPriceLabel: 'Gatilho ({q})',
+    priceLabel: 'Preço ({q})',
+    latestBtn: 'Último',
+    marketExe: 'Mercado',
+    condMarketExe: 'Mercado após gatilho',
+    qtyLabel: 'Quant. ({u})',
+    transferTitle: 'Transferir',
+    openLong: 'Comprar / Long',
+    openShort: 'Vender / Short',
+    contractInfoTitle: 'Info contrato',
+    indexSource: 'Fonte índice',
+    marginCoin: 'Ativo margem',
+    maxLeverage: 'Alavancagem máx',
+    maintMargin: 'Taxa margem manutenção',
+    openFee: 'Taxa abertura',
+    closeFee: 'Taxa fechamento',
+    contractValue: 'Valor contrato',
+    minOrder: 'Mín ordem',
+    maxOrder: 'Máx ordem',
+  },
+  placeholders: {
+    searchPair: 'Buscar',
+    triggerPrice: 'Informe preço gatilho',
+    price: 'Informe preço',
+    amount: 'Informe quantidade',
+  },
+  bottom: {
+    positions: 'Posições',
+    openOrders: 'Ordens abertas',
+    historyOrders: 'Histórico ordens',
+    historyPositions: 'Histórico posições',
+    tradeDetails: 'Negociações',
+    fundingFlow: 'Movimento fundos',
+    assets: 'Ativos',
+    closeAllPositions: 'Fechar todas',
+    cancelAllOrders: 'Cancelar todas',
+    loginPromptOr: 'ou',
+    registerNow: 'Cadastre-se',
+    startTrading: 'iniciar negociação',
+  },
+  table: {
+    contract: 'Contrato',
+    dirLeverage: 'Sent./Alav.',
+    openPrice: 'Abertura',
+    markPrice: 'Marca',
+    positionSize: 'Tamanho',
+    margin: 'Margem',
+    marginRate: 'Taxa margem',
+    unrealizedPnl: 'Lucro não realizado',
+    roe: 'ROE',
+    liqPrice: 'Preço liquidação',
+    openTime: 'Hora abertura',
+    action: 'Ação',
+    type: 'Tipo',
+    orderPrice: 'Preço ordem',
+    entrustPriceHist: 'Preço pedido',
+    triggerPrice: 'Gatilho',
+    orderAmt: 'Qtd ordem',
+    filled: 'Executado',
+    tpPrice: 'Take Profit',
+    slPrice: 'Stop Loss',
+    time: 'Hora',
+    orderTime: 'Hora ordem',
+    fillTime: 'Hora execução',
+    profitUsdt: 'Lucro (USDT)',
+    tradedVol: 'Qtd executada',
+    closeAvg: 'Média fech',
+    profitRate: 'ROE',
+    closeTime: 'Hora fechamento',
+    directionOpenClose: 'Sent./A-F',
+    dealPrice: 'Preço exec',
+    fee: 'Taxa',
+    fundType: 'Tipo',
+    amount: 'Quantidade',
+    coin: 'Moeda',
+    settlementTime: 'Liquidação',
+    fundingRate: 'Taxa funding',
+    totalBal: 'Saldo futuro',
+    availMargin: 'Margem disp',
+    usedMargin: 'Margem usada',
+    unrealized: 'Lucro não realizado',
+    spotWalletBal: 'Saldo sacável',
+    fundTransfer: 'Transferir',
+    avgOpenPrice: 'Média abertura',
+    feeHint: 'Taxa (USDT)',
+    estimatedPnlRow: 'Lucro estimado',
+    triggerUsdt: 'Gatilho (USDT)',
+    orderPriceUsdt: 'Preço ordem (USDT)',
+    openAvgUsdt: 'Média entrada (USDT)',
+    closeAvgUsdt: 'Média saída (USDT)',
+    tpUsdt: 'TP (USDT)',
+    slUsdt: 'SL (USDT)',
+    marginUsdtBracket: 'Margem (USDT)',
+    notionalUsdt: 'Valor posição (USDT)',
+    estLiqPx: 'Preço liq estimado',
+    profitBracketUsdt: 'Lucro (USDT)',
+    entrustVolCoin: 'Ordem ({base})',
+    filledVolCoin: 'Executado ({base})',
+    closeAvail: 'Fechável:',
+    markPriceBtn: 'Marca',
+  },
+  empty: {
+    noPositions: 'Sem posições',
+    noOrders: 'Sem ordens',
+    noHistPositions: 'Sem histórico posições',
+    noHistOrders: 'Sem histórico ordens',
+    noTradeRecords: 'Sem negociações',
+    noFunding: 'Sem registros funding',
+  },
+  modal: {
+    confirmDefaultTitle: 'Confirmar',
+    positionDetailTitle: 'Detalhe posição',
+    orderDetailTitle: 'Detalhe ordem',
+    histPositionDetailTitle: 'Posição histórica',
+    histOrderDetailTitle: 'Ordem histórica',
+    closePositionTitlePrefix: 'Fechar',
+    modifyTpSl: 'Editar TP/SL',
+    setTpSl: 'Config TP/SL',
+    posQtyLabel: 'Quant.:',
+    currentTpSlSection: 'Ordens TP/SL ativas',
+    modifyToSection: 'Alterar para',
+    setPricesSection: 'Preços',
+    tpTriggerLabel: 'Gatilho TP ',
+    tpHintOptionalClear: '(vazio = apagar TP)',
+    slTriggerLabel: 'Gatilho SL ',
+    slHintOptionalClear: '(vazio = apagar SL)',
+    placeholderTpTrigger: 'Preço gatilho TP',
+    placeholderSlTrigger: 'Preço gatilho SL',
+    confirmCloseBtn: 'Confirmar fechamento',
+    ok: 'OK',
+    closeTypeLiquidation: 'Liquidado',
+    tpBadge: 'TP',
+    slBadge: 'SL',
+    tpPriceWord: 'TP ',
+    slPriceWord: 'SL ',
+    volLabel: 'Quant.:',
+    marginSplitMode: 'Cruzada / Isolada',
+    directionLabel: 'Sentido',
+    entrustTypeLabel: 'Tipo ordem',
+    leverageLabel: 'Alavancagem',
+  },
+  actions: { tpSl: 'TP/SL', reverse: 'Reverter', close: 'Fechar', marketCloseAll: 'Fechar tudo mercado', cancelOrder: 'Cancelar' },
+  positionRow: { hintCross: 'Cruzada', hintExperience: 'Bônus' },
+  errors: {
+    enterTriggerPrice: 'Informe preço gatilho',
+    enterPrice: 'Informe preço',
+    priceNotReadyConvert: 'Preço indisponível, conversão falha',
+    invalidQtyCheckMin: 'Qtd inválida, verifique mínimo',
+    priceNotReadyRetry: 'Preço indisponível, tente depois',
+    enterQty: 'Informe quantidade',
+    qtyExceedAvail: 'Qtd maior que disponível para fechar',
+    closeFailed: 'Falha fechamento',
+    modifyTpSlFailed: 'Falha alteração, tente novamente',
+    txFallback: 'Tipo {n}',
+  },
+  confirm: {
+    reverseTitle: 'Reverter posição',
+    reverseBody: 'Reverter {pair} {side}?',
+    cancelAllTitle: 'Cancelar todas',
+    cancelAllBody: 'Cancelar {n} ordens?',
+    closeAllTitle: 'Fechar todas',
+    closeAllBody: 'Fechar {n} posições a mercado?',
+    sideLongWord: 'long',
+    sideShortWord: 'short',
+  },
+  directions: {
+    long: 'Long',
+    short: 'Short',
+    openLong: 'Abrir long',
+    openShort: 'Abrir short',
+    closeShort: 'Fechar short',
+    closeLong: 'Fechar long',
+    openTag: 'A',
+    closeTag: 'F',
+  },
+  orderTypes: { limit: 'Limite', plan: 'Gatilho', takeProfit: 'Take Profit', stopLoss: 'Stop Loss', marketShort: 'Mercado' },
+  orderStatus: { filled: 'Executada', open: 'Aberta', cancelled: 'Cancelada', failed: 'Falha' },
+  closeTypes: {
+    market: 'Fechamento mercado',
+    oneClick: 'Fechar um clique',
+    reverseOpen: 'Abertura inversa',
+    tpSl: 'TP/SL',
+    liquidation: 'Liquidação',
+    admin: 'Fechamento admin',
+  },
+}

+ 267 - 0
code/src/locales/futuresPage/overlays/ru.ts

@@ -0,0 +1,267 @@
+import type { DeepPartial, FuturesPageMessages } from '../../futuresPage.i18n'
+
+export const ruUiOverlay: DeepPartial<FuturesPageMessages> = {
+  perpetual: 'Бессрочные фьючерсы',
+  perpetualTag: 'Бессрочный',
+  pairSearchPlaceholder: 'Поиск',
+  pairEmpty: 'Совпадений не найдено',
+  stats: {
+    change24h: 'Изменение за 24ч',
+    markPrice: 'Маркер',
+    high24h: 'Макс. за 24ч',
+    low24h: 'Мин. за 24ч',
+    volume24h: 'Объём за 24ч',
+    fundingCountdown: 'Фандинг / Обратный отсчёт',
+  },
+  mobileTabs: { chart: 'График', trade: 'Торговля' },
+  chartSub: { chart: 'График', coinInfo: 'О монете', fundingHistory: 'История фандинга' },
+  chartTools: { fullscreen: 'Полный экран', alert: 'Оповещения' },
+  draw: {
+    cursor: 'Курсор',
+    trend: 'Трендовая линия',
+    hline: 'Горизонталь',
+    ray: 'Луч',
+    channel: 'Канал',
+    fib: 'Фибоначчи',
+    text: 'Надпись',
+    clearAll: 'Удалить рисунки',
+    zoomOut: 'Уменьшить',
+  },
+  ohlcv: {
+    open: 'Откр',
+    high: 'Макс',
+    low: 'Мин',
+    close: 'Закр',
+    volume: 'Объём',
+    changePct: 'Изменение',
+    amplitude: 'Диапазон',
+  },
+  coinInfo: {
+    marketCap: 'Капитализация',
+    circulating: 'Циркулирующий запас',
+    issuePrice: 'Цена выпуска',
+    ath: 'Исторический максимум',
+    athDate: 'Дата ATH',
+    whitepaper: 'Вайтпейпер',
+    empty: 'Данных по монете нет',
+    reload: 'Обновить',
+  },
+  fundingPanel: {
+    rate: 'Ставка фандинга',
+    period: 'Период расчёта',
+    nextCountdown: 'До следующего расчёта',
+    noChart: 'Нет данных графика',
+    settleTime: 'Время расчёта',
+    rateCol: 'Ставка фандинга',
+    empty7d: 'Нет данных за 7 дней',
+  },
+  book: {
+    orderBook: 'Стакан',
+    trades: 'Сделки',
+    priceQuote: 'Цена (USDT)',
+    amountBase: 'Кол-во ({base})',
+    totalBase: 'Итого ({base})',
+    time: 'Время',
+    buy: 'Покупка',
+    sell: 'Продажа',
+    buyRatio: 'Покупка {n}%',
+    sellRatio: '{n}% Продажа',
+    noTrades: 'Нет сделок',
+  },
+  margin: { cross: 'Кросс', split: 'Изолированный', experience: 'Бонус' },
+  amountUnit: { lots: 'Контракт', usdt: 'USDT' },
+  leverage: { adjustTitle: 'Изменить плечо' },
+  order: {
+    limit: 'Лимит',
+    market: 'Рынок',
+    conditional: 'Условный',
+    condMarket: 'Рыночный условный',
+    condLimit: 'Лимит условный',
+    available: 'Доступно',
+    maxOpen: 'Макс к открытию',
+    triggerPriceLabel: 'Срабатывание ({q})',
+    priceLabel: 'Цена ({q})',
+    latestBtn: 'Последняя',
+    marketExe: 'По рынку',
+    condMarketExe: 'Рынок после срабатывания',
+    qtyLabel: 'Кол-во ({u})',
+    transferTitle: 'Перевод',
+    openLong: 'Купить / Лонг',
+    openShort: 'Продать / Шорт',
+    contractInfoTitle: 'Данные контракта',
+    indexSource: 'Источник индекса',
+    marginCoin: 'Актив маржи',
+    maxLeverage: 'Макс плечо',
+    maintMargin: 'Ставка поддерж. маржи',
+    openFee: 'Комиссия открытия',
+    closeFee: 'Комиссия закрытия',
+    contractValue: 'Стоимость контракта',
+    minOrder: 'Мин ордер',
+    maxOrder: 'Макс ордер',
+  },
+  placeholders: {
+    searchPair: 'Поиск',
+    triggerPrice: 'Введите цену срабатывания',
+    price: 'Введите цену',
+    amount: 'Введите количество',
+  },
+  bottom: {
+    positions: 'Позиции',
+    openOrders: 'Активные ордера',
+    historyOrders: 'История ордеров',
+    historyPositions: 'История позиций',
+    tradeDetails: 'Сделки',
+    fundingFlow: 'Движение средств',
+    assets: 'Активы',
+    closeAllPositions: 'Закрыть всё',
+    cancelAllOrders: 'Отменить всё',
+    loginPromptOr: 'или',
+    registerNow: 'Зарегистрироваться',
+    startTrading: 'начать торговлю',
+  },
+  table: {
+    contract: 'Контракт',
+    dirLeverage: 'Напр./Плечо',
+    openPrice: 'Открытие',
+    markPrice: 'Маркер',
+    positionSize: 'Объём',
+    margin: 'Маржа',
+    marginRate: 'Ставка маржи',
+    unrealizedPnl: 'Нереал. прибыль',
+    roe: 'ROE',
+    liqPrice: 'Цена ликвидации',
+    openTime: 'Время откр.',
+    action: 'Действие',
+    type: 'Тип',
+    orderPrice: 'Цена ордера',
+    entrustPriceHist: 'Цена заявки',
+    triggerPrice: 'Срабатывание',
+    orderAmt: 'Объём заявки',
+    filled: 'Исполнено',
+    tpPrice: 'Тейк-профит',
+    slPrice: 'Стоп-лосс',
+    time: 'Время',
+    orderTime: 'Время заявки',
+    fillTime: 'Время исполн.',
+    profitUsdt: 'Прибыль (USDT)',
+    tradedVol: 'Исполн. объём',
+    closeAvg: 'Сред. закр.',
+    profitRate: 'ROE',
+    closeTime: 'Время закрытия',
+    directionOpenClose: 'Напр./Откр-Закр',
+    dealPrice: 'Цена исполн.',
+    fee: 'Комиссия',
+    fundType: 'Тип',
+    amount: 'Кол-во',
+    coin: 'Монета',
+    settlementTime: 'Расчёт',
+    fundingRate: 'Ставка фандинга',
+    totalBal: 'Баланс фьючерс',
+    availMargin: 'Доступная маржа',
+    usedMargin: 'Использ. маржа',
+    unrealized: 'Нереал. прибыль',
+    spotWalletBal: 'Выводимый баланс',
+    fundTransfer: 'Перевод',
+    avgOpenPrice: 'Сред. открытия',
+    feeHint: 'Комиссия (USDT)',
+    estimatedPnlRow: 'Ожид. прибыль',
+    triggerUsdt: 'Срабатывание (USDT)',
+    orderPriceUsdt: 'Цена ордера (USDT)',
+    openAvgUsdt: 'Сред вход (USDT)',
+    closeAvgUsdt: 'Сред выход (USDT)',
+    tpUsdt: 'TP (USDT)',
+    slUsdt: 'SL (USDT)',
+    marginUsdtBracket: 'Маржа (USDT)',
+    notionalUsdt: 'Стоим. поз. (USDT)',
+    estLiqPx: 'Оцен. ликв цена',
+    profitBracketUsdt: 'Прибыль (USDT)',
+    entrustVolCoin: 'Заявка ({base})',
+    filledVolCoin: 'Исполнено ({base})',
+    closeAvail: 'Доступно к закр:',
+    markPriceBtn: 'Маркер',
+  },
+  empty: {
+    noPositions: 'Нет позиций',
+    noOrders: 'Нет ордеров',
+    noHistPositions: 'Нет истории позиций',
+    noHistOrders: 'Нет истории ордеров',
+    noTradeRecords: 'Нет сделок',
+    noFunding: 'Нет движений средств',
+  },
+  modal: {
+    confirmDefaultTitle: 'Подтвердите',
+    positionDetailTitle: 'Детали позиции',
+    orderDetailTitle: 'Детали ордера',
+    histPositionDetailTitle: 'История позиции',
+    histOrderDetailTitle: 'История ордера',
+    closePositionTitlePrefix: 'Закрыть',
+    modifyTpSl: 'Редакт TP/SL',
+    setTpSl: 'Установить TP/SL',
+    posQtyLabel: 'Объём:',
+    currentTpSlSection: 'Актив TP/SL ордера',
+    modifyToSection: 'Изменить на',
+    setPricesSection: 'Цены',
+    tpTriggerLabel: 'Сраб TP ',
+    tpHintOptionalClear: '(пусто = удалить TP)',
+    slTriggerLabel: 'Сраб SL ',
+    slHintOptionalClear: '(пусто = удалить SL)',
+    placeholderTpTrigger: 'Цена сраб TP',
+    placeholderSlTrigger: 'Цена сраб SL',
+    confirmCloseBtn: 'Подтвердить закр',
+    ok: 'Ок',
+    closeTypeLiquidation: 'Ликвидация',
+    tpBadge: 'TP',
+    slBadge: 'SL',
+    tpPriceWord: 'TP ',
+    slPriceWord: 'SL ',
+    volLabel: 'Кол-во:',
+    marginSplitMode: 'Кросс / Изолир',
+    directionLabel: 'Направление',
+    entrustTypeLabel: 'Тип ордера',
+    leverageLabel: 'Плечо',
+  },
+  actions: { tpSl: 'TP/SL', reverse: 'Разворот', close: 'Закрыть', marketCloseAll: 'Закр всё по рынку', cancelOrder: 'Отменить' },
+  positionRow: { hintCross: 'Кросс', hintExperience: 'Бонус' },
+  errors: {
+    enterTriggerPrice: 'Укажите цену срабатывания',
+    enterPrice: 'Укажите цену',
+    priceNotReadyConvert: 'Цена не готова, расчёт невозможен',
+    invalidQtyCheckMin: 'Некоррект объём, проверьте мин лимит',
+    priceNotReadyRetry: 'Цена недоступна, повторите позже',
+    enterQty: 'Укажите количество',
+    qtyExceedAvail: 'Объём выше доступного для закрытия',
+    closeFailed: 'Ошибка закрытия',
+    modifyTpSlFailed: 'Ошибка изменения, повторите позже',
+    txFallback: 'Тип {n}',
+  },
+  confirm: {
+    reverseTitle: 'Разворот позиции',
+    reverseBody: 'Развернуть {pair} {side}?',
+    cancelAllTitle: 'Отменить все',
+    cancelAllBody: 'Отменить {n} ордеров?',
+    closeAllTitle: 'Закрыть все',
+    closeAllBody: 'Закрыть {n} поз по рынку?',
+    sideLongWord: 'лонг',
+    sideShortWord: 'шорт',
+  },
+  directions: {
+    long: 'Лонг',
+    short: 'Шорт',
+    openLong: 'Откр лонг',
+    openShort: 'Откр шорт',
+    closeShort: 'Закр шорт',
+    closeLong: 'Закр лонг',
+    openTag: 'О',
+    closeTag: 'З',
+  },
+  orderTypes: { limit: 'Лимит', plan: 'Срабатывание', takeProfit: 'Тейк-профит', stopLoss: 'Стоп-лосс', marketShort: 'Рынок' },
+  orderStatus: { filled: 'Исполнено', open: 'Активно', cancelled: 'Отменено', failed: 'Ошибка' },
+  closeTypes: {
+    market: 'Закр по рынку',
+    oneClick: 'Закр в один клик',
+    reverseOpen: 'Встречное открытие',
+    tpSl: 'TP/SL',
+    liquidation: 'Ликвидация',
+    admin: 'Закр админом',
+  },
+}

+ 267 - 0
code/src/locales/futuresPage/overlays/tr.ts

@@ -0,0 +1,267 @@
+import type { DeepPartial, FuturesPageMessages } from '../../futuresPage.i18n'
+
+export const trUiOverlay: DeepPartial<FuturesPageMessages> = {
+  perpetual: 'Sürekli Vadeli',
+  perpetualTag: 'Sürekli',
+  pairSearchPlaceholder: 'Ara',
+  pairEmpty: 'Sonuç bulunamadı',
+  stats: {
+    change24h: '24s Değişim',
+    markPrice: 'İşaret Fiyatı',
+    high24h: '24s En Yüksek',
+    low24h: '24s En Düşük',
+    volume24h: '24s Hacim',
+    fundingCountdown: 'Funding / Geri Sayım',
+  },
+  mobileTabs: { chart: 'Grafik', trade: 'Alım Satım' },
+  chartSub: { chart: 'Grafik', coinInfo: 'Para Bilgisi', fundingHistory: 'Funding Geçmişi' },
+  chartTools: { fullscreen: 'Tam Ekran', alert: 'Bildirimler' },
+  draw: {
+    cursor: 'İmleç',
+    trend: 'Trend Çizgisi',
+    hline: 'Yatay Çizgi',
+    ray: 'Işın',
+    channel: 'Kanal',
+    fib: 'Fibonacci',
+    text: 'Metin',
+    clearAll: 'Çizimleri Sil',
+    zoomOut: 'Uzaklaştır',
+  },
+  ohlcv: {
+    open: 'Açılış',
+    high: 'En Yüksek',
+    low: 'En Düşük',
+    close: 'Kapanış',
+    volume: 'Hacim',
+    changePct: 'Değişim',
+    amplitude: 'Aralık',
+  },
+  coinInfo: {
+    marketCap: 'Piyasa Değeri',
+    circulating: 'Dolaşım Arzı',
+    issuePrice: 'Çıkış Fiyatı',
+    ath: 'Tüm Zamanların En Yükseği',
+    athDate: 'ATH Tarihi',
+    whitepaper: 'Teknik Belge',
+    empty: 'Veri bulunmamaktadır',
+    reload: 'Yenile',
+  },
+  fundingPanel: {
+    rate: 'Funding Oranı',
+    period: 'Hesaplama Periyodu',
+    nextCountdown: 'Sonraki Ödeme Geri Sayımı',
+    noChart: 'Grafik Verisi Yok',
+    settleTime: 'Ödeme Zamanı',
+    rateCol: 'Funding Oranı',
+    empty7d: '7 Günlük Veri Yok',
+  },
+  book: {
+    orderBook: 'Emir Defteri',
+    trades: 'İşlemler',
+    priceQuote: 'Fiyat (USDT)',
+    amountBase: 'Miktar ({base})',
+    totalBase: 'Toplam ({base})',
+    time: 'Saat',
+    buy: 'Alış',
+    sell: 'Satış',
+    buyRatio: 'Alım %{n}',
+    sellRatio: 'Satım %{n}',
+    noTrades: 'Gerçekleşen İşlem Yok',
+  },
+  margin: { cross: 'Çapraz Marj', split: 'Ayrık Marj', experience: 'Bonus' },
+  amountUnit: { lots: 'Kontrat', usdt: 'USDT' },
+  leverage: { adjustTitle: 'Kaldıraç Ayarla' },
+  order: {
+    limit: 'Limit',
+    market: 'Piyasa',
+    conditional: 'Koşullu',
+    condMarket: 'Koşullu Piyasa',
+    condLimit: 'Koşullu Limit',
+    available: 'Kullanılabilir',
+    maxOpen: 'Maks Açılış',
+    triggerPriceLabel: 'Tetikleme ({q})',
+    priceLabel: 'Fiyat ({q})',
+    latestBtn: 'Son Fiyat',
+    marketExe: 'Piyasa Fiyatı',
+    condMarketExe: 'Tetikten Sonra Piyasa',
+    qtyLabel: 'Miktar ({u})',
+    transferTitle: 'Transfer',
+    openLong: 'Al / Long',
+    openShort: 'Sat / Short',
+    contractInfoTitle: 'Kontrat Bilgisi',
+    indexSource: 'Endeks Kaynağı',
+    marginCoin: 'Marj Varlığı',
+    maxLeverage: 'Maks Kaldıraç',
+    maintMargin: 'Bakım Marj Oranı',
+    openFee: 'Açılış Komisyonu',
+    closeFee: 'Kapanış Komisyonu',
+    contractValue: 'Kontrat Değeri',
+    minOrder: 'Min Emir',
+    maxOrder: 'Maks Emir',
+  },
+  placeholders: {
+    searchPair: 'Arama',
+    triggerPrice: 'Tetikleme fiyatı girin',
+    price: 'Fiyat girin',
+    amount: 'Miktar girin',
+  },
+  bottom: {
+    positions: 'Pozisyonlar',
+    openOrders: 'Açık Emirler',
+    historyOrders: 'Emir Geçmişi',
+    historyPositions: 'Pozisyon Geçmişi',
+    tradeDetails: 'İşlem Detayları',
+    fundingFlow: 'Para Akışı',
+    assets: 'Varlıklar',
+    closeAllPositions: 'Tümünü Kapat',
+    cancelAllOrders: 'Tüm Emirleri İptal Et',
+    loginPromptOr: 'veya',
+    registerNow: 'Kayıt Ol',
+    startTrading: 'Ticarete Başla',
+  },
+  table: {
+    contract: 'Kontrat',
+    dirLeverage: 'Yön/Kaldıraç',
+    openPrice: 'Açılış Fiyatı',
+    markPrice: 'İşaret Fiyatı',
+    positionSize: 'Pozisyon Büyüklüğü',
+    margin: 'Marj',
+    marginRate: 'Marj Oranı',
+    unrealizedPnl: 'Gerçekleşmemiş Kar/Zarar',
+    roe: 'ROE',
+    liqPrice: 'Likidasyon Fiyatı',
+    openTime: 'Açılış Saati',
+    action: 'İşlem',
+    type: 'Tür',
+    orderPrice: 'Emir Fiyatı',
+    entrustPriceHist: 'Talep Fiyatı',
+    triggerPrice: 'Tetikleme',
+    orderAmt: 'Emir Miktarı',
+    filled: 'Gerçekleşen',
+    tpPrice: 'Kar Alım(TP)',
+    slPrice: 'Zarar Durdur(SL)',
+    time: 'Saat',
+    orderTime: 'Emir Saati',
+    fillTime: 'Gerçekleşme Saati',
+    profitUsdt: 'Kar (USDT)',
+    tradedVol: 'İşlem Hacmi',
+    closeAvg: 'Ortalama Kapanış',
+    profitRate: 'ROE',
+    closeTime: 'Kapanış Saati',
+    directionOpenClose: 'Yön/Aç-Kapat',
+    dealPrice: 'İşlem Fiyatı',
+    fee: 'Komisyon',
+    fundType: 'Tür',
+    amount: 'Miktar',
+    coin: 'Para Birimi',
+    settlementTime: 'Ödeme Zamanı',
+    fundingRate: 'Funding Oranı',
+    totalBal: 'Vadeli Bakiye',
+    availMargin: 'Kullanılabilir Marj',
+    usedMargin: 'Kullanılan Marj',
+    unrealized: 'Gerçekleşmemiş Kar/Zarar',
+    spotWalletBal: 'Çekilebilir Bakiye',
+    fundTransfer: 'Transfer',
+    avgOpenPrice: 'Ortalama Açılış',
+    feeHint: 'Komisyon (USDT)',
+    estimatedPnlRow: 'Tahmini Kar/Zarar',
+    triggerUsdt: 'Tetikleme (USDT)',
+    orderPriceUsdt: 'Emir Fiyatı (USDT)',
+    openAvgUsdt: 'Ortalama Giriş (USDT)',
+    closeAvgUsdt: 'Ortalama Çıkış (USDT)',
+    tpUsdt: 'TP (USDT)',
+    slUsdt: 'SL (USDT)',
+    marginUsdtBracket: 'Marj (USDT)',
+    notionalUsdt: 'Pozisyon Değeri (USDT)',
+    estLiqPx: 'Tahmini Likidasyon Fiyatı',
+    profitBracketUsdt: 'Kar/Zarar (USDT)',
+    entrustVolCoin: 'Talep ({base})',
+    filledVolCoin: 'Gerçekleşen ({base})',
+    closeAvail: 'Kapatılabilir:',
+    markPriceBtn: 'İşaret Fiyatı',
+  },
+  empty: {
+    noPositions: 'Pozisyon Bulunmamaktadır',
+    noOrders: 'Açık Emir Yok',
+    noHistPositions: 'Pozisyon Geçmişi Yok',
+    noHistOrders: 'Emir Geçmişi Yok',
+    noTradeRecords: 'İşlem Kaydı Yok',
+    noFunding: 'Funding Kaydı Yok',
+  },
+  modal: {
+    confirmDefaultTitle: 'Onayla',
+    positionDetailTitle: 'Pozisyon Detayı',
+    orderDetailTitle: 'Emir Detayı',
+    histPositionDetailTitle: 'Geçmiş Pozisyon',
+    histOrderDetailTitle: 'Geçmiş Emir',
+    closePositionTitlePrefix: 'Kapat',
+    modifyTpSl: 'TP/SL Düzenle',
+    setTpSl: 'TP/SL Ayarla',
+    posQtyLabel: 'Miktar:',
+    currentTpSlSection: 'Aktif TP/SL Emirleri',
+    modifyToSection: 'Yeni Değer',
+    setPricesSection: 'Fiyatlar',
+    tpTriggerLabel: 'TP Tetikleme ',
+    tpHintOptionalClear: '(Boş bırak = TP sil)',
+    slTriggerLabel: 'SL Tetikleme ',
+    slHintOptionalClear: '(Boş bırak = SL sil)',
+    placeholderTpTrigger: 'TP tetik fiyatı',
+    placeholderSlTrigger: 'SL tetik fiyatı',
+    confirmCloseBtn: 'Kapatmayı Onayla',
+    ok: 'Tamam',
+    closeTypeLiquidation: 'Likide Edildi',
+    tpBadge: 'TP',
+    slBadge: 'SL',
+    tpPriceWord: 'TP ',
+    slPriceWord: 'SL ',
+    volLabel: 'Miktar:',
+    marginSplitMode: 'Çapraz / Ayrık Marj',
+    directionLabel: 'Yön',
+    entrustTypeLabel: 'Emir Türü',
+    leverageLabel: 'Kaldıraç',
+  },
+  actions: { tpSl: 'TP/SL', reverse: 'Yön Çevir', close: 'Kapat', marketCloseAll: 'Tümünü Piyasadan Kapat', cancelOrder: 'İptal' },
+  positionRow: { hintCross: 'Çapraz', hintExperience: 'Bonus' },
+  errors: {
+    enterTriggerPrice: 'Tetikleme fiyatı giriniz',
+    enterPrice: 'Fiyat giriniz',
+    priceNotReadyConvert: 'Fiyat verisi hazır değil, hesaplama yapılamaz',
+    invalidQtyCheckMin: 'Miktar geçersiz, minimum kontrol edin',
+    priceNotReadyRetry: 'Fiyat erişilemez, daha sonra deneyin',
+    enterQty: 'Miktar giriniz',
+    qtyExceedAvail: 'Miktar kapatılabilir tutardan fazla',
+    closeFailed: 'Kapatma Başarısız',
+    modifyTpSlFailed: 'Güncelleme başarısız, tekrar deneyin',
+    txFallback: 'Tür {n}',
+  },
+  confirm: {
+    reverseTitle: 'Pozisyonu Yön Çevir',
+    reverseBody: '{pair} {side} pozisyonu çevirilsin mi?',
+    cancelAllTitle: 'Tümünü İptal Et',
+    cancelAllBody: '{n} adet emir iptal edilsin mi?',
+    closeAllTitle: 'Tüm Pozisyonları Kapat',
+    closeAllBody: '{n} pozisyon piyasadan kapatılsın mı?',
+    sideLongWord: 'Long',
+    sideShortWord: 'Short',
+  },
+  directions: {
+    long: 'Long',
+    short: 'Short',
+    openLong: 'Long Aç',
+    openShort: 'Short Aç',
+    closeShort: 'Short Kapat',
+    closeLong: 'Long Kapat',
+    openTag: 'A',
+    closeTag: 'K',
+  },
+  orderTypes: { limit: 'Limit', plan: 'Tetiklemeli', takeProfit: 'TP', stopLoss: 'SL', marketShort: 'Piyasa' },
+  orderStatus: { filled: 'Gerçekleşti', open: 'Açık', cancelled: 'İptal', failed: 'Hata' },
+  closeTypes: {
+    market: 'Piyasa Kapanışı',
+    oneClick: 'Tek Tıkla Kapat',
+    reverseOpen: 'Karşı Pozisyon Açma',
+    tpSl: 'TP/SL',
+    liquidation: 'Likidasyon',
+    admin: 'Yönetim Kapatması',
+  },
+}

+ 267 - 0
code/src/locales/futuresPage/overlays/vi.ts

@@ -0,0 +1,267 @@
+import type { DeepPartial, FuturesPageMessages } from '../../futuresPage.i18n'
+
+export const viUiOverlay: DeepPartial<FuturesPageMessages> = {
+  perpetual: 'Hợp đồng vĩnh viễn',
+  perpetualTag: 'Vĩnh viễn',
+  pairSearchPlaceholder: 'Tìm kiếm',
+  pairEmpty: 'Không tìm thấy kết quả',
+  stats: {
+    change24h: 'Thay đổi 24h',
+    markPrice: 'Giá tham chiếu',
+    high24h: 'Cao nhất 24h',
+    low24h: 'Thấp nhất 24h',
+    volume24h: 'Khối lượng 24h',
+    fundingCountdown: 'Funding / Đếm ngược',
+  },
+  mobileTabs: { chart: 'Biểu đồ', trade: 'Giao dịch' },
+  chartSub: { chart: 'Biểu đồ', coinInfo: 'Thông tin coin', fundingHistory: 'Lịch sử funding' },
+  chartTools: { fullscreen: 'Toàn màn hình', alert: 'Thông báo' },
+  draw: {
+    cursor: 'Con trỏ',
+    trend: 'Đường xu hướng',
+    hline: 'Đường ngang',
+    ray: 'Tia',
+    channel: 'Kênh giá',
+    fib: 'Fibonacci',
+    text: 'Chữ viết',
+    clearAll: 'Xóa tất cả nét vẽ',
+    zoomOut: 'Thu nhỏ',
+  },
+  ohlcv: {
+    open: 'Mở',
+    high: 'Cao',
+    low: 'Thấp',
+    close: 'Đóng',
+    volume: 'Khối lượng',
+    changePct: 'Tỷ lệ đổi',
+    amplitude: 'Biên độ',
+  },
+  coinInfo: {
+    marketCap: 'Vốn hóa thị trường',
+    circulating: 'Nguồn cung lưu hành',
+    issuePrice: 'Giá phát hành',
+    ath: 'Đỉnh cao nhất mọi thời đại',
+    athDate: 'Ngày ATH',
+    whitepaper: 'Tài liệu trắng',
+    empty: 'Không có dữ liệu coin',
+    reload: 'Tải lại',
+  },
+  fundingPanel: {
+    rate: 'Tỷ lệ funding',
+    period: 'Chu kỳ thanh toán',
+    nextCountdown: 'Đếm ngược kỳ tiếp theo',
+    noChart: 'Không có dữ liệu biểu đồ',
+    settleTime: 'Thời gian thanh toán',
+    rateCol: 'Tỷ lệ funding',
+    empty7d: 'Không có dữ liệu 7 ngày',
+  },
+  book: {
+    orderBook: 'Sổ lệnh',
+    trades: 'Giao dịch khớp',
+    priceQuote: 'Giá (USDT)',
+    amountBase: 'Số lượng ({base})',
+    totalBase: 'Tổng ({base})',
+    time: 'Thời gian',
+    buy: 'Mua',
+    sell: 'Bán',
+    buyRatio: 'Mua {n}%',
+    sellRatio: 'Bán {n}%',
+    noTrades: 'Chưa có giao dịch',
+  },
+  margin: { cross: 'Ký quỹ chéo', split: 'Ký quỹ riêng', experience: 'Thưởng' },
+  amountUnit: { lots: 'Hợp đồng', usdt: 'USDT' },
+  leverage: { adjustTitle: 'Điều chỉnh đòn bẩy' },
+  order: {
+    limit: 'Lệnh giới hạn',
+    market: 'Lệnh thị trường',
+    conditional: 'Lệnh có điều kiện',
+    condMarket: 'Thị trường có điều kiện',
+    condLimit: 'Giới hạn có điều kiện',
+    available: 'Có sẵn',
+    maxOpen: 'Tối đa mở lệnh',
+    triggerPriceLabel: 'Giá kích hoạt ({q})',
+    priceLabel: 'Giá ({q})',
+    latestBtn: 'Giá mới nhất',
+    marketExe: 'Khớp thị trường',
+    condMarketExe: 'Khớp thị trường sau kích hoạt',
+    qtyLabel: 'Số lượng ({u})',
+    transferTitle: 'Chuyển tiền',
+    openLong: 'Mua / Long',
+    openShort: 'Bán / Short',
+    contractInfoTitle: 'Thông tin hợp đồng',
+    indexSource: 'Nguồn chỉ số',
+    marginCoin: 'Tài sản ký quỹ',
+    maxLeverage: 'Đòn bẩy tối đa',
+    maintMargin: 'Tỷ lệ ký quỹ duy trì',
+    openFee: 'Phí mở lệnh',
+    closeFee: 'Phí đóng lệnh',
+    contractValue: 'Giá trị hợp đồng',
+    minOrder: 'Lệnh tối thiểu',
+    maxOrder: 'Lệnh tối đa',
+  },
+  placeholders: {
+    searchPair: 'Tìm kiếm',
+    triggerPrice: 'Nhập giá kích hoạt',
+    price: 'Nhập giá',
+    amount: 'Nhập số lượng',
+  },
+  bottom: {
+    positions: 'Vị thế',
+    openOrders: 'Lệnh đang mở',
+    historyOrders: 'Lịch sử lệnh',
+    historyPositions: 'Lịch sử vị thế',
+    tradeDetails: 'Chi tiết giao dịch',
+    fundingFlow: 'Lịch sử funding',
+    assets: 'Tài sản',
+    closeAllPositions: 'Đóng tất cả',
+    cancelAllOrders: 'Hủy toàn bộ lệnh',
+    loginPromptOr: 'hoặc',
+    registerNow: 'Đăng ký',
+    startTrading: 'Bắt đầu giao dịch',
+  },
+  table: {
+    contract: 'Hợp đồng',
+    dirLeverage: 'Hướng/Đòn bẩy',
+    openPrice: 'Giá mở',
+    markPrice: 'Giá tham chiếu',
+    positionSize: 'Quy mô vị thế',
+    margin: 'Ký quỹ',
+    marginRate: 'Tỷ lệ ký quỹ',
+    unrealizedPnl: 'Lãi lỗ chưa thực hiện',
+    roe: 'ROE',
+    liqPrice: 'Giá thanh lý',
+    openTime: 'Thời gian mở',
+    action: 'Thao tác',
+    type: 'Loại',
+    orderPrice: 'Giá lệnh',
+    entrustPriceHist: 'Giá đặt lệnh',
+    triggerPrice: 'Giá kích hoạt',
+    orderAmt: 'Khối lượng lệnh',
+    filled: 'Đã khớp',
+    tpPrice: 'Chốt lời TP',
+    slPrice: 'Cắt lỗ SL',
+    time: 'Thời gian',
+    orderTime: 'Thời gian đặt lệnh',
+    fillTime: 'Thời gian khớp',
+    profitUsdt: 'Lãi lỗ (USDT)',
+    tradedVol: 'Khối lượng khớp',
+    closeAvg: 'Giá đóng trung bình',
+    profitRate: 'ROE',
+    closeTime: 'Thời gian đóng',
+    directionOpenClose: 'Hướng/Mở-Đóng',
+    dealPrice: 'Giá khớp',
+    fee: 'Phí',
+    fundType: 'Loại',
+    amount: 'Số lượng',
+    coin: 'Tiền tệ',
+    settlementTime: 'Ngày thanh toán',
+    fundingRate: 'Tỷ lệ funding',
+    totalBal: 'Số dư hợp đồng tương lai',
+    availMargin: 'Ký quỹ khả dụng',
+    usedMargin: 'Ký quỹ đã dùng',
+    unrealized: 'Lãi lỗ chưa thực hiện',
+    spotWalletBal: 'Số dư có thể rút',
+    fundTransfer: 'Chuyển quỹ',
+    avgOpenPrice: 'Giá mở trung bình',
+    feeHint: 'Phí (USDT)',
+    estimatedPnlRow: 'Lãi lỗ dự kiến',
+    triggerUsdt: 'Kích hoạt (USDT)',
+    orderPriceUsdt: 'Giá lệnh (USDT)',
+    openAvgUsdt: 'Vào lệnh TB (USDT)',
+    closeAvgUsdt: 'Ra lệnh TB (USDT)',
+    tpUsdt: 'TP (USDT)',
+    slUsdt: 'SL (USDT)',
+    marginUsdtBracket: 'Ký quỹ (USDT)',
+    notionalUsdt: 'Giá trị vị thế (USDT)',
+    estLiqPx: 'Giá thanh lý dự tính',
+    profitBracketUsdt: 'Lãi lỗ (USDT)',
+    entrustVolCoin: 'Đặt lệnh ({base})',
+    filledVolCoin: 'Đã khớp ({base})',
+    closeAvail: 'Có thể đóng:',
+    markPriceBtn: 'Giá tham chiếu',
+  },
+  empty: {
+    noPositions: 'Chưa có vị thế',
+    noOrders: 'Không có lệnh',
+    noHistPositions: 'Không có lịch sử vị thế',
+    noHistOrders: 'Không có lịch sử lệnh',
+    noTradeRecords: 'Không có giao dịch',
+    noFunding: 'Không có dữ liệu funding',
+  },
+  modal: {
+    confirmDefaultTitle: 'Xác nhận',
+    positionDetailTitle: 'Chi tiết vị thế',
+    orderDetailTitle: 'Chi tiết lệnh',
+    histPositionDetailTitle: 'Vị thế lịch sử',
+    histOrderDetailTitle: 'Lệnh lịch sử',
+    closePositionTitlePrefix: 'Đóng',
+    modifyTpSl: 'Sửa TP/SL',
+    setTpSl: 'Cài TP/SL',
+    posQtyLabel: 'Số lượng:',
+    currentTpSlSection: 'Lệnh TP/SL đang hiệu lực',
+    modifyToSection: 'Đổi thành',
+    setPricesSection: 'Bảng giá',
+    tpTriggerLabel: 'Kích hoạt TP ',
+    tpHintOptionalClear: '(để trống = xóa TP)',
+    slTriggerLabel: 'Kích hoạt SL ',
+    slHintOptionalClear: '(để trống = xóa SL)',
+    placeholderTpTrigger: 'Giá kích hoạt TP',
+    placeholderSlTrigger: 'Giá kích hoạt SL',
+    confirmCloseBtn: 'Xác nhận đóng',
+    ok: 'OK',
+    closeTypeLiquidation: 'Bị thanh lý',
+    tpBadge: 'TP',
+    slBadge: 'SL',
+    tpPriceWord: 'TP ',
+    slPriceWord: 'SL ',
+    volLabel: 'Số lượng:',
+    marginSplitMode: 'Ký quỹ chéo / Riêng',
+    directionLabel: 'Hướng',
+    entrustTypeLabel: 'Loại lệnh',
+    leverageLabel: 'Đòn bẩy',
+  },
+  actions: { tpSl: 'TP/SL', reverse: 'Đảo lệnh', close: 'Đóng', marketCloseAll: 'Đóng tất thị trường', cancelOrder: 'Hủy' },
+  positionRow: { hintCross: 'Chéo', hintExperience: 'Thưởng' },
+  errors: {
+    enterTriggerPrice: 'Vui lòng nhập giá kích hoạt',
+    enterPrice: 'Vui lòng nhập giá',
+    priceNotReadyConvert: 'Chưa có giá, không tính được',
+    invalidQtyCheckMin: 'Số lượng không hợp lệ, kiểm tra mức tối thiểu',
+    priceNotReadyRetry: 'Không lấy được giá, thử lại sau',
+    enterQty: 'Nhập số lượng',
+    qtyExceedAvail: 'Số lượng lớn hơn lượng có thể đóng',
+    closeFailed: 'Đóng lệnh thất bại',
+    modifyTpSlFailed: 'Sửa lỗi, thử lại sau',
+    txFallback: 'Loại {n}',
+  },
+  confirm: {
+    reverseTitle: 'Đảo chiều vị thế',
+    reverseBody: 'Đảo {pair} {side}?',
+    cancelAllTitle: 'Hủy tất cả',
+    cancelAllBody: 'Hủy {n} lệnh?',
+    closeAllTitle: 'Đóng toàn bộ',
+    closeAllBody: 'Đóng {n} vị thế theo giá thị trường?',
+    sideLongWord: 'Long',
+    sideShortWord: 'Short',
+  },
+  directions: {
+    long: 'Long',
+    short: 'Short',
+    openLong: 'Mở Long',
+    openShort: 'Mở Short',
+    closeShort: 'Đóng Short',
+    closeLong: 'Đóng Long',
+    openTag: 'M',
+    closeTag: 'Đ',
+  },
+  orderTypes: { limit: 'Giới hạn', plan: 'Kích hoạt', takeProfit: 'TP', stopLoss: 'SL', marketShort: 'Thị trường' },
+  orderStatus: { filled: 'Đã khớp', open: 'Đang mở', cancelled: 'Đã hủy', failed: 'Thất bại' },
+  closeTypes: {
+    market: 'Đóng theo thị trường',
+    oneClick: 'Đóng một chạm',
+    reverseOpen: 'Mở lệnh ngược',
+    tpSl: 'TP/SL',
+    liquidation: 'Thanh lý',
+    admin: 'Quản trị đóng',
+  },
+}

+ 1048 - 1030
code/src/locales/hi.ts

@@ -2,1033 +2,1051 @@ import { futuresPageByLocale } from './futuresPage.i18n'
 import { financePageByLocale } from './financePage.i18n'
 
 export default {
-  nav: {
-    home: 'होम',
-    market: 'बाज़ार',
-    spot: 'स्पॉट',
-    futures: 'फ्यूचर्स',
-    copyTrade: 'कॉपी ट्रेड',
-    finance: 'वित्त',
-    idoPresale: 'IDO प्रीसेल',
-    claimAirdrop: 'एयरड्रॉप प्राप्त करें',
-    announcements: 'सूचनाएं',
-    download: 'डाउनलोड',
-  },
-  lang: {
-    title: 'भाषा',
-    zhCN: '简体中文',
-    zhTW: '繁體中文',
-    en: 'English',
-    ko: '한국어',
-    ja: '日本語',
-    hi: 'हिन्दी',
-    id: 'Bahasa Indonesia',
-  },
-  header: {
-    login: 'लॉग इन',
-    register: 'रजिस्टर',
-    account: 'खाता',
-    assets: 'मेरी संपत्ति',
-    security: 'सुरक्षा सेटिंग',
-    broker: 'ब्रोकर',
-    logout: 'लॉग आउट',
-    logoutShort: 'लॉग आउट',
-    downloadTitle: 'डाउनलोड',
-    brokerApplyTitle: 'ब्रोकर के लिए आवेदन करें',
-    brokerApplyDesc: 'आप अभी तक ब्रोकर नहीं हैं। सिस्टम आपके खाते की जानकारी का उपयोग करके स्वचालित रूप से आवेदन जमा करेगा। स्वीकृति के बाद ब्रोकर सुविधाओं का उपयोग कर सकते हैं।',
-    cancel: 'रद्द करें',
-    applyNow: 'अभी आवेदन करें',
-    viewApplyList: 'समीक्षा सूची देखें',
-    submitting: 'जमा हो रहा है…',
-    menu: 'मेनू',
-  },
-  common: {
-    loading: 'लोड हो रहा है...',
-    retry: 'पुनः प्रयास',
-    cancel: 'रद्द करें',
-    confirm: 'पुष्टि करें',
-    submit: 'जमा करें',
-    save: 'सेव करें',
-    send: 'भेजें',
-    back: 'वापस',
-    next: 'अगला',
-    done: 'पूर्ण',
-    noData: 'कोई डेटा नहीं',
-    noRecord: 'कोई रिकॉर्ड नहीं',
-    search: 'खोजें',
-    all: 'सभी',
-    max: 'अधिकतम',
-    copied: 'कॉपी हो गया',
-    networkError: 'नेटवर्क त्रुटि, पुनः प्रयास करें',
-    loadFailed: 'लोड विफल',
-    operationFailed: 'कार्रवाई विफल, पुनः प्रयास करें',
-    saveSuccess: 'सेव हो गया',
-    more: 'और',
-    perpetual: 'परपेचुअल',
-    set: 'सेट है',
-    notSet: 'सेट नहीं',
-    change: 'बदलें',
-    bind: 'बाइंड करें',
-    unbind: 'अनबाइंड करें',
-    on: 'चालू',
-    off: 'बंद',
-    status: 'स्थिति',
-    time: 'समय',
-    amount: 'राशि',
-    type: 'प्रकार',
-    coin: 'कॉइन',
-    from: 'से',
-    to: 'को',
-    close: 'बंद करें',
-    contactService: 'सहायता से संपर्क',
-  },
-  home: {
-    heroTitle: 'सुरक्षित · कुशल · वैश्विक\nडिजिटल संपत्ति एक्सचेंज',
-    heroDesc: 'iBit उन्नत तकनीक और सख्त जोखिम प्रबंधन के माध्यम से वैश्विक उपयोगकर्ताओं को स्थिर, पारदर्शी और पेशेवर डिजिटल संपत्ति ट्रेडिंग सेवाएं प्रदान करने के लिए समर्पित है।',
-    register: 'रजिस्टर',
-    viewMarket: 'बाज़ार देखें',
-    downloadApp: 'ऐप डाउनलोड',
-    coreAdvantages: 'मुख्य लाभ',
-    assetSafetyTitle: 'संपत्ति सुरक्षा',
-    assetSafetyDesc: 'कोल्ड/हॉट वॉलेट आइसोलेशन, मल्टी-सिग्नेचर और परमिशन कंट्रोल, तथा 24/7 जोखिम निगरानी से उपयोगकर्ता संपत्तियों की पूर्ण सुरक्षा।',
-    highPerfTitle: 'उच्च प्रदर्शन',
-    highPerfDesc: 'स्वयं विकसित उच्च-प्रदर्शन मिलान इंजन मिलीसेकंड ऑर्डर प्रोसेसिंग का समर्थन करता है, कम विलंबता में स्थिर ट्रेडिंग अनुभव देता है।',
-    globalComplianceTitle: 'वैश्विक अनुपालन',
-    globalComplianceDesc: 'बहु-क्षेत्रीय अनुपालन मानकों का पालन करते हुए वैश्विक उपयोगकर्ताओं के लिए विश्वसनीय ट्रेडिंग वातावरण प्रदान करता है।',
-    transparentFeeTitle: 'पारदर्शी शुल्क',
-    transparentFeeDesc: 'स्पष्ट और पारदर्शी शुल्क संरचना, कोई छुपी लागत नहीं, उपयोगकर्ताओं को ट्रेडिंग लागत प्रभावी ढंग से प्रबंधित करने में मदद करता है।',
-    aboutUs: 'हमारे बारे में',
-    aboutDesc: 'iBit एक वैश्विक डिजिटल संपत्ति एक्सचेंज है जो तकनीकी नवाचार और अनुपालन संचालन के माध्यम से उपयोगकर्ताओं को सुरक्षित, स्थिर और कुशल ट्रेडिंग सेवाएं प्रदान करता है।',
-    foundedYear: '2023 में स्थापित',
-    headquarters: 'सिंगापुर मुख्यालय',
-    ourVision: 'हमारा विजन',
-    visionSubtitle: 'दीर्घकालिक रूप से विश्वसनीय वैश्विक डिजिटल संपत्ति ट्रेडिंग इन्फ्रास्ट्रक्चर का निर्माण',
-    ecoTitle: 'इकोसिस्टम',
-    ecoDesc: 'नई पीढ़ी का डिजिटल संपत्ति क्रिप्टो ट्रेडिंग इकोसिस्टम बनाना',
-    missionTitle: 'मिशन',
-    missionDesc: 'वैश्विक परिदृश्यों में डिजिटल मूल्य के प्रवाह को बढ़ावा देना',
-    purposeTitle: 'उद्देश्य',
-    purposeDesc: 'उपयोगकर्ताओं को क्रिप्टो डिजिटल संपत्तियों का आसानी से प्रबंधन और निवेश करने में मदद करना',
-    heroImageAlt: 'iBit ट्रेडिंग प्लेटफॉर्म',
-    aboutImageAlt: 'हमारे बारे में',
-  },
-  market: {
-    title: 'लाइव बाज़ार',
-    desc: 'प्रमुख डिजिटल संपत्तियों के रियल-टाइम मूल्य, वॉल्यूम और 24 घंटे के बदलाव उपयोगकर्ताओं को बाज़ार की प्रवृत्तियों पर नज़र रखने में मदद करते हैं।',
-    hot: 'लोकप्रिय',
-    topVolume: 'टॉप वॉल्यूम',
-    gainers: 'लाभार्थी',
-    losers: 'हानिकर्ता',
-    perpetual: 'परपेचुअल',
-    name: 'नाम',
-    latestPrice: 'मूल्य',
-    change24h: '24घं बदलाव',
-    turnover: 'वॉल्यूम',
-    searchPair: 'पेयर खोजें',
-    searchMarket: 'कॉइन, पेयर, फ्यूचर्स खोजें',
-    price: 'मूल्य',
-    change24hShort: '24घं परिवर्तन',
-    high24h: '24घं उच्च',
-    low24h: '24घं निम्न',
-    volume24hLabel: '24घं वॉल्यूम',
-  },
-  auth: {
-    loginTitle: 'लॉग इन',
-    emailLogin: 'ईमेल लॉग इन',
-    emailPlaceholder: 'अपना ईमेल दर्ज करें',
-    password: 'पासवर्ड',
-    passwordPlaceholder: 'अपना पासवर्ड दर्ज करें',
-    forgotPassword: 'पासवर्ड भूल गए?',
-    loginBtn: 'लॉग इन',
-    noAccount: 'खाता नहीं है?',
-    registerNow: 'अभी रजिस्टर करें',
-    verifyTitle: 'सत्यापन कोड दर्ज करें',
-    codeSentDesc: '{email} पर सत्यापन कोड भेजा गया है। कृपया अपना इनबॉक्स जांचें।',
-    codeSendDesc: '{email} पर सत्यापन कोड भेजने के लिए नीचे के बटन पर क्लिक करें।',
-    countdownResend: '{n} सेकंड में पुनः भेजें',
-    resendCode: 'कोड पुनः भेजें',
-    confirmBtn: 'पुष्टि करें',
-    sendCode: 'कोड भेजें',
-    forgotVerify: 'सत्यापन विधि भूल गए?',
-    loginSuccess: 'लॉग इन सफल',
-    codeSentAgain: 'कोड पुनः भेजा गया',
-    registerTitle: 'रजिस्टर',
-    emailRegister: 'ईमेल पंजीकरण',
-    inviteCodeLabel: 'आमंत्रण कोड (वैकल्पिक)',
-    inviteCodePlaceholder: 'आमंत्रण कोड दर्ज करें',
-    hasAccount: 'पहले से खाता है?',
-    loginNow: 'अभी लॉग इन करें',
-    verifyPageTitle: 'सुरक्षा सत्यापन',
-    emailVerifyLabel: 'ईमेल सत्यापन',
-    codePlaceholder: 'सत्यापन कोड दर्ज करें',
-    sendBtn: 'भेजें',
-    passwordTitle: 'पासवर्ड बनाएं',
-    backBtn: '‹ वापस',
-    inputPasswordLabel: 'पासवर्ड',
-    confirmPasswordLabel: 'पासवर्ड की पुष्टि',
-    confirmPasswordPlaceholder: 'पासवर्ड फिर से दर्ज करें',
-    doneBtn: 'पूर्ण',
-    resetSuccess: 'पासवर्ड रीसेट सफल। नए पासवर्ड से लॉग इन करें।',
-    registerSuccess: 'पंजीकरण सफल',
-    welcomeJoin: 'iBit में आपका स्वागत है',
-    loginNowBtn: 'अभी लॉग इन करें',
-    forgotPasswordTitle: 'पासवर्ड रीसेट',
-    emailLabel: 'ईमेल',
-    emailRegisteredPlaceholder: 'पंजीकृत ईमेल दर्ज करें',
-    codeSentToast: 'कोड भेज दिया गया',
-  },
-  error: {
-    emailRequired: 'कृपया ईमेल दर्ज करें',
-    emailInvalid: 'ईमेल फॉर्मेट अमान्य है',
-    passwordRequired: 'कृपया पासवर्ड दर्ज करें',
-    code6Required: 'कृपया 6 अंकों का कोड दर्ज करें',
-    codeRequired: 'कृपया सत्यापन कोड दर्ज करें',
-    loginFailed: 'गलत उपयोगकर्ता नाम या पासवर्ड',
-    networkError: 'नेटवर्क त्रुटि, बाद में पुनः प्रयास करें',
-    emailAlreadyRegistered: 'यह ईमेल पहले से पंजीकृत है। कृपया लॉग इन करें।',
-    confirmPasswordRequired: 'कृपया पासवर्ड दोबारा दर्ज करें',
-    passwordMismatch: 'पासवर्ड मेल नहीं खाते',
-    loadFailed: 'सुरक्षा जानकारी लोड विफल',
-    refreshFailed: 'रिफ्रेश विफल',
-    statusUpdated: 'स्थिति अपडेट हो गई',
-    currentPasswordRequired: 'कृपया वर्तमान पासवर्ड दर्ज करें',
-    sixDigitCode: 'कृपया 6 अंकों का ईमेल सत्यापन कोड दर्ज करें',
-    sixDigitGoogleCode: 'कृपया 6 अंकों का Google कोड दर्ज करें',
-    sendFailed: 'भेजना विफल',
-    operationFailed: 'कार्रवाई विफल',
-  },
-  security: {
-    title: 'सुरक्षा सेटिंग',
-    back: '‹ वापस',
-    warningBanner: 'खाते की सुरक्षा बढ़ाने के लिए ईमेल सत्यापन, Google प्रमाणक और फंड पासवर्ड सेट करने की अनुशंसा की जाती है।',
-    accountSecurity: 'खाता सुरक्षा',
-    loginPassword: 'लॉग इन पासवर्ड',
-    loginPasswordDesc: 'नियमित रूप से पासवर्ड बदलने से खाते की सुरक्षा बढ़ती है',
-    emailVerify: 'ईमेल सत्यापन',
-    emailVerifyDesc: 'खाता सत्यापन और पासवर्ड रिकवरी के लिए ईमेल बाइंड करें',
-    googleAuth: 'Google प्रमाणक',
-    googleAuthDesc: 'खाते की सुरक्षा बढ़ाने के लिए Google प्रमाणक बाइंड करें',
-    fundPassword: 'फंड पासवर्ड',
-    fundPasswordDesc: 'संपत्ति सुरक्षा के लिए फंड पासवर्ड सेट करें',
-    set: 'सेट है',
-    notSet: 'सेट नहीं',
-    change: 'बदलें',
-    bind: 'बाइंड करें',
-    set2: 'सेट करें',
-    statusUpdated: 'स्थिति अपडेट हो गई',
-    loadFailed: 'सुरक्षा जानकारी लोड विफल',
-    refreshFailed: 'रिफ्रेश विफल',
-    bound: 'बाइंड है',
-    notBound: 'बाइंड नहीं',
-    refresh: 'रिफ्रेश',
-    googleHelpTitle: 'Google प्रमाणक सहायता',
-    googleHelpDesc: 'यदि आप सत्यापन कोड प्राप्त नहीं कर सकते या अनबाइंड करने की आवश्यकता है, तो ऑनलाइन सहायता से संपर्क करें।',
-    changeLoginPassword: 'लॉगिन पासवर्ड बदलें',
-    changePasswordHint: 'बदलने के बाद नए पासवर्ड से लॉगिन करें। सत्यापन कोड आपके पंजीकृत ईमेल पर भेजा जाएगा।',
-    currentPassword: 'वर्तमान पासवर्ड',
-    newPassword: 'नया पासवर्ड',
-    confirmNewPassword: 'नया पासवर्ड पुष्टि करें',
-    emailCode: 'ईमेल सत्यापन कोड',
-    sendCode: 'कोड भेजें',
-    codeSent: 'ईमेल पर सत्यापन कोड भेजा गया',
-    changeSuccess: 'पासवर्ड सफलतापूर्वक बदला गया',
-    confirmChange: 'परिवर्तन पुष्टि करें',
-    submitting: 'सबमिट हो रहा है…',
-    setFundPassword: 'फंड पासवर्ड सेट करें',
-    resetFundPassword: 'फंड पासवर्ड रीसेट करें',
-    fundPasswordHint: 'फंड पासवर्ड निकासी, हस्तांतरण जैसी संवेदनशील गतिविधियों के लिए उपयोग होता है। सुरक्षित रखें।',
-    fundPasswordResetHint: 'फंड पासवर्ड रीसेट करें। सत्यापन कोड पंजीकृत ईमेल पर भेजा जाएगा।',
-    newFundPassword: 'नया फंड पासवर्ड',
-    confirmFundPassword: 'पासवर्ड पुष्टि करें',
-    fundPasswordUpdated: 'फंड पासवर्ड अपडेट हुआ',
-    fundPasswordSet: 'फंड पासवर्ड सेट हुआ',
-    bindGoogle: 'Google प्रमाणक जोड़ें',
-    boundEmail: 'पंजीकृत ईमेल:',
-    googleQrStep: '1. QR कोड स्कैन करें या कुंजी मैन्युअल दर्ज करें',
-    googleCodeStep: '2. Google प्रमाणक कोड (6 अंक)',
-    emailCodeStep: '3. ईमेल सत्यापन कोड',
-    copyKey: 'कुंजी कॉपी करें',
-    keyCopied: 'कुंजी कॉपी हो गई',
-    copyFailed: 'कॉपी विफल, कृपया कुंजी टेक्स्ट मैन्युअल चुनें',
-    clipboardDeniedMac: 'क्लिपबोर्ड एक्सेस नहीं मिला। पते की पट्टी में ताला आइकन → साइट सेटिंग्स → Clipboard को Allow करें, फिर पुनः प्रयास करें।',
-    clipboardDenied: 'क्लिपबोर्ड एक्सेस नहीं मिला। ब्राउज़र में इस साइट के लिए क्लिपबोर्ड अनुमति दें, फिर पुनः प्रयास करें।',
-    invalidSecret: 'अमान्य कुंजी, पेज रिफ्रेश करें',
-    googleCodeRequired: '6 अंकों का Google कोड दर्ज करें',
-    emailCodeSent: 'ईमेल सत्यापन कोड भेजा गया',
-    bindSuccess: 'सफलतापूर्वक जोड़ा गया',
-    confirmBind: 'जोड़ने की पुष्टि करें',
-    googleAuthLead: 'पहले अपने फोन के ऐप स्टोर से Google Authenticator या Microsoft Authenticator डाउनलोड करें।',
-    googleAuthTip1: 'जोड़ने के बाद, लॉगिन और संवेदनशील ऑपरेशन के लिए ऐप में 6-अंकीय कोड की आवश्यकता हो सकती है।',
-    googleAuthTip2: 'अपना डिवाइस सुरक्षित रखें। कोड न मिलने पर सहायता से संपर्क करें।',
-    googleAuthStart: 'डाउनलोड हो गया, जोड़ें',
-  },
-  assets: {
-    title: 'मेरी संपत्ति',
-    totalAssets: 'कुल संपत्ति',
-    todayPnl: 'आज का P&L',
-    deposit: 'जमा',
-    withdraw: 'निकासी',
-    transfer: 'ट्रांसफर',
-    history: 'इतिहास',
-    spot: 'स्पॉट',
-    futures: 'फ्यूचर्स',
-    copyTrade: 'कॉपी',
-    finance: 'Earn',
-    claimAirdrop: 'Claim Airdrop',
-    fund: 'निकासी योग्य',
-    walletBalance: 'वॉलेट बैलेंस',
-    unrealizedPnl: 'अवास्तविक P&L',
-    positions: 'पोजीशन',
-    noPositions: 'कोई पोजीशन नहीं',
-    assetBalance: 'संपत्ति बैलेंस',
-    unavailable: 'उपलब्ध नहीं',
-    depositCoin: 'जमा',
-    withdrawCoin: 'निकासी',
-    depositRecord: 'जमा इतिहास',
-    withdrawRecord: 'निकासी इतिहास',
-    transferRecord: 'ट्रांसफर इतिहास',
-    assetRecord: 'लेनदेन इतिहास',
-    overview: 'सारांश',
-    spotAccount: 'स्पॉट खाता',
-    swapAccount: 'फ्यूचर्स खाता',
-    followAccount: 'कॉपी खाता',
-    fundAccount: 'निकासी योग्य खाता',
-    spotTradingAccount: 'स्पॉट ट्रेडिंग खाता',
-    ibitAccount: 'iBit Account',
-    lockedStakingAccount: 'Locked Account',
-    stakingTab: 'लॉक',
-    ibitUnit: 'iBit',
-    releaseTotal: 'कुल रिलीज़',
-    totalLockedBalance: 'कुल लॉक बैलेंस (iBit)',
-    myStakingOrders: 'मेरे लॉक ऑर्डर',
-    stakingOrderNo: 'ऑर्डर नंबर',
-    purchaseQty: 'खरीद मात्रा',
-    stakingTotal: 'लॉक राशि',
-    released: 'रिलीज़ हुआ',
-    pendingRelease: 'रिलीज़ लंबित',
-    startTime: 'शुरू समय',
-    subscribing: 'सब्सक्राइब हो रहा है',
-    releasing: 'रिलीज़ हो रहा है',
-    completed: 'पूरा हुआ',
-    pullToRefresh: 'रीफ्रेश करने के लिए नीचे खींचें',
-    releaseToRefresh: 'रीफ्रेश करने के लिए छोड़ें',
-    refreshing: 'रीफ्रेश हो रहा है...',
-    totalAccount: 'कुल खाता संपत्ति मूल्यांकन',
-    showBalance: 'बैलेंस दिखाएं',
-    hideBalance: 'बैलेंस छुपाएं',
-    followBalance: 'कॉपी बैलेंस',
-    accountTransfer: 'खाता ट्रांसफर',
-    transferFrom: 'से ट्रांसफर',
-    transferTo: 'में ट्रांसफर',
-    available: 'उपलब्ध',
-    freeTransfer: 'निःशुल्क ट्रांसफर, तुरंत जमा',
-    followPositions: 'वर्तमान कॉपी पोजीशन',
-    noFollowPositions: 'कोई कॉपी पोजीशन नहीं',
-    followLoading: 'लोड हो रहा है…',
-    long: 'लॉन्ग',
-    short: 'शॉर्ट',
-    trader: 'ट्रेडर',
-    openPrice: 'ओपन प्राइस',
-    currentPrice: 'वर्तमान मूल्य',
-    amountLever: 'राशि · लीवरेज',
-    closing: 'बंद हो रहा है…',
-    closePosition: 'पोजीशन बंद करें',
-    noLossPosition: 'नो-लॉस कॉपी पोजीशन को मैन्युअल रूप से बंद नहीं किया जा सकता',
-    invalidPosition: 'पोजीशन जानकारी अमान्य, बंद नहीं कर सकते',
-    confirmClose: 'क्या आप यह पोजीशन बंद करना चाहते हैं? बंद करने के बाद आपको इस ऑर्डर का अंतिम लाभ नहीं मिलेगा।',
-    closeSuccess: 'पोजीशन सफलतापूर्वक बंद',
-    closeFailed: 'पोजीशन बंद करने में विफल',
-    sameAccountError: 'स्रोत और गंतव्य खाते समान नहीं हो सकते',
-    amountError: 'कृपया एक मान्य राशि दर्ज करें',
-    insufficientBalance: 'अपर्याप्त उपलब्ध बैलेंस',
-    transferSuccess: 'ट्रांसफर सफल',
-    transferFailed: 'ट्रांसफर विफल',
-    goCopyTrade: 'कॉपी ट्रेड',
-    goSpotTrade: 'ट्रेड करें',
-    hideZeroBalance: '0 शेष वाली संपत्ति छुपाएं',
-    depositRecord2: 'जमा इतिहास',
-    amountCoin: 'Amount ({coin})',
-    availableCoin: 'Available: {available} {coin}',
-    amountUsdt: 'राशि (USDT)',
-    transferring: 'ट्रांसफर हो रहा है…',
-    confirmTransferBtn: 'ट्रांसफर की पुष्टि करें',
-    statementPageTitle: 'संपत्ति विवरण',
-    statementStartDate: 'प्रारंभ तिथि',
-    statementEndDate: 'समाप्ति तिथि',
-    statementReset: 'रीसेट',
-    statementSearch: 'खोजें',
-    statementSearching: 'खोज हो रही है…',
-    statementEmpty: 'कोई रिकॉर्ड नहीं',
-    statementDirectionOpen: 'ओपन',
-    statementDirectionClose: 'क्लोज',
-    statementTypes: {
-      '43': 'स्पॉट लाभ',
-      '44': 'स्पॉट हानि',
-      '45': 'स्पॉट ट्रेडिंग शुल्क',
-      '46': 'स्पॉट रिबेट',
-      '48': 'स्पॉट ट्रेड',
-      '49': 'स्टेकिंग',
-      '50': 'स्टेकिंग अनलॉक रिलीज',
-      '51': 'एयरड्रॉप इनाम',
-      '52': 'स्टेकिंग वॉलेट में ट्रांसफर',
-      '53': 'स्टेकिंग वॉलेट से ट्रांसफर',
-    },
-  },
-  finance: {
-    ...financePageByLocale.hi,
-  },
-  copyTrade: {
-    finance: 'Earn',
-    claimAirdrop: 'Claim Airdrop',
-    comprehensive: 'व्यापक',
-    winRate14d: '14D जीत दर',
-    profit14d: '14D रिटर्न',
-    normal: 'नियमित कॉपी',
-    lossless: 'लॉसलेस कॉपी',
-    favorite: 'पसंदीदा',
-    topTraders: 'शीर्ष ट्रेडर',
-    twoWeekReturn: '2 सप्ताह रिटर्न',
-    followers: 'फॉलोअर',
-    days: 'दिन',
-    applyTrader: 'ट्रेडर के लिए आवेदन',
-    myFollowing: 'मेरी कॉपी ट्रेडिंग',
-    myTrading: 'मेरी ट्रेडिंग',
-    traderIdentity: 'लीड ट्रेडर',
-    myFollowingAccount: 'मेरा कॉपी खाता',
-    leadManage: 'लीड प्रबंधन',
-    applyLead: 'लीड ट्रेडर बनें',
-    pageTitle: 'कॉपी ट्रेडिंग',
-    heroDesc: 'शीर्ष ट्रेडरों को एक टैप में फॉलो करें और पेशेवर रणनीतियों से लाभ चाहिए।',
-    traderOverview: 'लीड ट्रेडर सारांश',
-    copyFollowersCount: 'कॉपी अनुयायी',
-    cumulativeTradingDays: 'कुल ट्रेडिंग दिन',
-    cumulativeLeadProfit: 'संचयी कॉपी लाभ',
-    goLeadManage: 'लीड प्रबंधन खोलें →',
-    copyWalletTitle: 'कॉपी खाता स्थिति',
-    cumulativePnlUsdt: 'संचयी कॉपी PnL (USDT)',
-    availableUsdt: 'उपलब्ध (USDT)',
-    unrealizedPnlUsdtShort: 'अस्वीकृत PnL (USDT)',
-    followingTradersSummary: '{n} ट्रेडर फॉलो कर रहे हैं',
-    newBadge: 'NEW',
-    losslessShieldTitle: 'लॉसलेस संरक्षण',
-    losslessShieldDesc: ': कॉपी में हानि पर प्लेटफ़ॉर्म जोखिम राहत दे सकता है ताकि नियंत्रित जोखिम में रिटर्न मिल सके।',
-    learnHowItWorks: 'कैसे काम करता है →',
-    myStarredTraders: 'मेरे सहेजे ट्रेडर',
-    traderTotalCount: '{count} ट्रेडर',
-    filterLoadingShort: 'लोड हो रहा है…',
-    loadTraderListFailed: 'ट्रेडर सूची लोड नहीं हो सकी',
-    loadFavoritesFailed: 'पसंदीदा लोड नहीं हो सके',
-    favoritedToast: 'सेव किया गया',
-    defaultTraderName: 'ट्रेडर',
-    levelJunior: 'प्रारंभिक',
-    badgeLossless: 'लॉसलेस',
-    metaDaysTrades: '{days} दिन · {trades} सौदे',
-    followAction: 'कॉपी',
-    profitUsdtBracket: 'PnL (USDT)',
-    profitShareRate: 'लाभ हिस्सा',
-    trend14Days: '14 दिन ट्रेंड',
-    emptyFavoriteHint: 'अभी कोई पसंदीदा नहीं—बेहतर ट्रेडर खोजें।',
-    emptyTraderListDefault: 'अभी कोई ट्रेडर नहीं',
-    emptyTraderListLossless: 'अभी कोई लॉसलेस ट्रेडर नहीं',
-    browseTraders: 'ट्रेडर ब्राउज़ करें',
-    losslessInfoHeading: 'लॉसलेस कॉपी कैसे चलता है',
-    llInfoCard1Title: 'शर्तयुक्त संरक्षण',
-    llInfoCard1Body: 'नियम और ट्रिगर पूरे होने पर ही संरक्षण चालू होता है; प्लेटफ़ॉर्म जोखिम प्रणाली संभालती है.',
-    llInfoCard2Title: 'सीमित दायित्व',
-    llInfoCard2Body: 'अनुबंध सीमा के भीतर ही एकल कॉपी के लिए क्षतिपूर्ति; उस से आगे हानि कवर्ड नहीं.',
-    llInfoCard3Title: 'जोखिम नियंत्रण पहले',
-    llInfoCard3Body: 'अनुमति से अधिक हानि पर निष्पक्षता के लिए सुरक्षा तंत्र पहले सक्रिय होते हैं।',
-    llInfoCard4Title: 'जोखिम चेतावनी',
-    llInfoCard4Body: 'क्रिप्टो अत्यधिक जोखिम भरा है। लॉसलेस भी ज़ीरो-जोखिम नहीं—केवल सहनीय धन से ट्रेड करें।',
-    followingPlaza: 'कॉपी प्लाज़ा',
-    followingWalletFail: 'कॉपी खाता डेटा लोड विफल',
-    followingTabPositions: 'खुले पोज़िशन',
-    followingTabTraders: 'मेरे ट्रेडर',
-    followingTabHistory: 'इतिहास',
-    followingHistEmpty: 'कोई कॉपी इतिहास नहीं',
-    followingNoTradersYet: 'आपने अभी किसी ट्रेडर को फॉलो नहीं किया',
-    followingGoPlaza: 'प्लाज़ा पर जाएँ',
-    confirmStopFollow: 'क्या 「{name}」 को अनफॉलो करें?',
-    noLossManualCloseTooltip: 'लॉसलेस कॉपी मैन्युअल बंद नहीं कर सकते',
-    followingThContract: 'अनुबंध',
-    followingThDirection: 'दिशा',
-    followingThOpenPrice: 'एंट्री',
-    followingThCurPrice: 'मार्क',
-    followingThQty: 'मात्रा',
-    followingThLever: 'लीवरेज',
-    followingThUnrealized: 'अस्वीकृत PnL',
-    followingThOpenTime: 'खुलने का समय',
-    followingThAction: 'कार्रवाई',
-    followingOpenLong: 'लॉन्ग खोलें',
-    followingOpenShort: 'शॉर्ट खोलें',
-    closeQtyWithBase: 'बंद मात्रा ({base})',
-    followingRealizedPnlUsdt: 'रीलाइज़्ड PnL (USDT)',
-    followingYieldRate: 'प्रतिलाभ',
-    followingAvgOpenUsdt: 'औसत एंट्री (USDT)',
-    followingAvgCloseUsdt: 'औसत निकास (USDT)',
-    marginCrossMode: 'क्रॉस',
-    marginIsolatedMode: 'अलग मार्जिन',
-    stopFollowing: 'अनफॉलो',
-    lead: {
-      pageTitle: 'मेरा लीड ट्रेडिंग',
-      navMyFollowing: 'मेरी कॉपी ट्रेडिंग →',
-      becomeTitle: 'लीड ट्रेडर बनें',
-      becomeDesc: 'नीचे की शर्तें पूरी करें और ट्रेडर के लिए आवेदन करें।',
-      condMinBalance: 'फ्यूचर्स खाता शेष ≥ {min} USDT',
-      goTransfer: 'ट्रांसफर',
-      condNotFollowing: 'किसी अन्य ट्रेडर को फॉलो न करें',
-      agreePrefix: 'मैंने पढ़ा और सहमत हूँ',
-      agreeLink: 'ट्रेडर समझौता',
-      submitting: 'जमा हो रहा है…',
-      submitApply: 'आवेदन जमा करें',
-      applyFailed: 'आवेदन विफल, बाद में पुनः प्रयास करें',
-      reviewingTitle: 'समीक्षाधीन',
-      reviewingDesc: 'आपका ट्रेडर आवेदन समीक्षा में है। स्वीकृति के बाद लीड शुरू कर सकते हैं।',
-      agreementTitle: 'ट्रेडर समझौता',
-      agreementEmpty: 'समझौता लोड नहीं हो सका। बाद में पुनः प्रयास करें।',
-      leadingBadge: 'लीडिंग',
-      noBio: 'कोई परिचय नहीं',
-      cancelLeadProcessing: 'प्रसंस्करण…',
-      cancelLeadApply: 'लीड योग्यता रद्द करें',
-      confirmCancelLead: 'लीड रद्द करें? सभी कॉपी संबंध समाप्त होंगे।',
-      operationFailed: 'ऑपरेशन विफल',
-      statFollowers: 'वर्तमान फॉलोअर',
-      statRegisterDays: 'प्लेटफ़ॉर्म पर दिन',
-      statCapital: 'पूंजी शक्ति',
-      statCumulativeProfit: 'संचित कॉपी लाभ (USDT)',
-      statTotalFollowers: 'कुल फॉलोअर',
-      statTradingDays: 'कुल ट्रेडिंग दिन',
-      tabFollowers: 'फॉलोअर ({n})',
-      tabCurrent: 'खुली लीड',
-      tabHistory: 'लीड इतिहास',
-      tabSettings: 'ट्रेडर सेटिंग',
-      emptyFollowers: 'कोई फॉलोअर नहीं',
-      removeFollower: 'हटाएँ',
-      followerEquity: 'खाता इक्विटी (USDT)',
-      followerTotalShare: 'कुल लाभ साझा (USDT)',
-      followerLastShare: 'पिछली अवधि साझा',
-      followerSince: 'फॉलो शुरू: {time}',
-      emptyCurrent: 'कोई खुली लीड नहीं',
-      emptyHistory: 'कोई लीड इतिहास नहीं',
-      settingsBasic: 'मूल जानकारी',
-      avatar: 'अवतार',
-      nickname: 'उपनाम',
-      nicknamePlaceholder: 'अधिकतम 10 अक्षर',
-      bio: 'परिचय',
-      bioPlaceholder: 'अधिकतम 25 अक्षर',
-      saveSuccess: 'सहेजा गया',
-      saveBasicProcessing: 'सहेज रहे हैं…',
-      saveBasic: 'मूल जानकारी सहेजें',
-      leadSymbols: 'लीड अनुबंध',
-      saveProcessing: 'सहेज रहे हैं…',
-      save: 'सहेजें',
-      tagsTitle: 'टैग (अधिकतम 4)',
-      confirmRemoveFollower: 'फॉलोअर "{name}" हटाएँ?',
-      saveFailed: 'सहेजना विफल',
-      uploadFailed: 'अपलोड विफल, पुनः प्रयास करें',
-      defaultFollower: 'फॉलोअर',
-      defaultUser: 'उपयोगकर्ता',
-    },
-  },
-  footer: {
-    aboutSection: 'हमारे बारे में',
-    companyIntro: 'कंपनी परिचय',
-    brand: 'ब्रांड',
-    community: 'iBit समुदाय',
-    riskWarning: 'जोखिम प्रकटन',
-    terms: 'सेवा की शर्तें',
-    privacy: 'गोपनीयता नीति',
-    futuresTrade: 'फ्यूचर्स ट्रेडिंग',
-    spotTrade: 'स्पॉट ट्रेडिंग',
-    losslessCopy: 'लॉसलेस कॉपी',
-    beginnerGuide: 'शुरुआती गाइड',
-    helpCenter: 'सहायता केंद्र',
-    glossary: 'शब्दावली',
-    compliance: 'अनुपालन',
-    products: 'उत्पाद',
-    resources: 'संसाधन',
-  },
-  announcements: {
-    title: 'सूचनाएं',
-    noAnnouncements: 'कोई सूचना नहीं',
-    back: 'वापस',
-    backToList: 'सूची पर वापस',
-    loadMore: 'और लोड करें',
-  },
-  download: {
-    title: 'iBit डाउनलोड करें',
-    heroTitle: 'रियल-टाइम मार्केट कभी भी ट्रेड करें\nमल्टी-लेयर सुरक्षा के साथ',
-    desc: 'कहीं भी, कभी भी ट्रेड करें',
-    appDesc: 'ऐप में सभी लोकप्रिय सुविधाएं, कहीं भी कभी भी ट्रेड करें',
-    latestVersion: 'नवीनतम संस्करण',
-    updateNotes: 'अपडेट नोट्स',
-    ios: 'iOS डाउनलोड',
-    iosNotReleased: 'iOS अभी उपलब्ध नहीं',
-    android: 'Android डाउनलोड',
-    androidNotReleased: 'Android अभी उपलब्ध नहीं',
-    scanToDownload: 'स्कैन करके डाउनलोड करें',
-  },
-  account: {
-    title: 'अकाउंट केंद्र',
-    uid: 'UID',
-    email: 'ईमेल',
-    profile: 'प्रोफाइल',
-    security: 'सुरक्षा',
-    securityDesc: 'पासवर्ड, प्रमाणीकरण, फंड पासवर्ड',
-    assets: 'मेरी संपत्ति',
-    assetsDesc: 'जमा, निकासी, हस्तांतरण',
-    inviteCode: 'आमंत्रण कोड',
-    inviteFriends: 'मित्रों को आमंत्रित करें',
-    inviteDesc: 'मित्रों को आमंत्रित करें और रिबेट पुरस्कार पाएं',
-    helpSupport: 'सहायता और समर्थन',
-    helpDesc: 'सामान्य प्रश्न और टिकट',
-    broker: 'ब्रोकर',
-    brokerDesc: 'रिबेट प्रबंधन, टीम विवरण',
-    logout: 'लॉग आउट',
-    securityScore: 'सुरक्षा स्कोर',
-    twofa: 'Google प्रमाणक',
-    supportTitle: 'सहायता से संपर्क',
-    supportHours: '7×24 ऑनलाइन सहायता',
-    onlineSupport: 'ऑनलाइन चैट',
-    instantChat: 'तत्काल चैट',
-    telegramSupport: 'Telegram सहायता',
-    emailSupport: 'ईमेल सहायता',
-    applySubmitted: 'आवेदन सबमिट हुआ, समीक्षा की प्रतीक्षा करें',
-    scoreHigh: 'उत्कृष्ट',
-    scoreMedium: 'औसत',
-    scoreLow: 'सुधार आवश्यक',
-  },
-  transfer: {
-    title: 'ट्रांसफर',
-    amount: 'ट्रांसफर राशि',
-    amountPlaceholder: 'ट्रांसफर राशि दर्ज करें',
-    maxTransferable: 'अधिकतम ट्रांसफर योग्य',
-    success: 'ट्रांसफर सफल',
-    selectCoin: 'कॉइन चुनें',
-    enterAmount: 'कृपया ट्रांसफर राशि दर्ज करें',
-    histEmpty: 'कोई ट्रांसफर रिकॉर्ड नहीं',
-    balanceLabel: 'बैलेंस',
-  },
-  withdraw: {
-    title: 'निकासी',
-    network: 'नेटवर्क',
-    networkTip: 'कृपया सुनिश्चित करें कि निकासी नेटवर्क प्राप्त प्लेटफॉर्म के नेटवर्क से मेल खाता है, अन्यथा संपत्ति खो सकती है।',
-    address: 'निकासी पता',
-    addressPlaceholder: 'निकासी पता दर्ज करें',
-    amount: 'निकासी राशि',
-    received: 'प्राप्त राशि',
-    fee: 'शुल्क',
-    submitted: 'निकासी जमा हो गई',
-    fundPassword: 'फंड पासवर्ड',
-    emailCode: 'ईमेल कोड',
-    googleCode: 'Google कोड',
-    securityVerification: 'सुरक्षा सत्यापन',
-    recordTitle: 'निकासी इतिहास',
-    recordEmpty: 'कोई निकासी रिकॉर्ड नहीं',
-    confirmCancelApply: 'इस निकासी आवेदन को रद्द करें?',
-    withdrawCancelledToast: 'रद्द किया गया',
-    withdrawCancelFailedToast: 'रद्द विफल',
-    statusPending: 'समीक्षाधीन',
-    statusReleasing: 'जारी हो रहा है',
-    statusWithdrawFailed: 'विफल',
-    statusWithdrawSuccess: 'सफल',
-    statusWithdrawCancelled: 'रद्द',
-    typeInternalTransfer: 'आंतरिक ट्रांसफर',
-    typeOnChainWithdraw: 'ऑन-चेन निकासी',
-    cancelApplyBtn: 'रद्द करें',
-    initFailed: 'प्रारंभ विफल',
-    submitOnChainFailed: 'निकासी विफल',
-    transferSubmitFailed: 'ट्रांसफर विफल',
-    availWithdrawBalance: 'निकासी योग्य शेष:',
-    availTransferBalance: 'ट्रांसफर योग्य शेष:',
-    withdrawNetworkLabel: 'निकासी नेटवर्क',
-    withdrawAmountUsdt: 'निकासी राशि (USDT)',
-    transferAmountUsdt: 'ट्रांसफर राशि (USDT)',
-    expectedArrival: 'अनुमानित प्राप्ति',
-    minWithdrawRowLabel: 'न्यूनतम निकासी',
-    internalTransferFeeLabel: 'आंतरिक ट्रांसफर शुल्क',
-    free: 'मुफ़्त',
-    minTransferRowLabel: 'न्यूनतम ट्रांसफर',
-    recipientUidLabel: 'प्राप्तकर्ता (UID)',
-    recipientUidPlaceholder: 'प्राप्तकर्ता UID दर्ज करें',
-    addressForNetwork: 'USDT-{network} पता दर्ज करें',
-    codePlaceholder6Digits: '6 अंकों का कोड',
-    googlePlaceholder6: '6 अंकों का OTP',
-    sendVerificationCode: 'कोड भेजें',
-    confirmWithdrawSubmit: 'निकासी पुष्टि करें',
-    confirmTransferSubmit: 'ट्रांसफर पुष्टि करें',
-    codeSentToEmailToast: 'सत्यापन कोड ईमेल पर भेजा गया',
-    onchainSubmittedPendingToast: 'निकासी आवेदन जमा, समीक्षा लंबित',
-    transferSubmittedToast: 'आंतरिक ट्रांसफर जमा हो गया',
-    submitFailed: 'जमा विफल',
-    detailTitleOnChain: 'निकासी विवरण',
-    detailTitleTransfer: 'आंतरिक ट्रांसफर विवरण',
-    amountHeroWithdraw: 'निकासी राशि',
-    amountHeroTransfer: 'ट्रांसफर राशि',
-    stepApplied: 'आवेदन जमा',
-    stepDone: 'पूर्ण',
-    recipientLabel: 'प्राप्तकर्ता',
-    appliedAt: 'आवेदन समय',
-    finishedAt: 'पूर्ण समय',
-    cancelApplyFull: 'आवेदन रद्द करें',
-    copyBtn: 'कॉपी',
-    bindGoogleFirst: 'कृपया पहले Google प्रमाणक बांधें',
-    errFillAddressBeforeCode: 'पहले निकासी पता भरें',
-    errFillAmountBeforeCode: 'पहले निकासी राशि भरें',
-    errFillUidBeforeCode: 'पहले प्राप्तकर्ता UID भरें',
-    errFillTransferAmtBeforeCode: 'पहले ट्रांसफर राशि भरें',
-    errEnterWithdrawAddress: 'निकासी पता दर्ज करें',
-    errEnterWithdrawAmount: 'निकासी राशि दर्ज करें',
-    errMinWithdrawWithAmt: 'न्यूनतम निकासी {min} USDT',
-    errExceedWithdrawBalance: 'निकासी योग्य शेष से अधिक',
-    errEnterFundPassword: 'फंड पासवर्ड दर्ज करें',
-    errEnterEmailCode: 'ईमेल कोड दर्ज करें',
-    errEnterGoogleCode: 'Google कोड दर्ज करें',
-    errEnterRecipientUid: 'प्राप्तकर्ता UID दर्ज करें',
-    errEnterTransferAmount: 'ट्रांसफर राशि दर्ज करें',
-    errMinTransferWithAmt: 'न्यूनतम ट्रांसफर {min} USDT',
-    errExceedTransferBalance: 'ट्रांसफर योग्य शेष से अधिक',
-  },
-  deposit: {
-    title: 'जमा',
-    address: 'जमा पता',
-    network: 'नेटवर्क',
-    saveQrCode: 'QR कोड सेव करें',
-    addressCopied: 'पता कॉपी हो गया',
-    minDeposit: 'न्यूनतम जमा',
-    arrivals: 'पुष्टि संख्या',
-    coin: 'कॉइन',
-    protocol: 'नेटवर्क / प्रोटोकॉल',
-    subCoin: 'सब-कॉइन',
-    contract: 'कॉन्ट्रैक्ट',
-    depositAmount: 'जमा राशि',
-    amountPlaceholder: 'राशि दर्ज करें',
-    generateOrder: 'ऑर्डर बनाएं',
-    generating: 'बन रहा है…',
-    notice: 'नोटिस',
-    notice1: 'ट्रांसफर से पहले ऑर्डर बनाएं; ऑर्डर में दिखाए गए पते और राशि का उपयोग करें।',
-    notice2: 'गलत नेटवर्क या कॉन्ट्रैक्ट में जमा न करें, अन्यथा संपत्ति स्थायी रूप से खो सकती है।',
-    notice3: 'ट्रांसफर पूरा होने के बाद जल्द से जल्द ट्रांजेक्शन हैश सबमिट करें।',
-    intro: 'परिचय',
-    introText: 'कॉइन और नेटवर्क चुनें, राशि दर्ज करें, फिर "ऑर्डर बनाएं" पर क्लिक करें। आपको एक समर्पित प्राप्ति पता और ऑर्डर नंबर मिलेगा। ऑन-चेन ट्रांसफर पूरा होने के बाद, इस पेज पर TxHash सबमिट करें।',
-    newDeposit: '← नई जमा',
-    orderInfo: 'ऑर्डर जानकारी',
-    orderNo: 'ऑर्डर नं.',
-    status: 'स्थिति',
-    coinLabel: 'कॉइन',
-    networkLabel: 'नेटवर्क',
-    amount: 'राशि',
-    payAddress: 'भुगतान पता',
-    payAddressHint: 'इस पते पर ऑर्डर राशि ट्रांसफर करें; कॉइन और नेटवर्क ऑर्डर के अनुरूप होने चाहिए',
-    qrTitle: 'QR कोड भुगतान',
-    qrHint: 'वॉलेट से स्कैन करके उपरोक्त पते पर ट्रांसफर करें (पता और राशि न बदलें)',
-    contractAddress: 'कॉन्ट्रैक्ट पता',
-    copy: '⎘ कॉपी',
-    copyAddress: 'कॉपी',
-    submitHash: 'ट्रांजेक्शन हैश सबमिट करें',
-    submittingHash: 'सबमिट हो रहा है…',
-    hashPlaceholder: 'ऑन-चेन Tx Hash / Tron TxID पेस्ट करें',
-    orSubmitHash: 'या: ट्रांसफर पूरा होने के बाद ट्रांजेक्शन हैश / TxID दर्ज करें',
-    hashRequired: 'कृपया ट्रांजेक्शन हैश दर्ज करें',
-    statusNotSubmittable: 'वर्तमान स्थिति में हैश सबमिट नहीं किया जा सकता',
-    orderCreated: 'ऑर्डर बनाया गया, कृपया नीचे दिए गए पते पर ट्रांसफर करें',
-    orderFailed: 'ऑर्डर बनाने में विफल',
-    addressCopy: 'पता कॉपी किया गया',
-    orderNoCopy: 'ऑर्डर नंबर कॉपी किया गया',
-    hashSubmitted: 'सबमिट किया, ऑन-चेन पुष्टि की प्रतीक्षा',
-    hashFailed: 'सबमिट करने में विफल',
-    broadcastSuccess: 'ट्रांजेक्शन ब्रॉडकास्ट, हैश सबमिट किया गया',
-    tronBroadcastSuccess: 'ट्रांजेक्शन ब्रॉडकास्ट, TxID सबमिट किया गया',
-    noNetwork: 'कोई नेटवर्क उपलब्ध नहीं',
-    noSubCoin: 'इस नेटवर्क पर कोई सब-कॉइन उपलब्ध नहीं',
-    amountRequired: 'कृपया जमा राशि दर्ज करें',
-    amountPositive: '0 से अधिक राशि दर्ज करें',
-    submittedHash: 'सबमिट किया गया Hash: ',
-    manualDepositTab: 'मैनुअल डिपॉजिट',
-    walletDepositTab: 'ऑन-चेन डिपॉजिट',
-    walletPayEvm: 'वॉलेट कनेक्ट करें और भुगतान करें (EVM)',
-    walletPayingEvm: 'वॉलेट प्रोसेस हो रहा है…',
-    walletPayTron: 'वॉलेट कनेक्ट करें और भुगतान करें (Tron)',
-    walletPayingTron: 'Tron वॉलेट प्रोसेस हो रहा है…',
-    histLink: 'जमा इतिहास',
-    retryBtn: 'पुनः प्रयास',
-    backWithArrow: '‹ वापस',
-    rechargeStatus0: 'भुगतान लंबित',
-    rechargeStatus1: 'ऑन-चेन पुष्टि लंबित',
-    rechargeStatus2: 'पूर्ण',
-    rechargeStatus3: 'रद्द',
-    rechargeStatus4: 'विफल',
-    statusUnknown: 'स्थिति {status}',
-    qrAlt: 'प्राप्ति पता QR कोड',
-    loadNetworksFailed: 'नेटवर्क लोड विफल',
-    wcHintEvmConfigured:
-      'आप WalletConnect से EVM वॉलेट जोड़कर ऑर्डर राशि को प्राप्ति पते पर ऑन-चेन ट्रांसफर कर सकते हैं (नेटवर्क और सिक्का मेल खाएँ)।',
-    wcHintEvmUnconfigured:
-      'EVM WalletConnect कॉन्फ़िगर नहीं है: VITE_WALLETCONNECT_PROJECT_ID सेट करें, या मैनुअल डिपॉजिट पर जाकर ट्रांज़ैक्शन Hash सबमिट करें।',
-    wcHintTronConfigured:
-      'WalletConnect (Tron नामस्थान) से संगत वॉलेट जोड़ सकते हैं; हस्ताक्षर के बाद ट्रांज़ैक्शन प्रसारित होगा—Tron TxID जमा करें (0x Ethereum हैश नहीं)।',
-    wcHintTronUnconfigured:
-      'Tron WalletConnect के लिए VITE_WALLETCONNECT_PROJECT_ID आवश्यक है; कॉन्फ़िगर नहीं है तो मैनुअल डिपॉजिट पर जाकर TxID सबमिट करें।',
-    wcHintTronManualOnly:
-      'यह नेटवर्क वॉलेट वेक-अप का समर्थन नहीं करता। मैनुअल डिपॉजिट पर जाकर TxID सबमिट करें।',
-    walletPayFallback: 'वॉलेट भुगतान विफल',
-    tronWalletPayFallback: 'Tron वॉलेट भुगतान विफल',
-    currentPrefix: 'वर्तमान:',
-    histEmpty: 'कोई जमा रिकॉर्ड नहीं',
-    histOrderNo: 'ऑर्डर नं.',
-    histTx: 'TX:',
-    histLoadMore: 'और लोड करें',
-    histLoadedAll: 'सभी रिकॉर्ड लोड हो चुके हैं',
-  },
-  broker: {
-    title: 'ब्रोकर केंद्र',
-    applyTitle: 'ब्रोकर के लिए आवेदन',
-    myBrokerCode: 'मेरा ब्रोकर कोड',
-    referralCount: 'रेफरल',
-    totalCommission: 'कुल कमीशन',
-    applyStatus: 'आवेदन स्थिति',
-    pending: 'समीक्षाधीन',
-    approved: 'स्वीकृत',
-    rejected: 'अस्वीकृत',
-    defaultName: 'ब्रोकर',
-    greeting: 'नमस्ते, {name}',
-    uidLabel: 'UID: {uid}',
-    introBanner: 'उपयोगकर्ताओं को आमंत्रित करें, पंजीकरण और ट्रेड पर रिबेट पाएं। रिबेट रियल-टाइम में निपटाए जाते हैं और प्रतिदिन खाते में जमा होते हैं।',
-    statNewToday: 'आज नए (व्यक्ति)',
-    statTradeToday: 'आज ट्रेड (व्यक्ति)',
-    statRebateToday: 'आज रिबेट (USDT)',
-    inviteList: 'आमंत्रण सूची',
-    emptyInviteList: 'कोई आमंत्रण नहीं',
-    thAccount: 'खाता',
-    thLevel: 'स्तर',
-    thPerpCopy: 'परप / कॉपी',
-    levelBroker: 'ब्रोकर',
-    levelNormal: 'सामान्य',
-    editRateTooltip: 'रिबेट दर संपादित करें',
-    todayRebate: 'आज का रिबेट',
-    emptyTodayRebate: 'आज कोई रिबेट नहीं',
-    thId: 'ID',
-    rebateUsdt: 'रिबेट (USDT)',
-    teamDetails: 'टीम विवरण',
-    filterAll: 'सभी',
-    filterWeek: '1 सप्ताह',
-    filterToday: 'आज',
-    filterMonth: 'इस माह',
-    teamTotalAssets: 'कुल टीम संपत्ति',
-    rebateHistory: 'रिबेट इतिहास',
-    emptyRebateHistory: 'कोई रिबेट रिकॉर्ड नहीं',
-    amountUsdt: 'राशि (USDT)',
-    loadMore: 'और लोड करें',
-    loadingMore: 'लोड हो रहा है…',
-    loadedAll: 'सभी रिकॉर्ड लोड हो गए',
-    editModalTitle: 'रिबेट दर संपादित करें',
-    perpRebateRate: 'परप रिबेट दर',
-    copyRebateRate: 'कॉपी रिबेट दर',
-    editTip: 'परिवर्तन तुरंत लागू होते हैं। सावधानी से करें।',
-    perpRateError: 'परप रिबेट 0–100 पूर्णांक होना चाहिए',
-    copyRateError: 'कॉपी रिबेट 0–100 पूर्णांक होना चाहिए',
-    setSuccess: 'सहेजा गया, तुरंत लागू',
-  },
-  help: {
-    title: 'सहायता केंद्र',
-    supportTitle: 'सहायता और समर्थन',
-    search: 'खोजें',
-    searchPlaceholder: 'कीवर्ड खोजें',
-    telegramSupport: 'Telegram सहायता',
-    quickResponse: 'त्वरित प्रतिक्रिया',
-    emailSupport: 'ईमेल सहायता',
-    docs: 'सहायता दस्तावेज़',
-    viewFullGuide: 'पूरा गाइड देखें',
-    detailTitle: 'सहायता विवरण',
-    backToHelp: 'सहायता केंद्र पर वापस',
-  },
-  invite: {
-    title: 'दोस्तों को आमंत्रित करें',
-    myCode: 'मेरा आमंत्रण कोड',
-    copy: 'कोड कॉपी करें',
-    copied: 'कोड कॉपी हो गया',
-    share: 'आमंत्रण लिंक शेयर करें',
-    shareLink: 'आमंत्रण लिंक कॉपी करें',
-    linkCopied: 'लिंक कॉपी हो गया',
-    desc: 'दोस्तों को रजिस्टर करने के लिए आमंत्रित करें और उनके ट्रेड पर रिबेट पुरस्कार पाएं',
-    totalInvited: 'कुल आमंत्रित',
-    totalReward: 'कुल रिबेट',
-    noRecord: 'कोई आमंत्रण रिकॉर्ड नहीं',
-    heroLine1: 'दोस्तों को आमंत्रित करें',
-    heroLine2: 'रिबेट कमाएँ',
-    heroDesc:
-      'प्रत्येक सफल पंजीकरण पर आप प्लेटफ़ॉर्म आमंत्रण रिबेट कार्यक्रम के लिए पात्र हो सकते हैं। नियम आधिकारिक घोषणाओं के अनुसार हैं।',
-    myInviteInfo: 'मेरी आमंत्रण जानकारी',
-    inviteCodeLabel: 'आमंत्रण कोड',
-    inviteLinkShort: 'आमंत्रण लिंक',
-    qrCodeLabel: 'QR कोड',
-    copyShort: 'कॉपी',
-    copiedDone: 'कॉपी ✓',
-    qrInviteAlt: 'आमंत्रण QR कोड',
-    scanToRegister: 'स्कैन करके पंजीकरण',
-    rebateRulesTitle: 'रिबेट नियम',
-    step1Title: 'कोड साझा करें',
-    step1Desc: 'अपना विशिष्ट आमंत्रण कोड या लिंक दोस्तों को भेजें',
-    step2Title: 'दोस्त पंजीकरण',
-    step2Desc: 'दोस्त आपके लिंक से पंजीकरण व सत्यापन पूरा करते हैं',
-    step3Title: 'रिबेट प्राप्त करें',
-    step3Desc: 'दोस्तों के ट्रेड शुल्क रिबेट प्लेटफ़ॉर्म नियमों के अनुसार निपटाए जाते हैं',
-  },
-  futuresPage: futuresPageByLocale.hi,
-  spot: {
-    tag: 'स्पॉट',
-    side: { buy: 'खरीदें', sell: 'बेचें' },
-    orderType: { limit: 'लिमिट', market: 'मार्केट' },
-    orderStatus: {
-      pending: 'लंबित',
-      partial: 'आंशिक भरा',
-      filled: 'भरा हुआ',
-      cancelled: 'रद्द',
-      pending_cancel: 'रद्द हो रहा',
-      expired: 'समाप्त',
-      init: 'प्रारंभ',
-    },
-    recordType: {
-      transferIn: 'फंड इन',
-      transferOut: 'फंड आउट',
-      orderFreeze: 'ऑर्डर फ्रीज',
-      cancelUnfreeze: 'रद्द अनफ्रीज',
-      trade: 'ट्रेड',
-      fee: 'शुल्क',
-      unfreeze: 'अनफ्रीज',
-      unknown: 'प्रकार {type}',
-    },
-    tabs: {
-      currentOrders: 'खुले ऑर्डर',
-      historyOrders: 'ऑर्डर इतिहास',
-      trades: 'ट्रेड विवरण',
-      funding: 'फंड प्रवाह',
-    },
-    table: {
-      pair: 'पेयर',
-      side: 'दिशा',
-      type: 'प्रकार',
-      price: 'मूल्य',
-      orderPrice: 'ऑर्डर मूल्य',
-      amount: 'मात्रा',
-      orderAmount: 'ऑर्डर मात्रा',
-      filled: 'भरा',
-      status: 'स्थिति',
-      time: 'समय',
-      action: 'कार्रवाई',
-      dealPrice: 'मूल्य',
-      dealVolume: 'मात्रा',
-      turnover: 'टर्नओवर',
-      recordType: 'प्रकार',
-      quantity: 'मात्रा',
-      coin: 'कॉइन',
-    },
-    trade: {
-      buy: 'खरीदें',
-      sell: 'बेचें',
-      limit: 'लिमिट',
-      market: 'मार्केट',
-      processing: 'प्रसंस्करण...',
-      buySymbol: '{symbol} खरीदें',
-      sellSymbol: '{symbol} बेचें',
-      priceUsdt: 'मूल्य (USDT)',
-      limitPlaceholder: 'लिमिट',
-      marketHint: 'सर्वोत्तम बाजार मूल्य पर',
-      amountUsdt: 'राशि (USDT)',
-      amountBase: 'मात्रा ({base})',
-      available: 'उपलब्ध',
-      transfer: 'ट्रांसफर',
-      loginForBalance: 'बैलेंस देखने के लिए लॉगिन करें',
-      spotAssets: 'स्पॉट संपत्ति',
-    },
-    order: { cancel: 'रद्द', cancelAll: 'सभी रद्द' },
-    empty: {
-      loginLink: 'लॉगिन',
-      loginOrdersPrompt: 'ऑर्डर देखने के लिए {link}',
-      loginViewPrompt: 'देखने के लिए {link}',
-      noOrders: 'कोई खुला ऑर्डर नहीं',
-      noHistoryOrders: 'कोई ऑर्डर इतिहास नहीं',
-      noTrades: 'कोई ट्रेड नहीं',
-      noFunding: 'कोई रिकॉर्ड नहीं',
-    },
-    errors: {
-      symbolNotReady: 'ट्रेडिंग पेयर तैयार नहीं है',
-      invalidAmount: 'मान्य मात्रा दर्ज करें',
-      invalidPrice: 'मान्य मूल्य दर्ज करें',
-      minLimitVolume: 'मात्रा कम से कम {min} होनी चाहिए',
-      minMarketBuy: 'मार्केट खरीद राशि कम से कम {min} USDT होनी चाहिए',
-      minMarketSell: 'मार्केट बिक्री मात्रा कम से कम {min} होनी चाहिए',
-      orderSubmitted: 'ऑर्डर सबमिट हो गया',
-      orderFailed: 'ऑर्डर विफल',
-      cancelSuccess: 'ऑर्डर रद्द हो गया',
-      cancelFailed: 'रद्द करना विफल',
-      cancelAllSuccess: 'सभी ऑर्डर रद्द हो गए',
-      cancelAllPartialFailed: 'कुछ ऑर्डर रद्द नहीं हो सके',
-    },
-    loadedAll: 'सभी लोड हो गए',
-    ticker: {
-      change24h: '24घं परिवर्तन',
-      high24h: '24घं उच्च',
-      low24h: '24घं निम्न',
-      turnover24h: '24घं वॉल्यूम',
-    },
-    chartSub: { chart: 'चार्ट', coinInfo: 'कॉइन जानकारी' },
-    tf: { m1: '1मि', m5: '5मि', m15: '15मि', m30: '30मि', h1: '1घं', h4: '4घं', d1: '1दि' },
-    ohlcv: {
-      spotLabel: 'स्पॉट',
-      open: 'ओ',
-      high: 'उ',
-      low: 'न',
-      close: 'स',
-      volume: 'वॉल्यूम',
-      changePct: 'परिवर्तन',
-    },
-    draw: {
-      cursor: 'कर्सर',
-      trend: 'ट्रेंड लाइन',
-      hline: 'क्षैतिज',
-      ray: 'रे',
-      channel: 'चैनल',
-      fib: 'फिबोनाची',
-      text: 'टेक्स्ट',
-      clearAll: 'ड्रॉइंग हटाएं',
-      zoomOut: 'ज़ूम आउट',
-    },
-    mobileTab: { chart: 'बाज़ार', trade: 'ट्रेड' },
-    pair: { search: 'खोजें', loading: 'लोड हो रहा…', noMatch: 'कोई परिणाम नहीं', retryLater: ', बाद में पुनः प्रयास करें' },
-    book: {
-      waiting: 'डेटा की प्रतीक्षा…',
-      orderbook: 'ऑर्डर बुक',
-      trades: 'ट्रेड',
-      priceUsdt: 'मूल्य (USDT)',
-      amountBase: 'मात्रा ({base})',
-      total: 'कुल',
-      buyRatio: 'खरीद {n}%',
-      sellRatio: '{n}% बिक्री',
-      price: 'मूल्य',
-      amount: 'मात्रा',
-      time: 'समय',
-      pricePrecision: 'मूल्य सटीकता',
-    },
-    coinInfo: {
-      marketCap: 'मार्केट कैप',
-      circulating: 'परिचालन आपूर्ति',
-      issuePrice: 'जारी मूल्य',
-      ath: 'सर्वकालिक उच्च',
-      athDate: 'ATH तिथि',
-      whitepaper: 'व्हाइटपेपर',
-      empty: 'कोई कॉइन जानकारी नहीं',
-      reload: 'पुनः लोड',
-    },
-    transferModal: {
-      title: 'फंड ट्रांसफर',
-      amount: 'ट्रांसफर मात्रा',
-      amountPlaceholder: 'मात्रा दर्ज करें',
-      availableUsdt: 'उपलब्ध USDT:',
-      transferring: 'ट्रांसफर हो रहा है...',
-      invalidAmount: 'मान्य ट्रांसफर मात्रा दर्ज करें',
-      insufficientBalance: 'राशि उपलब्ध शेष से अधिक है',
-      transferFailed: 'ट्रांसफर विफल, बाद में पुनः प्रयास करें',
-    },
-  },
-}
+	nav: {
+		home: 'होम',
+		market: 'बाज़ार',
+		spot: 'स्पॉट',
+		futures: 'फ्यूचर्स',
+		copyTrade: 'कॉपी ट्रेड',
+		finance: 'वित्त',
+		idoPresale: 'IDO प्रीसेल',
+		claimAirdrop: 'एयरड्रॉप प्राप्त करें',
+		announcements: 'सूचनाएं',
+		download: 'डाउनलोड',
+	},
+	lang: {
+		title: '语言',
+		zhCN: '简体中文',
+		zhTW: '繁體中文',
+		en: 'English',
+		ko: '한국어',
+		ja: '日本語',
+		hi: 'हिन्दी',
+		id: 'Bahasa Indonesia',
+		es: 'Español',		   // 西班牙语
+		ru: 'Русский',         // 俄语
+		pt: 'Português',       // 葡萄牙语
+		de: 'Deutsch',         // 德语
+		fr: 'Français',        // 法语
+		tr: 'Türkçe',          // 土耳其语
+		vi: 'Tiếng Việt'       // 越南语
+	},
+	header: {
+		login: 'लॉग इन',
+		register: 'रजिस्टर',
+		account: 'खाता',
+		assets: 'मेरी संपत्ति',
+		security: 'सुरक्षा सेटिंग',
+		broker: 'ब्रोकर',
+		logout: 'लॉग आउट',
+		logoutShort: 'लॉग आउट',
+		downloadTitle: 'डाउनलोड',
+		brokerApplyTitle: 'ब्रोकर के लिए आवेदन करें',
+		brokerApplyDesc: 'आप अभी तक ब्रोकर नहीं हैं। सिस्टम आपके खाते की जानकारी का उपयोग करके स्वचालित रूप से आवेदन जमा करेगा। स्वीकृति के बाद ब्रोकर सुविधाओं का उपयोग कर सकते हैं।',
+		cancel: 'रद्द करें',
+		applyNow: 'अभी आवेदन करें',
+		viewApplyList: 'समीक्षा सूची देखें',
+		submitting: 'जमा हो रहा है…',
+		menu: 'मेनू',
+	},
+	common: {
+		loading: 'लोड हो रहा है...',
+		retry: 'पुनः प्रयास',
+		cancel: 'रद्द करें',
+		confirm: 'पुष्टि करें',
+		submit: 'जमा करें',
+		save: 'सेव करें',
+		send: 'भेजें',
+		back: 'वापस',
+		next: 'अगला',
+		done: 'पूर्ण',
+		noData: 'कोई डेटा नहीं',
+		noRecord: 'कोई रिकॉर्ड नहीं',
+		search: 'खोजें',
+		all: 'सभी',
+		max: 'अधिकतम',
+		copied: 'कॉपी हो गया',
+		networkError: 'नेटवर्क त्रुटि, पुनः प्रयास करें',
+		loadFailed: 'लोड विफल',
+		operationFailed: 'कार्रवाई विफल, पुनः प्रयास करें',
+		saveSuccess: 'सेव हो गया',
+		more: 'और',
+		perpetual: 'परपेचुअल',
+		set: 'सेट है',
+		notSet: 'सेट नहीं',
+		change: 'बदलें',
+		bind: 'बाइंड करें',
+		unbind: 'अनबाइंड करें',
+		on: 'चालू',
+		off: 'बंद',
+		status: 'स्थिति',
+		time: 'समय',
+		amount: 'राशि',
+		type: 'प्रकार',
+		coin: 'कॉइन',
+		from: 'से',
+		to: 'को',
+		close: 'बंद करें',
+		contactService: 'सहायता से संपर्क',
+	},
+	home: {
+		heroTitle: 'सुरक्षित · कुशल · वैश्विक\nडिजिटल संपत्ति एक्सचेंज',
+		heroDesc: 'iBit उन्नत तकनीक और सख्त जोखिम प्रबंधन के माध्यम से वैश्विक उपयोगकर्ताओं को स्थिर, पारदर्शी और पेशेवर डिजिटल संपत्ति ट्रेडिंग सेवाएं प्रदान करने के लिए समर्पित है।',
+		register: 'रजिस्टर',
+		viewMarket: 'बाज़ार देखें',
+		downloadApp: 'ऐप डाउनलोड',
+		coreAdvantages: 'मुख्य लाभ',
+		assetSafetyTitle: 'संपत्ति सुरक्षा',
+		assetSafetyDesc: 'कोल्ड/हॉट वॉलेट आइसोलेशन, मल्टी-सिग्नेचर और परमिशन कंट्रोल, तथा 24/7 जोखिम निगरानी से उपयोगकर्ता संपत्तियों की पूर्ण सुरक्षा।',
+		highPerfTitle: 'उच्च प्रदर्शन',
+		highPerfDesc: 'स्वयं विकसित उच्च-प्रदर्शन मिलान इंजन मिलीसेकंड ऑर्डर प्रोसेसिंग का समर्थन करता है, कम विलंबता में स्थिर ट्रेडिंग अनुभव देता है।',
+		globalComplianceTitle: 'वैश्विक अनुपालन',
+		globalComplianceDesc: 'बहु-क्षेत्रीय अनुपालन मानकों का पालन करते हुए वैश्विक उपयोगकर्ताओं के लिए विश्वसनीय ट्रेडिंग वातावरण प्रदान करता है।',
+		transparentFeeTitle: 'पारदर्शी शुल्क',
+		transparentFeeDesc: 'स्पष्ट और पारदर्शी शुल्क संरचना, कोई छुपी लागत नहीं, उपयोगकर्ताओं को ट्रेडिंग लागत प्रभावी ढंग से प्रबंधित करने में मदद करता है।',
+		aboutUs: 'हमारे बारे में',
+		aboutDesc: 'iBit एक वैश्विक डिजिटल संपत्ति एक्सचेंज है जो तकनीकी नवाचार और अनुपालन संचालन के माध्यम से उपयोगकर्ताओं को सुरक्षित, स्थिर और कुशल ट्रेडिंग सेवाएं प्रदान करता है।',
+		foundedYear: '2023 में स्थापित',
+		headquarters: 'कंपनी का मुख्यालय दुबई में है और यहां पंजीकृत है, साथ ही अमेरिका, कनाडा, ऑस्ट्रेलिया आदि देशों के संबंधित लाइसेंस भी धारित हैं।',
+		ourVision: 'हमारा विजन',
+		visionSubtitle: 'दीर्घकालिक रूप से विश्वसनीय वैश्विक डिजिटल संपत्ति ट्रेडिंग इन्फ्रास्ट्रक्चर का निर्माण',
+		ecoTitle: 'इकोसिस्टम',
+		ecoDesc: 'नई पीढ़ी का डिजिटल संपत्ति क्रिप्टो ट्रेडिंग इकोसिस्टम बनाना',
+		missionTitle: 'मिशन',
+		missionDesc: 'वैश्विक परिदृश्यों में डिजिटल मूल्य के प्रवाह को बढ़ावा देना',
+		purposeTitle: 'उद्देश्य',
+		purposeDesc: 'उपयोगकर्ताओं को क्रिप्टो डिजिटल संपत्तियों का आसानी से प्रबंधन और निवेश करने में मदद करना',
+		heroImageAlt: 'iBit ट्रेडिंग प्लेटफॉर्म',
+		aboutImageAlt: 'हमारे बारे में',
+	},
+	market: {
+		title: 'लाइव बाज़ार',
+		desc: 'प्रमुख डिजिटल संपत्तियों के रियल-टाइम मूल्य, वॉल्यूम और 24 घंटे के बदलाव उपयोगकर्ताओं को बाज़ार की प्रवृत्तियों पर नज़र रखने में मदद करते हैं।',
+		hot: 'लोकप्रिय',
+		topVolume: 'टॉप वॉल्यूम',
+		gainers: 'लाभार्थी',
+		losers: 'हानिकर्ता',
+		perpetual: 'परपेचुअल',
+		name: 'नाम',
+		latestPrice: 'मूल्य',
+		change24h: '24घं बदलाव',
+		turnover: 'वॉल्यूम',
+		searchPair: 'पेयर खोजें',
+		searchMarket: 'कॉइन, पेयर, फ्यूचर्स खोजें',
+		price: 'मूल्य',
+		change24hShort: '24घं परिवर्तन',
+		high24h: '24घं उच्च',
+		low24h: '24घं निम्न',
+		volume24hLabel: '24घं वॉल्यूम',
+	},
+	auth: {
+		loginTitle: 'लॉग इन',
+		emailLogin: 'ईमेल लॉग इन',
+		emailPlaceholder: 'अपना ईमेल दर्ज करें',
+		password: 'पासवर्ड',
+		passwordPlaceholder: 'अपना पासवर्ड दर्ज करें',
+		forgotPassword: 'पासवर्ड भूल गए?',
+		loginBtn: 'लॉग इन',
+		noAccount: 'खाता नहीं है?',
+		registerNow: 'अभी रजिस्टर करें',
+		verifyTitle: 'सत्यापन कोड दर्ज करें',
+		codeSentDesc: '{email} पर सत्यापन कोड भेजा गया है। कृपया अपना इनबॉक्स जांचें।',
+		codeSendDesc: '{email} पर सत्यापन कोड भेजने के लिए नीचे के बटन पर क्लिक करें।',
+		countdownResend: '{n} सेकंड में पुनः भेजें',
+		resendCode: 'कोड पुनः भेजें',
+		confirmBtn: 'पुष्टि करें',
+		sendCode: 'कोड भेजें',
+		forgotVerify: 'सत्यापन विधि भूल गए?',
+		loginSuccess: 'लॉग इन सफल',
+		codeSentAgain: 'कोड पुनः भेजा गया',
+		registerTitle: 'रजिस्टर',
+		emailRegister: 'ईमेल पंजीकरण',
+		inviteCodeLabel: 'आमंत्रण कोड (वैकल्पिक)',
+		inviteCodePlaceholder: 'आमंत्रण कोड दर्ज करें',
+		hasAccount: 'पहले से खाता है?',
+		loginNow: 'अभी लॉग इन करें',
+		verifyPageTitle: 'सुरक्षा सत्यापन',
+		emailVerifyLabel: 'ईमेल सत्यापन',
+		codePlaceholder: 'सत्यापन कोड दर्ज करें',
+		sendBtn: 'भेजें',
+		passwordTitle: 'पासवर्ड बनाएं',
+		backBtn: '‹ वापस',
+		inputPasswordLabel: 'पासवर्ड',
+		confirmPasswordLabel: 'पासवर्ड की पुष्टि',
+		confirmPasswordPlaceholder: 'पासवर्ड फिर से दर्ज करें',
+		doneBtn: 'पूर्ण',
+		resetSuccess: 'पासवर्ड रीसेट सफल। नए पासवर्ड से लॉग इन करें।',
+		registerSuccess: 'पंजीकरण सफल',
+		welcomeJoin: 'iBit में आपका स्वागत है',
+		loginNowBtn: 'अभी लॉग इन करें',
+		forgotPasswordTitle: 'पासवर्ड रीसेट',
+		emailLabel: 'ईमेल',
+		emailRegisteredPlaceholder: 'पंजीकृत ईमेल दर्ज करें',
+		codeSentToast: 'कोड भेज दिया गया',
+	},
+	error: {
+		emailRequired: 'कृपया ईमेल दर्ज करें',
+		emailInvalid: 'ईमेल फॉर्मेट अमान्य है',
+		passwordRequired: 'कृपया पासवर्ड दर्ज करें',
+		code6Required: 'कृपया 6 अंकों का कोड दर्ज करें',
+		codeRequired: 'कृपया सत्यापन कोड दर्ज करें',
+		loginFailed: 'गलत उपयोगकर्ता नाम या पासवर्ड',
+		networkError: 'नेटवर्क त्रुटि, बाद में पुनः प्रयास करें',
+		emailAlreadyRegistered: 'यह ईमेल पहले से पंजीकृत है। कृपया लॉग इन करें।',
+		confirmPasswordRequired: 'कृपया पासवर्ड दोबारा दर्ज करें',
+		passwordMismatch: 'पासवर्ड मेल नहीं खाते',
+		loadFailed: 'सुरक्षा जानकारी लोड विफल',
+		refreshFailed: 'रिफ्रेश विफल',
+		statusUpdated: 'स्थिति अपडेट हो गई',
+		currentPasswordRequired: 'कृपया वर्तमान पासवर्ड दर्ज करें',
+		sixDigitCode: 'कृपया 6 अंकों का ईमेल सत्यापन कोड दर्ज करें',
+		sixDigitGoogleCode: 'कृपया 6 अंकों का Google कोड दर्ज करें',
+		sendFailed: 'भेजना विफल',
+		operationFailed: 'कार्रवाई विफल',
+	},
+	security: {
+		title: 'सुरक्षा सेटिंग',
+		back: '‹ वापस',
+		warningBanner: 'खाते की सुरक्षा बढ़ाने के लिए ईमेल सत्यापन, Google प्रमाणक और फंड पासवर्ड सेट करने की अनुशंसा की जाती है।',
+		accountSecurity: 'खाता सुरक्षा',
+		loginPassword: 'लॉग इन पासवर्ड',
+		loginPasswordDesc: 'नियमित रूप से पासवर्ड बदलने से खाते की सुरक्षा बढ़ती है',
+		emailVerify: 'ईमेल सत्यापन',
+		emailVerifyDesc: 'खाता सत्यापन और पासवर्ड रिकवरी के लिए ईमेल बाइंड करें',
+		googleAuth: 'Google प्रमाणक',
+		googleAuthDesc: 'खाते की सुरक्षा बढ़ाने के लिए Google प्रमाणक बाइंड करें',
+		fundPassword: 'फंड पासवर्ड',
+		fundPasswordDesc: 'संपत्ति सुरक्षा के लिए फंड पासवर्ड सेट करें',
+		set: 'सेट है',
+		notSet: 'सेट नहीं',
+		change: 'बदलें',
+		bind: 'बाइंड करें',
+		set2: 'सेट करें',
+		statusUpdated: 'स्थिति अपडेट हो गई',
+		loadFailed: 'सुरक्षा जानकारी लोड विफल',
+		refreshFailed: 'रिफ्रेश विफल',
+		bound: 'बाइंड है',
+		notBound: 'बाइंड नहीं',
+		refresh: 'रिफ्रेश',
+		googleHelpTitle: 'Google प्रमाणक सहायता',
+		googleHelpDesc: 'यदि आप सत्यापन कोड प्राप्त नहीं कर सकते या अनबाइंड करने की आवश्यकता है, तो ऑनलाइन सहायता से संपर्क करें।',
+		changeLoginPassword: 'लॉगिन पासवर्ड बदलें',
+		changePasswordHint: 'बदलने के बाद नए पासवर्ड से लॉगिन करें। सत्यापन कोड आपके पंजीकृत ईमेल पर भेजा जाएगा।',
+		currentPassword: 'वर्तमान पासवर्ड',
+		newPassword: 'नया पासवर्ड',
+		confirmNewPassword: 'नया पासवर्ड पुष्टि करें',
+		emailCode: 'ईमेल सत्यापन कोड',
+		sendCode: 'कोड भेजें',
+		codeSent: 'ईमेल पर सत्यापन कोड भेजा गया',
+		changeSuccess: 'पासवर्ड सफलतापूर्वक बदला गया',
+		confirmChange: 'परिवर्तन पुष्टि करें',
+		submitting: 'सबमिट हो रहा है…',
+		setFundPassword: 'फंड पासवर्ड सेट करें',
+		resetFundPassword: 'फंड पासवर्ड रीसेट करें',
+		fundPasswordHint: 'फंड पासवर्ड निकासी, हस्तांतरण जैसी संवेदनशील गतिविधियों के लिए उपयोग होता है। सुरक्षित रखें।',
+		fundPasswordResetHint: 'फंड पासवर्ड रीसेट करें। सत्यापन कोड पंजीकृत ईमेल पर भेजा जाएगा।',
+		newFundPassword: 'नया फंड पासवर्ड',
+		confirmFundPassword: 'पासवर्ड पुष्टि करें',
+		fundPasswordUpdated: 'फंड पासवर्ड अपडेट हुआ',
+		fundPasswordSet: 'फंड पासवर्ड सेट हुआ',
+		bindGoogle: 'Google प्रमाणक जोड़ें',
+		boundEmail: 'पंजीकृत ईमेल:',
+		googleQrStep: '1. QR कोड स्कैन करें या कुंजी मैन्युअल दर्ज करें',
+		googleCodeStep: '2. Google प्रमाणक कोड (6 अंक)',
+		emailCodeStep: '3. ईमेल सत्यापन कोड',
+		copyKey: 'कुंजी कॉपी करें',
+		keyCopied: 'कुंजी कॉपी हो गई',
+		copyFailed: 'कॉपी विफल, कृपया कुंजी टेक्स्ट मैन्युअल चुनें',
+		clipboardDeniedMac: 'क्लिपबोर्ड एक्सेस नहीं मिला। पते की पट्टी में ताला आइकन → साइट सेटिंग्स → Clipboard को Allow करें, फिर पुनः प्रयास करें।',
+		clipboardDenied: 'क्लिपबोर्ड एक्सेस नहीं मिला। ब्राउज़र में इस साइट के लिए क्लिपबोर्ड अनुमति दें, फिर पुनः प्रयास करें।',
+		invalidSecret: 'अमान्य कुंजी, पेज रिफ्रेश करें',
+		googleCodeRequired: '6 अंकों का Google कोड दर्ज करें',
+		emailCodeSent: 'ईमेल सत्यापन कोड भेजा गया',
+		bindSuccess: 'सफलतापूर्वक जोड़ा गया',
+		confirmBind: 'जोड़ने की पुष्टि करें',
+		googleAuthLead: 'पहले अपने फोन के ऐप स्टोर से Google Authenticator या Microsoft Authenticator डाउनलोड करें।',
+		googleAuthTip1: 'जोड़ने के बाद, लॉगिन और संवेदनशील ऑपरेशन के लिए ऐप में 6-अंकीय कोड की आवश्यकता हो सकती है।',
+		googleAuthTip2: 'अपना डिवाइस सुरक्षित रखें। कोड न मिलने पर सहायता से संपर्क करें।',
+		googleAuthStart: 'डाउनलोड हो गया, जोड़ें',
+	},
+	assets: {
+		title: 'मेरी संपत्ति',
+		totalAssets: 'कुल संपत्ति',
+		todayPnl: 'आज का P&L',
+		deposit: 'जमा',
+		withdraw: 'निकासी',
+		transfer: 'ट्रांसफर',
+		history: 'इतिहास',
+		spot: 'स्पॉट',
+		futures: 'फ्यूचर्स',
+		copyTrade: 'कॉपी',
+		finance: 'Earn',
+		claimAirdrop: 'Claim Airdrop',
+		fund: 'निकासी योग्य',
+		walletBalance: 'वॉलेट बैलेंस',
+		unrealizedPnl: 'अवास्तविक P&L',
+		positions: 'पोजीशन',
+		noPositions: 'कोई पोजीशन नहीं',
+		assetBalance: 'संपत्ति बैलेंस',
+		unavailable: 'उपलब्ध नहीं',
+		depositCoin: 'जमा',
+		withdrawCoin: 'निकासी',
+		depositRecord: 'जमा इतिहास',
+		withdrawRecord: 'निकासी इतिहास',
+		transferRecord: 'ट्रांसफर इतिहास',
+		assetRecord: 'लेनदेन इतिहास',
+		overview: 'सारांश',
+		spotAccount: 'स्पॉट खाता',
+		swapAccount: 'फ्यूचर्स खाता',
+		followAccount: 'कॉपी खाता',
+		fundAccount: 'निकासी योग्य खाता',
+		spotTradingAccount: 'स्पॉट ट्रेडिंग खाता',
+		ibitAccount: 'iBit Account',
+		lockedStakingAccount: 'Locked Account',
+		stakingTab: 'लॉक',
+		ibitUnit: 'iBit',
+		releaseTotal: 'कुल रिलीज़',
+		totalLockedBalance: 'कुल लॉक बैलेंस (iBit)',
+		myStakingOrders: 'मेरे लॉक ऑर्डर',
+		stakingOrderNo: 'ऑर्डर नंबर',
+		purchaseQty: 'खरीद मात्रा',
+		stakingTotal: 'लॉक राशि',
+		released: 'रिलीज़ हुआ',
+		pendingRelease: 'रिलीज़ लंबित',
+		startTime: 'शुरू समय',
+		subscribing: 'सब्सक्राइब हो रहा है',
+		releasing: 'रिलीज़ हो रहा है',
+		completed: 'पूरा हुआ',
+		pullToRefresh: 'रीफ्रेश करने के लिए नीचे खींचें',
+		releaseToRefresh: 'रीफ्रेश करने के लिए छोड़ें',
+		refreshing: 'रीफ्रेश हो रहा है...',
+		totalAccount: 'कुल खाता संपत्ति मूल्यांकन',
+		showBalance: 'बैलेंस दिखाएं',
+		hideBalance: 'बैलेंस छुपाएं',
+		followBalance: 'कॉपी बैलेंस',
+		accountTransfer: 'खाता ट्रांसफर',
+		transferFrom: 'से ट्रांसफर',
+		transferTo: 'में ट्रांसफर',
+		available: 'उपलब्ध',
+		freeTransfer: 'निःशुल्क ट्रांसफर, तुरंत जमा',
+		followPositions: 'वर्तमान कॉपी पोजीशन',
+		noFollowPositions: 'कोई कॉपी पोजीशन नहीं',
+		followLoading: 'लोड हो रहा है…',
+		long: 'लॉन्ग',
+		short: 'शॉर्ट',
+		trader: 'ट्रेडर',
+		openPrice: 'ओपन प्राइस',
+		currentPrice: 'वर्तमान मूल्य',
+		amountLever: 'राशि · लीवरेज',
+		closing: 'बंद हो रहा है…',
+		closePosition: 'पोजीशन बंद करें',
+		noLossPosition: 'नो-लॉस कॉपी पोजीशन को मैन्युअल रूप से बंद नहीं किया जा सकता',
+		invalidPosition: 'पोजीशन जानकारी अमान्य, बंद नहीं कर सकते',
+		confirmClose: 'क्या आप यह पोजीशन बंद करना चाहते हैं? बंद करने के बाद आपको इस ऑर्डर का अंतिम लाभ नहीं मिलेगा।',
+		closeSuccess: 'पोजीशन सफलतापूर्वक बंद',
+		closeFailed: 'पोजीशन बंद करने में विफल',
+		sameAccountError: 'स्रोत और गंतव्य खाते समान नहीं हो सकते',
+		amountError: 'कृपया एक मान्य राशि दर्ज करें',
+		insufficientBalance: 'अपर्याप्त उपलब्ध बैलेंस',
+		transferSuccess: 'ट्रांसफर सफल',
+		transferFailed: 'ट्रांसफर विफल',
+		goCopyTrade: 'कॉपी ट्रेड',
+		goSpotTrade: 'ट्रेड करें',
+		hideZeroBalance: '0 शेष वाली संपत्ति छुपाएं',
+		depositRecord2: 'जमा इतिहास',
+		amountCoin: 'Amount ({coin})',
+		availableCoin: 'Available: {available} {coin}',
+		amountUsdt: 'राशि (USDT)',
+		transferring: 'ट्रांसफर हो रहा है…',
+		confirmTransferBtn: 'ट्रांसफर की पुष्टि करें',
+		statementPageTitle: 'संपत्ति विवरण',
+		statementStartDate: 'प्रारंभ तिथि',
+		statementEndDate: 'समाप्ति तिथि',
+		statementReset: 'रीसेट',
+		statementSearch: 'खोजें',
+		statementSearching: 'खोज हो रही है…',
+		statementEmpty: 'कोई रिकॉर्ड नहीं',
+		statementDirectionOpen: 'ओपन',
+		statementDirectionClose: 'क्लोज',
+		statementTypes: {
+			'43': 'स्पॉट लाभ',
+			'44': 'स्पॉट हानि',
+			'45': 'स्पॉट ट्रेडिंग शुल्क',
+			'46': 'स्पॉट रिबेट',
+			'48': 'स्पॉट ट्रेड',
+			'49': 'स्टेकिंग',
+			'50': 'स्टेकिंग अनलॉक रिलीज',
+			'51': 'एयरड्रॉप इनाम',
+			'52': 'स्टेकिंग वॉलेट में ट्रांसफर',
+			'53': 'स्टेकिंग वॉलेट से ट्रांसफर',
+		},
+	},
+	finance: {
+		...financePageByLocale.hi,
+	},
+	copyTrade: {
+		finance: 'Earn',
+		claimAirdrop: 'Claim Airdrop',
+		comprehensive: 'व्यापक',
+		winRate14d: '14D जीत दर',
+		profit14d: '14D रिटर्न',
+		normal: 'नियमित कॉपी',
+		lossless: 'लॉसलेस कॉपी',
+		favorite: 'पसंदीदा',
+		topTraders: 'शीर्ष ट्रेडर',
+		twoWeekReturn: '2 सप्ताह रिटर्न',
+		followers: 'फॉलोअर',
+		days: 'दिन',
+		applyTrader: 'ट्रेडर के लिए आवेदन',
+		myFollowing: 'मेरी कॉपी ट्रेडिंग',
+		myTrading: 'मेरी ट्रेडिंग',
+		traderIdentity: 'लीड ट्रेडर',
+		myFollowingAccount: 'मेरा कॉपी खाता',
+		leadManage: 'लीड प्रबंधन',
+		applyLead: 'लीड ट्रेडर बनें',
+		pageTitle: 'कॉपी ट्रेडिंग',
+		heroDesc: 'शीर्ष ट्रेडरों को एक टैप में फॉलो करें और पेशेवर रणनीतियों से लाभ चाहिए।',
+		traderOverview: 'लीड ट्रेडर सारांश',
+		copyFollowersCount: 'कॉपी अनुयायी',
+		cumulativeTradingDays: 'कुल ट्रेडिंग दिन',
+		cumulativeLeadProfit: 'संचयी कॉपी लाभ',
+		goLeadManage: 'लीड प्रबंधन खोलें →',
+		copyWalletTitle: 'कॉपी खाता स्थिति',
+		cumulativePnlUsdt: 'संचयी कॉपी PnL (USDT)',
+		availableUsdt: 'उपलब्ध (USDT)',
+		unrealizedPnlUsdtShort: 'अस्वीकृत PnL (USDT)',
+		followingTradersSummary: '{n} ट्रेडर फॉलो कर रहे हैं',
+		newBadge: 'NEW',
+		losslessShieldTitle: 'लॉसलेस संरक्षण',
+		losslessShieldDesc: ': कॉपी में हानि पर प्लेटफ़ॉर्म जोखिम राहत दे सकता है ताकि नियंत्रित जोखिम में रिटर्न मिल सके।',
+		learnHowItWorks: 'कैसे काम करता है →',
+		myStarredTraders: 'मेरे सहेजे ट्रेडर',
+		traderTotalCount: '{count} ट्रेडर',
+		filterLoadingShort: 'लोड हो रहा है…',
+		loadTraderListFailed: 'ट्रेडर सूची लोड नहीं हो सकी',
+		loadFavoritesFailed: 'पसंदीदा लोड नहीं हो सके',
+		favoritedToast: 'सेव किया गया',
+		defaultTraderName: 'ट्रेडर',
+		levelJunior: 'प्रारंभिक',
+		badgeLossless: 'लॉसलेस',
+		metaDaysTrades: '{days} दिन · {trades} सौदे',
+		followAction: 'कॉपी',
+		profitUsdtBracket: 'PnL (USDT)',
+		profitShareRate: 'लाभ हिस्सा',
+		trend14Days: '14 दिन ट्रेंड',
+		emptyFavoriteHint: 'अभी कोई पसंदीदा नहीं—बेहतर ट्रेडर खोजें।',
+		emptyTraderListDefault: 'अभी कोई ट्रेडर नहीं',
+		emptyTraderListLossless: 'अभी कोई लॉसलेस ट्रेडर नहीं',
+		browseTraders: 'ट्रेडर ब्राउज़ करें',
+		losslessInfoHeading: 'लॉसलेस कॉपी कैसे चलता है',
+		llInfoCard1Title: 'शर्तयुक्त संरक्षण',
+		llInfoCard1Body: 'नियम और ट्रिगर पूरे होने पर ही संरक्षण चालू होता है; प्लेटफ़ॉर्म जोखिम प्रणाली संभालती है.',
+		llInfoCard2Title: 'सीमित दायित्व',
+		llInfoCard2Body: 'अनुबंध सीमा के भीतर ही एकल कॉपी के लिए क्षतिपूर्ति; उस से आगे हानि कवर्ड नहीं.',
+		llInfoCard3Title: 'जोखिम नियंत्रण पहले',
+		llInfoCard3Body: 'अनुमति से अधिक हानि पर निष्पक्षता के लिए सुरक्षा तंत्र पहले सक्रिय होते हैं।',
+		llInfoCard4Title: 'जोखिम चेतावनी',
+		llInfoCard4Body: 'क्रिप्टो अत्यधिक जोखिम भरा है। लॉसलेस भी ज़ीरो-जोखिम नहीं—केवल सहनीय धन से ट्रेड करें।',
+		followingPlaza: 'कॉपी प्लाज़ा',
+		followingWalletFail: 'कॉपी खाता डेटा लोड विफल',
+		followingTabPositions: 'खुले पोज़िशन',
+		followingTabTraders: 'मेरे ट्रेडर',
+		followingTabHistory: 'इतिहास',
+		followingHistEmpty: 'कोई कॉपी इतिहास नहीं',
+		followingNoTradersYet: 'आपने अभी किसी ट्रेडर को फॉलो नहीं किया',
+		followingGoPlaza: 'प्लाज़ा पर जाएँ',
+		confirmStopFollow: 'क्या 「{name}」 को अनफॉलो करें?',
+		noLossManualCloseTooltip: 'लॉसलेस कॉपी मैन्युअल बंद नहीं कर सकते',
+		followingThContract: 'अनुबंध',
+		followingThDirection: 'दिशा',
+		followingThOpenPrice: 'एंट्री',
+		followingThCurPrice: 'मार्क',
+		followingThQty: 'मात्रा',
+		followingThLever: 'लीवरेज',
+		followingThUnrealized: 'अस्वीकृत PnL',
+		followingThOpenTime: 'खुलने का समय',
+		followingThAction: 'कार्रवाई',
+		followingOpenLong: 'लॉन्ग खोलें',
+		followingOpenShort: 'शॉर्ट खोलें',
+		closeQtyWithBase: 'बंद मात्रा ({base})',
+		followingRealizedPnlUsdt: 'रीलाइज़्ड PnL (USDT)',
+		followingYieldRate: 'प्रतिलाभ',
+		followingAvgOpenUsdt: 'औसत एंट्री (USDT)',
+		followingAvgCloseUsdt: 'औसत निकास (USDT)',
+		marginCrossMode: 'क्रॉस',
+		marginIsolatedMode: 'अलग मार्जिन',
+		stopFollowing: 'अनफॉलो',
+		lead: {
+			pageTitle: 'मेरा लीड ट्रेडिंग',
+			navMyFollowing: 'मेरी कॉपी ट्रेडिंग →',
+			becomeTitle: 'लीड ट्रेडर बनें',
+			becomeDesc: 'नीचे की शर्तें पूरी करें और ट्रेडर के लिए आवेदन करें।',
+			condMinBalance: 'फ्यूचर्स खाता शेष ≥ {min} USDT',
+			goTransfer: 'ट्रांसफर',
+			condNotFollowing: 'किसी अन्य ट्रेडर को फॉलो न करें',
+			agreePrefix: 'मैंने पढ़ा और सहमत हूँ',
+			agreeLink: 'ट्रेडर समझौता',
+			submitting: 'जमा हो रहा है…',
+			submitApply: 'आवेदन जमा करें',
+			applyFailed: 'आवेदन विफल, बाद में पुनः प्रयास करें',
+			reviewingTitle: 'समीक्षाधीन',
+			reviewingDesc: 'आपका ट्रेडर आवेदन समीक्षा में है। स्वीकृति के बाद लीड शुरू कर सकते हैं।',
+			agreementTitle: 'ट्रेडर समझौता',
+			agreementEmpty: 'समझौता लोड नहीं हो सका। बाद में पुनः प्रयास करें।',
+			leadingBadge: 'लीडिंग',
+			noBio: 'कोई परिचय नहीं',
+			cancelLeadProcessing: 'प्रसंस्करण…',
+			cancelLeadApply: 'लीड योग्यता रद्द करें',
+			confirmCancelLead: 'लीड रद्द करें? सभी कॉपी संबंध समाप्त होंगे।',
+			operationFailed: 'ऑपरेशन विफल',
+			statFollowers: 'वर्तमान फॉलोअर',
+			statRegisterDays: 'प्लेटफ़ॉर्म पर दिन',
+			statCapital: 'पूंजी शक्ति',
+			statCumulativeProfit: 'संचित कॉपी लाभ (USDT)',
+			statTotalFollowers: 'कुल फॉलोअर',
+			statTradingDays: 'कुल ट्रेडिंग दिन',
+			tabFollowers: 'फॉलोअर ({n})',
+			tabCurrent: 'खुली लीड',
+			tabHistory: 'लीड इतिहास',
+			tabSettings: 'ट्रेडर सेटिंग',
+			emptyFollowers: 'कोई फॉलोअर नहीं',
+			removeFollower: 'हटाएँ',
+			followerEquity: 'खाता इक्विटी (USDT)',
+			followerTotalShare: 'कुल लाभ साझा (USDT)',
+			followerLastShare: 'पिछली अवधि साझा',
+			followerSince: 'फॉलो शुरू: {time}',
+			emptyCurrent: 'कोई खुली लीड नहीं',
+			emptyHistory: 'कोई लीड इतिहास नहीं',
+			settingsBasic: 'मूल जानकारी',
+			avatar: 'अवतार',
+			nickname: 'उपनाम',
+			nicknamePlaceholder: 'अधिकतम 10 अक्षर',
+			bio: 'परिचय',
+			bioPlaceholder: 'अधिकतम 25 अक्षर',
+			saveSuccess: 'सहेजा गया',
+			saveBasicProcessing: 'सहेज रहे हैं…',
+			saveBasic: 'मूल जानकारी सहेजें',
+			leadSymbols: 'लीड अनुबंध',
+			saveProcessing: 'सहेज रहे हैं…',
+			save: 'सहेजें',
+			tagsTitle: 'टैग (अधिकतम 4)',
+			confirmRemoveFollower: 'फॉलोअर "{name}" हटाएँ?',
+			saveFailed: 'सहेजना विफल',
+			uploadFailed: 'अपलोड विफल, पुनः प्रयास करें',
+			defaultFollower: 'फॉलोअर',
+			defaultUser: 'उपयोगकर्ता',
+		},
+	},
+	footer: {
+		aboutSection: 'हमारे बारे में',
+		companyIntro: 'कंपनी परिचय',
+		brand: 'ब्रांड',
+		community: 'iBit समुदाय',
+		riskWarning: 'जोखिम प्रकटन',
+		terms: 'सेवा की शर्तें',
+		privacy: 'गोपनीयता नीति',
+		futuresTrade: 'फ्यूचर्स ट्रेडिंग',
+		spotTrade: 'स्पॉट ट्रेडिंग',
+		losslessCopy: 'लॉसलेस कॉपी',
+		beginnerGuide: 'शुरुआती गाइड',
+		helpCenter: 'सहायता केंद्र',
+		glossary: 'शब्दावली',
+		compliance: 'अनुपालन',
+		products: 'उत्पाद',
+		resources: 'संसाधन',
+	},
+	announcements: {
+		title: 'सूचनाएं',
+		noAnnouncements: 'कोई सूचना नहीं',
+		back: 'वापस',
+		backToList: 'सूची पर वापस',
+		loadMore: 'और लोड करें',
+	},
+	download: {
+		title: 'iBit डाउनलोड करें',
+		heroTitle: 'रियल-टाइम मार्केट कभी भी ट्रेड करें\nमल्टी-लेयर सुरक्षा के साथ',
+		desc: 'कहीं भी, कभी भी ट्रेड करें',
+		appDesc: 'ऐप में सभी लोकप्रिय सुविधाएं, कहीं भी कभी भी ट्रेड करें',
+		latestVersion: 'नवीनतम संस्करण',
+		updateNotes: 'अपडेट नोट्स',
+		ios: 'iOS डाउनलोड',
+		iosNotReleased: 'iOS अभी उपलब्ध नहीं',
+		android: 'Android डाउनलोड',
+		androidNotReleased: 'Android अभी उपलब्ध नहीं',
+		scanToDownload: 'स्कैन करके डाउनलोड करें',
+	},
+	account: {
+		title: 'अकाउंट केंद्र',
+		uid: 'UID',
+		email: 'ईमेल',
+		profile: 'प्रोफाइल',
+		security: 'सुरक्षा',
+		securityDesc: 'पासवर्ड, प्रमाणीकरण, फंड पासवर्ड',
+		assets: 'मेरी संपत्ति',
+		assetsDesc: 'जमा, निकासी, हस्तांतरण',
+		inviteCode: 'आमंत्रण कोड',
+		inviteFriends: 'मित्रों को आमंत्रित करें',
+		inviteDesc: 'मित्रों को आमंत्रित करें और रिबेट पुरस्कार पाएं',
+		helpSupport: 'सहायता और समर्थन',
+		helpDesc: 'सामान्य प्रश्न और टिकट',
+		broker: 'ब्रोकर',
+		brokerDesc: 'रिबेट प्रबंधन, टीम विवरण',
+		logout: 'लॉग आउट',
+		securityScore: 'सुरक्षा स्कोर',
+		twofa: 'Google प्रमाणक',
+		supportTitle: 'सहायता से संपर्क',
+		supportHours: '7×24 ऑनलाइन सहायता',
+		onlineSupport: 'ऑनलाइन चैट',
+		instantChat: 'तत्काल चैट',
+		telegramSupport: 'Telegram सहायता',
+		emailSupport: 'ईमेल सहायता',
+		applySubmitted: 'आवेदन सबमिट हुआ, समीक्षा की प्रतीक्षा करें',
+		scoreHigh: 'उत्कृष्ट',
+		scoreMedium: 'औसत',
+		scoreLow: 'सुधार आवश्यक',
+	},
+	transfer: {
+		title: 'ट्रांसफर',
+		amount: 'ट्रांसफर राशि',
+		amountPlaceholder: 'ट्रांसफर राशि दर्ज करें',
+		maxTransferable: 'अधिकतम ट्रांसफर योग्य',
+		success: 'ट्रांसफर सफल',
+		selectCoin: 'कॉइन चुनें',
+		enterAmount: 'कृपया ट्रांसफर राशि दर्ज करें',
+		histEmpty: 'कोई ट्रांसफर रिकॉर्ड नहीं',
+		balanceLabel: 'बैलेंस',
+	},
+	withdraw: {
+		title: 'निकासी',
+		network: 'नेटवर्क',
+		networkTip: 'कृपया सुनिश्चित करें कि निकासी नेटवर्क प्राप्त प्लेटफॉर्म के नेटवर्क से मेल खाता है, अन्यथा संपत्ति खो सकती है।',
+		address: 'निकासी पता',
+		addressPlaceholder: 'निकासी पता दर्ज करें',
+		amount: 'निकासी राशि',
+		received: 'प्राप्त राशि',
+		fee: 'शुल्क',
+		submitted: 'निकासी जमा हो गई',
+		fundPassword: 'फंड पासवर्ड',
+		emailCode: 'ईमेल कोड',
+		googleCode: 'Google कोड',
+		securityVerification: 'सुरक्षा सत्यापन',
+		recordTitle: 'निकासी इतिहास',
+		recordEmpty: 'कोई निकासी रिकॉर्ड नहीं',
+		confirmCancelApply: 'इस निकासी आवेदन को रद्द करें?',
+		withdrawCancelledToast: 'रद्द किया गया',
+		withdrawCancelFailedToast: 'रद्द विफल',
+		statusPending: 'समीक्षाधीन',
+		statusReleasing: 'जारी हो रहा है',
+		statusWithdrawFailed: 'विफल',
+		statusWithdrawSuccess: 'सफल',
+		statusWithdrawCancelled: 'रद्द',
+		typeInternalTransfer: 'आंतरिक ट्रांसफर',
+		typeOnChainWithdraw: 'ऑन-चेन निकासी',
+		cancelApplyBtn: 'रद्द करें',
+		initFailed: 'प्रारंभ विफल',
+		submitOnChainFailed: 'निकासी विफल',
+		transferSubmitFailed: 'ट्रांसफर विफल',
+		availWithdrawBalance: 'निकासी योग्य शेष:',
+		availTransferBalance: 'ट्रांसफर योग्य शेष:',
+		withdrawNetworkLabel: 'निकासी नेटवर्क',
+		withdrawAmountUsdt: 'निकासी राशि (USDT)',
+		transferAmountUsdt: 'ट्रांसफर राशि (USDT)',
+		expectedArrival: 'अनुमानित प्राप्ति',
+		minWithdrawRowLabel: 'न्यूनतम निकासी',
+		internalTransferFeeLabel: 'आंतरिक ट्रांसफर शुल्क',
+		free: 'मुफ़्त',
+		minTransferRowLabel: 'न्यूनतम ट्रांसफर',
+		recipientUidLabel: 'प्राप्तकर्ता (UID)',
+		recipientUidPlaceholder: 'प्राप्तकर्ता UID दर्ज करें',
+		addressForNetwork: 'USDT-{network} पता दर्ज करें',
+		codePlaceholder6Digits: '6 अंकों का कोड',
+		googlePlaceholder6: '6 अंकों का OTP',
+		sendVerificationCode: 'कोड भेजें',
+		confirmWithdrawSubmit: 'निकासी पुष्टि करें',
+		confirmTransferSubmit: 'ट्रांसफर पुष्टि करें',
+		codeSentToEmailToast: 'सत्यापन कोड ईमेल पर भेजा गया',
+		onchainSubmittedPendingToast: 'निकासी आवेदन जमा, समीक्षा लंबित',
+		transferSubmittedToast: 'आंतरिक ट्रांसफर जमा हो गया',
+		submitFailed: 'जमा विफल',
+		detailTitleOnChain: 'निकासी विवरण',
+		detailTitleTransfer: 'आंतरिक ट्रांसफर विवरण',
+		amountHeroWithdraw: 'निकासी राशि',
+		amountHeroTransfer: 'ट्रांसफर राशि',
+		stepApplied: 'आवेदन जमा',
+		stepDone: 'पूर्ण',
+		recipientLabel: 'प्राप्तकर्ता',
+		appliedAt: 'आवेदन समय',
+		finishedAt: 'पूर्ण समय',
+		cancelApplyFull: 'आवेदन रद्द करें',
+		copyBtn: 'कॉपी',
+		bindGoogleFirst: 'कृपया पहले Google प्रमाणक बांधें',
+		errFillAddressBeforeCode: 'पहले निकासी पता भरें',
+		errFillAmountBeforeCode: 'पहले निकासी राशि भरें',
+		errFillUidBeforeCode: 'पहले प्राप्तकर्ता UID भरें',
+		errFillTransferAmtBeforeCode: 'पहले ट्रांसफर राशि भरें',
+		errEnterWithdrawAddress: 'निकासी पता दर्ज करें',
+		errEnterWithdrawAmount: 'निकासी राशि दर्ज करें',
+		errMinWithdrawWithAmt: 'न्यूनतम निकासी {min} USDT',
+		errExceedWithdrawBalance: 'निकासी योग्य शेष से अधिक',
+		errEnterFundPassword: 'फंड पासवर्ड दर्ज करें',
+		errEnterEmailCode: 'ईमेल कोड दर्ज करें',
+		errEnterGoogleCode: 'Google कोड दर्ज करें',
+		errEnterRecipientUid: 'प्राप्तकर्ता UID दर्ज करें',
+		errEnterTransferAmount: 'ट्रांसफर राशि दर्ज करें',
+		errMinTransferWithAmt: 'न्यूनतम ट्रांसफर {min} USDT',
+		errExceedTransferBalance: 'ट्रांसफर योग्य शेष से अधिक',
+	},
+	deposit: {
+		title: 'जमा',
+		address: 'जमा पता',
+		network: 'नेटवर्क',
+		saveQrCode: 'QR कोड सेव करें',
+		addressCopied: 'पता कॉपी हो गया',
+		minDeposit: 'न्यूनतम जमा',
+		arrivals: 'पुष्टि संख्या',
+		coin: 'कॉइन',
+		protocol: 'नेटवर्क / प्रोटोकॉल',
+		subCoin: 'सब-कॉइन',
+		contract: 'कॉन्ट्रैक्ट',
+		depositAmount: 'जमा राशि',
+		amountPlaceholder: 'राशि दर्ज करें',
+		generateOrder: 'ऑर्डर बनाएं',
+		generating: 'बन रहा है…',
+		notice: 'नोटिस',
+		notice1: 'ट्रांसफर से पहले ऑर्डर बनाएं; ऑर्डर में दिखाए गए पते और राशि का उपयोग करें।',
+		notice2: 'गलत नेटवर्क या कॉन्ट्रैक्ट में जमा न करें, अन्यथा संपत्ति स्थायी रूप से खो सकती है।',
+		notice3: 'ट्रांसफर पूरा होने के बाद जल्द से जल्द ट्रांजेक्शन हैश सबमिट करें।',
+		intro: 'परिचय',
+		introText: 'कॉइन और नेटवर्क चुनें, राशि दर्ज करें, फिर "ऑर्डर बनाएं" पर क्लिक करें। आपको एक समर्पित प्राप्ति पता और ऑर्डर नंबर मिलेगा। ऑन-चेन ट्रांसफर पूरा होने के बाद, इस पेज पर TxHash सबमिट करें।',
+		newDeposit: '← नई जमा',
+		orderInfo: 'ऑर्डर जानकारी',
+		orderNo: 'ऑर्डर नं.',
+		status: 'स्थिति',
+		coinLabel: 'कॉइन',
+		networkLabel: 'नेटवर्क',
+		amount: 'राशि',
+		payAddress: 'भुगतान पता',
+		payAddressHint: 'इस पते पर ऑर्डर राशि ट्रांसफर करें; कॉइन और नेटवर्क ऑर्डर के अनुरूप होने चाहिए',
+		qrTitle: 'QR कोड भुगतान',
+		qrHint: 'वॉलेट से स्कैन करके उपरोक्त पते पर ट्रांसफर करें (पता और राशि न बदलें)',
+		contractAddress: 'कॉन्ट्रैक्ट पता',
+		copy: '⎘ कॉपी',
+		copyAddress: 'कॉपी',
+		submitHash: 'ट्रांजेक्शन हैश सबमिट करें',
+		submittingHash: 'सबमिट हो रहा है…',
+		hashPlaceholder: 'ऑन-चेन Tx Hash / Tron TxID पेस्ट करें',
+		orSubmitHash: 'या: ट्रांसफर पूरा होने के बाद ट्रांजेक्शन हैश / TxID दर्ज करें',
+		hashRequired: 'कृपया ट्रांजेक्शन हैश दर्ज करें',
+		statusNotSubmittable: 'वर्तमान स्थिति में हैश सबमिट नहीं किया जा सकता',
+		orderCreated: 'ऑर्डर बनाया गया, कृपया नीचे दिए गए पते पर ट्रांसफर करें',
+		orderFailed: 'ऑर्डर बनाने में विफल',
+		addressCopy: 'पता कॉपी किया गया',
+		orderNoCopy: 'ऑर्डर नंबर कॉपी किया गया',
+		hashSubmitted: 'सबमिट किया, ऑन-चेन पुष्टि की प्रतीक्षा',
+		hashFailed: 'सबमिट करने में विफल',
+		broadcastSuccess: 'ट्रांजेक्शन ब्रॉडकास्ट, हैश सबमिट किया गया',
+		tronBroadcastSuccess: 'ट्रांजेक्शन ब्रॉडकास्ट, TxID सबमिट किया गया',
+		noNetwork: 'कोई नेटवर्क उपलब्ध नहीं',
+		noSubCoin: 'इस नेटवर्क पर कोई सब-कॉइन उपलब्ध नहीं',
+		amountRequired: 'कृपया जमा राशि दर्ज करें',
+		amountPositive: '0 से अधिक राशि दर्ज करें',
+		submittedHash: 'सबमिट किया गया Hash: ',
+		manualDepositTab: 'मैनुअल डिपॉजिट',
+		walletDepositTab: 'ऑन-चेन डिपॉजिट',
+		walletPayEvm: 'वॉलेट कनेक्ट करें और भुगतान करें (EVM)',
+		walletPayingEvm: 'वॉलेट प्रोसेस हो रहा है…',
+		walletPayTron: 'वॉलेट कनेक्ट करें और भुगतान करें (Tron)',
+		walletPayingTron: 'Tron वॉलेट प्रोसेस हो रहा है…',
+		histLink: 'जमा इतिहास',
+		retryBtn: 'पुनः प्रयास',
+		backWithArrow: '‹ वापस',
+		rechargeStatus0: 'भुगतान लंबित',
+		rechargeStatus1: 'ऑन-चेन पुष्टि लंबित',
+		rechargeStatus2: 'पूर्ण',
+		rechargeStatus3: 'रद्द',
+		rechargeStatus4: 'विफल',
+		statusUnknown: 'स्थिति {status}',
+		qrAlt: 'प्राप्ति पता QR कोड',
+		loadNetworksFailed: 'नेटवर्क लोड विफल',
+		wcHintEvmConfigured:
+			'आप WalletConnect से EVM वॉलेट जोड़कर ऑर्डर राशि को प्राप्ति पते पर ऑन-चेन ट्रांसफर कर सकते हैं (नेटवर्क और सिक्का मेल खाएँ)।',
+		wcHintEvmUnconfigured:
+			'EVM WalletConnect कॉन्फ़िगर नहीं है: VITE_WALLETCONNECT_PROJECT_ID सेट करें, या मैनुअल डिपॉजिट पर जाकर ट्रांज़ैक्शन Hash सबमिट करें।',
+		wcHintTronConfigured:
+			'WalletConnect (Tron नामस्थान) से संगत वॉलेट जोड़ सकते हैं; हस्ताक्षर के बाद ट्रांज़ैक्शन प्रसारित होगा—Tron TxID जमा करें (0x Ethereum हैश नहीं)।',
+		wcHintTronUnconfigured:
+			'Tron WalletConnect के लिए VITE_WALLETCONNECT_PROJECT_ID आवश्यक है; कॉन्फ़िगर नहीं है तो मैनुअल डिपॉजिट पर जाकर TxID सबमिट करें।',
+		wcHintTronManualOnly:
+			'यह नेटवर्क वॉलेट वेक-अप का समर्थन नहीं करता। मैनुअल डिपॉजिट पर जाकर TxID सबमिट करें।',
+		walletPayFallback: 'वॉलेट भुगतान विफल',
+		tronWalletPayFallback: 'Tron वॉलेट भुगतान विफल',
+		currentPrefix: 'वर्तमान:',
+		histEmpty: 'कोई जमा रिकॉर्ड नहीं',
+		histOrderNo: 'ऑर्डर नं.',
+		histTx: 'TX:',
+		histLoadMore: 'और लोड करें',
+		histLoadedAll: 'सभी रिकॉर्ड लोड हो चुके हैं',
+	},
+	broker: {
+		title: 'ब्रोकर केंद्र',
+		applyTitle: 'ब्रोकर के लिए आवेदन',
+		myBrokerCode: 'मेरा ब्रोकर कोड',
+		referralCount: 'रेफरल',
+		totalCommission: 'कुल कमीशन',
+		applyStatus: 'आवेदन स्थिति',
+		pending: 'समीक्षाधीन',
+		approved: 'स्वीकृत',
+		rejected: 'अस्वीकृत',
+		defaultName: 'ब्रोकर',
+		greeting: 'नमस्ते, {name}',
+		uidLabel: 'UID: {uid}',
+		introBanner: 'उपयोगकर्ताओं को आमंत्रित करें, पंजीकरण और ट्रेड पर रिबेट पाएं। रिबेट रियल-टाइम में निपटाए जाते हैं और प्रतिदिन खाते में जमा होते हैं।',
+		statNewToday: 'आज नए (व्यक्ति)',
+		statTradeToday: 'आज ट्रेड (व्यक्ति)',
+		statRebateToday: 'आज रिबेट (USDT)',
+		inviteList: 'आमंत्रण सूची',
+		emptyInviteList: 'कोई आमंत्रण नहीं',
+		thAccount: 'खाता',
+		thLevel: 'स्तर',
+		thPerpCopy: 'परप / कॉपी',
+		levelBroker: 'ब्रोकर',
+		levelNormal: 'सामान्य',
+		editRateTooltip: 'रिबेट दर संपादित करें',
+		todayRebate: 'आज का रिबेट',
+		emptyTodayRebate: 'आज कोई रिबेट नहीं',
+		thId: 'ID',
+		rebateUsdt: 'रिबेट (USDT)',
+		teamDetails: 'टीम विवरण',
+		filterAll: 'सभी',
+		filterWeek: '1 सप्ताह',
+		filterToday: 'आज',
+		filterMonth: 'इस माह',
+		teamTotalAssets: 'कुल टीम संपत्ति',
+		rebateHistory: 'रिबेट इतिहास',
+		emptyRebateHistory: 'कोई रिबेट रिकॉर्ड नहीं',
+		amountUsdt: 'राशि (USDT)',
+		loadMore: 'और लोड करें',
+		loadingMore: 'लोड हो रहा है…',
+		loadedAll: 'सभी रिकॉर्ड लोड हो गए',
+		editModalTitle: 'रिबेट दर संपादित करें',
+		perpRebateRate: 'परप रिबेट दर',
+		copyRebateRate: 'कॉपी रिबेट दर',
+		editTip: 'परिवर्तन तुरंत लागू होते हैं। सावधानी से करें।',
+		perpRateError: 'परप रिबेट 0–100 पूर्णांक होना चाहिए',
+		copyRateError: 'कॉपी रिबेट 0–100 पूर्णांक होना चाहिए',
+		setSuccess: 'सहेजा गया, तुरंत लागू',
+	},
+	help: {
+		title: 'सहायता केंद्र',
+		supportTitle: 'सहायता और समर्थन',
+		search: 'खोजें',
+		searchPlaceholder: 'कीवर्ड खोजें',
+		telegramSupport: 'Telegram सहायता',
+		quickResponse: 'त्वरित प्रतिक्रिया',
+		emailSupport: 'ईमेल सहायता',
+		docs: 'सहायता दस्तावेज़',
+		viewFullGuide: 'पूरा गाइड देखें',
+		detailTitle: 'सहायता विवरण',
+		backToHelp: 'सहायता केंद्र पर वापस',
+	},
+	invite: {
+		title: 'दोस्तों को आमंत्रित करें',
+		myCode: 'मेरा आमंत्रण कोड',
+		copy: 'कोड कॉपी करें',
+		copied: 'कोड कॉपी हो गया',
+		share: 'आमंत्रण लिंक शेयर करें',
+		shareLink: 'आमंत्रण लिंक कॉपी करें',
+		linkCopied: 'लिंक कॉपी हो गया',
+		desc: 'दोस्तों को रजिस्टर करने के लिए आमंत्रित करें और उनके ट्रेड पर रिबेट पुरस्कार पाएं',
+		totalInvited: 'कुल आमंत्रित',
+		totalReward: 'कुल रिबेट',
+		noRecord: 'कोई आमंत्रण रिकॉर्ड नहीं',
+		heroLine1: 'दोस्तों को आमंत्रित करें',
+		heroLine2: 'रिबेट कमाएँ',
+		heroDesc:
+			'प्रत्येक सफल पंजीकरण पर आप प्लेटफ़ॉर्म आमंत्रण रिबेट कार्यक्रम के लिए पात्र हो सकते हैं। नियम आधिकारिक घोषणाओं के अनुसार हैं।',
+		myInviteInfo: 'मेरी आमंत्रण जानकारी',
+		inviteCodeLabel: 'आमंत्रण कोड',
+		inviteLinkShort: 'आमंत्रण लिंक',
+		qrCodeLabel: 'QR कोड',
+		copyShort: 'कॉपी',
+		copiedDone: 'कॉपी ✓',
+		qrInviteAlt: 'आमंत्रण QR कोड',
+		scanToRegister: 'स्कैन करके पंजीकरण',
+		rebateRulesTitle: 'रिबेट नियम',
+		step1Title: 'कोड साझा करें',
+		step1Desc: 'अपना विशिष्ट आमंत्रण कोड या लिंक दोस्तों को भेजें',
+		step2Title: 'दोस्त पंजीकरण',
+		step2Desc: 'दोस्त आपके लिंक से पंजीकरण व सत्यापन पूरा करते हैं',
+		step3Title: 'रिबेट प्राप्त करें',
+		step3Desc: 'दोस्तों के ट्रेड शुल्क रिबेट प्लेटफ़ॉर्म नियमों के अनुसार निपटाए जाते हैं',
+	},
+	futuresPage: futuresPageByLocale.hi,
+	spot: {
+		tag: 'स्पॉट',
+		side: { buy: 'खरीदें', sell: 'बेचें' },
+		orderType: { limit: 'लिमिट', market: 'मार्केट' },
+		orderStatus: {
+			pending: 'लंबित',
+			partial: 'आंशिक भरा',
+			filled: 'भरा हुआ',
+			cancelled: 'रद्द',
+			pending_cancel: 'रद्द हो रहा',
+			expired: 'समाप्त',
+			init: 'प्रारंभ',
+		},
+		recordType: {
+			transferIn: 'फंड इन',
+			transferOut: 'फंड आउट',
+			orderFreeze: 'ऑर्डर फ्रीज',
+			cancelUnfreeze: 'रद्द अनफ्रीज',
+			trade: 'ट्रेड',
+			fee: 'शुल्क',
+			unfreeze: 'अनफ्रीज',
+			unknown: 'प्रकार {type}',
+		},
+		tabs: {
+			currentOrders: 'खुले ऑर्डर',
+			historyOrders: 'ऑर्डर इतिहास',
+			trades: 'ट्रेड विवरण',
+			funding: 'फंड प्रवाह',
+		},
+		table: {
+			pair: 'पेयर',
+			side: 'दिशा',
+			type: 'प्रकार',
+			price: 'मूल्य',
+			orderPrice: 'ऑर्डर मूल्य',
+			amount: 'मात्रा',
+			orderAmount: 'ऑर्डर मात्रा',
+			filled: 'भरा',
+			status: 'स्थिति',
+			time: 'समय',
+			action: 'कार्रवाई',
+			dealPrice: 'मूल्य',
+			dealVolume: 'मात्रा',
+			turnover: 'टर्नओवर',
+			recordType: 'प्रकार',
+			quantity: 'मात्रा',
+			coin: 'कॉइन',
+		},
+		trade: {
+			buy: 'खरीदें',
+			sell: 'बेचें',
+			limit: 'लिमिट',
+			market: 'मार्केट',
+			processing: 'प्रसंस्करण...',
+			buySymbol: '{symbol} खरीदें',
+			sellSymbol: '{symbol} बेचें',
+			priceUsdt: 'मूल्य (USDT)',
+			limitPlaceholder: 'लिमिट',
+			marketHint: 'सर्वोत्तम बाजार मूल्य पर',
+			amountUsdt: 'राशि (USDT)',
+			amountBase: 'मात्रा ({base})',
+			available: 'उपलब्ध',
+			transfer: 'ट्रांसफर',
+			loginForBalance: 'बैलेंस देखने के लिए लॉगिन करें',
+			spotAssets: 'स्पॉट संपत्ति',
+		},
+		order: { cancel: 'रद्द', cancelAll: 'सभी रद्द' },
+		empty: {
+			loginLink: 'लॉगिन',
+			loginOrdersPrompt: 'ऑर्डर देखने के लिए {link}',
+			loginViewPrompt: 'देखने के लिए {link}',
+			noOrders: 'कोई खुला ऑर्डर नहीं',
+			noHistoryOrders: 'कोई ऑर्डर इतिहास नहीं',
+			noTrades: 'कोई ट्रेड नहीं',
+			noFunding: 'कोई रिकॉर्ड नहीं',
+		},
+		errors: {
+			symbolNotReady: 'ट्रेडिंग पेयर तैयार नहीं है',
+			invalidAmount: 'मान्य मात्रा दर्ज करें',
+			invalidPrice: 'मान्य मूल्य दर्ज करें',
+			minLimitVolume: 'मात्रा कम से कम {min} होनी चाहिए',
+			minMarketBuy: 'मार्केट खरीद राशि कम से कम {min} USDT होनी चाहिए',
+			minMarketSell: 'मार्केट बिक्री मात्रा कम से कम {min} होनी चाहिए',
+			orderSubmitted: 'ऑर्डर सबमिट हो गया',
+			orderFailed: 'ऑर्डर विफल',
+			cancelSuccess: 'ऑर्डर रद्द हो गया',
+			cancelFailed: 'रद्द करना विफल',
+			cancelAllSuccess: 'सभी ऑर्डर रद्द हो गए',
+			cancelAllPartialFailed: 'कुछ ऑर्डर रद्द नहीं हो सके',
+		},
+		loadedAll: 'सभी लोड हो गए',
+		ticker: {
+			change24h: '24घं परिवर्तन',
+			high24h: '24घं उच्च',
+			low24h: '24घं निम्न',
+			turnover24h: '24घं वॉल्यूम',
+		},
+		chartSub: { chart: 'चार्ट', coinInfo: 'कॉइन जानकारी' },
+		tf: {
+			m1: '1m', 
+			m5: '5m', 
+			m15: '15m', 
+			m30: '30m', 
+			h1: '1h', 
+			h4: '4h', 
+			d1: '1d',
+			w1: '1w',
+			mo1: '1mon',
+			mo3: '3mon'
+		},
+		ohlcv: {
+			spotLabel: 'स्पॉट',
+			open: 'ओ',
+			high: 'उ',
+			low: 'न',
+			close: 'स',
+			volume: 'वॉल्यूम',
+			changePct: 'परिवर्तन',
+		},
+		draw: {
+			cursor: 'कर्सर',
+			trend: 'ट्रेंड लाइन',
+			hline: 'क्षैतिज',
+			ray: 'रे',
+			channel: 'चैनल',
+			fib: 'फिबोनाची',
+			text: 'टेक्स्ट',
+			clearAll: 'ड्रॉइंग हटाएं',
+			zoomOut: 'ज़ूम आउट',
+		},
+		mobileTab: { chart: 'बाज़ार', trade: 'ट्रेड' },
+		pair: { search: 'खोजें', loading: 'लोड हो रहा…', noMatch: 'कोई परिणाम नहीं', retryLater: ', बाद में पुनः प्रयास करें' },
+		book: {
+			waiting: 'डेटा की प्रतीक्षा…',
+			orderbook: 'ऑर्डर बुक',
+			trades: 'ट्रेड',
+			priceUsdt: 'मूल्य (USDT)',
+			amountBase: 'मात्रा ({base})',
+			total: 'कुल',
+			buyRatio: 'खरीद {n}%',
+			sellRatio: '{n}% बिक्री',
+			price: 'मूल्य',
+			amount: 'मात्रा',
+			time: 'समय',
+			pricePrecision: 'मूल्य सटीकता',
+		},
+		coinInfo: {
+			marketCap: 'मार्केट कैप',
+			circulating: 'परिचालन आपूर्ति',
+			issuePrice: 'जारी मूल्य',
+			ath: 'सर्वकालिक उच्च',
+			athDate: 'ATH तिथि',
+			whitepaper: 'व्हाइटपेपर',
+			empty: 'कोई कॉइन जानकारी नहीं',
+			reload: 'पुनः लोड',
+		},
+		transferModal: {
+			title: 'फंड ट्रांसफर',
+			amount: 'ट्रांसफर मात्रा',
+			amountPlaceholder: 'मात्रा दर्ज करें',
+			availableUsdt: 'उपलब्ध USDT:',
+			transferring: 'ट्रांसफर हो रहा है...',
+			invalidAmount: 'मान्य ट्रांसफर मात्रा दर्ज करें',
+			insufficientBalance: 'राशि उपलब्ध शेष से अधिक है',
+			transferFailed: 'ट्रांसफर विफल, बाद में पुनः प्रयास करें',
+		},
+	},
+}

+ 20 - 2
code/src/locales/id.ts

@@ -23,6 +23,13 @@ export default {
     ja: '日本語',
     hi: 'हिन्दी',
     id: 'Bahasa Indonesia',
+    es: 'Español',		   // 西班牙语
+    ru: 'Русский',         // 俄语
+    pt: 'Português',       // 葡萄牙语
+    de: 'Deutsch',         // 德语
+    fr: 'Français',        // 法语
+    tr: 'Türkçe',          // 土耳其语
+    vi: 'Tiếng Việt'       // 越南语
   },
   header: {
     login: 'Masuk',
@@ -100,7 +107,7 @@ export default {
     aboutUs: 'Tentang Kami',
     aboutDesc: 'iBit adalah platform pertukaran aset digital global yang berdedikasi memberikan layanan trading yang aman, stabil, dan efisien melalui inovasi teknologi dan operasi yang patuh.',
     foundedYear: 'Didirikan tahun 2023',
-    headquarters: 'Kantor Pusat Singapura',
+    headquarters: 'Berkantor pusat dan terdaftar di Dubai, perusahaan memiliki izin usaha terkait dari Amerika Serikat, Kanada, Australia dan wilayah lainnya',
     ourVision: 'Visi Kami',
     visionSubtitle: 'Membangun infrastruktur trading aset digital global yang dapat dipercaya jangka panjang',
     ecoTitle: 'Ekosistem',
@@ -973,7 +980,18 @@ export default {
       turnover24h: 'Volume 24j',
     },
     chartSub: { chart: 'Grafik', coinInfo: 'Info koin' },
-    tf: { m1: '1m', m5: '5m', m15: '15m', m30: '30m', h1: '1j', h4: '4j', d1: '1H' },
+    tf: {
+    	m1: '1m', 
+    	m5: '5m', 
+    	m15: '15m', 
+    	m30: '30m', 
+    	h1: '1h', 
+    	h4: '4h', 
+    	d1: '1d',
+    	w1: '1w',
+    	mo1: '1mon',
+    	mo3: '3mon'
+    },
     ohlcv: {
       spotLabel: 'Spot',
       open: 'B',

+ 28 - 7
code/src/locales/index.ts

@@ -1,12 +1,19 @@
 import zhCN from './zh-CN'
 import zhTW from './zh-TW'
 import en from './en'
-import ko from './ko'
-import ja from './ja'
-import hi from './hi'
-import id from './id'
+import ko from './ko'	// 韩语
+import ja from './ja'	// 日语
+import hi from './hi'	// 印地语(印度)
+import id from './id'	// 印尼语
+import es from './es'	// 西班牙语
+import ru from './ru'	// 俄语
+import pt from './pt'	// 葡萄牙语
+import de from './de'	// 德语
+import fr from './fr'	// 法语
+import tr from './tr'	// 土耳其语
+import vi from './vi'	// 越南语
 
-export type SupportedLocale = 'zh-CN' | 'zh-TW' | 'en' | 'ko' | 'ja' | 'hi' | 'id'
+export type SupportedLocale = 'zh-CN' | 'zh-TW' | 'en' | 'ko' | 'ja' | 'hi' | 'id' | 'es' | 'ru' | 'pt' | 'de' | 'fr' | 'tr' | 'vi'
 
 export const SUPPORTED_LOCALES: { code: SupportedLocale; label: string; nativeLabel: string }[] = [
   { code: 'zh-CN', label: '简体中文', nativeLabel: '简体中文' },
@@ -15,7 +22,14 @@ export const SUPPORTED_LOCALES: { code: SupportedLocale; label: string; nativeLa
   { code: 'ko',    label: '한국어',    nativeLabel: '한국어' },
   { code: 'ja',    label: '日本語',    nativeLabel: '日本語' },
   { code: 'hi',    label: 'हिन्दी',   nativeLabel: 'हिन्दी' },
-  { code: 'id',    label: 'Bahasa Indonesia', nativeLabel: 'Bahasa Indonesia' },
+  { code: 'id',    label: 'Bahasa Indonesia', nativeLabel: 'Bahasa Indonesia' }, 
+  { code: 'es',    label: 'Español',   nativeLabel: 'Español' },
+  { code: 'ru',    label: 'Русский',  nativeLabel: 'Русский' },
+  { code: 'pt',    label: 'Português', nativeLabel: 'Português' },
+  { code: 'de',    label: 'Deutsch',   nativeLabel: 'Deutsch' },
+  { code: 'fr',    label: 'Français',  nativeLabel: 'Français' },
+  { code: 'tr',    label: 'Türkçe',    nativeLabel: 'Türkçe' },
+  { code: 'vi',    label: 'Tiếng Việt', nativeLabel: 'Tiếng Việt' },
 ]
 
 export const DEFAULT_LOCALE: SupportedLocale = 'zh-CN'
@@ -29,6 +43,13 @@ export const messages = {
   ja,
   hi,
   id,
+  es,
+  ru,
+  pt,
+  de,
+  fr,
+  tr,
+  vi
 }
 
-export type MessageSchema = typeof zhCN
+export type MessageSchema = typeof zhCN

+ 20 - 2
code/src/locales/ja.ts

@@ -23,6 +23,13 @@ export default {
     ja: '日本語',
     hi: 'हिन्दी',
     id: 'Bahasa Indonesia',
+    es: 'Español',		   // 西班牙语
+    ru: 'Русский',         // 俄语
+    pt: 'Português',       // 葡萄牙语
+    de: 'Deutsch',         // 德语
+    fr: 'Français',        // 法语
+    tr: 'Türkçe',          // 土耳其语
+    vi: 'Tiếng Việt'       // 越南语
   },
   header: {
     login: 'ログイン',
@@ -100,7 +107,7 @@ export default {
     aboutUs: '会社概要',
     aboutDesc: 'iBitは、技術革新とコンプライアンス運営を通じてユーザーに安全・安定・効率的な取引サービスを提供するグローバルデジタル資産取引プラットフォームです。',
     foundedYear: '2023年設立',
-    headquarters: 'シンガポール本社',
+    headquarters: '本社はドバイに所在し、同地に法人登録されており、米国、カナダ、オーストラリアなどの関連ライセンスを取得しています',
     ourVision: 'ビジョン',
     visionSubtitle: '長期的に信頼されるグローバルデジタル資産取引インフラの構築',
     ecoTitle: 'エコシステム',
@@ -974,7 +981,18 @@ export default {
       turnover24h: '24h出来高',
     },
     chartSub: { chart: 'チャート', coinInfo: 'コイン情報' },
-    tf: { m1: '1分', m5: '5分', m15: '15分', m30: '30分', h1: '1時間', h4: '4時間', d1: '1日' },
+    tf: {
+    	m1: '1m', 
+    	m5: '5m', 
+    	m15: '15m', 
+    	m30: '30m', 
+    	h1: '1h', 
+    	h4: '4h', 
+    	d1: '1d',
+    	w1: '1w',
+    	mo1: '1mon',
+    	mo3: '3mon'
+    },
     ohlcv: {
       spotLabel: '現物',
       open: '始',

+ 20 - 2
code/src/locales/ko.ts

@@ -23,6 +23,13 @@ export default {
     ja: '日本語',
     hi: 'हिन्दी',
     id: 'Bahasa Indonesia',
+    es: 'Español',		   // 西班牙语
+    ru: 'Русский',         // 俄语
+    pt: 'Português',       // 葡萄牙语
+    de: 'Deutsch',         // 德语
+    fr: 'Français',        // 法语
+    tr: 'Türkçe',          // 土耳其语
+    vi: 'Tiếng Việt'       // 越南语
   },
   header: {
     login: '로그인',
@@ -100,7 +107,7 @@ export default {
     aboutUs: '회사 소개',
     aboutDesc: 'iBit은 기술 혁신과 준법 운영을 통해 사용자에게 안전하고 안정적이며 효율적인 거래 서비스를 제공하는 글로벌 디지털 자산 거래 플랫폼입니다.',
     foundedYear: '2023년 설립',
-    headquarters: '싱가포르 본사',
+    headquarters: '본사는 두바이에 소재하고 현지에 등록되었으며 미국, 캐나다, 호주 등 국가의 관련 라이선스를 보유하고 있습니다',
     ourVision: '비전',
     visionSubtitle: '장기적으로 신뢰할 수 있는 글로벌 디지털 자산 거래 인프라 구축',
     ecoTitle: '생태계',
@@ -971,7 +978,18 @@ export default {
       turnover24h: '24시간 거래대금',
     },
     chartSub: { chart: '차트', coinInfo: '코인 정보' },
-    tf: { m1: '1분', m5: '5분', m15: '15분', m30: '30분', h1: '1시간', h4: '4시간', d1: '1일' },
+    tf: { 
+      m1: '1분', 
+      m5: '5분', 
+      m15: '15분', 
+      m30: '30분', 
+      h1: '1시간', 
+      h4: '4시간', 
+      d1: '1일',
+      w1: '1주',
+      mo1: '1개월',
+      mo3: '3개월'
+    },
     ohlcv: {
       spotLabel: '현물',
       open: '시',

+ 1063 - 0
code/src/locales/pt.ts

@@ -0,0 +1,1063 @@
+//===================== 葡萄牙语 PT =====================
+import { futuresPageByLocale } from './futuresPage.i18n'
+import { financePageByLocale } from './financePage.i18n'
+
+export default {
+	nav: {
+		home: 'Início',
+		market: 'Mercado',
+		spot: 'Spot',
+		futures: 'Futuros',
+		copyTrade: 'Copy Trading',
+		finance: 'Investimentos',
+		idoPresale: 'Pré-venda IDO',
+		claimAirdrop: 'Resgatar Airdrop',
+		announcements: 'Anúncios',
+		download: 'Baixar',
+	},
+	lang: {
+		title: 'Idioma',
+		zhCN: '简体中文',
+		zhTW: '繁體中文',
+		en: 'English',
+		ko: '한국어',
+		ja: '日本語',
+		hi: 'हिन्दी',
+		id: 'Bahasa Indonesia',
+		es: 'Español',		   // 西班牙语
+		ru: 'Русский',         // 俄语
+		pt: 'Português',       // 葡萄牙语
+		de: 'Deutsch',         // 德语
+		fr: 'Français',        // 法语
+		tr: 'Türkçe',          // 土耳其语
+		vi: 'Tiếng Việt'       // 越南语
+	},
+	header: {
+		login: 'Entrar',
+		register: 'Cadastrar',
+		account: 'Minha Conta',
+		assets: 'Meus Ativos',
+		security: 'Segurança',
+		broker: 'Corretor',
+		logout: 'Sair da conta',
+		logoutShort: 'Sair',
+		downloadTitle: 'Baixar App',
+		brokerApplyTitle: 'Solicitar ser Corretor',
+		brokerApplyDesc: 'Você ainda não é corretor. Sua solicitação será enviada com dados da conta e liberada após aprovação.',
+		cancel: 'Cancelar',
+		applyNow: 'Enviar solicitação',
+		viewApplyList: 'Ver status da solicitação',
+		submitting: 'Enviando...',
+		menu: 'Menu',
+	},
+	common: {
+		loading: 'Carregando...',
+		retry: 'Tentar novamente',
+		cancel: 'Cancelar',
+		confirm: 'Confirmar',
+		submit: 'Enviar',
+		save: 'Salvar',
+		send: 'Enviar',
+		back: 'Voltar',
+		next: 'Próximo',
+		done: 'Concluído',
+		noData: 'Sem dados',
+		noRecord: 'Sem registros',
+		search: 'Buscar',
+		all: 'Todos',
+		max: 'Máx',
+		copied: 'Copiado',
+		networkError: 'Falha na conexão, tente mais tarde',
+		loadFailed: 'Falha ao carregar',
+		operationFailed: 'Falha na operação, tente novamente',
+		saveSuccess: 'Salvo com sucesso',
+		more: 'Mais',
+		perpetual: 'Futuro Perpétuo',
+		set: 'Configurado',
+		notSet: 'Não configurado',
+		change: 'Alterar',
+		bind: 'Vincular',
+		unbind: 'Desvincular',
+		on: 'Ativado',
+		off: 'Desativado',
+		status: 'Status',
+		time: 'Data',
+		amount: 'Quantidade',
+		type: 'Tipo',
+		coin: 'Moeda',
+		from: 'De',
+		to: 'Para',
+		close: 'Fechar',
+		contactService: 'Contatar suporte',
+	},
+	home: {
+		heroTitle: 'Plataforma Global Segura e Eficiente de Negociação de Ativos Digitais',
+		heroDesc: 'A iBit entrega serviços de negociação estáveis, transparentes e profissionais com arquitetura avançada e controle rigoroso de riscos.',
+		register: 'Cadastrar',
+		viewMarket: 'Ver Mercado',
+		downloadApp: 'Baixar App',
+		coreAdvantages: 'Vantagens Principais',
+		assetSafetyTitle: 'Segurança dos Ativos',
+		assetSafetyDesc: 'Carteiras frias/quentes segregadas, assinatura múltipla e monitoramento 24h para proteção de fundos.',
+		highPerfTitle: 'Alto Desempenho',
+		highPerfDesc: 'Motor de combinação próprio com execução de ordens em milissegundos para negociação estável.',
+		globalComplianceTitle: 'Conformidade Global',
+		globalComplianceDesc: 'Cumprimento das normas regulatórias internacionais para negociação segura no mundo todo.',
+		transparentFeeTitle: 'Taxas Transparentes',
+		transparentFeeDesc: 'Tabela de tarifas definida sem custos ocultos.',
+		aboutUs: 'Sobre Nós',
+		aboutDesc: 'iBit é uma exchange global de ativos digitais focada em segurança, estabilidade e eficiência.',
+		foundedYear: 'Fundada em 2023',
+		headquarters: 'Registrada em Dubai, com licenças nos EUA, Canadá, Austrália e Dubai.',
+		ourVision: 'Nossa Visão',
+		visionSubtitle: 'Criar infraestrutura confiável para negociação digital global',
+		ecoTitle: 'Ecossistema',
+		ecoDesc: 'Desenvolver novo ecossistema de negociação de criptoativos',
+		missionTitle: 'Missão',
+		missionDesc: 'Impulsionar circulação global de valor digital',
+		purposeTitle: 'Objetivo',
+		purposeDesc: 'Simplificar investimento e gestão de criptoativos para usuários',
+		heroImageAlt: 'Plataforma de negociação iBit',
+		aboutImageAlt: 'Sobre a empresa',
+	},
+	market: {
+		title: 'Mercado em Tempo Real',
+		desc: 'Preços atualizados, volumes e variações para acompanhar o mercado.',
+		hot: 'Populares',
+		topVolume: 'Maior Volume',
+		gainers: 'Em Alta',
+		losers: 'Em Baixa',
+		perpetual: 'Perpétuos',
+		name: 'Nome',
+		latestPrice: 'Preço',
+		change24h: 'Variação 24h',
+		turnover: 'Volume',
+		searchPair: 'Buscar par de negociação',
+		searchMarket: 'Buscar moedas, pares e futuros',
+		price: 'Preço',
+		change24hShort: 'Var.24h',
+		high24h: 'Máx 24h',
+		low24h: 'Mín 24h',
+		volume24hLabel: 'Volume 24h',
+	},
+	auth: {
+		loginTitle: 'Acesso',
+		emailLogin: 'Acesso por E-mail',
+		emailPlaceholder: 'Digite seu e-mail',
+		password: 'Senha',
+		passwordPlaceholder: 'Digite sua senha',
+		forgotPassword: 'Esqueceu a senha?',
+		loginBtn: 'Entrar',
+		noAccount: 'Sem conta?',
+		registerNow: 'Cadastre-se',
+		verifyTitle: 'Código de Verificação',
+		codeSentDesc: 'Código enviado para {email}, verifique sua caixa.',
+		codeSendDesc: 'Clique para enviar código para {email}.',
+		countdownResend: 'Reenviar em {n}s',
+		resendCode: 'Reenviar código',
+		confirmBtn: 'Confirmar',
+		sendCode: 'Enviar código',
+		forgotVerify: 'Esqueceu o método de verificação?',
+		loginSuccess: 'Acesso realizado',
+		codeSentAgain: 'Código reenviado',
+		registerTitle: 'Cadastro',
+		emailRegister: 'Cadastro por E-mail',
+		inviteCodeLabel: 'Código de convite (opcional)',
+		inviteCodePlaceholder: 'Insira código de convite',
+		hasAccount: 'Já tem conta?',
+		loginNow: 'Entrar',
+		verifyPageTitle: 'Verificação de Segurança',
+		emailVerifyLabel: 'Verificação por e-mail',
+		codePlaceholder: 'Digite o código',
+		sendBtn: 'Enviar',
+		passwordTitle: 'Criar Senha',
+		backBtn: '‹ Voltar',
+		inputPasswordLabel: 'Senha',
+		confirmPasswordLabel: 'Confirmar senha',
+		confirmPasswordPlaceholder: 'Repita a senha',
+		doneBtn: 'Concluir',
+		resetSuccess: 'Senha alterada, faça login com novos dados.',
+		registerSuccess: 'Cadastro concluído',
+		welcomeJoin: 'Bem-vindo à iBit',
+		loginNowBtn: 'Entrar',
+		forgotPasswordTitle: 'Redefinir Senha',
+		emailLabel: 'E-mail',
+		emailRegisteredPlaceholder: 'Digite o e-mail cadastrado',
+		codeSentToast: 'Código enviado',
+	},
+	error: {
+		emailRequired: 'Informe o e-mail',
+		emailInvalid: 'Formato de e-mail inválido',
+		passwordRequired: 'Informe a senha',
+		code6Required: 'Digite código de 6 dígitos',
+		codeRequired: 'Informe código de verificação',
+		loginFailed: 'E-mail ou senha incorretos',
+		networkError: 'Falha de rede, tente depois',
+		emailAlreadyRegistered: 'Este e-mail já está cadastrado, faça login',
+		confirmPasswordRequired: 'Confirme a senha',
+		passwordMismatch: 'Senhas divergentes',
+		loadFailed: 'Falha ao carregar dados de segurança',
+		refreshFailed: 'Falha ao atualizar',
+		statusUpdated: 'Status atualizado',
+		currentPasswordRequired: 'Informe a senha atual',
+		sixDigitCode: 'Código de seis dígitos do e-mail',
+		sixDigitGoogleCode: 'Código Google de seis dígitos',
+		sendFailed: 'Falha no envio',
+		operationFailed: 'Falha na operação',
+	},
+	security: {
+		title: 'Configurações de Segurança',
+		back: '‹ Voltar',
+		warningBanner: 'Confirme e-mail, Google Auth e senha financeira para proteger sua conta.',
+		accountSecurity: 'Segurança da Conta',
+		loginPassword: 'Senha de acesso',
+		loginPasswordDesc: 'Altere periodicamente para manter a conta segura',
+		emailVerify: 'Confirmação de e-mail',
+		emailVerifyDesc: 'Vincule o e-mail para recuperação de conta',
+		googleAuth: 'Autenticação Google',
+		googleAuthDesc: 'Ative o Google Authenticator para maior proteção',
+		fundPassword: 'Senha Financeira',
+		fundPasswordDesc: 'Senha exclusiva para saques e transferências',
+		set: 'Configurar',
+		notSet: 'Não definido',
+		change: 'Alterar',
+		bind: 'Vincular',
+		set2: 'Definir',
+		statusUpdated: 'Status atualizado',
+		loadFailed: 'Falha ao carregar dados',
+		refreshFailed: 'Falha ao atualizar',
+		bound: 'Vinculado',
+		notBound: 'Não vinculado',
+		refresh: 'Atualizar',
+		googleHelpTitle: 'Ajuda Google Authenticator',
+		googleHelpDesc: 'Em caso de falha no código ou desvinculação contate o suporte.',
+		changeLoginPassword: 'Alterar senha de acesso',
+		changePasswordHint: 'Após alteração use nova senha, código enviado por e-mail.',
+		currentPassword: 'Senha atual',
+		newPassword: 'Nova senha',
+		confirmNewPassword: 'Confirmar nova senha',
+		emailCode: 'Código do e-mail',
+		sendCode: 'Enviar código',
+		codeSent: 'Código enviado no e-mail',
+		changeSuccess: 'Senha alterada com sucesso',
+		confirmChange: 'Confirmar alteração',
+		submitting: 'Enviando...',
+		setFundPassword: 'Definir senha financeira',
+		resetFundPassword: 'Redefinir senha financeira',
+		fundPasswordHint: 'Necessária para saques e transferências, guarde com segurança.',
+		fundPasswordResetHint: 'Redefinindo senha, código enviado por e-mail.',
+		newFundPassword: 'Nova senha financeira',
+		confirmFundPassword: 'Confirmar senha',
+		fundPasswordUpdated: 'Senha financeira atualizada',
+		fundPasswordSet: 'Senha financeira definida',
+		bindGoogle: 'Vincular Google Authenticator',
+		boundEmail: 'E-mail vinculado:',
+		googleQrStep: '1. Escaneie QR ou digite chave manualmente',
+		googleCodeStep: '2. Código dinâmico de 6 dígitos Google',
+		emailCodeStep: '3. Código de confirmação por e-mail',
+		copyKey: 'Copiar chave',
+		keyCopied: 'Chave copiada',
+		copyFailed: 'Falha na cópia, copie manualmente',
+		clipboardDeniedMac: 'Sem permissão de área de transferência, configure navegador',
+		clipboardDenied: 'Acesso à área de transferência bloqueado, habilite nas configurações',
+		invalidSecret: 'Chave inválida, atualize página',
+		googleCodeRequired: 'Informe código Google de 6 dígitos',
+		emailCodeSent: 'Código do e-mail enviado',
+		bindSuccess: 'Vinculação concluída',
+		confirmBind: 'Confirmar vinculação',
+		googleAuthLead: 'Baixe Google/Microsoft Authenticator na loja de apps.',
+		googleAuthTip1: 'Após vinculação código será solicitado no login e operações financeiras.',
+		googleAuthTip2: 'Guarde seu celular seguro, contate suporte em caso de perda.',
+		googleAuthStart: 'Instalado, iniciar vinculação',
+	},
+	assets: {
+		title: 'Meus Ativos',
+		totalAssets: 'Valor total dos ativos',
+		todayPnl: 'Lucro/Prejuízo do dia',
+		deposit: 'Depositar',
+		withdraw: 'Sacar',
+		transfer: 'Transferir',
+		history: 'Histórico',
+		spot: 'Spot',
+		futures: 'Futuros',
+		copyTrade: 'Copy Trade',
+		fund: 'Disponível para saque',
+		walletBalance: 'Saldo carteira',
+		unrealizedPnl: 'Lucro/Prej não realizado',
+		positions: 'Posições abertas',
+		noPositions: 'Sem posições',
+		assetBalance: 'Saldo do ativo',
+		unavailable: 'Indisponível',
+		depositCoin: 'Depósito',
+		withdrawCoin: 'Saque',
+		depositRecord: 'Histórico depósitos',
+		withdrawRecord: 'Histórico saques',
+		transferRecord: 'Histórico transferências',
+		assetRecord: 'Movimentações',
+		overview: 'Visão geral',
+		spotAccount: 'Conta Spot',
+		swapAccount: 'Conta Futuros',
+		followAccount: 'Conta Copy Trade',
+		fundAccount: 'Conta Saque',
+		spotTradingAccount: 'Conta negociação Spot',
+		ibitAccount: 'Conta iBit',
+		lockedStakingAccount: 'Staking bloqueado',
+		stakingTab: 'Staking',
+		ibitUnit: 'iBit',
+		releaseTotal: 'Total liberado',
+		totalLockedBalance: 'Total bloqueado(iBit)',
+		myStakingOrders: 'Meus pedidos Staking',
+		stakingOrderNo: 'Nº Pedido',
+		purchaseQty: 'Quantidade comprada',
+		stakingTotal: 'Bloqueado',
+		released: 'Liberado',
+		pendingRelease: 'Aguardando liberação',
+		startTime: 'Data início',
+		subscribing: 'Inscrição ativa',
+		releasing: 'Em liberação',
+		completed: 'Finalizado',
+		pullToRefresh: 'Arraste para baixo atualizar',
+		releaseToRefresh: 'Solte para atualizar',
+		refreshing: 'Atualizando...',
+		totalAccount: 'Total da conta',
+		showBalance: 'Exibir saldo',
+		hideBalance: 'Ocultar saldo',
+		followBalance: 'Saldo Copy Trade',
+		accountTransfer: 'Transferência entre contas',
+		transferFrom: 'De',
+		transferTo: 'Para',
+		available: 'Disponível',
+		freeTransfer: 'Transferência gratuita, crédito instantâneo',
+		followPositions: 'Posições copy ativas',
+		noFollowPositions: 'Sem posições copy',
+		followLoading: 'Carregando...',
+		long: 'Compra (Long)',
+		short: 'Venda (Short)',
+		trader: 'Trader',
+		openPrice: 'Preço abertura',
+		currentPrice: 'Preço atual',
+		amountLever: 'Qtd · Alavancagem',
+		closing: 'Encerrando...',
+		closePosition: 'Encerrar',
+		noLossPosition: 'Posições sem prejuízo não podem ser encerradas manualmente',
+		invalidPosition: 'Dados da posição inválidos, impossível fechar',
+		confirmClose: 'Encerrar posição? Perderá lucro final do pedido.',
+		closeSuccess: 'Posição encerrada',
+		closeFailed: 'Falha ao fechar posição',
+		sameAccountError: 'Conta origem e destino não podem ser iguais',
+		amountError: 'Informe valor válido',
+		insufficientBalance: 'Saldo insuficiente',
+		transferSuccess: 'Transferência concluída',
+		transferFailed: 'Falha transferência',
+		goCopyTrade: 'Copy Trade',
+		goSpotTrade: 'Ir para negociação',
+		hideZeroBalance: 'Ocultar ativos saldo zero',
+		depositRecord2: 'Histórico depósitos',
+		amountUsdt: 'Valor (USDT)',
+		amountCoin: 'Valor ({coin})',
+		availableCoin: 'Disponível: {available} {coin}',
+		transferring: 'Transferindo...',
+		confirmTransferBtn: 'Confirmar transferência',
+		statementPageTitle: 'Extrato de fundos',
+		statementStartDate: 'Data inicial',
+		statementEndDate: 'Data final',
+		statementReset: 'Resetar',
+		statementSearch: 'Buscar',
+		statementSearching: 'Buscando...',
+		statementEmpty: 'Sem registros',
+		statementDirectionOpen: 'Abertura posição',
+		statementDirectionClose: 'Fechamento posição',
+		statementTypes: {
+			'43': 'Lucro Spot',
+			'44': 'Prejuízo Spot',
+			'45': 'Taxa Spot',
+			'46': 'Reembolso taxa Spot',
+			'48': 'Negociação Spot',
+			'49': 'Staking',
+			'50': 'Liberação Staking',
+			'51': 'Recompensa Airdrop',
+			'52': 'Depósito carteira Staking',
+			'53': 'Retirada carteira Staking',
+		},
+	},
+	finance: { ...financePageByLocale.pt },
+	copyTrade: {
+		comprehensive: 'Geral',
+		winRate14d: '% Acerto 14d',
+		profit14d: 'Lucro 14d',
+		normal: 'Copy comum',
+		lossless: 'Copy sem prejuízo',
+		favorite: 'Favoritos',
+		topTraders: 'Melhores Traders',
+		twoWeekReturn: 'Rendimento 2 semanas',
+		followers: 'Seguidores',
+		days: 'Dias',
+		applyTrader: 'Ser Trader Líder',
+		myFollowing: 'Meus Copies',
+		myTrading: 'Minhas negociações',
+		traderIdentity: 'Trader Líder',
+		myFollowingAccount: 'Conta Copy Trade',
+		leadManage: 'Painel Líder',
+		applyLead: 'Candidatar-se a Líder',
+		pageTitle: 'Copy Trading',
+		heroDesc: 'Copie operações de traders experientes com um clique para obter lucros.',
+		traderOverview: 'Resumo Trader',
+		copyFollowersCount: 'Número de seguidores',
+		cumulativeTradingDays: 'Dias operando total',
+		cumulativeLeadProfit: 'Lucro total copy',
+		goLeadManage: 'Acessar painel líder →',
+		copyWalletTitle: 'Saldo conta copy',
+		cumulativePnlUsdt: 'Lucro total copy(USDT)',
+		availableUsdt: 'Disponível (USDT)',
+		unrealizedPnlUsdtShort: 'Lucro/prej não realizado(USDT)',
+		followingTradersSummary: 'Seguindo {n} traders',
+		newBadge: 'NOVO',
+		losslessShieldTitle: 'Proteção Sem Prejuízo',
+		losslessShieldDesc: ': Em caso de perdas plataforma compensa dentro dos limites definidos.',
+		learnHowItWorks: 'Saiba mais →',
+		myStarredTraders: 'Traders salvos',
+		traderTotalCount: '{count} traders disponíveis',
+		filterLoadingShort: 'Carregando...',
+		loadTraderListFailed: 'Falha carregar lista traders',
+		loadFavoritesFailed: 'Falha carregar favoritos',
+		favoritedToast: 'Adicionado aos favoritos',
+		defaultTraderName: 'Trader',
+		levelJunior: 'Iniciante',
+		badgeLossless: 'Sem Prejuízo',
+		metaDaysTrades: '{days}d · {trades} operações',
+		followAction: 'Copiar',
+		profitUsdtBracket: 'Lucro (USDT)',
+		profitShareRate: '% Repartição lucro',
+		trend14Days: 'Gráfico 14 dias',
+		emptyFavoriteHint: 'Sem favoritos, procure traders',
+		emptyTraderListDefault: 'Sem traders disponíveis',
+		emptyTraderListLossless: 'Sem traders sem prejuízo',
+		browseTraders: 'Ver traders',
+		losslessInfoHeading: 'Funcionamento Copy Sem Prejuízo',
+		llInfoCard1Title: 'Compensação condicional',
+		llInfoCard1Body: 'Compensação válida ao cumprir regras de controle risco.',
+		llInfoCard2Title: 'Responsabilidade limitada',
+		llInfoCard2Body: 'Compensação não ultrapassa limite por operação.',
+		llInfoCard3Title: 'Controle de Risco',
+		llInfoCard3Body: 'Em perdas elevadas sistema de proteção saldo é ativado.',
+		llInfoCard4Title: 'Aviso Risco',
+		llInfoCard4Body: 'Negociação cripto tem alto risco, sem prejuízo não garante lucro.',
+		followingPlaza: 'Praça Copy',
+		followingWalletFail: 'Falha carregar conta copy',
+		followingTabPositions: 'Posições abertas',
+		followingTabTraders: 'Meus Traders',
+		followingTabHistory: 'Histórico Copy',
+		followingHistEmpty: 'Sem histórico copy',
+		followingNoTradersYet: 'Não segue nenhum trader',
+		followingGoPlaza: 'Ir para praça copy',
+		confirmStopFollow: 'Parar de seguir "{name}"?',
+		noLossManualCloseTooltip: 'Copy sem prejuízo não fecha manualmente',
+		followingThContract: 'Contrato',
+		followingThDirection: 'Direção',
+		followingThOpenPrice: 'Preço abertura',
+		followingThCurPrice: 'Preço atual',
+		followingThQty: 'Quantidade',
+		followingThLever: 'Alavancagem',
+		followingThUnrealized: 'Lucro/prej não realizado',
+		followingThOpenTime: 'Data abertura',
+		followingThAction: 'Ação',
+		followingOpenLong: 'Aberto Long',
+		followingOpenShort: 'Aberto Short',
+		closeQtyWithBase: 'Qtd fechar({base})',
+		followingRealizedPnlUsdt: 'Lucro/prej realizado(USDT)',
+		followingYieldRate: 'Taxa rendimento',
+		followingAvgOpenUsdt: 'Preço médio abertura(USDT)',
+		followingAvgCloseUsdt: 'Preço médio fechamento(USDT)',
+		marginCrossMode: 'Margem Cruzada',
+		marginIsolatedMode: 'Margem Isolada',
+		stopFollowing: 'Parar Seguir',
+		lead: {
+			pageTitle: 'Minhas operações Líder',
+			navMyFollowing: 'Meus Copies →',
+			becomeTitle: 'Ser Trader Líder',
+			becomeDesc: 'Atenda requisitos para candidatura.',
+			condMinBalance: 'Saldo conta futuros ≥ {min} USDT',
+			goTransfer: 'Transferir fundos',
+			condNotFollowing: 'Proibido seguir outros traders',
+			agreePrefix: 'Li e concordo com',
+			agreeLink: 'Contrato Trader',
+			submitting: 'Enviando...',
+			submitApply: 'Enviar candidatura',
+			applyFailed: 'Falha envio candidatura, tente depois',
+			reviewingTitle: 'Candidatura em análise',
+			reviewingDesc: 'Aguarde aprovação para iniciar liderança.',
+			agreementTitle: 'Contrato do Trader',
+			agreementEmpty: 'Falha carregar documento, tente depois.',
+			leadingBadge: 'Líder',
+			noBio: 'Sem descrição',
+			cancelLeadProcessing: 'Processando...',
+			cancelLeadApply: 'Solicitar saída da liderança',
+			confirmCancelLead: 'Cancelar cargo líder? Todos copies ativos serão cancelados.',
+			operationFailed: 'Falha operação',
+			statFollowers: 'Seguidores atuais',
+			statRegisterDays: 'Dias na plataforma',
+			statCapital: 'Capital',
+			statCumulativeProfit: 'Lucro total copy(USDT)',
+			statTotalFollowers: 'Total seguidores histórico',
+			statTradingDays: 'Total dias operando',
+			tabFollowers: 'Seguidores ({n})',
+			tabCurrent: 'Operações Atuais',
+			tabHistory: 'Histórico Liderança',
+			tabSettings: 'Config Trader',
+			emptyFollowers: 'Sem seguidores',
+			removeFollower: 'Remover',
+			followerEquity: 'Saldo conta(USDT)',
+			followerTotalShare: 'Total repasse lucro(USDT)',
+			followerLastShare: 'Último recebimento',
+			followerSince: 'Segue desde: {time}',
+			emptyCurrent: 'Sem operações abertas',
+			emptyHistory: 'Sem histórico liderança',
+			settingsBasic: 'Dados Básicos',
+			avatar: 'Avatar',
+			nickname: 'Apelido',
+			nicknamePlaceholder: 'Máx 10 caracteres',
+			bio: 'Descrição',
+			bioPlaceholder: 'Máx 25 caracteres',
+			saveSuccess: 'Salvo',
+			saveBasicProcessing: 'Salvando...',
+			saveBasic: 'Salvar dados',
+			leadSymbols: 'Contratos para liderança',
+			saveProcessing: 'Salvando...',
+			save: 'Salvar',
+			tagsTitle: 'Tags (máx 4)',
+			confirmRemoveFollower: 'Remover seguidor "{name}"?',
+			saveFailed: 'Falha salvar',
+			uploadFailed: 'Falha upload arquivo',
+			defaultFollower: 'Seguidor',
+			defaultUser: 'Usuário',
+		},
+	},
+	footer: {
+		aboutSection: 'Sobre Nós',
+		companyIntro: 'Apresentação Empresa',
+		brand: 'Marca',
+		community: 'Comunidade',
+		riskWarning: 'Aviso de Risco',
+		terms: 'Termos de Serviço',
+		privacy: 'Política Privacidade',
+		futuresTrade: 'Negociação Futuros',
+		spotTrade: 'Negociação Spot',
+		losslessCopy: 'Copy Sem Prejuízo',
+		beginnerGuide: 'Guia Iniciante',
+		helpCenter: 'Central Ajuda',
+		glossary: 'Glossário',
+		compliance: 'Informação Jurídica',
+		products: 'Produtos',
+		resources: 'Recursos',
+	},
+	announcements: {
+		title: 'Anúncios do Sistema',
+		noAnnouncements: 'Sem anúncios',
+		back: 'Voltar',
+		backToList: 'Voltar lista',
+		loadMore: 'Carregar mais',
+	},
+	download: {
+		title: 'Baixar iBit',
+		heroTitle: 'Cotações em tempo real\nNegocie a qualquer hora',
+		desc: 'Acompanhe preços e abra operações de qualquer lugar',
+		appDesc: 'Todos recursos no app mobile, negocie via celular',
+		latestVersion: 'Última Versão',
+		updateNotes: 'Notas Atualização',
+		ios: 'Baixar iOS',
+		iosNotReleased: 'iOS não disponível',
+		android: 'Baixar Android',
+		androidNotReleased: 'Android não disponível',
+		scanToDownload: 'Escaneie QR para baixar',
+	},
+	account: {
+		title: 'Painel do Usuário',
+		uid: 'UID',
+		email: 'E-mail',
+		profile: 'Perfil',
+		security: 'Segurança',
+		securityDesc: 'Senhas, autenticações e senha financeira',
+		assets: 'Meus Ativos',
+		assetsDesc: 'Depósito, saque e transferência',
+		inviteCode: 'Código Convite',
+		inviteFriends: 'Convidar Amigos',
+		inviteDesc: 'Convide usuários e ganhe comissão sobre operações',
+		helpSupport: 'Ajuda e Suporte',
+		helpDesc: 'FAQ e atendimento',
+		broker: 'Corretor',
+		brokerDesc: 'Gestão comissões e equipe',
+		logout: 'Sair',
+		securityScore: 'Pontuação Segurança',
+		twofa: 'Autenticação Google',
+		supportTitle: 'Contatar Suporte',
+		supportHours: 'Suporte 24h',
+		onlineSupport: 'Chat Online',
+		instantChat: 'Chat Rápido',
+		telegramSupport: 'Suporte Telegram',
+		emailSupport: 'Suporte E-mail',
+		applySubmitted: 'Solicitação enviada, aguarde aprovação',
+		scoreHigh: 'Excelente',
+		scoreMedium: 'Regular',
+		scoreLow: 'Precisa melhorar',
+	},
+	transfer: {
+		title: 'Transferência',
+		amount: 'Valor transferência',
+		amountPlaceholder: 'Digite o valor',
+		maxTransferable: 'Máximo disponível',
+		success: 'Transferência concluída',
+		selectCoin: 'Escolher moeda',
+		enterAmount: 'Informe valor',
+		histEmpty: 'Sem histórico transferência',
+		balanceLabel: 'Saldo',
+	},
+	withdraw: {
+		title: 'Saque',
+		network: 'Rede',
+		networkTip: 'Confirme rede igual à carteira destino, erro causa perda de moedas.',
+		address: 'Endereço saque',
+		addressPlaceholder: 'Digite endereço destino',
+		amount: 'Valor saque',
+		received: 'Valor recebido',
+		fee: 'Taxa',
+		submitted: 'Pedido de saque enviado',
+		fundPassword: 'Senha Financeira',
+		emailCode: 'Código E-mail',
+		googleCode: 'Código Google',
+		securityVerification: 'Verificação Segurança',
+		recordTitle: 'Histórico Saques',
+		recordEmpty: 'Sem pedidos de saque',
+		confirmCancelApply: 'Cancelar pedido de saque?',
+		withdrawCancelledToast: 'Cancelado',
+		withdrawCancelFailedToast: 'Falha cancelamento',
+		statusPending: 'Em análise',
+		statusReleasing: 'Processando liberação',
+		statusWithdrawFailed: 'Falhou',
+		statusWithdrawSuccess: 'Concluído',
+		statusWithdrawCancelled: 'Cancelado',
+		typeInternalTransfer: 'Transferência Interna',
+		typeOnChainWithdraw: 'Saque na Blockchain',
+		cancelApplyBtn: 'Cancelar',
+		initFailed: 'Falha inicialização',
+		submitOnChainFailed: 'Falha envio saque',
+		transferSubmitFailed: 'Falha transferência interna',
+		availWithdrawBalance: 'Disponível para saque:',
+		availTransferBalance: 'Disponível para transferência:',
+		coinLabel: 'Moeda',
+		subCoin: 'Submoeda',
+		mainCoinLabel: 'Moeda Principal',
+		transferMainCoinHint: 'Transferência interna só moeda base, não tokens TUSDT/EUSDT.',
+		withdrawNetworkLabel: 'Rede de saque',
+		withdrawAmountUsdt: 'Valor saque (USDT)',
+		withdrawAmountCoin: 'Valor saque ({coin})',
+		transferAmountUsdt: 'Valor transf (USDT)',
+		transferAmountCoin: 'Valor transf ({coin})',
+		addressForCoin: 'Endereço carteira {coin}',
+		expectedArrival: 'Previsão recebimento',
+		minWithdrawRowLabel: 'Mínimo saque',
+		internalTransferFeeLabel: 'Taxa transf interna',
+		free: 'Gratuito',
+		minTransferRowLabel: 'Mínimo transferência',
+		recipientUidLabel: 'UID Destinatário',
+		recipientUidPlaceholder: 'UID conta destino',
+		addressForNetwork: 'Endereço USDT-{network}',
+		codePlaceholder6Digits: 'Código 6 dígitos',
+		googlePlaceholder6: 'Código Google 6 dígitos',
+		sendVerificationCode: 'Enviar código',
+		confirmWithdrawSubmit: 'Confirmar Saque',
+		confirmTransferSubmit: 'Confirmar Transferência',
+		codeSentToEmailToast: 'Código enviado e-mail',
+		onchainSubmittedPendingToast: 'Pedido criado, em análise',
+		transferSubmittedToast: 'Transferência interna enviada',
+		submitFailed: 'Falha envio',
+		detailTitleOnChain: 'Detalhes saque rede',
+		detailTitleTransfer: 'Detalhes transf interna',
+		amountHeroWithdraw: 'Valor sacado',
+		amountHeroTransfer: 'Valor transferido',
+		stepApplied: 'Solicitado',
+		stepDone: 'Concluído',
+		recipientLabel: 'Destinatário',
+		appliedAt: 'Data solicitação',
+		finishedAt: 'Data conclusão',
+		cancelApplyFull: 'Cancelar pedido',
+		copyBtn: 'Copiar',
+		bindGoogleFirst: 'Vincule primeiro autenticação Google',
+		errFillAddressBeforeCode: 'Preencha endereço antes solicitar código',
+		errFillAmountBeforeCode: 'Informe valor antes código',
+		errFillUidBeforeCode: 'Digite UID antes código',
+		errFillTransferAmtBeforeCode: 'Valor transferência primeiro',
+		errEnterWithdrawAddress: 'Informe endereço saque',
+		errEnterWithdrawAmount: 'Informe valor saque',
+		errMinWithdrawWithAmt: 'Mínimo saque {min} {coin}',
+		errMinWithdrawWithAmtUsdt: 'Mínimo saque {min} USDT',
+		errExceedWithdrawBalance: 'Valor acima do saldo disponível',
+		errEnterFundPassword: 'Informe senha financeira',
+		errEnterEmailCode: 'Código e-mail',
+		errEnterGoogleCode: 'Código Google',
+		errEnterRecipientUid: 'UID destinatário',
+		errEnterTransferAmount: 'Valor transferência',
+		errMinTransferWithAmt: 'Mínimo transf {min} {coin}',
+		errMinTransferWithAmtUsdt: 'Mínimo transf {min} USDT',
+		errExceedTransferBalance: 'Valor acima saldo transferível',
+	},
+	deposit: {
+		title: 'Depósito',
+		address: 'Endereço depósito',
+		network: 'Rede',
+		saveQrCode: 'Salvar QR',
+		addressCopied: 'Endereço copiado',
+		minDeposit: 'Mínimo depósito',
+		arrivals: 'Confirmações rede',
+		coin: 'Moeda',
+		protocol: 'Rede / Protocolo',
+		subCoin: 'Submoeda',
+		contract: 'Contrato',
+		depositAmount: 'Valor depósito',
+		amountPlaceholder: 'Digite valor',
+		generateOrder: 'Criar pedido',
+		generating: 'Criando...',
+		notice: 'Aviso Importante',
+		notice1: 'Crie pedido antes transferir, use endereço e valor do pedido.',
+		notice2: 'Rede/contrato errado causa perda permanente fundos.',
+		notice3: 'Após transferência envie TxHash para crédito.',
+		intro: 'Instrução',
+		introText: 'Escolha moeda/rede, informe valor, receba endereço único; envie hash após transferência.',
+		newDeposit: '← Novo Depósito',
+		orderInfo: 'Dados Pedido',
+		orderNo: 'Nº Pedido',
+		status: 'Status',
+		coinLabel: 'Moeda',
+		networkLabel: 'Rede',
+		amount: 'Valor',
+		payAddress: 'Endereço recebimento',
+		payAddressHint: 'Transfira valor exato na rede correta para esse endereço',
+		qrTitle: 'QR Pagamento',
+		qrHint: 'Escaneie carteira, não altere endereço/valor',
+		contractAddress: 'Endereço contrato',
+		copy: '⎘ Copiar',
+		copyAddress: 'Copiar endereço',
+		submitHash: 'Enviar TxHash',
+		submittingHash: 'Enviando...',
+		hashPlaceholder: 'Cole TxHash/TxID Tron',
+		orSubmitHash: 'Ou envie hash após transferência',
+		hashRequired: 'Informe hash transação',
+		statusNotSubmittable: 'Não pode enviar hash neste status',
+		orderCreated: 'Pedido criado, transfira para o endereço',
+		orderFailed: 'Falha criar pedido',
+		addressCopy: 'Endereço copiado',
+		orderNoCopy: 'Número pedido copiado',
+		hashSubmitted: 'Hash enviado, aguarde confirmação rede',
+		hashFailed: 'Falha envio hash',
+		broadcastSuccess: 'Transação enviada, hash salvo',
+		tronBroadcastSuccess: 'Transação Tron enviada, TxID salvo',
+		noNetwork: 'Sem redes disponíveis',
+		noSubCoin: 'Sem submoedas nesta rede',
+		amountRequired: 'Informe valor depósito',
+		amountPositive: 'Valor superior a zero',
+		submittedHash: 'Hash enviado: ',
+		manualDepositTab: 'Depósito Manual',
+		walletDepositTab: 'Depósito via Carteira',
+		walletPayEvm: 'Conectar carteira EVM e pagar',
+		walletPayingEvm: 'Processando pagamento EVM...',
+		walletPayTron: 'Conectar carteira Tron e pagar',
+		walletPayingTron: 'Processando pagamento Tron...',
+		histLink: 'Histórico Depósitos',
+		retryBtn: 'Tentar novamente',
+		backWithArrow: '‹ Voltar',
+		rechargeStatus0: 'Aguardando pagamento',
+		rechargeStatus1: 'Aguardando confirmação rede',
+		rechargeStatus2: 'Concluído',
+		rechargeStatus3: 'Cancelado',
+		rechargeStatus4: 'Falhou',
+		statusUnknown: 'Status {status}',
+		qrAlt: 'QR endereço depósito',
+		loadNetworksFailed: 'Falha carregar redes',
+		wcHintEvmConfigured:
+			'Conecte WalletConnect EVM, confirme rede e moeda iguais.',
+		wcHintEvmUnconfigured:
+			'VITE_WALLETCONNECT_PROJECT_ID não definido, envie hash manualmente.',
+		wcHintTronConfigured:
+			'WalletConnect Tron assina transação, envie TxID sem 0x.',
+		wcHintTronUnconfigured:
+			'WalletConnect Tron não configurado, depósito manual.',
+		wcHintTronManualOnly:
+			'Esta rede não suporta pagamento automático, envio manual hash.',
+		walletPayFallback: 'Falha pagamento carteira EVM',
+		tronWalletPayFallback: 'Falha pagamento carteira Tron',
+		currentPrefix: 'Atual:',
+		histEmpty: 'Sem histórico depósitos',
+		histOrderNo: 'Nº Pedido',
+		histTx: 'TX:',
+		histLoadMore: 'Carregar mais',
+		histLoadedAll: 'Todos registros carregados',
+	},
+	broker: {
+		title: 'Painel Corretor',
+		applyTitle: 'Solicitar ser Corretor',
+		myBrokerCode: 'Meu Código Corretor',
+		referralCount: 'Usuários indicados',
+		totalCommission: 'Comissão Total',
+		applyStatus: 'Status Solicitação',
+		pending: 'Em análise',
+		approved: 'Aprovado',
+		rejected: 'Recusado',
+		defaultName: 'Corretor',
+		greeting: 'Olá, {name}',
+		uidLabel: 'UID: {uid}',
+		introBanner: 'Ganhe comissão sobre operações dos indicados, crédito diário.',
+		statNewToday: 'Novos hoje',
+		statTradeToday: 'Negociando hoje',
+		statRebateToday: 'Comissão hoje (USDT)',
+		inviteList: 'Lista Indicados',
+		emptyInviteList: 'Sem indicados',
+		thAccount: 'Conta',
+		thLevel: 'Nível',
+		thPerpCopy: 'Perpétuo / Copy',
+		levelBroker: 'Corretor',
+		levelNormal: 'Comum',
+		editRateTooltip: 'Alterar % comissão',
+		todayRebate: 'Comissões do dia',
+		emptyTodayRebate: 'Sem comissões hoje',
+		thId: 'ID',
+		rebateUsdt: 'Comissão (USDT)',
+		teamDetails: 'Detalhes Equipe',
+		filterAll: 'Todos',
+		filterWeek: 'Últimos 7 dias',
+		filterToday: 'Hoje',
+		filterMonth: 'Mês Atual',
+		teamTotalAssets: 'Ativos totais equipe',
+		rebateHistory: 'Histórico Comissões',
+		emptyRebateHistory: 'Sem histórico comissões',
+		amountUsdt: 'Valor (USDT)',
+		loadMore: 'Carregar mais',
+		loadingMore: 'Carregando...',
+		loadedAll: 'Todos carregados',
+		editModalTitle: 'Editar % Comissão',
+		perpRebateRate: '% Comissão Futuros Perpétuos',
+		copyRebateRate: '% Comissão Copy Trade',
+		editTip: 'Alterações ativadas instantaneamente, edite com cuidado.',
+		perpRateError: '% Futuro inteiro entre 0~100',
+		copyRateError: '% Copy inteiro entre 0~100',
+		setSuccess: 'Salvo, alterações aplicadas',
+	},
+	help: {
+		title: 'Central de Ajuda',
+		supportTitle: 'Suporte',
+		search: 'Buscar',
+		searchPlaceholder: 'Palavra-chave',
+		telegramSupport: 'Suporte Telegram',
+		quickResponse: 'Resposta Rápida',
+		emailSupport: 'Suporte E-mail',
+		docs: 'Documentação',
+		viewFullGuide: 'Abrir guia completo',
+		detailTitle: 'Detalhe Ajuda',
+		backToHelp: 'Voltar central ajuda',
+	},
+	invite: {
+		title: 'Convidar Amigos',
+		myCode: 'Meu Código Convite',
+		copy: 'Copiar código',
+		copied: 'Código copiado',
+		share: 'Compartilhar link',
+		shareLink: 'Copiar link convite',
+		linkCopied: 'Link copiado',
+		desc: 'Convide usuários e receba % das taxas de negociação deles',
+		totalInvited: 'Total convidados',
+		totalReward: 'Total recompensa',
+		noRecord: 'Sem registros convite',
+		heroLine1: 'Convide Amigos',
+		heroLine2: 'Ganhe Comissões',
+		heroDesc:
+			'Usuários cadastram via seu link, você recebe porcentagem das taxas de suas negociações.',
+		myInviteInfo: 'Dados Convite',
+		inviteCodeLabel: 'Código Convite',
+		inviteLinkShort: 'Link Convite',
+		qrCodeLabel: 'QR Code',
+		copyShort: 'Copiar',
+		copiedDone: 'Copiado ✓',
+		qrInviteAlt: 'QR convite',
+		scanToRegister: 'Escaneie para cadastro',
+		rebateRulesTitle: 'Regras Comissão',
+		step1Title: 'Compartilhe código',
+		step1Desc: 'Envie código ou link para contatos',
+		step2Title: 'Amigo se cadastra',
+		step2Desc: 'Usuário cria conta via seu link',
+		step3Title: 'Receba comissão',
+		step3Desc: 'Recebe porcentagem das taxas de todas suas negociações',
+	},
+	futuresPage: futuresPageByLocale.pt,
+	spot: {
+		tag: 'Spot',
+		side: { buy: 'Comprar', sell: 'Vender' },
+		orderType: { limit: 'Limite', market: 'Mercado' },
+		orderStatus: {
+			pending: 'Aberta',
+			partial: 'Parcialmente executada',
+			filled: 'Executada',
+			cancelled: 'Cancelada',
+			pending_cancel: 'Cancelando',
+			expired: 'Expirada',
+			init: 'Criando',
+		},
+		recordType: {
+			transferIn: 'Entrada fundos',
+			transferOut: 'Saída fundos',
+			orderFreeze: 'Bloqueio pedido',
+			cancelUnfreeze: 'Desbloq após cancel',
+			trade: 'Negociação',
+			fee: 'Taxa',
+			unfreeze: 'Desbloquear',
+			unknown: 'Tipo {type}',
+		},
+		tabs: {
+			currentOrders: 'Pedidos Abertos',
+			historyOrders: 'Histórico Pedidos',
+			trades: 'Histórico Negociações',
+			funding: 'Movimentação Fundos',
+		},
+		table: {
+			pair: 'Par',
+			side: 'Direção',
+			type: 'Tipo',
+			price: 'Preço',
+			orderPrice: 'Preço pedido',
+			amount: 'Quantidade',
+			orderAmount: 'Qtd pedido',
+			filled: 'Executado',
+			status: 'Status',
+			time: 'Data',
+			action: 'Ação',
+			dealPrice: 'Preço execução',
+			dealVolume: 'Volume exec',
+			turnover: 'Valor total',
+			recordType: 'Tipo movimento',
+			quantity: 'Quantidade',
+			coin: 'Moeda',
+		},
+		trade: {
+			buy: 'Comprar',
+			sell: 'Vender',
+			limit: 'Limite',
+			market: 'Mercado',
+			processing: 'Processando...',
+			buySymbol: 'Comprar {symbol}',
+			sellSymbol: 'Vender {symbol}',
+			priceUsdt: 'Preço (USDT)',
+			limitPlaceholder: 'Preço limite',
+			marketHint: 'Compra/venda ao melhor preço disponível',
+			amountUsdt: 'Valor (USDT)',
+			amountBase: 'Quantidade ({base})',
+			available: 'Disponível',
+			transfer: 'Transferir',
+			loginForBalance: 'Acesse para ver saldo',
+			spotAssets: 'Saldo Spot',
+		},
+		order: { cancel: 'Cancelar', cancelAll: 'Cancelar tudo' },
+		empty: {
+			loginLink: 'Acessar',
+			loginOrdersPrompt: '{link} para ver pedidos',
+			loginViewPrompt: '{link} para visualizar',
+			noOrders: 'Sem pedidos abertos',
+			noHistoryOrders: 'Sem histórico pedidos',
+			noTrades: 'Sem negociações',
+			noFunding: 'Sem registros',
+		},
+		errors: {
+			symbolNotReady: 'Par de negociação indisponível',
+			invalidAmount: 'Informe quantidade válida',
+			invalidPrice: 'Preço inválido',
+			minLimitVolume: 'Qtd mínima {min}',
+			minMarketBuy: 'Valor mín compra mercado {min} USDT',
+			minMarketSell: 'Qtd mín venda mercado {min}',
+			orderSubmitted: 'Pedido enviado',
+			orderFailed: 'Falha envio pedido',
+			cancelSuccess: 'Pedido cancelado',
+			cancelFailed: 'Falha cancelamento',
+			cancelAllSuccess: 'Todos pedidos cancelados',
+			cancelAllPartialFailed: 'Alguns pedidos não cancelados',
+		},
+		loadedAll: 'Todos carregados',
+		ticker: {
+			change24h: 'Var 24h',
+			high24h: 'Máx 24h',
+			low24h: 'Mín 24h',
+			turnover24h: 'Volume 24h',
+		},
+		chartSub: { chart: 'Gráfico', coinInfo: 'Info Moeda' },
+		tf: {
+			m1: '1m', 
+			m5: '5m', 
+			m15: '15m', 
+			m30: '30m', 
+			h1: '1h', 
+			h4: '4h', 
+			d1: '1d',
+			w1: '1w',
+			mo1: '1mon',
+			mo3: '3mon'
+		},
+		ohlcv: {
+			spotLabel: 'Spot',
+			open: 'Abertura',
+			high: 'Máximo',
+			low: 'Mínimo',
+			close: 'Fechamento',
+			volume: 'Volume',
+			changePct: '% Variação',
+		},
+		draw: {
+			cursor: 'Cursor',
+			trend: 'Linha tendência',
+			hline: 'Linha horizontal',
+			ray: 'Reta',
+			channel: 'Canal',
+			fib: 'Fibonacci',
+			text: 'Texto',
+			clearAll: 'Apagar tudo',
+			zoomOut: 'Diminuir zoom',
+		},
+		mobileTab: { chart: 'Mercado', trade: 'Negociar' },
+		pair: {
+			search: 'Buscar',
+			loading: 'Carregando…',
+			noMatch: 'Nenhum resultado encontrado',
+			retryLater: ', tente novamente mais tarde'
+		},
+		book: {
+			waiting: 'Aguardando dados…',
+			orderbook: 'Livro de ofertas',
+			trades: 'Negociações',
+			priceUsdt: 'Preço (USDT)',
+			amountBase: 'Quantidade ({base})',
+			total: 'Total',
+			buyRatio: 'Compra {n}%',
+			sellRatio: '{n}% Venda',
+			price: 'Preço',
+			amount: 'Quantidade',
+			time: 'Horário',
+			pricePrecision: 'Precisão do preço'
+		},
+		coinInfo: {
+			marketCap: 'Valor de mercado',
+			circulating: 'Oferta circulante',
+			issuePrice: 'Preço de emissão',
+			ath: 'Máxima histórica',
+			athDate: 'Data da máxima',
+			whitepaper: 'Whitepaper',
+			empty: 'Sem dados da moeda',
+			reload: 'Atualizar'
+		},
+		transferModal: {
+			title: 'Transferência',
+			selectCoin: 'Moeda',
+			amount: 'Quantidade',
+			amountPlaceholder: 'Informe o valor',
+			availableUsdt: 'Saldo disponível USDT:',
+			availableCoin: 'Saldo disponível {coin}:',
+			transferring: 'Transferindo…',
+			invalidAmount: 'Informe um valor válido',
+			insufficientBalance: 'Valor superior ao saldo disponível',
+			transferFailed: 'Falha na transferência, tente novamente'
+		}
+	}
+}

+ 1061 - 0
code/src/locales/ru.ts

@@ -0,0 +1,1061 @@
+import { futuresPageByLocale } from './futuresPage.i18n'
+import { financePageByLocale } from './financePage.i18n'
+
+export default {
+	nav: {
+		home: 'Главная',
+		market: 'Рынок',
+		spot: 'Спот',
+		futures: 'Фьючерсы',
+		copyTrade: 'Копи-трейдинг',
+		finance: 'Инвестиции',
+		idoPresale: 'Предпродажа IDO',
+		claimAirdrop: 'Забрать Аирдроп',
+		announcements: 'Объявления',
+		download: 'Скачать',
+	},
+	lang: {
+		title: 'Язык',
+		zhCN: '简体中文',
+		zhTW: '繁體中文',
+		en: 'English',
+		ko: '한국어',
+		ja: '日本語',
+		hi: 'हिन्दी',
+		id: 'Bahasa Indonesia',
+		es: 'Español',
+		ru: 'Русский',
+		pt: 'Português',
+		de: 'Deutsch',
+		fr: 'Français',
+		tr: 'Türkçe',
+		vi: 'Tiếng Việt'
+	},
+	header: {
+		login: 'Войти',
+		register: 'Регистрация',
+		account: 'Мой аккаунт',
+		assets: 'Мои активы',
+		security: 'Безопасность',
+		broker: 'Брокер',
+		logout: 'Выйти из аккаунта',
+		logoutShort: 'Выйти',
+		downloadTitle: 'Скачать приложение',
+		brokerApplyTitle: 'Подать заявку на брокера',
+		brokerApplyDesc: 'Вы пока не являетесь брокером. Заявка отправляется с данными вашего аккаунта, доступ откроется после модерации.',
+		cancel: 'Отмена',
+		applyNow: 'Подать заявку',
+		viewApplyList: 'Проверить статус заявки',
+		submitting: 'Отправка…',
+		menu: 'Меню',
+	},
+	common: {
+		loading: 'Загрузка…',
+		retry: 'Повторить',
+		cancel: 'Отмена',
+		confirm: 'Подтвердить',
+		submit: 'Отправить',
+		save: 'Сохранить',
+		send: 'Отправить',
+		back: 'Назад',
+		next: 'Далее',
+		done: 'Готово',
+		noData: 'Нет данных',
+		noRecord: 'Нет записей',
+		search: 'Поиск',
+		all: 'Все',
+		max: 'Макс',
+		copied: 'Скопировано',
+		networkError: 'Ошибка подключения к сети, повторите попытку позже',
+		loadFailed: 'Не удалось загрузить',
+		operationFailed: 'Ошибка операции, повторите',
+		saveSuccess: 'Сохранено успешно',
+		more: 'Ещё',
+		perpetual: 'Бессрочный фьючерс',
+		set: 'Настроено',
+		notSet: 'Не настроено',
+		change: 'Изменить',
+		bind: 'Привязать',
+		unbind: 'Отвязать',
+		on: 'Вкл',
+		off: 'Выкл',
+		status: 'Статус',
+		time: 'Дата',
+		amount: 'Сумма',
+		type: 'Тип',
+		coin: 'Монета',
+		from: 'От',
+		to: 'До',
+		close: 'Закрыть',
+		contactService: 'Связаться с поддержкой',
+	},
+	home: {
+		heroTitle: 'Надёжная, эффективная глобальная платформа торговли цифровыми активами',
+		heroDesc: 'iBit предоставляет стабильные, прозрачные и профессиональные торговые сервисы для пользователей всего мира с передовой архитектурой и строгим риск-контролем.',
+		register: 'Зарегистрироваться',
+		viewMarket: 'Смотреть рынок',
+		downloadApp: 'Скачать приложение',
+		coreAdvantages: 'Основные преимущества',
+		assetSafetyTitle: 'Безопасность активов',
+		assetSafetyDesc: 'Раздельные холодные/горячие кошельки, мультиподпись, круглосуточный мониторинг для сохранности средств.',
+		highPerfTitle: 'Высокая производительность',
+		highPerfDesc: 'Собственный движок сопоставления, обработка сделок за миллисекунды для стабильной торговли.',
+		globalComplianceTitle: 'Глобальное соответствие регуляциям',
+		globalComplianceDesc: 'Соблюдение международных норм для безопасной торговли во всём мире.',
+		transparentFeeTitle: 'Прозрачные комиссии',
+		transparentFeeDesc: 'Чёткая тарифная сетка без скрытых платежей.',
+		aboutUs: 'О нас',
+		aboutDesc: 'iBit – глобальная биржа цифровых активов с фокусом на безопасность, стабильность и эффективность.',
+		foundedYear: 'Основана в 2023 году',
+		headquarters: 'Зарегистрирована в Дубае, лицензии США, Канады, Австралии и Дубая.',
+		ourVision: 'Наше видение',
+		visionSubtitle: 'Создание надёжной мировой инфраструктуры цифровой торговли',
+		ecoTitle: 'Экосистема',
+		ecoDesc: 'Развитие новой криптовалютной торговой экосистемы',
+		missionTitle: 'Миссия',
+		missionDesc: 'Продвижение глобального оборота цифровой стоимости',
+		purposeTitle: 'Цель',
+		purposeDesc: 'Упрощение инвестиций и управления криптоактивами для пользователей',
+		heroImageAlt: 'Торговая платформа iBit',
+		aboutImageAlt: 'О компании',
+	},
+	market: {
+		title: 'Живой рынок',
+		desc: 'Актуальные цены, объёмы и изменения для отслеживания рыночной ситуации.',
+		hot: 'Популярные',
+		topVolume: 'Большой объём',
+		gainers: 'Рост',
+		losers: 'Падение',
+		perpetual: 'Бессрочные',
+		name: 'Название',
+		latestPrice: 'Цена',
+		change24h: 'Изменение за 24ч',
+		turnover: 'Объём',
+		searchPair: 'Поиск торговых пар',
+		searchMarket: 'Поиск монет, пар, фьючерсов',
+		price: 'Цена',
+		change24hShort: 'Изм. за 24ч',
+		high24h: 'Макс 24ч',
+		low24h: 'Мин 24ч',
+		volume24hLabel: 'Объём за 24ч',
+	},
+	auth: {
+		loginTitle: 'Вход',
+		emailLogin: 'Вход по почте',
+		emailPlaceholder: 'Введите email',
+		password: 'Пароль',
+		passwordPlaceholder: 'Введите пароль',
+		forgotPassword: 'Забыли пароль?',
+		loginBtn: 'Войти',
+		noAccount: 'Нет аккаунта?',
+		registerNow: 'Зарегистрироваться',
+		verifyTitle: 'Код подтверждения',
+		codeSentDesc: 'Код отправлен на {email}, проверьте почту.',
+		codeSendDesc: 'Нажмите для отправки кода на {email}.',
+		countdownResend: 'Повтор через {n}с',
+		resendCode: 'Повторно отправить код',
+		confirmBtn: 'Подтвердить',
+		sendCode: 'Отправить код',
+		forgotVerify: 'Забыли способ подтверждения?',
+		loginSuccess: 'Вход выполнен',
+		codeSentAgain: 'Код повторно отправлен',
+		registerTitle: 'Регистрация',
+		emailRegister: 'Регистрация по почте',
+		inviteCodeLabel: 'Инвайт-код (необязательно)',
+		inviteCodePlaceholder: 'Введите код приглашения',
+		hasAccount: 'Уже есть аккаунт?',
+		loginNow: 'Войти',
+		verifyPageTitle: 'Безопасная проверка',
+		emailVerifyLabel: 'Проверка по email',
+		codePlaceholder: 'Введите код',
+		sendBtn: 'Отправить',
+		passwordTitle: 'Создать пароль',
+		backBtn: '‹ Назад',
+		inputPasswordLabel: 'Пароль',
+		confirmPasswordLabel: 'Подтвердите пароль',
+		confirmPasswordPlaceholder: 'Повторите пароль',
+		doneBtn: 'Готово',
+		resetSuccess: 'Пароль изменён, войдите с новыми данными.',
+		registerSuccess: 'Регистрация завершена',
+		welcomeJoin: 'Добро пожаловать в iBit',
+		loginNowBtn: 'Войти',
+		forgotPasswordTitle: 'Сброс пароля',
+		emailLabel: 'Email',
+		emailRegisteredPlaceholder: 'Введите зарегистрированный email',
+		codeSentToast: 'Код отправлен',
+	},
+	error: {
+		emailRequired: 'Укажите почту',
+		emailInvalid: 'Неверный формат email',
+		passwordRequired: 'Введите пароль',
+		code6Required: 'Введите шестизначный код',
+		codeRequired: 'Введите проверочный код',
+		loginFailed: 'Неверная почта или пароль',
+		networkError: 'Ошибка сети, повторите позже',
+		emailAlreadyRegistered: 'Этот email уже зарегистрирован, войдите',
+		confirmPasswordRequired: 'Повторите пароль',
+		passwordMismatch: 'Пароли не совпадают',
+		loadFailed: 'Ошибка загрузки данных безопасности',
+		refreshFailed: 'Ошибка обновления',
+		statusUpdated: 'Статус обновлён',
+		currentPasswordRequired: 'Укажите текущий пароль',
+		sixDigitCode: 'Шестизначный код из почты',
+		sixDigitGoogleCode: 'Шестизначный код Google',
+		sendFailed: 'Не удалось отправить',
+		operationFailed: 'Ошибка операции',
+	},
+	security: {
+		title: 'Настройки безопасности',
+		back: '‹ Назад',
+		warningBanner: 'Пройдите проверку почты, Google Authenticator и платёжного пароля для защиты аккаунта.',
+		accountSecurity: 'Безопасность аккаунта',
+		loginPassword: 'Пароль для входа',
+		loginPasswordDesc: 'Периодически меняйте пароль для надёжной защиты',
+		emailVerify: 'Подтверждение почты',
+		emailVerifyDesc: 'Привяжите почту для восстановления доступа',
+		googleAuth: 'Google-аутентификация',
+		googleAuthDesc: 'Подключите Гугл Аутентификатор для усиления защиты',
+		fundPassword: 'Платёжный пароль',
+		fundPasswordDesc: 'Отдельный пароль для вывода и переводов средств',
+		set: 'Настроить',
+		notSet: 'Не задан',
+		change: 'Изменить',
+		bind: 'Привязать',
+		set2: 'Установить',
+		statusUpdated: 'Статус обновлён',
+		loadFailed: 'Ошибка загрузки данных',
+		refreshFailed: 'Не удалось обновить',
+		bound: 'Привязано',
+		notBound: 'Не привязано',
+		refresh: 'Обновить',
+		googleHelpTitle: 'Справка по Google Authenticator',
+		googleHelpDesc: 'При проблемах с кодом или отвязкой обращайтесь в поддержку.',
+		changeLoginPassword: 'Смена входного пароля',
+		changePasswordHint: 'После смены используйте новый пароль, код отправлен на почту.',
+		currentPassword: 'Текущий пароль',
+		newPassword: 'Новый пароль',
+		confirmNewPassword: 'Подтвердите новый пароль',
+		emailCode: 'Код из почты',
+		sendCode: 'Отправить код',
+		codeSent: 'Код отправлен на почту',
+		changeSuccess: 'Пароль успешно изменён',
+		confirmChange: 'Подтвердить изменение',
+		submitting: 'Отправка…',
+		setFundPassword: 'Задать платёжный пароль',
+		resetFundPassword: 'Сброс платёжного пароля',
+		fundPasswordHint: 'Нужен для вывода и переводов, сохраните его.',
+		fundPasswordResetHint: 'Сброс пароля, код отправлен на почту.',
+		newFundPassword: 'Новый платёжный пароль',
+		confirmFundPassword: 'Подтвердите пароль',
+		fundPasswordUpdated: 'Платёжный пароль обновлён',
+		fundPasswordSet: 'Платёжный пароль установлен',
+		bindGoogle: 'Привязка Google Authenticator',
+		boundEmail: 'Привязанная почта:',
+		googleQrStep: '1. Сканируйте QR или введите секрет вручную',
+		googleCodeStep: '2. Динамический шестизначный код Google',
+		emailCodeStep: '3. Код подтверждения из почты',
+		copyKey: 'Скопировать ключ',
+		keyCopied: 'Ключ скопирован',
+		copyFailed: 'Не удалось скопировать, скопируйте вручную',
+		clipboardDeniedMac: 'Нет разрешения буфера обмена, настройте доступ браузера',
+		clipboardDenied: 'Запрет буфера обмена, разрешите в настройках браузера',
+		invalidSecret: 'Неверный секрет, обновите страницу',
+		googleCodeRequired: 'Введите шестизначный код Google',
+		emailCodeSent: 'Код из почты отправлен',
+		bindSuccess: 'Привязка завершена',
+		confirmBind: 'Подтвердить привязку',
+		googleAuthLead: 'Скачайте Google/Microsoft Authenticator из магазина приложений.',
+		googleAuthTip1: 'После привязки код нужен при входе и финансовых операциях.',
+		googleAuthTip2: 'Храните телефон в безопасности, при потере пишите поддержке.',
+		googleAuthStart: 'Установлено, начать привязку',
+	},
+	assets: {
+		title: 'Мои активы',
+		totalAssets: 'Общая стоимость активов',
+		todayPnl: 'Приб/уб за день',
+		deposit: 'Пополнить',
+		withdraw: 'Вывести',
+		transfer: 'Перевод',
+		history: 'История',
+		spot: 'Спот',
+		futures: 'Фьючерсы',
+		copyTrade: 'Копи-трейд',
+		fund: 'Доступно к выводу',
+		walletBalance: 'Баланс кошелька',
+		unrealizedPnl: 'Нереализ. приб/уб',
+		positions: 'Позиции',
+		noPositions: 'Нет позиций',
+		assetBalance: 'Баланс актива',
+		unavailable: 'Недоступно',
+		depositCoin: 'Пополнение',
+		withdrawCoin: 'Вывод',
+		depositRecord: 'История пополнений',
+		withdrawRecord: 'История выводов',
+		transferRecord: 'История переводов',
+		assetRecord: 'Движения средств',
+		overview: 'Обзор',
+		spotAccount: 'Спот-счёт',
+		swapAccount: 'Счёт фьючерсов',
+		followAccount: 'Счёт копи-трейдинга',
+		fundAccount: 'Счёт вывода',
+		spotTradingAccount: 'Торговый спот-счёт',
+		ibitAccount: 'Счёт iBit',
+		lockedStakingAccount: 'Заблокированный стейкинг',
+		stakingTab: 'Стейкинг',
+		ibitUnit: 'iBit',
+		releaseTotal: 'Всего разблокировано',
+		totalLockedBalance: 'Итого заблокировано(iBit)',
+		myStakingOrders: 'Мои ордера стейкинга',
+		stakingOrderNo: '№ ордера',
+		purchaseQty: 'Купленное количество',
+		stakingTotal: 'Заблокировано',
+		released: 'Разблокировано',
+		pendingRelease: 'Ожидает разблокировки',
+		startTime: 'Дата начала',
+		subscribing: 'Подписка активна',
+		releasing: 'Разблокировка',
+		completed: 'Завершено',
+		pullToRefresh: 'Потяните вниз для обновления',
+		releaseToRefresh: 'Отпустить для обновления',
+		refreshing: 'Обновление…',
+		totalAccount: 'Общая сумма счёта',
+		showBalance: 'Показать баланс',
+		hideBalance: 'Скрыть баланс',
+		followBalance: 'Баланс копи-трейдинга',
+		accountTransfer: 'Межсчётный перевод',
+		transferFrom: 'Откуда',
+		transferTo: 'Куда',
+		available: 'Доступно',
+		freeTransfer: 'Бесплатный перевод, зачисление мгновенное',
+		followPositions: 'Активные копи-позиции',
+		noFollowPositions: 'Нет копи-позиций',
+		followLoading: 'Загрузка…',
+		long: 'Лонг',
+		short: 'Шорт',
+		trader: 'Трейдер',
+		openPrice: 'Цена открытия',
+		currentPrice: 'Текущая цена',
+		amountLever: 'Кол-во · Плечо',
+		closing: 'Закрытие…',
+		closePosition: 'Закрыть',
+		noLossPosition: 'Безубыточные копи-позиции закрыть вручную нельзя',
+		invalidPosition: 'Ошибка данных позиции, закрытие невозможно',
+		confirmClose: 'Закрыть позицию? Вы потеряете итоговую прибыль по ордеру.',
+		closeSuccess: 'Позиция закрыта',
+		closeFailed: 'Ошибка закрытия',
+		sameAccountError: 'Счёт отправки и получения не может совпадать',
+		amountError: 'Укажите корректную сумму',
+		insufficientBalance: 'Недостаточно средств',
+		transferSuccess: 'Перевод выполнен',
+		transferFailed: 'Ошибка перевода',
+		goCopyTrade: 'Копи-трейдинг',
+		goSpotTrade: 'Перейти к торговле',
+		hideZeroBalance: 'Скрыть активы с нулевым балансом',
+		depositRecord2: 'История пополнений',
+		amountUsdt: 'Сумма (USDT)',
+		amountCoin: 'Сумма ({coin})',
+		availableCoin: 'Доступно: {available} {coin}',
+		transferring: 'Перевод…',
+		confirmTransferBtn: 'Подтвердить перевод',
+		statementPageTitle: 'Выписка по средствам',
+		statementStartDate: 'Дата начала',
+		statementEndDate: 'Дата окончания',
+		statementReset: 'Сброс',
+		statementSearch: 'Поиск',
+		statementSearching: 'Поиск…',
+		statementEmpty: 'Нет записей',
+		statementDirectionOpen: 'Открытие позиции',
+		statementDirectionClose: 'Закрытие позиции',
+		statementTypes: {
+			'43': 'Спот прибыль',
+			'44': 'Спот убыток',
+			'45': 'Спот комиссия',
+			'46': 'Спот возврат комиссии',
+			'48': 'Спот сделка',
+			'49': 'Стейкинг',
+			'50': 'Разблокировка стейкинга',
+			'51': 'Награда аирдроп',
+			'52': 'Зачисление на стейкинг кошелёк',
+			'53': 'Вывод со стейкинг кошелька',
+		},
+	},
+	finance: { ...financePageByLocale.ru },
+	copyTrade: {
+		comprehensive: 'Обзор',
+		winRate14d: '% прибыли 14д',
+		profit14d: 'Доход 14д',
+		normal: 'Обычный копи',
+		lossless: 'Безубыточное копирование',
+		favorite: 'Избранное',
+		topTraders: 'Лучшие трейдеры',
+		twoWeekReturn: 'Доход за 2 недели',
+		followers: 'Подписчики',
+		days: 'Дни',
+		applyTrader: 'Стать ведущим трейдером',
+		myFollowing: 'Мои копирования',
+		myTrading: 'Мои сделки',
+		traderIdentity: 'Ведущий трейдер',
+		myFollowingAccount: 'Счёт копи-трейдинга',
+		leadManage: 'Панель лидера',
+		applyLead: 'Подать заявку в лидеры',
+		pageTitle: 'Копи-трейдинг',
+		heroDesc: 'Копируйте сделки опытных трейдеров в один клик для получения прибыли.',
+		traderOverview: 'Обзор трейдера',
+		copyFollowersCount: 'Количество подписчиков',
+		cumulativeTradingDays: 'Всего торговых дней',
+		cumulativeLeadProfit: 'Общая прибыль от копи',
+		goLeadManage: 'Перейти в панель лидера →',
+		copyWalletTitle: 'Баланс копи-счёта',
+		cumulativePnlUsdt: 'Общая прибыль копи(USDT)',
+		availableUsdt: 'Доступно (USDT)',
+		unrealizedPnlUsdtShort: 'Нереал. приб/уб(USDT)',
+		followingTradersSummary: 'Подписано на {n} трейдеров',
+		newBadge: 'НОВОЕ',
+		losslessShieldTitle: 'Защита от убытков',
+		losslessShieldDesc: ': При убытках платформа компенсирует потери по установленным лимитам.',
+		learnHowItWorks: 'Подробнее →',
+		myStarredTraders: 'Сохранённые трейдеры',
+		traderTotalCount: 'Доступно {count} трейдеров',
+		filterLoadingShort: 'Загрузка…',
+		loadTraderListFailed: 'Ошибка загрузки списка трейдеров',
+		loadFavoritesFailed: 'Не загрузить избранное',
+		favoritedToast: 'Добавлено в избранное',
+		defaultTraderName: 'Трейдер',
+		levelJunior: 'Начинающий',
+		badgeLossless: 'Безубыточный',
+		metaDaysTrades: '{days}д · {trades} сделок',
+		followAction: 'Копировать',
+		profitUsdtBracket: 'Прибыль (USDT)',
+		profitShareRate: '% раздела прибыли',
+		trend14Days: 'График за 14 дней',
+		emptyFavoriteHint: 'Нет избранных, ищите трейдеров',
+		emptyTraderListDefault: 'Нет доступных трейдеров',
+		emptyTraderListLossless: 'Нет безубыточных трейдеров',
+		browseTraders: 'Смотреть трейдеров',
+		losslessInfoHeading: 'Принцип безубыточного копирования',
+		llInfoCard1Title: 'Условная компенсация',
+		llInfoCard1Body: 'Компенсация работает при соблюдении правил риск-контроля.',
+		llInfoCard2Title: 'Ограниченная ответственность',
+		llInfoCard2Body: 'Компенсация не превышает установленный лимит по сделке.',
+		llInfoCard3Title: 'Контроль рисков',
+		llInfoCard3Body: 'При крупных убытках активируется система защиты баланса.',
+		llInfoCard4Title: 'Предупреждение рисков',
+		llInfoCard4Body: 'Крипта торговля высокорисковая, безубыточность не гарантирует доход.',
+		followingPlaza: 'Площадка копи',
+		followingWalletFail: 'Ошибка загрузки копи-счёта',
+		followingTabPositions: 'Открытые позиции',
+		followingTabTraders: 'Мои трейдеры',
+		followingTabHistory: 'История копи',
+		followingHistEmpty: 'Нет истории копи',
+		followingNoTradersYet: 'Вы не подписаны ни на одного трейдера',
+		followingGoPlaza: 'Перейти на площадку копи',
+		confirmStopFollow: 'Отписаться от "{name}"?',
+		noLossManualCloseTooltip: 'Безубыточные копи закрывать руками нельзя',
+		followingThContract: 'Контракт',
+		followingThDirection: 'Направление',
+		followingThOpenPrice: 'Цена открытия',
+		followingThCurPrice: 'Тек цена',
+		followingThQty: 'Кол-во',
+		followingThLever: 'Плечо',
+		followingThUnrealized: 'Нереал. приб/уб',
+		followingThOpenTime: 'Дата открытия',
+		followingThAction: 'Действие',
+		followingOpenLong: 'Открыт лонг',
+		followingOpenShort: 'Открыт шорт',
+		closeQtyWithBase: 'Закрываемое кол-во({base})',
+		followingRealizedPnlUsdt: 'Реал приб/уб(USDT)',
+		followingYieldRate: 'Доходность',
+		followingAvgOpenUsdt: 'Средняя цена открытия(USDT)',
+		followingAvgCloseUsdt: 'Средняя цена закрытия(USDT)',
+		marginCrossMode: 'Общее обеспечение',
+		marginIsolatedMode: 'Изолированное плечо',
+		stopFollowing: 'Отписаться',
+		lead: {
+			pageTitle: 'Мои сделки лидера',
+			navMyFollowing: 'Мои копи →',
+			becomeTitle: 'Стать ведущим трейдером',
+			becomeDesc: 'Выполните требования для подачи заявки.',
+			condMinBalance: 'Баланс фьючерс счёта ≥ {min} USDT',
+			goTransfer: 'Перевести средства',
+			condNotFollowing: 'Запрет на подписку на других трейдеров',
+			agreePrefix: 'Я ознакомлен и принимаю',
+			agreeLink: 'Соглашение трейдера',
+			submitting: 'Отправка…',
+			submitApply: 'Отправить заявку',
+			applyFailed: 'Ошибка отправки заявки, повторите позже',
+			reviewingTitle: 'Заявка на рассмотрении',
+			reviewingDesc: 'Ожидайте одобрения для старта лидерства.',
+			agreementTitle: 'Соглашение трейдера',
+			agreementEmpty: 'Не удалось загрузить документ, повторите позже.',
+			leadingBadge: 'Лидер',
+			noBio: 'Нет описания',
+			cancelLeadProcessing: 'Обработка…',
+			cancelLeadApply: 'Подать на выход из лидеров',
+			confirmCancelLead: 'Отказаться от роли лидера? Все активные копи отменятся.',
+			operationFailed: 'Ошибка операции',
+			statFollowers: 'Текущие подписчики',
+			statRegisterDays: 'Дни на платформе',
+			statCapital: 'Капитал',
+			statCumulativeProfit: 'Общая прибыль копи(USDT)',
+			statTotalFollowers: 'Всего подписчиков за всё время',
+			statTradingDays: 'Всего торговых дней',
+			tabFollowers: 'Подписчики ({n})',
+			tabCurrent: 'Активные сделки',
+			tabHistory: 'История лидерства',
+			tabSettings: 'Настройки трейдера',
+			emptyFollowers: 'Нет подписчиков',
+			removeFollower: 'Удалить',
+			followerEquity: 'Баланс счёта(USDT)',
+			followerTotalShare: 'Итого раздел прибыли(USDT)',
+			followerLastShare: 'Последнее начисление',
+			followerSince: 'Подписан с: {time}',
+			emptyCurrent: 'Нет активных сделок',
+			emptyHistory: 'Нет истории лидерства',
+			settingsBasic: 'Основные данные',
+			avatar: 'Аватар',
+			nickname: 'Никнейм',
+			nicknamePlaceholder: 'Макс 10 символов',
+			bio: 'Описание',
+			bioPlaceholder: 'Макс 25 символов',
+			saveSuccess: 'Сохранено',
+			saveBasicProcessing: 'Сохранение…',
+			saveBasic: 'Сохранить данные',
+			leadSymbols: 'Контракты для лидерства',
+			saveProcessing: 'Сохранение…',
+			save: 'Сохранить',
+			tagsTitle: 'Теги (макс 4)',
+			confirmRemoveFollower: 'Удалить подписчика "{name}"?',
+			saveFailed: 'Ошибка сохранения',
+			uploadFailed: 'Ошибка загрузки файла',
+			defaultFollower: 'Подписчик',
+			defaultUser: 'Пользователь',
+		},
+	},
+	footer: {
+		aboutSection: 'О нас',
+		companyIntro: 'О компании',
+		brand: 'Бренд',
+		community: 'Сообщество',
+		riskWarning: 'Предупреждение о рисках',
+		terms: 'Условия обслуживания',
+		privacy: 'Политика конфиденциальности',
+		futuresTrade: 'Фьючерс торговля',
+		spotTrade: 'Спот торговля',
+		losslessCopy: 'Безубыточный копи',
+		beginnerGuide: 'Гид для новичков',
+		helpCenter: 'Центр помощи',
+		glossary: 'Глоссарий',
+		compliance: 'Юридическая информация',
+		products: 'Продукты',
+		resources: 'Ресурсы',
+	},
+	announcements: {
+		title: 'Системные объявления',
+		noAnnouncements: 'Нет объявлений',
+		back: 'Назад',
+		backToList: 'К списку',
+		loadMore: 'Загрузить ещё',
+	},
+	download: {
+		title: 'Скачать iBit',
+		heroTitle: 'Рыночные котировки онлайн\nТоргуйте в любое время',
+		desc: 'Отслеживайте цены и открывайте сделки из любого места',
+		appDesc: 'Все функции в мобильном приложении, торговля со смартфона',
+		latestVersion: 'Последняя версия',
+		updateNotes: 'Примечания к обновлению',
+		ios: 'Скачать iOS',
+		iosNotReleased: 'iOS недоступно',
+		android: 'Скачать Android',
+		androidNotReleased: 'Android недоступно',
+		scanToDownload: 'Сканируйте QR для загрузки',
+	},
+	account: {
+		title: 'Личный кабинет',
+		uid: 'UID',
+		email: 'Email',
+		profile: 'Профиль',
+		security: 'Безопасность',
+		securityDesc: 'Пароли, проверки и платёжный пароль',
+		assets: 'Мои активы',
+		assetsDesc: 'Пополнение, вывод и перевод средств',
+		inviteCode: 'Инвайт код',
+		inviteFriends: 'Пригласить друзей',
+		inviteDesc: 'Приглашайте людей и получайте комиссию с их сделок',
+		helpSupport: 'Помощь и поддержка',
+		helpDesc: 'FAQ и обращения в саппорт',
+		broker: 'Брокер',
+		brokerDesc: 'Управление комиссиями и командой',
+		logout: 'Выйти',
+		securityScore: 'Оценка безопасности',
+		twofa: 'Google аутентификация',
+		supportTitle: 'Связаться с поддержкой',
+		supportHours: 'Поддержка 24/7',
+		onlineSupport: 'Онлайн чат',
+		instantChat: 'Быстрый чат',
+		telegramSupport: 'Поддержка Telegram',
+		emailSupport: 'Поддержка по почте',
+		applySubmitted: 'Заявка отправлена, ожидает одобрения',
+		scoreHigh: 'Отлично',
+		scoreMedium: 'Нормально',
+		scoreLow: 'Нужно улучшить',
+	},
+	transfer: {
+		title: 'Перевод',
+		amount: 'Сумма перевода',
+		amountPlaceholder: 'Введите сумму',
+		maxTransferable: 'Макс доступно к переводу',
+		success: 'Перевод выполнен',
+		selectCoin: 'Выбрать монету',
+		enterAmount: 'Укажите сумму',
+		histEmpty: 'Нет истории переводов',
+		balanceLabel: 'Баланс',
+	},
+	withdraw: {
+		title: 'Вывод средств',
+		network: 'Сеть',
+		networkTip: 'Сверяйте сеть с кошельком получателя, ошибка приводит к потере монет.',
+		address: 'Адрес для вывода',
+		addressPlaceholder: 'Введите адрес получателя',
+		amount: 'Сумма вывода',
+		received: 'Сумма на поступлении',
+		fee: 'Комиссия',
+		submitted: 'Заявка на вывод отправлена',
+		fundPassword: 'Платёжный пароль',
+		emailCode: 'Код из почты',
+		googleCode: 'Код Google',
+		securityVerification: 'Проверка безопасности',
+		recordTitle: 'История выводов',
+		recordEmpty: 'Нет заявок на вывод',
+		confirmCancelApply: 'Отменить заявку на вывод?',
+		withdrawCancelledToast: 'Отменено',
+		withdrawCancelFailedToast: 'Ошибка отмены',
+		statusPending: 'На проверке',
+		statusReleasing: 'В обработке',
+		statusWithdrawFailed: 'Неудачно',
+		statusWithdrawSuccess: 'Выполнено',
+		statusWithdrawCancelled: 'Отменено',
+		typeInternalTransfer: 'Внутренний перевод',
+		typeOnChainWithdraw: 'Вывод в блокчейн',
+		cancelApplyBtn: 'Отменить',
+		initFailed: 'Ошибка инициализации',
+		submitOnChainFailed: 'Ошибка отправки вывода',
+		transferSubmitFailed: 'Ошибка внутреннего перевода',
+		availWithdrawBalance: 'Доступно к выводу:',
+		availTransferBalance: 'Доступно к переводу:',
+		coinLabel: 'Монета',
+		subCoin: 'Субмонета',
+		mainCoinLabel: 'Основная монета',
+		transferMainCoinHint: 'Внутренний перевод только базовыми монетами, не токены TUSDT/EUSDT.',
+		withdrawNetworkLabel: 'Сеть вывода',
+		withdrawAmountUsdt: 'Сумма вывода (USDT)',
+		withdrawAmountCoin: 'Сумма вывода ({coin})',
+		transferAmountUsdt: 'Сумма перевода (USDT)',
+		transferAmountCoin: 'Сумма перевода ({coin})',
+		addressForCoin: 'Адрес кошелька {coin}',
+		expectedArrival: 'Ожидаемое зачисление',
+		minWithdrawRowLabel: 'Мин вывод',
+		internalTransferFeeLabel: 'Комиссия внутреннего перевода',
+		free: 'Бесплатно',
+		minTransferRowLabel: 'Мин перевод',
+		recipientUidLabel: 'UID получателя',
+		recipientUidPlaceholder: 'UID аккаунта получателя',
+		addressForNetwork: 'Адрес USDT-{network}',
+		codePlaceholder6Digits: 'Шестизначный код',
+		googlePlaceholder6: '6 цифр Google-кода',
+		sendVerificationCode: 'Отправить код',
+		confirmWithdrawSubmit: 'Подтвердить вывод',
+		confirmTransferSubmit: 'Подтвердить перевод',
+		codeSentToEmailToast: 'Код отправлен на почту',
+		onchainSubmittedPendingToast: 'Заявка создана, проверяется',
+		transferSubmittedToast: 'Внутренний перевод отправлен',
+		submitFailed: 'Ошибка отправки',
+		detailTitleOnChain: 'Детали вывода в сеть',
+		detailTitleTransfer: 'Детали внутреннего перевода',
+		amountHeroWithdraw: 'Выведенная сумма',
+		amountHeroTransfer: 'Переведённая сумма',
+		stepApplied: 'Отправлена',
+		stepDone: 'Завершена',
+		recipientLabel: 'Получатель',
+		appliedAt: 'Дата создания заявки',
+		finishedAt: 'Дата завершения',
+		cancelApplyFull: 'Отменить заявку',
+		copyBtn: 'Скопировать',
+		bindGoogleFirst: 'Сначала привяжите Google аутентификатор',
+		errFillAddressBeforeCode: 'Заполните адрес перед запросом кода',
+		errFillAmountBeforeCode: 'Укажите сумму перед кодом',
+		errFillUidBeforeCode: 'Введите UID получателя перед кодом',
+		errFillTransferAmtBeforeCode: 'Сумма перевода сначала',
+		errEnterWithdrawAddress: 'Укажите адрес вывода',
+		errEnterWithdrawAmount: 'Введите сумму вывода',
+		errMinWithdrawWithAmt: 'Мин вывод {min} {coin}',
+		errMinWithdrawWithAmtUsdt: 'Мин вывод {min} USDT',
+		errExceedWithdrawBalance: 'Сумма превышает доступный баланс',
+		errEnterFundPassword: 'Укажите платёжный пароль',
+		errEnterEmailCode: 'Код из почты',
+		errEnterGoogleCode: 'Код Google',
+		errEnterRecipientUid: 'UID получателя',
+		errEnterTransferAmount: 'Сумма перевода',
+		errMinTransferWithAmt: 'Мин перевод {min} {coin}',
+		errMinTransferWithAmtUsdt: 'Мин перевод {min} USDT',
+		errExceedTransferBalance: 'Превышен доступный баланс для перевода',
+	},
+	deposit: {
+		title: 'Пополнение',
+		address: 'Адрес пополнения',
+		network: 'Сеть',
+		saveQrCode: 'Сохранить QR-код',
+		addressCopied: 'Адрес скопирован',
+		minDeposit: 'Мин пополнение',
+		arrivals: 'Подтверждения в блокчейне',
+		coin: 'Монета',
+		protocol: 'Сеть / Протокол',
+		subCoin: 'Субмонета',
+		contract: 'Контракт',
+		depositAmount: 'Сумма пополнения',
+		amountPlaceholder: 'Введите сумму',
+		generateOrder: 'Создать ордер',
+		generating: 'Создание…',
+		notice: 'Важно',
+		notice1: 'Создайте ордер перед переводом, используйте указанный адрес и сумму.',
+		notice2: 'Ошибка сети/контракта приводит к безвозвратной потере средств.',
+		notice3: 'После перевода отправьте TxHash для зачисления.',
+		intro: 'Описание',
+		introText: 'Выберите монету и сеть, задайте сумму, получите уникальный адрес, после перевода отправьте хеш транзакции.',
+		newDeposit: '← Новое пополнение',
+		orderInfo: 'Данные ордера',
+		orderNo: '№ ордера',
+		status: 'Статус',
+		coinLabel: 'Монета',
+		networkLabel: 'Сеть',
+		amount: 'Сумма',
+		payAddress: 'Адрес для перевода',
+		payAddressHint: 'Переведите точную сумму по нужной сети на указанный адрес',
+		qrTitle: 'QR для оплаты',
+		qrHint: 'Сканируйте кошельком, не меняйте адрес и сумму',
+		contractAddress: 'Адрес контракта',
+		copy: '⎘ Копировать',
+		copyAddress: 'Скопировать адрес',
+		submitHash: 'Отправить хеш транзакции',
+		submittingHash: 'Отправка…',
+		hashPlaceholder: 'Вставьте TxHash/TxID Tron',
+		orSubmitHash: 'Или отправьте хеш после перевода',
+		hashRequired: 'Укажите хеш транзакции',
+		statusNotSubmittable: 'Хеш невозможно отправить в данном статусе',
+		orderCreated: 'Ордер создан, совершите перевод на адрес',
+		orderFailed: 'Ошибка создания ордера',
+		addressCopy: 'Адрес скопирован',
+		orderNoCopy: 'Номер ордера скопирован',
+		hashSubmitted: 'Хеш отправлен, ожидаем подтверждение сети',
+		hashFailed: 'Ошибка отправки хеша',
+		broadcastSuccess: 'Транзакция отправлена, хеш сохранён',
+		tronBroadcastSuccess: 'Tron-транзакция отправлена, TxID сохранён',
+		noNetwork: 'Нет доступных сетей',
+		noSubCoin: 'Нет субмонет для этой сети',
+		amountRequired: 'Укажите сумму пополнения',
+		amountPositive: 'Сумма больше нуля',
+		submittedHash: 'Отправлен хеш: ',
+		manualDepositTab: 'Ручное пополнение',
+		walletDepositTab: 'Пополнение через кошелёк',
+		walletPayEvm: 'Подключить EVM кошелёк и оплатить',
+		walletPayingEvm: 'Оплата через EVM кошелёк…',
+		walletPayTron: 'Подключить Tron кошелёк и оплатить',
+		walletPayingTron: 'Оплата через Tron кошелёк…',
+		histLink: 'История пополнений',
+		retryBtn: 'Повторить',
+		backWithArrow: '‹ Назад',
+		rechargeStatus0: 'Ожидает оплаты',
+		rechargeStatus1: 'Ожидает подтверждения сети',
+		rechargeStatus2: 'Зачислено',
+		rechargeStatus3: 'Отменено',
+		rechargeStatus4: 'Неудачно',
+		statusUnknown: 'Статус {status}',
+		qrAlt: 'QR адрес пополнения',
+		loadNetworksFailed: 'Ошибка загрузки сетей',
+		wcHintEvmConfigured:
+			'Подключите WalletConnect EVM, проверьте совпадение сети и монеты.',
+		wcHintEvmUnconfigured:
+			'Не задан VITE_WALLETCONNECT_PROJECT_ID, используйте ручной ввод хеша.',
+		wcHintTronConfigured:
+			'WalletConnect Tron подписывает транзакцию, отправьте чистый TxID без 0x.',
+		wcHintTronUnconfigured:
+			'WalletConnect Tron не настроен, пополнение ручное.',
+		wcHintTronManualOnly:
+			'Автопополнение этой сети не поддерживается, ручной ввод хеша.',
+		walletPayFallback: 'Ошибка оплаты EVM кошельком',
+		tronWalletPayFallback: 'Ошибка оплаты Tron кошельком',
+		currentPrefix: 'Текущий:',
+		histEmpty: 'Нет истории пополнений',
+		histOrderNo: '№ ордера',
+		histTx: 'TX:',
+		histLoadMore: 'Загрузить ещё',
+		histLoadedAll: 'Все записи загружены',
+	},
+	broker: {
+		title: 'Кабинет брокера',
+		applyTitle: 'Подать заявку на брокера',
+		myBrokerCode: 'Мой брокер-код',
+		referralCount: 'Приглашённых пользователей',
+		totalCommission: 'Итого комиссия',
+		applyStatus: 'Статус заявки',
+		pending: 'На рассмотрении',
+		approved: 'Одобрено',
+		rejected: 'Отклонено',
+		defaultName: 'Брокер',
+		greeting: 'Привет, {name}',
+		uidLabel: 'UID: {uid}',
+		introBanner: 'Зарабатывайте комиссию со сделок приглашённых, ежедневное зачисление.',
+		statNewToday: 'Новых за сегодня',
+		statTradeToday: 'Торгуют сегодня',
+		statRebateToday: 'Комиссия за сегодня (USDT)',
+		inviteList: 'Список приглашённых',
+		emptyInviteList: 'Нет приглашённых',
+		thAccount: 'Аккаунт',
+		thLevel: 'Уровень',
+		thPerpCopy: 'Бессрочные / Копи',
+		levelBroker: 'Брокер',
+		levelNormal: 'Обычный',
+		editRateTooltip: 'Изменить % комиссии',
+		todayRebate: 'Комиссии за день',
+		emptyTodayRebate: 'Нет комиссий за сегодня',
+		thId: 'ID',
+		rebateUsdt: 'Комиссия (USDT)',
+		teamDetails: 'Детали команды',
+		filterAll: 'Все',
+		filterWeek: 'Последние 7 дней',
+		filterToday: 'Сегодня',
+		filterMonth: 'Этот месяц',
+		teamTotalAssets: 'Общие активы команды',
+		rebateHistory: 'История комиссий',
+		emptyRebateHistory: 'Нет истории комиссий',
+		amountUsdt: 'Сумма (USDT)',
+		loadMore: 'Загрузить ещё',
+		loadingMore: 'Загрузка…',
+		loadedAll: 'Все загружено',
+		editModalTitle: 'Редактировать % комиссии',
+		perpRebateRate: '% комиссии бессрочных фьючерсов',
+		copyRebateRate: '% комиссии копи-трейдинга',
+		editTip: 'Изменения вступают сразу, редактируйте внимательно.',
+		perpRateError: 'Процент фьючерсов целое от 0 до 100',
+		copyRateError: 'Процент копи целое от 0 до 100',
+		setSuccess: 'Сохранено, изменения активны',
+	},
+	help: {
+		title: 'Центр помощи',
+		supportTitle: 'Поддержка',
+		search: 'Поиск',
+		searchPlaceholder: 'Ключевое слово',
+		telegramSupport: 'Поддержка Telegram',
+		quickResponse: 'Быстрый ответ',
+		emailSupport: 'Поддержка по почте',
+		docs: 'Документация',
+		viewFullGuide: 'Открыть полный гайд',
+		detailTitle: 'Детали помощи',
+		backToHelp: 'Вернуться в центр помощи',
+	},
+	invite: {
+		title: 'Пригласить друзей',
+		myCode: 'Мой инвайт-код',
+		copy: 'Скопировать код',
+		copied: 'Код скопирован',
+		share: 'Поделиться ссылкой',
+		shareLink: 'Скопировать ссылку',
+		linkCopied: 'Ссылка скопирована',
+		desc: 'Приглашайте людей и получайте комиссию от их торговых комиссий',
+		totalInvited: 'Всего приглашено',
+		totalReward: 'Итого вознаграждение',
+		noRecord: 'Нет истории приглашений',
+		heroLine1: 'Приглашайте друзей',
+		heroLine2: 'Зарабатывайте комиссию',
+		heroDesc:
+			'Пользователи регистрируются по вашей ссылке, вы получаете процент комиссий их сделок.',
+		myInviteInfo: 'Мои данные приглашения',
+		inviteCodeLabel: 'Инвайт код',
+		inviteLinkShort: 'Ссылка приглашения',
+		qrCodeLabel: 'QR-код',
+		copyShort: 'Копировать',
+		copiedDone: 'Скопировано ✓',
+		qrInviteAlt: 'QR приглашения',
+		scanToRegister: 'Сканируйте для регистрации',
+		rebateRulesTitle: 'Правила начисления комиссий',
+		step1Title: 'Поделитесь кодом',
+		step1Desc: 'Отправьте персональный код или ссылку контактам',
+		step2Title: 'Друг регистрируется',
+		step2Desc: 'Пользователь создаёт аккаунт по вашей ссылке',
+		step3Title: 'Получайте комиссию',
+		step3Desc: 'Начисляется процент с комиссий всех его сделок',
+	},
+	futuresPage: futuresPageByLocale.ru,
+	spot: {
+		tag: 'Спот',
+		side: { buy: 'Купить', sell: 'Продать' },
+		orderType: { limit: 'Лимит', market: 'Рынок' },
+		orderStatus: {
+			pending: 'Открыта',
+			partial: 'Частично исполнена',
+			filled: 'Исполнена',
+			cancelled: 'Отменена',
+			pending_cancel: 'Отменяется',
+			expired: 'Истекла',
+			init: 'Создание',
+		},
+		recordType: {
+			transferIn: 'Зачисление средств',
+			transferOut: 'Списание средств',
+			orderFreeze: 'Блокировка под ордер',
+			cancelUnfreeze: 'Разблокировка после отмены',
+			trade: 'Сделка',
+			fee: 'Комиссия',
+			unfreeze: 'Разблокировка',
+			unknown: 'Тип {type}',
+		},
+		tabs: {
+			currentOrders: 'Активные ордера',
+			historyOrders: 'История ордеров',
+			trades: 'История сделок',
+			funding: 'Движения средств',
+		},
+		table: {
+			pair: 'Пара',
+			side: 'Направление',
+			type: 'Тип',
+			price: 'Цена',
+			orderPrice: 'Цена ордера',
+			amount: 'Кол-во',
+			orderAmount: 'Кол-во по ордеру',
+			filled: 'Исполнено',
+			status: 'Статус',
+			time: 'Дата',
+			action: 'Действие',
+			dealPrice: 'Цена исполнения',
+			dealVolume: 'Объём исполнения',
+			turnover: 'Итоговый объём',
+			recordType: 'Тип движения',
+			quantity: 'Кол-во',
+			coin: 'Монета',
+		}, trade: {
+			buy: 'Купить',
+			sell: 'Продать',
+			limit: 'Лимит',
+			market: 'По рынку',
+			processing: 'Обработка...',
+			buySymbol: 'Купить {symbol}',
+			sellSymbol: 'Продать {symbol}',
+			priceUsdt: 'Цена (USDT)',
+			limitPlaceholder: 'Лимитная цена',
+			marketHint: 'Покупка/продажа по лучшей доступной цене',
+			amountUsdt: 'Сумма (USDT)',
+			amountBase: 'Количество ({base})',
+			available: 'Доступно',
+			transfer: 'Перевести',
+			loginForBalance: 'Войдите для просмотра баланса',
+			spotAssets: 'Баланс спота',
+		},
+		order: { cancel: 'Отменить', cancelAll: 'Отменить все' },
+		empty: {
+			loginLink: 'Войти',
+			loginOrdersPrompt: '{link} для просмотра ордеров',
+			loginViewPrompt: '{link} для просмотра',
+			noOrders: 'Нет активных ордеров',
+			noHistoryOrders: 'Нет истории ордеров',
+			noTrades: 'Нет сделок',
+			noFunding: 'Нет записей',
+		},
+		errors: {
+			symbolNotReady: 'Торговая пара недоступна',
+			invalidAmount: 'Введите корректное количество',
+			invalidPrice: 'Неверная цена',
+			minLimitVolume: 'Мин. количество {min}',
+			minMarketBuy: 'Мин. сумма покупки {min} USDT',
+			minMarketSell: 'Мин. количество продажи {min}',
+			orderSubmitted: 'Ордер отправлен',
+			orderFailed: 'Ошибка отправки ордера',
+			cancelSuccess: 'Ордер отменен',
+			cancelFailed: 'Ошибка отмены ордера',
+			cancelAllSuccess: 'Все ордера отменены',
+			cancelAllPartialFailed: 'Не удалось отменить некоторые ордера',
+		},
+		loadedAll: 'Все загружено',
+		ticker: {
+			change24h: 'Изм. 24ч',
+			high24h: 'Макс. 24ч',
+			low24h: 'Мин. 24ч',
+			turnover24h: 'Объем 24ч',
+		},
+		chartSub: { chart: 'График', coinInfo: 'Информация' },
+		tf: {
+			m1: '1m',
+			m5: '5m',
+			m15: '15m',
+			m30: '30m',
+			h1: '1h',
+			h4: '4h',
+			d1: '1d',
+			w1: '1w',
+			mo1: '1mon',
+			mo3: '3mon'
+		},
+		ohlcv: {
+			spotLabel: 'Спот',
+			open: 'Откр.',
+			high: 'Макс.',
+			low: 'Мин.',
+			close: 'Закр.',
+			volume: 'Объем',
+			changePct: 'Изм %',
+		},
+		draw: {
+			cursor: 'Курсор',
+			trend: 'Линия тренда',
+			hline: 'Горизонталь',
+			ray: 'Луч',
+			channel: 'Канал',
+			fib: 'Фибоначчи',
+			text: 'Текст',
+			clearAll: 'Очистить все',
+			zoomOut: 'Уменьшить',
+		},
+		mobileTab: { chart: 'Рынок', trade: 'Торговать' },
+		pair: {
+			search: 'Поиск',
+			loading: 'Загрузка…',
+			noMatch: 'Нет совпадений',
+			retryLater: ', повторите позже'
+		},
+		book: {
+			waiting: 'Ожидание данных…',
+			orderbook: 'Стакан ордеров',
+			trades: 'Сделки',
+			priceUsdt: 'Цена (USDT)',
+			amountBase: 'Количество ({base})',
+			total: 'Итого',
+			buyRatio: 'Покупка {n}%',
+			sellRatio: '{n}% Продажа',
+			price: 'Цена',
+			amount: 'Количество',
+			time: 'Время',
+			pricePrecision: 'Точность цены'
+		},
+		coinInfo: {
+			marketCap: 'Капитализация',
+			circulating: 'Обращающееся предлож.',
+			issuePrice: 'Цена выпуска',
+			ath: 'Ист. максимум',
+			athDate: 'Дата максимума',
+			whitepaper: 'Whitepaper',
+			empty: 'Нет данных о монете',
+			reload: 'Обновить'
+		},
+		transferModal: {
+			title: 'Перевод',
+			selectCoin: 'Монета',
+			amount: 'Количество',
+			amountPlaceholder: 'Введите сумму',
+			availableUsdt: 'Доступно USDT:',
+			availableCoin: 'Доступно {coin}:',
+			transferring: 'Перевод…',
+			invalidAmount: 'Введите корректную сумму',
+			insufficientBalance: 'Сумма превышает доступный баланс',
+			transferFailed: 'Ошибка перевода, повторите попытку'
+		}
+	}
+}

+ 1061 - 0
code/src/locales/tr.ts

@@ -0,0 +1,1061 @@
+import { futuresPageByLocale } from './futuresPage.i18n'
+import { financePageByLocale } from './financePage.i18n'
+
+export default {
+  nav: {
+    home: 'Anasayfa',
+    market: 'Piyasa',
+    spot: 'Spot',
+    futures: 'Futures',
+    copyTrade: 'Kopya İşlem',
+    finance: 'Finans',
+    idoPresale: 'IDO Ön Satış',
+    claimAirdrop: 'Airdrop Talep Et',
+    announcements: 'Duyurular',
+    download: 'İndir',
+  },
+  lang: {
+    title: 'Dil',
+    zhCN: '简体中文',
+    zhTW: '繁體中文',
+    en: 'English',
+    ko: '한국어',
+    ja: '日本語',
+    hi: 'हिन्दी',
+    id: 'Bahasa Indonesia',
+    es: 'Español',
+    ru: 'Русский',
+    pt: 'Português',
+    de: 'Deutsch',
+    fr: 'Français',
+    tr: 'Türkçe',
+    vi: 'Tiếng Việt'
+  },
+  header: {
+    login: 'Giriş',
+    register: 'Kayıt',
+    account: 'Hesabım',
+    assets: 'Varlıklarım',
+    security: 'Güvenlik',
+    broker: 'Broker',
+    logout: 'Çıkış',
+    logoutShort: 'Çıkış',
+    downloadTitle: 'Uygulama İndir',
+    brokerApplyTitle: 'Broker Başvurusu',
+    brokerApplyDesc: 'Broker değilsiniz. Başvurunuz gönderilecek.',
+    cancel: 'İptal',
+    applyNow: 'Şimdi Başvur',
+    viewApplyList: 'Başvuruyu Gör',
+    submitting: 'Gönderiliyor…',
+    menu: 'Menü',
+  },
+  common: {
+    loading: 'Yükleniyor…',
+    retry: 'Tekrar Dene',
+    cancel: 'İptal',
+    confirm: 'Onayla',
+    submit: 'Gönder',
+    save: 'Kaydet',
+    send: 'Gönder',
+    back: 'Geri',
+    next: 'İleri',
+    done: 'Tamam',
+    noData: 'Veri Yok',
+    noRecord: 'Kayıt Yok',
+    search: 'Ara',
+    all: 'Tümü',
+    max: 'Maks',
+    copied: 'Kopyalandı',
+    networkError: 'Ağ hatası, tekrar deneyin',
+    loadFailed: 'Yükleme başarısız',
+    operationFailed: 'İşlem başarısız',
+    saveSuccess: 'Kaydedildi',
+    more: 'Daha Fazla',
+    perpetual: 'Sürekli',
+    set: 'Ayarlandı',
+    notSet: 'Ayarlanmadı',
+    change: 'Değiştir',
+    bind: 'Bağla',
+    unbind: 'Kaldır',
+    on: 'Açık',
+    off: 'Kapalı',
+    status: 'Durum',
+    time: 'Zaman',
+    amount: 'Tutar',
+    type: 'Tür',
+    coin: 'Coin',
+    from: 'Kimden',
+    to: 'Kime',
+    close: 'Kapat',
+    contactService: 'Destekle İletişim',
+  },
+  home: {
+    heroTitle: 'Güvenli, hızlı ve küresel dijital varlık platformu',
+    heroDesc: 'iBit güvenli, şeffaf ve profesyonel hizmetler sunar.',
+    register: 'Kayıt Ol',
+    viewMarket: 'Piyasayı Gör',
+    downloadApp: 'Uygulama İndir',
+    coreAdvantages: 'Avantajlar',
+    assetSafetyTitle: 'Varlık Güvenliği',
+    assetSafetyDesc: 'Soğuk sıcak cüzdan, çoklu imza, 24/7 gözetim.',
+    highPerfTitle: 'Yüksek Performans',
+    highPerfDesc: 'Özel motor, milisaniye hızlı işlem.',
+    globalComplianceTitle: 'Küresel Uyumluluk',
+    globalComplianceDesc: 'Uluslararası kurallara uygunluk.',
+    transparentFeeTitle: 'Şeffaf Ücretler',
+    transparentFeeDesc: 'Gizli ücret yok.',
+    aboutUs: 'Hakkımızda',
+    aboutDesc: 'iBit küresel bir dijital varlık platformudur.',
+    foundedYear: '2023 yılında kuruldu',
+    headquarters: 'Dubai merkezli, ABD, Kanada, Avustralya lisanslı',
+    ourVision: 'Vizyonumuz',
+    visionSubtitle: 'Güvenilir bir altyapı oluşturmak',
+    ecoTitle: 'Ekosistem',
+    ecoDesc: 'Yeni bir kripto ekosistemi',
+    missionTitle: 'Misyon',
+    missionDesc: 'Dijital değerlerin akışını sağlamak',
+    purposeTitle: 'Amaç',
+    purposeDesc: 'Kullanıcıların varlıklarını yönetmesi',
+    heroImageAlt: 'iBit Platformu',
+    aboutImageAlt: 'Hakkımızda',
+  },
+  market: {
+    title: 'Anlık Piyasa',
+    desc: 'Fiyatlar, hacimler ve değişimler anlık',
+    hot: 'Popüler',
+    topVolume: 'Hacim',
+    gainers: 'Yükselenler',
+    losers: 'Düşenler',
+    perpetual: 'Sürekli',
+    name: 'Ad',
+    latestPrice: 'Son Fiyat',
+    change24h: '24s Değişim',
+    turnover: 'Hacim',
+    searchPair: 'Çift Ara',
+    searchMarket: 'Coin, çift, future ara',
+    price: 'Fiyat',
+    change24hShort: '24s Değişim',
+    high24h: '24s Yüksek',
+    low24h: '24s Düşük',
+    volume24hLabel: '24s Hacim',
+  },
+  auth: {
+    loginTitle: 'Giriş',
+    emailLogin: 'E-posta ile Giriş',
+    emailPlaceholder: 'E-posta girin',
+    password: 'Şifre',
+    passwordPlaceholder: 'Şifre girin',
+    forgotPassword: 'Şifremi Unuttum',
+    loginBtn: 'Giriş Yap',
+    noAccount: 'Hesabınız yok mu?',
+    registerNow: 'Kayıt Ol',
+    verifyTitle: 'Doğrulama Kodu',
+    codeSentDesc: 'Kod {email} adresine gönderildi',
+    codeSendDesc: 'Kod göndermek için tıklayın',
+    countdownResend: '{n}s sonra tekrar gönder',
+    resendCode: 'Kodu Tekrar Gönder',
+    confirmBtn: 'Onayla',
+    sendCode: 'Kod Gönder',
+    forgotVerify: 'Doğrulama yöntemi unutuldu mu?',
+    loginSuccess: 'Giriş başarılı',
+    codeSentAgain: 'Kod tekrar gönderildi',
+    registerTitle: 'Kayıt',
+    emailRegister: 'E-posta ile Kayıt',
+    inviteCodeLabel: 'Davet Kodu (isteğe bağlı)',
+    inviteCodePlaceholder: 'Davet kodunu girin',
+    hasAccount: 'Zaten hesabınız var mı?',
+    loginNow: 'Giriş Yap',
+    verifyPageTitle: 'Güvenlik Doğrulaması',
+    emailVerifyLabel: 'E-posta Doğrulama',
+    codePlaceholder: 'Kodu girin',
+    sendBtn: 'Gönder',
+    passwordTitle: 'Şifre Oluştur',
+    backBtn: '‹ Geri',
+    inputPasswordLabel: 'Şifre',
+    confirmPasswordLabel: 'Şifreyi Onayla',
+    confirmPasswordPlaceholder: 'Şifreyi tekrar girin',
+    doneBtn: 'Tamam',
+    resetSuccess: 'Şifre sıfırlandı',
+    registerSuccess: 'Kayıt başarılı',
+    welcomeJoin: 'iBit’e Hoş Geldiniz',
+    loginNowBtn: 'Giriş Yap',
+    forgotPasswordTitle: 'Şifre Sıfırlama',
+    emailLabel: 'E-posta',
+    emailRegisteredPlaceholder: 'Kayıtlı e-posta',
+    codeSentToast: 'Kod gönderildi',
+  },
+  error: {
+    emailRequired: 'E-posta gerekli',
+    emailInvalid: 'Geçersiz e-posta',
+    passwordRequired: 'Şifre gerekli',
+    code6Required: '6 haneli kod gerekli',
+    codeRequired: 'Kod gerekli',
+    loginFailed: 'E-posta veya şifre hatalı',
+    networkError: 'Ağ hatası',
+    emailAlreadyRegistered: 'E-posta zaten kayıtlı',
+    confirmPasswordRequired: 'Şifre onayı gerekli',
+    passwordMismatch: 'Şifreler eşleşmiyor',
+    loadFailed: 'Yükleme başarısız',
+    refreshFailed: 'Yenileme başarısız',
+    statusUpdated: 'Durum güncellendi',
+    currentPasswordRequired: 'Mevcut şifre gerekli',
+    sixDigitCode: '6 haneli e-posta kodu',
+    sixDigitGoogleCode: '6 haneli Google kodu',
+    sendFailed: 'Gönderme başarısız',
+    operationFailed: 'İşlem başarısız',
+  },
+  security: {
+    title: 'Güvenlik Ayarları',
+    back: '‹ Geri',
+    warningBanner: 'E-posta, Google Auth ve fon şifresi ayarlayın',
+    accountSecurity: 'Hesap Güvenliği',
+    loginPassword: 'Giriş Şifresi',
+    loginPasswordDesc: 'Düzenli değiştirin',
+    emailVerify: 'E-posta Bağlama',
+    emailVerifyDesc: 'Hesap kurtarma için bağlayın',
+    googleAuth: 'Google Doğrulayıcı',
+    googleAuthDesc: 'Güvenliği artırın',
+    fundPassword: 'Fon Şifresi',
+    fundPasswordDesc: 'Para çekme ve transfer için',
+    set: 'Ayarlandı',
+    notSet: 'Ayarlanmadı',
+    change: 'Değiştir',
+    bind: 'Bağla',
+    set2: 'Ayarla',
+    statusUpdated: 'Güncellendi',
+    loadFailed: 'Yükleme başarısız',
+    refreshFailed: 'Yenileme başarısız',
+    bound: 'Bağlı',
+    notBound: 'Bağlı Değil',
+    refresh: 'Yenile',
+    googleHelpTitle: 'Google Auth Yardım',
+    googleHelpDesc: 'Sorun olursa destekle iletişime geçin',
+    changeLoginPassword: 'Giriş Şifresini Değiştir',
+    changePasswordHint: 'Yeni şifre kullanın',
+    currentPassword: 'Mevcut Şifre',
+    newPassword: 'Yeni Şifre',
+    confirmNewPassword: 'Yeni Şifreyi Onayla',
+    emailCode: 'E-posta Kodu',
+    sendCode: 'Gönder',
+    codeSent: 'Kod gönderildi',
+    changeSuccess: 'Şifre değiştirildi',
+    confirmChange: 'Onayla',
+    submitting: 'Gönderiliyor…',
+    setFundPassword: 'Fon Şifresi Ayarla',
+    resetFundPassword: 'Fon Şifresini Sıfırla',
+    fundPasswordHint: 'Gizli tutun',
+    fundPasswordResetHint: 'Kod e-posta ile gönderilecek',
+    newFundPassword: 'Yeni Fon Şifresi',
+    confirmFundPassword: 'Onayla',
+    fundPasswordUpdated: 'Fon şifresi güncellendi',
+    fundPasswordSet: 'Fon şifresi ayarlandı',
+    bindGoogle: 'Google Auth Bağla',
+    boundEmail: 'Bağlı e-posta :',
+    googleQrStep: '1. QR tara veya anahtar gir',
+    googleCodeStep: '2. 6 haneli Google kodu',
+    emailCodeStep: '3. E-posta kodu',
+    copyKey: 'Anahtarı Kopyala',
+    keyCopied: 'Anahtar kopyalandı',
+    copyFailed: 'Kopyalama başarısız',
+    clipboardDeniedMac: 'Pano izni verin',
+    clipboardDenied: 'Pano erişimi engellendi',
+    invalidSecret: 'Geçersiz anahtar',
+    googleCodeRequired: 'Google kodu gerekli',
+    emailCodeSent: 'E-posta kodu gönderildi',
+    bindSuccess: 'Bağlandı',
+    confirmBind: 'Bağlamayı Onayla',
+    googleAuthLead: 'Google Authenticator indirin',
+    googleAuthTip1: 'Giriş ve fon işlemlerinde kod gerekli',
+    googleAuthTip2: 'Cihazınızı güvenli tutun',
+    googleAuthStart: 'Kurulum tamam, bağla',
+  },
+  assets: {
+    title: 'Varlıklarım',
+    totalAssets: 'Toplam Varlıklar',
+    todayPnl: 'Bugünün Kar/Zararı',
+    deposit: 'Para Yatır',
+    withdraw: 'Para Çek',
+    transfer: 'Transfer',
+    history: 'Geçmiş',
+    spot: 'Spot',
+    futures: 'Futures',
+    copyTrade: 'Kopya İşlem',
+    fund: 'Çekilebilir',
+    walletBalance: 'Cüzdan Bakiyesi',
+    unrealizedPnl: 'Gerçekleşmemiş Kar/Zarar',
+    positions: 'Pozisyonlar',
+    noPositions: 'Pozisyon yok',
+    assetBalance: 'Varlık Bakiyesi',
+    unavailable: 'Kullanılamaz',
+    depositCoin: 'Yatır',
+    withdrawCoin: 'Çek',
+    depositRecord: 'Yatırma Geçmişi',
+    withdrawRecord: 'Çekme Geçmişi',
+    transferRecord: 'Transfer Geçmişi',
+    assetRecord: 'Hareketler',
+    overview: 'Genel Bakış',
+    spotAccount: 'Spot Hesabı',
+    swapAccount: 'Futures Hesabı',
+    followAccount: 'Kopya Hesabı',
+    fundAccount: 'Çekilebilir Hesap',
+    spotTradingAccount: 'Spot İşlem Hesabı',
+    ibitAccount: 'iBit Hesabı',
+    lockedStakingAccount: 'Kilitli Staking',
+    stakingTab: 'Staking',
+    ibitUnit: 'iBit',
+    releaseTotal: 'Toplam Çıkarılan',
+    totalLockedBalance: 'Toplam Kilitli (iBit)',
+    myStakingOrders: 'Staking Emirlerim',
+    stakingOrderNo: 'Emir No',
+    purchaseQty: 'Satın Adet',
+    stakingTotal: 'Toplam Staking',
+    released: 'Çıkarıldı',
+    pendingRelease: 'Bekliyor',
+    startTime: 'Başlangıç',
+    subscribing: 'Abonelikte',
+    releasing: 'Çıkarılıyor',
+    completed: 'Tamamlandı',
+    pullToRefresh: 'Yenilemek için çekin',
+    releaseToRefresh: 'Yenilemek için bırakın',
+    refreshing: 'Yenileniyor…',
+    totalAccount: 'Hesap Toplamı',
+    showBalance: 'Bakiyeyi Göster',
+    hideBalance: 'Bakiyeyi Gizle',
+    followBalance: 'Kopya Bakiyesi',
+    accountTransfer: 'Hesap Transferi',
+    transferFrom: 'Gönderen',
+    transferTo: 'Alan',
+    available: 'Mevcut',
+    freeTransfer: 'Ücretsiz anında transfer',
+    followPositions: 'Kopya Pozisyonları',
+    noFollowPositions: 'Pozisyon yok',
+    followLoading: 'Yükleniyor…',
+    long: 'Long',
+    short: 'Short',
+    trader: 'Tüccar',
+    openPrice: 'Açılış Fiyatı',
+    currentPrice: 'Anlık Fiyat',
+    amountLever: 'Miktar · Kaldıraç',
+    closing: 'Kapatılıyor…',
+    closePosition: 'Pozisyonu Kapat',
+    noLossPosition: 'Manuel kapatılamaz',
+    invalidPosition: 'Pozisyon geçersiz',
+    confirmClose: 'Kapatmak istediğinize emin misiniz?',
+    closeSuccess: 'Kapatıldı',
+    closeFailed: 'Kapatma başarısız',
+    sameAccountError: 'Aynı hesap',
+    amountError: 'Geçersiz tutar',
+    insufficientBalance: 'Yetersiz bakiye',
+    transferSuccess: 'Transfer başarılı',
+    transferFailed: 'Transfer başarısız',
+    goCopyTrade: 'Kopya İşlem',
+    goSpotTrade: 'İşlem Yap',
+    hideZeroBalance: 'Sıfır bakiyeyi gizle',
+    depositRecord2: 'Yatırma Geçmişi',
+    amountUsdt: 'Tutar (USDT)',
+    amountCoin: 'Tutar ({coin})',
+    availableCoin: 'Mevcut : {available} {coin}',
+    transferring: 'Transfer ediliyor…',
+    confirmTransferBtn: 'Transferi Onayla',
+    statementPageTitle: 'Varlık Ekstresi',
+    statementStartDate: 'Başlangıç',
+    statementEndDate: 'Bitiş',
+    statementReset: 'Sıfırla',
+    statementSearch: 'Ara',
+    statementSearching: 'Aranıyor…',
+    statementEmpty: 'Kaydedilen hareket yok',
+    statementDirectionOpen: 'Açık',
+    statementDirectionClose: 'Kapalı',
+    statementTypes: {
+      '43': 'Spot Kazanç',
+      '44': 'Spot Zarar',
+      '45': 'Spot Ücret',
+      '46': 'Spot İade',
+      '48': 'Spot İşlem',
+      '49': 'Staking',
+      '50': 'Staking Çıkarma',
+      '51': 'Airdrop Ödül',
+      '52': 'Staking Yatırma',
+      '53': 'Staking Çekme',
+    },
+  },
+  finance: { ...financePageByLocale.tr },
+  copyTrade: {
+    comprehensive: 'Genel',
+    winRate14d: '14g Kazanç Oranı',
+    profit14d: '14g Getiri',
+    normal: 'Normal Kopya',
+    lossless: 'Zararsız Kopya',
+    favorite: 'Favoriler',
+    topTraders: 'En İyi Tüccarlar',
+    twoWeekReturn: '2 Hafta Getiri',
+    followers: 'Takipçiler',
+    days: 'Gün',
+    applyTrader: 'Tüccar Ol',
+    myFollowing: 'Takip Ettiklerim',
+    myTrading: 'İşlemlerim',
+    traderIdentity: 'Tüccar',
+    myFollowingAccount: 'Kopya Hesabım',
+    leadManage: 'Tüccar Yönetimi',
+    applyLead: 'Başvur',
+    pageTitle: 'Kopya İşlem',
+    heroDesc: 'Tek tıkla uzmanları takip edin',
+    traderOverview: 'Tüccar Özeti',
+    copyFollowersCount: 'Takipçi Sayısı',
+    cumulativeTradingDays: 'Toplam İşlem Günü',
+    cumulativeLeadProfit: 'Toplam Kopya Kazanç',
+    goLeadManage: 'Yönetim →',
+    copyWalletTitle: 'Kopya Hesabı Bakiyesi',
+    cumulativePnlUsdt: 'Toplam Kazanç (USDT)',
+    availableUsdt: 'Mevcut (USDT)',
+    unrealizedPnlUsdtShort: 'Gerçekleşmemiş (USDT)',
+    followingTradersSummary: '{n} tüccar takip ediyorsunuz',
+    newBadge: 'YENİ',
+    losslessShieldTitle: 'Zararsız Korumalı',
+    losslessShieldDesc: ' : Zarar durumunda telafi edilir',
+    learnHowItWorks: 'Detaylar →',
+    myStarredTraders: 'Favori Tüccarlar',
+    traderTotalCount: '{count} tüccar',
+    filterLoadingShort: 'Yükleniyor…',
+    loadTraderListFailed: 'Liste yüklenemedi',
+    loadFavoritesFailed: 'Favoriler yüklenemedi',
+    favoritedToast: 'Favorilere eklendi',
+    defaultTraderName: 'Tüccar',
+    levelJunior: 'Başlangıç',
+    badgeLossless: 'Zararsız',
+    metaDaysTrades: '{days}g · {trades} işlem',
+    followAction: 'Takip Et',
+    profitUsdtBracket: 'Kazanç (USDT)',
+    profitShareRate: 'Kar Payı %',
+    trend14Days: '14 Gün Trend',
+    emptyFavoriteHint: 'Favori yok',
+    emptyTraderListDefault: 'Tüccar yok',
+    emptyTraderListLossless: 'Zararsız tüccar yok',
+    browseTraders: 'Tüccarları Keşfet',
+    losslessInfoHeading: 'Zararsız Kopya Özelliği',
+    llInfoCard1Title: 'Koşullu Telafi',
+    llInfoCard1Body: 'Kurallara uygunsa telafi edilir',
+    llInfoCard2Title: 'Sınırlı Sorumluluk',
+    llInfoCard2Body: 'Belirlenen limit dahilinde',
+    llInfoCard3Title: 'Risk Kontrolü',
+    llInfoCard3Body: 'Otomatik koruma',
+    llInfoCard4Title: 'Risk Uyarısı',
+    llInfoCard4Body: 'Kripto yüksek riskli',
+    unitYi: 'Milyar',
+    unitWan: 'Bin',
+    followingPlaza: 'Kopya Plaza',
+    followingWalletFail: 'Bakiye yüklenemedi',
+    followingTabPositions: 'Pozisyonlar',
+    followingTabTraders: 'Tüccarlar',
+    followingTabHistory: 'Geçmiş',
+    followingHistEmpty: 'Geçmiş yok',
+    followingNoTradersYet: 'Henüz takip yok',
+    followingGoPlaza: 'Plazaya Git',
+    confirmStopFollow: '{name} takibi bırakmak istiyor musunuz?',
+    noLossManualCloseTooltip: 'Manuel kapatılamaz',
+    followingThContract: 'Sözleşme',
+    followingThDirection: 'Yön',
+    followingThOpenPrice: 'Açılış',
+    followingThCurPrice: 'Anlık',
+    followingThQty: 'Miktar',
+    followingThLever: 'Kaldıraç',
+    followingThUnrealized: 'Gerçekleşmemiş',
+    followingThOpenTime: 'Zaman',
+    followingThAction: 'İşlem',
+    followingOpenLong: 'Long Aç',
+    followingOpenShort: 'Short Aç',
+    closeQtyWithBase: 'Kapanış Miktarı ({base})',
+    followingRealizedPnlUsdt: 'Gerçekleşen (USDT)',
+    followingYieldRate: 'Getiri',
+    followingAvgOpenUsdt: 'Ort. Açılış (USDT)',
+    followingAvgCloseUsdt: 'Ort. Kapanış (USDT)',
+    marginCrossMode: 'Çapraz',
+    marginIsolatedMode: 'İzole',
+    stopFollowing: 'Takibi Bırak',
+    lead: {
+      pageTitle: 'Benim İşlemlerim',
+      navMyFollowing: 'Takip Ettiklerim →',
+      becomeTitle: 'Tüccar Ol',
+      becomeDesc: 'Koşulları sağlayın',
+      condMinBalance: 'Futures hesabı ≥ {min} USDT',
+      goTransfer: 'Transfer Yap',
+      condNotFollowing: 'Tüccar takip etmeyin',
+      agreePrefix: 'Kabul ediyorum',
+      agreeLink: 'Tüccar Sözleşmesi',
+      submitting: 'Gönderiliyor…',
+      submitApply: 'Başvuruyu Gönder',
+      applyFailed: 'Başvuru başarısız',
+      reviewingTitle: 'İncelemede',
+      reviewingDesc: 'Başvurunuz inceleniyor',
+      agreementTitle: 'Tüccar Sözleşmesi',
+      agreementEmpty: 'Sözleşme yüklenemedi',
+      leadingBadge: 'Aktif',
+      noBio: 'Biyografi yok',
+      cancelLeadProcessing: 'İşleniyor…',
+      cancelLeadApply: 'Tüccarlığı Bırak',
+      confirmCancelLead: 'Bırakmak istiyor musunuz?',
+      operationFailed: 'İşlem başarısız',
+      statFollowers: 'Anlık Takipçi',
+      statRegisterDays: 'Üyelik Günü',
+      statCapital: 'Sermaye',
+      statCumulativeProfit: 'Toplam Kazanç (USDT)',
+      statTotalFollowers: 'Toplam Takipçi',
+      statTradingDays: 'Toplam İşlem Günü',
+      tabFollowers: 'Takipçiler ({n})',
+      tabCurrent: 'Açık İşlemler',
+      tabHistory: 'Geçmiş',
+      tabSettings: 'Ayarlar',
+      emptyFollowers: 'Takipçi yok',
+      removeFollower: 'Kaldır',
+      followerEquity: 'Hesap Bakiyesi (USDT)',
+      followerTotalShare: 'Toplam Kar Payı (USDT)',
+      followerLastShare: 'Son Pay',
+      followerSince: 'Takip Süresi : {time}',
+      emptyCurrent: 'Açık işlem yok',
+      emptyHistory: 'Geçmiş yok',
+      settingsBasic: 'Temel Bilgiler',
+      avatar: 'Avatar',
+      nickname: 'Takma Ad',
+      nicknamePlaceholder: 'Maks 10 karakter',
+      bio: 'Biyografi',
+      bioPlaceholder: 'Maks 25 karakter',
+      saveSuccess: 'Kaydedildi',
+      saveBasicProcessing: 'Kaydediliyor…',
+      saveBasic: 'Kaydet',
+      leadSymbols: 'İşlem Sözleşmeleri',
+      saveProcessing: 'Kaydediliyor…',
+      save: 'Kaydet',
+      tagsTitle: 'Etiketler (max 4)',
+      confirmRemoveFollower: 'Takipçiyi kaldırmak istiyor musunuz?',
+      saveFailed: 'Kaydetme başarısız',
+      uploadFailed: 'Yükleme başarısız',
+      defaultFollower: 'Takipçi',
+      defaultUser: 'Kullanıcı',
+    },
+  },
+  footer: {
+    aboutSection: 'Hakkımızda',
+    companyIntro: 'Şirket Tanıtımı',
+    brand: 'Marka',
+    community: 'Topluluk',
+    riskWarning: 'Risk Uyarısı',
+    terms: 'Kullanım Şartları',
+    privacy: 'Gizlilik',
+    futuresTrade: 'Futures',
+    spotTrade: 'Spot',
+    losslessCopy: 'Zararsız Kopya',
+    beginnerGuide: 'Yeni Başlayanlar',
+    helpCenter: 'Yardım Merkezi',
+    glossary: 'Sözlük',
+    compliance: 'Uyum',
+    products: 'Ürünler',
+    resources: 'Kaynaklar',
+  },
+  announcements: {
+    title: 'Sistem Duyuruları',
+    noAnnouncements: 'Duyuru yok',
+    back: 'Geri',
+    backToList: 'Listeye Dön',
+    loadMore: 'Daha Fazla Yükle',
+  },
+  download: {
+    title: 'iBit İndir',
+    heroTitle: 'Anlık Piyasa\nHer Yerde İşlem',
+    desc: 'Piyasayı takip edin, işlem yapın',
+    appDesc: 'Tüm özellikler mobil uygulamada',
+    latestVersion: 'Son Sürüm',
+    updateNotes: 'Güncelleme Notları',
+    ios: 'iOS İndir',
+    iosNotReleased: 'iOS henüz yayınlanmadı',
+    android: 'Android İndir',
+    androidNotReleased: 'Android henüz yayınlanmadı',
+    scanToDownload: 'İndirmek için tara',
+  },
+  account: {
+    title: 'Hesabım',
+    uid: 'UID',
+    email: 'E-posta',
+    profile: 'Profil',
+    security: 'Güvenlik',
+    securityDesc: 'Şifreler, doğrulama',
+    assets: 'Varlıklar',
+    assetsDesc: 'Yatır, çek, transfer',
+    inviteCode: 'Davet Kodu',
+    inviteFriends: 'Arkadaşları Davet Et',
+    inviteDesc: 'Komisyon kazan',
+    helpSupport: 'Yardım',
+    helpDesc: 'SSS ve destek',
+    broker: 'Broker',
+    brokerDesc: 'Komisyon, ekip',
+    logout: 'Çıkış Yap',
+    securityScore: 'Güvenlik Skoru',
+    twofa: 'Google Doğrulama',
+    supportTitle: 'Destek',
+    supportHours: '7/24 Destek',
+    onlineSupport: 'Çevrimiçi Chat',
+    instantChat: 'Anlık Mesaj',
+    telegramSupport: 'Telegram',
+    emailSupport: 'E-posta',
+    applySubmitted: 'Başvuru gönderildi',
+    scoreHigh: 'Mükemmel',
+    scoreMedium: 'Orta',
+    scoreLow: 'Düşük',
+  },
+  transfer: {
+    title: 'Transfer',
+    amount: 'Transfer Tutarı',
+    amountPlaceholder: 'Tutar girin',
+    maxTransferable: 'Maks Transfer',
+    success: 'Transfer başarılı',
+    selectCoin: 'Coin Seç',
+    enterAmount: 'Tutar girin',
+    histEmpty: 'Transfer geçmişi yok',
+    balanceLabel: 'Bakiye',
+  },
+  withdraw: {
+    title: 'Para Çek',
+    network: 'Ağ',
+    networkTip: 'Ağ doğru olmalı, aksi takdirde fon kaybolur',
+    address: 'Çekim Adresi',
+    addressPlaceholder: 'Adres girin',
+    amount: 'Tutar',
+    received: 'Alınan',
+    fee: 'Ücret',
+    submitted: 'Çekim gönderildi',
+    fundPassword: 'Fon Şifresi',
+    emailCode: 'E-posta Kodu',
+    googleCode: 'Google Kodu',
+    securityVerification: 'Güvenlik Doğrulama',
+    recordTitle: 'Çekim Geçmişi',
+    recordEmpty: 'Çekim yok',
+    confirmCancelApply: 'İptal etmek istiyor musunuz?',
+    withdrawCancelledToast: 'İptal edildi',
+    withdrawCancelFailedToast: 'İptal başarısız',
+    statusPending: 'Bekliyor',
+    statusReleasing: 'Gönderiliyor',
+    statusWithdrawFailed: 'Başarısız',
+    statusWithdrawSuccess: 'Başarılı',
+    statusWithdrawCancelled: 'İptal Edildi',
+    typeInternalTransfer: 'İç Transfer',
+    typeOnChainWithdraw: 'Zincir Çekimi',
+    cancelApplyBtn: 'İptal',
+    initFailed: 'Başlatma başarısız',
+    submitOnChainFailed: 'Çekim başarısız',
+    transferSubmitFailed: 'Transfer başarısız',
+    availWithdrawBalance: 'Çekilebilir :',
+    availTransferBalance: 'Transfer edilebilir :',
+    coinLabel: 'Coin',
+    subCoin: 'Alt Coin',
+    mainCoinLabel: 'Ana Coin',
+    transferMainCoinHint: 'İç transfer sadece ana coin',
+    withdrawNetworkLabel: 'Çekim Ağı',
+    withdrawAmountUsdt: 'Tutar (USDT)',
+    withdrawAmountCoin: 'Tutar ({coin})',
+    transferAmountUsdt: 'Tutar (USDT)',
+    transferAmountCoin: 'Tutar ({coin})',
+    addressForCoin: '{coin} Adresi',
+    expectedArrival: 'Tahmini Varış',
+    minWithdrawRowLabel: 'Asgari Çekim',
+    internalTransferFeeLabel: 'İç Transfer Ücreti',
+    free: 'Ücretsiz',
+    minTransferRowLabel: 'Asgari Transfer',
+    recipientUidLabel: 'Alıcı UID',
+    recipientUidPlaceholder: 'UID girin',
+    addressForNetwork: 'USDT-{network} Adresi',
+    codePlaceholder6Digits: '6 haneli kod',
+    googlePlaceholder6: '6 haneli Google kodu',
+    sendVerificationCode: 'Kod Gönder',
+    confirmWithdrawSubmit: 'Çekimi Onayla',
+    confirmTransferSubmit: 'Transferi Onayla',
+    codeSentToEmailToast: 'Kod gönderildi',
+    onchainSubmittedPendingToast: 'Çekim gönderildi',
+    transferSubmittedToast: 'Transfer gönderildi',
+    submitFailed: 'Gönderme başarısız',
+    detailTitleOnChain: 'Zincir Çekim Detay',
+    detailTitleTransfer: 'İç Transfer Detay',
+    amountHeroWithdraw: 'Çekim Tutarı',
+    amountHeroTransfer: 'Transfer Tutarı',
+    stepApplied: 'Başvuruldu',
+    stepDone: 'Tamamlandı',
+    recipientLabel: 'Alıcı',
+    appliedAt: 'Başvuru Tarihi',
+    finishedAt: 'Sonuç Tarihi',
+    cancelApplyFull: 'Başvuruyu İptal Et',
+    copyBtn: 'Kopyala',
+    bindGoogleFirst: 'Önce Google Auth bağla',
+    errFillAddressBeforeCode: 'Önce adres girin',
+    errFillAmountBeforeCode: 'Önce tutar girin',
+    errFillUidBeforeCode: 'Önce UID girin',
+    errFillTransferAmtBeforeCode: 'Önce transfer tutarı girin',
+    errEnterWithdrawAddress: 'Adres gerekli',
+    errEnterWithdrawAmount: 'Tutar gerekli',
+    errMinWithdrawWithAmt: 'Asgari {min} {coin}',
+    errMinWithdrawWithAmtUsdt: 'Asgari {min} USDT',
+    errExceedWithdrawBalance: 'Yetersiz bakiye',
+    errEnterFundPassword: 'Fon şifresi gerekli',
+    errEnterEmailCode: 'E-posta kodu gerekli',
+    errEnterGoogleCode: 'Google kodu gerekli',
+    errEnterRecipientUid: 'UID gerekli',
+    errEnterTransferAmount: 'Transfer tutarı gerekli',
+    errMinTransferWithAmt: 'Asgari {min} {coin}',
+    errMinTransferWithAmtUsdt: 'Asgari {min} USDT',
+    errExceedTransferBalance: 'Yetersiz bakiye',
+  },
+  deposit: {
+    title: 'Para Yatır',
+    address: 'Yatırma Adresi',
+    network: 'Ağ',
+    saveQrCode: 'QR Kaydet',
+    addressCopied: 'Adres kopyalandı',
+    minDeposit: 'Asgari Yatırma',
+    arrivals: 'Onaylar',
+    coin: 'Coin',
+    protocol: 'Protokol',
+    subCoin: 'Alt Coin',
+    contract: 'Sözleşme',
+    depositAmount: 'Yatırma Tutarı',
+    amountPlaceholder: 'Tutar girin',
+    generateOrder: 'Yatırma Emri Oluştur',
+    generating: 'Oluşturuluyor…',
+    notice: 'Önemli',
+    notice1: 'Önce emir oluşturun',
+    notice2: 'Yanlış ağ = fon kaybı',
+    notice3: 'Transfer sonrası TxHash gönderin',
+    intro: 'Kurallar',
+    introText: 'Coin + ağ seç → emir oluştur → gönder',
+    newDeposit: '← Yeni Yatırma',
+    orderInfo: 'Emir Bilgileri',
+    orderNo: 'Emir No',
+    status: 'Durum',
+    coinLabel: 'Coin',
+    networkLabel: 'Ağ',
+    amount: 'Tutar',
+    payAddress: 'Alıcı Adresi',
+    payAddressHint: 'Bu adrese gönderin',
+    qrTitle: 'QR Kod',
+    qrHint: 'Cüzdan ile tara',
+    contractAddress: 'Kontrat Adresi',
+    copy: '⎘ Kopyala',
+    copyAddress: 'Adresi Kopyala',
+    submitHash: 'TxHash Gönder',
+    submittingHash: 'Gönderiliyor…',
+    hashPlaceholder: 'TxHash yapıştır',
+    orSubmitHash: 'Ya da hash gönderin',
+    hashRequired: 'Hash gerekli',
+    statusNotSubmittable: 'Gönderilemez',
+    orderCreated: 'Emir oluşturuldu',
+    orderFailed: 'Oluşturma başarısız',
+    addressCopy: 'Adres kopyalandı',
+    orderNoCopy: 'Emir No kopyalandı',
+    hashSubmitted: 'Hash gönderildi',
+    hashFailed: 'Gönderme başarısız',
+    broadcastSuccess: 'İşlem gönderildi',
+    tronBroadcastSuccess: 'Tron Tx gönderildi',
+    noNetwork: 'Ağ yok',
+    noSubCoin: 'Alt coin yok',
+    amountRequired: 'Tutar gerekli',
+    amountPositive: 'Tutar > 0',
+    submittedHash: 'Gönderilen Hash :',
+    manualDepositTab: 'Manuel Yatırma',
+    walletDepositTab: 'Cüzdan Yatırma',
+    walletPayEvm: 'EVM Cüzdan ile Öde',
+    walletPayingEvm: 'Ödeniyor…',
+    walletPayTron: 'Tron Cüzdan ile Öde',
+    walletPayingTron: 'Ödeniyor…',
+    histLink: 'Yatırma Geçmişi',
+    retryBtn: 'Tekrar Dene',
+    backWithArrow: '‹ Geri',
+    rechargeStatus0: 'Ödeme Bekliyor',
+    rechargeStatus1: 'Onay Bekliyor',
+    rechargeStatus2: 'Tamamlandı',
+    rechargeStatus3: 'İptal Edildi',
+    rechargeStatus4: 'Başarısız',
+    statusUnknown: 'Durum {status}',
+    qrAlt: 'Yatırma QR',
+    loadNetworksFailed: 'Ağlar yüklenemedi',
+    wcHintEvmConfigured: 'WalletConnect EVM kullanın',
+    wcHintEvmUnconfigured: 'WalletConnect ayarlanmadı',
+    wcHintTronConfigured: 'WalletConnect Tron',
+    wcHintTronUnconfigured: 'Manuel yatırma kullanın',
+    wcHintTronManualOnly: 'Sadece manuel yatırma',
+    walletPayFallback: 'EVM ödeme başarısız',
+    tronWalletPayFallback: 'Tron ödeme başarısız',
+    currentPrefix: 'Mevcut :',
+    histEmpty: 'Yatırma yok',
+    histOrderNo: 'Emir No',
+    histTx: 'TX :',
+    histLoadMore: 'Daha Fazla Yükle',
+    histLoadedAll: 'Tümü yüklendi',
+  },
+  broker: {
+    title: 'Broker Merkezi',
+    applyTitle: 'Broker Ol',
+    myBrokerCode: 'Broker Kodum',
+    referralCount: 'Davetli Kullanıcı',
+    totalCommission: 'Toplam Komisyon',
+    applyStatus: 'Başvuru Durumu',
+    pending: 'Bekliyor',
+    approved: 'Onaylandı',
+    rejected: 'Reddedildi',
+    defaultName: 'Broker',
+    greeting: 'Merhaba {name}',
+    uidLabel: 'UID : {uid}',
+    introBanner: 'Davet edin, komisyon kazanın',
+    statNewToday: 'Bugün Yeni',
+    statTradeToday: 'Bugün Aktif',
+    statRebateToday: 'Bugün Komisyon (USDT)',
+    inviteList: 'Davetli Listesi',
+    emptyInviteList: 'Davetli yok',
+    thAccount: 'Hesap',
+    thLevel: 'Seviye',
+    thPerpCopy: 'Sürekli / Kopya',
+    levelBroker: 'Broker',
+    levelNormal: 'Normal',
+    editRateTooltip: 'Oran Düzenle',
+    todayRebate: 'Bugün Komisyon',
+    emptyTodayRebate: 'Komisyon yok',
+    thId: 'ID',
+    rebateUsdt: 'Komisyon (USDT)',
+    teamDetails: 'Ekip Detay',
+    filterAll: 'Tümü',
+    filterWeek: 'Son 7 Gün',
+    filterToday: 'Bugün',
+    filterMonth: 'Bu Ay',
+    teamTotalAssets: 'Ekip Toplam Varlık',
+    rebateHistory: 'Komisyon Geçmişi',
+    emptyRebateHistory: 'Komisyon yok',
+    amountUsdt: 'Tutar (USDT)',
+    loadMore: 'Daha Fazla Yükle',
+    loadingMore: 'Yükleniyor…',
+    loadedAll: 'Tümü yüklendi',
+    editModalTitle: 'Komisyon Oranını Düzenle',
+    perpRebateRate: 'Sürekli Komisyon %',
+    copyRebateRate: 'Kopya Komisyon %',
+    editTip: 'Anında etkili',
+    perpRateError: '0–100 arası olmalı',
+    copyRateError: '0–100 arası olmalı',
+    setSuccess: 'Güncellendi',
+  },
+  help: {
+    title: 'Yardım Merkezi',
+    supportTitle: 'Destek',
+    search: 'Ara',
+    searchPlaceholder: 'Konu ara',
+    telegramSupport: 'Telegram',
+    quickResponse: 'Hızlı Cevap',
+    emailSupport: 'E-posta',
+    docs: 'Dökümanlar',
+    viewFullGuide: 'Tam Kılavuz',
+    detailTitle: 'Yardım Detay',
+    backToHelp: 'Yardıma Dön',
+  },
+  invite: {
+    title: 'Arkadaşları Davet Et',
+    myCode: 'Davet Kodum',
+    copy: 'Kodu Kopyala',
+    copied: 'Kopyalandı',
+    share: 'Bağlantı Paylaş',
+    shareLink: 'Bağlantıyı Kopyala',
+    linkCopied: 'Bağlantı kopyalandı',
+    desc: 'Davet edin, komisyon kazanın',
+    totalInvited: 'Toplam Davetli',
+    totalReward: 'Toplam Ödül',
+    noRecord: 'Davet yok',
+    heroLine1: 'Arkadaşları Davet Et',
+    heroLine2: 'Komisyon Kazan',
+    heroDesc: 'İşlem ücretlerinden pay kazan',
+    myInviteInfo: 'Davet Bilgilerim',
+    inviteCodeLabel: 'Davet Kodu',
+    inviteLinkShort: 'Davet Bağlantısı',
+    qrCodeLabel: 'QR Kod',
+    copyShort: 'Kopyala',
+    copiedDone: 'Kopyalandı ✓',
+    qrInviteAlt: 'Davet QR',
+    scanToRegister: 'Kaydolmak için tara',
+    rebateRulesTitle: 'Komisyon Kuralları',
+    step1Title: 'Kodu Paylaş',
+    step1Desc: 'Arkadaşlarına gönderin',
+    step2Title: 'Kaydolun',
+    step2Desc: 'Arkadaşlarınız kaydolur',
+    step3Title: 'Komisyon Kazan',
+    step3Desc: 'İşlem ücretlerinden pay alın',
+  },
+  futuresPage: futuresPageByLocale.tr,
+  spot: {
+    tag: 'Spot',
+    side: { buy: 'Alış', sell: 'Satış' },
+    orderType: { limit: 'Limit', market: 'Piyasa' },
+    orderStatus: {
+      pending: 'Bekliyor',
+      partial: 'Kısmi Gerçekleşti',
+      filled: 'Gerçekleşti',
+      cancelled: 'İptal Edildi',
+      pending_cancel: 'İptal Bekliyor',
+      expired: 'Süresi Doldu',
+      init: 'Başlatılıyor',
+    },
+    recordType: {
+      transferIn: 'Yatırma',
+      transferOut: 'Çekme',
+      orderFreeze: 'Kilitleme',
+      cancelUnfreeze: 'Kilitleme Kaldırma',
+      trade: 'İşlem',
+      fee: 'Ücret',
+      unfreeze: 'Kilitleme Kaldırma',
+      unknown: 'Tür {type}',
+    },
+    tabs: {
+      currentOrders: 'Açık Emirler',
+      historyOrders: 'Emir Geçmişi',
+      trades: 'İşlemler',
+      funding: 'Hareketler',
+    },
+    table: {
+      pair: 'Çift',
+      side: 'Yön',
+      type: 'Tür',
+      price: 'Fiyat',
+      orderPrice: 'Limit Fiyat',
+      amount: 'Tutar',
+      orderAmount: 'Emir Tutarı',
+      filled: 'Gerçekleşen',
+      status: 'Durum',
+      time: 'Zaman',
+      action: 'İşlem',
+      dealPrice: 'İşlem Fiyatı',
+      dealVolume: 'İşlem Hacmi',
+      turnover: 'Hacim',
+      recordType: 'Tür',
+      quantity: 'Miktar',
+      coin: 'Coin',
+    },
+    trade: {
+      buy: 'Al',
+      sell: 'Sat',
+      limit: 'Limit',
+      market: 'Piyasa',
+      processing: 'İşleniyor…',
+      buySymbol: '{symbol} Al',
+      sellSymbol: '{symbol} Sat',
+      priceUsdt: 'Fiyat (USDT)',
+      limitPlaceholder: 'Limit fiyat',
+      marketHint: 'En iyi piyasa fiyatı',
+      amountUsdt: 'Tutar (USDT)',
+      amountBase: 'Tutar ({base})',
+      available: 'Mevcut',
+      transfer: 'Transfer',
+      loginForBalance: 'Bakiye için giriş yapın',
+      spotAssets: 'Spot Varlıklar',
+    },
+    order: {
+      cancel: 'İptal Et',
+      cancelAll: 'Tümünü İptal Et',
+    },
+    empty: {
+      loginLink: 'Giriş',
+      loginOrdersPrompt: 'Emirleri görmek için {link}',
+      loginViewPrompt: 'Görmek için {link}',
+      noOrders: 'Emir yok',
+      noHistoryOrders: 'Geçmiş yok',
+      noTrades: 'İşlem yok',
+      noFunding: 'Hareket yok',
+    },
+    errors: {
+      symbolNotReady: 'Çift kullanılamaz',
+      invalidAmount: 'Geçersiz tutar',
+      invalidPrice: 'Geçersiz fiyat',
+      minLimitVolume: 'Asgari {min}',
+      minMarketBuy: 'Asgari {min} USDT',
+      minMarketSell: 'Asgari {min}',
+      orderSubmitted: 'Emir gönderildi',
+      orderFailed: 'Emir başarısız',
+      cancelSuccess: 'İptal edildi',
+      cancelFailed: 'İptal başarısız',
+      cancelAllSuccess: 'Tümü iptal edildi',
+      cancelAllPartialFailed: 'Kısmi iptal',
+    },
+    loadedAll: 'Tümü yüklendi',
+    ticker: {
+      change24h: '24s Değişim',
+      high24h: '24s Yüksek',
+      low24h: '24s Düşük',
+      turnover24h: '24s Hacim',
+    },
+    chartSub: { chart: 'Grafik', coinInfo: 'Coin Bilgileri' },
+    tf: {
+    	m1: '1m', 
+    	m5: '5m', 
+    	m15: '15m', 
+    	m30: '30m', 
+    	h1: '1h', 
+    	h4: '4h', 
+    	d1: '1d',
+    	w1: '1w',
+    	mo1: '1mon',
+    	mo3: '3mon'
+    },
+    ohlcv: {
+      spotLabel: 'Spot',
+      open: 'Açılış',
+      high: 'Yüksek',
+      low: 'Düşük',
+      close: 'Kapanış',
+      volume: 'Hacim',
+      changePct: 'Değişim %',
+    },
+    draw: {
+      cursor: 'İmleç',
+      trend: 'Trend Çizgi',
+      hline: 'Yatay Çizgi',
+      ray: 'Işın',
+      channel: 'Kanal',
+      fib: 'Fibonacci',
+      text: 'Metin',
+      clearAll: 'Tümünü Sil',
+      zoomOut: 'Uzaklaştır',
+    },
+    mobileTab: { chart: 'Piyasa', trade: 'İşlem' },
+    pair: {
+      search: 'Ara',
+      loading: 'Yükleniyor…',
+      noMatch: 'Sonuç yok',
+      retryLater: ', daha sonra deneyin',
+    },
+    book: {
+      waiting: 'Bekleniyor…',
+      orderbook: 'Emir Defteri',
+      trades: 'Son İşlemler',
+      priceUsdt: 'Fiyat (USDT)',
+      amountBase: 'Tutar ({base})',
+      total: 'Toplam',
+      buyRatio: 'Alış {n}%',
+      sellRatio: '{n}% Satış',
+      price: 'Fiyat',
+      amount: 'Tutar',
+      time: 'Zaman',
+      pricePrecision: 'Fiyat Hassasiyeti',
+    },
+    coinInfo: {
+      marketCap: 'Piyasa Değeri',
+      circulating: 'Dolaşım',
+      issuePrice: 'Çıkış Fiyatı',
+      ath: 'ATH',
+      athDate: 'ATH Tarihi',
+      whitepaper: 'Whitepaper',
+      empty: 'Bilgi yok',
+      reload: 'Yenile',
+    },
+    transferModal: {
+      title: 'Transfer',
+      selectCoin: 'Coin Seç',
+      amount: 'Transfer Tutarı',
+      amountPlaceholder: 'Tutar girin',
+      availableUsdt: 'Mevcut :',
+      availableCoin: 'Mevcut {coin} :',
+      transferring: 'Transfer ediliyor…',
+      invalidAmount: 'Geçersiz tutar',
+      insufficientBalance: 'Yetersiz bakiye',
+      transferFailed: 'Transfer başarısız',
+    },
+  }
+}

+ 1069 - 0
code/src/locales/vi.ts

@@ -0,0 +1,1069 @@
+import { futuresPageByLocale } from './futuresPage.i18n'
+import { financePageByLocale } from './financePage.i18n'
+
+export default {
+	nav: {
+		home: 'Trang chủ',
+		market: 'Thị trường',
+		spot: 'Giao ngay',
+		futures: 'Hợp đồng tương lai',
+		copyTrade: 'Sao chép giao dịch',
+		finance: 'Kiếm lãi',
+		idoPresale: 'Đặt trước IDO',
+		claimAirdrop: 'Nhận Airdrop',
+		announcements: 'Thông báo',
+		download: 'Tải về',
+	},
+	lang: {
+		title: 'Ngôn ngữ',
+		zhCN: '简体中文',
+		zhTW: '繁體中文',
+		en: 'English',
+		ko: '한국어',
+		ja: '日本語',
+		hi: 'हिन्दी',
+		id: 'Bahasa Indonesia',
+		es: 'Español',
+		ru: 'Русский',
+		pt: 'Português',
+		de: 'Deutsch',
+		fr: 'Français',
+		tr: 'Türkçe',
+		vi: 'Tiếng Việt'
+	},
+	header: {
+		login: 'Đăng nhập',
+		register: 'Đăng ký',
+		account: 'Tài khoản',
+		assets: 'Tài sản của tôi',
+		security: 'Bảo mật',
+		broker: 'Nhà môi giới',
+		logout: 'Đăng xuất',
+		logoutShort: 'Thoát',
+		downloadTitle: 'Tải ứng dụng',
+		brokerApplyTitle: 'Đăng ký làm nhà môi giới',
+		brokerApplyDesc: 'Bạn chưa phải nhà môi giới. Hệ thống sẽ tự gửi đơn bằng thông tin tài khoản, sau khi duyệt thành công sẽ dùng được chức năng môi giới.',
+		cancel: 'Hủy',
+		applyNow: 'Nộp đơn ngay',
+		viewApplyList: 'Xem danh sách duyệt',
+		submitting: 'Đang gửi...',
+		menu: 'Menu',
+	},
+	common: {
+		loading: 'Đang tải...',
+		retry: 'Thử lại',
+		cancel: 'Hủy',
+		confirm: 'Xác nhận',
+		submit: 'Gửi',
+		save: 'Lưu',
+		send: 'Gửi đi',
+		back: 'Quay lại',
+		next: 'Bước tiếp',
+		done: 'Hoàn thành',
+		noData: 'Chưa có dữ liệu',
+		noRecord: 'Không có bản ghi',
+		search: 'Tìm kiếm',
+		all: 'Tất cả',
+		max: 'Tối đa',
+		copied: 'Đã sao chép',
+		networkError: 'Lỗi mạng, vui lòng thử lại',
+		loadFailed: 'Tải dữ liệu thất bại',
+		operationFailed: 'Thao tác thất bại, thử lại sau',
+		saveSuccess: 'Lưu thành công',
+		more: 'Xem thêm',
+		perpetual: 'Vĩnh viễn',
+		set: 'Đã cài đặt',
+		notSet: 'Chưa cài đặt',
+		change: 'Sửa đổi',
+		bind: 'Liên kết',
+		unbind: 'Hủy liên kết',
+		on: 'Đã bật',
+		off: 'Tắt',
+		status: 'Trạng thái',
+		time: 'Thời gian',
+		amount: 'Số lượng',
+		type: 'Loại',
+		coin: 'Đồng coin',
+		from: 'Từ',
+		to: 'Đến',
+		close: 'Đóng',
+		contactService: 'Liên hệ hỗ trợ',
+	},
+	home: {
+		heroTitle: 'An toàn · Hiệu quả · Nền tảng giao dịch\nTài sản số toàn cầu',
+		heroDesc: 'iBit cung cấp dịch vụ giao dịch tài sản số ổn định, minh bạch, chuyên nghiệp cho người dùng toàn cầu nhờ kiến trúc công nghệ hiện đại và hệ thống kiểm soát rủi ro chặt chẽ, đảm bảo an toàn và hiệu quả mỗi giao dịch.',
+		register: 'Đăng ký',
+		viewMarket: 'Xem thị trường',
+		downloadApp: 'Tải App',
+		coreAdvantages: 'Ưu điểm nền tảng',
+		assetSafetyTitle: 'An toàn tài sản',
+		assetSafetyDesc: 'Tách ví nóng/lạnh, cơ chế đa chữ ký và quản lý quyền, kết hợp giám sát rủi ro 24/7 bảo vệ toàn bộ tài sản người dùng.',
+		highPerfTitle: 'Khớp lệnh hiệu suất cao',
+		highPerfDesc: 'Công cụ khớp lệnh tự phát triển xử lý lệnh trong mili giây, giữ trải nghiệm giao dịch mượt mà, ổn định dù độ trễ thấp.',
+		globalComplianceTitle: 'Tuân thủ quy định quốc tế',
+		globalComplianceDesc: 'Tuân thủ tiêu chuẩn pháp lý nhiều quốc gia, xây dựng môi trường giao dịch đáng tin cậy cho người dùng toàn cầu.',
+		transparentFeeTitle: 'Phí rõ ràng',
+		transparentFeeDesc: 'Cấu trúc phí minh bạch, không chi phí ẩn, giúp người dùng kiểm soát chi phí giao dịch.',
+		aboutUs: 'Về chúng tôi',
+		aboutDesc: 'iBit là sàn giao dịch tài sản số toàn cầu, xây dựng dịch vụ giao dịch an toàn, ổn định nhờ đổi mới công nghệ và vận hành hợp pháp.',
+		foundedYear: 'Thành lập năm 2023',
+		headquarters: 'Trụ sở và đăng ký tại Dubai, sở hữu giấy phép từ Mỹ, Canada, Úc và Dubai',
+		ourVision: 'Tầm nhìn',
+		visionSubtitle: 'Xây dựng hạ tầng giao dịch tài sản số đáng tin cậy dài hạn toàn cầu',
+		ecoTitle: 'Hệ sinh thái',
+		ecoDesc: 'Xây dựng hệ sinh thái giao dịch Crypto hiện đại',
+		missionTitle: 'Sứ mệnh',
+		missionDesc: 'Đẩy luồng giá trị số di chuyển toàn cầu',
+		purposeTitle: 'Mục tiêu',
+		purposeDesc: 'Giúp người dùng quản lý và đầu tư tài sản crypto dễ dàng',
+		heroImageAlt: 'Nền tảng giao dịch iBit đa thiết bị',
+		aboutImageAlt: 'Thông tin về iBit',
+	},
+	market: {
+		title: 'Thị trường thời gian thực',
+		desc: 'Cập nhật giá, khối lượng và biến động 24h các coin lớn, nắm bắt nhanh xu hướng thị trường.',
+		hot: 'Nổi bật',
+		topVolume: 'Khối lượng giao dịch',
+		gainers: 'Tăng giá',
+		losers: 'Giảm giá',
+		perpetual: 'Vĩnh viễn',
+		name: 'Tên coin',
+		latestPrice: 'Giá hiện tại',
+		change24h: 'Biến động 24h',
+		turnover: 'Tổng giá trị giao dịch',
+		searchPair: 'Tìm cặp giao dịch',
+		searchMarket: 'Tìm coin, cặp giao dịch, hợp đồng',
+		price: 'Giá',
+		change24hShort: 'Thay đổi 24h',
+		high24h: 'Cao nhất 24h',
+		low24h: 'Thấp nhất 24h',
+		volume24hLabel: 'Khối lượng 24h',
+	},
+	auth: {
+		loginTitle: 'Đăng nhập',
+		emailLogin: 'Đăng nhập bằng Email',
+		emailPlaceholder: 'Nhập địa chỉ email',
+		password: 'Mật khẩu',
+		passwordPlaceholder: 'Nhập mật khẩu',
+		forgotPassword: 'Quên mật khẩu?',
+		loginBtn: 'Đăng nhập',
+		noAccount: 'Chưa có tài khoản?',
+		registerNow: 'Đăng ký ngay',
+		verifyTitle: 'Nhập mã xác minh',
+		codeSentDesc: 'Mã xác minh đã gửi về {email}, vui lòng kiểm tra hộp thư',
+		codeSendDesc: 'Nhấn nút gửi mã đến {email}',
+		countdownResend: 'Gửi lại sau {n}s',
+		resendCode: 'Gửi lại mã',
+		confirmBtn: 'Xác nhận',
+		sendCode: 'Gửi mã',
+		forgotVerify: 'Quên cách xác minh?',
+		loginSuccess: 'Đăng nhập thành công',
+		codeSentAgain: 'Đã gửi lại mã xác minh',
+		registerTitle: 'Đăng ký',
+		emailRegister: 'Đăng ký bằng Email',
+		inviteCodeLabel: 'Mã mời (tùy chọn)',
+		inviteCodePlaceholder: 'Nhập mã mời',
+		hasAccount: 'Đã có tài khoản?',
+		loginNow: 'Đăng nhập ngay',
+		verifyPageTitle: 'Xác minh an ninh',
+		emailVerifyLabel: 'Xác minh Email',
+		codePlaceholder: 'Nhập mã xác minh',
+		sendBtn: 'Gửi',
+		passwordTitle: 'Tạo mật khẩu',
+		backBtn: '‹ Quay lại',
+		inputPasswordLabel: 'Nhập mật khẩu',
+		confirmPasswordLabel: 'Xác nhận mật khẩu',
+		confirmPasswordPlaceholder: 'Nhập lại mật khẩu',
+		doneBtn: 'Hoàn thành',
+		resetSuccess: 'Đặt lại mật khẩu thành công, vui lòng đăng nhập lại',
+		registerSuccess: 'Đăng ký thành công',
+		welcomeJoin: 'Chào mừng gia nhập iBit',
+		loginNowBtn: 'Đăng nhập ngay',
+		forgotPasswordTitle: 'Khôi phục mật khẩu',
+		emailLabel: 'Email',
+		emailRegisteredPlaceholder: 'Nhập email đã đăng ký',
+		codeSentToast: 'Đã gửi mã xác minh',
+	},
+	error: {
+		emailRequired: 'Vui lòng nhập email',
+		emailInvalid: 'Định dạng email sai',
+		passwordRequired: 'Vui lòng nhập mật khẩu',
+		code6Required: 'Nhập mã gồm 6 chữ số',
+		codeRequired: 'Vui lòng nhập mã xác minh',
+		loginFailed: 'Tên đăng nhập hoặc mật khẩu sai',
+		networkError: 'Lỗi kết nối mạng, thử lại sau',
+		emailAlreadyRegistered: 'Email đã được đăng ký, hãy đăng nhập',
+		confirmPasswordRequired: 'Nhập lại mật khẩu xác nhận',
+		passwordMismatch: 'Hai mật khẩu không khớp',
+		loadFailed: 'Tải thông tin bảo mật thất bại',
+		refreshFailed: 'Làm mới thất bại',
+		statusUpdated: 'Cập nhật trạng thái thành công',
+		currentPasswordRequired: 'Nhập mật khẩu hiện tại',
+		sixDigitCode: 'Nhập mã email 6 số',
+		sixDigitGoogleCode: 'Nhập mã Google 6 số',
+		sendFailed: 'Gửi mã thất bại',
+		operationFailed: 'Thao tác không thành công',
+	},
+	security: {
+		title: 'Cài đặt bảo mật',
+		back: '‹ Quay lại',
+		warningBanner: 'Nên hoàn thành xác minh Email, Google Authenticator và mật khẩu quỹ để nâng cấp an toàn tài khoản.',
+		accountSecurity: 'Bảo mật tài khoản',
+		loginPassword: 'Mật khẩu đăng nhập',
+		loginPasswordDesc: 'Thay đổi mật khẩu định kỳ tăng độ an toàn',
+		emailVerify: 'Xác minh Email',
+		emailVerifyDesc: 'Liên kết email để khôi phục mật khẩu và xác minh tài khoản',
+		googleAuth: 'Xác thực Google',
+		googleAuthDesc: 'Liên kết Google để tăng an toàn tài khoản',
+		fundPassword: 'Mật khẩu quỹ',
+		fundPasswordDesc: 'Đặt mật khẩu quỹ bảo vệ tài sản khi rút tiền',
+		set: 'Đã đặt',
+		notSet: 'Chưa đặt',
+		change: 'Sửa',
+		bind: 'Liên kết',
+		set2: 'Cài đặt',
+		statusUpdated: 'Cập nhật trạng thái xong',
+		loadFailed: 'Tải dữ liệu bảo mật lỗi',
+		refreshFailed: 'Làm mới thất bại',
+		bound: 'Đã liên kết',
+		notBound: 'Chưa liên kết',
+		refresh: 'Làm mới',
+		googleHelpTitle: 'Hướng dẫn dùng Google Authenticator',
+		googleHelpDesc: 'Nếu không nhận mã hoặc muốn hủy liên kết vui lòng liên hệ hỗ trợ trực tuyến.',
+		changeLoginPassword: 'Đổi mật khẩu đăng nhập',
+		changePasswordHint: 'Sau khi đổi dùng mật khẩu mới đăng nhập, mã xác minh gửi về email liên kết.',
+		currentPassword: 'Mật khẩu hiện tại',
+		newPassword: 'Mật khẩu mới',
+		confirmNewPassword: 'Xác nhận mật khẩu mới',
+		emailCode: 'Mã xác minh email',
+		sendCode: 'Gửi mã',
+		codeSent: 'Mã đã gửi về email',
+		changeSuccess: 'Đổi mật khẩu thành công',
+		confirmChange: 'Xác nhận thay đổi',
+		submitting: 'Đang gửi...',
+		setFundPassword: 'Đặt mật khẩu quỹ',
+		resetFundPassword: 'Đặt lại mật khẩu quỹ',
+		fundPasswordHint: 'Mật khẩu quỹ dùng cho rút coin, chuyển khoản, hãy giữ kỹ.',
+		fundPasswordResetHint: 'Nhập lại mật khẩu quỹ, mã xác minh gửi về email.',
+		newFundPassword: 'Mật khẩu quỹ mới',
+		confirmFundPassword: 'Xác nhận mật khẩu',
+		fundPasswordUpdated: 'Cập nhật mật khẩu quỹ xong',
+		fundPasswordSet: 'Tạo mật khẩu quỹ thành công',
+		bindGoogle: 'Liên kết Google Authenticator',
+		boundEmail: 'Email đã liên kết:',
+		googleQrStep: '1. Quét mã QR hoặc nhập khóa thủ công',
+		googleCodeStep: '2. Mã Google 6 chữ số',
+		emailCodeStep: '3. Mã xác minh email',
+		copyKey: 'Sao chép khóa',
+		keyCopied: 'Đã sao chép khóa',
+		copyFailed: 'Sao chép lỗi, copy nội dung khóa thủ công',
+		clipboardDeniedMac: 'Không cấp quyền bộ nhớ đệm: bấm khóa thanh địa chỉ → cài đặt trang web → cho phép bộ nhớ đệm rồi thử lại',
+		clipboardDenied: 'Trình duyệt chặn sao chép, bật quyền bộ nhớ đệm tại cài đặt trình duyệt',
+		invalidSecret: 'Khóa sai, tải lại trang thử lại',
+		googleCodeRequired: 'Nhập mã Google 6 chữ số',
+		emailCodeSent: 'Đã gửi mã email',
+		bindSuccess: 'Liên kết thành công',
+		confirmBind: 'Xác nhận liên kết',
+		googleAuthLead: 'Tải Google Authenticator/Microsoft Authenticator tại cửa hàng ứng dụng để lưu mã động.',
+		googleAuthTip1: 'Sau liên kết, đăng nhập/thao tác quan trọng cần nhập mã 6 số trên app.',
+		googleAuthTip2: 'Giữ thiết bị an toàn, mất thiết bị liên hệ hỗ trợ hủy liên kết.',
+		googleAuthStart: 'Đã tải app, bắt đầu liên kết',
+	},
+	assets: {
+		title: 'Tài sản của tôi',
+		totalAssets: 'Tổng giá trị tài sản',
+		todayPnl: 'Lãi lỗ trong ngày',
+		deposit: 'Nạp tiền',
+		withdraw: 'Rút tiền',
+		transfer: 'Chuyển tài khoản',
+		history: 'Lịch sử giao dịch',
+		spot: 'Giao ngay',
+		futures: 'Hợp đồng',
+		copyTrade: 'Sao chép giao dịch',
+		fund: 'Có thể rút',
+		walletBalance: 'Số dư ví',
+		unrealizedPnl: 'Lãi lỗ chưa khớp lệnh',
+		positions: 'Vị thế mở',
+		noPositions: 'Chưa có vị thế',
+		assetBalance: 'Số dư tài sản',
+		unavailable: 'Không khả dụng',
+		depositCoin: 'Nạp coin',
+		withdrawCoin: 'Rút coin',
+		depositRecord: 'Lịch sử nạp',
+		withdrawRecord: 'Lịch sử rút',
+		transferRecord: 'Lịch sử chuyển khoản',
+		assetRecord: 'Sổ sách tài sản',
+		overview: 'Tổng quan',
+		spotAccount: 'Tài khoản giao ngay',
+		swapAccount: 'Tài khoản hợp đồng',
+		followAccount: 'Tài khoản sao chép',
+		fundAccount: 'Tài khoản có thể rút',
+		spotTradingAccount: 'Tài khoản giao dịch giao ngay',
+		ibitAccount: 'Tài khoản iBit',
+		lockedStakingAccount: 'Tài khoản khóa gửi lãi',
+		stakingTab: 'Khóa gửi',
+		ibitUnit: 'iBit',
+		releaseTotal: 'Tổng số đã giải ngân',
+		totalLockedBalance: 'Tổng dư khóa (iBit)',
+		myStakingOrders: 'Đơn khóa gửi của tôi',
+		stakingOrderNo: 'Mã đơn hàng',
+		purchaseQty: 'Số lượng mua',
+		stakingTotal: 'Tổng số khóa',
+		released: 'Đã giải ngân',
+		pendingRelease: 'Chờ giải ngân',
+		startTime: 'Ngày bắt đầu',
+		subscribing: 'Đăng ký gửi',
+		releasing: 'Đang giải ngân',
+		completed: 'Hoàn tất',
+		pullToRefresh: 'Kéo xuống làm mới',
+		releaseToRefresh: 'Nhả tay cập nhật',
+		refreshing: 'Đang làm mới...',
+		totalAccount: 'Tổng giá trị tài khoản',
+		showBalance: 'Hiển thị số dư',
+		hideBalance: 'Ẩn số dư',
+		followBalance: 'Số dư sao chép',
+		accountTransfer: 'Chuyển giữa tài khoản',
+		transferFrom: 'Từ tài khoản',
+		transferTo: 'Đến tài khoản',
+		available: 'Khả dụng',
+		freeTransfer: 'Chuyển miễn phí, nhận tiền tức thì',
+		followPositions: 'Vị thế sao chép hiện tại',
+		noFollowPositions: 'Không có vị thế sao chép',
+		followLoading: 'Đang tải...',
+		long: 'Mua lên',
+		short: 'Bán xuống',
+		trader: 'Nhà giao dịch',
+		openPrice: 'Giá mở lệnh',
+		currentPrice: 'Giá hiện hành',
+		amountLever: 'Số lượng · Đòn bẩy',
+		closing: 'Đóng lệnh...',
+		closePosition: 'Đóng vị thế',
+		noLossPosition: 'Vị thế sao chép không lỗ không đóng thủ công',
+		invalidPosition: 'Dữ liệu vị thế lỗi, không thể đóng',
+		confirmClose: 'Xác nhận đóng vị thế? Sau đóng không nhận lãi cuối đơn.',
+		closeSuccess: 'Đóng vị thế thành công',
+		closeFailed: 'Đóng vị thế thất bại',
+		sameAccountError: 'Tài khoản gửi và nhận không được giống nhau',
+		amountError: 'Nhập số lượng hợp lệ',
+		insufficientBalance: 'Số dư khả dụng không đủ',
+		transferSuccess: 'Chuyển khoản thành công',
+		transferFailed: 'Chuyển khoản thất bại',
+		goCopyTrade: 'Sao chép giao dịch',
+		goSpotTrade: 'Đi giao dịch',
+		hideZeroBalance: 'Ẩn tài sản số dư bằng 0',
+		depositRecord2: 'Lịch sử nạp coin',
+		amountUsdt: 'Số lượng (USDT)',
+		amountCoin: 'Số lượng ({coin})',
+		availableCoin: 'Khả dụng: {available} {coin}',
+		transferring: 'Đang chuyển...',
+		confirmTransferBtn: 'Xác nhận chuyển',
+		statementPageTitle: 'Sổ sách giao dịch',
+		statementStartDate: 'Ngày bắt đầu',
+		statementEndDate: 'Ngày kết thúc',
+		statementReset: 'Đặt lại',
+		statementSearch: 'Tìm kiếm',
+		statementSearching: 'Đang tra cứu...',
+		statementEmpty: 'Không có bản ghi',
+		statementDirectionOpen: 'Mở lệnh',
+		statementDirectionClose: 'Đóng lệnh',
+		statementTypes: {
+			'43': 'Lãi giao ngay',
+			'44': 'Lỗ giao ngay',
+			'45': 'Phí giao dịch giao ngay',
+			'46': 'Hoàn phí giao ngay',
+			'48': 'Giao dịch giao ngay',
+			'49': 'Gửi khóa',
+			'50': 'Giải ngân gửi khóa',
+			'51': 'Thưởng airdrop',
+			'52': 'Chuyển vào ví gửi khóa',
+			'53': 'Chuyển ra khỏi ví gửi khóa',
+		},
+	},
+	finance: {
+		...financePageByLocale.vi,
+	},
+	copyTrade: {
+		comprehensive: 'Sắp xếp tổng hợp',
+		winRate14d: 'Tỷ lệ thắng 14 ngày',
+		profit14d: 'Tỷ suất lời 14 ngày',
+		normal: 'Sao chép thông thường',
+		lossless: 'Sao chép không lỗ',
+		favorite: 'Yêu thích',
+		topTraders: 'Nhà giao dịch xuất sắc',
+		twoWeekReturn: 'Lợi nhuận 2 tuần',
+		followers: 'Số người theo dõi',
+		days: 'Ngày',
+		applyTrader: 'Đăng ký làm nhà giao dịch',
+		myFollowing: 'Danh sách sao chép',
+		myTrading: 'Giao dịch cá nhân',
+		traderIdentity: 'Danh hiệu dẫn giao',
+		myFollowingAccount: 'Tài khoản sao chép',
+		leadManage: 'Quản lý dẫn giao',
+		applyLead: 'Đăng ký dẫn giao',
+		pageTitle: 'Sao chép giao dịch',
+		heroDesc: 'Theo dõi chuyên gia giao dịch chỉ với một chạm, kiếm lời từ chiến lược chuyên nghiệp.',
+		traderOverview: 'Tổng quan nhà dẫn giao',
+		copyFollowersCount: 'Số người sao chép',
+		cumulativeTradingDays: 'Tổng ngày giao dịch',
+		cumulativeLeadProfit: 'Tổng lãi sao chép',
+		goLeadManage: 'Vào trang quản lý dẫn giao →',
+		copyWalletTitle: 'Tài khoản sao chép',
+		cumulativePnlUsdt: 'Tổng lãi lỗ sao chép(USDT)',
+		availableUsdt: 'Số dư khả dụng(USDT)',
+		unrealizedPnlUsdtShort: 'Lãi lỗ chưa khớp(USDT)',
+		followingTradersSummary: 'Đang theo {n} nhà giao dịch',
+		newBadge: 'MỚI',
+		losslessShieldTitle: 'Bảo vệ không lỗ',
+		losslessShieldDesc: ': Nếu sao chép bị lỗ nền tảng bù rủi ro, kiếm lời trong phạm vi an toàn.',
+		learnHowItWorks: 'Xem cơ chế →',
+		myStarredTraders: 'Nhà giao dịch đã lưu',
+		traderTotalCount: 'Tổng {count} nhà giao dịch',
+		filterLoadingShort: 'Đang tải...',
+		loadTraderListFailed: 'Tải danh sách nhà giao dịch lỗi',
+		loadFavoritesFailed: 'Tải danh sách yêu thích thất bại',
+		favoritedToast: 'Đã thêm yêu thích',
+		defaultTraderName: 'Nhà giao dịch',
+		levelJunior: 'Sơ cấp',
+		badgeLossless: 'Không lỗ',
+		metaDaysTrades: '{days} ngày · {trades} lệnh',
+		followAction: 'Sao chép',
+		profitUsdtBracket: 'Lãi lỗ(USDT)',
+		profitShareRate: 'Tỷ lệ chia lãi',
+		trend14Days: 'Biểu đồ 14 ngày',
+		emptyFavoriteHint: 'Chưa lưu nhà giao dịch, đi tìm chuyên gia',
+		emptyTraderListDefault: 'Không có dữ liệu nhà giao dịch',
+		emptyTraderListLossless: 'Không có nhà giao dịch không lỗ',
+		browseTraders: 'Xem danh sách giao dịch',
+		losslessInfoHeading: 'Giải thích cơ chế sao chép không lỗ',
+		llInfoCard1Title: 'Bảo vệ theo điều kiện',
+		llInfoCard1Body: 'Chế độ bù lỗ áp dụng khi thỏa mãn quy tắc, xử lý tự động bởi hệ thống kiểm soát rủi ro.',
+		llInfoCard2Title: 'Trách nhiệm có hạn',
+		llInfoCard2Body: 'Nền tảng chỉ bù lỗ trong giới hạn quy định mỗi lệnh, không chịu lỗ ngoài hợp đồng.',
+		llInfoCard3Title: 'Ưu tiên quản trị rủi ro',
+		llInfoCard3Body: 'Khi lỗ vượt ngưỡng an toàn hệ thống kích hoạt bảo vệ đảm bảo công bằng sao chép.',
+		llInfoCard4Title: 'Lưu ý rủi ro',
+		llInfoCard4Body: 'Giao dịch tài sản số rủi ro cao, sao chép không lỗ không bằng không rủi ro, đầu tư trong khả năng chịu lỗ.',
+		unitYi: 'Tỷ',
+		unitWan: 'Vạn',
+		followingPlaza: 'Sảnh sao chép',
+		followingWalletFail: 'Tải dữ liệu tài khoản sao chép lỗi',
+		followingTabPositions: 'Vị thế hiện tại',
+		followingTabTraders: 'Nhà giao dịch đang theo',
+		followingTabHistory: 'Lịch sử sao chép',
+		followingHistEmpty: 'Không có lịch sử sao chép',
+		followingNoTradersYet: 'Chưa theo bất kỳ nhà giao dịch nào',
+		followingGoPlaza: 'Đến sảnh sao chép',
+		confirmStopFollow: 'Ngừng theo dõi "{name}"?',
+		noLossManualCloseTooltip: 'Vị thế không lỗ không đóng thủ công',
+		followingThContract: 'Hợp đồng',
+		followingThDirection: 'Hướng',
+		followingThOpenPrice: 'Giá mở',
+		followingThCurPrice: 'Giá hiện tại',
+		followingThQty: 'Khối lượng',
+		followingThLever: 'Đòn bẩy',
+		followingThUnrealized: 'Lãi lỗ chưa khớp',
+		followingThOpenTime: 'Thời gian mở',
+		followingThAction: 'Thao tác',
+		followingOpenLong: 'Mở mua',
+		followingOpenShort: 'Mở bán',
+		closeQtyWithBase: 'Khối đóng({base})',
+		followingRealizedPnlUsdt: 'Lãi lỗ đã khớp(USDT)',
+		followingYieldRate: 'Tỷ suất sinh lời',
+		followingAvgOpenUsdt: 'Giá mở trung bình(USDT)',
+		followingAvgCloseUsdt: 'Giá đóng trung bình(USDT)',
+		marginCrossMode: 'Toàn tài khoản',
+		marginIsolatedMode: 'Tách vị thế',
+		stopFollowing: 'Hủy theo dõi',
+		lead: {
+			pageTitle: 'Quản lý dẫn giao',
+			navMyFollowing: 'Sao chép của tôi →',
+			becomeTitle: 'Trở thành nhà dẫn giao',
+			becomeDesc: 'Đủ điều kiện bên dưới để đăng ký làm nhà dẫn giao.',
+			condMinBalance: 'Số dư tài khoản hợp đồng ≥ {min} USDT',
+			goTransfer: 'Đi chuyển khoản',
+			condNotFollowing: 'Không được theo dõi nhà giao dịch khác',
+			agreePrefix: 'Tôi đã đọc và đồng ý',
+			agreeLink: '《Hợp đồng nhà dẫn giao》',
+			submitting: 'Đang gửi đơn...',
+			submitApply: 'Nộp đơn đăng ký',
+			applyFailed: 'Nộp đơn thất bại, thử lại sau',
+			reviewingTitle: 'Đơn đang chờ duyệt',
+			reviewingDesc: 'Đơn xin làm dẫn giao đang được xử lý, duyệt xong bắt đầu dẫn giao.',
+			agreementTitle: 'Hợp đồng dẫn giao',
+			agreementEmpty: 'Không tải được nội dung hợp đồng, thử lại sau.',
+			leadingBadge: 'Đang dẫn giao',
+			noBio: 'Chưa có mô tả cá nhân',
+			cancelLeadProcessing: 'Đang xử lý...',
+			cancelLeadApply: 'Yêu cầu hủy quyền dẫn giao',
+			confirmCancelLead: 'Hủy quyền dẫn giao? Toàn bộ người sao chép sẽ ngừng theo dõi.',
+			operationFailed: 'Thao tác thất bại',
+			statFollowers: 'Số người đang sao chép',
+			statRegisterDays: 'Số ngày tham gia nền tảng',
+			statCapital: 'Năng lực vốn',
+			statCumulativeProfit: 'Tổng lãi sao chép(USDT)',
+			statTotalFollowers: 'Tổng người từng sao chép',
+			statTradingDays: 'Tổng ngày giao dịch',
+			tabFollowers: 'Người theo dõi({n})',
+			tabCurrent: 'Vị thế đang dẫn',
+			tabHistory: 'Lịch sử dẫn giao',
+			tabSettings: 'Cài đặt cá nhân',
+			emptyFollowers: 'Chưa có người theo dõi',
+			removeFollower: 'Xóa',
+			followerEquity: 'Giá trị tài khoản(USDT)',
+			followerTotalShare: 'Tổng chia lãi(USDT)',
+			followerLastShare: 'Chia lãi kỳ trước',
+			followerSince: 'Bắt đầu theo: {time}',
+			emptyCurrent: 'Chưa có vị thế dẫn giao',
+			emptyHistory: 'Không có lịch sử dẫn giao',
+			settingsBasic: 'Thông tin cơ bản',
+			avatar: 'Ảnh đại diện',
+			nickname: 'Biệt danh',
+			nicknamePlaceholder: 'Tối đa 10 ký tự',
+			bio: 'Giới thiệu',
+			bioPlaceholder: 'Tối đa 25 ký tự',
+			saveSuccess: 'Lưu thành công',
+			saveBasicProcessing: 'Đang lưu...',
+			saveBasic: 'Lưu thông tin cơ bản',
+			leadSymbols: 'Hợp đồng dẫn giao',
+			saveProcessing: 'Đang lưu...',
+			save: 'Lưu',
+			tagsTitle: 'Nhãn (tối đa 4 cái)',
+			confirmRemoveFollower: 'Xóa người theo dõi "{name}"?',
+			saveFailed: 'Lưu thất bại',
+			uploadFailed: 'Tải ảnh lỗi, thử lại',
+			defaultFollower: 'Người sao chép',
+			defaultUser: 'Người dùng',
+		},
+	},
+	footer: {
+		aboutSection: 'Về chúng tôi',
+		companyIntro: 'Giới thiệu công ty',
+		brand: 'Thông tin thương hiệu',
+		community: 'Tham gia cộng đồng iBit',
+		riskWarning: 'Lưu ý rủi ro',
+		terms: 'Điều khoản sử dụng',
+		privacy: 'Chính sách bảo mật',
+		futuresTrade: 'Giao dịch hợp đồng',
+		spotTrade: 'Giao dịch giao ngay',
+		losslessCopy: 'Sao chép không lỗ',
+		beginnerGuide: 'Hướng dẫn người mới',
+		helpCenter: 'Trung tâm hỗ trợ',
+		glossary: 'Từ điển thuật ngữ',
+		compliance: 'Tuyên bố tuân thủ pháp luật',
+		products: 'Sản phẩm',
+		resources: 'Tài nguyên',
+	},
+	announcements: {
+		title: 'Thông báo hệ thống',
+		noAnnouncements: 'Chưa có thông báo',
+		back: 'Quay lại',
+		backToList: 'Quay danh sách',
+		loadMore: 'Tải thêm',
+	},
+	download: {
+		title: 'Tải iBit',
+		heroTitle: 'Xem giá thời gian thực · Giao dịch mọi lúc\nBảo vệ tài sản đa lớp',
+		desc: 'Giao dịch, xem giá bất cứ lúc nào',
+		appDesc: 'Tất cả chức năng trên app, giao dịch tiện lợi',
+		latestVersion: 'Phiên bản mới nhất',
+		updateNotes: 'Nội dung cập nhật',
+		ios: 'Tải iOS',
+		iosNotReleased: 'Chưa phát hành iOS',
+		android: 'Tải Android',
+		androidNotReleased: 'Chưa phát hành Android',
+		scanToDownload: 'Quét mã tải app',
+	},
+	account: {
+		title: 'Trung tâm tài khoản',
+		uid: 'UID',
+		email: 'Email',
+		profile: 'Thông tin cá nhân',
+		security: 'Bảo mật',
+		securityDesc: 'Mật khẩu, xác minh, mật khẩu quỹ',
+		assets: 'Tài sản của tôi',
+		assetsDesc: 'Nạp, rút, chuyển khoản',
+		inviteCode: 'Mã mời',
+		inviteFriends: 'Mời bạn bè',
+		inviteDesc: 'Mời bạn nhận hoa hồng giao dịch',
+		helpSupport: 'Trợ giúp & Hỗ trợ',
+		helpDesc: 'Câu hỏi thường gặp & yêu cầu hỗ trợ',
+		broker: 'Nhà môi giới',
+		brokerDesc: 'Quản lý hoa hồng, danh sách đội nhóm',
+		logout: 'Đăng xuất',
+		securityScore: 'Điểm an ninh',
+		twofa: 'Xác thực Google',
+		supportTitle: 'Liên hệ hỗ trợ',
+		supportHours: 'Hỗ trợ 24/7',
+		onlineSupport: 'Trợ lý trực tuyến',
+		instantChat: 'Trò chuyện tức thời',
+		telegramSupport: 'Hỗ trợ Telegram',
+		emailSupport: 'Hỗ trợ Email',
+		applySubmitted: 'Đã gửi đơn, chờ duyệt',
+		scoreHigh: 'Xuất sắc',
+		scoreMedium: 'Trung bình',
+		scoreLow: 'Cần cải thiện',
+	},
+	transfer: {
+		title: 'Chuyển tài khoản',
+		amount: 'Số lượng chuyển',
+		amountPlaceholder: 'Nhập số tiền cần chuyển',
+		maxTransferable: 'Tối đa có thể chuyển',
+		success: 'Chuyển thành công',
+		selectCoin: 'Chọn coin',
+		enterAmount: 'Nhập số lượng chuyển',
+		histEmpty: 'Không có lịch sử chuyển',
+		balanceLabel: 'Số dư',
+	},
+	withdraw: {
+		title: 'Rút coin',
+		network: 'Mạng lưới',
+		networkTip: 'Chọn đúng mạng lưới ví nhận, sai mạng dễ mất toàn bộ tài sản.',
+		address: 'Địa chỉ nhận',
+		addressPlaceholder: 'Nhập địa chỉ ví nhận',
+		amount: 'Số lượng rút',
+		received: 'Số thực nhận',
+		fee: 'Phí giao dịch',
+		submitted: 'Đã gửi yêu cầu rút',
+		fundPassword: 'Mật khẩu quỹ',
+		emailCode: 'Mã email',
+		googleCode: 'Mã Google',
+		securityVerification: 'Xác minh an ninh',
+		recordTitle: 'Lịch sử rút',
+		recordEmpty: 'Chưa có bản ghi rút',
+		confirmCancelApply: 'Hủy yêu cầu rút tiền?',
+		withdrawCancelledToast: 'Đã hủy',
+		withdrawCancelFailedToast: 'Hủy thất bại',
+		statusPending: 'Đang duyệt',
+		statusReleasing: 'Đang phát tiền',
+		statusWithdrawFailed: 'Thất bại',
+		statusWithdrawSuccess: 'Thành công',
+		statusWithdrawCancelled: 'Đã hủy',
+		typeInternalTransfer: 'Chuyển nội bộ',
+		typeOnChainWithdraw: 'Rút trên chuỗi',
+		cancelApplyBtn: 'Hủy',
+		initFailed: 'Khởi tạo yêu cầu lỗi',
+		submitOnChainFailed: 'Rút tiền thất bại',
+		transferSubmitFailed: 'Chuyển nội bộ lỗi',
+		availWithdrawBalance: 'Số dư có thể rút:',
+		availTransferBalance: 'Số dư có thể chuyển:',
+		coinLabel: 'Coin',
+		subCoin: 'Coin phụ',
+		mainCoinLabel: 'Coin chính',
+		transferMainCoinHint: 'Chuyển nội bộ chỉ hỗ trợ coin chính, không hỗ trợ phụ coin (VD:TUSDT,EUSDT).',
+		withdrawNetworkLabel: 'Mạng rút coin',
+		withdrawAmountUsdt: 'Số rút (USDT)',
+		withdrawAmountCoin: 'Số rút ({coin})',
+		transferAmountUsdt: 'Số chuyển (USDT)',
+		transferAmountCoin: 'Số chuyển ({coin})',
+		addressForCoin: 'Nhập địa chỉ {coin}',
+		expectedArrival: 'Ngày dự kiến nhận',
+		minWithdrawRowLabel: 'Tối thiểu rút',
+		internalTransferFeeLabel: 'Phí chuyển nội bộ',
+		free: 'Miễn phí',
+		minTransferRowLabel: 'Tối thiểu chuyển',
+		recipientUidLabel: 'UID người nhận',
+		recipientUidPlaceholder: 'Nhập UID đối phương',
+		addressForNetwork: 'Nhập địa chỉ USDT-{network}',
+		codePlaceholder6Digits: '6 chữ số',
+		googlePlaceholder6: 'Mã xác thực 6 số',
+		sendVerificationCode: 'Gửi mã xác minh',
+		confirmWithdrawSubmit: 'Xác nhận rút tiền',
+		confirmTransferSubmit: 'Xác nhận chuyển tiền',
+		codeSentToEmailToast: 'Mã đã gửi về email',
+		onchainSubmittedPendingToast: 'Yêu cầu rút đã gửi, chờ duyệt',
+		transferSubmittedToast: 'Chuyển nội bộ thành công',
+		submitFailed: 'Gửi yêu cầu thất bại',
+		detailTitleOnChain: 'Chi tiết rút tiền',
+		detailTitleTransfer: 'Chi tiết chuyển nội bộ',
+		amountHeroWithdraw: 'Số lượng rút',
+		amountHeroTransfer: 'Số lượng chuyển',
+		stepApplied: 'Đã gửi đơn',
+		stepDone: 'Hoàn thành',
+		recipientLabel: 'Người nhận',
+		appliedAt: 'Ngày gửi',
+		finishedAt: 'Ngày hoàn tất',
+		cancelApplyFull: 'Hủy yêu cầu',
+		copyBtn: 'Sao chép',
+		bindGoogleFirst: 'Vui lòng liên kết Google trước',
+		errFillAddressBeforeCode: 'Điền địa chỉ rút trước khi lấy mã',
+		errFillAmountBeforeCode: 'Điền số lượng trước khi lấy mã',
+		errFillUidBeforeCode: 'Nhập UID người nhận trước',
+		errFillTransferAmtBeforeCode: 'Nhập số chuyển trước',
+		errEnterWithdrawAddress: 'Nhập địa chỉ ví nhận',
+		errEnterWithdrawAmount: 'Nhập số lượng rút',
+		errMinWithdrawWithAmt: 'Tối thiểu rút {min} {coin}',
+		errMinWithdrawWithAmtUsdt: 'Tối thiểu rút {min} USDT',
+		errExceedWithdrawBalance: 'Vượt quá số dư có thể rút',
+		errEnterFundPassword: 'Nhập mật khẩu quỹ',
+		errEnterEmailCode: 'Nhập mã email',
+		errEnterGoogleCode: 'Nhập mã Google',
+		errEnterRecipientUid: 'Nhập UID người nhận',
+		errEnterTransferAmount: 'Nhập số tiền chuyển',
+		errMinTransferWithAmt: 'Tối thiểu chuyển {min} {coin}',
+		errMinTransferWithAmtUsdt: 'Tối thiểu chuyển {min} USDT',
+		errExceedTransferBalance: 'Vượt quá số dư có thể chuyển',
+	},
+	deposit: {
+		title: 'Nạp coin',
+		address: 'Địa chỉ nạp',
+		network: 'Mạng lưới',
+		saveQrCode: 'Lưu mã QR',
+		addressCopied: 'Đã sao chép địa chỉ',
+		minDeposit: 'Nạp tối thiểu',
+		arrivals: 'Số khối xác nhận',
+		coin: 'Coin nạp',
+		protocol: 'Mạng / Giao thức',
+		subCoin: 'Coin phụ',
+		contract: 'Hợp đồng',
+		depositAmount: 'Số tiền nạp',
+		amountPlaceholder: 'Nhập số lượng',
+		generateOrder: 'Tạo đơn nạp',
+		generating: 'Đang tạo đơn...',
+		notice: 'Lưu ý quan trọng',
+		notice1: 'Tạo đơn trước khi chuyển coin, dùng địa chỉ và số tiền trên đơn.',
+		notice2: 'Không chuyển sai mạng lưới dễ mất vĩnh viễn tài sản.',
+		notice3: 'Sau chuyển tiền gửi TxHash để hệ thống xác nhận nhận tiền.',
+		intro: 'Quy tắc nạp',
+		introText: 'Chọn coin + mạng, nhập số tiền tạo đơn lấy địa chỉ riêng, chuyển tiền trên chuỗi rồi điền mã giao dịch TxHash.',
+		newDeposit: '← Tạo đơn nạp mới',
+		orderInfo: 'Thông tin đơn hàng',
+		orderNo: 'Mã đơn',
+		status: 'Trạng thái',
+		coinLabel: 'Coin',
+		networkLabel: 'Mạng lưới',
+		amount: 'Số tiền',
+		payAddress: 'Địa chỉ nhận tiền',
+		payAddressHint: 'Chuyển đúng số tiền, coin và mạng như trên đơn',
+		qrTitle: 'QR thanh toán',
+		qrHint: 'Quét mã ví chuyển tiền, không sửa địa chỉ/số tiền',
+		contractAddress: 'Địa chỉ hợp đồng',
+		copy: '⎘ Sao chép',
+		copyAddress: 'Sao chép địa chỉ',
+		submitHash: 'Nộp mã giao dịch TxHash',
+		submittingHash: 'Đang gửi...',
+		hashPlaceholder: 'Dán TxHash / Tron TxID',
+		orSubmitHash: 'Sau chuyển tiền điền mã giao dịch',
+		hashRequired: 'Nhập mã giao dịch',
+		statusNotSubmittable: 'Trạng thái hiện tại không nộp được hash',
+		orderCreated: 'Tạo đơn xong, chuyển tiền vào địa chỉ bên dưới',
+		orderFailed: 'Tạo đơn thất bại',
+		addressCopy: 'Đã copy địa chỉ',
+		orderNoCopy: 'Đã copy mã đơn',
+		hashSubmitted: 'Đã gửi mã, chờ xác nhận chuỗi',
+		hashFailed: 'Gửi mã thất bại',
+		broadcastSuccess: 'Giao dịch phát sóng, đã gửi hash',
+		tronBroadcastSuccess: 'Giao dịch Tron phát sóng, gửi TxID xong',
+		noNetwork: 'Không có mạng khả dụng',
+		noSubCoin: 'Không có coin phụ trên mạng này',
+		amountRequired: 'Nhập số tiền nạp',
+		amountPositive: 'Số tiền lớn hơn 0',
+		submittedHash: 'Đã nộp Hash: ',
+		manualDepositTab: 'Nạp thủ công',
+		walletDepositTab: 'Nạp qua ví',
+		walletPayEvm: 'Kết nối ví thanh toán(EVM)',
+		walletPayingEvm: 'Đang xử lý ví EVM...',
+		walletPayTron: 'Kết nối ví thanh toán(Tron)',
+		walletPayingTron: 'Đang xử lý ví Tron...',
+		histLink: 'Lịch sử nạp',
+		retryBtn: 'Thử lại',
+		backWithArrow: '‹ Quay lại',
+		rechargeStatus0: 'Chưa thanh toán',
+		rechargeStatus1: 'Chờ xác nhận chuỗi',
+		rechargeStatus2: 'Hoàn thành',
+		rechargeStatus3: 'Đã hủy',
+		rechargeStatus4: 'Thất bại',
+		statusUnknown: 'Trạng thái {status}',
+		qrAlt: 'Mã QR địa chỉ nhận tiền',
+		loadNetworksFailed: 'Tải danh sách mạng lỗi',
+		wcHintEvmConfigured:
+			'Kết nối WalletConnect ví EVM chuyển đúng số tiền đơn, chọn đúng mạng và coin.',
+		wcHintEvmUnconfigured:
+			'Chưa cấu hình WalletConnect EVM: đặt VITE_WALLETCONNECT_PROJECT_ID hoặc nạp thủ công gửi TxHash.',
+		wcHintTronConfigured:
+			'Dùng WalletConnect Tron ký giao dịch, gửi Tron TxID (không phải hash 0x).',
+		wcHintTronUnconfigured:
+			'Cần VITE_WALLETCONNECT_PROJECT_ID cho Tron, không có thì nạp thủ công gửi TxID.',
+		wcHintTronManualOnly:
+			'Mạng này không hỗ trợ mở ví tự động, chọn nạp thủ công điền TxID.',
+		walletPayFallback: 'Thanh toán ví thất bại',
+		tronWalletPayFallback: 'Thanh toán ví Tron thất bại',
+		currentPrefix: 'Đang chọn:',
+		histEmpty: 'Chưa có lịch sử nạp',
+		histOrderNo: 'Mã đơn',
+		histTx: 'TX:',
+		histLoadMore: 'Tải thêm',
+		histLoadedAll: 'Đã tải toàn bộ',
+	},
+	broker: {
+		title: 'Trung tâm nhà môi giới',
+		applyTitle: 'Đăng ký làm môi giới',
+		myBrokerCode: 'Mã môi giới của tôi',
+		referralCount: 'Số người mời',
+		totalCommission: 'Tổng hoa hồng',
+		applyStatus: 'Trạng thái đơn',
+		pending: 'Chờ duyệt',
+		approved: 'Đã duyệt',
+		rejected: 'Từ chối',
+		defaultName: 'Nhà môi giới',
+		greeting: 'Xin chào, {name}',
+		uidLabel: 'UID: {uid}',
+		introBanner: 'Mời bạn bè đăng ký giao dịch nhận hoa hồng, thanh toán tức thì vào tài khoản mỗi ngày.',
+		statNewToday: 'Người mới hôm nay',
+		statTradeToday: 'Người giao dịch hôm nay',
+		statRebateToday: 'Hoa hồng hôm nay(USDT)',
+		inviteList: 'Danh sách người mời',
+		emptyInviteList: 'Chưa có người được mời',
+		thAccount: 'Tài khoản',
+		thLevel: 'Cấp bậc',
+		thPerpCopy: 'Hợp đồng / Sao chép',
+		levelBroker: 'Môi giới',
+		levelNormal: 'Thường',
+		editRateTooltip: 'Sửa tỷ lệ hoa hồng',
+		todayRebate: 'Hoa hồng hôm nay',
+		emptyTodayRebate: 'Không có hoa hồng hôm nay',
+		thId: 'ID',
+		rebateUsdt: 'Hoa hồng(USDT)',
+		teamDetails: 'Chi tiết đội nhóm',
+		filterAll: 'Tất cả',
+		filterWeek: '7 ngày gần nhất',
+		filterToday: 'Hôm nay',
+		filterMonth: 'Tháng này',
+		teamTotalAssets: 'Tổng tài sản đội nhóm',
+		rebateHistory: 'Lịch sử hoa hồng',
+		emptyRebateHistory: 'Không có lịch sử hoa hồng',
+		amountUsdt: 'Số tiền(USDT)',
+		loadMore: 'Tải thêm',
+		loadingMore: 'Đang tải...',
+		loadedAll: 'Đã hết dữ liệu',
+		editModalTitle: 'Sửa tỷ lệ hoa hồng',
+		perpRebateRate: 'Tỷ lệ hoa hồng hợp đồng vĩnh viễn',
+		copyRebateRate: 'Tỷ lệ hoa hồng sao chép',
+		editTip: 'Thay đổi có hiệu lực ngay lập tức, cẩn thận chỉnh sửa',
+		perpRateError: 'Tỷ lệ hợp đồng là số nguyên từ 0-100',
+		copyRateError: 'Tỷ lệ sao chép là số nguyên từ 0-100',
+		setSuccess: 'Lưu thành công, áp dụng tức thì',
+	},
+	help: {
+		title: 'Trung tâm trợ giúp',
+		supportTitle: 'Hỗ trợ khách hàng',
+		search: 'Tìm kiếm',
+		searchPlaceholder: 'Nhập từ khóa',
+		telegramSupport: 'Hỗ trợ Telegram',
+		quickResponse: 'Trả lời nhanh',
+		emailSupport: 'Hỗ trợ Email',
+		docs: 'Tài liệu hướng dẫn',
+		viewFullGuide: 'Xem hướng dẫn đầy đủ',
+		detailTitle: 'Chi tiết câu hỏi',
+		backToHelp: 'Quay trung tâm trợ giúp',
+	},
+	invite: {
+		title: 'Mời bạn bè',
+		myCode: 'Mã mời của tôi',
+		copy: 'Sao chép mã',
+		copied: 'Đã copy mã mời',
+		share: 'Chia sẻ link mời',
+		shareLink: 'Sao chép link mời',
+		linkCopied: 'Đã copy link',
+		desc: 'Mời bạn đăng ký, nhận hoa hồng khi bạn giao dịch',
+		totalInvited: 'Tổng người đã mời',
+		totalReward: 'Tổng hoa hồng nhận được',
+		noRecord: 'Không có bản ghi mời',
+		heroLine1: 'Mời bạn bè',
+		heroLine2: 'Kiếm hoa hồng',
+		heroDesc:
+			'Mỗi bạn bè đăng ký qua link bạn có thể tham gia chương trình hoa hồng, quy tắc chi tiết theo thông báo nền tảng.',
+		myInviteInfo: 'Thông tin mời của tôi',
+		inviteCodeLabel: 'Mã mời',
+		inviteLinkShort: 'Link mời',
+		qrCodeLabel: 'Mã QR',
+		copyShort: 'Copy',
+		copiedDone: 'Đã copy ✓',
+		qrInviteAlt: 'Mã QR mời đăng ký',
+		scanToRegister: 'Quét mã đăng ký',
+		rebateRulesTitle: 'Quy tắc hoa hồng',
+		step1Title: 'Chia sẻ mã mời',
+		step1Desc: 'Gửi mã/link riêng cho bạn bè',
+		step2Title: 'Bạn bè đăng ký',
+		step2Desc: 'Bạn bè hoàn tất đăng ký và xác minh theo quy định',
+		step3Title: 'Nhận hoa hồng',
+		step3Desc: 'Hoa hồng từ phí giao dịch bạn bè về tài khoản theo quy tắc nền tảng',
+	},
+	futuresPage: futuresPageByLocale.vi,
+	spot: {
+		tag: 'Giao ngay',
+		side: { buy: 'Mua', sell: 'Bán' },
+		orderType: { limit: 'Giá giới hạn', market: 'Thị trường' },
+		orderStatus: {
+			pending: 'Đang khớp',
+			partial: 'Khớp một phần',
+			filled: 'Đã khớp hết',
+			cancelled: 'Đã hủy',
+			pending_cancel: 'Đang hủy',
+			expired: 'Hết hạn',
+			init: 'Khởi tạo',
+		},
+		recordType: {
+			transferIn: 'Nạp vào tài khoản',
+			transferOut: 'Rút ra tài khoản',
+			orderFreeze: 'Đóng băng đặt lệnh',
+			cancelUnfreeze: 'Giải đóng băng hủy lệnh',
+			trade: 'Giao dịch',
+			fee: 'Phí giao dịch',
+			unfreeze: 'Giải đóng băng',
+			unknown: 'Loại {type}',
+		},
+		tabs: {
+			currentOrders: 'Lệnh đang mở',
+			historyOrders: 'Lịch sử lệnh',
+			trades: 'Lịch sử khớp lệnh',
+			funding: 'Lịch sử dòng tiền',
+		},
+		table: {
+			pair: 'Cặp giao dịch',
+			side: 'Hướng',
+			type: 'Loại',
+			price: 'Giá',
+			orderPrice: 'Giá đặt lệnh',
+			amount: 'Số lượng',
+			orderAmount: 'Khối lượng đặt',
+			filled: 'Đã khớp',
+			status: 'Trạng thái',
+			time: 'Thời gian',
+			action: 'Thao tác',
+			dealPrice: 'Giá khớp',
+			dealVolume: 'Khối lượng khớp',
+			turnover: 'Giá trị giao dịch',
+			recordType: 'Loại',
+			quantity: 'Số lượng',
+			coin: 'Đồng tiền mã hóa',
+		},
+		trade: {
+			buy: 'Mua',
+			sell: 'Bán',
+			limit: 'Lệnh giá giới hạn',
+			market: 'Lệnh giá thị trường',
+			processing: 'Đang xử lý...',
+			buySymbol: 'Mua {symbol}',
+			sellSymbol: 'Bán {symbol}',
+			priceUsdt: 'Giá (USDT)',
+			limitPlaceholder: 'Giá giới hạn',
+			marketHint: 'Khớp lệnh theo giá tốt nhất thị trường',
+			amountUsdt: 'Số tiền (USDT)',
+			amountBase: 'Số lượng ({base})',
+			available: 'Có sẵn',
+			transfer: 'Chuyển nội bộ',
+			loginForBalance: 'Đăng nhập để xem số dư khả dụng',
+			spotAssets: 'Tài sản giao ngay',
+		},
+		order: {
+			cancel: 'Hủy lệnh',
+			cancelAll: 'Hủy tất cả lệnh',
+		},
+		empty: {
+			loginLink: 'Đăng nhập',
+			loginOrdersPrompt: '{link} để xem danh sách lệnh',
+			loginViewPrompt: '{link} để xem dữ liệu',
+			noOrders: 'Chưa có lệnh đặt',
+			noHistoryOrders: 'Chưa có lịch sử lệnh',
+			noTrades: 'Chưa có giao dịch khớp lệnh',
+			noFunding: 'Chưa có bản ghi',
+		},
+		errors: {
+			symbolNotReady: 'Cặp giao dịch chưa sẵn sàng',
+			invalidAmount: 'Vui lòng nhập số lượng hợp lệ',
+			invalidPrice: 'Vui lòng nhập mức giá hợp lệ',
+			minLimitVolume: 'Số lượng không được nhỏ hơn {min}',
+			minMarketBuy: 'Số tiền mua thị trường tối thiểu {min} USDT',
+			minMarketSell: 'Số lượng bán thị trường tối thiểu {min}',
+			orderSubmitted: 'Đặt lệnh thành công',
+			orderFailed: 'Đặt lệnh thất bại',
+			cancelSuccess: 'Đã hủy lệnh',
+			cancelFailed: 'Hủy lệnh thất bại',
+			cancelAllSuccess: 'Hủy tất cả lệnh thành công',
+			cancelAllPartialFailed: 'Một số lệnh hủy không thành công',
+		},
+		loadedAll: 'Đã tải toàn bộ dữ liệu',
+		ticker: {
+			change24h: 'Thay đổi 24h',
+			high24h: 'Giá cao nhất 24h',
+			low24h: 'Giá thấp nhất 24h',
+			turnover24h: 'Khối lượng giao dịch 24h',
+		},
+		chartSub: { chart: 'Biểu đồ', coinInfo: 'Thông tin coin' },
+		tf: {
+			m1: '1m', 
+			m5: '5m', 
+			m15: '15m', 
+			m30: '30m', 
+			h1: '1h', 
+			h4: '4h', 
+			d1: '1d',
+			w1: '1w',
+			mo1: '1mon',
+			mo3: '3mon'
+		},
+		ohlcv: {
+			spotLabel: 'Giao ngay',
+			open: 'Mở',
+			high: 'Cao',
+			low: 'Thấp',
+			close: 'Đóng',
+			volume: 'Khối lượng',
+			changePct: 'Tỷ lệ tăng giá',
+		},
+		draw: {
+			cursor: 'Con trỏ',
+			trend: 'Đường xu hướng',
+			hline: 'Đường ngang',
+			ray: 'Đường tia',
+			channel: 'Kênh giá',
+			fib: 'Đường thoái lui Fibonacci',
+			text: 'Ghi chú chữ',
+			clearAll: 'Xóa tất cả ghi chú',
+			zoomOut: 'Thu nhỏ',
+		},
+		mobileTab: { chart: 'Bảng giá', trade: 'Giao dịch' },
+		pair: {
+			search: 'Tìm kiếm',
+			loading: 'Đang tải…',
+			noMatch: 'Không tìm thấy kết quả phù hợp',
+			retryLater: ', vui lòng thử lại sau',
+		},
+		book: {
+			waiting: 'Đang chờ dữ liệu…',
+			orderbook: 'Sổ lệnh',
+			trades: 'Giao dịch gần nhất',
+			priceUsdt: 'Giá(USDT)',
+			amountBase: 'Số lượng({base})',
+			total: 'Tổng',
+			buyRatio: 'Mua {n}%',
+			sellRatio: '{n}% Bán',
+			price: 'Giá',
+			amount: 'Số lượng',
+			time: 'Thời gian',
+			pricePrecision: 'Số chữ số thập phân giá',
+		},
+		coinInfo: {
+			marketCap: 'Vốn hóa thị trường',
+			circulating: 'Nguồn cung lưu hành',
+			issuePrice: 'Giá phát hành',
+			ath: 'Đỉnh giá lịch sử',
+			athDate: 'Ngày ATH',
+			whitepaper: 'Tài liệu Whitepaper',
+			empty: 'Chưa có thông tin đồng coin',
+			reload: 'Tải lại',
+		},
+		transferModal: {
+			title: 'Chuyển nội bộ quỹ',
+			selectCoin: 'Loại coin',
+			amount: 'Số lượng chuyển',
+			amountPlaceholder: 'Vui lòng nhập số lượng',
+			availableUsdt: 'Số USDT có thể chuyển:',
+			availableCoin: 'Số {coin} có thể chuyển:',
+			transferring: 'Đang chuyển...',
+			invalidAmount: 'Vui lòng nhập số lượng chuyển hợp lệ',
+			insufficientBalance: 'Số lượng chuyển vượt quá số dư khả dụng',
+			transferFailed: 'Chuyển thất bại, vui lòng thử lại sau',
+		},
+	}
+}

+ 11 - 1
code/src/locales/zh-CN.ts

@@ -26,6 +26,13 @@ export default {
     ja: '日本語',
     hi: 'हिन्दी',
     id: 'Bahasa Indonesia',
+	es: 'Español',		   // 西班牙语
+	ru: 'Русский',         // 俄语
+	pt: 'Português',       // 葡萄牙语
+	de: 'Deutsch',         // 德语
+	fr: 'Français',        // 法语
+	tr: 'Türkçe',          // 土耳其语
+	vi: 'Tiếng Việt'       // 越南语
   },
   header: {
     login: '登录',
@@ -103,7 +110,7 @@ export default {
     aboutUs: '关于我们',
     aboutDesc: 'iBit 是一家面向全球用户的数字资产交易平台,致力于通过技术创新与合规运营,为用户提供安全、稳定、高效的交易服务。',
     foundedYear: '始创于 2023 年',
-    headquarters: '新加坡总部',
+    headquarters: '总部在迪拜(注册在迪拜),拥有美国、加拿大、澳洲等相关牌照',
     ourVision: '我们的愿景',
     visionSubtitle: '构建一个值得长期信赖的全球数字资产交易基础设施',
     ecoTitle: '生态',
@@ -990,6 +997,9 @@ export default {
       h1: '1小时',
       h4: '4小时',
       d1: '1日',
+	  w1: "1周",
+	  mo1: "1月",
+	  mo3: "3月"
     },
     ohlcv: {
       spotLabel: '现货',

+ 13 - 2
code/src/locales/zh-TW.ts

@@ -100,7 +100,7 @@ export default {
     aboutUs: '關於我們',
     aboutDesc: 'iBit 是一家面向全球用戶的數位資產交易平台,致力於通過技術創新與合規營運,為用戶提供安全、穩定、高效的交易服務。',
     foundedYear: '始創於 2023 年',
-    headquarters: '新加坡總部',
+    headquarters: '總部在杜拜 (註冊在杜拜),擁有美國、加拿大、澳洲等相關牌照',
     ourVision: '我們的願景',
     visionSubtitle: '構建一個值得長期信賴的全球數位資產交易基礎設施',
     ecoTitle: '生態',
@@ -970,7 +970,18 @@ export default {
       turnover24h: '24h成交額',
     },
     chartSub: { chart: '圖表', coinInfo: '幣種資料' },
-    tf: { m1: '1分', m5: '5分', m15: '15分', m30: '30分', h1: '1小時', h4: '4小時', d1: '1日' },
+    tf: { 
+      m1: '1分', 
+      m5: '5分', 
+      m15: '15分', 
+      m30: '30分', 
+      h1: '1小時', 
+      h4: '4小時', 
+      d1: '1日',
+      w1: '1週',
+      mo1: '1月',
+      mo3: '3月'
+    },
     ohlcv: {
       spotLabel: '現貨',
       open: '開',

+ 5 - 0
code/src/stores/coins.ts

@@ -48,6 +48,7 @@ interface RawCoinInfo {
   icon: string | null
   coinScale: number
   baseCoinScale: number
+  stockType: number
 }
 
 // 内部维护的交易对对象
@@ -70,6 +71,7 @@ export interface CoinContract {
   change: string
   volume: string
   turnover: string
+  stockType: number
 }
 
 export const useCoinsStore = defineStore('coins', () => {
@@ -136,10 +138,12 @@ export const useCoinsStore = defineStore('coins', () => {
             // 价格字段初始为空,等 WebSocket 推送
             open: '0', high: '0', low: '0', close: '0',
             chg: '0', change: '0', volume: '0', turnover: '0',
+			stockType: raw.stockType,
           }))
         fetched.value = true
         // Step 2: 订阅 WebSocket 获取实时价格和涨跌幅
         startLivePrices()
+		// console.log("搜索列表数据:",coins.value)
       }
     } catch { /* silent */ }
     loading.value = false
@@ -211,6 +215,7 @@ export const useCoinsStore = defineStore('coins', () => {
       change: c.change,
       volume: c.volume,
       turnover: c.turnover,
+	  stockType: c.stockType,
     }))
   )
 

+ 2 - 1
code/src/stores/futures.ts

@@ -15,6 +15,7 @@ export interface Ticker {
   change: string
   volume: string
   turnover: string
+  stockType: number
 }
 
 export interface OrderItem {
@@ -238,7 +239,7 @@ export interface FundingRateHistory {
   fundingTime?: number | string  // 毫秒时间戳或 ISO 字符串
 }
 
-export type KlineResolution = '1' | '5' | '15' | '30' | '60' | '240' | '1D'
+export type KlineResolution = '1' | '5' | '15' | '30' | '60' | '240' | '1D'| '1W' | '1M' | '3M'
 
 // 保证金模式:cross=全仓, split=分仓(后端 positionType: 0=全仓, 1=分仓)
 export type MarginMode = 'cross' | 'split'

+ 21 - 5
code/src/views/FuturesView.vue

@@ -253,6 +253,7 @@ const ws = useMarketWs({
       turnover: data.turnover,
       chg,
       change,
+	  stockType: data.stockType
     }
   },
   onMark(data) {
@@ -335,6 +336,9 @@ const TF_OPTIONS = computed<{ label: string; value: KlineResolution }[]>(() => [
   { label: t('futuresPage.tf.h1'), value: '60' },
   { label: t('futuresPage.tf.h4'), value: '240' },
   { label: t('futuresPage.tf.d1'), value: '1D' },
+  { label: t('futuresPage.tf.w1'), value: '1W' },
+  { label: t('futuresPage.tf.mo1'), value: '1M' },
+  { label: t('futuresPage.tf.mo3'), value: '3M' },
 ])
 
 const DRAW_TOOLS: Record<string, string> = {
@@ -451,7 +455,7 @@ function initChart() {
       name: 'MA',
       calcParams: [5, 10, 30],
       styles: { lines: [{ color: '#f0b90b', size: 1 }, { color: '#5d9cf5', size: 1 }, { color: '#e84d5b', size: 1 }] },
-    }, { isStack: true, pane: { id: 'candle_pane' } })
+    }, { isStack: false, pane: { id: 'candle_pane' } } as any)
   }
   if (showVol.value) {
 
@@ -462,7 +466,7 @@ function initChart() {
         lastValueMark: { show: false },
         tooltip: { showRule: 'none' },
       }},
-      { isStack: false, pane: { id: 'vol-pane', height: 80, minHeight: 40 } },
+      { isStack: false, pane: { id: 'vol-pane', height: 80, minHeight: 40 }} as any,
     )
   }
 
@@ -544,7 +548,7 @@ watch(klines, updateChart)
 watch(showMA, (show) => {
   if (!chart) return
   if (show) {
-    chart.createIndicator({ name: 'MA', calcParams: [5, 10, 30], styles: { lines: [{ color: '#f0b90b', size: 1 }, { color: '#5d9cf5', size: 1 }, { color: '#e84d5b', size: 1 }] } }, { isStack: true, pane: { id: 'candle_pane' } })
+    chart.createIndicator({ name: 'MA', calcParams: [5, 10, 30], styles: { lines: [{ color: '#f0b90b', size: 1 }, { color: '#5d9cf5', size: 1 }, { color: '#e84d5b', size: 1 }] } }, { isStack: true, pane: { id: 'candle_pane' } } as any)
   } else {
     chart.removeIndicator({ name: 'MA', paneId: 'candle_pane' })
   }
@@ -560,19 +564,30 @@ watch(showVol, (show) => {
         lastValueMark: { show: false },
         tooltip: { showRule: 'none' },
       }},
-      { isStack: false, pane: { id: 'vol-pane', height: 80, minHeight: 40 } },
+      { isStack: false, pane: { id: 'vol-pane', height: 80, minHeight: 40 } } as any,
     )
   } else {
     chart.removeIndicator({ name: 'VOL', paneId: 'vol-pane' })
   }
 })
 
-// ── Pair selector ──────────────────────────────────────
+// ── 搜索框input selector ──────────────────────────────────────
 const filteredTickers = computed(() => {
   const q = pairSearch.value.toLowerCase()
+  // console.log("搜索列表数据:",allTickers.value)
   return allTickers.value.filter(t => t.symbol.toLowerCase().includes(q))
 })
 
+// 搜索标签:股票类型' 1.加密货币,2.大宗商品 3.贵金属 4.外汇
+const serchTagItems = computed(() => {
+  return [
+    { key: 'futuresPage.pairSearchTag.oneType', value: 1 },
+    { key: 'futuresPage.pairSearchTag.twoType', value: 2 },
+    { key: 'futuresPage.pairSearchTag.threeType', value: 3 },
+    { key: 'futuresPage.pairSearchTag.fourType', value: 4 },
+  ]
+})
+
 function coinIcon(sym: string): string {
   return coinsStore.coins.find(c => c.symbol === sym)?.icon ?? ''
 }
@@ -1837,6 +1852,7 @@ onUnmounted(() => {
               <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#6a7182" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
               <input v-model="pairSearch" class="pair-search-input" :placeholder="t('futuresPage.pairSearchPlaceholder')" autofocus />
             </div>
+			
             <div class="pair-list">
               <div
                 v-for="t in filteredTickers" :key="t.symbol"

+ 7 - 4
code/src/views/spot/SpotView.vue

@@ -481,6 +481,9 @@ const tfOptions = computed((): { label: string; value: KlineResolution }[] => [
   { label: t('spot.tf.h1'), value: '60' },
   { label: t('spot.tf.h4'), value: '240' },
   { label: t('spot.tf.d1'), value: '1D' },
+  { label: t('spot.tf.w1'), value: '1W' },
+  { label: t('spot.tf.mo1'), value: '1M' },
+  { label: t('spot.tf.mo3'), value: '3M' },
 ])
 
 const DRAW_TOOLS: Record<string, string> = {
@@ -597,7 +600,7 @@ function initChart() {
     chart.createIndicator({
       name: 'MA', calcParams: [5, 10, 30],
       styles: { lines: [{ color: '#f0b90b', size: 1 }, { color: '#5d9cf5', size: 1 }, { color: '#e84d5b', size: 1 }] },
-    }, { isStack: true, pane: { id: 'candle_pane' } })
+    }, { isStack: true, pane: { id: 'candle_pane' } } as any)
   }
   if (showVol.value) {
     chart.createIndicator(
@@ -607,7 +610,7 @@ function initChart() {
         lastValueMark: { show: false },
         tooltip: { showRule: 'none' },
       }},
-      { isStack: false, pane: { id: 'vol-pane', height: 80, minHeight: 40 } },
+      { isStack: false, pane: { id: 'vol-pane', height: 80, minHeight: 40 } } as any,
     )
   }
 
@@ -665,7 +668,7 @@ function zoomOut() { (chart as any)?.zoomAtCoordinate?.(0.8) }
 watch(showMA, (show) => {
   if (!chart) return
   if (show) {
-    chart.createIndicator({ name: 'MA', calcParams: [5, 10, 30], styles: { lines: [{ color: '#f0b90b', size: 1 }, { color: '#5d9cf5', size: 1 }, { color: '#e84d5b', size: 1 }] } }, { isStack: true, pane: { id: 'candle_pane' } })
+    chart.createIndicator({ name: 'MA', calcParams: [5, 10, 30], styles: { lines: [{ color: '#f0b90b', size: 1 }, { color: '#5d9cf5', size: 1 }, { color: '#e84d5b', size: 1 }] } }, { isStack: true, pane: { id: 'candle_pane' } } as any)
   } else {
     chart.removeIndicator({ name: 'MA', paneId: 'candle_pane' })
   }
@@ -679,7 +682,7 @@ watch(showVol, (show) => {
         lines: [{ size: 0, color: 'rgba(0,0,0,0)' }, { size: 0, color: 'rgba(0,0,0,0)' }, { size: 0, color: 'rgba(0,0,0,0)' }],
         lastValueMark: { show: false }, tooltip: { showRule: 'none' },
       }},
-      { isStack: false, pane: { id: 'vol-pane', height: 80, minHeight: 40 } },
+      { isStack: false, pane: { id: 'vol-pane', height: 80, minHeight: 40 } } as any,
     )
   } else {
     chart.removeIndicator({ name: 'VOL', paneId: 'vol-pane' })

+ 1 - 0
code/vite.config.ts

@@ -21,6 +21,7 @@ export default defineConfig(({ mode }) => {
       }
     },
     server: {
+	  host: '0.0.0.0',
       port: 5173,
       proxy: {
         '/api': {