import type { Messages } from '../types';

export const enTerminalMessages: Messages = {
  'terminal.sudoHint.pressEnter': 'Press Enter to paste sudo password',
  // Terminal toolbar / search / context menu / auth
  'terminal.toolbar.openSftp': 'Open SFTP',
  'terminal.toolbar.availableAfterConnect': 'Available after connect',
  'terminal.toolbar.sendYmodem': 'Send with YMODEM',
  'terminal.toolbar.sftp': 'SFTP',
  'terminal.toolbar.more': 'More actions',
  'terminal.toolbar.scripts': 'Scripts',
  'terminal.toolbar.history': 'Command history',
  'history.scope.label': 'History scope',
  'history.tab.host': 'Host',
  'history.tab.global': 'Global',
  'history.searchPlaceholder': 'Search history...',
  'history.loading': 'Loading remote history...',
  'history.meta.count': '{count} commands',
  'history.empty.noSession': 'Open a remote session to view its command history.',
  'history.empty.unsupportedProtocol': 'Command history is only available for SSH/Mosh/ET sessions.',
  'history.empty.noHistory': 'No command history found on this host.',
  'history.empty.noGlobalHistory': 'No global command history yet. Commands you run will appear here.',
  'history.action.refresh': 'Refresh',
  'history.action.retry': 'Retry',
  'history.action.paste': 'Paste to terminal',
  'history.action.run': 'Run in terminal',
  'history.action.saveAsSnippet': 'Save as snippet',
  'terminal.toolbar.library': 'Library',
  'terminal.toolbar.noSnippets': 'No snippets available',
  'terminal.toolbar.terminalSettings': 'Terminal settings',
  'terminal.toolbar.searchTerminal': 'Search terminal',
  'terminal.toolbar.search': 'Search',
  'terminal.toolbar.timestampsEnable': 'Show timestamps',
  'terminal.toolbar.timestampsDisable': 'Hide timestamps',
  'terminal.toolbar.broadcast': 'Broadcast',
  'terminal.toolbar.broadcastEnable': 'Enable Broadcast Mode',
  'terminal.toolbar.broadcastDisable': 'Disable Broadcast Mode',
  'terminal.toolbar.composeBar': 'Compose Bar',
  'terminal.composeBar.placeholder': 'Type command here, press Enter to send...',
  'terminal.composeBar.send': 'Send',
  'terminal.composeBar.close': 'Close compose bar',
  'terminal.composeBar.broadcasting': 'Broadcasting to all sessions',
  'terminal.composeBar.resize': 'Resize compose bar height',
  'terminal.composeBar.manageSnippets': 'Manage quick snippets',
  'terminal.composeBar.searchSnippets': 'Search snippets...',
  'terminal.composeBar.noPinnedSnippets': 'Pin snippets with + for quick access',
  'terminal.composeBar.noMatchingSnippets': 'No matching snippets',
  'terminal.composeBar.pinnedCount': '{count} pinned',
  'terminal.composeBar.unpinSnippet': 'Remove {label} from quick bar',
  'terminal.composeBar.snippetClickHint': 'Click to insert · Shift+Click to send',
  'terminal.toolbar.focus': 'Focus',
  'terminal.toolbar.focusMode': 'Focus Mode',
  'terminal.toolbar.encoding': 'Terminal Encoding',
  'terminal.toolbar.encoding.utf8': 'UTF-8',
  'terminal.toolbar.encoding.gb18030': 'GB18030',
  'terminal.toolbar.closeSession': 'Close session',
  'terminal.toolbar.hostHighlight.title': 'Host Keyword Highlighting',
  'terminal.toolbar.hostHighlight.noRules': 'No custom highlight rules defined for this host',
  'terminal.toolbar.hostHighlight.addRule': 'Add New Rule',
  'terminal.toolbar.hostHighlight.labelPlaceholder': 'Label (e.g., Error)',
  'terminal.toolbar.hostHighlight.patternPlaceholder': 'Regex pattern (e.g., \\bfailed\\b)',
  'terminal.toolbar.hostHighlight.invalidPattern': 'Invalid regex pattern',
  'terminal.toolbar.hostHighlight.clearAll': 'Clear All',
  'terminal.toolbar.hostHighlight.changeColor': 'Change highlight color for',
  'terminal.toolbar.hostHighlight.selectColor': 'Select color for new rule',
  'terminal.statusbar.copyHostname.label': 'Copy host address',
  'terminal.statusbar.copyHostname.tooltip': 'Copy host address ({hostname})',
  'terminal.statusbar.copyHostname.toast': 'Copied host address: {hostname}',
  'terminal.statusbar.copyHostname.error': 'Failed to copy host address to clipboard',
  'terminal.serverStats.cpu': 'CPU Usage',
  'terminal.serverStats.cpuCores': 'CPU Core Usage',
  'terminal.serverStats.memory': 'Memory Usage',
  'terminal.serverStats.memoryDetails': 'Memory Details',
  'terminal.serverStats.memUsed': 'Used',
  'terminal.serverStats.memBuffers': 'Buffers',
  'terminal.serverStats.memCached': 'Cache',
  'terminal.serverStats.memFree': 'Free',
  'terminal.serverStats.swap': 'Swap',
  'terminal.serverStats.swapUsed': 'Swap Used',
  'terminal.serverStats.swapFree': 'Swap Free',
  'terminal.serverStats.swapTotal': 'Total',
  'terminal.serverStats.topProcesses': 'Top Processes by Memory',
  'terminal.serverStats.disk': 'Disk Usage (Root)',
  'terminal.serverStats.diskDetails': 'Mounted Disks',
  'terminal.serverStats.network': 'Network Speed',
  'terminal.serverStats.networkDetails': 'Network Interfaces',
  'terminal.serverStats.noData': 'No data available',
  'terminal.dragDrop.localTitle': 'Drop to Insert Paths',
  'terminal.dragDrop.localMessage': 'File paths will be inserted into the terminal',
  'terminal.dragDrop.remoteTitle': 'Drop to Upload Files',
  'terminal.dragDrop.remoteMessage': 'Files will be uploaded via SFTP',
  'terminal.dragDrop.notConnected': 'Cannot drop files - terminal is not connected',
  'terminal.dragDrop.errorTitle': 'Drop Error',
  'terminal.dragDrop.errorMessage': 'Failed to process dropped files',
  'terminal.search.placeholder': 'Search...',
  'terminal.search.noResults': 'No results',
  'terminal.search.prevMatch': 'Previous match (Shift+Enter)',
  'terminal.search.nextMatch': 'Next match (Enter)',
  'terminal.menu.copy': 'Copy',
  'terminal.menu.paste': 'Paste',
  'terminal.menu.addSelectionToAI': 'Add to Conversation',
  'terminal.menu.pasteSelection': 'Paste Selection',
  'terminal.menu.selectAll': 'Select All',
  'terminal.menu.reconnect': 'Reconnect',
  'terminal.menu.sendYmodem': 'Send with YMODEM',
  'terminal.menu.splitHorizontal': 'Split Horizontal',
  'terminal.menu.splitVertical': 'Split Vertical',
  'terminal.menu.clearBuffer': 'Clear Buffer',
  'terminal.menu.closeTerminal': 'Close terminal',
  'terminal.ymodem.selectFile': 'Select file to send',
  'terminal.ymodem.allFiles': 'All files',
  'terminal.ymodem.started': 'YMODEM sending {fileName}',
  'terminal.ymodem.complete': 'YMODEM sent {fileName}',
  'terminal.ymodem.failed': 'YMODEM send failed',
  'terminal.ymodem.unavailable': 'YMODEM is unavailable',
  'terminal.selection.addToAI': 'Add to Conversation',
  'terminal.selection.addToAIDesc': 'Attach selected terminal output to the AI draft',
  'terminal.auth.password': 'Password',
  'terminal.auth.sshKey': 'SSH Key',
  'terminal.auth.username': 'Username',
  'terminal.auth.username.placeholder': 'root',
  'terminal.auth.passwordLabel': 'Password',
  'terminal.auth.password.placeholder': 'Enter password',
  'terminal.auth.passphrase': 'Passphrase',
  'terminal.auth.passphrase.placeholder': 'Optional passphrase for the selected private key',
  'terminal.auth.certificate': 'Certificate',
  'terminal.auth.selectKey': 'Select Key',
  'terminal.auth.noKeysHint': 'No keys available. Add keys in Keychain.',
  'terminal.auth.continueSave': 'Continue & Save',
  'terminal.auth.credentialsUnavailable': 'Saved credentials cannot be decrypted on this device. Please re-enter and save them again.',
  'terminal.auth.jumpCredentialsUnavailable': 'A jump host has saved credentials that cannot be decrypted on this device. Open host settings and re-enter them.',
  'terminal.auth.proxyCredentialsUnavailable': 'Proxy credentials cannot be decrypted on this device. Open host settings and re-enter the proxy password.',
  'terminal.auth.keyUnavailableFallbackPassword': 'Saved SSH key is unavailable on this device. Falling back to password authentication.',
  'terminal.progress.timeoutIn': 'Timeout in {seconds}s',
  'terminal.progress.disconnected': 'Disconnected',
  'terminal.progress.cancelling': 'Cancelling...',
  'terminal.progress.startOver': 'Start over',
  'terminal.connection.dismissDisconnectedDialog': 'Dismiss disconnected notice',
  'terminal.connection.chainOf': 'Chain {current} of {total}',
  'terminal.connection.showLogs': 'Show logs',
  'terminal.connection.hideLogs': 'Hide logs',
  'terminal.connection.protocol.ssh': 'SSH',
  'terminal.connection.protocol.telnet': 'Telnet',
  'terminal.connection.protocol.mosh': 'Mosh',
  'terminal.connection.protocol.et': 'EternalTerminal',
  'terminal.et.proxyUnsupported': 'EternalTerminal does not currently support Netcatty proxy settings. Use SSH or remove the proxy for this host.',
  'terminal.et.multiJumpUnsupported': 'EternalTerminal currently supports at most one jump host in Netcatty.',
  'terminal.connection.protocol.serial': 'Serial',
  'terminal.connection.protocol.local': 'Local Shell',
  'terminal.hostKey.unknownTitle': 'Confirm this host key',
  'terminal.hostKey.changedTitle': 'Host key changed',
  'terminal.hostKey.unknownDescription': 'The authenticity of {host} cannot be established yet.',
  'terminal.hostKey.changedDescription': 'The saved key for {host} no longer matches this server.',
  'terminal.hostKey.fingerprintLabel': '{keyType} fingerprint is SHA256:',
  'terminal.hostKey.savedFingerprintLabel': 'Saved fingerprint',
  'terminal.hostKey.unknownHint': 'Remember it if this fingerprint belongs to the server you expected.',
  'terminal.hostKey.changedHint': 'Only continue if you expected this host to change.',
  'terminal.hostKey.addAndContinue': 'Add and continue',
  'terminal.hostKey.updateAndContinue': 'Update and continue',
  'terminal.themeModal.title': 'Terminal Appearance',
  'terminal.themeModal.tab.theme': 'Theme',
  'terminal.themeModal.tab.font': 'Font',
  'terminal.themeModal.tab.custom': 'Custom',
  'terminal.themeModal.globalTheme': 'Global Theme',
  'terminal.themeModal.globalFont': 'Global Font',
  'terminal.themeModal.fontSize': 'Font Size',
  'terminal.themeModal.fontWeight': 'Font Weight',
  'terminal.themeModal.livePreview': 'Live Preview',
  'terminal.themeModal.themeType': '{type} theme',
  'terminal.hiddenTheme.title': 'Current hidden theme',
  'terminal.hiddenTheme.desc': 'This theme is hidden from manual picks and will be replaced when you choose another theme.',
  'topTabs.toggleTheme.systemExitTitle': 'System theme is active',
  'topTabs.toggleTheme.systemExitMessage': 'Open Settings to choose a fixed Light or Dark theme.',
  'topTabs.toggleTheme.openSettings': 'Open Settings',

  // Custom Themes
  'terminal.customTheme.section': 'Custom Themes',
  'terminal.customTheme.yourThemes': 'Your Themes',
  'terminal.customTheme.new': 'New Theme',
  'terminal.customTheme.newDesc': 'Clone current theme and customize',
  'terminal.customTheme.newTitle': 'New Custom Theme',
  'terminal.customTheme.editTitle': 'Edit Theme',
  'terminal.customTheme.import': 'Import .itermcolors',
  'terminal.customTheme.importDesc': 'Import from iTerm2 color scheme file',
  'terminal.customTheme.importError': 'Failed to parse the selected file. Please ensure it is a valid .itermcolors XML file.',
  'terminal.customTheme.delete': 'Delete Theme',
  'terminal.customTheme.confirmDelete': 'Confirm Delete',
  'terminal.customTheme.name': 'Name',
  'terminal.customTheme.namePlaceholder': 'My Custom Theme',
  'terminal.customTheme.type': 'Type',
  'terminal.customTheme.group.general': 'General',
  'terminal.customTheme.group.normal': 'Normal Colors',
  'terminal.customTheme.group.bright': 'Bright Colors',
  'terminal.customTheme.color.background': 'Background',
  'terminal.customTheme.color.foreground': 'Foreground',
  'terminal.customTheme.color.cursor': 'Cursor',
  'terminal.customTheme.color.selection': 'Selection',
  'terminal.customTheme.color.black': 'Black',
  'terminal.customTheme.color.red': 'Red',
  'terminal.customTheme.color.green': 'Green',
  'terminal.customTheme.color.yellow': 'Yellow',
  'terminal.customTheme.color.blue': 'Blue',
  'terminal.customTheme.color.magenta': 'Magenta',
  'terminal.customTheme.color.cyan': 'Cyan',
  'terminal.customTheme.color.white': 'White',
  'terminal.customTheme.color.brightBlack': 'Bright Black',
  'terminal.customTheme.color.brightRed': 'Bright Red',
  'terminal.customTheme.color.brightGreen': 'Bright Green',
  'terminal.customTheme.color.brightYellow': 'Bright Yellow',
  'terminal.customTheme.color.brightBlue': 'Bright Blue',
  'terminal.customTheme.color.brightMagenta': 'Bright Magenta',
  'terminal.customTheme.color.brightCyan': 'Bright Cyan',
  'terminal.customTheme.color.brightWhite': 'Bright White',

  // Cloud Sync Settings
  'cloudSync.gate.title': 'End-to-End Encrypted Sync',
  'cloudSync.gate.desc':
    'Your data is encrypted locally before syncing. Cloud providers never see your plaintext data. Set a master key to enable secure sync.',
  'cloudSync.gate.masterKey': 'Master Key',
  'cloudSync.gate.confirmMasterKey': 'Confirm Master Key',
  'cloudSync.gate.placeholder': 'Enter a strong password',
  'cloudSync.gate.confirmPlaceholder': 'Confirm your password',
  'cloudSync.gate.mismatch': 'Passwords do not match',
  'cloudSync.gate.warning':
    'I understand that if I forget my master key, my data cannot be recovered. There is no password reset.',
  'cloudSync.gate.enableVault': 'Enable Encrypted Vault',
  'cloudSync.gate.enabledToast': 'Encrypted vault enabled',
  'cloudSync.gate.setupFailed': 'Failed to set up master key',
  'cloudSync.passwordStrength.tooShort': 'Too short',
  'cloudSync.passwordStrength.weak': 'Weak',
  'cloudSync.passwordStrength.moderate': 'Moderate',
  'cloudSync.passwordStrength.strong': 'Strong',
  'cloudSync.passwordStrength.veryStrong': 'Very Strong',
  'cloudSync.provider.notConnected': 'Not connected',
  'cloudSync.provider.sync': 'Sync',
  'cloudSync.provider.connect': 'Connect',
  'cloudSync.provider.connecting': 'Connecting...',
  'cloudSync.provider.webdav': 'WebDAV',
  'cloudSync.provider.webdav.desc': 'Connect to a self-hosted WebDAV endpoint',
  'cloudSync.provider.s3': 'S3 Compatible',
  'cloudSync.provider.s3.desc': 'Connect to S3-compatible object storage',
  'cloudSync.provider.comingSoon': 'Coming soon',
  'cloudSync.webdav.title': 'WebDAV Settings',
  'cloudSync.webdav.desc': 'Configure a WebDAV endpoint for encrypted sync.',
  'cloudSync.webdav.endpoint': 'Endpoint URL',
  'cloudSync.webdav.authType': 'Auth Type',
  'cloudSync.webdav.auth.basic': 'Basic',
  'cloudSync.webdav.auth.digest': 'Digest',
  'cloudSync.webdav.auth.token': 'Token',
  'cloudSync.webdav.username': 'Username',
  'cloudSync.webdav.password': 'Password',
  'cloudSync.webdav.token': 'Token',
  'cloudSync.webdav.showSecret': 'Show secret',
  'cloudSync.webdav.allowInsecure': 'Allow insecure connection (ignore certificate errors)',
  'cloudSync.webdav.validation.endpoint': 'Enter a valid WebDAV endpoint.',
  'cloudSync.webdav.validation.credentials': 'Username and password are required.',
  'cloudSync.webdav.validation.token': 'Token is required.',
  'cloudSync.s3.title': 'S3 Settings',
  'cloudSync.s3.desc': 'Connect to S3-compatible object storage for encrypted sync.',
  'cloudSync.s3.endpoint': 'Endpoint URL',
  'cloudSync.s3.region': 'Region',
  'cloudSync.s3.bucket': 'Bucket',
  'cloudSync.s3.accessKeyId': 'Access Key ID',
  'cloudSync.s3.secretAccessKey': 'Secret Access Key',
  'cloudSync.s3.sessionToken': 'Session Token (optional)',
  'cloudSync.s3.prefix': 'Key Prefix (optional)',
  'cloudSync.s3.forcePathStyle': 'Force path-style URLs (for MinIO/R2, etc.)',
  'cloudSync.s3.showSecret': 'Show secrets',
  'cloudSync.s3.validation.required': 'Endpoint, region, bucket, access key, and secret are required.',
  'cloudSync.smb.title': 'SMB Settings',
  'cloudSync.smb.desc': 'Connect to an SMB/CIFS file share for encrypted sync.',
  'cloudSync.smb.share': 'Share Path',
  'cloudSync.smb.username': 'Username',
  'cloudSync.smb.password': 'Password',
  'cloudSync.smb.domain': 'Domain (optional)',
  'cloudSync.smb.domainPlaceholder': 'e.g., WORKGROUP',
  'cloudSync.smb.port': 'Port (optional)',
  'cloudSync.smb.showSecret': 'Show password',
  'cloudSync.smb.validation.share': 'Share path is required.',
  'cloudSync.smb.validation.port': 'Port must be a number between 1 and 65535.',
  'cloudSync.connect.smb.success': 'SMB connected successfully',
  'cloudSync.connect.smb.failedTitle': 'SMB connection failed',
  'cloudSync.provider.smb': 'SMB Share',
  'cloudSync.connect.webdav.success': 'WebDAV connected successfully',
  'cloudSync.connect.webdav.failedTitle': 'WebDAV connection failed',
  'cloudSync.connect.s3.success': 'S3 connected successfully',
  'cloudSync.connect.s3.failedTitle': 'S3 connection failed',
  'cloudSync.lastSync.never': 'Never',
  'cloudSync.lastSync.justNow': 'Just now',
  'cloudSync.lastSync.minutesAgo': '{minutes} min ago',
  'cloudSync.changeKey': 'Change Key',
  'cloudSync.providers.title': 'Cloud Providers',
  'cloudSync.syncAll': 'Sync All Connected Providers',
  'cloudSync.autoSync.title': 'Auto-sync',
  'cloudSync.autoSync.desc': 'Automatically sync when changes are made',
  'cloudSync.strategy.title': 'Sync strategy',
  'cloudSync.strategy.desc': 'Choose what happens when local and cloud data both changed.',
  'cloudSync.strategy.smartMerge': 'Smart merge (recommended)',
  'cloudSync.strategy.smartMergeDesc': 'Combine changes from both sides when possible; if Netcatty cannot decide safely, ask you to choose.',
  'cloudSync.strategy.preferCloud': 'Cloud wins',
  'cloudSync.strategy.preferCloudDesc': 'When both sides changed, download the cloud version and replace local changes.',
  'cloudSync.strategy.preferLocal': 'Local wins',
  'cloudSync.strategy.preferLocalDesc': 'When both sides changed, upload the local version and replace cloud changes.',
  'cloudSync.status.title': 'Sync Status',
  'cloudSync.status.localVersion': 'Local Version',
  'cloudSync.status.remoteVersion': 'Remote Version',
  'cloudSync.history.title': 'Sync History',
  'cloudSync.history.upload': 'Upload',
  'cloudSync.history.download': 'Download',
  'cloudSync.history.resolved': 'Resolved',
  'cloudSync.history.error': 'Error',
  'cloudSync.localBackups.title': 'Local Backup History',
  'cloudSync.localBackups.desc': 'Netcatty keeps local restore points before app version changes and before vault restores.',
  'cloudSync.localBackups.retentionTitle': 'Backup Retention',
  'cloudSync.localBackups.retentionDesc': 'Choose how many local backups Netcatty should keep.',
  'cloudSync.localBackups.maxCount': 'Max backups',
  'cloudSync.localBackups.maxSaved': 'Saved backup retention: {count}',
  'cloudSync.localBackups.maxInvalid': 'Please enter a number between 1 and 100.',
  'cloudSync.localBackups.empty': 'No local backups yet.',
  'cloudSync.localBackups.reason.appVersionChange': 'Before app version change',
  'cloudSync.localBackups.reason.beforeRestore': 'Before restore',
  'cloudSync.localBackups.versionChange': '{from} -> {to}',
  'cloudSync.localBackups.counts': '{hosts} hosts, {keys} keys, {snippets} snippets',
  'cloudSync.localBackups.restore': 'Restore',
  'cloudSync.localBackups.restoreSuccess': 'Local backup restored.',
  'cloudSync.localBackups.restoreFailedTitle': 'Restore failed',
  'cloudSync.localBackups.restoreMissing': 'Backup not found.',
  'cloudSync.localBackups.protectiveBackupFailed': 'Safety backup could not be created, so the restore was aborted to protect your current data. Resolve the underlying issue (e.g. keychain access) and try again. Details: {message}',
  'cloudSync.localBackups.restoreConfirmTitle': 'Restore this backup?',
  'cloudSync.localBackups.restoreConfirmDesc': 'Your current hosts, keys, snippets and settings will be replaced with the contents of this backup. A protective snapshot of your current data is taken automatically first.',
  'cloudSync.localBackups.restoreConfirmButton': 'Restore',
  'cloudSync.localBackups.restoreConfirmCancel': 'Cancel',
  'cloudSync.localBackups.unavailableTitle': 'Local backups unavailable',
  'cloudSync.localBackups.unavailableDesc': 'This platform does not expose a secure keychain to Netcatty, so local backups cannot be written safely. Install Netcatty on a system with a supported keychain to enable the local backup history.',
  'cloudSync.localBackups.lockedTitle': 'Master key required',
  'cloudSync.localBackups.lockedDesc': 'Set up or unlock your master key before restoring a backup, so restored credentials remain encrypted.',
  'cloudSync.revisionHistory.viewButton': 'History',
  'cloudSync.revisionHistory.title': 'Vault Version History',
  'cloudSync.revisionHistory.description': 'Browse and restore previous versions of your vault from the Gist revision history.',
  'cloudSync.revisionHistory.empty': 'No revisions found.',
  'cloudSync.revisionHistory.current': 'Current',
  'cloudSync.revisionHistory.revision': 'Revision',
  'cloudSync.revisionHistory.revisionPreview': 'Revision Contents',
  'cloudSync.revisionHistory.device': 'Device',
  'cloudSync.revisionHistory.hosts': 'Hosts',
  'cloudSync.revisionHistory.keys': 'Keys',
  'cloudSync.revisionHistory.snippets': 'Snippets',
  'cloudSync.revisionHistory.identities': 'Identities',
  'cloudSync.revisionHistory.restoreButton': 'Restore This Version',
  'cloudSync.revisionHistory.restored': 'Vault restored from selected revision.',
  'cloudSync.revisionHistory.revisionNotFound': 'Revision not found or does not contain vault data.',
  'cloudSync.revisionHistory.decryptFailed': 'Cannot decrypt this revision. It may have been encrypted with a different master password.',
  'cloudSync.changeKey.title': 'Change Master Key',
  'cloudSync.changeKey.current': 'Current Master Key',
  'cloudSync.changeKey.new': 'New Master Key',
  'cloudSync.changeKey.confirmNew': 'Confirm New Master Key',
  'cloudSync.changeKey.currentPlaceholder': 'Enter current master key',
  'cloudSync.changeKey.newPlaceholder': 'Enter new master key',
  'cloudSync.changeKey.confirmPlaceholder': 'Confirm new master key',
  'cloudSync.changeKey.fillAll': 'Please fill in all fields',
  'cloudSync.changeKey.minLength': 'New master key must be at least 8 characters',
  'cloudSync.changeKey.notMatch': 'New master keys do not match',
  'cloudSync.changeKey.incorrectCurrent': 'Incorrect current master key',
  'cloudSync.changeKey.failed': 'Failed to change master key',
  'cloudSync.changeKey.desc': 'This will re-encrypt your vault. Make sure you remember the new key.',
  'cloudSync.changeKey.showKeys': 'Show keys',
  'cloudSync.changeKey.updatedToast': 'Master key updated',
  'cloudSync.changeKey.updateButton': 'Update Key',
  'cloudSync.unlock.title': 'Enter Master Key',
  'cloudSync.unlock.masterKey': 'Master Key',
  'cloudSync.unlock.desc':
    'Enter your master key once to enable encrypted sync. It will be stored securely using your OS keychain.',
  'cloudSync.unlock.placeholder': 'Enter your master key',
  'cloudSync.unlock.empty': 'Please enter your master key',
  'cloudSync.unlock.incorrect': 'Incorrect master key',
  'cloudSync.unlock.failed': 'Failed to unlock vault',
  'cloudSync.unlock.showKey': 'Show key',
  'cloudSync.unlock.notNow': 'Not now',
  'cloudSync.unlock.readyToast': 'Vault ready',
  'cloudSync.unlock.unlockButton': 'Unlock',
  'cloudSync.header.vaultReady': 'Vault ready',
  'cloudSync.header.preparingVault': 'Preparing vault...',
  'cloudSync.header.providersConnected': '{count} provider(s) connected',
  'cloudSync.githubFlow.title': 'Connect to GitHub',
  'cloudSync.githubFlow.desc': 'Copy the code below and enter it on GitHub to authorize Netcatty.',
  'cloudSync.githubFlow.copyCode': 'Copy code',
  'cloudSync.githubFlow.copied': 'Copied!',
  'cloudSync.githubFlow.openGitHub': 'Open GitHub',
  'cloudSync.githubFlow.waiting': 'Waiting for authorization...',
  'cloudSync.conflict.title': 'Version conflict detected',
  'cloudSync.conflict.desc': 'Choose which version to keep',
  'cloudSync.conflict.local': 'LOCAL',
  'cloudSync.conflict.cloud': 'CLOUD',
  'cloudSync.conflict.detailsTitle': 'Changed data',
  'cloudSync.conflict.detailsCounts': 'Local {local} · Cloud {cloud} · Conflicts {conflicts}',
  'cloudSync.conflict.entity.hosts': 'Hosts',
  'cloudSync.conflict.entity.keys': 'Keys',
  'cloudSync.conflict.entity.identities': 'Identities',
  'cloudSync.conflict.entity.proxyProfiles': 'Proxy profiles',
  'cloudSync.conflict.entity.snippets': 'Snippets',
  'cloudSync.conflict.entity.customGroups': 'Groups',
  'cloudSync.conflict.entity.snippetPackages': 'Snippet packages',
  'cloudSync.conflict.entity.portForwardingRules': 'Port forwarding',
  'cloudSync.conflict.entity.groupConfigs': 'Group settings',
  'cloudSync.conflict.entity.settings': 'Settings',
  'cloudSync.conflict.keepLocal': 'Overwrite cloud (keep local)',
  'cloudSync.conflict.useCloud': 'Download cloud (overwrite local)',
  'cloudSync.connect.browserContinue': 'Complete authorization in browser',
  'cloudSync.connect.browserCancelled': 'Previous browser authorization was cancelled',
  'cloudSync.connect.github.success': 'GitHub connected successfully',
  'cloudSync.connect.github.failedTitle': 'GitHub connection failed',
  'cloudSync.connect.github.timeout': 'GitHub connection timed out. Check your network or proxy settings.',
  'cloudSync.connect.github.networkError': 'Unable to reach GitHub. Check your network or proxy settings.',
  'cloudSync.connect.google.failedTitle': 'Google connection failed',
  'cloudSync.connect.onedrive.failedTitle': 'OneDrive connection failed',
  'cloudSync.sync.success': 'Synced to {provider}',
  'cloudSync.sync.failed': 'Sync failed',
  'cloudSync.sync.failedTitle': 'Sync failed',
  'cloudSync.sync.errorTitle': 'Sync error',
  'cloudSync.resolve.downloaded': 'Downloaded cloud data',
  'cloudSync.resolve.uploaded': 'Uploaded local data',
  'cloudSync.resolve.failedTitle': 'Conflict resolution failed',
  'cloudSync.clearLocal.title': 'Clear Local Data',
  'cloudSync.clearLocal.desc': 'Reset local version and sync history. Next sync will download from cloud.',
  'cloudSync.clearLocal.button': 'Clear',
  'cloudSync.clearLocal.dialog.title': 'Clear Local Vault Data?',
  'cloudSync.clearLocal.dialog.desc': 'This will reset local version to 0 and clear sync history. Your next sync will download data from the cloud, replacing local data.',
  'cloudSync.clearLocal.dialog.cancel': 'Cancel',
  'cloudSync.clearLocal.dialog.confirm': 'Clear Local Data',
  'cloudSync.clearLocal.toast.title': 'Local data cleared',
  'cloudSync.clearLocal.toast.desc': 'Local version reset to 0. Sync to download from cloud.',

  // Keychain
  'keychain.filter.key': 'KEY',
  'keychain.filter.certificate': 'CERTIFICATE',
  'keychain.action.generateKey': 'Generate Key',
  'keychain.action.importKey': 'Import Key',
  'keychain.action.newIdentity': 'New Identity',
  'keychain.action.importCertificate': 'Import Certificate',
  'keychain.view.grid': 'Grid',
  'keychain.view.list': 'List',
  'keychain.section.keys': 'Keys',
  'keychain.section.identities': 'Identities',
  'keychain.count.items': '{count} items',
  'keychain.empty.title': 'Set up your keys',
  'keychain.empty.desc': 'Import or generate SSH keys for secure authentication.',
  'keychain.panel.generateKey': 'Generate Key',
  'keychain.panel.newKey': 'New Key',
  'keychain.panel.keyDetails': 'Key Details',
  'keychain.panel.editKey': 'Edit Key',
  'keychain.panel.editIdentity': 'Edit Identity',
  'keychain.panel.newIdentity': 'New Identity',
  'keychain.panel.keyExport': 'Key Export',
  'keychain.validation.labelRequired': 'Please enter a label for the key',
  'keychain.validation.labelAndPrivateKeyRequired': 'Label and private key are required',
  'keychain.validation.labelAndUsernameRequired': 'Label and username are required',
  'keychain.error.generationUnavailable':
    'Key generation not available - please ensure the app is running in Electron',
  'keychain.error.generateKeyPairFailed': 'Failed to generate key pair',
  'keychain.error.generateKeyFailed': 'Failed to generate key',
  'keychain.error.keyGenerationTitle': 'Key Generation',
  'keychain.export.exportTo': 'Export to *',
  'keychain.export.selectHost': 'Select Host',
  'keychain.export.location': 'Location ~ $1 *',
  'keychain.export.filename': 'Filename ~ $2 *',
  'keychain.export.note':
    'Key export currently supports only {unix} systems. Use the {advanced} section to customize the export script.',
  'keychain.export.script': 'Script *',
  'keychain.export.scriptPlaceholder': 'Export script...',
  'keychain.export.missingCredentials':
    'Host has no saved password or key. Please add password credentials to the host first.',
  'keychain.export.successTitle': 'Export Successful',
  'keychain.export.successMessage': 'Public key exported and attached to {host}',
  'keychain.export.failedTitle': 'Export Failed',
  'keychain.export.failedMessage': 'Failed to export key: {error}',
  'keychain.export.failedPrefix': 'Export failed: {error}',
  'keychain.export.exitCode': 'Command exited with code {code}',
  'keychain.export.exporting': 'Exporting...',
  'keychain.export.exportAndAttach': 'Export and Attach',
  'keychain.export.title': 'Key export',
  'keychain.export.exportToRequired': 'Export to *',
  'keychain.export.selectHostPlaceholder': 'Select a host...',
  'keychain.export.locationLabel': 'Location ~ $1 *',
  'keychain.export.filenameLabel': 'Filename ~ $2 *',
  'keychain.export.advanced': 'Advanced',
  'keychain.export.note.supportsOnly': 'Key export currently supports only',
  'keychain.export.note.systems': 'systems.',
  'keychain.export.note.use': 'Use',
  'keychain.export.note.customize': 'section to customize the export script.',
  'keychain.export.scriptRequired': 'Script *',
  'keychain.export.exportToHost': 'Export to host',
  'keychain.export.failedGeneric': 'Export failed: {message}',
  'keychain.field.label': 'Label',
  'keychain.field.labelRequired': 'Label *',
  'keychain.field.labelPlaceholder': 'Key label',
  'keychain.field.privateKeyRequired': 'Private key *',
  'keychain.field.publicKey': 'Public key',
  'keychain.field.certificatePlaceholder': 'Certificate content (optional)',
  'keychain.generate.keyType': 'Key type',
  'keychain.generate.keySize': 'Key size',
  'keychain.generate.labelPlaceholder': 'Key label',
  'keychain.generate.passphrasePlaceholder': 'Passphrase (optional)',
  'keychain.generate.savePassphrase': 'Save passphrase',
  'keychain.generate.generate': 'Generate',
  'keychain.generate.generateSave': 'Generate & Save',
  'keychain.import.dropHint': 'Drop a key file here',
  'keychain.import.importFromFile': 'Import from file',
  'keychain.import.saveKey': 'Save Key',
  'keychain.import.importedKeyLabel': 'Imported Key',
  'keychain.identity.usernameRequired': 'Username *',
  'keychain.identity.method.passwordOnly': 'Password',
  'keychain.identity.summary.password': 'Auth password',
  'keychain.identity.summary.key': 'Auth key',
  'keychain.identity.summary.certificate': 'Auth certificate',
  'keychain.identity.summary.passwordAndKey': 'Auth password and key',
  'keychain.identity.summary.passwordAndCertificate': 'Auth password and certificate',
  'keychain.identity.summary.none': 'No credentials',
  'keychain.identity.selectCredential': 'Select {kind}',
  'keychain.identity.save': 'Save',
  'keychain.identity.update': 'Update',
  'keychain.keyDialog.newTitle': 'New Key',
  'keychain.keyDialog.newDesc': 'Add a new SSH key',
  'keychain.keyDialog.editTitle': 'Edit Key',
  'keychain.keyDialog.editDesc': 'Update this SSH key',
  'keychain.keyDialog.updateKey': 'Update Key',

  // Tabs
  'tabs.closeSessionAria': 'Close session',
  'tabs.closeLogViewAria': 'Close log view',
  'tabs.logPrefix': 'Log:',
  'tabs.logLocal': 'Local',
  'tabs.copyTab': 'Copy Tab',
  'tabs.copyTabToNewWindow': 'Copy Tab to New Window',
  'tabs.copyTabToNewWindowFailed': 'Failed to open tab in a new window',
  'tabs.closeOthers': 'Close Others',
  'tabs.closeToRight': 'Close Tabs to the Right',
  'tabs.closeAll': 'Close All',
  'keychain.edit.labelRequired': 'Label *',
  'keychain.edit.keyLabelPlaceholder': 'Key label',
  'keychain.edit.privateKeyRequired': 'Private key *',
  'keychain.edit.publicKey': 'Public key',
  'keychain.edit.certificate': 'Certificate',
  'keychain.edit.certificatePlaceholder': 'Certificate content (optional)',
  'keychain.edit.filePath': 'File path',
  'keychain.edit.keyExport': 'Key export',
  'keychain.edit.exportToHost': 'Export to host',

  // Snippets
  'snippets.searchPlaceholder': 'Search snippets...',
  'snippets.action.newSnippet': 'New Snippet',
  'snippets.action.newPackage': 'New Package',
  'snippets.panel.newTitle': 'New Snippet',
  'snippets.panel.editTitle': 'Edit Snippet',
  'snippets.field.description': 'Action description',
  'snippets.field.descriptionPlaceholder': 'Example: check network load',
  'snippets.field.package': 'Add a Package',
  'snippets.field.packagePlaceholder': 'Select or create package',
  'snippets.field.createPackage': 'Create Package',
  'snippets.field.scriptRequired': 'Script *',
  'snippets.scriptEditor.expand': 'Open in dialog',
  'snippets.scriptEditor.resize': 'Resize editor height',
  'snippets.scriptEditor.modalTitle': 'Edit script',
  'snippets.targets.title': 'Targets',
  'snippets.targets.add': 'Add targets',
  'snippets.history.title': 'Shell History',
  'snippets.history.subtitle': '{count} commands',
  'snippets.history.emptyTitle': 'No shell history yet',
  'snippets.history.emptyDesc': 'Commands you execute will appear here',
  'snippets.history.loadMore': 'Load more',
  'snippets.history.separator': '•',
  'snippets.history.labelPlaceholder': 'Set a label for this snippet',
  'snippets.history.saveAsSnippet': 'Save as Snippet',
  'snippets.history.time.justNow': 'just now',
  'snippets.history.time.minutesAgo': '{count}m ago',
  'snippets.history.time.hoursAgo': '{count}h ago',
  'snippets.history.time.daysAgo': '{count}d ago',
  'snippets.breadcrumb.allPackages': 'All packages',
  'snippets.breadcrumb.separator': '›',
  'snippets.empty.title': 'Create snippet',
  'snippets.empty.desc': 'Save your most used commands as snippets to reuse them in one click.',
  'snippets.search.noResults.title': 'No matches',
  'snippets.search.noResults.desc': 'No snippets or packages match "{query}". Try a different search term or clear the search to browse.',
  'snippets.section.packages': 'Packages',
  'snippets.section.snippets': 'Snippets',
  'snippets.package.count': '{count} snippet(s)',
  'snippets.commandFallback': 'Command',
  'snippets.view.grid': 'Grid',
  'snippets.view.list': 'List',
  'snippets.packageDialog.title': 'New Package',
  'snippets.packageDialog.parent': 'Parent: {parent}',
  'snippets.packageDialog.root': 'Root',
  'snippets.packageDialog.placeholder': 'e.g. ops/maintenance',
  'snippets.packageDialog.hint': 'Use "/" to create nested packages.',

  // Snippets Rename Dialog
  'snippets.renameDialog.title': 'Rename Package',
  'snippets.renameDialog.currentPath': 'Current path: {path}',
  'snippets.renameDialog.placeholder': 'Enter new name',
  'snippets.renameDialog.error.empty': 'Package name cannot be empty',
  'snippets.renameDialog.error.duplicate': 'A package with this name already exists',
  'snippets.renameDialog.error.invalidChars': 'Package name can only contain letters, numbers, hyphens, and underscores',

  'snippets.field.noAutoRun': 'Paste only (do not auto-execute)',
  // Snippet Shortkey
  'snippets.field.shortkey': 'Keyboard Shortcut',
  'snippets.shortkey.placeholder': 'Click to set shortcut',
  'snippets.shortkey.recording': 'Press a key combination...',
  'snippets.shortkey.hint': 'Press this shortcut in terminal to quickly send the command.',
  'snippets.shortkey.clear': 'Clear shortcut',
  'snippets.shortkey.error.systemConflict': 'This shortcut conflicts with a system shortcut',
  'snippets.shortkey.error.snippetConflict': 'This shortcut is already used by snippet: {name}',

  'snippets.variables.dialogTitle': 'Snippet variables',
  'snippets.variables.dialogDesc': 'Fill in values for "{label}" before running.',
  'snippets.variables.hint': 'Values are inserted as-is into the script (not shell-escaped).',
  'snippets.variables.preview': 'Preview',
  'snippets.variables.placeholder': 'Enter a value',
  'snippets.variables.placeholderDefault': 'Default: {value}',
  'snippets.variables.required': 'This variable is required',
  'snippets.variables.run': 'Run',
  'snippets.field.variablesHelp': 'Use {{name}} or {{name:default}} for placeholders in the script.',
  'snippets.field.variablesDetected': 'Variables',
  'snippets.field.variableDefault': 'default {value}',

  // Serial Port
  'serial.button': 'Serial',
  'serial.modal.title': 'Connect to Serial Port',
  'serial.modal.desc': 'Configure serial port connection settings',
  'serial.field.port': 'Serial Port',
  'serial.field.selectPort': 'Select a port...',
  'serial.field.baudRate': 'Baud Rate',
  'serial.field.dataBits': 'Data Bits',
  'serial.field.stopBits': 'Stop Bits',
  'serial.field.stopBits15Warning': '1.5 stop bits may not be supported on all Windows devices',
  'serial.field.parity': 'Parity',
  'serial.field.flowControl': 'Flow Control',
  'serial.noPorts': 'No serial ports detected. Connect a device and refresh.',
  'serial.field.customPort': 'Custom Port Path',
  'serial.field.customPortPlaceholder': 'e.g. /dev/ttys001 or COM1',
  'serial.type.hardware': 'Hardware',
  'serial.type.pseudo': 'Pseudo Terminal',
  'serial.type.custom': 'Custom',
  'serial.parity.none': 'None',
  'serial.parity.even': 'Even',
  'serial.parity.odd': 'Odd',
  'serial.parity.mark': 'Mark',
  'serial.parity.space': 'Space',
  'serial.flowControl.none': 'None',
  'serial.flowControl.xon/xoff': 'XON/XOFF (Software)',
  'serial.flowControl.rts/cts': 'RTS/CTS (Hardware)',
  'serial.field.localEcho': 'Force Local Echo',
  'serial.field.localEchoDesc': 'Echo typed characters locally (for devices without remote echo)',
  'serial.field.lineMode': 'Line Mode',
  'serial.field.lineModeDesc': 'Buffer input and send on Enter (instead of character-by-character)',
  'serial.field.charset': 'Charset',
  'serial.connectionError': 'Failed to connect to serial port',
  'serial.field.baudRatePlaceholder': 'Select or enter baud rate...',
  'serial.field.baudRateEmpty': 'Enter a custom baud rate',
  'serial.field.customBaudRate': 'Using custom baud rate',
  'serial.field.saveConfig': 'Save Configuration',
  'serial.field.saveConfigDesc': 'Save this serial configuration to hosts for quick access',
  'serial.field.configLabel': 'Configuration Name',
  'serial.field.configLabelPlaceholder': 'e.g. Arduino Uno',
  'serial.connectAndSave': 'Connect & Save',
  'serial.edit.title': 'Serial Port Settings',

  // Keyboard Interactive Authentication (2FA/MFA)
  'keyboard.interactive.title': 'Authentication Required',
  'keyboard.interactive.desc': 'The server requires additional authentication.',
  'keyboard.interactive.descWithHost': 'The server {hostname} requires additional authentication.',
  'keyboard.interactive.response': 'Response',
  'keyboard.interactive.enterCode': 'Enter verification code',
  'keyboard.interactive.enterResponse': 'Enter response',
  'keyboard.interactive.submit': 'Submit',
  'keyboard.interactive.verifying': 'Verifying...',
  'keyboard.interactive.savePassword': 'Save password',

  // Passphrase Modal for encrypted SSH keys
  'passphrase.title': 'SSH Key Passphrase',
  'passphrase.desc': 'Enter the passphrase for {keyName}',
  'passphrase.descWithHost': 'Enter the passphrase for {keyName} to connect to {hostname}',
  'passphrase.label': 'Passphrase',
  'passphrase.keyPath': 'Key',
  'passphrase.unlock': 'Unlock',
  'passphrase.unlocking': 'Unlocking...',
  'passphrase.skip': 'Skip',
  'passphrase.remember': 'Remember this passphrase',

  // Text Editor
  'sftp.editor.wordWrap': 'Word Wrap',
  'sftp.editor.maximize': 'Maximize',
  'sftp.editor.unsavedTitle': 'Unsaved changes',
  'sftp.editor.unsavedMessage': '{fileName} has unsaved changes. Save before closing?',
  'sftp.editor.discardChanges': 'Discard',
  'sftp.editor.saveAndClose': 'Save and close',
  'sftp.editor.quitBlockedByDirty': 'Unsaved editors — please save or discard before quitting',

};
