* fix: Remove empty catch blocks and add error logging
* refactor: Modularize server stats widget collectors
* feat: Add i18n support for terminal customization and login stats
- Add comprehensive terminal customization translations (60+ keys) for appearance, behavior, and advanced settings across all 4 languages
- Add SSH login statistics translations
- Update HostManagerEditor to use i18n for all terminal customization UI elements
- Update LoginStatsWidget to use i18n for all UI text
- Add missing logger imports in backend files for improved debugging
* feat: Add keyboard shortcut enhancements with Kbd component
- Add shadcn kbd component for displaying keyboard shortcuts
- Enhance file manager context menu to display shortcuts with Kbd component
- Add 5 new keyboard shortcuts to file manager:
- Ctrl+D: Download selected files
- Ctrl+N: Create new file
- Ctrl+Shift+N: Create new folder
- Ctrl+U: Upload files
- Enter: Open/run selected file
- Add keyboard shortcut hints to command palette footer
- Create helper function to parse and render keyboard shortcuts
* feat: Add i18n support for command palette
- Add commandPalette translation section with 22 keys to all 4 languages
- Update CommandPalette component to use i18n for all UI text
- Translate search placeholder, group headings, menu items, and shortcut hints
- Support multilingual command palette interface
* feat: Add smooth transitions and animations to UI
- Add fade-in/fade-out transition to command palette (200ms)
- Add scale animation to command palette on open/close
- Add smooth popup animation to context menu (150ms)
- Add visual feedback for file selection with ring effect
- Add hover scale effect to file grid items
- Add transition-all to list view items for consistent behavior
- Zero JavaScript overhead, pure CSS transitions
- All animations under 200ms for instant feel
* feat: Add button active state and dashboard card animations
- Add active:scale-95 to all buttons for tactile click feedback
- Add hover border effect to dashboard cards (150ms transition)
- Add pulse animation to dashboard loading states
- Pure CSS transitions with zero JavaScript overhead
- Improves enterprise-level feel of UI
* feat: Add smooth macOS-style page transitions
- Add fullscreen crossfade transition for login/logout (300ms fade-out + 400ms fade-in)
- Add slide-in-from-right animation for all page switches (Dashboard, Terminal, SSH Manager, Admin, Profile)
- Fix TypeScript compilation by adding esModuleInterop to tsconfig.node.json
- Pass handleLogout from DesktopApp to LeftSidebar for consistent transition behavior
All page transitions now use Tailwind animate-in utilities with 300ms duration for smooth, native-feeling UX
* fix: Add key prop to force animation re-trigger on tab switch
Each page container now has key={currentTab} to ensure React unmounts and remounts the element on every tab switch, properly triggering the slide-in animation
* revert: Remove page transition animations
Page switching animations were not noticeable enough and felt unnecessary.
Keep only the login/logout fullscreen crossfade transitions which provide clear visual feedback for authentication state changes
* feat: Add ripple effect to login/logout transitions
Add three-layer expanding ripple animation during fadeOut phase:
- Ripples expand from screen center using primary theme color
- Each layer has staggered delay (0ms, 150ms, 300ms) for wave effect
- Ripples fade out as they expand to create elegant visual feedback
- Uses pure CSS keyframe animation, no external libraries
Total animation: 800ms ripple + 300ms screen fade
* feat: Add smooth TERMIX logo animation to transitions
Changes:
- Extend transition duration from 300ms/400ms to 800ms/600ms for more elegant feel
- Reduce ripple intensity from /20,/15,/10 to /8,/5 for subtlety
- Slow down ripple animation from 0.8s to 2s with cubic-bezier easing
- Add centered TERMIX logo with monospace font and subtitle
- Logo fades in from 80% scale, holds, then fades out at 110% scale
- Total effect: 1.2s logo animation synced with 2s ripple waves
Creates a premium, branded transition experience
* feat: Enhance transition animation with premium details
Timing adjustments:
- Extend fadeOut from 800ms to 1200ms
- Extend fadeIn from 600ms to 800ms
- Slow background fade to 700ms for elegance
Visual enhancements:
- Add 4-layer ripple waves (10%, 7%, 5%, 3% opacity) with staggered delays
- Ripple animation extended to 2.5s with refined opacity curve
- Logo blur effect: starts at 8px, sharpens to 0px, exits at 4px
- Logo glow effect: triple-layer text-shadow using primary theme color
- Increase logo size from text-6xl to text-7xl
- Subtitle delayed fade-in from bottom with smooth slide animation
Creates a cinematic, polished brand experience
* feat: Redesign login page with split-screen cinematic layout
Major redesign of authentication page:
Left Side (40% width):
- Full-height gradient background using primary theme color
- Large TERMIX logo with glow effect
- Subtitle and tagline
- Infinite animated ripple waves (3 layers)
- Hidden on mobile, shows brand identity
Right Side (60% width):
- Centered glassmorphism card with backdrop blur
- Refined tab switcher with pill-style active state
- Enlarged title with gradient text effect
- Added welcome subtitles for better UX
- Card slides in from bottom on load
- All existing functionality preserved
Visual enhancements:
- Tab navigation: segmented control style in muted container
- Active tab: white background with subtle shadow
- Smooth 200ms transitions on all interactions
- Card: rounded-2xl, shadow-xl, semi-transparent border
Creates premium, modern login experience matching transition animations
* feat: Update login page theme colors and add i18n support
- Changed login page gradient from blue to match dark theme colors
- Updated ripple effects to use theme primary color
- Added i18n translation keys for login page (auth.tagline, auth.description, auth.welcomeBack, auth.createAccount, auth.continueExternal)
- Updated all language files (en, zh, de, ru, pt-BR) with new translations
- Fixed TypeScript compilation issues by clearing build cache
* refactor: Use shadcn Tabs component and fix modal styling
- Replace custom tab navigation with shadcn Tabs component
- Restore border-2 border-dark-border for modal consistency
- Remove circular icon from login success message
- Simplify authentication success display
* refactor: Remove ripple effects and gradient from login page
- Remove animated ripple background effects
- Remove gradient background, use solid color (bg-dark-bg-darker)
- Remove text-shadow glow effect from logo
- Simplify brand showcase to clean, minimal design
* feat: Add decorative slash and remove subtitle from login page
- Add decorative slash divider with gradient lines below TERMIX logo
- Remove subtitle text (welcomeBack and createAccount)
- Simplify page title to show only the main heading
* feat: Add diagonal line pattern background to login page
- Replace decorative slash with subtle diagonal line pattern background
- Use repeating-linear-gradient at 45deg angle
- Set very low opacity (0.03) for subtle effect
- Pattern uses theme primary color
* fix: Display diagonal line pattern on login background
- Combine background color and pattern in single style attribute
- Use white semi-transparent lines (rgba 0.03 opacity)
- 45deg angle, 35px spacing, 2px width
- Remove separate overlay div to ensure pattern visibility
* security: Fix user enumeration vulnerability in login
- Unify error messages for invalid username and incorrect password
- Both return 401 status with 'Invalid username or password'
- Prevent attackers from enumerating valid usernames
- Maintain detailed logging for debugging purposes
- Changed from 404 'User not found' to generic auth failure message
* security: Add login rate limiting to prevent brute force attacks
- Implement LoginRateLimiter with IP and username-based tracking
- Block after 5 failed attempts within 15 minutes
- Lock account/IP for 15 minutes after threshold
- Automatic cleanup of expired entries every 5 minutes
- Track remaining attempts in logs for monitoring
- Return 429 status with remaining time on rate limit
- Reset counters on successful login
- Dual protection: both IP-based and username-based limits
1690 lines
123 KiB
JSON
1690 lines
123 KiB
JSON
{
|
||
"credentials": {
|
||
"credentialsViewer": "Просмотр учетных данных",
|
||
"manageYourSSHCredentials": "Безопасное управление вашими SSH-учетными данными",
|
||
"addCredential": "Добавить учетные данные",
|
||
"createCredential": "Создать учетные данные",
|
||
"editCredential": "Редактировать учетные данные",
|
||
"viewCredential": "Просмотреть учетные данные",
|
||
"duplicateCredential": "Дублировать учетные данные",
|
||
"deleteCredential": "Удалить учетные данные",
|
||
"updateCredential": "Обновить учетные данные",
|
||
"credentialName": "Название учетных данных",
|
||
"credentialDescription": "Описание",
|
||
"username": "Имя пользователя",
|
||
"searchCredentials": "Поиск учетных данных...",
|
||
"selectFolder": "Выбрать папку",
|
||
"selectAuthType": "Выбрать тип аутентификации",
|
||
"allFolders": "Все папки",
|
||
"allAuthTypes": "Все типы аутентификации",
|
||
"uncategorized": "Без категории",
|
||
"totalCredentials": "Всего",
|
||
"keyBased": "На основе ключа",
|
||
"passwordBased": "На основе пароля",
|
||
"folders": "Папки",
|
||
"noCredentialsMatchFilters": "Нет учетных данных, соответствующих вашим фильтрам",
|
||
"noCredentialsYet": "Учетные данные еще не созданы",
|
||
"createFirstCredential": "Создайте свои первые учетные данные",
|
||
"failedToFetchCredentials": "Не удалось загрузить учетные данные",
|
||
"credentialDeletedSuccessfully": "Учетные данные успешно удалены",
|
||
"failedToDeleteCredential": "Не удалось удалить учетные данные",
|
||
"confirmDeleteCredential": "Вы уверены, что хотите удалить учетные данные \"{{name}}\"?",
|
||
"credentialCreatedSuccessfully": "Учетные данные успешно созданы",
|
||
"credentialUpdatedSuccessfully": "Учетные данные успешно обновлены",
|
||
"failedToSaveCredential": "Не удалось сохранить учетные данные",
|
||
"failedToFetchCredentialDetails": "Не удалось загрузить детали учетных данных",
|
||
"failedToFetchHostsUsing": "Не удалось загрузить хосты, использующие эти учетные данные",
|
||
"loadingCredentials": "Загрузка учетных данных...",
|
||
"retry": "Повторить",
|
||
"noCredentials": "Нет учетных данных",
|
||
"noCredentialsMessage": "Вы еще не добавили учетные данные. Нажмите \"Добавить учетные данные\", чтобы начать.",
|
||
"sshCredentials": "SSH-учетные данные",
|
||
"credentialsCount": "{{count}} учетных данных",
|
||
"refresh": "Обновить",
|
||
"passwordRequired": "Требуется пароль",
|
||
"sshKeyRequired": "Требуется SSH-ключ",
|
||
"credentialAddedSuccessfully": "Учетные данные \"{{name}}\" успешно добавлены",
|
||
"general": "Общее",
|
||
"description": "Описание",
|
||
"folder": "Папка",
|
||
"tags": "Теги",
|
||
"addTagsSpaceToAdd": "Добавить теги (нажмите пробел для добавления)",
|
||
"password": "Пароль",
|
||
"key": "Ключ",
|
||
"sshPrivateKey": "Приватный SSH-ключ",
|
||
"upload": "Загрузить",
|
||
"updateKey": "Обновить ключ",
|
||
"keyPassword": "Пароль ключа (опционально)",
|
||
"keyType": "Тип ключа",
|
||
"keyTypeRSA": "RSA",
|
||
"keyTypeECDSA": "ECDSA",
|
||
"keyTypeEd25519": "Ed25519",
|
||
"updateCredential": "Обновить учетные данные",
|
||
"basicInfo": "Основная информация",
|
||
"authentication": "Аутентификация",
|
||
"organization": "Организация",
|
||
"basicInformation": "Основная информация",
|
||
"basicInformationDescription": "Введите основную информацию для этих учетных данных",
|
||
"authenticationMethod": "Метод аутентификации",
|
||
"authenticationMethodDescription": "Выберите способ аутентификации на SSH-серверах",
|
||
"organizationDescription": "Организуйте ваши учетные данные с помощью папок и тегов",
|
||
"enterCredentialName": "Введите название учетных данных",
|
||
"enterCredentialDescription": "Введите описание (опционально)",
|
||
"enterUsername": "Введите имя пользователя",
|
||
"nameIsRequired": "Требуется название учетных данных",
|
||
"usernameIsRequired": "Требуется имя пользователя",
|
||
"authenticationType": "Тип аутентификации",
|
||
"passwordAuthDescription": "Использовать аутентификацию по паролю",
|
||
"sshKeyAuthDescription": "Использовать аутентификацию по SSH-ключу",
|
||
"passwordIsRequired": "Требуется пароль",
|
||
"sshKeyIsRequired": "Требуется SSH-ключ",
|
||
"sshKeyType": "Тип SSH-ключа",
|
||
"privateKey": "Приватный ключ",
|
||
"enterPassword": "Введите пароль",
|
||
"enterPrivateKey": "Введите приватный ключ",
|
||
"keyPassphrase": "Парольная фраза ключа",
|
||
"enterKeyPassphrase": "Введите парольную фразу ключа (опционально)",
|
||
"keyPassphraseOptional": "Опционально: оставьте пустым, если у ключа нет парольной фразы",
|
||
"leaveEmptyToKeepCurrent": "Оставьте пустым, чтобы сохранить текущее значение",
|
||
"uploadKeyFile": "Загрузить файл ключа",
|
||
"generateKeyPairButton": "Сгенерировать пару ключей",
|
||
"generateKeyPair": "Сгенерировать пару ключей",
|
||
"generateKeyPairDescription": "Сгенерировать новую пару SSH-ключей. Если вы хотите защитить ключ парольной фразой, сначала введите ее в поле Пароль ключа ниже.",
|
||
"deploySSHKey": "Развернуть SSH-ключ",
|
||
"deploySSHKeyDescription": "Развернуть публичный ключ на целевом сервере",
|
||
"sourceCredential": "Исходные учетные данные",
|
||
"targetHost": "Целевой хост",
|
||
"deploymentProcess": "Процесс развертывания",
|
||
"deploymentProcessDescription": "Это безопасно добавит публичный ключ в файл ~/.ssh/authorized_keys целевого хоста без перезаписи существующих ключей. Операция обратима.",
|
||
"chooseHostToDeploy": "Выберите хост для развертывания...",
|
||
"deploying": "Развертывание...",
|
||
"name": "Имя",
|
||
"noHostsAvailable": "Нет доступных хостов",
|
||
"noHostsMatchSearch": "Нет хостов, соответствующих вашему запросу",
|
||
"sshKeyGenerationNotImplemented": "Функция генерации SSH-ключей скоро будет доступна",
|
||
"connectionTestingNotImplemented": "Функция тестирования подключения скоро будет доступна",
|
||
"testConnection": "Тестировать подключение",
|
||
"selectOrCreateFolder": "Выбрать или создать папку",
|
||
"noFolder": "Без папки",
|
||
"orCreateNewFolder": "Или создать новую папку",
|
||
"addTag": "Добавить тег",
|
||
"saving": "Сохранение...",
|
||
"overview": "Обзор",
|
||
"security": "Безопасность",
|
||
"usage": "Использование",
|
||
"securityDetails": "Детали безопасности",
|
||
"securityDetailsDescription": "Просмотр зашифрованной информации учетных данных",
|
||
"credentialSecured": "Учетные данные защищены",
|
||
"credentialSecuredDescription": "Все конфиденциальные данные зашифрованы с помощью AES-256",
|
||
"passwordAuthentication": "Аутентификация по паролю",
|
||
"keyAuthentication": "Аутентификация по ключу",
|
||
"keyType": "Тип ключа",
|
||
"securityReminder": "Напоминание о безопасности",
|
||
"securityReminderText": "Никогда не передавайте ваши учетные данные. Все данные зашифрованы при хранении.",
|
||
"hostsUsingCredential": "Хосты, использующие эти учетные данные",
|
||
"noHostsUsingCredential": "В настоящее время эти учетные данные не используются ни на одном хосте",
|
||
"timesUsed": "Количество использований",
|
||
"lastUsed": "Последнее использование",
|
||
"connectedHosts": "Подключенные хосты",
|
||
"created": "Создано",
|
||
"lastModified": "Последнее изменение",
|
||
"usageStatistics": "Статистика использования",
|
||
"copiedToClipboard": "{{field}} скопировано в буфер обмена",
|
||
"failedToCopy": "Не удалось скопировать в буфер обмена",
|
||
"sshKey": "SSH-ключ",
|
||
"createCredentialDescription": "Создать новые SSH-учетные данные для безопасного доступа",
|
||
"editCredentialDescription": "Обновить информацию об учетных данных",
|
||
"listView": "Список",
|
||
"folderView": "Папки",
|
||
"unknownCredential": "Неизвестно",
|
||
"confirmRemoveFromFolder": "Вы уверены, что хотите удалить \"{{name}}\" из папки \"{{folder}}\"? Учетные данные будут перемещены в \"Без категории\".",
|
||
"removedFromFolder": "Учетные данные \"{{name}}\" успешно удалены из папки",
|
||
"failedToRemoveFromFolder": "Не удалось удалить учетные данные из папки",
|
||
"folderRenamed": "Папка \"{{oldName}}\" успешно переименована в \"{{newName}}\"",
|
||
"failedToRenameFolder": "Не удалось переименовать папку",
|
||
"movedToFolder": "Учетные данные \"{{name}}\" успешно перемещены в \"{{folder}}\"",
|
||
"failedToMoveToFolder": "Не удалось переместить учетные данные в папку",
|
||
"sshPublicKey": "Публичный SSH-ключ",
|
||
"publicKeyNote": "Публичный ключ опционален, но рекомендуется для проверки ключа",
|
||
"publicKeyUploaded": "Публичный ключ загружен",
|
||
"uploadPublicKey": "Загрузить публичный ключ",
|
||
"uploadPrivateKeyFile": "Загрузить файл приватного ключа",
|
||
"uploadPublicKeyFile": "Загрузить файл публичного ключа",
|
||
"privateKeyRequiredForGeneration": "Для генерации публичного ключа требуется приватный ключ",
|
||
"failedToGeneratePublicKey": "Не удалось сгенерировать публичный ключ",
|
||
"generatePublicKey": "Сгенерировать из приватного ключа",
|
||
"publicKeyGeneratedSuccessfully": "Публичный ключ успешно сгенерирован",
|
||
"detectedKeyType": "Обнаруженный тип ключа",
|
||
"detectingKeyType": "определение...",
|
||
"optional": "Опционально",
|
||
"generateKeyPairNew": "Сгенерировать новую пару ключей",
|
||
"generateEd25519": "Сгенерировать Ed25519",
|
||
"generateECDSA": "Сгенерировать ECDSA",
|
||
"generateRSA": "Сгенерировать RSA",
|
||
"keyPairGeneratedSuccessfully": "Пара ключей {{keyType}} успешно сгенерирована",
|
||
"failedToGenerateKeyPair": "Не удалось сгенерировать пару ключей",
|
||
"generateKeyPairNote": "Сгенерировать новую пару SSH-ключей напрямую. Это заменит любые существующие ключи в форме.",
|
||
"invalidKey": "Неверный ключ",
|
||
"detectionError": "Ошибка определения",
|
||
"unknown": "Неизвестно"
|
||
},
|
||
"dragIndicator": {
|
||
"error": "Ошибка: {{error}}",
|
||
"dragging": "Перетаскивание {{fileName}}",
|
||
"preparing": "Подготовка {{fileName}}",
|
||
"readySingle": "Готово к скачиванию {{fileName}}",
|
||
"readyMultiple": "Готово к скачиванию {{count}} файлов",
|
||
"batchDrag": "Перетащите {{count}} файлов на рабочий стол",
|
||
"dragToDesktop": "Перетащите на рабочий стол",
|
||
"canDragAnywhere": "Вы можете перетаскивать файлы в любое место на рабочем столе"
|
||
},
|
||
"sshTools": {
|
||
"title": "SSH-инструменты",
|
||
"closeTools": "Закрыть SSH-инструменты",
|
||
"keyRecording": "Запись клавиш",
|
||
"startKeyRecording": "Начать запись клавиш",
|
||
"stopKeyRecording": "Остановить запись клавиш",
|
||
"selectTerminals": "Выберите терминалы:",
|
||
"typeCommands": "Введите команды (поддерживаются все клавиши):",
|
||
"commandsWillBeSent": "Команды будут отправлены в {{count}} выбранных терминалов.",
|
||
"settings": "Настройки",
|
||
"enableRightClickCopyPaste": "Включить копирование/вставку по правому клику",
|
||
"shareIdeas": "Есть идеи, что должно быть следующим для SSH-инструментов? Поделитесь ими на"
|
||
},
|
||
"snippets": {
|
||
"title": "Сниппеты",
|
||
"new": "Новый сниппет",
|
||
"create": "Создать сниппет",
|
||
"edit": "Редактировать сниппет",
|
||
"run": "Выполнить",
|
||
"empty": "Сниппетов пока нет",
|
||
"emptyHint": "Создайте сниппет для сохранения часто используемых команд",
|
||
"name": "Название",
|
||
"description": "Описание",
|
||
"content": "Команда",
|
||
"namePlaceholder": "например, Перезапуск Nginx",
|
||
"descriptionPlaceholder": "Опциональное описание",
|
||
"contentPlaceholder": "например, sudo systemctl restart nginx",
|
||
"nameRequired": "Требуется название",
|
||
"contentRequired": "Требуется команда",
|
||
"createDescription": "Создать новый сниппет команды для быстрого выполнения",
|
||
"editDescription": "Редактировать этот сниппет команды",
|
||
"deleteConfirmTitle": "Удалить сниппет",
|
||
"deleteConfirmDescription": "Вы уверены, что хотите удалить \"{{name}}\"?",
|
||
"createSuccess": "Сниппет успешно создан",
|
||
"updateSuccess": "Сниппет успешно обновлен",
|
||
"deleteSuccess": "Сниппет успешно удален",
|
||
"createFailed": "Не удалось создать сниппет",
|
||
"updateFailed": "Не удалось обновить сниппет",
|
||
"deleteFailed": "Не удалось удалить сниппет",
|
||
"failedToFetch": "Не удалось загрузить сниппеты",
|
||
"executeSuccess": "Выполняется: {{name}}",
|
||
"copySuccess": "Сниппет \"{{name}}\" скопирован в буфер обмена",
|
||
"runTooltip": "Выполнить этот сниппет в терминале",
|
||
"copyTooltip": "Скопировать сниппет в буфер обмена",
|
||
"editTooltip": "Редактировать этот сниппет",
|
||
"deleteTooltip": "Удалить этот сниппет"
|
||
},
|
||
"homepage": {
|
||
"loggedInTitle": "Вы вошли в систему!",
|
||
"loggedInMessage": "Вы вошли в систему! Используйте боковую панель для доступа ко всем доступным инструментам. Чтобы начать, создайте SSH-хост в разделе SSH-менеджера. После создания вы можете подключиться к этому хосту, используя другие приложения на боковой панели.",
|
||
"failedToLoadAlerts": "Не удалось загрузить оповещения",
|
||
"failedToDismissAlert": "Не удалось закрыть оповещение"
|
||
},
|
||
"serverConfig": {
|
||
"title": "Конфигурация сервера",
|
||
"description": "Настройте URL сервера Termix для подключения к вашим серверным службам",
|
||
"serverUrl": "URL сервера",
|
||
"enterServerUrl": "Пожалуйста, введите URL сервера",
|
||
"testConnectionFirst": "Пожалуйста, сначала проверьте подключение",
|
||
"connectionSuccess": "Подключение успешно!",
|
||
"connectionFailed": "Подключение не удалось",
|
||
"connectionError": "Произошла ошибка подключения",
|
||
"connected": "Подключено",
|
||
"disconnected": "Отключено",
|
||
"configSaved": "Конфигурация успешно сохранена",
|
||
"saveFailed": "Не удалось сохранить конфигурацию",
|
||
"saveError": "Ошибка сохранения конфигурации",
|
||
"saving": "Сохранение...",
|
||
"saveConfig": "Сохранить конфигурацию",
|
||
"helpText": "Введите URL, где работает ваш сервер Termix (например, http://localhost:30001 или https://your-server.com)"
|
||
},
|
||
"versionCheck": {
|
||
"error": "Ошибка проверки версии",
|
||
"checkFailed": "Не удалось проверить наличие обновлений",
|
||
"upToDate": "Приложение обновлено",
|
||
"currentVersion": "Вы используете версию {{version}}",
|
||
"updateAvailable": "Доступно обновление",
|
||
"newVersionAvailable": "Доступна новая версия! Вы используете {{current}}, но доступна {{latest}}.",
|
||
"releasedOn": "Выпущена {{date}}",
|
||
"downloadUpdate": "Скачать обновление",
|
||
"dismiss": "Закрыть",
|
||
"checking": "Проверка обновлений...",
|
||
"checkUpdates": "Проверить обновления",
|
||
"checkingUpdates": "Проверка обновлений...",
|
||
"refresh": "Обновить",
|
||
"updateRequired": "Требуется обновление",
|
||
"updateDismissed": "Уведомление об обновлении закрыто",
|
||
"noUpdatesFound": "Обновления не найдены"
|
||
},
|
||
"common": {
|
||
"close": "Закрыть",
|
||
"minimize": "Свернуть",
|
||
"online": "В сети",
|
||
"offline": "Не в сети",
|
||
"continue": "Продолжить",
|
||
"maintenance": "Обслуживание",
|
||
"degraded": "Снижена производительность",
|
||
"discord": "Discord",
|
||
"error": "Ошибка",
|
||
"warning": "Предупреждение",
|
||
"info": "Информация",
|
||
"success": "Успех",
|
||
"loading": "Загрузка",
|
||
"required": "Обязательно",
|
||
"optional": "Опционально",
|
||
"clear": "Очистить",
|
||
"toggleSidebar": "Переключить боковую панель",
|
||
"sidebar": "Боковая панель",
|
||
"home": "Главная",
|
||
"expired": "Истек",
|
||
"expiresToday": "Истекает сегодня",
|
||
"expiresTomorrow": "Истекает завтра",
|
||
"expiresInDays": "Истекает через {{days}} дней",
|
||
"updateAvailable": "Доступно обновление",
|
||
"sshPath": "SSH-путь",
|
||
"localPath": "Локальный путь",
|
||
"loading": "Загрузка...",
|
||
"noAuthCredentials": "Нет учетных данных аутентификации для этого SSH-хоста",
|
||
"noReleases": "Нет выпусков",
|
||
"updatesAndReleases": "Обновления и выпуски",
|
||
"newVersionAvailable": "Доступна новая версия ({{version}}).",
|
||
"failedToFetchUpdateInfo": "Не удалось загрузить информацию об обновлениях",
|
||
"preRelease": "Предварительный выпуск",
|
||
"loginFailed": "Ошибка входа",
|
||
"noReleasesFound": "Выпуски не найдены.",
|
||
"yourBackupCodes": "Ваши резервные коды",
|
||
"sendResetCode": "Отправить код сброса",
|
||
"verifyCode": "Проверить код",
|
||
"resetPassword": "Сбросить пароль",
|
||
"resetCode": "Код сброса",
|
||
"newPassword": "Новый пароль",
|
||
"sshPath": "SSH-путь",
|
||
"localPath": "Локальный путь",
|
||
"folder": "Папка",
|
||
"file": "Файл",
|
||
"renamedSuccessfully": "успешно переименован",
|
||
"deletedSuccessfully": "успешно удален",
|
||
"noAuthCredentials": "Нет учетных данных аутентификации для этого SSH-хоста",
|
||
"noTunnelConnections": "Нет настроенных туннельных подключений",
|
||
"sshTools": "SSH-инструменты",
|
||
"english": "Английский",
|
||
"russia": "Русский",
|
||
"chinese": "Китайский",
|
||
"german": "Немецкий",
|
||
"cancel": "Отмена",
|
||
"username": "Имя пользователя",
|
||
"name": "Имя",
|
||
"login": "Войти",
|
||
"logout": "Выйти",
|
||
"register": "Зарегистрироваться",
|
||
"username": "Имя пользователя",
|
||
"password": "Пароль",
|
||
"version": "Версия",
|
||
"confirmPassword": "Подтвердите пароль",
|
||
"back": "Назад",
|
||
"email": "Email",
|
||
"submit": "Отправить",
|
||
"cancel": "Отмена",
|
||
"change": "Изменить",
|
||
"save": "Сохранить",
|
||
"delete": "Удалить",
|
||
"edit": "Редактировать",
|
||
"add": "Добавить",
|
||
"search": "Поиск",
|
||
"loading": "Загрузка...",
|
||
"error": "Ошибка",
|
||
"success": "Успех",
|
||
"warning": "Предупреждение",
|
||
"info": "Информация",
|
||
"confirm": "Подтвердить",
|
||
"yes": "Да",
|
||
"no": "Нет",
|
||
"ok": "OK",
|
||
"close": "Закрыть",
|
||
"enabled": "Включено",
|
||
"disabled": "Отключено",
|
||
"important": "Важно",
|
||
"notEnabled": "Не включено",
|
||
"settingUp": "Настройка...",
|
||
"back": "Назад",
|
||
"next": "Далее",
|
||
"previous": "Назад",
|
||
"refresh": "Обновить",
|
||
"settings": "Настройки",
|
||
"profile": "Профиль",
|
||
"help": "Помощь",
|
||
"about": "О программе",
|
||
"language": "Язык",
|
||
"autoDetect": "Автоопределение",
|
||
"changeAccountPassword": "Изменить пароль вашей учетной записи",
|
||
"passwordResetTitle": "Сброс пароля",
|
||
"passwordResetDescription": "Вы собираетесь сбросить пароль. Это приведет к выходу из всех активных сеансов.",
|
||
"enterSixDigitCode": "Введите 6-значный код из логов docker-контейнера для пользователя:",
|
||
"enterNewPassword": "Введите новый пароль для пользователя:",
|
||
"passwordsDoNotMatch": "Пароли не совпадают",
|
||
"passwordMinLength": "Пароль должен содержать не менее 6 символов",
|
||
"passwordResetSuccess": "Пароль успешно сброшен! Теперь вы можете войти с новым паролем.",
|
||
"failedToInitiatePasswordReset": "Не удалось инициировать сброс пароля",
|
||
"failedToVerifyResetCode": "Не удалось проверить код сброса",
|
||
"failedToCompletePasswordReset": "Не удалось завершить сброс пароля",
|
||
"documentation": "Документация",
|
||
"retry": "Повторить",
|
||
"checking": "Проверка...",
|
||
"checkingDatabase": "Проверка подключения к базе данных..."
|
||
},
|
||
"nav": {
|
||
"home": "Главная",
|
||
"hosts": "Хосты",
|
||
"credentials": "Учетные данные",
|
||
"terminal": "Терминал",
|
||
"tunnels": "Туннели",
|
||
"fileManager": "Файловый менеджер",
|
||
"serverStats": "Статистика сервера",
|
||
"admin": "Администрирование",
|
||
"userProfile": "Профиль пользователя",
|
||
"tools": "Инструменты",
|
||
"snippets": "Сниппеты",
|
||
"newTab": "Новая вкладка",
|
||
"splitScreen": "Разделить экран",
|
||
"closeTab": "Закрыть вкладку",
|
||
"sshManager": "SSH-менеджер",
|
||
"hostManager": "Менеджер хостов",
|
||
"cannotSplitTab": "Невозможно разделить эту вкладку",
|
||
"tabNavigation": "Навигация по вкладкам"
|
||
},
|
||
"admin": {
|
||
"title": "Настройки администратора",
|
||
"oidc": "OIDC",
|
||
"users": "Пользователи",
|
||
"userManagement": "Управление пользователями",
|
||
"makeAdmin": "Сделать администратором",
|
||
"removeAdmin": "Убрать администратора",
|
||
"deleteUser": "Удалить пользователя",
|
||
"allowRegistration": "Разрешить регистрацию",
|
||
"oidcSettings": "Настройки OIDC",
|
||
"clientId": "Client ID",
|
||
"clientSecret": "Client Secret",
|
||
"issuerUrl": "Issuer URL",
|
||
"authorizationUrl": "Authorization URL",
|
||
"tokenUrl": "Token URL",
|
||
"updateSettings": "Обновить настройки",
|
||
"confirmDelete": "Вы уверены, что хотите удалить этого пользователя?",
|
||
"confirmMakeAdmin": "Вы уверены, что хотите сделать этого пользователя администратором?",
|
||
"confirmRemoveAdmin": "Вы уверены, что хотите убрать права администратора у этого пользователя?",
|
||
"externalAuthentication": "Внешняя аутентификация (OIDC)",
|
||
"configureExternalProvider": "Настройте внешнего провайдера идентификации для аутентификации OIDC/OAuth2.",
|
||
"userIdentifierPath": "Путь к идентификатору пользователя",
|
||
"displayNamePath": "Путь к отображаемому имени",
|
||
"scopes": "Области действия",
|
||
"saving": "Сохранение...",
|
||
"saveConfiguration": "Сохранить конфигурацию",
|
||
"reset": "Сбросить",
|
||
"success": "Успех",
|
||
"loading": "Загрузка...",
|
||
"refresh": "Обновить",
|
||
"loadingUsers": "Загрузка пользователей...",
|
||
"username": "Имя пользователя",
|
||
"type": "Тип",
|
||
"actions": "Действия",
|
||
"external": "Внешний",
|
||
"local": "Локальный",
|
||
"adminManagement": "Управление администраторами",
|
||
"makeUserAdmin": "Сделать пользователя администратором",
|
||
"adding": "Добавление...",
|
||
"currentAdmins": "Текущие администраторы",
|
||
"adminBadge": "Администратор",
|
||
"removeAdminButton": "Убрать администратора",
|
||
"general": "Общее",
|
||
"userRegistration": "Регистрация пользователей",
|
||
"allowNewAccountRegistration": "Разрешить регистрацию новых учетных записей",
|
||
"allowPasswordLogin": "Разрешить вход по имени пользователя/паролю",
|
||
"missingRequiredFields": "Отсутствуют обязательные поля: {{fields}}",
|
||
"oidcConfigurationUpdated": "Конфигурация OIDC успешно обновлена!",
|
||
"failedToFetchOidcConfig": "Не удалось загрузить конфигурацию OIDC",
|
||
"failedToFetchRegistrationStatus": "Не удалось загрузить статус регистрации",
|
||
"failedToFetchPasswordLoginStatus": "Не удалось загрузить статус входа по паролю",
|
||
"failedToFetchUsers": "Не удалось загрузить пользователей",
|
||
"oidcConfigurationDisabled": "Конфигурация OIDC успешно отключена!",
|
||
"failedToUpdateOidcConfig": "Не удалось обновить конфигурацию OIDC",
|
||
"failedToDisableOidcConfig": "Не удалось отключить конфигурацию OIDC",
|
||
"enterUsernameToMakeAdmin": "Введите имя пользователя, чтобы сделать администратором",
|
||
"userIsNowAdmin": "Пользователь {{username}} теперь администратор",
|
||
"failedToMakeUserAdmin": "Не удалось сделать пользователя администратором",
|
||
"removeAdminStatus": "Убрать статус администратора у {{username}}?",
|
||
"adminStatusRemoved": "Статус администратора убран у {{username}}",
|
||
"failedToRemoveAdminStatus": "Не удалось убрать статус администратора",
|
||
"deleteUser": "Удалить пользователя {{username}}? Это нельзя отменить.",
|
||
"userDeletedSuccessfully": "Пользователь {{username}} успешно удален",
|
||
"failedToDeleteUser": "Не удалось удалить пользователя",
|
||
"overrideUserInfoUrl": "Переопределить User Info URL (не требуется)",
|
||
"databaseSecurity": "Безопасность базы данных",
|
||
"encryptionStatus": "Статус шифрования",
|
||
"encryptionEnabled": "Шифрование включено",
|
||
"enabled": "Включено",
|
||
"disabled": "Отключено",
|
||
"keyId": "ID ключа",
|
||
"created": "Создано",
|
||
"migrationStatus": "Статус миграции",
|
||
"migrationCompleted": "Миграция завершена",
|
||
"migrationRequired": "Требуется миграция",
|
||
"deviceProtectedMasterKey": "Мастер-ключ, защищенный средой",
|
||
"legacyKeyStorage": "Устаревшее хранилище ключей",
|
||
"masterKeyEncryptedWithDeviceFingerprint": "Мастер-ключ зашифрован с помощью отпечатка среды (защита KEK активна)",
|
||
"keyNotProtectedByDeviceBinding": "Ключ не защищен привязкой к среде (рекомендуется обновление)",
|
||
"valid": "Действителен",
|
||
"initializeDatabaseEncryption": "Инициализировать шифрование базы данных",
|
||
"enableAes256EncryptionWithDeviceBinding": "Включить AES-256 шифрование с защитой мастер-ключа, привязанного к среде. Это создает безопасность корпоративного уровня для SSH-ключей, паролей и токенов аутентификации.",
|
||
"featuresEnabled": "Включенные функции:",
|
||
"aes256GcmAuthenticatedEncryption": "Аутентифицированное шифрование AES-256-GCM",
|
||
"deviceFingerprintMasterKeyProtection": "Защита мастер-ключа отпечатком среды (KEK)",
|
||
"pbkdf2KeyDerivation": "Производство ключей PBKDF2 с 100K итерациями",
|
||
"automaticKeyManagement": "Автоматическое управление ключами и их ротация",
|
||
"initializing": "Инициализация...",
|
||
"initializeEnterpriseEncryption": "Инициализировать корпоративное шифрование",
|
||
"migrateExistingData": "Мигрировать существующие данные",
|
||
"encryptExistingUnprotectedData": "Зашифровать существующие незащищенные данные в вашей базе данных. Этот процесс безопасен и создает автоматические резервные копии.",
|
||
"testMigrationDryRun": "Проверить совместимость шифрования",
|
||
"migrating": "Миграция...",
|
||
"migrateData": "Мигрировать данные",
|
||
"securityInformation": "Информация о безопасности",
|
||
"sshPrivateKeysEncryptedWithAes256": "SSH-приватные ключи и пароли зашифрованы с помощью AES-256-GCM",
|
||
"userAuthTokensProtected": "Токены аутентификации пользователей и секреты 2FA защищены",
|
||
"masterKeysProtectedByDeviceFingerprint": "Мастер-ключи шифрования защищены отпечатком устройства (KEK)",
|
||
"keysBoundToServerInstance": "Ключи привязаны к текущей серверной среде (мигрируемы через переменные окружения)",
|
||
"pbkdf2HkdfKeyDerivation": "Производство ключей PBKDF2 + HKDF с 100K итерациями",
|
||
"backwardCompatibleMigration": "Все данные остаются обратно совместимыми во время миграции",
|
||
"enterpriseGradeSecurityActive": "Безопасность корпоративного уровня активна",
|
||
"masterKeysProtectedByDeviceBinding": "Ваши мастер-ключи шифрования защищены отпечатком среды. Это использует имя хоста сервера, пути и другую информацию о среде для генерации ключей защиты. Для миграции серверов установите переменную окружения DB_ENCRYPTION_KEY на новом сервере.",
|
||
"important": "Важно",
|
||
"keepEncryptionKeysSecure": "Обеспечьте безопасность данных: регулярно создавайте резервные копии файлов базы данных и конфигурации сервера. Для миграции на новый сервер установите переменную окружения DB_ENCRYPTION_KEY в новой среде или сохраните то же имя хоста и структуру каталогов.",
|
||
"loadingEncryptionStatus": "Загрузка статуса шифрования...",
|
||
"testMigrationDescription": "Проверить, что существующие данные могут быть безопасно мигрированы в зашифрованный формат без фактического изменения каких-либо данных",
|
||
"serverMigrationGuide": "Руководство по миграции сервера",
|
||
"migrationInstructions": "Для миграции зашифрованных данных на новый сервер: 1) Создайте резервную копию файлов базы данных, 2) Установите переменную окружения DB_ENCRYPTION_KEY=\"your-key\" на новом сервере, 3) Восстановите файлы базы данных",
|
||
"environmentProtection": "Защита среды",
|
||
"environmentProtectionDesc": "Защищает ключи шифрования на основе информации о серверной среде (имя хоста, пути и т.д.), мигрируемы через переменные окружения",
|
||
"verificationCompleted": "Проверка совместимости завершена - данные не изменялись",
|
||
"verificationInProgress": "Проверка завершена",
|
||
"dataMigrationCompleted": "Миграция данных успешно завершена!",
|
||
"migrationCompleted": "Миграция завершена",
|
||
"verificationFailed": "Проверка совместимости не удалась",
|
||
"migrationFailed": "Миграция не удалась",
|
||
"runningVerification": "Выполняется проверка совместимости...",
|
||
"startingMigration": "Начало миграции...",
|
||
"hardwareFingerprintSecurity": "Безопасность отпечатка оборудования",
|
||
"hardwareBoundEncryption": "Активно шифрование, привязанное к оборудованию",
|
||
"masterKeysNowProtectedByHardwareFingerprint": "Мастер-ключи теперь защищены реальным отпечатком оборудования вместо переменных окружения",
|
||
"cpuSerialNumberDetection": "Обнаружение серийного номера CPU",
|
||
"motherboardUuidIdentification": "Идентификация UUID материнской платы",
|
||
"diskSerialNumberVerification": "Проверка серийного номера диска",
|
||
"biosSerialNumberCheck": "Проверка серийного номера BIOS",
|
||
"stableMacAddressFiltering": "Фильтрация стабильных MAC-адресов",
|
||
"databaseFileEncryption": "Шифрование файлов базы данных",
|
||
"dualLayerProtection": "Активна двухуровневая защита",
|
||
"bothFieldAndFileEncryptionActive": "Теперь активны как полевое, так и файловое шифрование для максимальной безопасности",
|
||
"fieldLevelAes256Encryption": "Полевое шифрование AES-256 для конфиденциальных данных",
|
||
"fileLevelDatabaseEncryption": "Файловое шифрование базы данных с привязкой к оборудованию",
|
||
"hardwareBoundFileKeys": "Ключи шифрования файлов, привязанные к оборудованию",
|
||
"automaticEncryptedBackups": "Автоматическое создание зашифрованных резервных копий",
|
||
"createEncryptedBackup": "Создать зашифрованную резервную копию",
|
||
"creatingBackup": "Создание резервной копии...",
|
||
"backupCreated": "Резервная копия создана",
|
||
"encryptedBackupCreatedSuccessfully": "Зашифрованная резервная копия успешно создана",
|
||
"backupCreationFailed": "Не удалось создать резервную копию",
|
||
"databaseMigration": "Миграция базы данных",
|
||
"exportForMigration": "Экспорт для миграции",
|
||
"exportDatabaseForHardwareMigration": "Экспортировать базу данных как файл SQLite с расшифрованными данными для миграции на новое оборудование",
|
||
"exportDatabase": "Экспортировать базу данных SQLite",
|
||
"exporting": "Экспорт...",
|
||
"exportCreated": "Экспорт SQLite создан",
|
||
"exportContainsDecryptedData": "Экспорт SQLite содержит расшифрованные данные - храните безопасно!",
|
||
"databaseExportedSuccessfully": "База данных SQLite успешно экспортирована",
|
||
"databaseExportFailed": "Не удалось экспортировать базу данных SQLite",
|
||
"importFromMigration": "Импорт из миграции",
|
||
"importDatabaseFromAnotherSystem": "Импортировать базу данных SQLite из другой системы или оборудования",
|
||
"importDatabase": "Импортировать базу данных SQLite",
|
||
"importing": "Импорт...",
|
||
"selectedFile": "Выбранный файл SQLite",
|
||
"importWillReplaceExistingData": "Импорт SQLite заменит существующие данные - рекомендуется резервное копирование!",
|
||
"pleaseSelectImportFile": "Пожалуйста, выберите файл для импорта SQLite",
|
||
"databaseImportedSuccessfully": "База данных SQLite успешно импортирована",
|
||
"databaseImportFailed": "Не удалось импортировать базу данных SQLite",
|
||
"manageEncryptionAndBackups": "Управление ключами шифрования, безопасностью базы данных и операциями резервного копирования",
|
||
"activeSecurityFeatures": "Текущие активные меры безопасности и защиты",
|
||
"deviceBindingTechnology": "Продвинутая технология защиты ключей на основе оборудования",
|
||
"backupAndRecovery": "Безопасное создание резервных копий и восстановление базы данных",
|
||
"crossSystemDataTransfer": "Экспорт и импорт баз данных между разными системами",
|
||
"noMigrationNeeded": "Миграция не требуется",
|
||
"encryptionKey": "Ключ шифрования",
|
||
"keyProtection": "Защита ключа",
|
||
"active": "Активно",
|
||
"legacy": "Устаревшее",
|
||
"dataStatus": "Статус данных",
|
||
"encrypted": "Зашифровано",
|
||
"needsMigration": "Требуется миграция",
|
||
"ready": "Готово",
|
||
"initializeEncryption": "Инициализировать шифрование",
|
||
"initialize": "Инициализировать",
|
||
"test": "Тест",
|
||
"migrate": "Мигрировать",
|
||
"backup": "Резервная копия",
|
||
"createBackup": "Создать резервную копию",
|
||
"exportImport": "Экспорт/Импорт",
|
||
"export": "Экспорт",
|
||
"import": "Импорт",
|
||
"passwordRequired": "Требуется пароль",
|
||
"confirmExport": "Подтвердить экспорт",
|
||
"exportDescription": "Экспортировать SSH-хосты и учетные данные как файл SQLite",
|
||
"importDescription": "Импортировать файл SQLite с инкрементным слиянием (пропускает дубликаты)",
|
||
"criticalWarning": "Критическое предупреждение",
|
||
"cannotDisablePasswordLoginWithoutOIDC": "Невозможно отключить вход по паролю без настройки OIDC! Вы должны настроить аутентификацию OIDC перед отключением входа по паролю, иначе вы потеряете доступ к Termix.",
|
||
"confirmDisablePasswordLogin": "Вы уверены, что хотите отключить вход по паролю? Убедитесь, что OIDC правильно настроен и работает, прежде чем продолжить, иначе вы потеряете доступ к вашему экземпляру Termix.",
|
||
"passwordLoginDisabled": "Вход по паролю успешно отключен",
|
||
"passwordLoginAndRegistrationDisabled": "Вход по паролю и регистрация новых учетных записей успешно отключены",
|
||
"requiresPasswordLogin": "Требуется включенный вход по паролю",
|
||
"passwordLoginDisabledWarning": "Вход по паролю отключен. Убедитесь, что OIDC правильно настроен, иначе вы не сможете войти в Termix.",
|
||
"oidcRequiredWarning": "КРИТИЧЕСКИ: Вход по паролю отключен. Если вы сбросите или неправильно настроите OIDC, вы потеряете весь доступ к Termix и заблокируете свой экземпляр. Продолжайте только если вы абсолютно уверены.",
|
||
"confirmDisableOIDCWarning": "ПРЕДУПРЕЖДЕНИЕ: Вы собираетесь отключить OIDC, пока вход по паролю также отключен. Это заблокирует ваш экземпляр Termix, и вы потеряете весь доступ. Вы абсолютно уверены, что хотите продолжить?"
|
||
},
|
||
"hosts": {
|
||
"title": "Менеджер хостов",
|
||
"sshHosts": "SSH-хосты",
|
||
"noHosts": "Нет SSH-хостов",
|
||
"noHostsMessage": "Вы еще не добавили SSH-хосты. Нажмите \"Добавить хост\", чтобы начать.",
|
||
"loadingHosts": "Загрузка хостов...",
|
||
"failedToLoadHosts": "Не удалось загрузить хосты",
|
||
"retry": "Повторить",
|
||
"refresh": "Обновить",
|
||
"hostsCount": "{{count}} хостов",
|
||
"importJson": "Импорт JSON",
|
||
"importing": "Импорт...",
|
||
"importJsonTitle": "Импорт SSH-хостов из JSON",
|
||
"importJsonDesc": "Загрузите JSON-файл для массового импорта нескольких SSH-хостов (макс. 100).",
|
||
"downloadSample": "Скачать образец",
|
||
"formatGuide": "Руководство по формату",
|
||
"exportCredentialWarning": "Предупреждение: Хост \"{{name}}\" использует аутентификацию по учетным данным. Экспортируемый файл не будет включать данные учетных данных, и их нужно будет вручную перенастроить после импорта. Вы хотите продолжить?",
|
||
"exportSensitiveDataWarning": "Предупреждение: Хост \"{{name}}\" содержит конфиденциальные данные аутентификации (пароль/SSH-ключ). Экспортируемый файл будет включать эти данные в открытом виде. Пожалуйста, храните файл в безопасности и удалите его после использования. Вы хотите продолжить?",
|
||
"uncategorized": "Без категории",
|
||
"confirmDelete": "Вы уверены, что хотите удалить \"{{name}}\"?",
|
||
"failedToDeleteHost": "Не удалось удалить хост",
|
||
"failedToExportHost": "Не удалось экспортировать хост. Пожалуйста, убедитесь, что вы вошли в систему и имеете доступ к данным хоста.",
|
||
"jsonMustContainHosts": "JSON должен содержать массив \"hosts\" или быть массивом хостов",
|
||
"noHostsInJson": "В JSON-файле не найдено хостов",
|
||
"maxHostsAllowed": "Разрешено максимум 100 хостов за импорт",
|
||
"importCompleted": "Импорт завершен: {{success}} успешно, {{failed}} не удалось",
|
||
"importFailed": "Импорт не удался",
|
||
"importError": "Ошибка импорта",
|
||
"failedToImportJson": "Не удалось импортировать JSON-файл",
|
||
"connectionDetails": "Детали подключения",
|
||
"organization": "Организация",
|
||
"ipAddress": "IP-адрес",
|
||
"port": "Порт",
|
||
"name": "Имя",
|
||
"username": "Имя пользователя",
|
||
"folder": "Папка",
|
||
"tags": "Теги",
|
||
"pin": "Закрепить",
|
||
"passwordRequired": "Пароль требуется при использовании аутентификации по паролю",
|
||
"sshKeyRequired": "Приватный SSH-ключ требуется при использовании аутентификации по ключу",
|
||
"keyTypeRequired": "Тип ключа требуется при использовании аутентификации по ключу",
|
||
"mustSelectValidSshConfig": "Необходимо выбрать допустимую SSH-конфигурацию из списка",
|
||
"addHost": "Добавить хост",
|
||
"editHost": "Редактировать хост",
|
||
"cloneHost": "Клонировать хост",
|
||
"updateHost": "Обновить хост",
|
||
"hostUpdatedSuccessfully": "Хост \"{{name}}\" успешно обновлен!",
|
||
"hostAddedSuccessfully": "Хост \"{{name}}\" успешно добавлен!",
|
||
"hostDeletedSuccessfully": "Хост \"{{name}}\" успешно удален!",
|
||
"failedToSaveHost": "Не удалось сохранить хост. Пожалуйста, попробуйте снова.",
|
||
"enableTerminal": "Включить терминал",
|
||
"enableTerminalDesc": "Включить/отключить видимость хоста во вкладке Терминал",
|
||
"enableTunnel": "Включить туннель",
|
||
"enableTunnelDesc": "Включить/отключить видимость хоста во вкладке Туннель",
|
||
"enableFileManager": "Включить файловый менеджер",
|
||
"enableFileManagerDesc": "Включить/отключить видимость хоста во вкладке Файловый менеджер",
|
||
"defaultPath": "Путь по умолчанию",
|
||
"defaultPathDesc": "Каталог по умолчанию при открытии файлового менеджера для этого хоста",
|
||
"tunnelConnections": "Туннельные подключения",
|
||
"connection": "Подключение",
|
||
"remove": "Удалить",
|
||
"sourcePort": "Исходный порт",
|
||
"sourcePortDesc": " (Источник относится к Текущим деталям подключения во вкладке Общее)",
|
||
"endpointPort": "Порт конечной точки",
|
||
"endpointSshConfig": "SSH-конфигурация конечной точки",
|
||
"tunnelForwardDescription": "Этот туннель будет перенаправлять трафик с порта {{sourcePort}} на исходной машине (текущие детали подключения во вкладке общее) на порт {{endpointPort}} на машине конечной точки.",
|
||
"maxRetries": "Макс. попыток",
|
||
"maxRetriesDescription": "Максимальное количество попыток повторного подключения туннеля.",
|
||
"retryInterval": "Интервал повтора (секунды)",
|
||
"retryIntervalDescription": "Время ожидания между попытками повторного подключения.",
|
||
"autoStartContainer": "Автозапуск при запуске контейнера",
|
||
"autoStartDesc": "Автоматически запускать этот туннель при запуске контейнера",
|
||
"addConnection": "Добавить туннельное подключение",
|
||
"sshpassRequired": "Требуется Sshpass для аутентификации по паролю",
|
||
"sshpassRequiredDesc": "Для аутентификации по паролю в туннелях, sshpass должен быть установлен в системе.",
|
||
"otherInstallMethods": "Другие способы установки:",
|
||
"debianUbuntuEquivalent": "(Debian/Ubuntu) или эквивалент для вашей ОС.",
|
||
"or": "или",
|
||
"centosRhelFedora": "CentOS/RHEL/Fedora",
|
||
"macos": "macOS",
|
||
"windows": "Windows",
|
||
"sshServerConfigRequired": "Требуется конфигурация SSH-сервера",
|
||
"sshServerConfigDesc": "Для туннельных подключений SSH-сервер должен быть настроен для разрешения переадресации портов:",
|
||
"gatewayPortsYes": "для привязки удаленных портов ко всем интерфейсам",
|
||
"allowTcpForwardingYes": "для включения переадресации портов",
|
||
"permitRootLoginYes": "если используется пользователь root для туннелирования",
|
||
"editSshConfig": "Отредактируйте /etc/ssh/sshd_config и перезапустите SSH: sudo systemctl restart sshd",
|
||
"upload": "Загрузить",
|
||
"authentication": "Аутентификация",
|
||
"password": "Пароль",
|
||
"key": "Ключ",
|
||
"credential": "Учетные данные",
|
||
"none": "Нет",
|
||
"selectCredential": "Выбрать учетные данные",
|
||
"selectCredentialPlaceholder": "Выберите учетные данные...",
|
||
"credentialRequired": "Учетные данные требуются при использовании аутентификации по учетным данным",
|
||
"credentialDescription": "Выбор учетных данных перезапишет текущее имя пользователя и будет использовать детали аутентификации учетных данных.",
|
||
"sshPrivateKey": "Приватный SSH-ключ",
|
||
"keyPassword": "Пароль ключа",
|
||
"keyType": "Тип ключа",
|
||
"autoDetect": "Автоопределение",
|
||
"rsa": "RSA",
|
||
"ed25519": "ED25519",
|
||
"ecdsaNistP256": "ECDSA NIST P-256",
|
||
"ecdsaNistP384": "ECDSA NIST P-384",
|
||
"ecdsaNistP521": "ECDSA NIST P-521",
|
||
"dsa": "DSA",
|
||
"rsaSha2256": "RSA SHA2-256",
|
||
"rsaSha2512": "RSA SHA2-512",
|
||
"uploadFile": "Загрузить файл",
|
||
"pasteKey": "Вставить ключ",
|
||
"updateKey": "Обновить ключ",
|
||
"existingKey": "Существующий ключ (нажмите для изменения)",
|
||
"existingCredential": "Существующие учетные данные (нажмите для изменения)",
|
||
"addTagsSpaceToAdd": "добавить теги (пробел для добавления)",
|
||
"terminalBadge": "Терминал",
|
||
"tunnelBadge": "Туннель",
|
||
"fileManagerBadge": "Файловый менеджер",
|
||
"general": "Общее",
|
||
"terminal": "Терминал",
|
||
"tunnel": "Туннель",
|
||
"fileManager": "Файловый менеджер",
|
||
"serverStats": "Статистика сервера",
|
||
"hostViewer": "Просмотрщик хостов",
|
||
"enableServerStats": "Включить статистику сервера",
|
||
"enableServerStatsDesc": "Включить/отключить сбор статистики сервера для этого хоста",
|
||
"displayItems": "Элементы отображения",
|
||
"displayItemsDesc": "Выберите, какие метрики отображать на странице статистики сервера",
|
||
"enableCpu": "Использование CPU",
|
||
"enableMemory": "Использование памяти",
|
||
"enableDisk": "Использование диска",
|
||
"enableNetwork": "Сетевая статистика (Скоро)",
|
||
"enableProcesses": "Количество процессов (Скоро)",
|
||
"enableUptime": "Время работы (Скоро)",
|
||
"enableHostname": "Имя хоста (Скоро)",
|
||
"enableOs": "Операционная система (Скоро)",
|
||
"customCommands": "Пользовательские команды (Скоро)",
|
||
"customCommandsDesc": "Определите пользовательские команды выключения и перезагрузки для этого сервера",
|
||
"shutdownCommand": "Команда выключения",
|
||
"rebootCommand": "Команда перезагрузки",
|
||
"confirmRemoveFromFolder": "Вы уверены, что хотите удалить \"{{name}}\" из папки \"{{folder}}\"? Хост будет перемещен в \"Без папки\".",
|
||
"removedFromFolder": "Хост \"{{name}}\" успешно удален из папки",
|
||
"failedToRemoveFromFolder": "Не удалось удалить хост из папки",
|
||
"folderRenamed": "Папка \"{{oldName}}\" успешно переименована в \"{{newName}}\"",
|
||
"failedToRenameFolder": "Не удалось переименовать папку",
|
||
"movedToFolder": "Хост \"{{name}}\" успешно перемещен в \"{{folder}}\"",
|
||
"failedToMoveToFolder": "Не удалось переместить хост в папку",
|
||
"statistics": "Статистика",
|
||
"enabledWidgets": "Включенные виджеты",
|
||
"enabledWidgetsDesc": "Выберите, какие виджеты статистики отображать для этого хоста",
|
||
"monitoringConfiguration": "Конфигурация мониторинга",
|
||
"monitoringConfigurationDesc": "Настройте, как часто проверяются статистика и статус сервера",
|
||
"statusCheckEnabled": "Включить мониторинг статуса",
|
||
"statusCheckEnabledDesc": "Проверять, находится ли сервер в сети или вне сети",
|
||
"statusCheckInterval": "Интервал проверки статуса",
|
||
"statusCheckIntervalDesc": "Как часто проверять, находится ли хост в сети (5с - 1ч)",
|
||
"metricsEnabled": "Включить мониторинг метрик",
|
||
"metricsEnabledDesc": "Собирать статистику CPU, RAM, диска и другую системную статистику",
|
||
"metricsInterval": "Интервал сбора метрик",
|
||
"metricsIntervalDesc": "Как часто собирать статистику сервера (5с - 1ч)",
|
||
"intervalSeconds": "секунд",
|
||
"intervalMinutes": "минут",
|
||
"intervalValidation": "Интервалы мониторинга должны быть между 5 секундами и 1 часом (3600 секунд)",
|
||
"monitoringDisabled": "Мониторинг сервера отключен для этого хоста",
|
||
"enableMonitoring": "Включите мониторинг в Менеджере хостов → вкладка Статистика",
|
||
"monitoringDisabledBadge": "Мониторинг выключен",
|
||
"statusMonitoring": "Статус",
|
||
"metricsMonitoring": "Метрики",
|
||
"terminalCustomizationNotice": "Примечание: Настройки терминала работают только на рабочем столе (веб-сайт и Electron-приложение). Мобильные приложения и мобильный веб-сайт используют системные настройки терминала по умолчанию.",
|
||
"terminalCustomization": "Настройка терминала",
|
||
"appearance": "Внешний вид",
|
||
"behavior": "Поведение",
|
||
"advanced": "Расширенные",
|
||
"themePreview": "Предпросмотр темы",
|
||
"theme": "Тема",
|
||
"selectTheme": "Выбрать тему",
|
||
"chooseColorTheme": "Выберите цветовую тему для терминала",
|
||
"fontFamily": "Семейство шрифтов",
|
||
"selectFont": "Выбрать шрифт",
|
||
"selectFontDesc": "Выберите шрифт для использования в терминале",
|
||
"fontSize": "Размер шрифта",
|
||
"fontSizeValue": "Размер шрифта: {{value}}px",
|
||
"adjustFontSize": "Настроить размер шрифта терминала",
|
||
"letterSpacing": "Межбуквенный интервал",
|
||
"letterSpacingValue": "Межбуквенный интервал: {{value}}px",
|
||
"adjustLetterSpacing": "Настроить расстояние между символами",
|
||
"lineHeight": "Высота строки",
|
||
"lineHeightValue": "Высота строки: {{value}}",
|
||
"adjustLineHeight": "Настроить расстояние между строками",
|
||
"cursorStyle": "Стиль курсора",
|
||
"selectCursorStyle": "Выбрать стиль курсора",
|
||
"cursorStyleBlock": "Блок",
|
||
"cursorStyleUnderline": "Подчеркивание",
|
||
"cursorStyleBar": "Полоса",
|
||
"chooseCursorAppearance": "Выбрать внешний вид курсора",
|
||
"cursorBlink": "Мигание курсора",
|
||
"enableCursorBlink": "Включить анимацию мигания курсора",
|
||
"scrollbackBuffer": "Буфер прокрутки",
|
||
"scrollbackBufferValue": "Буфер прокрутки: {{value}} строк",
|
||
"scrollbackBufferDesc": "Количество строк для хранения в истории прокрутки",
|
||
"bellStyle": "Стиль звонка",
|
||
"selectBellStyle": "Выбрать стиль звонка",
|
||
"bellStyleNone": "Нет",
|
||
"bellStyleSound": "Звук",
|
||
"bellStyleVisual": "Визуальный",
|
||
"bellStyleBoth": "Оба",
|
||
"bellStyleDesc": "Как обрабатывать звонок терминала (символ BEL, \\x07). Программы вызывают его при завершении задач, возникновении ошибок или для уведомлений. \"Звук\" воспроизводит звуковой сигнал, \"Визуальный\" кратковременно мигает экран, \"Оба\" делает и то, и другое, \"Нет\" отключает звуковые оповещения.",
|
||
"rightClickSelectsWord": "Правый клик выбирает слово",
|
||
"rightClickSelectsWordDesc": "Правый клик выбирает слово под курсором",
|
||
"fastScrollModifier": "Модификатор быстрой прокрутки",
|
||
"selectModifier": "Выбрать модификатор",
|
||
"modifierAlt": "Alt",
|
||
"modifierCtrl": "Ctrl",
|
||
"modifierShift": "Shift",
|
||
"fastScrollModifierDesc": "Клавиша-модификатор для быстрой прокрутки",
|
||
"fastScrollSensitivity": "Чувствительность быстрой прокрутки",
|
||
"fastScrollSensitivityValue": "Чувствительность быстрой прокрутки: {{value}}",
|
||
"fastScrollSensitivityDesc": "Множитель скорости прокрутки при удержании модификатора",
|
||
"minimumContrastRatio": "Минимальная контрастность",
|
||
"minimumContrastRatioValue": "Минимальная контрастность: {{value}}",
|
||
"minimumContrastRatioDesc": "Автоматически настраивать цвета для лучшей читаемости",
|
||
"sshAgentForwarding": "Переадресация SSH-агента",
|
||
"sshAgentForwardingDesc": "Переадресовать агент SSH-аутентификации на удаленный хост",
|
||
"backspaceMode": "Режим Backspace",
|
||
"selectBackspaceMode": "Выбрать режим Backspace",
|
||
"backspaceModeNormal": "Обычный (DEL)",
|
||
"backspaceModeControlH": "Control-H (^H)",
|
||
"backspaceModeDesc": "Поведение клавиши Backspace для совместимости",
|
||
"startupSnippet": "Сниппет запуска",
|
||
"selectSnippet": "Выбрать сниппет",
|
||
"searchSnippets": "Поиск сниппетов...",
|
||
"snippetNone": "Нет",
|
||
"noneAuthTitle": "Интерактивная аутентификация по клавиатуре",
|
||
"noneAuthDescription": "Этот метод аутентификации будет использовать интерактивную аутентификацию по клавиатуре при подключении к SSH-серверу.",
|
||
"noneAuthDetails": "Интерактивная аутентификация по клавиатуре позволяет серверу запрашивать у вас учетные данные во время подключения. Это полезно для серверов, которые требуют многофакторную аутентификацию или динамический ввод пароля."
|
||
},
|
||
"terminal": {
|
||
"title": "Терминал",
|
||
"connect": "Подключиться к хосту",
|
||
"disconnect": "Отключиться",
|
||
"clear": "Очистить",
|
||
"copy": "Копировать",
|
||
"paste": "Вставить",
|
||
"find": "Найти",
|
||
"fullscreen": "Полный экран",
|
||
"splitHorizontal": "Разделить горизонтально",
|
||
"splitVertical": "Разделить вертикально",
|
||
"closePanel": "Закрыть панель",
|
||
"reconnect": "Переподключиться",
|
||
"sessionEnded": "Сеанс завершен",
|
||
"connectionLost": "Подключение потеряно",
|
||
"error": "ОШИБКА: {{message}}",
|
||
"disconnected": "Отключено",
|
||
"connectionClosed": "Подключение закрыто",
|
||
"connectionError": "Ошибка подключения: {{message}}",
|
||
"connected": "Подключено",
|
||
"sshConnected": "SSH-подключение установлено",
|
||
"authError": "Ошибка аутентификации: {{message}}",
|
||
"unknownError": "Произошла неизвестная ошибка",
|
||
"messageParseError": "Не удалось разобрать сообщение сервера",
|
||
"websocketError": "Ошибка подключения WebSocket",
|
||
"connecting": "Подключение...",
|
||
"reconnecting": "Переподключение... ({{attempt}}/{{max}})",
|
||
"reconnected": "Успешно переподключено",
|
||
"maxReconnectAttemptsReached": "Достигнуто максимальное количество попыток переподключения",
|
||
"connectionTimeout": "Таймаут подключения",
|
||
"terminalTitle": "Терминал - {{host}}",
|
||
"terminalWithPath": "Терминал - {{host}}:{{path}}",
|
||
"runTitle": "Выполнение {{command}} - {{host}}",
|
||
"totpRequired": "Требуется двухфакторная аутентификация",
|
||
"totpCodeLabel": "Код проверки",
|
||
"totpPlaceholder": "000000",
|
||
"totpVerify": "Проверить"
|
||
},
|
||
"fileManager": {
|
||
"title": "Файловый менеджер",
|
||
"file": "Файл",
|
||
"folder": "Папка",
|
||
"connectToSsh": "Подключитесь к SSH для использования файловых операций",
|
||
"uploadFile": "Загрузить файл",
|
||
"downloadFile": "Скачать",
|
||
"edit": "Редактировать",
|
||
"preview": "Просмотр",
|
||
"previous": "Предыдущий",
|
||
"next": "Следующий",
|
||
"pageXOfY": "Страница {{current}} из {{total}}",
|
||
"zoomOut": "Уменьшить",
|
||
"zoomIn": "Увеличить",
|
||
"newFile": "Новый файл",
|
||
"newFolder": "Новая папка",
|
||
"rename": "Переименовать",
|
||
"renameItem": "Переименовать элемент",
|
||
"deleteItem": "Удалить элемент",
|
||
"currentPath": "Текущий путь",
|
||
"uploadFileTitle": "Загрузить файл",
|
||
"maxFileSize": "Макс: 1GB (JSON) / 5GB (Binary) - Поддерживаются большие файлы",
|
||
"removeFile": "Удалить файл",
|
||
"clickToSelectFile": "Нажмите для выбора файла",
|
||
"chooseFile": "Выбрать файл",
|
||
"uploading": "Загрузка...",
|
||
"downloading": "Скачивание...",
|
||
"uploadingFile": "Загрузка {{name}}...",
|
||
"uploadingLargeFile": "Загрузка большого файла {{name}} ({{size}})...",
|
||
"downloadingFile": "Скачивание {{name}}...",
|
||
"creatingFile": "Создание {{name}}...",
|
||
"creatingFolder": "Создание {{name}}...",
|
||
"deletingItem": "Удаление {{type}} {{name}}...",
|
||
"renamingItem": "Переименование {{type}} {{oldName}} в {{newName}}...",
|
||
"createNewFile": "Создать новый файл",
|
||
"fileName": "Имя файла",
|
||
"creating": "Создание...",
|
||
"createFile": "Создать файл",
|
||
"createNewFolder": "Создать новую папку",
|
||
"folderName": "Имя папки",
|
||
"createFolder": "Создать папку",
|
||
"warningCannotUndo": "Предупреждение: Это действие нельзя отменить",
|
||
"itemPath": "Путь к элементу",
|
||
"thisIsDirectory": "Это каталог (будет удален рекурсивно)",
|
||
"deleting": "Удаление...",
|
||
"currentPathLabel": "Текущий путь",
|
||
"newName": "Новое имя",
|
||
"thisIsDirectoryRename": "Это каталог",
|
||
"renaming": "Переименование...",
|
||
"fileUploadedSuccessfully": "Файл \"{{name}}\" успешно загружен",
|
||
"failedToUploadFile": "Не удалось загрузить файл",
|
||
"fileDownloadedSuccessfully": "Файл \"{{name}}\" успешно скачан",
|
||
"failedToDownloadFile": "Не удалось скачать файл",
|
||
"noFileContent": "Содержимое файла не получено",
|
||
"filePath": "Путь к файлу",
|
||
"fileCreatedSuccessfully": "Файл \"{{name}}\" успешно создан",
|
||
"failedToCreateFile": "Не удалось создать файл",
|
||
"folderCreatedSuccessfully": "Папка \"{{name}}\" успешно создана",
|
||
"failedToCreateFolder": "Не удалось создать папку",
|
||
"failedToCreateItem": "Не удалось создать элемент",
|
||
"operationFailed": "Операция {{operation}} не удалась для {{name}}: {{error}}",
|
||
"failedToResolveSymlink": "Не удалось разрешить символическую ссылку",
|
||
"itemDeletedSuccessfully": "{{type}} успешно удален",
|
||
"itemsDeletedSuccessfully": "{{count}} элементов успешно удалено",
|
||
"failedToDeleteItems": "Не удалось удалить элементы",
|
||
"dragFilesToUpload": "Перетащите файлы сюда для загрузки",
|
||
"emptyFolder": "Эта папка пуста",
|
||
"itemCount": "{{count}} элементов",
|
||
"selectedCount": "{{count}} выбрано",
|
||
"searchFiles": "Поиск файлов...",
|
||
"upload": "Загрузить",
|
||
"selectHostToStart": "Выберите хост для начала управления файлами",
|
||
"failedToConnect": "Не удалось подключиться к SSH",
|
||
"failedToLoadDirectory": "Не удалось загрузить каталог",
|
||
"noSSHConnection": "Нет доступного SSH-подключения",
|
||
"enterFolderName": "Введите имя папки:",
|
||
"enterFileName": "Введите имя файла:",
|
||
"copy": "Копировать",
|
||
"cut": "Вырезать",
|
||
"paste": "Вставить",
|
||
"delete": "Удалить",
|
||
"properties": "Свойства",
|
||
"preview": "Просмотр",
|
||
"refresh": "Обновить",
|
||
"downloadFiles": "Скачать {{count}} файлов в браузер",
|
||
"copyFiles": "Копировать {{count}} элементов",
|
||
"cutFiles": "Вырезать {{count}} элементов",
|
||
"deleteFiles": "Удалить {{count}} элементов",
|
||
"filesCopiedToClipboard": "{{count}} элементов скопировано в буфер обмена",
|
||
"filesCutToClipboard": "{{count}} элементов вырезано в буфер обмена",
|
||
"movedItems": "Перемещено {{count}} элементов",
|
||
"failedToDeleteItem": "Не удалось удалить элемент",
|
||
"itemRenamedSuccessfully": "{{type}} успешно переименован",
|
||
"failedToRenameItem": "Не удалось переименовать элемент",
|
||
"upload": "Загрузить",
|
||
"download": "Скачать",
|
||
"newFile": "Новый файл",
|
||
"newFolder": "Новая папка",
|
||
"rename": "Переименовать",
|
||
"delete": "Удалить",
|
||
"permissions": "Права доступа",
|
||
"size": "Размер",
|
||
"modified": "Изменен",
|
||
"path": "Путь",
|
||
"fileName": "Имя файла",
|
||
"folderName": "Имя папки",
|
||
"confirmDelete": "Вы уверены, что хотите удалить {{name}}?",
|
||
"uploadSuccess": "Файл успешно загружен",
|
||
"uploadFailed": "Не удалось загрузить файл",
|
||
"downloadSuccess": "Файл успешно скачан",
|
||
"downloadFailed": "Не удалось скачать файл",
|
||
"permissionDenied": "Доступ запрещен",
|
||
"checkDockerLogs": "Проверьте логи Docker для получения подробной информации об ошибке",
|
||
"internalServerError": "Произошла внутренняя ошибка сервера",
|
||
"serverError": "Ошибка сервера",
|
||
"error": "Ошибка",
|
||
"requestFailed": "Запрос завершился с кодом состояния",
|
||
"unknownFileError": "неизвестно",
|
||
"cannotReadFile": "Невозможно прочитать файл",
|
||
"noSshSessionId": "Нет доступного ID SSH-сессии",
|
||
"noFilePath": "Нет доступного пути к файлу",
|
||
"noCurrentHost": "Нет текущего хоста",
|
||
"fileSavedSuccessfully": "Файл успешно сохранен",
|
||
"saveTimeout": "Операция сохранения превысила время ожидания. Файл мог быть успешно сохранен, но операция заняла слишком много времени для завершения. Проверьте логи Docker для подтверждения.",
|
||
"failedToSaveFile": "Не удалось сохранить файл",
|
||
"folder": "Папка",
|
||
"file": "Файл",
|
||
"deletedSuccessfully": "успешно удален",
|
||
"failedToDeleteItem": "Не удалось удалить элемент",
|
||
"connectToServer": "Подключиться к серверу",
|
||
"selectServerToEdit": "Выберите сервер на боковой панели, чтобы начать редактирование файлов",
|
||
"fileOperations": "Файловые операции",
|
||
"confirmDeleteMessage": "Вы уверены, что хотите удалить <strong>{{name}}</strong>?",
|
||
"confirmDeleteSingleItem": "Вы уверены, что хотите окончательно удалить \"{{name}}\"?",
|
||
"confirmDeleteMultipleItems": "Вы уверены, что хотите окончательно удалить {{count}} элементов?",
|
||
"confirmDeleteMultipleItemsWithFolders": "Вы уверены, что хотите окончательно удалить {{count}} элементов? Это включает папки и их содержимое.",
|
||
"confirmDeleteFolder": "Вы уверены, что хотите окончательно удалить папку \"{{name}}\" и все ее содержимое?",
|
||
"deleteDirectoryWarning": "Это удалит папку и все ее содержимое.",
|
||
"actionCannotBeUndone": "Это действие нельзя отменить.",
|
||
"permanentDeleteWarning": "Это действие нельзя отменить. Элемент(ы) будут окончательно удалены с сервера.",
|
||
"recent": "Недавние",
|
||
"pinned": "Закрепленные",
|
||
"folderShortcuts": "Ярлыки папок",
|
||
"noRecentFiles": "Нет недавних файлов.",
|
||
"noPinnedFiles": "Нет закрепленных файлов.",
|
||
"enterFolderPath": "Введите путь к папке",
|
||
"noShortcuts": "Нет ярлыков.",
|
||
"searchFilesAndFolders": "Поиск файлов и папок...",
|
||
"noFilesOrFoldersFound": "Файлы или папки не найдены.",
|
||
"failedToConnectSSH": "Не удалось подключиться к SSH",
|
||
"failedToReconnectSSH": "Не удалось переподключить SSH-сессию",
|
||
"failedToListFiles": "Не удалось получить список файлов",
|
||
"fetchHomeDataTimeout": "Получение домашних данных превысило время ожидания",
|
||
"sshStatusCheckTimeout": "Проверка статуса SSH превысила время ожидания",
|
||
"sshReconnectionTimeout": "Переподключение SSH превысило время ожидания",
|
||
"saveOperationTimeout": "Операция сохранения превысила время ожидания",
|
||
"cannotSaveFile": "Невозможно сохранить файл",
|
||
"dragSystemFilesToUpload": "Перетащите системные файлы сюда для загрузки",
|
||
"dragFilesToWindowToDownload": "Перетащите файлы за пределы окна для скачивания",
|
||
"openTerminalHere": "Открыть терминал здесь",
|
||
"run": "Выполнить",
|
||
"saveToSystem": "Сохранить как...",
|
||
"selectLocationToSave": "Выберите место для сохранения",
|
||
"openTerminalInFolder": "Открыть терминал в этой папке",
|
||
"openTerminalInFileLocation": "Открыть терминал в расположении файла",
|
||
"terminalWithPath": "Терминал - {{host}}:{{path}}",
|
||
"runningFile": "Выполнение - {{file}}",
|
||
"onlyRunExecutableFiles": "Можно выполнять только исполняемые файлы",
|
||
"noHostSelected": "Хост не выбран",
|
||
"starred": "Избранное",
|
||
"shortcuts": "Ярлыки",
|
||
"directories": "Каталоги",
|
||
"removedFromRecentFiles": "Удалено \"{{name}}\" из недавних файлов",
|
||
"removeFailed": "Удаление не удалось",
|
||
"unpinnedSuccessfully": "Откреплено \"{{name}}\" успешно",
|
||
"unpinFailed": "Открепление не удалось",
|
||
"removedShortcut": "Удален ярлык \"{{name}}\"",
|
||
"removeShortcutFailed": "Не удалось удалить ярлык",
|
||
"clearedAllRecentFiles": "Все недавние файлы очищены",
|
||
"clearFailed": "Очистка не удалась",
|
||
"removeFromRecentFiles": "Удалить из недавних файлов",
|
||
"clearAllRecentFiles": "Очистить все недавние файлы",
|
||
"unpinFile": "Открепить файл",
|
||
"removeShortcut": "Удалить ярлык",
|
||
"saveFilesToSystem": "Сохранить {{count}} файлов как...",
|
||
"saveToSystem": "Сохранить как...",
|
||
"pinFile": "Закрепить файл",
|
||
"addToShortcuts": "Добавить в ярлыки",
|
||
"selectLocationToSave": "Выберите место для сохранения",
|
||
"downloadToDefaultLocation": "Скачать в место по умолчанию",
|
||
"pasteFailed": "Вставка не удалась",
|
||
"noUndoableActions": "Нет действий для отмены",
|
||
"undoCopySuccess": "Операция копирования отменена: Удалено {{count}} скопированных файлов",
|
||
"undoCopyFailedDelete": "Отмена не удалась: Не удалось удалить скопированные файлы",
|
||
"undoCopyFailedNoInfo": "Отмена не удалась: Не удалось найти информацию о скопированных файлах",
|
||
"undoMoveSuccess": "Операция перемещения отменена: Перемещено {{count}} файлов обратно в исходное расположение",
|
||
"undoMoveFailedMove": "Отмена не удалась: Не удалось переместить файлы обратно",
|
||
"undoMoveFailedNoInfo": "Отмена не удалась: Не удалось найти информацию о перемещенных файлах",
|
||
"undoDeleteNotSupported": "Операцию удаления нельзя отменить: Файлы окончательно удалены с сервера",
|
||
"undoTypeNotSupported": "Неподдерживаемый тип операции отмены",
|
||
"undoOperationFailed": "Операция отмены не удалась",
|
||
"unknownError": "Неизвестная ошибка",
|
||
"enterPath": "Введите путь...",
|
||
"editPath": "Редактировать путь",
|
||
"confirm": "Подтвердить",
|
||
"cancel": "Отмена",
|
||
"folderName": "Имя папки",
|
||
"find": "Найти...",
|
||
"replaceWith": "Заменить на...",
|
||
"replace": "Заменить",
|
||
"replaceAll": "Заменить все",
|
||
"downloadInstead": "Скачать вместо этого",
|
||
"keyboardShortcuts": "Горячие клавиши",
|
||
"searchAndReplace": "Поиск и замена",
|
||
"editing": "Редактирование",
|
||
"navigation": "Навигация",
|
||
"code": "Код",
|
||
"search": "Поиск",
|
||
"findNext": "Найти следующее",
|
||
"findPrevious": "Найти предыдущее",
|
||
"save": "Сохранить",
|
||
"selectAll": "Выделить все",
|
||
"undo": "Отменить",
|
||
"redo": "Повторить",
|
||
"goToLine": "Перейти к строке",
|
||
"moveLineUp": "Переместить строку вверх",
|
||
"moveLineDown": "Переместить строку вниз",
|
||
"toggleComment": "Закомментировать/раскомментировать",
|
||
"indent": "Увеличить отступ",
|
||
"outdent": "Уменьшить отступ",
|
||
"autoComplete": "Автозавершение",
|
||
"imageLoadError": "Не удалось загрузить изображение",
|
||
"zoomIn": "Увеличить",
|
||
"zoomOut": "Уменьшить",
|
||
"rotate": "Повернуть",
|
||
"originalSize": "Оригинальный размер",
|
||
"startTyping": "Начните печатать...",
|
||
"unknownSize": "Неизвестный размер",
|
||
"fileIsEmpty": "Файл пуст",
|
||
"modified": "Изменен",
|
||
"largeFileWarning": "Предупреждение о большом файле",
|
||
"largeFileWarningDesc": "Этот файл имеет размер {{size}}, что может вызвать проблемы с производительностью при открытии как текста.",
|
||
"fileNotFoundAndRemoved": "Файл \"{{name}}\" не найден и был удален из недавних/закрепленных файлов",
|
||
"failedToLoadFile": "Не удалось загрузить файл: {{error}}",
|
||
"serverErrorOccurred": "Произошла ошибка сервера. Пожалуйста, попробуйте позже.",
|
||
"fileSavedSuccessfully": "Файл успешно сохранен",
|
||
"autoSaveFailed": "Автосохранение не удалось",
|
||
"fileAutoSaved": "Файл автосохранен",
|
||
"fileDownloadedSuccessfully": "Файл успешно скачан",
|
||
"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": "Показать горячие клавиши",
|
||
"startWritingMarkdown": "Начните писать ваш markdown-контент...",
|
||
"loadingFileComparison": "Загрузка сравнения файлов...",
|
||
"reload": "Перезагрузить",
|
||
"compare": "Сравнить",
|
||
"sideBySide": "Рядом",
|
||
"inline": "Встроенное",
|
||
"fileComparison": "Сравнение файлов: {{file1}} vs {{file2}}",
|
||
"fileTooLarge": "Файл слишком большой: {{error}}",
|
||
"sshConnectionFailed": "SSH-подключение не удалось. Пожалуйста, проверьте ваше подключение к {{name}} ({{ip}}:{{port}})",
|
||
"loadFileFailed": "Не удалось загрузить файл: {{error}}",
|
||
"connectedSuccessfully": "Успешно подключено",
|
||
"totpVerificationFailed": "Проверка TOTP не удалась"
|
||
},
|
||
"tunnels": {
|
||
"title": "SSH-туннели",
|
||
"noSshTunnels": "Нет SSH-туннелей",
|
||
"createFirstTunnelMessage": "Вы еще не создали SSH-туннели. Настройте туннельные подключения в Менеджере хостов, чтобы начать.",
|
||
"connected": "Подключено",
|
||
"disconnected": "Отключено",
|
||
"connecting": "Подключение...",
|
||
"disconnecting": "Отключение...",
|
||
"unknownTunnelStatus": "Неизвестно",
|
||
"unknown": "Неизвестно",
|
||
"error": "Ошибка",
|
||
"failed": "Не удалось",
|
||
"retrying": "Повторная попытка",
|
||
"waiting": "Ожидание",
|
||
"waitingForRetry": "Ожидание повторной попытки",
|
||
"retryingConnection": "Повторное подключение",
|
||
"canceling": "Отмена...",
|
||
"connect": "Подключить",
|
||
"disconnect": "Отключить",
|
||
"cancel": "Отмена",
|
||
"port": "Порт",
|
||
"attempt": "Попытка {{current}} из {{max}}",
|
||
"nextRetryIn": "Следующая попытка через {{seconds}} секунд",
|
||
"checkDockerLogs": "Проверьте ваши логи Docker для выяснения причины ошибки, присоединяйтесь к",
|
||
"noTunnelConnections": "Нет настроенных туннельных подключений",
|
||
"tunnelConnections": "Туннельные подключения",
|
||
"addTunnel": "Добавить туннель",
|
||
"editTunnel": "Редактировать туннель",
|
||
"deleteTunnel": "Удалить туннель",
|
||
"tunnelName": "Имя туннеля",
|
||
"localPort": "Локальный порт",
|
||
"remoteHost": "Удаленный хост",
|
||
"remotePort": "Удаленный порт",
|
||
"autoStart": "Автозапуск",
|
||
"status": "Статус",
|
||
"active": "Активно",
|
||
"inactive": "Неактивно",
|
||
"start": "Запустить",
|
||
"stop": "Остановить",
|
||
"restart": "Перезапустить",
|
||
"connectionType": "Тип подключения",
|
||
"local": "Локальный",
|
||
"remote": "Удаленный",
|
||
"dynamic": "Динамический",
|
||
"noSshTunnels": "Нет SSH-туннелей",
|
||
"createFirstTunnelMessage": "Создайте ваш первый SSH-туннель, чтобы начать. Используйте SSH-менеджер для добавления хостов с туннельными подключениями.",
|
||
"unknownConnectionStatus": "Неизвестно",
|
||
"connected": "Подключено",
|
||
"connecting": "Подключение...",
|
||
"disconnecting": "Отключение...",
|
||
"disconnected": "Отключено",
|
||
"portMapping": "Порт {{sourcePort}} → {{endpointHost}}:{{endpointPort}}",
|
||
"disconnect": "Отключить",
|
||
"connect": "Подключить",
|
||
"canceling": "Отмена...",
|
||
"endpointHostNotFound": "Хост конечной точки не найден",
|
||
"discord": "Discord",
|
||
"githubIssue": "Проблема на GitHub",
|
||
"forHelp": "для помощи"
|
||
},
|
||
"serverStats": {
|
||
"title": "Статистика сервера",
|
||
"cpu": "CPU",
|
||
"memory": "Память",
|
||
"disk": "Диск",
|
||
"network": "Сеть",
|
||
"uptime": "Время работы",
|
||
"loadAverage": "Средняя загрузка",
|
||
"processes": "Процессы",
|
||
"connections": "Подключения",
|
||
"usage": "Использование",
|
||
"available": "Доступно",
|
||
"total": "Всего",
|
||
"free": "Свободно",
|
||
"used": "Использовано",
|
||
"percentage": "Процент",
|
||
"refreshStatusAndMetrics": "Обновить статус и метрики",
|
||
"refreshStatus": "Обновить статус",
|
||
"fileManagerAlreadyOpen": "Файловый менеджер уже открыт для этого хоста",
|
||
"openFileManager": "Открыть файловый менеджер",
|
||
"cpuCores_one": "{{count}} CPU",
|
||
"cpuCores_other": "{{count}} CPU",
|
||
"naCpus": "N/A CPU",
|
||
"loadAverage": "Средняя: {{avg1}}, {{avg5}}, {{avg15}}",
|
||
"loadAverageNA": "Средняя: N/A",
|
||
"cpuUsage": "Использование CPU",
|
||
"memoryUsage": "Использование памяти",
|
||
"diskUsage": "Использование диска",
|
||
"rootStorageSpace": "Место в корневом хранилище",
|
||
"of": "из",
|
||
"feedbackMessage": "Есть идеи, что должно быть следующим для управления сервером? Поделитесь ими на",
|
||
"failedToFetchHostConfig": "Не удалось загрузить конфигурацию хоста",
|
||
"failedToFetchStatus": "Не удалось загрузить статус сервера",
|
||
"failedToFetchMetrics": "Не удалось загрузить метрики сервера",
|
||
"failedToFetchHomeData": "Не удалось загрузить домашние данные",
|
||
"loadingMetrics": "Загрузка метрик...",
|
||
"refreshing": "Обновление...",
|
||
"serverOffline": "Сервер не в сети",
|
||
"cannotFetchMetrics": "Невозможно получить метрики с отключенного сервера",
|
||
"totpRequired": "Требуется TOTP-аутентификация",
|
||
"totpUnavailable": "Статистика сервера недоступна для серверов с включенным TOTP",
|
||
"load": "Загрузка",
|
||
"free": "Свободно",
|
||
"available": "Доступно",
|
||
"editLayout": "Редактировать макет",
|
||
"cancelEdit": "Отмена",
|
||
"addWidget": "Добавить виджет",
|
||
"saveLayout": "Сохранить макет",
|
||
"unsavedChanges": "Несохраненные изменения",
|
||
"layoutSaved": "Макет успешно сохранен",
|
||
"failedToSaveLayout": "Не удалось сохранить макет",
|
||
"systemInfo": "Системная информация",
|
||
"hostname": "Имя хоста",
|
||
"operatingSystem": "Операционная система",
|
||
"kernel": "Ядро",
|
||
"totalUptime": "Общее время работы",
|
||
"seconds": "секунд",
|
||
"networkInterfaces": "Сетевые интерфейсы",
|
||
"noInterfacesFound": "Сетевые интерфейсы не найдены",
|
||
"totalProcesses": "Всего процессов",
|
||
"running": "Запущено",
|
||
"noProcessesFound": "Процессы не найдены",
|
||
"loginStats": "Статистика входов SSH",
|
||
"totalLogins": "Всего входов",
|
||
"uniqueIPs": "Уникальные IP",
|
||
"recentSuccessfulLogins": "Последние успешные входы",
|
||
"recentFailedAttempts": "Последние неудачные попытки",
|
||
"noRecentLoginData": "Нет данных о недавних входах",
|
||
"from": "с"
|
||
},
|
||
"auth": {
|
||
"tagline": "SSH ТЕРМИНАЛ МЕНЕДЖЕР",
|
||
"description": "Безопасное, мощное и интуитивное управление SSH-соединениями",
|
||
"welcomeBack": "Добро пожаловать обратно в TERMIX",
|
||
"createAccount": "Создайте вашу учетную запись TERMIX",
|
||
"continueExternal": "Продолжить с внешним провайдером",
|
||
"loginTitle": "Вход в Termix",
|
||
"registerTitle": "Создать учетную запись",
|
||
"loginButton": "Войти",
|
||
"registerButton": "Зарегистрироваться",
|
||
"forgotPassword": "Забыли пароль?",
|
||
"rememberMe": "Запомнить меня",
|
||
"noAccount": "Нет учетной записи?",
|
||
"hasAccount": "Уже есть учетная запись?",
|
||
"loginSuccess": "Вход выполнен успешно",
|
||
"loginFailed": "Ошибка входа",
|
||
"registerSuccess": "Регистрация успешна",
|
||
"registerFailed": "Ошибка регистрации",
|
||
"logoutSuccess": "Выход выполнен успешно",
|
||
"invalidCredentials": "Неверное имя пользователя или пароль",
|
||
"accountCreated": "Учетная запись успешно создана",
|
||
"passwordReset": "Ссылка для сброса пароля отправлена",
|
||
"twoFactorAuth": "Двухфакторная аутентификация",
|
||
"enterCode": "Введите код проверки",
|
||
"backupCode": "Или используйте резервный код",
|
||
"verifyCode": "Проверить код",
|
||
"enableTwoFactor": "Включить двухфакторную аутентификацию",
|
||
"disableTwoFactor": "Отключить двухфакторную аутентификацию",
|
||
"scanQRCode": "Отсканируйте этот QR-код вашим приложением-аутентификатором",
|
||
"backupCodes": "Резервные коды",
|
||
"saveBackupCodes": "Сохраните эти резервные коды в безопасном месте",
|
||
"twoFactorEnabledSuccess": "Двухфакторная аутентификация успешно включена!",
|
||
"twoFactorDisabled": "Двухфакторная аутентификация отключена",
|
||
"newBackupCodesGenerated": "Сгенерированы новые резервные коды",
|
||
"backupCodesDownloaded": "Резервные коды скачаны",
|
||
"pleaseEnterSixDigitCode": "Пожалуйста, введите 6-значный код",
|
||
"invalidVerificationCode": "Неверный код проверки",
|
||
"failedToDisableTotp": "Не удалось отключить TOTP",
|
||
"failedToGenerateBackupCodes": "Не удалось сгенерировать резервные коды",
|
||
"enterPassword": "Введите ваш пароль",
|
||
"lockedOidcAuth": "Заблокировано (OIDC Auth)",
|
||
"twoFactorTitle": "Двухфакторная аутентификация",
|
||
"twoFactorProtected": "Ваша учетная запись защищена двухфакторной аутентификацией",
|
||
"twoFactorActive": "Двухфакторная аутентификация в настоящее время активна на вашей учетной записи",
|
||
"disable2FA": "Отключить 2FA",
|
||
"disableTwoFactorWarning": "Отключение двухфакторной аутентификации сделает вашу учетную запись менее защищенной",
|
||
"passwordOrTotpCode": "Пароль или TOTP-код",
|
||
"or": "Или",
|
||
"generateNewBackupCodesText": "Сгенерируйте новые резервные коды, если вы потеряли существующие",
|
||
"generateNewBackupCodes": "Сгенерировать новые резервные коды",
|
||
"yourBackupCodes": "Ваши резервные коды",
|
||
"download": "Скачать",
|
||
"setupTwoFactorTitle": "Настройка двухфакторной аутентификации",
|
||
"step1ScanQR": "Шаг 1: Отсканируйте QR-код вашим приложением-аутентификатором",
|
||
"manualEntryCode": "Код для ручного ввода",
|
||
"cannotScanQRText": "Если вы не можете отсканировать QR-код, введите этот код вручную в вашем приложении-аутентификаторе",
|
||
"nextVerifyCode": "Далее: Проверить код",
|
||
"verifyAuthenticator": "Проверьте ваш аутентификатор",
|
||
"step2EnterCode": "Шаг 2: Введите 6-значный код из вашего приложения-аутентификатора",
|
||
"verificationCode": "Код проверки",
|
||
"back": "Назад",
|
||
"verifyAndEnable": "Проверить и включить",
|
||
"saveBackupCodesTitle": "Сохраните ваши резервные коды",
|
||
"step3StoreCodesSecurely": "Шаг 3: Сохраните эти коды в безопасном месте",
|
||
"importantBackupCodesText": "Сохраните эти резервные коды в безопасном месте. Вы можете использовать их для доступа к вашей учетной записи, если потеряете ваше устройство аутентификации.",
|
||
"completeSetup": "Завершить настройку",
|
||
"notEnabledText": "Двухфакторная аутентификация добавляет дополнительный уровень безопасности, требуя код из вашего приложения-аутентификатора при входе.",
|
||
"enableTwoFactorButton": "Включить двухфакторную аутентификацию",
|
||
"addExtraSecurityLayer": "Добавьте дополнительный уровень безопасности к вашей учетной записи",
|
||
"firstUser": "Первый пользователь",
|
||
"firstUserMessage": "Вы первый пользователь и будете сделаны администратором. Вы можете просмотреть настройки администратора в выпадающем меню пользователя на боковой панели. Если вы считаете, что это ошибка, проверьте логи docker или создайте проблему на GitHub.",
|
||
"external": "Внешний",
|
||
"loginWithExternal": "Войти через внешнего провайдера",
|
||
"loginWithExternalDesc": "Войти с использованием настроенного внешнего провайдера идентификации",
|
||
"externalNotSupportedInElectron": "Внешняя аутентификация пока не поддерживается в Electron-приложении. Пожалуйста, используйте веб-версию для входа через OIDC.",
|
||
"resetPasswordButton": "Сбросить пароль",
|
||
"sendResetCode": "Отправить код сброса",
|
||
"resetCodeDesc": "Введите ваше имя пользователя для получения кода сброса пароля. Код будет записан в логи docker-контейнера.",
|
||
"resetCode": "Код сброса",
|
||
"verifyCodeButton": "Проверить код",
|
||
"enterResetCode": "Введите 6-значный код из логов docker-контейнера для пользователя:",
|
||
"goToLogin": "Перейти ко входу",
|
||
"newPassword": "Новый пароль",
|
||
"confirmNewPassword": "Подтвердите пароль",
|
||
"enterNewPassword": "Введите ваш новый пароль для пользователя:",
|
||
"signUp": "Зарегистрироваться",
|
||
"dataLossWarning": "Сброс пароля этим способом удалит все ваши сохраненные SSH-хосты, учетные данные и другие зашифрованные данные. Это действие нельзя отменить. Используйте это только если вы забыли пароль и не вошли в систему.",
|
||
"authenticationDisabled": "Аутентификация отключена",
|
||
"authenticationDisabledDesc": "Все методы аутентификации в настоящее время отключены. Пожалуйста, свяжитесь с вашим администратором."
|
||
},
|
||
"errors": {
|
||
"notFound": "Страница не найдена",
|
||
"unauthorized": "Неавторизованный доступ",
|
||
"forbidden": "Доступ запрещен",
|
||
"serverError": "Ошибка сервера",
|
||
"networkError": "Сетевая ошибка",
|
||
"databaseConnection": "Не удалось подключиться к базе данных.",
|
||
"unknownError": "Неизвестная ошибка",
|
||
"loginFailed": "Ошибка входа",
|
||
"failedPasswordReset": "Не удалось инициировать сброс пароля",
|
||
"failedVerifyCode": "Не удалось проверить код сброса",
|
||
"failedCompleteReset": "Не удалось завершить сброс пароля",
|
||
"invalidTotpCode": "Неверный TOTP-код",
|
||
"failedOidcLogin": "Не удалось начать вход через OIDC",
|
||
"failedUserInfo": "Не удалось получить информацию о пользователе после входа через OIDC",
|
||
"oidcAuthFailed": "OIDC-аутентификация не удалась",
|
||
"noTokenReceived": "Токен не получен при входе",
|
||
"invalidAuthUrl": "Получен неверный URL авторизации от бэкенда",
|
||
"invalidInput": "Неверный ввод",
|
||
"requiredField": "Это поле обязательно",
|
||
"minLength": "Минимальная длина {{min}}",
|
||
"maxLength": "Максимальная длина {{max}}",
|
||
"invalidEmail": "Неверный адрес email",
|
||
"passwordMismatch": "Пароли не совпадают",
|
||
"passwordLoginDisabled": "Вход по имени пользователя/паролю в настоящее время отключен",
|
||
"weakPassword": "Пароль слишком слабый",
|
||
"usernameExists": "Имя пользователя уже существует",
|
||
"emailExists": "Email уже существует",
|
||
"loadFailed": "Не удалось загрузить данные",
|
||
"saveError": "Не удалось сохранить",
|
||
"sessionExpired": "Сеанс истек - пожалуйста, войдите снова"
|
||
},
|
||
"messages": {
|
||
"saveSuccess": "Успешно сохранено",
|
||
"saveError": "Не удалось сохранить",
|
||
"deleteSuccess": "Успешно удалено",
|
||
"deleteError": "Не удалось удалить",
|
||
"updateSuccess": "Успешно обновлено",
|
||
"updateError": "Не удалось обновить",
|
||
"copySuccess": "Скопировано в буфер обмена",
|
||
"copyError": "Не удалось скопировать",
|
||
"copiedToClipboard": "{{item}} скопировано в буфер обмена",
|
||
"connectionEstablished": "Подключение установлено",
|
||
"connectionClosed": "Подключение закрыто",
|
||
"reconnecting": "Переподключение...",
|
||
"processing": "Обработка...",
|
||
"pleaseWait": "Пожалуйста, подождите...",
|
||
"registrationDisabled": "Регистрация новых учетных записей в настоящее время отключена администратором. Пожалуйста, войдите или свяжитесь с администратором.",
|
||
"databaseConnected": "Подключение к базе данных успешно установлено",
|
||
"databaseConnectionFailed": "Не удалось подключиться к серверу базы данных",
|
||
"checkServerConnection": "Пожалуйста, проверьте ваше подключение к серверу и попробуйте снова",
|
||
"resetCodeSent": "Код сброса отправлен в логи Docker",
|
||
"codeVerified": "Код успешно проверен",
|
||
"passwordResetSuccess": "Пароль успешно сброшен",
|
||
"loginSuccess": "Вход выполнен успешно",
|
||
"registrationSuccess": "Регистрация успешна"
|
||
},
|
||
"profile": {
|
||
"title": "Профиль пользователя",
|
||
"description": "Управление настройками учетной записи и безопасностью",
|
||
"security": "Безопасность",
|
||
"changePassword": "Изменить пароль",
|
||
"twoFactorAuth": "Двухфакторная аутентификация",
|
||
"accountInfo": "Информация об учетной записи",
|
||
"role": "Роль",
|
||
"admin": "Администратор",
|
||
"user": "Пользователь",
|
||
"authMethod": "Метод аутентификации",
|
||
"local": "Локальный",
|
||
"external": "Внешний (OIDC)",
|
||
"selectPreferredLanguage": "Выберите предпочитаемый язык интерфейса",
|
||
"currentPassword": "Текущий пароль",
|
||
"passwordChangedSuccess": "Пароль успешно изменен! Пожалуйста, войдите снова.",
|
||
"failedToChangePassword": "Не удалось изменить пароль. Пожалуйста, проверьте ваш текущий пароль и попробуйте снова."
|
||
},
|
||
"user": {
|
||
"failedToLoadVersionInfo": "Не удалось загрузить информацию о версии"
|
||
},
|
||
"placeholders": {
|
||
"enterCode": "000000",
|
||
"ipAddress": "127.0.0.1",
|
||
"port": "22",
|
||
"maxRetries": "3",
|
||
"retryInterval": "10",
|
||
"language": "Язык",
|
||
"username": "имя пользователя",
|
||
"hostname": "имя хоста",
|
||
"folder": "папка",
|
||
"password": "пароль",
|
||
"keyPassword": "пароль ключа",
|
||
"pastePrivateKey": "Вставьте ваш приватный ключ здесь...",
|
||
"pastePublicKey": "Вставьте ваш публичный ключ здесь...",
|
||
"credentialName": "Мой SSH-сервер",
|
||
"description": "Описание SSH-учетных данных",
|
||
"searchCredentials": "Поиск учетных данных по имени, имени пользователя или тегам...",
|
||
"sshConfig": "конфигурация ssh конечной точки",
|
||
"homePath": "/home",
|
||
"clientId": "your-client-id",
|
||
"clientSecret": "your-client-secret",
|
||
"authUrl": "https://your-provider.com/application/o/authorize/",
|
||
"redirectUrl": "https://your-provider.com/application/o/termix/",
|
||
"tokenUrl": "https://your-provider.com/application/o/token/",
|
||
"userIdField": "sub",
|
||
"usernameField": "name",
|
||
"scopes": "openid email profile",
|
||
"userinfoUrl": "https://your-provider.com/application/o/userinfo/",
|
||
"enterUsername": "Введите имя пользователя, чтобы сделать администратором",
|
||
"searchHosts": "Поиск хостов по имени, имени пользователя, IP, папке, тегам...",
|
||
"enterPassword": "Введите ваш пароль",
|
||
"totpCode": "6-значный TOTP-код",
|
||
"searchHostsAny": "Поиск хостов по любой информации...",
|
||
"confirmPassword": "Введите ваш пароль для подтверждения",
|
||
"typeHere": "Введите здесь",
|
||
"fileName": "Введите имя файла (например, example.txt)",
|
||
"folderName": "Введите имя папки",
|
||
"fullPath": "Введите полный путь к элементу",
|
||
"currentPath": "Введите текущий путь к элементу",
|
||
"newName": "Введите новое имя"
|
||
},
|
||
"leftSidebar": {
|
||
"failedToLoadHosts": "Не удалось загрузить хосты",
|
||
"noFolder": "Без папки",
|
||
"passwordRequired": "Требуется пароль",
|
||
"failedToDeleteAccount": "Не удалось удалить учетную запись",
|
||
"failedToMakeUserAdmin": "Не удалось сделать пользователя администратором",
|
||
"userIsNowAdmin": "Пользователь {{username}} теперь администратор",
|
||
"removeAdminConfirm": "Вы уверены, что хотите убрать статус администратора у {{username}}?",
|
||
"deleteUserConfirm": "Вы уверены, что хотите удалить пользователя {{username}}? Это действие нельзя отменить.",
|
||
"deleteAccount": "Удалить учетную запись",
|
||
"closeDeleteAccount": "Закрыть удаление учетной записи",
|
||
"deleteAccountWarning": "Это действие нельзя отменить. Это окончательно удалит вашу учетную запись и все связанные данные.",
|
||
"deleteAccountWarningDetails": "Удаление вашей учетной записи удалит все ваши данные, включая SSH-хосты, конфигурации и настройки. Это действие необратимо.",
|
||
"cannotDeleteAccount": "Невозможно удалить учетную запись",
|
||
"lastAdminWarning": "Вы последний пользователь-администратор. Вы не можете удалить свою учетную запись, так как это оставит систему без администраторов. Пожалуйста, сначала сделайте другого пользователя администратором или свяжитесь с поддержкой системы.",
|
||
"confirmPassword": "Подтвердите пароль",
|
||
"deleting": "Удаление...",
|
||
"cancel": "Отмена"
|
||
},
|
||
"interface": {
|
||
"sidebar": "Боковая панель",
|
||
"toggleSidebar": "Переключить боковую панель",
|
||
"close": "Закрыть",
|
||
"online": "В сети",
|
||
"offline": "Не в сети",
|
||
"maintenance": "Обслуживание",
|
||
"degraded": "Снижена производительность",
|
||
"noTunnelConnections": "Нет настроенных туннельных подключений",
|
||
"discord": "Discord",
|
||
"connectToSshForOperations": "Подключитесь к SSH для использования файловых операций",
|
||
"uploadFile": "Загрузить файл",
|
||
"newFile": "Новый файл",
|
||
"newFolder": "Новая папка",
|
||
"rename": "Переименовать",
|
||
"deleteItem": "Удалить элемент",
|
||
"createNewFile": "Создать новый файл",
|
||
"createNewFolder": "Создать новую папку",
|
||
"deleteItem": "Удалить элемент",
|
||
"renameItem": "Переименовать элемент",
|
||
"clickToSelectFile": "Нажмите для выбора файла",
|
||
"noSshHosts": "Нет SSH-хостов",
|
||
"sshHosts": "SSH-хосты",
|
||
"importSshHosts": "Импорт SSH-хостов из JSON",
|
||
"clientId": "Client ID",
|
||
"clientSecret": "Client Secret",
|
||
"error": "Ошибка",
|
||
"warning": "Предупреждение",
|
||
"deleteAccount": "Удалить учетную запись",
|
||
"closeDeleteAccount": "Закрыть удаление учетной записи",
|
||
"cannotDeleteAccount": "Невозможно удалить учетную запись",
|
||
"confirmPassword": "Подтвердите пароль",
|
||
"deleting": "Удаление...",
|
||
"externalAuth": "Внешняя аутентификация (OIDC)",
|
||
"configureExternalProvider": "Настройте внешнего провайдера идентификации для",
|
||
"waitingForRetry": "Ожидание повторной попытки",
|
||
"retryingConnection": "Повторное подключение",
|
||
"resetSplitSizes": "Сбросить размеры разделения",
|
||
"sshManagerAlreadyOpen": "SSH-менеджер уже открыт",
|
||
"disabledDuringSplitScreen": "Отключено во время разделенного экрана",
|
||
"unknown": "Неизвестно",
|
||
"connected": "Подключено",
|
||
"disconnected": "Отключено",
|
||
"maxRetriesExhausted": "Исчерпаны максимальные попытки",
|
||
"endpointHostNotFound": "Хост конечной точки не найден",
|
||
"administrator": "Администратор",
|
||
"user": "Пользователь",
|
||
"external": "Внешний",
|
||
"local": "Локальный",
|
||
"saving": "Сохранение...",
|
||
"saveConfiguration": "Сохранить конфигурацию",
|
||
"loading": "Загрузка...",
|
||
"refresh": "Обновить",
|
||
"adding": "Добавление...",
|
||
"makeAdmin": "Сделать администратором",
|
||
"verifying": "Проверка...",
|
||
"verifyAndEnable": "Проверить и включить",
|
||
"secretKey": "Секретный ключ",
|
||
"totpQrCode": "TOTP QR-код",
|
||
"passwordRequired": "Пароль требуется при использовании аутентификации по паролю",
|
||
"sshKeyRequired": "Приватный SSH-ключ требуется при использовании аутентификации по ключу",
|
||
"keyTypeRequired": "Тип ключа требуется при использовании аутентификации по ключу",
|
||
"validSshConfigRequired": "Необходимо выбрать допустимую SSH-конфигурацию из списка",
|
||
"updateHost": "Обновить хост",
|
||
"addHost": "Добавить хост",
|
||
"editHost": "Редактировать хост",
|
||
"pinConnection": "Закрепить подключение",
|
||
"authentication": "Аутентификация",
|
||
"password": "Пароль",
|
||
"key": "Ключ",
|
||
"sshPrivateKey": "Приватный SSH-ключ",
|
||
"keyPassword": "Пароль ключа",
|
||
"keyType": "Тип ключа",
|
||
"enableTerminal": "Включить терминал",
|
||
"enableTunnel": "Включить туннель",
|
||
"enableFileManager": "Включить файловый менеджер",
|
||
"defaultPath": "Путь по умолчанию",
|
||
"tunnelConnections": "Туннельные подключения",
|
||
"maxRetries": "Макс. попыток",
|
||
"upload": "Загрузить",
|
||
"updateKey": "Обновить ключ",
|
||
"productionFolder": "Продакшен",
|
||
"databaseServer": "Сервер базы данных",
|
||
"developmentServer": "Сервер разработки",
|
||
"developmentFolder": "Разработка",
|
||
"webServerProduction": "Веб-сервер - Продакшен",
|
||
"unknownError": "Неизвестная ошибка",
|
||
"failedToInitiatePasswordReset": "Не удалось инициировать сброс пароля",
|
||
"failedToVerifyResetCode": "Не удалось проверить код сброса",
|
||
"failedToCompletePasswordReset": "Не удалось завершить сброс пароля",
|
||
"invalidTotpCode": "Неверный TOTP-код",
|
||
"failedToStartOidcLogin": "Не удалось начать вход через OIDC",
|
||
"failedToGetUserInfoAfterOidc": "Не удалось получить информацию о пользователе после OIDC-входа",
|
||
"loginWithExternalProvider": "Войти через внешнего провайдера",
|
||
"loginWithExternal": "Войти через внешнего провайдера",
|
||
"sendResetCode": "Отправить код сброса",
|
||
"verifyCode": "Проверить код",
|
||
"resetPassword": "Сбросить пароль",
|
||
"login": "Войти",
|
||
"signUp": "Зарегистрироваться",
|
||
"failedToUpdateOidcConfig": "Не удалось обновить конфигурацию OIDC",
|
||
"failedToMakeUserAdmin": "Не удалось сделать пользователя администратором",
|
||
"failedToStartTotpSetup": "Не удалось начать настройку TOTP",
|
||
"invalidVerificationCode": "Неверный код проверки",
|
||
"failedToDisableTotp": "Не удалось отключить TOTP",
|
||
"failedToGenerateBackupCodes": "Не удалось сгенерировать резервные коды"
|
||
},
|
||
"mobile": {
|
||
"selectHostToStart": "Выберите хост для начала сеанса терминала",
|
||
"limitedSupportMessage": "Поддержка мобильного веб-сайта все еще в разработке. Используйте мобильное приложение для лучшего опыта.",
|
||
"mobileAppInProgress": "Мобильное приложение в разработке",
|
||
"mobileAppInProgressDesc": "Мы работаем над специальным мобильным приложением, чтобы обеспечить лучший опыт на мобильных устройствах.",
|
||
"viewMobileAppDocs": "Установить мобильное приложение",
|
||
"mobileAppDocumentation": "Документация мобильного приложения"
|
||
},
|
||
"dashboard": {
|
||
"title": "Панель управления",
|
||
"github": "GitHub",
|
||
"support": "Поддержка",
|
||
"discord": "Discord",
|
||
"donate": "Пожертвовать",
|
||
"serverOverview": "Обзор сервера",
|
||
"version": "Версия",
|
||
"upToDate": "Обновлено",
|
||
"updateAvailable": "Доступно обновление",
|
||
"uptime": "Время работы",
|
||
"database": "База данных",
|
||
"healthy": "Работает",
|
||
"error": "Ошибка",
|
||
"totalServers": "Всего серверов",
|
||
"totalTunnels": "Всего туннелей",
|
||
"totalCredentials": "Всего учетных данных",
|
||
"recentActivity": "Недавняя активность",
|
||
"reset": "Сбросить",
|
||
"loadingRecentActivity": "Загрузка недавней активности...",
|
||
"noRecentActivity": "Нет недавней активности",
|
||
"quickActions": "Быстрые действия",
|
||
"addHost": "Добавить хост",
|
||
"addCredential": "Добавить учетные данные",
|
||
"adminSettings": "Настройки администратора",
|
||
"userProfile": "Профиль пользователя",
|
||
"serverStats": "Статистика сервера",
|
||
"loadingServerStats": "Загрузка статистики сервера...",
|
||
"noServerData": "Данные сервера недоступны",
|
||
"cpu": "CPU",
|
||
"ram": "RAM",
|
||
"notAvailable": "N/A"
|
||
},
|
||
"commandPalette": {
|
||
"searchPlaceholder": "Поиск хостов или быстрых действий...",
|
||
"recentActivity": "Недавняя активность",
|
||
"navigation": "Навигация",
|
||
"addHost": "Добавить хост",
|
||
"addCredential": "Добавить учетные данные",
|
||
"adminSettings": "Настройки администратора",
|
||
"userProfile": "Профиль пользователя",
|
||
"updateLog": "Журнал обновлений",
|
||
"hosts": "Хосты",
|
||
"openServerDetails": "Открыть детали сервера",
|
||
"openFileManager": "Открыть файловый менеджер",
|
||
"edit": "Редактировать",
|
||
"links": "Ссылки",
|
||
"github": "GitHub",
|
||
"support": "Поддержка",
|
||
"discord": "Discord",
|
||
"donate": "Пожертвовать",
|
||
"press": "Нажмите",
|
||
"toToggle": "для переключения",
|
||
"close": "Закрыть",
|
||
"hostManager": "Менеджер хостов"
|
||
}
|
||
}
|