* feat: add robust OSC 52 clipboard support for tmux/SSH clipboard sync (#587)

Upgrade @xterm/addon-clipboard to v0.2.0 and add a custom
RobustClipboardProvider that handles browser Clipboard API focus
restrictions by deferring writes until the window regains focus.
Uses Electron native clipboard when available for reliable access
without browser API limitations.

Changes:
- Create src/lib/clipboard-provider.ts with write-only provider
- Update all terminal components (desktop, mobile, docker console)
- Add electronClipboard bridge in Electron preload
- Add clipboard permission handler in Electron main process

* chore: remove translations

* feat: add 5-panel and 6-panel split screen layouts (#584)

* Temporary merge for 1.11.1 syncing (#543)

* fix: remote translations

* feat: support OIDC configuration via environment variables (#531)

* Feature request network graph

* Fixing PR442:

- Fixed:
    - UI design elemets
    - UI and button colors
    - JSON export
    - recent activity is default again
- Removed:
    - Online/Offline UI labels
    - left-click menu on hosts
- Added:
    - small pulsing dot inside the hosts to indicate online status like in the left bar

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

* Handle enter button (#481)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* Add handle on enter button;

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: remove top tech

* fix: update readme

* fix: prevent long container names from overflowing card (#496)

Added min-w-0 to CardTitle to allow text truncation in flexbox.
Without this, flex items have min-width: auto which prevents
the truncate class from working properly.

Fixes #411

* fix: use SFTP readdir for file listing to support non-Linux systems (#495)

The file manager now uses SFTP readdir as the primary method for
listing files, with ls -la as a fallback. This enables compatibility
with MikroTik RouterOS and other non-Linux systems that don't have
standard shell commands.

Fixes #317

* fix: restore SSH connection timeout to 120s for 2FA authentication (#494)

The timeout was reduced from 120s to 30s in v1.10, causing 2FA login
failures. Users with keyboard-interactive authentication (TOTP/2FA)
need sufficient time to enter their verification codes before the
SSH connection times out.

Fixes #404

* feat: add Docker container healthcheck (#493)

* fix: owner should not be marked as shared when host is shared to their role (#492)

* fix: use correct MIME types for image preview (#491)

* fix: prevent session reset when updating host properties (#490)

* fix: add shell creation timeout and improve error handling (#489)

* fix: set default lineHeight to 1.0 for TUI apps compatibility (#488)

* fix: delete all related data when removing user (#487)

* fix: nginx permission denied on restricted kernels (#486)

* fix: skip existing hosts and credentials during JSON import (#485)

Added duplicate detection for SSH hosts (by ip+port+username) and
credentials (by name) during import. Existing items are now skipped
by default, or updated if replaceExisting option is enabled.

This matches the existing behavior of importDismissedAlerts.

Fixes #389

* feat: add firewall status widget for server stats (#484)

* Feature: PWA (#479)

* feat: add PWA support with offline capabilities

- Add web app manifest with icons and theme configuration
- Add service worker with cache-first strategy for static assets
- Add useServiceWorker hook for SW registration
- Add PWA meta tags and Apple-specific tags to index.html
- Update vite.config.ts for optimal asset caching

* Update package-lock.json

* New Crowdin updates (#472)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* feat: add listening ports widget for server stats (#483)

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix network stats merge and add openapi jsdocs comments

* feat: add workflow/config to auto generate openapi json

* feat: remove locales

* feat: support URL routes to open terminal directly (#156) (#503)

* fix: resolve merge conflict artifacts in dev-1.10.1

- Fix missing closing tags in AppView.tsx NetworkGraphView
- Fix incomplete catch blocks in server-stats.ts and db/index.ts
- Fix missing closing brace in en.json ports section
- Fix HostManagerApp.tsx import path
- Fix stats-widgets.ts type definition
- Fix schema.ts networkTopology table definition
- Add type annotations in user-data-import.ts

* feat: support URL routes to open terminal directly (#156)

- Add /terminal/{hostNameOrId} route for new format
- Keep /hosts/{id}/terminal for backward compatibility
- Smart detection: numeric IDs for ID lookup, otherwise name lookup
- Clean URL after opening to prevent duplicate on refresh
- Show toast error when host not found

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501)

Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal.
This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>.

- Ctrl+Alt+W → Ctrl+W (nano search, delete word)
- Ctrl+Alt+T → Ctrl+T (transpose chars)
- Ctrl+Alt+N → Ctrl+N (next line)
- Ctrl+Alt+Q → Ctrl+Q (XON flow control)

Fixes Termix-SSH/Support#407

* feat: remove locales

* New Crowdin updates (#504)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* feat: add option to disable update checker (#502)

* feat: add option to disable update checker

Add a new setting in User Profile > Settings to disable automatic
update checking on startup and dashboard.

- Adds 'Disable Update Check' toggle in profile settings
- Skips GitHub API calls when disabled (reduces network requests)
- Works for both web app and Electron client

Fixes Termix-SSH/Support#410

* feat: remove locales

---------

Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* New Crowdin updates (#505)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* feat: add crowdin i18n

* feat: remove locales

* New Crowdin updates (#506)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Bengali)

* New translations en.json (Thai)

* feat: update readme

* feat: update readme

* feat: update credential editor to use submitting system and add health monitor

* feat: added toggle for command pallete

* feat: added close button on tab dropdown

* feat: added sidebar management and improved some host manager UI/UX

* feat: re-added missing users.ts route from merge

* feat: add toggle for password reset feature in admin settings (#508)

* feat: add sudo support for file manager operations (#509)

* fix: add sudo support for listFiles and improve permission error handling (#512)

* feat: add sudo support for file manager operations

* fix: add sudo support for listFiles and improve permission error handling

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated

* feat: add copy password button and fixed new line carriage issues and backend crash for auth key

* feat: added quick connection system (ad-hoc)

* Enter Key for Quick Login (#513)

* feat: added -r and -l support for tunnels

* feat: begin dashboard overhaul by splitting into cards and adding customization

* feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc.

* feat: add auth.tsx suppot for fullscreen

* feat: greatly improve network graph ui/ux and migrated to use translations and theme system

* feat: update to use blacksmith

* feat: improve ui for customized tabs and hide add/edit host/credential when submiting

* feat: add warpgate support with a dialog (terminal only)

* feat: expand warpgate to docker/file manager

* fix: docker not working wtih warpgate and none auth failing for terminal

* fix: prevent owner permission loss when sharing host to own role (#514)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* fix: prevent owner permission loss when sharing host to own role

Fixes #391

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: SSH key passphrase not passed for Docker and Tunnel (#521)

* perf: optimize Host Manager for large host lists

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

* fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel

Database field is `key_password` but code used `keyPassword`.
Added fallback to check both field names.

Affected:
- docker.ts: Docker SSH connections with encrypted keys
- tunnel.ts: Tunnel connections with encrypted keys

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* perf: optimize Host Manager for large host lists (#520)

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* fix: add missing mimeTypes definition for image preview (#518)

Fixes Termix-SSH/Support#408

* fix: prevent session reset when updating host properties (#517)

Move WebSocket cleanup logic to a separate unmount-only effect to
prevent SSH sessions from being closed when host properties are updated.

Closes Termix-SSH/Support#401

* fix: backend type error

* feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385)

* feat: improved conneciton log ui/logic

* feat: improved conneciton log ui/logic

* feat: expanded connection log to work across all components (readying for release)

* feat: update readme

* feat: update readme

* fix: build error

* fix: build error

* fix: changed ver

* chore: clean up

* chore: continue clean up

* fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies

* fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field

* fix: update readme and run cleaner

* fix: update readme

* fix: update readme

* fix: update readme

* feat: update chinese readme

* feat: support OIDC configuration via environment variables

Add support for configuring OIDC authentication through environment
variables, enabling containerized deployments without database access:

- OIDC_CLIENT_ID
- OIDC_CLIENT_SECRET
- OIDC_ISSUER_URL
- OIDC_AUTHORIZATION_URL
- OIDC_TOKEN_URL
- OIDC_USERINFO_URL (optional)
- OIDC_IDENTIFIER_PATH (optional, default: "sub")
- OIDC_NAME_PATH (optional, default: "name")
- OIDC_SCOPES (optional, default: "openid email profile")

Environment variables take priority over database configuration.

Closes Termix-SSH/Support#16

---------

Co-authored-by: Steven Josefs <s.josefs@gmx.de>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com>

* feat: add modern DH group KEX algorithms for better compatibility (#530)

* Feature request network graph

* Fixing PR442:

- Fixed:
    - UI design elemets
    - UI and button colors
    - JSON export
    - recent activity is default again
- Removed:
    - Online/Offline UI labels
    - left-click menu on hosts
- Added:
    - small pulsing dot inside the hosts to indicate online status like in the left bar

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

* Handle enter button (#481)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* Add handle on enter button;

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: remove top tech

* fix: update readme

* fix: prevent long container names from overflowing card (#496)

Added min-w-0 to CardTitle to allow text truncation in flexbox.
Without this, flex items have min-width: auto which prevents
the truncate class from working properly.

Fixes #411

* fix: use SFTP readdir for file listing to support non-Linux systems (#495)

The file manager now uses SFTP readdir as the primary method for
listing files, with ls -la as a fallback. This enables compatibility
with MikroTik RouterOS and other non-Linux systems that don't have
standard shell commands.

Fixes #317

* fix: restore SSH connection timeout to 120s for 2FA authentication (#494)

The timeout was reduced from 120s to 30s in v1.10, causing 2FA login
failures. Users with keyboard-interactive authentication (TOTP/2FA)
need sufficient time to enter their verification codes before the
SSH connection times out.

Fixes #404

* feat: add Docker container healthcheck (#493)

* fix: owner should not be marked as shared when host is shared to their role (#492)

* fix: use correct MIME types for image preview (#491)

* fix: prevent session reset when updating host properties (#490)

* fix: add shell creation timeout and improve error handling (#489)

* fix: set default lineHeight to 1.0 for TUI apps compatibility (#488)

* fix: delete all related data when removing user (#487)

* fix: nginx permission denied on restricted kernels (#486)

* fix: skip existing hosts and credentials during JSON import (#485)

Added duplicate detection for SSH hosts (by ip+port+username) and
credentials (by name) during import. Existing items are now skipped
by default, or updated if replaceExisting option is enabled.

This matches the existing behavior of importDismissedAlerts.

Fixes #389

* feat: add firewall status widget for server stats (#484)

* Feature: PWA (#479)

* feat: add PWA support with offline capabilities

- Add web app manifest with icons and theme configuration
- Add service worker with cache-first strategy for static assets
- Add useServiceWorker hook for SW registration
- Add PWA meta tags and Apple-specific tags to index.html
- Update vite.config.ts for optimal asset caching

* Update package-lock.json

* New Crowdin updates (#472)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* feat: add listening ports widget for server stats (#483)

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix network stats merge and add openapi jsdocs comments

* feat: add workflow/config to auto generate openapi json

* feat: remove locales

* feat: support URL routes to open terminal directly (#156) (#503)

* fix: resolve merge conflict artifacts in dev-1.10.1

- Fix missing closing tags in AppView.tsx NetworkGraphView
- Fix incomplete catch blocks in server-stats.ts and db/index.ts
- Fix missing closing brace in en.json ports section
- Fix HostManagerApp.tsx import path
- Fix stats-widgets.ts type definition
- Fix schema.ts networkTopology table definition
- Add type annotations in user-data-import.ts

* feat: support URL routes to open terminal directly (#156)

- Add /terminal/{hostNameOrId} route for new format
- Keep /hosts/{id}/terminal for backward compatibility
- Smart detection: numeric IDs for ID lookup, otherwise name lookup
- Clean URL after opening to prevent duplicate on refresh
- Show toast error when host not found

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501)

Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal.
This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>.

- Ctrl+Alt+W → Ctrl+W (nano search, delete word)
- Ctrl+Alt+T → Ctrl+T (transpose chars)
- Ctrl+Alt+N → Ctrl+N (next line)
- Ctrl+Alt+Q → Ctrl+Q (XON flow control)

Fixes Termix-SSH/Support#407

* feat: remove locales

* New Crowdin updates (#504)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* feat: add option to disable update checker (#502)

* feat: add option to disable update checker

Add a new setting in User Profile > Settings to disable automatic
update checking on startup and dashboard.

- Adds 'Disable Update Check' toggle in profile settings
- Skips GitHub API calls when disabled (reduces network requests)
- Works for both web app and Electron client

Fixes Termix-SSH/Support#410

* feat: remove locales

---------

Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* New Crowdin updates (#505)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* feat: add crowdin i18n

* feat: remove locales

* New Crowdin updates (#506)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Bengali)

* New translations en.json (Thai)

* feat: update readme

* feat: update readme

* feat: update credential editor to use submitting system and add health monitor

* feat: added toggle for command pallete

* feat: added close button on tab dropdown

* feat: added sidebar management and improved some host manager UI/UX

* feat: re-added missing users.ts route from merge

* feat: add toggle for password reset feature in admin settings (#508)

* feat: add sudo support for file manager operations (#509)

* fix: add sudo support for listFiles and improve permission error handling (#512)

* feat: add sudo support for file manager operations

* fix: add sudo support for listFiles and improve permission error handling

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated

* feat: add copy password button and fixed new line carriage issues and backend crash for auth key

* feat: added quick connection system (ad-hoc)

* Enter Key for Quick Login (#513)

* feat: added -r and -l support for tunnels

* feat: begin dashboard overhaul by splitting into cards and adding customization

* feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc.

* feat: add auth.tsx suppot for fullscreen

* feat: greatly improve network graph ui/ux and migrated to use translations and theme system

* feat: update to use blacksmith

* feat: improve ui for customized tabs and hide add/edit host/credential when submiting

* feat: add warpgate support with a dialog (terminal only)

* feat: expand warpgate to docker/file manager

* fix: docker not working wtih warpgate and none auth failing for terminal

* fix: prevent owner permission loss when sharing host to own role (#514)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* fix: prevent owner permission loss when sharing host to own role

Fixes #391

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: SSH key passphrase not passed for Docker and Tunnel (#521)

* perf: optimize Host Manager for large host lists

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

* fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel

Database field is `key_password` but code used `keyPassword`.
Added fallback to check both field names.

Affected:
- docker.ts: Docker SSH connections with encrypted keys
- tunnel.ts: Tunnel connections with encrypted keys

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* perf: optimize Host Manager for large host lists (#520)

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* fix: add missing mimeTypes definition for image preview (#518)

Fixes Termix-SSH/Support#408

* fix: prevent session reset when updating host properties (#517)

Move WebSocket cleanup logic to a separate unmount-only effect to
prevent SSH sessions from being closed when host properties are updated.

Closes Termix-SSH/Support#401

* fix: backend type error

* feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385)

* feat: improved conneciton log ui/logic

* feat: improved conneciton log ui/logic

* feat: expanded connection log to work across all components (readying for release)

* feat: update readme

* feat: update readme

* fix: build error

* fix: build error

* fix: changed ver

* chore: clean up

* chore: continue clean up

* fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies

* fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field

* fix: update readme and run cleaner

* fix: update readme

* fix: update readme

* fix: update readme

* feat: update chinese readme

* feat: add modern DH group KEX algorithms for better compatibility

Add diffie-hellman-group15/16/17/18-sha512 key exchange algorithms
which are supported by ssh2 library but were not configured in Termix.

These algorithms provide:
- Better compatibility with modern SSH servers (FreeBSD, OpenBSD, etc.)
- Stronger security with larger DH groups
- RFC 8268 compliance

Related to Termix-SSH/Support#205

---------

Co-authored-by: Steven Josefs <s.josefs@gmx.de>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com>

* feat: clarify that hostname/FQDN is supported in IP address field (#529)

* Feature request network graph

* Fixing PR442:

- Fixed:
    - UI design elemets
    - UI and button colors
    - JSON export
    - recent activity is default again
- Removed:
    - Online/Offline UI labels
    - left-click menu on hosts
- Added:
    - small pulsing dot inside the hosts to indicate online status like in the left bar

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

* Handle enter button (#481)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* Add handle on enter button;

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: remove top tech

* fix: update readme

* fix: prevent long container names from overflowing card (#496)

Added min-w-0 to CardTitle to allow text truncation in flexbox.
Without this, flex items have min-width: auto which prevents
the truncate class from working properly.

Fixes #411

* fix: use SFTP readdir for file listing to support non-Linux systems (#495)

The file manager now uses SFTP readdir as the primary method for
listing files, with ls -la as a fallback. This enables compatibility
with MikroTik RouterOS and other non-Linux systems that don't have
standard shell commands.

Fixes #317

* fix: restore SSH connection timeout to 120s for 2FA authentication (#494)

The timeout was reduced from 120s to 30s in v1.10, causing 2FA login
failures. Users with keyboard-interactive authentication (TOTP/2FA)
need sufficient time to enter their verification codes before the
SSH connection times out.

Fixes #404

* feat: add Docker container healthcheck (#493)

* fix: owner should not be marked as shared when host is shared to their role (#492)

* fix: use correct MIME types for image preview (#491)

* fix: prevent session reset when updating host properties (#490)

* fix: add shell creation timeout and improve error handling (#489)

* fix: set default lineHeight to 1.0 for TUI apps compatibility (#488)

* fix: delete all related data when removing user (#487)

* fix: nginx permission denied on restricted kernels (#486)

* fix: skip existing hosts and credentials during JSON import (#485)

Added duplicate detection for SSH hosts (by ip+port+username) and
credentials (by name) during import. Existing items are now skipped
by default, or updated if replaceExisting option is enabled.

This matches the existing behavior of importDismissedAlerts.

Fixes #389

* feat: add firewall status widget for server stats (#484)

* Feature: PWA (#479)

* feat: add PWA support with offline capabilities

- Add web app manifest with icons and theme configuration
- Add service worker with cache-first strategy for static assets
- Add useServiceWorker hook for SW registration
- Add PWA meta tags and Apple-specific tags to index.html
- Update vite.config.ts for optimal asset caching

* Update package-lock.json

* New Crowdin updates (#472)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* feat: add listening ports widget for server stats (#483)

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix network stats merge and add openapi jsdocs comments

* feat: add workflow/config to auto generate openapi json

* feat: remove locales

* feat: support URL routes to open…

* feat: show terminal title in tab name (#579)

* Temporary merge for 1.11.1 syncing (#543)

* fix: remote translations

* feat: support OIDC configuration via environment variables (#531)

* Feature request network graph

* Fixing PR442:

- Fixed:
    - UI design elemets
    - UI and button colors
    - JSON export
    - recent activity is default again
- Removed:
    - Online/Offline UI labels
    - left-click menu on hosts
- Added:
    - small pulsing dot inside the hosts to indicate online status like in the left bar

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

* Handle enter button (#481)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* Add handle on enter button;

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: remove top tech

* fix: update readme

* fix: prevent long container names from overflowing card (#496)

Added min-w-0 to CardTitle to allow text truncation in flexbox.
Without this, flex items have min-width: auto which prevents
the truncate class from working properly.

Fixes #411

* fix: use SFTP readdir for file listing to support non-Linux systems (#495)

The file manager now uses SFTP readdir as the primary method for
listing files, with ls -la as a fallback. This enables compatibility
with MikroTik RouterOS and other non-Linux systems that don't have
standard shell commands.

Fixes #317

* fix: restore SSH connection timeout to 120s for 2FA authentication (#494)

The timeout was reduced from 120s to 30s in v1.10, causing 2FA login
failures. Users with keyboard-interactive authentication (TOTP/2FA)
need sufficient time to enter their verification codes before the
SSH connection times out.

Fixes #404

* feat: add Docker container healthcheck (#493)

* fix: owner should not be marked as shared when host is shared to their role (#492)

* fix: use correct MIME types for image preview (#491)

* fix: prevent session reset when updating host properties (#490)

* fix: add shell creation timeout and improve error handling (#489)

* fix: set default lineHeight to 1.0 for TUI apps compatibility (#488)

* fix: delete all related data when removing user (#487)

* fix: nginx permission denied on restricted kernels (#486)

* fix: skip existing hosts and credentials during JSON import (#485)

Added duplicate detection for SSH hosts (by ip+port+username) and
credentials (by name) during import. Existing items are now skipped
by default, or updated if replaceExisting option is enabled.

This matches the existing behavior of importDismissedAlerts.

Fixes #389

* feat: add firewall status widget for server stats (#484)

* Feature: PWA (#479)

* feat: add PWA support with offline capabilities

- Add web app manifest with icons and theme configuration
- Add service worker with cache-first strategy for static assets
- Add useServiceWorker hook for SW registration
- Add PWA meta tags and Apple-specific tags to index.html
- Update vite.config.ts for optimal asset caching

* Update package-lock.json

* New Crowdin updates (#472)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* feat: add listening ports widget for server stats (#483)

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix network stats merge and add openapi jsdocs comments

* feat: add workflow/config to auto generate openapi json

* feat: remove locales

* feat: support URL routes to open terminal directly (#156) (#503)

* fix: resolve merge conflict artifacts in dev-1.10.1

- Fix missing closing tags in AppView.tsx NetworkGraphView
- Fix incomplete catch blocks in server-stats.ts and db/index.ts
- Fix missing closing brace in en.json ports section
- Fix HostManagerApp.tsx import path
- Fix stats-widgets.ts type definition
- Fix schema.ts networkTopology table definition
- Add type annotations in user-data-import.ts

* feat: support URL routes to open terminal directly (#156)

- Add /terminal/{hostNameOrId} route for new format
- Keep /hosts/{id}/terminal for backward compatibility
- Smart detection: numeric IDs for ID lookup, otherwise name lookup
- Clean URL after opening to prevent duplicate on refresh
- Show toast error when host not found

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501)

Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal.
This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>.

- Ctrl+Alt+W → Ctrl+W (nano search, delete word)
- Ctrl+Alt+T → Ctrl+T (transpose chars)
- Ctrl+Alt+N → Ctrl+N (next line)
- Ctrl+Alt+Q → Ctrl+Q (XON flow control)

Fixes Termix-SSH/Support#407

* feat: remove locales

* New Crowdin updates (#504)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* feat: add option to disable update checker (#502)

* feat: add option to disable update checker

Add a new setting in User Profile > Settings to disable automatic
update checking on startup and dashboard.

- Adds 'Disable Update Check' toggle in profile settings
- Skips GitHub API calls when disabled (reduces network requests)
- Works for both web app and Electron client

Fixes Termix-SSH/Support#410

* feat: remove locales

---------

Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* New Crowdin updates (#505)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* feat: add crowdin i18n

* feat: remove locales

* New Crowdin updates (#506)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Bengali)

* New translations en.json (Thai)

* feat: update readme

* feat: update readme

* feat: update credential editor to use submitting system and add health monitor

* feat: added toggle for command pallete

* feat: added close button on tab dropdown

* feat: added sidebar management and improved some host manager UI/UX

* feat: re-added missing users.ts route from merge

* feat: add toggle for password reset feature in admin settings (#508)

* feat: add sudo support for file manager operations (#509)

* fix: add sudo support for listFiles and improve permission error handling (#512)

* feat: add sudo support for file manager operations

* fix: add sudo support for listFiles and improve permission error handling

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated

* feat: add copy password button and fixed new line carriage issues and backend crash for auth key

* feat: added quick connection system (ad-hoc)

* Enter Key for Quick Login (#513)

* feat: added -r and -l support for tunnels

* feat: begin dashboard overhaul by splitting into cards and adding customization

* feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc.

* feat: add auth.tsx suppot for fullscreen

* feat: greatly improve network graph ui/ux and migrated to use translations and theme system

* feat: update to use blacksmith

* feat: improve ui for customized tabs and hide add/edit host/credential when submiting

* feat: add warpgate support with a dialog (terminal only)

* feat: expand warpgate to docker/file manager

* fix: docker not working wtih warpgate and none auth failing for terminal

* fix: prevent owner permission loss when sharing host to own role (#514)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* fix: prevent owner permission loss when sharing host to own role

Fixes #391

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: SSH key passphrase not passed for Docker and Tunnel (#521)

* perf: optimize Host Manager for large host lists

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

* fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel

Database field is `key_password` but code used `keyPassword`.
Added fallback to check both field names.

Affected:
- docker.ts: Docker SSH connections with encrypted keys
- tunnel.ts: Tunnel connections with encrypted keys

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* perf: optimize Host Manager for large host lists (#520)

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* fix: add missing mimeTypes definition for image preview (#518)

Fixes Termix-SSH/Support#408

* fix: prevent session reset when updating host properties (#517)

Move WebSocket cleanup logic to a separate unmount-only effect to
prevent SSH sessions from being closed when host properties are updated.

Closes Termix-SSH/Support#401

* fix: backend type error

* feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385)

* feat: improved conneciton log ui/logic

* feat: improved conneciton log ui/logic

* feat: expanded connection log to work across all components (readying for release)

* feat: update readme

* feat: update readme

* fix: build error

* fix: build error

* fix: changed ver

* chore: clean up

* chore: continue clean up

* fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies

* fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field

* fix: update readme and run cleaner

* fix: update readme

* fix: update readme

* fix: update readme

* feat: update chinese readme

* feat: support OIDC configuration via environment variables

Add support for configuring OIDC authentication through environment
variables, enabling containerized deployments without database access:

- OIDC_CLIENT_ID
- OIDC_CLIENT_SECRET
- OIDC_ISSUER_URL
- OIDC_AUTHORIZATION_URL
- OIDC_TOKEN_URL
- OIDC_USERINFO_URL (optional)
- OIDC_IDENTIFIER_PATH (optional, default: "sub")
- OIDC_NAME_PATH (optional, default: "name")
- OIDC_SCOPES (optional, default: "openid email profile")

Environment variables take priority over database configuration.

Closes Termix-SSH/Support#16

---------

Co-authored-by: Steven Josefs <s.josefs@gmx.de>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com>

* feat: add modern DH group KEX algorithms for better compatibility (#530)

* Feature request network graph

* Fixing PR442:

- Fixed:
    - UI design elemets
    - UI and button colors
    - JSON export
    - recent activity is default again
- Removed:
    - Online/Offline UI labels
    - left-click menu on hosts
- Added:
    - small pulsing dot inside the hosts to indicate online status like in the left bar

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

* Handle enter button (#481)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* Add handle on enter button;

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: remove top tech

* fix: update readme

* fix: prevent long container names from overflowing card (#496)

Added min-w-0 to CardTitle to allow text truncation in flexbox.
Without this, flex items have min-width: auto which prevents
the truncate class from working properly.

Fixes #411

* fix: use SFTP readdir for file listing to support non-Linux systems (#495)

The file manager now uses SFTP readdir as the primary method for
listing files, with ls -la as a fallback. This enables compatibility
with MikroTik RouterOS and other non-Linux systems that don't have
standard shell commands.

Fixes #317

* fix: restore SSH connection timeout to 120s for 2FA authentication (#494)

The timeout was reduced from 120s to 30s in v1.10, causing 2FA login
failures. Users with keyboard-interactive authentication (TOTP/2FA)
need sufficient time to enter their verification codes before the
SSH connection times out.

Fixes #404

* feat: add Docker container healthcheck (#493)

* fix: owner should not be marked as shared when host is shared to their role (#492)

* fix: use correct MIME types for image preview (#491)

* fix: prevent session reset when updating host properties (#490)

* fix: add shell creation timeout and improve error handling (#489)

* fix: set default lineHeight to 1.0 for TUI apps compatibility (#488)

* fix: delete all related data when removing user (#487)

* fix: nginx permission denied on restricted kernels (#486)

* fix: skip existing hosts and credentials during JSON import (#485)

Added duplicate detection for SSH hosts (by ip+port+username) and
credentials (by name) during import. Existing items are now skipped
by default, or updated if replaceExisting option is enabled.

This matches the existing behavior of importDismissedAlerts.

Fixes #389

* feat: add firewall status widget for server stats (#484)

* Feature: PWA (#479)

* feat: add PWA support with offline capabilities

- Add web app manifest with icons and theme configuration
- Add service worker with cache-first strategy for static assets
- Add useServiceWorker hook for SW registration
- Add PWA meta tags and Apple-specific tags to index.html
- Update vite.config.ts for optimal asset caching

* Update package-lock.json

* New Crowdin updates (#472)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* feat: add listening ports widget for server stats (#483)

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix network stats merge and add openapi jsdocs comments

* feat: add workflow/config to auto generate openapi json

* feat: remove locales

* feat: support URL routes to open terminal directly (#156) (#503)

* fix: resolve merge conflict artifacts in dev-1.10.1

- Fix missing closing tags in AppView.tsx NetworkGraphView
- Fix incomplete catch blocks in server-stats.ts and db/index.ts
- Fix missing closing brace in en.json ports section
- Fix HostManagerApp.tsx import path
- Fix stats-widgets.ts type definition
- Fix schema.ts networkTopology table definition
- Add type annotations in user-data-import.ts

* feat: support URL routes to open terminal directly (#156)

- Add /terminal/{hostNameOrId} route for new format
- Keep /hosts/{id}/terminal for backward compatibility
- Smart detection: numeric IDs for ID lookup, otherwise name lookup
- Clean URL after opening to prevent duplicate on refresh
- Show toast error when host not found

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501)

Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal.
This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>.

- Ctrl+Alt+W → Ctrl+W (nano search, delete word)
- Ctrl+Alt+T → Ctrl+T (transpose chars)
- Ctrl+Alt+N → Ctrl+N (next line)
- Ctrl+Alt+Q → Ctrl+Q (XON flow control)

Fixes Termix-SSH/Support#407

* feat: remove locales

* New Crowdin updates (#504)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* feat: add option to disable update checker (#502)

* feat: add option to disable update checker

Add a new setting in User Profile > Settings to disable automatic
update checking on startup and dashboard.

- Adds 'Disable Update Check' toggle in profile settings
- Skips GitHub API calls when disabled (reduces network requests)
- Works for both web app and Electron client

Fixes Termix-SSH/Support#410

* feat: remove locales

---------

Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* New Crowdin updates (#505)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* feat: add crowdin i18n

* feat: remove locales

* New Crowdin updates (#506)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Bengali)

* New translations en.json (Thai)

* feat: update readme

* feat: update readme

* feat: update credential editor to use submitting system and add health monitor

* feat: added toggle for command pallete

* feat: added close button on tab dropdown

* feat: added sidebar management and improved some host manager UI/UX

* feat: re-added missing users.ts route from merge

* feat: add toggle for password reset feature in admin settings (#508)

* feat: add sudo support for file manager operations (#509)

* fix: add sudo support for listFiles and improve permission error handling (#512)

* feat: add sudo support for file manager operations

* fix: add sudo support for listFiles and improve permission error handling

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated

* feat: add copy password button and fixed new line carriage issues and backend crash for auth key

* feat: added quick connection system (ad-hoc)

* Enter Key for Quick Login (#513)

* feat: added -r and -l support for tunnels

* feat: begin dashboard overhaul by splitting into cards and adding customization

* feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc.

* feat: add auth.tsx suppot for fullscreen

* feat: greatly improve network graph ui/ux and migrated to use translations and theme system

* feat: update to use blacksmith

* feat: improve ui for customized tabs and hide add/edit host/credential when submiting

* feat: add warpgate support with a dialog (terminal only)

* feat: expand warpgate to docker/file manager

* fix: docker not working wtih warpgate and none auth failing for terminal

* fix: prevent owner permission loss when sharing host to own role (#514)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* fix: prevent owner permission loss when sharing host to own role

Fixes #391

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: SSH key passphrase not passed for Docker and Tunnel (#521)

* perf: optimize Host Manager for large host lists

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

* fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel

Database field is `key_password` but code used `keyPassword`.
Added fallback to check both field names.

Affected:
- docker.ts: Docker SSH connections with encrypted keys
- tunnel.ts: Tunnel connections with encrypted keys

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* perf: optimize Host Manager for large host lists (#520)

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* fix: add missing mimeTypes definition for image preview (#518)

Fixes Termix-SSH/Support#408

* fix: prevent session reset when updating host properties (#517)

Move WebSocket cleanup logic to a separate unmount-only effect to
prevent SSH sessions from being closed when host properties are updated.

Closes Termix-SSH/Support#401

* fix: backend type error

* feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385)

* feat: improved conneciton log ui/logic

* feat: improved conneciton log ui/logic

* feat: expanded connection log to work across all components (readying for release)

* feat: update readme

* feat: update readme

* fix: build error

* fix: build error

* fix: changed ver

* chore: clean up

* chore: continue clean up

* fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies

* fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field

* fix: update readme and run cleaner

* fix: update readme

* fix: update readme

* fix: update readme

* feat: update chinese readme

* feat: add modern DH group KEX algorithms for better compatibility

Add diffie-hellman-group15/16/17/18-sha512 key exchange algorithms
which are supported by ssh2 library but were not configured in Termix.

These algorithms provide:
- Better compatibility with modern SSH servers (FreeBSD, OpenBSD, etc.)
- Stronger security with larger DH groups
- RFC 8268 compliance

Related to Termix-SSH/Support#205

---------

Co-authored-by: Steven Josefs <s.josefs@gmx.de>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com>

* feat: clarify that hostname/FQDN is supported in IP address field (#529)

* Feature request network graph

* Fixing PR442:

- Fixed:
    - UI design elemets
    - UI and button colors
    - JSON export
    - recent activity is default again
- Removed:
    - Online/Offline UI labels
    - left-click menu on hosts
- Added:
    - small pulsing dot inside the hosts to indicate online status like in the left bar

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

* Handle enter button (#481)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* Add handle on enter button;

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: remove top tech

* fix: update readme

* fix: prevent long container names from overflowing card (#496)

Added min-w-0 to CardTitle to allow text truncation in flexbox.
Without this, flex items have min-width: auto which prevents
the truncate class from working properly.

Fixes #411

* fix: use SFTP readdir for file listing to support non-Linux systems (#495)

The file manager now uses SFTP readdir as the primary method for
listing files, with ls -la as a fallback. This enables compatibility
with MikroTik RouterOS and other non-Linux systems that don't have
standard shell commands.

Fixes #317

* fix: restore SSH connection timeout to 120s for 2FA authentication (#494)

The timeout was reduced from 120s to 30s in v1.10, causing 2FA login
failures. Users with keyboard-interactive authentication (TOTP/2FA)
need sufficient time to enter their verification codes before the
SSH connection times out.

Fixes #404

* feat: add Docker container healthcheck (#493)

* fix: owner should not be marked as shared when host is shared to their role (#492)

* fix: use correct MIME types for image preview (#491)

* fix: prevent session reset when updating host properties (#490)

* fix: add shell creation timeout and improve error handling (#489)

* fix: set default lineHeight to 1.0 for TUI apps compatibility (#488)

* fix: delete all related data when removing user (#487)

* fix: nginx permission denied on restricted kernels (#486)

* fix: skip existing hosts and credentials during JSON import (#485)

Added duplicate detection for SSH hosts (by ip+port+username) and
credentials (by name) during import. Existing items are now skipped
by default, or updated if replaceExisting option is enabled.

This matches the existing behavior of importDismissedAlerts.

Fixes #389

* feat: add firewall status widget for server stats (#484)

* Feature: PWA (#479)

* feat: add PWA support with offline capabilities

- Add web app manifest with icons and theme configuration
- Add service worker with cache-first strategy for static assets
- Add useServiceWorker hook for SW registration
- Add PWA meta tags and Apple-specific tags to index.html
- Update vite.config.ts for optimal asset caching

* Update package-lock.json

* New Crowdin updates (#472)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* feat: add listening ports widget for server stats (#483)

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix network stats merge and add openapi jsdocs comments

* feat: add workflow/config to auto generate openapi json

* feat: remove locales

* feat: support URL routes to open terminal dir…

* fix: allow OIDC JIT user creation when registration is disabled (#578)

* Temporary merge for 1.11.1 syncing (#543)

* fix: remote translations

* feat: support OIDC configuration via environment variables (#531)

* Feature request network graph

* Fixing PR442:

- Fixed:
    - UI design elemets
    - UI and button colors
    - JSON export
    - recent activity is default again
- Removed:
    - Online/Offline UI labels
    - left-click menu on hosts
- Added:
    - small pulsing dot inside the hosts to indicate online status like in the left bar

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

* Handle enter button (#481)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* Add handle on enter button;

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: remove top tech

* fix: update readme

* fix: prevent long container names from overflowing card (#496)

Added min-w-0 to CardTitle to allow text truncation in flexbox.
Without this, flex items have min-width: auto which prevents
the truncate class from working properly.

Fixes #411

* fix: use SFTP readdir for file listing to support non-Linux systems (#495)

The file manager now uses SFTP readdir as the primary method for
listing files, with ls -la as a fallback. This enables compatibility
with MikroTik RouterOS and other non-Linux systems that don't have
standard shell commands.

Fixes #317

* fix: restore SSH connection timeout to 120s for 2FA authentication (#494)

The timeout was reduced from 120s to 30s in v1.10, causing 2FA login
failures. Users with keyboard-interactive authentication (TOTP/2FA)
need sufficient time to enter their verification codes before the
SSH connection times out.

Fixes #404

* feat: add Docker container healthcheck (#493)

* fix: owner should not be marked as shared when host is shared to their role (#492)

* fix: use correct MIME types for image preview (#491)

* fix: prevent session reset when updating host properties (#490)

* fix: add shell creation timeout and improve error handling (#489)

* fix: set default lineHeight to 1.0 for TUI apps compatibility (#488)

* fix: delete all related data when removing user (#487)

* fix: nginx permission denied on restricted kernels (#486)

* fix: skip existing hosts and credentials during JSON import (#485)

Added duplicate detection for SSH hosts (by ip+port+username) and
credentials (by name) during import. Existing items are now skipped
by default, or updated if replaceExisting option is enabled.

This matches the existing behavior of importDismissedAlerts.

Fixes #389

* feat: add firewall status widget for server stats (#484)

* Feature: PWA (#479)

* feat: add PWA support with offline capabilities

- Add web app manifest with icons and theme configuration
- Add service worker with cache-first strategy for static assets
- Add useServiceWorker hook for SW registration
- Add PWA meta tags and Apple-specific tags to index.html
- Update vite.config.ts for optimal asset caching

* Update package-lock.json

* New Crowdin updates (#472)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* feat: add listening ports widget for server stats (#483)

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix network stats merge and add openapi jsdocs comments

* feat: add workflow/config to auto generate openapi json

* feat: remove locales

* feat: support URL routes to open terminal directly (#156) (#503)

* fix: resolve merge conflict artifacts in dev-1.10.1

- Fix missing closing tags in AppView.tsx NetworkGraphView
- Fix incomplete catch blocks in server-stats.ts and db/index.ts
- Fix missing closing brace in en.json ports section
- Fix HostManagerApp.tsx import path
- Fix stats-widgets.ts type definition
- Fix schema.ts networkTopology table definition
- Add type annotations in user-data-import.ts

* feat: support URL routes to open terminal directly (#156)

- Add /terminal/{hostNameOrId} route for new format
- Keep /hosts/{id}/terminal for backward compatibility
- Smart detection: numeric IDs for ID lookup, otherwise name lookup
- Clean URL after opening to prevent duplicate on refresh
- Show toast error when host not found

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501)

Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal.
This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>.

- Ctrl+Alt+W → Ctrl+W (nano search, delete word)
- Ctrl+Alt+T → Ctrl+T (transpose chars)
- Ctrl+Alt+N → Ctrl+N (next line)
- Ctrl+Alt+Q → Ctrl+Q (XON flow control)

Fixes Termix-SSH/Support#407

* feat: remove locales

* New Crowdin updates (#504)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* feat: add option to disable update checker (#502)

* feat: add option to disable update checker

Add a new setting in User Profile > Settings to disable automatic
update checking on startup and dashboard.

- Adds 'Disable Update Check' toggle in profile settings
- Skips GitHub API calls when disabled (reduces network requests)
- Works for both web app and Electron client

Fixes Termix-SSH/Support#410

* feat: remove locales

---------

Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* New Crowdin updates (#505)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* feat: add crowdin i18n

* feat: remove locales

* New Crowdin updates (#506)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Bengali)

* New translations en.json (Thai)

* feat: update readme

* feat: update readme

* feat: update credential editor to use submitting system and add health monitor

* feat: added toggle for command pallete

* feat: added close button on tab dropdown

* feat: added sidebar management and improved some host manager UI/UX

* feat: re-added missing users.ts route from merge

* feat: add toggle for password reset feature in admin settings (#508)

* feat: add sudo support for file manager operations (#509)

* fix: add sudo support for listFiles and improve permission error handling (#512)

* feat: add sudo support for file manager operations

* fix: add sudo support for listFiles and improve permission error handling

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated

* feat: add copy password button and fixed new line carriage issues and backend crash for auth key

* feat: added quick connection system (ad-hoc)

* Enter Key for Quick Login (#513)

* feat: added -r and -l support for tunnels

* feat: begin dashboard overhaul by splitting into cards and adding customization

* feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc.

* feat: add auth.tsx suppot for fullscreen

* feat: greatly improve network graph ui/ux and migrated to use translations and theme system

* feat: update to use blacksmith

* feat: improve ui for customized tabs and hide add/edit host/credential when submiting

* feat: add warpgate support with a dialog (terminal only)

* feat: expand warpgate to docker/file manager

* fix: docker not working wtih warpgate and none auth failing for terminal

* fix: prevent owner permission loss when sharing host to own role (#514)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* fix: prevent owner permission loss when sharing host to own role

Fixes #391

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: SSH key passphrase not passed for Docker and Tunnel (#521)

* perf: optimize Host Manager for large host lists

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

* fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel

Database field is `key_password` but code used `keyPassword`.
Added fallback to check both field names.

Affected:
- docker.ts: Docker SSH connections with encrypted keys
- tunnel.ts: Tunnel connections with encrypted keys

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* perf: optimize Host Manager for large host lists (#520)

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* fix: add missing mimeTypes definition for image preview (#518)

Fixes Termix-SSH/Support#408

* fix: prevent session reset when updating host properties (#517)

Move WebSocket cleanup logic to a separate unmount-only effect to
prevent SSH sessions from being closed when host properties are updated.

Closes Termix-SSH/Support#401

* fix: backend type error

* feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385)

* feat: improved conneciton log ui/logic

* feat: improved conneciton log ui/logic

* feat: expanded connection log to work across all components (readying for release)

* feat: update readme

* feat: update readme

* fix: build error

* fix: build error

* fix: changed ver

* chore: clean up

* chore: continue clean up

* fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies

* fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field

* fix: update readme and run cleaner

* fix: update readme

* fix: update readme

* fix: update readme

* feat: update chinese readme

* feat: support OIDC configuration via environment variables

Add support for configuring OIDC authentication through environment
variables, enabling containerized deployments without database access:

- OIDC_CLIENT_ID
- OIDC_CLIENT_SECRET
- OIDC_ISSUER_URL
- OIDC_AUTHORIZATION_URL
- OIDC_TOKEN_URL
- OIDC_USERINFO_URL (optional)
- OIDC_IDENTIFIER_PATH (optional, default: "sub")
- OIDC_NAME_PATH (optional, default: "name")
- OIDC_SCOPES (optional, default: "openid email profile")

Environment variables take priority over database configuration.

Closes Termix-SSH/Support#16

---------

Co-authored-by: Steven Josefs <s.josefs@gmx.de>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com>

* feat: add modern DH group KEX algorithms for better compatibility (#530)

* Feature request network graph

* Fixing PR442:

- Fixed:
    - UI design elemets
    - UI and button colors
    - JSON export
    - recent activity is default again
- Removed:
    - Online/Offline UI labels
    - left-click menu on hosts
- Added:
    - small pulsing dot inside the hosts to indicate online status like in the left bar

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

* Handle enter button (#481)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* Add handle on enter button;

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: remove top tech

* fix: update readme

* fix: prevent long container names from overflowing card (#496)

Added min-w-0 to CardTitle to allow text truncation in flexbox.
Without this, flex items have min-width: auto which prevents
the truncate class from working properly.

Fixes #411

* fix: use SFTP readdir for file listing to support non-Linux systems (#495)

The file manager now uses SFTP readdir as the primary method for
listing files, with ls -la as a fallback. This enables compatibility
with MikroTik RouterOS and other non-Linux systems that don't have
standard shell commands.

Fixes #317

* fix: restore SSH connection timeout to 120s for 2FA authentication (#494)

The timeout was reduced from 120s to 30s in v1.10, causing 2FA login
failures. Users with keyboard-interactive authentication (TOTP/2FA)
need sufficient time to enter their verification codes before the
SSH connection times out.

Fixes #404

* feat: add Docker container healthcheck (#493)

* fix: owner should not be marked as shared when host is shared to their role (#492)

* fix: use correct MIME types for image preview (#491)

* fix: prevent session reset when updating host properties (#490)

* fix: add shell creation timeout and improve error handling (#489)

* fix: set default lineHeight to 1.0 for TUI apps compatibility (#488)

* fix: delete all related data when removing user (#487)

* fix: nginx permission denied on restricted kernels (#486)

* fix: skip existing hosts and credentials during JSON import (#485)

Added duplicate detection for SSH hosts (by ip+port+username) and
credentials (by name) during import. Existing items are now skipped
by default, or updated if replaceExisting option is enabled.

This matches the existing behavior of importDismissedAlerts.

Fixes #389

* feat: add firewall status widget for server stats (#484)

* Feature: PWA (#479)

* feat: add PWA support with offline capabilities

- Add web app manifest with icons and theme configuration
- Add service worker with cache-first strategy for static assets
- Add useServiceWorker hook for SW registration
- Add PWA meta tags and Apple-specific tags to index.html
- Update vite.config.ts for optimal asset caching

* Update package-lock.json

* New Crowdin updates (#472)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* feat: add listening ports widget for server stats (#483)

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix network stats merge and add openapi jsdocs comments

* feat: add workflow/config to auto generate openapi json

* feat: remove locales

* feat: support URL routes to open terminal directly (#156) (#503)

* fix: resolve merge conflict artifacts in dev-1.10.1

- Fix missing closing tags in AppView.tsx NetworkGraphView
- Fix incomplete catch blocks in server-stats.ts and db/index.ts
- Fix missing closing brace in en.json ports section
- Fix HostManagerApp.tsx import path
- Fix stats-widgets.ts type definition
- Fix schema.ts networkTopology table definition
- Add type annotations in user-data-import.ts

* feat: support URL routes to open terminal directly (#156)

- Add /terminal/{hostNameOrId} route for new format
- Keep /hosts/{id}/terminal for backward compatibility
- Smart detection: numeric IDs for ID lookup, otherwise name lookup
- Clean URL after opening to prevent duplicate on refresh
- Show toast error when host not found

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501)

Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal.
This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>.

- Ctrl+Alt+W → Ctrl+W (nano search, delete word)
- Ctrl+Alt+T → Ctrl+T (transpose chars)
- Ctrl+Alt+N → Ctrl+N (next line)
- Ctrl+Alt+Q → Ctrl+Q (XON flow control)

Fixes Termix-SSH/Support#407

* feat: remove locales

* New Crowdin updates (#504)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* feat: add option to disable update checker (#502)

* feat: add option to disable update checker

Add a new setting in User Profile > Settings to disable automatic
update checking on startup and dashboard.

- Adds 'Disable Update Check' toggle in profile settings
- Skips GitHub API calls when disabled (reduces network requests)
- Works for both web app and Electron client

Fixes Termix-SSH/Support#410

* feat: remove locales

---------

Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* New Crowdin updates (#505)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* feat: add crowdin i18n

* feat: remove locales

* New Crowdin updates (#506)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Bengali)

* New translations en.json (Thai)

* feat: update readme

* feat: update readme

* feat: update credential editor to use submitting system and add health monitor

* feat: added toggle for command pallete

* feat: added close button on tab dropdown

* feat: added sidebar management and improved some host manager UI/UX

* feat: re-added missing users.ts route from merge

* feat: add toggle for password reset feature in admin settings (#508)

* feat: add sudo support for file manager operations (#509)

* fix: add sudo support for listFiles and improve permission error handling (#512)

* feat: add sudo support for file manager operations

* fix: add sudo support for listFiles and improve permission error handling

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated

* feat: add copy password button and fixed new line carriage issues and backend crash for auth key

* feat: added quick connection system (ad-hoc)

* Enter Key for Quick Login (#513)

* feat: added -r and -l support for tunnels

* feat: begin dashboard overhaul by splitting into cards and adding customization

* feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc.

* feat: add auth.tsx suppot for fullscreen

* feat: greatly improve network graph ui/ux and migrated to use translations and theme system

* feat: update to use blacksmith

* feat: improve ui for customized tabs and hide add/edit host/credential when submiting

* feat: add warpgate support with a dialog (terminal only)

* feat: expand warpgate to docker/file manager

* fix: docker not working wtih warpgate and none auth failing for terminal

* fix: prevent owner permission loss when sharing host to own role (#514)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* fix: prevent owner permission loss when sharing host to own role

Fixes #391

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: SSH key passphrase not passed for Docker and Tunnel (#521)

* perf: optimize Host Manager for large host lists

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

* fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel

Database field is `key_password` but code used `keyPassword`.
Added fallback to check both field names.

Affected:
- docker.ts: Docker SSH connections with encrypted keys
- tunnel.ts: Tunnel connections with encrypted keys

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* perf: optimize Host Manager for large host lists (#520)

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* fix: add missing mimeTypes definition for image preview (#518)

Fixes Termix-SSH/Support#408

* fix: prevent session reset when updating host properties (#517)

Move WebSocket cleanup logic to a separate unmount-only effect to
prevent SSH sessions from being closed when host properties are updated.

Closes Termix-SSH/Support#401

* fix: backend type error

* feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385)

* feat: improved conneciton log ui/logic

* feat: improved conneciton log ui/logic

* feat: expanded connection log to work across all components (readying for release)

* feat: update readme

* feat: update readme

* fix: build error

* fix: build error

* fix: changed ver

* chore: clean up

* chore: continue clean up

* fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies

* fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field

* fix: update readme and run cleaner

* fix: update readme

* fix: update readme

* fix: update readme

* feat: update chinese readme

* feat: add modern DH group KEX algorithms for better compatibility

Add diffie-hellman-group15/16/17/18-sha512 key exchange algorithms
which are supported by ssh2 library but were not configured in Termix.

These algorithms provide:
- Better compatibility with modern SSH servers (FreeBSD, OpenBSD, etc.)
- Stronger security with larger DH groups
- RFC 8268 compliance

Related to Termix-SSH/Support#205

---------

Co-authored-by: Steven Josefs <s.josefs@gmx.de>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com>

* feat: clarify that hostname/FQDN is supported in IP address field (#529)

* Feature request network graph

* Fixing PR442:

- Fixed:
    - UI design elemets
    - UI and button colors
    - JSON export
    - recent activity is default again
- Removed:
    - Online/Offline UI labels
    - left-click menu on hosts
- Added:
    - small pulsing dot inside the hosts to indicate online status like in the left bar

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

* Handle enter button (#481)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* Add handle on enter button;

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: remove top tech

* fix: update readme

* fix: prevent long container names from overflowing card (#496)

Added min-w-0 to CardTitle to allow text truncation in flexbox.
Without this, flex items have min-width: auto which prevents
the truncate class from working properly.

Fixes #411

* fix: use SFTP readdir for file listing to support non-Linux systems (#495)

The file manager now uses SFTP readdir as the primary method for
listing files, with ls -la as a fallback. This enables compatibility
with MikroTik RouterOS and other non-Linux systems that don't have
standard shell commands.

Fixes #317

* fix: restore SSH connection timeout to 120s for 2FA authentication (#494)

The timeout was reduced from 120s to 30s in v1.10, causing 2FA login
failures. Users with keyboard-interactive authentication (TOTP/2FA)
need sufficient time to enter their verification codes before the
SSH connection times out.

Fixes #404

* feat: add Docker container healthcheck (#493)

* fix: owner should not be marked as shared when host is shared to their role (#492)

* fix: use correct MIME types for image preview (#491)

* fix: prevent session reset when updating host properties (#490)

* fix: add shell creation timeout and improve error handling (#489)

* fix: set default lineHeight to 1.0 for TUI apps compatibility (#488)

* fix: delete all related data when removing user (#487)

* fix: nginx permission denied on restricted kernels (#486)

* fix: skip existing hosts and credentials during JSON import (#485)

Added duplicate detection for SSH hosts (by ip+port+username) and
credentials (by name) during import. Existing items are now skipped
by default, or updated if replaceExisting option is enabled.

This matches the existing behavior of importDismissedAlerts.

Fixes #389

* feat: add firewall status widget for server stats (#484)

* Feature: PWA (#479)

* feat: add PWA support with offline capabilities

- Add web app manifest with icons and theme configuration
- Add service worker with cache-first strategy for static assets
- Add useServiceWorker hook for SW registration
- Add PWA meta tags and Apple-specific tags to index.html
- Update vite.config.ts for optimal asset caching

* Update package-lock.json

* New Crowdin updates (#472)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* feat: add listening ports widget for server stats (#483)

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix network stats merge and add openapi jsdocs comments

* feat: add workflow/config to auto generate openapi json

* feat: remove locales

* feat: support URL r…

* feat: add file manager sorting by name, date, and size (#582)

* Temporary merge for 1.11.1 syncing (#543)

* fix: remote translations

* feat: support OIDC configuration via environment variables (#531)

* Feature request network graph

* Fixing PR442:

- Fixed:
    - UI design elemets
    - UI and button colors
    - JSON export
    - recent activity is default again
- Removed:
    - Online/Offline UI labels
    - left-click menu on hosts
- Added:
    - small pulsing dot inside the hosts to indicate online status like in the left bar

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

* Handle enter button (#481)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* Add handle on enter button;

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: remove top tech

* fix: update readme

* fix: prevent long container names from overflowing card (#496)

Added min-w-0 to CardTitle to allow text truncation in flexbox.
Without this, flex items have min-width: auto which prevents
the truncate class from working properly.

Fixes #411

* fix: use SFTP readdir for file listing to support non-Linux systems (#495)

The file manager now uses SFTP readdir as the primary method for
listing files, with ls -la as a fallback. This enables compatibility
with MikroTik RouterOS and other non-Linux systems that don't have
standard shell commands.

Fixes #317

* fix: restore SSH connection timeout to 120s for 2FA authentication (#494)

The timeout was reduced from 120s to 30s in v1.10, causing 2FA login
failures. Users with keyboard-interactive authentication (TOTP/2FA)
need sufficient time to enter their verification codes before the
SSH connection times out.

Fixes #404

* feat: add Docker container healthcheck (#493)

* fix: owner should not be marked as shared when host is shared to their role (#492)

* fix: use correct MIME types for image preview (#491)

* fix: prevent session reset when updating host properties (#490)

* fix: add shell creation timeout and improve error handling (#489)

* fix: set default lineHeight to 1.0 for TUI apps compatibility (#488)

* fix: delete all related data when removing user (#487)

* fix: nginx permission denied on restricted kernels (#486)

* fix: skip existing hosts and credentials during JSON import (#485)

Added duplicate detection for SSH hosts (by ip+port+username) and
credentials (by name) during import. Existing items are now skipped
by default, or updated if replaceExisting option is enabled.

This matches the existing behavior of importDismissedAlerts.

Fixes #389

* feat: add firewall status widget for server stats (#484)

* Feature: PWA (#479)

* feat: add PWA support with offline capabilities

- Add web app manifest with icons and theme configuration
- Add service worker with cache-first strategy for static assets
- Add useServiceWorker hook for SW registration
- Add PWA meta tags and Apple-specific tags to index.html
- Update vite.config.ts for optimal asset caching

* Update package-lock.json

* New Crowdin updates (#472)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* feat: add listening ports widget for server stats (#483)

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix network stats merge and add openapi jsdocs comments

* feat: add workflow/config to auto generate openapi json

* feat: remove locales

* feat: support URL routes to open terminal directly (#156) (#503)

* fix: resolve merge conflict artifacts in dev-1.10.1

- Fix missing closing tags in AppView.tsx NetworkGraphView
- Fix incomplete catch blocks in server-stats.ts and db/index.ts
- Fix missing closing brace in en.json ports section
- Fix HostManagerApp.tsx import path
- Fix stats-widgets.ts type definition
- Fix schema.ts networkTopology table definition
- Add type annotations in user-data-import.ts

* feat: support URL routes to open terminal directly (#156)

- Add /terminal/{hostNameOrId} route for new format
- Keep /hosts/{id}/terminal for backward compatibility
- Smart detection: numeric IDs for ID lookup, otherwise name lookup
- Clean URL after opening to prevent duplicate on refresh
- Show toast error when host not found

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501)

Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal.
This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>.

- Ctrl+Alt+W → Ctrl+W (nano search, delete word)
- Ctrl+Alt+T → Ctrl+T (transpose chars)
- Ctrl+Alt+N → Ctrl+N (next line)
- Ctrl+Alt+Q → Ctrl+Q (XON flow control)

Fixes Termix-SSH/Support#407

* feat: remove locales

* New Crowdin updates (#504)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* feat: add option to disable update checker (#502)

* feat: add option to disable update checker

Add a new setting in User Profile > Settings to disable automatic
update checking on startup and dashboard.

- Adds 'Disable Update Check' toggle in profile settings
- Skips GitHub API calls when disabled (reduces network requests)
- Works for both web app and Electron client

Fixes Termix-SSH/Support#410

* feat: remove locales

---------

Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* New Crowdin updates (#505)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* feat: add crowdin i18n

* feat: remove locales

* New Crowdin updates (#506)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Bengali)

* New translations en.json (Thai)

* feat: update readme

* feat: update readme

* feat: update credential editor to use submitting system and add health monitor

* feat: added toggle for command pallete

* feat: added close button on tab dropdown

* feat: added sidebar management and improved some host manager UI/UX

* feat: re-added missing users.ts route from merge

* feat: add toggle for password reset feature in admin settings (#508)

* feat: add sudo support for file manager operations (#509)

* fix: add sudo support for listFiles and improve permission error handling (#512)

* feat: add sudo support for file manager operations

* fix: add sudo support for listFiles and improve permission error handling

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated

* feat: add copy password button and fixed new line carriage issues and backend crash for auth key

* feat: added quick connection system (ad-hoc)

* Enter Key for Quick Login (#513)

* feat: added -r and -l support for tunnels

* feat: begin dashboard overhaul by splitting into cards and adding customization

* feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc.

* feat: add auth.tsx suppot for fullscreen

* feat: greatly improve network graph ui/ux and migrated to use translations and theme system

* feat: update to use blacksmith

* feat: improve ui for customized tabs and hide add/edit host/credential when submiting

* feat: add warpgate support with a dialog (terminal only)

* feat: expand warpgate to docker/file manager

* fix: docker not working wtih warpgate and none auth failing for terminal

* fix: prevent owner permission loss when sharing host to own role (#514)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* fix: prevent owner permission loss when sharing host to own role

Fixes #391

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: SSH key passphrase not passed for Docker and Tunnel (#521)

* perf: optimize Host Manager for large host lists

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

* fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel

Database field is `key_password` but code used `keyPassword`.
Added fallback to check both field names.

Affected:
- docker.ts: Docker SSH connections with encrypted keys
- tunnel.ts: Tunnel connections with encrypted keys

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* perf: optimize Host Manager for large host lists (#520)

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* fix: add missing mimeTypes definition for image preview (#518)

Fixes Termix-SSH/Support#408

* fix: prevent session reset when updating host properties (#517)

Move WebSocket cleanup logic to a separate unmount-only effect to
prevent SSH sessions from being closed when host properties are updated.

Closes Termix-SSH/Support#401

* fix: backend type error

* feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385)

* feat: improved conneciton log ui/logic

* feat: improved conneciton log ui/logic

* feat: expanded connection log to work across all components (readying for release)

* feat: update readme

* feat: update readme

* fix: build error

* fix: build error

* fix: changed ver

* chore: clean up

* chore: continue clean up

* fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies

* fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field

* fix: update readme and run cleaner

* fix: update readme

* fix: update readme

* fix: update readme

* feat: update chinese readme

* feat: support OIDC configuration via environment variables

Add support for configuring OIDC authentication through environment
variables, enabling containerized deployments without database access:

- OIDC_CLIENT_ID
- OIDC_CLIENT_SECRET
- OIDC_ISSUER_URL
- OIDC_AUTHORIZATION_URL
- OIDC_TOKEN_URL
- OIDC_USERINFO_URL (optional)
- OIDC_IDENTIFIER_PATH (optional, default: "sub")
- OIDC_NAME_PATH (optional, default: "name")
- OIDC_SCOPES (optional, default: "openid email profile")

Environment variables take priority over database configuration.

Closes Termix-SSH/Support#16

---------

Co-authored-by: Steven Josefs <s.josefs@gmx.de>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com>

* feat: add modern DH group KEX algorithms for better compatibility (#530)

* Feature request network graph

* Fixing PR442:

- Fixed:
    - UI design elemets
    - UI and button colors
    - JSON export
    - recent activity is default again
- Removed:
    - Online/Offline UI labels
    - left-click menu on hosts
- Added:
    - small pulsing dot inside the hosts to indicate online status like in the left bar

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

* Handle enter button (#481)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* Add handle on enter button;

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: remove top tech

* fix: update readme

* fix: prevent long container names from overflowing card (#496)

Added min-w-0 to CardTitle to allow text truncation in flexbox.
Without this, flex items have min-width: auto which prevents
the truncate class from working properly.

Fixes #411

* fix: use SFTP readdir for file listing to support non-Linux systems (#495)

The file manager now uses SFTP readdir as the primary method for
listing files, with ls -la as a fallback. This enables compatibility
with MikroTik RouterOS and other non-Linux systems that don't have
standard shell commands.

Fixes #317

* fix: restore SSH connection timeout to 120s for 2FA authentication (#494)

The timeout was reduced from 120s to 30s in v1.10, causing 2FA login
failures. Users with keyboard-interactive authentication (TOTP/2FA)
need sufficient time to enter their verification codes before the
SSH connection times out.

Fixes #404

* feat: add Docker container healthcheck (#493)

* fix: owner should not be marked as shared when host is shared to their role (#492)

* fix: use correct MIME types for image preview (#491)

* fix: prevent session reset when updating host properties (#490)

* fix: add shell creation timeout and improve error handling (#489)

* fix: set default lineHeight to 1.0 for TUI apps compatibility (#488)

* fix: delete all related data when removing user (#487)

* fix: nginx permission denied on restricted kernels (#486)

* fix: skip existing hosts and credentials during JSON import (#485)

Added duplicate detection for SSH hosts (by ip+port+username) and
credentials (by name) during import. Existing items are now skipped
by default, or updated if replaceExisting option is enabled.

This matches the existing behavior of importDismissedAlerts.

Fixes #389

* feat: add firewall status widget for server stats (#484)

* Feature: PWA (#479)

* feat: add PWA support with offline capabilities

- Add web app manifest with icons and theme configuration
- Add service worker with cache-first strategy for static assets
- Add useServiceWorker hook for SW registration
- Add PWA meta tags and Apple-specific tags to index.html
- Update vite.config.ts for optimal asset caching

* Update package-lock.json

* New Crowdin updates (#472)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* feat: add listening ports widget for server stats (#483)

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix network stats merge and add openapi jsdocs comments

* feat: add workflow/config to auto generate openapi json

* feat: remove locales

* feat: support URL routes to open terminal directly (#156) (#503)

* fix: resolve merge conflict artifacts in dev-1.10.1

- Fix missing closing tags in AppView.tsx NetworkGraphView
- Fix incomplete catch blocks in server-stats.ts and db/index.ts
- Fix missing closing brace in en.json ports section
- Fix HostManagerApp.tsx import path
- Fix stats-widgets.ts type definition
- Fix schema.ts networkTopology table definition
- Add type annotations in user-data-import.ts

* feat: support URL routes to open terminal directly (#156)

- Add /terminal/{hostNameOrId} route for new format
- Keep /hosts/{id}/terminal for backward compatibility
- Smart detection: numeric IDs for ID lookup, otherwise name lookup
- Clean URL after opening to prevent duplicate on refresh
- Show toast error when host not found

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501)

Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal.
This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>.

- Ctrl+Alt+W → Ctrl+W (nano search, delete word)
- Ctrl+Alt+T → Ctrl+T (transpose chars)
- Ctrl+Alt+N → Ctrl+N (next line)
- Ctrl+Alt+Q → Ctrl+Q (XON flow control)

Fixes Termix-SSH/Support#407

* feat: remove locales

* New Crowdin updates (#504)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* feat: add option to disable update checker (#502)

* feat: add option to disable update checker

Add a new setting in User Profile > Settings to disable automatic
update checking on startup and dashboard.

- Adds 'Disable Update Check' toggle in profile settings
- Skips GitHub API calls when disabled (reduces network requests)
- Works for both web app and Electron client

Fixes Termix-SSH/Support#410

* feat: remove locales

---------

Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* New Crowdin updates (#505)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* feat: add crowdin i18n

* feat: remove locales

* New Crowdin updates (#506)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* New translations en.json (Norwegian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Finnish)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Bulgarian)

* New translations en.json (Indonesian)

* New translations en.json (Hindi)

* New translations en.json (Bengali)

* New translations en.json (Thai)

* feat: update readme

* feat: update readme

* feat: update credential editor to use submitting system and add health monitor

* feat: added toggle for command pallete

* feat: added close button on tab dropdown

* feat: added sidebar management and improved some host manager UI/UX

* feat: re-added missing users.ts route from merge

* feat: add toggle for password reset feature in admin settings (#508)

* feat: add sudo support for file manager operations (#509)

* fix: add sudo support for listFiles and improve permission error handling (#512)

* feat: add sudo support for file manager operations

* fix: add sudo support for listFiles and improve permission error handling

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated

* feat: add copy password button and fixed new line carriage issues and backend crash for auth key

* feat: added quick connection system (ad-hoc)

* Enter Key for Quick Login (#513)

* feat: added -r and -l support for tunnels

* feat: begin dashboard overhaul by splitting into cards and adding customization

* feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc.

* feat: add auth.tsx suppot for fullscreen

* feat: greatly improve network graph ui/ux and migrated to use translations and theme system

* feat: update to use blacksmith

* feat: improve ui for customized tabs and hide add/edit host/credential when submiting

* feat: add warpgate support with a dialog (terminal only)

* feat: expand warpgate to docker/file manager

* fix: docker not working wtih warpgate and none auth failing for terminal

* fix: prevent owner permission loss when sharing host to own role (#514)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* fix: prevent owner permission loss when sharing host to own role

Fixes #391

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: SSH key passphrase not passed for Docker and Tunnel (#521)

* perf: optimize Host Manager for large host lists

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

* fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel

Database field is `key_password` but code used `keyPassword`.
Added fallback to check both field names.

Affected:
- docker.ts: Docker SSH connections with encrypted keys
- tunnel.ts: Tunnel connections with encrypted keys

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* perf: optimize Host Manager for large host lists (#520)

- Add ServerStatusContext for shared status polling (reduces API calls from N to 1)
- Move TooltipProvider to component root (eliminates N context instances)
- Add pagination with "Show More" button (limits initial DOM nodes per folder)

Fixes performance issues when managing ~1000 hosts with status monitoring enabled.

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* fix: add missing mimeTypes definition for image preview (#518)

Fixes Termix-SSH/Support#408

* fix: prevent session reset when updating host properties (#517)

Move WebSocket cleanup logic to a separate unmount-only effect to
prevent SSH sessions from being closed when host properties are updated.

Closes Termix-SSH/Support#401

* fix: backend type error

* feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385)

* feat: improved conneciton log ui/logic

* feat: improved conneciton log ui/logic

* feat: expanded connection log to work across all components (readying for release)

* feat: update readme

* feat: update readme

* fix: build error

* fix: build error

* fix: changed ver

* chore: clean up

* chore: continue clean up

* fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies

* fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field

* fix: update readme and run cleaner

* fix: update readme

* fix: update readme

* fix: update readme

* feat: update chinese readme

* feat: add modern DH group KEX algorithms for better compatibility

Add diffie-hellman-group15/16/17/18-sha512 key exchange algorithms
which are supported by ssh2 library but were not configured in Termix.

These algorithms provide:
- Better compatibility with modern SSH servers (FreeBSD, OpenBSD, etc.)
- Stronger security with larger DH groups
- RFC 8268 compliance

Related to Termix-SSH/Support#205

---------

Co-authored-by: Steven Josefs <s.josefs@gmx.de>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com>

* feat: clarify that hostname/FQDN is supported in IP address field (#529)

* Feature request network graph

* Fixing PR442:

- Fixed:
    - UI design elemets
    - UI and button colors
    - JSON export
    - recent activity is default again
- Removed:
    - Online/Offline UI labels
    - left-click menu on hosts
- Added:
    - small pulsing dot inside the hosts to indicate online status like in the left bar

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

* Handle enter button (#481)

* Update Crowdin configuration file

* Update Crowdin configuration file

* Update Linux Portable section with AUR link (#474)

* fix: file manager incorrectly decoding/encoding when editing files (#476)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: build error on docker (#477)

* fix: electron build errors and skip macos job

* fix: testflight submit failure

* fix: made submit job match build type

* fix: resolve Vite build warnings for mixed static/dynamic imports (#473)

* Update Crowdin configuration file

* Update Crowdin configuration file

* fix: resolve Vite build warnings for mixed static/dynamic imports

- Convert all dynamic imports of main-axios.ts to static imports (10 files)
- Convert all dynamic imports of sonner to static imports (4 files)
- Add manual chunking configuration to vite.config.ts for better bundle splitting
  - react-vendor: React and React DOM
  - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge
  - monaco: Monaco Editor
  - codemirror: CodeMirror and related packages
- Increase chunkSizeWarningLimit to 1000kB

This resolves Vite warnings about mixed import strategies preventing
proper code-splitting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent)

* fix: build error on docker

---------

Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>

* Increase max old space size for npm builds

* Increase Node.js memory limit in Dockerfile

* Remove NODE_OPTIONS from build commands in Dockerfile

* Change runner to blacksmith-4vcpu-ubuntu-2404

* fix: build error on docker

* Add handle on enter button;

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: LukeGus <bugattiguy527@gmail.com>

* fix: remove top tech

* fix: update readme

* fix: prevent long container names from overflowing card (#496)

Added min-w-0 to CardTitle to allow text truncation in flexbox.
Without this, flex items have min-width: auto which prevents
the truncate class from working properly.

Fixes #411

* fix: use SFTP readdir for file listing to support non-Linux systems (#495)

The file manager now uses SFTP readdir as the primary method for
listing files, with ls -la as a fallback. This enables compatibility
with MikroTik RouterOS and other non-Linux systems that don't have
standard shell commands.

Fixes #317

* fix: restore SSH connection timeout to 120s for 2FA authentication (#494)

The timeout was reduced from 120s to 30s in v1.10, causing 2FA login
failures. Users with keyboard-interactive authentication (TOTP/2FA)
need sufficient time to enter their verification codes before the
SSH connection times out.

Fixes #404

* feat: add Docker container healthcheck (#493)

* fix: owner should not be marked as shared when host is shared to their role (#492)

* fix: use correct MIME types for image preview (#491)

* fix: prevent session reset when updating host properties (#490)

* fix: add shell creation timeout and improve error handling (#489)

* fix: set default lineHeight to 1.0 for TUI apps compatibility (#488)

* fix: delete all related data when removing user (#487)

* fix: nginx permission denied on restricted kernels (#486)

* fix: skip existing hosts and credentials during JSON import (#485)

Added duplicate detection for SSH hosts (by ip+port+username) and
credentials (by name) during import. Existing items are now skipped
by default, or updated if replaceExisting option is enabled.

This matches the existing behavior of importDismissedAlerts.

Fixes #389

* feat: add firewall status widget for server stats (#484)

* Feature: PWA (#479)

* feat: add PWA support with offline capabilities

- Add web app manifest with icons and theme configuration
- Add service worker with cache-first strategy for static assets
- Add useServiceWorker hook for SW registration
- Add PWA meta tags and Apple-specific tags to index.html
- Update vite.config.ts for optimal asset caching

* Update package-lock.json

* New Crowdin updates (#472)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Afrikaans)

* New translations en.json (Arabic)

* New translations en.json (Catalan)

* New translations en.json (Czech)

* New translations en.json (Danish)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Korean)

* New translations en.json (Dutch)

* New translations en.json (Norwegian)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Serbian (Cyrillic))

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Simplified)

* New translations en.json (English)

* New translations en.json (Vietnamese)

* New translations en.json (German)

* feat: add listening ports widget for server stats (#483)

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* feat: fix network stats merge and add openapi jsdocs comments

* feat: add workflow/config to auto generate openapi json

* feat: remove locales

* feat: support URL routes to …

* fix: unable to delete OIDC user due to missing table cleanup (#576)

deleteUserAndRelatedData was missing cleanup for networkTopology,
dashboardPreferences, and opksshTokens tables. When deleting an OIDC
user who had records in these tables, the final DELETE on users hit
SQLITE_CONSTRAINT_FOREIGNKEY. Add explicit deletes for all three
tables before the user row deletion.

* fix: use lightweight wget for Docker healthcheck (#558)

- Replace node -e healthcheck with wget (avoid spawning full Node.js process)
- Increase start-period from 30s to 60s for slower machines

* feat: add "Remember Me" option to login (#585)

When checked, browser sessions get 30-day expiry (same as desktop)
instead of the default 7-day. The flag is passed through the full
login chain including TOTP verification flow.

* feat: expand environment variables in file manager path bar (#583)

Resolve $VAR and ~ paths via SSH echo before navigating.
Add /ssh/resolvePath backend endpoint, resolveSSHPath API function,
and intercept in loadDirectory. Fix confirmEditingPath not to
prefix ~ or $ paths with /.

* fix: add Ctrl+Shift+C keyboard shortcut for terminal copy (#581)

Ctrl+Shift+C was not handled in the custom key event handler,
so users had no keyboard shortcut to copy selected text from
the terminal. Adds the shortcut alongside existing Cmd+C (macOS)
support, copying the current selection to clipboard.

* feat: add OIDC user allowlist for registration control (#580)

Add allowed_users field to OIDC config supporting comma-separated
patterns: exact emails (user@example.com), domain suffixes
(@example.com), or empty for unrestricted access. Only new user
registrations are checked; existing users and first-user setup
are unaffected.

* fix: OIDC redirect_uri incorrectly resolves to localhost (#577)

The OIDC authorize endpoint used the client Origin header to build
the redirect_uri. Desktop/mobile apps connecting to a remote server
send their local origin (e.g. http://localhost:5173), which got
force-rewritten to http://localhost:30001. This broke OIDC for all
non-browser clients.

Use req.protocol + req.get("Host") instead, which correctly resolves
to the server's own address. trust proxy is already enabled so this
works behind reverse proxies too.

* fix: keep terminal tab open on connection failure (#574)

When SSH connection fails before being established, the terminal tab
auto-closes immediately, leaving no error message visible to the user.
Added wasConnectedRef to track whether the connection was ever
established. Now only auto-closes tab on disconnect if it was previously
connected. If never connected, shows error message instead.

* fix: prevent restart loop when PUID/PGID is set to 0 (#571)

When PUID=0, usermod sets the node user's UID to 0 (root), then
gosu re-executes the script as node — but since node is now UID 0,
the id check passes again, causing an infinite loop.

Skip the gosu step when PUID=0 since the process is already root.

* feat: add README translations for 12 additional languages (#569)

Add translated README files for: Japanese, Korean, French, German,
Spanish, Portuguese (BR), Russian, Arabic, Hindi, Turkish,
Vietnamese, and Italian. Update language navigation bar in all
README files including existing English and Chinese versions.

* fix: allow OIDC users to export database without password (#575)

OIDC users have no password, but the export endpoint unconditionally
required password authentication. This reuses the same OIDC branch
pattern already implemented in the import endpoint: skip password
validation for OIDC users and authenticate via authenticateOIDCUser
instead. Frontend now also skips the password input for OIDC users.

* fix: SSH session leak — SFTP channel reuse + shared connection pool (#556)

- Cache SFTP channel per session in file-manager, reuse across all operations
- Remove all sftp.end() calls, channel lifecycle follows session
- Auto-rebuild SFTP channel on error/close events
- Extract SSHConnectionPool from server-stats into shared module
- Factory-based pool API: getConnection(key, factory) / withConnection()
- Migrate server-stats and tunnel killRemoteTunnelByMarker to shared pool
- Refactor tunnel kill from callback hell to async/await

Fixes: Termix-SSH/Support#485

* fix: handle DEC private mode sequences in syntax highlighter (#562)

Extend CSI parameter byte matching to include ?, >, =, ! per ECMA-48.
Previously sequences like \x1b[?1h and \x1b[?25l were not recognized
as ANSI segments and fell through to plain text processing.

* fix: catch disconnected client error in listFiles fallback (#564)

When SFTP times out and the fallback calls client.exec() on an
already-disconnected SSH client, the synchronous throw was not
caught, crashing the backend process.

* fix: forward Shift+Tab as backtab escape sequence (#563)

Explicitly handle Shift+Tab in the custom key event handler by sending
\x1b[Z (CSI Z) directly, with preventDefault to stop browser/WebView
focus navigation from consuming the keystroke.

* fix: disable font ligatures in terminal by default (#561)

Nerd Fonts ligatures cause != to render as ≠, <= as ≤, etc.
This is confusing for terminal use and breaks cursor positioning.

* fix: bypass ls alias in file manager fallback (#560)

- Add --color=never to command ls in SFTP fallback path
- Use /bin/ls absolute path in sudo fallback to avoid alias/wrapper

* feat: add overwrite option for JSON host import (#559)

- Add overwrite mode to bulk-import endpoint, matching by ip:port:username
- Import button now shows dropdown with "skip existing" and "overwrite existing" options
- Response includes created/updated/skipped/failed counts

* fix: status check tcpPing causing kex_exchange_identification flood in sshd logs (#557)

- Complete SSH identification exchange before closing socket in tcpPing
- Read server banner, send client identification string, then close gracefully
- Prevents sshd from logging kex_exchange_identification errors on every ping
- Increase default statusCheckInterval from 30s to 60s

* fix: add WebSocket protocol-level ping to prevent proxy timeouts (#572)

The existing application-level ping (JSON message via setInterval)
stops working when the browser tab is backgrounded due to timer
throttling. Reverse proxies like Cloudflare (100s) and Nginx Proxy
Manager (60s) then drop the idle WebSocket connection.

Add server-side ws.ping() every 30s for both terminal and docker
console WebSocket servers. Protocol-level pings are handled by
the browser's WebSocket implementation, unaffected by tab throttling.

* feat: embed backend server in Electron desktop app (#539)

* feat: embed backend server in Electron desktop app

- Fork backend process on app startup (production mode only)
- Store data in userData/server-data for desktop users
- Unpack dist/ and native modules (better-sqlite3, ssh2) from asar
- Resolve asar vs asar.unpacked paths for forked process
- Serve frontend static files from Express for iframe auth flow
- Add SPA fallback for non-API routes
- Graceful shutdown with SIGTERM + 5s force kill
- Add get-embedded-server-status IPC handler

* fix: improve electron embedded server reliability

- Extract duplicate fetch polyfill to shared httpFetch function
- Wait for backend ready before creating window (15s timeout)
- Use IPC message for graceful shutdown (SIGTERM doesn't work on Windows)
- Simplify SPA fallback to use Accept header instead of route blacklist
- Add IPC shutdown handler in backend starter

* feat: system tray minimize and runtime server switching

* fix: resolve all 274 ESLint errors in backend source files (#591)

- Remove unused imports and variables (110 no-unused-vars)
- Replace explicit any with proper types (80 no-explicit-any)
- Add comments to intentionally empty catch blocks (66 no-empty)
- Fix no-extra-boolean-cast, prefer-const, no-async-promise-executor
- No logic changes, lint-only cleanup

* fix: add missing clipboard shortcuts for terminal and docker console (#589)

Terminal and Docker Console were missing Ctrl+Shift+C (copy selection),
Ctrl+Insert (copy), and Shift+Insert (paste) shortcuts. Docker Console
also lacked Ctrl+V paste entirely. Added consistent clipboard key
handlers to both components.

* fix: resolve all ESLint errors and increase CI heap size (#588)

* fix: resolve all ESLint errors blocking CI

- Downgrade mass legacy violations to warnings (no-unused-vars,
  no-explicit-any, no-empty, no-unused-expressions)
- Turn off no-control-regex (terminal app uses control chars)
- Ignore dist/release/Mobile dirs from linting
- Auto-fix prefer-const, no-extra-boolean-cast
- Fix real bugs: async promise executor, rules-of-hooks,
  dupe-else-if, constant-binary-expression, case-declarations
- Run prettier --write on all files

* fix: increase Node.js heap size for CI build step

vite build OOMs on 2vCPU runner with default heap limit.
Set NODE_OPTIONS=--max-old-space-size=4096 to prevent it.

---------

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* fix: reduce excessive disk writes from unconditional database persistence (#590)

The in-memory database was serialized, encrypted, and written to disk
every 15 seconds regardless of whether any data had changed. Combined
with the 2-second debounced save trigger on every modification, this
caused ~1GB/hour of disk writes even when idle.

Add a dirty flag so the periodic save only writes when data has actually
changed, and increase the safety-net interval from 15 seconds to 5
minutes. Triggered saves (on actual data modifications) continue to
fire after the existing 2-second debounce.

Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* fix: opkssh 404 and browser issues

* fix: resolve backend TypeScript strict compilation errors (#592)

Fix 56 type errors under tsconfig.node.json caused by overly broad
unknown/Record<string, unknown> types from the ESLint cleanup.

- Add JumpHostConfig interface for jump host chain resolution
- Use proper types for resolvedCredentials, ConnectConfig, ProxyNode
- Fix setWindow call to pass all 4 required arguments
- Remove duplicate responseTimeout declarations in same scope
- Add missing ClientChannel import

* fix: clear Electron partition cookies on auth failure and logout (#599)

When the Docker container is recreated, a new JWT secret is generated and
all existing tokens become invalid. The 401 interceptor clears localStorage
and document.cookie, but the Electron persistent partition cookies
(partition: "persist:termix") are managed by Chromium and not accessible
via document.cookie. This leaves the stale token in place, causing an
infinite 401 retry loop and UI flickering.

Add a clear-session-cookies IPC handler in the main process that uses
session.cookies API to remove all partition cookies. Invoke it from the
401 interceptor and logoutUser function in the renderer.

* refactor: unify Drizzle schema property names to camelCase (#598)

* feat: add bulk host settings editing with multi-select UI

Add PATCH /ssh/bulk-update endpoint for partial updates on multiple hosts.
Frontend adds selection mode with checkboxes, folder-level select-all,
and a floating action bar for monitoring, features, folder, and pin operations.

* fix: correct Drizzle schema field name access for SSH credentials

The sshCredentials schema uses mixed naming: private_key and
key_password (snake_case) but authType and keyType (camelCase).
Multiple files accessed these fields with wrong names, causing
undefined values at runtime.

Fixed direct bugs:
- docker.ts: host.keyPassword -> host.key_password
- docker-console.ts: jumpHost.keyPassword -> jumpHost.key_password
- auth-manager.ts: cred.privateKey -> cred.private_key
- auth-manager.ts: cred.passphrase -> cred.key_password

Cleaned up redundant fallback patterns (e.g. credential.auth_type ||
credential.authType) across 8 files to use the correct property name
directly.

* refactor: unify Drizzle schema property names to camelCase

Rename 18 snake_case Drizzle schema properties to camelCase across
users, sshData, and sshCredentials tables. SQL column names unchanged,
no database migration needed.

This fixes the root cause of field name mismatch bugs where code
accessed Drizzle results using camelCase but schema used snake_case.

Updated all references across 21 files: routes, SSH modules, crypto
utilities, type definitions, and field encryption mappings.

* feat: add bulk host settings editing with multi-select UI (#596)

Add PATCH /ssh/bulk-update endpoint for partial updates on multiple hosts.
Frontend adds selection mode with checkboxes, folder-level select-all,
and a floating action bar for monitoring, features, folder, and pin operations.

* feat: add global default for status check and metrics intervals (#595)

Add global monitoring interval settings that apply to all hosts by default,
with per-host override capability. Hosts use the global default unless
explicitly configured with a custom interval.

* fix: shared credentials fail for OIDC users due to missing re-encryption (#593)

When an admin shares a host with an OIDC user who hasn't logged in yet,
a pending shared credential is created with needsReEncryption=true.
The OIDC callback login path was missing the call to
reEncryptPendingCredentialsForUser(), so the credential stayed pending
forever. Additionally, server-stats.ts accessed the shared credential
without a null check, causing a crash.

- Add reEncryptPendingCredentialsForUser() call to OIDC callback login
- Add null guard for getSharedCredentialForUser() in server-stats.ts

* feat: SSH session persistence across browser refresh (#594)

* feat: decouple SSH session lifecycle from WebSocket connections

SSH sessions now persist independently of browser tab state. When a
WebSocket disconnects (tab close/refresh), the SSH connection is
detached rather than destroyed, allowing reattachment within a
configurable idle timeout (default 30 min).

- Add TerminalSessionManager singleton with output buffering, idle
  timeout, health checks, and per-user session limits
- Refactor terminal.ts to route SSH state through session manager
- Frontend tracks session IDs in localStorage for reconnection
- Tabs persist to localStorage and restore on page reload
- Add GET/POST /terminal/session_settings API endpoints
- Clear session storage on logout

* fix: resolve session persistence bugs found during code review

- Fix detachWs timeout leak on double-detach (clear existing timeout first)
- Fix healthCheck mutating Map during iteration (collect IDs first)
- Capture sessionId at stream bind time to prevent cross-session data leakage
- Add session destruction in OPKSSH/auth error paths that previously leaked
- Add session destruction in shell init early-return paths
- Reset isConnecting flag in attachSession handler
- Use current terminal dimensions in sessionExpired handler (not stale closure)
- Fix nextTabId race condition with synchronous initialization from restored tabs
- Validate restored currentTab against actual restored tabs
- Add clearTermixSessionStorage to logout error path

* fix: correct raw SQL field name mismatches in crypto and credential routes (#601)

Fix camelCase/snake_case mismatches left after #598 schema refactor:

- credentials.ts: 5 remaining snake_case fields in Drizzle insert/update
- data-crypto.ts: migrateUserSensitiveFields() accessed raw SQL records
  with camelCase keys (keyPassword, privateKey, etc.) but SELECT * returns
  snake_case columns, causing undefined values and silent data loss
- lazy-field-encryption.ts: getSensitiveFieldsForTable() missing 4 ssh_data
  fields (sudoPassword, autostartPassword, autostartKey, autostartKeyPassword),
  migrateRecordSensitiveFields() now uses propertyToColumn() to resolve
  snake_case keys from raw SQL results

* feat: add per-host SSH keepalive configuration (#603)

* fix: correct raw SQL field name mismatches in crypto and credential routes

Fix camelCase/snake_case mismatches left after #598 schema refactor:

- credentials.ts: 5 remaining snake_case fields in Drizzle insert/update
- data-crypto.ts: migrateUserSensitiveFields() accessed raw SQL records
  with camelCase keys (keyPassword, privateKey, etc.) but SELECT * returns
  snake_case columns, causing undefined values and silent data loss
- lazy-field-encryption.ts: getSensitiveFieldsForTable() missing 4 ssh_data
  fields (sudoPassword, autostartPassword, autostartKey, autostartKeyPassword),
  migrateRecordSensitiveFields() now uses propertyToColumn() to resolve
  snake_case keys from raw SQL results

* feat: add per-host SSH keepalive configuration

MikroTik and similar devices ignore SSH-level keepalive requests,
causing ssh2 to disconnect after keepaliveCountMax unanswered pings
(default: 30s × 4 = 120s).

Add keepaliveInterval and keepaliveCountMax to terminalConfig,
allowing per-host override. Users can set keepaliveInterval to 0
to disable SSH keepalives and rely on TCP keepalive instead.

Backend reads the values from hostConfig.terminalConfig sent via
WebSocket. Frontend exposes the settings in the Advanced section
of the terminal configuration tab.

* fix: enable Electron desktop app to run standalone with embedded backend (#609)

* fix: enable Electron desktop app to run standalone with embedded backend

The Electron app already starts an embedded backend server via fork(),
but the frontend had no awareness of it. On first launch, users were
always prompted to enter a remote server URL even though a local backend
was already running on localhost.

- Add getEmbeddedServerStatus() to query the embedded backend via IPC
- Add embeddedMode flag in main-axios.ts, detected at initialization
- In embedded mode without a configured remote URL, getApiUrl() now
  routes each service to its own localhost port (30001, 30003, etc.)
  matching the dev-mode multi-port strategy
- Auth.tsx checkServerConfig() detects embedded backend and skips the
  server configuration form, falling through to the standard login UI

* fix: add explicit "Use Local Server" button and improve embedded detection

The silent auto-detection of the embedded backend can fail due to IPC
timing issues or backend startup failures. Add a visible "Use Local
Server" button on the Server Configuration page that:

- Probes http://localhost:30001/health to verify the backend is running
- Sets embeddedMode and reinitializes API instances with per-port routing
- Falls through to the standard login form (no iframe needed)

Also adds setEmbeddedMode() export so the UI can explicitly activate
embedded mode, and adds i18n keys for the new UI elements.

* fix: disable asar for embedded backend, improve tray and health probe

The forked backend process uses ESM imports and cannot resolve modules
from inside an asar archive (NODE_PATH is CJS-only). Disabling asar
ensures node_modules are plain files accessible to the backend.

- Disable asar packaging so forked backend can resolve ESM imports
- Remove node_modules exclusion from files config
- Fix system tray: use nativeImage with template on macOS, add error
  handling, only minimize-to-tray when tray exists
- Add retry mechanism for backend health probe (10 retries over ~30s)
  to handle slow backend startup
- Always show "Use Local Server" button in Electron mode regardless
  of backend running status
- Add file logging to userData for debugging GUI-launched app

* feat: unified proxy + jump host pipeline with HTTP CONNECT support (#608)

* fix: unify proxy and jump host connection paths

SOCKS5 proxy and jump host logic were mutually exclusive — the SOCKS5
branch returned early, so jump hosts were never reached when both were
configured. This affected terminal, file-manager, docker, and
server-stats modules.

Refactored all four modules to a unified pipeline:
- createJumpHostChain() accepts optional socks5Config parameter
- When both proxy and jump hosts are configured, the proxy socket is
  created to the first jump host internally, then used as transport
- Three-branch flow: jumpHosts (with optional proxy) → proxy-only → direct
- Enhanced error logging with hopIndex, totalHops, previousHop fields

* feat: add HTTP CONNECT proxy support with mixed chain

Extend ProxyNode.type to support 'http' alongside SOCKS4/5.

New proxy-helper.ts provides:
- createHttpConnectConnection(): HTTP CONNECT tunnel with Basic auth
  and optional existingSocket for chaining
- createMixedProxyChainConnection(): routes each hop to SOCKS or HTTP
  CONNECT based on node type; pure-SOCKS chains still use the optimized
  SocksClient.createConnectionChain path
- createProxyConnection(): unified entry point (backward-compatible alias
  for createSocks5Connection)
- testProxyConnectivity(): connect through proxy to test target, measure
  latency

socks5-helper.ts becomes a re-export shim — all existing import sites
continue to work unchanged.

* feat: add proxy connectivity test endpoint

New POST /ssh/db/proxy/test API accepts singleProxy, proxyChain, and
optional testTarget. Calls testProxyConnectivity() and returns
success/latencyMs or error.

Frontend testProxyConnection() function added to main-axios.ts.

* feat: add connection path visualization and HTTP CONNECT UI

- Proxy chain type selector now includes HTTP CONNECT option
- Test Connection button calls /ssh/db/proxy/test with loading state
- Connection path visualization shows the full route when proxy and/or
  jump hosts are configured: [You] → [Proxy] → [Jump Host] → [Target]
- New i18n keys: httpConnect, testProxy, testingProxy, proxyTestSuccess,
  proxyTestFailed, connectionPath

* fix: add Cache-Control no-store header to all API responses (#607)

Backend API responses had no Cache-Control headers, making them
vulnerable to caching by intermediate reverse proxies. This could
cause stale data in the UI when Termix is deployed behind certain
proxy configurations (e.g., SWAG, Pangolin).

Add Cache-Control: no-store middleware to all 6 Express apps to
prevent any proxy or browser from caching API responses.

* fix: preserve external reverse proxy X-Forwarded headers in internal Nginx (#606)

The internal Nginx proxy was overwriting X-Forwarded-Proto, X-Forwarded-Host,
and X-Forwarded-Port with local values ($scheme, $http_host, $server_port),
discarding headers set by the external reverse proxy. This caused
getRequestOrigin() to always return http:// with the internal port for
OpkSSH authentication URLs.

Add map directives to preserve original X-Forwarded-* headers from the
external proxy, falling back to local values when no external proxy is
present. Also remove duplicate header directives in the WebSocket location.

* fix: host update fails silently due to statsConfig double-serialization (#605)

- Fix statsConfig double JSON.stringify in both frontend (createSSHHost,
  updateSSHHost) and backend (POST/PUT handlers). Frontend was pre-
  stringifying statsConfig before sending, then backend stringified again,
  corrupting the data after multiple edits and eventually causing Zod
  validation failures on the edit form.
- Add missing sudoPassword field to createSSHHost and updateSSHHost submit
  data, which was being set in onSubmit but dropped during API call
  construction.
- Add toast notification in handleFormError so users get visible feedback
  when form validation fails instead of silent no-op.

* fix: Ctrl+C copies selection and clipboard error feedback (#604)

* fix: correct raw SQL field name mismatches in crypto and credential routes

Fix camelCase/snake_case mismatches left after #598 schema refactor:

- credentials.ts: 5 remaining snake_case fields in Drizzle insert/update
- data-crypto.ts: migrateUserSensitiveFields() accessed raw SQL records
  with camelCase keys (keyPassword, privateKey, etc.) but SELECT * returns
  snake_case columns, causing undefined values and silent data loss
- lazy-field-encryption.ts: getSensitiveFieldsForTable() missing 4 ssh_data
  fields (sudoPassword, autostartPassword, autostartKey, autostartKeyPassword),
  migrateRecordSensitiveFields() now uses propertyToColumn() to resolve
  snake_case keys from raw SQL results

* fix: Ctrl+C copies selection instead of sending SIGINT when text is selected

When terminal has an active text selection, Ctrl+C now copies the
selected text to clipboard and clears the selection. When nothing
is selected, Ctrl+C sends SIGINT as before. Ctrl+Shift+C continues
to work as a dedicated copy shortcut.

Also adds toast notifications when clipboard operations fail instead
of silently swallowing errors. Applied to both the main terminal
and Docker console terminal.

* fix: improve IPv6 connection handling with bracket stripping and ENETUNREACH hint (#602)

Strip square brackets from IPv6 addresses at all SSH connection entry
points (terminal, docker, docker-console, file-manager, server-stats,
tunnel) to handle addresses entered as [::1] format.

Add ENETUNREACH error hint in terminal.ts that detects IPv6 addresses
and suggests checking Docker IPv6 network configuration.

Also fix remaining snake_case field names in credentials.ts (same as #601).

* fix: backend catch error

* feat: improve selection UI

* fix: remove tab naming

* fix: squished ssh toolbar split ui buttons

* feat: improve persistent tabs, data not saving for users, various ui inconsistencies

* fix: tab context creating random context errors

* fix: improve terminal session logic (not perfect)s

* fix: terminal session logic creating errors and electron app not having UI to do local mode

* fix: desktop build error

* feat: update readme

* feat: update readme

* feat: update readme

* Update README.md (#612)

* fix: macos build failure and updated rest of the langs for readme

* feat: update readmes to fix spelling error

* feat: update readmes to fix spelling error

* fix: oidc failures, opkssh not wokring, added some qol to selecting

* fix: buyild erorr

* fix: buyild erorr

* fix: macos build error

* fix: opkssh, macos copy/paste, admin settings global default backend crashes, oidc redirect issues, updated translations

* chore: clean up files

* fix: oidc http/https redirect issue

* fix: build error

* feat: update json import with all new fields

---------

Co-authored-by: skyam25 <simonkyam@gmail.com>
Co-authored-by: ZacharyZcR <PayasoNorahC@protonmail.com>
Co-authored-by: Steven Josefs <s.josefs@gmx.de>
Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com>
Co-authored-by: Termix CI <ci@termix.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com>
Co-authored-by: Gaylord Julien <g.j@mailbox.org>
Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com>
Co-authored-by: Deepansh Khurana <deepanshkhurana@outlook.com>
Co-authored-by: Dylan Ysmal <Xenthys@users.noreply.github.com>
Co-authored-by: TomyJan <TomyJan6@gmail.com>
Co-authored-by: ywaf <52742690+ywaf@users.noreply.github.com>
This commit is contained in:
Luke Gustafson
2026-03-08 18:02:14 -05:00
committed by GitHub
parent 44049b8031
commit 0ff03110c9
153 changed files with 10978 additions and 5141 deletions
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Geloofsbriewe",
"credentialsViewer": "Geloofsbriewe-kyker",
"manageYourSSHCredentials": "Bestuur jou SSH-bewyse veilig",
"addCredential": "Voeg geloofsbriewe by",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Dit sal die publieke sleutel veilig by die teikengasheer se ~/.ssh/authorized_keys-lêer voeg sonder om bestaande sleutels te oorskryf. Die bewerking is omkeerbaar.",
"chooseHostToDeploy": "Kies 'n gasheer om na te ontplooi...",
"deploying": "Implementeer tans...",
"copyDeployCommand": "Kopieer Ontplooi-opdrag",
"copyDeployCommandDescription": "Kopieer 'n dopopdrag om die publieke sleutel handmatig by 'n gasheer se authorized_keys-lêer te voeg. Nuttig wanneer wagwoordverifikasie gedeaktiveer is.",
"deployCommandCopied": "Ontplooi-opdrag gekopieer na knipbord",
"manualDeployInfo": "Plak hierdie opdrag in die teikengasheer se terminaal (bv. Proxmox-konsole, IPMI of fisiese toegang) om die SSH-sleutel by te voeg.",
"name": "Naam",
"noHostsAvailable": "Geen gashere beskikbaar nie",
"noHostsMatchSearch": "Geen gashere stem ooreen met jou soektog nie",
@@ -303,9 +298,7 @@
"createFolder": "Skep vouer",
"editFolder": "Wysig vouer",
"editFolderDescription": "Pas jou brokkie-lêergids aan",
"createFolderDescription": "Organiseer jou brokkies in dopgehou",
"confirmExecution": "Voer \"{{name}}\" uit?",
"confirmExecutionDesc": "Is jy seker jy wil hierdie fragment uitvoer?"
"createFolderDescription": "Organiseer jou brokkies in dopgehou"
},
"commandHistory": {
"title": "Geskiedenis",
@@ -409,7 +402,6 @@
"required": "Vereis",
"optional": "Opsioneel",
"connect": "Verbind",
"copied": "Gekopieer",
"connecting": "Verbind...",
"creating": "Skep...",
"clear": "Duidelik",
@@ -502,7 +494,6 @@
"checking": "Kontroleer...",
"checkingDatabase": "Kontroleer databasisverbinding...",
"checkingAuthentication": "Kontroleer tans verifikasie...",
"backendReconnected": "Bedienerverbinding herstel",
"actions": "Aksies",
"remove": "Verwyder",
"revoke": "Herroep",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Gasheerbestuurder",
"hosts": "Gashere",
"sshHosts": "SSH-gashere",
"noHosts": "Geen SSH-gashere nie",
"noHostsMessage": "Jy het nog geen SSH-gashere bygevoeg nie. Klik \"Voeg gasheer by\" om te begin.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Kon nie JSON-lêer invoer nie",
"connectionDetails": "Verbindingsbesonderhede",
"organization": "Organisasie",
"ipAddress": "IP-adres of gasheernaam",
"ipAddress": "IP-adres",
"port": "Hawe",
"name": "Naam",
"username": "Gebruikersnaam",
@@ -925,8 +915,6 @@
"key": "Sleutel",
"credential": "Geloofsbrief",
"none": "Geen",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Vra jou vir OPKSSH webmagtiging met elke verbinding. Jou magtigingstoken sal 24 uur lank geldig wees totdat dit hernu moet word.",
"selectCredential": "Kies geloofsbriewe",
"selectCredentialPlaceholder": "Kies 'n geloofsbrief...",
"credentialRequired": "Geloofsbriewe word vereis wanneer geloofsbriewe-verifikasie gebruik word",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Sleutelbord-Interaktiewe Verifikasie",
"noneAuthDescription": "Hierdie verifikasiemetode sal sleutelbord-interaktiewe verifikasie gebruik wanneer daar aan die SSH-bediener gekoppel word.",
"noneAuthDetails": "Sleutelbord-interaktiewe verifikasie laat die bediener toe om jou vir geloofsbriewe te vra tydens verbinding. Dit is nuttig vir bedieners wat multifaktor-verifikasie vereis of as jy nie geloofsbriewe plaaslik wil stoor nie.",
"opksshAuthTitle": "OPKSSH-verifikasie",
"forceKeyboardInteractive": "Forseer sleutelbord-interaktief",
"forceKeyboardInteractiveDesc": "Dwing die gebruik van sleutelbord-interaktiewe verifikasie af. Dit word soms vereis vir bedieners wat tweefaktor-verifikasie (TOTP/2FA) gebruik.",
"overrideCredentialUsername": "Oorskryf geloofsbriewe gebruikersnaam",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Maak oop in blaaier",
"warpgateContinue": "Ek het verifikasie voltooi",
"warpgateTimeout": "Warpgate-verifikasietydverstryking. Koppel asseblief weer.",
"opksshAuthRequired": "OPKSSH-verifikasie vereis",
"opksshAuthDescription": "Voltooi verifikasie in jou blaaier om voort te gaan. Hierdie sessie sal vir 24 uur geldig bly.",
"opksshAuthUrl": "Verifikasie-URL",
"opksshOpenBrowser": "Maak blaaier oop om te verifieer",
"opksshWaitingForAuth": "Wag vir verifikasie in blaaier...",
"opksshAuthenticating": "Verwerk verifikasie...",
"opksshTimeout": "Verifikasie het verstryk. Probeer asseblief weer.",
"opksshAuthFailed": "Verifikasie het misluk. Kontroleer asseblief jou geloofsbriewe en probeer weer.",
"opksshConfigMissing": "OPKSSH-konfigurasie nie gevind nie. Skep asseblief ~/.opk/config.yml met jou OIDC-verskafferinstellings. Sien dokumentasie: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Wagwoord invoeg?",
"sudoPasswordPopupHint": "Druk Enter om in te voeg, Esc om te verwerp",
"sudoPasswordPopupConfirm": "Invoeg",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Probeer outomaties {{method}} verifikasie...",
"totpTimeout": "TOTP-verifikasie het uitgeloop. Koppel asseblief weer aan.",
"passwordTimeout": "Wagwoordverifikasie het uitgeloop. Koppel asseblief weer aan.",
"connectionRejected": "Verbinding deur bediener verwerp. Kontroleer asseblief u verifikasie en netwerkkonfigurasie.",
"hostKeyRejected": "SSH-gasheersleutelverifikasie verwerp. Verbinding gekanselleer."
"connectionRejected": "Verbinding deur bediener verwerp. Kontroleer asseblief u verifikasie en netwerkkonfigurasie."
},
"fileManager": {
"title": "Lêerbestuurder",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Wagwoordherstel suksesvol",
"passwordResetSuccessDesc": "Jou wagwoord is suksesvol herstel. Jy kan nou met jou nuwe wagwoord aanmeld."
},
"hostKey": {
"verifyNewHost": "Verifieer SSH-gasheersleutel",
"keyChangedWarning": "SSH-gasheersleutel verander",
"firstConnectionTitle": "Eerste keer dat jy met hierdie gasheer verbind",
"firstConnectionDescription": "Die egtheid van hierdie gasheer kan nie vasgestel word nie. Verifieer dat die vingerafdruk ooreenstem met wat jy verwag.",
"keyChangedDescription": "Die gasheersleutel vir hierdie bediener het verander sedert jou laaste verbinding. Dit kan op 'n sekuriteitsprobleem dui.",
"previousKey": "Vorige Sleutel",
"newFingerprint": "Nuwe vingerafdruk",
"fingerprint": "Vingerafdruk",
"verifyInstructions": "As jy hierdie gasheer vertrou, klik Aanvaar om voort te gaan en hierdie vingerafdruk vir toekomstige verbindings te stoor.",
"securityWarning": "Sekuriteitswaarskuwing",
"acceptAndContinue": "Aanvaar en Gaan voort",
"acceptNewKey": "Aanvaar Nuwe Sleutel & Gaan Voort"
},
"errors": {
"notFound": "Bladsy nie gevind nie",
"unauthorized": "Ongemagtigde toegang",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminaal",
"hostSidebarSettings": "Gasheer en sybalk",
"snippetsSettings": "Brokkies",
"confirmSnippetExecution": "Bevestig Uitvoering van Brokkie",
"confirmSnippetExecutionDesc": "Wys bevestigingsdialoog voordat brokkies uitgevoer word",
"updateSettings": "Opdaterings",
"disableUpdateCheck": "Deaktiveer Opdateringskontrole",
"disableUpdateCheckDesc": "Hou op om vir nuwe weergawes te kyk tydens opstart en op die dashboard. Verminder netwerkversoeke.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 of example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "وثائق التفويض",
"credentialsViewer": "عارض وثائق التفويض",
"manageYourSSHCredentials": "إدارة بيانات اعتماد SSH الخاصة بك بشكل آمن",
"addCredential": "إضافة بيانات اعتماد",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "سيؤدي هذا بأمان إلى إضافة المفتاح العمومي إلى ملف المضيف الهدف ~/.ssh/authorized_keyys دون الكتابة فوق المفاتيح الموجودة. العملية قابلة للرجوع عنها.",
"chooseHostToDeploy": "اختر مضيف ليقوم بنشره إلى...",
"deploying": "النشر...",
"copyDeployCommand": "نسخ أمر النشر",
"copyDeployCommandDescription": "نسخ أمر Shell لإضافة المفتاح العام يدوياً إلى ملف مفتاح_مفاتيح مضيف مضيف. مفيد عندما يتم تعطيل مصادقة كلمة المرور.",
"deployCommandCopied": "نشر أمر نسخ إلى الحافظة",
"manualDeployInfo": "قم بلصق هذا الأمر في محطة المضيف المستهدفة (مثل وحدة تحكم Proxmox أو IPMI، أو الوصول المادي) لإضافة مفتاح SSH.",
"name": "الاسم",
"noHostsAvailable": "لا يوجد مضيفين متاحين",
"noHostsMatchSearch": "لا يوجد مضيف يطابق بحثك",
@@ -303,9 +298,7 @@
"createFolder": "إنشاء مجلد",
"editFolder": "تعديل المجلد",
"editFolderDescription": "تخصيص مجلد كتلة الكود",
"createFolderDescription": "تنظيم كتل الكتل في مجلدات",
"confirmExecution": "تنفيذ \"{{name}}\"؟",
"confirmExecutionDesc": "هل أنت متأكد من أنك تريد تنفيذ كتلة الكود هذه؟"
"createFolderDescription": "تنظيم كتل الكتل في مجلدات"
},
"commandHistory": {
"title": "التاريخ",
@@ -409,7 +402,6 @@
"required": "مطلوب",
"optional": "اختياري",
"connect": "الاتصال",
"copied": "منسوخ",
"connecting": "جاري الاتصال...",
"creating": "إنشاء...",
"clear": "مسح",
@@ -502,7 +494,6 @@
"checking": "يتحقق...",
"checkingDatabase": "التحقق من اتصال قاعدة البيانات...",
"checkingAuthentication": "التحقق من المصادقة...",
"backendReconnected": "تم استعادة اتصال الخادم",
"actions": "الإجراءات",
"remove": "إزالة",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "مدير المضيف",
"hosts": "المضيفون",
"sshHosts": "مضيفي SSH",
"noHosts": "لا يوجد مضيفين SSH",
"noHostsMessage": "لم تقم بإضافة أي مضيف SSH حتى الآن. انقر فوق \"إضافة مضيف\" للبدء.",
@@ -846,7 +836,7 @@
"failedToImportJson": "فشل استيراد ملف JSON",
"connectionDetails": "تفاصيل الاتصال",
"organization": "المنظمة",
"ipAddress": "عنوان IP أو اسم المضيف",
"ipAddress": "عنوان IP",
"port": "المنفذ",
"name": "الاسم",
"username": "اسم المستخدم",
@@ -925,8 +915,6 @@
"key": "المفتاح",
"credential": "بيانات",
"none": "لا",
"opkssh": "فتح",
"opksshAuthDescription": "يمنحك الحصول على مصادقة ويب OPKSSH عند كل اتصال. رمز المصادقة الخاص بك سوف يستمر لمدة 24 ساعة حتى يجب تجديده.",
"selectCredential": "حدد بيانات الاعتماد",
"selectCredentialPlaceholder": "اختر بيانات الاعتماد...",
"credentialRequired": "الاعتماد مطلوب عند استخدام مصادقة الاعتماد",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "المصادقة التفاعلية على لوحة المفاتيح",
"noneAuthDescription": "طريقة المصادقة هذه ستستخدم مصادقة لوحة المفاتيح التفاعلية عند الاتصال بخادم SSH.",
"noneAuthDetails": "المصادقة التفاعلية بلوحة المفاتيح تسمح للخادم بمطالبتك للحصول على بيانات الاعتماد أثناء الاتصال. هذا مفيد للخوادم التي تتطلب مصادقة متعددة العناصر أو إذا كنت لا تريد حفظ بيانات الاعتماد محلياً.",
"opksshAuthTitle": "المصادقة المفتوحة",
"forceKeyboardInteractive": "تفعيل لوحة المفاتيح",
"forceKeyboardInteractiveDesc": "يفرض استخدام مصادقة لوحة المفاتيح التفاعلية. هذا مطلوب أحيانا للخوادم التي تستخدم المصادقة الثنائية (TOTP/2FA).",
"overrideCredentialUsername": "تجاوز اسم المستخدم",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "فتح في المتصفح",
"warpgateContinue": "لقد أكملت المصادقة",
"warpgateTimeout": "انتهت مهلة مصادقة التحذير. الرجاء إعادة الاتصال.",
"opksshAuthRequired": "المصادقة مفتوحة مطلوبة",
"opksshAuthDescription": "أكمل المصادقة في المتصفح الخاص بك للمتابعة. ستبقى هذه الجلسة صالحة لمدة 24 ساعة.",
"opksshAuthUrl": "رابط المصادقة",
"opksshOpenBrowser": "فتح المتصفح للمصادقة",
"opksshWaitingForAuth": "في انتظار المصادقة في المتصفح...",
"opksshAuthenticating": "جاري معالجة المصادقة...",
"opksshTimeout": "انتهت مهلة المصادقة. الرجاء المحاولة مرة أخرى.",
"opksshAuthFailed": "فشلت المصادقة. الرجاء التحقق من بيانات الاعتماد الخاصة بك وحاول مرة أخرى.",
"opksshConfigMissing": "لم يتم العثور على تكوين الفتح. الرجاء إنشاء ~/.opk/config.yml مع إعدادات موفر OIDC. انظر الوثائق: https://github.com/openpubkey/opkssh#config.",
"sudoPasswordPopupTitle": "إدراج كلمة المرور؟",
"sudoPasswordPopupHint": "اضغط Enter للإدراج ، Esc للإلغاء",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "جرب مصادقة {{method}} تلقائياً...",
"totpTimeout": "انتهت مهلة التحقق من TOTP. الرجاء إعادة الاتصال.",
"passwordTimeout": "انتهت مهلة التحقق من كلمة المرور. الرجاء إعادة الاتصال.",
"connectionRejected": "تم رفض الاتصال بواسطة الخادم. الرجاء التحقق من المصادقة الخاصة بك وتكوين الشبكة.",
"hostKeyRejected": "تم رفض التحقق من مفتاح المضيف SSH. تم إلغاء الاتصال."
"connectionRejected": "تم رفض الاتصال بواسطة الخادم. الرجاء التحقق من المصادقة الخاصة بك وتكوين الشبكة."
},
"fileManager": {
"title": "مدير الملفات",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "تم إعادة تعيين كلمة المرور بنجاح",
"passwordResetSuccessDesc": "تم إعادة تعيين كلمة المرور الخاصة بك بنجاح. يمكنك الآن تسجيل الدخول باستخدام كلمة المرور الجديدة."
},
"hostKey": {
"verifyNewHost": "التحقق من مفتاح استضافة SSH",
"keyChangedWarning": "تم تغيير مفتاح المضيف SSH",
"firstConnectionTitle": "أول مرة تتصل بهذا المضيف",
"firstConnectionDescription": "لا يمكن إنشاء صحة هذا المضيف. تحقق من بصمة الإصبع تطابق ما تتوقعه.",
"keyChangedDescription": "مفتاح المضيف لهذا الخادم قد تغير منذ الاتصال الأخير. يمكن أن يشير هذا إلى مشكلة أمنية.",
"previousKey": "المفتاح السابق",
"newFingerprint": "بصمة جديدة",
"fingerprint": "بصمة",
"verifyInstructions": "إذا كنت تثق بهذا المضيف، انقر فوق قبول للمتابعة وحفظ بصمة الإصبع هذه للاتصال في المستقبل.",
"securityWarning": "تحذير الأمان",
"acceptAndContinue": "قبول ومتابعة",
"acceptNewKey": "قبول المفتاح الجديد ومتابعة"
},
"errors": {
"notFound": "لم يتم العثور على الصفحة",
"unauthorized": "الوصول غير المصرح به",
@@ -2063,8 +2026,6 @@
"terminalSettings": "المحطة",
"hostSidebarSettings": "المضيف و الشريط الجانبي",
"snippetsSettings": "كتل الكود",
"confirmSnippetExecution": "تأكيد تنفيذ كتلة الكود",
"confirmSnippetExecutionDesc": "إظهار مربع حوار التأكيد قبل تنفيذ كتل الكود",
"updateSettings": "التحديثات",
"disableUpdateCheck": "تعطيل التحقق من التحديث",
"disableUpdateCheckDesc": "إيقاف التحقق من الإصدارات الجديدة عند بدء التشغيل و لوحة التحكم. يقلل من طلبات الشبكة.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1-1 أو مثال.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Пълномощия",
"credentialsViewer": "Преглед на идентификационни данни",
"manageYourSSHCredentials": "Управлявайте сигурно вашите SSH идентификационни данни",
"addCredential": "Добавяне на идентификационни данни",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Това безопасно ще добави публичния ключ към файла ~/.ssh/authorized_keys на целевия хост, без да презаписва съществуващите ключове. Операцията е обратима.",
"chooseHostToDeploy": "Изберете хост, на който да се разположи...",
"deploying": "Разгръщане...",
"copyDeployCommand": "Копиране на командата за разгръщане",
"copyDeployCommandDescription": "Копирайте команда от shell, за да добавите ръчно публичния ключ към файла authorized_keys на хоста. Полезно е, когато удостоверяването с парола е деактивирано.",
"deployCommandCopied": "Командата за разгръщане е копирана в клипборда",
"manualDeployInfo": "Поставете тази команда в терминала на целевия хост (напр. конзола на Proxmox, IPMI или физически достъп), за да добавите SSH ключа.",
"name": "Име",
"noHostsAvailable": "Няма налични хостове",
"noHostsMatchSearch": "Няма хостове, които да отговарят на вашето търсене",
@@ -303,9 +298,7 @@
"createFolder": "Създаване на папка",
"editFolder": "Редактиране на папка",
"editFolderDescription": "Персонализирайте папката си с фрагменти",
"createFolderDescription": "Организирайте фрагментите си в папки",
"confirmExecution": "Да се изпълни „{{name}}“?",
"confirmExecutionDesc": "Сигурни ли сте, че искате да изпълните този фрагмент?"
"createFolderDescription": "Организирайте фрагментите си в папки"
},
"commandHistory": {
"title": "История",
@@ -409,7 +402,6 @@
"required": "Задължително",
"optional": "По избор",
"connect": "Свържете се",
"copied": "Копирано",
"connecting": "Свързване...",
"creating": "Създаване...",
"clear": "Изчисти",
@@ -502,7 +494,6 @@
"checking": "Проверка...",
"checkingDatabase": "Проверка на връзката с базата данни...",
"checkingAuthentication": "Проверка на удостоверяването...",
"backendReconnected": "Връзката със сървъра е възстановена",
"actions": "Действия",
"remove": "Премахване",
"revoke": "Отмяна",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Мениджър на домакини",
"hosts": "Домакини",
"sshHosts": "SSH хостове",
"noHosts": "Няма SSH хостове",
"noHostsMessage": "Все още не сте добавили SSH хостове. Кликнете върху „Добавяне на хост“, за да започнете.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Импортирането на JSON файл не бе успешно",
"connectionDetails": "Детайли за връзката",
"organization": "Организация",
"ipAddress": "IP адрес или име на хост",
"ipAddress": "IP адрес",
"port": "Порт",
"name": "Име",
"username": "Потребителско име",
@@ -925,8 +915,6 @@
"key": "Ключ",
"credential": "Пълномощия",
"none": "Няма",
"opkssh": "ОПКСШ",
"opksshAuthDescription": "Подканва ви за OPKSSH уеб-авторизация при всяко свързване. Вашият токен за удостоверяване ще бъде валиден 24 часа, докато не се наложи да бъде подновен.",
"selectCredential": "Изберете идентификационни данни",
"selectCredentialPlaceholder": "Изберете удостоверение за самоличност...",
"credentialRequired": "Изисква се удостоверяване на идентификационни данни при използване на удостоверяване с идентификационни данни",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Интерактивно удостоверяване с клавиатура",
"noneAuthDescription": "Този метод за удостоверяване ще използва интерактивно удостоверяване с клавиатура при свързване към SSH сървъра.",
"noneAuthDetails": "Интерактивното удостоверяване с клавиатура позволява на сървъра да ви пита за идентификационни данни по време на връзка. Това е полезно за сървъри, които изискват многофакторно удостоверяване или ако не искате да запазвате идентификационните данни локално.",
"opksshAuthTitle": "OPKSSH удостоверяване",
"forceKeyboardInteractive": "Принудително интерактивно с клавиатура",
"forceKeyboardInteractiveDesc": "Налага използването на интерактивно удостоверяване с клавиатура. Това понякога е необходимо за сървъри, които използват двуфакторно удостоверяване (TOTP/2FA).",
"overrideCredentialUsername": "Замяна на потребителско име за идентификационни данни",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Отваряне в браузъра",
"warpgateContinue": "Завърших удостоверяването",
"warpgateTimeout": "Времето за изчакване за удостоверяване на Warpgate изтече. Моля, свържете се отново.",
"opksshAuthRequired": "Изисква се удостоверяване на OPKSSH",
"opksshAuthDescription": "За да продължите, завършете удостоверяването в браузъра си. Тази сесия ще остане валидна 24 часа.",
"opksshAuthUrl": "URL адрес за удостоверяване",
"opksshOpenBrowser": "Отворете браузъра за удостоверяване",
"opksshWaitingForAuth": "Чака се удостоверяване в браузъра...",
"opksshAuthenticating": "Обработва се удостоверяване...",
"opksshTimeout": "Времето за изчакване на удостоверяването изтече. Моля, опитайте отново.",
"opksshAuthFailed": "Удостоверяването не бе успешно. Моля, проверете идентификационните си данни и опитайте отново.",
"opksshConfigMissing": "Конфигурацията на OPKSSH не е намерена. Моля, създайте ~/.opk/config.yml с настройките на вашия OIDC доставчик. Вижте документацията: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Въвеждане на парола?",
"sudoPasswordPopupHint": "Натиснете Enter за вмъкване, Esc за отхвърляне",
"sudoPasswordPopupConfirm": "Вмъкване",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Автоматичен опит за {{method}} удостоверяване...",
"totpTimeout": "Времето за изчакване за проверка на TOTP изтече. Моля, свържете се отново.",
"passwordTimeout": "Времето за изчакване за потвърждение на паролата изтече. Моля, свържете се отново.",
"connectionRejected": "Връзката е отхвърлена от сървъра. Моля, проверете удостоверяването и мрежовата си конфигурация.",
"hostKeyRejected": "Проверката на SSH ключа за хост е отхвърлена. Връзката е прекратена."
"connectionRejected": "Връзката е отхвърлена от сървъра. Моля, проверете удостоверяването и мрежовата си конфигурация."
},
"fileManager": {
"title": "Файлов мениджър",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Успешно възстановяване на паролата",
"passwordResetSuccessDesc": "Паролата ви е нулирана успешно. Вече можете да влезете с новата си парола."
},
"hostKey": {
"verifyNewHost": "Проверка на SSH хост ключа",
"keyChangedWarning": "SSH ключът на хоста е променен",
"firstConnectionTitle": "Първо свързване с този хост",
"firstConnectionDescription": "Автентичността на този хост не може да бъде установена. Проверете дали пръстовият отпечатък съответства на очакванията ви.",
"keyChangedDescription": "Ключът на хоста за този сървър се е променил от последното ви свързване. Това може да показва проблем със сигурността.",
"previousKey": "Предишен ключ",
"newFingerprint": "Нов пръстов отпечатък",
"fingerprint": "Пръстов отпечатък",
"verifyInstructions": "Ако имате доверие на този хост, щракнете върху „Приемам“, за да продължите и да запазите този пръстов отпечатък за бъдещи връзки.",
"securityWarning": "Предупреждение за сигурност",
"acceptAndContinue": "Приемам и продължавам",
"acceptNewKey": "Приемете новия ключ и продължете"
},
"errors": {
"notFound": "Страницата не е намерена",
"unauthorized": "Неоторизиран достъп",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Терминал",
"hostSidebarSettings": "Хост и странична лента",
"snippetsSettings": "Откъси",
"confirmSnippetExecution": "Потвърждаване на изпълнението на фрагмента",
"confirmSnippetExecutionDesc": "Показване на диалогов прозорец за потвърждение преди изпълнение на фрагменти",
"updateSettings": "Актуализации",
"disableUpdateCheck": "Деактивиране на проверката за актуализации",
"disableUpdateCheckDesc": "Спрете проверката за нови версии при стартиране и таблото за управление. Намалява мрежовите заявки.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 или example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "পরিচয়পত্র",
"credentialsViewer": "শংসাপত্র দর্শক",
"manageYourSSHCredentials": "আপনার SSH শংসাপত্রগুলি নিরাপদে পরিচালনা করুন",
"addCredential": "শংসাপত্র যোগ করুন",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "এটি বিদ্যমান কীগুলিকে ওভাররাইট না করেই টার্গেট হোস্টের ~/.ssh/authorized_keys ফাইলে নিরাপদে পাবলিক কী যুক্ত করবে। এই অপারেশনটি বিপরীতমুখী।",
"chooseHostToDeploy": "স্থাপনের জন্য একটি হোস্ট বেছে নিন...",
"deploying": "স্থাপন করা হচ্ছে...",
"copyDeployCommand": "ডিপ্লয় কমান্ড কপি করুন",
"copyDeployCommandDescription": "হোস্টের authorized_keys ফাইলে পাবলিক কী ম্যানুয়ালি যোগ করার জন্য একটি শেল কমান্ড কপি করুন। পাসওয়ার্ড প্রমাণীকরণ অক্ষম থাকলে এটি কার্যকর।",
"deployCommandCopied": "ডিপ্লয় কমান্ড ক্লিপবোর্ডে কপি করা হয়েছে",
"manualDeployInfo": "SSH কী যোগ করতে টার্গেট হোস্টের টার্মিনালে (যেমন, Proxmox কনসোল, IPMI, অথবা ফিজিক্যাল অ্যাক্সেস) এই কমান্ডটি পেস্ট করুন।",
"name": "নাম",
"noHostsAvailable": "কোনও হোস্ট উপলব্ধ নেই",
"noHostsMatchSearch": "আপনার অনুসন্ধানের সাথে কোনও হোস্ট মেলেনি।",
@@ -303,9 +298,7 @@
"createFolder": "ফোল্ডার তৈরি করুন",
"editFolder": "ফোল্ডার সম্পাদনা করুন",
"editFolderDescription": "আপনার স্নিপেট ফোল্ডারটি কাস্টমাইজ করুন",
"createFolderDescription": "আপনার স্নিপেটগুলিকে ফোল্ডারে সাজান",
"confirmExecution": "\"{{name}}\" কার্যকর করবেন?",
"confirmExecutionDesc": "আপনি কি নিশ্চিত যে আপনি এই স্নিপেটটি কার্যকর করতে চান?"
"createFolderDescription": "আপনার স্নিপেটগুলিকে ফোল্ডারে সাজান"
},
"commandHistory": {
"title": "ইতিহাস",
@@ -409,7 +402,6 @@
"required": "প্রয়োজনীয়",
"optional": "ঐচ্ছিক",
"connect": "সংযোগ করুন",
"copied": "কপি করা হয়েছে",
"connecting": "সংযোগ করা হচ্ছে...",
"creating": "তৈরি করা হচ্ছে...",
"clear": "পরিষ্কার",
@@ -502,7 +494,6 @@
"checking": "পরীক্ষা করা হচ্ছে...",
"checkingDatabase": "ডাটাবেস সংযোগ পরীক্ষা করা হচ্ছে...",
"checkingAuthentication": "প্রমাণীকরণ পরীক্ষা করা হচ্ছে...",
"backendReconnected": "সার্ভার সংযোগ পুনরুদ্ধার করা হয়েছে",
"actions": "কর্ম",
"remove": "অপসারণ",
"revoke": "প্রত্যাহার করুন",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "হোস্ট ম্যানেজার",
"hosts": "হোস্ট",
"sshHosts": "SSH হোস্ট",
"noHosts": "কোনও SSH হোস্ট নেই",
"noHostsMessage": "আপনি এখনও কোনও SSH হোস্ট যোগ করেননি। শুরু করতে \"হোস্ট যোগ করুন\" এ ক্লিক করুন।",
@@ -846,7 +836,7 @@
"failedToImportJson": "JSON ফাইল আমদানি করা যায়নি",
"connectionDetails": "সংযোগের বিবরণ",
"organization": "সংগঠন",
"ipAddress": "আইপি ঠিকানা অথবা হোস্টনেম",
"ipAddress": "আইপি ঠিকানা",
"port": "বন্দর",
"name": "নাম",
"username": "ব্যবহারকারীর নাম",
@@ -925,8 +915,6 @@
"key": "চাবি",
"credential": "পরিচয়পত্র",
"none": "কোনটিই নয়",
"opkssh": "OPKSSH সম্পর্কে",
"opksshAuthDescription": "প্রতিটি সংযোগের সময় আপনাকে OPKSSH ওয়েব-অনুমোদনের জন্য অনুরোধ করবে। আপনার অথ টোকেনটি পুনর্নবীকরণ না করা পর্যন্ত 24 ঘন্টা স্থায়ী হবে।",
"selectCredential": "শংসাপত্র নির্বাচন করুন",
"selectCredentialPlaceholder": "একটি শংসাপত্র বেছে নিন...",
"credentialRequired": "শংসাপত্র প্রমাণীকরণ ব্যবহার করার সময় শংসাপত্র প্রয়োজন",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "কীবোর্ড-ইন্টারেক্টিভ প্রমাণীকরণ",
"noneAuthDescription": "এই প্রমাণীকরণ পদ্ধতিটি SSH সার্ভারের সাথে সংযোগ করার সময় কীবোর্ড-ইন্টারেক্টিভ প্রমাণীকরণ ব্যবহার করবে।",
"noneAuthDetails": "কীবোর্ড-ইন্টারেক্টিভ প্রমাণীকরণের মাধ্যমে সার্ভার সংযোগের সময় আপনাকে শংসাপত্রের জন্য অনুরোধ করতে পারে। এটি এমন সার্ভারগুলির জন্য কার্যকর যাদের মাল্টি-ফ্যাক্টর প্রমাণীকরণের প্রয়োজন হয় অথবা যদি আপনি স্থানীয়ভাবে শংসাপত্র সংরক্ষণ করতে না চান।",
"opksshAuthTitle": "OPKSSH প্রমাণীকরণ",
"forceKeyboardInteractive": "জোর করে কীবোর্ড-ইন্টারেক্টিভ",
"forceKeyboardInteractiveDesc": "কীবোর্ড-ইন্টারেক্টিভ প্রমাণীকরণ ব্যবহার করতে বাধ্য করে। কখনও কখনও টু-ফ্যাক্টর প্রমাণীকরণ (TOTP/2FA) ব্যবহার করে এমন সার্ভারগুলির জন্য এটি প্রয়োজন হয়।",
"overrideCredentialUsername": "শংসাপত্র ব্যবহারকারীর নাম ওভাররাইড করুন",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "ব্রাউজারে খুলুন",
"warpgateContinue": "আমি প্রমাণীকরণ সম্পন্ন করেছি।",
"warpgateTimeout": "ওয়ার্পগেট প্রমাণীকরণের সময়সীমা শেষ। অনুগ্রহ করে পুনরায় সংযোগ করুন।",
"opksshAuthRequired": "OPKSSH প্রমাণীকরণ প্রয়োজন",
"opksshAuthDescription": "চালিয়ে যেতে আপনার ব্রাউজারে প্রমাণীকরণ সম্পূর্ণ করুন। এই সেশনটি 24 ঘন্টার জন্য বৈধ থাকবে।",
"opksshAuthUrl": "প্রমাণীকরণ URL",
"opksshOpenBrowser": "প্রমাণীকরণের জন্য ব্রাউজার খুলুন",
"opksshWaitingForAuth": "ব্রাউজারে প্রমাণীকরণের জন্য অপেক্ষা করা হচ্ছে...",
"opksshAuthenticating": "প্রমাণীকরণ প্রক্রিয়া করা হচ্ছে...",
"opksshTimeout": "প্রমাণীকরণের সময় শেষ। অনুগ্রহ করে আবার চেষ্টা করুন।",
"opksshAuthFailed": "প্রমাণীকরণ ব্যর্থ হয়েছে। অনুগ্রহ করে আপনার শংসাপত্রগুলি পরীক্ষা করে আবার চেষ্টা করুন।",
"opksshConfigMissing": "OPKSSH কনফিগারেশন খুঁজে পাওয়া যায়নি। আপনার OIDC প্রোভাইডার সেটিংস দিয়ে ~/.opk/config.yml তৈরি করুন। ডকুমেন্টেশন দেখুন: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "পাসওয়ার্ড ঢোকাবেন?",
"sudoPasswordPopupHint": "সন্নিবেশ করতে Enter টিপুন এবং খারিজ করতে Esc টিপুন",
"sudoPasswordPopupConfirm": "ঢোকান",
@@ -1359,8 +1337,7 @@
"automaticFallback": "স্বয়ংক্রিয়ভাবে {{method}} প্রমাণীকরণ চেষ্টা করা হচ্ছে...",
"totpTimeout": "TOTP যাচাইকরণের সময়সীমা শেষ। অনুগ্রহ করে পুনরায় সংযোগ করুন।",
"passwordTimeout": "পাসওয়ার্ড যাচাইকরণের সময়সীমা শেষ। অনুগ্রহ করে পুনরায় সংযোগ করুন।",
"connectionRejected": "সার্ভার সংযোগ প্রত্যাখ্যান করেছে। অনুগ্রহ করে আপনার প্রমাণীকরণ এবং নেটওয়ার্ক কনফিগারেশন পরীক্ষা করুন।",
"hostKeyRejected": "SSH হোস্ট কী যাচাইকরণ প্রত্যাখ্যাত হয়েছে। সংযোগ বাতিল করা হয়েছে।"
"connectionRejected": "সার্ভার সংযোগ প্রত্যাখ্যান করেছে। অনুগ্রহ করে আপনার প্রমাণীকরণ এবং নেটওয়ার্ক কনফিগারেশন পরীক্ষা করুন।"
},
"fileManager": {
"title": "ফাইল ম্যানেজার",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "পাসওয়ার্ড রিসেট সফল হয়েছে",
"passwordResetSuccessDesc": "আপনার পাসওয়ার্ড সফলভাবে রিসেট করা হয়েছে। আপনি এখন আপনার নতুন পাসওয়ার্ড দিয়ে লগ ইন করতে পারেন।"
},
"hostKey": {
"verifyNewHost": "SSH হোস্ট কী যাচাই করুন",
"keyChangedWarning": "SSH হোস্ট কী পরিবর্তন করা হয়েছে",
"firstConnectionTitle": "এই হোস্টের সাথে প্রথমবার সংযোগ করা হচ্ছে",
"firstConnectionDescription": "এই হোস্টের সত্যতা যাচাই করা যাচ্ছে না। আপনার প্রত্যাশার সাথে আঙুলের ছাপের মিল আছে কিনা তা যাচাই করুন।",
"keyChangedDescription": "আপনার শেষ সংযোগের পর থেকে এই সার্ভারের হোস্ট কী পরিবর্তিত হয়েছে। এটি কোনও নিরাপত্তা সমস্যা নির্দেশ করতে পারে।",
"previousKey": "পূর্ববর্তী কী",
"newFingerprint": "নতুন ফিঙ্গারপ্রিন্ট",
"fingerprint": "আঙুলের ছাপ",
"verifyInstructions": "যদি আপনি এই হোস্টটিকে বিশ্বাস করেন, তাহলে চালিয়ে যেতে \"গ্রহণ করুন\" এ ক্লিক করুন এবং ভবিষ্যতের সংযোগের জন্য এই আঙ্গুলের ছাপটি সংরক্ষণ করুন।",
"securityWarning": "নিরাপত্তা সতর্কতা",
"acceptAndContinue": "গ্রহণ করুন এবং চালিয়ে যান",
"acceptNewKey": "নতুন কী গ্রহণ করুন এবং চালিয়ে যান"
},
"errors": {
"notFound": "পৃষ্ঠাটি খুঁজে পাওয়া যায়নি",
"unauthorized": "অননুমোদিত প্রবেশাধিকার",
@@ -2063,8 +2026,6 @@
"terminalSettings": "টার্মিনাল",
"hostSidebarSettings": "হোস্ট এবং সাইডবার",
"snippetsSettings": "স্নিপেটস",
"confirmSnippetExecution": "স্নিপেট এক্সিকিউশন নিশ্চিত করুন",
"confirmSnippetExecutionDesc": "স্নিপেট চালানোর আগে নিশ্চিতকরণ ডায়ালগ দেখান",
"updateSettings": "আপডেট",
"disableUpdateCheck": "আপডেট চেক অক্ষম করুন",
"disableUpdateCheckDesc": "স্টার্টআপ এবং ড্যাশবোর্ডে নতুন সংস্করণ পরীক্ষা করা বন্ধ করুন। নেটওয়ার্ক অনুরোধ হ্রাস করে।",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "০০০০০০",
"ipAddress": "১৯২.১৬৮.১.১ অথবা example.com",
"ipAddress": "১২৭...১",
"port": "২২",
"maxRetries": "৩",
"retryInterval": "১০",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Credencials",
"credentialsViewer": "Visualitzador de credencials",
"manageYourSSHCredentials": "Gestiona les teves credencials SSH de manera segura",
"addCredential": "Afegeix credencials",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Això afegirà de manera segura la clau pública al fitxer ~/.ssh/authorized_keys de l'amfitrió de destinació sense sobreescriure les claus existents. L'operació és reversible.",
"chooseHostToDeploy": "Trieu un amfitrió on implementar...",
"deploying": "S'està desplegant...",
"copyDeployCommand": "Copia l'ordre de desplegament",
"copyDeployCommandDescription": "Copia una ordre de shell per afegir manualment la clau pública al fitxer authorized_keys d'un host. Útil quan l'autenticació amb contrasenya està desactivada.",
"deployCommandCopied": "L'ordre de desplegament s'ha copiat al porta-retalls",
"manualDeployInfo": "Enganxeu aquesta ordre al terminal de l'amfitrió de destinació (per exemple, la consola de Proxmox, IPMI o l'accés físic) per afegir la clau SSH.",
"name": "Nom",
"noHostsAvailable": "No hi ha amfitrions disponibles",
"noHostsMatchSearch": "No hi ha amfitrions que coincideixin amb la teva cerca",
@@ -303,9 +298,7 @@
"createFolder": "Crea una carpeta",
"editFolder": "Edita la carpeta",
"editFolderDescription": "Personalitza la carpeta de fragments",
"createFolderDescription": "Organitza els teus fragments en carpetes",
"confirmExecution": "Executar \"{{name}}\"?",
"confirmExecutionDesc": "Esteu segur que voleu executar aquest fragment?"
"createFolderDescription": "Organitza els teus fragments en carpetes"
},
"commandHistory": {
"title": "Història",
@@ -409,7 +402,6 @@
"required": "Obligatori",
"optional": "Opcional",
"connect": "Connecta",
"copied": "Copiat",
"connecting": "Connectant...",
"creating": "Creant...",
"clear": "Clar",
@@ -502,7 +494,6 @@
"checking": "S'està revisant...",
"checkingDatabase": "S'està comprovant la connexió a la base de dades...",
"checkingAuthentication": "S'està comprovant l'autenticació...",
"backendReconnected": "Connexió al servidor restaurada",
"actions": "Accions",
"remove": "Elimina",
"revoke": "Revocar",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Gestor d'amfitrions",
"hosts": "Amfitrions",
"sshHosts": "Amfitrions SSH",
"noHosts": "Sense amfitrions SSH",
"noHostsMessage": "Encara no has afegit cap amfitrió SSH. Fes clic a \"Afegeix amfitrió\" per començar.",
@@ -846,7 +836,7 @@
"failedToImportJson": "No s'ha pogut importar el fitxer JSON",
"connectionDetails": "Detalls de la connexió",
"organization": "Organització",
"ipAddress": "Adreça IP o nom d'amfitrió",
"ipAddress": "Adreça IP",
"port": "Port",
"name": "Nom",
"username": "Nom d'usuari",
@@ -925,8 +915,6 @@
"key": "Clau",
"credential": "Credencial",
"none": "Cap",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Et demana l'autenticació web OPKSSH cada vegada que et connectes. El teu testimoni d'autenticació durarà 24 hores fins que s'hagi de renovar.",
"selectCredential": "Selecciona la credencial",
"selectCredentialPlaceholder": "Trieu una credencial...",
"credentialRequired": "Cal tenir credencials quan s'utilitza l'autenticació de credencials",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Autenticació interactiva amb teclat",
"noneAuthDescription": "Aquest mètode d'autenticació utilitzarà l'autenticació interactiva del teclat quan es connecti al servidor SSH.",
"noneAuthDetails": "L'autenticació interactiva amb teclat permet que el servidor us demani credencials durant la connexió. Això és útil per a servidors que requereixen autenticació multifactor o si no voleu desar les credencials localment.",
"opksshAuthTitle": "Autenticació OPKSSH",
"forceKeyboardInteractive": "Forçar la interacció del teclat",
"forceKeyboardInteractiveDesc": "Força l'ús de l'autenticació interactiva amb teclat. De vegades, això és necessari per a servidors que utilitzen l'autenticació de dos factors (TOTP/2FA).",
"overrideCredentialUsername": "Substitueix les credencials i el nom d'usuari",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Obre al navegador",
"warpgateContinue": "He completat l'autenticació",
"warpgateTimeout": "Temps d'espera d'autenticació de Warpgate. Si us plau, torneu a connectar-vos.",
"opksshAuthRequired": "Cal autenticació OPKSSH",
"opksshAuthDescription": "Completeu l'autenticació al navegador per continuar. Aquesta sessió serà vàlida durant 24 hores.",
"opksshAuthUrl": "URL d'autenticació",
"opksshOpenBrowser": "Obre el navegador per autenticar-te",
"opksshWaitingForAuth": "Esperant l'autenticació al navegador...",
"opksshAuthenticating": "Processant l'autenticació...",
"opksshTimeout": "S'ha esgotat el temps d'autenticació. Torna-ho a provar.",
"opksshAuthFailed": "L'autenticació ha fallat. Si us plau, comproveu les vostres credencials i torneu-ho a intentar.",
"opksshConfigMissing": "No s'ha trobat la configuració d'OPKSSH. Si us plau, creeu ~/.opk/config.yml amb la configuració del vostre proveïdor OIDC. Vegeu la documentació: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Voleu inserir la contrasenya?",
"sudoPasswordPopupHint": "Premeu Intro per inserir, Esc per tancar",
"sudoPasswordPopupConfirm": "Insereix",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Intentant automàticament l'autenticació {{method}} ...",
"totpTimeout": "Temps d'espera de verificació TOTP superat. Si us plau, torneu a connectar-vos.",
"passwordTimeout": "Temps d'espera de verificació de la contrasenya. Si us plau, torneu a connectar-vos.",
"connectionRejected": "Connexió rebutjada pel servidor. Si us plau, comproveu l'autenticació i la configuració de xarxa.",
"hostKeyRejected": "Verificació de la clau de l'amfitrió SSH rebutjada. Connexió cancel·lada."
"connectionRejected": "Connexió rebutjada pel servidor. Si us plau, comproveu l'autenticació i la configuració de xarxa."
},
"fileManager": {
"title": "Gestor de fitxers",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Restabliment de la contrasenya correcte",
"passwordResetSuccessDesc": "La teva contrasenya s'ha restablert correctament. Ara pots iniciar la sessió amb la nova contrasenya."
},
"hostKey": {
"verifyNewHost": "Verifica la clau d'amfitrió SSH",
"keyChangedWarning": "Clau d'amfitrió SSH canviada",
"firstConnectionTitle": "Primera vegada que em connecto a aquest amfitrió",
"firstConnectionDescription": "No es pot establir l'autenticitat d'aquest amfitrió. Verifiqueu que l'empremta digital coincideixi amb el que espereu.",
"keyChangedDescription": "La clau d'amfitrió d'aquest servidor ha canviat des de la vostra última connexió. Això podria indicar un problema de seguretat.",
"previousKey": "Clau anterior",
"newFingerprint": "Nova empremta digital",
"fingerprint": "Empremta digital",
"verifyInstructions": "Si confieu en aquest amfitrió, feu clic a Accepta per continuar i desar aquesta empremta digital per a futures connexions.",
"securityWarning": "Avís de seguretat",
"acceptAndContinue": "Accepta i continua",
"acceptNewKey": "Accepta la clau nova i continua"
},
"errors": {
"notFound": "Pàgina no trobada",
"unauthorized": "Accés no autoritzat",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Amfitrió i barra lateral",
"snippetsSettings": "Fragments",
"confirmSnippetExecution": "Confirma l'execució del fragment",
"confirmSnippetExecutionDesc": "Mostra el diàleg de confirmació abans d'executar fragments",
"updateSettings": "Actualitzacions",
"disableUpdateCheck": "Desactiva la comprovació d'actualitzacions",
"disableUpdateCheckDesc": "Deixa de comprovar si hi ha noves versions a l'inici i al tauler de control. Redueix les sol·licituds de xarxa.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 o example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Pověření",
"credentialsViewer": "Prohlížeč přihlašovacích údajů",
"manageYourSSHCredentials": "Bezpečná správa přihlašovacích údajů SSH",
"addCredential": "Přidat pověření",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Toto bezpečně přidá veřejný klíč do souboru ~/.ssh/authorized_keys bez přepsání existujících klíčů. Operace je vratná.",
"chooseHostToDeploy": "Vyberte hostitele pro nasazení...",
"deploying": "Nasazování...",
"copyDeployCommand": "Kopírovat příkaz pro nasazení",
"copyDeployCommandDescription": "Zkopírujte příkaz shell do manuálního přidání veřejného klíče do souboru autorized_keys. Užitečné, pokud je heslo vypnuto.",
"deployCommandCopied": "Příkaz nasazení zkopírován do schránky",
"manualDeployInfo": "Vložte tento příkaz do terminálu cílového hostitele (např. Proxmox konzola, IPMI nebo fyzický přístup) pro přidání SSH klíče.",
"name": "Název",
"noHostsAvailable": "Nejsou k dispozici žádní hostitelé",
"noHostsMatchSearch": "Žádné hostitele neodpovídají vašemu hledání",
@@ -303,9 +298,7 @@
"createFolder": "Vytvořit složku",
"editFolder": "Upravit složku",
"editFolderDescription": "Přizpůsobit složku snippetu",
"createFolderDescription": "Uspořádat úryvky do složek",
"confirmExecution": "Spustit \"{{name}}\"?",
"confirmExecutionDesc": "Jste si jisti, že chcete spustit tento snippet?"
"createFolderDescription": "Uspořádat úryvky do složek"
},
"commandHistory": {
"title": "Historie",
@@ -409,7 +402,6 @@
"required": "Požadováno",
"optional": "Nepovinné",
"connect": "Připojit",
"copied": "Zkopírováno",
"connecting": "Připojování...",
"creating": "Vytváření...",
"clear": "Vyčistit",
@@ -502,7 +494,6 @@
"checking": "Kontroluje...",
"checkingDatabase": "Kontrola připojení k databázi...",
"checkingAuthentication": "Kontrola ověřování...",
"backendReconnected": "Připojení k serveru obnoveno",
"actions": "Akce",
"remove": "Odebrat",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Manažer serveru",
"hosts": "Hostitelé",
"sshHosts": "SSH hostitelé",
"noHosts": "Žádné SSH hostitele",
"noHostsMessage": "Zatím jste nepřidali žádné SSH hostitele. Chcete-li začít, klikněte na \"Přidat hostitele\".",
@@ -846,7 +836,7 @@
"failedToImportJson": "Nepodařilo se importovat soubor JSON",
"connectionDetails": "Detaily připojení",
"organization": "Organizace",
"ipAddress": "IP adresa nebo název hostitele",
"ipAddress": "IP adresa",
"port": "Přístav",
"name": "Název",
"username": "Uživatelské jméno",
@@ -925,8 +915,6 @@
"key": "Klíč",
"credential": "Pověření",
"none": "Nic",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Vyzývá vás k ověření webového serveru OPKSSH při každém připojení. Váš autentizační token bude trvat 24 hodin, dokud nebude nutné jej obnovit.",
"selectCredential": "Vybrat pověření",
"selectCredentialPlaceholder": "Zvolte přihlašovací údaje...",
"credentialRequired": "Při použití ověření pověření je vyžadováno pověření",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Klávesnice interaktivní ověření",
"noneAuthDescription": "Tato metoda ověřování bude při připojování k serveru SSH používat klávesnice-interaktivní ověřování.",
"noneAuthDetails": "Klávesnice - interaktivní autentizace umožňuje serveru požádat vás o přihlašovací údaje při připojení. Toto je užitečné pro servery, které vyžadují vícefázové autentifikaci, nebo pokud nechcete lokálně ukládat přihlašovací údaje.",
"opksshAuthTitle": "Ověření OPKSSH",
"forceKeyboardInteractive": "Vynutit interaktivní klávesnici",
"forceKeyboardInteractiveDesc": "Vynucuje použití klávesnice interaktivní autentizace. To je někdy nutné u serverů, které používají dvoufaktorové ověřování (TOTP/2FA).",
"overrideCredentialUsername": "Přepsat pověření uživatelské jméno",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Otevřít v prohlížeči",
"warpgateContinue": "Dokončil jsem ověření",
"warpgateTimeout": "Časový limit autentizace Warpgate vypršel. Připojte se.",
"opksshAuthRequired": "Vyžadováno ověření OPKSSH",
"opksshAuthDescription": "Dokončete ověření ve vašem prohlížeči, abyste mohli pokračovat. Tato relace zůstane v platnosti 24 hodin.",
"opksshAuthUrl": "Ověřovací URL",
"opksshOpenBrowser": "Otevřete prohlížeč pro ověření",
"opksshWaitingForAuth": "Čekání na ověřování v prohlížeči...",
"opksshAuthenticating": "Zpracovávání ověřování...",
"opksshTimeout": "Vypršel časový limit ověření. Zkuste to prosím znovu.",
"opksshAuthFailed": "Ověření se nezdařilo. Zkontrolujte prosím vaše přihlašovací údaje a zkuste to znovu.",
"opksshConfigMissing": "Nastavení OPKSSH nebylo nalezeno. Vytvořte prosím ~/.opk/config.yml s nastavením OIDC poskytovatele. Viz dokumentace: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Vložit heslo?",
"sudoPasswordPopupHint": "Stiskněte Enter pro vložení, Esc pro zamítnutí",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Automaticky zkouším {{method}} autentizaci...",
"totpTimeout": "Časový limit ověřování TOTP. Připojte se znovu.",
"passwordTimeout": "Časový limit ověření hesla vypršel. Připojte se znovu.",
"connectionRejected": "Připojení odmítnuto serverem. Zkontrolujte prosím ověření a nastavení sítě.",
"hostKeyRejected": "Ověření SSH hostitele bylo zamítnuto. Připojení bylo zrušeno."
"connectionRejected": "Připojení odmítnuto serverem. Zkontrolujte prosím ověření a nastavení sítě."
},
"fileManager": {
"title": "Správce souborů",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Obnovení hesla úspěšné",
"passwordResetSuccessDesc": "Vaše heslo bylo úspěšně obnoveno. Nyní se můžete přihlásit svým novým heslem."
},
"hostKey": {
"verifyNewHost": "Ověřit klíč SSH hostitele",
"keyChangedWarning": "SSH klíč hostitele změněn",
"firstConnectionTitle": "První připojení k tomuto hostiteli",
"firstConnectionDescription": "Nelze určit pravost tohoto hostitele. Ověřte shodu s tím, co očekáváte.",
"keyChangedDescription": "Hostitelský klíč pro tento server se změnil od vašeho posledního připojení. To by mohlo znamenat bezpečnostní problém.",
"previousKey": "Předchozí klíč",
"newFingerprint": "Nový otisk prstu",
"fingerprint": "Otisk prstu",
"verifyInstructions": "Pokud tomuto hostiteli důvěřujete, klepněte na tlačítko Přijmout pro pokračování a uložení tohoto otisku pro budoucí připojení.",
"securityWarning": "Bezpečnostní varování",
"acceptAndContinue": "Přijmout a pokračovat",
"acceptNewKey": "Přijmout nový klíč a pokračovat"
},
"errors": {
"notFound": "Stránka nenalezena",
"unauthorized": "Neoprávněný přístup",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminál",
"hostSidebarSettings": "Hostitel & postranní panel",
"snippetsSettings": "Výstřižky bloků",
"confirmSnippetExecution": "Potvrdit spuštění snippetu",
"confirmSnippetExecutionDesc": "Zobrazit potvrzovací dialog před spuštěním snippetů",
"updateSettings": "Aktualizace",
"disableUpdateCheck": "Zakázat kontrolu aktualizací",
"disableUpdateCheckDesc": "Zastavit kontrolu nových verzí na startu a řídicím panelu. Sníží síťové požadavky.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 nebo příklad.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Legitimation",
"credentialsViewer": "Legitimationsfremviser",
"manageYourSSHCredentials": "Administrer dine SSH-akkreditiver sikkert",
"addCredential": "Tilføj Credential",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Dette vil sikkert tilføje den offentlige nøgle til målet værtens ~/.ssh / authorized_keys fil uden at overskrive eksisterende nøgler. Handlingen er reversibel.",
"chooseHostToDeploy": "Vælg en vært at implementere til...",
"deploying": "Implementerer...",
"copyDeployCommand": "Kopier Implementeringskommando",
"copyDeployCommandDescription": "Kopiér en skal- kommando for manuelt at tilføje den offentlige nøgle til en værts autoriseret _ keys- fil. Nyttigt når adgangskodegodkendelse er deaktiveret.",
"deployCommandCopied": "Deploy kommando kopieret til udklipsholder",
"manualDeployInfo": "Indsæt denne kommando i målet værtens terminal (fx, Proxmox konsol, IPMI, eller fysisk adgang) for at tilføje SSH-nøglen.",
"name": "Navn",
"noHostsAvailable": "Ingen værter tilgængelige",
"noHostsMatchSearch": "Ingen værter matcher din søgning",
@@ -303,9 +298,7 @@
"createFolder": "Opret Mappe",
"editFolder": "Rediger Mappe",
"editFolderDescription": "Tilpas din snippet mappe",
"createFolderDescription": "Organiser dine snippets i mapper",
"confirmExecution": "Kør \"{{name}}\"?",
"confirmExecutionDesc": "Er du sikker på, at du vil udføre denne snippet?"
"createFolderDescription": "Organiser dine snippets i mapper"
},
"commandHistory": {
"title": "Historik",
@@ -409,7 +402,6 @@
"required": "Påkrævet",
"optional": "Valgfri",
"connect": "Forbind",
"copied": "Kopieret",
"connecting": "Forbinder...",
"creating": "Opretter...",
"clear": "Ryd",
@@ -502,7 +494,6 @@
"checking": "Kontrollerer...",
"checkingDatabase": "Kontrollerer databaseforbindelse...",
"checkingAuthentication": "Kontrollerer godkendelse...",
"backendReconnected": "Server forbindelse gendannet",
"actions": "Handlinger",
"remove": "Fjern",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Vært Manager",
"hosts": "Værter",
"sshHosts": "SSH Værter",
"noHosts": "Ingen SSH værter",
"noHostsMessage": "Du har endnu ikke tilføjet nogen SSH-værter. Klik på \"Tilføj vært\" for at komme i gang.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Kunne ikke importere JSON- fil",
"connectionDetails": "Forbindelse Detaljer",
"organization": "Organisation",
"ipAddress": "Ip adresse eller værtsnavn",
"ipAddress": "Ip Adresse",
"port": "Port",
"name": "Navn",
"username": "Brugernavn",
@@ -925,8 +915,6 @@
"key": "Nøgle",
"credential": "Credential",
"none": "Ingen",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Spørg dig om OPKSSH web-auth ved hver forbindelse. Din auth token vil vare i 24 timer, indtil den skal fornyes.",
"selectCredential": "Vælg Credential",
"selectCredentialPlaceholder": "Vælg en legitimationsoplysning...",
"credentialRequired": "Oplysninger er påkrævet, når du bruger legitimationsoplysninger godkendelse",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Tastatur-Interaktiv Autentificering",
"noneAuthDescription": "Denne godkendelsesmetode vil bruge tastatur-interaktiv godkendelse, når der oprettes forbindelse til SSH-serveren.",
"noneAuthDetails": "Tastatur-interaktiv godkendelse tillader serveren at bede dig om legitimationsoplysninger under forbindelsen. Dette er nyttigt for servere, der kræver multi-faktor godkendelse, eller hvis du ikke ønsker at gemme legitimationsoplysninger lokalt.",
"opksshAuthTitle": "OPKSSH- Godkendelse",
"forceKeyboardInteractive": "Tving Tastatur-Interaktiv",
"forceKeyboardInteractiveDesc": "Kræver brugen af tastatur- interaktiv godkendelse. Dette kræves sommetider for servere, der bruger to- faktor godkendelse (TOTP/2FA).",
"overrideCredentialUsername": "Tilsidesæt Credential Brugernavn",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Åbn i browser",
"warpgateContinue": "Jeg Er Afsluttet Godkendelse",
"warpgateTimeout": "Warpgate authentication timeout. Genforbind.",
"opksshAuthRequired": "OPKSSH Godkendelse Kræves",
"opksshAuthDescription": "Komplet godkendelse i din browser for at fortsætte. Denne session vil forblive gyldig i 24 timer.",
"opksshAuthUrl": "Godkendelses-URL",
"opksshOpenBrowser": "Åbn browser for at godkende",
"opksshWaitingForAuth": "Venter på godkendelse i browser...",
"opksshAuthenticating": "Behandler godkendelse...",
"opksshTimeout": "Godkendelse fik timeout. Prøv venligst igen.",
"opksshAuthFailed": "Godkendelse mislykkedes. Kontroller dine legitimationsoplysninger og prøv igen.",
"opksshConfigMissing": "OPKSSH konfiguration ikke fundet. Opret venligst ~/.opk/config.yml med dine OIDC udbyder indstillinger. Se dokumentation: https://github.com/openpubkey/opkssh#konfiguration",
"sudoPasswordPopupTitle": "Indsæt Adgangskode?",
"sudoPasswordPopupHint": "Tryk på Enter for at indsætte, Esc for at afvise",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Prøver automatisk {{method}} autentificering...",
"totpTimeout": "TOTP bekræftelses-timeout. Genforbind.",
"passwordTimeout": "Adgangskodens bekræftelses-timeout. Opret venligst ny forbindelse.",
"connectionRejected": "Forbindelse afvist af serveren. Tjek venligst din godkendelse og netværkskonfiguration.",
"hostKeyRejected": "SSH-værtnøglebekræftelse afvist. Forbindelse annulleret."
"connectionRejected": "Forbindelse afvist af serveren. Tjek venligst din godkendelse og netværkskonfiguration."
},
"fileManager": {
"title": "Filhåndtering",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Adgangskode Nulstilling Lykkedes",
"passwordResetSuccessDesc": "Din adgangskode er blevet nulstillet. Du kan nu logge ind med din nye adgangskode."
},
"hostKey": {
"verifyNewHost": "Verificér SSH-værtnøgle",
"keyChangedWarning": "SSH Værtsnøgle Ændret",
"firstConnectionTitle": "Første gang der oprettes forbindelse til værten",
"firstConnectionDescription": "Denne værts ægthed kan ikke fastslås. Kontrollér, at fingeraftrykket matcher det, du forventer.",
"keyChangedDescription": "Værtsnøglen for denne server er ændret siden din sidste forbindelse. Dette kan indikere et sikkerhedsproblem.",
"previousKey": "Forrige Nøgle",
"newFingerprint": "Nyt Fingeraftryk",
"fingerprint": "Fingeraftryk",
"verifyInstructions": "Hvis du stoler på denne vært, skal du klikke på Accepter for at fortsætte og gemme dette fingeraftryk til fremtidige forbindelser.",
"securityWarning": "Advarsel Om Sikkerhed",
"acceptAndContinue": "Accepter & Fortsæt",
"acceptNewKey": "Accepter Ny Nøgle Og Fortsæt"
},
"errors": {
"notFound": "Siden blev ikke fundet",
"unauthorized": "Uautoriseret adgang",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Vært & Sidebjælke",
"snippetsSettings": "Stumper",
"confirmSnippetExecution": "Bekræft Udførelse Af Snippet",
"confirmSnippetExecutionDesc": "Vis bekræftelsesdialog før udførelse af snippets",
"updateSettings": "Opdateringer",
"disableUpdateCheck": "Deaktivér Opdateringstjek",
"disableUpdateCheckDesc": "Stop med at kontrollere for nye versioner ved opstart og dashboard. Reducerer netværksanmodninger.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 eller eksempel.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Anmeldedaten",
"credentialsViewer": "Zugangsdaten-Betrachter",
"manageYourSSHCredentials": "SSH Zugangsdaten sicher verwalten",
"addCredential": "Zugangsdaten hinzufügen",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Dies fügt den öffentlichen Schlüssel sicher zur Datei ~/.ssh/authorized_keys des Zielservers hinzu, ohne vorhandene Schlüssel zu überschreiben. Die Operation ist reversibel.",
"chooseHostToDeploy": "Wählen Sie einen Host für den sie bereitstellen soll...",
"deploying": "Verteilen...",
"copyDeployCommand": "Deploy-Befehl kopieren",
"copyDeployCommandDescription": "Kopieren Sie einen Shell-Befehl, um den öffentlichen Schlüssel manuell zu der Datei authorized_keys eines Hosts hinzuzufügen. Nützlich, wenn die Passwort-Authentifizierung deaktiviert ist.",
"deployCommandCopied": "Deploy-Befehl in Zwischenablage kopiert",
"manualDeployInfo": "Fügen Sie diesen Befehl in das Terminal des Ziel-Hosts ein (z.B. Proxmox-Konsole, IPMI oder physikalischer Zugang), um den SSH-Schlüssel hinzuzufügen.",
"name": "Name",
"noHostsAvailable": "Keine Hosts verfügbar",
"noHostsMatchSearch": "Keine Hosts entsprechen Ihrer Suche",
@@ -303,9 +298,7 @@
"createFolder": "Ordner erstellen",
"editFolder": "Ordner bearbeiten",
"editFolderDescription": "Passen Sie Ihren Snippet Ordner an",
"createFolderDescription": "Organisieren Sie Ihre Snippets in Ordner",
"confirmExecution": "\"{{name}} \"ausführen?",
"confirmExecutionDesc": "Sind Sie sicher, dass Sie dieses Snippet ausführen möchten?"
"createFolderDescription": "Organisieren Sie Ihre Snippets in Ordner"
},
"commandHistory": {
"title": "Verlauf",
@@ -409,7 +402,6 @@
"required": "Benötigt",
"optional": "Optional",
"connect": "Verbinden",
"copied": "Kopiert",
"connecting": "Verbinden...",
"creating": "Erstellen...",
"clear": "Leeren",
@@ -502,7 +494,6 @@
"checking": "Überprüfen...",
"checkingDatabase": "Überprüfe Datenbankverbindung...",
"checkingAuthentication": "Authentifizierung wird überprüft...",
"backendReconnected": "Serververbindung wiederhergestellt",
"actions": "Aktionen",
"remove": "Entfernen",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Host-Manager",
"hosts": "Hosts",
"sshHosts": "SSH-Hosts",
"noHosts": "Keine SSH-Hosts",
"noHostsMessage": "Sie haben noch keine SSH-Hosts hinzugefügt. Klicken Sie auf \"Host hinzufügen\", um loszulegen.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Import der JSON-Datei fehlgeschlagen",
"connectionDetails": "Verbindungsdetails",
"organization": "Organisation",
"ipAddress": "IP-Adresse oder Hostname",
"ipAddress": "IP-Adresse",
"port": "Port",
"name": "Name",
"username": "Benutzername",
@@ -925,8 +915,6 @@
"key": "Schlüssel",
"credential": "Anmeldedaten",
"none": "Keine",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Fordern Sie bei jeder Verbindung nach OPKSSH web-auth an. Ihr Auth-Token hält 24 Stunden an, bis es erneuert werden muss.",
"selectCredential": "Anmeldeinformationen auswählen",
"selectCredentialPlaceholder": "Anmeldedaten auswählen...",
"credentialRequired": "Anmeldeinformationen werden benötigt, wenn die Anmeldeinformationen verwendet werden",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Tastatur-Interaktive Authentifizierung",
"noneAuthDescription": "Diese Authentifizierungsmethode verwendet die Tastatur-interaktive Authentifizierung bei der Verbindung zum SSH-Server.",
"noneAuthDetails": "Die interaktive Keyboard-Authentifizierung erlaubt es dem Server, Sie während der Verbindung nach Anmeldeinformationen zu fragen. Dies ist nützlich für Server, die Multi-Faktor-Authentifizierung benötigen oder wenn Sie nicht lokal Anmeldedaten speichern möchten.",
"opksshAuthTitle": "OPKSSH Authentifizierung",
"forceKeyboardInteractive": "Tastatur-Interaktiv erzwingen",
"forceKeyboardInteractiveDesc": "Erzwingt die Verwendung von Tastatur-interaktiver Authentifizierung. Dies wird manchmal für Server benötigt, die eine Zwei-Faktor-Authentifizierung verwenden (TOTP/2FA).",
"overrideCredentialUsername": "Benutzername überschreiben",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Im Browser öffnen",
"warpgateContinue": "Ich habe die Authentifizierung abgeschlossen",
"warpgateTimeout": "Warpgate Authentifizierungs-Timeout. Bitte verbinden Sie sich erneut.",
"opksshAuthRequired": "OPKSSH Authentifizierung erforderlich",
"opksshAuthDescription": "Vollständige Authentifizierung in Ihrem Browser, um fortzufahren. Diese Sitzung bleibt 24 Stunden gültig.",
"opksshAuthUrl": "Authentifizierungs-URL",
"opksshOpenBrowser": "Browser zum Authentifizieren öffnen",
"opksshWaitingForAuth": "Warte auf Authentifizierung im Browser...",
"opksshAuthenticating": "Authentifizierung wird verarbeitet...",
"opksshTimeout": "Timeout der Authentifizierung. Bitte versuchen Sie es erneut.",
"opksshAuthFailed": "Authentifizierung fehlgeschlagen. Bitte überprüfen Sie Ihre Zugangsdaten und versuchen Sie es erneut.",
"opksshConfigMissing": "OPKSSH Konfiguration nicht gefunden. Bitte erstellen Sie ~/.opk/config.yml mit Ihren OIDC Providereinstellungen. Siehe Dokumentation: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Passwort einfügen?",
"sudoPasswordPopupHint": "Drücken Sie die Eingabetaste, Esc zum Verwerfen",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Automatisch {{method}} Authentifizierung...",
"totpTimeout": "TOTP-Verifizierungs-Timeout. Bitte erneut verbinden.",
"passwordTimeout": "Timeout zur Passwortüberprüfung. Bitte erneut verbinden.",
"connectionRejected": "Verbindung vom Server abgelehnt. Bitte überprüfen Sie Ihre Authentifizierung und Netzwerkkonfiguration.",
"hostKeyRejected": "Überprüfung des SSH-Host-Schlüssels abgelehnt. Verbindung abgebrochen."
"connectionRejected": "Verbindung vom Server abgelehnt. Bitte überprüfen Sie Ihre Authentifizierung und Netzwerkkonfiguration."
},
"fileManager": {
"title": "Datei-Manager",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Passwort erfolgreich zurückgesetzt",
"passwordResetSuccessDesc": "Ihr Passwort wurde erfolgreich zurückgesetzt. Sie können sich jetzt mit Ihrem neuen Passwort anmelden."
},
"hostKey": {
"verifyNewHost": "SSH-Hostschlüssel überprüfen",
"keyChangedWarning": "SSH-Hostschlüssel geändert",
"firstConnectionTitle": "Verbindung zu diesem Host zum ersten Mal",
"firstConnectionDescription": "Die Authentizität dieses Hosts kann nicht festgestellt werden. Überprüfen Sie den Fingerabdruck mit dem, was Sie erwarten.",
"keyChangedDescription": "Der Host-Schlüssel für diesen Server hat sich seit Ihrer letzten Verbindung geändert. Dies könnte auf ein Sicherheitsproblem hinweisen.",
"previousKey": "Vorheriger Schlüssel",
"newFingerprint": "Neuer Fingerabdruck",
"fingerprint": "Fingerabdruck",
"verifyInstructions": "Wenn Sie diesem Host vertrauen, klicken Sie auf Akzeptieren, um fortzufahren und den Fingerabdruck für zukünftige Verbindungen zu speichern.",
"securityWarning": "Sicherheitswarnung",
"acceptAndContinue": "Akzeptieren & fortfahren",
"acceptNewKey": "Neuen Schlüssel akzeptieren & fortfahren"
},
"errors": {
"notFound": "Seite nicht gefunden",
"unauthorized": "Unberechtigter Zugriff",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Host & Seitenleiste",
"snippetsSettings": "Schnipsel",
"confirmSnippetExecution": "Snippet Ausführung bestätigen",
"confirmSnippetExecutionDesc": "Bestätigungsdialog vor dem Ausführen von Snippets anzeigen",
"updateSettings": "Updates",
"disableUpdateCheck": "Updateprüfung deaktivieren",
"disableUpdateCheckDesc": "Stoppt die Suche nach neuen Versionen beim Start und Dashboard. Reduziert Netzwerkanfragen.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 oder beispiel.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Διαπιστευτήρια",
"credentialsViewer": "Προβολέας Πιστοποιητικών",
"manageYourSSHCredentials": "Διαχειριστείτε τα SSH διαπιστευτήρια σας με ασφάλεια",
"addCredential": "Προσθήκη Διαπιστευτηρίου",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Αυτό θα προσθέσει με ασφάλεια το δημόσιο κλειδί στο αρχείο ~/.ssh/authorized_keys του κεντρικού υπολογιστή του στόχου χωρίς να αντικαταστήσει τα υπάρχοντα κλειδιά. Η λειτουργία είναι αναστρέψιμη.",
"chooseHostToDeploy": "Επιλέξτε έναν κεντρικό υπολογιστή για ανάπτυξη...",
"deploying": "Εφαρμογή...",
"copyDeployCommand": "Αντιγραφή Εφαρμογής Εντολής",
"copyDeployCommandDescription": "Αντιγράψτε μια εντολή κελύφους για να προσθέσετε χειροκίνητα το δημόσιο κλειδί στο αρχείο authorized_keys ενός κεντρικού υπολογιστή. Χρήσιμο όταν η ταυτοποίηση κωδικού πρόσβασης είναι απενεργοποιημένη.",
"deployCommandCopied": "Η εντολή ανάπτυξης αντιγράφηκε στο πρόχειρο",
"manualDeployInfo": "Επικολλήστε αυτήν την εντολή στο τερματικό του κεντρικού υπολογιστή προορισμού (π.χ., κονσόλα Proxmox, IPMI ή φυσική πρόσβαση) για να προσθέσετε το SSH κλειδί.",
"name": "Όνομα",
"noHostsAvailable": "Δεν υπάρχουν διαθέσιμοι υπολογιστές",
"noHostsMatchSearch": "Κανένας υπολογιστής δεν ταιριάζει με την αναζήτησή σας",
@@ -303,9 +298,7 @@
"createFolder": "Δημιουργία Φακέλου",
"editFolder": "Επεξεργασία Φακέλου",
"editFolderDescription": "Προσαρμόστε το φάκελο αποκοπής",
"createFolderDescription": "Οργανώστε τα αποσπάσματα σας σε φακέλους",
"confirmExecution": "Εκτέλεση \"{{name}}\"?",
"confirmExecutionDesc": "Είστε βέβαιοι ότι θέλετε να εκτελέσετε αυτό το απόφραξη?"
"createFolderDescription": "Οργανώστε τα αποσπάσματα σας σε φακέλους"
},
"commandHistory": {
"title": "Ιστορικό",
@@ -409,7 +402,6 @@
"required": "Απαιτείται",
"optional": "Προαιρετικό",
"connect": "Σύνδεση",
"copied": "Αντιγράφηκε",
"connecting": "Σύνδεση...",
"creating": "Δημιουργία...",
"clear": "Εκκαθάριση",
@@ -502,7 +494,6 @@
"checking": "Έλεγχος...",
"checkingDatabase": "Έλεγχος σύνδεσης βάσης δεδομένων...",
"checkingAuthentication": "Έλεγχος ταυτοποίησης...",
"backendReconnected": "Έγινε επαναφορά σύνδεσης διακομιστή",
"actions": "Ενέργειες",
"remove": "Αφαίρεση",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Διαχειριστής Υπολογιστών",
"hosts": "Υπολογιστές",
"sshHosts": "SSH Hosts",
"noHosts": "Δεν Υπάρχουν Υπολογιστές SSH",
"noHostsMessage": "Δεν έχετε προσθέσει ακόμα κανένα SSH hosts. Κάντε κλικ στο κουμπί \"Προσθήκη Host\" για να ξεκινήσετε.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Αποτυχία εισαγωγής αρχείου JSON",
"connectionDetails": "Λεπτομέρειες Σύνδεσης",
"organization": "Οργανισμός",
"ipAddress": "Διεύθυνση IP ή όνομα κεντρικού υπολογιστή",
"ipAddress": "Διεύθυνση IP",
"port": "Θύρα",
"name": "Όνομα",
"username": "Όνομα Χρήστη",
@@ -925,8 +915,6 @@
"key": "Κλειδί",
"credential": "Διαπιστευτήριο",
"none": "Κανένα",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Σας παρακινεί για την ταυτοποίηση ιστού OPKSSH σε κάθε σύνδεση. Το διακριτικό ταυτοποίησης θα διαρκέσει 24 ώρες μέχρι να ανανεωθεί.",
"selectCredential": "Επιλέξτε Διαπιστευτήρια",
"selectCredentialPlaceholder": "Επιλέξτε ένα πιστοποιητικό...",
"credentialRequired": "Απαιτείται διαπιστευτήριο όταν χρησιμοποιείται έλεγχος ταυτότητας διαπιστευτηρίων",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Πληκτρολόγιο-Διαδραστική Ταυτοποίηση",
"noneAuthDescription": "Αυτή η μέθοδος ταυτοποίησης θα χρησιμοποιεί τον διαδραστικό έλεγχο ταυτότητας πληκτρολογίου κατά τη σύνδεση με τον διακομιστή SSH.",
"noneAuthDetails": "Ο διαδραστικός έλεγχος ταυτότητας πληκτρολογίου επιτρέπει στο διακομιστή να σας ζητά διαπιστευτήρια κατά τη διάρκεια της σύνδεσης. Αυτό είναι χρήσιμο για διακομιστές που απαιτούν έλεγχο ταυτότητας πολλαπλών παραγόντων ή αν δεν θέλετε να αποθηκεύσετε τα διαπιστευτήρια τοπικά.",
"opksshAuthTitle": "Επαλήθευση OPKSSH",
"forceKeyboardInteractive": "Εξαναγκασμός Keyboard-Interactive",
"forceKeyboardInteractiveDesc": "Δυνάμει της χρήσης διαδραστικού ελέγχου ταυτότητας πληκτρολογίου. Αυτό μερικές φορές απαιτείται για διακομιστές που χρησιμοποιούν έλεγχο ταυτότητας δύο παραγόντων (TOTP/2FA).",
"overrideCredentialUsername": "Παράκαμψη Ονόματος Διαπιστευτηρίου Χρήστη",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Άνοιγμα σε περιηγητή",
"warpgateContinue": "Έχω Ολοκληρώσει την Πιστοποίηση",
"warpgateTimeout": "Λήξη χρονικού ορίου ταυτοποίησης. Παρακαλώ επανασύνδεση.",
"opksshAuthRequired": "Απαιτείται Πιστοποίηση OPKSSH",
"opksshAuthDescription": "Πλήρης ταυτοποίηση στο πρόγραμμα περιήγησής σας για να συνεχίσετε. Αυτή η συνεδρία θα παραμείνει έγκυρη για 24 ώρες.",
"opksshAuthUrl": "URL Ταυτοποίησης",
"opksshOpenBrowser": "Άνοιγμα περιηγητή για έλεγχο ταυτότητας",
"opksshWaitingForAuth": "Αναμονή για έλεγχο ταυτότητας στο πρόγραμμα περιήγησης...",
"opksshAuthenticating": "Επεξεργασία ταυτοποίησης...",
"opksshTimeout": "Λήξη χρονικού ορίου επαλήθευσης. Παρακαλώ προσπαθήστε ξανά.",
"opksshAuthFailed": "Ο έλεγχος ταυτότητας απέτυχε. Παρακαλώ ελέγξτε τα στοιχεία σας και προσπαθήστε ξανά.",
"opksshConfigMissing": "Η ρύθμιση παραμέτρων OPKSSH δεν βρέθηκε. Παρακαλώ δημιουργήστε ~/.opk/config.yml με τις ρυθμίσεις παρόχου OIDC. Δείτε την τεκμηρίωση: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Εισαγωγή Κωδικού Πρόσβασης?",
"sudoPasswordPopupHint": "Πατήστε Enter για εισαγωγή, Esc για απόρριψη",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Αυτόματη προσπάθεια ελέγχου ταυτότητας {{method}}...",
"totpTimeout": "Λήξη χρονικού ορίου επαλήθευσης TOTP. Επανασύνδεση.",
"passwordTimeout": "Λήξη χρονικού ορίου επαλήθευσης κωδικού πρόσβασης. Επανασύνδεση.",
"connectionRejected": "Η σύνδεση απορρίφθηκε από το διακομιστή. Παρακαλώ ελέγξτε τον έλεγχο ταυτότητας και τις ρυθμίσεις δικτύου.",
"hostKeyRejected": "Η επαλήθευση SSH κεντρικού υπολογιστή απορρίφθηκε. Η σύνδεση ακυρώθηκε."
"connectionRejected": "Η σύνδεση απορρίφθηκε από το διακομιστή. Παρακαλώ ελέγξτε τον έλεγχο ταυτότητας και τις ρυθμίσεις δικτύου."
},
"fileManager": {
"title": "Διαχειριστής Αρχείων",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Επιτυχής Επαναφορά Κωδικού Πρόσβασης",
"passwordResetSuccessDesc": "Επιτυχής επαναφορά του κωδικού πρόσβασης. Μπορείτε τώρα να συνδεθείτε με το νέο κωδικό πρόσβασης."
},
"hostKey": {
"verifyNewHost": "Επαλήθευση Κλειδιού Διακομιστή SSH",
"keyChangedWarning": "Το Κλειδί Υπολογιστή SSH Άλλαξε",
"firstConnectionTitle": "Πρώτη σύνδεση σε αυτόν τον υπολογιστή",
"firstConnectionDescription": "Η αυθεντικότητα αυτού του κεντρικού υπολογιστή δεν μπορεί να καθοριστεί. Βεβαιωθείτε ότι το δακτυλικό αποτύπωμα ταιριάζει με αυτό που περιμένετε.",
"keyChangedDescription": "Το κλειδί φιλοξενίας αυτού του διακομιστή έχει αλλάξει από την τελευταία σας σύνδεση. Αυτό μπορεί να υποδηλώνει ένα πρόβλημα ασφάλειας.",
"previousKey": "Προηγούμενο Κλειδί",
"newFingerprint": "Νέο Δακτυλικό Αποτύπωμα",
"fingerprint": "Αποτύπωμα",
"verifyInstructions": "Αν εμπιστεύεστε αυτόν τον οικοδεσπότη, κάντε κλικ για να συνεχίσετε και να αποθηκεύσετε αυτό το δακτυλικό αποτύπωμα για μελλοντικές συνδέσεις.",
"securityWarning": "Προειδοποίηση Ασφαλείας",
"acceptAndContinue": "Αποδοχή & Συνέχεια",
"acceptNewKey": "Αποδοχή Νέου Κλειδιού & Συνέχεια"
},
"errors": {
"notFound": "Η σελίδα δεν βρέθηκε",
"unauthorized": "Μη εξουσιοδοτημένη πρόσβαση",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Τερματικό",
"hostSidebarSettings": "Κεντρικός Υπολογιστής & Πλαϊνή Μπάρα",
"snippetsSettings": "Δείγματα",
"confirmSnippetExecution": "Επιβεβαίωση Εκτέλεσης Δείκτη",
"confirmSnippetExecutionDesc": "Εμφάνιση διαλόγου επιβεβαίωσης πριν την εκτέλεση αποσπασμάτων",
"updateSettings": "Ενημερώσεις",
"disableUpdateCheck": "Απενεργοποίηση Ελέγχου Ενημέρωσης",
"disableUpdateCheckDesc": "Διακοπή ελέγχου για νέες εκδόσεις κατά την εκκίνηση και τον πίνακα ελέγχου. Μειώνει τα αιτήματα δικτύου.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 ή example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Credenciales",
"credentialsViewer": "Visor de credenciales",
"manageYourSSHCredentials": "Administrar sus credenciales SSH de forma segura",
"addCredential": "Añadir credencial",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Esto añadirá con seguridad la clave pública al archivo ~/.ssh/authorized_keys del host de destino sin sobrescribir las claves existentes. La operación es reversible.",
"chooseHostToDeploy": "Seleccione un host al que desplegar...",
"deploying": "Desplegando...",
"copyDeployCommand": "Copiar comando de despliegue",
"copyDeployCommandDescription": "Copie un comando de shell para agregar manualmente la clave pública al archivo authorized_keys de un host. Útil cuando la autenticación de contraseña está desactivada.",
"deployCommandCopied": "Desplegar comando copiado al portapapeles",
"manualDeployInfo": "Pegue este comando en el terminal del host de destino (por ejemplo, consola Proxmox, IPMI o acceso físico) para añadir la clave SSH.",
"name": "Nombre",
"noHostsAvailable": "No hay hosts disponibles",
"noHostsMatchSearch": "Ningún host coincide con tu búsqueda",
@@ -303,9 +298,7 @@
"createFolder": "Crear carpeta",
"editFolder": "Editar carpeta",
"editFolderDescription": "Personaliza tu carpeta de fragmentos",
"createFolderDescription": "Organiza tus fragmentos en carpetas",
"confirmExecution": "¿Ejecutar \"{{name}}\"?",
"confirmExecutionDesc": "¿Está seguro de que desea ejecutar este snippet?"
"createFolderDescription": "Organiza tus fragmentos en carpetas"
},
"commandHistory": {
"title": "Historial",
@@ -409,7 +402,6 @@
"required": "Requerido",
"optional": "Opcional",
"connect": "Conectar",
"copied": "Copiado",
"connecting": "Conectando...",
"creating": "Creando...",
"clear": "Claro",
@@ -502,7 +494,6 @@
"checking": "Comprobando...",
"checkingDatabase": "Comprobando conexión a la base de datos...",
"checkingAuthentication": "Comprobando autenticación...",
"backendReconnected": "Conexión con el servidor restaurada",
"actions": "Acciones",
"remove": "Eliminar",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Gestor de Anfitriones",
"hosts": "Anfitriones",
"sshHosts": "Equipos SSH",
"noHosts": "No hay hosts SSH",
"noHostsMessage": "Aún no has añadido ningún host SSH. Haz clic en \"Añadir Host\" para empezar.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Error al importar el archivo JSON",
"connectionDetails": "Detalles de la conexión",
"organization": "Organización",
"ipAddress": "Dirección IP o nombre de host",
"ipAddress": "Dirección IP",
"port": "Puerto",
"name": "Nombre",
"username": "Usuario",
@@ -925,8 +915,6 @@
"key": "Clave",
"credential": "Credencial",
"none": "Ninguna",
"opkssh": "OPKSH",
"opksshAuthDescription": "Te solicita la autenticación web de OPKSSH en cada conexión. Tu token de autenticación durará 24 horas hasta que deba ser renovado.",
"selectCredential": "Seleccionar credencial",
"selectCredentialPlaceholder": "Elija una credencial...",
"credentialRequired": "Se requiere credencial cuando se utiliza autenticación de credenciales",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Autenticación interactiva del teclado",
"noneAuthDescription": "Este método de autenticación utilizará la autenticación interactiva del teclado cuando se conecte al servidor SSH.",
"noneAuthDetails": "La autenticación interactiva de teclado permite al servidor pedir credenciales durante la conexión. Esto es útil para servidores que requieren autenticación de múltiples factores o si no desea guardar las credenciales localmente.",
"opksshAuthTitle": "Autenticación OPKSSH",
"forceKeyboardInteractive": "Forzar interactivo del teclado",
"forceKeyboardInteractiveDesc": "Fuerza el uso de autenticación interactiva de teclado. Esto a veces es necesario para servidores que utilizan Autenticación de Doble Factor (TOTP/2FA).",
"overrideCredentialUsername": "Reemplazar nombre de usuario de credenciales",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Abrir en el navegador",
"warpgateContinue": "He completado la autenticación",
"warpgateTimeout": "Se agotó el tiempo de autenticación de Warpgate. Por favor, vuelva a conectar.",
"opksshAuthRequired": "Autenticación OPKSSH requerida",
"opksshAuthDescription": "Autenticación completa en su navegador para continuar. Esta sesión permanecerá válida durante 24 horas.",
"opksshAuthUrl": "URL de autenticación",
"opksshOpenBrowser": "Abrir navegador para autenticar",
"opksshWaitingForAuth": "Esperando la autenticación en el navegador...",
"opksshAuthenticating": "Procesando autenticación...",
"opksshTimeout": "Se ha agotado el tiempo de autenticación. Por favor, inténtalo de nuevo.",
"opksshAuthFailed": "Error de autenticación. Por favor, comprueba tus credenciales e inténtalo de nuevo.",
"opksshConfigMissing": "Configuración OPKSSH no encontrada. Por favor cree ~/.opk/config.yml con la configuración de su proveedor OIDC. Vea la documentación: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "¿Insertar contraseña?",
"sudoPasswordPopupHint": "Presione Enter para insertar, Esc para descartar",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Intentando automáticamente autenticación {{method}}...",
"totpTimeout": "Tiempo de verificación TOTP. Por favor, vuelva a conectar.",
"passwordTimeout": "Tiempo de verificación de contraseña. Por favor, vuelva a conectar.",
"connectionRejected": "Conexión rechazada por el servidor. Por favor, compruebe su autenticación y configuración de red.",
"hostKeyRejected": "Verificación de clave del host SSH rechazada. Conexión cancelada."
"connectionRejected": "Conexión rechazada por el servidor. Por favor, compruebe su autenticación y configuración de red."
},
"fileManager": {
"title": "Gestor de archivos",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Contraseña restablecida con éxito",
"passwordResetSuccessDesc": "Su contraseña se ha restablecido con éxito. Ahora puede iniciar sesión con su nueva contraseña."
},
"hostKey": {
"verifyNewHost": "Verificar clave SSH Host",
"keyChangedWarning": "SSH Host Key cambiada",
"firstConnectionTitle": "Primera conexión a este host",
"firstConnectionDescription": "La autenticidad de este host no se puede establecer. Verifique que la huella digital coincide con lo que espera.",
"keyChangedDescription": "La clave de host para este servidor ha cambiado desde su última conexión. Esto podría indicar un problema de seguridad.",
"previousKey": "Clave anterior",
"newFingerprint": "Nueva huella dactilar",
"fingerprint": "Huella dactilar",
"verifyInstructions": "Si confía en este host, haga clic en Aceptar para continuar y guardar esta huella dactilar para conexiones futuras.",
"securityWarning": "Advertencia de seguridad",
"acceptAndContinue": "Aceptar y continuar",
"acceptNewKey": "Aceptar nueva clave y continuar"
},
"errors": {
"notFound": "Página no encontrada",
"unauthorized": "Acceso no autorizado",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Anfitrión y barra lateral",
"snippetsSettings": "Fragmentos",
"confirmSnippetExecution": "Confirmar ejecución de Snippet",
"confirmSnippetExecutionDesc": "Mostrar diálogo de confirmación antes de ejecutar fragmentos",
"updateSettings": "Actualizaciones",
"disableUpdateCheck": "Desactivar revisión de actualización",
"disableUpdateCheckDesc": "Deja de buscar nuevas versiones en el arranque y el tablero. Reduce las solicitudes de red.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 o ejemplo.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Käyttäjätunnukset",
"credentialsViewer": "Käyttöoikeustietojen Katselin",
"manageYourSSHCredentials": "Hallitse SSH tunnuksiasi turvallisesti",
"addCredential": "Lisää Käyttöoikeustieto",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Tämä lisää turvallisesti julkisen avaimen kohdetiedoston ~/.ssh/authorized_keys tiedostoon ilman olemassa olevien avainten korvaamista. Toiminto on palautettavissa.",
"chooseHostToDeploy": "Valitse isäntä johon haluat ottaa käyttöön...",
"deploying": "Otetaan Käyttöön...",
"copyDeployCommand": "Kopioi Deploy Komento",
"copyDeployCommandDescription": "Kopioi komento, jolla julkinen avain lisätään manuaalisesti isännän authorized_keys tiedostoon. Hyödyllinen, kun salasanan todennus on pois päältä.",
"deployCommandCopied": "Julkaise komento kopioitu leikepöydälle",
"manualDeployInfo": "Liitä tämä komento kohdeisännän päätteeseen (esim. Proxmox konsoli, IPMI tai fyysinen pääsy) lisätäksesi SSH avaimen.",
"name": "Nimi",
"noHostsAvailable": "Ei isäntiä saatavilla",
"noHostsMatchSearch": "Yksikään isäntä ei vastaa hakuasi",
@@ -303,9 +298,7 @@
"createFolder": "Luo Kansio",
"editFolder": "Muokkaa Kansiota",
"editFolderDescription": "Muokkaa snippet-kansiota",
"createFolderDescription": "Järjestä leikkeet kansioihin",
"confirmExecution": "Suorita \"{{name}}\"?",
"confirmExecutionDesc": "Oletko varma, että haluat suorittaa tämän ohjelman?"
"createFolderDescription": "Järjestä leikkeet kansioihin"
},
"commandHistory": {
"title": "Historia",
@@ -409,7 +402,6 @@
"required": "Pakollinen",
"optional": "Valinnainen",
"connect": "Yhdistä",
"copied": "Kopioitu",
"connecting": "Yhdistetään...",
"creating": "Luodaan...",
"clear": "Tyhjennä",
@@ -502,7 +494,6 @@
"checking": "Tarkistetaan...",
"checkingDatabase": "Tarkistetaan tietokantayhteyttä...",
"checkingAuthentication": "Tarkistetaan todennusta...",
"backendReconnected": "Palvelinyhteys palautettu",
"actions": "Toiminnot",
"remove": "Poista",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Isäntälaitteen Hallinta",
"hosts": "Isäntä",
"sshHosts": "Ssh Isäntä",
"noHosts": "Ei Ssh Isäntiä",
"noHostsMessage": "Et ole vielä lisännyt yhtään SSH isäntää. Napsauta \"Lisää isäntä\" aloittaaksesi.",
@@ -846,7 +836,7 @@
"failedToImportJson": "JSON-tiedoston tuonti epäonnistui",
"connectionDetails": "Yhteyden Tiedot",
"organization": "Organisaatio",
"ipAddress": "IP-osoite tai isäntänimi",
"ipAddress": "Ip Osoite",
"port": "Portti",
"name": "Nimi",
"username": "Käyttäjätunnus",
@@ -925,8 +915,6 @@
"key": "Avain",
"credential": "Käyttöoikeustiedot",
"none": "Ei Mitään",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Pyytää sinua OPKSSH web-authiin jokaisen yhteyden yhteydessä. Käyttöoikeustunnuksesi kestää 24 tuntia, kunnes se on uusittava.",
"selectCredential": "Valitse Käyttöoikeustieto",
"selectCredentialPlaceholder": "Valitse käyttäjätunnus...",
"credentialRequired": "Käyttöoikeustiedot vaaditaan, kun käytetään käyttöoikeustietojen todennusta",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Näppäimistöinteraktiivinen todennus",
"noneAuthDescription": "Tämä todennusmenetelmä käyttää näppäimistöinteraktiivista todennusta yhdistettäessä SSH-palvelimeen.",
"noneAuthDetails": "Näppäimistötodennus antaa palvelimen pyytää sinulta tunnistetietoja yhteyden muodostamisen aikana. Tämä on hyödyllistä palvelimilla, jotka vaativat monivaiheisen todennuksen tai jos et halua tallentaa tunnistetietoja paikallisesti.",
"opksshAuthTitle": "OPKSSH Todennus",
"forceKeyboardInteractive": "Pakota näppäimistöinteraktiivinen",
"forceKeyboardInteractiveDesc": "Pakottaa näppäimistöinteraktiivisen todennuksen käytön. Tätä vaaditaan joskus palvelimilla, jotka käyttävät kaksivaiheista todennusta (TOTP/2FA).",
"overrideCredentialUsername": "Ohita tunnistetiedot Käyttäjätunnus",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Avaa selaimessa",
"warpgateContinue": "Olen Suorittanut Todentamisen",
"warpgateTimeout": "Warpgate autentikoinnin aikakatkaisu. Yhdistä uudelleen.",
"opksshAuthRequired": "OPKSSH Todennus Vaaditaan",
"opksshAuthDescription": "Lopeta todennus selaimessasi jatkaaksesi. Tämä istunto pysyy voimassa 24 tuntia.",
"opksshAuthUrl": "Todennuksen URL",
"opksshOpenBrowser": "Avaa selain todennettavaksi",
"opksshWaitingForAuth": "Odotetaan todennusta selaimessa...",
"opksshAuthenticating": "Käsitellään todennusta...",
"opksshTimeout": "Todennus aikakatkaistiin. Yritä uudelleen.",
"opksshAuthFailed": "Todennus epäonnistui. Tarkista käyttäjätunnuksesi ja yritä uudelleen.",
"opksshConfigMissing": "OPKSSH konfiguraatiota ei löytynyt. Luo ~/.opk/config.yml OIDC palveluntarjoajan asetuksissa. Katso dokumentaatio: https://github.com/openpubkey/opkssh#konfiguraatio",
"sudoPasswordPopupTitle": "Syötä salasana?",
"sudoPasswordPopupHint": "Lisää painamalla Enter, hylkää painamalla Esc",
"sudoPasswordPopupConfirm": "Lisää",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Yritetään automaattisesti {{method}} todennusta...",
"totpTimeout": "TOTP vahvistuksen aikakatkaisu. Yhdistä uudelleen.",
"passwordTimeout": "Salasanan varmennuksen aikakatkaisu. Yhdistä uudelleen.",
"connectionRejected": "Palvelin hylkäsi yhteyden. Tarkista todennus ja verkon asetukset.",
"hostKeyRejected": "SSH isäntäavaimen vahvistus hylätty. Yhteys peruutettu."
"connectionRejected": "Palvelin hylkäsi yhteyden. Tarkista todennus ja verkon asetukset."
},
"fileManager": {
"title": "Tiedostojen Hallinta",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Salasanan palautus onnistui",
"passwordResetSuccessDesc": "Salasanasi on nollattu onnistuneesti. Voit nyt kirjautua sisään uudella salasanallasi."
},
"hostKey": {
"verifyNewHost": "Vahvista Ssh Isäntäavain",
"keyChangedWarning": "Ssh Isäntäavain Vaihdettu",
"firstConnectionTitle": "Yhteyden muodostaminen tähän palvelimeen ensimmäistä kertaa",
"firstConnectionDescription": "Tämän isännän aitoutta ei voida vahvistaa. Varmista sormenjälki vastaa sitä, mitä odotat.",
"keyChangedDescription": "Palvelimen isäntäavain on muuttunut viimeisen yhteytesi jälkeen. Tämä saattaa merkitä tietoturvaongelmaa.",
"previousKey": "Edellinen Avain",
"newFingerprint": "Uusi Sormenjälki",
"fingerprint": "Sormenjälki",
"verifyInstructions": "Jos luotat tähän isäntään, jatka ja tallenna sormenjälki tulevia yhteyksiä varten.",
"securityWarning": "Turvallisuusvaroitus",
"acceptAndContinue": "Hyväksy & Jatka",
"acceptNewKey": "Hyväksy Uusi Avain Ja Jatka"
},
"errors": {
"notFound": "Sivua ei löytynyt",
"unauthorized": "Luvaton pääsy",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Pääte",
"hostSidebarSettings": "Isäntä ja sivupalkki",
"snippetsSettings": "Projekti",
"confirmSnippetExecution": "Vahvista Projektin Suoritus",
"confirmSnippetExecutionDesc": "Näytä vahvistusvalintaikkuna ennen snippettien suorittamista",
"updateSettings": "Päivitykset",
"disableUpdateCheck": "Poista Päivitystarkistus Käytöstä",
"disableUpdateCheckDesc": "Lopeta uusien versioiden tarkistaminen käynnistettäessä ja hallintapaneelissa. Vähennä verkkopyyntöjä.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 tai esimerkki.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Identifiants",
"credentialsViewer": "Visionneuse des identifiants",
"manageYourSSHCredentials": "Gérez vos identifiants SSH en toute sécurité",
"addCredential": "Ajouter un mot de passe",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Ceci ajoutera la clé publique au fichier ~/.ssh/authorized_keys de l'hôte cible sans écraser les clés existantes. L'opération est réversible.",
"chooseHostToDeploy": "Choisissez un hôte à déployer vers...",
"deploying": "Déploiement...",
"copyDeployCommand": "Copier la commande de déploiement",
"copyDeployCommandDescription": "Copiez une commande shell pour ajouter manuellement la clé publique au fichier authorized_keys d'un hôte. Utile lorsque l'authentification par mot de passe est désactivée.",
"deployCommandCopied": "Déployer la commande copiée dans le presse-papiers",
"manualDeployInfo": "Collez cette commande dans le terminal de l'hôte cible (par exemple, console Proxmox, IPMI, ou accès physique) pour ajouter la clé SSH.",
"name": "Nom",
"noHostsAvailable": "Aucun hôte disponible",
"noHostsMatchSearch": "Aucun hôte ne correspond à votre recherche",
@@ -303,9 +298,7 @@
"createFolder": "Créer un dossier",
"editFolder": "Modifier le dossier",
"editFolderDescription": "Personnaliser votre dossier de snippet",
"createFolderDescription": "Organiser vos modules de texte dans des dossiers",
"confirmExecution": "Exécuter \"{{name}} \" ?",
"confirmExecutionDesc": "Êtes-vous sûr de vouloir exécuter ce snippet?"
"createFolderDescription": "Organiser vos modules de texte dans des dossiers"
},
"commandHistory": {
"title": "Historique",
@@ -409,7 +402,6 @@
"required": "Requis",
"optional": "Optionnel",
"connect": "Connecter",
"copied": "Copié",
"connecting": "Connexion en cours...",
"creating": "Création en cours...",
"clear": "Nettoyer",
@@ -502,7 +494,6 @@
"checking": "Vérification...",
"checkingDatabase": "Vérification de la connexion à la base de données...",
"checkingAuthentication": "Vérification de l'authentification...",
"backendReconnected": "Connexion au serveur restaurée",
"actions": "Actions",
"remove": "Retirer",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Responsable d'hôte",
"hosts": "Hôtes",
"sshHosts": "Hôtes SSH",
"noHosts": "Aucun hôte SSH",
"noHostsMessage": "Vous n'avez pas encore ajouté d'hôtes SSH. Cliquez sur \"Ajouter Hôte\" pour commencer.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Impossible d'importer le fichier JSON",
"connectionDetails": "Détails de la connexion",
"organization": "Organisation",
"ipAddress": "Adresse IP ou nom d'hôte",
"ipAddress": "Adresse IP",
"port": "Port",
"name": "Nom",
"username": "Nom d'utilisateur",
@@ -925,8 +915,6 @@
"key": "Clés",
"credential": "Identification",
"none": "Aucun",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Vous invite à l'authentification OPKSSH à chaque connexion. Votre jeton d'authentification durera 24 heures jusqu'à ce qu'il soit renouvelé.",
"selectCredential": "Sélectionner les informations d'identification",
"selectCredentialPlaceholder": "Choisissez un identifiant...",
"credentialRequired": "Les informations d'identification sont requises lors de l'utilisation de l'authentification",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Authentification interactive du clavier",
"noneAuthDescription": "Cette méthode d'authentification utilisera l'authentification interactive au clavier lors de la connexion au serveur SSH.",
"noneAuthDetails": "L'authentification interactive au clavier permet au serveur de vous demander des informations d'identification pendant la connexion. Ceci est utile pour les serveurs qui nécessitent une authentification multi-facteurs ou si vous ne voulez pas enregistrer les identifiants localement.",
"opksshAuthTitle": "Authentification OPKSSH",
"forceKeyboardInteractive": "Forcer l'interaction du clavier",
"forceKeyboardInteractiveDesc": "Force l'utilisation de l'authentification interactive au clavier. Ceci est parfois nécessaire pour les serveurs qui utilisent l'authentification à deux facteurs (TOTP/2FA).",
"overrideCredentialUsername": "Remplacer le nom d'utilisateur de l'identifiant",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Ouvrir dans le navigateur",
"warpgateContinue": "J'ai terminé l'authentification",
"warpgateTimeout": "Délai d'authentification de Warpgate. Veuillez vous reconnecter.",
"opksshAuthRequired": "Authentification OPKSSH requise",
"opksshAuthDescription": "Authentification complète dans votre navigateur pour continuer. Cette session restera valide pendant 24 heures.",
"opksshAuthUrl": "URL d'authentification",
"opksshOpenBrowser": "Ouvrez le navigateur pour vous authentifier",
"opksshWaitingForAuth": "En attente d'authentification dans le navigateur...",
"opksshAuthenticating": "Traitement de l'authentification...",
"opksshTimeout": "Délai d'authentification dépassé. Veuillez réessayer.",
"opksshAuthFailed": "L'authentification a échoué. Veuillez vérifier vos identifiants et réessayer.",
"opksshConfigMissing": "La configuration OPKSSH est introuvable. Veuillez créer ~/.opk/config.yml avec vos paramètres de fournisseur OIDC. Voir la documentation : https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Insérer un mot de passe ?",
"sudoPasswordPopupHint": "Appuyez sur Entrée pour insérer, Échap pour rejeter",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Essai automatique de l'authentification {{method}}...",
"totpTimeout": "Délai de vérification TOTP. Veuillez vous reconnecter.",
"passwordTimeout": "Délai de vérification du mot de passe. Veuillez vous reconnecter.",
"connectionRejected": "Connexion refusée par le serveur. Veuillez vérifier votre authentification et la configuration du réseau.",
"hostKeyRejected": "La vérification de la clé d'hôte SSH a été rejetée. La connexion a été annulée."
"connectionRejected": "Connexion refusée par le serveur. Veuillez vérifier votre authentification et la configuration du réseau."
},
"fileManager": {
"title": "Gestionnaire de fichiers",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Mot de passe réinitialisé avec succès",
"passwordResetSuccessDesc": "Votre mot de passe a été réinitialisé avec succès. Vous pouvez maintenant vous connecter avec votre nouveau mot de passe."
},
"hostKey": {
"verifyNewHost": "Vérifier la clé d'hôte SSH",
"keyChangedWarning": "Clé d'hôte SSH modifiée",
"firstConnectionTitle": "Première connexion à cet hôte",
"firstConnectionDescription": "L'authenticité de cet hôte ne peut pas être établie. Vérifiez que l'empreinte digitale correspond à ce que vous attendez.",
"keyChangedDescription": "La clé hôte de ce serveur a changé depuis votre dernière connexion. Cela pourrait indiquer un problème de sécurité.",
"previousKey": "Clé précédente",
"newFingerprint": "Nouvelle empreinte digitale",
"fingerprint": "Empreinte digitale",
"verifyInstructions": "Si vous faites confiance à cet hôte, cliquez sur Accepter pour continuer et enregistrer cette empreinte digitale pour de futures connexions.",
"securityWarning": "Avertissement de sécurité",
"acceptAndContinue": "Accepter et continuer",
"acceptNewKey": "Accepter la nouvelle clé et continuer"
},
"errors": {
"notFound": "Page introuvable",
"unauthorized": "Accès non autorisé",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Hôte et barre latérale",
"snippetsSettings": "Extraits",
"confirmSnippetExecution": "Confirmer l'exécution du snippet",
"confirmSnippetExecutionDesc": "Afficher la boîte de dialogue de confirmation avant d'exécuter les snippets",
"updateSettings": "Mises à jour",
"disableUpdateCheck": "Désactiver la vérification des mises à jour",
"disableUpdateCheckDesc": "Arrêter la vérification des nouvelles versions au démarrage et au tableau de bord. Réduit les requêtes réseau.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 ou exemple.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "אישורים",
"credentialsViewer": "מציג אישורים",
"manageYourSSHCredentials": "נהל את פרטי ה-SSH שלך בצורה מאובטחת",
"addCredential": "הוסף אישור",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "פעולה זו תוסיף בבטחה את המפתח הציבורי לקובץ ~/.ssh/authorized_keys של מארח היעד מבלי להחליף מפתחות קיימים. הפעולה היא הפיכה.",
"chooseHostToDeploy": "בחר מארח לפריסה...",
"deploying": "פריסה...",
"copyDeployCommand": "העתק את פקודת הפריסה",
"copyDeployCommandDescription": "העתק פקודת מעטפת כדי להוסיף ידנית את המפתח הציבורי לקובץ authorized_keys של מחשב מארח. שימושי כאשר אימות סיסמה מושבת.",
"deployCommandCopied": "פקודת הפריסה הועתקה ללוח",
"manualDeployInfo": "הדבק פקודה זו בטרמינל של מחשב המארח (למשל, קונסולת Proxmox, IPMI או גישה פיזית) כדי להוסיף את מפתח ה-SSH.",
"name": "שֵׁם",
"noHostsAvailable": "אין מארחים זמינים",
"noHostsMatchSearch": "אין מארחים התואמים את החיפוש שלך",
@@ -303,9 +298,7 @@
"createFolder": "צור תיקייה",
"editFolder": "עריכת תיקייה",
"editFolderDescription": "התאם אישית את תיקיית הקטעים שלך",
"createFolderDescription": "ארגנו את הקטעים שלכם בתיקיות",
"confirmExecution": "להפעיל את \"{{name}}\"?",
"confirmExecutionDesc": "האם אתה בטוח שאתה רוצה להפעיל את הקטע הזה?"
"createFolderDescription": "ארגנו את הקטעים שלכם בתיקיות"
},
"commandHistory": {
"title": "הִיסטוֹרִיָה",
@@ -409,7 +402,6 @@
"required": "דָרוּשׁ",
"optional": "אופציונלי",
"connect": "לְחַבֵּר",
"copied": "מוּעֲתָק",
"connecting": "מְקַשֵׁר...",
"creating": "יוצר...",
"clear": "בָּרוּר",
@@ -502,7 +494,6 @@
"checking": "בודק...",
"checkingDatabase": "בודק חיבור למסד הנתונים...",
"checkingAuthentication": "בודק אימות...",
"backendReconnected": "חיבור השרת שוחזר",
"actions": "פעולות",
"remove": "לְהַסִיר",
"revoke": "לְבַטֵל",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "מנהל מארח",
"hosts": "מארחים",
"sshHosts": "מארחי SSH",
"noHosts": "אין מארחי SSH",
"noHostsMessage": "עדיין לא הוספת מארחי SSH. לחץ על \"הוסף מארח\" כדי להתחיל.",
@@ -846,7 +836,7 @@
"failedToImportJson": "ייבוא קובץ JSON נכשל",
"connectionDetails": "פרטי חיבור",
"organization": "אִרגוּן",
"ipAddress": "כתובת IP או שם מארח",
"ipAddress": "כתובת IP",
"port": "נָמָל",
"name": "שֵׁם",
"username": "שם משתמש",
@@ -925,8 +915,6 @@
"key": "מַפְתֵחַ",
"credential": "תְעוּדָה",
"none": "אַף לֹא אֶחָד",
"opkssh": "אופקש",
"opksshAuthDescription": "מבקש ממך אימות אינטרנט של OPKSSH בכל חיבור. אסימון האימות שלך יהיה בתוקף למשך 24 שעות עד שיהיה צורך לחדשו.",
"selectCredential": "בחר אישור",
"selectCredentialPlaceholder": "בחר אישור...",
"credentialRequired": "נדרשת אישור בעת שימוש באימות אישורים",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "אימות אינטראקטיבי באמצעות מקלדת",
"noneAuthDescription": "שיטת אימות זו תשתמש באימות אינטראקטיבי באמצעות מקלדת בעת התחברות לשרת SSH.",
"noneAuthDetails": "אימות אינטראקטיבי באמצעות מקלדת מאפשר לשרת לבקש ממך אישורים במהלך החיבור. זה שימושי עבור שרתים הדורשים אימות רב-גורמי או אם אינך מעוניין לשמור אישורים באופן מקומי.",
"opksshAuthTitle": "אימות OPKSSH",
"forceKeyboardInteractive": "כפיית מקלדת אינטראקטיבית",
"forceKeyboardInteractiveDesc": "כופה שימוש באימות אינטראקטיבי באמצעות מקלדת. זה נדרש לעיתים עבור שרתים המשתמשים באימות דו-שלבי (TOTP/2FA).",
"overrideCredentialUsername": "עקיפת שם משתמש של פרטי כניסה",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "פתח בדפדפן",
"warpgateContinue": "סיימתי את האימות",
"warpgateTimeout": "פסק זמן לאימות Warpgate. אנא התחבר מחדש.",
"opksshAuthRequired": "נדרש אימות OPKSSH",
"opksshAuthDescription": "השלם את האימות בדפדפן שלך כדי להמשיך. סשן זה יישאר תקף למשך 24 שעות.",
"opksshAuthUrl": "כתובת URL לאימות",
"opksshOpenBrowser": "פתח את הדפדפן כדי לאמת",
"opksshWaitingForAuth": "ממתין לאימות בדפדפן...",
"opksshAuthenticating": "מעבד אימות...",
"opksshTimeout": "הזמן שהוקצב לאימות הסתיים. אנא נסה שוב.",
"opksshAuthFailed": "האימות נכשל. אנא בדוק את פרטי הגישה שלך ונסה שוב.",
"opksshConfigMissing": "תצורת OPKSSH לא נמצאה. אנא צור ~/.opk/config.yml עם הגדרות ספק ה-OIDC שלך. עיין בתיעוד: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "להכניס סיסמה?",
"sudoPasswordPopupHint": "לחץ על Enter כדי להוסיף, Esc כדי לסגור",
"sudoPasswordPopupConfirm": "לְהַכנִיס",
@@ -1359,8 +1337,7 @@
"automaticFallback": "מנסה אוטומטית אימות {{method}} ...",
"totpTimeout": "פסק זמן לאימות TOTP. אנא התחבר מחדש.",
"passwordTimeout": "פסק זמן לאימות סיסמה. אנא התחבר מחדש.",
"connectionRejected": "החיבור נדחה על ידי השרת. אנא בדוק את האימות ותצורת הרשת שלך.",
"hostKeyRejected": "אימות מפתח מארח SSH נדחה. החיבור בוטל."
"connectionRejected": "החיבור נדחה על ידי השרת. אנא בדוק את האימות ותצורת הרשת שלך."
},
"fileManager": {
"title": "מנהל הקבצים",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "איפוס הסיסמה הצליח",
"passwordResetSuccessDesc": "הסיסמה שלך אופסה בהצלחה. כעת תוכל להתחבר באמצעות הסיסמה החדשה שלך."
},
"hostKey": {
"verifyNewHost": "אימות מפתח מארח SSH",
"keyChangedWarning": "מפתח מארח SSH שונה",
"firstConnectionTitle": "בפעם הראשונה שמתחברת למארח הזה",
"firstConnectionDescription": "לא ניתן לקבוע את האותנטיות של מארח זה. ודא שטביעת האצבע תואמת את מה שאתה מצפה.",
"keyChangedDescription": "מפתח המארח של שרת זה השתנה מאז החיבור האחרון שלך. זה יכול להצביע על בעיית אבטחה.",
"previousKey": "מפתח קודם",
"newFingerprint": "טביעת אצבע חדשה",
"fingerprint": "טְבִיעַת אֶצבָּעוֹת",
"verifyInstructions": "אם אתה בוטח במארח זה, לחץ על קבל כדי להמשיך ולשמור את טביעת האצבע הזו לחיבורים עתידיים.",
"securityWarning": "אזהרת אבטחה",
"acceptAndContinue": "קבל והמשך",
"acceptNewKey": "קבל את המפתח החדש והמשך"
},
"errors": {
"notFound": "הדף לא נמצא",
"unauthorized": "גישה לא מורשית",
@@ -2063,8 +2026,6 @@
"terminalSettings": "מָסוֹף",
"hostSidebarSettings": "מארח וסרגל צד",
"snippetsSettings": "קטעי טקסט",
"confirmSnippetExecution": "אישור ביצוע קטע",
"confirmSnippetExecutionDesc": "הצג תיבת דו-שיח לאישור לפני ביצוע קטעי טקסט",
"updateSettings": "עדכונים",
"disableUpdateCheck": "השבתת בדיקת עדכונים",
"disableUpdateCheckDesc": "הפסק לבדוק גרסאות חדשות בעת ההפעלה ובלוח המחוונים. מפחית בקשות רשת.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 או example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "साख",
"credentialsViewer": "क्रेडेंशियल व्यूअर",
"manageYourSSHCredentials": "अपने SSH क्रेडेंशियल्स को सुरक्षित रूप से प्रबंधित करें",
"addCredential": "क्रेडेंशियल जोड़ें",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "इससे सार्वजनिक कुंजी सुरक्षित रूप से लक्ष्य होस्ट की ~/.ssh/authorized_keys फ़ाइल में जुड़ जाएगी, और मौजूदा कुंजियों को ओवरराइट नहीं किया जाएगा। यह प्रक्रिया प्रतिवर्ती है।",
"chooseHostToDeploy": "परिनियोजन के लिए होस्ट चुनें...",
"deploying": "तैनाती जारी है...",
"copyDeployCommand": "परिनियोजन कमांड कॉपी करें",
"copyDeployCommandDescription": "किसी होस्ट की authorized_keys फ़ाइल में सार्वजनिक कुंजी को मैन्युअल रूप से जोड़ने के लिए शेल कमांड को कॉपी करें। यह तब उपयोगी होता है जब पासवर्ड प्रमाणीकरण अक्षम हो।",
"deployCommandCopied": "डिप्लॉयमेंट कमांड क्लिपबोर्ड पर कॉपी हो गई है",
"manualDeployInfo": "SSH कुंजी जोड़ने के लिए इस कमांड को टारगेट होस्ट के टर्मिनल (जैसे, प्रॉक्समॉक्स कंसोल, IPMI, या फिजिकल एक्सेस) में पेस्ट करें।",
"name": "नाम",
"noHostsAvailable": "कोई होस्ट उपलब्ध नहीं है",
"noHostsMatchSearch": "आपकी खोज से मेल खाने वाले कोई होस्ट नहीं हैं",
@@ -303,9 +298,7 @@
"createFolder": "फ़ोल्डर बनाएँ",
"editFolder": "फ़ोल्डर संपादित करें",
"editFolderDescription": "अपने स्निपेट फ़ोल्डर को अनुकूलित करें",
"createFolderDescription": "अपने लेखों के अंशों को फ़ोल्डरों में व्यवस्थित करें।",
"confirmExecution": "\"{{name}}\" निष्पादित करें?",
"confirmExecutionDesc": "क्या आप वाकई इस कोड स्निपेट को चलाना चाहते हैं?"
"createFolderDescription": "अपने लेखों के अंशों को फ़ोल्डरों में व्यवस्थित करें।"
},
"commandHistory": {
"title": "इतिहास",
@@ -409,7 +402,6 @@
"required": "आवश्यक",
"optional": "वैकल्पिक",
"connect": "जोड़ना",
"copied": "कॉपी किया गया",
"connecting": "कनेक्ट हो रहा है...",
"creating": "सृजन...",
"clear": "स्पष्ट",
@@ -502,7 +494,6 @@
"checking": "जाँच चल रही है...",
"checkingDatabase": "डेटाबेस कनेक्शन की जाँच की जा रही है...",
"checkingAuthentication": "प्रमाणीकरण की जाँच की जा रही है...",
"backendReconnected": "सर्वर कनेक्शन बहाल हो गया",
"actions": "कार्रवाई",
"remove": "निकालना",
"revoke": "रद्द करना",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "मेजबान प्रबंधक",
"hosts": "मेजबान",
"sshHosts": "एसएसएच होस्ट",
"noHosts": "कोई एसएसएच होस्ट नहीं",
"noHostsMessage": "आपने अभी तक कोई SSH होस्ट नहीं जोड़ा है। शुरू करने के लिए \"होस्ट जोड़ें\" पर क्लिक करें।",
@@ -846,7 +836,7 @@
"failedToImportJson": "JSON फ़ाइल आयात करने में विफल",
"connectionDetails": "कनेक्शन विवरण",
"organization": "संगठन",
"ipAddress": "आईपी पता या होस्टनाम",
"ipAddress": "आईपी पता",
"port": "पत्तन",
"name": "नाम",
"username": "उपयोगकर्ता नाम",
@@ -925,8 +915,6 @@
"key": "चाबी",
"credential": "क्रेडेंशियल",
"none": "कोई नहीं",
"opkssh": "ओपीकेएसएच",
"opksshAuthDescription": "हर बार कनेक्ट होने पर यह आपसे OPKSSH वेब-प्रमाणीकरण के लिए पूछेगा। आपका प्रमाणीकरण टोकन 24 घंटे तक वैध रहेगा, जिसके बाद इसे नवीनीकृत करना होगा।",
"selectCredential": "क्रेडेंशियल चुनें",
"selectCredentialPlaceholder": "एक प्रमाण पत्र चुनें...",
"credentialRequired": "क्रेडेंशियल प्रमाणीकरण का उपयोग करते समय क्रेडेंशियल आवश्यक है।",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "कीबोर्ड-इंटरैक्टिव प्रमाणीकरण",
"noneAuthDescription": "एसएसएच सर्वर से कनेक्ट करते समय यह प्रमाणीकरण विधि कीबोर्ड-इंटरैक्टिव प्रमाणीकरण का उपयोग करेगी।",
"noneAuthDetails": "कीबोर्ड-इंटरैक्टिव प्रमाणीकरण सर्वर को कनेक्शन के दौरान आपसे क्रेडेंशियल मांगने की अनुमति देता है। यह उन सर्वरों के लिए उपयोगी है जिन्हें मल्टी-फैक्टर प्रमाणीकरण की आवश्यकता होती है या यदि आप क्रेडेंशियल को स्थानीय रूप से सहेजना नहीं चाहते हैं।",
"opksshAuthTitle": "ओपीकेएसएसएच प्रमाणीकरण",
"forceKeyboardInteractive": "फ़ोर्स कीबोर्ड-इंटरैक्टिव",
"forceKeyboardInteractiveDesc": "कीबोर्ड-आधारित प्रमाणीकरण को अनिवार्य बनाता है। यह कभी-कभी उन सर्वरों के लिए आवश्यक होता है जो दो-कारक प्रमाणीकरण (TOTP/2FA) का उपयोग करते हैं।",
"overrideCredentialUsername": "क्रेडेंशियल उपयोगकर्ता नाम को ओवरराइड करें",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "ब्राउज़र में खोलें",
"warpgateContinue": "मैंने प्रमाणीकरण पूरा कर लिया है",
"warpgateTimeout": "वॉरपगेट प्रमाणीकरण में समय समाप्त हो गया है। कृपया पुनः कनेक्ट करें।",
"opksshAuthRequired": "OPKSSH प्रमाणीकरण आवश्यक है",
"opksshAuthDescription": "आगे बढ़ने के लिए अपने ब्राउज़र में प्रमाणीकरण पूरा करें। यह सत्र 24 घंटे तक वैध रहेगा।",
"opksshAuthUrl": "प्रमाणीकरण यूआरएल",
"opksshOpenBrowser": "प्रमाणीकरण के लिए ब्राउज़र खोलें",
"opksshWaitingForAuth": "ब्राउज़र में प्रमाणीकरण की प्रतीक्षा हो रही है...",
"opksshAuthenticating": "प्रमाणीकरण प्रक्रिया जारी है...",
"opksshTimeout": "प्रमाणीकरण का समय समाप्त हो गया। कृपया पुनः प्रयास करें।",
"opksshAuthFailed": "प्रमाणीकरण विफल रहा। कृपया अपनी पहचान सत्यापित करें और पुनः प्रयास करें।",
"opksshConfigMissing": "OPKSSH कॉन्फ़िगरेशन नहीं मिला। कृपया अपने OIDC प्रदाता सेटिंग्स के साथ ~/.opk/config.yml फ़ाइल बनाएँ। दस्तावेज़ देखें: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "पासवर्ड डालें?",
"sudoPasswordPopupHint": "सम्मिलित करने के लिए Enter दबाएँ, हटाने के लिए Esc दबाएँ",
"sudoPasswordPopupConfirm": "डालना",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Automatically trying {{method}} authentication...",
"totpTimeout": "टीओटीपी सत्यापन में समय समाप्त हो गया है। कृपया पुनः कनेक्ट करें।",
"passwordTimeout": "पासवर्ड सत्यापन में समय समाप्त हो गया है। कृपया पुनः कनेक्ट करें।",
"connectionRejected": "सर्वर द्वारा कनेक्शन अस्वीकृत कर दिया गया है। कृपया अपनी प्रमाणीकरण और नेटवर्क कॉन्फ़िगरेशन की जाँच करें।",
"hostKeyRejected": "SSH होस्ट कुंजी सत्यापन अस्वीकृत। कनेक्शन रद्द।"
"connectionRejected": "सर्वर द्वारा कनेक्शन अस्वीकृत कर दिया गया है। कृपया अपनी प्रमाणीकरण और नेटवर्क कॉन्फ़िगरेशन की जाँच करें।"
},
"fileManager": {
"title": "फ़ाइल मैनेजर",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "पासवर्ड रीसेट सफल रहा",
"passwordResetSuccessDesc": "आपका पासवर्ड सफलतापूर्वक रीसेट हो गया है। अब आप अपने नए पासवर्ड से लॉग इन कर सकते हैं।"
},
"hostKey": {
"verifyNewHost": "SSH होस्ट कुंजी सत्यापित करें",
"keyChangedWarning": "SSH होस्ट कुंजी बदल गई",
"firstConnectionTitle": "पहली बार इस होस्ट से कनेक्ट हो रहा है",
"firstConnectionDescription": "इस होस्ट की प्रामाणिकता स्थापित नहीं की जा सकती। कृपया सुनिश्चित करें कि फिंगरप्रिंट आपकी अपेक्षा के अनुरूप है।",
"keyChangedDescription": "आपके पिछले कनेक्शन के बाद से इस सर्वर की होस्ट कुंजी बदल गई है। यह किसी सुरक्षा समस्या का संकेत हो सकता है।",
"previousKey": "पिछली कुंजी",
"newFingerprint": "नया फिंगरप्रिंट",
"fingerprint": "अंगुली की छाप",
"verifyInstructions": "यदि आप इस होस्ट पर भरोसा करते हैं, तो जारी रखने के लिए स्वीकार करें पर क्लिक करें और भविष्य के कनेक्शनों के लिए इस फिंगरप्रिंट को सहेजें।",
"securityWarning": "सुरक्षा चेतावनी",
"acceptAndContinue": "स्वीकार करें और जारी रखें",
"acceptNewKey": "नई कुंजी स्वीकार करें और जारी रखें"
},
"errors": {
"notFound": "पृष्ठ नहीं मिला",
"unauthorized": "अनधिकृत पहुंच",
@@ -2063,8 +2026,6 @@
"terminalSettings": "टर्मिनल",
"hostSidebarSettings": "होस्ट और साइडबार",
"snippetsSettings": "स्निपेट्स",
"confirmSnippetExecution": "स्निपेट निष्पादन की पुष्टि करें",
"confirmSnippetExecutionDesc": "स्निपेट्स को निष्पादित करने से पहले पुष्टिकरण डायलॉग दिखाएँ",
"updateSettings": "अपडेट",
"disableUpdateCheck": "अपडेट जांच अक्षम करें",
"disableUpdateCheckDesc": "स्टार्टअप और डैशबोर्ड पर नए संस्करणों की जाँच करना बंद करें। इससे नेटवर्क अनुरोध कम होते हैं।",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 या example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Hitelesítő adatok",
"credentialsViewer": "Hitelesítő adatok megtekintője",
"manageYourSSHCredentials": "SSH-hitelesítő adatainak biztonságos kezelése",
"addCredential": "Hitelesítő adat hozzáadása",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Ez biztonságosan hozzáadja a nyilvános kulcsot a célgép ~/.ssh/authorized_keys fájljához a meglévő kulcsok felülírása nélkül. A művelet visszafordítható.",
"chooseHostToDeploy": "Válasszon egy hosztot a telepítéshez...",
"deploying": "Telepítés...",
"copyDeployCommand": "Telepítési parancs másolása",
"copyDeployCommandDescription": "Egy shell parancs másolásával manuálisan hozzáadható a nyilvános kulcs a gazdagép authorized_keys fájljához. Hasznos, ha a jelszó-hitelesítés le van tiltva.",
"deployCommandCopied": "A telepítési parancs a vágólapra másolva",
"manualDeployInfo": "Illeszd be ezt a parancsot a célgép termináljába (pl. Proxmox konzol, IPMI vagy fizikai hozzáférés) az SSH kulcs hozzáadásához.",
"name": "Név",
"noHostsAvailable": "Nincsenek elérhető házigazdák",
"noHostsMatchSearch": "Nincsenek a keresésnek megfelelő házigazdák",
@@ -303,9 +298,7 @@
"createFolder": "Mappa létrehozása",
"editFolder": "Mappa szerkesztése",
"editFolderDescription": "Kódrészlet mappa testreszabása",
"createFolderDescription": "Rendezd a kódrészleteket mappákba",
"confirmExecution": "Végrehajtani a következőt: \"{{name}}\"?",
"confirmExecutionDesc": "Biztosan végrehajtod ezt a kódrészletet?"
"createFolderDescription": "Rendezd a kódrészleteket mappákba"
},
"commandHistory": {
"title": "Történelem",
@@ -409,7 +402,6 @@
"required": "Kívánt",
"optional": "Választható",
"connect": "Csatlakozás",
"copied": "Másolva",
"connecting": "Kapcsolódás...",
"creating": "Létrehozás...",
"clear": "Világos",
@@ -502,7 +494,6 @@
"checking": "Ellenőrzés...",
"checkingDatabase": "Adatbázis-kapcsolat ellenőrzése...",
"checkingAuthentication": "Hitelesítés ellenőrzése...",
"backendReconnected": "Szerverkapcsolat helyreállt",
"actions": "Műveletek",
"remove": "Eltávolítás",
"revoke": "Visszavonás",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Házigazda-kezelő",
"hosts": "Házigazdák",
"sshHosts": "SSH-hosztok",
"noHosts": "Nincsenek SSH-hosztok",
"noHostsMessage": "Még nem adott hozzá SSH-hosztokat. Kattintson a „Hoszt hozzáadása” gombra a kezdéshez.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Nem sikerült importálni a JSON fájlt",
"connectionDetails": "Kapcsolat részletei",
"organization": "Szervezet",
"ipAddress": "IP-cím vagy hostnév",
"ipAddress": "IP-cím",
"port": "Kikötő",
"name": "Név",
"username": "Felhasználónév",
@@ -925,8 +915,6 @@
"key": "Kulcsfontosságú",
"credential": "Hitelesítő adat",
"none": "Egyik sem",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Minden csatlakozáskor OPKSSH webes hitelesítést kér. A hitelesítési token 24 óráig érvényes, amíg meg nem újítják.",
"selectCredential": "Hitelesítő adat kiválasztása",
"selectCredentialPlaceholder": "Válasszon hitelesítő adatlapot...",
"credentialRequired": "Hitelesítő adat szükséges hitelesítő adat alapú hitelesítéshez",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Billentyűzet-interaktív hitelesítés",
"noneAuthDescription": "Ez a hitelesítési módszer billentyűzet-interaktív hitelesítést használ az SSH-kiszolgálóhoz való csatlakozáskor.",
"noneAuthDetails": "A billentyűzet-interaktív hitelesítés lehetővé teszi, hogy a szerver kérje a hitelesítő adatokat a csatlakozás során. Ez olyan szervereknél hasznos, amelyek többtényezős hitelesítést igényelnek, vagy ha nem szeretné helyben menteni a hitelesítő adatokat.",
"opksshAuthTitle": "OPKSSH hitelesítés",
"forceKeyboardInteractive": "Kényszerítse a billentyűzet interaktivitását",
"forceKeyboardInteractiveDesc": "Kényszeríti a billentyűzet-interaktív hitelesítés használatát. Ez néha szükséges a kétfaktoros hitelesítést (TOTP/2FA) használó szervereknél.",
"overrideCredentialUsername": "Hitelesítő adat felülírása Felhasználónév",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Megnyitás böngészőben",
"warpgateContinue": "Befejeztem a hitelesítést",
"warpgateTimeout": "Warpgate hitelesítési időtúllépés. Kérjük, csatlakozzon újra.",
"opksshAuthRequired": "OPKSSH hitelesítés szükséges",
"opksshAuthDescription": "A folytatáshoz végezze el a hitelesítést a böngészőjében. Ez a munkamenet 24 órán át érvényes marad.",
"opksshAuthUrl": "Hitelesítési URL",
"opksshOpenBrowser": "Böngésző megnyitása a hitelesítéshez",
"opksshWaitingForAuth": "Várakozás a böngésző hitelesítésére...",
"opksshAuthenticating": "Hitelesítés feldolgozása...",
"opksshTimeout": "A hitelesítés időtúllépést okozott. Kérjük, próbálja újra.",
"opksshAuthFailed": "Sikertelen hitelesítés. Kérjük, ellenőrizze a hitelesítő adatait, és próbálja újra.",
"opksshConfigMissing": "Az OPKSSH konfiguráció nem található. Kérjük, hozza létre a ~/.opk/config.yml fájlt az OIDC-szolgáltató beállításaival. Lásd a dokumentációt: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Jelszó beszúrása?",
"sudoPasswordPopupHint": "Nyomja meg az Enter billentyűt a beszúráshoz, az Esc billentyűt az elvetéshez",
"sudoPasswordPopupConfirm": "Beszúrás",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Automatikusan megpróbáljuk a {{method}} hitelesítést...",
"totpTimeout": "TOTP ellenőrzési időtúllépés. Kérjük, csatlakozzon újra.",
"passwordTimeout": "Jelszó-ellenőrzési időtúllépés. Kérjük, csatlakozzon újra.",
"connectionRejected": "A szerver elutasította a kapcsolatot. Kérjük, ellenőrizze a hitelesítést és a hálózati konfigurációt.",
"hostKeyRejected": "SSH host kulcs ellenőrzése elutasítva. Kapcsolat megszakítva."
"connectionRejected": "A szerver elutasította a kapcsolatot. Kérjük, ellenőrizze a hitelesítést és a hálózati konfigurációt."
},
"fileManager": {
"title": "Fájlkezelő",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Jelszó visszaállítása sikeres",
"passwordResetSuccessDesc": "Jelszava sikeresen visszaállításra került. Most már bejelentkezhet új jelszavával."
},
"hostKey": {
"verifyNewHost": "SSH host kulcs ellenőrzése",
"keyChangedWarning": "SSH állomáskulcs megváltozott",
"firstConnectionTitle": "Első csatlakozás ehhez a gazdagéphez",
"firstConnectionDescription": "A gazdagép hitelessége nem állapítható meg. Ellenőrizze, hogy az ujjlenyomat megfelel-e a vártnak.",
"keyChangedDescription": "A szerver host key-je megváltozott az utolsó csatlakozás óta. Ez biztonsági problémára utalhat.",
"previousKey": "Előző kulcs",
"newFingerprint": "Új ujjlenyomat",
"fingerprint": "Ujjlenyomat",
"verifyInstructions": "Ha megbízik ebben a gazdagépben, kattintson az Elfogadás gombra a folytatáshoz és az ujjlenyomat mentéséhez a jövőbeli kapcsolatokhoz.",
"securityWarning": "Biztonsági figyelmeztetés",
"acceptAndContinue": "Elfogadom és folytatom",
"acceptNewKey": "Új kulcs elfogadása és folytatás"
},
"errors": {
"notFound": "Az oldal nem található",
"unauthorized": "Jogosulatlan hozzáférés",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminál",
"hostSidebarSettings": "Gazdagép és oldalsáv",
"snippetsSettings": "Kódrészletek",
"confirmSnippetExecution": "Kódrészlet végrehajtásának megerősítése",
"confirmSnippetExecutionDesc": "Megerősítő párbeszédpanel megjelenítése a kódrészletek végrehajtása előtt",
"updateSettings": "Frissítések",
"disableUpdateCheck": "Frissítésellenőrzés letiltása",
"disableUpdateCheckDesc": "Új verziók keresésének leállítása indításkor és az irányítópulton. Csökkenti a hálózati kérések számát.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 vagy example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Kredensial",
"credentialsViewer": "Penampil Kredensial",
"manageYourSSHCredentials": "Kelola kredensial SSH Anda dengan aman.",
"addCredential": "Tambahkan Kredensial",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Ini akan menambahkan kunci publik dengan aman ke file ~/.ssh/authorized_keys pada host target tanpa menimpa kunci yang sudah ada. Operasi ini dapat dibatalkan.",
"chooseHostToDeploy": "Pilih host tempat untuk melakukan deployment...",
"deploying": "Sedang melakukan penyebaran...",
"copyDeployCommand": "Salin Perintah Penyebaran",
"copyDeployCommandDescription": "Salin perintah shell untuk menambahkan kunci publik secara manual ke file authorized_keys host. Berguna saat otentikasi kata sandi dinonaktifkan.",
"deployCommandCopied": "Perintah penyebaran disalin ke papan klip",
"manualDeployInfo": "Salin perintah ini ke terminal host target (misalnya, konsol Proxmox, IPMI, atau akses fisik) untuk menambahkan kunci SSH.",
"name": "Nama",
"noHostsAvailable": "Tidak ada tuan rumah yang tersedia.",
"noHostsMatchSearch": "Tidak ada host yang sesuai dengan pencarian Anda.",
@@ -303,9 +298,7 @@
"createFolder": "Buat Folder",
"editFolder": "Edit Folder",
"editFolderDescription": "Sesuaikan folder cuplikan Anda",
"createFolderDescription": "Susun cuplikan Anda ke dalam folder.",
"confirmExecution": "Jalankan \"{{name}}\"?",
"confirmExecutionDesc": "Apakah Anda yakin ingin menjalankan cuplikan kode ini?"
"createFolderDescription": "Susun cuplikan Anda ke dalam folder."
},
"commandHistory": {
"title": "Sejarah",
@@ -409,7 +402,6 @@
"required": "Diperlukan",
"optional": "Opsional",
"connect": "Menghubungkan",
"copied": "Disalin",
"connecting": "Menghubungkan...",
"creating": "Membuat...",
"clear": "Jernih",
@@ -502,7 +494,6 @@
"checking": "Sedang memeriksa...",
"checkingDatabase": "Memeriksa koneksi basis data...",
"checkingAuthentication": "Memeriksa autentikasi...",
"backendReconnected": "Koneksi server dipulihkan.",
"actions": "Tindakan",
"remove": "Menghapus",
"revoke": "Menarik kembali",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Manajer Host",
"hosts": "Tuan rumah",
"sshHosts": "Host SSH",
"noHosts": "Tidak ada Host SSH",
"noHostsMessage": "Anda belum menambahkan host SSH apa pun. Klik \"Tambah Host\" untuk memulai.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Gagal mengimpor file JSON",
"connectionDetails": "Detail Koneksi",
"organization": "Organisasi",
"ipAddress": "Alamat IP atau Nama Host",
"ipAddress": "Alamat IP",
"port": "Pelabuhan",
"name": "Nama",
"username": "Nama belakang",
@@ -925,8 +915,6 @@
"key": "Kunci",
"credential": "Mandat",
"none": "Tidak ada",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Meminta Anda untuk memasukkan otentikasi web OPKSSH setiap kali terhubung. Token otentikasi Anda akan berlaku selama 24 jam sebelum perlu diperbarui.",
"selectCredential": "Pilih Kredensial",
"selectCredentialPlaceholder": "Pilih sertifikasi...",
"credentialRequired": "Kredensial diperlukan saat menggunakan autentikasi kredensial.",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Otentikasi Interaktif Keyboard",
"noneAuthDescription": "Metode autentikasi ini akan menggunakan autentikasi interaktif keyboard saat terhubung ke server SSH.",
"noneAuthDetails": "Autentikasi interaktif keyboard memungkinkan server untuk meminta kredensial Anda selama koneksi. Ini berguna untuk server yang memerlukan autentikasi multi-faktor atau jika Anda tidak ingin menyimpan kredensial secara lokal.",
"opksshAuthTitle": "Otentikasi OPKSSH",
"forceKeyboardInteractive": "Paksa Interaktif Keyboard",
"forceKeyboardInteractiveDesc": "Memaksa penggunaan autentikasi interaktif keyboard. Ini terkadang diperlukan untuk server yang menggunakan Autentikasi Dua Faktor (TOTP/2FA).",
"overrideCredentialUsername": "Ganti Nama Pengguna Kredensial",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Buka di Browser",
"warpgateContinue": "Saya telah menyelesaikan otentikasi.",
"warpgateTimeout": "Otentikasi Warpgate habis waktu. Silakan sambungkan kembali.",
"opksshAuthRequired": "Otentikasi OPKSSH Diperlukan",
"opksshAuthDescription": "Lakukan otentikasi di browser Anda untuk melanjutkan. Sesi ini akan tetap berlaku selama 24 jam.",
"opksshAuthUrl": "URL Otentikasi",
"opksshOpenBrowser": "Buka Browser untuk Melakukan Otentikasi",
"opksshWaitingForAuth": "Menunggu otentikasi di browser...",
"opksshAuthenticating": "Memproses otentikasi...",
"opksshTimeout": "Autentikasi habis waktu. Silakan coba lagi.",
"opksshAuthFailed": "Autentikasi gagal. Silakan periksa kredensial Anda dan coba lagi.",
"opksshConfigMissing": "Konfigurasi OPKSSH tidak ditemukan. Silakan buat ~/.opk/config.yml dengan pengaturan penyedia OIDC Anda. Lihat dokumentasi: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Masukkan kata sandi?",
"sudoPasswordPopupHint": "Tekan Enter untuk memasukkan, Esc untuk menutup.",
"sudoPasswordPopupConfirm": "Menyisipkan",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Mencoba otentikasi {{method}} secara otomatis...",
"totpTimeout": "Waktu verifikasi TOTP habis. Silakan sambungkan kembali.",
"passwordTimeout": "Waktu verifikasi kata sandi habis. Silakan sambungkan kembali.",
"connectionRejected": "Koneksi ditolak oleh server. Harap periksa otentikasi dan konfigurasi jaringan Anda.",
"hostKeyRejected": "Verifikasi kunci host SSH ditolak. Koneksi dibatalkan."
"connectionRejected": "Koneksi ditolak oleh server. Harap periksa otentikasi dan konfigurasi jaringan Anda."
},
"fileManager": {
"title": "Pengelola File",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Reset Kata Sandi Berhasil",
"passwordResetSuccessDesc": "Kata sandi Anda telah berhasil direset. Anda sekarang dapat masuk dengan kata sandi baru Anda."
},
"hostKey": {
"verifyNewHost": "Verifikasi Kunci Host SSH",
"keyChangedWarning": "Kunci Host SSH Berubah",
"firstConnectionTitle": "Ini adalah kali pertama terhubung ke host ini.",
"firstConnectionDescription": "Keaslian host ini tidak dapat dipastikan. Verifikasi apakah sidik jari sesuai dengan yang Anda harapkan.",
"keyChangedDescription": "Kunci host untuk server ini telah berubah sejak koneksi terakhir Anda. Ini bisa mengindikasikan masalah keamanan.",
"previousKey": "Kunci Sebelumnya",
"newFingerprint": "Sidik Jari Baru",
"fingerprint": "Sidik jari",
"verifyInstructions": "Jika Anda mempercayai host ini, klik Terima untuk melanjutkan dan simpan sidik jari ini untuk koneksi di masa mendatang.",
"securityWarning": "Peringatan Keamanan",
"acceptAndContinue": "Terima & Lanjutkan",
"acceptNewKey": "Terima Kunci Baru & Lanjutkan"
},
"errors": {
"notFound": "Halaman tidak ditemukan",
"unauthorized": "Akses tidak sah",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Host & Sidebar",
"snippetsSettings": "Cuplikan",
"confirmSnippetExecution": "Konfirmasi Eksekusi Cuplikan",
"confirmSnippetExecutionDesc": "Tampilkan dialog konfirmasi sebelum menjalankan cuplikan kode.",
"updateSettings": "Pembaruan",
"disableUpdateCheck": "Nonaktifkan Pemeriksaan Pembaruan",
"disableUpdateCheckDesc": "Hentikan pengecekan versi baru saat startup dan dasbor. Mengurangi permintaan jaringan.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 atau example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Credenziali",
"credentialsViewer": "Visualizzatore Di Credenziali",
"manageYourSSHCredentials": "Gestisci le tue credenziali SSH in modo sicuro",
"addCredential": "Aggiungi Credenziali",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Questo aggiungerà la chiave pubblica al file ~/.ssh/authorized_keys dell'host di destinazione senza sovrascrivere le chiavi esistenti. L'operazione è reversibile.",
"chooseHostToDeploy": "Scegli un host in cui distribuire...",
"deploying": "Distribuzione...",
"copyDeployCommand": "Copia Il Comando Di Deploy",
"copyDeployCommandDescription": "Copia un comando shell per aggiungere manualmente la chiave pubblica al file authorized_keys di un host. Utile quando l'autenticazione con password è disabilitata.",
"deployCommandCopied": "Distribuisci comando copiato negli appunti",
"manualDeployInfo": "Incolla questo comando nel terminale dell'host di destinazione (ad esempio, console Proxmox, IPMI o accesso fisico) per aggiungere il tasto SSH.",
"name": "Nome",
"noHostsAvailable": "Nessun host disponibile",
"noHostsMatchSearch": "Nessun host corrisponde alla tua ricerca",
@@ -303,9 +298,7 @@
"createFolder": "Crea Cartella",
"editFolder": "Modifica Cartella",
"editFolderDescription": "Personalizza la cartella snippet",
"createFolderDescription": "Organizza i pezzetti di codice nelle cartelle",
"confirmExecution": "Eseguire \"{{name}}\"?",
"confirmExecutionDesc": "Sei sicuro di voler eseguire questa snippet?"
"createFolderDescription": "Organizza i pezzetti di codice nelle cartelle"
},
"commandHistory": {
"title": "Storico",
@@ -409,7 +402,6 @@
"required": "Richiesto",
"optional": "Facoltativo",
"connect": "Connetti",
"copied": "Copiato",
"connecting": "Connessione...",
"creating": "Creazione...",
"clear": "Pulisci",
@@ -502,7 +494,6 @@
"checking": "Controllo...",
"checkingDatabase": "Controllo connessione database...",
"checkingAuthentication": "Controllo autenticazione...",
"backendReconnected": "Connessione al server ripristinata",
"actions": "Azioni",
"remove": "Rimuovi",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Gestore Host",
"hosts": "Host",
"sshHosts": "Host SSH",
"noHosts": "Nessun Host SSH",
"noHostsMessage": "Non hai ancora aggiunto nessun host SSH. Clicca su \"Aggiungi host\" per iniziare.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Importazione del file JSON non riuscita",
"connectionDetails": "Dettagli Della Connessione",
"organization": "Organizzazione",
"ipAddress": "Indirizzo IP o nome host",
"ipAddress": "Indirizzo IP",
"port": "Porta",
"name": "Nome",
"username": "Username",
@@ -925,8 +915,6 @@
"key": "Chiave",
"credential": "Credenziali",
"none": "Nessuno",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Ti consente di eseguire il web-auth di OPKSSH su ogni connessione. Il tuo token di autenticazione durerà 24 ore fino a quando deve essere rinnovato.",
"selectCredential": "Seleziona Credenziali",
"selectCredentialPlaceholder": "Scegli una credenziale...",
"credentialRequired": "La credenziale è richiesta quando si utilizza l'autenticazione credenziali",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Autenticazione Tastiera-Interattiva",
"noneAuthDescription": "Questo metodo di autenticazione utilizzerà l'autenticazione interattiva con tastiera durante la connessione al server SSH.",
"noneAuthDetails": "L'autenticazione interattiva con tastiera consente al server di richiedere le credenziali durante la connessione. Questo è utile per i server che richiedono l'autenticazione a più fattori o se non si desidera salvare le credenziali localmente.",
"opksshAuthTitle": "Autenticazione OPKSSH",
"forceKeyboardInteractive": "Forza Tastiera-Interattiva",
"forceKeyboardInteractiveDesc": "Forza l'uso dell'autenticazione interattiva con tastiera. A volte è necessario per i server che utilizzano Autenticazione a due fattori (TOTP/2FA).",
"overrideCredentialUsername": "Ignora Il Nome Utente Credenziale",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Apri nel browser",
"warpgateContinue": "Ho Completato L'Autenticazione",
"warpgateTimeout": "Timeout autenticazione Warpgate. Per favore riconnetterti.",
"opksshAuthRequired": "Richiesta Autenticazione OPKSSH",
"opksshAuthDescription": "Completa l'autenticazione nel tuo browser per continuare. Questa sessione rimarrà valida per 24 ore.",
"opksshAuthUrl": "Url Di Autenticazione",
"opksshOpenBrowser": "Apri Browser per Autenticare",
"opksshWaitingForAuth": "In attesa di autenticazione nel browser...",
"opksshAuthenticating": "Elaborazione autenticazione...",
"opksshTimeout": "Autenticazione scaduta. Riprova.",
"opksshAuthFailed": "Autenticazione non riuscita. Controlla le tue credenziali e riprova.",
"opksshConfigMissing": "Configurazione OPKSSH non trovata. Si prega di creare ~/.opk/config.yml con le impostazioni del provider OIDC. Vedi documentazione: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Inserire Password?",
"sudoPasswordPopupHint": "Premere Invio per inserire, Esc per eliminare",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Prova automaticamente l'autenticazione {{method}}...",
"totpTimeout": "Timeout verifica TOTP. Riconnettersi.",
"passwordTimeout": "Timeout verifica password. Si prega di riconnettersi.",
"connectionRejected": "Connessione rifiutata dal server. Controlla la tua autenticazione e configurazione di rete.",
"hostKeyRejected": "Verifica della chiave host SSH rifiutata. Connessione annullata."
"connectionRejected": "Connessione rifiutata dal server. Controlla la tua autenticazione e configurazione di rete."
},
"fileManager": {
"title": "Gestore File",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Reset Password Con Successo",
"passwordResetSuccessDesc": "La password è stata reimpostata con successo. Ora puoi accedere con la tua nuova password."
},
"hostKey": {
"verifyNewHost": "Verifica La Chiave Host Ssh",
"keyChangedWarning": "Chiave Host Ssh Cambiata",
"firstConnectionTitle": "Prima volta che ci si connette a questo host",
"firstConnectionDescription": "L'autenticità di questo host non può essere stabilita. Verifica che l'impronta digitale corrisponda a quanto ci si aspetta.",
"keyChangedDescription": "La chiave host di questo server è cambiata dall'ultima connessione. Questo potrebbe indicare un problema di sicurezza.",
"previousKey": "Chiave Precedente",
"newFingerprint": "Nuova Impronta Digitale",
"fingerprint": "Impronta",
"verifyInstructions": "Se ti fidi di questo host, fai clic su Accetta per continuare e salvare questa impronta digitale per le connessioni future.",
"securityWarning": "Avviso Di Sicurezza",
"acceptAndContinue": "Accetta E Continua",
"acceptNewKey": "Accetta La Nuova Chiave E Continua"
},
"errors": {
"notFound": "Pagina non trovata",
"unauthorized": "Accesso non autorizzato",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminale",
"hostSidebarSettings": "& Barra Laterale Dell'Host",
"snippetsSettings": "Snippet",
"confirmSnippetExecution": "Conferma Esecuzione Snippet",
"confirmSnippetExecutionDesc": "Mostra la finestra di conferma prima di eseguire snippet",
"updateSettings": "Aggiornamenti",
"disableUpdateCheck": "Disabilita Controllo Aggiornamenti",
"disableUpdateCheckDesc": "Smetti di controllare nuove versioni all'avvio e alla dashboard. Riduce le richieste di rete.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 o example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "資格情報",
"credentialsViewer": "資格情報ビューアー",
"manageYourSSHCredentials": "SSH認証情報を安全に管理します",
"addCredential": "証明書の追加",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "これにより、既存の鍵を上書きすることなく、公開鍵をホストの ~/.ssh/authorized_keys ファイルに安全に追加します。操作は取り消し可能です。",
"chooseHostToDeploy": "デプロイするホストを選択してください...",
"deploying": "デプロイ中...",
"copyDeployCommand": "デプロイコマンドをコピー",
"copyDeployCommandDescription": "シェルコマンドをコピーして、ホストの authorized_keys ファイルに公開鍵を手動で追加します。パスワード認証が無効になっている場合に便利です。",
"deployCommandCopied": "デプロイコマンドがクリップボードにコピーされました",
"manualDeployInfo": "SSHキーを追加するには、このコマンドをターゲットホストの端末(例:Proxmoxコンソール、IPMI、または物理アクセス)に貼り付けます。",
"name": "名前",
"noHostsAvailable": "利用可能なホストがありません",
"noHostsMatchSearch": "検索条件に一致するホストがありません",
@@ -303,9 +298,7 @@
"createFolder": "フォルダを作成",
"editFolder": "フォルダを編集",
"editFolderDescription": "スニペットフォルダをカスタマイズ",
"createFolderDescription": "スニペットをフォルダーに整理する",
"confirmExecution": "「{{name}}」を実行しますか?",
"confirmExecutionDesc": "このスニペットを実行してもよろしいですか?"
"createFolderDescription": "スニペットをフォルダーに整理する"
},
"commandHistory": {
"title": "沿革",
@@ -409,7 +402,6 @@
"required": "必須",
"optional": "省略可能",
"connect": "接続する",
"copied": "コピーしました",
"connecting": "接続中...",
"creating": "作成中...",
"clear": "クリア",
@@ -502,7 +494,6 @@
"checking": "確認しています...",
"checkingDatabase": "データベース接続を確認しています...",
"checkingAuthentication": "認証中char@@0",
"backendReconnected": "サーバー接続が復元されました",
"actions": "アクション",
"remove": "削除",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "ホスト マネージャー",
"hosts": "ホスト",
"sshHosts": "SSH ホスト",
"noHosts": "SSHホストがありません",
"noHostsMessage": "SSHホストはまだ追加されていません。「ホストを追加」をクリックして開始してください。",
@@ -846,7 +836,7 @@
"failedToImportJson": "JSON ファイルのインポートに失敗しました",
"connectionDetails": "接続詳細",
"organization": "組織",
"ipAddress": "IPアドレスまたはホスト名",
"ipAddress": "IP アドレス",
"port": "ポート",
"name": "名前",
"username": "ユーザー名",
@@ -925,8 +915,6 @@
"key": "キー",
"credential": "資格情報",
"none": "なし",
"opkssh": "OPKSSH",
"opksshAuthDescription": "接続ごとにOPKSSHのweb-authを表示します。認証トークンは更新されるまで24時間持続します。",
"selectCredential": "証明書を選択",
"selectCredentialPlaceholder": "資格情報を選択...",
"credentialRequired": "資格情報認証を使用するには認証情報が必要です",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "キーボード対話型認証",
"noneAuthDescription": "この認証方法は、SSH サーバーに接続する際にキーボード対話型認証を使用します。",
"noneAuthDetails": "キーボード対話型認証により、サーバーは接続中に資格情報の入力を求めることができます。 これは、多要素認証を必要とするサーバーや、ローカルで資格情報を保存したくないサーバーに便利です。",
"opksshAuthTitle": "OPKSSH 認証",
"forceKeyboardInteractive": "キーボード対話を強制する",
"forceKeyboardInteractiveDesc": "2要素認証(TOTP/2FA)を使用するサーバーでは、キーボード対話型認証を強制的に使用します。",
"overrideCredentialUsername": "認証情報のユーザー名を上書きする",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "ブラウザで開く",
"warpgateContinue": "認証を完了しました",
"warpgateTimeout": "ワープゲート認証がタイムアウトしました。再接続してください。",
"opksshAuthRequired": "OPKSSH 認証が必要です",
"opksshAuthDescription": "ブラウザで認証を完了してください。このセッションは24時間有効です。",
"opksshAuthUrl": "認証URL",
"opksshOpenBrowser": "ブラウザを開いて認証する",
"opksshWaitingForAuth": "ブラウザでの認証を待っています...",
"opksshAuthenticating": "認証を処理中...",
"opksshTimeout": "認証がタイムアウトしました。もう一度やり直してください。",
"opksshAuthFailed": "認証に失敗しました。資格情報を確認して、もう一度やり直してください。",
"opksshConfigMissing": "OPKSSH設定が見つかりません。OIDCプロバイダ設定で~/.opk/config.ymlを作成してください。ドキュメントを参照してください: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "パスワードを入力してください。",
"sudoPasswordPopupHint": "Enterキーを押して挿入、Escキーで閉じる",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "{{method}} 認証を自動的に試みています...",
"totpTimeout": "TOTP 認証がタイムアウトしました。再接続してください。",
"passwordTimeout": "パスワードの検証がタイムアウトしました。再接続してください。",
"connectionRejected": "サーバーによって接続が拒否されました。認証とネットワーク設定を確認してください。",
"hostKeyRejected": "SSHホスト鍵の検証が拒否されました。接続がキャンセルされました。"
"connectionRejected": "サーバーによって接続が拒否されました。認証とネットワーク設定を確認してください。"
},
"fileManager": {
"title": "ファイルマネージャー",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "パスワードをリセットしました",
"passwordResetSuccessDesc": "パスワードが正常にリセットされました。新しいパスワードでログインできるようになりました。"
},
"hostKey": {
"verifyNewHost": "SSHホストキーを確認",
"keyChangedWarning": "SSH ホストキーが変更されました",
"firstConnectionTitle": "初めてこのホストに接続しました",
"firstConnectionDescription": "このホストの信頼性を確立できません。指紋が期待されているものと一致することを確認してください。",
"keyChangedDescription": "このサーバーのホストキーは、最後の接続から変更されました。これはセキュリティ上の問題を示している可能性があります。",
"previousKey": "前のキー",
"newFingerprint": "新しいフィンガープリント",
"fingerprint": "フィンガープリント",
"verifyInstructions": "このホストを信頼している場合は、format@@0をクリックして続行し、今後の接続のためにこの指紋を保存します。",
"securityWarning": "セキュリティ警告",
"acceptAndContinue": "承認して続ける",
"acceptNewKey": "新しいキーを承認して続ける"
},
"errors": {
"notFound": "ページが見つかりません",
"unauthorized": "権限のないアクセス",
@@ -2063,8 +2026,6 @@
"terminalSettings": "ターミナル",
"hostSidebarSettings": "ホスト & サイドバー",
"snippetsSettings": "Snippets",
"confirmSnippetExecution": "スニペットの実行を確認",
"confirmSnippetExecutionDesc": "スニペットを実行する前に確認ダイアログを表示する",
"updateSettings": "更新",
"disableUpdateCheck": "アップデートチェックを無効にする",
"disableUpdateCheckDesc": "起動時とダッシュボードで新しいバージョンの確認を停止します。ネットワークリクエストを削減します。",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1またはexample.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "신임장",
"credentialsViewer": "자격 증명 뷰어",
"manageYourSSHCredentials": "SSH 자격 증명을 안전하게 관리하세요",
"addCredential": "자격 증명 추가",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "이렇게 하면 기존 키를 덮어쓰지 않고 대상 호스트의 ~/.ssh/authorized_keys 파일에 공개 키가 안전하게 추가됩니다. 이 작업은 되돌릴 수 있습니다.",
"chooseHostToDeploy": "배포할 호스트를 선택하세요...",
"deploying": "배포 중...",
"copyDeployCommand": "배포 명령 복사",
"copyDeployCommandDescription": "호스트의 authorized_keys 파일에 공개 키를 수동으로 추가하는 셸 명령어를 복사합니다. 암호 인증이 비활성화된 경우 유용합니다.",
"deployCommandCopied": "배포 명령어가 클립보드에 복사되었습니다.",
"manualDeployInfo": "대상 호스트의 터미널(예: Proxmox 콘솔, IPMI 또는 물리적 접근)에 다음 명령어를 붙여넣어 SSH 키를 추가하십시오.",
"name": "이름",
"noHostsAvailable": "호스트를 사용할 수 없습니다.",
"noHostsMatchSearch": "검색 조건에 맞는 호스트가 없습니다.",
@@ -303,9 +298,7 @@
"createFolder": "폴더 생성",
"editFolder": "폴더 편집",
"editFolderDescription": "스니펫 폴더를 사용자 지정하세요",
"createFolderDescription": "메모들을 폴더별로 정리하세요",
"confirmExecution": "\"{{name}}\"을 실행하시겠습니까?",
"confirmExecutionDesc": "이 코드 조각을 실행하시겠습니까?"
"createFolderDescription": "메모들을 폴더별로 정리하세요"
},
"commandHistory": {
"title": "역사",
@@ -409,7 +402,6 @@
"required": "필수의",
"optional": "선택 과목",
"connect": "연결하다",
"copied": "복사됨",
"connecting": "연결 중...",
"creating": "생성 중...",
"clear": "분명한",
@@ -502,7 +494,6 @@
"checking": "확인 중...",
"checkingDatabase": "데이터베이스 연결을 확인하는 중...",
"checkingAuthentication": "인증 상태를 확인하는 중...",
"backendReconnected": "서버 연결이 복구되었습니다.",
"actions": "행위",
"remove": "제거하다",
"revoke": "취소",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "호스트 관리자",
"hosts": "호스트",
"sshHosts": "SSH 호스트",
"noHosts": "SSH 호스트 없음",
"noHostsMessage": "아직 SSH 호스트를 추가하지 않았습니다. 시작하려면 \"호스트 추가\"를 클릭하세요.",
@@ -846,7 +836,7 @@
"failedToImportJson": "JSON 파일을 가져오는 데 실패했습니다.",
"connectionDetails": "연결 정보",
"organization": "조직",
"ipAddress": "IP 주소 또는 호스트 이름",
"ipAddress": "IP 주소",
"port": "포트",
"name": "이름",
"username": "사용자 이름",
@@ -925,8 +915,6 @@
"key": "열쇠",
"credential": "신임장",
"none": "없음",
"opkssh": "오프크시",
"opksshAuthDescription": "접속할 때마다 OPKSSH 웹 인증을 요청합니다. 인증 토큰은 24시간 동안 유효하며, 갱신해야 합니다.",
"selectCredential": "자격증명을 선택하세요",
"selectCredentialPlaceholder": "자격증을 선택하세요...",
"credentialRequired": "자격 증명 인증을 사용할 때는 자격 증명이 필요합니다.",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "키보드 인터랙티브 인증",
"noneAuthDescription": "이 인증 방식은 SSH 서버에 연결할 때 키보드 대화형 인증을 사용합니다.",
"noneAuthDetails": "키보드 대화형 인증을 사용하면 서버에 연결하는 동안 자격 증명을 입력하라는 메시지가 표시됩니다. 이는 다단계 인증이 필요한 서버나 자격 증명을 로컬에 저장하지 않으려는 경우에 유용합니다.",
"opksshAuthTitle": "OPKSSH 인증",
"forceKeyboardInteractive": "키보드 상호작용 강제 적용",
"forceKeyboardInteractiveDesc": "키보드 입력 방식의 인증을 강제로 사용하게 합니다. 이는 2단계 인증(TOTP/2FA)을 사용하는 서버에서 필요한 경우가 있습니다.",
"overrideCredentialUsername": "자격 증명 사용자 이름 재정의",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "브라우저에서 열기",
"warpgateContinue": "인증이 완료되었습니다",
"warpgateTimeout": "워프게이트 인증 시간 초과입니다. 다시 연결해 주세요.",
"opksshAuthRequired": "OPKSSH 인증이 필요합니다",
"opksshAuthDescription": "계속하려면 브라우저에서 인증을 완료하세요. 이 세션은 24시간 동안 유효합니다.",
"opksshAuthUrl": "인증 URL",
"opksshOpenBrowser": "인증하려면 브라우저를 여세요",
"opksshWaitingForAuth": "브라우저에서 인증을 기다리는 중...",
"opksshAuthenticating": "인증 처리 중...",
"opksshTimeout": "인증 시간이 초과되었습니다. 다시 시도해 주세요.",
"opksshAuthFailed": "인증에 실패했습니다. 자격 증명을 확인하고 다시 시도해 주세요.",
"opksshConfigMissing": "OPKSSH 구성 파일을 찾을 수 없습니다. OIDC 공급자 설정이 포함된 ~/.opk/config.yml 파일을 생성하십시오. 자세한 내용은 다음 문서를 참조하십시오. https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "비밀번호를 입력하시겠습니까?",
"sudoPasswordPopupHint": "Enter 키를 눌러 삽입하고, Esc 키를 눌러 닫습니다.",
"sudoPasswordPopupConfirm": "끼워 넣다",
@@ -1359,8 +1337,7 @@
"automaticFallback": "{{method}} 인증을 자동으로 시도합니다...",
"totpTimeout": "TOTP 인증 시간이 초과되었습니다. 다시 연결해 주세요.",
"passwordTimeout": "비밀번호 인증 시간이 초과되었습니다. 다시 연결해 주세요.",
"connectionRejected": "서버에서 연결이 거부되었습니다. 인증 및 네트워크 구성을 확인하십시오.",
"hostKeyRejected": "SSH 호스트 키 인증이 거부되었습니다. 연결이 취소되었습니다."
"connectionRejected": "서버에서 연결이 거부되었습니다. 인증 및 네트워크 구성을 확인하십시오."
},
"fileManager": {
"title": "파일 관리자",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "비밀번호 재설정 성공",
"passwordResetSuccessDesc": "비밀번호가 성공적으로 재설정되었습니다. 이제 새 비밀번호로 로그인할 수 있습니다."
},
"hostKey": {
"verifyNewHost": "SSH 호스트 키 확인",
"keyChangedWarning": "SSH 호스트 키가 변경되었습니다.",
"firstConnectionTitle": "이 호스트에 처음 연결합니다.",
"firstConnectionDescription": "이 호스트의 진위 여부를 확인할 수 없습니다. 지문이 예상과 일치하는지 확인하십시오.",
"keyChangedDescription": "이 서버의 호스트 키가 마지막 접속 이후 변경되었습니다. 이는 보안 문제를 나타낼 수 있습니다.",
"previousKey": "이전 키",
"newFingerprint": "새로운 지문",
"fingerprint": "지문",
"verifyInstructions": "이 호스트를 신뢰한다면 '수락'을 클릭하여 계속 진행하고 향후 연결을 위해 이 지문을 저장하세요.",
"securityWarning": "보안 경고",
"acceptAndContinue": "수락 및 계속",
"acceptNewKey": "새 키를 수락하고 계속 진행하세요"
},
"errors": {
"notFound": "페이지를 찾을 수 없습니다",
"unauthorized": "무단 접근",
@@ -2063,8 +2026,6 @@
"terminalSettings": "터미널",
"hostSidebarSettings": "호스트 및 사이드바",
"snippetsSettings": "스니펫",
"confirmSnippetExecution": "스니펫 실행 확인",
"confirmSnippetExecutionDesc": "코드 조각 실행 전에 확인 대화 상자를 표시합니다.",
"updateSettings": "업데이트",
"disableUpdateCheck": "업데이트 확인 비활성화",
"disableUpdateCheckDesc": "시작 시 및 대시보드에서 새 버전 확인을 중지합니다. 네트워크 요청이 줄어듭니다.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 또는 example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Aanmeldgegevens",
"credentialsViewer": "Referenties bekijken",
"manageYourSSHCredentials": "Beheer uw SSH inloggegevens veilig",
"addCredential": "Toegangsgegevens toevoegen",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Dit zal veilig de publieke sleutel toevoegen aan het doel host's ~/.ssh/authorized_keys bestand zonder bestaande sleutels te overschrijven. De bewerking is omkeerbaar.",
"chooseHostToDeploy": "Kies een host om naar te implementeren...",
"deploying": "Implementeren...",
"copyDeployCommand": "Kopieer implementatieopdracht",
"copyDeployCommandDescription": "Kopieer een shell commando om handmatig de publieke sleutel toe te voegen aan het authorized_keys bestand van een host. Handig wanneer wachtwoordauthenticatie is uitgeschakeld.",
"deployCommandCopied": "Implementeer opdracht gekopieerd naar klembord",
"manualDeployInfo": "Plak deze opdracht in de terminal van de doel host (bijv. Proxmox console, IPMI of fysieke toegang) om de SSH sleutel toe te voegen.",
"name": "naam",
"noHostsAvailable": "Geen hosts beschikbaar",
"noHostsMatchSearch": "Er zijn geen hosts die voldoen aan jouw zoekopdracht",
@@ -303,9 +298,7 @@
"createFolder": "Map aanmaken",
"editFolder": "Map bewerken",
"editFolderDescription": "Tekstbouwstenenmap aanpassen",
"createFolderDescription": "Organiseer uw snippets in mappen",
"confirmExecution": "Uitvoeren \"{{name}}\"?",
"confirmExecutionDesc": "Weet u zeker dat u deze snippet wilt uitvoeren?"
"createFolderDescription": "Organiseer uw snippets in mappen"
},
"commandHistory": {
"title": "Geschiedenis",
@@ -409,7 +402,6 @@
"required": "vereist",
"optional": "Optioneel",
"connect": "Verbinden",
"copied": "Gekoppeld",
"connecting": "Verbinden...",
"creating": "Maken...",
"clear": "Verwijderen",
@@ -502,7 +494,6 @@
"checking": "Controleren...",
"checkingDatabase": "Database-verbinding controleren...",
"checkingAuthentication": "Authenticatie controleren...",
"backendReconnected": "Serververbinding hersteld",
"actions": "acties",
"remove": "Verwijderen",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Host Manager",
"hosts": "Verantwoordelijken",
"sshHosts": "SSH hosts",
"noHosts": "Geen SSH hosts",
"noHostsMessage": "U heeft nog geen SSH hosts toegevoegd. Klik op \"Host toevoegen\" om te beginnen.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Kan JSON bestand niet importeren",
"connectionDetails": "Connectie Details",
"organization": "Rekening",
"ipAddress": "IP-adres of hostnaam",
"ipAddress": "IP adres",
"port": "Poort",
"name": "naam",
"username": "Gebruikersnaam",
@@ -925,8 +915,6 @@
"key": "Sleutel",
"credential": "Toegangsgegevens",
"none": "geen",
"opkssh": "OPKENEN",
"opksshAuthDescription": "Verzoekt u naar OPKSSH web-authenticatie bij elke verbinding. Uw autorisatietoken zal 24 uur duren tot het moet worden vernieuwd.",
"selectCredential": "Selecteer referenties",
"selectCredentialPlaceholder": "Kies een inloggegevens...",
"credentialRequired": "Referentiegegevens zijn vereist bij het gebruik van referentieauthenticatie",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Toetsenbord-Interactieve authenticatie",
"noneAuthDescription": "Deze verificatiemethode gebruikt keyboard-interactieve authenticatie bij het verbinden met de SSH-server.",
"noneAuthDetails": "Keyboard-interactieve authenticatie maakt het mogelijk dat de server je om inloggegevens vraagt tijdens het verbinden. Dit is handig voor servers waarvoor multi-factor authenticatie vereist is of als u geen lokale inloggegevens wilt opslaan.",
"opksshAuthTitle": "OPKSSH authenticatie",
"forceKeyboardInteractive": "Forceer toetsenbord-interactief",
"forceKeyboardInteractiveDesc": "Forceert het gebruik van keyboard-interactieve authenticatie. Dit is soms vereist voor servers die gebruik maken van tweestapsverificatie (TOTP/2FA).",
"overrideCredentialUsername": "Aanmeldgebruikersnaam overschrijven",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Open in browser",
"warpgateContinue": "Ik heb authenticatie voltooid",
"warpgateTimeout": "Warpgate authenticatie time-out. Maak opnieuw verbinding.",
"opksshAuthRequired": "OPKSSH authenticatie vereist",
"opksshAuthDescription": "Voltooi de authenticatie in je browser om door te gaan. Deze sessie blijft 24 uur geldig.",
"opksshAuthUrl": "URL authenticatie",
"opksshOpenBrowser": "Browser openen om te verifiëren",
"opksshWaitingForAuth": "Wachten op authenticatie in browser...",
"opksshAuthenticating": "Authenticatie verwerken...",
"opksshTimeout": "Authenticatie is verlopen. Probeer het opnieuw.",
"opksshAuthFailed": "Authenticatie mislukt. Controleer uw inloggegevens en probeer het opnieuw.",
"opksshConfigMissing": "OPKSSH configuratie niet gevonden. Maak ~/.opk/config.yml aan met uw OIDC providerinstellingen. Zie documentatie: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Wachtwoord invoeren?",
"sudoPasswordPopupHint": "Druk op Enter om in te voegen, Esc om te sluiten",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Authenticatie {{method}} automatisch proberen...",
"totpTimeout": "TOTP-verificatie time-out. Gelieve opnieuw te verbinden.",
"passwordTimeout": "Wachtwoord verificatie time-out. Gelieve opnieuw te verbinden.",
"connectionRejected": "Verbinding geweigerd door de server. Controleer uw authenticatie en netwerkconfiguratie.",
"hostKeyRejected": "SSH host sleutel verificatie afgewezen. Verbinding geannuleerd."
"connectionRejected": "Verbinding geweigerd door de server. Controleer uw authenticatie en netwerkconfiguratie."
},
"fileManager": {
"title": "Bestands Beheer",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Wachtwoord opnieuw instellen geslaagd",
"passwordResetSuccessDesc": "Uw wachtwoord is met succes gereset. U kunt nu inloggen met uw nieuwe wachtwoord."
},
"hostKey": {
"verifyNewHost": "Verifieer SSH host-sleutel",
"keyChangedWarning": "SSH host-sleutel gewijzigd",
"firstConnectionTitle": "Eerste keer verbinden met deze host",
"firstConnectionDescription": "De authenticiteit van deze host kan niet worden vastgesteld. Controleer of de vingerafdruk overeenkomt met uw verwachting.",
"keyChangedDescription": "De hostsleutel voor deze server is veranderd sinds je laatste verbinding. Dit kan duiden op een beveiligingsprobleem.",
"previousKey": "Vorige sleutel",
"newFingerprint": "Nieuwe vingerafdruk",
"fingerprint": "Vingerafdruk",
"verifyInstructions": "Als je deze host vertrouwt, klik je op Accepteren om door te gaan en sla deze vingerafdruk op voor toekomstige verbindingen.",
"securityWarning": "Waarschuwing beveiliging",
"acceptAndContinue": "Accepteren & doorgaan",
"acceptNewKey": "Accepteer Nieuwe Sleutel & Doorgaan"
},
"errors": {
"notFound": "Pagina niet gevonden",
"unauthorized": "Onbevoegde toegang",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Host & Sidebar",
"snippetsSettings": "Tekstbouwstenen",
"confirmSnippetExecution": "Bevestig de uitvoering van de Snippet",
"confirmSnippetExecutionDesc": "Toon bevestigingsvenster voor het uitvoeren van snippets",
"updateSettings": "Bijwerken",
"disableUpdateCheck": "Updatecontrole uitschakelen",
"disableUpdateCheckDesc": "Stop met controleren op nieuwe versies bij opstarten en dashboard. Vermindert netwerkaanvragen.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 of voorbeeld.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Legitimasjon",
"credentialsViewer": "Legitimasjonsvisning",
"manageYourSSHCredentials": "Administrer SSH-legitimasjon sikkert",
"addCredential": "Legg til legitimasjon",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Dette legger den offentlige nøkkelen trygt til målserverens ~/.ssh/authorized_keys uten å overskrive eksisterende nøkler. Operasjonen kan reverseres.",
"chooseHostToDeploy": "Velg en vert å distribuere til...",
"deploying": "Distribuerer...",
"copyDeployCommand": "Kopier distribueringskommandoen",
"copyDeployCommandDescription": "Kopier en skallkommando for å legge den offentlige nøkkelen til en verts autorisert_key-fil. Nyttig når passordautentisering er deaktivert.",
"deployCommandCopied": "Distribuer kommandoen kopiert til utklippstavlen",
"manualDeployInfo": "Lim inn denne kommandoen i målvertens terminal (f.eks. Proxmox konsoll, IPMI eller fysisk tilgang) for å legge til SSH-nøkkelen.",
"name": "Navn",
"noHostsAvailable": "Ingen verter tilgjengelig",
"noHostsMatchSearch": "Ingen verter samsvarer med søket",
@@ -303,9 +298,7 @@
"createFolder": "Opprett mappe",
"editFolder": "Rediger mappe",
"editFolderDescription": "Tilpass utdragsmappen din",
"createFolderDescription": "Organiser snippeten dine i mapper",
"confirmExecution": "Utfør \"{{name}}\"?",
"confirmExecutionDesc": "Er du sikker på at du vil utføre dette snippet?"
"createFolderDescription": "Organiser snippeten dine i mapper"
},
"commandHistory": {
"title": "Historikk",
@@ -409,7 +402,6 @@
"required": "Påkrevd",
"optional": "Valgfritt",
"connect": "Koble til",
"copied": "Kopiert",
"connecting": "Kobler til...",
"creating": "Oppretter...",
"clear": "Tøm",
@@ -502,7 +494,6 @@
"checking": "Kontrollerer...",
"checkingDatabase": "Kontrollerer databaseforbindelse...",
"checkingAuthentication": "Kontrollerer autentisering...",
"backendReconnected": "Servertilkobling gjenopprettet",
"actions": "Handlinger",
"remove": "Fjern",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Vertadministrator",
"hosts": "Verter",
"sshHosts": "SSH-verter",
"noHosts": "Ingen SSH-verter",
"noHostsMessage": "Du har ikke lagt til noen SSH-verter ennå. Klikk \"Legg til vert\" for å begynne.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Kunne ikke importere JSON-fil",
"connectionDetails": "Tilkoblingsdetaljer",
"organization": "Organisasjon",
"ipAddress": "IP adresse eller vertsnavn",
"ipAddress": "IP-adresse",
"port": "Port",
"name": "Navn",
"username": "Brukernavn",
@@ -925,8 +915,6 @@
"key": "Nøkkel",
"credential": "Legitimasjon",
"none": "Ingen",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Ledetekster deg for OPKSSH web-auth ved hver tilkobling. Auth token varer i 24 timer til den må fornyes.",
"selectCredential": "Velg legitimasjon",
"selectCredentialPlaceholder": "Velg en legitimasjon...",
"credentialRequired": "Legitimasjon kreves ved legitimasjonsautentisering",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Tastaturinteraktiv autentisering",
"noneAuthDescription": "Denne autentiseringsmetoden bruker tastaturinteraktiv autentisering ved tilkobling til SSH-serveren.",
"noneAuthDetails": "Tastaturinteraktiv autentisering lar serveren be deg om legitimasjon under tilkobling. Nyttig for servere som krever flerfaktorautentisering eller hvis du ikke vil lagre legitimasjon lokalt.",
"opksshAuthTitle": "OPKSSH godkjenning",
"forceKeyboardInteractive": "Tving tastaturinteraktiv",
"forceKeyboardInteractiveDesc": "Tving bruk av tastaturinteraktiv autentisering. Ofte nødvendig for servere som bruker tofaktorautentisering (TOTP/2FA).",
"overrideCredentialUsername": "Overstyr brukernavn fra legitimasjon",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Åpne i nettleser",
"warpgateContinue": "Jeg har fullført godkjenning",
"warpgateTimeout": "Warpgate autentisering tidsavbrudd. Vennligst koble til på nytt.",
"opksshAuthRequired": "OPKSSH godkjenning kreves",
"opksshAuthDescription": "Fullstendig autentisering i nettleseren din for å fortsette. Denne økten er gyldig i 24 timer.",
"opksshAuthUrl": "Autentisering URL",
"opksshOpenBrowser": "Åpne nettleseren for å godkjenne",
"opksshWaitingForAuth": "Venter på godkjenning i nettleseren...",
"opksshAuthenticating": "Behandler autentisering...",
"opksshTimeout": "Autentisering ble tidsavbrutt. Vennligst prøv igjen.",
"opksshAuthFailed": "Godkjenning mislyktes. Kontroller påloggingsinformasjonen, og prøv på nytt.",
"opksshConfigMissing": "OPKSSH konfigurasjon ikke funnet. Lag ~/.opk/config.yml med dine OIDC leverandørinnstillinger. Se dokumentasjon: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Sette inn passord?",
"sudoPasswordPopupHint": "Trykk på Enter for å sette inn, Esc for å fjerne",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Prøver automatisk {{method}} autentisering...",
"totpTimeout": "TOTP-verifisering tidsavbrudd. Vennligst koble til på nytt.",
"passwordTimeout": "Tidsavbrudd for bekreftelse av passord. Vennligst koble til på nytt.",
"connectionRejected": "Tilkobling avvist av serveren. Kontroller godkjennings- og nettverkskonfigurasjonen.",
"hostKeyRejected": "SSH vertsnøkkelverifisering ble avvist. Tilkoblingen avbrutt."
"connectionRejected": "Tilkobling avvist av serveren. Kontroller godkjennings- og nettverkskonfigurasjonen."
},
"fileManager": {
"title": "Filbehandler",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Tilbakestilling av passord vellykket",
"passwordResetSuccessDesc": "Passordet er blitt tilbakestilt. Du kan nå logge inn med ditt nye passord."
},
"hostKey": {
"verifyNewHost": "Verifiser SSH vertsnøkkel",
"keyChangedWarning": "SSH vertsnøkkel endret",
"firstConnectionTitle": "Første gang du kobler til denne verten",
"firstConnectionDescription": "Vertens autensitet kan ikke etableres. Kontroller fingeravtrykket samsvarer med det du forventer.",
"keyChangedDescription": "Vertsnøkkelen for denne serveren er endret siden forrige tilkobling. Dette kan angi et sikkerhetsproblem.",
"previousKey": "Forrige nøkkel",
"newFingerprint": "Nytt fingeravtrykk",
"fingerprint": "Fingeravtrykk",
"verifyInstructions": "Hvis du stoler på denne verten, klikk Godta for å fortsette og lagre dette fingeravtrykket for fremtidige tilkoblinger.",
"securityWarning": "Sikkerhetsadvarsel",
"acceptAndContinue": "Godta og fortsett",
"acceptNewKey": "Aksepter ny nøkkel og fortsett"
},
"errors": {
"notFound": "Siden ble ikke funnet",
"unauthorized": "Uautorisert tilgang",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Verts- og sidepanelet",
"snippetsSettings": "Snippets",
"confirmSnippetExecution": "Bekreft kjøring av bruddtekst",
"confirmSnippetExecutionDesc": "Vis bekreftelsesdialog før du utfører snippets",
"updateSettings": "Oppdateringer",
"disableUpdateCheck": "Deaktiver oppdateringskontroll",
"disableUpdateCheckDesc": "Slutt å sjekke nye versjoner ved oppstart og dashbord. Reduserer nettverksforespørsler.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 eller eksempel.no",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Dane logowania",
"credentialsViewer": "Przeglądarka danych logowania",
"manageYourSSHCredentials": "Zarządzaj swoimi danymi uwierzytelniającymi SSH bezpiecznie",
"addCredential": "Dodaj poświadczenia",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "To bezpiecznie doda klucz publiczny do pliku hosta ~/.ssh/authorized_keys bez nadpisywania istniejących kluczy. Operacja jest odwracalna.",
"chooseHostToDeploy": "Wybierz hosta do wdrożenia...",
"deploying": "Wdrażanie...",
"copyDeployCommand": "Kopiuj polecenie wdrożenia",
"copyDeployCommandDescription": "Skopiuj polecenie powłoki, aby ręcznie dodać klucz publiczny do pliku authorized_keys hosta. Przydatne, gdy uwierzytelnianie hasła jest wyłączone.",
"deployCommandCopied": "Wdrożenie polecenia skopiowane do schowka",
"manualDeployInfo": "Wklej to polecenie w terminalu docelowego hosta (np. konsola Proxmox, IPMI lub fizyczny dostęp) aby dodać klucz SSH.",
"name": "Nazwisko",
"noHostsAvailable": "Brak dostępnych hostów",
"noHostsMatchSearch": "Brak hostów pasujących do Twojego wyszukiwania",
@@ -303,9 +298,7 @@
"createFolder": "Utwórz folder",
"editFolder": "Edytuj folder",
"editFolderDescription": "Dostosuj swój folder snippet",
"createFolderDescription": "Organizuj swoje fragmenty w folderach",
"confirmExecution": "Wykonać \"{{name}}\"?",
"confirmExecutionDesc": "Czy na pewno chcesz wykonać ten snippet?"
"createFolderDescription": "Organizuj swoje fragmenty w folderach"
},
"commandHistory": {
"title": "Historia",
@@ -409,7 +402,6 @@
"required": "Wymagane",
"optional": "Opcjonalnie",
"connect": "Połącz",
"copied": "Skopiowano",
"connecting": "Łączenie...",
"creating": "Tworzenie...",
"clear": "Wyczyść",
@@ -502,7 +494,6 @@
"checking": "Sprawdzanie...",
"checkingDatabase": "Sprawdzanie połączenia z bazą danych...",
"checkingAuthentication": "Sprawdzanie uwierzytelniania...",
"backendReconnected": "Połączenie z serwerem przywrócone",
"actions": "Akcje",
"remove": "Usuń",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Host Manager",
"hosts": "Hosty",
"sshHosts": "Hosty SSH",
"noHosts": "Brak hostów SSH",
"noHostsMessage": "Nie dodano jeszcze żadnych hostów SSH. Kliknij \"Dodaj hosta\", aby rozpocząć.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Nie udało się zaimportować pliku JSON",
"connectionDetails": "Szczegóły połączenia",
"organization": "Organizacja",
"ipAddress": "Adres IP lub nazwa hosta",
"ipAddress": "Adres IP",
"port": "Port",
"name": "Nazwisko",
"username": "Nazwa użytkownika",
@@ -925,8 +915,6 @@
"key": "Klucz",
"credential": "Dane logowania",
"none": "Brak",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Pyta Cię o autoryzację sieciową OPKSSH przy każdym połączeniu. Twój token uwierzytelniania potrwa 24 godziny, dopóki nie będzie musiał zostać przedłużony.",
"selectCredential": "Wybierz dane logowania",
"selectCredentialPlaceholder": "Wybierz poświadczenie...",
"credentialRequired": "Dane logowania są wymagane podczas korzystania z uwierzytelniania logowania",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Interaktywne uwierzytelnianie klawiatury",
"noneAuthDescription": "Ta metoda uwierzytelniania będzie używała interaktywnego uwierzytelniania klawiatury podczas łączenia z serwerem SSH.",
"noneAuthDetails": "Interaktywne uwierzytelnianie klawiatury pozwala na zapytanie serwera o poświadczenia podczas połączenia. Jest to przydatne dla serwerów, które wymagają wieloetapowego uwierzytelniania lub jeśli nie chcesz zapisywać danych logowania lokalnie.",
"opksshAuthTitle": "Uwierzytelnianie OPKSSH",
"forceKeyboardInteractive": "Wymuś Interaktywną Klawiaturę",
"forceKeyboardInteractiveDesc": "Wymusza użycie interaktywnego uwierzytelniania klawiatury. Jest to czasami wymagane dla serwerów, które używają dwustopniowego uwierzytelniania (TOTP/2FA).",
"overrideCredentialUsername": "Zastąp nazwę użytkownika",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Otwórz w przeglądarce",
"warpgateContinue": "Zakończyłem uwierzytelnianie",
"warpgateTimeout": "Limit czasu uwierzytelniania Warpgate. Proszę połączyć się ponownie.",
"opksshAuthRequired": "Wymagane uwierzytelnienie OPKSSH",
"opksshAuthDescription": "Zakończ uwierzytelnianie w przeglądarce, aby kontynuować. Ta sesja pozostanie ważna przez 24 godziny.",
"opksshAuthUrl": "Adres URL uwierzytelniania",
"opksshOpenBrowser": "Otwórz przeglądarkę do uwierzytelniania",
"opksshWaitingForAuth": "Oczekiwanie na uwierzytelnianie w przeglądarce...",
"opksshAuthenticating": "Przetwarzanie uwierzytelniania...",
"opksshTimeout": "Upłynął limit czasu uwierzytelniania. Spróbuj ponownie.",
"opksshAuthFailed": "Uwierzytelnianie nie powiodło się. Sprawdź swoje poświadczenia i spróbuj ponownie.",
"opksshConfigMissing": "Konfiguracja OPKSSH nie została znaleziona. Proszę utworzyć ~/.opk/config.yml z ustawieniami dostawcy OIDC. Zobacz dokumentacja: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Wprowadzić hasło?",
"sudoPasswordPopupHint": "Naciśnij Enter, aby wstawić, Esc, aby odrzucić",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Automatycznie próbuje uwierzytelnić {{method}}...",
"totpTimeout": "Limit czasu weryfikacji TOTP. Proszę ponownie połączyć.",
"passwordTimeout": "Limit czasu weryfikacji hasła. Proszę połączyć się ponownie.",
"connectionRejected": "Połączenie odrzucone przez serwer. Sprawdź swoje uwierzytelnianie i konfigurację sieci.",
"hostKeyRejected": "Weryfikacja klucza hosta SSH odrzucona. Połączenie anulowane."
"connectionRejected": "Połączenie odrzucone przez serwer. Sprawdź swoje uwierzytelnianie i konfigurację sieci."
},
"fileManager": {
"title": "Menedżer plików",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Hasło zostało zresetowane",
"passwordResetSuccessDesc": "Twoje hasło zostało pomyślnie zresetowane. Możesz teraz zalogować się przy użyciu nowego hasła."
},
"hostKey": {
"verifyNewHost": "Zweryfikuj klucz hosta SSH",
"keyChangedWarning": "Klucz hosta SSH został zmieniony",
"firstConnectionTitle": "Pierwsze połączenie z tym hostem",
"firstConnectionDescription": "Nie można ustalić autentyczności tego hosta. Sprawdź, czy odcisk palca odpowiada oczekiwaniom.",
"keyChangedDescription": "Klucz hosta dla tego serwera zmienił się od ostatniego połączenia. Może to wskazywać na problem bezpieczeństwa.",
"previousKey": "Poprzedni klucz",
"newFingerprint": "Nowy odcisk palca",
"fingerprint": "Odcisk palca",
"verifyInstructions": "Jeśli ufasz temu hostowi, kliknij przycisk Akceptuj, aby kontynuować i zapisać ten odcisk palca dla przyszłych połączeń.",
"securityWarning": "Ostrzeżenie bezpieczeństwa",
"acceptAndContinue": "Zaakceptuj i kontynuuj",
"acceptNewKey": "Akceptuj nowy klucz i kontynuuj"
},
"errors": {
"notFound": "Strona nie znaleziona",
"unauthorized": "Nieautoryzowany dostęp",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Pasek hosta i boczny",
"snippetsSettings": "Fragmenty",
"confirmSnippetExecution": "Potwierdź wykonanie Snippet",
"confirmSnippetExecutionDesc": "Pokaż okno dialogowe potwierdzenia przed wykonaniem fragmentów",
"updateSettings": "Aktualizacje",
"disableUpdateCheck": "Wyłącz sprawdzanie aktualizacji",
"disableUpdateCheckDesc": "Zatrzymaj sprawdzanie nowych wersji na tablicy startowej i menedżerskiej. Zmniejsza żądania sieci.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 lub przykład.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Credenciais",
"credentialsViewer": "Visualizador de credenciais",
"manageYourSSHCredentials": "Gerencie suas credenciais SSH de forma segura",
"addCredential": "Adicionar Credencial",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Isto irá adicionar com segurança a chave pública ao arquivo ~/.ssh/authorized_keys sem sobrescrever as chaves existentes. A operação é reversível.",
"chooseHostToDeploy": "Escolha um host para implantar em...",
"deploying": "Implementando...",
"copyDeployCommand": "Copiar Comando de Implementação",
"copyDeployCommandDescription": "Copie um comando do shell para adicionar manualmente a chave pública ao arquivo authorized_keys de um host. Útil quando a autenticação de senha está desativada.",
"deployCommandCopied": "Implantar comando copiado para a área de transferência",
"manualDeployInfo": "Cole este comando no terminal do host alvo (por exemplo, console Proxmox, IPMI ou acesso físico) para adicionar a chave SSH.",
"name": "Nome:",
"noHostsAvailable": "Nenhum host disponível",
"noHostsMatchSearch": "Nenhum host corresponde à sua pesquisa",
@@ -303,9 +298,7 @@
"createFolder": "Criar pasta",
"editFolder": "Editar Pasta",
"editFolderDescription": "Personalize sua pasta de snippet",
"createFolderDescription": "Organize seus snippets em pastas",
"confirmExecution": "Executar \"{{name}}\"?",
"confirmExecutionDesc": "Tem certeza que deseja executar este snippet?"
"createFolderDescription": "Organize seus snippets em pastas"
},
"commandHistory": {
"title": "Histórico",
@@ -409,7 +402,6 @@
"required": "Obrigatório",
"optional": "Opcional",
"connect": "Conectar",
"copied": "Copiado",
"connecting": "Conectandochar@@0",
"creating": "Criando...",
"clear": "Limpar",
@@ -502,7 +494,6 @@
"checking": "Verificandochar@@0",
"checkingDatabase": "Verificando conexão com o banco de dados...",
"checkingAuthentication": "Verificando autenticação...",
"backendReconnected": "Conexão do servidor restaurada",
"actions": "Ações.",
"remove": "Excluir",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Gerenciador de Host",
"hosts": "Anfitriões",
"sshHosts": "Hosts SSH",
"noHosts": "Nenhum host SSH",
"noHostsMessage": "Você ainda não adicionou nenhum host SSH. Clique em \"Adicionar Host\" para começar.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Falha ao importar arquivo JSON",
"connectionDetails": "Detalhes da conexão",
"organization": "Cliente",
"ipAddress": "Endereço IP ou Nome de Host",
"ipAddress": "Endereço IP",
"port": "Porta",
"name": "Nome:",
"username": "Usuário:",
@@ -925,8 +915,6 @@
"key": "Chave",
"credential": "Credencial",
"none": "Nenhuma",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Solicita a autenticação web do OPKSSH em cada conexão. Seu token de autenticação vai durar 24 horas até que ele deve ser renovado.",
"selectCredential": "Selecionar Credencial",
"selectCredentialPlaceholder": "Escolha uma credencial...",
"credentialRequired": "A credencial é necessária para usar autenticação de credenciais",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Autenticação interativa",
"noneAuthDescription": "Este método de autenticação usará a autenticação interativa de teclado ao conectar ao servidor SSH.",
"noneAuthDetails": "A autenticação interativa permite que o servidor lhe peça credenciais durante a conexão. Isso é útil para servidores que requerem autenticação multi-fatores ou você não quer salvar as credenciais localmente.",
"opksshAuthTitle": "Autenticação OPKSSH",
"forceKeyboardInteractive": "Forçar teclado interativo",
"forceKeyboardInteractiveDesc": "Força o uso de autenticação interativa de teclado. Isso às vezes é necessário para servidores que usam a Autenticação de Dois Fatores (TOTP/2FA).",
"overrideCredentialUsername": "Substituir o nome de usuário credencial",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Abrir no Navegador",
"warpgateContinue": "Eu concluí a autenticação",
"warpgateTimeout": "A autenticação do Warpgate expirou. Por favor reconecte-se.",
"opksshAuthRequired": "Autenticação OPKSSH necessária",
"opksshAuthDescription": "Conclua a autenticação no seu navegador para continuar. Essa sessão permanecerá válida por 24 horas.",
"opksshAuthUrl": "URL de autenticação",
"opksshOpenBrowser": "Abra o navegador para autenticar",
"opksshWaitingForAuth": "Aguardando autenticação no navegador...",
"opksshAuthenticating": "Processando autenticação...",
"opksshTimeout": "Tempo de autenticação esgotado. Por favor, tente novamente.",
"opksshAuthFailed": "Falha na autenticação. Por favor, verifique suas credenciais e tente novamente.",
"opksshConfigMissing": "Configuração OPKSSH não encontrada. Por favor, crie ~/.opk/config.yml com as configurações do provedor OIDC. Veja documentação: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Inserir senha?",
"sudoPasswordPopupHint": "Pressione Enter para inserir, Esc para dispensar",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Experimentando automaticamente autenticação {{method}}...",
"totpTimeout": "A verificação TOTP expirou. Por favor, reconecte-se.",
"passwordTimeout": "Verificação de senha expirada. Por favor, reconecte-se.",
"connectionRejected": "Conexão rejeitada pelo servidor. Verifique sua autenticação e configuração de rede.",
"hostKeyRejected": "Verificação de chave do host SSH rejeitada. Conexão cancelada."
"connectionRejected": "Conexão rejeitada pelo servidor. Verifique sua autenticação e configuração de rede."
},
"fileManager": {
"title": "Gerenciador de Arquivos",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Senha redefinida com sucesso",
"passwordResetSuccessDesc": "Sua senha foi redefinida com sucesso. Você agora pode entrar com sua nova senha."
},
"hostKey": {
"verifyNewHost": "Verificar chave do host SSH",
"keyChangedWarning": "Chave do host SSH alterada",
"firstConnectionTitle": "Primeira vez conectando-se a este host",
"firstConnectionDescription": "A autenticidade deste host não pode ser estabelecida. Verifique a impressão digital que você espera.",
"keyChangedDescription": "A chave do host para este servidor mudou desde a sua última conexão. Isso pode indicar um problema de segurança.",
"previousKey": "Chave anterior",
"newFingerprint": "Nova impressão digital",
"fingerprint": "Impressão digital",
"verifyInstructions": "Caso você confie neste host, clique em Aceitar para continuar e salvar esta impressão digital para conexões futuras.",
"securityWarning": "Aviso de segurança",
"acceptAndContinue": "Aceitar e Continuar",
"acceptNewKey": "Aceitar nova chave e continuar"
},
"errors": {
"notFound": "Página não encontrada",
"unauthorized": "Acesso não autorizado",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Host e Barra Lateral",
"snippetsSettings": "Trechos",
"confirmSnippetExecution": "Confirmar execução de Snippet",
"confirmSnippetExecutionDesc": "Mostrar diálogo antes de executar snippets",
"updateSettings": "Atualizações",
"disableUpdateCheck": "Desativar verificação de atualizações",
"disableUpdateCheckDesc": "Parar de verificar novas versões na inicialização e no painel. Reduz as solicitações de rede.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 ou exemplo.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Credenciais",
"credentialsViewer": "Visualizador de credenciais",
"manageYourSSHCredentials": "Gerencie suas credenciais SSH de forma segura",
"addCredential": "Adicionar Credencial",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Isto irá adicionar com segurança a chave pública ao arquivo ~/.ssh/authorized_keys sem sobrescrever as chaves existentes. A operação é reversível.",
"chooseHostToDeploy": "Escolha um host para implantar em...",
"deploying": "Implementando...",
"copyDeployCommand": "Copiar Comando de Implementação",
"copyDeployCommandDescription": "Copie um comando do shell para adicionar manualmente a chave pública ao arquivo authorized_keys de um host. Útil quando a autenticação de senha está desativada.",
"deployCommandCopied": "Implantar comando copiado para a área de transferência",
"manualDeployInfo": "Cole este comando no terminal do host alvo (por exemplo, console Proxmox, IPMI ou acesso físico) para adicionar a chave SSH.",
"name": "Nome:",
"noHostsAvailable": "Nenhum host disponível",
"noHostsMatchSearch": "Nenhum host corresponde à sua pesquisa",
@@ -303,9 +298,7 @@
"createFolder": "Criar pasta",
"editFolder": "Editar Pasta",
"editFolderDescription": "Personalize sua pasta de snippet",
"createFolderDescription": "Organize seus snippets em pastas",
"confirmExecution": "Executar \"{{name}}\"?",
"confirmExecutionDesc": "Tem certeza que deseja executar este snippet?"
"createFolderDescription": "Organize seus snippets em pastas"
},
"commandHistory": {
"title": "Histórico",
@@ -409,7 +402,6 @@
"required": "Obrigatório",
"optional": "Opcional",
"connect": "Conectar",
"copied": "Copiado",
"connecting": "Conectandochar@@0",
"creating": "Criando...",
"clear": "Limpar",
@@ -502,7 +494,6 @@
"checking": "Verificandochar@@0",
"checkingDatabase": "Verificando conexão com o banco de dados...",
"checkingAuthentication": "Verificando autenticação...",
"backendReconnected": "Conexão do servidor restaurada",
"actions": "Ações.",
"remove": "Excluir",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Gerenciador de Host",
"hosts": "Anfitriões",
"sshHosts": "Hosts SSH",
"noHosts": "Nenhum host SSH",
"noHostsMessage": "Você ainda não adicionou nenhum host SSH. Clique em \"Adicionar Host\" para começar.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Falha ao importar arquivo JSON",
"connectionDetails": "Detalhes da conexão",
"organization": "Cliente",
"ipAddress": "Endereço IP ou Nome de Host",
"ipAddress": "Endereço IP",
"port": "Porta",
"name": "Nome:",
"username": "Usuário:",
@@ -925,8 +915,6 @@
"key": "Chave",
"credential": "Credencial",
"none": "Nenhuma",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Solicita a autenticação web do OPKSSH em cada conexão. Seu token de autenticação vai durar 24 horas até que ele deve ser renovado.",
"selectCredential": "Selecionar Credencial",
"selectCredentialPlaceholder": "Escolha uma credencial...",
"credentialRequired": "A credencial é necessária para usar autenticação de credenciais",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Autenticação interativa",
"noneAuthDescription": "Este método de autenticação usará a autenticação interativa de teclado ao conectar ao servidor SSH.",
"noneAuthDetails": "A autenticação interativa permite que o servidor lhe peça credenciais durante a conexão. Isso é útil para servidores que requerem autenticação multi-fatores ou você não quer salvar as credenciais localmente.",
"opksshAuthTitle": "Autenticação OPKSSH",
"forceKeyboardInteractive": "Forçar teclado interativo",
"forceKeyboardInteractiveDesc": "Força o uso de autenticação interativa de teclado. Isso às vezes é necessário para servidores que usam a Autenticação de Dois Fatores (TOTP/2FA).",
"overrideCredentialUsername": "Substituir o nome de usuário credencial",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Abrir no Navegador",
"warpgateContinue": "Eu concluí a autenticação",
"warpgateTimeout": "A autenticação do Warpgate expirou. Por favor reconecte-se.",
"opksshAuthRequired": "Autenticação OPKSSH necessária",
"opksshAuthDescription": "Conclua a autenticação no seu navegador para continuar. Essa sessão permanecerá válida por 24 horas.",
"opksshAuthUrl": "URL de autenticação",
"opksshOpenBrowser": "Abra o navegador para autenticar",
"opksshWaitingForAuth": "Aguardando autenticação no navegador...",
"opksshAuthenticating": "Processando autenticação...",
"opksshTimeout": "Tempo de autenticação esgotado. Por favor, tente novamente.",
"opksshAuthFailed": "Falha na autenticação. Por favor, verifique suas credenciais e tente novamente.",
"opksshConfigMissing": "Configuração OPKSSH não encontrada. Por favor, crie ~/.opk/config.yml com as configurações do provedor OIDC. Veja documentação: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Inserir senha?",
"sudoPasswordPopupHint": "Pressione Enter para inserir, Esc para dispensar",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Experimentando automaticamente autenticação {{method}}...",
"totpTimeout": "A verificação TOTP expirou. Por favor, reconecte-se.",
"passwordTimeout": "Verificação de senha expirada. Por favor, reconecte-se.",
"connectionRejected": "Conexão rejeitada pelo servidor. Verifique sua autenticação e configuração de rede.",
"hostKeyRejected": "Verificação de chave do host SSH rejeitada. Conexão cancelada."
"connectionRejected": "Conexão rejeitada pelo servidor. Verifique sua autenticação e configuração de rede."
},
"fileManager": {
"title": "Gerenciador de Arquivos",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Senha redefinida com sucesso",
"passwordResetSuccessDesc": "Sua senha foi redefinida com sucesso. Você agora pode entrar com sua nova senha."
},
"hostKey": {
"verifyNewHost": "Verificar chave do host SSH",
"keyChangedWarning": "Chave do host SSH alterada",
"firstConnectionTitle": "Primeira vez conectando-se a este host",
"firstConnectionDescription": "A autenticidade deste host não pode ser estabelecida. Verifique a impressão digital que você espera.",
"keyChangedDescription": "A chave do host para este servidor mudou desde a sua última conexão. Isso pode indicar um problema de segurança.",
"previousKey": "Chave anterior",
"newFingerprint": "Nova impressão digital",
"fingerprint": "Impressão digital",
"verifyInstructions": "Caso você confie neste host, clique em Aceitar para continuar e salvar esta impressão digital para conexões futuras.",
"securityWarning": "Aviso de segurança",
"acceptAndContinue": "Aceitar e Continuar",
"acceptNewKey": "Aceitar nova chave e continuar"
},
"errors": {
"notFound": "Página não encontrada",
"unauthorized": "Acesso não autorizado",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Host e Barra Lateral",
"snippetsSettings": "Trechos",
"confirmSnippetExecution": "Confirmar execução de Snippet",
"confirmSnippetExecutionDesc": "Mostrar diálogo antes de executar snippets",
"updateSettings": "Atualizações",
"disableUpdateCheck": "Desativar verificação de atualizações",
"disableUpdateCheckDesc": "Parar de verificar novas versões na inicialização e no painel. Reduz as solicitações de rede.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 ou exemplo.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Acreditări",
"credentialsViewer": "Vizualizare acreditări",
"manageYourSSHCredentials": "Gestionează credențialele SSH în siguranță",
"addCredential": "Adaugă acreditare",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Acest lucru va adăuga în siguranță cheia publică la fișierul ~/.ssh/Autorized_keys al gazdei țintă, fără a suprascrie cheile existente. Operația este reversibilă.",
"chooseHostToDeploy": "Alege o gazdă pentru a o implementa...",
"deploying": "Desfășurare...",
"copyDeployCommand": "Copiază comanda de lansare",
"copyDeployCommandDescription": "Copiați o comandă shell pentru a adăuga manual cheia publică la fișierul cu chei autorizate. Useful când autentificarea cu parolă este dezactivată.",
"deployCommandCopied": "Lansează comanda copiată în clipboard",
"manualDeployInfo": "Lipiți această comandă în terminalul gazdei țintă (de exemplu, consola Proxmox, IPMI, sau acces fizic) pentru a adăuga cheia SSH.",
"name": "Nume",
"noHostsAvailable": "Nu sunt gazde disponibile",
"noHostsMatchSearch": "Nicio gazdă nu se potrivește cu căutarea ta",
@@ -303,9 +298,7 @@
"createFolder": "Creare folder",
"editFolder": "Editare dosar",
"editFolderDescription": "Personalizați folderul dvs. snippet",
"createFolderDescription": "Organizați fragmentele în dosare",
"confirmExecution": "Execută \"{{name}}\"?",
"confirmExecutionDesc": "Ești sigur că vrei să execuți acest snippet?"
"createFolderDescription": "Organizați fragmentele în dosare"
},
"commandHistory": {
"title": "Istoric",
@@ -409,7 +402,6 @@
"required": "Necesar",
"optional": "Opţional",
"connect": "Conectează-te",
"copied": "Copiat",
"connecting": "Conectare...",
"creating": "Creare...",
"clear": "Curăță",
@@ -502,7 +494,6 @@
"checking": "Verificare...",
"checkingDatabase": "Verificare conexiune la baza de date...",
"checkingAuthentication": "Verificare autentificare...",
"backendReconnected": "Conexiune server restaurată",
"actions": "Acțiuni",
"remove": "Elimină",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Manager Gazdă",
"hosts": "Gazde",
"sshHosts": "Gazde SSH",
"noHosts": "Fără gazde SSH",
"noHostsMessage": "Nu ai adăugat încă nicio gazdă SSH. Apasă pe \"Adaugă Gazdă\" pentru a începe.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Nu s-a putut importa fișierul JSON",
"connectionDetails": "Detalii conexiune",
"organization": "Organizație",
"ipAddress": "Adresă IP sau nume gazdă",
"ipAddress": "Adresă IP",
"port": "Portul",
"name": "Nume",
"username": "Nume",
@@ -925,8 +915,6 @@
"key": "Cheie",
"credential": "Acreditări",
"none": "Niciunul",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Vă promite pentru OPKSSH web auth la fiecare conectare. Token-ul de autentificare va dura 24 de ore până va trebui reînnoit.",
"selectCredential": "Selectare acreditare",
"selectCredentialPlaceholder": "Alege o acreditare...",
"credentialRequired": "Acreditarea este necesară atunci când se utilizează autentificarea acreditărilor",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Autentificare tastatură-interactivă",
"noneAuthDescription": "Această metodă de autentificare va utiliza autentificarea interactivă a tastaturii la conectarea la serverul SSH.",
"noneAuthDetails": "Autentificarea interactivă tastatură permite serverului să vă solicite acreditări în timpul conectării. Acest lucru este util pentru serverele care necesită autentificare multi-factor sau dacă nu doriţi să salvaţi acreditările la nivel local.",
"opksshAuthTitle": "Autentificare OPKSSH",
"forceKeyboardInteractive": "Forțează tastatura- interactivă",
"forceKeyboardInteractiveDesc": "Forțează utilizarea autentificării interactive a tastaturii. Acest lucru este uneori necesar pentru serverele care utilizează autentificarea în doi pași (TOTP/2FA).",
"overrideCredentialUsername": "Suprascrie utilizatorul de acreditare",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Deschide în browser",
"warpgateContinue": "Am finalizat autentificarea",
"warpgateTimeout": "Autentificare la curbură expirată. Te rugăm să te reconectezi.",
"opksshAuthRequired": "Autentificare OPKSSH necesară",
"opksshAuthDescription": "Finalizați autentificarea în browser-ul dvs. pentru a continua. Această sesiune va rămâne valabilă 24 de ore.",
"opksshAuthUrl": "URL autentificare",
"opksshOpenBrowser": "Deschide browser-ul pentru autentificare",
"opksshWaitingForAuth": "Se așteaptă autentificarea în browser...",
"opksshAuthenticating": "Se procesează autentificarea...",
"opksshTimeout": "Autentificarea a expirat. Încercați din nou.",
"opksshAuthFailed": "Autentificare eșuată. Te rugăm să verifici acreditările și să încerci din nou.",
"opksshConfigMissing": "Configurația OPKSSH nu a fost găsită. Vă rugăm să creați ~/.opk/config.yml cu setările furnizorului OIDC. Vedeți documentația: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Introduceți parola?",
"sudoPasswordPopupHint": "Apăsați Enter pentru inserare, Esc pentru a respinge",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Se încearcă autentificarea {{method}}...",
"totpTimeout": "Verificare TOTP expirată. Te rugăm să te reconectezi.",
"passwordTimeout": "Verificarea parolei a expirat. Vă rugăm să vă reconectați.",
"connectionRejected": "Conexiune respinsă de server. Verificați autentificarea și configurarea rețelei.",
"hostKeyRejected": "Verificarea cheii gazdă SSH a fost respinsă. Conexiune anulată."
"connectionRejected": "Conexiune respinsă de server. Verificați autentificarea și configurarea rețelei."
},
"fileManager": {
"title": "Manager fişiere",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Resetare parola reusita",
"passwordResetSuccessDesc": "Parola ta a fost resetată cu succes. Acum te poți autentifica cu noua parolă."
},
"hostKey": {
"verifyNewHost": "Verificare cheie gazdă SSH",
"keyChangedWarning": "Cheie gazdă SSH schimbată",
"firstConnectionTitle": "Conectare pentru prima dată la această gazdă",
"firstConnectionDescription": "Autenticitatea acestui gazdă nu poate fi stabilită. Verificați ca amprenta să corespundă cu ceea ce așteptați.",
"keyChangedDescription": "Cheia gazdă a acestui server s-a schimbat de la ultima conexiune. Aceasta ar putea indica o problemă de securitate.",
"previousKey": "Cheie anterioară",
"newFingerprint": "Amprentă nouă",
"fingerprint": "Amprentă",
"verifyInstructions": "Dacă aveți încredere în această gazdă, faceți clic pe Accept pentru a continua și a salva amprenta pentru conexiunile viitoare.",
"securityWarning": "Avertizare de securitate",
"acceptAndContinue": "Acceptați și continuați",
"acceptNewKey": "Acceptați o nouă cheie și continuați"
},
"errors": {
"notFound": "Pagina nu a fost găsită",
"unauthorized": "Acces neautorizat",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Găzduire și bară laterală",
"snippetsSettings": "Snippet-uri",
"confirmSnippetExecution": "Confirmare execuție snippet",
"confirmSnippetExecutionDesc": "Arată dialog de confirmare înainte de a executa fragmente",
"updateSettings": "Actualizări",
"disableUpdateCheck": "Dezactivează verificarea actualizării",
"disableUpdateCheckDesc": "Opriți verificarea de noi versiuni la pornire și tablou de bord. Reduce cererile de rețea.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 sau exemplu.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Полномочия",
"credentialsViewer": "Просмотр учетных данных",
"manageYourSSHCredentials": "Безопасное управление учётными данными SSH",
"addCredential": "Добавить учетные данные",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Это безопасно добавит публичный ключ к файлу ~/.ssh/authorized_keys целевого хоста без перезаписи существующих ключей. Операция может быть отменена.",
"chooseHostToDeploy": "Выберите хост для развертывания...",
"deploying": "Развертывание...",
"copyDeployCommand": "Копировать команду развертывания",
"copyDeployCommandDescription": "Скопируйте команду оболочки, чтобы вручную добавить открытый ключ в файл authorized_keys узла. Полезно, если отключена аутентификация пароля.",
"deployCommandCopied": "Команда развертывания скопирована в буфер обмена",
"manualDeployInfo": "Вставьте эту команду в терминал целевого хоста (например, консоль Proxmox, IPMI или физический доступ), чтобы добавить ключ SSH.",
"name": "Наименование",
"noHostsAvailable": "Нет хостов",
"noHostsMatchSearch": "Нет хостов, соответствующих вашему запросу",
@@ -303,9 +298,7 @@
"createFolder": "Создать папку",
"editFolder": "Изменить папку",
"editFolderDescription": "Настройка папки сниппетов",
"createFolderDescription": "Организовать ваши сниппеты в папках",
"confirmExecution": "Выполнить \"{{name}}\"?",
"confirmExecutionDesc": "Вы уверены, что хотите выполнить этот сниппет?"
"createFolderDescription": "Организовать ваши сниппеты в папках"
},
"commandHistory": {
"title": "История",
@@ -409,7 +402,6 @@
"required": "Требуется",
"optional": "Опционально",
"connect": "Подключиться",
"copied": "Скопировано",
"connecting": "Подключение...",
"creating": "Создание...",
"clear": "Очистить",
@@ -502,7 +494,6 @@
"checking": "Проверка...",
"checkingDatabase": "Проверка подключения к базе данных...",
"checkingAuthentication": "Проверка подлинности...",
"backendReconnected": "Соединение с сервером восстановлено",
"actions": "Действия",
"remove": "Удалить",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Менеджер хостов",
"hosts": "Узлы",
"sshHosts": "SSH хосты",
"noHosts": "Нет SSH хостов",
"noHostsMessage": "Вы еще не добавили ни одного хоста SSH. Нажмите \"Добавить хост\", чтобы начать.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Не удалось импортировать JSON файл",
"connectionDetails": "Детали подключения",
"organization": "Организация",
"ipAddress": "IP-адрес или имя хоста",
"ipAddress": "IP-адрес",
"port": "Порт",
"name": "Наименование",
"username": "Имя пользователя",
@@ -925,8 +915,6 @@
"key": "Спецификация",
"credential": "Полномочия",
"none": "Нет",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Запрашивает OPKSSH авторизацию при каждом подключении. Ваш токен авторизации будет длиться 24 часа, пока он не будет продлен.",
"selectCredential": "Выберите учетные данные",
"selectCredentialPlaceholder": "Выберите учетные данные...",
"credentialRequired": "Учетные данные требуются при использовании аутентификации",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Клавиатура - Интерактивная аутентификация",
"noneAuthDescription": "Этот метод аутентификации будет использовать интерактивную аутентификацию с клавиатурой при подключении к SSH серверу.",
"noneAuthDetails": "Интерактивная аутентификация на клавиатуре позволяет серверу запрашивать учетные данные во время подключения. Это полезно для серверов, которые требуют многофакторной аутентификации или если вы не хотите сохранять учетные данные локально.",
"opksshAuthTitle": "OPKSSH аутентификация",
"forceKeyboardInteractive": "Интерактивная клавиатура",
"forceKeyboardInteractiveDesc": "Принудительно использовать интерактивную аутентификацию с клавиатуры. Иногда требуется для серверов, использующих двухфакторную аутентификацию (TOTP/2FA).",
"overrideCredentialUsername": "Переопределить имя пользователя",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Открыть в браузере",
"warpgateContinue": "Я завершаю аутентификацию",
"warpgateTimeout": "Тайм-аут аутентификации Warpgate. Пожалуйста, подключитесь снова.",
"opksshAuthRequired": "Требуется аутентификация OPKSSH",
"opksshAuthDescription": "Завершите аутентификацию в браузере, чтобы продолжить. Этот сеанс будет оставаться действительным в течение 24 часов.",
"opksshAuthUrl": "URL аутентификации",
"opksshOpenBrowser": "Аутентификация в браузере",
"opksshWaitingForAuth": "Ожидание аутентификации в браузере...",
"opksshAuthenticating": "Обработка аутентификации...",
"opksshTimeout": "Истекло время аутентификации. Попробуйте еще раз.",
"opksshAuthFailed": "Аутентификация не удалась. Проверьте учетные данные и повторите попытку.",
"opksshConfigMissing": "OPKSSH конфигурация не найдена. Пожалуйста, создайте ~/.opk/config.yml с вашими настройками OIDC провайдера. См. документацию: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Вставить пароль?",
"sudoPasswordPopupHint": "Нажмите Enter для вставки, Esc для отключения",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Автоматически пытаться аутентификации {{method}}...",
"totpTimeout": "Тайм-аут проверки TOTP. Пожалуйста, подключитесь снова.",
"passwordTimeout": "Время ожидания подтверждения пароля истекло. Пожалуйста, подключитесь снова.",
"connectionRejected": "Соединение отклонено сервером. Проверьте вашу аутентификацию и конфигурацию сети.",
"hostKeyRejected": "Проверка SSH ключа хоста отклонена. Соединение отменено."
"connectionRejected": "Соединение отклонено сервером. Проверьте вашу аутентификацию и конфигурацию сети."
},
"fileManager": {
"title": "Файловый менеджер",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Пароль успешно сброшен",
"passwordResetSuccessDesc": "Ваш пароль был успешно сброшен. Теперь вы можете войти с новым паролем."
},
"hostKey": {
"verifyNewHost": "Проверка SSH ключа хоста",
"keyChangedWarning": "SSH ключ хоста изменен",
"firstConnectionTitle": "Впервые подключение к этому узлу",
"firstConnectionDescription": "Логичность этого узла не может быть установлена. Проверьте отпечаток пальца так, что вы ожидаете.",
"keyChangedDescription": "Ключ хоста для этого сервера изменился с момента вашего последнего подключения. Это может указывать на проблему безопасности.",
"previousKey": "Предыдущий ключ",
"newFingerprint": "Новый отпечаток пальца",
"fingerprint": "Отпечаток пальца",
"verifyInstructions": "Если вы доверяете этому узлу, нажмите «Принять», чтобы продолжить, и сохраните отпечаток пальца для будущих подключений.",
"securityWarning": "Предупреждение о безопасности",
"acceptAndContinue": "Принять и продолжить",
"acceptNewKey": "Принять новый ключ и продолжить"
},
"errors": {
"notFound": "Страница не найдена",
"unauthorized": "Неавторизованный доступ",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Терминал",
"hostSidebarSettings": "Узел и боковая панель",
"snippetsSettings": "Сниппеты",
"confirmSnippetExecution": "Подтвердите исполнение сниппета",
"confirmSnippetExecutionDesc": "Показывать окно подтверждения перед выполнением сниппетов",
"updateSettings": "Обновления",
"disableUpdateCheck": "Отключить проверку обновлений",
"disableUpdateCheckDesc": "Не проверять наличие новых версий при запуске и панели управления. Снижает сетевые запросы.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 или example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Акредитиви",
"credentialsViewer": "Прегледач акредитива",
"manageYourSSHCredentials": "Безбедно управљајте својим SSH акредитивима",
"addCredential": "Додај акредитив",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Ово ће безбедно додати јавни кључ у датотеку ~/.ssh/authorized_keys циљног хоста без преписивања постојећих кључева. Операција је реверзибилна.",
"chooseHostToDeploy": "Изаберите хост за распоређивање...",
"deploying": "Распоређивање...",
"copyDeployCommand": "Копирај команду за распоређивање",
"copyDeployCommandDescription": "Копирајте команду шелла да бисте ручно додали јавни кључ у датотеку authorized_keys хоста. Корисно када је аутентификација лозинком онемогућена.",
"deployCommandCopied": "Команда за распоређивање копирана у међуспремник",
"manualDeployInfo": "Налепите ову команду у терминал циљног хоста (нпр. Proxmox конзолу, IPMI или физички приступ) да бисте додали SSH кључ.",
"name": "Име",
"noHostsAvailable": "Нема доступних хостова",
"noHostsMatchSearch": "Ниједан хост не одговара вашој претрази",
@@ -303,9 +298,7 @@
"createFolder": "Направи фасциклу",
"editFolder": "Уреди фасциклу",
"editFolderDescription": "Прилагодите своју фасциклу са фрагментима кода",
"createFolderDescription": "Организујте своје фрагменте у фасцикле",
"confirmExecution": "Извршити „{{name}}“?",
"confirmExecutionDesc": "Да ли сте сигурни да желите да извршите овај исечак?"
"createFolderDescription": "Организујте своје фрагменте у фасцикле"
},
"commandHistory": {
"title": "Историја",
@@ -409,7 +402,6 @@
"required": "Обавезно",
"optional": "Опционо",
"connect": "Повежи се",
"copied": "Копирано",
"connecting": "Повезивање...",
"creating": "Креирање...",
"clear": "Јасно",
@@ -502,7 +494,6 @@
"checking": "Провера...",
"checkingDatabase": "Провера везе са базом података...",
"checkingAuthentication": "Провера аутентификације...",
"backendReconnected": "Веза са сервером је враћена",
"actions": "Акције",
"remove": "Уклони",
"revoke": "Поништи",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Менаџер домаћина",
"hosts": "Домаћини",
"sshHosts": "SSH хостови",
"noHosts": "Нема SSH хостова",
"noHostsMessage": "Још нисте додали ниједан SSH хост. Кликните на „Додај хост“ да бисте започели.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Увоз JSON датотеке није успео",
"connectionDetails": "Детаљи везе",
"organization": "Организација",
"ipAddress": "IP адреса или име хоста",
"ipAddress": "ИП адреса",
"port": "Лука",
"name": "Име",
"username": "Корисничко име",
@@ -925,8 +915,6 @@
"key": "Кључ",
"credential": "Акредитив",
"none": "Ниједан",
"opkssh": "ОПКШ",
"opksshAuthDescription": "Пита вас за OPKSSH веб-аутентификацију при сваком повезивању. Ваш токен за аутентификацију ће трајати 24 сата док се не обнови.",
"selectCredential": "Изаберите акредитив",
"selectCredentialPlaceholder": "Изаберите акредитив...",
"credentialRequired": "Акредитив је потребан када се користи аутентификација акредитива",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Интерактивна аутентификација помоћу тастатуре",
"noneAuthDescription": "Ова метода аутентификације ће користити интерактивну аутентификацију помоћу тастатуре приликом повезивања са SSH сервером.",
"noneAuthDetails": "Интерактивна аутентификација помоћу тастатуре омогућава серверу да вас пита за акредитиве током повезивања. Ово је корисно за сервере који захтевају вишефакторску аутентификацију или ако не желите да локално чувате акредитиве.",
"opksshAuthTitle": "OPKSSH аутентификација",
"forceKeyboardInteractive": "Присилно интерактивно коришћење тастатуре",
"forceKeyboardInteractiveDesc": "Приморава употребу интерактивне аутентификације помоћу тастатуре. Ово је понекад потребно за сервере који користе двофакторску аутентификацију (TOTP/2FA).",
"overrideCredentialUsername": "Замени корисничко име за акредитиве",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Отвори у прегледачу",
"warpgateContinue": "Завршио/ла сам аутентификацију",
"warpgateTimeout": "Временско ограничење за аутентификацију Варпгејта је истекло. Молимо вас да се поново повежете.",
"opksshAuthRequired": "Потребна је OPKSSH аутентификација",
"opksshAuthDescription": "Завршите аутентификацију у прегледачу да бисте наставили. Ова сесија ће остати важећа 24 сата.",
"opksshAuthUrl": "URL адреса за аутентификацију",
"opksshOpenBrowser": "Отворите прегледач за аутентификацију",
"opksshWaitingForAuth": "Чекање аутентификације у прегледачу...",
"opksshAuthenticating": "Обрада аутентификације...",
"opksshTimeout": "Временско ограничење за аутентификацију је истекло. Молимо покушајте поново.",
"opksshAuthFailed": "Аутентификација није успела. Проверите своје акредитиве и покушајте поново.",
"opksshConfigMissing": "Конфигурација OPKSSH није пронађена. Молимо вас да креирате ~/.opk/config.yml са подешавањима вашег OIDC провајдера. Погледајте документацију: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Унети лозинку?",
"sudoPasswordPopupHint": "Притисните Enter да бисте унели, Esc да бисте одбацили",
"sudoPasswordPopupConfirm": "Уметни",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Аутоматски покушај {{method}} аутентификације...",
"totpTimeout": "Временско ограничење за верификацију TOTP-а је истекло. Молимо вас да се поново повежете.",
"passwordTimeout": "Временско ограничење за верификацију лозинке је истекло. Молимо вас да се поново повежете.",
"connectionRejected": "Сервер је одбио везу. Проверите аутентификацију и конфигурацију мреже.",
"hostKeyRejected": "Верификација SSH кључа хоста је одбијена. Веза је отказана."
"connectionRejected": "Сервер је одбио везу. Проверите аутентификацију и конфигурацију мреже."
},
"fileManager": {
"title": "Менаџер датотека",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Ресетовање лозинке је успешно",
"passwordResetSuccessDesc": "Ваша лозинка је успешно ресетована. Сада се можете пријавити са новом лозинком."
},
"hostKey": {
"verifyNewHost": "Проверите SSH кључ хоста",
"keyChangedWarning": "SSH кључ хоста је промењен",
"firstConnectionTitle": "Прво повезивање са овим хостом",
"firstConnectionDescription": "Аутентичност овог хоста не може бити утврђена. Проверите да ли отисак прста одговара очекивањима.",
"keyChangedDescription": "Кључ хоста за овај сервер се променио од ваше последње везе. Ово би могло да указује на безбедносни проблем.",
"previousKey": "Претходни кључ",
"newFingerprint": "Нови отисак прста",
"fingerprint": "Отисак прста",
"verifyInstructions": "Ако верујете овом хосту, кликните на „Прихвати“ да бисте наставили и сачували овај отисак прста за будуће везе.",
"securityWarning": "Безбедносно упозорење",
"acceptAndContinue": "Прихвати и настави",
"acceptNewKey": "Прихвати нови кључ и настави"
},
"errors": {
"notFound": "Страница није пронађена",
"unauthorized": "Неовлашћени приступ",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Терминал",
"hostSidebarSettings": "Домаћин и бочна трака",
"snippetsSettings": "Исечци",
"confirmSnippetExecution": "Потврди извршавање исечка",
"confirmSnippetExecutionDesc": "Прикажи дијалог за потврду пре извршавања исечака",
"updateSettings": "Ажурирања",
"disableUpdateCheck": "Онемогући проверу ажурирања",
"disableUpdateCheckDesc": "Зауставите проверу нових верзија при покретању и на контролној табли. Смањује мрежне захтеве.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 или example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Användaruppgifter",
"credentialsViewer": "Visning av användaruppgifter",
"manageYourSSHCredentials": "Hantera dina SSH-uppgifter säkert",
"addCredential": "Lägg till autentiseringsuppgifter",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Detta kommer säkert att lägga till den publika nyckeln till målvärdens ~/.ssh/authorized_keys fil utan att skriva över befintliga nycklar. Åtgärden är vändbar.",
"chooseHostToDeploy": "Välj en värd att distribuera till...",
"deploying": "Utrustar...",
"copyDeployCommand": "Kopiera distribuera kommando",
"copyDeployCommandDescription": "Kopiera ett skalkommando för att manuellt lägga till den offentliga nyckeln till en värds authorized_keys-fil. Användbar när lösenordsautentisering är inaktiverad.",
"deployCommandCopied": "Distributionskommandot kopierat till urklipp",
"manualDeployInfo": "Klistra in detta kommando i målvärdens terminal (t.ex. Proxmox-konsol, IPMI eller fysisk åtkomst) för att lägga till SSH-tangenten.",
"name": "Namn",
"noHostsAvailable": "Inga tillgängliga värdar",
"noHostsMatchSearch": "Inga värdar matchar din sökning",
@@ -303,9 +298,7 @@
"createFolder": "Skapa mapp",
"editFolder": "Redigera mapp",
"editFolderDescription": "Anpassa din textmodul-mapp",
"createFolderDescription": "Organisera dina textmoduler i mappar",
"confirmExecution": "Kör \"{{name}}\"?",
"confirmExecutionDesc": "Är du säker på att du vill köra denna snippet?"
"createFolderDescription": "Organisera dina textmoduler i mappar"
},
"commandHistory": {
"title": "Historik",
@@ -409,7 +402,6 @@
"required": "Krävs",
"optional": "Valfri",
"connect": "Anslut",
"copied": "Kopierad",
"connecting": "Ansluter...",
"creating": "Skapar...",
"clear": "Rensa",
@@ -502,7 +494,6 @@
"checking": "Kontrollerar...",
"checkingDatabase": "Kontrollerar databasanslutning...",
"checkingAuthentication": "Kontrollerar autentisering...",
"backendReconnected": "Serveranslutning återställd",
"actions": "Åtgärder",
"remove": "Radera",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Värdhanterare",
"hosts": "Värdar",
"sshHosts": "SSH värdar",
"noHosts": "Inga SSH-värdar",
"noHostsMessage": "Du har inte lagt till några SSH-värdar än. Klicka på \"Lägg till värd\" för att komma igång.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Det gick inte att importera JSON-fil",
"connectionDetails": "Kontaktuppgifter",
"organization": "Organisation",
"ipAddress": "IP-adress eller värdnamn",
"ipAddress": "IP-adress",
"port": "Port",
"name": "Namn",
"username": "Användarnamn",
@@ -925,8 +915,6 @@
"key": "Nyckel",
"credential": "Uppgifter",
"none": "Ingen",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Fråga dig för OPKSSH web-auth vid varje anslutning. Din auth token kommer att pågå i 24 timmar tills den måste förnyas.",
"selectCredential": "Välj referens",
"selectCredentialPlaceholder": "Välj en inloggning...",
"credentialRequired": "Uppgifter krävs när autentisering används",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Tangentbord-Interaktiv autentisering",
"noneAuthDescription": "Denna autentiseringsmetod kommer att använda tangentbord-interaktiv autentisering när du ansluter till SSH-servern.",
"noneAuthDetails": "Tangentbord-interaktiv autentisering gör det möjligt för servern att fråga dig om autentiseringsuppgifter under anslutningen. Detta är användbart för servrar som kräver multi-faktor autentisering eller om du inte vill spara uppgifter lokalt.",
"opksshAuthTitle": "OPKSSH autentisering",
"forceKeyboardInteractive": "Tvinga interaktiv tangentbord",
"forceKeyboardInteractiveDesc": "Tvingar användning av tangentbords-interaktiv autentisering. Detta krävs ibland för servrar som använder tvåfaktorsautentisering (TOTP/2FA).",
"overrideCredentialUsername": "Åsidosätt Användarnamn",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Öppna i webbläsare",
"warpgateContinue": "Jag har slutfört autentisering",
"warpgateTimeout": "Warpgate-autentiserings-timeout. Vänligen återanslut.",
"opksshAuthRequired": "OPKSSH-autentisering krävs",
"opksshAuthDescription": "Fullständig autentisering i din webbläsare för att fortsätta. Denna session kommer att förbli giltig i 24 timmar.",
"opksshAuthUrl": "URL för autentisering",
"opksshOpenBrowser": "Öppna webbläsaren för att autentisera",
"opksshWaitingForAuth": "Väntar på autentisering i webbläsaren...",
"opksshAuthenticating": "Bearbetar autentisering...",
"opksshTimeout": "Autentisering gick ut. Försök igen.",
"opksshAuthFailed": "Autentisering misslyckades. Kontrollera dina uppgifter och försök igen.",
"opksshConfigMissing": "OPKSSH-konfigurationen hittades inte. Vänligen skapa ~/.opk/config.yml med dina OIDC-leverantörsinställningar. Se dokumentation: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Infoga lösenord?",
"sudoPasswordPopupHint": "Tryck Enter för att infoga Esc för att avfärda",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Försöker automatiskt {{method}} autentisering...",
"totpTimeout": "TOTP-verifiering timeout. Vänligen återanslut.",
"passwordTimeout": "Lösenordsverifiering är avklarad. Vänligen återanslut.",
"connectionRejected": "Anslutning avvisad av servern. Kontrollera din autentisering och nätverkskonfiguration.",
"hostKeyRejected": "Verifiering av SSH-värdnyckel avvisad. Anslutningen avbröts."
"connectionRejected": "Anslutning avvisad av servern. Kontrollera din autentisering och nätverkskonfiguration."
},
"fileManager": {
"title": "Filhanterare",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Lösenordsåterställning lyckades",
"passwordResetSuccessDesc": "Ditt lösenord har återställts. Du kan nu logga in med ditt nya lösenord."
},
"hostKey": {
"verifyNewHost": "Verifiera SSH-värdnyckel",
"keyChangedWarning": "SSH Värdnyckel ändrad",
"firstConnectionTitle": "Första gången du ansluter till denna värd",
"firstConnectionDescription": "Autenticiteten hos denna värd kan inte fastställas. Kontrollera att fingeravtrycket matchar det du förväntar dig.",
"keyChangedDescription": "Värdnyckeln för denna server har ändrats sedan din senaste anslutning. Detta kan indikera ett säkerhetsproblem.",
"previousKey": "Föregående nyckel",
"newFingerprint": "Nytt fingeravtryck",
"fingerprint": "Fingeravtryck",
"verifyInstructions": "Om du litar på detta värd, klicka på Acceptera för att fortsätta och spara detta fingeravtryck för framtida anslutningar.",
"securityWarning": "Varning för säkerhet",
"acceptAndContinue": "Godkänn och fortsätt",
"acceptNewKey": "Acceptera ny nyckel och fortsätt"
},
"errors": {
"notFound": "Sidan hittades inte",
"unauthorized": "Obehörig åtkomst",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Terminal",
"hostSidebarSettings": "Värd och sidofält",
"snippetsSettings": "Textmoduler",
"confirmSnippetExecution": "Bekräfta utförande av textmodulen",
"confirmSnippetExecutionDesc": "Visa bekräftelsedialog innan du utför textmoduler",
"updateSettings": "Uppdateringar",
"disableUpdateCheck": "Inaktivera uppdateringskontroll",
"disableUpdateCheckDesc": "Sluta leta efter nya versioner vid uppstart och instrumentbräda. Minskar nätverksförfrågningar.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 eller exempel.se",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "คุณสมบัติ",
"credentialsViewer": "โปรแกรมดูข้อมูลประจำตัว",
"manageYourSSHCredentials": "จัดการข้อมูลประจำตัว SSH ของคุณอย่างปลอดภัย",
"addCredential": "เพิ่มข้อมูลรับรอง",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "การดำเนินการนี้จะเพิ่มคีย์สาธารณะลงในไฟล์ ~/.ssh/authorized_keys ของโฮสต์เป้าหมายอย่างปลอดภัยโดยไม่เขียนทับคีย์ที่มีอยู่ การดำเนินการนี้สามารถย้อนกลับได้",
"chooseHostToDeploy": "เลือกโฮสต์ที่จะใช้ในการติดตั้ง...",
"deploying": "กำลังติดตั้ง...",
"copyDeployCommand": "คัดลอกคำสั่งปรับใช้",
"copyDeployCommandDescription": "คัดลอกคำสั่งเชลล์เพื่อเพิ่มคีย์สาธารณะลงในไฟล์ authorized_keys ของโฮสต์ด้วยตนเอง มีประโยชน์เมื่อปิดใช้งานการตรวจสอบสิทธิ์ด้วยรหัสผ่าน",
"deployCommandCopied": "คัดลอกคำสั่งปรับใช้ไปยังคลิปบอร์ดแล้ว",
"manualDeployInfo": "วางคำสั่งนี้ลงในเทอร์มินัลของโฮสต์เป้าหมาย (เช่น คอนโซล Proxmox, IPMI หรือการเข้าถึงทางกายภาพ) เพื่อเพิ่มคีย์ SSH",
"name": "ชื่อ",
"noHostsAvailable": "ไม่มีโฮสต์ให้บริการ",
"noHostsMatchSearch": "ไม่พบโฮสต์ใดตรงกับผลการค้นหาของคุณ",
@@ -303,9 +298,7 @@
"createFolder": "สร้างโฟลเดอร์",
"editFolder": "แก้ไขโฟลเดอร์",
"editFolderDescription": "ปรับแต่งโฟลเดอร์โค้ดสั้นของคุณ",
"createFolderDescription": "จัดระเบียบข้อความย่อของคุณลงในโฟลเดอร์",
"confirmExecution": "ดำเนินการ \"{{name}}\"?",
"confirmExecutionDesc": "คุณแน่ใจหรือไม่ว่าต้องการเรียกใช้โค้ดส่วนนี้?"
"createFolderDescription": "จัดระเบียบข้อความย่อของคุณลงในโฟลเดอร์"
},
"commandHistory": {
"title": "ประวัติศาสตร์",
@@ -409,7 +402,6 @@
"required": "ที่จำเป็น",
"optional": "ไม่จำเป็น",
"connect": "เชื่อมต่อ",
"copied": "คัดลอกแล้ว",
"connecting": "กำลังเชื่อมต่อ...",
"creating": "กำลังสร้าง...",
"clear": "ชัดเจน",
@@ -502,7 +494,6 @@
"checking": "กำลังตรวจสอบ...",
"checkingDatabase": "กำลังตรวจสอบการเชื่อมต่อฐานข้อมูล...",
"checkingAuthentication": "กำลังตรวจสอบการยืนยันตัวตน...",
"backendReconnected": "การเชื่อมต่อเซิร์ฟเวอร์กลับมาใช้งานได้แล้ว",
"actions": "การกระทำ",
"remove": "ลบ",
"revoke": "ถอน",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "ผู้จัดการโฮสต์",
"hosts": "โฮสต์",
"sshHosts": "โฮสต์ SSH",
"noHosts": "ไม่มีโฮสต์ SSH",
"noHostsMessage": "คุณยังไม่ได้เพิ่มโฮสต์ SSH ใดๆ คลิก \"เพิ่มโฮสต์\" เพื่อเริ่มต้น",
@@ -846,7 +836,7 @@
"failedToImportJson": "ไม่สามารถนำเข้าไฟล์ JSON ได้",
"connectionDetails": "รายละเอียดการเชื่อมต่อ",
"organization": "องค์กร",
"ipAddress": "ที่อยู่ IP หรือชื่อโฮสต์",
"ipAddress": "ที่อยู่ IP",
"port": "ท่าเรือ",
"name": "ชื่อ",
"username": "ชื่อผู้ใช้",
@@ -925,8 +915,6 @@
"key": "สำคัญ",
"credential": "ใบรับรอง",
"none": "ไม่มี",
"opkssh": "โอพีเคเอสเอช",
"opksshAuthDescription": "ระบบจะขอให้คุณป้อนรหัสยืนยันตัวตน OPKSSH ทุกครั้งที่เชื่อมต่อ รหัสยืนยันตัวตนของคุณจะมีอายุ 24 ชั่วโมงก่อนที่จะต้องต่ออายุใหม่",
"selectCredential": "เลือกข้อมูลประจำตัว",
"selectCredentialPlaceholder": "เลือกข้อมูลประจำตัว...",
"credentialRequired": "จำเป็นต้องระบุข้อมูลประจำตัวเมื่อใช้การตรวจสอบสิทธิ์ด้วยข้อมูลประจำตัว",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "การตรวจสอบสิทธิ์แบบโต้ตอบด้วยแป้นพิมพ์",
"noneAuthDescription": "วิธีการยืนยันตัวตนนี้จะใช้การยืนยันตัวตนผ่านแป้นพิมพ์เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ SSH",
"noneAuthDetails": "การตรวจสอบสิทธิ์แบบโต้ตอบด้วยแป้นพิมพ์ช่วยให้เซิร์ฟเวอร์แจ้งให้คุณป้อนข้อมูลประจำตัวระหว่างการเชื่อมต่อ ซึ่งมีประโยชน์สำหรับเซิร์ฟเวอร์ที่ต้องการการตรวจสอบสิทธิ์แบบหลายปัจจัย หรือหากคุณไม่ต้องการบันทึกข้อมูลประจำตัวไว้ในเครื่อง",
"opksshAuthTitle": "การตรวจสอบสิทธิ์ OPKSSH",
"forceKeyboardInteractive": "แป้นพิมพ์แบบอินเทอร์แอคทีฟของ Force",
"forceKeyboardInteractiveDesc": "บังคับให้ใช้การตรวจสอบสิทธิ์แบบโต้ตอบผ่านแป้นพิมพ์ ซึ่งบางครั้งจำเป็นสำหรับเซิร์ฟเวอร์ที่ใช้การตรวจสอบสิทธิ์แบบสองปัจจัย (TOTP/2FA)",
"overrideCredentialUsername": "แทนที่ชื่อผู้ใช้ข้อมูลประจำตัว",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "เปิดในเบราว์เซอร์",
"warpgateContinue": "ฉันทำการยืนยันตัวตนเสร็จเรียบร้อยแล้ว",
"warpgateTimeout": "การตรวจสอบสิทธิ์ผ่านวาร์ปหมดเวลา โปรดเชื่อมต่อใหม่อีกครั้ง",
"opksshAuthRequired": "ต้องใช้การตรวจสอบสิทธิ์ OPKSSH",
"opksshAuthDescription": "โปรดยืนยันตัวตนในเบราว์เซอร์ของคุณเพื่อดำเนินการต่อ เซสชันนี้จะมีอายุใช้งาน 24 ชั่วโมง",
"opksshAuthUrl": "URL สำหรับการตรวจสอบสิทธิ์",
"opksshOpenBrowser": "เปิดเบราว์เซอร์เพื่อยืนยันตัวตน",
"opksshWaitingForAuth": "กำลังรอการยืนยันตัวตนในเบราว์เซอร์...",
"opksshAuthenticating": "กำลังตรวจสอบสิทธิ์...",
"opksshTimeout": "การตรวจสอบสิทธิ์หมดเวลา โปรดลองอีกครั้ง",
"opksshAuthFailed": "การตรวจสอบสิทธิ์ล้มเหลว โปรดตรวจสอบข้อมูลประจำตัวของคุณและลองอีกครั้ง",
"opksshConfigMissing": "ไม่พบไฟล์การกำหนดค่า OPKSSH โปรดสร้างไฟล์ ~/.opk/config.yml ด้วยการตั้งค่าผู้ให้บริการ OIDC ของคุณ ดูเอกสารประกอบได้ที่: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "ใส่รหัสผ่าน?",
"sudoPasswordPopupHint": "กด Enter เพื่อแทรก กด Esc เพื่อปิด",
"sudoPasswordPopupConfirm": "แทรก",
@@ -1359,8 +1337,7 @@
"automaticFallback": "กำลังลองยืนยันตัวตน {{method}} โดยอัตโนมัติ...",
"totpTimeout": "การยืนยัน TOTP หมดเวลา โปรดเชื่อมต่อใหม่อีกครั้ง",
"passwordTimeout": "การตรวจสอบรหัสผ่านหมดเวลา โปรดเชื่อมต่อใหม่อีกครั้ง",
"connectionRejected": "เซิร์ฟเวอร์ปฏิเสธการเชื่อมต่อ โปรดตรวจสอบการยืนยันตัวตนและการกำหนดค่าเครือข่ายของคุณ",
"hostKeyRejected": "การตรวจสอบคีย์โฮสต์ SSH ถูกปฏิเสธ การเชื่อมต่อถูกยกเลิก"
"connectionRejected": "เซิร์ฟเวอร์ปฏิเสธการเชื่อมต่อ โปรดตรวจสอบการยืนยันตัวตนและการกำหนดค่าเครือข่ายของคุณ"
},
"fileManager": {
"title": "ตัวจัดการไฟล์",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "การรีเซ็ตรหัสผ่านสำเร็จ",
"passwordResetSuccessDesc": "รหัสผ่านของคุณถูกรีเซ็ตสำเร็จแล้ว คุณสามารถเข้าสู่ระบบด้วยรหัสผ่านใหม่ของคุณได้แล้ว"
},
"hostKey": {
"verifyNewHost": "ตรวจสอบคีย์โฮสต์ SSH",
"keyChangedWarning": "คีย์โฮสต์ SSH เปลี่ยนแล้ว",
"firstConnectionTitle": "นี่เป็นครั้งแรกที่เชื่อมต่อกับโฮสต์นี้",
"firstConnectionDescription": "ไม่สามารถตรวจสอบความถูกต้องของโฮสต์นี้ได้ โปรดตรวจสอบว่าลายนิ้วมือตรงกับที่คุณคาดหวังหรือไม่",
"keyChangedDescription": "รหัสโฮสต์ของเซิร์ฟเวอร์นี้มีการเปลี่ยนแปลงนับตั้งแต่การเชื่อมต่อครั้งล่าสุดของคุณ ซึ่งอาจบ่งชี้ถึงปัญหาด้านความปลอดภัย",
"previousKey": "คีย์ก่อนหน้า",
"newFingerprint": "ลายนิ้วมือใหม่",
"fingerprint": "ลายนิ้วมือ",
"verifyInstructions": "หากคุณเชื่อถือโฮสต์นี้ โปรดคลิก ยอมรับ เพื่อดำเนินการต่อและบันทึกข้อมูลนี้สำหรับการเชื่อมต่อในอนาคต",
"securityWarning": "คำเตือนด้านความปลอดภัย",
"acceptAndContinue": "ยอมรับและดำเนินการต่อ",
"acceptNewKey": "ยอมรับรหัสใหม่และดำเนินการต่อ"
},
"errors": {
"notFound": "ไม่พบหน้าเว็บ",
"unauthorized": "การเข้าถึงโดยไม่ได้รับอนุญาต",
@@ -2063,8 +2026,6 @@
"terminalSettings": "เทอร์มินัล",
"hostSidebarSettings": "โฮสต์และแถบด้านข้าง",
"snippetsSettings": "เศษเสี้ยว",
"confirmSnippetExecution": "ยืนยันการเรียกใช้โค้ดสั้น",
"confirmSnippetExecutionDesc": "แสดงกล่องโต้ตอบยืนยันก่อนเรียกใช้โค้ดสั้นๆ",
"updateSettings": "การอัปเดต",
"disableUpdateCheck": "ปิดใช้งานการตรวจสอบการอัปเดต",
"disableUpdateCheckDesc": "หยุดการตรวจสอบเวอร์ชันใหม่เมื่อเริ่มต้นระบบและบนแดชบอร์ด ช่วยลดจำนวนการร้องขอเครือข่าย",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 หรือ example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Kimlik Bilgileri",
"credentialsViewer": "Kimlik Bilgileri Görüntüleyici",
"manageYourSSHCredentials": "SSH kimlik bilgilerinizi güvenli bir şekilde yönetin.",
"addCredential": "Kimlik Bilgisi Ekle",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Bu işlem, mevcut anahtarların üzerine yazmadan, hedef sunucunun ~/.ssh/authorized_keys dosyasına genel anahtarı güvenli bir şekilde ekleyecektir. İşlem geri alınabilir.",
"chooseHostToDeploy": "Dağıtım yapılacak sunucuyu seçin...",
"deploying": "Dağıtıma başlanıyor...",
"copyDeployCommand": "Dağıtım Komutunu Kopyala",
"copyDeployCommandDescription": "Bir sunucunun authorized_keys dosyasına genel anahtarı manuel olarak eklemek için bir shell komutunu kopyalayın. Parola kimlik doğrulamasının devre dışı bırakıldığı durumlarda kullanışlıdır.",
"deployCommandCopied": "Dağıtım komutu panoya kopyalandı.",
"manualDeployInfo": "SSH anahtarını eklemek için bu komutu hedef sunucunun terminaline (örneğin, Proxmox konsolu, IPMI veya fiziksel erişim) yapıştırın.",
"name": "İsim",
"noHostsAvailable": "Hiç ev sahibi mevcut değil.",
"noHostsMatchSearch": "Arama kriterlerinize uyan ev sahibi bulunamadı.",
@@ -303,9 +298,7 @@
"createFolder": "Klasör Oluştur",
"editFolder": "Klasörü Düzenle",
"editFolderDescription": "Kod parçacığı klasörünüzü özelleştirin.",
"createFolderDescription": "Kod parçacıklarınızı klasörler halinde düzenleyin.",
"confirmExecution": "\"{{name}}\"'yi yürüt?",
"confirmExecutionDesc": "Bu kod parçasını çalıştırmak istediğinizden emin misiniz?"
"createFolderDescription": "Kod parçacıklarınızı klasörler halinde düzenleyin."
},
"commandHistory": {
"title": "Tarih",
@@ -409,7 +402,6 @@
"required": "Gerekli",
"optional": "İsteğe bağlı",
"connect": "Bağlamak",
"copied": "Kopyalandı",
"connecting": "Bağlanıyor...",
"creating": "Oluşturuluyor...",
"clear": "Temizlemek",
@@ -502,7 +494,6 @@
"checking": "Kontrol ediliyor...",
"checkingDatabase": "Veritabanı bağlantısı kontrol ediliyor...",
"checkingAuthentication": "Kimlik doğrulama kontrol ediliyor...",
"backendReconnected": "Sunucu bağlantısı yeniden kuruldu",
"actions": "Eylemler",
"remove": "Kaldırmak",
"revoke": "Geri çekmek",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Sunucu Yöneticisi",
"hosts": "Ev sahipleri",
"sshHosts": "SSH Sunucuları",
"noHosts": "SSH Sunucusu Yok",
"noHostsMessage": "Henüz hiçbir SSH sunucusu eklemediniz. Başlamak için \"Sunucu Ekle\"ye tıklayın.",
@@ -846,7 +836,7 @@
"failedToImportJson": "JSON dosyasını içe aktarma başarısız oldu.",
"connectionDetails": "Bağlantı Ayrıntıları",
"organization": "Organizasyon",
"ipAddress": "IP Adresi veya Ana Bilgisayar Adı",
"ipAddress": "IP Adresi",
"port": "Liman",
"name": "İsim",
"username": "Kullanıcı adı",
@@ -925,8 +915,6 @@
"key": "Anahtar",
"credential": "Kimlik belgesi",
"none": "Hiçbiri",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Her bağlantıda OPKSSH web kimlik doğrulaması için sizden onay ister. Kimlik doğrulama belirteciniz 24 saat boyunca geçerli olacak ve daha sonra yenilenmesi gerekecektir.",
"selectCredential": "Kimlik Bilgisi Seçin",
"selectCredentialPlaceholder": "Bir yeterlilik belgesi seçin...",
"credentialRequired": "Kimlik doğrulama kullanılırken kimlik bilgisi gereklidir.",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Klavye Etkileşimli Kimlik Doğrulama",
"noneAuthDescription": "Bu kimlik doğrulama yöntemi, SSH sunucusuna bağlanırken klavye etkileşimli kimlik doğrulamasını kullanacaktır.",
"noneAuthDetails": "Klavyeyle etkileşimli kimlik doğrulama, sunucunun bağlantı sırasında sizden kimlik bilgilerini istemesine olanak tanır. Bu, çok faktörlü kimlik doğrulama gerektiren sunucular için veya kimlik bilgilerini yerel olarak kaydetmek istemiyorsanız kullanışlıdır.",
"opksshAuthTitle": "OPKSSH Kimlik Doğrulaması",
"forceKeyboardInteractive": "Klavyeyle Etkileşimi Zorla",
"forceKeyboardInteractiveDesc": "Klavyeyle etkileşimli kimlik doğrulama kullanımını zorunlu kılar. Bu, bazen İki Faktörlü Kimlik Doğrulama (TOTP/2FA) kullanan sunucular için gereklidir.",
"overrideCredentialUsername": "Kimlik Bilgisi Kullanıcı Adını Geçersiz Kıl",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Tarayıcıda aç",
"warpgateContinue": "Kimlik doğrulama işlemini tamamladım.",
"warpgateTimeout": "Warpgate kimlik doğrulama zaman aşımı. Lütfen yeniden bağlanın.",
"opksshAuthRequired": "OPKSSH Kimlik Doğrulaması Gerekli",
"opksshAuthDescription": "Devam etmek için tarayıcınızda kimlik doğrulama işlemini tamamlayın. Bu oturum 24 saat boyunca geçerli olacaktır.",
"opksshAuthUrl": "Kimlik Doğrulama URL'si",
"opksshOpenBrowser": "Kimlik doğrulaması için tarayıcıyı açın.",
"opksshWaitingForAuth": "Tarayıcıda kimlik doğrulaması bekleniyor...",
"opksshAuthenticating": "Kimlik doğrulama işlemi gerçekleştiriliyor...",
"opksshTimeout": "Kimlik doğrulama işlemi zaman aşımına uğradı. Lütfen tekrar deneyin.",
"opksshAuthFailed": "Kimlik doğrulama başarısız oldu. Lütfen kimlik bilgilerinizi kontrol edin ve tekrar deneyin.",
"opksshConfigMissing": "OPKSSH yapılandırması bulunamadı. Lütfen OIDC sağlayıcı ayarlarınızla birlikte ~/.opk/config.yml dosyasını oluşturun. Belgelere bakın: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Şifrenizi girin?",
"sudoPasswordPopupHint": "Eklemek için Enter'a, silmek için Esc'ye basın.",
"sudoPasswordPopupConfirm": "Sokmak",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Otomatik olarak {{method}} kimlik doğrulaması deneniyor...",
"totpTimeout": "TOTP doğrulama zaman aşımına uğradı. Lütfen yeniden bağlanın.",
"passwordTimeout": "Parola doğrulama zaman aşımına uğradı. Lütfen yeniden bağlanın.",
"connectionRejected": "Sunucu bağlantıyı reddetti. Lütfen kimlik doğrulama ve ağ yapılandırmanızı kontrol edin.",
"hostKeyRejected": "SSH sunucu anahtarı doğrulama işlemi reddedildi. Bağlantı iptal edildi."
"connectionRejected": "Sunucu bağlantıyı reddetti. Lütfen kimlik doğrulama ve ağ yapılandırmanızı kontrol edin."
},
"fileManager": {
"title": "Dosya Yöneticisi",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Şifre Sıfırlama Başarılı",
"passwordResetSuccessDesc": "Parolanız başarıyla sıfırlandı. Artık yeni parolanızla giriş yapabilirsiniz."
},
"hostKey": {
"verifyNewHost": "SSH Ana Bilgisayar Anahtarını Doğrulayın",
"keyChangedWarning": "SSH Ana Bilgisayar Anahtarı Değiştirildi",
"firstConnectionTitle": "Bu sunucuya ilk kez bağlanıyorum.",
"firstConnectionDescription": "Bu sunucunun kimliği doğrulanamamıştır. Parmak izinin beklediğinizle eşleştiğini doğrulayın.",
"keyChangedDescription": "Bu sunucunun anahtar kodu son bağlantınızdan bu yana değişti. Bu bir güvenlik sorununa işaret edebilir.",
"previousKey": "Önceki Anahtar",
"newFingerprint": "Yeni Parmak İzi",
"fingerprint": "Parmak izi",
"verifyInstructions": "Bu sunucuya güveniyorsanız, devam etmek ve bu parmak izini gelecekteki bağlantılar için kaydetmek üzere Kabul Et'e tıklayın.",
"securityWarning": "Güvenlik Uyarısı",
"acceptAndContinue": "Kabul Et ve Devam Et",
"acceptNewKey": "Yeni Anahtarı Kabul Et ve Devam Et"
},
"errors": {
"notFound": "Sayfa bulunamadı.",
"unauthorized": "Yetkisiz erişim",
@@ -2063,8 +2026,6 @@
"terminalSettings": "terminal",
"hostSidebarSettings": "Sunucu ve Yan Menü",
"snippetsSettings": "Kısa bölümler",
"confirmSnippetExecution": "Kod Parçasının Yürütülmesini Onayla",
"confirmSnippetExecutionDesc": "Kod parçacıklarını çalıştırmadan önce onay iletişim kutusunu göster.",
"updateSettings": "Güncellemeler",
"disableUpdateCheck": "Güncelleme Kontrolünü Devre Dışı Bırak",
"disableUpdateCheckDesc": "Başlangıçta ve kontrol panelinde yeni sürümleri kontrol etmeyi durdurun. Ağ isteklerini azaltır.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 veya example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Дані доступу",
"credentialsViewer": "Переглядач облікових даних",
"manageYourSSHCredentials": "Безпечно керувати вашими обліковими даними SSH",
"addCredential": "Додати",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Це безпечно додасть відкритий ключ до цільового хоста ~/.ssh/authorized_keys файл без перезапису існуючих ключів. Операція незворотна.",
"chooseHostToDeploy": "Виберіть хост для розгортання...",
"deploying": "Розгортання...",
"copyDeployCommand": "Скопіювати Команду Розгортання",
"copyDeployCommandDescription": "Скопіювати команду оболонки в ручне додавання відкритого ключа в файл authorized_keys. Корисно, коли автентифікація пароля вимкнена.",
"deployCommandCopied": "Команда розгортання скопійована до буферу обміну",
"manualDeployInfo": "Вставити цю команду в терміналі цільового хоста (наприклад, консоль Proxmox, IPMI або фізичний доступ), щоб додати SSH ключ.",
"name": "Ім'я",
"noHostsAvailable": "Немає доступних хостів",
"noHostsMatchSearch": "Немає хостів, які відповідають вашому пошуку",
@@ -303,9 +298,7 @@
"createFolder": "Створити теку",
"editFolder": "Змінити теку",
"editFolderDescription": "Налаштуйте вашу теку зі сніпетом",
"createFolderDescription": "Організуйте ваші сніпети у папки",
"confirmExecution": "Виконати{{name}}\"?",
"confirmExecutionDesc": "Ви впевнені, що хочете зробити цей сніпет?"
"createFolderDescription": "Організуйте ваші сніпети у папки"
},
"commandHistory": {
"title": "Історія",
@@ -409,7 +402,6 @@
"required": "Обов'язково",
"optional": "За бажанням",
"connect": "Підключитися",
"copied": "Скопійовано",
"connecting": "З’єднання...",
"creating": "Створюю...",
"clear": "Очистити",
@@ -502,7 +494,6 @@
"checking": "Перевірка...",
"checkingDatabase": "Перевірка підключення до бази даних...",
"checkingAuthentication": "Перевірка автентифікації...",
"backendReconnected": "З'єднання з сервером відновлено",
"actions": "Дії",
"remove": "Видалити",
"revoke": "Revoke",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Менеджер хостів",
"hosts": "Хости",
"sshHosts": "SSH хости",
"noHosts": "Немає SSH хостів",
"noHostsMessage": "Ви ще не додали жодного SSH хоста. Натисніть \"Додати хоста\".",
@@ -846,7 +836,7 @@
"failedToImportJson": "Не вдалося імпортувати файл JSON",
"connectionDetails": "Відомості про підключення",
"organization": "Організація",
"ipAddress": "IP-адреса або ім'я хоста",
"ipAddress": "IP-адреса",
"port": "Порт",
"name": "Ім'я",
"username": "Ім'я користувача",
@@ -925,8 +915,6 @@
"key": "Ключ",
"credential": "Облікові дані",
"none": "Без ефекту",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Ви заохочуєте вас до ОПК-авторизацію при кожному підключенні. Токен автентифікації буде тривати 24 години, поки він буде буде поновлений.",
"selectCredential": "Оберіть облікові дані",
"selectCredentialPlaceholder": "Виберіть облікові дані...",
"credentialRequired": "Обліковий запис потрібен під час використання аутентифікації облікових даних",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Клавіатура-інтерактивна автентифікація",
"noneAuthDescription": "Цей метод автентифікації використовуватиме клавіатурну інтерактивну автентифікацію при підключенні до SSH сервера.",
"noneAuthDetails": "Увімкнута інтерактивна клавіатура дозволяє серверу підводити Ваші дані під час підключення. Це корисно для серверів, які потребують багатофакторної аутентифікації або якщо ви не хочете зберегти облікові дані локально.",
"opksshAuthTitle": "Аутентифікація OPKSSH",
"forceKeyboardInteractive": "Примусова інтерактивна клавіатура",
"forceKeyboardInteractiveDesc": "Вказує використання клавіатури для автентифікації. Іноді це потрібно для серверів, які використовують двофакторну автентифікацію (TOTP/2FA).",
"overrideCredentialUsername": "Перевизначити ім'я користувача",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Відкрити у браузері",
"warpgateContinue": "Я вже завершив автентифікацію",
"warpgateTimeout": "Тайм-аут аутентифікації warpgate будь ласка перепід'єднайтеся.",
"opksshAuthRequired": "Необхідна автентифікація OPKSSH",
"opksshAuthDescription": "Завершіть автентифікацію в вашому браузері, щоб продовжити. Ця сесія залишиться дійсною протягом 24 годин.",
"opksshAuthUrl": "URL автентифікації",
"opksshOpenBrowser": "Відкрити браузер для аутентифікації",
"opksshWaitingForAuth": "Очікування аутентифікації в браузері...",
"opksshAuthenticating": "Обробка автентифікації...",
"opksshTimeout": "Час аутентифікації минув. Будь ласка, спробуйте ще раз.",
"opksshAuthFailed": "Помилка авторизації. Будь ласка, перевірте свої облікові дані та спробуйте ще раз.",
"opksshConfigMissing": "Конфігурацію OPKSSH не знайдено. Будь ласка, створіть ~/.opk/config.yml з параметрами постачальника OIDC. Див. документацію: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Введіть пароль?",
"sudoPasswordPopupHint": "Натисніть Enter, щоб вставити, Esc для відхилення",
"sudoPasswordPopupConfirm": "Insert",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Автоматично пробує автентифікацію {{method}}...",
"totpTimeout": "Таймаут перевірки TOTP. Будь ласка, під'єднайтеся.",
"passwordTimeout": "Час очікування підтвердження пароля. Будь ласка, під'єднайтеся.",
"connectionRejected": "З'єднання відхилено сервером. Будь ласка, перевірте налаштування аутентифікації та мережі.",
"hostKeyRejected": "SSH-ключ хоста відхилено. Підключення скасовано."
"connectionRejected": "З'єднання відхилено сервером. Будь ласка, перевірте налаштування аутентифікації та мережі."
},
"fileManager": {
"title": "Файловий менеджер",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Пароль успішно скинуто",
"passwordResetSuccessDesc": "Ваш пароль успішно скинуто. Тепер ви можете увійти в систему, використовуючи новий пароль."
},
"hostKey": {
"verifyNewHost": "Перевірити SSH ключ хоста",
"keyChangedWarning": "SSH ключ хоста змінено",
"firstConnectionTitle": "вперше при підключенні до цього хосту",
"firstConnectionDescription": "Неможливо встановити автентифікацію цього хоста. Перевірте, чи збігається ваш запит.",
"keyChangedDescription": "Ключ хоста для цього сервера було змінено після вашого останнього підключення. Це може означати проблему безпеки.",
"previousKey": "Попередній ключ",
"newFingerprint": "Новий відбиток пальця",
"fingerprint": "Відбиток пальця",
"verifyInstructions": "Щоб продовжити і зберегти цей відбиток для майбутніх з'єднань, натисніть кнопку \"Прийняти\".",
"securityWarning": "Попередження системи безпеки",
"acceptAndContinue": "Прийняти та продовжити",
"acceptNewKey": "Прийняти новий ключ і продовжити"
},
"errors": {
"notFound": "Сторінка не знайдена",
"unauthorized": "Неавторизований доступ",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Термінал",
"hostSidebarSettings": "Хост і бічна панель",
"snippetsSettings": "Сніпети",
"confirmSnippetExecution": "Підтвердити виконання сніпета",
"confirmSnippetExecutionDesc": "Показати діалогове вікно підтвердження перед виконанням сніпетів",
"updateSettings": "Оновлення",
"disableUpdateCheck": "Вимкнути перевірку оновлень",
"disableUpdateCheckDesc": "Зупинити перевірку для нових версій при запуску і панелі керування. Зменшує запити на мережі.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 або приклад.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "Thông tin xác thực",
"credentialsViewer": "Trình xem thông tin đăng nhập",
"manageYourSSHCredentials": "Quản lý thông tin đăng nhập SSH của bạn một cách an toàn",
"addCredential": "Thêm thông tin đăng nhập",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "Thao tác này sẽ thêm khóa công khai một cách an toàn vào tệp ~/.ssh/authorized_keys của máy chủ đích mà không ghi đè lên các khóa hiện có. Thao tác này có thể đảo ngược.",
"chooseHostToDeploy": "Chọn máy chủ để triển khai...",
"deploying": "Đang triển khai...",
"copyDeployCommand": "Sao chép lệnh triển khai",
"copyDeployCommandDescription": "Sao chép lệnh shell để thêm thủ công khóa công khai vào tệp authorized_keys của máy chủ. Hữu ích khi xác thực bằng mật khẩu bị vô hiệu hóa.",
"deployCommandCopied": "Lệnh triển khai đã được sao chép vào clipboard",
"manualDeployInfo": "Dán lệnh này vào cửa sổ terminal của máy chủ đích (ví dụ: console Proxmox, IPMI hoặc truy cập vật lý) để thêm khóa SSH.",
"name": "Tên",
"noHostsAvailable": "Hiện không có máy chủ nào khả dụng",
"noHostsMatchSearch": "Không có máy chủ nào phù hợp với tìm kiếm của bạn",
@@ -303,9 +298,7 @@
"createFolder": "Tạo thư mục",
"editFolder": "Chỉnh sửa thư mục",
"editFolderDescription": "Tùy chỉnh thư mục đoạn mã của bạn",
"createFolderDescription": "Sắp xếp các đoạn văn bản của bạn vào các thư mục.",
"confirmExecution": "Thực thi \"{{name}}\"?",
"confirmExecutionDesc": "Bạn có chắc chắn muốn thực thi đoạn mã này không?"
"createFolderDescription": "Sắp xếp các đoạn văn bản của bạn vào các thư mục."
},
"commandHistory": {
"title": "Lịch sử",
@@ -409,7 +402,6 @@
"required": "Yêu cầu",
"optional": "Không bắt buộc",
"connect": "Kết nối",
"copied": "Đã sao chép",
"connecting": "Đang kết nối...",
"creating": "Đang tạo...",
"clear": "Thông thoáng",
@@ -502,7 +494,6 @@
"checking": "Đang kiểm tra...",
"checkingDatabase": "Kiểm tra kết nối cơ sở dữ liệu...",
"checkingAuthentication": "Đang kiểm tra xác thực...",
"backendReconnected": "Kết nối máy chủ đã được khôi phục.",
"actions": "Hành động",
"remove": "Di dời",
"revoke": "Thu hồi",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "Quản lý máy chủ",
"hosts": "Người dẫn chương trình",
"sshHosts": "Máy chủ SSH",
"noHosts": "Không có máy chủ SSH",
"noHostsMessage": "Bạn chưa thêm bất kỳ máy chủ SSH nào. Nhấp vào \"Thêm máy chủ\" để bắt đầu.",
@@ -846,7 +836,7 @@
"failedToImportJson": "Không thể nhập tệp JSON.",
"connectionDetails": "Chi tiết kết nối",
"organization": "Tổ chức",
"ipAddress": "Địa chỉ IP hoặc tên máy chủ",
"ipAddress": "Địa chỉ IP",
"port": "Cảng",
"name": "Tên",
"username": "Tên người dùng",
@@ -925,8 +915,6 @@
"key": "Chìa khóa",
"credential": "Chứng chỉ",
"none": "Không có",
"opkssh": "OPKSSH",
"opksshAuthDescription": "Hệ thống sẽ yêu cầu bạn xác thực web bằng OPKSSH mỗi khi kết nối. Mã xác thực của bạn sẽ có hiệu lực trong 24 giờ trước khi cần được gia hạn.",
"selectCredential": "Chọn thông tin xác thực",
"selectCredentialPlaceholder": "Chọn một loại chứng chỉ...",
"credentialRequired": "Cần có thông tin đăng nhập khi sử dụng phương thức xác thực bằng thông tin đăng nhập.",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "Xác thực tương tác bàn phím",
"noneAuthDescription": "Phương thức xác thực này sẽ sử dụng xác thực tương tác bàn phím khi kết nối với máy chủ SSH.",
"noneAuthDetails": "Xác thực tương tác bàn phím cho phép máy chủ yêu cầu bạn nhập thông tin đăng nhập trong quá trình kết nối. Điều này hữu ích cho các máy chủ yêu cầu xác thực đa yếu tố hoặc nếu bạn không muốn lưu thông tin đăng nhập cục bộ.",
"opksshAuthTitle": "Xác thực OPKSSH",
"forceKeyboardInteractive": "Buộc tương tác bàn phím",
"forceKeyboardInteractiveDesc": "Buộc sử dụng xác thực tương tác bàn phím. Điều này đôi khi cần thiết đối với các máy chủ sử dụng xác thực hai yếu tố (TOTP/2FA).",
"overrideCredentialUsername": "Ghi đè tên người dùng xác thực",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "Mở trong trình duyệt",
"warpgateContinue": "Tôi đã hoàn tất xác thực.",
"warpgateTimeout": "Lỗi xác thực Warpgate đã hết thời gian chờ. Vui lòng kết nối lại.",
"opksshAuthRequired": "Yêu cầu xác thực OPKSSH",
"opksshAuthDescription": "Hoàn tất xác thực trên trình duyệt của bạn để tiếp tục. Phiên này sẽ có hiệu lực trong 24 giờ.",
"opksshAuthUrl": "URL xác thực",
"opksshOpenBrowser": "Mở trình duyệt để xác thực.",
"opksshWaitingForAuth": "Đang chờ xác thực trên trình duyệt...",
"opksshAuthenticating": "Đang xử lý xác thực...",
"opksshTimeout": "Quá trình xác thực đã hết hạn. Vui lòng thử lại.",
"opksshAuthFailed": "Xác thực không thành công. Vui lòng kiểm tra lại thông tin đăng nhập của bạn và thử lại.",
"opksshConfigMissing": "Không tìm thấy cấu hình OPKSSH. Vui lòng tạo tệp ~/.opk/config.yml với các cài đặt nhà cung cấp OIDC của bạn. Xem tài liệu: https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "Nhập mật khẩu?",
"sudoPasswordPopupHint": "Nhấn Enter để chèn, Esc để xóa",
"sudoPasswordPopupConfirm": "Chèn",
@@ -1359,8 +1337,7 @@
"automaticFallback": "Đang tự động thử xác thực {{method}} ...",
"totpTimeout": "Đã hết thời gian xác thực TOTP. Vui lòng kết nối lại.",
"passwordTimeout": "Đã hết thời gian xác thực mật khẩu. Vui lòng kết nối lại.",
"connectionRejected": "Kết nối bị máy chủ từ chối. Vui lòng kiểm tra cấu hình xác thực và mạng của bạn.",
"hostKeyRejected": "Xác thực khóa máy chủ SSH bị từ chối. Kết nối bị hủy."
"connectionRejected": "Kết nối bị máy chủ từ chối. Vui lòng kiểm tra cấu hình xác thực và mạng của bạn."
},
"fileManager": {
"title": "Trình quản lý tập tin",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "Đặt lại mật khẩu thành công",
"passwordResetSuccessDesc": "Mật khẩu của bạn đã được đặt lại thành công. Giờ bạn có thể đăng nhập bằng mật khẩu mới."
},
"hostKey": {
"verifyNewHost": "Xác minh khóa máy chủ SSH",
"keyChangedWarning": "Khóa máy chủ SSH đã thay đổi",
"firstConnectionTitle": "Lần đầu tiên kết nối với máy chủ này.",
"firstConnectionDescription": "Không thể xác minh tính xác thực của máy chủ này. Hãy kiểm tra xem dấu vân tay có khớp với những gì bạn mong đợi hay không.",
"keyChangedDescription": "Khóa máy chủ (host key) của máy chủ này đã thay đổi kể từ lần kết nối cuối cùng của bạn. Điều này có thể cho thấy một vấn đề về bảo mật.",
"previousKey": "Phím trước đó",
"newFingerprint": "Dấu vân tay mới",
"fingerprint": "Dấu vân tay",
"verifyInstructions": "Nếu bạn tin tưởng máy chủ này, hãy nhấp vào Chấp nhận để tiếp tục và lưu dấu vân tay này cho các kết nối trong tương lai.",
"securityWarning": "Cảnh báo an ninh",
"acceptAndContinue": "Chấp nhận và tiếp tục",
"acceptNewKey": "Chấp nhận khóa mới và tiếp tục"
},
"errors": {
"notFound": "Không tìm thấy trang",
"unauthorized": "Truy cập trái phép",
@@ -2063,8 +2026,6 @@
"terminalSettings": "Phần cuối",
"hostSidebarSettings": "Máy chủ & Thanh bên",
"snippetsSettings": "Những đoạn trích",
"confirmSnippetExecution": "Xác nhận việc thực thi đoạn mã",
"confirmSnippetExecutionDesc": "Hiển thị hộp thoại xác nhận trước khi thực thi các đoạn mã.",
"updateSettings": "Cập nhật",
"disableUpdateCheck": "Tắt kiểm tra cập nhật",
"disableUpdateCheckDesc": "Ngừng kiểm tra các phiên bản mới khi khởi động và trên bảng điều khiển. Giảm số lượng yêu cầu mạng.",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 hoặc example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "全权证书",
"credentialsViewer": "凭证查看器",
"manageYourSSHCredentials": "安全地管理您的 SSH 凭证",
"addCredential": "添加凭证",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "这将安全地将公钥添加到目标主机的 ~/.ssh/authorized_keys 文件中,而不会覆盖现有密钥。此操作可逆。",
"chooseHostToDeploy": "选择要部署到的主机……",
"deploying": "正在部署……",
"copyDeployCommand": "复制部署命令",
"copyDeployCommandDescription": "复制 shell 命令手动将公钥添加到主机的授权键文件。当密码验证被禁用时有用。",
"deployCommandCopied": "部署命令已复制到剪贴板",
"manualDeployInfo": "将此命令粘贴到目标主机终端中(例如,Proxmox console、 IPMI 或物理访问) 以添加 SSH 密钥。",
"name": "名称",
"noHostsAvailable": "暂无可用主机",
"noHostsMatchSearch": "没有符合您搜索条件的主机",
@@ -303,9 +298,7 @@
"createFolder": "创建文件夹",
"editFolder": "编辑文件夹",
"editFolderDescription": "自定义代码片段文件夹",
"createFolderDescription": "将你的代码片段归类到文件夹中",
"confirmExecution": "执行“{{name}}”?",
"confirmExecutionDesc": "您确定要执行此代码片段吗?"
"createFolderDescription": "将你的代码片段归类到文件夹中"
},
"commandHistory": {
"title": "历史",
@@ -409,7 +402,6 @@
"required": "必需的",
"optional": "选修的",
"connect": "连接",
"copied": "已复制",
"connecting": "正在连接...",
"creating": "正在创建……",
"clear": "清除",
@@ -502,7 +494,6 @@
"checking": "检查...",
"checkingDatabase": "正在检查数据库连接...",
"checkingAuthentication": "正在检查认证...",
"backendReconnected": "服务器连接已恢复",
"actions": "激活",
"remove": "移除",
"revoke": "撤销",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "主机管理",
"hosts": "主机",
"sshHosts": "SSH主机",
"noHosts": "无 SSH 主机",
"noHostsMessage": "您尚未添加任何 SSH 主机。点击“添加主机”开始操作。",
@@ -846,7 +836,7 @@
"failedToImportJson": "导入 JSON 文件失败",
"connectionDetails": "连接详情",
"organization": "组织",
"ipAddress": "IP地址或主机名",
"ipAddress": "IP地址",
"port": "端口",
"name": "名称",
"username": "用户名",
@@ -925,8 +915,6 @@
"key": "密钥",
"credential": "凭证",
"none": "无",
"opkssh": "打开",
"opksshAuthDescription": "在每个连接上提示您使用 OPKSSH web-auth。您的认证令牌将持续24个小时,直到它被更新。",
"selectCredential": "选择凭证",
"selectCredentialPlaceholder": "选择一种凭证……",
"credentialRequired": "使用凭证身份验证时需要凭证。",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "键盘交互认证",
"noneAuthDescription": "连接到 SSH 服务器时,此身份验证方法将使用键盘交互式身份验证。",
"noneAuthDetails": "键盘交互式身份验证允许服务器在连接过程中提示您输入凭证。这对于需要多因素身份验证的服务器或您不想在本地保存凭证的情况非常有用。",
"opksshAuthTitle": "OPKSSH 身份验证",
"forceKeyboardInteractive": "强制键盘交互",
"forceKeyboardInteractiveDesc": "强制使用键盘交互式身份验证。对于使用双因素身份验证(TOTP/2FA)的服务器,有时需要这样做。",
"overrideCredentialUsername": "覆盖凭证用户名",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "在浏览器中打开",
"warpgateContinue": "我已经完成身份验证",
"warpgateTimeout": "Warpgate身份验证超时,请重新连接。",
"opksshAuthRequired": "需要OPKSSH 身份验证",
"opksshAuthDescription": "在您的浏览器中完成身份验证以继续。此会话将持续24小时有效。",
"opksshAuthUrl": "身份验证URL",
"opksshOpenBrowser": "打开浏览器进行身份验证",
"opksshWaitingForAuth": "正在等待浏览器的身份验证...",
"opksshAuthenticating": "正在处理身份验证...",
"opksshTimeout": "认证超时。请重试。",
"opksshAuthFailed": "认证失败。请检查您的凭据,然后重试。",
"opksshConfigMissing": "找不到 OPKSSH 配置。请使用您的 OIDC 提供商设置创建 ~/.opk/config.yml 。请参阅文档:https://github.com/openpubkey/opkssh#config.",
"sudoPasswordPopupTitle": "输入密码?",
"sudoPasswordPopupHint": "按 Enter 键插入,按 Esc 键关闭",
"sudoPasswordPopupConfirm": "确认",
@@ -1359,8 +1337,7 @@
"automaticFallback": "正在自动尝试 {{method}} 身份验证...",
"totpTimeout": "TOTP验证超时,请重新连接。",
"passwordTimeout": "密码验证超时,请重新连接。",
"connectionRejected": "服务器拒绝连接。请检查您的身份验证和网络配置。",
"hostKeyRejected": "SSH 主机验证被拒绝。连接已取消。"
"connectionRejected": "服务器拒绝连接。请检查您的身份验证和网络配置。"
},
"fileManager": {
"title": "文件管理器",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "密码重置成功",
"passwordResetSuccessDesc": "您的密码已成功重置。您现在可以使用新密码登录。"
},
"hostKey": {
"verifyNewHost": "验证 SSH 主机密钥",
"keyChangedWarning": "SSH 主机密钥已更改",
"firstConnectionTitle": "第一次连接到此主机",
"firstConnectionDescription": "此主机的真实性无法确认。请验证指纹符合您的期望。",
"keyChangedDescription": "此服务器的主机密钥自您上次连接以来已经改变。这可能会显示一个安全问题。",
"previousKey": "上一键",
"newFingerprint": "新建指纹",
"fingerprint": "指纹",
"verifyInstructions": "如果您信任此主机,请单击接受以继续保存此指纹以备将来的连接。",
"securityWarning": "安全警告",
"acceptAndContinue": "接受并继续",
"acceptNewKey": "接受新密钥并继续"
},
"errors": {
"notFound": "页面未找到",
"unauthorized": "未经授权的访问",
@@ -2063,8 +2026,6 @@
"terminalSettings": "终端",
"hostSidebarSettings": "主机和侧边栏",
"snippetsSettings": "代码片段",
"confirmSnippetExecution": "确认代码片段执行",
"confirmSnippetExecutionDesc": "执行代码片段前显示确认对话框",
"updateSettings": "更新",
"disableUpdateCheck": "禁用更新检查",
"disableUpdateCheckDesc": "停止在启动和控制面板中检查新版本。减少网络请求。",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 或 example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",
+4 -43
View File
@@ -1,6 +1,5 @@
{
"credentials": {
"credentials": "證書",
"credentialsViewer": "憑證檢視器",
"manageYourSSHCredentials": "安全地管理您的 SSH 憑證",
"addCredential": "新增憑證",
@@ -100,10 +99,6 @@
"deploymentProcessDescription": "這將安全地將公鑰新增至目標主機的 ~/.ssh/authorized_keys 檔案中,而不會覆蓋現有金鑰。此操作可逆。",
"chooseHostToDeploy": "選擇要部署到的主機…",
"deploying": "正在部署…",
"copyDeployCommand": "複製部署命令",
"copyDeployCommandDescription": "複製一條 shell 指令,用於手動將公鑰新增至主機的 authorized_keys 檔案中。當密碼驗證被停用時,此方法非常有用。",
"deployCommandCopied": "部署指令已複製到剪貼簿",
"manualDeployInfo": "將此命令貼上到目標主機的終端(例如,Proxmox 控制台、IPMI 或實體存取)中,以新增 SSH 金鑰。",
"name": "姓名",
"noHostsAvailable": "暫無可用主機",
"noHostsMatchSearch": "沒有符合您搜尋條件的主機",
@@ -303,9 +298,7 @@
"createFolder": "建立資料夾",
"editFolder": "編輯資料夾",
"editFolderDescription": "自訂程式碼片段資料夾",
"createFolderDescription": "將你的程式碼片段整理到資料夾中",
"confirmExecution": "執行“{{name}}”?",
"confirmExecutionDesc": "您確定要執行此程式碼片段嗎?"
"createFolderDescription": "將你的程式碼片段整理到資料夾中"
},
"commandHistory": {
"title": "歷史",
@@ -409,7 +402,6 @@
"required": "必需的",
"optional": "選擇性",
"connect": "連接",
"copied": "已複製",
"connecting": "正在連接...",
"creating": "正在建立…",
"clear": "清除",
@@ -502,7 +494,6 @@
"checking": "檢查...",
"checkingDatabase": "正在檢查資料庫連線...",
"checkingAuthentication": "正在檢查身份驗證...",
"backendReconnected": "伺服器連線已恢復",
"actions": "行動",
"remove": "消除",
"revoke": "撤銷",
@@ -815,7 +806,6 @@
},
"hosts": {
"title": "主機管理器",
"hosts": "主持人",
"sshHosts": "SSH 主機",
"noHosts": "無 SSH 主機",
"noHostsMessage": "您尚未新增任何 SSH 主機。點選「新增主機」開始操作。",
@@ -846,7 +836,7 @@
"failedToImportJson": "導入 JSON 檔案失敗",
"connectionDetails": "連線詳情",
"organization": "組織",
"ipAddress": "IP位址或主機名",
"ipAddress": "IP位址",
"port": "連接埠",
"name": "姓名",
"username": "使用者名稱",
@@ -925,8 +915,6 @@
"key": "金鑰",
"credential": "憑證",
"none": "沒有",
"opkssh": "OPKSSH",
"opksshAuthDescription": "每次連線時都會提示您進行 OPKSSH Web 驗證。您的身份驗證令牌有效期為 24 小時,之後需要更新。",
"selectCredential": "選擇憑證",
"selectCredentialPlaceholder": "選擇一種憑證…",
"credentialRequired": "使用憑證驗證時需要憑證。",
@@ -1095,7 +1083,6 @@
"noneAuthTitle": "鍵盤互動式驗證",
"noneAuthDescription": "連接到 SSH 伺服器時,此身份驗證方法將使用鍵盤互動式身份驗證。",
"noneAuthDetails": "鍵盤互動式驗證可讓伺服器在連線過程中提示您輸入憑證。這對於需要多因素身份驗證的伺服器或您不想在本地儲存憑證的情況非常有用。",
"opksshAuthTitle": "OPKSSH 驗證",
"forceKeyboardInteractive": "強制鍵盤交互",
"forceKeyboardInteractiveDesc": "強制使用鍵盤互動式身份驗證。對於使用雙重認證(TOTP/2FA)的伺服器,有時需要這樣做。",
"overrideCredentialUsername": "覆蓋憑證使用者名稱",
@@ -1329,15 +1316,6 @@
"warpgateOpenBrowser": "在瀏覽器中開啟",
"warpgateContinue": "我已經完成身份驗證",
"warpgateTimeout": "Warpgate身份驗證逾時,請重新連線。",
"opksshAuthRequired": "需要 OPKSSH 驗證",
"opksshAuthDescription": "請在瀏覽器中完成身份驗證以繼續。此會話有效期限為 24 小時。",
"opksshAuthUrl": "身份驗證 URL",
"opksshOpenBrowser": "開啟瀏覽器進行身份驗證",
"opksshWaitingForAuth": "正在等待瀏覽器驗證...",
"opksshAuthenticating": "正在處理身份驗證...",
"opksshTimeout": "身份驗證超時,請重試。",
"opksshAuthFailed": "身份驗證失敗。請檢查您的憑證並重試。",
"opksshConfigMissing": "未找到 OPKSSH 配置。請建立 ~/.opk/config.yml 文件,並新增您的 OIDC 提供者設定。請參閱文件:https://github.com/openpubkey/opkssh#configuration",
"sudoPasswordPopupTitle": "輸入密碼?",
"sudoPasswordPopupHint": "按 Enter 鍵插入,按 Esc 鍵關閉",
"sudoPasswordPopupConfirm": "插入",
@@ -1359,8 +1337,7 @@
"automaticFallback": "正在自動嘗試 {{method}} 驗證...",
"totpTimeout": "TOTP驗證逾時,請重新連線。",
"passwordTimeout": "密碼驗證逾時,請重新連線。",
"connectionRejected": "伺服器拒絕連線。請檢查您的身份驗證和網路配置。",
"hostKeyRejected": "SSH主機金鑰驗證失敗。連線已取消。"
"connectionRejected": "伺服器拒絕連線。請檢查您的身份驗證和網路配置。"
},
"fileManager": {
"title": "檔案管理器",
@@ -1957,20 +1934,6 @@
"passwordResetSuccess": "密碼重置成功",
"passwordResetSuccessDesc": "您的密碼已成功重設。現在您可以使用新密碼登入。"
},
"hostKey": {
"verifyNewHost": "驗證 SSH 主機金鑰",
"keyChangedWarning": "SSH主機金鑰已更改",
"firstConnectionTitle": "首次連線到此主機",
"firstConnectionDescription": "無法確認此主機的真實性。請驗證指紋是否符合預期。",
"keyChangedDescription": "此伺服器的主機金鑰自您上次連線以來已變更。這可能表示存在安全問題。",
"previousKey": "上一個密鑰",
"newFingerprint": "新指紋",
"fingerprint": "指紋",
"verifyInstructions": "如果您信任此主機,請按一下「接受」繼續並儲存此指紋以便將來連線。",
"securityWarning": "安全警告",
"acceptAndContinue": "接受並繼續",
"acceptNewKey": "接受新密鑰並繼續"
},
"errors": {
"notFound": "頁面未找到",
"unauthorized": "未經授權的訪問",
@@ -2063,8 +2026,6 @@
"terminalSettings": "終端機",
"hostSidebarSettings": "主機和側邊欄",
"snippetsSettings": "片段",
"confirmSnippetExecution": "確認程式碼片段執行",
"confirmSnippetExecutionDesc": "執行程式碼片段前顯示確認對話框",
"updateSettings": "更新",
"disableUpdateCheck": "禁用更新檢查",
"disableUpdateCheckDesc": "停止在啟動和控制面板中檢查新版本。減少網路請求。",
@@ -2085,7 +2046,7 @@
},
"placeholders": {
"enterCode": "000000",
"ipAddress": "192.168.1.1 或 example.com",
"ipAddress": "127.0.0.1",
"port": "22",
"maxRetries": "3",
"retryInterval": "10",