mirror of
https://github.com/chaos-zhu/easynode.git
synced 2026-10-06 15:23:23 +08:00
614 lines
26 KiB
Dart
614 lines
26 KiB
Dart
/// English UI strings. Treated as the source of truth — every key referenced
|
|
/// from the app must exist here. [AppLocalizations.tr] falls back to this
|
|
/// table when a key is missing in another locale.
|
|
const Map<String, String> stringsEn = {
|
|
// App
|
|
'app.title': 'EasyNode',
|
|
'app.subtitle': 'Native terminal access',
|
|
|
|
// Common
|
|
'common.cancel': 'Cancel',
|
|
'common.continue': 'Continue',
|
|
'common.retry': 'Retry',
|
|
'common.connect': 'Connect',
|
|
'common.close': 'Close',
|
|
'common.closeAll': 'Close all',
|
|
'common.all': 'All',
|
|
'common.save': 'Save',
|
|
'common.saved': 'Saved',
|
|
'common.search': 'Search',
|
|
'common.closeSearch': 'Close search',
|
|
'common.system': 'System default',
|
|
'common.delete': 'Delete',
|
|
'common.optional': 'Optional',
|
|
'common.exitApp': 'Exit',
|
|
'common.exitAppTitle': 'Exit app?',
|
|
'common.exitAppBody': 'Are you sure you want to exit the app?',
|
|
'common.refreshFailed': 'Refresh failed: {0}',
|
|
|
|
// Login page
|
|
'login.serverAddress': 'Server address',
|
|
'login.serverAddressHint': 'https://example.com',
|
|
'login.username': 'Username',
|
|
'login.password': 'Password',
|
|
'login.showPassword': 'Show password',
|
|
'login.hidePassword': 'Hide password',
|
|
'login.mfa': 'MFA code (optional)',
|
|
'login.sessionDuration': 'Session duration',
|
|
'login.savePassword': 'Save password securely',
|
|
'login.submit': 'Log in',
|
|
'login.failed': 'Login failed',
|
|
'login.httpRiskTitle': 'HTTP is not encrypted',
|
|
'login.httpRiskBody':
|
|
'All your data may be stolen. It is recommended to use HTTPS(only in intranet environments).',
|
|
'login.errEmptyUsername': 'Please enter a username',
|
|
'login.errEmptyPassword': 'Please enter a password',
|
|
'login.errInvalidServer': 'Please enter a valid server address',
|
|
'login.errSchemeUnsupported': 'Server address must use http or https',
|
|
'login.errLoginGeneric': 'Login failed',
|
|
'login.errMissingFields': 'Server login response is missing required fields',
|
|
|
|
// Login expiry options
|
|
'login.expiry.threeDays': '3 days',
|
|
'login.expiry.sevenDays': '7 days',
|
|
'login.expiry.thirtyDays': '30 days',
|
|
|
|
// Main shell tabs
|
|
'tabs.servers': 'Servers',
|
|
'tabs.sftp': 'SFTP',
|
|
'tabs.docker': 'Docker',
|
|
'tabs.scripts': 'Scripts',
|
|
'tabs.settings': 'Settings',
|
|
|
|
// Servers tab
|
|
'servers.title': 'Servers',
|
|
'servers.addServer': 'Add server',
|
|
'servers.editServer': 'Edit server',
|
|
'servers.searchHint': 'Search by name, host, user, tag, or group',
|
|
'servers.emptyHint':
|
|
'No servers yet. Pull to refresh after adding hosts on web.',
|
|
'servers.emptyFiltered': 'No matching servers.',
|
|
'servers.notConfigured': 'Not configured',
|
|
'servers.fetchSshFailed': 'Failed to get SSH config: {0}',
|
|
'servers.windowsUnsupported': 'Windows connections are not supported yet.',
|
|
'servers.connectPlusRequired':
|
|
'This connection capability is not enabled by the connected server.',
|
|
'servers.proxyPlusTip':
|
|
'This proxy capability is not enabled by the connected server.',
|
|
'servers.activeTerminalsOne': '1 active terminal',
|
|
'servers.activeTerminalsMany': '{0} active terminals',
|
|
'servers.closeAllTitle': 'Close all terminals?',
|
|
'servers.closeAllBodyOne': 'This will disconnect 1 active terminal.',
|
|
'servers.closeAllBodyMany': 'This will disconnect {0} active terminals.',
|
|
'servers.closeAllTooltip': 'Close all terminals',
|
|
'servers.deleteConfirmTitle': 'Delete server?',
|
|
'servers.deleteConfirmBody': 'Delete "{0}"? This cannot be undone.',
|
|
'servers.deleteFailed': 'Failed to delete server: {0}',
|
|
'servers.authFallback': 'auth',
|
|
'servers.section.connection': 'Connection',
|
|
'servers.section.instance': 'Instance',
|
|
'servers.section.auth': 'Authentication',
|
|
'servers.advanced': 'Other settings',
|
|
'servers.submit': 'Add / Update',
|
|
'servers.secretEditHint': 'Leave blank to keep the existing saved secret.',
|
|
'servers.credentialUnsupported':
|
|
'Credential selection is reserved for a later native credentials screen.',
|
|
'servers.tagsHint': 'Separate tags with commas',
|
|
'servers.field.group': 'Group',
|
|
'servers.field.name': 'Name',
|
|
'servers.field.host': 'Host',
|
|
'servers.field.port': 'Port',
|
|
'servers.field.username': 'Username',
|
|
'servers.field.index': 'Index',
|
|
'servers.field.authType': 'Authentication',
|
|
'servers.field.password': 'Password',
|
|
'servers.field.privateKey': 'Private key',
|
|
'servers.field.credential': 'Credential',
|
|
'servers.field.proxyServer': 'Proxy service',
|
|
'servers.field.expired': 'Expiry date',
|
|
'servers.field.expiredNotify': 'Expiry reminder',
|
|
'servers.field.consoleUrl': 'Console URL',
|
|
'servers.field.tags': 'Tags',
|
|
'servers.field.command': 'Login command',
|
|
'servers.field.proxyType': 'Proxy type',
|
|
'servers.field.jumpHosts': 'Jump hosts',
|
|
'servers.auth.privateKey': 'Private key',
|
|
'servers.auth.password': 'Password',
|
|
'servers.auth.credential': 'Credential',
|
|
'servers.proxy.none': 'No proxy',
|
|
'servers.proxy.jumpHosts': 'Jump hosts',
|
|
'servers.proxy.proxyServer': 'Proxy server',
|
|
'servers.proxy.noneShort': 'None',
|
|
'servers.proxy.jumpHostsShort': 'Jump',
|
|
'servers.proxy.proxyServerShort': 'Proxy',
|
|
'servers.proxy.socksShort': 'Proxy',
|
|
'servers.jumpHosts.empty': 'No configured servers can be used as jump hosts.',
|
|
'servers.jumpHosts.orderHint':
|
|
'Connection order follows the selection order.',
|
|
'servers.jumpHosts.placeholder': 'Select jump hosts',
|
|
'servers.proxyServerUnsupported':
|
|
'Proxy server selection is reserved for later.',
|
|
'servers.proxy.empty':
|
|
'No Proxy service data. Manage proxy services on web first.',
|
|
'servers.credentials.empty':
|
|
'No credential data. Manage credentials on web first.',
|
|
'servers.credentials.hint':
|
|
'Credentials are maintained centrally in credential management.',
|
|
'servers.validation.group': 'Select a group',
|
|
'servers.validation.name': 'Enter a server name',
|
|
'servers.validation.host': 'Enter an IP address or domain',
|
|
'servers.validation.port': 'Enter a numeric port',
|
|
'servers.validation.index': 'Enter a numeric index',
|
|
'servers.validation.credential': 'Select a credential',
|
|
'servers.validation.proxyServer': 'Select a proxy service',
|
|
'servers.validation.jumpHosts': 'Select at least one jump host',
|
|
|
|
// SFTP / Scripts placeholders
|
|
'sftp.placeholder': 'Coming soon: browse and manage remote files',
|
|
'sftp.emptyTitle': 'No server connected',
|
|
'sftp.emptyBody': 'Choose a server to start browsing remote files over SFTP.',
|
|
'sftp.chooseServer': 'Choose server',
|
|
'sftp.switchServer': 'Switch server',
|
|
'sftp.sheetTitle': 'Select server',
|
|
'sftp.sheetSubtitle': 'Connected servers are shown first.',
|
|
'sftp.searchHint': 'Search by name, host, or user',
|
|
'sftp.connectedSection': 'Connected',
|
|
'sftp.disconnectedSection': 'Not connected',
|
|
'sftp.statusConnected': 'Connected',
|
|
'sftp.statusDisconnected': 'Not connected',
|
|
'sftp.connecting': 'Connecting SFTP...',
|
|
'sftp.phase.transport': 'Connecting to server...',
|
|
'sftp.phase.channel': 'Opening SFTP channel...',
|
|
'sftp.phase.listing': 'Reading directory...',
|
|
'sftp.connectTimeout': 'Connection timed out (10s)',
|
|
'sftp.connectFailed': 'Connection failed',
|
|
'sftp.emptyDirectory': 'This directory is empty.',
|
|
'sftp.upload': 'Upload',
|
|
'sftp.newItem': 'New',
|
|
'sftp.favorites': 'Favorites',
|
|
'sftp.uploadFile': 'Upload files',
|
|
'sftp.uploadFolder': 'Upload folder',
|
|
'sftp.newFile': 'New file',
|
|
'sftp.newFolder': 'New folder',
|
|
'sftp.nameHint': 'Enter name',
|
|
'sftp.action.download': 'Download',
|
|
'sftp.action.copyTo': 'Copy to...',
|
|
'sftp.action.moveTo': 'Move to...',
|
|
'sftp.action.compress': 'Compress',
|
|
'sftp.action.extract': 'Extract',
|
|
'sftp.extractDone': 'Extracted successfully',
|
|
'sftp.extractToTitle': 'Extract to',
|
|
'sftp.extractPathHint': 'Target directory',
|
|
'sftp.action.delete': 'Delete',
|
|
'sftp.action.rename': 'Rename',
|
|
'sftp.action.copyPath': 'Copy path',
|
|
'sftp.compressTitle': 'Compress to zip',
|
|
'sftp.renameTitle': 'Rename',
|
|
'sftp.deleteTitle': 'Delete files?',
|
|
'sftp.deleteBody': 'Delete {0} selected item(s)? This cannot be undone.',
|
|
'sftp.pathCopied': 'Path copied.',
|
|
'sftp.downloadReady': 'SFTP download ready',
|
|
'sftp.folderUploadUnsupported':
|
|
'This system picker did not provide a readable folder path.',
|
|
'sftp.chooseTargetFolder': 'Choose target folder',
|
|
'sftp.selectThisFolder': 'Select this folder',
|
|
|
|
// Docker
|
|
'docker.emptyTitle': 'No server selected',
|
|
'docker.emptyBody': 'Choose a Linux server to manage Docker containers.',
|
|
'docker.chooseServer': 'Choose server',
|
|
'docker.switchServer': 'Switch server',
|
|
'docker.sheetTitle': 'Select server',
|
|
'docker.sheetSubtitle': 'Connected Docker sessions are shown first.',
|
|
'docker.searchHint': 'Search by name, host, or user',
|
|
'docker.connectedSection': 'Connected',
|
|
'docker.disconnectedSection': 'Not connected',
|
|
'docker.statusConnected': 'Connected',
|
|
'docker.statusDisconnected': 'Not connected',
|
|
'docker.connecting': 'Connecting Docker...',
|
|
'docker.noContainers': 'No containers found.',
|
|
'docker.plusRequired': 'Docker management requires server authorization.',
|
|
'docker.connectFailed': 'Docker service connection failed.',
|
|
'docker.notPlus': 'Docker management is not enabled on this server.',
|
|
'docker.refresh': 'Refresh',
|
|
'docker.logs': 'Logs',
|
|
'docker.start': 'Start',
|
|
'docker.stop': 'Stop',
|
|
'docker.restart': 'Restart',
|
|
'docker.delete': 'Delete',
|
|
'docker.deleteTitle': 'Delete container?',
|
|
'docker.deleteBody': 'Delete container "{0}"? This cannot be undone.',
|
|
'docker.operationFailed': 'Operation failed: {0}',
|
|
'docker.logsTitle': '{0} logs',
|
|
'docker.noLogs': 'No logs.',
|
|
'docker.openPortFailed': 'Unable to parse port mapping.',
|
|
'docker.selectAll': 'Select all',
|
|
'docker.selectedCount': '{0} selected',
|
|
'docker.batchStart': 'Start',
|
|
'docker.batchRestart': 'Restart',
|
|
'docker.batchStop': 'Stop',
|
|
'docker.batchDelete': 'Delete',
|
|
'docker.batchDeleteTitle': 'Delete {0} containers?',
|
|
'docker.batchDeleteBody':
|
|
'Are you sure you want to delete {0} selected containers? This cannot be undone.',
|
|
'scripts.placeholder': 'Coming soon: script library',
|
|
|
|
// Scripts tab
|
|
'scripts.title': 'Scripts',
|
|
'scripts.searchHint': 'Search name, description, or command',
|
|
'scripts.emptyHint': 'No scripts yet. Tap + to add one.',
|
|
'scripts.emptyFiltered': 'No matching scripts.',
|
|
'scripts.addScript': 'Add script',
|
|
'scripts.editScript': 'Edit script',
|
|
'scripts.groupsTitle': 'Script groups',
|
|
'scripts.groupsManage': 'Manage groups',
|
|
'scripts.groupsHint': 'Groups organize your scripts.',
|
|
'scripts.groupsHintBody':
|
|
'Deleting a group moves its scripts to the default group.',
|
|
'scripts.groupsPlusTip':
|
|
'This capability is not enabled by the connected server.',
|
|
'scripts.addGroup': 'Add group',
|
|
'scripts.editGroup': 'Edit group',
|
|
'scripts.groupName': 'Group name',
|
|
'scripts.groupIndex': 'Index',
|
|
'scripts.deleteGroupTitle': 'Delete group?',
|
|
'scripts.deleteGroupBody':
|
|
'Scripts under "{0}" will move to the default group. Continue?',
|
|
'scripts.deleteScriptTitle': 'Delete script?',
|
|
'scripts.deleteScriptBody': 'Delete "{0}"? This cannot be undone.',
|
|
'scripts.commandCopied': 'Command copied.',
|
|
'scripts.builtinReadonly': 'Built-in scripts are read-only.',
|
|
'scripts.action.copy': 'Copy command',
|
|
'scripts.action.edit': 'Edit script',
|
|
'scripts.action.delete': 'Delete script',
|
|
'scripts.field.group': 'Group',
|
|
'scripts.field.name': 'Name',
|
|
'scripts.field.description': 'Description',
|
|
'scripts.field.index': 'Index',
|
|
'scripts.field.indexHint': 'Order within the group',
|
|
'scripts.field.command': 'Content',
|
|
'scripts.field.commandHint': 'shell script',
|
|
'scripts.field.useBase64': 'Encoding',
|
|
'scripts.useBase64.direct': 'Plain',
|
|
'scripts.useBase64.directHint': 'Best for single-line commands.',
|
|
'scripts.useBase64.base64': 'Base64',
|
|
'scripts.useBase64.base64Hint': 'Best for multi-line scripts.',
|
|
'scripts.section.basic': 'Basics',
|
|
'scripts.section.command': 'Script body',
|
|
'scripts.scriptCount': '{0} scripts',
|
|
'scripts.builtinChip': 'Built-in',
|
|
'scripts.defaultChip': 'Default',
|
|
'scripts.validation.name': 'Enter a script name.',
|
|
'scripts.validation.command': 'Enter script content.',
|
|
'scripts.validation.group': 'Select a group.',
|
|
'scripts.validation.groupName': 'Enter a group name.',
|
|
'scripts.saveFailed': 'Save failed: {0}',
|
|
'scripts.deleteFailed': 'Delete failed: {0}',
|
|
'scripts.loadFailed': 'Failed to load scripts: {0}',
|
|
|
|
// Settings
|
|
'settings.title': 'Settings',
|
|
'settings.logout': 'Log out',
|
|
'settings.logoutConfirmTitle': 'Log out?',
|
|
'settings.logoutConfirmBody': 'This will clear the saved login session.',
|
|
'settings.language': 'Language',
|
|
'settings.languageEnglish': 'English',
|
|
'settings.languageChinese': '中文',
|
|
|
|
'settings.section.security': 'Account & Security',
|
|
'settings.section.connection': 'Credentials & Connection',
|
|
'settings.section.preferences': 'Preferences',
|
|
|
|
'settings.plus.title': 'Plus features',
|
|
'settings.plus.inactiveMeta': 'Server authorization is not active',
|
|
'settings.plus.goActivate': 'View status',
|
|
|
|
'settings.account.title': 'Account & password',
|
|
'settings.account.subtitle': 'Username, password and MFA2',
|
|
'settings.sessions.title': 'Login sessions',
|
|
'settings.sessions.subtitle': 'Devices and IP allow-list',
|
|
'settings.credentials.title': 'Credentials',
|
|
'settings.credentials.subtitle': 'Centrally managed SSH credentials',
|
|
'settings.proxy.title': 'Proxies',
|
|
'settings.proxy.subtitle': 'HTTP / SOCKS5 outbound proxies',
|
|
|
|
'settings.theme.title': 'Appearance',
|
|
'settings.theme.system': 'Follow System',
|
|
'settings.theme.light': 'Light',
|
|
'settings.theme.dark': 'Dark',
|
|
|
|
'settings.update.title': 'Check for updates',
|
|
'settings.update.subtitle': 'Compare with the latest native release',
|
|
'settings.update.availableSubtitle': 'New version available: {0}',
|
|
'settings.update.latest': 'You are using the latest version.',
|
|
'settings.update.failed': 'Update check failed. Please try again later.',
|
|
'settings.update.availableTitle': 'New version available',
|
|
'settings.update.versionLine': 'Current: {0}\nLatest: {1}',
|
|
'settings.update.notesTitle': 'Updates:',
|
|
'settings.update.noReleaseUrl':
|
|
'A release is available, but no download page is configured for this platform yet.',
|
|
'settings.update.openRelease': 'Open release page',
|
|
|
|
'settings.profile.hostsLabel': 'Hosts',
|
|
'settings.profile.credentialsLabel': 'Credentials',
|
|
'settings.profile.scriptsLabel': 'Scripts',
|
|
|
|
'settings.comingSoon.title': 'Coming soon',
|
|
'settings.comingSoon.body': 'This area is being wired up — stay tuned.',
|
|
'settings.comingSoon.back': 'Back to settings',
|
|
|
|
'settings.notifications.tooltip': 'Notifications',
|
|
'settings.notifications.empty': 'No notifications yet',
|
|
|
|
// Plus subscription
|
|
'plus.activate': 'Update authorization',
|
|
'plus.keyLabel': 'Authorization Key',
|
|
'plus.keyHint': 'Enter the server authorization key',
|
|
'plus.keyTooShort': 'Please enter a valid authorization key',
|
|
'plus.activateSuccess': 'Authorization updated',
|
|
'plus.activateFailed': 'Authorization update failed',
|
|
'plus.needRestart':
|
|
'Authorization is occupied by another instance. Please restart the panel service and retry',
|
|
'plus.fetchKey': 'Open authorization page',
|
|
'plus.fetchKeyHint': 'Copied authorization URL to clipboard: {0}',
|
|
'plus.featuresTitle': 'Plus features',
|
|
'plus.featuresSection': 'Plus features',
|
|
'plus.section.activate': 'Authorization',
|
|
'plus.section.status': 'Authorization status',
|
|
'plus.activateHint': 'Authorization is configured on your EasyNode server.',
|
|
'plus.discountTip': 'Service notice',
|
|
'plus.loadFailed': 'Failed to load Plus info: {0}',
|
|
'plus.status.active': 'Server authorization active',
|
|
'plus.status.inactive': 'Server authorization inactive',
|
|
'plus.status.serverManagedHint':
|
|
'Authorization is managed by the connected self-hosted server.',
|
|
'plus.status.label': 'Status',
|
|
'plus.status.instance': 'Instance',
|
|
'plus.feature.ai.title': 'AI Chat',
|
|
'plus.feature.ai.desc': 'Built-in AI assistant for terminals',
|
|
'plus.feature.proxy.title': 'Proxy & jump hosts',
|
|
'plus.feature.proxy.desc': 'Proxy servers and jump host hops',
|
|
'plus.feature.rdp.title': 'RDP remote desktop',
|
|
'plus.feature.rdp.desc': 'Windows RDP access',
|
|
'plus.feature.transfer.title': 'File transfer',
|
|
'plus.feature.transfer.desc': 'Direct file transfer between hosts',
|
|
'plus.feature.advanced.title': 'Advanced terminal',
|
|
'plus.feature.advanced.desc': 'Session suspend, batch tasks, Docker',
|
|
'plus.feature.web.title': 'More on web',
|
|
'plus.feature.web.desc': 'Explore the full Plus feature set on web',
|
|
|
|
// Sessions
|
|
'sessions.ipWhitelistTitle': 'IP whitelist',
|
|
'sessions.ipWhitelistHint':
|
|
'Substring match — "192.168" matches all 192.168.* addresses.',
|
|
'sessions.ipAddHint': 'Enter an IP and press return',
|
|
'sessions.ipEmpty': 'No IPs configured — access is unrestricted',
|
|
'sessions.ipSave': 'Save whitelist',
|
|
'sessions.ipSaved': 'Whitelist saved',
|
|
'sessions.loginRecordsTitle': 'Login records',
|
|
'sessions.purgeTooltip': 'Delete records older than 7 days',
|
|
'sessions.purgeConfirmTitle': 'Purge old records?',
|
|
'sessions.purgeConfirmBody':
|
|
'All login records older than 7 days will be deleted.',
|
|
'sessions.purgeDone': 'Old records cleared',
|
|
'sessions.current': 'Current session',
|
|
'sessions.native': 'Native',
|
|
'sessions.revoked': 'Revoked',
|
|
'sessions.revoke': 'Revoke',
|
|
'sessions.revokeConfirmTitle': 'Revoke session?',
|
|
'sessions.revokeConfirmBody':
|
|
'The device on this session will be signed out immediately.',
|
|
'sessions.revokeDone': 'Revoked',
|
|
'sessions.createTime': 'Signed in',
|
|
'sessions.expireAt': 'Expires',
|
|
'sessions.empty': 'No login records yet',
|
|
'sessions.loadFailed': 'Failed to load sessions: {0}',
|
|
|
|
// Account security
|
|
'account.section.credentials': 'Login credentials',
|
|
'account.section.mfa': 'Two-factor (MFA2)',
|
|
'account.oldLoginName': 'Current username',
|
|
'account.oldPwd': 'Current password',
|
|
'account.newLoginName': 'New username',
|
|
'account.newPwd': 'New password',
|
|
'account.newPwdConfirm': 'Confirm new password',
|
|
'account.submit': 'Save changes',
|
|
'account.confirmTitle': 'Save changes?',
|
|
'account.confirmBody':
|
|
'All devices will be signed out after username or password changes.',
|
|
'account.changed': 'Updated — please sign in again',
|
|
'account.pwdMismatch': 'New passwords do not match',
|
|
'account.pwdRequired': 'Please enter the password',
|
|
'account.usernameRequired': 'Please enter the username',
|
|
'account.usernameSame': 'New username is the same as current',
|
|
'account.pwdSame': 'New password is the same as current',
|
|
'account.mfa.statusOn': 'MFA2 is enabled',
|
|
'account.mfa.statusOff': 'MFA2 is disabled',
|
|
'account.mfa.enable': 'Enable MFA2',
|
|
'account.mfa.disable': 'Disable MFA2',
|
|
'account.mfa.scanHint': 'Scan with Google Authenticator or similar',
|
|
'account.mfa.secret': 'Secret',
|
|
'account.mfa.copySecret': 'Copy secret',
|
|
'account.mfa.codeLabel': 'Enter the 6-digit code',
|
|
'account.mfa.enableConfirm': 'Enable',
|
|
'account.mfa.disableConfirm': 'Disable',
|
|
'account.mfa.enabled': 'MFA2 enabled',
|
|
'account.mfa.disabled': 'MFA2 disabled',
|
|
'account.mfa.codeRequired': 'Please enter the verification code',
|
|
'account.mfa.codeInvalid': 'Please enter a 6-digit code',
|
|
|
|
// Credentials
|
|
'credentials.searchHint': 'Search credential names',
|
|
'credentials.empty': 'No credentials yet. Tap the + above to add one.',
|
|
'credentials.emptyFiltered': 'No matching credentials.',
|
|
'credentials.add': 'Add credential',
|
|
'settings.credentials.add': 'Add',
|
|
'credentials.edit': 'Edit credential',
|
|
'credentials.deleteConfirmTitle': 'Delete credential?',
|
|
'credentials.deleteConfirmBody':
|
|
'Delete "{0}"? Servers referencing it will be cleared.',
|
|
'credentials.deleted': 'Deleted',
|
|
'credentials.deleteFailed': 'Delete failed: {0}',
|
|
'credentials.saveFailed': 'Save failed: {0}',
|
|
'credentials.field.name': 'Credential name',
|
|
'credentials.field.nameHint': 'A label for easy recognition',
|
|
'credentials.field.authType': 'Auth type',
|
|
'credentials.field.username': 'Username',
|
|
'credentials.field.usernameHint': 'Remote host username',
|
|
'credentials.field.password': 'Password',
|
|
'credentials.field.passwordHint': 'Remote host password',
|
|
'credentials.field.privateKey': 'Private key',
|
|
'credentials.field.privateKeyHint': 'Paste the full PEM private key',
|
|
'credentials.field.passphrase': 'Passphrase',
|
|
'credentials.field.passphraseHint':
|
|
'Leave blank if the private key is not encrypted',
|
|
'credentials.editHint':
|
|
'Leave the secret field blank to keep the existing value.',
|
|
'credentials.validation.name': 'Please enter a credential name',
|
|
'credentials.validation.privateKey': 'Please enter the private key',
|
|
'credentials.validation.password': 'Please enter the password',
|
|
'credentials.saved': 'Saved',
|
|
|
|
// Proxy
|
|
'proxy.plusTipTitle': 'Server authorization required',
|
|
'proxy.plusTipBody':
|
|
'This capability is not enabled by the connected server.',
|
|
'proxy.add': 'Add proxy',
|
|
'settings.proxy.add': 'Add',
|
|
'proxy.edit': 'Edit proxy',
|
|
'proxy.deleteConfirmTitle': 'Delete proxy?',
|
|
'proxy.deleteConfirmBody':
|
|
'Delete "{0}"? Servers referencing it will be cleared.',
|
|
'proxy.deleted': 'Deleted',
|
|
'proxy.deleteFailed': 'Delete failed: {0}',
|
|
'proxy.saveFailed': 'Save failed: {0}',
|
|
'proxy.field.type': 'Type',
|
|
'proxy.field.name': 'Name',
|
|
'proxy.field.nameHint': 'A label for easy recognition',
|
|
'proxy.field.host': 'Host',
|
|
'proxy.field.hostHint': 'IP or domain',
|
|
'proxy.field.port': 'Port',
|
|
'proxy.field.portHint': '1 - 65535',
|
|
'proxy.field.username': 'Username',
|
|
'proxy.field.password': 'Password',
|
|
'proxy.empty': 'No proxies yet. Tap + above to add one.',
|
|
'proxy.validation.name': 'Please enter a proxy name',
|
|
'proxy.validation.host': 'Please enter a host',
|
|
'proxy.validation.port': 'Please enter a valid port',
|
|
'proxy.saved': 'Saved',
|
|
|
|
// Terminal shell
|
|
'terminal.title': 'Terminal',
|
|
'terminal.noActive': 'No active terminal',
|
|
'terminal.reconnect': 'Reconnect',
|
|
'terminal.closeTerminal': 'Close terminal',
|
|
'terminal.closeAllTerminals': 'Close all terminals',
|
|
'terminal.closeAllTitle': 'Close all terminals?',
|
|
'terminal.closeAllBodyMany': 'This will disconnect {0} active terminals.',
|
|
'terminal.newTerminal': 'New terminal',
|
|
'terminal.noServers': 'No servers available',
|
|
'terminal.loadServersFailed': 'Failed to load servers: {0}',
|
|
'terminal.openFailed': 'Failed to open terminal: {0}',
|
|
'terminal.menu.shortcuts': 'Keys',
|
|
'terminal.menu.scripts': 'Scripts',
|
|
'terminal.menu.current': 'Current',
|
|
'terminal.menu.newConnection': 'New',
|
|
'terminal.menu.sftp': 'SFTP',
|
|
'terminal.menu.commandInput': 'Command Input',
|
|
'terminal.menu.connections': 'Connections',
|
|
'terminal.connections.connected': 'Connected',
|
|
'terminal.connections.disconnected': 'Disconnected',
|
|
'terminal.commandInput.hint': 'Enter command...',
|
|
'terminal.commandInput.send': 'Send',
|
|
'terminal.settings': 'Terminal Settings',
|
|
'terminal.settings.fontSize': 'Font Size',
|
|
'terminal.settings.fontFamily': 'Font',
|
|
'terminal.settings.themePreset': 'Theme',
|
|
'terminal.settings.preset.warm': 'Warm',
|
|
'terminal.settings.preset.dark': 'Dark',
|
|
'terminal.settings.preset.light': 'Light',
|
|
'terminal.settings.preset.dracula': 'Dracula',
|
|
'terminal.settings.preset.nord': 'Nord',
|
|
'terminal.settings.preset.solarizedDark': 'Solarized',
|
|
'terminal.settings.preset.monokai': 'Monokai',
|
|
'terminal.settings.preset.oneDark': 'One Dark',
|
|
'terminal.script.send': 'Send',
|
|
'terminal.script.saveAndSend': 'Save & send',
|
|
'terminal.script.noActive': 'No active terminal.',
|
|
'terminal.linkDialogTitle': 'Open link?',
|
|
'terminal.linkDialogBody': 'Open this link in the default browser?\n{0}',
|
|
'terminal.openBrowser': 'Open browser',
|
|
'terminal.openLinkFailed': 'Failed to open link.',
|
|
'terminal.selection.copy': 'Copy',
|
|
'terminal.selection.paste': 'Paste',
|
|
'terminal.selection.clear': 'Clear',
|
|
'terminal.selection.find': 'Find',
|
|
'terminal.selectionCopied': 'Selection copied.',
|
|
'terminal.pasted': 'Pasted from clipboard.',
|
|
'terminal.cleared': 'Terminal cleared.',
|
|
'terminal.findNoResults': 'No results for: {0}',
|
|
'terminal.findResults': 'Find "{0}" ({1}/{2})',
|
|
|
|
'terminal.hint.ctrlC': 'Interrupt',
|
|
'terminal.hint.ctrlZ': 'Suspend',
|
|
'terminal.hint.ctrlD': 'Exit / EOF',
|
|
'terminal.hint.ctrlA': 'Line start',
|
|
'terminal.hint.ctrlE': 'Line end',
|
|
'terminal.hint.ctrlW': 'Del word / Save(nano)',
|
|
'terminal.hint.ctrlX': 'Exit(nano)',
|
|
'terminal.hint.ctrlL': 'Clear screen',
|
|
'terminal.hint.ctrlU': 'Del to line start',
|
|
'terminal.hint.ctrlK': 'Del to line end',
|
|
'terminal.hint.ctrlY': 'Paste deleted text',
|
|
'terminal.hint.ctrlR': 'Search / Read(nano)',
|
|
'terminal.hint.vimW': 'Save(vim)',
|
|
'terminal.hint.vimQ': 'Quit(vim)',
|
|
'terminal.hint.vimWQ': 'Save & quit(vim)',
|
|
'terminal.hint.vimQF': 'Force quit(vim)',
|
|
'terminal.hint.vimDD': 'Delete line(vim)',
|
|
'terminal.hint.vimYY': 'Copy line(vim)',
|
|
|
|
'terminal.status.connecting': 'Connecting',
|
|
'terminal.status.connected': 'Connected',
|
|
'terminal.status.disconnected': 'Disconnected',
|
|
'terminal.status.error': 'Error',
|
|
|
|
// Editor (native SFTP text file)
|
|
'editor.tooLarge': 'File exceeds 2 MB. Download to edit.',
|
|
'editor.binary': 'Binary file is not editable.',
|
|
'editor.readFailed': 'Read failed: {0}',
|
|
'editor.saveFailed': 'Save failed: {0}',
|
|
'editor.saved': 'Saved',
|
|
'editor.unsaved': 'Unsaved',
|
|
'editor.save': 'Save',
|
|
'editor.undo': 'Undo',
|
|
'editor.redo': 'Redo',
|
|
'editor.discardTitle': 'Discard changes?',
|
|
'editor.discardBody': 'Unsaved edits will be lost. Leave?',
|
|
'editor.discardKeepEditing': 'Keep editing',
|
|
'editor.discardLeave': 'Discard',
|
|
'editor.discardSaveAndLeave': 'Save & leave',
|
|
'editor.malformedUtf8':
|
|
'File contains non-UTF-8 bytes; saving may lose some characters.',
|
|
'editor.statusEncoding': 'UTF-8 · LF · {0}',
|
|
'editor.statusPosition': 'Ln {0}, Col {1}',
|
|
'editor.statusLineCount': '{0} / {1}',
|
|
'editor.statusSpaces': 'Spaces: {0}',
|
|
'editor.settings': 'Editor settings',
|
|
'editor.fontSize': 'Font size',
|
|
'editor.wordWrap': 'Word wrap',
|
|
'editor.theme': 'Theme',
|
|
'editor.themeDark': 'Dark',
|
|
'editor.themeLight': 'Light',
|
|
'editor.settingsDone': 'Done',
|
|
|
|
// Media preview (image)
|
|
'media.downloading': 'Downloading...',
|
|
'media.imageLoadFailed': 'Failed to load image: {0}',
|
|
'media.info.title': 'Media info',
|
|
'media.info.format': 'Format',
|
|
'media.info.size': 'Size',
|
|
'media.info.modifiedTime': 'Modified',
|
|
'media.info.path': 'Path',
|
|
};
|