33import { useState , useEffect , useRef , useCallback , useMemo , memo } from "react" ;
44import type { ProcessedMarket } from "@/types" ;
55import { SERIES_COLORS , MA_COLORS } from "@/lib/chartConstants" ;
6+ import { useI18n } from "@/i18n" ;
67
78type TimeRange = "1h" | "24h" | "7d" | "30d" ;
89type ChartMode = "candle" | "line" ;
@@ -134,6 +135,7 @@ function getLightweightCharts() {
134135}
135136
136137function ChartPanelInner ( { selectedMarket, lineOnly = false } : ChartPanelProps ) {
138+ const { t } = useI18n ( ) ;
137139 const [ timeRange , setTimeRange ] = useState < TimeRange > ( "24h" ) ;
138140 const [ chartMode , setChartMode ] = useState < ChartMode > ( "candle" ) ;
139141 const [ showMA , setShowMA ] = useState ( true ) ;
@@ -471,7 +473,7 @@ function ChartPanelInner({ selectedMarket, lineOnly = false }: ChartPanelProps)
471473 if ( ! selectedMarket ) {
472474 return (
473475 < div className = "text-[12px] text-[var(--text-muted)] font-mono p-2" >
474- select a market to view price chart
476+ { t ( " chart.selectMarket" ) }
475477 </ div >
476478 ) ;
477479 }
@@ -503,24 +505,24 @@ function ChartPanelInner({ selectedMarket, lineOnly = false }: ChartPanelProps)
503505 < div className = "w-px h-3 bg-[#2a2a2a]" />
504506 < div className = "flex items-center gap-2 text-[9px] tabular-nums" >
505507 { selectedMarket . indicators . momentum !== null && (
506- < span title = "Momentum: price change acceleration" >
507- < span className = "text-[#555]" > Mtm </ span >
508+ < span title = { t ( "chart.momentumDesc" ) } >
509+ < span className = "text-[#555]" > { t ( "chart.momentumIndicator" ) } </ span >
508510 < span style = { { color : selectedMarket . indicators . momentum > 0.01 ? "#22c55e" : selectedMarket . indicators . momentum < - 0.01 ? "#ff4444" : "#888" } } >
509511 { selectedMarket . indicators . momentum > 0 ? "+" : "" } { ( selectedMarket . indicators . momentum * 100 ) . toFixed ( 2 ) } %
510512 </ span >
511513 </ span >
512514 ) }
513515 { selectedMarket . indicators . volatility !== null && (
514- < span title = "Volatility: 24h prob standard deviation" >
515- < span className = "text-[#555]" > Vol { "\u03C3" } </ span >
516+ < span title = { t ( "chart.volatilityDesc" ) } >
517+ < span className = "text-[#555]" > { t ( "chart.volatilityIndicator" ) } { "\u03C3" } </ span >
516518 < span style = { { color : selectedMarket . indicators . volatility > 0.05 ? "#f59e0b" : "#888" } } >
517519 { ( selectedMarket . indicators . volatility * 100 ) . toFixed ( 1 ) } %
518520 </ span >
519521 </ span >
520522 ) }
521523 { selectedMarket . indicators . orderFlowImbalance !== null && (
522- < span title = "Order flow imbalance: (smart buys - sells) / total" >
523- < span className = "text-[#555]" > Flow </ span >
524+ < span title = { t ( "chart.flowDesc" ) } >
525+ < span className = "text-[#555]" > { t ( "chart.flowIndicator" ) } </ span >
524526 < span style = { { color : selectedMarket . indicators . orderFlowImbalance > 0.1 ? "#22c55e" : selectedMarket . indicators . orderFlowImbalance < - 0.1 ? "#ff4444" : "#888" } } >
525527 { selectedMarket . indicators . orderFlowImbalance > 0 ? "+" : "" } { ( selectedMarket . indicators . orderFlowImbalance * 100 ) . toFixed ( 0 ) } %
526528 </ span >
@@ -543,7 +545,7 @@ function ChartPanelInner({ selectedMarket, lineOnly = false }: ChartPanelProps)
543545 < button onClick = { ( ) => setUseUTC ( v => ! v ) }
544546 className = "px-1.5 py-0.5 text-[9px] transition-all"
545547 style = { { color : "#888" , background : useUTC ? "#2a2a2a" : "transparent" , border : "1px solid #222" , borderRadius : 2 } }
546- title = { useUTC ? "Showing UTC time — click for local" : "Showing local time — click for UTC" } >
548+ title = { useUTC ? t ( "chart.showingUtc" ) : t ( "chart.showingLocal" ) } >
547549 { useUTC ? "UTC" : "Local" }
548550 </ button >
549551 </ div >
@@ -591,7 +593,7 @@ function ChartPanelInner({ selectedMarket, lineOnly = false }: ChartPanelProps)
591593 < span style = { { color : MA_COLORS . ma20 } } > MA20</ span >
592594 </ >
593595 ) }
594- < span className = "text-[#444]" > hover chart for details </ span >
596+ < span className = "text-[#444]" > { t ( " chart.hoverForDetails" ) } </ span >
595597 </ >
596598 ) }
597599 </ div >
@@ -607,7 +609,7 @@ function ChartPanelInner({ selectedMarket, lineOnly = false }: ChartPanelProps)
607609 { error && ! loading && (
608610 < div className = "absolute inset-0 flex items-center justify-center z-10" style = { { background : "#0d0d0d99" } } >
609611 < div className = "text-[11px] text-[var(--red)] font-mono text-center" aria-live = "polite" >
610- { error } < button onClick = { ( ) => { retryCount . current = 0 ; setChartData ( null ) ; } } className = "ml-2 underline" > retry</ button >
612+ { t ( "common.loadFailed" ) } < button onClick = { ( ) => { retryCount . current = 0 ; setChartData ( null ) ; } } className = "ml-2 underline" > { t ( "common. retry" ) } </ button >
611613 </ div >
612614 </ div >
613615 ) }
0 commit comments