Files
drone-detector/client/src/utils/tempTranslations.js
2025-09-23 09:52:40 +02:00

1428 lines
50 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',
filters: 'Filters',
deviceId: 'Device ID',
droneId: 'Drone ID',
startDate: 'Start Date',
endDate: 'End Date',
clearFilters: 'Clear Filters',
deviceIdPlaceholder: 'Enter device ID',
droneIdPlaceholder: 'Enter drone ID',
frequency: 'Frequency',
rssi: 'RSSI',
detectedAt: 'Detected At',
unknown: 'Unknown',
tryAdjustingFilters: 'Try adjusting your search filters.',
previous: 'Previous',
next: 'Next',
showing: 'Showing',
to: 'to',
of: 'of',
results: 'results'
},
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',
droneId: 'Drone ID',
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',
// Security and permissions
accessDenied: 'Access denied: Insufficient permissions',
invalidTenant: 'Invalid tenant',
tenantNotFound: 'Tenant not found',
userNotMemberOfTenant: 'Access denied: User not member of tenant',
authenticationRequired: 'Authentication required',
logoUploadError: 'Failed to upload logo',
logoRemovalError: 'Failed to remove logo',
logoUploadSuccess: 'Logo uploaded successfully',
logoRemovalSuccess: 'Logo removed successfully',
noFileUploaded: 'No file uploaded',
noLogoToRemove: 'No logo to remove',
internalServerError: 'Internal server error',
securityValidationFailed: 'Security validation failed',
unauthorizedAccess: 'Unauthorized access attempt',
tenantAccessDenied: 'Access denied for this tenant'
},
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: 'Active Detection',
droneDetectionRings: 'Drone Detection Rings',
ringsDescription: 'Rings show estimated detection range based on RSSI',
orlanMilitary: 'Military-drone (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',
noAlerts: 'No movement alerts',
noAlertsDescription: 'Drone movement patterns will appear here',
droneDevice: 'Drone {droneId} • Device {deviceId}',
droneType: 'Drone Type:',
frequency: 'Frequency:',
confidence: 'Confidence:',
signalDuration: 'Signal Duration:',
movementPattern: 'Movement Pattern:',
pattern: 'Pattern:',
speed: 'Speed:',
distance: 'Distance:',
trackingStats: 'Tracking Stats:',
detectionsOverTime: '{count} detections over {time} minutes',
recentRssiHistory: 'Recent RSSI History:',
strengthening: 'strengthening',
weakening: 'weakening',
stable: 'stable',
droneTypes: {
djiMavic: 'DJI Mavic',
racingDrone: 'Racing Drone',
djiPhantom: 'DJI Phantom',
fixedWing: 'Fixed Wing',
surveillance: 'Surveillance',
unknown: 'Unknown'
}
},
debug: {
title: 'Debug Console',
subtitle: 'Admin-only access to all detection data including drone type 0 (None)',
debugInformation: 'Debug Information',
totalNoneDetections: 'Total None detections: {count}',
filters: 'Filters',
droneType: 'Drone Type',
deviceId: 'Device ID',
resultsPerPage: 'Results per page',
filterByDeviceId: 'Filter by device ID',
allTypes: 'All Types',
debugDetections: 'Debug Detections ({count})',
noDebugData: 'No debug data',
noDetectionsFound: 'No detections found matching the current filters.',
idTime: 'ID / Time',
device: 'Device',
rssiFreq: 'RSSI / Freq',
threatLevel: 'Threat Level',
debug: 'Debug',
actions: 'Actions',
viewPayload: 'View Payload',
deleteDetection: 'Delete Detection',
droneTypeOptions: {
none: '0 - None (Debug)',
unknown: '1 - Unknown',
orlan: '2 - Orlan',
zala: '3 - Zala',
eleron: '4 - Eleron',
zalaLancet: '5 - Zala Lancet',
lancet: '6 - Lancet',
fpvCrossFire: '7 - FPV CrossFire',
fpvElrs: '8 - FPV ELRS',
maybeOrlan: '9 - Maybe Orlan',
maybeZala: '10 - Maybe Zala',
maybeLancet: '11 - Maybe Lancet',
maybeEleron: '12 - Maybe Eleron',
dji: '13 - DJI',
supercam: '14 - Supercam',
maybeSupercam: '15 - Maybe Supercam',
reb: '16 - REB',
cryptoOrlan: '17 - Crypto Orlan',
djiEnterprise: '18 - DJI Enterprise'
},
payloadViewer: {
title: 'Debug Payload Viewer',
detectionId: 'Detection ID:',
timestamp: 'Timestamp:',
deviceId: 'Device ID:',
rawPayload: 'Raw Payload:',
processedData: 'Processed Data:',
noPayloadData: 'No raw payload data found for this detection',
failedToFetch: 'Failed to fetch payload data'
}
},
alerts: {
title: 'Alert Management',
description: 'Manage alert rules and view alert activity',
loading: 'Loading alerts...',
rules: 'Rules',
logs: 'Logs',
stats: 'Stats',
createRule: 'Create Rule',
createAlert: 'Create Alert',
createAlertRule: 'Create Alert Rule',
editRule: 'Edit Rule',
deleteRule: 'Delete Rule',
ruleDetails: 'Rule Details',
noRules: 'No alert rules configured',
noAlertRules: 'No alert rules',
noRulesDescription: 'Create your first alert rule to start monitoring drone activity.',
noAlertRulesDescription: 'Create your first alert rule to start monitoring drone activity.',
noLogs: 'No alert logs',
noLogsDescription: 'Alert activity will appear here once rules are triggered.',
name: 'Name',
description: 'Description',
priority: 'Priority',
minDetections: 'Minimum Detections',
timeWindow: 'Time Window (seconds)',
cooldownPeriod: 'Cooldown Period (seconds)',
alertChannels: 'Alert Channels',
minThreatLevel: 'Minimum Threat Level',
droneTypes: 'Drone Types',
deviceIds: 'Device IDs',
smsPhoneNumber: 'SMS Phone Number',
webhookUrl: 'Webhook URL',
enabled: 'Enabled',
disabled: 'Disabled',
active: 'Active',
inactive: 'Inactive',
triggered: 'Triggered',
sentAt: 'Sent At',
channel: 'Channel',
channels: 'Channels',
status: 'Status',
retryCount: 'Retry Count',
message: 'Message',
detectionDetails: 'Detection Details',
viewDetails: 'View Details',
alertEvent: 'Alert Event',
relatedAlerts: 'Related Alerts',
showMore: 'Show {count} more alerts',
showLess: 'Show less',
alertRules: 'Alert Rules',
alertLogs: 'Alert Logs',
conditions: 'Conditions',
actions: 'Actions',
created: 'Created',
cooldown: 'Cooldown',
minThreat: 'Min Threat',
totalAlerts24h: 'Total Alerts (24h)',
sentSuccessfully: 'Sent Successfully',
failed: 'Failed',
pending: 'Pending',
low: 'Low',
medium: 'Medium',
high: 'High',
critical: 'Critical',
priorities: {
low: 'Low',
medium: 'Medium',
high: 'High',
critical: 'Critical'
},
channels: {
sms: 'SMS',
webhook: 'Webhook',
email: 'Email'
},
threatLevels: {
low: 'Low',
medium: 'Medium',
high: 'High',
critical: 'Critical'
},
form: {
nameRequired: 'Rule name is required',
nameHelp: 'A descriptive name for this alert rule',
descriptionHelp: 'Optional description of what this rule monitors',
priorityHelp: 'Priority level for alerts generated by this rule',
minDetectionsHelp: 'Minimum number of detections required to trigger alert',
timeWindowHelp: 'Time window in seconds to count detections',
cooldownHelp: 'Minimum time between alerts for the same rule',
channelsRequired: 'At least one alert channel is required',
channelsHelp: 'How alerts from this rule will be delivered',
threatLevelHelp: 'Only trigger for detections with this threat level or higher',
droneTypesHelp: 'Leave empty to monitor all drone types',
deviceIdsHelp: 'Leave empty to monitor all devices',
smsHelp: 'Phone number for SMS alerts (required if SMS channel selected)',
webhookHelp: 'URL for webhook alerts (required if webhook channel selected)',
updateFailed: 'Failed to update alert rule',
editAlertRule: 'Edit Alert Rule',
anyLevel: 'Any Level',
monitoring: 'Monitoring',
droneTypesFilter: 'Drone Types Filter',
leaveEmptyAllTypes: 'Leave empty to monitor all drone types',
alertChannelsLabel: 'Alert Channels',
selectChannels: 'Select how alerts will be sent',
smsPhoneLabel: 'SMS Phone Number',
smsRequired: 'Required when SMS is selected',
webhookUrlLabel: 'Webhook URL',
webhookRequired: 'Required when webhook is selected'
}
},
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',
copy: 'Copy to Clipboard',
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',
filters: 'Filters',
clearFilters: 'Clear Filters',
refresh: 'Refresh',
search: 'Search',
loading: 'Loading...',
error: 'Error',
showing: 'Showing',
to: 'to',
results: 'results'
},
management: {
auditLogs: 'Security Audit Logs',
totalLogs: 'Total Logs',
successfulActions: 'Successful Actions',
failedActions: 'Failed Actions',
warnings: 'Warnings',
critical: 'Critical Events',
level: 'Level',
action: 'Action',
user: 'User',
tenant: 'Tenant',
message: 'Message',
success: 'Success',
ipAddress: 'IP Address',
timestamp: 'Timestamp',
dateRange: 'Date Range',
searchPlaceholder: 'Search logs, users, or tenants...',
noAuditLogs: 'No audit logs found',
totalEntries: 'total entries',
logoManagement: 'Logo Management Events',
securityEvents: 'Security Events',
auditTrail: 'Audit Trail',
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: 'Signal 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',
filters: 'Filter',
deviceId: 'Enhets-ID',
droneId: 'Drönare-ID',
startDate: 'Startdatum',
endDate: 'Slutdatum',
clearFilters: 'Rensa filter',
deviceIdPlaceholder: 'Ange enhets-ID',
droneIdPlaceholder: 'Ange drönare-ID',
frequency: 'Frekvens',
rssi: 'RSSI',
detectedAt: 'Detekterad vid',
unknown: 'Okänd',
tryAdjustingFilters: 'Försök justera dina sökfilter.',
previous: 'Föregående',
next: 'Nästa',
showing: 'Visar',
to: 'till',
of: 'av',
results: 'resultat'
},
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: 'Senaste signalen',
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 signalen',
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',
droneId: 'Drönar-ID',
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',
// Säkerhet och behörigheter
accessDenied: 'Åtkomst nekad: Otillräckliga behörigheter',
invalidTenant: 'Ogiltig klient',
tenantNotFound: 'Klient hittades inte',
userNotMemberOfTenant: 'Åtkomst nekad: Användaren är inte medlem av klienten',
authenticationRequired: 'Autentisering krävs',
logoUploadError: 'Misslyckades med att ladda upp logotyp',
logoRemovalError: 'Misslyckades med att ta bort logotyp',
logoUploadSuccess: 'Logotyp uppladdad framgångsrikt',
logoRemovalSuccess: 'Logotyp borttagen framgångsrikt',
noFileUploaded: 'Ingen fil uppladdad',
noLogoToRemove: 'Ingen logotyp att ta bort',
internalServerError: 'Internt serverfel',
securityValidationFailed: 'Säkerhetsvalidering misslyckades',
unauthorizedAccess: 'Obehörigt åtkomstförsök',
tenantAccessDenied: 'Åtkomst nekad för denna klient'
},
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 signalen',
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: 'Aktiv detektion',
droneDetectionRings: 'Drönardetekteringsringar',
ringsDescription: 'Ringar visar uppskattad detekteringsräckvidd baserat på RSSI',
orlanMilitary: 'Militärdrönare (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',
noAlerts: 'Inga rörelselarm',
noAlertsDescription: 'Drönarrörelsemönster kommer att visas här',
droneDevice: 'Drönare {droneId} • Enhet {deviceId}',
droneType: 'Drönartyp:',
frequency: 'Frekvens:',
confidence: 'Säkerhet:',
signalDuration: 'Signallängd:',
movementPattern: 'Rörelsemönster:',
pattern: 'Mönster:',
speed: 'Hastighet:',
distance: 'Avstånd:',
trackingStats: 'Spårningsstatistik:',
detectionsOverTime: '{count} detekteringar över {time} minuter',
recentRssiHistory: 'Senaste RSSI-historik:',
strengthening: 'förstärks',
weakening: 'försvagas',
stable: 'stabil',
droneTypes: {
djiMavic: 'DJI Mavic',
racingDrone: 'Racingdrönare',
djiPhantom: 'DJI Phantom',
fixedWing: 'Fast vinge',
surveillance: 'Övervakning',
unknown: 'Okänd'
}
},
debug: {
title: 'Felsökningskonsol',
subtitle: 'Endast admin-åtkomst till all detekteringsdata inklusive drönartyp 0 (Ingen)',
debugInformation: 'Felsökningsinformation',
totalNoneDetections: 'Totalt antal Ingen-detekteringar: {count}',
filters: 'Filter',
droneType: 'Drönartyp',
deviceId: 'Enhets-ID',
resultsPerPage: 'Resultat per sida',
filterByDeviceId: 'Filtrera efter enhets-ID',
allTypes: 'Alla typer',
debugDetections: 'Felsökningsdetekteringar ({count})',
noDebugData: 'Ingen felsökningsdata',
noDetectionsFound: 'Inga detekteringar hittades som matchar nuvarande filter.',
idTime: 'ID / Tid',
device: 'Enhet',
rssiFreq: 'RSSI / Frekv',
threatLevel: 'Hotnivå',
debug: 'Felsökning',
actions: 'Åtgärder',
viewPayload: 'Visa nyttolast',
deleteDetection: 'Ta bort detektion',
droneTypeOptions: {
none: '0 - Ingen (Felsökning)',
unknown: '1 - Okänd',
orlan: '2 - Orlan',
zala: '3 - Zala',
eleron: '4 - Eleron',
zalaLancet: '5 - Zala Lancet',
lancet: '6 - Lancet',
fpvCrossFire: '7 - FPV CrossFire',
fpvElrs: '8 - FPV ELRS',
maybeOrlan: '9 - Kanske Orlan',
maybeZala: '10 - Kanske Zala',
maybeLancet: '11 - Kanske Lancet',
maybeEleron: '12 - Kanske Eleron',
dji: '13 - DJI',
supercam: '14 - Supercam',
maybeSupercam: '15 - Kanske Supercam',
reb: '16 - REB',
cryptoOrlan: '17 - Krypto Orlan',
djiEnterprise: '18 - DJI Enterprise'
},
payloadViewer: {
title: 'Felsökningsnyttolastvisare',
detectionId: 'Detektions-ID:',
timestamp: 'Tidsstämpel:',
deviceId: 'Enhets-ID:',
rawPayload: 'Rå nyttolast:',
processedData: 'Bearbetad data:',
noPayloadData: 'Ingen rå nyttolastdata hittades för denna detektion',
failedToFetch: 'Misslyckades med att hämta nyttolastdata'
}
},
alerts: {
title: 'Larmhantering',
description: 'Hantera larmregler och visa larmaktivitet',
loading: 'Laddar larm...',
rules: 'Regler',
logs: 'Loggar',
stats: 'Statistik',
createRule: 'Skapa regel',
createAlert: 'Skapa larm',
createAlertRule: 'Skapa larmregel',
editRule: 'Redigera regel',
deleteRule: 'Ta bort regel',
ruleDetails: 'Regeldetaljer',
noRules: 'Inga larmregler konfigurerade',
noAlertRules: 'Inga larmregler',
noRulesDescription: 'Skapa din första larmregel för att börja övervaka drönaraktivitet.',
noAlertRulesDescription: 'Skapa din första larmregel för att börja övervaka drönaraktivitet.',
noLogs: 'Inga larmloggar',
noLogsDescription: 'Larmaktivitet kommer att visas här när regler utlöses.',
name: 'Namn',
description: 'Beskrivning',
priority: 'Prioritet',
minDetections: 'Minsta antal detekteringar',
timeWindow: 'Tidsfönster (sekunder)',
cooldownPeriod: 'Nedkylningsperiod (sekunder)',
alertChannels: 'Larmkanaler',
minThreatLevel: 'Lägsta hotnivå',
droneTypes: 'Drönartyper',
deviceIds: 'Enhets-ID:n',
smsPhoneNumber: 'SMS-telefonnummer',
webhookUrl: 'Webhook-URL',
enabled: 'Aktiverad',
disabled: 'Inaktiverad',
active: 'Aktiv',
inactive: 'Inaktiv',
triggered: 'Utlöst',
sentAt: 'Skickat vid',
channel: 'Kanal',
channels: 'Kanaler',
status: 'Status',
retryCount: 'Antal återförsök',
message: 'Meddelande',
detectionDetails: 'Detekteringsdetaljer',
viewDetails: 'Visa detaljer',
alertEvent: 'Larmhändelse',
relatedAlerts: 'Relaterade larm',
showMore: 'Visa {count} fler larm',
showLess: 'Visa mindre',
alertRules: 'Larmregler',
alertLogs: 'Larmloggar',
conditions: 'Villkor',
actions: 'Åtgärder',
created: 'Skapad',
cooldown: 'Nedkylning',
minThreat: 'Min hot',
totalAlerts24h: 'Totala larm (24h)',
sentSuccessfully: 'Skickade framgångsrikt',
failed: 'Misslyckades',
pending: 'Väntande',
low: 'Låg',
medium: 'Medel',
high: 'Hög',
critical: 'Kritisk',
priorities: {
low: 'Låg',
medium: 'Medel',
high: 'Hög',
critical: 'Kritisk'
},
channels: {
sms: 'SMS',
webhook: 'Webhook',
email: 'E-post'
},
threatLevels: {
low: 'Låg',
medium: 'Medel',
high: 'Hög',
critical: 'Kritisk'
},
form: {
nameRequired: 'Regelnamn krävs',
nameHelp: 'Ett beskrivande namn för denna larmregel',
descriptionHelp: 'Valfri beskrivning av vad denna regel övervakar',
priorityHelp: 'Prioritetsnivå för larm genererade av denna regel',
minDetectionsHelp: 'Minsta antal detekteringar som krävs för att utlösa larm',
timeWindowHelp: 'Tidsfönster i sekunder för att räkna detekteringar',
cooldownHelp: 'Minimitid mellan larm för samma regel',
channelsRequired: 'Minst en larmkanal krävs',
channelsHelp: 'Hur larm från denna regel kommer att levereras',
threatLevelHelp: 'Utlös endast för detekteringar med denna hotnivå eller högre',
droneTypesHelp: 'Lämna tomt för att övervaka alla drönartyper',
deviceIdsHelp: 'Lämna tomt för att övervaka alla enheter',
smsHelp: 'Telefonnummer för SMS-larm (krävs om SMS-kanal är vald)',
webhookHelp: 'URL för webhook-larm (krävs om webhook-kanal är vald)',
updateFailed: 'Misslyckades med att uppdatera larmregel',
editAlertRule: 'Redigera larmregel',
anyLevel: 'Alla nivåer',
monitoring: 'Övervakning',
droneTypesFilter: 'Drönartypsfilter',
leaveEmptyAllTypes: 'Lämna tomt för att övervaka alla drönartyper',
alertChannelsLabel: 'Larmkanaler',
selectChannels: 'Välj hur larm kommer att skickas',
smsPhoneLabel: 'SMS-telefonnummer',
smsRequired: 'Krävs när SMS är valt',
webhookUrlLabel: 'Webhook-URL',
webhookRequired: 'Krävs när webhook är valt'
}
},
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',
copy: 'Kopiera till urklipp',
delete: 'Ta bort',
edit: 'Redigera',
view: 'Visa',
add: 'Lägg till',
update: 'Uppdatera',
create: 'Skapa',
remove: 'Ta bort',
close: 'Stäng',
open: 'Öppna',
back: 'Tillbaka',
continue: 'Fortsätt',
submit: 'Skicka',
confirm: 'Bekräfta',
yes: 'Ja',
no: 'Nej',
ok: 'OK',
apply: 'Tillämpa',
reset: 'Återställ',
clear: 'Rensa',
all: 'Alla',
none: 'Ingen',
selected: 'Vald',
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',
filters: 'Filter',
clearFilters: 'Rensa filter',
refresh: 'Uppdatera',
search: 'Sök',
showing: 'Visar',
to: 'till',
results: 'resultat'
},
management: {
auditLogs: 'Säkerhetsgranskningsloggar',
totalLogs: 'Totala loggar',
successfulActions: 'Lyckade åtgärder',
failedActions: 'Misslyckade åtgärder',
warnings: 'Varningar',
critical: 'Kritiska händelser',
level: 'Nivå',
action: 'Åtgärd',
user: 'Användare',
tenant: 'Klient',
message: 'Meddelande',
success: 'Framgång',
ipAddress: 'IP-adress',
timestamp: 'Tidsstämpel',
dateRange: 'Datumintervall',
searchPlaceholder: 'Sök loggar, användare eller klienter...',
noAuditLogs: 'Inga granskningsloggar hittades',
totalEntries: 'totala poster',
logoManagement: 'Logotyphanteringshändelser',
securityEvents: 'Säkerhetshändelser',
auditTrail: 'Granskningsspår',
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 };
};