{ "@@locale": "en", "servers": "Servers", "terminal": "Terminal", "files": "Files", "monitor": "Monitor", "diagnostics": "Diagnostics", "settings": "Settings", "addServer": "Add server", "editServer": "Edit server", "name": "Name", "host": "Hostname / IP address", "username": "SSH username", "port": "SSH port", "password": "Password", "privateKey": "Private key", "passphrase": "Key passphrase (never saved)", "savePassword": "Save SSH password in Vault", "chooseKey": "Choose private key", "keyStored": "Private key stored securely", "connect": "Connect", "disconnect": "Disconnect", "connecting": "Connecting…", "connected": "Connected", "disconnected": "Disconnected", "reconnect": "Reconnect", "search": "Search servers", "emptyServers": "Add your first server. Profiles stay on this device.", "selectServer": "Connect to a server from Servers.", "save": "Save", "cancel": "Cancel", "delete": "Delete", "duplicate": "Duplicate", "edit": "Edit", "confirmDelete": "Delete this item? This action cannot be undone.", "confirmRename": "Rename the selected remote item?", "hostTrustTitle": "Verify server identity", "hostTrustBody": "Compare this SHA-256 fingerprint through a separate trusted channel before trusting this server.", "trust": "Trust this key", "hostChanged": "SECURITY: The saved SSH host key has changed. Connection blocked. Verify the server independently.", "hostRejected": "The SSH host key was not trusted.", "language": "Language", "system": "System", "light": "Light", "dark": "Dark", "theme": "Appearance", "welcome": "Welcome to SM Mobile", "localOnly": "Direct SSH / SFTP. No account, cloud or telemetry.", "guidance": "Operational safety and backups", "continueAction": "Continue", "license": "Software license", "consent": "I accept CH-J Proprietary Software License 1.14. I acknowledge the risk of data loss or corruption and the need for appropriate backups before risky operations. The app does not guarantee that backups exist or are recoverable.", "accept": "Accept and continue", "decline": "Decline", "licenseDeclined": "The license was declined. Server functions remain locked.", "vault": "Local Vault", "createVault": "Create secure Vault", "masterPassword": "Master password", "confirmPassword": "Confirm password", "vaultAdvice": "Use 4–64 characters: a PIN, a word or a long passphrase. Longer passwords are much harder to guess. This password cannot be recovered; store it safely.", "unlock": "Unlock", "lock": "Lock Vault", "biometric": "Biometric unlock (Face ID, Touch ID, fingerprint)", "unlockBiometric": "Unlock with device security", "biometricReason": "Unlock the SM Mobile Vault", "lockBackground": "Lock when leaving the app", "idleTimeout": "Auto-lock after inactivity (minutes)", "weakPassword": "Use a master password with 4–64 characters.", "passwordMismatch": "Passwords do not match.", "locked": "Vault locked. Unlock it to continue.", "unlockFailed": "Unable to unlock. Check your password or use the master-password fallback.", "storageError": "Secure storage is unavailable or damaged. Your stored data was not reset.", "invalidProfile": "Check the name, hostname/IP, username and port (1–65535).", "invalidImport": "Invalid profile file. Use CH-J JSON format version 1, up to 5 MiB and 10,000 profiles.", "networkError": "Network connection failed. Check the address, VPN and local-network permission.", "authFailed": "SSH authentication failed. Check the username, password or private key.", "invalidKey": "Invalid private key or passphrase.", "timeout": "The operation timed out.", "operationFailed": "Operation failed. Check the connection and permissions.", "permissionDenied": "The server denied file access.", "fileError": "SFTP operation failed. The item may be missing, the directory nonempty, or access denied.", "fileExists": "The destination already exists. Choose another name.", "unsafePath": "Unsafe path, unsupported file type or symbolic link. Symbolic links are not followed.", "cancelled": "Transfer cancelled.", "upload": "Upload file", "download": "Download and save / share", "rename": "Rename", "newFolder": "New folder", "refresh": "Refresh", "parent": "Parent directory", "size": "Size", "modified": "Modified", "symlink": "Symbolic link (blocked)", "emptyDirectory": "This directory is empty.", "importProfiles": "Import profiles", "exportProfiles": "Export profiles", "profileTransfer": "Import and export profiles", "importPreview": "Review imported profiles", "importAdvice": "Only connection details are imported. Assign authentication before connecting. Duplicate matching uses host, port and username.", "skipDuplicates": "Skip duplicates", "updateDuplicates": "Update duplicates (clear saved credentials)", "createDuplicates": "Create separate copies", "importAction": "Import reviewed profiles", "done": "Done", "copy": "Copy selection", "paste": "Paste", "keyboard": "Show keyboard", "hideKeyboard": "Hide keyboard", "monitorInterval": "Refresh interval (seconds)", "cpu": "CPU", "ram": "RAM", "disk": "Root filesystem", "uptime": "Uptime", "load": "Load average (1 / 5 / 15 min)", "release": "OS version", "rtt": "SSH command response time", "handshake": "SSH connection and authentication", "unsupportedSystem": "Monitoring requires a Linux server with /proc and standard POSIX utilities.", "runDiagnostics": "Run test", "icmpNote": "Ping and traceroute send real ICMP / ICMPv6 echo packets directly from this device, without a server or cloud. TCP connect measures connection setup to the selected port and is not a ping.", "dnsResults": "DNS addresses (not saved to profiles)", "tcpConnect": "TCP connection time", "backgroundNote": "Monitoring stops outside this screen and while the app is inactive. The OS may suspend SSH sessions in the background.", "componentLicenses": "Third-party licenses", "clearPassword": "Remove saved password", "biometricUnavailable": "Biometrics are not available. Enroll Face ID, Touch ID or a strong fingerprint/face biometric first.", "licenseError": "License or guidance could not be loaded. Application access is blocked.", "loadNote": "Load average is the average number of waiting processes, not a CPU percentage.", "addressFamily": "IP version", "automatic": "Automatic", "testType": "Test", "target": "Target", "duration": "Duration", "resultOk": "Succeeded", "resultFailed": "Failed", "dnsLookup": "DNS lookup", "tcpConnectTest": "TCP connect", "notTested": "Not run", "commandRtt": "SSH command response", "sshLatency": "SSH response times", "uptimeDays": "{count, plural, =1{1 day} other{{count} days}}", "@uptimeDays": { "placeholders": { "count": { "type": "int" } } }, "uptimeHours": "{count, plural, =1{1 hour} other{{count} hours}}", "@uptimeHours": { "placeholders": { "count": { "type": "int" } } }, "uptimeMinutes": "{count, plural, =1{1 minute} other{{count} minutes}}", "@uptimeMinutes": { "placeholders": { "count": { "type": "int" } } }, "usedOf": "{used} of {total}", "@usedOf": { "placeholders": { "used": { "type": "String" }, "total": { "type": "String" } } }, "autoRefresh": "Automatically every {seconds} s", "@autoRefresh": { "placeholders": { "seconds": { "type": "String" } } }, "updatedAt": "Updated {time}", "@updatedAt": { "placeholders": { "time": { "type": "String" } } }, "ping": "Ping (ICMP)", "traceroute": "Traceroute", "packetCount": "Packet count", "intervalSeconds": "Interval (s)", "timeoutSeconds": "Timeout (s)", "payloadBytes": "Payload size (B)", "maxHops": "Max hops", "probesPerHop": "Probes per hop", "testOptions": "Test options", "stop": "Stop", "packetsSent": "Sent", "packetsReceived": "Received", "packetLoss": "Loss", "rttStats": "min / avg / max", "hop": "Hop", "traceReached": "Destination reached", "traceUnreachable": "Destination unreachable (ICMP error, see the code)", "traceLimit": "Hop limit reached without a reply from the destination", "stoppedByUser": "Stopped by user", "timeoutStar": "* = no reply within the timeout. It does not mean the node does not exist; many routers do not answer ICMP.", "icmpNotPermitted": "The system does not allow an unprivileged ICMP socket, so ping and traceroute cannot run.", "icmpUnsupported": "ICMP is not available on this device.", "invalidSetting": "Invalid value in the test options.", "replyFrom": "Reply", "probeTimeout": "No reply", "probeUnreachable": "Unreachable", "probeSendFailed": "Send failed", "protocolUsed": "Protocol", "resolvedAddress": "Address used", "passwordLength": "The master password must have 4–64 characters.", "biometricNote": "Only enrolled biometrics release the Vault key. The device passcode cannot open the Vault; without biometrics use the master password.", "usePassword": "Use master password", "showPassword": "Show password", "hidePassword": "Hide password", "strength0": "Very weak", "strength1": "Weak", "strength2": "Fair", "strength3": "Good", "strength4": "Strong", "passwordStrength": "Password strength", "shortPasswordWarning": "Short passwords and PINs are allowed but easier to guess if someone obtains a copy of this device's data. Encryption is not weakened.", "changePassword": "Change Vault password", "currentPassword": "Current master password", "newPassword": "New master password", "confirmNewPassword": "Confirm new password", "passwordChanged": "The Vault password was changed. All servers, credentials and keys are still available.", "passwordChangedBiometricOff": "The password was changed, but biometric unlock could not be renewed and was turned off. Turn it on again in Settings.", "wrongCurrentPassword": "The current password is not correct.", "samePassword": "The new password is the same as the current one.", "biometricCancelled": "Biometric check cancelled. Enter the master password or try again.", "biometricFailed": "Biometric check failed. Enter the master password.", "biometricLockout": "Biometrics are temporarily locked by the system after too many attempts. Enter the master password.", "biometricInvalid": "The biometric key is no longer valid (biometrics on this device changed). Unlock with the master password and turn biometric unlock on again.", "biometricUpgrade": "Biometric unlock was improved and no longer accepts the device passcode. Unlock once with the master password to renew it.", "biometricReenable": "Biometric unlock is off. Turn it on again in Settings.", "tryBiometricAgain": "Try biometrics again", "securitySection": "Security", "kdfInfo": "Key derivation", "tcpPing": "TCP ping", "icmpPing": "ICMP ping", "tcpPort": "TCP port", "tcpNote": "TCP ping measures how long the TCP connection setup (SYN → SYN-ACK) to a port takes. It is not an ICMP echo: a closed port answers with a reset (refused), a filtered one usually not at all (timeout).", "icmpPingNote": "Real ICMP / ICMPv6 echo request and reply sent directly from this device, without a server or cloud. Many hosts and firewalls do not answer ICMP.", "traceNote": "Traceroute sends probes with increasing TTL / hop limit directly from this device. Routers that do not answer are shown as * and the trace continues.", "attemptCount": "Number of attempts", "customCount": "Custom number", "customValue": "Custom…", "continuous": "Continuous until stopped", "ttlHopLimit": "TTL / hop limit", "systemDefault": "System default", "dontFragment": "Don't fragment (DF)", "traceMethod": "Probe method", "tcpTraceUnsupported": "Not available on Android: without root privileges the system does not tell apps which router answered a TCP probe.", "firstTtl": "First TTL / hop limit", "probeInterval": "Pause between probes (s)", "tracePort": "Destination port", "repetitions": "Repetitions", "reverseDns": "Reverse DNS (host names)", "resolveAddresses": "Find addresses and choose one", "noAddressFamily": "No address of this IP version (no A / AAAA record).", "literalOtherFamily": "The target is an address of the other IP version.", "dnsFailed": "DNS lookup failed. Check the name and the network.", "outcomeOk": "OK", "outcomeTimeout": "Timeout", "outcomeRefused": "Refused (TCP reset)", "outcomeUnreachable": "Unreachable", "outcomeTtlExceeded": "TTL exceeded", "outcomeError": "Network error", "attempts": "Attempts", "successful": "Successful", "failedCount": "Failed", "successRate": "Success", "rttMin": "Min", "rttMax": "Max", "rttAvg": "Average", "rttMedian": "Median", "rttStddev": "Std. deviation", "jitter": "Jitter", "elapsedTime": "Duration", "statsNote": "RTT statistics use successful attempts only; failures are counted separately. Std. deviation: population. Jitter: mean absolute difference between consecutive successful RTTs. Median and P95: nearest rank; P95 from 20 successful samples. Very long runs keep the newest 5000 attempts in the list and compute median/P95 from the newest 10000.", "chartTitle": "RTT over time", "chartFailures": "Failed attempt", "olderOmitted": "Older attempts not shown (statistics still include them)", "copyResults": "Copy", "exportResults": "Export", "clearResults": "Clear", "copied": "Copied to the clipboard.", "saveToDevice": "Save to device", "shareFile": "Share", "savedToDevice": "Saved.", "combinedSummary": "IPv4 and IPv6 overview", "statusColumn": "Status", "statusRunning": "Running…", "statusFinished": "Finished", "compareRuns": "Compare with the previous measurement", "previousRun": "Previous", "pathChanged": "Route changed", "tcpOpenNote": "Port open: the destination answered with SYN-ACK.", "tcpRefusedNote": "Port closed: the destination answered with a reset; it was reached.", "answeredOtherAddress": "The final answer came from another address than the target (anycast or a filtering device).", "icmpCodeLegend": "!N network, !H host, !P protocol, !F fragmentation needed, !X administratively prohibited (ICMP destination unreachable).", "messageTooLong": "Packet too large to send without fragmentation.", "ttlUnsupported": "The system did not accept this TTL / hop limit.", "dontFragmentUnsupported": "This platform does not allow setting Don't Fragment for ICMP.", "unsupportedPlatform": "Not available on this platform.", "archiveDamaged": "The archive is damaged or not in a supported format.", "archiveListOnly": "Contents are only listed; nothing is extracted or run.", "archiveTooLarge": "The archive is too large to list on this device.", "archiveUnsupported": "Listing this archive format is not supported", "atomicNotPossible": "A temporary file cannot be created in this folder, so the file cannot be replaced safely in one step.", "ownerWouldChange": "Saving through a temporary file would change the owner of this file on the server.", "inPlaceAdvice": "You can overwrite the file directly instead. Owner and permissions stay, but if the connection drops during the write, the file may be left incomplete.", "binaryFile": "This looks like a binary file.", "chooseEncodingAdvice": "The encoding could not be detected. Choose the one the file was written in; nothing is converted until you save.", "unknownEncoding": "Unknown text encoding", "wrongEncoding": "The file is not valid in the chosen encoding.", "reopenEncoding": "Reopen with encoding…", "saveEncoding": "Save with encoding", "openAsTextWith": "Open as text with encoding…", "unencodableTitle": "Characters cannot be saved in this encoding", "unencodableBody": "Some characters do not exist in the file's encoding. Continue to save as UTF-8 instead; Cancel keeps the text unsaved.", "mixedLineBreaks": "This file mixes line endings (LF/CRLF/CR). On save they all become the shown type; change it in the status bar.", "notExactRoundTrip": "This file would not be saved byte-for-byte as it was read. Check the encoding before saving.", "close": "Close", "line": "Line", "column": "Column", "lineShort": "Ln", "columnShort": "Col", "conflictAdvice": "The file was changed elsewhere after you opened it. Overwrite replaces that change with your text.", "remoteChanged": "The file on the server has changed", "remoteDeleted": "The file on the server no longer exists", "documentChanged": "The file on the device has changed", "connectToOpen": "Connect to that server first to open this file.", "connectToSave": "Not connected to the file's server. Your text stays here.", "offlineAdvice": "Nothing was lost. Reconnect and save again, or keep a copy on this device now.", "saveCopyToDevice": "Save a copy on the device", "cryptoNote": "Basic information only. Private key material is never displayed or exported here.", "cryptoUnreadable": "No certificate or key could be read.", "privateKeyHidden": "Contains a private key. Keep this file secret.", "remoteFiles": "Server (SFTP)", "deviceFiles": "Device", "recentFiles": "Recent", "favoriteFiles": "Favorites", "deviceFilesNote": "Files are opened through the system file picker (Files / storage providers). SM Mobile only accesses what you choose.", "openFiles": "Open files", "openFolder": "Open folder", "openedFiles": "Opened files", "newFile": "New file", "open": "Open", "openAsText": "Open as text", "openInSystemViewer": "Open in system viewer", "systemViewerTitle": "Shown by the system viewer", "systemViewerIos": "Quick Look shows this file inside SM Mobile from a private temporary copy. It cannot be edited here.", "systemViewerAndroid": "An app on this device that you choose opens a private temporary copy. It cannot be edited here.", "noViewer": "No app on this device can show this file.", "draftsRecovered": "Unsaved changes were kept when the Vault locked", "discardDrafts": "Discard all recovered drafts?", "discard": "Discard", "discardChanges": "Discard unsaved changes?", "unsavedChanges": "Unsaved changes", "editorSettings": "Editor settings", "fontSize": "Font size", "wordWrap": "Wrap lines", "lineNumbers": "Line numbers and folding", "indentWithTabs": "Indent with tabs", "indentWidth": "Indent width", "syntaxHighlight": "Syntax highlighting", "largeFileHighlight": "Off by default for files over 1 MB to keep editing smooth.", "syntax": "Syntax", "noGrammar": "No highlighting grammar available (plain text)", "tabs": "Tabs", "spaces": "Spaces", "readOnly": "Read-only", "readOnlyDevice": "This file can only be read here (the storage provider does not allow writing). Use Save as to keep your changes.", "readOnlyRemote": "This file is read-only.", "modifiedState": "Modified", "findHint": "Find", "replaceHint": "Replace with", "invalidRegex": "Invalid regular expression", "matchCase": "Match case", "regularExpression": "Regular expression", "previousMatch": "Previous match", "nextMatch": "Next match", "replace": "Replace", "replaceAll": "Replace all", "goToLine": "Go to line", "lineBreaks": "Line endings", "undo": "Undo", "redo": "Redo", "selectAll": "Select all", "reload": "Reload from source", "reloadDiscard": "Reload (discard mine)", "overwrite": "Overwrite", "overwriteExisting": "A file with this name exists. Overwrite it?", "saveAs": "Save as…", "saveAsRequired": "Choose where to save this new file.", "saveToServer": "Save to the server", "remotePath": "Path on the server", "saved": "Saved.", "validate": "Check syntax", "validOk": "No syntax errors found.", "validationProblem": "Syntax error", "formatDocument": "Format document", "formatAdvice": "Rewrites indentation and layout (JSON numbers may be written differently). The change can be undone.", "formatFailed": "The document cannot be formatted until its syntax errors are fixed.", "fileTooLarge": "The file is too large to open here.", "filesCount": "files", "uncompressed": "unpacked", "imageUnsupported": "This image format cannot be shown on this device.", "svgSafe": "SVG is drawn as a static picture: scripts, links and external resources are not used.", "notebookUnreadable": "The notebook cannot be read; open it as JSON.", "uploadToServer": "Copy to the server", "uploadedTo": "Copied to", "addFavorite": "Add to favorites", "removeFavorite": "Remove from favorites", "removeFromList": "Remove from list", "noFavorites": "No favorite files yet.", "noRecentFiles": "No recently opened files.", "documentStale": "Access to this file has expired. Open it again from the file picker.", "fileNotFound": "The file was not found.", "noSpace": "Not enough free storage space.", "readOnlyError": "Writing is not allowed here." }