import type { Messages } from '../types'; export const enTerminalMessages: Messages = { 'terminal.sudoHint.pressEnter': 'Press Enter to paste saved password', 'terminal.passwordPicker.title': 'Saved passwords', 'terminal.passwordPicker.empty': 'No saved passwords', // Network Device Mode auto-detection tip (session header) 'terminal.networkDevice.tip.message': 'This looks like a network device. Enable Network Device Mode to send commands as-is (no shell wrapping).', 'terminal.networkDevice.tip.action': 'Enable', 'terminal.networkDevice.tip.dismiss': 'Dismiss', 'terminal.networkDevice.tip.enabled': 'Network Device Mode enabled for {host}', // 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.receiveYmodem': 'Receive with YMODEM', 'terminal.toolbar.sftp': 'SFTP', 'terminal.toolbar.more': 'More actions', 'terminal.toolbar.scripts': 'Scripts', 'terminal.toolbar.history': 'Command history', 'terminal.toolbar.configureOsc7': 'Configure directory tracking', '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', 'history.action.delete': 'Delete from history', '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.startSessionLog': 'Start session log', 'terminal.toolbar.stopSessionLog': 'Stop session log', '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.paneMagnification.magnify': 'Magnify Current Pane', 'terminal.paneMagnification.restore': 'Restore Pane Layout', 'terminal.paneMagnification.hint': 'Magnified', 'terminal.toolbar.detach': 'Detach to standalone tab', 'terminal.toolbar.dragPane': 'Drag terminal pane', 'terminal.toolbar.showActions': 'Show terminal actions', '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.statusbar.disconnect.label': 'Disconnect', 'terminal.statusbar.disconnect.tooltip': 'Disconnect this session without closing the tab', 'terminal.statusbar.reconnect.label': 'Reconnect', 'terminal.statusbar.reconnect.tooltip': 'Reconnect this session', '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', 'terminal.serverStats.diskDetails': 'Mounted Disks', 'terminal.serverStats.network': 'Network Speed', 'terminal.serverStats.latency': 'SSH network latency', '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.remoteZmodemMessage': 'Files will be uploaded via ZMODEM (PTY)', 'terminal.dragDrop.remoteSftpMessage': 'Files will be uploaded via SFTP', 'terminal.dragDrop.noFiles': 'No files to upload', 'terminal.dragDrop.notConnected': 'Cannot drop files - terminal is not connected', 'terminal.dragDrop.errorTitle': 'Drop Error', 'terminal.dragDrop.errorMessage': 'Failed to process dropped files', 'terminal.dragDrop.destinationUnknown': 'Could not determine the current terminal folder. Enable directory tracking, or open SFTP and choose an upload folder first.', 'terminal.dragDrop.uploadCancelled': 'The upload was cancelled because the terminal connection changed or could not be reused. Drop the files again after reconnecting.', 'terminal.dragDrop.needsSudoElevation': 'This folder is not writable as the login user. Enable Sudo elevation in host settings, or go back to your user directory and drop again.', '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.uploadClipboardImage': 'Upload clipboard image', '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.receiveYmodem': 'Receive with YMODEM', 'terminal.menu.splitHorizontal': 'Split Horizontal', 'terminal.menu.splitVertical': 'Split Vertical', 'terminal.menu.clearBuffer': 'Clear Buffer', 'terminal.menu.closeTerminal': 'Close terminal', 'terminal.menu.rename': 'Rename', 'terminal.menu.detach': 'Detach from workspace', 'terminal.menu.detachSession': 'Detach {name}', 'terminal.clipboardImageUpload.noImage': 'Clipboard does not contain an image', 'terminal.clipboardImageUpload.failed': 'Could not upload clipboard image', 'terminal.osc7Setup.title': 'Configure directory tracking', 'terminal.osc7Setup.desc': 'NetMesh will add OSC 7 prompt hooks for the current remote user. This helps SFTP follow the terminal directory after sudo or su.', 'terminal.osc7Setup.targets': 'Possible files to update', 'terminal.osc7Setup.command': 'Command to run', 'terminal.osc7Setup.run': 'Run setup', 'terminal.osc7Setup.running': 'Configuring...', 'terminal.osc7Setup.configured': 'Directory tracking configured', 'terminal.osc7Setup.failed': 'Directory tracking setup failed', 'terminal.osc7Setup.sent': 'Directory tracking setup sent to 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.selectReceiveDirectory': 'Select folder to save received files', 'terminal.ymodem.receiveStarted': 'YMODEM receiving...', 'terminal.ymodem.receiveComplete': 'YMODEM received {fileName}', 'terminal.ymodem.receiveCompleteMultiple': 'YMODEM received {count} files', 'terminal.ymodem.receiveEmpty': 'No YMODEM files received', 'terminal.ymodem.receiveFailed': 'YMODEM receive 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.retryMessage': 'Authentication failed. Please check your credentials and try again.', 'terminal.auth.retryLog': 'Authentication failed. Please try again.', '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.waitingForUserInput': 'Waiting for user input', 'terminal.progress.disconnected': 'Disconnected', 'terminal.progress.cancelling': 'Cancelling...', 'terminal.progress.startOver': 'Start over', 'terminal.progress.enterReconnectHint': 'Press Enter to reconnect', 'terminal.progress.reconnecting': 'Reconnecting...', 'terminal.progress.autoReconnectScheduled': 'Connection lost. Reconnecting in {seconds}s (attempt {attempt}).', 'terminal.progress.autoReconnectAttempt': 'Auto reconnect attempt {attempt}...', '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.connection.protocol.plugin': 'Plugin connection', 'terminal.et.proxyUnsupported': 'EternalTerminal does not currently support NetMesh proxy settings. Use SSH or remove the proxy for this host.', 'terminal.et.multiJumpUnsupported': 'EternalTerminal currently supports at most one jump host in NetMesh.', '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.disconnect': 'Disconnect', 'cloudSync.provider.disconnect.confirmTitle': 'Disconnect "{name}"?', 'cloudSync.provider.disconnect.confirmMessage': 'This device will stop syncing with {name}. Your local vault stays on this computer.', 'cloudSync.provider.disconnect.confirmAction': 'Disconnect', '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.allowInsecure': 'Allow insecure connection (ignore certificate errors)', '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.connect.plugin.success': 'Plugin sync provider connected successfully', 'cloudSync.connect.plugin.failedTitle': 'Plugin sync connection failed', 'cloudSync.pluginConfig.title': 'Configure {name}', 'cloudSync.pluginConfig.desc': 'Enter the JSON configuration required by this plugin sync provider.', 'cloudSync.pluginConfig.label': 'Provider configuration (JSON)', 'cloudSync.pluginConfig.invalidJson': 'Configuration must be valid JSON.', 'cloudSync.pluginConfig.schemaInvalid': 'Configuration does not match the provider schema.', '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 NetMesh 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.convergent.title': 'Convergent multi-device sync', 'cloudSync.convergent.experimental': 'Experimental', 'cloudSync.convergent.desc': 'Uses an encrypted CRDT replica to preserve offline edits, concurrent deletions, and changes from every connected provider.', 'cloudSync.convergent.active': 'CRDT v2 is active. Provider writes are verified after upload.', 'cloudSync.convergent.paused': 'CRDT v2 is paused on this device; cloud metadata is retained.', 'cloudSync.convergent.enabled': 'Convergent sync enabled', 'cloudSync.convergent.preview.title': 'Migration preview', 'cloudSync.convergent.preview.entities': 'Entities', 'cloudSync.convergent.preview.providers': 'Providers', 'cloudSync.convergent.preview.conflicts': 'Conflicts', 'cloudSync.convergent.preview.compatibility': 'A complete v1 snapshot remains in every encrypted payload for older clients.', 'cloudSync.convergent.preview.confirm': 'Create CRDT replica', 'cloudSync.convergent.preview.status.ready': 'Ready', 'cloudSync.convergent.preview.status.empty': 'Empty', 'cloudSync.convergent.preview.status.unavailable': 'Unavailable', 'cloudSync.convergent.preview.status.blocked': 'Blocked', 'cloudSync.convergent.preview.schema': 'schema', 'cloudSync.convergent.field.presence': 'presence', 'cloudSync.convergent.field.position': 'position', 'cloudSync.convergent.conflicts.title': 'Field conflicts ({count})', 'cloudSync.convergent.conflict.empty': 'Empty / deleted', 'cloudSync.convergent.conflict.secretSet': 'Secret is set', 'cloudSync.convergent.conflict.current': 'current winner', 'cloudSync.convergent.conflict.choose': 'Choose', 'cloudSync.convergent.conflict.resolved': 'Conflict resolved and synchronized', 'cloudSync.convergent.downgrade.desc': 'Replace v2 files on every connected provider with a legacy snapshot.', 'cloudSync.convergent.downgrade.button': 'Downgrade', 'cloudSync.convergent.downgrade.confirm': 'Downgrade every connected provider to legacy sync? This removes CRDT metadata after write verification.', 'cloudSync.convergent.downgrade.done': 'Convergent sync downgraded', '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': 'NetMesh 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 NetMesh 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, {notes} notes', '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 NetMesh, so local backups cannot be written safely. Install NetMesh 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.notes': 'Notes', '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 NetMesh.', '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.notes': 'Notes', 'cloudSync.conflict.entity.noteGroups': 'Note groups', '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.closePluginViewAria': 'Close {title}', 'tabs.logPrefix': 'Log:', 'tabs.logLocal': 'Local', 'tabs.copyTab': 'Copy Tab', 'tabs.duplicateSession': 'Duplicate Session', '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 scripts...', 'snippets.action.newSnippet': 'New Snippet', 'snippets.action.newPackage': 'New Script Package', 'snippets.action.import': 'Import', 'snippets.action.selectSnippets': 'Select snippets', 'snippets.panel.newTitle': 'New Snippet', 'snippets.panel.editTitle': 'Edit Snippet', 'snippets.panel.newAutomationTitle': 'New Automation Script', 'snippets.panel.editAutomationTitle': 'Edit Automation Script', 'snippets.panel.resizeWidth': 'Resize panel width', 'snippets.field.description': 'Action description', 'snippets.field.descriptionPlaceholder': 'Example: check network load', 'snippets.field.package': 'Add a script package', 'snippets.field.packagePlaceholder': 'Select or create script package', 'snippets.field.createPackage': 'Create Script 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.targets.selectHosts': 'Hosts', 'snippets.targets.selectGroups': 'Groups', 'snippets.targets.noGroups': 'No groups found', 'snippets.targets.allHosts': 'Apply to all hosts', 'snippets.targets.allHostsShort': 'All hosts', 'snippets.targets.allHostsActive': 'Applies to every connectable host.', '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 script packages', 'snippets.breadcrumb.separator': '›', 'snippets.empty.title': 'Create scripts', 'snippets.empty.desc': 'Save common commands as code snippets, or write automation scripts for repeatable operations.', 'snippets.search.noResults.title': 'No matches', 'snippets.search.noResults.desc': 'No scripts or script packages match "{query}". Try a different search term or clear the search to browse.', 'snippets.section.packages': 'Script Packages', 'snippets.section.snippets': 'Scripts', 'snippets.kind.codeSnippet': 'Code snippet', 'snippets.kind.automationScript': 'Automation script', 'snippets.package.count': '{count} script(s)', 'snippets.commandFallback': 'Command', 'snippets.view.grid': 'Grid', 'snippets.view.list': 'List', 'snippets.selection.selected': '{count} selected', 'snippets.selection.selectVisible': 'Select visible', 'snippets.selection.deselectAll': 'Deselect all', 'snippets.selection.exportSelected': 'Export selected ({count})', 'snippets.selection.deleteSelected': 'Delete ({count})', 'snippets.selection.deleteConfirmTitle': 'Delete selected items ({count})?', 'snippets.selection.deleteConfirmDesc': 'The selected items will be permanently deleted. This action cannot be undone.', 'snippets.selection.deleteSuccess': 'Deleted selected items: {count}.', 'snippets.export.snippet': 'Export snippet', 'snippets.export.package': 'Export script package', 'snippets.export.toast.empty': 'No snippets to export.', 'snippets.export.toast.successTitle': 'Export ready', 'snippets.export.toast.success': 'Exported {count} snippet(s).', 'snippets.import.toast.empty': 'No importable snippets found.', 'snippets.import.toast.failedTitle': 'Import failed', 'snippets.import.toast.invalidDesc': 'This is not a valid NetMesh snippets file.', 'snippets.import.toast.successTitle': 'Import completed', 'snippets.import.toast.summary': 'Imported {imported}, overwritten {overwritten}, skipped {skipped}.', 'snippets.import.modal.title': 'Import snippets', 'snippets.import.modal.desc': 'Choose one or more NetMesh snippets JSON files. NetMesh will preview them before anything is imported.', 'snippets.import.modal.exampleTitle': 'Example JSON', 'snippets.import.modal.noFile': 'No file selected yet. Use the example format below, or a plain JSON array of snippets, then choose one or more files.', 'snippets.import.modal.chooseFile': 'Choose file', 'snippets.import.modal.downloadExamples': 'Download samples', 'snippets.import.modal.multipleFiles': '{count} files selected', 'snippets.import.modal.parsedSummary': '{files} file(s), {total} script(s), {packages} script package(s), {conflicts} duplicate command(s). Host bindings are ignored.', 'snippets.import.modal.confirm': 'Confirm import', 'snippets.import.conflict.title': 'Import snippets?', 'snippets.import.conflict.desc': '{file} contains {total} snippet(s). {conflicts} duplicate command(s) already exist.', 'snippets.import.conflict.hostBindingsNote': 'Host bindings are not imported or exported with snippets.', 'snippets.import.conflict.skip': 'Skip duplicates', 'snippets.import.conflict.overwrite': 'Overwrite duplicates', 'snippets.packageDialog.title': 'New Script Package', 'snippets.packageDialog.parent': 'Parent: {parent}', 'snippets.packageDialog.root': 'Root', 'snippets.packageDialog.placeholder': 'e.g. ops/maintenance', 'snippets.packageDialog.hint': 'Use "/" to create nested script packages.', // Snippets Rename Dialog 'snippets.renameDialog.title': 'Rename Script Package', 'snippets.renameDialog.currentPath': 'Current path: {path}', 'snippets.renameDialog.placeholder': 'Enter new name', 'snippets.renameDialog.error.empty': 'Script package name cannot be empty', 'snippets.renameDialog.error.duplicate': 'A script package with this name already exists', 'snippets.renameDialog.error.invalidChars': 'Script package name can only contain letters, numbers, hyphens, and underscores', 'snippets.field.noAutoRun': 'Paste only (do not auto-execute)', 'snippets.field.multiLineRunMode': 'Multi-line run', 'snippets.field.multiLineRunMode.paste': 'Send all at once', 'snippets.field.multiLineRunMode.lineDelay': 'Send line by line', 'snippets.field.multiLineRunModeHint': 'Use line by line for prompt-based logins or device macros.', // 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 {name}', '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.backspaceBehavior': 'Backspace key', 'serial.field.backspaceBehaviorDesc': 'Use Ctrl+H for network devices that do not respond to the default Backspace code.', 'serial.backspace.default': 'Default (DEL, 0x7F)', 'serial.backspace.ctrlH': 'Ctrl+H (BS, 0x08)', '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', };