// Temporary translation system until Docker rebuild const translations = { en: { navigation: { dashboard: 'Dashboard', detections: 'Detections', devices: 'Devices', alerts: 'Alerts', settings: 'Settings', logout: 'Logout', map: 'Map View' }, dashboard: { title: 'System Overview', online: 'Online', offline: 'Offline', inactive: 'Inactive', recentDetections: 'Recent Detections', systemHealth: 'System Health', connectedDevices: 'Connected Devices', activeAlerts: 'Active Alerts', totalDetections: 'Total Detections', noData: 'No data available', loading: 'Loading...', refreshData: 'Refresh Data', notificationsEnabled: 'Notifications Enabled', notificationsDisabled: 'Notifications Disabled', detectionHistory: 'Detection History', deviceStatus: 'Device Status', deviceActivity: 'Device Activity', deviceActivity24h: 'Device Activity (24h)', detectionsTimeline24h: 'Detections Timeline (24h)', lastHour: 'Last Hour', last24Hours: 'Last 24 Hours', thisWeek: 'This Week', connected: 'Connected', disconnected: 'Disconnected', healthy: 'Healthy', warning: 'Warning', critical: 'Critical', operational: 'Operational', maintenance: 'Maintenance', failed: 'Failed', pending: 'Pending', approved: 'Approved', rejected: 'Rejected', active: 'Active', disabled: 'Disabled', statistics: 'Statistics', overview: 'Overview', summary: 'Summary', quickStats: 'Quick Statistics', systemOverview: 'System Overview', recentActivity: 'Recent Activity', liveDetections: 'Live Detections', live: 'Live', noRecentActivity: 'No recent activity', noRecentDetections: 'No recent detections', droneDetected: 'Drone detected', heartbeatFrom: 'Heartbeat from', movementTracking: 'Movement Tracking', criticalAlerts: 'Critical Alerts', veryCloseApproaches: 'Very close approaches', highPriority: 'High Priority', approachingDrones: 'Approaching drones', mediumPriority: 'Medium Priority', movementChanges: 'Movement changes', totalTracked: 'Total Tracked', events: 'events', lastAlert: 'Last Alert', none: 'None' }, detections: { title: 'Drone Detections', description: 'History of all drone detections from your devices', noDetections: 'No detections found', loading: 'Loading detections...', timestamp: 'Timestamp', type: 'Type', confidence: 'Confidence', location: 'Location', device: 'Device', actions: 'Actions', searchPlaceholder: 'Search detections...', filterByType: 'Filter by type', filterByDevice: 'Filter by device', exportData: 'Export Data', viewDetails: 'View Details', showOnMap: 'Show on Map', highConfidence: 'High Confidence', mediumConfidence: 'Medium Confidence', lowConfidence: 'Low Confidence' }, devices: { title: 'All Devices', description: 'Manage your UAM-ILS detection devices', noDevices: 'No devices', noDevicesDescription: 'Get started by adding your first drone detection device.', loading: 'Loading devices...', name: 'Name', status: 'Status', lastSeen: 'Last Seen', location: 'Location', actions: 'Actions', addDevice: 'Add Device', editDevice: 'Edit Device', deleteDevice: 'Delete Device', deviceDetails: 'Device Details', batteryLevel: 'Battery Level', signalStrength: 'Signal Strength', firmware: 'Firmware', ipAddress: 'IP Address', macAddress: 'MAC Address', approved: 'Approved', pending: 'Pending', pendingApproval: 'pending approval', allDevices: 'All Devices', pendingApprovalTab: 'Pending Approval', needsApproval: 'Needs Approval', approval: 'Approval', deviceId: 'Device ID', coordinates: 'Coordinates', signal: 'Signal', detections24h: 'Detections (24h)', approveDevice: 'Approve Device', reject: 'Reject', viewDetails: 'View Details', viewOnMap: 'View on Map', noDevicesFiltered: 'No devices match the current filter.', noDevicesPending: 'No devices are currently pending approval.', noDevicesApproved: 'No devices have been approved yet.', device: 'Device', unknown: 'Unknown', online: 'Online', offline: 'Offline', inactive: 'Inactive', confirmReject: 'Are you sure you want to reject this device?', errorRejecting: 'Error rejecting device:', errorDeleting: 'Error deleting device:', confirmDelete: 'Are you sure you want to delete this device? This action cannot be undone.', signalStrong: 'Strong', signalGood: 'Good', signalWeak: 'Weak', signalLost: 'Lost', deviceDetails: 'Device Details', unnamed: 'Unnamed', yes: 'Yes', lastHeartbeat: 'Last Heartbeat', approve: 'Approve', close: 'Close' }, alerts: { title: 'Alert Management', description: 'Configure and manage detection alerts', noAlerts: 'No alerts found', loading: 'Loading alerts...', type: 'Type', priority: 'Priority', status: 'Status', created: 'Created', actions: 'Actions', createAlert: 'Create Alert', editAlert: 'Edit Alert', deleteAlert: 'Delete Alert', alertName: 'Alert Name', alertDescription: 'Description', triggerConditions: 'Trigger Conditions', notificationSettings: 'Notification Settings', emailNotifications: 'Email Notifications', smsNotifications: 'SMS Notifications', webhookUrl: 'Webhook URL', highPriority: 'High Priority', mediumPriority: 'Medium Priority', lowPriority: 'Low Priority', active: 'Active', inactive: 'Inactive', totalAlerts24h: 'Total Alerts (24h)', sentSuccessfully: 'Sent Successfully', failed: 'Failed', pending: 'Pending', alertRules: 'Alert Rules', alertLogs: 'Alert Logs', noAlertRules: 'No alert rules', noAlertRulesDescription: 'Get started by creating your first alert rule.', createAlertRule: 'Create Alert Rule', noAlertLogs: 'No alert logs', noAlertLogsDescription: 'Alert logs will appear here when alerts are triggered.', name: 'Name', channels: 'Channels', conditions: 'Conditions', edit: 'Edit', delete: 'Delete', recipient: 'Recipient', rule: 'Rule', detection: 'Detection', message: 'Message', sentAt: 'Sent At', viewDetails: 'View Details', unknownRule: 'Unknown Rule', na: 'N/A', minDetections: 'Min detections', timeWindow: 'Time window', cooldown: 'Cooldown', minThreat: 'Min threat', droneTypes: 'Drone types', consumer: 'Consumer', orlan: 'Orlan', professional: 'Professional', racing: 'Racing', unknown: 'Unknown', critical: 'Critical', high: 'High', medium: 'Medium', low: 'Low' }, settings: { title: 'Settings', description: 'Configure your account and system preferences', profile: 'Profile', notifications: 'Notifications', system: 'System', account: 'Account Settings', security: 'Security Settings', preferences: 'Preferences', language: 'Language', timezone: 'Timezone', emailSettings: 'Email Settings', passwordSettings: 'Password Settings', twoFactorAuth: 'Two-Factor Authentication', apiKeys: 'API Keys', dataRetention: 'Data Retention', exportData: 'Export Data', deleteAccount: 'Delete Account', loading: 'Loading settings...', accessDenied: 'Access Denied', accessDeniedMessage: "You don't have permission to access tenant settings.", general: 'General', branding: 'Branding', authentication: 'Authentication', users: 'Users', generalInformation: 'General Information', tenantName: 'Tenant Name', tenantId: 'Tenant ID', authenticationProvider: 'Authentication Provider', companyName: 'Company Name', logoUrl: 'Or enter logo URL manually', primaryColor: 'Primary Color', secondaryColor: 'Secondary Color', save: 'Save', saving: 'Saving...', saveBranding: 'Save Branding', saveChanges: 'Save Changes', brandingUpdated: 'Branding updated successfully', brandingUpdateFailed: 'Failed to update branding', securityUpdated: 'Security settings updated successfully', securityUpdateFailed: 'Failed to update security settings', removeLogo: 'Remove Logo', changeLogo: 'Change Logo', confirmRemoveLogo: 'Are you sure you want to remove the current logo?', logoRemoved: 'Logo removed successfully', logoRemoveFailed: 'Failed to remove logo' }, auth: { login: 'Login', logout: 'Logout', username: 'Username', password: 'Password', email: 'Email', confirmPassword: 'Confirm Password', forgotPassword: 'Forgot Password?', signIn: 'Sign In', signUp: 'Sign Up', register: 'Register', signingIn: 'Signing in...', registering: 'Creating account...', rememberMe: 'Remember me', createAccount: 'Create Account', alreadyHaveAccount: 'Already have an account?', dontHaveAccount: "Don't have an account?", resetPassword: 'Reset Password', backToLogin: 'Back to Login' }, map: { title: 'Map View', description: 'Real-time detection locations and device status', loading: 'Loading map...', noDetections: 'No detections to display', deviceLocation: 'Device Location', detectionLocation: 'Detection Location', lastDetection: 'Last Detection', deviceOnline: 'Device Online', deviceOffline: 'Device Offline', zoomToLocation: 'Zoom to Location', showAllDevices: 'Show All Devices', showDetections: 'Show Detections', filterByTime: 'Filter by Time', realTimeUpdates: 'Real-time Updates', deviceStatus: 'Device Status', connectionStatus: 'Connection Status', lastHeartbeat: 'Last Heartbeat', recentDetections: 'Recent Detections', systemStatus: 'System Status', emergencyAlert: 'Emergency Alert', criticalThreat: 'Critical Threat', immediateAction: 'Immediate Action Required', multipleContacts: 'Multiple Contacts', noDevicesFound: 'No devices found', mapLegend: 'Map Legend', deviceDetecting: 'Device Detecting', droneDetectionRings: 'Drone Detection Rings', ringsDescription: 'Rings show estimated detection range based on RSSI', orlanMilitary: 'Orlan/Military (Always Critical)', closeRange: 'Close Range (>-60dBm)', mediumRange: 'Medium Range (-60 to -70dBm)', farRange: 'Far Range (<-70dBm)', multipleDrones: 'Multiple Drones at Same Detector', differentColors: 'Different colors to distinguish drones', differentPatterns: 'Different dash patterns', droneLabels: 'Drone ID labels shown', positionOffsets: 'Slight position offsets for visibility', ringSize: 'Ring size = estimated distance from detector', showDroneDetections: 'Show Drone Detections', droneDetectionDetails: 'Drone Detection Details', live: 'LIVE', droneId: 'Drone ID', type: 'Type', rssi: 'RSSI', frequency: 'Frequency', detectionTimeline: 'Detection Timeline', firstDetected: 'First detected', latestDetection: 'Latest detection', currentDetection: 'Current Detection', confidence: 'Confidence', duration: 'Duration', detector: 'Detector', location: 'Location', realTimeAnalysis: 'Real-time Analysis', firstDetection: 'First detection', movementAnalysis: 'Movement Analysis', totalDetections: 'Total detections', signalStrengthTrend: 'Signal Strength Trend', lastDetections: 'Last 8 detections (oldest to newest)', approaching: 'APPROACHING', retreating: 'RETREATING', stablePosition: 'STABLE POSITION', rssiChange: 'RSSI change', over: 'over', minutes: 'minutes', instantTrend: 'Instant trend', strengthening: 'STRENGTHENING', weakening: 'WEAKENING', deviceName: 'Device', unknown: 'Unknown' }, movementAlerts: { title: 'Movement Alerts', allAlerts: 'All Alerts', critical: 'Critical', highPriority: 'High Priority', mediumPriority: 'Medium Priority', clearAll: 'Clear All', droneTypes: { djiMavic: 'DJI Mavic', racingDrone: 'Racing Drone', djiPhantom: 'DJI Phantom', fixedWing: 'Fixed Wing', surveillance: 'Surveillance', unknown: 'Unknown' } }, register: { registrationDisabled: 'Registration is not enabled for this tenant', configLoadFailed: 'Failed to load authentication configuration', fillAllFields: 'Please fill in all required fields', passwordsMismatch: 'Passwords do not match', passwordTooShort: 'Password must be at least 8 characters long', passwordRequirements: 'Password must contain at least one lowercase letter, one uppercase letter, and one number', usernameInvalid: 'Username can only contain letters, numbers, dots, underscores, and hyphens', emailInvalid: 'Please enter a valid email address', phoneInvalid: 'Please enter a valid phone number' }, app: { title: 'UAM-ILS Drone Detection System', subtitle: 'Real-time Drone Monitoring', connectionStatus: 'Connection Status', connected: 'Connected', disconnected: 'Disconnected', systemStatus: 'System Status', online: 'Online', offline: 'Offline' }, common: { loading: 'Loading...', error: 'Error', success: 'Success', warning: 'Warning', info: 'Information', cancel: 'Cancel', save: 'Save', delete: 'Delete', edit: 'Edit', view: 'View', close: 'Close', refresh: 'Refresh', search: 'Search', filter: 'Filter', export: 'Export', import: 'Import', add: 'Add', remove: 'Remove', update: 'Update', confirm: 'Confirm', yes: 'Yes', no: 'No', ok: 'OK', apply: 'Apply', reset: 'Reset', clear: 'Clear', all: 'All', none: 'None', selected: 'Selected', total: 'Total', page: 'Page', of: 'of', previous: 'Previous', next: 'Next', first: 'First', last: 'Last', date: 'Date', time: 'Time', status: 'Status', type: 'Type', name: 'Name', description: 'Description', actions: 'Actions' } }, sv: { navigation: { dashboard: 'Översikt', detections: 'Detekteringar', devices: 'Enheter', alerts: 'Larm', settings: 'Inställningar', logout: 'Logga ut', map: 'Kartvy' }, dashboard: { title: 'Systemöversikt', online: 'Online', offline: 'Offline', inactive: 'Inaktiv', recentDetections: 'Senaste detekteringar', systemHealth: 'Systemhälsa', connectedDevices: 'Anslutna enheter', activeAlerts: 'Aktiva larm', totalDetections: 'Totala detekteringar', noData: 'Ingen data tillgänglig', loading: 'Laddar...', refreshData: 'Uppdatera data', notificationsEnabled: 'Aviseringar aktiverade', notificationsDisabled: 'Aviseringar inaktiverade', detectionHistory: 'Detekteringshistorik', deviceStatus: 'Enhetsstatus', deviceActivity: 'Enhetsaktivitet', deviceActivity24h: 'Enhetsaktivitet (24h)', detectionsTimeline24h: 'Detekteringshistorik (24h)', lastHour: 'Senaste timmen', last24Hours: 'Senaste 24 timmarna', thisWeek: 'Denna vecka', connected: 'Ansluten', disconnected: 'Frånkopplad', healthy: 'Frisk', warning: 'Varning', critical: 'Kritisk', operational: 'Operativ', maintenance: 'Underhåll', failed: 'Misslyckad', pending: 'Väntar', approved: 'Godkänd', rejected: 'Avvisad', active: 'Aktiv', disabled: 'Inaktiverad', statistics: 'Statistik', overview: 'Översikt', summary: 'Sammanfattning', quickStats: 'Snabbstatistik', systemOverview: 'Systemöversikt', recentActivity: 'Senaste aktivitet', liveDetections: 'Live-detekteringar', live: 'Live', noRecentActivity: 'Ingen senaste aktivitet', noRecentDetections: 'Inga senaste detekteringar', droneDetected: 'Drönare detekterad', heartbeatFrom: 'Heartbeat från', movementTracking: 'Rörelsespårning', criticalAlerts: 'Kritiska larm', veryCloseApproaches: 'Mycket nära närmanden', highPriority: 'Hög prioritet', approachingDrones: 'Närmande drönare', mediumPriority: 'Medel prioritet', movementChanges: 'Rörelseförändringar', totalTracked: 'Totalt spårade', events: 'händelser', lastAlert: 'Senaste larm', none: 'Ingen' }, detections: { title: 'Drönaredetekteringar', description: 'Historik över alla drönaredetekteringar från dina enheter', noDetections: 'Inga detekteringar hittades', loading: 'Laddar detekteringar...', timestamp: 'Tidsstämpel', type: 'Typ', confidence: 'Säkerhet', location: 'Plats', device: 'Enhet', actions: 'Åtgärder', searchPlaceholder: 'Sök detekteringar...', filterByType: 'Filtrera efter typ', filterByDevice: 'Filtrera efter enhet', exportData: 'Exportera data', viewDetails: 'Visa detaljer', showOnMap: 'Visa på karta', highConfidence: 'Hög säkerhet', mediumConfidence: 'Medel säkerhet', lowConfidence: 'Låg säkerhet' }, devices: { title: 'Alla enheter', description: 'Hantera dina UAM-ILS detekteringsenheter', noDevices: 'Inga enheter', noDevicesDescription: 'Kom igång genom att lägga till din första drönaredetekteringsenhet.', loading: 'Laddar enheter...', name: 'Namn', status: 'Status', lastSeen: 'Senast sedd', location: 'Plats', actions: 'Åtgärder', addDevice: 'Lägg till enhet', editDevice: 'Redigera enhet', deleteDevice: 'Ta bort enhet', deviceDetails: 'Enhetsdetaljer', batteryLevel: 'Batterinivå', signalStrength: 'Signalstyrka', firmware: 'Firmware', ipAddress: 'IP-adress', macAddress: 'MAC-adress', approved: 'Godkänd', pending: 'Väntande', pendingApproval: 'väntande godkännande', allDevices: 'Alla enheter', pendingApprovalTab: 'Väntande godkännande', needsApproval: 'Behöver godkännande', approval: 'Godkännande', deviceId: 'Enhets-ID', coordinates: 'Koordinater', signal: 'Signal', detections24h: 'Detekteringar (24h)', approveDevice: 'Godkänn enhet', reject: 'Avvisa', viewDetails: 'Visa detaljer', viewOnMap: 'Visa på karta', noDevicesFiltered: 'Inga enheter matchar det aktuella filtret.', noDevicesPending: 'Inga enheter väntar för närvarande på godkännande.', noDevicesApproved: 'Inga enheter har godkänts än.', device: 'Enhet', unknown: 'Okänd', online: 'Online', offline: 'Offline', inactive: 'Inaktiv', confirmReject: 'Är du säker på att du vill avvisa denna enhet?', errorRejecting: 'Fel vid avvisning av enhet:', errorDeleting: 'Fel vid borttagning av enhet:', confirmDelete: 'Är du säker på att du vill ta bort denna enhet? Denna åtgärd kan inte ångras.', signalStrong: 'Stark', signalGood: 'Bra', signalWeak: 'Svag', signalLost: 'Förlorad', deviceDetails: 'Enhetsdetaljer', unnamed: 'Namnlös', yes: 'Ja', lastHeartbeat: 'Senaste pulsslag', approve: 'Godkänn', close: 'Stäng' }, alerts: { title: 'Larmhantering', description: 'Konfigurera och hantera detekteringslarm', noAlerts: 'Inga larm hittades', loading: 'Laddar larm...', type: 'Typ', priority: 'Prioritet', status: 'Status', created: 'Skapad', actions: 'Åtgärder', createAlert: 'Skapa larm', editAlert: 'Redigera larm', deleteAlert: 'Ta bort larm', alertName: 'Larmnamn', alertDescription: 'Beskrivning', triggerConditions: 'Larmvillkor', notificationSettings: 'Aviseringsinställningar', emailNotifications: 'E-postaviseringar', smsNotifications: 'SMS-aviseringar', webhookUrl: 'Webhook URL', highPriority: 'Hög prioritet', mediumPriority: 'Medel prioritet', lowPriority: 'Låg prioritet', active: 'Aktiv', inactive: 'Inaktiv', totalAlerts24h: 'Totalt larm (24h)', sentSuccessfully: 'Skickade framgångsrikt', failed: 'Misslyckades', pending: 'Väntande', alertRules: 'Larmregler', alertLogs: 'Larmloggar', noAlertRules: 'Inga larmregler', noAlertRulesDescription: 'Kom igång genom att skapa din första larmregel.', createAlertRule: 'Skapa larmregel', noAlertLogs: 'Inga larmloggar', noAlertLogsDescription: 'Larmloggar kommer att visas här när larm utlöses.', name: 'Namn', channels: 'Kanaler', conditions: 'Villkor', edit: 'Redigera', delete: 'Ta bort', recipient: 'Mottagare', rule: 'Regel', detection: 'Detektion', message: 'Meddelande', sentAt: 'Skickat vid', viewDetails: 'Visa detaljer', unknownRule: 'Okänd regel', na: 'Ej tillämpligt', minDetections: 'Min detekteringar', timeWindow: 'Tidsfönster', cooldown: 'Nedkylning', minThreat: 'Min hot', droneTypes: 'Drönartyper', consumer: 'Konsument', orlan: 'Orlan', professional: 'Professionell', racing: 'Racing', unknown: 'Okänd', critical: 'Kritisk', high: 'Hög', medium: 'Medel', low: 'Låg' }, settings: { title: 'Inställningar', description: 'Konfigurera ditt konto och systempreferenser', profile: 'Profil', notifications: 'Aviseringar', system: 'System', account: 'Kontoinställningar', security: 'Säkerhetsinställningar', preferences: 'Preferenser', language: 'Språk', timezone: 'Tidszon', emailSettings: 'E-postinställningar', passwordSettings: 'Lösenordsinställningar', twoFactorAuth: 'Tvåfaktorsautentisering', apiKeys: 'API-nycklar', dataRetention: 'Datalagring', exportData: 'Exportera data', deleteAccount: 'Ta bort konto', loading: 'Laddar inställningar...', accessDenied: 'Åtkomst nekad', accessDeniedMessage: 'Du har inte behörighet att komma åt tenant-inställningar.', general: 'Allmänt', branding: 'Varumärke', authentication: 'Autentisering', users: 'Användare', generalInformation: 'Allmän information', tenantName: 'Tenant-namn', tenantId: 'Tenant-ID', authenticationProvider: 'Autentiseringsleverantör', companyName: 'Företagsnamn', logoUrl: 'Eller ange logotyp-URL manuellt', primaryColor: 'Primärfärg', secondaryColor: 'Sekundär färg', save: 'Spara', saving: 'Sparar...', saveBranding: 'Spara varumärke', saveChanges: 'Spara ändringar', brandingUpdated: 'Varumärke uppdaterat framgångsrikt', brandingUpdateFailed: 'Misslyckades med att uppdatera varumärke', securityUpdated: 'Säkerhetsinställningar uppdaterade framgångsrikt', securityUpdateFailed: 'Misslyckades med att uppdatera säkerhetsinställningar', removeLogo: 'Ta bort logotyp', changeLogo: 'Ändra logotyp', confirmRemoveLogo: 'Är du säker på att du vill ta bort den aktuella logotypen?', logoRemoved: 'Logotyp borttagen framgångsrikt', logoRemoveFailed: 'Misslyckades med att ta bort logotyp' }, auth: { login: 'Logga in', logout: 'Logga ut', username: 'Användarnamn', password: 'Lösenord', email: 'E-post', confirmPassword: 'Bekräfta lösenord', forgotPassword: 'Glömt lösenord?', signIn: 'Logga in', signUp: 'Registrera', register: 'Registrera', signingIn: 'Loggar in...', registering: 'Skapar konto...', rememberMe: 'Kom ihåg mig', createAccount: 'Skapa konto', alreadyHaveAccount: 'Har du redan ett konto?', dontHaveAccount: 'Har du inget konto?', resetPassword: 'Återställ lösenord', backToLogin: 'Tillbaka till inloggning' }, map: { title: 'Kartvy', description: 'Realtidsdetekteringsplatser och enhetsstatus', loading: 'Laddar karta...', noDetections: 'Inga detekteringar att visa', deviceLocation: 'Enhetsplats', detectionLocation: 'Detekteringsplats', lastDetection: 'Senaste detektion', deviceOnline: 'Enhet online', deviceOffline: 'Enhet offline', zoomToLocation: 'Zooma till plats', showAllDevices: 'Visa alla enheter', showDetections: 'Visa detekteringar', filterByTime: 'Filtrera efter tid', realTimeUpdates: 'Realtidsuppdateringar', deviceStatus: 'Enhetsstatus', connectionStatus: 'Anslutningsstatus', lastHeartbeat: 'Senaste pulsslag', recentDetections: 'Senaste detekteringar', systemStatus: 'Systemstatus', emergencyAlert: 'Nödlarm', criticalThreat: 'Kritiskt hot', immediateAction: 'Omedelbar åtgärd krävs', multipleContacts: 'Flera kontakter', noDevicesFound: 'Inga enheter hittades', mapLegend: 'Kartteckenförklaring', deviceDetecting: 'Enhet detekterar', droneDetectionRings: 'Drönardetekteringsringar', ringsDescription: 'Ringar visar uppskattad detekteringsräckvidd baserat på RSSI', orlanMilitary: 'Orlan/Militär (Alltid kritisk)', closeRange: 'Närområde (>-60dBm)', mediumRange: 'Medelområde (-60 till -70dBm)', farRange: 'Långdistans (<-70dBm)', multipleDrones: 'Flera drönare vid samma detektor', differentColors: 'Olika färger för att skilja drönare åt', differentPatterns: 'Olika streckmönster', droneLabels: 'Drönar-ID-etiketter visas', positionOffsets: 'Lätta positionsförskjutningar för synlighet', ringSize: 'Ringstorlek = uppskattad distans från detektor', showDroneDetections: 'Visa drönardetekteringar', droneDetectionDetails: 'Drönardetekteringsdetaljer', live: 'LIVE', droneId: 'Drönar-ID', type: 'Typ', rssi: 'RSSI', frequency: 'Frekvens', detectionTimeline: 'Detekteringstidslinje', firstDetected: 'Först detekterad', latestDetection: 'Senaste detektion', currentDetection: 'Aktuell detektion', confidence: 'Konfidensgrad', duration: 'Varaktighet', detector: 'Detektor', location: 'Plats', realTimeAnalysis: 'Realtidsanalys', firstDetection: 'Första detektion', movementAnalysis: 'Rörelseanalys', totalDetections: 'Totalt antal detektioner', signalStrengthTrend: 'Signalstyrketrend', lastDetections: 'Senaste 8 detektioner (äldsta till nyaste)', approaching: 'NÄRMAR SIG', retreating: 'DRAR SIG TILLBAKA', stablePosition: 'STABIL POSITION', rssiChange: 'RSSI-förändring', over: 'över', minutes: 'minuter', instantTrend: 'Omedelbar trend', strengthening: 'FÖRSTÄRKNING', weakening: 'FÖRSVAGNING', deviceName: 'Enhet', unknown: 'Okänd' }, movementAlerts: { title: 'Rörelselarm', allAlerts: 'Alla larm', critical: 'Kritisk', highPriority: 'Hög prioritet', mediumPriority: 'Medel prioritet', clearAll: 'Rensa alla', droneTypes: { djiMavic: 'DJI Mavic', racingDrone: 'Racingdrönare', djiPhantom: 'DJI Phantom', fixedWing: 'Fast vinge', surveillance: 'Övervakning', unknown: 'Okänd' } }, register: { registrationDisabled: 'Registrering är inte aktiverad för denna klient', configLoadFailed: 'Misslyckades med att ladda autentiseringskonfiguration', fillAllFields: 'Vänligen fyll i alla obligatoriska fält', passwordsMismatch: 'Lösenorden stämmer inte överens', passwordTooShort: 'Lösenordet måste vara minst 8 tecken långt', passwordRequirements: 'Lösenordet måste innehålla minst en liten bokstav, en stor bokstav och en siffra', usernameInvalid: 'Användarnamn kan bara innehålla bokstäver, siffror, punkter, understreck och bindestreck', emailInvalid: 'Vänligen ange en giltig e-postadress', phoneInvalid: 'Vänligen ange ett giltigt telefonnummer' }, app: { title: 'UAM-ILS Drönardetekteringssystem', subtitle: 'Realtids drönarövervakning', connectionStatus: 'Anslutningsstatus', connected: 'Ansluten', disconnected: 'Frånkopplad', systemStatus: 'Systemstatus', online: 'Online', offline: 'Offline' }, common: { loading: 'Laddar...', error: 'Fel', success: 'Framgång', warning: 'Varning', info: 'Information', cancel: 'Avbryt', save: 'Spara', delete: 'Ta bort', edit: 'Redigera', view: 'Visa', close: 'Stäng', refresh: 'Uppdatera', search: 'Sök', filter: 'Filtrera', export: 'Exportera', import: 'Importera', add: 'Lägg till', remove: 'Ta bort', update: 'Uppdatera', confirm: 'Bekräfta', yes: 'Ja', no: 'Nej', ok: 'OK', apply: 'Tillämpa', reset: 'Återställ', clear: 'Rensa', all: 'Alla', none: 'Inga', selected: 'Valda', total: 'Totalt', page: 'Sida', of: 'av', previous: 'Föregående', next: 'Nästa', first: 'Första', last: 'Sista', date: 'Datum', time: 'Tid', status: 'Status', type: 'Typ', name: 'Namn', description: 'Beskrivning', actions: 'Åtgärder' } } }; let currentLanguage = localStorage.getItem('language') || 'en'; export const t = (key) => { const keys = key.split('.'); let value = translations[currentLanguage]; for (const k of keys) { value = value?.[k]; } return value || key; }; export const changeLanguage = (lang) => { currentLanguage = lang; localStorage.setItem('language', lang); // Trigger a page refresh to update all components window.location.reload(); }; export const getCurrentLanguage = () => currentLanguage; export const useTranslation = () => { return { t }; };