v1.9.0 (#437)
* fix: Resolve database encryption atomicity issues and enhance debugging (#430) * fix: Resolve database encryption atomicity issues and enhance debugging This commit addresses critical data corruption issues caused by non-atomic file writes during database encryption, and adds comprehensive diagnostic logging to help debug encryption-related failures. **Problem:** Users reported "Unsupported state or unable to authenticate data" errors when starting the application after system crashes or Docker container restarts. The root cause was non-atomic writes of encrypted database files: 1. Encrypted data file written (step 1) 2. Metadata file written (step 2) → If process crashes between steps 1 and 2, files become inconsistent → New IV/tag in data file, old IV/tag in metadata → GCM authentication fails on next startup → User data permanently inaccessible **Solution - Atomic Writes:** 1. Write-to-temp + atomic-rename pattern: - Write to temporary files (*.tmp-timestamp-pid) - Perform atomic rename operations - Clean up temp files on failure 2. Data integrity validation: - Add dataSize field to metadata - Verify file size before decryption - Early detection of corrupted writes 3. Enhanced error diagnostics: - Key fingerprints (SHA256 prefix) for verification - File modification timestamps - Detailed GCM auth failure messages - Automatic diagnostic info generation **Changes:** database-file-encryption.ts: - Implement atomic write pattern in encryptDatabaseFromBuffer - Implement atomic write pattern in encryptDatabaseFile - Add dataSize field to EncryptedFileMetadata interface - Validate file size before decryption in decryptDatabaseToBuffer - Enhanced error messages for GCM auth failures - Add getDiagnosticInfo() function for comprehensive debugging - Add debug logging for all encryption/decryption operations system-crypto.ts: - Add detailed logging for DATABASE_KEY initialization - Log key source (env var vs .env file) - Add key fingerprints to all log messages - Better error messages when key loading fails db/index.ts: - Automatically generate diagnostic info on decryption failure - Log detailed debugging information to help users troubleshoot **Debugging Info Added:** - Key initialization: source, fingerprint, length, path - Encryption: original size, encrypted size, IV/tag prefixes, temp paths - Decryption: file timestamps, metadata content, key fingerprint matching - Auth failures: .env file status, key availability, file consistency - File diagnostics: existence, readability, size validation, mtime comparison **Backward Compatibility:** - dataSize field is optional (metadata.dataSize?: number) - Old encrypted files without dataSize continue to work - No migration required **Testing:** - Compiled successfully - No breaking changes to existing APIs - Graceful handling of legacy v1 encrypted files Fixes data loss issues reported by users experiencing container restarts and system crashes during database saves. * fix: Cleanup PR * Update src/backend/utils/database-file-encryption.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/backend/utils/database-file-encryption.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/backend/utils/database-file-encryption.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/backend/utils/database-file-encryption.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/backend/utils/database-file-encryption.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: Merge metadata and DB into 1 file * fix: Add initial command palette * Feature/german language support (#431) * Update translation.json Fixed some translation issues for German, made it more user friendly and common. * Update translation.json added updated block for serverStats * Update translation.json Added translations * Update translation.json Removed duplicate of "free":"Free" * feat: Finalize command palette * fix: Several bug fixes for terminals, server stats, and general feature improvements * feat: Enhanced security, UI improvements, and animations (#432) * fix: Remove empty catch blocks and add error logging * refactor: Modularize server stats widget collectors * feat: Add i18n support for terminal customization and login stats - Add comprehensive terminal customization translations (60+ keys) for appearance, behavior, and advanced settings across all 4 languages - Add SSH login statistics translations - Update HostManagerEditor to use i18n for all terminal customization UI elements - Update LoginStatsWidget to use i18n for all UI text - Add missing logger imports in backend files for improved debugging * feat: Add keyboard shortcut enhancements with Kbd component - Add shadcn kbd component for displaying keyboard shortcuts - Enhance file manager context menu to display shortcuts with Kbd component - Add 5 new keyboard shortcuts to file manager: - Ctrl+D: Download selected files - Ctrl+N: Create new file - Ctrl+Shift+N: Create new folder - Ctrl+U: Upload files - Enter: Open/run selected file - Add keyboard shortcut hints to command palette footer - Create helper function to parse and render keyboard shortcuts * feat: Add i18n support for command palette - Add commandPalette translation section with 22 keys to all 4 languages - Update CommandPalette component to use i18n for all UI text - Translate search placeholder, group headings, menu items, and shortcut hints - Support multilingual command palette interface * feat: Add smooth transitions and animations to UI - Add fade-in/fade-out transition to command palette (200ms) - Add scale animation to command palette on open/close - Add smooth popup animation to context menu (150ms) - Add visual feedback for file selection with ring effect - Add hover scale effect to file grid items - Add transition-all to list view items for consistent behavior - Zero JavaScript overhead, pure CSS transitions - All animations under 200ms for instant feel * feat: Add button active state and dashboard card animations - Add active:scale-95 to all buttons for tactile click feedback - Add hover border effect to dashboard cards (150ms transition) - Add pulse animation to dashboard loading states - Pure CSS transitions with zero JavaScript overhead - Improves enterprise-level feel of UI * feat: Add smooth macOS-style page transitions - Add fullscreen crossfade transition for login/logout (300ms fade-out + 400ms fade-in) - Add slide-in-from-right animation for all page switches (Dashboard, Terminal, SSH Manager, Admin, Profile) - Fix TypeScript compilation by adding esModuleInterop to tsconfig.node.json - Pass handleLogout from DesktopApp to LeftSidebar for consistent transition behavior All page transitions now use Tailwind animate-in utilities with 300ms duration for smooth, native-feeling UX * fix: Add key prop to force animation re-trigger on tab switch Each page container now has key={currentTab} to ensure React unmounts and remounts the element on every tab switch, properly triggering the slide-in animation * revert: Remove page transition animations Page switching animations were not noticeable enough and felt unnecessary. Keep only the login/logout fullscreen crossfade transitions which provide clear visual feedback for authentication state changes * feat: Add ripple effect to login/logout transitions Add three-layer expanding ripple animation during fadeOut phase: - Ripples expand from screen center using primary theme color - Each layer has staggered delay (0ms, 150ms, 300ms) for wave effect - Ripples fade out as they expand to create elegant visual feedback - Uses pure CSS keyframe animation, no external libraries Total animation: 800ms ripple + 300ms screen fade * feat: Add smooth TERMIX logo animation to transitions Changes: - Extend transition duration from 300ms/400ms to 800ms/600ms for more elegant feel - Reduce ripple intensity from /20,/15,/10 to /8,/5 for subtlety - Slow down ripple animation from 0.8s to 2s with cubic-bezier easing - Add centered TERMIX logo with monospace font and subtitle - Logo fades in from 80% scale, holds, then fades out at 110% scale - Total effect: 1.2s logo animation synced with 2s ripple waves Creates a premium, branded transition experience * feat: Enhance transition animation with premium details Timing adjustments: - Extend fadeOut from 800ms to 1200ms - Extend fadeIn from 600ms to 800ms - Slow background fade to 700ms for elegance Visual enhancements: - Add 4-layer ripple waves (10%, 7%, 5%, 3% opacity) with staggered delays - Ripple animation extended to 2.5s with refined opacity curve - Logo blur effect: starts at 8px, sharpens to 0px, exits at 4px - Logo glow effect: triple-layer text-shadow using primary theme color - Increase logo size from text-6xl to text-7xl - Subtitle delayed fade-in from bottom with smooth slide animation Creates a cinematic, polished brand experience * feat: Redesign login page with split-screen cinematic layout Major redesign of authentication page: Left Side (40% width): - Full-height gradient background using primary theme color - Large TERMIX logo with glow effect - Subtitle and tagline - Infinite animated ripple waves (3 layers) - Hidden on mobile, shows brand identity Right Side (60% width): - Centered glassmorphism card with backdrop blur - Refined tab switcher with pill-style active state - Enlarged title with gradient text effect - Added welcome subtitles for better UX - Card slides in from bottom on load - All existing functionality preserved Visual enhancements: - Tab navigation: segmented control style in muted container - Active tab: white background with subtle shadow - Smooth 200ms transitions on all interactions - Card: rounded-2xl, shadow-xl, semi-transparent border Creates premium, modern login experience matching transition animations * feat: Update login page theme colors and add i18n support - Changed login page gradient from blue to match dark theme colors - Updated ripple effects to use theme primary color - Added i18n translation keys for login page (auth.tagline, auth.description, auth.welcomeBack, auth.createAccount, auth.continueExternal) - Updated all language files (en, zh, de, ru, pt-BR) with new translations - Fixed TypeScript compilation issues by clearing build cache * refactor: Use shadcn Tabs component and fix modal styling - Replace custom tab navigation with shadcn Tabs component - Restore border-2 border-dark-border for modal consistency - Remove circular icon from login success message - Simplify authentication success display * refactor: Remove ripple effects and gradient from login page - Remove animated ripple background effects - Remove gradient background, use solid color (bg-dark-bg-darker) - Remove text-shadow glow effect from logo - Simplify brand showcase to clean, minimal design * feat: Add decorative slash and remove subtitle from login page - Add decorative slash divider with gradient lines below TERMIX logo - Remove subtitle text (welcomeBack and createAccount) - Simplify page title to show only the main heading * feat: Add diagonal line pattern background to login page - Replace decorative slash with subtle diagonal line pattern background - Use repeating-linear-gradient at 45deg angle - Set very low opacity (0.03) for subtle effect - Pattern uses theme primary color * fix: Display diagonal line pattern on login background - Combine background color and pattern in single style attribute - Use white semi-transparent lines (rgba 0.03 opacity) - 45deg angle, 35px spacing, 2px width - Remove separate overlay div to ensure pattern visibility * security: Fix user enumeration vulnerability in login - Unify error messages for invalid username and incorrect password - Both return 401 status with 'Invalid username or password' - Prevent attackers from enumerating valid usernames - Maintain detailed logging for debugging purposes - Changed from 404 'User not found' to generic auth failure message * security: Add login rate limiting to prevent brute force attacks - Implement LoginRateLimiter with IP and username-based tracking - Block after 5 failed attempts within 15 minutes - Lock account/IP for 15 minutes after threshold - Automatic cleanup of expired entries every 5 minutes - Track remaining attempts in logs for monitoring - Return 429 status with remaining time on rate limit - Reset counters on successful login - Dual protection: both IP-based and username-based limits * French translation (#434) * Adding French Language * Enhancements * feat: Replace the old ssh tools system with a new dedicated sidebar * fix: Merge zac/luke * fix: Finalize new sidebar, improve and loading animations * Added ability to close non-primary tabs involved in a split view (#435) * fix: General bug fixes/small feature improvements * feat: General UI improvements and translation updates * fix: Command history and file manager styling issues * feat: General bug fixes, added server stat commands, improved split screen, link accounts, etc * fix: add Accept header for OIDC callback request (#436) * Delete DOWNLOADS.md * fix: add Accept header for OIDC callback request --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix: More bug fixes and QOL fixes * fix: Server stats not respecting interval and fixed SSH toool type issues * fix: Remove github links * fix: Delete account spacing * fix: Increment version * fix: Unable to delete hosts and add nginx for terminal * fix: Unable to delete hosts * fix: Unable to delete hosts * fix: Unable to delete hosts * fix: OIDC/local account linking breaking both logins * chore: File cleanup * feat: Max terminal tab size and save current file manager sorting type * fix: Terminal display issue, migrate host editor to use combobox * feat: Add snippet folder/customization system * fix: Fix OIDC linking and prep release * fix: Increment version --------- Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Max <herzmaximilian@gmail.com> Co-authored-by: SlimGary <trash.slim@gmail.com> Co-authored-by: jarrah31 <jarrah31@gmail.com> Co-authored-by: Kf637 <mail@kf637.tech>
This commit was merged in pull request #437.
This commit is contained in:
@@ -187,11 +187,25 @@
|
||||
"commandsWillBeSent": "Befehle werden an {{count}} ausgewählte Terminals gesendet.",
|
||||
"settings": "Einstellungen",
|
||||
"enableRightClickCopyPaste": "Rechtsklick-Kopieren\/Einfügen aktivieren",
|
||||
"shareIdeas": "Haben Sie Ideen, was als nächstes für SSH-Tools kommen sollte? Teilen Sie diese mit uns"
|
||||
"shareIdeas": "Haben Sie Vorschläge welche weiteren SSH-Tools ergänzt werden sollen? Dann teilen Sie diese gerne mit uns auf"
|
||||
},
|
||||
"commandHistory": {
|
||||
"title": "Verlauf",
|
||||
"searchPlaceholder": "Befehle suchen...",
|
||||
"noTerminal": "Kein aktives Terminal",
|
||||
"noTerminalHint": "Öffnen Sie ein Terminal, um dessen Befehlsverlauf anzuzeigen.",
|
||||
"empty": "Noch kein Befehlsverlauf",
|
||||
"emptyHint": "Führen Sie Befehle im aktiven Terminal aus, um einen Verlauf zu erstellen.",
|
||||
"noResults": "Keine Befehle gefunden",
|
||||
"noResultsHint": "Keine Befehle mit \"{{query}}\" gefunden",
|
||||
"deleteSuccess": "Befehl aus Verlauf gelöscht",
|
||||
"deleteFailed": "Befehl konnte nicht gelöscht werden.",
|
||||
"deleteTooltip": "Befehl löschen",
|
||||
"tabHint": "Verwenden Sie Tab im Terminal, um aus dem Befehlsverlauf zu vervollständigen"
|
||||
},
|
||||
"homepage": {
|
||||
"loggedInTitle": "Eingeloggt!",
|
||||
"loggedInMessage": "Sie sind angemeldet! Über die Seitenleiste haben Sie Zugriff auf alle verfügbaren Tools. Erstellen Sie zunächst einen SSH-Host im Tab „SSH-Manager“. Anschließend können Sie sich über die anderen Apps in der Seitenleiste mit diesem Host verbinden.",
|
||||
"loggedInMessage": "Sie sind angemeldet! Über die Seitenleiste haben Sie Zugriff auf alle verfügbaren Tools. Erstellen Sie zunächst einen SSH-Host im Tab SSH-Manager. Anschließend können Sie sich über die anderen Apps in der Seitenleiste mit diesem Host verbinden.",
|
||||
"failedToLoadAlerts": "Warnmeldungen konnten nicht geladen werden",
|
||||
"failedToDismissAlert": "Benachrichtigung konnte nicht geschlossen werden"
|
||||
},
|
||||
@@ -295,6 +309,7 @@
|
||||
"submit": "Senden",
|
||||
"change": "Ändern",
|
||||
"save": "Speichern",
|
||||
"saving": "Speichern...",
|
||||
"delete": "Löschen",
|
||||
"edit": "Bearbeiten",
|
||||
"add": "Hinzufügen",
|
||||
@@ -355,7 +370,7 @@
|
||||
"tabNavigation": "Registerkarte Navigation"
|
||||
},
|
||||
"admin": {
|
||||
"title": "Administratoreinstellungen",
|
||||
"title": "Admin-Einstellungen",
|
||||
"oidc": "OIDC",
|
||||
"users": "Benutzer",
|
||||
"userManagement": "Benutzerverwaltung",
|
||||
@@ -390,11 +405,11 @@
|
||||
"actions": "Aktionen",
|
||||
"external": "Extern",
|
||||
"local": "Lokal",
|
||||
"adminManagement": "Verwaltung von Administratoren",
|
||||
"adminManagement": "Admin Verwaltung",
|
||||
"makeUserAdmin": "Benutzer zum Administrator machen",
|
||||
"adding": "Hinzufügen...",
|
||||
"currentAdmins": "Aktuelle Administratoren",
|
||||
"adminBadge": "Administrator",
|
||||
"adminBadge": "Admin",
|
||||
"removeAdminButton": "Administrator entfernen",
|
||||
"general": "Allgemein",
|
||||
"userRegistration": "Benutzerregistrierung",
|
||||
@@ -416,6 +431,13 @@
|
||||
"userDeletedSuccessfully": "Benutzer {{username}} wurde erfolgreich gelöscht",
|
||||
"failedToDeleteUser": "Benutzer konnte nicht gelöscht werden",
|
||||
"overrideUserInfoUrl": "URL für Benutzerinformationen überschreiben (nicht erforderlich)",
|
||||
"failedToFetchSessions": "Fehler beim Abrufen der Sitzungen",
|
||||
"sessionRevokedSuccessfully": "Sitzung erfolgreich widerrufen",
|
||||
"failedToRevokeSession": "Sitzung konnte nicht widerrufen werden",
|
||||
"confirmRevokeSession": "Möchten Sie diese Sitzung wirklich beenden?",
|
||||
"confirmRevokeAllSessions": "Möchten Sie wirklich alle Sitzungen dieses Benutzers beenden?",
|
||||
"failedToRevokeSessions": "Sitzungen konnten nicht widerrufen werden",
|
||||
"sessionsRevokedSuccessfully": "Sitzungen erfolgreich beendet",
|
||||
"databaseSecurity": "Datenbanksicherheit",
|
||||
"encryptionStatus": "Verschlüsselungsstatus",
|
||||
"encryptionEnabled": "Verschlüsselung aktiviert",
|
||||
@@ -620,7 +642,7 @@
|
||||
"autoStartContainer": "Automatischer Start beim Container-Start",
|
||||
"autoStartDesc": "Diesen Tunnel beim Start des Containers automatisch starten",
|
||||
"addConnection": "Tunnelverbindung hinzufügen",
|
||||
"sshpassRequired": "Sshpass erforderlich für die Passwort-Authentifizierung",
|
||||
"sshpassRequired": "sshpass erforderlich für die Passwort-Authentifizierung",
|
||||
"sshpassRequiredDesc": "Für die Passwortauthentifizierung in Tunneln muss sshpass auf dem System installiert sein.",
|
||||
"otherInstallMethods": "Andere Installationsmethoden:",
|
||||
"debianUbuntuEquivalent": "(Debian\/Ubuntu) oder das entsprechende Pendant für Ihr Betriebssystem.",
|
||||
@@ -699,11 +721,85 @@
|
||||
"statusMonitoring": "Status",
|
||||
"metricsMonitoring": "Metriken",
|
||||
"terminalCustomizationNotice": "Hinweis: Terminal-Anpassungen funktionieren nur in der Desktop-Website-Version. Mobile und Electron-Apps verwenden die Standard-Terminaleinstellungen des Systems.",
|
||||
"terminalCustomization": "Terminal-Anpassung",
|
||||
"appearance": "Aussehen",
|
||||
"behavior": "Verhalten",
|
||||
"advanced": "Erweitert",
|
||||
"themePreview": "Themen-Vorschau",
|
||||
"theme": "Thema",
|
||||
"selectTheme": "Thema auswählen",
|
||||
"chooseColorTheme": "Wählen Sie ein Farbthema für das Terminal",
|
||||
"fontFamily": "Schriftfamilie",
|
||||
"selectFont": "Schriftart auswählen",
|
||||
"selectFontDesc": "Wählen Sie die im Terminal zu verwendende Schriftart",
|
||||
"fontSize": "Schriftgröße",
|
||||
"fontSizeValue": "Schriftgröße: {{value}}px",
|
||||
"adjustFontSize": "Terminal-Schriftgröße anpassen",
|
||||
"letterSpacing": "Zeichenabstand",
|
||||
"letterSpacingValue": "Zeichenabstand: {{value}}px",
|
||||
"adjustLetterSpacing": "Abstand zwischen Zeichen anpassen",
|
||||
"lineHeight": "Zeilenhöhe",
|
||||
"lineHeightValue": "Zeilenhöhe: {{value}}",
|
||||
"adjustLineHeight": "Abstand zwischen Zeilen anpassen",
|
||||
"cursorStyle": "Cursor-Stil",
|
||||
"selectCursorStyle": "Cursor-Stil auswählen",
|
||||
"cursorStyleBlock": "Block",
|
||||
"cursorStyleUnderline": "Unterstrich",
|
||||
"cursorStyleBar": "Balken",
|
||||
"chooseCursorAppearance": "Cursor-Erscheinungsbild wählen",
|
||||
"cursorBlink": "Cursor-Blinken",
|
||||
"enableCursorBlink": "Cursor-Blinkanimation aktivieren",
|
||||
"scrollbackBuffer": "Rückwärts-Puffer",
|
||||
"scrollbackBufferValue": "Rückwärts-Puffer: {{value}} Zeilen",
|
||||
"scrollbackBufferDesc": "Anzahl der Zeilen im Rückwärtsverlauf",
|
||||
"bellStyle": "Signalton-Stil",
|
||||
"selectBellStyle": "Signalton-Stil auswählen",
|
||||
"bellStyleNone": "Keine",
|
||||
"bellStyleSound": "Ton",
|
||||
"bellStyleVisual": "Visuell",
|
||||
"bellStyleBoth": "Beides",
|
||||
"bellStyleDesc": "Behandlung des Terminal-Signaltons (BEL-Zeichen, \\x07). Programme lösen dies aus, wenn Aufgaben abgeschlossen werden, Fehler auftreten oder für Benachrichtigungen. \"Ton\" spielt einen akustischen Signalton ab, \"Visuell\" lässt den Bildschirm kurz aufblinken, \"Beides\" macht beides, \"Keine\" deaktiviert Signalton-Benachrichtigungen.",
|
||||
"rightClickSelectsWord": "Rechtsklick wählt Wort",
|
||||
"rightClickSelectsWordDesc": "Rechtsklick wählt das Wort unter dem Cursor aus",
|
||||
"fastScrollModifier": "Schnellscroll-Modifikator",
|
||||
"selectModifier": "Modifikator auswählen",
|
||||
"modifierAlt": "Alt",
|
||||
"modifierCtrl": "Strg",
|
||||
"modifierShift": "Umschalt",
|
||||
"fastScrollModifierDesc": "Modifikatortaste für schnelles Scrollen",
|
||||
"fastScrollSensitivity": "Schnellscroll-Empfindlichkeit",
|
||||
"fastScrollSensitivityValue": "Schnellscroll-Empfindlichkeit: {{value}}",
|
||||
"fastScrollSensitivityDesc": "Scroll-Geschwindigkeitsmultiplikator bei gedrücktem Modifikator",
|
||||
"minimumContrastRatio": "Minimales Kontrastverhältnis",
|
||||
"minimumContrastRatioValue": "Minimales Kontrastverhältnis: {{value}}",
|
||||
"minimumContrastRatioDesc": "Farben automatisch für bessere Lesbarkeit anpassen",
|
||||
"sshAgentForwarding": "SSH-Agent-Weiterleitung",
|
||||
"sshAgentForwardingDesc": "SSH-Authentifizierungsagent an Remote-Host weiterleiten",
|
||||
"backspaceMode": "Rücktaste-Modus",
|
||||
"selectBackspaceMode": "Rücktaste-Modus auswählen",
|
||||
"backspaceModeNormal": "Normal (DEL)",
|
||||
"backspaceModeControlH": "Control-H (^H)",
|
||||
"backspaceModeDesc": "Rücktasten-Verhalten für Kompatibilität",
|
||||
"startupSnippet": "Start-Snippet",
|
||||
"selectSnippet": "Snippet auswählen",
|
||||
"searchSnippets": "Snippets durchsuchen...",
|
||||
"snippetNone": "Keine",
|
||||
"noneAuthTitle": "Keyboard-Interactive-Authentifizierung",
|
||||
"noneAuthDescription": "Diese Authentifizierungsmethode verwendet beim Herstellen der Verbindung zum SSH-Server die Keyboard-Interactive-Authentifizierung.",
|
||||
"noneAuthDetails": "Keyboard-Interactive-Authentifizierung ermöglicht dem Server, Sie während der Verbindung zur Eingabe von Anmeldeinformationen aufzufordern. Dies ist nützlich für Server, die eine Multi-Faktor-Authentifizierung oder eine dynamische Passworteingabe erfordern.",
|
||||
"forceKeyboardInteractive": "Tastatur-Interaktiv erzwingen",
|
||||
"forceKeyboardInteractiveDesc": "Erzwingt die Verwendung der tastatur-interaktiven Authentifizierung. Dies ist oft für Server erforderlich, die eine Zwei-Faktor-Authentifizierung (TOTP/2FA) verwenden."
|
||||
"forceKeyboardInteractiveDesc": "Erzwingt die Verwendung der tastatur-interaktiven Authentifizierung. Dies ist oft für Server erforderlich, die eine Zwei-Faktor-Authentifizierung (TOTP/2FA) verwenden.",
|
||||
"overrideCredentialUsername": "Benutzernamen der Anmeldedaten überschreiben",
|
||||
"overrideCredentialUsernameDesc": "Verwenden Sie einen anderen Benutzernamen als den, der in den Anmeldedaten gespeichert ist. Dadurch können Sie dieselben Anmeldedaten mit unterschiedlichen Benutzernamen verwenden.",
|
||||
"jumpHosts": "Jump-Hosts",
|
||||
"jumpHostsDescription": "Jump-Hosts (auch bekannt als Bastion-Hosts) ermöglichen es Ihnen, sich über einen oder mehrere Zwischen-Server mit einem Ziel-Server zu verbinden. Dies ist nützlich für den Zugriff auf Server hinter Firewalls oder in privaten Netzwerken.",
|
||||
"jumpHostChain": "Jump-Host-Kette",
|
||||
"addJumpHost": "Jump-Host hinzufügen",
|
||||
"selectServer": "Server auswählen",
|
||||
"searchServers": "Server durchsuchen...",
|
||||
"noServerFound": "Kein Server gefunden",
|
||||
"jumpHostsOrder": "Verbindungen werden in dieser Reihenfolge hergestellt: Jump-Host 1 → Jump-Host 2 → ... → Ziel-Server",
|
||||
"advancedAuthSettings": "Erweiterte Authentifizierungseinstellungen"
|
||||
},
|
||||
"terminal": {
|
||||
"title": "Terminal",
|
||||
@@ -819,6 +915,8 @@
|
||||
"copy": "Kopieren",
|
||||
"cut": "Ausschneiden",
|
||||
"paste": "Einfügen",
|
||||
"copyPath": "Pfad kopieren",
|
||||
"copyPaths": "Pfade kopieren",
|
||||
"delete": "Löschen",
|
||||
"properties": "Eigenschaften",
|
||||
"refresh": "Aktualisieren",
|
||||
@@ -828,6 +926,9 @@
|
||||
"deleteFiles": "{{count}} Element(e) löschen",
|
||||
"filesCopiedToClipboard": "{{count}} Element(e) in die Zwischenablage kopiert",
|
||||
"filesCutToClipboard": "{{count}} Element(e) in die Zwischenablage ausschneiden",
|
||||
"pathCopiedToClipboard": "Pfad in Zwischenablage kopiert",
|
||||
"pathsCopiedToClipboard": "{{count}} Pfade in Zwischenablage kopiert",
|
||||
"failedToCopyPath": "Fehler beim Kopieren des Pfades in die Zwischenablage",
|
||||
"movedItems": "{{count}} Element(e) verschoben",
|
||||
"failedToDeleteItem": "Das Löschen des Elements ist fehlgeschlagen.",
|
||||
"itemRenamedSuccessfully": "{{type}} erfolgreich umbenannt",
|
||||
@@ -1072,7 +1173,7 @@
|
||||
"used": "Gebraucht",
|
||||
"percentage": "Prozentsatz",
|
||||
"refreshStatusAndMetrics": "Aktualisierungsstatus und Metriken",
|
||||
"refreshStatus": "Aktualisierungsstatus",
|
||||
"refreshStatus": "Aktualisieren",
|
||||
"fileManagerAlreadyOpen": "Der Dateimanager ist für diesen Host bereits geöffnet",
|
||||
"openFileManager": "Dateimanager öffnen",
|
||||
"cpuCores_one": "{{count}} CPU",
|
||||
@@ -1081,9 +1182,10 @@
|
||||
"loadAverageNA": "Durchschnitt: N\/A",
|
||||
"cpuUsage": "CPU-Auslastung",
|
||||
"memoryUsage": "Speicherauslastung",
|
||||
"diskUsage": "Festplattennutzung",
|
||||
"rootStorageSpace": "Root-Speicherplatz",
|
||||
"of": "von",
|
||||
"feedbackMessage": "Haben Sie Ideen für die nächsten Schritte im Bereich der Serververwaltung? Teilen Sie diese mit uns",
|
||||
"feedbackMessage": "Haben Sie Ideen, wie es bei der Serververwaltung weitergehen könnte? Dann teilen Sie diese gerne mit uns auf",
|
||||
"failedToFetchHostConfig": "Abrufen der Hostkonfiguration fehlgeschlagen",
|
||||
"failedToFetchStatus": "Abrufen des Serverstatus fehlgeschlagen",
|
||||
"failedToFetchMetrics": "Abrufen der Servermetriken fehlgeschlagen",
|
||||
@@ -1092,9 +1194,40 @@
|
||||
"refreshing": "Aktualisieren...",
|
||||
"serverOffline": "Server offline",
|
||||
"cannotFetchMetrics": "Metriken können nicht vom Offline-Server abgerufen werden",
|
||||
"load": "Laden"
|
||||
"load": "Last",
|
||||
"available": "Verfügbar",
|
||||
"editLayout": "Layout anpassen",
|
||||
"cancelEdit": "Abbrechen",
|
||||
"addWidget": "Widget hinzufügen",
|
||||
"saveLayout": "Layout speichern",
|
||||
"unsavedChanges": "Ungespeicherte Änderungen",
|
||||
"layoutSaved": "Layout erfolgreich gespeichert",
|
||||
"failedToSaveLayout": "Speichern des Layout fehlgeschlagen",
|
||||
"systemInfo": "System Information",
|
||||
"hostname": "Hostname",
|
||||
"operatingSystem": "Betriebssystem",
|
||||
"kernel": "Kernel",
|
||||
"totalUptime": "Gesamte Betriebszeit",
|
||||
"seconds": "Sekunden",
|
||||
"networkInterfaces": "Netzwerkschnittstellen",
|
||||
"noInterfacesFound": "Keine Netzwerkschnittstellen gefunden",
|
||||
"totalProcesses": "Gesamtprozesse",
|
||||
"running": "läuft",
|
||||
"noProcessesFound": "Keine Prozesse gefunden",
|
||||
"loginStats": "SSH-Anmeldestatistiken",
|
||||
"totalLogins": "Gesamtanmeldungen",
|
||||
"uniqueIPs": "Eindeutige IPs",
|
||||
"recentSuccessfulLogins": "Letzte erfolgreiche Anmeldungen",
|
||||
"recentFailedAttempts": "Letzte fehlgeschlagene Versuche",
|
||||
"noRecentLoginData": "Keine aktuellen Anmeldedaten",
|
||||
"from": "von"
|
||||
},
|
||||
"auth": {
|
||||
"tagline": "SSH SERVER MANAGER",
|
||||
"description": "Sichere, leistungsstarke und intuitive SSH-Verbindungsverwaltung",
|
||||
"welcomeBack": "Willkommen zurück bei TERMIX",
|
||||
"createAccount": "Erstellen Sie Ihr TERMIX-Konto",
|
||||
"continueExternal": "Mit externem Anbieter fortfahren",
|
||||
"loginTitle": "Melden Sie sich bei Termix an",
|
||||
"registerTitle": "Benutzerkonto erstellen",
|
||||
"loginButton": "Anmelden",
|
||||
@@ -1260,6 +1393,10 @@
|
||||
"local": "Lokal",
|
||||
"external": "Extern (OIDC)",
|
||||
"selectPreferredLanguage": "Wählen Sie Ihre bevorzugte Sprache für die Benutzeroberfläche",
|
||||
"fileColorCoding": "Dateifarb-Codierung",
|
||||
"fileColorCodingDesc": "Farbcodierung von Dateien nach Typ: Ordner (rot), Dateien (blau), Symlinks (grün)",
|
||||
"commandAutocomplete": "Befehlsautovervollständigung",
|
||||
"commandAutocompleteDesc": "Tab-Taste Autovervollständigung für Terminal-Befehle basierend auf Ihrem Befehlsverlauf aktivieren",
|
||||
"currentPassword": "Aktuelles Passwort",
|
||||
"passwordChangedSuccess": "Passwort erfolgreich geändert! Bitte melden Sie sich erneut an.",
|
||||
"failedToChangePassword": "Passwort konnte nicht geändert werden. Bitte überprüfen Sie Ihr aktuelles Passwort und versuchen Sie es erneut."
|
||||
@@ -1372,7 +1509,7 @@
|
||||
"disconnected": "Getrennt",
|
||||
"maxRetriesExhausted": "Maximale Wiederholungsversuche ausgeschöpft",
|
||||
"endpointHostNotFound": "Endpunkthost nicht gefunden",
|
||||
"administrator": "Administrator",
|
||||
"administrator": "Admin",
|
||||
"user": "Benutzer",
|
||||
"external": "Extern",
|
||||
"local": "Lokal",
|
||||
@@ -1474,5 +1611,28 @@
|
||||
"cpu": "CPU",
|
||||
"ram": "RAM",
|
||||
"notAvailable": "Nicht verfügbar"
|
||||
},
|
||||
"commandPalette": {
|
||||
"searchPlaceholder": "Nach Hosts oder Schnellaktionen suchen...",
|
||||
"recentActivity": "Kürzliche Aktivität",
|
||||
"navigation": "Navigation",
|
||||
"addHost": "Host hinzufügen",
|
||||
"addCredential": "Anmeldedaten hinzufügen",
|
||||
"adminSettings": "Admin-Einstellungen",
|
||||
"userProfile": "Benutzerprofil",
|
||||
"updateLog": "Aktualisierungsprotokoll",
|
||||
"hosts": "Hosts",
|
||||
"openServerDetails": "Serverdetails öffnen",
|
||||
"openFileManager": "Dateimanager öffnen",
|
||||
"edit": "Bearbeiten",
|
||||
"links": "Links",
|
||||
"github": "GitHub",
|
||||
"support": "Support",
|
||||
"discord": "Discord",
|
||||
"donate": "Spenden",
|
||||
"press": "Drücken Sie",
|
||||
"toToggle": "zum Umschalten",
|
||||
"close": "Schließen",
|
||||
"hostManager": "Host-Manager"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,6 +109,7 @@
|
||||
"orCreateNewFolder": "Or create new folder",
|
||||
"addTag": "Add tag",
|
||||
"saving": "Saving...",
|
||||
"credentialId": "Credential ID",
|
||||
"overview": "Overview",
|
||||
"security": "Security",
|
||||
"usage": "Usage",
|
||||
@@ -225,6 +226,20 @@
|
||||
"editTooltip": "Edit this snippet",
|
||||
"deleteTooltip": "Delete this snippet"
|
||||
},
|
||||
"commandHistory": {
|
||||
"title": "History",
|
||||
"searchPlaceholder": "Search commands...",
|
||||
"noTerminal": "No active terminal",
|
||||
"noTerminalHint": "Open a terminal to see its command history.",
|
||||
"empty": "No command history yet",
|
||||
"emptyHint": "Execute commands in the active terminal to build its history.",
|
||||
"noResults": "No commands found",
|
||||
"noResultsHint": "No commands matching \"{{query}}\"",
|
||||
"deleteSuccess": "Command deleted from history",
|
||||
"deleteFailed": "Failed to delete command.",
|
||||
"deleteTooltip": "Delete command",
|
||||
"tabHint": "Use Tab in Terminal to autocomplete from command history"
|
||||
},
|
||||
"homepage": {
|
||||
"loggedInTitle": "Logged in!",
|
||||
"loggedInMessage": "You are logged in! Use the sidebar to access all available tools. To get started, create an SSH Host in the SSH Manager tab. Once created, you can connect to that host using the other apps in the sidebar.",
|
||||
@@ -343,6 +358,7 @@
|
||||
"cancel": "Cancel",
|
||||
"change": "Change",
|
||||
"save": "Save",
|
||||
"saving": "Saving...",
|
||||
"delete": "Delete",
|
||||
"edit": "Edit",
|
||||
"add": "Add",
|
||||
@@ -480,6 +496,24 @@
|
||||
"confirmRevokeAllSessions": "Are you sure you want to revoke all sessions for this user?",
|
||||
"failedToRevokeSessions": "Failed to revoke sessions",
|
||||
"sessionsRevokedSuccessfully": "Sessions revoked successfully",
|
||||
"linkToPasswordAccount": "Link to Password Account",
|
||||
"linkOIDCDialogTitle": "Link OIDC Account to Password Account",
|
||||
"linkOIDCDialogDescription": "Link {{username}} (OIDC user) to an existing password account. This will enable dual authentication for the password account.",
|
||||
"linkOIDCWarningTitle": "Warning: OIDC User Data Will Be Deleted",
|
||||
"linkOIDCActionDeleteUser": "Delete the OIDC user account and all their data",
|
||||
"linkOIDCActionAddCapability": "Add OIDC login capability to the target password account",
|
||||
"linkOIDCActionDualAuth": "Allow the password account to login with both password and OIDC",
|
||||
"linkTargetUsernameLabel": "Target Password Account Username",
|
||||
"linkTargetUsernamePlaceholder": "Enter username of password account",
|
||||
"linkAccountsButton": "Link Accounts",
|
||||
"linkingAccounts": "Linking...",
|
||||
"accountsLinkedSuccessfully": "OIDC user {{oidcUsername}} has been linked to {{targetUsername}}",
|
||||
"failedToLinkAccounts": "Failed to link accounts",
|
||||
"linkTargetUsernameRequired": "Target username is required",
|
||||
"unlinkOIDCTitle": "Unlink OIDC Authentication",
|
||||
"unlinkOIDCDescription": "Remove OIDC authentication from {{username}}? The user will only be able to login with username/password after this.",
|
||||
"unlinkOIDCSuccess": "OIDC unlinked from {{username}}",
|
||||
"failedToUnlinkOIDC": "Failed to unlink OIDC",
|
||||
"databaseSecurity": "Database Security",
|
||||
"encryptionStatus": "Encryption Status",
|
||||
"encryptionEnabled": "Encryption Enabled",
|
||||
@@ -754,6 +788,17 @@
|
||||
"failedToRemoveFromFolder": "Failed to remove host from folder",
|
||||
"folderRenamed": "Folder \"{{oldName}}\" renamed to \"{{newName}}\" successfully",
|
||||
"failedToRenameFolder": "Failed to rename folder",
|
||||
"editFolderAppearance": "Edit Folder Appearance",
|
||||
"editFolderAppearanceDesc": "Customize the color and icon for folder",
|
||||
"folderColor": "Folder Color",
|
||||
"folderIcon": "Folder Icon",
|
||||
"preview": "Preview",
|
||||
"folderAppearanceUpdated": "Folder appearance updated successfully",
|
||||
"failedToUpdateFolderAppearance": "Failed to update folder appearance",
|
||||
"deleteAllHostsInFolder": "Delete All Hosts in Folder",
|
||||
"confirmDeleteAllHostsInFolder": "Are you sure you want to delete all {{count}} hosts in folder \"{{folder}}\"? This action cannot be undone.",
|
||||
"allHostsInFolderDeleted": "Deleted {{count}} hosts from folder \"{{folder}}\" successfully",
|
||||
"failedToDeleteHostsInFolder": "Failed to delete hosts in folder",
|
||||
"movedToFolder": "Host \"{{name}}\" moved to \"{{folder}}\" successfully",
|
||||
"failedToMoveToFolder": "Failed to move host to folder",
|
||||
"statistics": "Statistics",
|
||||
@@ -778,11 +823,92 @@
|
||||
"statusMonitoring": "Status",
|
||||
"metricsMonitoring": "Metrics",
|
||||
"terminalCustomizationNotice": "Note: Terminal customizations only work on desktop (website and Electron app). Mobile apps and mobile website use system default terminal settings.",
|
||||
"terminalCustomization": "Terminal Customization",
|
||||
"appearance": "Appearance",
|
||||
"behavior": "Behavior",
|
||||
"advanced": "Advanced",
|
||||
"themePreview": "Theme Preview",
|
||||
"theme": "Theme",
|
||||
"selectTheme": "Select theme",
|
||||
"chooseColorTheme": "Choose a color theme for the terminal",
|
||||
"fontFamily": "Font Family",
|
||||
"selectFont": "Select font",
|
||||
"selectFontDesc": "Select the font to use in the terminal",
|
||||
"fontSize": "Font Size",
|
||||
"fontSizeValue": "Font Size: {{value}}px",
|
||||
"adjustFontSize": "Adjust the terminal font size",
|
||||
"letterSpacing": "Letter Spacing",
|
||||
"letterSpacingValue": "Letter Spacing: {{value}}px",
|
||||
"adjustLetterSpacing": "Adjust spacing between characters",
|
||||
"lineHeight": "Line Height",
|
||||
"lineHeightValue": "Line Height: {{value}}",
|
||||
"adjustLineHeight": "Adjust spacing between lines",
|
||||
"cursorStyle": "Cursor Style",
|
||||
"selectCursorStyle": "Select cursor style",
|
||||
"cursorStyleBlock": "Block",
|
||||
"cursorStyleUnderline": "Underline",
|
||||
"cursorStyleBar": "Bar",
|
||||
"chooseCursorAppearance": "Choose the cursor appearance",
|
||||
"cursorBlink": "Cursor Blink",
|
||||
"enableCursorBlink": "Enable cursor blinking animation",
|
||||
"scrollbackBuffer": "Scrollback Buffer",
|
||||
"scrollbackBufferValue": "Scrollback Buffer: {{value}} lines",
|
||||
"scrollbackBufferDesc": "Number of lines to keep in scrollback history",
|
||||
"bellStyle": "Bell Style",
|
||||
"selectBellStyle": "Select bell style",
|
||||
"bellStyleNone": "None",
|
||||
"bellStyleSound": "Sound",
|
||||
"bellStyleVisual": "Visual",
|
||||
"bellStyleBoth": "Both",
|
||||
"bellStyleDesc": "How to handle terminal bell (BEL character, \\x07). Programs trigger this when completing tasks, encountering errors, or for notifications. \"Sound\" plays an audio beep, \"Visual\" flashes the screen briefly, \"Both\" does both, \"None\" disables bell alerts.",
|
||||
"rightClickSelectsWord": "Right Click Selects Word",
|
||||
"rightClickSelectsWordDesc": "Right-clicking selects the word under cursor",
|
||||
"fastScrollModifier": "Fast Scroll Modifier",
|
||||
"selectModifier": "Select modifier",
|
||||
"modifierAlt": "Alt",
|
||||
"modifierCtrl": "Ctrl",
|
||||
"modifierShift": "Shift",
|
||||
"fastScrollModifierDesc": "Modifier key for fast scrolling",
|
||||
"fastScrollSensitivity": "Fast Scroll Sensitivity",
|
||||
"fastScrollSensitivityValue": "Fast Scroll Sensitivity: {{value}}",
|
||||
"fastScrollSensitivityDesc": "Scroll speed multiplier when modifier is held",
|
||||
"minimumContrastRatio": "Minimum Contrast Ratio",
|
||||
"minimumContrastRatioValue": "Minimum Contrast Ratio: {{value}}",
|
||||
"minimumContrastRatioDesc": "Automatically adjust colors for better readability",
|
||||
"sshAgentForwarding": "SSH Agent Forwarding",
|
||||
"sshAgentForwardingDesc": "Forward SSH authentication agent to remote host",
|
||||
"backspaceMode": "Backspace Mode",
|
||||
"selectBackspaceMode": "Select backspace mode",
|
||||
"backspaceModeNormal": "Normal (DEL)",
|
||||
"backspaceModeControlH": "Control-H (^H)",
|
||||
"backspaceModeDesc": "Backspace key behavior for compatibility",
|
||||
"startupSnippet": "Startup Snippet",
|
||||
"selectSnippet": "Select snippet",
|
||||
"searchSnippets": "Search snippets...",
|
||||
"snippetNone": "None",
|
||||
"noneAuthTitle": "Keyboard-Interactive Authentication",
|
||||
"noneAuthDescription": "This authentication method will use keyboard-interactive authentication when connecting to the SSH server.",
|
||||
"noneAuthDetails": "Keyboard-interactive authentication allows the server to prompt you for credentials during connection. This is useful for servers that require multi-factor authentication or if you do not want to save credentials locally.",
|
||||
"forceKeyboardInteractive": "Force Keyboard-Interactive",
|
||||
"forceKeyboardInteractiveDesc": "Forces the use of keyboard-interactive authentication. This is often required for servers that use Two-Factor Authentication (TOTP/2FA)."
|
||||
"forceKeyboardInteractiveDesc": "Forces the use of keyboard-interactive authentication. This is often required for servers that use Two-Factor Authentication (TOTP/2FA).",
|
||||
"overrideCredentialUsername": "Override Credential Username",
|
||||
"overrideCredentialUsernameDesc": "Use a different username than the one stored in the credential. This allows you to use the same credential with different usernames.",
|
||||
"jumpHosts": "Jump Hosts",
|
||||
"jumpHostsDescription": "Jump hosts (also known as bastion hosts) allow you to connect to a target server through one or more intermediate servers. This is useful for accessing servers behind firewalls or in private networks.",
|
||||
"jumpHostChain": "Jump Host Chain",
|
||||
"addJumpHost": "Add Jump Host",
|
||||
"selectServer": "Select Server",
|
||||
"searchServers": "Search servers...",
|
||||
"noServerFound": "No server found",
|
||||
"jumpHostsOrder": "Connections will be made in order: Jump Host 1 → Jump Host 2 → ... → Target Server",
|
||||
"quickActions": "Quick Actions",
|
||||
"quickActionsDescription": "Quick actions allow you to create custom buttons that execute SSH snippets on this server. These buttons will appear at the top of the Server Stats page for quick access.",
|
||||
"quickActionsList": "Quick Actions List",
|
||||
"addQuickAction": "Add Quick Action",
|
||||
"quickActionName": "Action name",
|
||||
"noSnippetFound": "No snippet found",
|
||||
"quickActionsOrder": "Quick action buttons will appear in the order listed above on the Server Stats page",
|
||||
"advancedAuthSettings": "Advanced Authentication Settings"
|
||||
},
|
||||
"terminal": {
|
||||
"title": "Terminal",
|
||||
@@ -829,6 +955,22 @@
|
||||
"connectToSsh": "Connect to SSH to use file operations",
|
||||
"uploadFile": "Upload File",
|
||||
"downloadFile": "Download",
|
||||
"extractArchive": "Extract Archive",
|
||||
"extractingArchive": "Extracting {{name}}...",
|
||||
"archiveExtractedSuccessfully": "{{name}} extracted successfully",
|
||||
"extractFailed": "Extract failed",
|
||||
"compressFile": "Compress File",
|
||||
"compressFiles": "Compress Files",
|
||||
"compressFilesDesc": "Compress {{count}} items into an archive",
|
||||
"archiveName": "Archive Name",
|
||||
"enterArchiveName": "Enter archive name...",
|
||||
"compressionFormat": "Compression Format",
|
||||
"selectedFiles": "Selected files",
|
||||
"andMoreFiles": "and {{count}} more...",
|
||||
"compress": "Compress",
|
||||
"compressingFiles": "Compressing {{count}} items into {{name}}...",
|
||||
"filesCompressedSuccessfully": "{{name}} created successfully",
|
||||
"compressFailed": "Compression failed",
|
||||
"edit": "Edit",
|
||||
"preview": "Preview",
|
||||
"previous": "Previous",
|
||||
@@ -902,6 +1044,8 @@
|
||||
"copy": "Copy",
|
||||
"cut": "Cut",
|
||||
"paste": "Paste",
|
||||
"copyPath": "Copy Path",
|
||||
"copyPaths": "Copy Paths",
|
||||
"delete": "Delete",
|
||||
"properties": "Properties",
|
||||
"preview": "Preview",
|
||||
@@ -912,6 +1056,9 @@
|
||||
"deleteFiles": "Delete {{count}} items",
|
||||
"filesCopiedToClipboard": "{{count}} items copied to clipboard",
|
||||
"filesCutToClipboard": "{{count}} items cut to clipboard",
|
||||
"pathCopiedToClipboard": "Path copied to clipboard",
|
||||
"pathsCopiedToClipboard": "{{count}} paths copied to clipboard",
|
||||
"failedToCopyPath": "Failed to copy path to clipboard",
|
||||
"movedItems": "Moved {{count}} items",
|
||||
"failedToDeleteItem": "Failed to delete item",
|
||||
"itemRenamedSuccessfully": "{{type}} renamed successfully",
|
||||
@@ -1106,7 +1253,19 @@
|
||||
"sshConnectionFailed": "SSH connection failed. Please check your connection to {{name}} ({{ip}}:{{port}})",
|
||||
"loadFileFailed": "Failed to load file: {{error}}",
|
||||
"connectedSuccessfully": "Connected successfully",
|
||||
"totpVerificationFailed": "TOTP verification failed"
|
||||
"totpVerificationFailed": "TOTP verification failed",
|
||||
"changePermissions": "Change Permissions",
|
||||
"changePermissionsDesc": "Modify file permissions for",
|
||||
"currentPermissions": "Current Permissions",
|
||||
"newPermissions": "New Permissions",
|
||||
"owner": "Owner",
|
||||
"group": "Group",
|
||||
"others": "Others",
|
||||
"read": "Read",
|
||||
"write": "Write",
|
||||
"execute": "Execute",
|
||||
"permissionsChangedSuccessfully": "Permissions changed successfully",
|
||||
"failedToChangePermissions": "Failed to change permissions"
|
||||
},
|
||||
"tunnels": {
|
||||
"title": "SSH Tunnels",
|
||||
@@ -1210,7 +1369,6 @@
|
||||
"totpRequired": "TOTP Authentication Required",
|
||||
"totpUnavailable": "Server Stats unavailable for TOTP-enabled servers",
|
||||
"load": "Load",
|
||||
"free": "Free",
|
||||
"available": "Available",
|
||||
"editLayout": "Edit Layout",
|
||||
"cancelEdit": "Cancel",
|
||||
@@ -1229,9 +1387,27 @@
|
||||
"noInterfacesFound": "No network interfaces found",
|
||||
"totalProcesses": "Total Processes",
|
||||
"running": "Running",
|
||||
"noProcessesFound": "No processes found"
|
||||
"noProcessesFound": "No processes found",
|
||||
"loginStats": "SSH Login Statistics",
|
||||
"totalLogins": "Total Logins",
|
||||
"uniqueIPs": "Unique IPs",
|
||||
"recentSuccessfulLogins": "Recent Successful Logins",
|
||||
"recentFailedAttempts": "Recent Failed Attempts",
|
||||
"noRecentLoginData": "No recent login data",
|
||||
"from": "from",
|
||||
"quickActions": "Quick Actions",
|
||||
"executeQuickAction": "Execute {{name}}",
|
||||
"executingQuickAction": "Executing {{name}}...",
|
||||
"quickActionSuccess": "{{name}} completed successfully",
|
||||
"quickActionFailed": "{{name}} failed",
|
||||
"quickActionError": "Failed to execute {{name}}"
|
||||
},
|
||||
"auth": {
|
||||
"tagline": "SSH SERVER MANAGER",
|
||||
"description": "Secure, powerful, and intuitive SSH connection management",
|
||||
"welcomeBack": "Welcome back to TERMIX",
|
||||
"createAccount": "Create your TERMIX account",
|
||||
"continueExternal": "Continue with external provider",
|
||||
"loginTitle": "Login to Termix",
|
||||
"registerTitle": "Create Account",
|
||||
"loginButton": "Login",
|
||||
@@ -1404,7 +1580,12 @@
|
||||
"authMethod": "Authentication Method",
|
||||
"local": "Local",
|
||||
"external": "External (OIDC)",
|
||||
"externalAndLocal": "Dual Auth",
|
||||
"selectPreferredLanguage": "Select your preferred language for the interface",
|
||||
"fileColorCoding": "File Color Coding",
|
||||
"fileColorCodingDesc": "Color-code files by type: folders (red), files (blue), symlinks (green)",
|
||||
"commandAutocomplete": "Command Autocomplete",
|
||||
"commandAutocompleteDesc": "Enable Tab key autocomplete suggestions for terminal commands based on your command history",
|
||||
"currentPassword": "Current Password",
|
||||
"passwordChangedSuccess": "Password changed successfully! Please log in again.",
|
||||
"failedToChangePassword": "Failed to change password. Please check your current password and try again."
|
||||
@@ -1620,5 +1801,28 @@
|
||||
"cpu": "CPU",
|
||||
"ram": "RAM",
|
||||
"notAvailable": "N/A"
|
||||
},
|
||||
"commandPalette": {
|
||||
"searchPlaceholder": "Search for hosts or quick actions...",
|
||||
"recentActivity": "Recent Activity",
|
||||
"navigation": "Navigation",
|
||||
"addHost": "Add Host",
|
||||
"addCredential": "Add Credential",
|
||||
"adminSettings": "Admin Settings",
|
||||
"userProfile": "User Profile",
|
||||
"updateLog": "Update Log",
|
||||
"hosts": "Hosts",
|
||||
"openServerDetails": "Open Server Details",
|
||||
"openFileManager": "Open File Manager",
|
||||
"edit": "Edit",
|
||||
"links": "Links",
|
||||
"github": "GitHub",
|
||||
"support": "Support",
|
||||
"discord": "Discord",
|
||||
"donate": "Donate",
|
||||
"press": "Press",
|
||||
"toToggle": "to toggle",
|
||||
"close": "Close",
|
||||
"hostManager": "Host Manager"
|
||||
}
|
||||
}
|
||||
|
||||
1609
src/locales/fr/translation.json
Normal file
1609
src/locales/fr/translation.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -191,6 +191,20 @@
|
||||
"enableRightClickCopyPaste": "Habilitar copiar/colar com botão direito",
|
||||
"shareIdeas": "Tem ideias sobre o que deve vir a seguir nas ferramentas SSH? Compartilhe em"
|
||||
},
|
||||
"commandHistory": {
|
||||
"title": "Histórico",
|
||||
"searchPlaceholder": "Pesquisar comandos...",
|
||||
"noTerminal": "Nenhum terminal ativo",
|
||||
"noTerminalHint": "Abra um terminal para ver seu histórico de comandos.",
|
||||
"empty": "Ainda não há histórico de comandos",
|
||||
"emptyHint": "Execute comandos no terminal ativo para criar um histórico.",
|
||||
"noResults": "Nenhum comando encontrado",
|
||||
"noResultsHint": "Nenhum comando correspondente a \"{{query}}\"",
|
||||
"deleteSuccess": "Comando removido do histórico",
|
||||
"deleteFailed": "Falha ao excluir comando.",
|
||||
"deleteTooltip": "Excluir comando",
|
||||
"tabHint": "Use Tab no Terminal para autocompletar do histórico de comandos"
|
||||
},
|
||||
"homepage": {
|
||||
"loggedInTitle": "Conectado!",
|
||||
"loggedInMessage": "Você está conectado! Use a barra lateral para acessar todas as ferramentas disponíveis. Para começar, crie um Host SSH na aba Gerenciador SSH. Depois de criado, você pode se conectar a esse host usando os outros apps na barra lateral.",
|
||||
@@ -720,7 +734,18 @@
|
||||
"noneAuthDescription": "Este método de autenticação usará autenticação interativa por teclado ao conectar ao servidor SSH.",
|
||||
"noneAuthDetails": "A autenticação interativa por teclado permite que o servidor solicite credenciais durante a conexão. Isso é útil para servidores que requerem autenticação multifator ou entrada de senha dinâmica.",
|
||||
"forceKeyboardInteractive": "Forçar Interativo com Teclado",
|
||||
"forceKeyboardInteractiveDesc": "Força o uso da autenticação interativa com teclado. Isso é frequentemente necessário para servidores que usam Autenticação de Dois Fatores (TOTP/2FA)."
|
||||
"forceKeyboardInteractiveDesc": "Força o uso da autenticação interativa com teclado. Isso é frequentemente necessário para servidores que usam Autenticação de Dois Fatores (TOTP/2FA).",
|
||||
"overrideCredentialUsername": "Substituir Nome de Usuário da Credencial",
|
||||
"overrideCredentialUsernameDesc": "Use um nome de usuário diferente daquele armazenado na credencial. Isso permite que você use a mesma credencial com diferentes nomes de usuário.",
|
||||
"jumpHosts": "Hosts de Salto",
|
||||
"jumpHostsDescription": "Hosts de salto (também conhecidos como bastions) permitem que você se conecte a um servidor de destino através de um ou mais servidores intermediários. Isso é útil para acessar servidores atrás de firewalls ou em redes privadas.",
|
||||
"jumpHostChain": "Cadeia de Hosts de Salto",
|
||||
"addJumpHost": "Adicionar Host de Salto",
|
||||
"selectServer": "Selecionar Servidor",
|
||||
"searchServers": "Pesquisar servidores...",
|
||||
"noServerFound": "Nenhum servidor encontrado",
|
||||
"jumpHostsOrder": "As conexões serão feitas na ordem: Host de Salto 1 → Host de Salto 2 → ... → Servidor de Destino",
|
||||
"advancedAuthSettings": "Configurações Avançadas de Autenticação"
|
||||
},
|
||||
"terminal": {
|
||||
"title": "Terminal",
|
||||
@@ -836,6 +861,8 @@
|
||||
"copy": "Copiar",
|
||||
"cut": "Recortar",
|
||||
"paste": "Colar",
|
||||
"copyPath": "Copiar caminho",
|
||||
"copyPaths": "Copiar caminhos",
|
||||
"delete": "Excluir",
|
||||
"properties": "Propriedades",
|
||||
"preview": "Visualizar",
|
||||
@@ -846,6 +873,9 @@
|
||||
"deleteFiles": "Excluir {{count}} itens",
|
||||
"filesCopiedToClipboard": "{{count}} itens copiados para a área de transferência",
|
||||
"filesCutToClipboard": "{{count}} itens recortados para a área de transferência",
|
||||
"pathCopiedToClipboard": "Caminho copiado para a área de transferência",
|
||||
"pathsCopiedToClipboard": "{{count}} caminhos copiados para a área de transferência",
|
||||
"failedToCopyPath": "Falha ao copiar caminho para a área de transferência",
|
||||
"movedItems": "{{count}} itens movidos",
|
||||
"failedToDeleteItem": "Falha ao excluir item",
|
||||
"itemRenamedSuccessfully": "{{type}} renomeado com sucesso",
|
||||
@@ -1143,6 +1173,11 @@
|
||||
"available": "Disponível"
|
||||
},
|
||||
"auth": {
|
||||
"tagline": "GERENCIADOR DE TERMINAL SSH",
|
||||
"description": "Gerenciamento de conexão SSH seguro, poderoso e intuitivo",
|
||||
"welcomeBack": "Bem-vindo de volta ao TERMIX",
|
||||
"createAccount": "Crie sua conta TERMIX",
|
||||
"continueExternal": "Continuar com provedor externo",
|
||||
"loginTitle": "Entrar no Termix",
|
||||
"registerTitle": "Criar Conta",
|
||||
"loginButton": "Entrar",
|
||||
@@ -1306,6 +1341,10 @@
|
||||
"local": "Local",
|
||||
"external": "Externo (OIDC)",
|
||||
"selectPreferredLanguage": "Selecione seu idioma preferido para a interface",
|
||||
"fileColorCoding": "Codificação de Cores de Arquivos",
|
||||
"fileColorCodingDesc": "Codificar arquivos por cores por tipo: pastas (vermelho), arquivos (azul), links simbólicos (verde)",
|
||||
"commandAutocomplete": "Autocompletar Comandos",
|
||||
"commandAutocompleteDesc": "Ativar sugestões de autocompletar com a tecla Tab para comandos do terminal baseado no seu histórico",
|
||||
"currentPassword": "Senha Atual",
|
||||
"passwordChangedSuccess": "Senha alterada com sucesso! Por favor, faça login novamente.",
|
||||
"failedToChangePassword": "Falha ao alterar a senha. Por favor, verifique sua senha atual e tente novamente."
|
||||
|
||||
@@ -225,6 +225,20 @@
|
||||
"editTooltip": "Редактировать этот сниппет",
|
||||
"deleteTooltip": "Удалить этот сниппет"
|
||||
},
|
||||
"commandHistory": {
|
||||
"title": "История",
|
||||
"searchPlaceholder": "Поиск команд...",
|
||||
"noTerminal": "Нет активного терминала",
|
||||
"noTerminalHint": "Откройте терминал, чтобы увидеть историю команд.",
|
||||
"empty": "История команд пока пуста",
|
||||
"emptyHint": "Выполните команды в активном терминале, чтобы создать историю.",
|
||||
"noResults": "Команды не найдены",
|
||||
"noResultsHint": "Нет команд, соответствующих \"{{query}}\"",
|
||||
"deleteSuccess": "Команда удалена из истории",
|
||||
"deleteFailed": "Не удалось удалить команду.",
|
||||
"deleteTooltip": "Удалить команду",
|
||||
"tabHint": "Используйте Tab в Терминале для автозаполнения из истории команд"
|
||||
},
|
||||
"homepage": {
|
||||
"loggedInTitle": "Вы вошли в систему!",
|
||||
"loggedInMessage": "Вы вошли в систему! Используйте боковую панель для доступа ко всем доступным инструментам. Чтобы начать, создайте SSH-хост в разделе SSH-менеджера. После создания вы можете подключиться к этому хосту, используя другие приложения на боковой панели.",
|
||||
@@ -766,9 +780,85 @@
|
||||
"statusMonitoring": "Статус",
|
||||
"metricsMonitoring": "Метрики",
|
||||
"terminalCustomizationNotice": "Примечание: Настройки терминала работают только на рабочем столе (веб-сайт и Electron-приложение). Мобильные приложения и мобильный веб-сайт используют системные настройки терминала по умолчанию.",
|
||||
"terminalCustomization": "Настройка терминала",
|
||||
"appearance": "Внешний вид",
|
||||
"behavior": "Поведение",
|
||||
"advanced": "Расширенные",
|
||||
"themePreview": "Предпросмотр темы",
|
||||
"theme": "Тема",
|
||||
"selectTheme": "Выбрать тему",
|
||||
"chooseColorTheme": "Выберите цветовую тему для терминала",
|
||||
"fontFamily": "Семейство шрифтов",
|
||||
"selectFont": "Выбрать шрифт",
|
||||
"selectFontDesc": "Выберите шрифт для использования в терминале",
|
||||
"fontSize": "Размер шрифта",
|
||||
"fontSizeValue": "Размер шрифта: {{value}}px",
|
||||
"adjustFontSize": "Настроить размер шрифта терминала",
|
||||
"letterSpacing": "Межбуквенный интервал",
|
||||
"letterSpacingValue": "Межбуквенный интервал: {{value}}px",
|
||||
"adjustLetterSpacing": "Настроить расстояние между символами",
|
||||
"lineHeight": "Высота строки",
|
||||
"lineHeightValue": "Высота строки: {{value}}",
|
||||
"adjustLineHeight": "Настроить расстояние между строками",
|
||||
"cursorStyle": "Стиль курсора",
|
||||
"selectCursorStyle": "Выбрать стиль курсора",
|
||||
"cursorStyleBlock": "Блок",
|
||||
"cursorStyleUnderline": "Подчеркивание",
|
||||
"cursorStyleBar": "Полоса",
|
||||
"chooseCursorAppearance": "Выбрать внешний вид курсора",
|
||||
"cursorBlink": "Мигание курсора",
|
||||
"enableCursorBlink": "Включить анимацию мигания курсора",
|
||||
"scrollbackBuffer": "Буфер прокрутки",
|
||||
"scrollbackBufferValue": "Буфер прокрутки: {{value}} строк",
|
||||
"scrollbackBufferDesc": "Количество строк для хранения в истории прокрутки",
|
||||
"bellStyle": "Стиль звонка",
|
||||
"selectBellStyle": "Выбрать стиль звонка",
|
||||
"bellStyleNone": "Нет",
|
||||
"bellStyleSound": "Звук",
|
||||
"bellStyleVisual": "Визуальный",
|
||||
"bellStyleBoth": "Оба",
|
||||
"bellStyleDesc": "Как обрабатывать звонок терминала (символ BEL, \\x07). Программы вызывают его при завершении задач, возникновении ошибок или для уведомлений. \"Звук\" воспроизводит звуковой сигнал, \"Визуальный\" кратковременно мигает экран, \"Оба\" делает и то, и другое, \"Нет\" отключает звуковые оповещения.",
|
||||
"rightClickSelectsWord": "Правый клик выбирает слово",
|
||||
"rightClickSelectsWordDesc": "Правый клик выбирает слово под курсором",
|
||||
"fastScrollModifier": "Модификатор быстрой прокрутки",
|
||||
"selectModifier": "Выбрать модификатор",
|
||||
"modifierAlt": "Alt",
|
||||
"modifierCtrl": "Ctrl",
|
||||
"modifierShift": "Shift",
|
||||
"fastScrollModifierDesc": "Клавиша-модификатор для быстрой прокрутки",
|
||||
"fastScrollSensitivity": "Чувствительность быстрой прокрутки",
|
||||
"fastScrollSensitivityValue": "Чувствительность быстрой прокрутки: {{value}}",
|
||||
"fastScrollSensitivityDesc": "Множитель скорости прокрутки при удержании модификатора",
|
||||
"minimumContrastRatio": "Минимальная контрастность",
|
||||
"minimumContrastRatioValue": "Минимальная контрастность: {{value}}",
|
||||
"minimumContrastRatioDesc": "Автоматически настраивать цвета для лучшей читаемости",
|
||||
"sshAgentForwarding": "Переадресация SSH-агента",
|
||||
"sshAgentForwardingDesc": "Переадресовать агент SSH-аутентификации на удаленный хост",
|
||||
"backspaceMode": "Режим Backspace",
|
||||
"selectBackspaceMode": "Выбрать режим Backspace",
|
||||
"backspaceModeNormal": "Обычный (DEL)",
|
||||
"backspaceModeControlH": "Control-H (^H)",
|
||||
"backspaceModeDesc": "Поведение клавиши Backspace для совместимости",
|
||||
"startupSnippet": "Сниппет запуска",
|
||||
"selectSnippet": "Выбрать сниппет",
|
||||
"searchSnippets": "Поиск сниппетов...",
|
||||
"snippetNone": "Нет",
|
||||
"noneAuthTitle": "Интерактивная аутентификация по клавиатуре",
|
||||
"noneAuthDescription": "Этот метод аутентификации будет использовать интерактивную аутентификацию по клавиатуре при подключении к SSH-серверу.",
|
||||
"noneAuthDetails": "Интерактивная аутентификация по клавиатуре позволяет серверу запрашивать у вас учетные данные во время подключения. Это полезно для серверов, которые требуют многофакторную аутентификацию или динамический ввод пароля."
|
||||
"noneAuthDetails": "Интерактивная аутентификация по клавиатуре позволяет серверу запрашивать у вас учетные данные во время подключения. Это полезно для серверов, которые требуют многофакторную аутентификацию или динамический ввод пароля.",
|
||||
"forceKeyboardInteractive": "Принудительная клавиатурная аутентификация",
|
||||
"forceKeyboardInteractiveDesc": "Принудительно использует интерактивную аутентификацию по клавиатуре. Часто требуется для серверов с двухфакторной аутентификацией (TOTP/2FA).",
|
||||
"overrideCredentialUsername": "Переопределить имя пользователя учетных данных",
|
||||
"overrideCredentialUsernameDesc": "Используйте другое имя пользователя, отличное от того, что хранится в учетных данных. Это позволяет использовать одни и те же учетные данные с разными именами пользователей.",
|
||||
"jumpHosts": "Промежуточные хосты",
|
||||
"jumpHostsDescription": "Промежуточные хосты (также известные как бастионы) позволяют подключаться к целевому серверу через один или несколько промежуточных серверов. Это полезно для доступа к серверам за брандмауэрами или в частных сетях.",
|
||||
"jumpHostChain": "Цепочка промежуточных хостов",
|
||||
"addJumpHost": "Добавить промежуточный хост",
|
||||
"selectServer": "Выбрать сервер",
|
||||
"searchServers": "Поиск серверов...",
|
||||
"noServerFound": "Сервер не найден",
|
||||
"jumpHostsOrder": "Подключения будут выполнены в порядке: Промежуточный хост 1 → Промежуточный хост 2 → ... → Целевой сервер",
|
||||
"advancedAuthSettings": "Расширенные настройки аутентификации"
|
||||
},
|
||||
"terminal": {
|
||||
"title": "Терминал",
|
||||
@@ -888,6 +978,8 @@
|
||||
"copy": "Копировать",
|
||||
"cut": "Вырезать",
|
||||
"paste": "Вставить",
|
||||
"copyPath": "Копировать путь",
|
||||
"copyPaths": "Копировать пути",
|
||||
"delete": "Удалить",
|
||||
"properties": "Свойства",
|
||||
"preview": "Просмотр",
|
||||
@@ -898,6 +990,9 @@
|
||||
"deleteFiles": "Удалить {{count}} элементов",
|
||||
"filesCopiedToClipboard": "{{count}} элементов скопировано в буфер обмена",
|
||||
"filesCutToClipboard": "{{count}} элементов вырезано в буфер обмена",
|
||||
"pathCopiedToClipboard": "Путь скопирован в буфер обмена",
|
||||
"pathsCopiedToClipboard": "{{count}} путей скопировано в буфер обмена",
|
||||
"failedToCopyPath": "Не удалось скопировать путь в буфер обмена",
|
||||
"movedItems": "Перемещено {{count}} элементов",
|
||||
"failedToDeleteItem": "Не удалось удалить элемент",
|
||||
"itemRenamedSuccessfully": "{{type}} успешно переименован",
|
||||
@@ -1215,9 +1310,21 @@
|
||||
"noInterfacesFound": "Сетевые интерфейсы не найдены",
|
||||
"totalProcesses": "Всего процессов",
|
||||
"running": "Запущено",
|
||||
"noProcessesFound": "Процессы не найдены"
|
||||
"noProcessesFound": "Процессы не найдены",
|
||||
"loginStats": "Статистика входов SSH",
|
||||
"totalLogins": "Всего входов",
|
||||
"uniqueIPs": "Уникальные IP",
|
||||
"recentSuccessfulLogins": "Последние успешные входы",
|
||||
"recentFailedAttempts": "Последние неудачные попытки",
|
||||
"noRecentLoginData": "Нет данных о недавних входах",
|
||||
"from": "с"
|
||||
},
|
||||
"auth": {
|
||||
"tagline": "SSH ТЕРМИНАЛ МЕНЕДЖЕР",
|
||||
"description": "Безопасное, мощное и интуитивное управление SSH-соединениями",
|
||||
"welcomeBack": "Добро пожаловать обратно в TERMIX",
|
||||
"createAccount": "Создайте вашу учетную запись TERMIX",
|
||||
"continueExternal": "Продолжить с внешним провайдером",
|
||||
"loginTitle": "Вход в Termix",
|
||||
"registerTitle": "Создать учетную запись",
|
||||
"loginButton": "Войти",
|
||||
@@ -1373,6 +1480,10 @@
|
||||
"local": "Локальный",
|
||||
"external": "Внешний (OIDC)",
|
||||
"selectPreferredLanguage": "Выберите предпочитаемый язык интерфейса",
|
||||
"fileColorCoding": "Цветовое кодирование файлов",
|
||||
"fileColorCodingDesc": "Цветовая кодировка файлов по типу: папки (красный), файлы (синий), символические ссылки (зелёный)",
|
||||
"commandAutocomplete": "Автодополнение команд",
|
||||
"commandAutocompleteDesc": "Включить автодополнение команд терминала клавишей Tab на основе вашей истории команд",
|
||||
"currentPassword": "Текущий пароль",
|
||||
"passwordChangedSuccess": "Пароль успешно изменен! Пожалуйста, войдите снова.",
|
||||
"failedToChangePassword": "Не удалось изменить пароль. Пожалуйста, проверьте ваш текущий пароль и попробуйте снова."
|
||||
@@ -1587,5 +1698,28 @@
|
||||
"cpu": "CPU",
|
||||
"ram": "RAM",
|
||||
"notAvailable": "N/A"
|
||||
},
|
||||
"commandPalette": {
|
||||
"searchPlaceholder": "Поиск хостов или быстрых действий...",
|
||||
"recentActivity": "Недавняя активность",
|
||||
"navigation": "Навигация",
|
||||
"addHost": "Добавить хост",
|
||||
"addCredential": "Добавить учетные данные",
|
||||
"adminSettings": "Настройки администратора",
|
||||
"userProfile": "Профиль пользователя",
|
||||
"updateLog": "Журнал обновлений",
|
||||
"hosts": "Хосты",
|
||||
"openServerDetails": "Открыть детали сервера",
|
||||
"openFileManager": "Открыть файловый менеджер",
|
||||
"edit": "Редактировать",
|
||||
"links": "Ссылки",
|
||||
"github": "GitHub",
|
||||
"support": "Поддержка",
|
||||
"discord": "Discord",
|
||||
"donate": "Пожертвовать",
|
||||
"press": "Нажмите",
|
||||
"toToggle": "для переключения",
|
||||
"close": "Закрыть",
|
||||
"hostManager": "Менеджер хостов"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -223,6 +223,20 @@
|
||||
"editTooltip": "编辑此片段",
|
||||
"deleteTooltip": "删除此片段"
|
||||
},
|
||||
"commandHistory": {
|
||||
"title": "历史记录",
|
||||
"searchPlaceholder": "搜索命令...",
|
||||
"noTerminal": "无活动终端",
|
||||
"noTerminalHint": "打开终端以查看其命令历史记录。",
|
||||
"empty": "暂无命令历史记录",
|
||||
"emptyHint": "在活动终端中执行命令以建立历史记录。",
|
||||
"noResults": "未找到命令",
|
||||
"noResultsHint": "没有匹配 \"{{query}}\" 的命令",
|
||||
"deleteSuccess": "命令已从历史记录中删除",
|
||||
"deleteFailed": "删除命令失败。",
|
||||
"deleteTooltip": "删除命令",
|
||||
"tabHint": "在终端中使用 Tab 键从命令历史记录自动完成"
|
||||
},
|
||||
"homepage": {
|
||||
"loggedInTitle": "登录成功!",
|
||||
"loggedInMessage": "您已登录!使用侧边栏访问所有可用工具。要开始使用,请在 SSH 管理器选项卡中创建 SSH 主机。创建后,您可以使用侧边栏中的其他应用程序连接到该主机。",
|
||||
@@ -766,6 +780,17 @@
|
||||
"failedToRemoveFromFolder": "从文件夹中移除主机失败",
|
||||
"folderRenamed": "文件夹\"{{oldName}}\"已成功重命名为\"{{newName}}\"",
|
||||
"failedToRenameFolder": "重命名文件夹失败",
|
||||
"editFolderAppearance": "编辑文件夹外观",
|
||||
"editFolderAppearanceDesc": "自定义文件夹的颜色和图标",
|
||||
"folderColor": "文件夹颜色",
|
||||
"folderIcon": "文件夹图标",
|
||||
"preview": "预览",
|
||||
"folderAppearanceUpdated": "文件夹外观更新成功",
|
||||
"failedToUpdateFolderAppearance": "更新文件夹外观失败",
|
||||
"deleteAllHostsInFolder": "删除文件夹内所有主机",
|
||||
"confirmDeleteAllHostsInFolder": "确定要删除文件夹\"{{folder}}\"中的全部 {{count}} 个主机吗?此操作无法撤销。",
|
||||
"allHostsInFolderDeleted": "已成功从文件夹\"{{folder}}\"删除 {{count}} 个主机",
|
||||
"failedToDeleteHostsInFolder": "删除文件夹中的主机失败",
|
||||
"movedToFolder": "主机\"{{name}}\"已成功移动到\"{{folder}}\"",
|
||||
"failedToMoveToFolder": "移动主机到文件夹失败",
|
||||
"statistics": "统计",
|
||||
@@ -790,11 +815,85 @@
|
||||
"statusMonitoring": "状态",
|
||||
"metricsMonitoring": "指标",
|
||||
"terminalCustomizationNotice": "注意:终端自定义仅在桌面网站版本中有效。移动和 Electron 应用程序使用系统默认终端设置。",
|
||||
"terminalCustomization": "终端自定义",
|
||||
"appearance": "外观",
|
||||
"behavior": "行为",
|
||||
"advanced": "高级",
|
||||
"themePreview": "主题预览",
|
||||
"theme": "主题",
|
||||
"selectTheme": "选择主题",
|
||||
"chooseColorTheme": "选择终端的颜色主题",
|
||||
"fontFamily": "字体系列",
|
||||
"selectFont": "选择字体",
|
||||
"selectFontDesc": "选择终端使用的字体",
|
||||
"fontSize": "字体大小",
|
||||
"fontSizeValue": "字体大小:{{value}}px",
|
||||
"adjustFontSize": "调整终端字体大小",
|
||||
"letterSpacing": "字母间距",
|
||||
"letterSpacingValue": "字母间距:{{value}}px",
|
||||
"adjustLetterSpacing": "调整字符之间的间距",
|
||||
"lineHeight": "行高",
|
||||
"lineHeightValue": "行高:{{value}}",
|
||||
"adjustLineHeight": "调整行之间的间距",
|
||||
"cursorStyle": "光标样式",
|
||||
"selectCursorStyle": "选择光标样式",
|
||||
"cursorStyleBlock": "块状",
|
||||
"cursorStyleUnderline": "下划线",
|
||||
"cursorStyleBar": "竖线",
|
||||
"chooseCursorAppearance": "选择光标外观",
|
||||
"cursorBlink": "光标闪烁",
|
||||
"enableCursorBlink": "启用光标闪烁动画",
|
||||
"scrollbackBuffer": "回滚缓冲区",
|
||||
"scrollbackBufferValue": "回滚缓冲区:{{value}} 行",
|
||||
"scrollbackBufferDesc": "保留在回滚历史记录中的行数",
|
||||
"bellStyle": "铃声样式",
|
||||
"selectBellStyle": "选择铃声样式",
|
||||
"bellStyleNone": "无",
|
||||
"bellStyleSound": "声音",
|
||||
"bellStyleVisual": "视觉",
|
||||
"bellStyleBoth": "两者",
|
||||
"bellStyleDesc": "如何处理终端铃声(BEL字符,\\x07)。程序在完成任务、遇到错误或通知时会触发此功能。\"声音\"播放音频提示音,\"视觉\"短暂闪烁屏幕,\"两者\"同时执行,\"无\"禁用铃声提醒。",
|
||||
"rightClickSelectsWord": "右键选择单词",
|
||||
"rightClickSelectsWordDesc": "右键单击选择光标下的单词",
|
||||
"fastScrollModifier": "快速滚动修饰键",
|
||||
"selectModifier": "选择修饰键",
|
||||
"modifierAlt": "Alt",
|
||||
"modifierCtrl": "Ctrl",
|
||||
"modifierShift": "Shift",
|
||||
"fastScrollModifierDesc": "快速滚动的修饰键",
|
||||
"fastScrollSensitivity": "快速滚动灵敏度",
|
||||
"fastScrollSensitivityValue": "快速滚动灵敏度:{{value}}",
|
||||
"fastScrollSensitivityDesc": "按住修饰键时的滚动速度倍数",
|
||||
"minimumContrastRatio": "最小对比度",
|
||||
"minimumContrastRatioValue": "最小对比度:{{value}}",
|
||||
"minimumContrastRatioDesc": "自动调整颜色以获得更好的可读性",
|
||||
"sshAgentForwarding": "SSH 代理转发",
|
||||
"sshAgentForwardingDesc": "将 SSH 身份验证代理转发到远程主机",
|
||||
"backspaceMode": "退格模式",
|
||||
"selectBackspaceMode": "选择退格模式",
|
||||
"backspaceModeNormal": "正常 (DEL)",
|
||||
"backspaceModeControlH": "Control-H (^H)",
|
||||
"backspaceModeDesc": "退格键行为兼容性",
|
||||
"startupSnippet": "启动代码片段",
|
||||
"selectSnippet": "选择代码片段",
|
||||
"searchSnippets": "搜索代码片段...",
|
||||
"snippetNone": "无",
|
||||
"noneAuthTitle": "键盘交互式认证",
|
||||
"noneAuthDescription": "此认证方法在连接到 SSH 服务器时将使用键盘交互式认证。",
|
||||
"noneAuthDetails": "键盘交互式认证允许服务器在连接期间提示您输入凭据。这对于需要多因素认证或动态密码输入的服务器很有用。",
|
||||
"forceKeyboardInteractive": "强制键盘交互式认证",
|
||||
"forceKeyboardInteractiveDesc": "强制使用键盘交互式认证。这通常是使用双因素认证(TOTP/2FA)的服务器所必需的。"
|
||||
"forceKeyboardInteractiveDesc": "强制使用键盘交互式认证。这通常是使用双因素认证(TOTP/2FA)的服务器所必需的。",
|
||||
"overrideCredentialUsername": "覆盖凭据用户名",
|
||||
"overrideCredentialUsernameDesc": "使用与凭据中存储的用户名不同的用户名。这允许您对不同的用户名使用相同的凭据。",
|
||||
"jumpHosts": "跳板主机",
|
||||
"jumpHostsDescription": "跳板主机(也称为堡垒主机)允许您通过一个或多个中间服务器连接到目标服务器。这对于访问防火墙后或私有网络中的服务器很有用。",
|
||||
"jumpHostChain": "跳板主机链",
|
||||
"addJumpHost": "添加跳板主机",
|
||||
"selectServer": "选择服务器",
|
||||
"searchServers": "搜索服务器...",
|
||||
"noServerFound": "未找到服务器",
|
||||
"jumpHostsOrder": "连接将按顺序进行:跳板主机 1 → 跳板主机 2 → ... → 目标服务器",
|
||||
"advancedAuthSettings": "高级身份验证设置"
|
||||
},
|
||||
"terminal": {
|
||||
"title": "终端",
|
||||
@@ -841,6 +940,22 @@
|
||||
"connectToSsh": "连接 SSH 以使用文件操作",
|
||||
"uploadFile": "上传文件",
|
||||
"downloadFile": "下载",
|
||||
"extractArchive": "解压文件",
|
||||
"extractingArchive": "正在解压 {{name}}...",
|
||||
"archiveExtractedSuccessfully": "{{name}} 解压成功",
|
||||
"extractFailed": "解压失败",
|
||||
"compressFile": "压缩文件",
|
||||
"compressFiles": "压缩文件",
|
||||
"compressFilesDesc": "将 {{count}} 个项目压缩为归档文件",
|
||||
"archiveName": "归档文件名",
|
||||
"enterArchiveName": "输入归档文件名...",
|
||||
"compressionFormat": "压缩格式",
|
||||
"selectedFiles": "已选文件",
|
||||
"andMoreFiles": "以及其他 {{count}} 个...",
|
||||
"compress": "压缩",
|
||||
"compressingFiles": "正在将 {{count}} 个项目压缩到 {{name}}...",
|
||||
"filesCompressedSuccessfully": "{{name}} 创建成功",
|
||||
"compressFailed": "压缩失败",
|
||||
"edit": "编辑",
|
||||
"preview": "预览",
|
||||
"previous": "上一页",
|
||||
@@ -910,7 +1025,11 @@
|
||||
"noSSHConnection": "无SSH连接可用",
|
||||
"enterFolderName": "输入文件夹名称:",
|
||||
"enterFileName": "输入文件名称:",
|
||||
"copy": "复制",
|
||||
"cut": "剪切",
|
||||
"paste": "粘贴",
|
||||
"copyPath": "复制路径",
|
||||
"copyPaths": "复制路径",
|
||||
"properties": "属性",
|
||||
"refresh": "刷新",
|
||||
"downloadFiles": "下载 {{count}} 个文件",
|
||||
@@ -919,6 +1038,9 @@
|
||||
"deleteFiles": "删除 {{count}} 个项目",
|
||||
"filesCopiedToClipboard": "{{count}} 个项目已复制到剪贴板",
|
||||
"filesCutToClipboard": "{{count}} 个项目已剪切到剪贴板",
|
||||
"pathCopiedToClipboard": "路径已复制到剪贴板",
|
||||
"pathsCopiedToClipboard": "{{count}} 个路径已复制到剪贴板",
|
||||
"failedToCopyPath": "复制路径到剪贴板失败",
|
||||
"movedItems": "已移动 {{count}} 个项目",
|
||||
"unknownSize": "未知大小",
|
||||
"fileIsEmpty": "文件为空",
|
||||
@@ -1088,7 +1210,19 @@
|
||||
"sshConnectionFailed": "SSH 连接失败。请检查与 {{name}} ({{ip}}:{{port}}) 的连接",
|
||||
"loadFileFailed": "加载文件失败:{{error}}",
|
||||
"connectedSuccessfully": "连接成功",
|
||||
"totpVerificationFailed": "TOTP 验证失败"
|
||||
"totpVerificationFailed": "TOTP 验证失败",
|
||||
"changePermissions": "修改权限",
|
||||
"changePermissionsDesc": "修改文件权限",
|
||||
"currentPermissions": "当前权限",
|
||||
"newPermissions": "新权限",
|
||||
"owner": "所有者",
|
||||
"group": "组",
|
||||
"others": "其他",
|
||||
"read": "读取",
|
||||
"write": "写入",
|
||||
"execute": "执行",
|
||||
"permissionsChangedSuccessfully": "权限修改成功",
|
||||
"failedToChangePermissions": "权限修改失败"
|
||||
},
|
||||
"tunnels": {
|
||||
"title": "SSH 隧道",
|
||||
@@ -1199,9 +1333,21 @@
|
||||
"noInterfacesFound": "未找到网络接口",
|
||||
"totalProcesses": "总进程数",
|
||||
"running": "运行中",
|
||||
"noProcessesFound": "未找到进程"
|
||||
"noProcessesFound": "未找到进程",
|
||||
"loginStats": "SSH 登录统计",
|
||||
"totalLogins": "总登录次数",
|
||||
"uniqueIPs": "唯一 IP 数",
|
||||
"recentSuccessfulLogins": "最近成功登录",
|
||||
"recentFailedAttempts": "最近失败尝试",
|
||||
"noRecentLoginData": "无最近登录数据",
|
||||
"from": "来自"
|
||||
},
|
||||
"auth": {
|
||||
"tagline": "SSH 终端管理器",
|
||||
"description": "安全、强大、直观的 SSH 连接管理",
|
||||
"welcomeBack": "欢迎回到 TERMIX",
|
||||
"createAccount": "创建您的 TERMIX 账户",
|
||||
"continueExternal": "使用外部提供商继续",
|
||||
"loginTitle": "登录 Termix",
|
||||
"registerTitle": "创建账户",
|
||||
"loginButton": "登录",
|
||||
@@ -1367,6 +1513,10 @@
|
||||
"local": "本地",
|
||||
"external": "外部 (OIDC)",
|
||||
"selectPreferredLanguage": "选择您的界面首选语言",
|
||||
"fileColorCoding": "文件颜色编码",
|
||||
"fileColorCodingDesc": "按类型对文件进行颜色编码:文件夹(红色)、文件(蓝色)、符号链接(绿色)",
|
||||
"commandAutocomplete": "命令自动补全",
|
||||
"commandAutocompleteDesc": "启用基于命令历史记录的 Tab 键终端命令自动补全建议",
|
||||
"currentPassword": "当前密码",
|
||||
"passwordChangedSuccess": "密码修改成功!请重新登录。",
|
||||
"failedToChangePassword": "修改密码失败。请检查您当前的密码并重试。"
|
||||
@@ -1512,5 +1662,28 @@
|
||||
"cpu": "CPU",
|
||||
"ram": "内存",
|
||||
"notAvailable": "不可用"
|
||||
},
|
||||
"commandPalette": {
|
||||
"searchPlaceholder": "搜索主机或快速操作...",
|
||||
"recentActivity": "最近活动",
|
||||
"navigation": "导航",
|
||||
"addHost": "添加主机",
|
||||
"addCredential": "添加凭据",
|
||||
"adminSettings": "管理员设置",
|
||||
"userProfile": "用户资料",
|
||||
"updateLog": "更新日志",
|
||||
"hosts": "主机",
|
||||
"openServerDetails": "打开服务器详情",
|
||||
"openFileManager": "打开文件管理器",
|
||||
"edit": "编辑",
|
||||
"links": "链接",
|
||||
"github": "GitHub",
|
||||
"support": "支持",
|
||||
"discord": "Discord",
|
||||
"donate": "捐赠",
|
||||
"press": "按下",
|
||||
"toToggle": "来切换",
|
||||
"close": "关闭",
|
||||
"hostManager": "主机管理器"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user