mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-08-29 18:31:33 +00:00
+2


![copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>](/assets/img/avatar_default.png)



![dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>](/assets/img/avatar_default.png)


Luke Gustafson
XtraLarge <>
dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
L.H.
default-student
Brad Baker
copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Copilot Autofix powered by AI
Brennan Neoh
brennanneoh
XtraLarge
ZacharyZcR
1a26628a48
* fix: general bug fixes * fix: general qol additions * ci(deps): bump actions/setup-node in the github-actions group (#1068) Bumps the github-actions group with 1 update: [actions/setup-node](https://github.com/actions/setup-node). Updates `actions/setup-node` from 6 to 7 - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump the dev-patch-updates group with 28 updates (#1069) Bumps the dev-patch-updates group with 28 updates: | Package | From | To | | --- | --- | --- | | [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) | `2.5.2` | `2.5.4` | | [@codemirror/view](https://github.com/codemirror/view) | `6.43.5` | `6.43.6` | | [@radix-ui/react-accordion](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/accordion) | `1.2.15` | `1.2.17` | | [@radix-ui/react-alert-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/alert-dialog) | `1.1.18` | `1.1.20` | | [@radix-ui/react-checkbox](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/checkbox) | `1.3.6` | `1.3.8` | | [@radix-ui/react-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dialog) | `1.1.18` | `1.1.20` | | [@radix-ui/react-dropdown-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dropdown-menu) | `2.1.19` | `2.1.21` | | [@radix-ui/react-label](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/label) | `2.1.11` | `2.1.12` | | [@radix-ui/react-popover](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/popover) | `1.1.18` | `1.1.20` | | [@radix-ui/react-progress](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/progress) | `1.1.11` | `1.1.13` | | [@radix-ui/react-scroll-area](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/scroll-area) | `1.2.13` | `1.2.15` | | [@radix-ui/react-select](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/select) | `2.3.2` | `2.3.4` | | [@radix-ui/react-separator](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/separator) | `1.1.11` | `1.1.12` | | [@radix-ui/react-slider](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/slider) | `1.4.2` | `1.4.4` | | [@radix-ui/react-switch](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/switch) | `1.3.2` | `1.3.4` | | [@radix-ui/react-tabs](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tabs) | `1.1.16` | `1.1.18` | | [@radix-ui/react-tooltip](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tooltip) | `1.2.11` | `1.2.13` | | [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) | `4.3.2` | `4.3.3` | | [@uiw/codemirror-extensions-langs](https://github.com/uiwjs/react-codemirror) | `4.25.10` | `4.25.11` | | [@uiw/codemirror-theme-github](https://github.com/uiwjs/react-codemirror) | `4.25.10` | `4.25.11` | | [@uiw/react-codemirror](https://github.com/uiwjs/react-codemirror) | `4.25.10` | `4.25.11` | | [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) | `4.1.9` | `4.1.10` | | [@vitest/ui](https://github.com/vitest-dev/vitest/tree/HEAD/packages/ui) | `4.1.9` | `4.1.10` | | [i18next](https://github.com/i18next/i18next) | `26.3.4` | `26.3.6` | | [radix-ui](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/radix-ui) | `1.6.1` | `1.6.3` | | [react-i18next](https://github.com/i18next/react-i18next) | `17.0.8` | `17.0.10` | | [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.3.2` | `4.3.3` | | [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.9` | `4.1.10` | Updates `@biomejs/biome` from 2.5.2 to 2.5.4 - [Release notes](https://github.com/biomejs/biome/releases) - [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md) - [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.4/packages/@biomejs/biome) Updates `@codemirror/view` from 6.43.5 to 6.43.6 - [Changelog](https://github.com/codemirror/view/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/view/commits) Updates `@radix-ui/react-accordion` from 1.2.15 to 1.2.17 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/accordion/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/accordion) Updates `@radix-ui/react-alert-dialog` from 1.1.18 to 1.1.20 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/alert-dialog/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/alert-dialog) Updates `@radix-ui/react-checkbox` from 1.3.6 to 1.3.8 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/checkbox/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/checkbox) Updates `@radix-ui/react-dialog` from 1.1.18 to 1.1.20 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dialog/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dialog) Updates `@radix-ui/react-dropdown-menu` from 2.1.19 to 2.1.21 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dropdown-menu/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dropdown-menu) Updates `@radix-ui/react-label` from 2.1.11 to 2.1.12 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/label/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/label) Updates `@radix-ui/react-popover` from 1.1.18 to 1.1.20 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/popover/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/popover) Updates `@radix-ui/react-progress` from 1.1.11 to 1.1.13 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/progress/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/progress) Updates `@radix-ui/react-scroll-area` from 1.2.13 to 1.2.15 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/scroll-area/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/scroll-area) Updates `@radix-ui/react-select` from 2.3.2 to 2.3.4 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/select/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/select) Updates `@radix-ui/react-separator` from 1.1.11 to 1.1.12 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/separator/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/separator) Updates `@radix-ui/react-slider` from 1.4.2 to 1.4.4 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/slider/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/slider) Updates `@radix-ui/react-switch` from 1.3.2 to 1.3.4 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/switch/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/switch) Updates `@radix-ui/react-tabs` from 1.1.16 to 1.1.18 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tabs/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tabs) Updates `@radix-ui/react-tooltip` from 1.2.11 to 1.2.13 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tooltip/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tooltip) Updates `@tailwindcss/vite` from 4.3.2 to 4.3.3 - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.3/packages/@tailwindcss-vite) Updates `@uiw/codemirror-extensions-langs` from 4.25.10 to 4.25.11 - [Release notes](https://github.com/uiwjs/react-codemirror/releases) - [Commits](https://github.com/uiwjs/react-codemirror/compare/v4.25.10...v4.25.11) Updates `@uiw/codemirror-theme-github` from 4.25.10 to 4.25.11 - [Release notes](https://github.com/uiwjs/react-codemirror/releases) - [Commits](https://github.com/uiwjs/react-codemirror/compare/v4.25.10...v4.25.11) Updates `@uiw/react-codemirror` from 4.25.10 to 4.25.11 - [Release notes](https://github.com/uiwjs/react-codemirror/releases) - [Commits](https://github.com/uiwjs/react-codemirror/compare/v4.25.10...v4.25.11) Updates `@vitest/coverage-v8` from 4.1.9 to 4.1.10 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/coverage-v8) Updates `@vitest/ui` from 4.1.9 to 4.1.10 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/ui) Updates `i18next` from 26.3.4 to 26.3.6 - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v26.3.4...v26.3.6) Updates `radix-ui` from 1.6.1 to 1.6.3 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/radix-ui/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/radix-ui) Updates `react-i18next` from 17.0.8 to 17.0.10 - [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/react-i18next/compare/v17.0.8...v17.0.10) Updates `tailwindcss` from 4.3.2 to 4.3.3 - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.3/packages/tailwindcss) Updates `vitest` from 4.1.9 to 4.1.10 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/vitest) --- updated-dependencies: - dependency-name: "@biomejs/biome" dependency-version: 2.5.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@codemirror/view" dependency-version: 6.43.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-accordion" dependency-version: 1.2.17 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-alert-dialog" dependency-version: 1.1.20 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-checkbox" dependency-version: 1.3.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-dialog" dependency-version: 1.1.20 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-dropdown-menu" dependency-version: 2.1.21 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-label" dependency-version: 2.1.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-popover" dependency-version: 1.1.20 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-progress" dependency-version: 1.1.13 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-scroll-area" dependency-version: 1.2.15 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-select" dependency-version: 2.3.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-separator" dependency-version: 1.1.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-slider" dependency-version: 1.4.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-switch" dependency-version: 1.3.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-tabs" dependency-version: 1.1.18 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-tooltip" dependency-version: 1.2.13 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@tailwindcss/vite" dependency-version: 4.3.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@uiw/codemirror-extensions-langs" dependency-version: 4.25.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@uiw/codemirror-theme-github" dependency-version: 4.25.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@uiw/react-codemirror" dependency-version: 4.25.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitest/coverage-v8" dependency-version: 4.1.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitest/ui" dependency-version: 4.1.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: i18next dependency-version: 26.3.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: radix-ui dependency-version: 1.6.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: react-i18next dependency-version: 17.0.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: tailwindcss dependency-version: 4.3.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: vitest dependency-version: 4.1.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump ws in the prod-patch-updates group (#1071) Bumps the prod-patch-updates group with 1 update: [ws](https://github.com/websockets/ws). Updates `ws` from 8.21.0 to 8.21.1 - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.21.0...8.21.1) --- updated-dependencies: - dependency-name: ws dependency-version: 8.21.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump the major-updates group with 2 updates (#1072) Bumps the major-updates group with 2 updates: [nanoid](https://github.com/ai/nanoid) and [typescript](https://github.com/microsoft/TypeScript). Updates `nanoid` from 5.1.16 to 6.0.0 - [Release notes](https://github.com/ai/nanoid/releases) - [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md) - [Commits](https://github.com/ai/nanoid/compare/5.1.16...6.0.0) Updates `typescript` from 6.0.3 to 7.0.2 - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Commits](https://github.com/microsoft/TypeScript/commits) --- updated-dependencies: - dependency-name: nanoid dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-updates - dependency-name: typescript dependency-version: 7.0.2 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: general qol additions and new analytics/telemetrics feature * fix: incorrect version sent to posthog * feat: add multiplayer/shared sessions for terminal and guacd * feat: rework Electron desktop app to run standalone-first with optional two-way sync to a remote Termix server * Fix Guacamole tab visibility lifecycle (#1074) Co-authored-by: default-student <default-student@github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix(alerts): send channel config as object payload instead of JSON string (#1075) * fix tmux-monitor tailscale issue (#1076) * Initial plan * fix(tmux-monitor): explicitly handle tailscale auth in PanePreview hostConfig For Tailscale-auth hosts the pane-preview attach path was building the Terminal hostConfig with only the generic spread of host fields. This could omit or mismap auth-critical details and trigger a plain TCP/SSH reachability path that doesn't work with Tailscale-only SSH endpoints. The fix branches on `host.authType === "tailscale"` and: - Carries `authType: "tailscale"` explicitly so the backend always selects the Tailscale-aware PTY path regardless of how the host object evolves. - Derives `port` from `host.sshPort ?? host.port` so Tailscale SSH endpoints on a non-default SSH port are reached correctly. - Leaves all non-tailscale auth types on the unchanged code path. Reattach (bumping instanceId + attachNonce) continues to work because terminalHostConfig is recomputed on every render with the latest instanceIdRef.current value. * refactor(tmux-monitor): simplify tailscale port logic with extracted variable Address code review feedback: extract resolvedPort into a local variable to avoid the duplicated `host.sshPort ?? host.port` expression that was assigned to both `port` and `sshPort`. Restructure as an if/else block instead of an IIFE for readability. * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * chore: run prettier * chore: update beta release text * fix: cant update credential of an RDP host * feat: add custom key shortcuts * feat: add support for MFA over SSH * fix: Invalid websocket frame causing code 10006 crash triggering restart loop * fix(net): correct SSRF blocklist false-positive blocking all outbound IPv4 (#1079) * fix: correct IPv4-mapped-IPv6 blocklist entry blocking all outbound IPv4 ::ffff:0:0/96 in the IPv6 blocklist matches every IPv4 address once mapped, since Node's BlockList compares addresses in their mapped form internally regardless of the declared family. This caused safeOutboundFetch to reject all IPv4-resolved destinations as private, breaking outbound requests (e.g. ntfy/webhook notifications) whenever DNS resolved to IPv4. Replaced with individual mapped ranges mirroring the existing IPv4 blocklist. * test: cover isBlockedAddress and link the Node BlockList citation Exports isBlockedAddress so its family-crossing behavior around IPv4-mapped-IPv6 addresses can actually be asserted, instead of relying on manual container debugging to notice a regression. Also swaps the prior "Node's BlockList compares addresses in mapped form" comment for one citing the documented example in the Node docs (https://nodejs.org/api/net.html#class-netblocklist), since that behavior isn't otherwise obvious from the addSubnet/check call sites. Related: Termix-SSH/Support#1024 * refactor: derive IPv6 mirror from IPv4 list, split DNS error messages Two follow-ups from review: - The IPv6 blocklist previously hand-duplicated each IPv4 range as its IPv4-mapped-IPv6 equivalent. Nothing enforced the two stayed in sync, which is exactly how the original bug (a mismatched ::ffff:0:0/96 entry blocking all IPv4) was introduced in the first place. Now derived from a single blockedIpv4Ranges list in one loop. - The connect.lookup hook threw the same "Private destinations are not allowed" for both an empty DNS result and an actually-blocked address. An empty result is a resolution failure, not a privacy decision, and conflating the two is the same kind of opaque-error problem that made this bug slow to diagnose in production. Split into distinct messages. Also extracted the lookup hook itself (createDnsLookupHook) so it can be unit-tested against a fake resolver directly, instead of only through a real fetch()/Agent call — the bug lived entirely in this callback, and undici wraps any error thrown here as a generic "fetch failed" TypeError, which is why isolating it matters for testability. --------- Co-authored-by: brennanneoh <497569+brennanneoh@users.noreply.github.com> * fix(ssh): do not offer chacha20-poly1305 without the native ssh2 binding (#1081) The availability probe treated a working OpenSSL "chacha20" cipher as proof that chacha20-poly1305@openssh.com is usable. It is not: ssh2 pure-JS chacha20-poly1305 corrupts the transport, so the peer aborts the KEX ("incomplete message [preauth]") and the connection times out. Easy to hit on jump-host connections whose target sshd negotiates chacha20-poly1305 first. Only trust the native binding (sshcrypto.node); otherwise leave the cipher disabled so filterCiphers() drops it and AES-GCM is negotiated instead. Co-authored-by: XtraLarge <> * fix: add Swiss German server layout (#1078) * chore: update release notes * feat: continue improving desktop app 2-way sync with logic fixes and a migration dialog * fix: dekstop app showing auth form without syncing * feat: create desktop auto sessions for existing setups * feat: add electron backend killing * fix: electron login and session related bugs and updated readme for v2.6.0 * chore: finalize release notes * fix: click to expand hosts including extra bottom margin * fix: desktop auth modal failing to log users in * fix: desktop app failing to sync * fix: reverse proxy causing sync error * chore: lint, format, and bump version to 2.6.0 * chore: sync Crowdin translations for 2.6.0 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: L.H. <117188168+default-student@users.noreply.github.com> Co-authored-by: default-student <default-student@github.com> Co-authored-by: Brad Baker <xyzulu@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Brennan Neoh <brennanneoh@users.noreply.github.com> Co-authored-by: brennanneoh <497569+brennanneoh@users.noreply.github.com> Co-authored-by: XtraLarge <eMail@WilliWerres.de> Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
3686 lines
260 KiB
JSON
3686 lines
260 KiB
JSON
{
|
||
"termixId": {
|
||
"title": "Termix ID",
|
||
"loadFailed": "Не удалось загрузить Termix ID",
|
||
"claimTitle": "Зарегистрируйте свой Termix ID",
|
||
"claimIntro": "Выберите уникальный идентификатор. Ваши открытые ключи SSH будут опубликованы по общедоступному URL, который вы сможете добавить в файл authorized_keys на любом сервере.",
|
||
"handleLabel": "Идентификатор",
|
||
"handlePlaceholder": "alice",
|
||
"checking": "Проверка…",
|
||
"available": "Доступно",
|
||
"taken": "Уже занято",
|
||
"invalidHandle": "Только строчные буквы, цифры, - и _",
|
||
"descriptionLabel": "Описание (необязательно)",
|
||
"descriptionPlaceholder": "Ключи рабочего ноутбука и телефона",
|
||
"create": "Создать Termix ID",
|
||
"created": "Termix ID создан",
|
||
"createFailed": "Не удалось создать Termix ID",
|
||
"deleteConfirm": "Удалить свой Termix ID и все опубликованные ключи? Серверы, которые вы настроили, сохранят ключи, пока вы не удалите их вручную.",
|
||
"deleted": "Termix ID удалён",
|
||
"deleteFailed": "Не удалось удалить Termix ID",
|
||
"copyFailed": "Не удалось скопировать",
|
||
"resolverUrlLabel": "Общедоступный URL резолвера",
|
||
"provisionLabel": "Настроить сервер",
|
||
"publishTitle": "Опубликовать открытый ключ",
|
||
"generate": "Сгенерировать",
|
||
"generateTooltip": "Сгенерировать пару ключей Ed25519 — публикует открытый ключ и загружает закрытый ключ на ваше устройство",
|
||
"saveToVault": "Сохранить в учётные данные",
|
||
"keyPlaceholder": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5... user@host",
|
||
"labelPlaceholder": "Метка (необязательно)",
|
||
"add": "Добавить",
|
||
"importFromCredential": "Или импортировать из сохранённых учётных данных",
|
||
"keyPublished": "Ключ опубликован",
|
||
"addKeyFailed": "Не удалось добавить ключ",
|
||
"generatedSaved": "Пара ключей сгенерирована и сохранена в хранилище учётных данных. Закрытый ключ также загружен.",
|
||
"generatedOnly": "Пара ключей сгенерирована — закрытый ключ загружен (отображается только один раз).",
|
||
"generateFailed": "Не удалось сгенерировать ключ",
|
||
"imported": "Ключ импортирован из учётных данных",
|
||
"importFailed": "Не удалось импортировать ключ",
|
||
"noKeys": "Нет опубликованных открытых ключей.",
|
||
"keysTitle": "Опубликованные ключи",
|
||
"published": "Опубликован",
|
||
"hidden": "Скрыт",
|
||
"keyRemoved": "Ключ удалён",
|
||
"removeKeyFailed": "Не удалось удалить ключ",
|
||
"updateKeyFailed": "Не удалось обновить ключ",
|
||
"fromVault": "Из хранилища учётных данных",
|
||
"linkedToTermixId": "Опубликовано через Termix ID",
|
||
"selectCredential": "Выберите учётные данные…",
|
||
"import": "Импортировать",
|
||
"caTitle": "Центр сертификации",
|
||
"caIntro": "Доверьте этот центр сертификации на сервере, и он будет принимать любые сертификаты, подписанные вами. Ротация мгновенно отзывает все сертификаты; также сертификаты истекают автоматически.",
|
||
"caEnable": "Включить ЦС",
|
||
"caEnabled": "ЦС включён",
|
||
"caCreateFailed": "Не удалось включить ЦС",
|
||
"caPublicKeyLabel": "Открытый ключ ЦС",
|
||
"caTrustLabel": "Доверие на сервере (запустите от root)",
|
||
"caRotate": "Ротировать",
|
||
"caRotateConfirm": "Ротировать ЦС? Все выданные им сертификаты перестанут приниматься и потребуют перевыпуска.",
|
||
"caRotated": "ЦС ротирован — предыдущие сертификаты отозваны",
|
||
"caRotateFailed": "Не удалось ротировать ЦС",
|
||
"caDelete": "Удалить ЦС",
|
||
"caDeleteConfirm": "Удалить центр сертификации?",
|
||
"caDeleted": "ЦС удалён",
|
||
"caDeleteFailed": "Не удалось удалить ЦС",
|
||
"caValidityLabel": "Срок действия сертификата (дней)",
|
||
"issueCert": "Сертификат",
|
||
"issueCertTooltip": "Выпустить SSH-сертификат для этого ключа, подписанный вашим ЦС",
|
||
"certIssued": "Сертификат выпущен и загружен",
|
||
"certIssueFailed": "Не удалось выпустить сертификат"
|
||
},
|
||
"credentials": {
|
||
"folders": "Папки",
|
||
"folder": "Папка",
|
||
"password": "Пароль",
|
||
"key": "Ключ",
|
||
"sshPrivateKey": "SSH-приватный ключ",
|
||
"upload": "Загрузить",
|
||
"keyPassword": "Пароль ключа",
|
||
"sshKey": "SSH-ключ",
|
||
"uploadPrivateKeyFile": "Загрузить файл приватного ключа",
|
||
"searchCredentials": "Поиск учётных данных...",
|
||
"addCredential": "Добавить учётные данные",
|
||
"caCertificate": "CA-сертификат (-cert.pub)",
|
||
"caCertificateDescription": "Необязательно: загрузите или вставьте файл сертификата, подписанного CA (например, id_ed25519-cert.pub). Требуется, если ваш SSH-сервер использует авторизацию на основе сертификатов.",
|
||
"uploadCertFile": "Загрузить файл -cert.pub",
|
||
"clearCert": "Очистить",
|
||
"certLoaded": "Сертификат загружен",
|
||
"certPublicKeyLabel": "CA-сертификат",
|
||
"certTypeLabel": "Тип сертификата",
|
||
"pasteOrUploadCert": "Вставьте или загрузите сертификат -cert.pub...",
|
||
"hasCaCert": "Имеет CA-сертификат",
|
||
"noCaCert": "Нет CA-сертификата",
|
||
"noPublicKeyAvailable": "Публичный ключ недоступен. Сначала откройте редактор учётных данных.",
|
||
"deployCommandCopied": "Команда для развёртывания скопирована",
|
||
"sortCredentials": "Сортировка учётных данных",
|
||
"sortDefault": "Порядок по умолчанию",
|
||
"sortNameAsc": "Имя (А → Я)",
|
||
"sortNameDesc": "Имя (Я → А)",
|
||
"sortUsernameAsc": "Имя пользователя (А → Я)",
|
||
"sortUsernameDesc": "Имя пользователя (Я → А)",
|
||
"filterCredentials": "Фильтр учётных данных",
|
||
"filterClearAll": "Очистить фильтры",
|
||
"filterTypeGroup": "Тип",
|
||
"filterTypePassword": "Пароль",
|
||
"filterTypeKey": "SSH-ключ",
|
||
"filterTagsGroup": "Теги"
|
||
},
|
||
"homepage": {
|
||
"title": "Главная страница",
|
||
"addWidget": "Добавить виджет",
|
||
"editWidget": "Изменить виджет",
|
||
"deleteWidget": "Удалить",
|
||
"widgetTypes": "Типы виджетов",
|
||
"serviceLink": "Ссылка на сервис",
|
||
"folder": "Папка",
|
||
"clock": "Часы",
|
||
"notes": "Заметки",
|
||
"hostStatus": "Статус хоста",
|
||
"bookmarkList": "Закладки",
|
||
"zoomIn": "Приблизить",
|
||
"zoomOut": "Отдалить",
|
||
"resetView": "Сбросить вид",
|
||
"lockLayout": "Заблокировать макет",
|
||
"unlockLayout": "Разблокировать макет",
|
||
"noWidgets": "Нажмите правой кнопкой мыши или на +, чтобы добавить первый виджет",
|
||
"openFullView": "Открыть полный вид",
|
||
"previewTitle": "Предпросмотр домашней страницы",
|
||
"cancel": "Отмена",
|
||
"save": "Сохранить",
|
||
"title_label": "Название",
|
||
"widgetTitlePlaceholder": "Название виджета (необязательно)",
|
||
"url": "URL",
|
||
"imageUrl": "Пользовательский URL изображения",
|
||
"imageUrlHint": "Оставьте пустым, чтобы автоматически использовать favicon сайта",
|
||
"showImage": "Показывать изображение",
|
||
"description": "Описание",
|
||
"color": "Цвет",
|
||
"icon": "Значок",
|
||
"expanded": "Развернуто по умолчанию",
|
||
"timezone": "Часовой пояс",
|
||
"showSeconds": "Показывать секунды",
|
||
"format12h": "12-часовой",
|
||
"format24h": "24-часовой",
|
||
"content": "Содержимое",
|
||
"backgroundColor": "Цвет фона",
|
||
"host": "Хост",
|
||
"showMetrics": "Показать метрики",
|
||
"links": "Ссылки",
|
||
"addLink": "Добавить ссылку",
|
||
"linkLabel": "Название",
|
||
"linkUrl": "URL",
|
||
"removeLink": "Удалить",
|
||
"categoryLinks": "Ссылки",
|
||
"categoryInfo": "Информация",
|
||
"categorySystem": "Система",
|
||
"widgetServiceLinkDesc": "Кликабельная плитка, ведущая на URL сервиса",
|
||
"widgetFolderDesc": "Контейнер для группировки связанных виджетов",
|
||
"widgetClockDesc": "Часы с настраиваемым часовым поясом",
|
||
"widgetNotesDesc": "Виджет для заметок в формате Markdown",
|
||
"widgetHostStatusDesc": "Показывает текущую загрузку ЦП, памяти и диска для SSH-хоста",
|
||
"widgetBookmarkListDesc": "Список быстрых ссылок",
|
||
"copyLink": "Копировать ссылку",
|
||
"linkCopied": "Ссылка скопирована!",
|
||
"location": "Местоположение",
|
||
"temperatureUnit": "Единица температуры",
|
||
"showForecast": "Показывать прогноз на 3 дня",
|
||
"scrolling": "Разрешить прокрутку",
|
||
"feedUrl": "URL ленты",
|
||
"maxItems": "Макс. элементов",
|
||
"showDescription": "Показывать описание",
|
||
"widgetWeatherName": "Погода",
|
||
"widgetWeatherDesc": "Актуальная погода для любого местоположения",
|
||
"widgetIframeName": "Встраивание iFrame",
|
||
"widgetIframeDesc": "Встраивает любой URL в iframe",
|
||
"widgetRssName": "RSS-лента",
|
||
"widgetRssDesc": "Отображает элементы из ленты RSS или Atom",
|
||
"dragToFolder": "Перетащите виджеты сюда или нажмите +, чтобы добавить",
|
||
"showDisk": "Показывать использование диска",
|
||
"addToFolder": "Добавить виджет в папку",
|
||
"noHostSelected": "Хост не выбран",
|
||
"metricsNotAvailable": "Метрики недоступны",
|
||
"selectHost": "Выберите хост...",
|
||
"displayedMetrics": "Отображаемые метрики",
|
||
"metricCpu": "ЦП",
|
||
"metricMemory": "Память",
|
||
"metricDisk": "Диск",
|
||
"metricUptime": "Время работы",
|
||
"metricSystem": "Система",
|
||
"metricOs": "ОС",
|
||
"metricKernel": "Ядро",
|
||
"metricHostname": "Имя хоста",
|
||
"metricNetwork": "Сеть",
|
||
"metricProcesses": "Процессы",
|
||
"metricProcessesTotal": "всего",
|
||
"metricProcessesRunning": "запущено",
|
||
"categoryMonitoring": "Мониторинг",
|
||
"loading": "Загрузка...",
|
||
"noData": "Нет данных",
|
||
"allClear": "Всё в порядке",
|
||
"acknowledgeAlert": "Подтвердить",
|
||
"noPingUrls": "URL-адреса не настроены",
|
||
"pingLabel": "Метка",
|
||
"addPingUrl": "Добавить URL",
|
||
"showLatency": "Показать задержку",
|
||
"refreshInterval": "Интервал обновления",
|
||
"seconds": "секунд",
|
||
"filterActivityTypes": "Типы фильтрации",
|
||
"filterTypesHint": "Оставьте пустым, чтобы показать все",
|
||
"showTimestamp": "Показывать метку времени",
|
||
"uptimeUnavailable": "Время работы недоступно",
|
||
"uptimeLabel": "Время работы",
|
||
"overviewVersion": "Версия",
|
||
"overviewUpdate": "Актуально",
|
||
"overviewUpdateAvailable": "Доступно обновление",
|
||
"overviewDatabase": "База данных",
|
||
"overviewUptime": "Время работы",
|
||
"noHosts": "Нет настроенных хостов",
|
||
"hostGridHosts": "Хосты",
|
||
"hostGridAllHint": "Оставьте пустым, чтобы показать все хосты",
|
||
"columns": "Колонки",
|
||
"showIp": "Показать IP-адрес",
|
||
"connectionType": "Тип подключения",
|
||
"layout": "Макет",
|
||
"showStatus": "Показать статус",
|
||
"showHostName": "Показать имя хоста",
|
||
"noDockerActivity": "Нет активности Docker",
|
||
"noActivity": "Нет активности",
|
||
"showAcknowledged": "Показать подтверждённые",
|
||
"showCurrentValue": "Показать текущее значение",
|
||
"chartMetric": "Метрика",
|
||
"metricRange": "Диапазон",
|
||
"widgetMetricsChartName": "График метрик",
|
||
"widgetMetricsChartDesc": "График истории использования ЦП, памяти, диска или сети для хоста",
|
||
"widgetHostGridName": "Сетка хостов",
|
||
"widgetHostGridDesc": "Представление статусов хостов SSH в виде сетки",
|
||
"widgetAlertFeedName": "Лента оповещений",
|
||
"widgetAlertFeedDesc": "Живые срабатывания оповещений с возможностью подтверждения",
|
||
"widgetPingStatusName": "Статус ping",
|
||
"widgetPingStatusDesc": "Статус HTTP ping для одного или нескольких URL",
|
||
"widgetRecentActivityName": "Недавняя активность",
|
||
"widgetRecentActivityDesc": "Прокручиваемая лента недавней активности Termix",
|
||
"widgetTermixUptimeName": "Время работы Termix",
|
||
"widgetTermixUptimeDesc": "Счётчик времени работы сервера Termix в реальном времени",
|
||
"widgetSystemOverviewName": "Обзор системы",
|
||
"widgetSystemOverviewDesc": "Краткий обзор: версия Termix, состояние базы данных и время работы",
|
||
"widgetSshQuickConnectName": "Быстрое подключение по SSH",
|
||
"widgetSshQuickConnectDesc": "Кнопки для открытия сеансов SSH в один клик",
|
||
"widgetDockerActivityName": "Активность Docker",
|
||
"widgetDockerActivityDesc": "Недавние события контейнеров Docker на всех хостах",
|
||
"widgetCalendarName": "Календарь",
|
||
"widgetCalendarDesc": "Ежемесячный календарь с выделенным сегодняшним днём",
|
||
"widgetCountdownName": "Обратный отсчёт",
|
||
"widgetCountdownDesc": "Таймер обратного отсчёта до целевой даты",
|
||
"widgetSearchBarName": "Строка поиска",
|
||
"widgetSearchBarDesc": "Виджет быстрого веб-поиска",
|
||
"widgetTextBannerName": "Текстовый баннер",
|
||
"widgetTextBannerDesc": "Полужирная надпись или заголовок раздела для холста",
|
||
"widgetImageWidgetName": "Изображение",
|
||
"widgetImageWidgetDesc": "Отображать изображение по URL",
|
||
"widgetMarkdownNotesName": "Заметки Markdown",
|
||
"widgetMarkdownNotesDesc": "Расширенные заметки со встроенным рендерингом Markdown",
|
||
"widgetCustomApiName": "Пользовательский API",
|
||
"widgetCustomApiDesc": "Получать и отображать данные из любого JSON API",
|
||
"widgetServiceGridName": "Сетка сервисов",
|
||
"widgetServiceGridDesc": "Настраиваемая сетка плиток-ссылок на сервисы",
|
||
"widgetDashboardLinksName": "Ссылки панели управления",
|
||
"widgetDashboardLinksDesc": "Отображение настроенных ссылок на сервисы с панели управления",
|
||
"widgetSearchLinksName": "Поисковые ярлыки",
|
||
"widgetSearchLinksDesc": "Кнопки быстрого поиска со встроенным полем ввода",
|
||
"widgetLinkTreeName": "Дерево ссылок",
|
||
"widgetLinkTreeDesc": "Сгруппированные разделы ссылок с заголовками",
|
||
"calMon": "Пн",
|
||
"calTue": "Вт",
|
||
"calWed": "Ср",
|
||
"calThu": "Чт",
|
||
"calFri": "Пт",
|
||
"calSat": "Сб",
|
||
"calSun": "Вс",
|
||
"startOnMonday": "Начинать неделю с понедельника",
|
||
"countdownNoDate": "Целевая дата не задана",
|
||
"countdownPast": "Событие прошло",
|
||
"countdownDays": "дн.",
|
||
"countdownHours": "ч",
|
||
"countdownMinutes": "мин",
|
||
"countdownSeconds": "с",
|
||
"countdownLabel": "Название",
|
||
"countdownLabelPlaceholder": "например, День запуска",
|
||
"countdownShowDays": "Показать дни",
|
||
"countdownShowHours": "Показать часы",
|
||
"targetDate": "Целевая дата",
|
||
"searchEngine": "Поисковая система",
|
||
"customSearchUrl": "Пользовательский URL поиска",
|
||
"searchPlaceholder": "Поиск...",
|
||
"searchGo": "Искать",
|
||
"searchPlaceholderLabel": "Текст подсказки",
|
||
"searchPlaceholderHint": "Текст внутри поля поиска",
|
||
"openInNewTab": "Открывать в новой вкладке",
|
||
"searchQueryPlaceholder": "Введите запрос...",
|
||
"noSearchShortcuts": "Нет ярлыков поиска",
|
||
"addSearchShortcut": "Добавить ярлык",
|
||
"fontSize": "Размер шрифта",
|
||
"textAlign": "Выравнивание текста",
|
||
"fontWeight": "Жирность шрифта",
|
||
"clearColor": "Очистить цвет",
|
||
"imageFit": "Вписывание изображения",
|
||
"imageLinkUrl": "URL ссылки",
|
||
"noImage": "URL изображения не задан",
|
||
"altText": "Альтернативный текст",
|
||
"altTextPlaceholder": "Опишите изображение",
|
||
"renderMarkdown": "Отображать Markdown",
|
||
"displayMode": "Режим отображения",
|
||
"displayField": "Отображаемое поле",
|
||
"jsonPath": "Путь JSON",
|
||
"customApiLabel": "Название",
|
||
"customApiLabelPlaceholder": "например, Температура",
|
||
"customApiUnit": "Единица измерения",
|
||
"customApiNoUrl": "URL API не настроен",
|
||
"customApiError": "Не удалось загрузить данные",
|
||
"customApiNotArray": "Ответ не является массивом",
|
||
"addService": "Добавить сервис",
|
||
"showLabels": "Показывать метки",
|
||
"iconSize": "Размер иконок",
|
||
"noDashboardLinks": "Нет настроенных ссылок на панель",
|
||
"noLimit": "Без лимита",
|
||
"sectionHeading": "Заголовок раздела",
|
||
"addSection": "Добавить раздел",
|
||
"compactMode": "Компактный режим",
|
||
"showDetailed": "Показать подробности",
|
||
"selectHosts": "Выбрать хосты",
|
||
"allHosts": "Все хосты",
|
||
"listLayout": "Список",
|
||
"gridLayout": "Сетка",
|
||
"terminal": "Терминал",
|
||
"files": "Файлы",
|
||
"docker": "Docker",
|
||
"range15m": "15 минут",
|
||
"range1h": "1 час",
|
||
"range6h": "6 часов",
|
||
"range24h": "24 часа",
|
||
"metricNetRx": "Входящий",
|
||
"metricNetTx": "Исходящий",
|
||
"severityFilter": "Фильтр серьёзности",
|
||
"filterAll": "Все",
|
||
"accentColor": "Акцентный цвет",
|
||
"widgetSshTerminalName": "SSH Терминал",
|
||
"widgetSshTerminalDesc": "Встроенный SSH-терминал, подключённый к настроенному хосту",
|
||
"sshTerminalNoHost": "Хост не настроен",
|
||
"sshTerminalConnect": "Подключиться",
|
||
"sshTerminalAutoConnect": "Автоподключение при загрузке",
|
||
"widgetQuickConnectName": "Быстрое подключение",
|
||
"widgetQuickConnectDesc": "Кнопки для быстрого запуска одним кликом любого типа подключения к вашим хостам",
|
||
"connectionTypes": "Типы подключений",
|
||
"connType_terminal": "Терминал",
|
||
"connType_files": "Файловый менеджер",
|
||
"connType_docker": "Docker",
|
||
"connType_tunnel": "Туннель",
|
||
"connType_host-metrics": "Метрики хоста",
|
||
"connType_rdp": "RDP",
|
||
"connType_vnc": "VNC",
|
||
"connType_telnet": "Telnet",
|
||
"widgetFileManagerName": "Файловый менеджер",
|
||
"widgetFileManagerDesc": "Встроенный файловый менеджер по SFTP для настроенного хоста",
|
||
"widgetDockerName": "Менеджер Docker",
|
||
"widgetDockerDesc": "Встроенный менеджер контейнеров Docker для настроенного хоста",
|
||
"widgetTunnelName": "Менеджер туннелей",
|
||
"widgetTunnelDesc": "Встроенный менеджер SSH-туннелей для настроенного хоста",
|
||
"widgetNoHostSelected": "Хост не настроен"
|
||
},
|
||
"serverConfig": {
|
||
"title": "Конфигурация сервера",
|
||
"description": "Настройте URL сервера Termix для подключения к вашим внутренним службам",
|
||
"serverUrl": "URL сервера",
|
||
"enterServerUrl": "Пожалуйста, введите URL сервера",
|
||
"saveFailed": "Не удалось сохранить конфигурацию",
|
||
"saveError": "Ошибка сохранения конфигурации",
|
||
"saving": "Сохранение...",
|
||
"saveConfig": "Сохранить конфигурацию",
|
||
"helpText": "Введите URL, по которому работает ваш сервер Termix (например, http://localhost:30001 или https://your-server.com)",
|
||
"changeServer": "Сменить сервер",
|
||
"mustIncludeProtocol": "URL сервера должен начинаться с http:// или https://",
|
||
"allowInvalidCertificate": "Разрешить недействительный сертификат",
|
||
"allowInvalidCertificateDesc": "Используйте только для доверенных самостоятельно развёрнутых серверов с самоподписанными сертификатами или сертификатами для IP-адресов.",
|
||
"useEmbedded": "Использовать локальный сервер",
|
||
"embeddedDesc": "Запускать Termix со встроенным локальным сервером (удалённый сервер не требуется)",
|
||
"embeddedConnecting": "Подключение к локальному серверу...",
|
||
"embeddedNotReady": "Локальный сервер ещё не готов. Пожалуйста, подождите немного и попробуйте снова.",
|
||
"localServer": "Локальный сервер",
|
||
"savedServers": "Сохранённые серверы",
|
||
"noSavedServers": "Нет сохранённых серверов",
|
||
"removeServer": "Удалить"
|
||
},
|
||
"migrationNotice": {
|
||
"title": "Теперь Termix Desktop работает в автономном режиме.",
|
||
"body1": "Ранее это приложение подключалось напрямую к вашему серверу Termix. Теперь оно полностью автономно и хранит хосты и учетные данные локально, обеспечивая работу в автономном режиме. Двусторонняя синхронизация с собственным сервером Termix теперь является необязательной.",
|
||
"body2": "Ваши существующие хосты и учетные данные по-прежнему находятся на {{url}}. Включите удаленную синхронизацию и переподключитесь к этому серверу, чтобы восстановить их и обеспечить синхронизацию в дальнейшем.",
|
||
"dismiss": "Не сейчас",
|
||
"setUpSync": "Настройка удаленной синхронизации"
|
||
},
|
||
"remoteSync": {
|
||
"title": "Удалённая синхронизация",
|
||
"description": "При желании вы можете подключить это настольное приложение к собственному серверу Termix для синхронизации хостов, учетных данных и фрагментов кода между устройствами. Приложение всегда работает полностью в автономном режиме, независимо от того, подключены вы к серверу или нет.",
|
||
"notConnected": "Не подключено",
|
||
"connected": "Подключено",
|
||
"connectedTo": "Подключено к {{url}}",
|
||
"lastSynced": "Последняя синхронизация {{time}}",
|
||
"neverSynced": "Никогда не синхронизировалось",
|
||
"syncError": "Ошибка синхронизации: {{message}}",
|
||
"needsReauth": "Срок действия авторизации истек.",
|
||
"connectButton": "Подключиться к серверу",
|
||
"disconnectButton": "Отключить",
|
||
"syncNowButton": "Синхронизировать сейчас",
|
||
"syncing": "Синхронизация...",
|
||
"serverUrl": "URL сервера",
|
||
"enterServerUrl": "Пожалуйста, введите URL-адрес сервера.",
|
||
"mustIncludeProtocol": "URL-адрес сервера должен начинаться с http:// или https://",
|
||
"connectionTestFailed": "Не удалось подключиться к серверу Termix по указанному URL-адресу.",
|
||
"allowInvalidCertificate": "Разрешить использование недействительного сертификата",
|
||
"allowInvalidCertificateDesc": "Использовать только для доверенных серверов, размещенных на собственном сервере и имеющих самоподписанные сертификаты или сертификаты IP-адресов.",
|
||
"savedServers": "Сохраненные серверы",
|
||
"removeServer": "Удалять",
|
||
"continueButton": "Продолжать",
|
||
"cancelButton": "Отмена",
|
||
"signInTitle": "Войдите в {{url}}",
|
||
"originTitle": "Источник соединения",
|
||
"originDescription": "По умолчанию выбирается место, откуда исходят SSH-соединения. Это можно изменить для каждого хоста отдельно.",
|
||
"originLocal": "Это устройство (локальная сеть)",
|
||
"originRemote": "Удаленный сервер",
|
||
"bannerReconnect": "Переподключитесь",
|
||
"bannerMessage": "Для удалённой синхронизации требуется повторная аутентификация."
|
||
},
|
||
"versionCheck": {
|
||
"error": "Ошибка проверки версии",
|
||
"checkFailed": "Не удалось проверить обновления",
|
||
"upToDate": "Приложение актуально",
|
||
"currentVersion": "Вы используете версию {{version}}",
|
||
"updateAvailable": "Доступно обновление",
|
||
"newVersionAvailable": "Доступна новая версия! Вы используете {{current}}, но доступна версия {{latest}}.",
|
||
"betaVersion": "Бета-версия",
|
||
"betaVersionDesc": "Вы используете {{current}}, которая новее последней стабильной версии {{latest}}.",
|
||
"releasedOn": "Выпущено {{date}}",
|
||
"downloadUpdate": "Скачать обновление",
|
||
"checking": "Проверка обновлений...",
|
||
"checkUpdates": "Проверить обновления",
|
||
"checkingUpdates": "Проверка обновлений...",
|
||
"updateRequired": "Требуется обновление"
|
||
},
|
||
"common": {
|
||
"close": "Закрыть",
|
||
"minimize": "Свернуть",
|
||
"online": "В сети",
|
||
"offline": "Не в сети",
|
||
"unknown": "Неизвестно",
|
||
"continue": "Продолжить",
|
||
"maintenance": "Обслуживание",
|
||
"degraded": "Деградировано",
|
||
"error": "Ошибка",
|
||
"warning": "Предупреждение",
|
||
"unsavedChanges": "Несохранённые изменения",
|
||
"dismiss": "Скрыть",
|
||
"loading": "Загрузка...",
|
||
"optional": "Необязательно",
|
||
"connect": "Подключиться",
|
||
"copied": "Скопировано",
|
||
"connecting": "Подключение...",
|
||
"updateAvailable": "Доступно обновление",
|
||
"appName": "Termix",
|
||
"openInNewTab": "Открыть в новой вкладке",
|
||
"noReleases": "Нет выпусков",
|
||
"updatesAndReleases": "Обновления и выпуски",
|
||
"newVersionAvailable": "Доступна новая версия ({{version}}).",
|
||
"failedToFetchUpdateInfo": "Не удалось получить информацию об обновлении",
|
||
"preRelease": "Предварительная версия",
|
||
"noReleasesFound": "Релизы не найдены.",
|
||
"cancel": "Отмена",
|
||
"username": "Имя пользователя",
|
||
"login": "Войти",
|
||
"logout": "Выйти",
|
||
"register": "Регистрация",
|
||
"password": "Пароль",
|
||
"confirmPassword": "Подтверждение пароля",
|
||
"back": "Назад",
|
||
"save": "Сохранить",
|
||
"saving": "Сохранение...",
|
||
"delete": "Удалить",
|
||
"rename": "Переименовать",
|
||
"edit": "Редактировать",
|
||
"add": "Добавить",
|
||
"confirm": "Подтвердить",
|
||
"no": "Нет",
|
||
"or": "ИЛИ",
|
||
"next": "Далее",
|
||
"previous": "Предыдущий",
|
||
"refresh": "Обновить",
|
||
"language": "Язык",
|
||
"checking": "Проверка...",
|
||
"checkingDatabase": "Проверка подключения к базе данных...",
|
||
"checkingAuthentication": "Проверка аутентификации...",
|
||
"backendReconnected": "Подключение к серверу восстановлено",
|
||
"connectionDegraded": "Подключение к серверу потеряно, восстановление…",
|
||
"reload": "Перезагрузить",
|
||
"remove": "Удалить",
|
||
"create": "Создать",
|
||
"update": "Обновить",
|
||
"copy": "Копировать",
|
||
"copyFailed": "Не удалось скопировать в буфер обмена",
|
||
"maximize": "Развернуть",
|
||
"restore": "Восстановить",
|
||
"of": "из",
|
||
"saved": "Сохранено",
|
||
"deleted": "Удалено",
|
||
"deleteFailed": "Не удалось удалить",
|
||
"saveFailed": "Не удалось сохранить",
|
||
"required": "Обязательно"
|
||
},
|
||
"nav": {
|
||
"home": "Главная",
|
||
"terminal": "Терминал",
|
||
"docker": "Docker",
|
||
"tunnels": "Туннели",
|
||
"fileManager": "Файловый менеджер",
|
||
"serverStats": "Метрики хоста",
|
||
"hostMetrics": "Метрики хоста",
|
||
"admin": "Администрирование",
|
||
"termixId": "ID",
|
||
"userProfile": "Профиль пользователя",
|
||
"splitScreen": "Разделить экран",
|
||
"confirmClose": "Закрыть активный сеанс?",
|
||
"close": "Закрыть",
|
||
"cancel": "Отмена",
|
||
"sshManager": "SSH-менеджер",
|
||
"cannotSplitTab": "Невозможно разделить эту вкладку",
|
||
"hostTabTitle": "{{username}}@{{ip}}:{{port}}",
|
||
"copyPassword": "Копировать пароль",
|
||
"copySudoPassword": "Копировать пароль sudo",
|
||
"passwordCopied": "Пароль скопирован в буфер обмена",
|
||
"noPasswordAvailable": "Пароль недоступен",
|
||
"failedToCopyPassword": "Не удалось скопировать пароль",
|
||
"refreshTab": "Обновить соединение",
|
||
"renameTab": "Переименовать вкладку",
|
||
"openFileManager": "Открыть файловый менеджер",
|
||
"dashboard": "Панель мониторинга",
|
||
"networkGraph": "Сетевой график",
|
||
"tmuxMonitor": "Монитор Tmux",
|
||
"homepage": "Главная",
|
||
"quickConnect": "Быстрое подключение",
|
||
"sshTools": "Инструменты SSH",
|
||
"history": "История",
|
||
"sessionLogs": "Журналы сессий",
|
||
"hosts": "Хосты",
|
||
"snippets": "Сниппеты",
|
||
"hostManager": "Менеджер хостов",
|
||
"credentials": "Учетные данные",
|
||
"connections": "Подключения",
|
||
"alerts": "Оповещения",
|
||
"serial": "Последовательный порт",
|
||
"roleAdministrator": "Администратор",
|
||
"roleUser": "Пользователь"
|
||
},
|
||
"hosts": {
|
||
"hosts": "Хосты",
|
||
"noHosts": "Нет SSH-хостов",
|
||
"retry": "Повторить",
|
||
"refresh": "Обновить",
|
||
"optional": "Опционально",
|
||
"downloadSample": "Скачать образец",
|
||
"failedToDeleteHost": "Не удалось удалить {{name}}",
|
||
"importSkipExisting": "Импорт (пропускать существующие)",
|
||
"importSSHConfig": "Импорт из конфигурации SSH",
|
||
"connectionDetails": "Детали подключения",
|
||
"ssh": "SSH",
|
||
"telnet": "Telnet",
|
||
"remoteDesktop": "Удаленный рабочий стол",
|
||
"port": "Порт",
|
||
"username": "Имя пользователя",
|
||
"folder": "Папка",
|
||
"tags": "Теги",
|
||
"pin": "Закрепить",
|
||
"addHost": "Добавить хост",
|
||
"editHost": "Редактировать хост",
|
||
"cloneHost": "Клонировать хост",
|
||
"enableTerminal": "Включить терминал",
|
||
"enableTunnel": "Включить туннель",
|
||
"enableFileManager": "Включить файловый менеджер",
|
||
"enableDocker": "Включить Docker",
|
||
"defaultPath": "Путь по умолчанию",
|
||
"connection": "Подключение",
|
||
"upload": "Загрузить",
|
||
"authentication": "Аутентификация",
|
||
"password": "Пароль",
|
||
"key": "Ключ",
|
||
"credential": "Учётные данные",
|
||
"none": "Нет",
|
||
"sshPrivateKey": "Приватный ключ SSH",
|
||
"keyType": "Тип ключа",
|
||
"uploadFile": "Загрузить файл",
|
||
"tabGeneral": "Общие",
|
||
"tabSsh": "SSH",
|
||
"tabTerminal": "Терминал",
|
||
"tabRdp": "RDP",
|
||
"tabVnc": "VNC",
|
||
"tabTunnels": "Туннели",
|
||
"tabDocker": "Docker",
|
||
"tabFiles": "Файлы",
|
||
"tabStats": "Метрики хоста",
|
||
"tabHostMetrics": "Метрики хоста",
|
||
"tabTelnet": "Telnet",
|
||
"tabSharing": "Общий доступ",
|
||
"tabAuthentication": "Аутентификация",
|
||
"terminal": "Терминал",
|
||
"tunnel": "Туннель",
|
||
"fileManager": "Файловый менеджер",
|
||
"serverStats": "Метрики хоста",
|
||
"status": "Статус",
|
||
"folderRenamed": "Папка \"{{oldName}}\" успешно переименована в \"{{newName}}\"",
|
||
"failedToRenameFolder": "Не удалось переименовать папку",
|
||
"movedToFolder": "Перемещено {{count}} хост(а/ов) в \"{{folder}}\"",
|
||
"editHostTooltip": "Редактировать хост",
|
||
"statusChecks": "Проверки статуса",
|
||
"metricsCollection": "Сбор метрик",
|
||
"metricsInterval": "Интервал сбора метрик",
|
||
"metricsIntervalDesc": "Как часто собирать статистику сервера (5с - 1ч)",
|
||
"behavior": "Поведение",
|
||
"themePreview": "Предпросмотр темы",
|
||
"theme": "Тема",
|
||
"fontFamily": "Семейство шрифтов",
|
||
"fontSize": "Размер шрифта",
|
||
"letterSpacing": "Межбуквенный интервал",
|
||
"lineHeight": "Межстрочный интервал",
|
||
"cursorStyle": "Стиль курсора",
|
||
"cursorBlink": "Мигание курсора",
|
||
"scrollbackBuffer": "Буфер прокрутки",
|
||
"bellStyle": "Стиль звукового сигнала",
|
||
"rightClickSelectsWord": "Выделять слово правой кнопкой",
|
||
"fastScrollModifier": "Модификатор быстрой прокрутки",
|
||
"fastScrollSensitivity": "Чувствительность быстрой прокрутки",
|
||
"sshAgentForwarding": "Проброс SSH-агента",
|
||
"backspaceMode": "Режим Backspace",
|
||
"startupSnippet": "Сниппет запуска",
|
||
"selectSnippet": "Выбрать сниппет",
|
||
"forceKeyboardInteractive": "Принудительно Keyboard-Interactive",
|
||
"overrideCredentialUsername": "Переопределить имя пользователя учётных данных",
|
||
"overrideCredentialUsernameDesc": "Использовать указанное выше имя пользователя вместо имени из учётных данных",
|
||
"oidcUsernameHint": "Используйте $oidc.preferred_username для подстановки вашего имени входа OIDC.",
|
||
"tailscaleUsernameHint": "Это должен быть пользователь Unix, которому предоставлена идентификация Tailscale в списке контроля доступа SSH сети TailNet, а не обязательно root.",
|
||
"jumpHostChain": "Цепочка Jump Host",
|
||
"portKnocking": "Port Knocking",
|
||
"addKnock": "Добавить порт",
|
||
"addProxyNode": "Добавить узел",
|
||
"proxyNode": "Прокси-узел",
|
||
"proxyType": "Тип прокси",
|
||
"quickActions": "Быстрые действия",
|
||
"sudoPasswordAutoFill": "Автозаполнение пароля sudo",
|
||
"sudoPassword": "Пароль sudo",
|
||
"keepaliveInterval": "Интервал keepalive (мс)",
|
||
"moshCommand": "Команда MOSH",
|
||
"environmentVariables": "Переменные окружения",
|
||
"addVariable": "Добавить переменную",
|
||
"docker": "Docker",
|
||
"copyTerminalUrl": "Копировать URL терминала",
|
||
"copyFileManagerUrl": "Копировать URL файлового менеджера",
|
||
"copyRemoteDesktopUrl": "Копировать URL удаленного рабочего стола",
|
||
"failedToConnect": "Не удалось подключиться к консоли",
|
||
"connect": "Подключиться",
|
||
"disconnect": "Отключиться",
|
||
"start": "Запустить",
|
||
"enableStatusCheck": "Включить проверку статуса",
|
||
"enableMetrics": "Включить метрики",
|
||
"bulkUpdateFailed": "Массовое обновление не удалось",
|
||
"selectAll": "Выбрать все",
|
||
"deselectAll": "Снять выделение со всех",
|
||
"protocols": "Протоколы",
|
||
"secureShell": "SSH",
|
||
"virtualNetwork": "Виртуальная сеть",
|
||
"unencryptedShell": "Незашифрованная оболочка",
|
||
"addressIp": "Адрес / IP",
|
||
"friendlyName": "Понятное имя",
|
||
"macAddress": "MAC-адрес",
|
||
"wolBroadcastAddress": "Широковещательный адрес WoL",
|
||
"wolBroadcastAddressDesc": "Опциональный направленный широковещательный адрес для сетей Docker/маршрутизируемых сетей (например, 192.168.1.255). Оставьте пустым, чтобы использовать 255.255.255.255.",
|
||
"folderAndAdvanced": "Папка и Дополнительно",
|
||
"privateNotes": "Личные заметки",
|
||
"privateNotesPlaceholder": "Подробности об этом сервере...",
|
||
"pinToTop": "Закрепить вверху",
|
||
"pinToTopDesc": "Всегда показывать этот хост вверху списка",
|
||
"portKnockingSequence": "Последовательность порт-нокинга",
|
||
"addKnockBtn": "Добавить нок",
|
||
"noPortKnocking": "Порт-нокинг не настроен.",
|
||
"knockPort": "Knock-порт",
|
||
"protocol": "Протокол",
|
||
"delayAfterMs": "Задержка после (мс)",
|
||
"useSocks5Proxy": "Использовать SOCKS5-прокси",
|
||
"useSocks5ProxyDesc": "Маршрутизировать подключение через прокси-сервер",
|
||
"connectionOrigin": "Источник соединения",
|
||
"connectionOriginDesc": "Место, откуда устанавливается SSH-соединение с этим хостом. Переопределяет глобальное значение по умолчанию для настольного приложения.",
|
||
"connectionOriginDefault": "Использовать значение по умолчанию",
|
||
"connectionOriginLocal": "Это устройство (локальная сеть)",
|
||
"connectionOriginRemote": "Удаленный сервер",
|
||
"proxyHost": "Прокси-хост",
|
||
"proxyPort": "Прокси-порт",
|
||
"proxyUsername": "Имя пользователя прокси",
|
||
"proxyPassword": "Пароль прокси",
|
||
"proxySingleMode": "Одиночный прокси",
|
||
"proxyChainMode": "Цепочка прокси",
|
||
"you": "Вы",
|
||
"jumpHostChainLabel": "Цепочка транзитных хостов",
|
||
"addJumpBtn": "Добавить Jump",
|
||
"noJumpHosts": "Транзитные хосты не настроены.",
|
||
"selectAServer": "Выберите сервер...",
|
||
"sshPort": "SSH-порт",
|
||
"authMethod": "Метод аутентификации",
|
||
"storedCredential": "Сохранённые учётные данные",
|
||
"selectACredential": "Выберите учётные данные...",
|
||
"vaultProfile": "Профиль подписчика Vault",
|
||
"selectAVaultProfile": "Выберите профиль Vault...",
|
||
"vaultProfileHint": "Настройки берутся из общего профиля; при подключении вы войдёте в Vault через OIDC. Секреты не хранятся.",
|
||
"vaultNewProfile": "Новый профиль",
|
||
"vaultManageProfiles": "Управление профилями Vault",
|
||
"vaultAddrLabel": "Адрес Vault",
|
||
"vaultNamespaceLabel": "Пространство имён",
|
||
"vaultOidcMountLabel": "Монтирование аутентификации OIDC",
|
||
"vaultOidcRoleLabel": "Роль OIDC",
|
||
"vaultSshMountLabel": "Монтирование секретов SSH",
|
||
"vaultSshRoleLabel": "Роль подписчика SSH",
|
||
"vaultValidPrincipalsLabel": "Допустимые принципалы",
|
||
"vaultKeyTypeLabel": "Тип эфемерного ключа",
|
||
"vaultSharedLabel": "Общий доступ для всех пользователей",
|
||
"vaultCreateProfile": "Создать профиль",
|
||
"vaultProfileCreated": "Профиль Vault создан",
|
||
"vaultProfileSaved": "Профиль Vault сохранён",
|
||
"vaultProfileDeleted": "Профиль Vault удалён",
|
||
"vaultProfileSaveFailed": "Не удалось сохранить профиль Vault",
|
||
"vaultProfileDeleteFailed": "Не удалось удалить профиль Vault",
|
||
"vaultSaveProfile": "Сохранить профиль",
|
||
"vaultProfileValidationError": "Требуются имя, адрес Vault и роль SSH подписанта",
|
||
"vaultNoProfiles": "Пока нет профилей Vault.",
|
||
"vaultSharedBadge": "общий",
|
||
"keyTypeLabel": "Тип ключа",
|
||
"keyTypeAuto": "Автоопределение",
|
||
"keyPasteTab": "Вставить",
|
||
"keyUploadTab": "Загрузить",
|
||
"keyFileLoaded": "Файл ключа загружен",
|
||
"keyUploadClick": "Нажмите, чтобы загрузить .pem / .key / .ppk",
|
||
"clearKey": "Очистить ключ",
|
||
"keySaved": "SSH-ключ сохранён",
|
||
"keyReplaceNotice": "вставьте новый ключ ниже, чтобы заменить его",
|
||
"keyPassphraseSaved": "Парольная фраза сохранена, введите для изменения",
|
||
"replaceKey": "Заменить ключ",
|
||
"docsLink": "Документация",
|
||
"opksshLabel": "OPKSSH",
|
||
"opksshDesc": "Входите на этот хост через своего провайдера идентификации вместо пароля или ключа. Требуется настроенный OPKSSH на сервере.",
|
||
"warpgateLabel": "Шлюз Warpgate",
|
||
"warpgateDesc": "Этот хост подключается через SSH-прокси Warpgate. Termix автоматически обработает процесс подтверждения в браузере после аутентификации.",
|
||
"agentLabel": "SSH-агент",
|
||
"agentDesc": "Аутентификация с помощью SSH-агента, запущенного на сервере Termix (Bitwarden, 1Password, gpg-agent, KeeAgent, ssh-agent). Агент должен работать на машине, где размещён Termix.",
|
||
"agentSocketPathLabel": "Путь к сокету агента",
|
||
"agentSocketPathPlaceholder": "Оставьте пустым для использования SSH_AUTH_SOCK",
|
||
"agentSocketPathHint": "Оставьте пустым для автоопределения из переменной окружения SSH_AUTH_SOCK или укажите свой путь к сокету (например, /run/user/1000/gnupg/S.gpg-agent.ssh).",
|
||
"tailscaleDeviceSelect": "Выберите устройство Tailscale",
|
||
"tailscaleDeviceSelectPlaceholder": "Выберите устройство...",
|
||
"tailscaleNoApiKey": "Ключ API Tailscale не настроен. Добавьте его в настройках администратора, чтобы включить обнаружение устройств.",
|
||
"tailscaleDocsLink": "Документация",
|
||
"tailscaleLoadingDevices": "Загрузка устройств...",
|
||
"tailscaleNoDevices": "В вашем tailnet не найдено устройств.",
|
||
"tailscaleDeviceAutoFill": "При выборе устройства IP-адрес хоста будет заполнен автоматически.",
|
||
"forceKeyboardInteractiveLabel": "Принудительный Keyboard Interactive",
|
||
"forceKeyboardInteractiveShortDesc": "Принудительный ввод пароля вручную, даже если ключи присутствуют",
|
||
"allowLegacyAlgorithmsLabel": "Разрешить устаревшие алгоритмы",
|
||
"allowLegacyAlgorithmsDesc": "Включить устаревшие алгоритмы SSH (ssh-dss, ssh-rsa, diffie-hellman-group1-sha1, hmac-md5, 3des-cbc) для подключения к старым устройствам, которые нельзя обновить.",
|
||
"insecure": "Небезопасный",
|
||
"terminalAppearance": "Внешний вид терминала",
|
||
"colorTheme": "Цветовая тема",
|
||
"fontFamilyLabel": "Семейство шрифтов",
|
||
"fontSizeLabel": "Размер шрифта",
|
||
"cursorStyleLabel": "Стиль курсора",
|
||
"letterSpacingPx": "Межбуквенное расстояние (px)",
|
||
"lineHeightLabel": "Высота строки",
|
||
"bellStyleLabel": "Стиль сигнала",
|
||
"backspaceModeLabel": "Режим Backspace",
|
||
"cursorBlinking": "Мигание курсора",
|
||
"cursorBlinkingDesc": "Включить анимацию мигания курсора терминала",
|
||
"rightClickSelectsWordLabel": "Правый клик выделяет слово",
|
||
"rightClickSelectsWordShortDesc": "Выделять слово под курсором при правом клике",
|
||
"backgroundImageLabel": "URL фонового изображения",
|
||
"backgroundImageDesc": "Необязательный URL для фонового изображения терминала",
|
||
"backgroundImageOpacityLabel": "Прозрачность фонового изображения",
|
||
"customThemeColors": "Пользовательские цвета",
|
||
"customThemeBackground": "Фон",
|
||
"customThemeForeground": "Текст",
|
||
"customThemeCursor": "Курсор",
|
||
"customThemeCursorAccent": "Акцент курсора",
|
||
"customThemeSelection": "Выделение",
|
||
"customThemeAnsiColors": "Цвета ANSI",
|
||
"customThemeBlack": "Чёрный",
|
||
"customThemeRed": "Красный",
|
||
"customThemeGreen": "Зелёный",
|
||
"customThemeYellow": "Жёлтый",
|
||
"customThemeBlue": "Синий",
|
||
"customThemeMagenta": "Пурпурный",
|
||
"customThemeCyan": "Голубой",
|
||
"customThemeWhite": "Белый",
|
||
"customThemeBrightBlack": "Ярко-чёрный",
|
||
"customThemeBrightRed": "Ярко-красный",
|
||
"customThemeBrightGreen": "Ярко-зелёный",
|
||
"customThemeBrightYellow": "Ярко-жёлтый",
|
||
"customThemeBrightBlue": "Ярко-синий",
|
||
"customThemeBrightMagenta": "Ярко-пурпурный",
|
||
"customThemeBrightCyan": "Ярко-голубой",
|
||
"customThemeBrightWhite": "Ярко-белый",
|
||
"customThemeResetTooltip": "Сбросить до значений по умолчанию",
|
||
"savedThemesLabel": "Сохраненные темы",
|
||
"saveAsGlobalTheme": "Сохранить как глобальную тему",
|
||
"saveGlobalThemeNamePrompt": "Введите название для этой темы.",
|
||
"saveGlobalThemeSuccess": "Тема сохранена",
|
||
"saveGlobalThemeError": "Не удалось сохранить тему.",
|
||
"applyGlobalThemeTooltip": "Примените эту тему",
|
||
"deleteGlobalThemeTooltip": "Удалить эту тему",
|
||
"noSavedThemes": "Сохранённых тем пока нет.",
|
||
"syntaxHighlightingLabel": "Подсветка синтаксиса",
|
||
"syntaxHighlightingDesc": "Раскрашивать вывод терминала (ошибки, пути, IP-адреса, временные метки)",
|
||
"syntaxHighlightingCategories": "Категории подсветки",
|
||
"syntaxHighlightingCategoriesDesc": "Выберите типы содержимого для раскрашивания",
|
||
"syntaxCategoryLogLevels": "Уровни логирования",
|
||
"syntaxCategoryLogLevelsDesc": "error, warn, info, debug, fatal",
|
||
"syntaxCategoryPaths": "Пути к файлам",
|
||
"syntaxCategoryPathsDesc": "/usr/share/doc, ~/file.txt",
|
||
"syntaxCategoryTimestamps": "Временные метки",
|
||
"syntaxCategoryTimestampsDesc": "[12:34:56], 2024-01-15",
|
||
"syntaxCategoryIpAddresses": "IP-адреса",
|
||
"syntaxCategoryIpAddressesDesc": "192.168.1.1, 10.0.0.1:8080",
|
||
"syntaxCategoryUrls": "URLs",
|
||
"syntaxCategoryUrlsDesc": "https://example.com",
|
||
"syntaxCategoryNumbers": "Числа с метками",
|
||
"syntaxCategoryNumbersDesc": "port 8080, exit 1, status 404",
|
||
"behaviorAndAdvanced": "Поведение и дополнительные настройки",
|
||
"scrollbackBufferLabel": "Буфер прокрутки",
|
||
"scrollbackMaxLines": "Максимальное количество строк, сохраняемых в истории",
|
||
"sshAgentForwardingLabel": "Проброс SSH-агента",
|
||
"sshAgentForwardingShortDesc": "Передавать локальные SSH-ключи на этот хост",
|
||
"useSSHTitleLabel": "Использовать заголовок окна SSH",
|
||
"useSSHTitleDesc": "Обновлять заголовок вкладки из названия окна оболочки вместо имени хоста",
|
||
"enableAutoMosh": "Включить Auto-Mosh",
|
||
"enableAutoMoshDesc": "Предпочитать Mosh вместо SSH, если доступен",
|
||
"enableAutoTmux": "Включить Auto-Tmux",
|
||
"enableAutoTmuxDesc": "Автоматически запускать или подключаться к сессии tmux",
|
||
"enableSessionLogging": "Логирование сессии",
|
||
"enableSessionLoggingDesc": "Записывать вывод терминальной сессии для последующего просмотра",
|
||
"allowSessionSharing": "Разрешить совместное использование сеанса",
|
||
"allowSessionSharingDesc": "Разрешите делиться записями онлайн-сессий на этом хостинге по ссылке или с другими пользователями.",
|
||
"enableCommandHistory": "История команд",
|
||
"enableCommandHistoryDesc": "Сохранять команды, выполняемые в этом терминале, для истории и автодополнения",
|
||
"linkClickBehaviorLabel": "Поведение при клике по ссылке",
|
||
"linkClickBehaviorDesc": "Определяет, что происходит при клике по ссылке в терминале. Используйте «По умолчанию», чтобы следовать настройкам приложения.",
|
||
"linkClickBehaviorDefault": "По умолчанию (следовать настройкам приложения)",
|
||
"linkClickBehaviorConfirm": "Показывать всплывающее окно для открытия или копирования",
|
||
"linkClickBehaviorDirect": "Открывать напрямую",
|
||
"sudoPasswordAutoFillLabel": "Автозаполнение пароля sudo",
|
||
"sudoPasswordAutoFillShortDesc": "Автоматически вводить пароль sudo при запросе",
|
||
"sudoPasswordAutoFillDesc": "Хранить пароль sudo, чтобы метрики хоста, запросы терминала и другие могли автоматически выполнять привилегированные команды.",
|
||
"sudoPasswordLabel": "Пароль sudo",
|
||
"environmentVariablesLabel": "Переменные окружения",
|
||
"addVariableBtn": "Добавить переменную",
|
||
"noEnvVars": "Переменные окружения не настроены.",
|
||
"fastScrollModifierLabel": "Модификатор быстрой прокрутки",
|
||
"fastScrollSensitivityLabel": "Чувствительность быстрой прокрутки",
|
||
"moshCommandLabel": "Команда Mosh",
|
||
"startupSnippetLabel": "Фрагмент запуска",
|
||
"keepaliveIntervalLabel": "Интервал keepalive (секунд)",
|
||
"maxKeepaliveMisses": "Макс. пропусков keepalive",
|
||
"tunnelSettings": "Настройки туннеля",
|
||
"enableTunneling": "Включить туннелирование",
|
||
"enableTunnelingDesc": "Включить функциональность SSH-туннеля для этого хоста",
|
||
"serverTunnelsSection": "Серверные туннели",
|
||
"addTunnelBtn": "Добавить туннель",
|
||
"noTunnelsConfigured": "Туннели не настроены.",
|
||
"tunnelLabel": "Туннель {{number}}",
|
||
"tunnelType": "Тип туннеля",
|
||
"tunnelModeLocalDesc": "Пробросить локальный порт на порт удалённого сервера (или хоста, доступного с него).",
|
||
"tunnelModeRemoteDesc": "Пробросить порт на удалённом сервере на локальный порт вашей машины.",
|
||
"tunnelModeDynamicDesc": "Создать SOCKS5-прокси на локальном порту для динамического пробрасывания портов.",
|
||
"sameHost": "Этот хост (прямой туннель)",
|
||
"endpointHost": "Целевой хост",
|
||
"endpointHostPlaceholder": "Тот же хост, SSH-хост или доступный хост/IP-адрес",
|
||
"endpointPort": "Целевой порт",
|
||
"bindHost": "Хост для привязки",
|
||
"sourcePort": "Исходный порт",
|
||
"maxRetries": "Макс. число попыток",
|
||
"retryIntervalS": "Интервал повтора (с)",
|
||
"autoStartLabel": "Автозапуск",
|
||
"autoStartDesc": "Автоматически подключать этот туннель при загрузке хоста",
|
||
"tunnelConnecting": "Туннель подключается...",
|
||
"tunnelDisconnected": "Туннель отключён",
|
||
"failedToConnectTunnel": "Не удалось подключиться",
|
||
"failedToDisconnectTunnel": "Не удалось отключиться",
|
||
"dockerIntegration": "Интеграция Docker",
|
||
"enableDockerMonitor": "Включить Docker",
|
||
"enableDockerMonitorDesc": "Отслеживать и управлять контейнерами на этом хосте через Docker",
|
||
"containerRuntime": "Среда выполнения контейнеров",
|
||
"containerRuntimeDesc": "Выберите CLI, используемый для управления контейнерами на этом хосте",
|
||
"containerRuntimeDocker": "Docker",
|
||
"containerRuntimePodman": "Podman",
|
||
"enableTmuxMonitor": "Включить монитор Tmux",
|
||
"enableTmuxMonitorDesc": "Показывать этот хост в Мониторе Tmux и добавлять действия tmux в боковую панель",
|
||
"tabProxmox": "Proxmox",
|
||
"proxmoxIntegration": "Интеграция Proxmox",
|
||
"enableProxmox": "Включить Proxmox",
|
||
"enableProxmoxDesc": "Пометить этот хост как узел Proxmox. Включает обнаружение и импорт гостевых систем непосредственно с этого хоста.",
|
||
"proxmoxDefaultAuthType": "Тип аутентификации по умолчанию",
|
||
"proxmoxDefaultAuthTypeDesc": "Метод аутентификации, применяемый к импортированным гостевым хостам. Выберите тип аутентификации, соответствующий способу подключения к гостевым хостам.",
|
||
"authTypePassword": "Пароль",
|
||
"authTypeKey": "SSH-ключ",
|
||
"authTypeCredential": "Учётные данные",
|
||
"authTypeOpkssh": "OPKSSH",
|
||
"authTypeNone": "Нет",
|
||
"proxmoxDefaultCredential": "Учётные данные по умолчанию",
|
||
"proxmoxDefaultCredentialDesc": "Учётные данные, используемые для импортированных гостевых хостов, когда в качестве типа аутентификации выбраны «Учётные данные».",
|
||
"proxmoxWindowsDetection": "Обнаружение Windows / RDP",
|
||
"proxmoxWindowsDetectionDesc": "Шаблоны имён через запятую, при совпадении с которыми используется RDP вместо SSH (без учёта регистра).",
|
||
"proxmoxDockerDetection": "Обнаружение Docker",
|
||
"proxmoxDockerDetectionDesc": "Шаблоны имён через запятую, при совпадении с которыми для гостя включается Docker.",
|
||
"proxmoxPreferredRanges": "Предпочтительные IP-диапазоны",
|
||
"proxmoxPreferredRangesDesc": "Список префиксов через запятую в порядке приоритета для выбора IP-адреса, если у гостя несколько интерфейсов.",
|
||
"proxmoxAutoSync": "Автосинхронизация гостей",
|
||
"proxmoxAutoSyncDesc": "Периодически обнаруживать этот узел Proxmox и создавать или обновлять импортированные гостевые хосты, пока ваш сеанс разблокирован.",
|
||
"proxmoxSyncInterval": "Интервал синхронизации (мин.)",
|
||
"proxmoxSyncIntervalDesc": "Минимум 5 минут. Планировщик пропускает заблокированные сеансы.",
|
||
"proxmoxMarkMissing": "Помечать отсутствующих гостей",
|
||
"proxmoxMarkMissingDesc": "Добавлять тег proxmox-missing, когда ранее импортированный гость исчезает, вместо его удаления.",
|
||
"proxmoxLastSync": "Последняя синхронизация",
|
||
"proxmoxLastSyncNever": "Не выполнялась",
|
||
"proxmoxLastSyncNoResult": "Нет сведений о результате",
|
||
"proxmoxLastSyncSummary": "{{created}} создано, {{updated}} обновлено, {{markedMissing}} отсутствует, {{skipped}} пропущено",
|
||
"proxmoxLastSyncStatus": {
|
||
"success": "Успешно",
|
||
"error": "Ошибка",
|
||
"pending": "Ожидание"
|
||
},
|
||
"proxmoxDiscoverAction": "Обнаружить и импортировать гостей Proxmox",
|
||
"proxmoxImportTitle": "Импорт из Proxmox",
|
||
"proxmoxSelectHost": "Выберите хост Proxmox…",
|
||
"proxmoxDiscover": "Обнаружить",
|
||
"proxmoxDiscovering": "Обнаружение…",
|
||
"proxmoxDiscoverGuests": "Обнаружить гостей",
|
||
"proxmoxGuestsSelected_one": "{{count}} гость — {{selected}} выбрано",
|
||
"proxmoxGuestsSelected_other": "{{count}} гостей — {{selected}} выбрано",
|
||
"proxmoxSelectAll": "Выбрать всё",
|
||
"proxmoxDeselectAll": "Снять выделение",
|
||
"proxmoxNoGuests": "На этом узле Proxmox гости не найдены.",
|
||
"proxmoxImportButton_one": "Импортировать {{count}} хост",
|
||
"proxmoxImportButton_other": "Импортировать {{count}} хостов",
|
||
"proxmoxResultImported": "{{count}} импортировано",
|
||
"proxmoxResultUpdated": "{{count}} обновлено",
|
||
"proxmoxResultFailed": "{{count}} не удалось",
|
||
"proxmoxResultSkippedNoIp": "{{count}} пропущено (IP-адрес не найден)",
|
||
"proxmoxImportComplete": "Импорт Proxmox завершен: {{summary}}",
|
||
"proxmoxDiscoveryFailed": "Обнаружение не удалось",
|
||
"proxmoxImportFailed": "Импорт не удался",
|
||
"enableFileManagerMonitor": "Включить файловый менеджер",
|
||
"enableFileManagerMonitorDesc": "Просмотр и управление файлами на этом хосте через SFTP",
|
||
"scpLegacyLabel": "Устаревший режим SCP",
|
||
"scpLegacyDesc": "Использовать устаревший протокол передачи файлов для серверов, не поддерживающих подсистему SFTP (например, встроенные или минимальные SSH-серверы).",
|
||
"defaultPathLabel": "Путь по умолчанию",
|
||
"fileManagerPathHint": "Каталог, который открывается при запуске файлового менеджера для этого хоста.",
|
||
"statusChecksLabel": "Проверки состояния",
|
||
"enableStatusChecks": "Включить проверки состояния",
|
||
"enableStatusChecksDesc": "Периодически пинговать этот хост для проверки доступности",
|
||
"useGlobalInterval": "Использовать глобальный интервал",
|
||
"useGlobalIntervalDesc": "Переопределить глобальным интервалом проверки состояния сервера",
|
||
"checkIntervalS": "Интервал проверки (с)",
|
||
"checkIntervalDesc": "Секунд между проверками связи",
|
||
"metricsCollectionLabel": "Сбор метрик",
|
||
"enableMetricsLabel": "Включить метрики",
|
||
"enableMetricsDesc": "Собирать метрики ЦП, ОЗУ, диска и другие с этого хоста",
|
||
"useGlobalMetrics": "Использовать глобальный интервал",
|
||
"useGlobalMetricsDesc": "Переопределить глобальным интервалом сбора метрик сервера",
|
||
"metricsIntervalS": "Интервал сбора метрик (с)",
|
||
"metricsIntervalDesc2": "Секунд между снимками метрик",
|
||
"visibleWidgets": "Видимые виджеты",
|
||
"widgetsMovedToHostMetrics": "Карточки теперь добавляются, упорядочиваются и изменяются в размере непосредственно на вкладке «Метрики хоста». Откройте метрики для этого хоста и используйте «Настроить», чтобы выбрать отображаемые карточки.",
|
||
"cpuUsageLabel": "Использование ЦП",
|
||
"cpuUsageDesc": "Процент загрузки ЦП, средние значения нагрузки, график-спарклайн",
|
||
"memoryLabel": "Использование памяти",
|
||
"memoryDesc": "Использование ОЗУ, подкачка, кэш",
|
||
"storageLabel": "Использование диска",
|
||
"storageDesc": "Использование диска по точкам монтирования",
|
||
"networkLabel": "Сетевые интерфейсы",
|
||
"networkDesc": "Список интерфейсов и пропускная способность",
|
||
"uptimeLabel": "Время работы",
|
||
"uptimeDesc": "Время работы системы и время загрузки",
|
||
"systemInfoLabel": "Информация о системе",
|
||
"systemInfoDesc": "ОС, ядро, имя хоста, архитектура",
|
||
"recentLoginsLabel": "Недавние входы",
|
||
"recentLoginsDesc": "Успешные и неудачные попытки входа",
|
||
"topProcessesLabel": "Топ процессов",
|
||
"topProcessesDesc": "PID, %ЦП, %памяти, команда",
|
||
"listeningPortsLabel": "Прослушиваемые порты",
|
||
"listeningPortsDesc": "Открытые порты с процессом и состоянием",
|
||
"firewallLabel": "Брандмауэр",
|
||
"firewallDesc": "Статус брандмауэра, AppArmor, SELinux",
|
||
"quickActionsLabel": "Быстрые действия",
|
||
"quickActionsToolbar": "Быстрые действия отображаются в виде кнопок на панели инструментов метрик хоста для выполнения команд в один клик.",
|
||
"noQuickActions": "Пока нет быстрых действий.",
|
||
"buttonLabel": "Надпись кнопки",
|
||
"selectSnippetPlaceholder": "Выбрать сниппет...",
|
||
"addActionBtn": "Добавить действие",
|
||
"hostSharedSuccessfully": "Хост успешно открыт для общего доступа",
|
||
"failedToShareHost": "Не удалось открыть хост для общего доступа",
|
||
"accessRevoked": "Доступ отозван",
|
||
"failedToRevokeAccess": "Не удалось отозвать доступ",
|
||
"cancelBtn": "Отмена",
|
||
"savingBtn": "Сохранение...",
|
||
"addHostBtn": "Добавить хост",
|
||
"hostUpdated": "Хост обновлён",
|
||
"hostCreated": "Хост создан",
|
||
"failedToSave": "Не удалось сохранить хост",
|
||
"credentialUpdated": "Учётные данные обновлены",
|
||
"credentialCreated": "Учётные данные созданы",
|
||
"failedToSaveCredential": "Не удалось сохранить учётные данные",
|
||
"credentialNameRequired": "Требуется имя учётных данных",
|
||
"credentialAuthRequired": "Добавьте пароль, SSH-ключ или и то, и другое",
|
||
"createCredentialFromHostBtn": "Создать учетные данные",
|
||
"createCredentialFromHostTitle": "Создание учетных данных с хоста",
|
||
"createCredentialFromHostDesc": "Создайте многоразовую, доступную для совместного использования запись учетных данных, предварительно заполненную текущим именем пользователя, паролем и/или SSH-ключом этого хоста.",
|
||
"backToHosts": "Назад к хостам",
|
||
"backToCredentials": "Назад к учётным данным",
|
||
"pinned": "Закреплённые",
|
||
"noHostsFound": "Хосты не найдены",
|
||
"tryDifferentTerm": "Попробуйте другой запрос",
|
||
"addFirstHost": "Добавьте первый хост, чтобы начать",
|
||
"noCredentialsFound": "Учётные данные не найдены",
|
||
"addCredentialBtn": "Добавить учётные данные",
|
||
"updateCredentialBtn": "Обновить учётные данные",
|
||
"features": "Функции",
|
||
"noFolder": "(Нет папки)",
|
||
"deleteSelected": "Удалить",
|
||
"exitSelection": "Отменить выбор",
|
||
"importSkip": "Импорт (пропустить существующие)",
|
||
"importOverwrite": "Импорт (перезаписать)",
|
||
"collapseBtn": "Свернуть",
|
||
"importExportBtn": "Импорт / Экспорт",
|
||
"hostStatusesRefreshed": "Статусы хостов обновлены",
|
||
"failedToRefreshHosts": "Не удалось обновить хосты",
|
||
"movedHostTo": "Хост {{host}} перемещён в \"{{folder}}\"",
|
||
"failedToMoveHost": "Не удалось переместить хост",
|
||
"folderRenamedTo": "Папка переименована в \"{{name}}\"",
|
||
"deletedFolder": "Папка \"{{name}}\" удалена",
|
||
"failedToDeleteFolder": "Не удалось удалить папку",
|
||
"deleteAllInFolder": "Удалить все хосты в папке \"{{name}}\"? Это действие нельзя отменить.",
|
||
"folderPickerPlaceholder": "Нет папки",
|
||
"folderPickerSearch": "Поиск или создание (используйте / для подпапок)...",
|
||
"folderPickerNone": "Нет папки",
|
||
"folderPickerCreate": "Создать \"{{path}}\"",
|
||
"folderPickerEmpty": "Нет подходящих папок",
|
||
"newFolder": "Новая папка",
|
||
"createFolderTitle": "Создать папку",
|
||
"editFolderTitle": "Редактировать папку",
|
||
"folderDialogDescription": "Выберите имя, цвет и значок. Используйте / для вложенных папок.",
|
||
"folderNameLabel": "Имя папки",
|
||
"folderNamePlaceholder": "например Production/Web",
|
||
"folderNestingHint": "Используйте / для разделения уровней и создания вложенных папок.",
|
||
"folderColor": "Цвет",
|
||
"folderIcon": "Значок",
|
||
"folderCredential": "Удостоверение личности",
|
||
"folderCredentialNone": "Учетные данные не назначены",
|
||
"folderCredentialHint": "Хосты в этой папке, использующие аутентификацию \"Сохраненные учетные данные\" без выбора собственных учетных данных, унаследуют эти данные.",
|
||
"folderPreview": "Предпросмотр",
|
||
"folderNameFallback": "Безымянная папка",
|
||
"createFolderButton": "Создать папку",
|
||
"saveFolderButton": "Сохранить папку",
|
||
"cancel": "Отмена",
|
||
"iconSearchPlaceholder": "Поиск значков...",
|
||
"openAllSessions": "Открыть все сессии",
|
||
"editFolder": "Редактировать папку",
|
||
"deleteFolder": "Удалить папку",
|
||
"folderSaved": "Папка сохранена",
|
||
"failedToSaveFolder": "Не удалось сохранить папку",
|
||
"folderDeleted": "Удалена папка \"{{name}}\"",
|
||
"deleteFolderConfirm": "Удалить \"{{name}}\" и {{count}} хост(ов)? Это действие необратимо.",
|
||
"failedToMoveHosts": "Не удалось переместить хосты",
|
||
"expandAll": "Развернуть все папки",
|
||
"collapseAll": "Свернуть все папки",
|
||
"moreActions": "Ещё",
|
||
"groupBy": "Группировать по",
|
||
"GroupByFolder": "Папка",
|
||
"GroupByTag": "Тег",
|
||
"GroupByStatus": "Статус",
|
||
"GroupByProtocol": "Протокол",
|
||
"GroupByAuth": "Тип аутентификации",
|
||
"groupUngrouped": "Несгруппированные",
|
||
"deletedHost": "Удалён {{name}}",
|
||
"copiedToClipboard": "Скопировано в буфер обмена",
|
||
"terminalUrlCopied": "URL терминала скопирован",
|
||
"fileManagerUrlCopied": "URL файлового менеджера скопирован",
|
||
"tunnelUrlCopied": "URL туннеля скопирован",
|
||
"dockerUrlCopied": "URL Docker скопирован",
|
||
"hostMetricsUrlCopied": "URL метрик хоста скопирован",
|
||
"tmuxMonitorUrlCopied": "Скопирован URL Tmux Monitor",
|
||
"rdpUrlCopied": "Скопирован URL RDP",
|
||
"vncUrlCopied": "Скопирован URL VNC",
|
||
"telnetUrlCopied": "Скопирован URL Telnet",
|
||
"remoteDesktopUrlCopied": "Скопирован URL удаленного рабочего стола",
|
||
"expandActions": "Развернуть действия",
|
||
"collapseActions": "Свернуть действия",
|
||
"wakeOnLanAction": "Wake on LAN",
|
||
"wakeOnLanSuccess": "Magic Packet отправлен на {{name}}",
|
||
"wakeOnLanError": "Не удалось отправить Magic Packet",
|
||
"cloneHostAction": "Клонировать хост",
|
||
"copyAddress": "Копировать адрес",
|
||
"copyLink": "Копировать ссылку",
|
||
"copyTerminalUrlAction": "Копировать URL терминала",
|
||
"copyFileManagerUrlAction": "Копировать URL файлового менеджера",
|
||
"copyTunnelUrlAction": "Копировать URL туннеля",
|
||
"copyDockerUrlAction": "Копировать URL Docker",
|
||
"copyHostMetricsUrlAction": "Копировать URL метрик хоста",
|
||
"copyTmuxMonitorUrlAction": "Копировать URL Tmux Monitor",
|
||
"copyRdpUrlAction": "Копировать URL RDP",
|
||
"copyVncUrlAction": "Копировать URL VNC",
|
||
"copyTelnetUrlAction": "Копировать URL Telnet",
|
||
"copyRemoteDesktopUrlAction": "Копировать URL удаленного рабочего стола",
|
||
"deleteCredentialConfirm": "Удалить учетные данные \"{{name}}\"?",
|
||
"deletedCredential": "Удалено {{name}}",
|
||
"deploySSHKeyTitle": "Развернуть SSH-ключ",
|
||
"deployingBtn": "Развертывание...",
|
||
"deployBtn": "Развернуть",
|
||
"failedToDeployKey": "Не удалось развернуть ключ",
|
||
"deleteHostsConfirm": "Удалить {{count}} хост{{plural}}? Это действие нельзя отменить.",
|
||
"movedToRoot": "Перемещено в корень",
|
||
"enableTerminalFeature": "Включить терминал",
|
||
"disableTerminalFeature": "Отключить терминал",
|
||
"enableFilesFeature": "Включить файлы",
|
||
"disableFilesFeature": "Отключить файлы",
|
||
"enableTunnelsFeature": "Включить туннели",
|
||
"disableTunnelsFeature": "Отключить туннели",
|
||
"enableDockerFeature": "Включить Docker",
|
||
"disableDockerFeature": "Отключить Docker",
|
||
"enableProxmoxFeature": "Включить Proxmox",
|
||
"disableProxmoxFeature": "Отключить Proxmox",
|
||
"addTagsPlaceholder": "Добавить теги...",
|
||
"authDetails": "Данные аутентификации",
|
||
"credType": "Тип",
|
||
"generateKeyPairDesc": "Создать новую пару ключей, закрытый и публичный ключи будут заполнены автоматически.",
|
||
"generatingKey": "Генерация...",
|
||
"generateLabel": "Создать {{label}}",
|
||
"uploadFileBtn": "Загрузить файл",
|
||
"keyPassphraseOptional": "Парольная фраза ключа (необязательно)",
|
||
"sshPublicKeyOptional": "Публичный ключ SSH (необязательно)",
|
||
"publicKeyGenerated": "Публичный ключ создан",
|
||
"failedToGeneratePublicKey": "Не удалось получить публичный ключ",
|
||
"publicKeyCopied": "Публичный ключ скопирован",
|
||
"keyPairGenerated": "Пара ключей {{label}} создана",
|
||
"failedToGenerateKeyPair": "Не удалось создать пару ключей",
|
||
"searchHostsPlaceholder": "Поиск хостов, адресов, тегов…",
|
||
"searchCredentialsPlaceholder": "Поиск учётных данных…",
|
||
"refreshBtn": "Обновить",
|
||
"addTag": "Добавить теги...",
|
||
"deleteConfirmBtn": "Удалить",
|
||
"tunnelRequirementsText": "На SSH-сервере должны быть установлены параметры GatewayPorts yes, AllowTcpForwarding yes и PermitRootLogin yes в /etc/ssh/sshd_config.",
|
||
"deleteHostConfirm": "Удалить \"{{name}}\"?",
|
||
"enableAtLeastOneProtocol": "Включите хотя бы один протокол выше, чтобы настроить параметры аутентификации и подключения.",
|
||
"keyPassphrase": "Парольная фраза ключа",
|
||
"connectBtn": "Подключиться",
|
||
"disconnectBtn": "Отключиться",
|
||
"basicInformation": "Основная информация",
|
||
"authDetailsSection": "Данные аутентификации",
|
||
"credTypeLabel": "Тип",
|
||
"hostsTab": "Хосты",
|
||
"credentialsTab": "Учетные данные",
|
||
"selectMultiple": "Выбрать несколько",
|
||
"selectHosts": "Выбрать хосты",
|
||
"connectionLabel": "Подключение",
|
||
"authenticationLabel": "Аутентификация",
|
||
"generateKeyPairTitle": "Сгенерировать пару ключей",
|
||
"generateKeyPairDescription": "Сгенерировать новую пару ключей, закрытый и открытый ключи будут заполнены автоматически.",
|
||
"generateFromPrivateKey": "Сгенерировать из закрытого ключа",
|
||
"refreshBtn2": "Обновить",
|
||
"exitSelectionTitle": "Выйти из выбора",
|
||
"exportAll": "Экспортировать всё",
|
||
"exportForSharing": "Экспортировать для обмена",
|
||
"addHostBtn2": "Добавить хост",
|
||
"addCredentialBtn2": "Добавить учётные данные",
|
||
"checkingHostStatuses": "Проверка статусов хостов...",
|
||
"pinnedSection": "Закреплённые",
|
||
"hostsExported": "Хосты успешно экспортированы",
|
||
"hostsShareExported": "Хосты для обмена успешно экспортированы",
|
||
"exportFailed": "Не удалось экспортировать хосты",
|
||
"sampleDownloaded": "Образец файла загружен",
|
||
"failedToDeleteCredential2": "Не удалось удалить учётные данные",
|
||
"noFolderOption": "(Без папки)",
|
||
"nSelected": "{{count}} выбрано",
|
||
"featuresMenu": "Функции",
|
||
"moveMenu": "Переместить",
|
||
"connectSelected": "Подключиться",
|
||
"cancelSelection": "Отмена",
|
||
"deployDialogDesc": "Развернуть {{name}} в authorized_keys хоста.",
|
||
"targetHostLabel": "Целевой хост",
|
||
"selectHostOption": "Выберите хост...",
|
||
"keyDeployedSuccess": "Ключ успешно развёрнут",
|
||
"failedToDeployKey2": "Не удалось развернуть ключ",
|
||
"deletedCount": "Удалено {{count}} хостов",
|
||
"failedToDeleteCount": "Не удалось удалить {{count}} хостов",
|
||
"duplicatedHost": "\"{{name}}\" дублирован",
|
||
"failedToDuplicateHost": "Не удалось дублировать хост",
|
||
"updatedCount": "Обновлено хостов: {{count}}",
|
||
"friendlyNameLabel": "Дружественное имя",
|
||
"descriptionLabel": "Описание",
|
||
"loadingHost": "Загрузка хоста...",
|
||
"loadingHosts": "Загрузка хостов...",
|
||
"loadingCredentials": "Загрузка учётных данных...",
|
||
"noHostsYet": "Пока нет хостов",
|
||
"noHostsMatchSearch": "Нет хостов по вашему запросу",
|
||
"hostNotFound": "Хост не найден",
|
||
"searchHosts": "Поиск хостов...",
|
||
"sortHosts": "Сортировка хостов",
|
||
"sortDefault": "По умолчанию",
|
||
"sortNameAsc": "Имя (А → Я)",
|
||
"sortNameDesc": "Имя (Я → А)",
|
||
"sortIpAsc": "IP-адрес (по возрастанию)",
|
||
"sortIpDesc": "IP-адрес (по убыванию)",
|
||
"sortOnlineFirst": "Сначала онлайн",
|
||
"sortOfflineFirst": "Сначала офлайн",
|
||
"sortPinnedFirst": "Сначала закреплённые",
|
||
"filterHosts": "Фильтр хостов",
|
||
"filterClearAll": "Очистить фильтры",
|
||
"filterStatusGroup": "Статус",
|
||
"filterOnline": "Онлайн",
|
||
"filterOffline": "Офлайн",
|
||
"filterPinned": "Закреплённые",
|
||
"filterAuthGroup": "Тип аутентификации",
|
||
"filterAuthPassword": "Пароль",
|
||
"filterAuthKey": "SSH-ключ",
|
||
"filterAuthCredential": "Учётные данные",
|
||
"filterAuthNone": "Нет",
|
||
"filterAuthOpkssh": "OPKSSH",
|
||
"filterProtocolGroup": "Протокол",
|
||
"filterProtocolSsh": "SSH",
|
||
"filterProtocolRdp": "RDP",
|
||
"filterProtocolVnc": "VNC",
|
||
"filterProtocolTelnet": "Telnet",
|
||
"filterFeaturesGroup": "Функции",
|
||
"filterFeatureTerminal": "Терминал",
|
||
"filterFeatureFileManager": "Файловый менеджер",
|
||
"filterFeatureTunnel": "Туннель",
|
||
"filterFeatureDocker": "Docker",
|
||
"filterTagsGroup": "Теги",
|
||
"shareHost": "Поделиться",
|
||
"shareHostTitle": "Поделиться: {{name}}",
|
||
"shareFolder": "Поделиться папкой",
|
||
"shareFolderTitle": "Общая папка: {{name}}",
|
||
"folderSharedSuccessfully": "Общие хосты {{count}} в папке",
|
||
"failedToShareFolder": "Не удалось предоставить общий доступ к папке.",
|
||
"sharing": {
|
||
"loadError": "Не удалось загрузить данные общего доступа. Попробуйте снова.",
|
||
"shareWithSection": "Поделиться с",
|
||
"usersTab": "Пользователи",
|
||
"rolesTab": "Роли",
|
||
"searchPlaceholder": "Поиск пользователей или ролей...",
|
||
"noMatches": "Совпадений не найдено",
|
||
"permissionLevelLabel": "Уровень доступа",
|
||
"levels": {
|
||
"connect": {
|
||
"label": "Подключение",
|
||
"description": "Только открытие сеансов: терминал, удалённый рабочий стол, файловый менеджер, туннели и Docker. Без доступа к конфигурации хоста."
|
||
},
|
||
"view": {
|
||
"label": "Просмотр",
|
||
"description": "Подключение и просмотр конфигурации хоста. Секреты не отображаются."
|
||
},
|
||
"edit": {
|
||
"label": "Редактирование",
|
||
"description": "Просмотр и изменение хоста. Секреты можно заменить, но нельзя прочитать; назначения учётных данных остаются только у владельца."
|
||
},
|
||
"manage": {
|
||
"label": "Управление",
|
||
"description": "Редактирование, а также предоставление доступа другим, изменение уровней доступа и отзыв доступа."
|
||
}
|
||
},
|
||
"expiryLabel": "Срок действия доступа",
|
||
"expiry": {
|
||
"never": "Никогда",
|
||
"oneHour": "1 час",
|
||
"oneDay": "24 часа",
|
||
"sevenDays": "7 дней",
|
||
"thirtyDays": "30 дней",
|
||
"custom": "Настроить"
|
||
},
|
||
"customHoursPlaceholder": "Часов до окончания срока доступа",
|
||
"shareButton": "Поделиться",
|
||
"shareWithCount": "Поделиться ({{count}})",
|
||
"currentAccess": "Текущий доступ",
|
||
"noAccessEntries": "Данный хост еще не предоставлен другим пользователям",
|
||
"folderShareSummary": "Общий доступ к {{shared}} хостам {{total}} в этой папке",
|
||
"grantedBy": "Кем предоставлен",
|
||
"expires": "Истекает",
|
||
"expired": "Истек",
|
||
"never": "Никогда",
|
||
"revoke": "Отозвать",
|
||
"accessUpdated": "Доступ обновлен",
|
||
"accessUpdateFailed": "Не удалось обновить доступ",
|
||
"sharedBadge": "Общий",
|
||
"sharedBadgeTooltip": "Предоставлен пользователем {{owner}} (доступ: {{level}})",
|
||
"viewOnlyBanner": "Этот хост предоставлен вам пользователем {{owner}} с доступом только для просмотра. Конфигурация доступна только для чтения.",
|
||
"sharedEditBanner": "Этот хост предоставлен вам пользователем {{owner}} с доступом на редактирование. Изменения применяются к реальному хосту; параметры аутентификации может изменять только владелец.",
|
||
"ownerOnlyControl": "Только владелец хоста может изменять это"
|
||
},
|
||
"guac": {
|
||
"connection": "Подключение",
|
||
"authentication": "Аутентификация",
|
||
"storedCredential": "Сохраненные учетные данные",
|
||
"noCredential": "Нет учетных данных (прямые данные ниже)",
|
||
"authMethod": "Метод аутентификации",
|
||
"authTypeDirect": "Прямой",
|
||
"authTypeCredential": "Учетные данные",
|
||
"authTypeNone": "Никто",
|
||
"authTypeNoneDesc": "Учетные данные не сохраняются. При каждом подключении вам будет предлагаться ввести имя пользователя и пароль; они не сохраняются.",
|
||
"selectCredential": "Выберите учетные данные...",
|
||
"connectionSettings": "Параметры подключения",
|
||
"displaySettings": "Параметры отображения",
|
||
"audioSettings": "Параметры звука",
|
||
"rdpPerformance": "Производительность RDP",
|
||
"deviceRedirection": "Перенаправление устройств",
|
||
"session": "Сессия",
|
||
"gateway": "Шлюз",
|
||
"remoteApp": "RemoteApp",
|
||
"clipboard": "Буфер обмена",
|
||
"sessionRecording": "Запись сессии",
|
||
"wakeOnLan": "Wake-on-LAN",
|
||
"vncSettings": "Параметры VNC",
|
||
"terminalSettings": "Параметры терминала",
|
||
"rdpPort": "Порт RDP",
|
||
"username": "Имя пользователя",
|
||
"password": "Пароль",
|
||
"passwordSaved": "Пароль сохранен, введите для изменения.",
|
||
"domain": "Домен",
|
||
"securityMode": "Режим безопасности",
|
||
"colorDepth": "Глубина цвета",
|
||
"width": "Ширина",
|
||
"height": "Высота",
|
||
"dpi": "DPI",
|
||
"resizeMethod": "Метод изменения размера",
|
||
"clientName": "Имя клиента",
|
||
"initialProgram": "Начальная программа",
|
||
"serverLayout": "Раскладка сервера",
|
||
"timezone": "Часовой пояс",
|
||
"loadBalanceInfo": "Информация о балансировке нагрузки / Cookie",
|
||
"loadBalanceInfoDesc": "Cookie брокера подключений к удаленному рабочему столу для балансировки нагрузки фермы RDS (например, tsv://MS Terminal Services Plugin.1.CollectionName)",
|
||
"guacdProxy": "Прокси guacd",
|
||
"guacdHostname": "Хост guacd",
|
||
"guacdHostnamePlaceholder": "Глобальное значение по умолчанию",
|
||
"guacdPort": "Порт guacd",
|
||
"guacdProxyDesc": "Переопределить глобальный экземпляр guacd для этого соединения. Оставьте пустым для использования глобально настроенного guacd.",
|
||
"gatewayHostname": "Имя хоста шлюза",
|
||
"gatewayPort": "Порт шлюза",
|
||
"gatewayUsername": "Имя пользователя шлюза",
|
||
"gatewayPassword": "Пароль шлюза",
|
||
"gatewayDomain": "Домен шлюза",
|
||
"remoteAppProgram": "Программа RemoteApp",
|
||
"workingDirectory": "Рабочий каталог",
|
||
"arguments": "Аргументы",
|
||
"normalizeLineEndings": "Нормализовать окончания строк",
|
||
"recordingPath": "Путь записи",
|
||
"recordingName": "Имя записи",
|
||
"macAddress": "MAC-адрес",
|
||
"broadcastAddress": "Широковещательный адрес",
|
||
"udpPort": "Порт UDP",
|
||
"waitTimeS": "Время ожидания (с)",
|
||
"driveName": "Имя диска",
|
||
"drivePath": "Путь к диску",
|
||
"ignoreCertificate": "Игнорировать сертификат",
|
||
"ignoreCertificateDesc": "Разрешить подключения к хостам с самоподписанными сертификатами",
|
||
"forceLossless": "Принудительно без потерь",
|
||
"forceLosslessDesc": "Принудительное кодирование изображений без потерь (более высокое качество, больший расход трафика)",
|
||
"disableAudio": "Отключить звук",
|
||
"disableAudioDesc": "Отключить весь звук в удаленном сеансе",
|
||
"enableAudioInput": "Включить аудиовход (микрофон)",
|
||
"enableAudioInputDesc": "Передавать локальный микрофон в удаленный сеанс",
|
||
"wallpaper": "Обои",
|
||
"wallpaperDesc": "Показывать обои рабочего стола (отключение повышает производительность)",
|
||
"theming": "Темы",
|
||
"themingDesc": "Включить визуальные темы и стили",
|
||
"fontSmoothing": "Сглаживание шрифтов",
|
||
"fontSmoothingDesc": "Включить рендеринг шрифтов ClearType",
|
||
"fullWindowDrag": "Перетаскивание окон с содержимым",
|
||
"fullWindowDragDesc": "Показывать содержимое окна при перетаскивании",
|
||
"desktopComposition": "Композиция рабочего стола",
|
||
"desktopCompositionDesc": "Включить эффекты Aero Glass",
|
||
"menuAnimations": "Анимации меню",
|
||
"menuAnimationsDesc": "Включить анимацию исчезновения и сдвига меню",
|
||
"disableBitmapCaching": "Отключить кеширование растровых изображений",
|
||
"disableBitmapCachingDesc": "Отключить кеш растровых изображений (может помочь при сбоях)",
|
||
"disableOffscreenCaching": "Отключить внеэкранное кеширование",
|
||
"disableOffscreenCachingDesc": "Отключить внеэкранный кеш",
|
||
"disableGlyphCaching": "Отключить кеширование глифов",
|
||
"disableGlyphCachingDesc": "Отключить кеш глифов",
|
||
"enableGfx": "Включить GFX",
|
||
"enableGfxDesc": "Использовать графический конвейер RemoteFX",
|
||
"enablePrinting": "Включить печать",
|
||
"enablePrintingDesc": "Перенаправлять локальные принтеры в удаленный сеанс",
|
||
"enableDriveRedirection": "Включить перенаправление дисков",
|
||
"enableDriveRedirectionDesc": "Подключать локальную папку как диск в удаленном сеансе",
|
||
"createDrivePath": "Создать путь к диску",
|
||
"createDrivePathDesc": "Автоматически создать папку, если она не существует",
|
||
"disableDownload": "Отключить загрузку",
|
||
"disableDownloadDesc": "Запретить загрузку файлов из удаленного сеанса",
|
||
"disableUpload": "Отключить выгрузку",
|
||
"disableUploadDesc": "Запретить выгрузку файлов в удаленный сеанс",
|
||
"enableTouch": "Включить сенсорный ввод",
|
||
"enableTouchDesc": "Включить передачу сенсорного ввода",
|
||
"consoleSession": "Консольный сеанс",
|
||
"consoleSessionDesc": "Подключиться к консоли (сеанс 0) вместо создания нового сеанса",
|
||
"sendWolPacket": "Отправить WOL-пакет",
|
||
"sendWolPacketDesc": "Отправить magic-пакет для пробуждения хоста перед подключением",
|
||
"disableCopy": "Отключить копирование",
|
||
"disableCopyDesc": "Запретить копирование текста из удаленного сеанса",
|
||
"disablePaste": "Отключить вставку",
|
||
"disablePasteDesc": "Запретить вставку текста в удаленный сеанс",
|
||
"createPathIfMissing": "Создать путь, если отсутствует",
|
||
"createPathIfMissingDesc": "Автоматически создать каталог для записей",
|
||
"excludeOutput": "Исключить вывод",
|
||
"excludeOutputDesc": "Не записывать вывод экрана (только метаданные)",
|
||
"excludeMouse": "Исключить мышь",
|
||
"excludeMouseDesc": "Не записывать движения мыши",
|
||
"includeKeystrokes": "Записывать нажатия",
|
||
"includeKeystrokesDesc": "Записывать необработанные нажатия клавиш в дополнение к выводу экрана",
|
||
"vncPort": "Порт VNC",
|
||
"vncPassword": "Пароль VNC",
|
||
"vncUsernameOptional": "Имя пользователя (необязательно)",
|
||
"vncLeaveBlank": "Оставьте пустым, если не требуется",
|
||
"cursorMode": "Режим курсора",
|
||
"swapRedBlue": "Поменять красный/синий",
|
||
"swapRedBlueDesc": "Обменять красный и синий цветовые каналы (исправляет некоторые проблемы с цветом)",
|
||
"readOnly": "Только чтение",
|
||
"readOnlyDesc": "Просмотр удаленного экрана без отправки ввода",
|
||
"telnetPort": "Порт Telnet",
|
||
"terminalType": "Тип терминала",
|
||
"fontName": "Название шрифта",
|
||
"fontSize": "Размер шрифта",
|
||
"colorScheme": "Цветовая схема",
|
||
"backspaceKey": "Клавиша Backspace",
|
||
"saveHostFirst": "Сначала сохраните хост.",
|
||
"sharingOptionsAfterSave": "Параметры общего доступа будут доступны после сохранения хоста.",
|
||
"permissionLevel": "Уровень разрешений",
|
||
"typeHeader": "Тип",
|
||
"targetHeader": "Цель",
|
||
"permissionHeader": "Разрешение",
|
||
"cancelBtn": "Отмена",
|
||
"savingBtn": "Сохранение...",
|
||
"updateHostBtn": "Обновить хост",
|
||
"addHostBtn": "Добавить хост"
|
||
}
|
||
},
|
||
"commandPalette": {
|
||
"searchPlaceholder": "Поиск хостов, команд или настроек...",
|
||
"quickActions": "Быстрые действия",
|
||
"hostManager": "Менеджер хостов",
|
||
"hostManagerDesc": "Управление, добавление и редактирование хостов",
|
||
"addNewHost": "Добавить новый хост",
|
||
"addNewHostDesc": "Зарегистрировать новый хост",
|
||
"adminSettings": "Настройки администратора",
|
||
"adminSettingsDesc": "Настройка системных параметров и пользователей",
|
||
"userProfile": "Профиль пользователя",
|
||
"userProfileDesc": "Управление учётной записью и настройками",
|
||
"addCredential": "Добавить учётные данные",
|
||
"addCredentialDesc": "Хранение SSH-ключей или паролей",
|
||
"tmuxMonitor": "Мониторинг Tmux",
|
||
"tmuxMonitorDesc": "Мониторинг сессий tmux на ваших хостах",
|
||
"recentActivity": "Недавняя активность",
|
||
"serversAndHosts": "Серверы и хосты",
|
||
"noHostsFound": "Не найдено хостов, соответствующих \"{{search}}\"",
|
||
"links": "Ссылки",
|
||
"navigate": "Перейти",
|
||
"select": "Выбрать",
|
||
"toggleWith": "Переключить с помощью"
|
||
},
|
||
"splitScreen": {
|
||
"paneEmpty": "Панель {{index}} пуста",
|
||
"noTabAssigned": "Вкладка не назначена",
|
||
"focusedPane": "Активная панель"
|
||
},
|
||
"connections": {
|
||
"noConnections": "Нет подключений",
|
||
"noConnectionsDesc": "Откройте терминал, файловый менеджер или удалённый рабочий стол для отображения подключений",
|
||
"connectedFor": "Подключено {{duration}}",
|
||
"connected": "Подключено",
|
||
"disconnected": "Отключено",
|
||
"closeTab": "Закрыть вкладку",
|
||
"closeConnection": "Закрыть подключение",
|
||
"forgetTab": "Забыть",
|
||
"removeBackground": "Удалить",
|
||
"reconnect": "Переподключиться",
|
||
"reopenTab": "Открыть заново",
|
||
"sectionOpen": "Открытые",
|
||
"sectionBackground": "Фоновые",
|
||
"backgroundDesc": "Сессии сохраняются в течение 30 минут после отключения и могут быть переподключены.",
|
||
"persisted": "Сохранено в фоне",
|
||
"expiresIn": "Истекает через {{duration}}",
|
||
"search": "Поиск подключений...",
|
||
"noSearchResults": "Нет подключений, соответствующих поиску",
|
||
"rename": "Переименовать сессию",
|
||
"sectionSharedWithMe": "Поделился со мной",
|
||
"sharedBy": "Поделился {{username}}",
|
||
"join": "Присоединиться",
|
||
"sharedSessionLabel": "{{hostName}} (совместно)"
|
||
},
|
||
"sessionSharing": {
|
||
"guestView": {
|
||
"loading": "Подключение к общей сессии...",
|
||
"linkInvalid": "Данная ссылка для общего доступа недействительна, истек срок ее действия или она была аннулирована.",
|
||
"rateLimited": "Слишком много попыток, пожалуйста, попробуйте еще раз чуть позже.",
|
||
"sessionEnded": "Данная сессия завершена.",
|
||
"readOnlyBadge": "Только для просмотра"
|
||
},
|
||
"modalTitle": "Совместное использование сессии",
|
||
"shareButton": "Делиться",
|
||
"notReadyToShare": "Сессия пока не готова к публикации.",
|
||
"modeTab": {
|
||
"link": "Связь",
|
||
"user": "Пользователь"
|
||
},
|
||
"linkModeDescription": "Присоединиться может любой, у кого есть эта ссылка, регистрация не требуется.",
|
||
"userModeDescription": "Предоставьте доступ конкретному пользователю, у которого уже есть доступ к этому хосту. Если у него еще нет доступа, сначала предоставьте ему доступ к хосту или используйте ссылку. После предоставления доступа сессия отобразится на вкладке «Подключения» этого пользователя.",
|
||
"permissionLevel": {
|
||
"label": "Уровень доступа",
|
||
"readOnly": "Только для чтения",
|
||
"readOnlyDescription": "Можно наблюдать за сессией в прямом эфире, но нельзя печатать или взаимодействовать с ней.",
|
||
"readWrite": "Чтение-запись",
|
||
"readWriteDescription": "Может печатать и взаимодействовать с сессией так же, как и её владелец."
|
||
},
|
||
"expiryLabel": "Срок действия ссылки истекает",
|
||
"createLinkButton": "Создать ссылку",
|
||
"createShareButton": "Поделиться с пользователем",
|
||
"searchUsersPlaceholder": "Поиск пользователей...",
|
||
"noUsersFound": "Пользователи не найдены",
|
||
"linkCreated": "Ссылка для обмена создана",
|
||
"linkCopied": "Ссылка скопирована в буфер обмена",
|
||
"copyLink": "Скопировать ссылку",
|
||
"shareCreated": "Сессия была проведена совместно. Она отобразится на вкладке «Подключения».",
|
||
"shareFailed": "Не удалось создать общий ресурс.",
|
||
"userLacksHostAccess": "У этого пользователя пока нет доступа к данному хосту. Сначала предоставьте ему доступ к хосту или используйте ссылку.",
|
||
"activeShares": "Активные акции",
|
||
"noActiveShares": "В текущей торговой сессии нет активных акций.",
|
||
"revoke": "Отменить",
|
||
"revokeConfirmTitle": "Отозвать эту публикацию?",
|
||
"revokeConfirmDescription": "Любой, кто воспользуется этой ссылкой, немедленно потеряет к ней доступ.",
|
||
"revoked": "Акция аннулирована",
|
||
"revokeFailed": "Не удалось отозвать акцию.",
|
||
"joinCount": "{{count}} присоединиться",
|
||
"joinCount_other": "{{count}} присоединяется",
|
||
"expiresAt": "Срок действия истекает {{date}}",
|
||
"linkShareBadge": "Связь",
|
||
"userShareBadge": "Пользователь: {{username}}",
|
||
"loadSharesFailed": "Не удалось загрузить активные акции."
|
||
},
|
||
"guacamole": {
|
||
"connecting": "Подключение к сессии {{type}}...",
|
||
"connectionError": "Ошибка подключения",
|
||
"connectionFailed": "Подключение не удалось",
|
||
"failedToConnect": "Не удалось получить токен подключения",
|
||
"hostNotFound": "Хост не найден",
|
||
"noHostSelected": "Хост не выбран",
|
||
"reconnect": "Переподключиться",
|
||
"retry": "Повторить",
|
||
"guacdUnavailable": "Служба удалённого рабочего стола (guacd) недоступна. Убедитесь, что guacd запущен, доступен и правильно настроен в настройках администратора.",
|
||
"credentialPromptTitle": "Введите учетные данные RDP.",
|
||
"credentialPromptDescription": "На этом хосте настроен запрос учетных данных при подключении. Они используются только в течение этой сессии и не сохраняются.",
|
||
"connect": "Соединять",
|
||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||
"toolbar": {
|
||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||
"winL": "Win+L (Блокировка экрана)",
|
||
"winKey": "Клавиша Windows",
|
||
"ctrl": "Ctrl",
|
||
"alt": "Alt",
|
||
"shift": "Shift",
|
||
"win": "Win",
|
||
"stickyActive": "{{key}} (зафиксирована – кликните для отключения)",
|
||
"stickyInactive": "{{key}} (кликните для фиксации)",
|
||
"esc": "Escape",
|
||
"tab": "Tab",
|
||
"home": "Home",
|
||
"end": "End",
|
||
"pageUp": "Page Up",
|
||
"pageDown": "Page Down",
|
||
"arrowUp": "Arrow Up",
|
||
"arrowDown": "Arrow Down",
|
||
"arrowLeft": "Arrow Left",
|
||
"arrowRight": "Arrow Right",
|
||
"fnToggle": "Функциональные клавиши",
|
||
"reconnect": "Переподключить сеанс",
|
||
"collapse": "Свернуть панель",
|
||
"expand": "Развернуть панель",
|
||
"dragHandle": "Перетащите для перемещения",
|
||
"switchToTrackpad": "Переключитесь в режим трекпада (перетащите для перемещения курсора, коснитесь для щелчка).",
|
||
"switchToTouch": "Переключитесь в сенсорный режим (коснитесь непосредственно того места, куда хотите нажать)."
|
||
}
|
||
},
|
||
"terminal": {
|
||
"connect": "Подключиться к хосту",
|
||
"clear": "Очистить",
|
||
"paste": "Вставить",
|
||
"reconnect": "Переподключиться",
|
||
"connectionLost": "Соединение потеряно",
|
||
"connected": "Подключено",
|
||
"clipboardWriteFailed": "Не удалось скопировать в буфер обмена. Убедитесь, что страница загружена по HTTPS или с localhost.",
|
||
"clipboardReadFailed": "Не удалось прочитать из буфера обмена. Убедитесь, что предоставлены разрешения на доступ к буферу обмена.",
|
||
"clipboardHttpWarning": "Вставка требует HTTPS. Используйте Ctrl+Shift+V или обслуживайте Termix через HTTPS.",
|
||
"passwordPromptFillTitle": "Вставить сохраненный пароль в этот запрос?",
|
||
"unknownError": "Произошла неизвестная ошибка",
|
||
"websocketError": "Ошибка подключения WebSocket",
|
||
"connecting": "Подключение...",
|
||
"noHostSelected": "Не выбран хост",
|
||
"reconnecting": "Переподключение... ({{attempt}}/{{max}})",
|
||
"reconnected": "Успешно переподключено",
|
||
"tmuxSessionCreated": "Сессия tmux создана: {{name}}",
|
||
"tmuxSessionAttached": "Сессия tmux подключена: {{name}}",
|
||
"tmuxUnavailable": "tmux не установлен на удалённом хосте, переход на стандартную оболочку",
|
||
"tmuxSessionPickerTitle": "Сессии tmux",
|
||
"tmuxSessionPickerDesc": "Найдены существующие сессии tmux на этом хосте. Выберите одну для переподключения или создайте новую сессию.",
|
||
"tmuxWindows": "Окна",
|
||
"tmuxWindowCount": "{{count}} окно",
|
||
"tmuxAttached": "Подключённые клиенты",
|
||
"tmuxAttachedCount": "{{count}} подключено",
|
||
"tmuxLastActivity": "Последняя активность",
|
||
"tmuxTimeJustNow": "только что",
|
||
"tmuxTimeMinutes": "{{count}}м назад",
|
||
"tmuxTimeHours": "{{count}}ч назад",
|
||
"tmuxTimeDays": "{{count}}д назад",
|
||
"tmuxCreateNew": "Начать новую сессию",
|
||
"tmuxCopyHint": "Скорректируйте выделение и нажмите Enter, чтобы скопировать в буфер обмена",
|
||
"tmuxDetach": "Отключиться от сессии tmux",
|
||
"tmuxDetached": "Отключён от сессии tmux",
|
||
"maxReconnectAttemptsReached": "Достигнуто максимальное количество попыток переподключения",
|
||
"closeTab": "Закрыть",
|
||
"connectionTimeout": "Тайм-аут подключения",
|
||
"terminalTitle": "Терминал - {{host}}",
|
||
"terminalWithPath": "Терминал - {{host}}:{{path}}",
|
||
"runTitle": "Выполнение {{command}} - {{host}}",
|
||
"totpRequired": "Требуется двухфакторная аутентификация",
|
||
"totpCodeLabel": "Код подтверждения",
|
||
"totpVerify": "Подтвердить",
|
||
"mfaPromptRequired": "Требуется аутентификация",
|
||
"mfaPushRequired": "Требуется push-аутентификация",
|
||
"mfaMenuPlaceholder": "Введите свой ответ",
|
||
"mfaWaitingApproval": "Ожидание подтверждения на вашем устройстве...",
|
||
"mfaSendRequest": "Отправить запрос",
|
||
"warpgateAuthRequired": "Требуется аутентификация Warpgate",
|
||
"warpgateSecurityKey": "Ключ безопасности",
|
||
"warpgateAuthUrl": "URL аутентификации",
|
||
"warpgateOpenBrowser": "Открыть в браузере",
|
||
"warpgateContinue": "Аутентификация завершена",
|
||
"opksshAuthRequired": "Требуется аутентификация OPKSSH",
|
||
"opksshAuthDescription": "Завершите аутентификацию в браузере, чтобы продолжить. Сеанс будет действителен в течение 24 часов.",
|
||
"opksshOpenBrowser": "Открыть браузер для аутентификации",
|
||
"opksshWaitingForAuth": "Ожидание аутентификации в браузере...",
|
||
"opksshAuthenticating": "Обработка аутентификации...",
|
||
"opksshTimeout": "Время аутентификации истекло. Попробуйте снова.",
|
||
"opksshAuthFailed": "Аутентификация не удалась. Проверьте учётные данные и попробуйте снова.",
|
||
"opksshSignInWith": "Войти через {{provider}}",
|
||
"vaultAuthTitle": "Требуется вход в Vault",
|
||
"vaultAuthDescription": "Открыто окно для входа в HashiCorp Vault. Завершите вход там; подключение продолжится автоматически.",
|
||
"vaultAuthFailed": "Аутентификация Vault не удалась. Попробуйте снова.",
|
||
"vaultReopen": "Повторно открыть окно входа",
|
||
"sudoPasswordPopupTitle": "Вставить пароль?",
|
||
"linkDialogTitle": "Открыть ссылку",
|
||
"linkDialogOpen": "Открыть",
|
||
"linkDialogCopy": "Копировать",
|
||
"websocketAbnormalClose": "Соединение неожиданно закрыто. Возможно, проблема с обратным прокси или конфигурацией SSL. Проверьте журналы сервера.",
|
||
"connectionLogTitle": "Журнал подключения",
|
||
"connectionLogCopy": "Копировать журналы в буфер обмена",
|
||
"connectionLogEmpty": "Журналы подключения пока отсутствуют",
|
||
"connectionLogWaiting": "Ожидание журналов подключения...",
|
||
"connectionLogCopied": "Журналы подключения скопированы в буфер обмена",
|
||
"connectionLogCopyFailed": "Не удалось скопировать журналы в буфер обмена",
|
||
"connectionRejected": "Подключение отклонено сервером. Проверьте аутентификацию и сетевые настройки.",
|
||
"hostKeyRejected": "Проверка ключа хоста SSH отклонена. Подключение отменено.",
|
||
"sessionTakenOver": "Сеанс был открыт в другой вкладке. Переподключение...",
|
||
"split": {
|
||
"splitTab": "Разделить вкладку",
|
||
"addToSplit": "Добавить в разделённую область",
|
||
"removeFromSplit": "Убрать из разделённой области"
|
||
}
|
||
},
|
||
"fileManager": {
|
||
"noHostSelected": "Хост не выбран",
|
||
"initializingEditor": "Инициализация редактора...",
|
||
"file": "Файл",
|
||
"folder": "Папка",
|
||
"uploadFile": "Загрузить файл",
|
||
"downloadFile": "Скачать",
|
||
"extractArchive": "Извлечь архив",
|
||
"extractingArchive": "Распаковка {{name}}...",
|
||
"archiveExtractedSuccessfully": "{{name}} успешно распакован",
|
||
"extractFailed": "Ошибка распаковки",
|
||
"compressFile": "Сжать файл",
|
||
"compressFiles": "Сжать файлы",
|
||
"compressFilesDesc": "Сжать {{count}} элементов в архив",
|
||
"archiveName": "Имя архива",
|
||
"enterArchiveName": "Введите имя архива...",
|
||
"compressionFormat": "Формат сжатия",
|
||
"selectedFiles": "Выбранные файлы",
|
||
"andMoreFiles": "и ещё {{count}}...",
|
||
"compress": "Сжать",
|
||
"compressingFiles": "Сжатие {{count}} элементов в {{name}}...",
|
||
"filesCompressedSuccessfully": "{{name}} успешно создан",
|
||
"compressFailed": "Ошибка сжатия",
|
||
"edit": "Редактировать",
|
||
"preview": "Предпросмотр",
|
||
"previous": "Назад",
|
||
"next": "Далее",
|
||
"pageXOfY": "Страница {{current}} из {{total}}",
|
||
"zoomOut": "Уменьшить",
|
||
"zoomIn": "Увеличить",
|
||
"newFile": "Новый файл",
|
||
"newFolder": "Новая папка",
|
||
"rename": "Переименовать",
|
||
"uploading": "Загрузка...",
|
||
"uploadingFile": "Загрузка {{name}}...",
|
||
"fileName": "Имя файла",
|
||
"folderName": "Имя папки",
|
||
"fileUploadedSuccessfully": "Файл «{{name}}» успешно загружен",
|
||
"failedToUploadFile": "Не удалось загрузить файл",
|
||
"fileDownloadedSuccessfully": "Файл «{{name}}» успешно скачан",
|
||
"failedToDownloadFile": "Не удалось скачать файл",
|
||
"fileCreatedSuccessfully": "Файл «{{name}}» успешно создан",
|
||
"folderCreatedSuccessfully": "Папка «{{name}}» успешно создана",
|
||
"failedToCreateItem": "Не удалось создать элемент",
|
||
"operationFailed": "Операция {{operation}} не удалась для {{name}}: {{error}}",
|
||
"failedToResolveSymlink": "Не удалось разрешить символическую ссылку",
|
||
"itemsDeletedSuccessfully": "{{count}} элементов успешно удалено",
|
||
"failedToDeleteItems": "Не удалось удалить элементы",
|
||
"sudoPasswordRequired": "Требуется пароль администратора",
|
||
"enterSudoPassword": "Введите пароль sudo для продолжения операции",
|
||
"sudoPassword": "Пароль sudo",
|
||
"sudoOperationFailed": "Операция sudo не удалась",
|
||
"sudoAuthFailed": "Аутентификация sudo не удалась",
|
||
"dragFilesToUpload": "Перетащите файлы сюда для загрузки",
|
||
"emptyFolder": "Эта папка пуста",
|
||
"searchFiles": "Поиск файлов...",
|
||
"upload": "Загрузить",
|
||
"selectHostToStart": "Выберите хост для начала управления файлами",
|
||
"sshRequiredForFileManager": "Файловому менеджеру требуется SSH. У этого хоста SSH не включен.",
|
||
"failedToConnect": "Не удалось подключиться к SSH",
|
||
"failedToLoadDirectory": "Не удалось загрузить каталог",
|
||
"noSSHConnection": "Нет доступного SSH-подключения",
|
||
"copy": "Копировать",
|
||
"cut": "Вырезать",
|
||
"paste": "Вставить",
|
||
"copyPath": "Копировать путь",
|
||
"copyPaths": "Копировать пути",
|
||
"delete": "Удалить",
|
||
"properties": "Свойства",
|
||
"refresh": "Обновить",
|
||
"downloadFiles": "Скачать {{count}} файлов в браузер",
|
||
"copyFiles": "Копировать {{count}} элементов",
|
||
"cutFiles": "Вырезать {{count}} элементов",
|
||
"deleteFiles": "Удалить {{count}} элементов",
|
||
"filesCopiedToClipboard": "{{count}} элементов скопировано в буфер обмена",
|
||
"filesCutToClipboard": "{{count}} элементов вырезано в буфер обмена",
|
||
"pathCopiedToClipboard": "Путь скопирован в буфер обмена",
|
||
"pathsCopiedToClipboard": "{{count}} путей скопировано в буфер обмена",
|
||
"failedToCopyPath": "Не удалось скопировать путь в буфер обмена",
|
||
"copyFolderLink": "Скопировать ссылку на папку",
|
||
"copyCurrentFolderLink": "Скопировать ссылку на текущую папку",
|
||
"folderLinkCopied": "Ссылка на папку скопирована в буфер обмена",
|
||
"failedToCopyFolderLink": "Не удалось скопировать ссылку на папку",
|
||
"movedItems": "Перемещено {{count}} элементов",
|
||
"failedToDeleteItem": "Не удалось удалить элемент",
|
||
"itemRenamedSuccessfully": "{{type}} успешно переименован(а)",
|
||
"failedToRenameItem": "Не удалось переименовать элемент",
|
||
"download": "Скачать",
|
||
"openExternalEditor": "Открыть во внешнем редакторе",
|
||
"chooseExternalEditor": "Выбрать внешний редактор",
|
||
"externalEditorSelected": "Внешний редактор выбран",
|
||
"externalEditorDesktopOnly": "Внешний редактор доступен только в настольном приложении",
|
||
"externalEditorOpened": "Открыт во внешнем редакторе. Сохранение в нём загрузит изменения обратно на сервер.",
|
||
"failedToOpenExternalEditor": "Не удалось открыть внешний редактор",
|
||
"failedToSelectExternalEditor": "Не удалось выбрать внешний редактор",
|
||
"permissions": "Права доступа",
|
||
"size": "Размер",
|
||
"modified": "Изменён",
|
||
"path": "Путь",
|
||
"confirmDelete": "Вы уверены, что хотите удалить {{name}}?",
|
||
"permissionDenied": "Доступ запрещён",
|
||
"serverError": "Ошибка сервера",
|
||
"fileSavedSuccessfully": "Файл успешно сохранён",
|
||
"failedToSaveFile": "Не удалось сохранить файл",
|
||
"confirmDeleteSingleItem": "Вы уверены, что хотите безвозвратно удалить \"{{name}}\"?",
|
||
"confirmDeleteMultipleItems": "Вы уверены, что хотите безвозвратно удалить {{count}} элементов?",
|
||
"confirmDeleteMultipleItemsWithFolders": "Вы уверены, что хотите безвозвратно удалить {{count}} элементов? Включая папки и их содержимое.",
|
||
"confirmDeleteFolder": "Вы уверены, что хотите безвозвратно удалить папку \"{{name}}\" и всё её содержимое?",
|
||
"permanentDeleteWarning": "Это действие необратимо. Элемент(ы) будут безвозвратно удалены с сервера.",
|
||
"recent": "Недавние",
|
||
"pinned": "Закреплённые",
|
||
"folderShortcuts": "Ярлыки папок",
|
||
"failedToReconnectSSH": "Не удалось переподключить SSH-сессию",
|
||
"openTerminalHere": "Открыть терминал здесь",
|
||
"run": "Запустить",
|
||
"openTerminalInFolder": "Открыть терминал в этой папке",
|
||
"openTerminalInFileLocation": "Открыть терминал в расположении файла",
|
||
"runningFile": "Выполняется - {{file}}",
|
||
"onlyRunExecutableFiles": "Можно запускать только исполняемые файлы",
|
||
"directories": "Каталоги",
|
||
"removedFromRecentFiles": "Удалено \"{{name}}\" из недавних файлов",
|
||
"removeFailed": "Не удалось удалить",
|
||
"unpinnedSuccessfully": "Успешно откреплено \"{{name}}\"",
|
||
"unpinFailed": "Не удалось открепить",
|
||
"removedShortcut": "Ярлык \"{{name}}\" удалён",
|
||
"removeShortcutFailed": "Не удалось удалить ярлык",
|
||
"clearedAllRecentFiles": "Очищен список недавних файлов",
|
||
"clearFailed": "Очистка не удалась",
|
||
"removeFromRecentFiles": "Удалить из списка недавних файлов",
|
||
"clearAllRecentFiles": "Очистить список недавних файлов",
|
||
"unpinFile": "Открепить файл",
|
||
"removeShortcut": "Удалить ярлык",
|
||
"pinFile": "Закрепить файл",
|
||
"addToShortcuts": "Добавить в ярлыки",
|
||
"pasteFailed": "Вставка не удалась",
|
||
"noUndoableActions": "Нет действий для отмены",
|
||
"undoCopySuccess": "Отмена копирования: удалено {{count}} скопированных файлов",
|
||
"undoCopyFailedDelete": "Отмена не удалась: не удалось удалить скопированные файлы",
|
||
"undoCopyFailedNoInfo": "Отмена не удалась: не найдена информация о скопированных файлах",
|
||
"undoMoveSuccess": "Отмена перемещения: {{count}} файлов возвращено в исходное расположение",
|
||
"undoMoveFailedMove": "Отмена не удалась: не удалось вернуть файлы",
|
||
"undoMoveFailedNoInfo": "Отмена не удалась: не найдена информация о перемещённых файлах",
|
||
"undoDeleteNotSupported": "Операцию удаления нельзя отменить: файлы навсегда удалены с сервера",
|
||
"undoTypeNotSupported": "Неподдерживаемый тип операции отмены",
|
||
"undoOperationFailed": "Операция отмены не удалась",
|
||
"unknownError": "Неизвестная ошибка",
|
||
"confirm": "Подтвердить",
|
||
"find": "Поиск...",
|
||
"replace": "Заменить",
|
||
"downloadInstead": "Скачать вместо",
|
||
"keyboardShortcuts": "Горячие клавиши",
|
||
"searchAndReplace": "Поиск и замена",
|
||
"editing": "Редактирование",
|
||
"search": "Поиск",
|
||
"findNext": "Найти далее",
|
||
"findPrevious": "Найти предыдущий",
|
||
"save": "Сохранить",
|
||
"selectAll": "Выделить всё",
|
||
"undo": "Отменить",
|
||
"redo": "Повторить",
|
||
"moveLineUp": "Переместить строку вверх",
|
||
"moveLineDown": "Переместить строку вниз",
|
||
"toggleComment": "Переключить комментарий",
|
||
"autoComplete": "Автодополнение",
|
||
"imageLoadError": "Не удалось загрузить изображение",
|
||
"startTyping": "Начните вводить...",
|
||
"unknownSize": "Неизвестный размер",
|
||
"fileIsEmpty": "Файл пуст",
|
||
"largeFileWarning": "Предупреждение о большом файле",
|
||
"largeFileWarningDesc": "Размер этого файла {{size}}, что может вызвать проблемы с производительностью при открытии в текстовом виде.",
|
||
"fileNotFoundAndRemoved": "Файл \"{{name}}\" не найден и был удалён из недавних/закреплённых файлов",
|
||
"failedToLoadFile": "Не удалось загрузить файл: {{error}}",
|
||
"serverErrorOccurred": "Произошла ошибка сервера. Попробуйте позже.",
|
||
"autoSaveFailed": "Автосохранение не удалось",
|
||
"fileAutoSaved": "Файл автосохранён",
|
||
"moveFileFailed": "Не удалось переместить {{name}}",
|
||
"moveOperationFailed": "Операция перемещения не удалась",
|
||
"canOnlyCompareFiles": "Можно сравнивать только два файла",
|
||
"comparingFiles": "Сравнение файлов: {{file1}} и {{file2}}",
|
||
"dragFailed": "Операция перетаскивания не удалась",
|
||
"filePinnedSuccessfully": "Файл \"{{name}}\" успешно закреплён",
|
||
"pinFileFailed": "Не удалось закрепить файл",
|
||
"fileUnpinnedSuccessfully": "Файл \"{{name}}\" успешно откреплён",
|
||
"unpinFileFailed": "Не удалось открепить файл",
|
||
"shortcutAddedSuccessfully": "Ярлык папки \"{{name}}\" успешно добавлен",
|
||
"addShortcutFailed": "Не удалось добавить ярлык",
|
||
"operationCompletedSuccessfully": "{{operation}} {{count}} элементов успешно",
|
||
"operationCompleted": "{{operation}} {{count}} элементов",
|
||
"downloadFileSuccess": "Файл {{name}} успешно загружен",
|
||
"downloadFileFailed": "Не удалось загрузить",
|
||
"moveTo": "Переместить в {{name}}",
|
||
"diffCompareWith": "Сравнить с {{name}}",
|
||
"dragOutsideToDownload": "Перетащите за пределы окна для загрузки ({{count}} файлов)",
|
||
"newFolderDefault": "Новая папка",
|
||
"newFileDefault": "Новый файл.txt",
|
||
"successfullyMovedItems": "Успешно перемещено {{count}} элементов в {{target}}",
|
||
"move": "Переместить",
|
||
"searchInFile": "Поиск в файле (Ctrl+F)",
|
||
"showKeyboardShortcuts": "Показать сочетания клавиш",
|
||
"decreaseFontSize": "Уменьшить размер шрифта",
|
||
"increaseFontSize": "Увеличить размер шрифта",
|
||
"startWritingMarkdown": "Начните писать Markdown-контент...",
|
||
"loadingFileComparison": "Загрузка сравнения файлов...",
|
||
"reload": "Перезагрузить",
|
||
"compare": "Сравнить",
|
||
"sideBySide": "Бок о бок",
|
||
"inline": "Встроенный",
|
||
"fileComparison": "Сравнение файлов: {{file1}} и {{file2}}",
|
||
"fileTooLarge": "Файл слишком большой: {{error}}",
|
||
"sshConnectionFailed": "Ошибка SSH-подключения. Проверьте подключение к {{name}} ({{ip}}:{{port}})",
|
||
"loadFileFailed": "Не удалось загрузить файл: {{error}}",
|
||
"connecting": "Подключение...",
|
||
"connectedSuccessfully": "Подключено успешно",
|
||
"totpVerificationFailed": "Ошибка проверки TOTP",
|
||
"warpgateVerificationFailed": "Ошибка аутентификации Warpgate",
|
||
"authenticationFailed": "Ошибка аутентификации",
|
||
"incorrectPassphrase": "Неверная парольная фраза. Попробуйте еще раз.",
|
||
"verificationCodePrompt": "Код подтверждения:",
|
||
"changePermissions": "Изменить права доступа",
|
||
"currentPermissions": "Текущие права доступа",
|
||
"owner": "Владелец",
|
||
"group": "Группа",
|
||
"others": "Остальные",
|
||
"read": "Чтение",
|
||
"write": "Запись",
|
||
"execute": "Выполнение",
|
||
"permissionsChangedSuccessfully": "Права доступа успешно изменены",
|
||
"failedToChangePermissions": "Не удалось изменить права доступа",
|
||
"name": "Имя",
|
||
"sortByName": "По имени",
|
||
"sortByDate": "По дате изменения",
|
||
"sortBySize": "По размеру",
|
||
"ascending": "По возрастанию",
|
||
"descending": "По убыванию",
|
||
"root": "Корень",
|
||
"new": "Создать",
|
||
"sortBy": "Сортировка",
|
||
"items": "Элементов",
|
||
"selected": "Выбрано",
|
||
"editor": "Редактор",
|
||
"octal": "Восьмеричный",
|
||
"storage": "Хранилище",
|
||
"disk": "Диск",
|
||
"used": "Занято",
|
||
"of": "из",
|
||
"toggleSidebar": "Переключить боковую панель",
|
||
"cannotLoadPdf": "Не удаётся загрузить PDF",
|
||
"pdfLoadError": "Ошибка при загрузке этого PDF-файла.",
|
||
"loadingPdf": "Загрузка PDF...",
|
||
"loadingPage": "Загрузка страницы..."
|
||
},
|
||
"transfer": {
|
||
"copyToHost": "Копировать на хост…",
|
||
"moveToHost": "Переместить на хост…",
|
||
"copyItemsToHost": "Копировать {{count}} элементов на хост…",
|
||
"moveItemsToHost": "Переместить {{count}} элементов на хост…",
|
||
"noHostsConnected": "Нет других доступных хостов с файловым менеджером.",
|
||
"noHostsConnectedHint": "Добавьте другой SSH-хост с включенным Файловым Менеджером в Менеджере Хостов.",
|
||
"selectDestinationHost": "Выберите целевой хост",
|
||
"destinationPath": "Путь назначения",
|
||
"recentDestinations": "Недавние назначения",
|
||
"collapseRecentDestinations": "Свернуть недавние назначения",
|
||
"expandRecentDestinations": "Развернуть недавние назначения",
|
||
"browseFolders": "Обзор папок назначения",
|
||
"browseDestination": "Обзор или ввод пути",
|
||
"confirmCopy": "Копировать",
|
||
"confirmMove": "Переместить",
|
||
"transferring": "Передача…",
|
||
"compressing": "Сжатие…",
|
||
"extracting": "Извлечение…",
|
||
"transferringItems": "Передача {{current}} из {{total}} элементов…",
|
||
"transferSuccess": "Передача завершена",
|
||
"transferError": "Ошибка передачи",
|
||
"transferPartial": "Передача завершена с {{count}} ошибками",
|
||
"transferPartialHint": "Не удалось передать: {{paths}}",
|
||
"itemsSummary": "{{count}} элементов",
|
||
"destMustBeDirectory": "Для передачи нескольких элементов путь назначения должен быть папкой",
|
||
"selectThisFolder": "Выбрать эту папку",
|
||
"browsePathWillBeCreated": "Эта папка ещё не существует. Она будет создана при запуске передачи.",
|
||
"browsePathError": "Не удалось открыть этот путь на целевом хосте.",
|
||
"goUp": "Вверх",
|
||
"copyFolderToHost": "Копировать папку на хост…",
|
||
"moveFolderToHost": "Переместить папку на хост…",
|
||
"hostReady": "Готов",
|
||
"hostConnecting": "Подключение…",
|
||
"hostDisconnected": "Не подключен",
|
||
"hostAuthRequired": "Требуется аутентификация — сначала откройте Файловый Менеджер на этом хосте",
|
||
"hostConnectionFailed": "Ошибка подключения",
|
||
"metricsTitle": "Время передачи",
|
||
"metricsPrepare": "Подготовка назначения: {{duration}}",
|
||
"metricsCompress": "Сжатие на источнике: {{duration}}",
|
||
"metricsHopSourceRead": "Источник → сервер: {{throughput}}",
|
||
"metricsHopDestSftpWrite": "Сервер → назначение (SFTP): {{throughput}}",
|
||
"metricsHopDestLocalWrite": "Сервер → назначение (локально): {{throughput}}",
|
||
"metricsTransfer": "Сквозной: {{throughput}} ({{duration}})",
|
||
"metricsExtract": "Распаковка на назначении: {{duration}}",
|
||
"metricsSourceDelete": "Удаление с источника: {{duration}}",
|
||
"metricsTotal": "Всего: {{duration}}",
|
||
"progressCompressing": "Сжатие на исходном хосте…",
|
||
"progressExtracting": "Распаковка на назначении…",
|
||
"progressTransferring": "Передача данных…",
|
||
"progressReconnecting": "Переподключение…",
|
||
"parallelSegmentsLabel": "Параллельные каналы передачи",
|
||
"parallelSegmentsOption": "{{count}} каналов",
|
||
"parallelSegmentsHint": "Большие файлы разбиваются на фрагменты по 256 МБ. Несколько каналов используют отдельные соединения (как при запуске нескольких передач) для повышения общей пропускной способности.",
|
||
"progressTotalSpeed": "{{speed}} всего ({{lanes}} каналов)",
|
||
"progressTransferringItems": "Передача файлов ({{current}} из {{total}})…",
|
||
"progressBytes": "{{transferred}} / {{total}}",
|
||
"progressItems": "{{current}} / {{total}} файлов",
|
||
"sourceNotDeletedPartial": "Файлы источника сохранены (частичная передача)",
|
||
"jumpHostLimitation": "Оба хоста должны быть доступны с сервера Termix. Прямая маршрутизация между хостами не поддерживается.",
|
||
"cancel": "Отмена",
|
||
"methodLabel": "Метод передачи",
|
||
"methodAuto": "Авто",
|
||
"methodTar": "Архив Tar",
|
||
"methodItemSftp": "Пофайловый SFTP",
|
||
"methodAutoHint": "Выбирает tar или пофайловый SFTP в зависимости от количества файлов, размера и сжимаемости. Одиночные файлы всегда передаются потоковым SFTP.",
|
||
"methodTarHint": "Сжатие на источнике, передача одного архива, распаковка на назначении. Требует tar на обоих Unix-хостах.",
|
||
"methodItemSftpHint": "Передача каждого файла отдельно по SFTP. Работает на всех хостах, включая Windows.",
|
||
"methodPreviewLoading": "Расчёт метода передачи…",
|
||
"methodPreviewError": "Не удалось предварительно определить метод передачи. Сервер выберет метод при запуске.",
|
||
"methodPreviewWillUseTar": "Будет использован: Архив Tar",
|
||
"methodPreviewWillUseItemSftp": "Будет использован: Пофайловый SFTP",
|
||
"methodPreviewScanSummary": "{{fileCount}} файлов, {{totalSize}} всего (просканировано на исходном хосте).",
|
||
"methodItemSftpLimitation": "Каждый файл использует один и тот же поток SFTP, как при копировании одного файла, один за другим. Прогресс объединяется по всем файлам, поэтому индикатор движется медленно при больших файлах.",
|
||
"methodReason": {
|
||
"user_item_sftp": "Вы выбрали пофайловый SFTP.",
|
||
"user_tar": "Вы выбрали tar-архив.",
|
||
"tar_unavailable": "Tar недоступен на одном или обоих хостах — вместо этого будет использоваться пофайловый SFTP.",
|
||
"windows_host": "Участвует хост под Windows — tar не используется.",
|
||
"auto_multi_large": "Авто: несколько файлов, включая большой файл ({{largestSize}}) со сжимаемыми данными — tar объединяет в одну передачу.",
|
||
"auto_single_large_in_archive": "Авто: один большой файл ({{largestSize}}) в этом наборе — пофайловый SFTP.",
|
||
"auto_many_incompressible": "Авто: в основном несжимаемые данные — пофайловый SFTP.",
|
||
"auto_many_files": "Авто: много файлов ({{fileCount}}) — tar сокращает накладные расходы на каждый файл.",
|
||
"auto_default": "Авто: пофайловый SFTP для этого набора."
|
||
},
|
||
"progressCancel": "Отмена",
|
||
"progressCancelling": "Отмена…",
|
||
"progressStalled": "Зависло",
|
||
"resumedHint": "Переподключено к активной передаче, запущенной в другом окне.",
|
||
"transferCancelled": "Передача отменена",
|
||
"transferCancelledCopyHint": "Частично переданные файлы могут остаться в месте назначения.",
|
||
"transferCancelledMoveHint": "Частично переданные файлы могут остаться в месте назначения. Исходные файлы не были удалены.",
|
||
"cleanupDestFiles": "Очистить место назначения",
|
||
"cleanupDestFilesSuccess": "Частично переданные файлы удалены из места назначения",
|
||
"cleanupDestFilesPartial": "Некоторые частично переданные файлы не удалось удалить",
|
||
"cleanupDestFilesNothing": "В месте назначения нечего очищать",
|
||
"cleanupDestFilesError": "Очистка не удалась",
|
||
"retryTransfer": "Повторить",
|
||
"retryTransferError": "Повтор не удался",
|
||
"transferFailedRetryHint": "Частичные данные сохранены в месте назначения. Повтор возобновится, когда соединение восстановится."
|
||
},
|
||
"tunnels": {
|
||
"noSshTunnels": "Нет SSH-туннелей",
|
||
"createFirstTunnelMessage": "Вы ещё не создали ни одного SSH-туннеля. Настройте туннельные соединения в Менеджере хостов, чтобы начать.",
|
||
"connected": "Подключено",
|
||
"disconnected": "Отключено",
|
||
"connecting": "Подключение...",
|
||
"error": "Ошибка",
|
||
"canceling": "Отмена...",
|
||
"connect": "Подключить",
|
||
"disconnect": "Отключить",
|
||
"cancel": "Отмена",
|
||
"port": "Порт",
|
||
"localPort": "Локальный порт",
|
||
"remotePort": "Удаленный порт",
|
||
"currentHostPort": "Порт текущего хоста",
|
||
"endpointPort": "Порт конечной точки",
|
||
"bindIp": "Локальный IP",
|
||
"endpointSshConfig": "Конфигурация SSH конечной точки",
|
||
"endpointSshHost": "Хост SSH конечной точки",
|
||
"endpointSshHostPlaceholder": "Выберите настроенный хост",
|
||
"endpointSshHostRequired": "Выберите хост SSH конечной точки для каждого клиентского туннеля.",
|
||
"attempt": "Попытка {{current}} из {{max}}",
|
||
"nextRetryIn": "Следующая попытка через {{seconds}} сек.",
|
||
"clientTunnels": "Клиентские туннели",
|
||
"clientTunnel": "Клиентский туннель",
|
||
"addClientTunnel": "Добавить клиентский туннель",
|
||
"noClientTunnels": "На этом рабочем столе не настроено ни одного клиентского туннеля.",
|
||
"tunnelName": "Имя туннеля",
|
||
"remoteHost": "Удаленный хост",
|
||
"autoStart": "Автозапуск",
|
||
"clientAutoStartDesc": "Запускается при открытии этого клиента рабочего стола и остается подключенным.",
|
||
"clientManualStartDesc": "Используйте «Запустить» и «Остановить» в этой строке. Termix не будет запускать его автоматически.",
|
||
"clientRemoteServerNote": "Удаленная переадресация может потребовать AllowTcpForwarding и GatewayPorts на конечном SSH-сервере. Удаленный порт закрывается при отключении этого рабочего стола.",
|
||
"clientTunnelStarted": "Клиентский туннель запущен",
|
||
"clientTunnelStopped": "Клиентский туннель остановлен",
|
||
"tunnelTestSucceeded": "Проверка туннеля успешна",
|
||
"tunnelTestFailed": "Проверка туннеля не удалась",
|
||
"localSaved": "Клиентские туннели сохранены",
|
||
"localSaveError": "Не удалось сохранить локальные клиентские туннели",
|
||
"invalidBindIp": "Локальный IP-адрес должен быть действительным адресом IPv4.",
|
||
"invalidLocalTargetIp": "Локальный целевой IP-адрес должен быть действительным адресом IPv4.",
|
||
"invalidLocalPort": "Локальный порт должен быть в диапазоне от 1 до 65535.",
|
||
"invalidRemotePort": "Удаленный порт должен быть в диапазоне от 1 до 65535.",
|
||
"invalidLocalTargetPort": "Локальный целевой порт должен быть в диапазоне от 1 до 65535.",
|
||
"invalidEndpointPort": "Порт конечной точки должен быть в диапазоне от 1 до 65535.",
|
||
"duplicateAutoStartBind": "Только один клиентский туннель с автозапуском может использовать {{bind}}.",
|
||
"manualControlError": "Не удалось обновить состояние туннеля.",
|
||
"active": "Активные",
|
||
"start": "Запустить",
|
||
"stop": "Остановить",
|
||
"test": "Проверить",
|
||
"type": "Тип туннеля",
|
||
"typeLocal": "Локальный (-L)",
|
||
"typeRemote": "Удалённый (-R)",
|
||
"typeDynamic": "Динамический (-D)",
|
||
"typeServerLocalDesc": "С текущего хоста на конечную точку.",
|
||
"typeServerRemoteDesc": "С конечной точки обратно на текущий хост.",
|
||
"typeClientLocalDesc": "С локального компьютера на конечную точку.",
|
||
"typeClientRemoteDesc": "С конечной точки обратно на локальный компьютер.",
|
||
"typeClientDynamicDesc": "SOCKS на локальном компьютере.",
|
||
"typeDynamicDesc": "Проброс трафика SOCKS5 CONNECT через SSH",
|
||
"forwardDescriptionServerLocal": "Текущий хост {{sourcePort}} → конечная точка {{endpointPort}}.",
|
||
"forwardDescriptionServerRemote": "Конечная точка {{endpointPort}} → текущий хост {{sourcePort}}.",
|
||
"forwardDescriptionServerDynamic": "SOCKS на текущем хосте {{sourcePort}}.",
|
||
"forwardDescriptionClientLocal": "Локальный {{sourcePort}} → удалённый {{endpointPort}}.",
|
||
"forwardDescriptionClientRemote": "Удалённый {{sourcePort}} → локальный {{endpointPort}}.",
|
||
"forwardDescriptionClientDynamic": "SOCKS на локальном порту {{sourcePort}}.",
|
||
"summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}",
|
||
"summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}",
|
||
"summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS через {{endpoint}}",
|
||
"autoNameClientLocal": "Локальный {{localPort}} → {{endpoint}} {{remotePort}}",
|
||
"autoNameClientRemote": "{{endpoint}} {{remotePort}} → локальный {{localPort}}",
|
||
"autoNameClientDynamic": "SOCKS {{localPort}} через {{endpoint}}",
|
||
"route": "Маршрут:",
|
||
"lastStarted": "Последний запуск",
|
||
"lastTested": "Последняя проверка",
|
||
"lastError": "Последняя ошибка",
|
||
"maxRetries": "Макс. попыток",
|
||
"maxRetriesDescription": "Максимальное количество повторных попыток.",
|
||
"retryInterval": "Интервал повтора (секунд)",
|
||
"retryIntervalDescription": "Время ожидания между повторными попытками.",
|
||
"local": "Локальный",
|
||
"remote": "Удалённый",
|
||
"destination": "Назначение",
|
||
"host": "Хост",
|
||
"mode": "Режим",
|
||
"noHostSelected": "Хост не выбран",
|
||
"working": "Выполняется..."
|
||
},
|
||
"cardGrid": {
|
||
"dragToMove": "Перетащите для перемещения",
|
||
"dragToResize": "Перетащите для изменения размера",
|
||
"changeWidth": "Изменить ширину",
|
||
"removeCard": "Удалить {{label}}",
|
||
"addCard": "Добавить",
|
||
"columns": "Столбцы",
|
||
"empty": "Нет карточек. Используйте кнопку «Добавить» ниже, чтобы разместить карточки."
|
||
},
|
||
"hostMetrics": {
|
||
"cpu": "ЦП",
|
||
"memory": "Память",
|
||
"disk": "Диск",
|
||
"network": "Сеть",
|
||
"uptime": "Время работы",
|
||
"processes": "Процессы",
|
||
"available": "Доступно",
|
||
"free": "Свободно",
|
||
"connecting": "Подключение...",
|
||
"connectionFailed": "Не удалось подключиться к серверу",
|
||
"naCpus": "Н/Д ЦП",
|
||
"cpuCores_one": "{{count}} ядро",
|
||
"cpuCores_other": "{{count}} ядер",
|
||
"cpuUsage": "Использование ЦП",
|
||
"memoryUsage": "Использование памяти",
|
||
"diskUsage": "Использование диска",
|
||
"temperature": "Температура",
|
||
"highestTemperature": "Максимальная температура",
|
||
"failedToFetchHostConfig": "Не удалось получить конфигурацию хоста",
|
||
"serverOffline": "Сервер недоступен",
|
||
"cannotFetchMetrics": "Не удалось загрузить метрики с недоступного сервера",
|
||
"totpFailed": "Проверка TOTP не пройдена",
|
||
"noneAuthNotSupported": "Host Metrics не поддерживает тип аутентификации 'none'.",
|
||
"noHostSelected": "Хост не выбран",
|
||
"load": "Нагрузка",
|
||
"systemInfo": "Информация о системе",
|
||
"hostname": "Имя хоста",
|
||
"operatingSystem": "Операционная система",
|
||
"kernel": "Ядро",
|
||
"seconds": "секунды",
|
||
"networkInterfaces": "Сетевые интерфейсы",
|
||
"noInterfacesFound": "Сетевые интерфейсы не найдены",
|
||
"noProcessesFound": "Процессы не найдены",
|
||
"processesTotal": "всего",
|
||
"processesRunning": "выполняется",
|
||
"loginStats": "Статистика входов SSH",
|
||
"noRecentLoginData": "Нет данных о недавних входах",
|
||
"executingQuickAction": "Выполняется {{name}}...",
|
||
"quickActionSuccess": "{{name}} успешно завершено",
|
||
"quickActionFailed": "{{name}} не удалось",
|
||
"quickActionError": "Не удалось выполнить {{name}}",
|
||
"ports": {
|
||
"title": "Прослушиваемые порты",
|
||
"protocol": "Протокол",
|
||
"port": "Порт",
|
||
"address": "Адрес",
|
||
"process": "Процесс",
|
||
"search": "Поиск портов...",
|
||
"allProtocols": "Все",
|
||
"noData": "Нет данных о прослушиваемых портах"
|
||
},
|
||
"firewall": {
|
||
"title": "Брандмауэр",
|
||
"inactive": "Неактивен",
|
||
"policy": "Политика",
|
||
"rules": "правила",
|
||
"noRules": "Нет правил в этой цепочке",
|
||
"noData": "Нет данных о брандмауэре",
|
||
"action": "Действие",
|
||
"protocol": "Протокол",
|
||
"port": "Порт",
|
||
"source": "Источник",
|
||
"anywhere": "Любое",
|
||
"chains": "цепочки"
|
||
},
|
||
"loadAvg": "Средняя нагрузка",
|
||
"swap": "Своп",
|
||
"architecture": "Архитектура",
|
||
"refresh": "Обновить",
|
||
"retry": "Повторить",
|
||
"customize": "Настроить макет",
|
||
"reset": "Сбросить",
|
||
"tabLive": "Онлайн",
|
||
"editModeInstructions": "Перетаскивайте карточки для изменения порядка, перетаскивайте нижний край для изменения размера и используйте кнопку ширины, чтобы изменить занимаемое пространство. Добавляйте или удаляйте карточки ниже.",
|
||
"managers": {
|
||
"services": "Службы",
|
||
"processInspector": "Инспектор процессов",
|
||
"logViewer": "Просмотр журналов",
|
||
"cron": "Задания Cron",
|
||
"packages": "Пакеты",
|
||
"ssl": "SSL-сертификаты",
|
||
"firewall": "Брандмауэр",
|
||
"users": "Пользователи и разрешения",
|
||
"healthCheck": "Проверки состояния",
|
||
"diskBreakdown": "Разбивка дисков",
|
||
"systemdTimers": "Таймеры",
|
||
"topMemory": "Топ по памяти",
|
||
"noData": "Нет данных",
|
||
"sudoHint": "Установите пароль sudo для этого хоста в редакторе хостов, чтобы включить привилегированные действия.",
|
||
"filter": "Фильтр...",
|
||
"start": "Запустить",
|
||
"stop": "Остановить",
|
||
"restart": "Перезапустить",
|
||
"actionDone": "{{name}} обновлено",
|
||
"actionFailed": "Действие не удалось",
|
||
"signalSent": "Сигнал отправлен PID {{pid}}",
|
||
"killHint": "Нажмите: завершить (SIGTERM). Правый клик: принудительно завершить (SIGKILL).",
|
||
"working": "Выполняется...",
|
||
"update": "Обновить",
|
||
"upgradeAll": "Обновить всё",
|
||
"allUpToDate": "Всё актуально",
|
||
"save": "Сохранить",
|
||
"command": "Команда",
|
||
"enabled": "Включено",
|
||
"cronSaved": "Crontab обновлён",
|
||
"clients": "Клиенты",
|
||
"dryRun": "Пробный запуск",
|
||
"renew": "Продлить",
|
||
"noAcmeClient": "На этом хосте не найден ACME-клиент (certbot или acme.sh).",
|
||
"addInputRule": "Добавить правило INPUT",
|
||
"firewallWarning": "Изменения действуют только до перезагрузки, пока не сохранены. Будьте осторожны, чтобы не заблокировать себе доступ.",
|
||
"ruleApplied": "Правило применено",
|
||
"invalidPort": "Введите допустимый порт (1–65535)",
|
||
"newUsername": "Новое имя пользователя",
|
||
"addUser": "Добавить",
|
||
"deleteUser": "Удалить пользователя",
|
||
"noHealthChecks": "Проверки работоспособности ещё не настроены.",
|
||
"follow": "Следить",
|
||
"noLogData": "Нет данных журнала.",
|
||
"tree": "Дерево",
|
||
"enableDisable": "Включить/отключить при загрузке",
|
||
"grantSudo": "Предоставить sudo",
|
||
"revokeSudo": "Отозвать sudo",
|
||
"sslIssueCert": "Выпустить сертификат",
|
||
"sslExpired": "Истёк",
|
||
"sslInDays": "через {{days}}д",
|
||
"sslNeedDomain": "Введите хотя бы один домен",
|
||
"sslIssued": "Сертификат выпущен",
|
||
"sslDomainsPlaceholder": "example.com, www.example.com",
|
||
"sslHttpStandalone": "HTTP (автономный)",
|
||
"sslHttpWebroot": "HTTP (webroot)",
|
||
"sslDns": "DNS",
|
||
"sslDnsProvider": "DNS-провайдер (например, cloudflare)",
|
||
"sslIssueHint": "Учетные данные DNS-провайдера должны быть уже настроены на хосте.",
|
||
"sslRevoke": "Отозвать сертификат",
|
||
"sslRevoked": "Сертификат отозван",
|
||
"sslRevokeConfirm": "Отозвать и удалить сертификат \"{{name}}\"? Это действие нельзя отменить.",
|
||
"healthRun": "Запустить",
|
||
"healthName": "Название",
|
||
"healthTarget": "Хост / адрес",
|
||
"healthAddCheck": "Добавить проверку",
|
||
"healthSaved": "Проверки работоспособности сохранены",
|
||
"healthMissingFields": "Для каждой проверки нужны название и цель",
|
||
"logFile": "Файл",
|
||
"logUnit": "Юнит",
|
||
"logCustomPath": "Произвольный путь в /var/log (необязательно)",
|
||
"logGrep": "Фильтр строк...",
|
||
"firewallPersist": "Сохранить правила",
|
||
"firewallPersisted": "Правила брандмауэра сохранены",
|
||
"wireguard": "WireGuard",
|
||
"tailscale": "Tailscale",
|
||
"wgNotInstalled": "WireGuard не установлен на этом хосте",
|
||
"wgNoInterfaces": "Не настроено ни одного интерфейса WireGuard",
|
||
"wgInterfaceUp": "Поднять",
|
||
"wgInterfaceDown": "Отключить",
|
||
"wgBringingUp": "Поднимается {{name}}...",
|
||
"wgBringingDown": "Отключается {{name}}...",
|
||
"wgInterfaceUpDone": "{{name}} поднят",
|
||
"wgInterfaceDownDone": "{{name}} отключен",
|
||
"wgListenPort": "Порт",
|
||
"wgPublicKey": "Открытый ключ",
|
||
"wgEndpoint": "Конечная точка",
|
||
"wgAllowedIPs": "Разрешенные IP-адреса",
|
||
"wgLastHandshake": "Последнее рукопожатие",
|
||
"wgHandshakeNever": "Никогда",
|
||
"wgTransfer": "Передано",
|
||
"tsNotInstalled": "Tailscale не установлен на этом хосте",
|
||
"tsRunning": "Запущен",
|
||
"tsStopped": "Остановлен",
|
||
"tsEnable": "Подключить",
|
||
"tsDisable": "Отключить",
|
||
"tsEnabling": "Подключение к Tailscale...",
|
||
"tsDisabling": "Отключение от Tailscale...",
|
||
"tsEnabled": "Tailscale подключён",
|
||
"tsDisabled": "Tailscale отключён",
|
||
"tsIPs": "IP-адреса Tailscale",
|
||
"tsPeers": "Пиры",
|
||
"tsOnline": "Онлайн",
|
||
"tsOffline": "Офлайн",
|
||
"tsExitNode": "Выходной узел",
|
||
"tsExitNodeActive": "Выходной узел активен",
|
||
"tsHostname": "Имя хоста"
|
||
}
|
||
},
|
||
"auth": {
|
||
"tagline": "Собственное управление SSH и удалёнными рабочими столами",
|
||
"loginTitle": "С возвращением",
|
||
"registerTitle": "Создать учётную запись",
|
||
"forgotPassword": "Забыли пароль?",
|
||
"rememberMe": "Запомнить устройство на 30 дней (включая TOTP)",
|
||
"noAccount": "Нет учётной записи?",
|
||
"hasAccount": "Уже есть учётная запись?",
|
||
"twoFactorAuth": "Двухфакторная аутентификация",
|
||
"enterCode": "Введите проверочный код",
|
||
"backupCode": "Или используйте резервный код",
|
||
"verifyCode": "Проверить код",
|
||
"redirectingToApp": "Перенаправление в приложение...",
|
||
"sshAuthenticationRequired": "Требуется аутентификация SSH",
|
||
"sshNoKeyboardInteractive": "Интерактивная аутентификация с клавиатурой недоступна",
|
||
"sshAuthenticationFailed": "Аутентификация не удалась",
|
||
"sshAuthenticationTimeout": "Время аутентификации истекло",
|
||
"sshNoKeyboardInteractiveDescription": "Сервер не поддерживает интерактивную аутентификацию с клавиатурой. Пожалуйста, укажите пароль или SSH-ключ.",
|
||
"sshAuthFailedDescription": "Предоставленные учётные данные неверны. Пожалуйста, попробуйте снова с правильными данными.",
|
||
"sshTimeoutDescription": "Время попытки аутентификации истекло. Пожалуйста, попробуйте снова.",
|
||
"sshProvideCredentialsDescription": "Пожалуйста, предоставьте ваши учётные данные SSH для подключения к этому серверу.",
|
||
"sshPasswordDescription": "Введите пароль для этого SSH-соединения.",
|
||
"sshKeyPasswordDescription": "Если ваш SSH-ключ зашифрован, введите парольную фразу здесь.",
|
||
"passphraseRequired": "Требуется парольная фраза",
|
||
"passphraseRequiredDescription": "SSH-ключ зашифрован. Введите парольную фразу для его разблокировки.",
|
||
"back": "Назад",
|
||
"firstUser": "Первый пользователь",
|
||
"firstUserMessage": "Вы первый пользователь и получите права администратора. Настройки администратора доступны в выпадающем меню пользователя на боковой панели. Если вы считаете это ошибкой, проверьте логи Docker или создайте задачу на GitHub.",
|
||
"external": "Внешний",
|
||
"loginWithExternal": "Войти через внешнего провайдера",
|
||
"loginWithExternalDesc": "Войти, используя настроенного внешнего провайдера идентификации",
|
||
"externalNotSupportedInElectron": "Внешняя аутентификация пока не поддерживается в приложении Electron. Пожалуйста, используйте веб-версию для входа через OIDC.",
|
||
"loginWithProvider": "Войти через {{name}}",
|
||
"orContinueWith": "или продолжить с",
|
||
"ldapUsername": "Имя пользователя LDAP",
|
||
"ldapPassword": "Пароль LDAP",
|
||
"ldapSignIn": "Войти",
|
||
"ldapLoginFailed": "Ошибка входа LDAP",
|
||
"resetPasswordButton": "Сбросить пароль",
|
||
"sendResetCode": "Отправить код сброса",
|
||
"resetCodeDesc": "Введите имя пользователя, чтобы получить код сброса пароля. Код будет записан в логи контейнера Docker.",
|
||
"resetCode": "Код сброса",
|
||
"verifyCodeButton": "Проверить код",
|
||
"enterResetCode": "Введите 6-значный код из логов контейнера Docker для пользователя:",
|
||
"newPassword": "Новый пароль",
|
||
"confirmNewPassword": "Подтвердите пароль",
|
||
"enterNewPassword": "Введите новый пароль для пользователя:",
|
||
"signUp": "Зарегистрироваться",
|
||
"desktopApp": "Настольное приложение",
|
||
"loggingInToDesktopApp": "Вход в настольное приложение",
|
||
"loadingServer": "Загрузка сервера...",
|
||
"dataLossWarning": "Сброс пароля таким образом удалит все сохранённые SSH-хосты, учётные данные и другие зашифрованные данные. Это действие нельзя отменить. Используйте только если вы забыли пароль и не вошли в систему.",
|
||
"authenticationDisabled": "Аутентификация отключена",
|
||
"authenticationDisabledDesc": "Все методы аутентификации в настоящее время отключены. Обратитесь к администратору.",
|
||
"passwordLoginDisabledDesc": "Вход по паролю отключён. Используйте ключ доступа или внешнего провайдера аутентификации.",
|
||
"signInWithPasskey": "Войти с ключом доступа",
|
||
"passkeyLoginFailed": "Вход по ключу не удался",
|
||
"attemptsRemaining": "Осталось попыток: {{count}}",
|
||
"confirmResetDataWipe": "Эта учетная запись не входила с момента обновления шифрования, поэтому ее сохраненные данные не могут быть восстановлены без старого пароля. Сброс навсегда удалит ее хосты, учетные данные и сниппеты. Продолжить?"
|
||
},
|
||
"hostKey": {
|
||
"verifyNewHost": "Проверить SSH-ключ хоста",
|
||
"keyChangedWarning": "Изменен ключ хоста SSH",
|
||
"firstConnectionTitle": "Первое подключение к этому хосту",
|
||
"firstConnectionDescription": "Подлинность этого хоста не может быть установлена. Проверьте, соответствует ли отпечаток ожидаемому.",
|
||
"keyChangedDescription": "Ключ хоста для этого сервера изменился с момента последнего подключения. Это может указывать на проблему с безопасностью.",
|
||
"previousKey": "Предыдущий ключ",
|
||
"newFingerprint": "Новый отпечаток",
|
||
"fingerprint": "Отпечаток",
|
||
"verifyInstructions": "Если вы доверяете этому хосту, нажмите «Принять», чтобы продолжить и сохранить отпечаток для следующих подключений.",
|
||
"securityWarning": "Предупреждение безопасности",
|
||
"acceptAndContinue": "Принять и продолжить",
|
||
"acceptNewKey": "Принять новый ключ и продолжить"
|
||
},
|
||
"errors": {
|
||
"databaseConnection": "Не удалось подключиться к базе данных",
|
||
"unknownError": "Неизвестная ошибка",
|
||
"loginFailed": "Не удалось войти",
|
||
"failedPasswordReset": "Не удалось инициировать сброс пароля",
|
||
"failedVerifyCode": "Не удалось проверить код сброса",
|
||
"failedCompleteReset": "Не удалось завершить сброс пароля",
|
||
"invalidTotpCode": "Неверный TOTP-код",
|
||
"failedOidcLogin": "Не удалось начать вход через OIDC",
|
||
"silentSigninOidcUnavailable": "Запрошен автоматический вход, но OIDC-вход недоступен.",
|
||
"failedUserInfo": "Не удалось получить информацию о пользователе после входа",
|
||
"oidcAuthFailed": "Аутентификация OIDC не удалась",
|
||
"invalidAuthUrl": "Получен некорректный URL авторизации от серверной части",
|
||
"requiredField": "Обязательное поле",
|
||
"minLength": "Минимальная длина: {{min}}",
|
||
"passwordMismatch": "Пароли не совпадают",
|
||
"passwordLoginDisabled": "Вход по логину и паролю в данный момент отключён",
|
||
"sessionExpired": "Сеанс истёк — войдите заново",
|
||
"totpRateLimited": "Превышена частота запросов: слишком много попыток проверки TOTP. Повторите попытку позже.",
|
||
"totpRateLimitedWithTime": "Подождите {{time}} секунд, прежде чем повторить попытку.",
|
||
"resetCodeRateLimited": "Превышена частота запросов: слишком много попыток проверки. Пожалуйста, попробуйте позже.",
|
||
"resetCodeRateLimitedWithTime": "Превышена частота запросов: слишком много попыток подтверждения. Подождите {{time}} секунд, прежде чем повторить попытку.",
|
||
"authTokenSaveFailed": "Не удалось сохранить токен аутентификации",
|
||
"failedToLoadServer": "Не удалось загрузить сервер",
|
||
"remoteServerRequired": "Требуется удаленный сервер. Для использования этого типа подключения подключите удаленный сервер в настройках."
|
||
},
|
||
"messages": {
|
||
"registrationDisabled": "Регистрация новых учетных записей отключена администратором. Войдите в систему или обратитесь к администратору.",
|
||
"userNotAllowed": "Ваша учетная запись не авторизована для регистрации. Обратитесь к администратору.",
|
||
"databaseConnectionFailed": "Не удалось подключиться к серверу базы данных",
|
||
"resetCodeSent": "Код сброса отправлен в логи Docker",
|
||
"codeVerified": "Код успешно проверен",
|
||
"passwordResetSuccess": "Пароль успешно сброшен",
|
||
"loginSuccess": "Вход выполнен успешно",
|
||
"registrationSuccess": "Регистрация успешно завершена"
|
||
},
|
||
"profile": {
|
||
"c2sTunnelConfigDesc": "Локальные туннели рабочего стола, нацеленные на настроенные хосты SSH.",
|
||
"c2sTunnelPresets": "Предустановки клиентских туннелей",
|
||
"c2sTunnelPresetsDesc": "Сохраните список локальных туннелей этого клиента как именованную предустановку на сервере или загрузите предустановку обратно в клиент.",
|
||
"c2sTunnelPresetsUnavailable": "Предустановки клиентских туннелей доступны только в десктопном клиенте.",
|
||
"c2sPresetName": "Имя предустановки",
|
||
"c2sPresetNamePlaceholder": "Имя клиентской предустановки",
|
||
"c2sPresetToLoad": "Предустановка для загрузки",
|
||
"c2sNoPresetSelected": "Предустановка не выбрана",
|
||
"c2sNoPresets": "Нет сохраненных предустановок",
|
||
"c2sLoadPreset": "Загрузить",
|
||
"c2sCurrentLocalConfig": "На этом рабочем столе настроено {{count}} локальных клиентских туннелей.",
|
||
"c2sPresetSyncNote": "Предустановки — это явные снимки; загрузка одной заменяет список локальных клиентских туннелей этого десктопного клиента.",
|
||
"c2sPresetSaved": "Предустановка клиентского туннеля сохранена",
|
||
"c2sPresetLoaded": "Предустановка клиентского туннеля загружена локально",
|
||
"c2sPresetRenamed": "Предустановка клиентского туннеля переименована",
|
||
"c2sPresetDeleted": "Предустановка клиентского туннеля удалена",
|
||
"c2sPresetLoadError": "Не удалось загрузить предустановки клиентских туннелей"
|
||
},
|
||
"placeholders": {
|
||
"maxRetries": "3",
|
||
"retryInterval": "10",
|
||
"language": "Язык",
|
||
"keyPassword": "пароль ключа",
|
||
"pastePrivateKey": "Вставьте свой закрытый ключ сюда...",
|
||
"localListenerHost": "127.0.0.1 (слушать локально)",
|
||
"localTargetHost": "127.0.0.1 (цель на этом компьютере)",
|
||
"socksListenerHost": "127.0.0.1 (SOCKS-слушатель)",
|
||
"enterPassword": "Введите пароль",
|
||
"defaultPort": "22",
|
||
"defaultEndpointPort": "224"
|
||
},
|
||
"dashboard": {
|
||
"title": "Панель управления",
|
||
"loading": "Загрузка панели управления...",
|
||
"github": "GitHub",
|
||
"support": "Поддержка",
|
||
"discord": "Discord",
|
||
"docs": "Документация",
|
||
"donate": "Пожертвовать",
|
||
"serverOverview": "Обзор сервера",
|
||
"version": "Версия",
|
||
"upToDate": "Актуальная версия",
|
||
"updateAvailable": "Доступно обновление",
|
||
"beta": "Бета",
|
||
"uptime": "Время работы",
|
||
"database": "База данных",
|
||
"healthy": "Исправен",
|
||
"error": "Ошибка",
|
||
"totalHosts": "Всего хостов",
|
||
"totalTunnels": "Всего туннелей",
|
||
"totalCredentials": "Всего учётных данных",
|
||
"recentActivity": "Недавняя активность",
|
||
"reset": "Сброс",
|
||
"loadingRecentActivity": "Загрузка недавней активности...",
|
||
"noRecentActivity": "Нет недавней активности",
|
||
"quickActions": "Быстрые действия",
|
||
"addHost": "Добавить хост",
|
||
"addCredential": "Добавить учётные данные",
|
||
"adminSettings": "Настройки администратора",
|
||
"userProfile": "Профиль пользователя",
|
||
"serverStats": "Статистика сервера",
|
||
"loadingServerStats": "Загрузка статистики сервера...",
|
||
"noServerData": "Нет данных о сервере",
|
||
"cpu": "CPU",
|
||
"ram": "RAM",
|
||
"customizeLayout": "Настроить дашборд",
|
||
"dashboardSettings": "Настройки дашборда",
|
||
"enableDisableCards": "Включить/отключить карточки",
|
||
"resetLayout": "Сбросить по умолчанию",
|
||
"serverOverviewCard": "Обзор сервера",
|
||
"recentActivityCard": "Недавняя активность",
|
||
"networkGraphCard": "Сетевой график",
|
||
"networkGraph": "Сетевой график",
|
||
"quickActionsCard": "Быстрые действия",
|
||
"serverStatsCard": "Статистика сервера",
|
||
"panelMain": "Главная",
|
||
"panelSide": "Боковая",
|
||
"justNow": "только что",
|
||
"serviceLinks": "Ссылки на сервисы",
|
||
"homepagePreview": "Предпросмотр главной страницы"
|
||
},
|
||
"donation": {
|
||
"title": "Нравится Termix?",
|
||
"body": "Termix — бесплатный и с открытым исходным кодом, разрабатывается и поддерживается командой из двух человек в свободное время. Если он заменил коммерческий инструмент, за который вам пришлось бы платить, пожертвование поможет покрыть расходы на хостинг и продолжить разработку. На данный момент пожертвования принимаются только в криптовалюте.",
|
||
"milestones": "Пожертвования также помогают финансировать время на исследование и изучение необходимого для создания таких функций, как поддержка SAML и Kubernetes. Смотрите прогресс на странице пожертвований.",
|
||
"cta": "Пожертвовать",
|
||
"dismiss": "Возможно позже"
|
||
},
|
||
"dashboardTab": {
|
||
"stable": "СТАБИЛЬНАЯ",
|
||
"hostsOnline": "Хосты онлайн",
|
||
"activeTunnels": "Активные туннели",
|
||
"registerNewServer": "Зарегистрировать новый сервер",
|
||
"storeSshKeysOrPasswords": "Хранить SSH-ключи или пароли",
|
||
"manageUsersAndRoles": "Управлять пользователями и ролями",
|
||
"manageYourAccount": "Управлять аккаунтом",
|
||
"hostStatus": "Статус хоста",
|
||
"noHostsConfigured": "Нет настроенных хостов",
|
||
"online": "ОНЛАЙН",
|
||
"offline": "ОФФЛАЙН",
|
||
"checking": "ПРОВЕРКА",
|
||
"onlineLower": "Онлайн",
|
||
"nodes": "{{count}} узлов",
|
||
"add": "Добавить:",
|
||
"commandPalette": "Командная палитра",
|
||
"done": "Готово",
|
||
"editModeInstructions": "Перетаскивайте карточки для изменения порядка · Перетащите разделитель столбцов для изменения ширины · Перетащите нижний край карточки для изменения высоты · Корзина для удаления",
|
||
"empty": "Пусто",
|
||
"clear": "Очистить",
|
||
"serviceLinksTitle": "Сервисные ссылки",
|
||
"serviceLinksEmpty": "Пока нет сервисных ссылок",
|
||
"serviceLinksAddLabel": "Название",
|
||
"serviceLinksAddUrl": "URL",
|
||
"serviceLinksAdd": "Добавить",
|
||
"serviceLinksLabelPlaceholder": "Мой сервис",
|
||
"serviceLinksUrlPlaceholder": "http://192.168.1.10:8080",
|
||
"serviceLinksInvalidUrl": "Введите действительный веб-адрес",
|
||
"serviceLinksAddFailed": "Не удалось добавить сервисную ссылку",
|
||
"disk": "Диск",
|
||
"viewServerDetails": "Просмотреть сведения о сервере"
|
||
},
|
||
"sessionLogs": {
|
||
"title": "Журналы сеансов",
|
||
"noLogs": "Пока нет журналов сеансов",
|
||
"noLogsDesc": "Включите ведение журнала сеансов на хосте, чтобы начать запись",
|
||
"duration": "Продолжительность",
|
||
"viewLog": "Просмотреть журнал",
|
||
"downloadLog": "Скачать",
|
||
"deleteLog": "Удалить",
|
||
"confirmDelete": "Удалить этот журнал сеансов?",
|
||
"confirmDeleteDesc": "Это действие нельзя отменить.",
|
||
"copyContent": "Копировать",
|
||
"copied": "Скопировано!",
|
||
"loadError": "Не удалось загрузить журналы сеансов",
|
||
"deleteError": "Не удалось удалить журнал сеанса",
|
||
"filterByHost": "Фильтровать по хосту..."
|
||
},
|
||
"networkGraph": {
|
||
"addHost": "Добавить хост",
|
||
"addGroup": "Добавить группу",
|
||
"addLink": "Добавить связь",
|
||
"zoomIn": "Приблизить",
|
||
"zoomOut": "Отдалить",
|
||
"resetView": "Сбросить вид",
|
||
"selectHost": "Выбрать хост",
|
||
"chooseHost": "Выберите хост...",
|
||
"parentGroup": "Родительская группа",
|
||
"noGroup": "Без группы",
|
||
"groupName": "Имя группы",
|
||
"color": "Цвет",
|
||
"source": "Источник",
|
||
"target": "Цель",
|
||
"moveToGroup": "Переместить в группу",
|
||
"selectGroup": "Выберите группу...",
|
||
"addConnection": "Добавить соединение",
|
||
"hostDetails": "Сведения о хосте",
|
||
"removeFromGroup": "Удалить из группы",
|
||
"addHostHere": "Добавить хост сюда",
|
||
"editGroup": "Редактировать группу",
|
||
"delete": "Удалить",
|
||
"add": "Добавить",
|
||
"create": "Создать",
|
||
"move": "Переместить",
|
||
"connect": "Соединить",
|
||
"createGroup": "Создать группу",
|
||
"selectSourcePlaceholder": "Выберите источник...",
|
||
"selectTargetPlaceholder": "Выберите цель...",
|
||
"invalidFile": "Неверный файл",
|
||
"hostAlreadyExists": "Хост уже присутствует в топологии",
|
||
"connectionExists": "Соединение уже существует",
|
||
"unknown": "Неизвестно",
|
||
"name": "Имя",
|
||
"ip": "IP",
|
||
"status": "Статус",
|
||
"failedToAddNode": "Не удалось добавить узел",
|
||
"sourceDifferentFromTarget": "Источник и цель должны различаться",
|
||
"exportJSON": "Экспорт JSON",
|
||
"importJSON": "Импорт JSON",
|
||
"terminal": "Терминал",
|
||
"fileManager": "Файловый менеджер",
|
||
"tunnel": "Туннель",
|
||
"docker": "Docker",
|
||
"serverStats": "Метрики хоста",
|
||
"hostMetrics": "Метрики хоста",
|
||
"noNodes": "Пока нет узлов"
|
||
},
|
||
"docker": {
|
||
"notEnabled": "Docker не включен для этого хоста",
|
||
"validating": "Проверка Docker...",
|
||
"connecting": "Подключение...",
|
||
"error": "Ошибка",
|
||
"version": "Docker {{version}}",
|
||
"connectionFailed": "Не удалось подключиться к Docker",
|
||
"containerStarted": "Контейнер {{name}} запущен",
|
||
"failedToStartContainer": "Не удалось запустить контейнер {{name}}",
|
||
"containerStopped": "Контейнер {{name}} остановлен",
|
||
"failedToStopContainer": "Не удалось остановить контейнер {{name}}",
|
||
"containerRestarted": "Контейнер {{name}} перезапущен",
|
||
"failedToRestartContainer": "Не удалось перезапустить контейнер {{name}}",
|
||
"containerPaused": "Контейнер {{name}} приостановлен",
|
||
"containerUnpaused": "Контейнер {{name}} возобновлён",
|
||
"failedToTogglePauseContainer": "Не удалось изменить состояние приостановки для контейнера {{name}}",
|
||
"containerRemoved": "Контейнер {{name}} удалён",
|
||
"failedToRemoveContainer": "Не удалось удалить контейнер {{name}}",
|
||
"image": "Образ",
|
||
"ports": "Порты",
|
||
"noPorts": "Нет портов",
|
||
"start": "Запустить",
|
||
"confirmRemoveContainer": "Вы уверены, что хотите удалить контейнер «{{name}}»? Это действие нельзя отменить.",
|
||
"runningContainerWarning": "Предупреждение: этот контейнер в настоящее время работает. При удалении он будет сначала остановлен.",
|
||
"loadingContainers": "Загрузка контейнеров...",
|
||
"manager": "Менеджер Docker",
|
||
"autoRefresh": "Автообновление",
|
||
"timestamps": "Отметки времени",
|
||
"lines": "Строки",
|
||
"filterLogs": "Фильтровать логи...",
|
||
"refresh": "Обновить",
|
||
"download": "Скачать",
|
||
"clear": "Очистить",
|
||
"logsDownloaded": "Логи успешно скачаны",
|
||
"last50": "Последние 50",
|
||
"last100": "Последние 100",
|
||
"last500": "Последние 500",
|
||
"last1000": "Последние 1000",
|
||
"allLogs": "Все логи",
|
||
"noLogsMatching": "Нет логов, соответствующих \"{{query}}\"",
|
||
"noLogsAvailable": "Логи отсутствуют",
|
||
"noContainersFound": "Контейнеры не найдены",
|
||
"noContainersFoundHint": "На этом хосте нет Docker-контейнеров",
|
||
"searchPlaceholder": "Поиск контейнеров...",
|
||
"allStatuses": "Все состояния",
|
||
"stateRunning": "Запущен",
|
||
"statePaused": "Приостановлен",
|
||
"stateExited": "Завершён",
|
||
"stateRestarting": "Перезапускается",
|
||
"noContainersMatchFilters": "Нет контейнеров, соответствующих фильтрам",
|
||
"noContainersMatchFiltersHint": "Попробуйте изменить параметры поиска или фильтры",
|
||
"failedToFetchStats": "Не удалось получить статистику контейнера",
|
||
"containerNotRunning": "Контейнер не запущен",
|
||
"startContainerToViewStats": "Запустите контейнер, чтобы посмотреть статистику",
|
||
"loadingStats": "Загрузка статистики...",
|
||
"errorLoadingStats": "Ошибка загрузки статистики",
|
||
"noStatsAvailable": "Статистика недоступна",
|
||
"cpuUsage": "Использование ЦП",
|
||
"current": "Текущий",
|
||
"memoryUsage": "Использование памяти",
|
||
"networkIo": "Сетевой ввод-вывод",
|
||
"input": "Ввод",
|
||
"output": "Вывод",
|
||
"blockIo": "Блочный ввод-вывод",
|
||
"read": "Чтение",
|
||
"write": "Запись",
|
||
"pids": "PID",
|
||
"containerInformation": "Информация о контейнере",
|
||
"name": "Имя",
|
||
"id": "ID",
|
||
"state": "Состояние",
|
||
"containerMustBeRunning": "Для доступа к консоли контейнер должен быть запущен",
|
||
"verificationCodePrompt": "Введите код подтверждения",
|
||
"totpVerificationFailed": "Ошибка проверки TOTP. Попробуйте еще раз.",
|
||
"warpgateVerificationFailed": "Ошибка аутентификации Warpgate. Попробуйте еще раз.",
|
||
"connectedTo": "Подключено к {{containerName}}",
|
||
"disconnected": "Отключено",
|
||
"consoleError": "Ошибка консоли",
|
||
"errorMessage": "Ошибка: {{message}}",
|
||
"failedToConnect": "Не удалось подключиться к контейнеру",
|
||
"console": "Консоль",
|
||
"selectShell": "Выберите оболочку",
|
||
"bash": "Bash",
|
||
"sh": "sh",
|
||
"ash": "ash",
|
||
"connect": "Подключиться",
|
||
"disconnect": "Отключиться",
|
||
"notConnected": "Не подключено",
|
||
"clickToConnect": "Нажмите «Подключиться», чтобы запустить сеанс оболочки",
|
||
"connectingTo": "Подключение к {{containerName}}...",
|
||
"containerNotFound": "Контейнер не найден",
|
||
"backToList": "Вернуться к списку",
|
||
"logs": "Логи",
|
||
"stats": "Статистика",
|
||
"consoleTab": "Консоль",
|
||
"startContainerToAccess": "Запустите контейнер, чтобы получить доступ к консоли"
|
||
},
|
||
"admin": {
|
||
"sectionGeneral": "Общие",
|
||
"sectionOidc": "OIDC",
|
||
"sectionSso": "Провайдеры SSO",
|
||
"ssoAddProvider": "Добавить провайдера",
|
||
"ssoDocsLink": "Документация",
|
||
"ssoProviderDocsLink": "Документация",
|
||
"ssoNoProviders": "Нет настроенных провайдеров SSO.",
|
||
"ssoProviderName": "Отображаемое имя",
|
||
"ssoProviderType": "Тип провайдера",
|
||
"ssoDeleteProvider": "Удалить провайдера",
|
||
"ssoDeleteConfirm": "Удалить провайдера? Связанные пользователи не смогут войти.",
|
||
"ssoTypeOidc": "OIDC",
|
||
"ssoTypeLdap": "LDAP",
|
||
"ssoTypeGithub": "GitHub",
|
||
"ssoTypeGoogle": "Google",
|
||
"ssoEnabled": "Включено",
|
||
"ssoDisabled": "Отключено",
|
||
"ssoSaveProvider": "Сохранить провайдера",
|
||
"ssoTestConnection": "Проверить соединение",
|
||
"ssoEditProvider": "Редактировать провайдера",
|
||
"ldapHost": "LDAP-сервер",
|
||
"ldapPort": "Порт",
|
||
"ldapUseTls": "Использовать TLS (LDAPS)",
|
||
"ldapBindDn": "Bind DN",
|
||
"ldapBindPassword": "Пароль привязки",
|
||
"ldapUserSearchBase": "База поиска пользователей",
|
||
"ldapUserSearchFilter": "Фильтр поиска пользователей",
|
||
"ldapUsernameAttr": "Атрибут имени пользователя",
|
||
"ldapDisplayNameAttr": "Атрибут отображаемого имени",
|
||
"ldapGroupSearchBase": "База поиска групп",
|
||
"ldapAdminGroup": "Группа администраторов",
|
||
"ldapAllowedUsers": "Разрешенные пользователи",
|
||
"sectionUsers": "Пользователи",
|
||
"sectionSessions": "Сессии",
|
||
"sectionRoles": "Роли",
|
||
"sectionDatabase": "База данных",
|
||
"sectionApiKeys": "API-ключи",
|
||
"sectionAuditLog": "Журнал аудита",
|
||
"sectionSsl": "SSL / Let's Encrypt",
|
||
"sslDescription": "Автоматически выпускать и обновлять доверенный SSL-сертификат от Let’s Encrypt. Требуется общедоступный домен и доступ к порту 80 или DNS.",
|
||
"sslDocsLink": "Документация SSL",
|
||
"sslDomain": "Домен",
|
||
"sslDomainPlaceholder": "termix.example.com",
|
||
"sslDomainDesc": "Общедоступное доменное имя для сертификата.",
|
||
"sslEmail": "Email",
|
||
"sslEmailPlaceholder": "admin@example.com",
|
||
"sslEmailDesc": "Контактный email для уведомлений Let's Encrypt и учетной записи.",
|
||
"sslChallengeType": "Тип проверки",
|
||
"sslChallengeTypeDesc": "Способ подтверждения владения доменом для Let’s Encrypt.",
|
||
"sslChallengeHttp": "HTTP (webroot) — требуется доступ к порту 80 из интернета",
|
||
"sslChallengeDns": "DNS (Cloudflare) — требуется API-токен Cloudflare",
|
||
"sslCloudflareToken": "API-токен Cloudflare",
|
||
"sslCloudflareTokenPlaceholder": "Введите токен...",
|
||
"sslCloudflareTokenDesc": "Токен с ограниченной областью действия и разрешением Zone:DNS:Edit для вашего домена.",
|
||
"sslCertStatus": "Статус сертификата",
|
||
"sslCertStatusNone": "Сертификат отсутствует",
|
||
"sslCertStatusValid": "Действительный",
|
||
"sslCertStatusExpiring": "Скоро истекает",
|
||
"sslCertStatusExpired": "Истек",
|
||
"sslCertExpiresAt": "Истекает {{date}}",
|
||
"sslLastIssued": "Последний выпуск {{date}}",
|
||
"sslRequestCert": "Выпустить / Обновить сертификат",
|
||
"sslRequestCertLoading": "Запрос сертификата...",
|
||
"sslRequestCertSuccess": "Сертификат успешно выпущен и установлен",
|
||
"sslRequestCertFailed": "Ошибка запроса сертификата",
|
||
"sslSave": "Сохранить настройки",
|
||
"sslSaved": "Настройки SSL сохранены",
|
||
"sslSaveFailed": "Не удалось сохранить настройки SSL",
|
||
"sslRequiresDomain": "Требуются домен и email",
|
||
"sslInfoNote": "После выпуска сертификата включите SSL в переменных окружения (ENABLE_SSL=true) и перезапустите Termix.",
|
||
"sslManualOption": "Ручная загрузка сертификата",
|
||
"sslManualCert": "Сертификат (PEM)",
|
||
"sslManualCertPlaceholder": "-----НАЧАЛО ПОЛУЧЕНИЯ СЕРТИФИКАТА-----",
|
||
"sslManualKey": "Закрытый ключ (PEM)",
|
||
"sslManualKeyPlaceholder": "-----НАЧАЛО ПРИВАТНОГО КЛЮЧА-----",
|
||
"sslManualDesc": "Вставьте свой существующий сертификат и закрытый ключ, включая полную цепочку, если это требуется вашим центром сертификации.",
|
||
"sslManualUpload": "Загрузка и установка сертификата",
|
||
"sslManualUploadLoading": "Загрузка сертификата...",
|
||
"sslManualUploadSuccess": "Сертификат успешно загружен и установлен.",
|
||
"sslManualUploadFailed": "Загрузка сертификата не удалась.",
|
||
"sslManualRequiresFields": "Для работы требуются сертификат и закрытый ключ.",
|
||
"auditLogTotal": "Всего записей: {{total}}",
|
||
"auditLogEmpty": "Нет записей в журнале аудита",
|
||
"auditLogSuccess": "Успешно",
|
||
"auditLogFailed": "Неудачно",
|
||
"auditLogClearFilters": "Очистить фильтры",
|
||
"auditLogPage": "Страница {{page}} из {{totalPages}} (всего {{total}})",
|
||
"auditLogIp": "IP",
|
||
"auditLogResourceId": "ID ресурса",
|
||
"auditLogFilterUser": "Пользователь",
|
||
"auditLogFilterAction": "Действие",
|
||
"auditLogFilterResourceType": "Тип ресурса",
|
||
"auditLogFilterStatus": "Статус",
|
||
"auditLogFilterFrom": "С",
|
||
"auditLogFilterTo": "По",
|
||
"auditLogFilterAll": "Все",
|
||
"allowRegistration": "Разрешить регистрацию пользователей",
|
||
"allowRegistrationDesc": "Позволяет новым пользователям регистрироваться, указывая имя пользователя и пароль",
|
||
"allowPasswordLogin": "Разрешить вход по паролю",
|
||
"allowPasswordLoginDesc": "Вход по имени пользователя и паролю",
|
||
"oidcAutoProvision": "Автоматическое создание учётных записей OIDC",
|
||
"oidcAutoProvisionDesc": "Автоматически создавать учётные записи для пользователей OIDC/SSO при первом входе (независимо от переключателя регистрации)",
|
||
"oidcSilentLoginDefault": "Автоматический вход OIDC по умолчанию",
|
||
"oidcSilentLoginDefaultDesc": "Автоматически перенаправлять на страницу входа OIDC при каждом посещении, полностью пропуская форму входа",
|
||
"allowPasswordReset": "Разрешить сброс пароля",
|
||
"allowPasswordResetDesc": "Код сброса в логах Docker",
|
||
"commandHistoryEnabled": "История команд",
|
||
"commandHistoryEnabledDesc": "Включить запись истории команд. При отключении история не сохраняется независимо от настроек хостов.",
|
||
"updateCommandHistoryFailed": "Не удалось обновить настройку истории команд",
|
||
"analyticsEnabled": "Делитесь анонимной статистикой использования.",
|
||
"analyticsEnabledDesc": "Ежедневно отправляет анонимный подсчет пользователей, хостов и использования функций, чтобы помочь улучшить Termix. Никакие личные данные или сведения о подключении никогда не включаются.",
|
||
"updateAnalyticsFailed": "Не удалось обновить настройки аналитики.",
|
||
"sessionSharingGloballyEnabled": "Разрешить совместное использование сеанса",
|
||
"sessionSharingGloballyEnabledDesc": "Разрешить общий доступ к сеансам Live Terminal, RDP, VNC и Telnet для всего экземпляра. При отключении этой функции отменяет все настройки общего доступа для отдельных хостов.",
|
||
"updateSessionSharingFailed": "Не удалось обновить настройки совместного доступа к сессии.",
|
||
"sessionTimeout": "Тайм-аут сессии",
|
||
"hours": "часов",
|
||
"sessionTimeoutRange": "Мин. 1 ч · Макс. 720 ч",
|
||
"monitoringDefaults": "Мониторинг по умолчанию",
|
||
"statusCheck": "Проверка состояния",
|
||
"metrics": "Метрики",
|
||
"sec": "сек",
|
||
"logLevel": "Уровень логирования",
|
||
"enableGuacamole": "Включить Guacamole",
|
||
"enableGuacamoleDesc": "Удаленный рабочий стол RDP/VNC",
|
||
"enableGuacamoleDocsLink": "Документация",
|
||
"guacdUrl": "URL guacd",
|
||
"tailscaleApiKey": "API-ключ Tailscale",
|
||
"tailscaleApiKeyDescription": "Используется для обнаружения устройств в редакторе хостов. Создайте ключ на странице tailscale.com/admin/settings/keys.",
|
||
"tailscaleApiKeyDocsLink": "Документация",
|
||
"oidcDescription": "Настройка OpenID Connect для единого входа (SSO). Поля, отмеченные *, обязательны.",
|
||
"oidcDocsLink": "Документация",
|
||
"oidcClientId": "Client ID",
|
||
"oidcClientSecret": "Client Secret",
|
||
"oidcAuthUrl": "URL авторизации",
|
||
"oidcIssuerUrl": "URL издателя",
|
||
"oidcTokenUrl": "URL токена",
|
||
"oidcUserIdentifier": "Путь к идентификатору пользователя",
|
||
"oidcDisplayName": "Путь к отображаемому имени",
|
||
"oidcScopes": "Области",
|
||
"oidcUserinfoUrl": "Переопределить URL Userinfo",
|
||
"oidcAllowedUsers": "Разрешенные пользователи",
|
||
"oidcAllowedUsersDesc": "По одному email на строку. Оставьте пустым, чтобы разрешить всем.",
|
||
"oidcAdminGroup": "Группа администраторов",
|
||
"oidcAdminGroupDesc": "Пользователи в этой группе получают права администратора. Оставьте пустым, чтобы отключить синхронизацию групп.",
|
||
"oidcGroupClaim": "Утверждение группы",
|
||
"oidcGroupClaimDesc": "Необязательно. Путь к утверждению, содержащему группы пользователя. По умолчанию проверяются groups, roles, затем group. Используйте для провайдеров с настраиваемым утверждением (например, Zitadel).",
|
||
"oidcCaCert": "Пользовательский сертификат ЦС",
|
||
"oidcCaCertDesc": "Необязательно. Сертификат ЦС в формате PEM для провайдеров OIDC, использующих частный или самоподписанный ЦС. Оставьте пустым, чтобы использовать системное хранилище доверенных сертификатов.",
|
||
"removeOidc": "Удалить",
|
||
"usersCount": "{{count}} пользователей",
|
||
"createUser": "Создать",
|
||
"newRole": "Новая роль",
|
||
"roleName": "Название",
|
||
"roleDisplayName": "Отображаемое имя",
|
||
"roleDescription": "Описание",
|
||
"rolesCount": "{{count}} ролей",
|
||
"createRole": "Создать",
|
||
"creating": "Создание...",
|
||
"exportDatabase": "Экспорт базы данных",
|
||
"exportDatabaseDesc": "Скачать резервную копию всех хостов, учётных данных и настроек",
|
||
"export": "Экспортировать",
|
||
"exporting": "Экспортирование...",
|
||
"importDatabase": "Импорт базы данных",
|
||
"importDatabaseDesc": "Восстановить из файла резервной копии .sqlite",
|
||
"importDatabaseSelected": "Выбрано: {{name}}",
|
||
"selectFile": "Выбрать файл",
|
||
"changeFile": "Изменить",
|
||
"import": "Импортировать",
|
||
"importing": "Импортирование...",
|
||
"apiKeysCount": "{{count}} ключей",
|
||
"apiKeysDocsLink": "Документация",
|
||
"newApiKey": "Новый ключ API",
|
||
"apiKeyCreatedWarning": "Ключ создан — скопируйте его сейчас, больше он показан не будет.",
|
||
"apiKeyName": "Имя",
|
||
"apiKeyUser": "Пользователь",
|
||
"apiKeySelectUser": "Выберите пользователя...",
|
||
"apiKeyExpiresAt": "Действует до",
|
||
"createKey": "Создать ключ",
|
||
"apiKeyNoExpiry": "Без срока действия",
|
||
"revokedBadge": "ОТОЗВАН",
|
||
"authTypeDual": "Двухфакторная аутентификация",
|
||
"authTypeOidc": "OIDC",
|
||
"authTypeLocal": "Локальная",
|
||
"adminStatusAdministrator": "Администратор",
|
||
"adminStatusRegularUser": "Обычный пользователь",
|
||
"adminBadge": "АДМИН",
|
||
"systemBadge": "СИСТ",
|
||
"customBadge": "ПОЛЬЗ.",
|
||
"youBadge": "ВЫ",
|
||
"sessionsActive": "{{count}} активных",
|
||
"sessionActive": "Активна: {{time}}",
|
||
"sessionExpires": "Истекает: {{time}}",
|
||
"revokeAll": "Все",
|
||
"revokeAllSessionsSuccess": "Все сеансы пользователя отозваны",
|
||
"revokeAllSessionsFailed": "Не удалось отозвать сеансы",
|
||
"revokeSessionFailed": "Не удалось отозвать сеанс",
|
||
"addRole": "Добавить роль",
|
||
"noCustomRoles": "Нет пользовательских ролей",
|
||
"removeRoleFailed": "Не удалось удалить роль",
|
||
"assignRoleFailed": "Не удалось назначить роль",
|
||
"deleteRoleFailed": "Не удалось удалить роль",
|
||
"userAdminAccess": "Администратор",
|
||
"userAdminAccessDesc": "Полный доступ ко всем настройкам администратора",
|
||
"userRoles": "Роли",
|
||
"revokeAllUserSessions": "Отозвать все сеансы",
|
||
"revokeAllUserSessionsDesc": "Принудительный повторный вход на всех устройствах",
|
||
"revoke": "Отозвать",
|
||
"deleteUserWarning": "Удаление этого пользователя необратимо.",
|
||
"deleteUser": "Удалить {{username}}",
|
||
"deleting": "Удаление...",
|
||
"deleteUserFailed": "Не удалось удалить пользователя",
|
||
"deleteUserSuccess": "Пользователь \"{{username}}\" удалён",
|
||
"deleteRoleSuccess": "Роль \"{{name}}\" удалена",
|
||
"revokeKeySuccess": "Ключ \"{{name}}\" отозван",
|
||
"revokeKeyFailed": "Не удалось отозвать ключ",
|
||
"copiedToClipboard": "Скопировано в буфер обмена",
|
||
"done": "Готово",
|
||
"createUserTitle": "Создать пользователя",
|
||
"createUserDesc": "Создать новую локальную учётную запись.",
|
||
"createUserUsername": "Имя пользователя",
|
||
"createUserPassword": "Пароль",
|
||
"createUserPasswordHint": "Минимум 6 символов.",
|
||
"createUserEnterUsername": "Введите имя пользователя",
|
||
"createUserEnterPassword": "Введите пароль",
|
||
"createUserSubmit": "Создать пользователя",
|
||
"editUserTitle": "Управление пользователем: {{username}}",
|
||
"editUserDesc": "Редактирование ролей, статуса администратора, сеансов и настроек учётной записи.",
|
||
"editUserUsername": "Имя пользователя",
|
||
"editUserAuthType": "Тип аутентификации",
|
||
"editUserAdminStatus": "Статус администратора",
|
||
"editUserUserId": "ID пользователя",
|
||
"linkAccountTitle": "Связать аккаунты",
|
||
"linkAccountDesc": "Объединить OIDC-аккаунт {{username}} с существующим локальным аккаунтом.",
|
||
"linkAccountDescLocal": "Связать локальный аккаунт {{username}} с существующим OIDC-аккаунтом.",
|
||
"linkAccountWarningTitle": "Будет выполнено:",
|
||
"linkAccountEffect1": "Удалить OIDC-аккаунт",
|
||
"linkAccountEffect2": "Добавить OIDC-вход в целевой аккаунт",
|
||
"linkAccountEffect3": "Разрешить вход как через OIDC, так и по паролю",
|
||
"linkAccountTargetUsername": "Имя пользователя локального аккаунта",
|
||
"linkAccountTargetPlaceholder": "Введите имя пользователя локального аккаунта для связывания",
|
||
"linkAccountOidcUsername": "Имя пользователя OIDC-аккаунта",
|
||
"linkAccountOidcPlaceholder": "Введите имя пользователя OIDC-аккаунта для объединения",
|
||
"linkAccountOidcNotFound": "Не найден аккаунт, использующий только OIDC, с таким именем пользователя.",
|
||
"linkAccounts": "Связать аккаунты",
|
||
"linkAccountSuccess": "Аккаунты успешно связаны",
|
||
"linkAccountFailed": "Не удалось связать аккаунты",
|
||
"linkAccountInProgress": "Связывание...",
|
||
"unlinkAccountTitle": "Отвязать OIDC",
|
||
"unlinkAccountDesc": "Удалить OIDC-аутентификацию для {{username}}. Они смогут входить только по паролю.",
|
||
"unlinkAccountWarning": "Это удалит OIDC-вход из этого аккаунта. Пользователь должен иметь установленный пароль для входа.",
|
||
"unlinkAccount": "Отвязать OIDC",
|
||
"unlinkAccountInProgress": "Отвязывание...",
|
||
"unlinkAccountSuccess": "OIDC успешно отвязан",
|
||
"unlinkAccountFailed": "Не удалось отвязать OIDC",
|
||
"saving": "Сохранение...",
|
||
"updateRegistrationFailed": "Не удалось обновить настройки регистрации",
|
||
"updatePasswordLoginFailed": "Не удалось обновить настройки входа по паролю",
|
||
"cannotDisablePasswordLoginWithTotp": "Нельзя отключить вход по паролю, если у одного или нескольких пользователей включена 2FA. Сначала отключите 2FA.",
|
||
"updateOidcAutoProvisionFailed": "Не удалось обновить настройки автоматического создания пользователей через OIDC",
|
||
"updateOidcSilentLoginDefaultFailed": "Не удалось обновить настройки автоматического входа через OIDC",
|
||
"updatePasswordResetFailed": "Не удалось обновить настройки сброса пароля",
|
||
"sessionTimeoutRange2": "Тайм-аут сеанса должен быть от 1 до 720 часов",
|
||
"sessionTimeoutSaved": "Таймаут сессии сохранён",
|
||
"sessionTimeoutSaveFailed": "Не удалось сохранить таймаут сессии",
|
||
"monitoringIntervalInvalid": "Недопустимые значения интервалов",
|
||
"monitoringSaved": "Настройки мониторинга сохранены",
|
||
"monitoringSaveFailed": "Не удалось сохранить настройки мониторинга",
|
||
"metricsHistoryRetention": "Срок хранения метрик",
|
||
"metricsHistoryRetentionRange": "от 1 до 90 дней",
|
||
"days": "дней",
|
||
"guacamoleSaved": "Настройки Guacamole сохранены",
|
||
"guacamoleSaveFailed": "Не удалось сохранить настройки Guacamole",
|
||
"guacamoleUpdateFailed": "Не удалось обновить настройку Guacamole",
|
||
"tailscaleSettingsSaved": "Настройки Tailscale сохранены",
|
||
"tailscaleSettingsSaveFailed": "Не удалось сохранить настройки Tailscale",
|
||
"logLevelUpdateFailed": "Не удалось обновить уровень журналирования",
|
||
"oidcSaved": "Конфигурация OIDC сохранена",
|
||
"oidcSaveFailed": "Не удалось сохранить конфигурацию OIDC",
|
||
"oidcRemoved": "Конфигурация OIDC удалена",
|
||
"oidcRemoveFailed": "Не удалось удалить конфигурацию OIDC",
|
||
"createUserRequired": "Имя пользователя и пароль обязательны",
|
||
"createUserPasswordTooShort": "Пароль должен содержать не менее 6 символов",
|
||
"createUserSuccess": "Пользователь \"{{username}}\" создан",
|
||
"createUserFailed": "Не удалось создать пользователя",
|
||
"updateAdminStatusFailed": "Не удалось обновить статус администратора",
|
||
"allSessionsRevoked": "Все сессии завершены",
|
||
"revokeSessionsFailed": "Не удалось завершить сессии",
|
||
"manageUserData": "Управление данными пользователя",
|
||
"backToUsers": "Назад к пользователям",
|
||
"manageTabAccount": "Учётная запись",
|
||
"manageTabHosts": "Хосты",
|
||
"manageTabCredentials": "Учётные данные",
|
||
"manageTabSnippets": "Сниппеты",
|
||
"manageTabSessions": "Сессии",
|
||
"manageTabDanger": "Опасность",
|
||
"manageEditorBack": "Назад к данным {{username}}",
|
||
"dataLockedBadge": "ЗАБЛОКИРОВАНО",
|
||
"dataLockedNotice": "Данные {{username}} остаются заблокированными до следующего входа. Хосты, учётные данные и сниппеты нельзя просмотреть или отредактировать до тех пор.",
|
||
"resetPasswordTitle": "Сброс пароля",
|
||
"resetPasswordOidcOnly": "Этот пользователь входит через внешнего провайдера и не имеет пароля.",
|
||
"resetPasswordPlaceholder": "Новый пароль",
|
||
"resetPasswordBtn": "Сбросить",
|
||
"resetPasswordWorking": "Сброс...",
|
||
"resetPasswordSuccess": "Пароль сброшен",
|
||
"resetPasswordSuccessWiped": "Пароль сброшен. Зашифрованные данные пользователя удалены.",
|
||
"resetPasswordFailed": "Не удалось сбросить пароль",
|
||
"resetPasswordConfirmWipe": "{{username}} не входил в систему после обновления шифрования, поэтому его данные не могут быть восстановлены. При сбросе будут удалены его хосты, учётные данные и сниппеты. Продолжить?",
|
||
"totpSectionTitle": "Двухфакторная аутентификация",
|
||
"totpStatusEnabled": "TOTP включён для этого пользователя",
|
||
"totpStatusDisabled": "TOTP не включён для этого пользователя",
|
||
"disableTotp": "Отключить",
|
||
"disableTotpConfirm": "Отключить двухфакторную аутентификацию для {{username}}? После этого он сможет входить только с паролем.",
|
||
"totpDisabledSuccess": "TOTP отключён",
|
||
"totpDisableFailed": "Не удалось отключить TOTP",
|
||
"manageApiKeys": "API-ключи",
|
||
"apiKeyNamePlaceholder": "Имя ключа",
|
||
"apiKeyCopyNotice": "Скопируйте этот ключ сейчас, он больше не будет показан.",
|
||
"noApiKeysForUser": "Нет API-ключей",
|
||
"apiKeyDeleteFailed": "Не удалось удалить API-ключ",
|
||
"exportUserData": "Экспорт данных",
|
||
"exportUserDataDesc": "Скачать хосты, учётные данные и данные файлового менеджера этого пользователя в формате JSON. Секреты расшифрованы.",
|
||
"exportUserDataSuccess": "Данные пользователя экспортированы",
|
||
"exportUserDataFailed": "Не удалось экспортировать данные пользователя",
|
||
"hostsCount": "{{count}} хостов",
|
||
"addHostForUser": "Добавить хост",
|
||
"noHostsForUser": "У этого пользователя нет хостов",
|
||
"connectToHost": "Подключиться",
|
||
"deleteHostConfirm": "Удалить хост \"{{name}}\", принадлежащий пользователю {{username}}?",
|
||
"hostDeletedSuccess": "Хост удалён",
|
||
"hostDeleteFailed": "Не удалось удалить хост",
|
||
"credentialsCount": "{{count}} учётных данных",
|
||
"addCredentialForUser": "Добавить учётные данные",
|
||
"noCredentialsForUser": "У этого пользователя нет учётных данных",
|
||
"deleteCredentialConfirm": "Удалить учётные данные \"{{name}}\", принадлежащие {{username}}?",
|
||
"credentialDeletedSuccess": "Учётные данные удалены",
|
||
"credentialDeleteFailed": "Не удалось удалить учётные данные",
|
||
"snippetsCount": "{{count}} сниппетов",
|
||
"addSnippetForUser": "Добавить сниппет",
|
||
"noSnippetsForUser": "У этого пользователя нет сниппетов",
|
||
"snippetRequiredFields": "Имя и содержимое сниппета обязательны",
|
||
"snippetNamePlaceholder": "Имя сниппета",
|
||
"snippetContentPlaceholder": "Содержимое команды",
|
||
"snippetFolderPlaceholder": "Папка (необязательно)",
|
||
"snippetSaved": "Сниппет сохранён",
|
||
"snippetSaveFailed": "Не удалось сохранить сниппет",
|
||
"deleteSnippetConfirm": "Удалить сниппет \"{{name}}\", принадлежащий {{username}}?",
|
||
"snippetDeletedSuccess": "Сниппет удалён",
|
||
"snippetDeleteFailed": "Не удалось удалить сниппет",
|
||
"noSessionsForUser": "Нет активных сессий",
|
||
"deleteUserDangerDesc": "Безвозвратно удалить {{username}} и все его данные (хосты, учётные данные, сниппеты, историю). Это действие нельзя отменить.",
|
||
"deleteUserConfirm": "Безвозвратно удалить {{username}} и все его данные?",
|
||
"deleteUserAdminBlocked": "Сначала снимите статус администратора, прежде чем удалять этого пользователя.",
|
||
"createRoleRequired": "Имя и отображаемое имя обязательны",
|
||
"createRoleSuccess": "Роль \"{{name}}\" создана",
|
||
"createRoleFailed": "Не удалось создать роль",
|
||
"apiKeyNameRequired": "Имя ключа обязательно",
|
||
"apiKeyUserRequired": "Требуется ID пользователя",
|
||
"apiKeyCreatedSuccess": "API-ключ \"{{name}}\" создан",
|
||
"apiKeyCreateFailed": "Не удалось создать API-ключ",
|
||
"exportSuccess": "База данных успешно экспортирована",
|
||
"exportFailed": "Не удалось экспортировать базу данных",
|
||
"importSelectFile": "Сначала выберите файл",
|
||
"importCompleted": "Импорт завершён: импортировано {{total}} элементов, пропущено {{skipped}}",
|
||
"importFailed": "Ошибка импорта: {{error}}",
|
||
"importError": "Не удалось импортировать базу данных",
|
||
"sectionHostDefaults": "Настройки хостов по умолчанию",
|
||
"hostDefaultsDesc": "Параметры, автоматически применяемые при создании нового хоста. Их можно переопределить для отдельных хостов.",
|
||
"hostDefaultsSocks5": "SOCKS5-прокси",
|
||
"hostDefaultsUseSocks5": "Включить SOCKS5-прокси",
|
||
"hostDefaultsUseSocks5Desc": "Предварительно заполнять SOCKS5-прокси для всех новых хостов",
|
||
"hostDefaultsSocks5Host": "Хост / порт прокси",
|
||
"hostDefaultsSocks5Username": "Имя пользователя прокси",
|
||
"hostDefaultsSocks5Password": "Пароль прокси",
|
||
"hostDefaultsMetrics": "Метрики хоста",
|
||
"hostDefaultsMetricsEnabled": "Включить метрики",
|
||
"hostDefaultsMetricsEnabledDesc": "По умолчанию собирать данные о ЦП, памяти и другую статистику с новых хостов",
|
||
"hostDefaultsStatusCheckEnabled": "Включить проверку состояния",
|
||
"hostDefaultsStatusCheckEnabledDesc": "По умолчанию опрашивать состояние новых хостов (онлайн/офлайн)",
|
||
"hostDefaultsTerminal": "Терминал",
|
||
"hostDefaultsSessionLogging": "Журналирование сеансов",
|
||
"hostDefaultsSessionLoggingDesc": "По умолчанию записывать терминальные сеансы на новых хостах",
|
||
"hostDefaultsCommandHistory": "История команд",
|
||
"hostDefaultsCommandHistoryDesc": "По умолчанию отслеживать историю команд на новых хостах",
|
||
"hostDefaultsSaved": "Настройки хостов по умолчанию сохранены",
|
||
"hostDefaultsSaveFailed": "Не удалось сохранить настройки хостов по умолчанию",
|
||
"rolePermissions": {
|
||
"count": "{{count}} разрешений",
|
||
"editAction": "Изменить разрешения",
|
||
"loadError": "Не удалось загрузить каталог разрешений",
|
||
"saved": "Разрешения роли сохранены",
|
||
"saveError": "Не удалось сохранить разрешения роли",
|
||
"save": "Сохранить",
|
||
"saving": "Сохранение…"
|
||
}
|
||
},
|
||
"newUi": {
|
||
"sidebar": {
|
||
"quickConnect": {
|
||
"hostLabel": "Хост",
|
||
"hostPlaceholder": "192.168.1.1 или example.com",
|
||
"portLabel": "Порт",
|
||
"portPlaceholder": "22",
|
||
"usernameLabel": "Имя пользователя",
|
||
"usernamePlaceholder": "имя пользователя",
|
||
"authLabel": "Аутентификация",
|
||
"passwordLabel": "Пароль",
|
||
"passwordPlaceholder": "пароль",
|
||
"privateKeyLabel": "Закрытый ключ",
|
||
"privateKeyPlaceholder": "Вставьте приватный ключ...",
|
||
"credentialLabel": "Учетные данные",
|
||
"credentialPlaceholder": "Выберите сохранённые учётные данные",
|
||
"connectToTerminal": "Подключиться к терминалу",
|
||
"connectToFiles": "Подключиться к файлам"
|
||
},
|
||
"history": {
|
||
"noTerminalSelected": "Терминал не выбран",
|
||
"noTerminalSelectedHint": "Откройте вкладку SSH-терминала, чтобы просмотреть историю команд",
|
||
"searchPlaceholder": "Поиск по истории...",
|
||
"clearAll": "Очистить всё",
|
||
"noHistoryEntries": "Нет записей в истории",
|
||
"trackingDisabled": "Отслеживание истории отключено",
|
||
"trackingDisabledHint": "Включите его в настройках терминала хоста."
|
||
},
|
||
"sshTools": {
|
||
"keyRecordingTitle": "Запись клавиш",
|
||
"recordToTerminals": "Записать в терминалы",
|
||
"selectAll": "Все",
|
||
"selectNone": "Ни одного",
|
||
"noTerminalTabsOpen": "Нет открытых вкладок терминала",
|
||
"selectTerminalsAbove": "Выберите терминалы выше",
|
||
"broadcastInputPlaceholder": "Введите текст для трансляции нажатий...",
|
||
"fillPassword": "Заполнить пароль",
|
||
"fillPasswordSuccess": "Пароль введён в {{count}} терминалах",
|
||
"fillPasswordMissing": "Нет сохранённого пароля для {{count}} выбранных терминалов",
|
||
"stopRecording": "Остановить запись",
|
||
"startRecording": "Начать запись",
|
||
"settingsTitle": "Настройки",
|
||
"enableRightClickCopyPaste": "Включить копирование/вставку правой кнопкой мыши"
|
||
},
|
||
"splitScreen": {
|
||
"layoutTitle": "Макет",
|
||
"selectLayoutAbove": "Выберите макет выше",
|
||
"selectLayoutHint": "Выберите количество отображаемых панелей",
|
||
"panesTitle": "Панели",
|
||
"openTabsTitle": "Открытые вкладки",
|
||
"dragTabsHint": "Перетащите вкладки в панели выше или используйте быстрое назначение",
|
||
"dropHere": "Перетащите сюда",
|
||
"emptyPane": "Пусто",
|
||
"dashboard": "Панель управления",
|
||
"clearSplitScreen": "Убрать разделение",
|
||
"quickAssign": "Быстрое назначение",
|
||
"alreadyAssigned": "Панель {{index}}",
|
||
"splitTab": "Разделить вкладку",
|
||
"addToSplit": "Добавить в разделение",
|
||
"removeFromSplit": "Убрать из разделения",
|
||
"assignToPane": "Назначить на панель",
|
||
"hotkeysTitle": "Горячие клавиши",
|
||
"hotkeysSplitRight": "Переключить разделение на две панели",
|
||
"hotkeysSplitBelow": "Переключить разделение на три панели",
|
||
"hotkeysNavigatePane": "Навигация по панелям",
|
||
"hotkeysNextTab": "Следующая вкладка",
|
||
"hotkeysPrevTab": "Предыдущая вкладка"
|
||
},
|
||
"snippets": {
|
||
"title": "Сниппеты",
|
||
"createSnippetTitle": "Создать сниппет",
|
||
"createSnippetDescription": "Создать новый сниппет команды для быстрого выполнения",
|
||
"nameLabel": "Название",
|
||
"namePlaceholder": "например, Перезапустить Nginx",
|
||
"descriptionLabel": "Описание",
|
||
"descriptionPlaceholder": "Необязательное описание",
|
||
"optional": "Необязательно",
|
||
"folderLabel": "Папка",
|
||
"noFolder": "Нет папки (Без категории)",
|
||
"commandLabel": "Команда",
|
||
"commandPlaceholder": "например, sudo systemctl restart nginx",
|
||
"cancel": "Отмена",
|
||
"createSnippetButton": "Создать сниппет",
|
||
"createFolderTitle": "Создать папку",
|
||
"createFolderDescription": "Организуйте сниппеты по папкам",
|
||
"folderNameLabel": "Название папки",
|
||
"folderNamePlaceholder": "например, Системные команды, Скрипты Docker",
|
||
"folderColorLabel": "Цвет папки",
|
||
"folderIconLabel": "Значок папки",
|
||
"previewLabel": "Предпросмотр",
|
||
"folderNameFallback": "Название папки",
|
||
"createFolderButton": "Создать папку",
|
||
"targetTerminals": "Целевые терминалы",
|
||
"selectAll": "Все",
|
||
"selectNone": "Ничего",
|
||
"noTerminalTabsOpen": "Нет открытых вкладок терминала",
|
||
"searchPlaceholder": "Поиск сниппетов...",
|
||
"newSnippet": "Новый сниппет",
|
||
"newFolder": "Новая папка",
|
||
"run": "Запустить",
|
||
"noSnippetsInFolder": "В этой папке нет сниппетов",
|
||
"uncategorized": "Без категории",
|
||
"editSnippetTitle": "Редактировать сниппет",
|
||
"editSnippetDescription": "Обновить этот командный сниппет",
|
||
"saveSnippetButton": "Сохранить изменения",
|
||
"createSuccess": "Сниппет успешно создан",
|
||
"createFailed": "Не удалось создать сниппет",
|
||
"updateSuccess": "Сниппет успешно обновлён",
|
||
"updateFailed": "Не удалось обновить сниппет",
|
||
"deleteFailed": "Не удалось удалить сниппет",
|
||
"folderCreateSuccess": "Папка успешно создана",
|
||
"folderCreateFailed": "Не удалось создать папку",
|
||
"editFolderTitle": "Редактировать папку",
|
||
"editFolderDescription": "Переименовать или изменить внешний вид этой папки",
|
||
"saveFolderButton": "Сохранить изменения",
|
||
"editFolder": "Редактировать папку",
|
||
"deleteFolder": "Удалить папку",
|
||
"folderDeleteSuccess": "Папка \"{{name}}\" удалена",
|
||
"folderDeleteFailed": "Не удалось удалить папку",
|
||
"folderEditSuccess": "Папка успешно обновлена",
|
||
"folderEditFailed": "Не удалось обновить папку",
|
||
"confirmRunMessage": "Запустить \"{{name}}\"?",
|
||
"confirmRunButton": "Запустить",
|
||
"runSuccess": "Запущен \"{{name}}\" в {{count}} терминале(ах)",
|
||
"copySuccess": "Сниппет \"{{name}}\" скопирован в буфер обмена",
|
||
"shareTitle": "Поделиться сниппетом",
|
||
"shareUser": "Пользователь",
|
||
"shareRole": "Роль",
|
||
"selectUser": "Выберите пользователя...",
|
||
"selectRole": "Выберите роль...",
|
||
"shareSuccess": "Сниппет успешно предоставлен в общий доступ",
|
||
"shareFailed": "Не удалось предоставить сниппет в общий доступ",
|
||
"revokeSuccess": "Доступ отозван",
|
||
"revokeFailed": "Не удалось отозвать доступ",
|
||
"currentAccess": "Текущий доступ",
|
||
"shareLoadError": "Не удалось загрузить данные общего доступа",
|
||
"loading": "Загрузка...",
|
||
"close": "Закрыть",
|
||
"reorderFailed": "Не удалось сохранить порядок сниппетов",
|
||
"importExport": "Импорт / Экспорт",
|
||
"exportBtn": "Экспорт JSON",
|
||
"importBtn": "Импорт JSON",
|
||
"exportSuccess": "Сниппеты успешно экспортированы",
|
||
"exportFailed": "Не удалось экспортировать сниппеты",
|
||
"importTitle": "Импорт сниппетов",
|
||
"importDescription": "Импорт сниппетов и папок из JSON-файла, экспортированного Termix",
|
||
"importDropOrClick": "Перетащите JSON-файл сюда или нажмите, чтобы выбрать",
|
||
"importSelectedFile": "Выбрано: {{name}}",
|
||
"importOverwrite": "Перезаписывать существующие сниппеты с одинаковыми именами и папками",
|
||
"importStartBtn": "Импортировать",
|
||
"importSuccess": "Импорт завершён: добавлено сниппетов: {{snippets}}, обновлено: {{updated}}, пропущено: {{skipped}}, добавлено папок: {{folders}}",
|
||
"importFailed": "Не удалось импортировать сниппеты",
|
||
"importInvalidFile": "Неверный файл: ожидается JSON-объект с массивами snippets или folders",
|
||
"targetHostsLabel": "Целевые хосты",
|
||
"targetHostsHint": "Назначьте хосты для запуска этого сниппета напрямую, без открытого терминала.",
|
||
"noHostsAvailable": "Нет настроенных хостов",
|
||
"clearTargetHosts": "Очистить всё",
|
||
"hasTargetHosts": "Имеет целевые хосты",
|
||
"runOnTargets": "Запустить на целевых хостах",
|
||
"directRunSuccess": "Запущен \"{{name}}\" на {{count}} хосте(ах)",
|
||
"directRunPartialFail": "\"{{name}}\" не удалось запустить на одном или нескольких хостах",
|
||
"executionResultTitle": "Результаты выполнения: {{name}}",
|
||
"executionResultDescription": "Вывод выполнения сниппета на каждом целевом хосте.",
|
||
"executionSuccess": "Успех",
|
||
"executionFailed": "Ошибка"
|
||
},
|
||
"keybindings": {
|
||
"title": "Клавиатурные сочетания",
|
||
"description": "Настройте сочетания клавиш для копирования, вставки и управления в терминале, а также назначьте клавиши для отправки текста или запуска фрагмента кода.",
|
||
"defaultsHeading": "Встроенные сочетания клавиш",
|
||
"customHeading": "Пользовательские сочетания клавиш",
|
||
"addBinding": "Добавить ярлык",
|
||
"addBindingTitle": "Добавить ярлык",
|
||
"editBindingTitle": "Редактировать ярлык",
|
||
"loading": "Загрузка...",
|
||
"noCustomBindings": "Пользовательские сочетания клавиш пока отсутствуют.",
|
||
"defaultBadge": "По умолчанию",
|
||
"customizedBadge": "Индивидуальный",
|
||
"customize": "Настроить",
|
||
"resetToDefault": "Сбросить до значений по умолчанию",
|
||
"resetAllToDefaults": "Сбросить все настройки до значений по умолчанию",
|
||
"close": "Закрывать",
|
||
"cancel": "Отмена",
|
||
"saveBinding": "Сохранить ярлык",
|
||
"saveError": "Не удалось сохранить сочетания клавиш.",
|
||
"pressKeysToRecord": "Комбинация клавиш",
|
||
"pressKeysPlaceholder": "Нажмите и удерживайте клавиши.",
|
||
"recording": "Нажимайте клавиши...",
|
||
"comboRequiredError": "Сначала нажмите комбинацию клавиш.",
|
||
"textRequiredError": "Введите текст для отправки",
|
||
"controlCodeRequiredError": "Введите одну букву в качестве управляющего кода.",
|
||
"snippetRequiredError": "Выберите фрагмент",
|
||
"conflictWarning": "Эта комбинация уже привязана к {{combo}}. Сохранение активирует обе комбинации.",
|
||
"actionLabel": "Действие",
|
||
"actionCopy": "Скопировать выделенный фрагмент",
|
||
"actionPaste": "Вставить",
|
||
"actionSendControlCode": "Отправить сигнал Ctrl+буква",
|
||
"actionSendText": "Отправить текст",
|
||
"actionRunSnippet": "Запустить существующий фрагмент",
|
||
"controlCodeLabel": "Письмо",
|
||
"textLabel": "Текст для отправки",
|
||
"appendEnterLabel": "Нажмите Enter после отправки",
|
||
"snippetLabel": "Фрагмент",
|
||
"selectSnippetPlaceholder": "Выберите фрагмент",
|
||
"orphanedSnippetWarning": "фрагмент не найден",
|
||
"clipboardPermissionNote": "В некоторых браузерах при первом использовании может запрашиваться разрешение на использование буфера обмена."
|
||
},
|
||
"userProfile": {
|
||
"donateTitle": "Поддержите Termix",
|
||
"donateDescription": "Termix бесплатный, размещается самостоятельно и разрабатывается лишь несколькими людьми в свободное время. Если он сэкономил вам время или деньги, пожертвование в криптовалюте поможет продолжить развитие.",
|
||
"donateMilestones": "Пожертвования помогают оплатить время на исследование и обучение, необходимое для создания поддержки SAML, Kubernetes и Agent. Следите за прогрессом и поддержите.",
|
||
"donateButton": "Пожертвовать криптовалюту",
|
||
"storageModeLocal": "Браузер",
|
||
"storageModeCloud": "База данных",
|
||
"storageModeDescription": "Браузер сохраняет настройки только в этом браузере. База данных синхронизируется с сервером и загружается на любом устройстве.",
|
||
"resetToDefaults": "Сбросить настройки по умолчанию",
|
||
"resetToDefaultsSuccess": "Настройки сброшены до значений по умолчанию.",
|
||
"storageModeSwitch": "Хранилище настроек",
|
||
"sectionAccount": "Учетная запись",
|
||
"sectionAppearance": "Внешний вид",
|
||
"sectionSecurity": "Безопасность",
|
||
"sectionApiKeys": "API-ключи",
|
||
"sectionData": "Данные",
|
||
"sectionC2sTunnels": "C2S-туннели",
|
||
"usernameLabel": "Имя пользователя",
|
||
"roleLabel": "Роль",
|
||
"roleAdministrator": "Администратор",
|
||
"authMethodLabel": "Метод аутентификации",
|
||
"authMethodLocal": "Локальный",
|
||
"twoFaLabel": "2FA",
|
||
"twoFaOn": "Включено",
|
||
"twoFaOff": "Отключено",
|
||
"versionLabel": "Версия",
|
||
"betaProgramTitle": "Бета-программа",
|
||
"betaProgramDescription": "Попробуйте будущие функции раньше с помощью еженедельного тега :beta Docker. Нестабильно, не для продакшена.",
|
||
"betaProgramFeedback": "Нашли ошибку? Сообщите о ней здесь.",
|
||
"betaProgramLearnMore": "Подробнее",
|
||
"deleteAccount": "Удалить учетную запись",
|
||
"deleteAccountDescription": "Безвозвратно удалить вашу учетную запись",
|
||
"changeServerDescription": "Переключиться на другой сервер Termix",
|
||
"deleteButton": "Удалить",
|
||
"deleteAccountPermanent": "Это действие необратимо и не может быть отменено.",
|
||
"deleteAccountWarning": "Все сеансы, хосты, учётные данные и настройки будут безвозвратно удалены.",
|
||
"confirmPasswordDeletePlaceholder": "Введите пароль для подтверждения",
|
||
"languageLabel": "Язык",
|
||
"themeLabel": "Тема",
|
||
"fontSizeLabel": "Размер шрифта",
|
||
"accentColorLabel": "Акцентный цвет",
|
||
"settingsTerminal": "Терминал",
|
||
"commandAutocomplete": "Автодополнение команд",
|
||
"commandAutocompleteDesc": "Показывать автодополнение при вводе",
|
||
"keyboardShortcuts": "Клавиатурные сочетания",
|
||
"keyboardShortcutsDescription": "Настройте сочетания клавиш для копирования, вставки и команд в терминале.",
|
||
"manageShortcuts": "Управлять",
|
||
"terminalLinkBehavior": "Клик по ссылке в терминале",
|
||
"terminalLinkBehaviorDesc": "Поведение по умолчанию при клике по ссылкам в терминале",
|
||
"historyTracking": "История команд",
|
||
"historyTrackingDesc": "Отслеживать команды терминала",
|
||
"commandPalette": "Палитра команд",
|
||
"commandPaletteDesc": "Включить сочетание клавиш",
|
||
"reopenTabsOnLogin": "Восстанавливать вкладки при входе",
|
||
"reopenTabsOnLoginDesc": "Восстанавливать открытые вкладки при входе или обновлении страницы, в том числе с другого устройства",
|
||
"confirmTabClose": "Подтверждение закрытия вкладки",
|
||
"confirmTabCloseDesc": "Запрашивать подтверждение перед закрытием вкладок терминала",
|
||
"settingsSidebar": "Боковая панель",
|
||
"showHostTags": "Показывать теги хостов",
|
||
"showHostTagsDesc": "Отображать теги в списке хостов",
|
||
"hostTrayOnClick": "Разворачивать действия хоста по клику",
|
||
"hostTrayOnClickDesc": "Всегда показывать кнопки подключения; клик для разворачивания параметров управления вместо наведения",
|
||
"compactHostView": "Компактный вид хостов",
|
||
"compactHostViewDesc": "Сворачивать каждый хост в одну строку, показывая только имя и адрес",
|
||
"statusColors": "Цвета состояния",
|
||
"statusColorsDesc": "Использовать зелёный/красный для отображения статуса онлайн/офлайн вместо акцентного цвета",
|
||
"pinAppRail": "Закрепить панель приложений",
|
||
"pinAppRailDesc": "Оставлять левую боковую панель приложений всегда развёрнутой, а не разворачивать при наведении",
|
||
"expandAppRailOnHover": "Разворачивать панель приложений при наведении",
|
||
"expandAppRailOnHoverDesc": "Позволять левой боковой панели приложений разворачиваться при наведении указателя",
|
||
"settingsNavigation": "Навигация",
|
||
"navigationTabsDesc": "Выберите вкладки для отображения в боковой панели приложения",
|
||
"settingsSnippets": "Сниппеты",
|
||
"foldersCollapsed": "Сворачивать папки",
|
||
"foldersCollapsedDesc": "Сворачивать папки по умолчанию",
|
||
"confirmExecution": "Подтверждать выполнение",
|
||
"confirmExecutionDesc": "Подтверждать перед запуском сниппетов",
|
||
"settingsUpdates": "Обновления",
|
||
"disableUpdateChecks": "Отключить проверку обновлений",
|
||
"disableUpdateChecksDesc": "Не проверять наличие обновлений",
|
||
"totpAuthenticator": "Аутентификатор TOTP",
|
||
"totpEnabled": "2FA включена",
|
||
"totpDisabled": "Добавить дополнительную защиту",
|
||
"disable": "Отключить",
|
||
"enable": "Включить",
|
||
"setupTotp": "Настроить TOTP",
|
||
"qrCode": "QR-код",
|
||
"totpInstructions": "Сканируйте QR-код или введите секрет в аутентификаторе, затем введите 6-значный код",
|
||
"totpCodePlaceholder": "000000",
|
||
"verify": "Проверить",
|
||
"changePassword": "Сменить пароль",
|
||
"currentPasswordLabel": "Текущий пароль",
|
||
"currentPasswordPlaceholder": "Текущий пароль",
|
||
"newPasswordLabel": "Новый пароль",
|
||
"newPasswordPlaceholder": "Новый пароль",
|
||
"confirmPasswordLabel": "Подтвердите новый пароль",
|
||
"confirmPasswordPlaceholder": "Подтвердите новый пароль",
|
||
"updatePassword": "Обновить пароль",
|
||
"createApiKeyTitle": "Создать API-ключ",
|
||
"createApiKeyDescription": "Создать новый API-ключ для программного доступа.",
|
||
"apiKeyNameLabel": "Имя",
|
||
"apiKeyNamePlaceholder": "например, CI Pipeline",
|
||
"expiryDateLabel": "Срок действия",
|
||
"optional": "необязательно",
|
||
"cancel": "Отмена",
|
||
"createKey": "Создать ключ",
|
||
"apiKeyCount": "{{count}} ключей",
|
||
"newKey": "Новый ключ",
|
||
"noApiKeys": "Нет ключей API.",
|
||
"apiKeyActive": "Активен",
|
||
"apiKeyUsageHint": "Укажите ваш ключ в",
|
||
"apiKeyUsageHintHeader": "заголовке.",
|
||
"apiKeyPermissionsHint": "Ключи наследуют разрешения создавшего пользователя.",
|
||
"exportData": "Экспорт моих данных",
|
||
"exportDataDesc": "Загрузите резервную копию ваших хостов, учетных данных и настроек, чтобы перенести их на другое устройство.",
|
||
"export": "Экспорт",
|
||
"exporting": "Экспорт...",
|
||
"importData": "Импортировать мои данные",
|
||
"importDataDesc": "Восстановите хосты, учетные данные и настройки из файла резервной копии .sqlite.",
|
||
"importDataSelected": "Выбрано: {{name}}",
|
||
"selectFile": "Выберите файл",
|
||
"changeFile": "Изменять",
|
||
"import": "Импорт",
|
||
"importing": "Импорт...",
|
||
"exportSuccess": "Данные успешно экспортированы.",
|
||
"exportFailed": "Экспорт данных не удался",
|
||
"importSelectFile": "Пожалуйста, сначала выберите файл.",
|
||
"importCompleted": "Импорт завершен: импортировано {{total}} элементов, {{skipped}} пропущено",
|
||
"importFailed": "Импорт не удался: {{error}}",
|
||
"roleUser": "Пользователь",
|
||
"authMethodDual": "Двойная аутентификация",
|
||
"authMethodOidc": "OIDC",
|
||
"totpSetupFailed": "Не удалось запустить настройку TOTP",
|
||
"totpEnter6Digits": "Введите 6-значный код",
|
||
"totpEnabledSuccess": "Двухфакторная аутентификация включена",
|
||
"totpInvalidCode": "Неверный код, попробуйте снова",
|
||
"totpDisableInputRequired": "Введите код TOTP или пароль",
|
||
"totpDisabledSuccess": "Двухфакторная аутентификация отключена",
|
||
"totpDisableFailed": "Не удалось отключить 2FA",
|
||
"totpDisableTitle": "Отключить 2FA",
|
||
"totpDisablePlaceholder": "Введите код TOTP или пароль",
|
||
"totpDisableConfirm": "Отключить 2FA",
|
||
"totpContinueVerify": "Продолжить проверку",
|
||
"totpVerifyTitle": "Проверка кода",
|
||
"totpBackupTitle": "Резервные коды",
|
||
"totpDownloadBackup": "Скачать резервные коды",
|
||
"passkeys": "Ключи доступа",
|
||
"passkeysDesc": "Используйте учётные данные WebAuthn/FIDO2 для входа без пароля",
|
||
"passkeyName": "Название ключа доступа",
|
||
"passkeyUvPreferred": "Предпочтительно",
|
||
"passkeyUvRequired": "Обязательно",
|
||
"passkeyUvDiscouraged": "Не рекомендуется",
|
||
"addPasskey": "Добавить ключ доступа",
|
||
"noPasskeys": "Нет зарегистрированных ключей доступа.",
|
||
"passkeyAdded": "Ключ доступа добавлен",
|
||
"passkeyAddFailed": "Не удалось добавить ключ доступа",
|
||
"passkeyDeleted": "Ключ доступа удалён",
|
||
"passkeyDeleteFailed": "Ошибка удаления ключа доступа",
|
||
"done": "Готово",
|
||
"secretCopied": "Секрет скопирован в буфер обмена",
|
||
"apiKeyNameRequired": "Требуется имя ключа",
|
||
"apiKeyCreated": "API-ключ «{{name}}» создан",
|
||
"apiKeyCreateFailed": "Ошибка создания API-ключа",
|
||
"apiKeyUser": "Пользователь",
|
||
"apiKeyExpires": "Истекает",
|
||
"apiKeyRevoked": "API-ключ «{{name}}» отозван",
|
||
"apiKeyRevokeFailed": "Ошибка отзыва API-ключа",
|
||
"passwordFieldsRequired": "Требуются текущий и новый пароль",
|
||
"passwordMismatch": "Пароли не совпадают",
|
||
"passwordTooShort": "Пароль должен содержать не менее 6 символов",
|
||
"passwordUpdated": "Пароль успешно обновлен",
|
||
"passwordUpdateFailed": "Ошибка обновления пароля",
|
||
"deletePasswordRequired": "Для удаления аккаунта требуется пароль",
|
||
"deleteFailed": "Ошибка удаления аккаунта",
|
||
"deleting": "Удаление...",
|
||
"colorPickerTooltip": "Открыть палитру цветов",
|
||
"themeSystem": "Системная",
|
||
"themeLight": "Светлая",
|
||
"themeDark": "Темная",
|
||
"themeDracula": "Dracula",
|
||
"themeCatppuccin": "Catppuccin",
|
||
"themeNord": "Nord",
|
||
"themeSolarized": "Solarized",
|
||
"themeTokyoNight": "Tokyo Night",
|
||
"themeOneDark": "One Dark",
|
||
"themeGruvbox": "Gruvbox"
|
||
}
|
||
}
|
||
},
|
||
"tmuxMonitor": {
|
||
"title": "Монитор Tmux",
|
||
"failedToLoadHosts": "Ошибка загрузки хостов",
|
||
"failedToLoad": "Ошибка загрузки сессий tmux",
|
||
"tmuxUnavailable": "tmux не установлен на этом хосте",
|
||
"noSessions": "Нет сессий tmux на этом хосте",
|
||
"noHostSelected": "Хост не выбран",
|
||
"attached": "Присоединён",
|
||
"detached": "Отсоединён",
|
||
"attach": "Присоединить",
|
||
"editTags": "Изменить теги",
|
||
"tagsHint": "Теги через запятую (например, YOLO, lab, training)",
|
||
"tagsSaved": "Теги сохранены",
|
||
"tagsSaveFailed": "Не удалось сохранить теги",
|
||
"searchPlaceholder": "Поиск вывода по сессиям...",
|
||
"searchResults": "{{count}} совпадений",
|
||
"searchFailed": "Поиск не удался",
|
||
"selectPaneHint": "Выберите панель для предпросмотра её вывода",
|
||
"closePreview": "Закрыть предпросмотр",
|
||
"newSession": "Новая сессия",
|
||
"newSessionHint": "Имя сессии (буквы, цифры, _ @ % + = -)",
|
||
"newSessionPlaceholder": "my-session",
|
||
"create": "Создать",
|
||
"sessionCreated": "Сессия \"{{name}}\" создана",
|
||
"sessionCreateFailed": "Не удалось создать сессию",
|
||
"splitRight": "Разделить вправо",
|
||
"splitDown": "Разделить вниз",
|
||
"splitFailed": "Не удалось разделить панель",
|
||
"newWindow": "Новое окно",
|
||
"windowCreateFailed": "Не удалось создать окно",
|
||
"attachSessionTooltip": "Присоединиться к {{session}}",
|
||
"refresh": "Обновить",
|
||
"refreshFailed": "Не удалось обновить сессии",
|
||
"collapseAll": "Свернуть всё",
|
||
"expandAll": "Развернуть всё",
|
||
"moreActions": "Дополнительные действия",
|
||
"sessionStats": "Статистика сессии",
|
||
"renameSessionTitle": "Переименовать сессию \"{{name}}\"",
|
||
"rename": "Переименовать",
|
||
"sessionRenamed": "Сессия переименована в \"{{name}}\"",
|
||
"sessionRenameFailed": "Не удалось переименовать сессию",
|
||
"editTagsTitle": "Изменить теги для \"{{name}}\"",
|
||
"killPane": "Завершить панель",
|
||
"resizeTree": "Перетащите, чтобы изменить размер — двойной клик для сброса",
|
||
"reattach": "Переподключиться (исправляет искажённое отображение)",
|
||
"killWindow": "Завершить окно",
|
||
"killWindowTitle": "Завершить окно {{index}} сессии \"{{session}}\"?",
|
||
"killWindowBody": "Все панели и процессы в этом окне будут завершены. Завершение последнего окна завершит сессию.",
|
||
"windowKillFailed": "Не удалось завершить окно",
|
||
"statusActivity": "Активность",
|
||
"statusWindows": "Окна",
|
||
"statusPanes": "панели",
|
||
"statusTags": "Теги",
|
||
"killPaneTitle": "Завершить панель {{id}}?",
|
||
"killPaneBody": "Процесс, запущенный в этой панели, будет завершён. Завершение последней панели закроет её окно.",
|
||
"paneKillFailed": "Не удалось завершить панель",
|
||
"killSessionTitle": "Завершить сессию \"{{name}}\"?",
|
||
"killSessionBody": "Все окна и запущенные процессы в этой сессии будут завершены. Это действие нельзя отменить.",
|
||
"kill": "Завершить",
|
||
"sessionKilled": "Сессия \"{{name}}\" завершена",
|
||
"sessionKillFailed": "Не удалось завершить сессию",
|
||
"hostUnreachable": "Не удалось подключиться к хосту. Проверьте, что он онлайн и доступен.",
|
||
"noServer": "На этом хосте не запущен сервер tmux.",
|
||
"searchTruncated": "Частичные результаты — поиск охватывает последние {{lines}} строк каждой панели и не более {{panes}} панелей.",
|
||
"closeSearchResults": "Закрыть результаты поиска",
|
||
"retry": "Повторить",
|
||
"noHosts": "Нет доступных SSH-хостов",
|
||
"noHostsHint": "Включите опцию Tmux Monitor для SSH-хоста (Host Manager → вкладка Terminal), чтобы отслеживать его tmux-сессии.",
|
||
"tmuxInstallHint": "Установите его на хост с помощью:",
|
||
"attachTooltip": "Открыть терминал на {{host}}",
|
||
"attachTooltipPane": "Открыть терминал на {{host}} — tmux-сессия {{session}}",
|
||
"timeJustNow": "только что",
|
||
"timeMinutes": "{{count}}м назад",
|
||
"timeHours": "{{count}}ч назад",
|
||
"timeDays": "{{count}}д назад"
|
||
},
|
||
"mobileKeyboard": {
|
||
"shift": "Shift",
|
||
"ctrl": "Ctrl",
|
||
"esc": "Esc",
|
||
"tab": "Tab",
|
||
"backTab": "⇥",
|
||
"arrowUp": "Вверх",
|
||
"arrowDown": "Вниз",
|
||
"arrowLeft": "Влево",
|
||
"arrowRight": "Вправо",
|
||
"home": "Home",
|
||
"end": "End",
|
||
"pageUp": "PgUp",
|
||
"pageDown": "PgDn",
|
||
"delete": "Del",
|
||
"paste": "Вставить",
|
||
"editQuickKeys": "Редактировать",
|
||
"quickKeysTitle": "Быстрые клавиши",
|
||
"quickKeysDesc": "Нажмите × для удаления. Поддерживается до 8 символов.",
|
||
"quickKeyPlaceholder": "напр. sudo ",
|
||
"addQuickKey": "Добавить",
|
||
"removeQuickKey": "Удалить",
|
||
"resetDefaults": "Сбросить по умолчанию",
|
||
"done": "Готово"
|
||
},
|
||
"serial": {
|
||
"title": "Последовательный порт",
|
||
"portLabel": "Порт",
|
||
"portPlaceholder": "/dev/ttyUSB0 or COM3",
|
||
"baudRateLabel": "Скорость передачи",
|
||
"dataBitsLabel": "Биты данных",
|
||
"stopBitsLabel": "Стоп-биты",
|
||
"parityLabel": "Чётность",
|
||
"parityNone": "Нет",
|
||
"parityEven": "Чётный",
|
||
"parityOdd": "Нечётный",
|
||
"connect": "Подключиться",
|
||
"disconnect": "Отключиться",
|
||
"refreshPorts": "Обновить порты",
|
||
"connected": "Подключено к {{path}} на скорости {{baud}} бод",
|
||
"disconnected": "Последовательный порт отключен",
|
||
"connectionError": "Ошибка открытия последовательного порта",
|
||
"wsError": "Ошибка WebSocket",
|
||
"errorNoServerUrl": "Не настроен URL сервера",
|
||
"notSupportedTitle": "Последовательный порт не поддерживается",
|
||
"notSupported": "Последовательные подключения требуют браузер с поддержкой Web Serial API (Chrome, Edge или Firefox 151+) или десктопное приложение Termix.",
|
||
"hideHint": "Вы можете скрыть вкладку «Serial» в разделе «Профиль пользователя» > «Оформление» > «Боковая панель» > «Навигация».",
|
||
"browserPickerHint": "Нажмите «Подключиться», и браузер откроет окно выбора порта для выбора устройства."
|
||
},
|
||
"metricsHistory": {
|
||
"title": "История метрик",
|
||
"historySuffix": "История",
|
||
"cpuMemoryDisk": "ЦП / Память / Диск",
|
||
"network": "Сеть",
|
||
"download": "RX",
|
||
"upload": "TX",
|
||
"noData": "Нет исторических данных за этот период.",
|
||
"custom": "Пользовательский",
|
||
"to": "по",
|
||
"apply": "Применить",
|
||
"viewHistory": "Просмотреть историю"
|
||
},
|
||
"alerts": {
|
||
"tabFirings": "Оповещения",
|
||
"tabRules": "Правила",
|
||
"tabChannels": "Каналы",
|
||
"noFirings": "Нет неподтверждённых оповещений",
|
||
"noRules": "Не настроены правила оповещений",
|
||
"noChannels": "Не настроены каналы уведомлений",
|
||
"rulesDesc": "Правила оповещений инициируют уведомления",
|
||
"channelsDesc": "Куда отправляются уведомления об оповещениях",
|
||
"acknowledge": "Подтвердить",
|
||
"ackAll": "Подтвердить все",
|
||
"allAcknowledged": "Все оповещения подтверждены",
|
||
"ackFailed": "Не удалось подтвердить оповещение",
|
||
"ackAllFailed": "Не удалось подтвердить все оповещения",
|
||
"showAcknowledged": "Показать все",
|
||
"hideAcknowledged": "Скрыть подтверждённые",
|
||
"addChannel": "Добавить канал",
|
||
"editChannel": "Изменить канал",
|
||
"channelName": "Название",
|
||
"channelType": "Тип",
|
||
"channelNameRequired": "Название обязательно",
|
||
"webhookUrl": "URL",
|
||
"webhookUrlRequired": "URL вебхука обязателен",
|
||
"webhookDesc": "Отправлять JSON-данные методом POST на этот URL при каждом срабатывании оповещения",
|
||
"ntfyServer": "URL сервера",
|
||
"ntfyTopic": "Тема",
|
||
"ntfyTopicRequired": "Тема обязательна",
|
||
"ntfyToken": "Токен доступа (необязательно)",
|
||
"channelSaveFailed": "Не удалось сохранить канал",
|
||
"test": "Проверить",
|
||
"testSent": "Тестовое уведомление отправлено",
|
||
"testFailed": "Ошибка отправки тестового уведомления",
|
||
"addRule": "Добавить правило оповещения",
|
||
"editRule": "Редактировать правило оповещения",
|
||
"ruleName": "Имя правила",
|
||
"ruleNameRequired": "Имя обязательно",
|
||
"triggerType": "Триггер",
|
||
"thresholdValue": "Порог (%)",
|
||
"durationSeconds": "Длительность (секунд, 0 = сработать немедленно)",
|
||
"cooldownMinutes": "Задержка повторения (минут)",
|
||
"channels": "Каналы уведомлений",
|
||
"noChannelsHint": "Сначала добавьте каналы на вкладке «Каналы»",
|
||
"ruleSaveFailed": "Не удалось сохранить правило"
|
||
}
|
||
}
|