dark(ship-gis) 프로젝트의 맵 기반 3대 기능을 API 탐색기에 이관. Feature 폴더 모듈화 구조로 타 프로젝트 재활용 가능하게 구성. Phase 1: vessel-map 공유 모듈 (Deck.gl 9 + Zustand 5 + STOMP) Phase 2: 최근 위치 (30초 폴링 + IconLayer + 선종 필터 + 팝업) Phase 3: 선박 항적 (MMSI 조회 + PathLayer + 타임라인 보간) Phase 4: 뷰포트 리플레이 (STOMP WebSocket 청크 + TripsLayer 애니메이션) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
185 lines
6.1 KiB
TypeScript
185 lines
6.1 KiB
TypeScript
const en = {
|
|
// Navigation
|
|
'nav.dashboard': 'Dashboard',
|
|
'nav.jobs': 'Job Monitor',
|
|
'nav.pipeline': 'Pipeline',
|
|
'nav.apiExplorer': 'API Explorer',
|
|
'nav.abnormal': 'Abnormal',
|
|
'nav.areaStats': 'Area Stats',
|
|
'nav.metrics': 'Metrics',
|
|
|
|
// Common
|
|
'common.loading': 'Loading...',
|
|
'common.noData': 'No data available',
|
|
'common.close': 'Close',
|
|
'common.prev': 'Prev',
|
|
'common.next': 'Next',
|
|
'common.items': '',
|
|
'common.of': 'of',
|
|
'common.day': 'd',
|
|
'common.min': 'min',
|
|
'common.sec': 'sec',
|
|
'common.themeToggle': 'Toggle theme',
|
|
'common.langToggle': 'Switch language',
|
|
|
|
// Dashboard
|
|
'dashboard.title': 'Dashboard',
|
|
'dashboard.totalExec': 'Total Executions',
|
|
'dashboard.successRate': 'Success Rate',
|
|
'dashboard.avgDuration': 'Avg Duration',
|
|
'dashboard.totalProcessed': 'Total Processed',
|
|
'dashboard.periodBasis': 'd basis',
|
|
'dashboard.avgPerJob': '/job avg',
|
|
'dashboard.runningJobs': 'Running Jobs',
|
|
'dashboard.noRunningJobs': 'No running jobs',
|
|
'dashboard.delay': 'Processing Delay',
|
|
'dashboard.delayMin': 'min delay',
|
|
'dashboard.aisLatest': 'AIS Latest',
|
|
'dashboard.processLatest': 'Process Latest',
|
|
'dashboard.aisReceived': 'AIS Received',
|
|
'dashboard.vesselsProcessed': 'Vessels Processed',
|
|
'dashboard.systemMetrics': 'System Metrics',
|
|
'dashboard.memory': 'Memory',
|
|
'dashboard.threads': 'Threads',
|
|
'dashboard.dbConn': 'DB Connections',
|
|
'dashboard.recordsSec': 'Records/sec',
|
|
'dashboard.cacheStatus': 'Cache Status',
|
|
'dashboard.hitRate': 'Hit Rate',
|
|
'dashboard.size': 'Size',
|
|
'dashboard.hits': 'Hits',
|
|
'dashboard.misses': 'Misses',
|
|
'dashboard.dailyVolume': 'Daily Processing Volume',
|
|
|
|
// Job Monitor
|
|
'jobs.title': 'Job Monitor',
|
|
'jobs.all': 'All',
|
|
'jobs.track5min': 'Track (5min)',
|
|
'jobs.hourly': 'Hourly',
|
|
'jobs.daily': 'Daily',
|
|
'jobs.status': 'Status',
|
|
'jobs.job': 'Job',
|
|
'jobs.id': 'ID',
|
|
'jobs.start': 'Start',
|
|
'jobs.duration': 'Duration',
|
|
'jobs.read': 'Read',
|
|
'jobs.write': 'Write',
|
|
'jobs.skip': 'Skip',
|
|
'jobs.stepDetails': 'Step Details',
|
|
'jobs.step': 'Step',
|
|
'jobs.commits': 'Commits',
|
|
'jobs.errors': 'Errors',
|
|
|
|
// Pipeline
|
|
'pipeline.title': 'Data Pipeline',
|
|
'pipeline.flowTitle': 'Processing Flow',
|
|
'pipeline.collect1min': '1min Collect',
|
|
'pipeline.aggregate5min': '5min Aggregate',
|
|
'pipeline.mergeHourly': 'Hourly Merge',
|
|
'pipeline.mergeDaily': 'Daily Merge',
|
|
'pipeline.executions': ' executions',
|
|
'pipeline.totalTime': 'total time',
|
|
'pipeline.processingDelay': 'Processing Delay',
|
|
'pipeline.delayMin': 'min delay',
|
|
'pipeline.aisLatest': 'AIS Latest',
|
|
'pipeline.processLatest': 'Process Latest',
|
|
'pipeline.cacheOverview': 'Cache Overview',
|
|
'pipeline.cachedDays': 'days cached',
|
|
'pipeline.totalHitRate': 'Total Hit Rate',
|
|
'pipeline.dailyThroughput': 'Daily Throughput Trend',
|
|
'pipeline.totalProcessed': 'Total Processed',
|
|
'pipeline.vesselJobs': 'Vessel Jobs',
|
|
'pipeline.trackJobs': 'Track Jobs',
|
|
'pipeline.recentJobs': 'Recent Executions',
|
|
'pipeline.totalExec': 'Total Executions',
|
|
'pipeline.totalRecords': 'Total Records',
|
|
'pipeline.avgDuration': 'Avg Duration',
|
|
'pipeline.successRate': 'success rate',
|
|
|
|
// Area Stats
|
|
'area.title': 'Area Statistics',
|
|
'area.activeHaegu': 'Active Areas',
|
|
'area.activeHaeguDesc': 'Areas with vessels',
|
|
'area.totalVessels': 'Total Vessels',
|
|
'area.dataQuality': 'Data Quality',
|
|
'area.avgDensity': 'Avg Density',
|
|
'area.haeguStats': 'Area Status',
|
|
'area.haeguNo': 'Area No.',
|
|
'area.haeguName': 'Area Name',
|
|
'area.currentVessels': 'Vessels',
|
|
'area.avgSpeed': 'Avg Speed',
|
|
'area.avgDensityCol': 'Avg Density',
|
|
'area.lastUpdate': 'Last Update',
|
|
'area.throughput': 'Throughput',
|
|
'area.vesselsPerMin': 'vessels/min',
|
|
'area.vesselsPerHour': 'vessels/hour',
|
|
'area.tableSizes': 'Table Sizes',
|
|
'area.dataQualityTitle': 'Data Quality Check',
|
|
'area.duplicates': 'Duplicate Tracks',
|
|
'area.stalePositions': 'Stale Positions',
|
|
'area.checkedAt': 'Checked at',
|
|
'area.haeguMap': 'Vessel Distribution by Area',
|
|
'area.mapLegend': 'Vessels',
|
|
'area.vessels': ' vessels',
|
|
|
|
// API Explorer
|
|
'explorer.title': 'API Explorer',
|
|
'explorer.apiType': 'API Type',
|
|
'explorer.recentPositions': 'Recent Positions',
|
|
'explorer.vesselTracks': 'Vessel Tracks',
|
|
'explorer.viewportReplay': 'Viewport Replay',
|
|
'explorer.parameters': 'Parameters',
|
|
'explorer.positionsDesc': 'Fetches vessels with position updates within 10 minutes.',
|
|
'explorer.vesselDesc': 'Fetches tracks for specific vessels by MMSI list.',
|
|
|
|
// Abnormal Tracks
|
|
'abnormal.title': 'Abnormal Tracks',
|
|
'abnormal.totalDetected': 'Total Detected',
|
|
'abnormal.last7days': 'Last 7 days',
|
|
'abnormal.affectedVessels': 'Affected Vessels',
|
|
'abnormal.typeCount': 'Type Count',
|
|
'abnormal.maxSpeed': 'Max Speed',
|
|
'abnormal.byType': 'By Type',
|
|
'abnormal.allTypes': 'All',
|
|
'abnormal.vessels': ' vessels',
|
|
'abnormal.dailyTrend': 'Daily Trend',
|
|
'abnormal.recentList': 'Recent Detections',
|
|
'abnormal.type': 'Type',
|
|
'abnormal.time': 'Time',
|
|
'abnormal.distance': 'Distance',
|
|
'abnormal.avgSpeedCol': 'Avg Speed',
|
|
'abnormal.maxSpeedCol': 'Max Speed',
|
|
'abnormal.points': 'Points',
|
|
|
|
// Metrics
|
|
'metrics.title': 'System Metrics',
|
|
'metrics.heapMemory': 'Heap Memory',
|
|
'metrics.threads': 'Threads',
|
|
'metrics.dbActive': 'DB Active Conn.',
|
|
'metrics.recordsPerSec': 'Records/sec',
|
|
'metrics.cacheDetail': 'Cache Details',
|
|
'metrics.cacheLayer': 'Cache Layer',
|
|
'metrics.size': 'Size',
|
|
'metrics.maxSize': 'Max',
|
|
'metrics.utilization': 'Utilization',
|
|
'metrics.hitRate': 'Hit Rate',
|
|
'metrics.processingDelay': 'Processing Delay',
|
|
'metrics.delayMinutes': 'Delay',
|
|
'metrics.aisCount': 'AIS Received',
|
|
'metrics.processedVessels': 'Processed',
|
|
'metrics.status': 'Status',
|
|
'metrics.cacheHitSummary': 'Cache Hit Summary',
|
|
'metrics.hits': 'Hits',
|
|
'metrics.misses': 'Misses',
|
|
'metrics.dbMetricsPlaceholder': 'API/WS History Metrics (Coming Soon)',
|
|
'metrics.dbMetricsDesc': 'REST/WebSocket request history, response sizes, latency DB storage + query',
|
|
|
|
// Time Range
|
|
'range.1d': '1D',
|
|
'range.3d': '3D',
|
|
'range.7d': '7D',
|
|
'range.14d': '14D',
|
|
'range.30d': '30D',
|
|
} as const
|
|
|
|
export default en
|