899 lines
31 KiB
JavaScript
899 lines
31 KiB
JavaScript
// 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 };
|
|
}; |