diff --git a/src/locales/translated/af_ZA.json b/src/locales/translated/af_ZA.json index da31c2c4..dfd3c725 100644 --- a/src/locales/translated/af_ZA.json +++ b/src/locales/translated/af_ZA.json @@ -402,6 +402,8 @@ "currentVersion": "Jy gebruik weergawe {{version}}", "updateAvailable": "Opdatering beskikbaar", "newVersionAvailable": "'n Nuwe weergawe is beskikbaar! Jy gebruik {{current}}, maar {{latest}} is beskikbaar.", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "Uitgereik op {{date}}", "downloadUpdate": "Laai opdatering af", "dismiss": "Maak toe", @@ -426,6 +428,8 @@ "warning": "Waarskuwing", "info": "Inligting", "success": "Sukses", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "Laai tans...", "required": "Vereis", "optional": "Opsioneel", @@ -471,6 +475,7 @@ "chinese": "Chinees", "german": "Duits", "cancel": "Kanselleer", + "done": "Done", "username": "Gebruikersnaam", "name": "Naam", "login": "Aanmeld", @@ -486,6 +491,7 @@ "save": "Stoor", "saving": "Stoor...", "delete": "Vee uit", + "rename": "Rename", "edit": "Wysig", "add": "Voeg by", "search": "Soek", @@ -559,7 +565,8 @@ "passwordCopied": "Wagwoord gekopieer na knipbord", "sudoPasswordCopied": "Sudo-wagwoord na knipbord gekopieer", "noPasswordAvailable": "Geen wagwoord beskikbaar nie", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Failed to copy password", + "openFileManager": "Open File Manager" }, "admin": { "title": "Admin-instellings", @@ -868,7 +875,42 @@ "passwordMinLength": "Wagwoord moet ten minste 6 karakters wees", "currentRoles": "Huidige Rolle", "noRolesAssigned": "Geen rolle toegeken nie", - "assignNewRole": "Ken Nuwe Rol Toe" + "assignNewRole": "Ken Nuwe Rol Toe", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "Gasheerbestuurder", @@ -962,28 +1004,8 @@ "enableDocker": "Aktiveer Docker", "defaultPath": "Standaardpad", "defaultPathDesc": "Standaardgids wanneer lêerbestuurder vir hierdie gasheer oopgemaak word", - "tunnelConnections": "Tonnelverbindings", "connection": "Verbinding", "remove": "Verwyder", - "sourcePort": "Bronpoort", - "sourcePortDesc": " (Bron verwys na die Huidige Verbindingsbesonderhede in die Algemeen-oortjie)", - "endpointPort": "Eindpuntpoort", - "endpointSshConfig": "Eindpunt SSH-konfigurasie", - "tunnelForwardDescription": "Hierdie tonnel sal verkeer vanaf poort {{sourcePort}} op die bronmasjien (huidige verbindingsbesonderhede in die algemene oortjie) na poort {{endpointPort}} op die eindpuntmasjien aanstuur.", - "maxRetries": "Maksimum herprobeer", - "maxRetriesDescription": "Maksimum aantal herprobeerpogings vir tonnelverbinding.", - "retryInterval": "Herprobeerinterval (sekondes)", - "retryIntervalDescription": "Tyd om te wag tussen herpogings.", - "autoStartContainer": "Outomatiese begin met houerlansering", - "autoStartDesc": "Begin hierdie tonnel outomaties wanneer die houer begin", - "addConnection": "Voeg tonnelverbinding by", - "tunnelType": "Tonnel Tipe", - "tunnelTypeLocal": "Plaaslik (-L)", - "tunnelTypeRemote": "Afstandbeheer (-R)", - "tunnelTypeLocalDesc": "Stuur plaaslike poort na afgeleë eindpunt aan", - "tunnelTypeRemoteDesc": "Stuur afgeleë poort na plaaslike masjien aan", - "tunnelForwardDescriptionLocal": "Hierdie tonnel sal verkeer vanaf die plaaslike poort {{sourcePort}} na poort {{endpointPort}} op die eindpuntmasjien aanstuur.", - "tunnelForwardDescriptionRemote": "Hierdie tonnel sal verkeer vanaf poort {{sourcePort}} op die bronmasjien (huidige verbindingsbesonderhede in die algemene oortjie) na poort {{endpointPort}} op die eindpuntmasjien aanstuur.", "sshpassRequired": "Sshpass word vereis vir wagwoordverifikasie", "sshpassRequiredDesc": "Vir wagwoordverifikasie in tonnels moet sshpass op die stelsel geïnstalleer wees.", "otherInstallMethods": "Ander installasiemetodes:", @@ -1529,7 +1551,7 @@ "splitVertical": "Vertikaal verdeel", "closePanel": "Maak paneel toe", "reconnect": "Herkoppel", - "sessionEnded": "Sessie geëindig", + "sessionEnded": "Session ended.", "connectionLost": "Connection lost", "error": "FOUT: {{message}}", "disconnected": "Ontkoppel", @@ -1933,22 +1955,10 @@ "ascending": "Stygend", "descending": "Dalend" }, - "tunnel": { - "log": { - "connecting": "Vestig tans tonnelverbinding...", - "sourceConnecting": "Verbind met brongasheer {{host}}...", - "sourceConnected": "Gekoppel aan brongasheer", - "endpointResolving": "Los eindpuntgasheer {{host}}op ...", - "endpointResolved": "Eindpuntgasheer opgelos", - "forwarding": "Stel poortaanstuuring op {{localPort}} → {{remotePort}}...", - "connected": "Tonnel suksesvol gebou", - "retrying": "Verbinding het misluk, probeer weer oor {{countdown}}s (poging {{attempt}}/{{max}})...", - "retryExhausted": "Maksimum herprobeerpogings bereik", - "error": "Tonnelverbinding het misluk: {{error}}" - } - }, "tunnels": { "title": "SSH-tonnels", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "Geen SSH-tonnels nie", "createFirstTunnelMessage": "Jy het nog geen SSH-tonnels geskep nie. Konfigureer tonnelverbindings in die Gasheerbestuurder om te begin.", "connected": "Verbonde", @@ -1969,27 +1979,100 @@ "disconnect": "Ontkoppel", "cancel": "Kanselleer", "port": "Hawe", + "localPort": "Plaaslike Hawe", + "remotePort": "Afstandpoort", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "Poging {{current}} van {{max}}", "nextRetryIn": "Volgende herprobeer oor {{seconds}} sekondes", "checkDockerLogs": "Gaan jou Docker-logboeke na vir die foutrede, sluit aan by die", "orCreate": "of skep 'n ", "noTunnelConnections": "Geen tonnelverbindings gekonfigureer nie", "tunnelConnections": "Tonnelverbindings", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "Voeg tonnel by", "editTunnel": "Wysig Tonnel", "deleteTunnel": "Vee Tonnel uit", "tunnelName": "Tonnelnaam", - "localPort": "Plaaslike Hawe", "remoteHost": "Afstandgasheer", - "remotePort": "Afstandpoort", "autoStart": "Outomatiese Begin", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "Status", "active": "Aktief", "inactive": "Onaktief", "start": "Begin", "stop": "Stop", + "test": "Test", "restart": "Herbegin", "connectionType": "Verbindingstipe", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "Plaaslik", "remote": "Afstandsbediening", "dynamic": "Dinamiese", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Verskaf asseblief u SSH-besonderhede om aan hierdie bediener te koppel.", "sshPasswordDescription": "Voer die wagwoord vir hierdie SSH-verbinding in.", "sshKeyPasswordDescription": "As jou SSH-sleutel geïnkripteer is, voer die wagwoordfrase hier in.", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "Stap 1: Skandeer die QR-kode met jou verifikasie-app", "manualEntryCode": "Handmatige Invoerkode", "cannotScanQRText": "As jy nie die QR-kode kan skandeer nie, voer hierdie kode handmatig in jou verifikasie-app in.", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Kon nie wagwoordterugstelling voltooi nie", "invalidTotpCode": "Ongeldige TOTP-kode", "failedOidcLogin": "Kon nie OIDC-aanmelding begin nie", - "failedUserInfo": "Kon nie gebruikersinligting kry na OIDC-aanmelding nie", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "OIDC-verifikasie het misluk", "noTokenReceived": "Geen teken ontvang van aanmelding nie", "invalidAuthUrl": "Ongeldige magtigings-URL ontvang van backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Wys etikette onder elke gasheer in die sybalk. Deaktiveer om alle etikette te versteek.", "account": "Rekening", "appearance": "Voorkoms", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "Taal en lokalisering", "fileManagerSettings": "Lêerbestuurder", "terminalSettings": "Terminaal", @@ -2370,6 +2472,10 @@ "description": "SSH-bewysbeskrywing", "searchCredentials": "Soek geloofsbriewe volgens naam, gebruikersnaam of etikette...", "sshConfig": "eindpunt ssh-konfigurasie", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/tuis", "clientId": "jou-kliënt-ID", "clientSecret": "jou-kliënt-geheim", @@ -2549,6 +2655,7 @@ "version": "Weergawe", "upToDate": "Op datum", "updateAvailable": "Opdatering beskikbaar", + "beta": "Beta", "uptime": "Optyd", "database": "Databasis", "healthy": "Gesond", @@ -2955,6 +3062,20 @@ "error": "Metrieke-insameling het misluk: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Vestig tans tonnelverbinding...", + "sourceConnecting": "Verbind met brongasheer {{host}}...", + "sourceConnected": "Gekoppel aan brongasheer", + "endpointResolving": "Los eindpuntgasheer {{host}}op ...", + "endpointResolved": "Eindpuntgasheer opgelos", + "forwarding": "Stel poortaanstuuring op {{localPort}} → {{remotePort}}...", + "connected": "Tonnel suksesvol gebou", + "retrying": "Verbinding het misluk, probeer weer oor {{countdown}}s (poging {{attempt}}/{{max}})...", + "retryExhausted": "Maksimum herprobeerpogings bereik", + "error": "Tonnelverbinding het misluk: {{error}}" + } + }, "sftp": { "log": { "connecting": "Verbind met SFTP-bediener...", diff --git a/src/locales/translated/ar_SA.json b/src/locales/translated/ar_SA.json index b12c3722..0b3015d7 100644 --- a/src/locales/translated/ar_SA.json +++ b/src/locales/translated/ar_SA.json @@ -402,6 +402,8 @@ "currentVersion": "أنت تقوم بتشغيل الإصدار {{version}}", "updateAvailable": "تحديث متوفر", "newVersionAvailable": "يتوفر إصدار جديد! أنت تقوم بتشغيل {{current}}، ولكن {{latest}} متاح.", + "betaVersion": "نسخة بيتا", + "betaVersionDesc": "أنت تقوم بتشغيل {{current}}، وهو أحدث من أحدث إصدار مستقر {{latest}}.", "releasedOn": "صدر على {{date}}", "downloadUpdate": "تنزيل التحديث", "dismiss": "تجاهل", @@ -426,6 +428,8 @@ "warning": "تحذير", "info": "معلومات", "success": "نجاح", + "unsavedChanges": "التغييرات غير المحفوظة", + "dismiss": "تجاهل", "loading": "تحميل...", "required": "مطلوب", "optional": "اختياري", @@ -471,6 +475,7 @@ "chinese": "الصينية", "german": "الألمانية", "cancel": "إلغاء", + "done": "تم", "username": "اسم المستخدم", "name": "الاسم", "login": "تسجيل الدخول", @@ -486,6 +491,7 @@ "save": "حفظ", "saving": "حفظ...", "delete": "حذف", + "rename": "إعادة تسمية", "edit": "تحرير", "add": "إضافة", "search": "البحث", @@ -559,7 +565,8 @@ "passwordCopied": "تم نسخ كلمة المرور إلى الحافظة", "sudoPasswordCopied": "تم نسخ كلمة المرور إلى الحافظة", "noPasswordAvailable": "لا توجد كلمة مرور متاحة", - "failedToCopyPassword": "فشل في نسخ كلمة المرور" + "failedToCopyPassword": "فشل في نسخ كلمة المرور", + "openFileManager": "فتح مدير الملفات" }, "admin": { "title": "إعدادات المدير", @@ -868,7 +875,42 @@ "passwordMinLength": "يجب أن تتكون كلمة المرور من 6 أحرف على الأقل", "currentRoles": "الأدوار الحالية", "noRolesAssigned": "لا توجد أدوار مسندة", - "assignNewRole": "تعيين دور جديد" + "assignNewRole": "تعيين دور جديد", + "apiKeys": { + "tabLabel": "مفاتيح API", + "title": "مفاتيح API", + "createApiKey": "إنشاء مفتاح API", + "createApiKeyDescription": "إنشاء مفتاح API جديد تم نطاقه لمستخدم محدد. الرمز المميز يظهر لمرة واحدة فقط.", + "keyCreated": "تم إنشاء مفتاح API", + "keyCreatedDescription": "انسخ هذا المفتاح الآن - لن يظهر مرة أخرى.", + "keyName": "اسم المفتاح", + "keyNamePlaceholder": "مثال: CI/CD Pipeline", + "scopedUser": "المستخدم المستعرض", + "selectUser": "اختر مستخدم...", + "searchUsers": "البحث عن المستخدمين...", + "noUsersFound": "لم يتم العثور على مستخدمين.", + "expiresAt": "تنتهي في", + "optional": "اختياري", + "expiresAtHelp": "اتركه فارغاً لمفتاح لا تنتهي صلاحيته أبداً.", + "copyWarningTitle": "حفظ مفتاح API الخاص بك", + "copyWarningDescription": "سيتم عرض هذا المفتاح مرة واحدة فقط. قم بتخزينه في مكان آمن.", + "apiKey": "مفتاح API", + "tokenCopied": "تم نسخ الرمز المميز إلى الحافظة", + "creating": "إنشاء...", + "nameRequired": "اسم المفتاح مطلوب", + "userRequired": "الرجاء تحديد مستخدم", + "failedToCreate": "فشل إنشاء مفتاح API", + "noKeys": "لم يتم العثور على مفاتيح API.", + "name": "الاسم", + "prefix": "بادئة", + "lastUsed": "آخر استخدام", + "never": "لا", + "revokeKey": "إلغاء المفتاح", + "confirmRevoke": "هل أنت متأكد من أنك تريد إلغاء مفتاح API \"{{name}}\"؟ هذا لا يمكن التراجع عنه.", + "revokedSuccessfully": "تم إلغاء مفتاح API بنجاح", + "failedToRevoke": "فشل في إلغاء مفتاح API", + "failedToFetch": "فشل في جلب مفاتيح API" + } }, "hosts": { "title": "مدير المضيف", @@ -962,28 +1004,8 @@ "enableDocker": "تمكين Docker", "defaultPath": "المسار الافتراضي", "defaultPathDesc": "الدليل الافتراضي عند فتح مدير الملفات لهذا المضيف", - "tunnelConnections": "اتصالات النفق", "connection": "اتصال", "remove": "إزالة", - "sourcePort": "منفذ المصدر", - "sourcePortDesc": " (المصدر يشير إلى تفاصيل الاتصال الحالية في علامة التبويب العام)", - "endpointPort": "منفذ نقطة النهاية", - "endpointSshConfig": "تكوين SSH نقطة النهاية", - "tunnelForwardDescription": "سيؤدي هذا النفق إلى نقل حركة المرور من المنفذ {{sourcePort}} على جهاز المصدر (تفاصيل الاتصال الحالي في التبويب العام) إلى المنفذ {{endpointPort}} على جهاز نقطة النهاية.", - "maxRetries": "الحد الاقصى لمحاولات", - "maxRetriesDescription": "الحد الأقصى لعدد محاولات إعادة المحاولة للاتصال بالأنفاق.", - "retryInterval": "الفاصل الزمني لإعادة المحاولة (بالثواني)", - "retryIntervalDescription": "حان وقت الانتظار بين محاولات إعادة المحاولة.", - "autoStartContainer": "بدء التشغيل التلقائي عند تشغيل الحاوية", - "autoStartDesc": "تشغيل هذا النفق تلقائياً عند تشغيل الحاوية", - "addConnection": "إضافة اتصال نفق", - "tunnelType": "نوع النفق", - "tunnelTypeLocal": "محلي (-L)", - "tunnelTypeRemote": "عن بعد (-R)", - "tunnelTypeLocalDesc": "إعادة توجيه المنفذ المحلي إلى نقطة النهاية البعيدة", - "tunnelTypeRemoteDesc": "إعادة توجيه المنفذ البعيد إلى الجهاز المحلي", - "tunnelForwardDescriptionLocal": "سيؤدي هذا النفق إلى نقل الحركة من المنفذ المحلي {{sourcePort}} إلى المنفذ {{endpointPort}} على آلة نقطة النهاية.", - "tunnelForwardDescriptionRemote": "سيؤدي هذا النفق إلى نقل حركة المرور من المنفذ {{sourcePort}} على جهاز المصدر (تفاصيل الاتصال الحالي في التبويب العام) إلى المنفذ {{endpointPort}} على جهاز نقطة النهاية.", "sshpassRequired": "تجاوز مطلوب للمصادقة على كلمة المرور", "sshpassRequiredDesc": "للمصادقة بكلمة المرور في الأنفاق، يجب تثبيت Sshpassعلى النظام.", "otherInstallMethods": "طرق تثبيت أخرى:", @@ -1529,7 +1551,7 @@ "splitVertical": "تقسيم عمودي", "closePanel": "أغلق اللوحة", "reconnect": "إعادة الاتصال", - "sessionEnded": "انتهت الجلسة", + "sessionEnded": "انتهت الجلسة.", "connectionLost": "تم فقدان الاتصال", "error": "خطأ: {{message}}", "disconnected": "قطع", @@ -1933,22 +1955,10 @@ "ascending": "تصاعدي", "descending": "تنازلي" }, - "tunnel": { - "log": { - "connecting": "إنشاء اتصال بالنفق...", - "sourceConnecting": "جاري الاتصال بمضيف المصدر {{host}}...", - "sourceConnected": "متصل بالمستضيف المصدر", - "endpointResolving": "حل مضيف نقطة النهاية {{host}}...", - "endpointResolved": "تم حل مضيف نقطة النهاية", - "forwarding": "إعداد إعادة توجيه المنفذ {{localPort}} → {{remotePort}}...", - "connected": "تم إنشاء النفق بنجاح", - "retrying": "فشل الاتصال، إعادة المحاولة في {{countdown}}s (محاولة {{attempt}}/{{max}})...", - "retryExhausted": "وصلت محاولات إعادة المحاولة القصوى", - "error": "فشل الاتصال بالنفق: {{error}}" - } - }, "tunnels": { "title": "أنفاق SSH", + "noTunnelsConfigured": "لم يتم تكوين الأنفاق", + "configureTunnelsInHostSettings": "تكوين اتصالات الأنفاق في مدير المضيف للبدء", "noSshTunnels": "لا توجد أنفاق SSH", "createFirstTunnelMessage": "لم تقم بإنشاء أي أنفاق SSH حتى الآن. تكوين اتصالات الأنفاق في مدير المضيف للبدء.", "connected": "متصل", @@ -1969,27 +1979,100 @@ "disconnect": "قطع الاتصال", "cancel": "إلغاء", "port": "المنفذ", + "localPort": "المنفذ المحلي", + "remotePort": "المنفذ البعيد", + "currentHostPort": "منفذ المضيف الحالي", + "endpointPort": "منفذ نقطة النهاية", + "bindIp": "IP المحلي", + "currentHostIp": "المستضيف الحالي IP", + "endpointSshConfig": "تكوين SSH نقطة النهاية", + "endpointSshConfigRequired": "تكوين نقطة النهاية SSH مطلوب", + "endpointSshHost": "مضيف SSH نقطة النهاية", + "endpointSshHostPlaceholder": "حدد مضيف مكون", + "endpointSshHostRequired": "حدد مضيف SSH لنقطة النهاية لكل نفق عميل.", "attempt": "محاولة {{current}} من {{max}}", "nextRetryIn": "إعادة المحاولة التالية في {{seconds}} ثانية", "checkDockerLogs": "تحقق من سجلات Docker لسبب الخطأ، انضم إلى", "orCreate": "أو إنشاء ", "noTunnelConnections": "لا توجد اتصالات نفق تم تكوينها", "tunnelConnections": "اتصالات النفق", + "serverTunnels": "أنفاق الخادم", + "serverTunnelsDesc": "الأنفاق المدارة الخلفية المخزنة مع هذا المضيف.", + "clientTunnels": "أنفاق العميل", + "clientTunnelsUnavailable": "تتطلب أنفاق العميل عميل سطح المكتب.", + "serverTunnel": "نفق الخادم", + "clientTunnel": "نفق العميل", + "addServerTunnel": "إضافة نفق خادم", + "addClientTunnel": "إضافة نفق للعميل", + "noServerTunnels": "لم يتم تكوين أنفاق الخادم.", + "noClientTunnels": "لم يتم تكوين أنفاق العميل على هذا المكتب.", + "manageClientTunnels": "إدارة أنفاق العميل", "addTunnel": "إضافة نفق", "editTunnel": "تعديل النفق", "deleteTunnel": "حذف النفق", "tunnelName": "اسم النفق", - "localPort": "المنفذ المحلي", "remoteHost": "المضيف البعيد", - "remotePort": "المنفذ البعيد", "autoStart": "بدء التشغيل التلقائي", + "autoStartContainer": "بدء التشغيل التلقائي عند التشغيل", + "autoStartContainerDesc": "تشغيل هذا النفق تلقائياً عند تشغيل خادم Termix الخاص بك.", + "autoStartEnableFailed": "تم حفظ المضيف، ولكن فشل في بدء الأنفاق تلقائياً ل {{name}}.", + "clientAutoStartDesc": "يبدأ عندما يفتح عميل سطح المكتب هذا ويبقى متصلا.", + "clientManualStartDesc": "استخدام البدء ووقف من هذا الصف. لا تفتحه Terمزيكس تلقائياً.", + "clientRemoteServerNote": "قد تتطلب إعادة التوجيه عن بعد AllowTcpForarding و بوابة المنافذ على خادم SSH نقطة النهائية. المنفذ البعيد يغلق عند قطع اتصال سطح المكتب.", + "clientTunnelStarted": "بدأ نفق العميل", + "clientTunnelStopped": "توقف نفق العميل", + "tunnelTestSucceeded": "نجاح اختبار النفق", + "tunnelTestFailed": "فشل اختبار النفق", + "localSaved": "أنفاق العميل المحفوظة", + "localSaveError": "فشل في حفظ أنفاق العميل المحلي", + "invalidBindIp": "يجب أن يكون IP المحلي عنوان IPv4 صالح.", + "invalidLocalTargetIp": "يجب أن يكون عنوان IP المستهدف المحلي عنوان IPv4 صالح.", + "invalidCurrentHostIp": "يجب أن يكون عنوان IP المضيف الحالي عنوان IPv4 صالح.", + "invalidLocalPort": "يجب أن يكون المنفذ المحلي بين 1 و 65535.", + "invalidRemotePort": "يجب أن يكون المنفذ البعيد بين 1 و 65535.", + "invalidLocalTargetPort": "يجب أن يكون المنفذ المستهدف المحلي بين 1 و 65535.", + "invalidEndpointPort": "منفذ نقطة النهاية يجب أن يكون بين 1 و 65535.", + "duplicateAutoStartBind": "يمكن استخدام نفق عميل واحد لبدء التشغيل التلقائي فقط {{bind}}.", + "manualControlError": "فشل تحديث حالة النفق.", + "saveHostBeforeManualControl": "حفظ هذا المضيف قبل بدء أو إيقاف أنفاق الخادم.", "status": "الحالة", "active": "نشط", "inactive": "غير نشط", "start": "ابدأ", "stop": "توقف", + "test": "اختبار", "restart": "إعادة التشغيل", "connectionType": "نوع الاتصال", + "type": "نوع النفق", + "typeLocal": "محلي (-L)", + "typeRemote": "عن بعد (-R)", + "typeDynamic": "ديناميكية (-D)", + "typeServerLocalDesc": "المضيف الحالي إلى نقطة النهاية.", + "typeServerRemoteDesc": "نقطة العودة إلى المضيف الحالي.", + "typeClientLocalDesc": "كمبيوتر محلي لنهاية النقاش.", + "typeClientRemoteDesc": "نهاية العودة إلى الكمبيوتر المحلي.", + "typeClientDynamicDesc": "SOCKS على الكمبيوتر المحلي.", + "typeDynamicDesc": "إعادة توجيه حركة الاتصال SOCKS5 عبر SSH", + "forwardDescriptionServerLocal": "المضيف الحالي {{sourcePort}} → نقطة النهاية {{endpointPort}}.", + "forwardDescriptionServerRemote": "نقطة النهاية {{endpointPort}} → المضيف الحالي {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS على المضيف الحالي {{sourcePort}}.", + "forwardDescriptionClientLocal": "محلي {{sourcePort}} → {{endpointPort}} البعيد.", + "forwardDescriptionClientRemote": "عن بعد {{sourcePort}} → المحلي {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS على المنفذ المحلي {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "محلي {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → المحلي {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} عبر {{endpoint}}", + "route": "المسار:", + "lastStarted": "بدأت آخر مرة", + "lastTested": "اختبارها الأخير", + "lastError": "آخر خطأ", + "maxRetries": "الحد الاقصى لمحاولات", + "maxRetriesDescription": "الحد الأقصى لمحاولات إعادة المحاولة.", + "retryInterval": "الفاصل الزمني لإعادة المحاولة (بالثواني)", + "retryIntervalDescription": "حان وقت الانتظار بين محاولات إعادة المحاولة.", "local": "محلي", "remote": "عن بعد", "dynamic": "ديناميكية", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "الرجاء تقديم بيانات اعتماد SSH الخاصة بك للاتصال بهذا الخادم.", "sshPasswordDescription": "أدخل كلمة المرور لهذا الاتصال SSH.", "sshKeyPasswordDescription": "إذا تم تشفير مفتاح SSH الخاص بك، أدخل كلمة المرور هنا.", + "passphraseRequired": "كلمة المرور مطلوبة", + "passphraseRequiredDescription": "مفتاح SSH مشفر. الرجاء إدخال عبارة المرور لفتحها.", "step1ScanQR": "الخطوة 1: مسح رمز QR باستخدام تطبيق المصادقة الخاص بك", "manualEntryCode": "رمز الإدخال اليدوي", "cannotScanQRText": "إذا لم تتمكن من مسح رمز QR ، أدخل هذا الرمز يدوياً في تطبيق المصادقة الخاص بك", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "فشل في إكمال إعادة تعيين كلمة المرور", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "فشل في بدء تسجيل الدخول OIDC", - "failedUserInfo": "فشل الحصول على معلومات المستخدم بعد تسجيل الدخول OIDC", + "failedUserInfo": "فشل الحصول على معلومات المستخدم بعد تسجيل الدخول", "oidcAuthFailed": "فشل مصادقة OIDC", "noTokenReceived": "لم يتم استلام رمز من تسجيل الدخول", "invalidAuthUrl": "رابط تفويض غير صالح مستلم من الخلفية", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "عرض العلامات تحت كل مضيف في الشريط الجانبي. تعطيل لإخفاء جميع العلامات.", "account": "حساب", "appearance": "المظهر", + "c2sTunnelConfigDesc": "أنفاق سطح المكتب المحلية التي تستهدف مضيفي SSH.", + "c2sTunnelPresets": "الإعدادات المسبقة للنفق للعميل", + "c2sTunnelPresetsDesc": "حفظ قائمة النفق المحلية لهذا العميل سطح المكتب كخادم مسبقا، أو تحميل الإعداد المسبق لهذا العميل مرة أخرى.", + "c2sTunnelPresetsUnavailable": "تتوفر الإعدادات المسبقة لنفق العميل فقط في عميل سطح المكتب.", + "c2sPresetName": "اسم الإعداد المسبق", + "c2sPresetNamePlaceholder": "اسم العميل المسبق", + "c2sPresetToLoad": "الإعداد المسبق للتحميل", + "c2sNoPresetSelected": "لم يتم تحديد الإعداد المسبق", + "c2sNoPresets": "لم يتم حفظ أي إعدادات مسبقة", + "c2sLoadPreset": "تحميل", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "الإعداد المسبق عبارة عن لقطات واضحة؛ تحميل واحد يحل محل قائمة نفق عميل سطح المكتب هذه.", + "c2sPresetSaved": "تم حفظ الإعداد المسبق لنفق العميل", + "c2sPresetLoaded": "تم تحميل نفق العميل مسبقاً محلياً", + "c2sPresetRenamed": "تم إعادة تسمية نفق العميل مسبقاً", + "c2sPresetDeleted": "تم حذف الضبط المسبق لنفق العميل", + "c2sPresetLoadError": "فشل تحميل الإعدادات المسبقة لنفق العميل", "languageLocalization": "اللغة والتعريب", "fileManagerSettings": "مدير الملفات", "terminalSettings": "المحطة", @@ -2370,6 +2472,10 @@ "description": "وصف اعتماد SSH", "searchCredentials": "البحث عن بيانات الاعتماد حسب الاسم أو اسم المستخدم أو العلامات...", "sshConfig": "تكوين ssh نقطة النهاية", + "bindLocalhost": "127.0.0.1 (ربط بالمضيف المحلي)", + "localListenerHost": "127.0.0.1 (الاستماع محليا)", + "localTargetHost": "127-0.0.1 (الهدف على هذا الحاسوب)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/ منزل", "clientId": "معرف عميلك-العميل", "clientSecret": "سر-عملاءك", @@ -2549,6 +2655,7 @@ "version": "الإصدار", "upToDate": "حتى التاريخ", "updateAvailable": "تحديث متوفر", + "beta": "بيتا", "uptime": "وقت التحديث", "database": "قاعدة البيانات", "healthy": "صحي", @@ -2955,6 +3062,20 @@ "error": "فشلت مجموعة المقاييس: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "إنشاء اتصال بالنفق...", + "sourceConnecting": "جاري الاتصال بمضيف المصدر {{host}}...", + "sourceConnected": "متصل بالمستضيف المصدر", + "endpointResolving": "حل مضيف نقطة النهاية {{host}}...", + "endpointResolved": "تم حل مضيف نقطة النهاية", + "forwarding": "إعداد إعادة توجيه المنفذ {{localPort}} → {{remotePort}}...", + "connected": "تم إنشاء النفق بنجاح", + "retrying": "فشل الاتصال، إعادة المحاولة في {{countdown}}s (محاولة {{attempt}}/{{max}})...", + "retryExhausted": "وصلت محاولات إعادة المحاولة القصوى", + "error": "فشل الاتصال بالنفق: {{error}}" + } + }, "sftp": { "log": { "connecting": "جاري الاتصال بخادم SFTP...", diff --git a/src/locales/translated/bg_BG.json b/src/locales/translated/bg_BG.json index 6e67c72b..7c7b3b6e 100644 --- a/src/locales/translated/bg_BG.json +++ b/src/locales/translated/bg_BG.json @@ -402,6 +402,8 @@ "currentVersion": "Използвате версия {{version}}", "updateAvailable": "Налична е актуализация", "newVersionAvailable": "Налична е нова версия! Използвате {{current}}, но {{latest}} е наличен.", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "Публикувано на {{date}}", "downloadUpdate": "Изтегляне на актуализация", "dismiss": "Отхвърляне", @@ -426,6 +428,8 @@ "warning": "Предупреждение", "info": "Информация", "success": "Успех", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "Зареждане...", "required": "Задължително", "optional": "По избор", @@ -471,6 +475,7 @@ "chinese": "китайски", "german": "Немски", "cancel": "Отказ", + "done": "Done", "username": "Потребителско име", "name": "Име", "login": "Вход", @@ -486,6 +491,7 @@ "save": "Запазване", "saving": "Запазване...", "delete": "Изтриване", + "rename": "Rename", "edit": "Редактиране", "add": "Добавяне", "search": "Търсене", @@ -559,7 +565,8 @@ "passwordCopied": "Паролата е копирана в клипборда", "sudoPasswordCopied": "Паролата за Sudo е копирана в клипборда", "noPasswordAvailable": "Няма налична парола", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Failed to copy password", + "openFileManager": "Open File Manager" }, "admin": { "title": "Административни настройки", @@ -868,7 +875,42 @@ "passwordMinLength": "Паролата трябва да е поне 6 знака", "currentRoles": "Текущи роли", "noRolesAssigned": "Няма зададени роли", - "assignNewRole": "Присвояване на нова роля" + "assignNewRole": "Присвояване на нова роля", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "Мениджър на домакини", @@ -962,28 +1004,8 @@ "enableDocker": "Активиране на Докер", "defaultPath": "Път по подразбиране", "defaultPathDesc": "Директория по подразбиране при отваряне на файловия мениджър за този хост", - "tunnelConnections": "Тунелни връзки", "connection": "Връзка", "remove": "Премахване", - "sourcePort": "Източник Порт", - "sourcePortDesc": " (Източникът се отнася до „Текущи данни за връзката“ в раздела „Общи“)", - "endpointPort": "Порт за крайна точка", - "endpointSshConfig": "SSH конфигурация на крайна точка", - "tunnelForwardDescription": "Този тунел ще пренасочва трафика от порт {{sourcePort}} на изходната машина (текущи подробности за връзката в раздела „Общи“) към порт {{endpointPort}} на крайната машина.", - "maxRetries": "Максимален брой повторни опити", - "maxRetriesDescription": "Максимален брой повторни опити за тунелна връзка.", - "retryInterval": "Интервал на повторен опит (секунди)", - "retryIntervalDescription": "Време за изчакване между опитите за повторен опит.", - "autoStartContainer": "Автоматично стартиране при стартиране на контейнер", - "autoStartDesc": "Автоматично стартиране на този тунел при стартиране на контейнера", - "addConnection": "Добавяне на тунелна връзка", - "tunnelType": "Тип тунел", - "tunnelTypeLocal": "Местен (-L)", - "tunnelTypeRemote": "Дистанционно (-R)", - "tunnelTypeLocalDesc": "Пренасочване на локален порт към отдалечена крайна точка", - "tunnelTypeRemoteDesc": "Пренасочване на отдалечен порт към локална машина", - "tunnelForwardDescriptionLocal": "Този тунел ще пренасочва трафика от локалния порт {{sourcePort}} към порт {{endpointPort}} на крайната машина.", - "tunnelForwardDescriptionRemote": "Този тунел ще пренасочва трафика от порт {{sourcePort}} на машината източник (текущи подробности за връзката в раздела „Общи“) към порт {{endpointPort}} на машината източник.", "sshpassRequired": "Sshpass е необходим за удостоверяване с парола", "sshpassRequiredDesc": "За удостоверяване с парола в тунели, sshpass трябва да бъде инсталиран на системата.", "otherInstallMethods": "Други методи за монтаж:", @@ -1529,7 +1551,7 @@ "splitVertical": "Разделяне по вертикала", "closePanel": "Затвори панела", "reconnect": "Свържете се отново", - "sessionEnded": "Сесията приключи", + "sessionEnded": "Session ended.", "connectionLost": "Connection lost", "error": "ГРЕШКА: {{message}}", "disconnected": "Изключен", @@ -1933,22 +1955,10 @@ "ascending": "Възходящ", "descending": "Низходящо" }, - "tunnel": { - "log": { - "connecting": "Установяване на тунелна връзка...", - "sourceConnecting": "Свързване с изходния хост {{host}}...", - "sourceConnected": "Свързан с изходния хост", - "endpointResolving": "Разрешаване на хост на крайна точка {{host}}...", - "endpointResolved": "Хостът на крайната точка е разрешен", - "forwarding": "Настройване на пренасочване на портове {{localPort}} → {{remotePort}}...", - "connected": "Тунелът е построен успешно", - "retrying": "Връзката не бе успешна, опитът ще бъде повторен след {{countdown}}сек (опит {{attempt}}/{{max}})...", - "retryExhausted": "Достигнат е максималният брой опити за повторен опит", - "error": "Тунелна връзка неуспешна: {{error}}" - } - }, "tunnels": { "title": "SSH тунели", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "Няма SSH тунели", "createFirstTunnelMessage": "Все още не сте създали SSH тунели. Конфигурирайте тунелни връзки в Host Manager, за да започнете.", "connected": "Свързан", @@ -1969,27 +1979,100 @@ "disconnect": "Изключване", "cancel": "Отказ", "port": "Порт", + "localPort": "Локален порт", + "remotePort": "Отдалечен порт", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "Опит {{current}} от {{max}}", "nextRetryIn": "Следващ опит след {{seconds}} секунди", "checkDockerLogs": "Проверете лог файловете на Docker за причината за грешката, присъединете се към", "orCreate": "или създайте ", "noTunnelConnections": "Няма конфигурирани тунелни връзки", "tunnelConnections": "Тунелни връзки", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "Добавяне на тунел", "editTunnel": "Редактиране на тунел", "deleteTunnel": "Изтриване на тунел", "tunnelName": "Име на тунела", - "localPort": "Локален порт", "remoteHost": "Отдалечен хост", - "remotePort": "Отдалечен порт", "autoStart": "Автоматично стартиране", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "Статус", "active": "Активен", "inactive": "Неактивен", "start": "Старт", "stop": "Спри", + "test": "Test", "restart": "Рестартиране", "connectionType": "Тип връзка", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "Местно", "remote": "Дистанционно", "dynamic": "Динамичен", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Моля, предоставете вашите SSH идентификационни данни, за да се свържете с този сървър.", "sshPasswordDescription": "Въведете паролата за тази SSH връзка.", "sshKeyPasswordDescription": "Ако вашият SSH ключ е криптиран, въведете паролата тук.", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "Стъпка 1: Сканирайте QR кода с приложението си за удостоверяване", "manualEntryCode": "Код за ръчно въвеждане", "cannotScanQRText": "Ако не можете да сканирате QR кода, въведете го ръчно в приложението си за удостоверяване", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Неуспешно завършване на нулирането на паролата", "invalidTotpCode": "Невалиден TOTP код", "failedOidcLogin": "Стартирането на входа в OIDC не бе успешно", - "failedUserInfo": "Неуспешно получаване на потребителска информация след влизане в OIDC", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "OIDC удостоверяването не беше успешно", "noTokenReceived": "Не е получен токен от вход", "invalidAuthUrl": "Невалиден URL адрес за оторизация, получен от бекенд системата", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Показване на етикети под всеки хост в страничната лента. Деактивирайте, за да скриете всички етикети.", "account": "Профил", "appearance": "Външен вид", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "Език и локализация", "fileManagerSettings": "Файлов мениджър", "terminalSettings": "Терминал", @@ -2370,6 +2472,10 @@ "description": "Описание на SSH идентификационните данни", "searchCredentials": "Търсене на идентификационни данни по име, потребителско име или тагове...", "sshConfig": "SSH конфигурация на крайната точка", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/начало", "clientId": "вашият клиентски идентификатор", "clientSecret": "вашата клиентска тайна", @@ -2549,6 +2655,7 @@ "version": "Версия", "upToDate": "Актуално", "updateAvailable": "Налична е актуализация", + "beta": "Beta", "uptime": "Време на работа", "database": "База данни", "healthy": "Здравословен", @@ -2955,6 +3062,20 @@ "error": "Събирането на показатели не бе успешно: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Установяване на тунелна връзка...", + "sourceConnecting": "Свързване с изходния хост {{host}}...", + "sourceConnected": "Свързан с изходния хост", + "endpointResolving": "Разрешаване на хост на крайна точка {{host}}...", + "endpointResolved": "Хостът на крайната точка е разрешен", + "forwarding": "Настройване на пренасочване на портове {{localPort}} → {{remotePort}}...", + "connected": "Тунелът е построен успешно", + "retrying": "Връзката не бе успешна, опитът ще бъде повторен след {{countdown}}сек (опит {{attempt}}/{{max}})...", + "retryExhausted": "Достигнат е максималният брой опити за повторен опит", + "error": "Тунелна връзка неуспешна: {{error}}" + } + }, "sftp": { "log": { "connecting": "Свързване със SFTP сървър...", diff --git a/src/locales/translated/bn_BD.json b/src/locales/translated/bn_BD.json index fc7b5386..609417be 100644 --- a/src/locales/translated/bn_BD.json +++ b/src/locales/translated/bn_BD.json @@ -402,6 +402,8 @@ "currentVersion": "তুমি {{version}}সংস্করণটি চালাচ্ছো", "updateAvailable": "আপডেট উপলব্ধ", "newVersionAvailable": "একটি নতুন সংস্করণ উপলব্ধ! আপনি {{current}}ব্যবহার করছেন, কিন্তু {{latest}} উপলব্ধ।", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "মুক্তিপ্রাপ্ত {{date}}", "downloadUpdate": "আপডেট ডাউনলোড করুন", "dismiss": "খারিজ করুন", @@ -426,6 +428,8 @@ "warning": "সতর্কতা", "info": "তথ্য", "success": "সাফল্য", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "লোড হচ্ছে...", "required": "প্রয়োজনীয়", "optional": "ঐচ্ছিক", @@ -471,6 +475,7 @@ "chinese": "চীনা", "german": "জার্মান", "cancel": "বাতিল করুন", + "done": "Done", "username": "ব্যবহারকারীর নাম", "name": "নাম", "login": "লগইন", @@ -486,6 +491,7 @@ "save": "সংরক্ষণ করুন", "saving": "সংরক্ষণ করা হচ্ছে...", "delete": "মুছে ফেলুন", + "rename": "Rename", "edit": "সম্পাদনা", "add": "যোগ করুন", "search": "অনুসন্ধান করুন", @@ -559,7 +565,8 @@ "passwordCopied": "পাসওয়ার্ড ক্লিপবোর্ডে কপি করা হয়েছে", "sudoPasswordCopied": "সুডো পাসওয়ার্ড ক্লিপবোর্ডে কপি করা হয়েছে", "noPasswordAvailable": "কোনও পাসওয়ার্ড নেই", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Failed to copy password", + "openFileManager": "Open File Manager" }, "admin": { "title": "অ্যাডমিন সেটিংস", @@ -868,7 +875,42 @@ "passwordMinLength": "পাসওয়ার্ড কমপক্ষে ৬ অক্ষরের হতে হবে", "currentRoles": "বর্তমান ভূমিকা", "noRolesAssigned": "কোনও ভূমিকা বরাদ্দ করা হয়নি", - "assignNewRole": "নতুন ভূমিকা বরাদ্দ করুন" + "assignNewRole": "নতুন ভূমিকা বরাদ্দ করুন", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "হোস্ট ম্যানেজার", @@ -962,28 +1004,8 @@ "enableDocker": "ডকার সক্ষম করুন", "defaultPath": "ডিফল্ট পথ", "defaultPathDesc": "এই হোস্টের জন্য ফাইল ম্যানেজার খোলার সময় ডিফল্ট ডিরেক্টরি", - "tunnelConnections": "টানেল সংযোগ", "connection": "সংযোগ", "remove": "অপসারণ", - "sourcePort": "সোর্স পোর্ট", - "sourcePortDesc": " (উৎসটি সাধারণ ট্যাবে বর্তমান সংযোগের বিবরণ উল্লেখ করে)", - "endpointPort": "এন্ডপয়েন্ট পোর্ট", - "endpointSshConfig": "এন্ডপয়েন্ট SSH কনফিগারেশন", - "tunnelForwardDescription": "এই টানেলটি সোর্স মেশিনের {{sourcePort}} পোর্ট থেকে ট্র্যাফিককে এন্ডপয়েন্ট মেশিনের {{endpointPort}} পোর্টে ফরোয়ার্ড করবে।", - "maxRetries": "সর্বোচ্চ পুনঃপ্রচেষ্টা", - "maxRetriesDescription": "টানেল সংযোগের জন্য সর্বোচ্চ সংখ্যক পুনঃপ্রচেষ্টা।", - "retryInterval": "পুনরায় চেষ্টা করার ব্যবধান (সেকেন্ড)", - "retryIntervalDescription": "পুনরায় চেষ্টা করার মাঝে অপেক্ষা করার সময়।", - "autoStartContainer": "কন্টেইনার লঞ্চে স্বয়ংক্রিয়ভাবে শুরু", - "autoStartDesc": "কন্টেইনার চালু হলে এই টানেলটি স্বয়ংক্রিয়ভাবে চালু করুন", - "addConnection": "টানেল সংযোগ যোগ করুন", - "tunnelType": "টানেলের ধরণ", - "tunnelTypeLocal": "স্থানীয় (-L)", - "tunnelTypeRemote": "রিমোট (-R)", - "tunnelTypeLocalDesc": "স্থানীয় পোর্টকে দূরবর্তী এন্ডপয়েন্টে ফরোয়ার্ড করুন", - "tunnelTypeRemoteDesc": "রিমোট পোর্ট স্থানীয় মেশিনে ফরোয়ার্ড করুন", - "tunnelForwardDescriptionLocal": "এই টানেলটি স্থানীয় পোর্ট {{sourcePort}} থেকে এন্ডপয়েন্ট মেশিনে পোর্ট {{endpointPort}} এ ট্র্যাফিক ফরোয়ার্ড করবে।", - "tunnelForwardDescriptionRemote": "এই টানেলটি সোর্স মেশিনের {{sourcePort}} পোর্ট থেকে ট্র্যাফিককে এন্ডপয়েন্ট মেশিনের {{endpointPort}} পোর্টে ফরোয়ার্ড করবে।", "sshpassRequired": "পাসওয়ার্ড প্রমাণীকরণের জন্য Sshpass প্রয়োজন", "sshpassRequiredDesc": "টানেলগুলিতে পাসওয়ার্ড প্রমাণীকরণের জন্য, সিস্টেমে sshpass ইনস্টল করা আবশ্যক।", "otherInstallMethods": "অন্যান্য ইনস্টলেশন পদ্ধতি:", @@ -1529,7 +1551,7 @@ "splitVertical": "উল্লম্বভাবে বিভক্ত করুন", "closePanel": "প্যানেল বন্ধ করুন", "reconnect": "পুনঃসংযোগ করুন", - "sessionEnded": "অধিবেশন শেষ হয়েছে", + "sessionEnded": "Session ended.", "connectionLost": "Connection lost", "error": "ত্রুটি: {{message}}", "disconnected": "সংযোগ বিচ্ছিন্ন", @@ -1933,22 +1955,10 @@ "ascending": "আরোহী", "descending": "অবরোহী" }, - "tunnel": { - "log": { - "connecting": "টানেল সংযোগ স্থাপন করা হচ্ছে...", - "sourceConnecting": "সোর্স হোস্টের সাথে সংযোগ করা হচ্ছে {{host}}...", - "sourceConnected": "সোর্স হোস্টের সাথে সংযুক্ত", - "endpointResolving": "এন্ডপয়েন্ট হোস্ট সমাধান করা হচ্ছে {{host}}...", - "endpointResolved": "এন্ডপয়েন্ট হোস্ট সমাধান করা হয়েছে", - "forwarding": "পোর্ট ফরওয়ার্ডিং সেট আপ করা হচ্ছে {{localPort}} → {{remotePort}}...", - "connected": "টানেল সফলভাবে স্থাপিত হয়েছে", - "retrying": "সংযোগ ব্যর্থ হয়েছে, {{countdown}}s (চেষ্টা {{attempt}}/{{max}} ) এ আবার চেষ্টা করা হচ্ছে...", - "retryExhausted": "সর্বোচ্চ পুনঃচেষ্টার প্রচেষ্টায় পৌঁছেছেন", - "error": "টানেল সংযোগ ব্যর্থ হয়েছে: {{error}}" - } - }, "tunnels": { "title": "SSH টানেল", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "কোনও SSH টানেল নেই", "createFirstTunnelMessage": "আপনি এখনও কোনও SSH টানেল তৈরি করেননি। শুরু করতে হোস্ট ম্যানেজারে টানেল সংযোগগুলি কনফিগার করুন।", "connected": "সংযুক্ত", @@ -1969,27 +1979,100 @@ "disconnect": "সংযোগ বিচ্ছিন্ন করুন", "cancel": "বাতিল করুন", "port": "বন্দর", + "localPort": "স্থানীয় বন্দর", + "remotePort": "রিমোট পোর্ট", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "{{current}} এর {{max}}প্রচেষ্টা", "nextRetryIn": "পরবর্তী চেষ্টা {{seconds}} সেকেন্ডের মধ্যে", "checkDockerLogs": "ত্রুটির কারণের জন্য আপনার ডকার লগগুলি পরীক্ষা করুন, যোগদান করুন", "orCreate": "অথবা একটি তৈরি করুন ", "noTunnelConnections": "কোনও টানেল সংযোগ কনফিগার করা হয়নি", "tunnelConnections": "টানেল সংযোগ", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "টানেল যোগ করুন", "editTunnel": "টানেল সম্পাদনা করুন", "deleteTunnel": "টানেল মুছুন", "tunnelName": "টানেলের নাম", - "localPort": "স্থানীয় বন্দর", "remoteHost": "রিমোট হোস্ট", - "remotePort": "রিমোট পোর্ট", "autoStart": "স্বয়ংক্রিয় শুরু", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "অবস্থা", "active": "সক্রিয়", "inactive": "নিষ্ক্রিয়", "start": "শুরু করুন", "stop": "থামো", + "test": "Test", "restart": "পুনরারম্ভ করুন", "connectionType": "সংযোগের ধরণ", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "স্থানীয়", "remote": "দূরবর্তী", "dynamic": "গতিশীল", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "এই সার্ভারের সাথে সংযোগ স্থাপনের জন্য আপনার SSH শংসাপত্রগুলি প্রদান করুন।", "sshPasswordDescription": "এই SSH সংযোগের জন্য পাসওয়ার্ডটি লিখুন।", "sshKeyPasswordDescription": "যদি আপনার SSH কী এনক্রিপ্ট করা থাকে, তাহলে এখানে পাসফ্রেজটি লিখুন।", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "ধাপ ১: আপনার প্রমাণীকরণকারী অ্যাপ দিয়ে QR কোড স্ক্যান করুন", "manualEntryCode": "ম্যানুয়াল এন্ট্রি কোড", "cannotScanQRText": "যদি আপনি QR কোডটি স্ক্যান করতে না পারেন, তাহলে আপনার প্রমাণীকরণকারী অ্যাপে এই কোডটি ম্যানুয়ালি লিখুন।", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "পাসওয়ার্ড রিসেট সম্পূর্ণ করতে ব্যর্থ হয়েছে", "invalidTotpCode": "অবৈধ TOTP কোড", "failedOidcLogin": "OIDC লগইন শুরু করতে ব্যর্থ হয়েছে", - "failedUserInfo": "OIDC লগইন করার পরে ব্যবহারকারীর তথ্য পেতে ব্যর্থ হয়েছে।", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "OIDC প্রমাণীকরণ ব্যর্থ হয়েছে", "noTokenReceived": "লগইন থেকে কোনও টোকেন পাওয়া যায়নি", "invalidAuthUrl": "ব্যাকএন্ড থেকে অবৈধ অনুমোদনের URL পাওয়া গেছে", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "সাইডবারে প্রতিটি হোস্টের নিচে ট্যাগ প্রদর্শন করুন। সমস্ত ট্যাগ লুকানোর জন্য অক্ষম করুন।", "account": "হিসাব", "appearance": "চেহারা", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "ভাষা ও স্থানীয়করণ", "fileManagerSettings": "ফাইল ম্যানেজার", "terminalSettings": "টার্মিনাল", @@ -2370,6 +2472,10 @@ "description": "SSH শংসাপত্রের বর্ণনা", "searchCredentials": "নাম, ব্যবহারকারীর নাম, অথবা ট্যাগ দ্বারা শংসাপত্র অনুসন্ধান করুন...", "sshConfig": "এন্ডপয়েন্ট ssh কনফিগারেশন", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/বাড়ি", "clientId": "আপনার-ক্লায়েন্ট-আইডি", "clientSecret": "আপনার ক্লায়েন্টের গোপনীয়তা", @@ -2549,6 +2655,7 @@ "version": "সংস্করণ", "upToDate": "আপ টু ডেট", "updateAvailable": "আপডেট উপলব্ধ", + "beta": "Beta", "uptime": "আপটাইম", "database": "ডাটাবেস", "healthy": "সুস্থ", @@ -2955,6 +3062,20 @@ "error": "মেট্রিক্স সংগ্রহ ব্যর্থ হয়েছে: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "টানেল সংযোগ স্থাপন করা হচ্ছে...", + "sourceConnecting": "সোর্স হোস্টের সাথে সংযোগ করা হচ্ছে {{host}}...", + "sourceConnected": "সোর্স হোস্টের সাথে সংযুক্ত", + "endpointResolving": "এন্ডপয়েন্ট হোস্ট সমাধান করা হচ্ছে {{host}}...", + "endpointResolved": "এন্ডপয়েন্ট হোস্ট সমাধান করা হয়েছে", + "forwarding": "পোর্ট ফরওয়ার্ডিং সেট আপ করা হচ্ছে {{localPort}} → {{remotePort}}...", + "connected": "টানেল সফলভাবে স্থাপিত হয়েছে", + "retrying": "সংযোগ ব্যর্থ হয়েছে, {{countdown}}s (চেষ্টা {{attempt}}/{{max}} ) এ আবার চেষ্টা করা হচ্ছে...", + "retryExhausted": "সর্বোচ্চ পুনঃচেষ্টার প্রচেষ্টায় পৌঁছেছেন", + "error": "টানেল সংযোগ ব্যর্থ হয়েছে: {{error}}" + } + }, "sftp": { "log": { "connecting": "SFTP সার্ভারের সাথে সংযোগ করা হচ্ছে...", diff --git a/src/locales/translated/ca_ES.json b/src/locales/translated/ca_ES.json index de57fca1..3165362d 100644 --- a/src/locales/translated/ca_ES.json +++ b/src/locales/translated/ca_ES.json @@ -402,6 +402,8 @@ "currentVersion": "Esteu executant la versió {{version}}", "updateAvailable": "Actualització disponible", "newVersionAvailable": "Hi ha una nova versió disponible! Esteu executant {{current}}, però {{latest}} està disponible.", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "Publicat el {{date}}", "downloadUpdate": "Descarrega l'actualització", "dismiss": "Ignora", @@ -426,6 +428,8 @@ "warning": "Avís", "info": "Informació", "success": "Èxit", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "S'està carregant...", "required": "Obligatori", "optional": "Opcional", @@ -471,6 +475,7 @@ "chinese": "xinès", "german": "Alemany", "cancel": "Cancel·la", + "done": "Done", "username": "Nom d'usuari", "name": "Nom", "login": "Inicia la sessió", @@ -486,6 +491,7 @@ "save": "Desa", "saving": "Desant...", "delete": "Suprimeix", + "rename": "Rename", "edit": "Edita", "add": "Afegeix", "search": "Cerca", @@ -559,7 +565,8 @@ "passwordCopied": "La contrasenya s'ha copiat al porta-retalls", "sudoPasswordCopied": "Contrasenya de Sudo copiada al porta-retalls", "noPasswordAvailable": "No hi ha cap contrasenya disponible", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Failed to copy password", + "openFileManager": "Open File Manager" }, "admin": { "title": "Configuració de l'administrador", @@ -868,7 +875,42 @@ "passwordMinLength": "La contrasenya ha de tenir com a mínim 6 caràcters", "currentRoles": "Rols actuals", "noRolesAssigned": "Sense rols assignats", - "assignNewRole": "Assigna un nou rol" + "assignNewRole": "Assigna un nou rol", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "Gestor d'amfitrions", @@ -962,28 +1004,8 @@ "enableDocker": "Activa Docker", "defaultPath": "Camí predeterminat", "defaultPathDesc": "Directori per defecte en obrir el gestor de fitxers per a aquest amfitrió", - "tunnelConnections": "Connexions de túnels", "connection": "Connexió", "remove": "Elimina", - "sourcePort": "Port d'origen", - "sourcePortDesc": " (La font fa referència als detalls de la connexió actual a la pestanya General)", - "endpointPort": "Port de punt final", - "endpointSshConfig": "Configuració SSH del punt final", - "tunnelForwardDescription": "Aquest túnel redirigirà el trànsit des del port {{sourcePort}} de la màquina d'origen (detalls de la connexió actual a la pestanya general) fins al port {{endpointPort}} de la màquina final.", - "maxRetries": "Màxim d'intents", - "maxRetriesDescription": "Nombre màxim d'intents de reintent per a la connexió del túnel.", - "retryInterval": "Interval de reintent (segons)", - "retryIntervalDescription": "Temps d'espera entre intents de reintent.", - "autoStartContainer": "Inici automàtic en llançar contenidors", - "autoStartDesc": "Inicia automàticament aquest túnel quan s'iniciï el contenidor", - "addConnection": "Afegeix una connexió de túnel", - "tunnelType": "Tipus de túnel", - "tunnelTypeLocal": "Local (-L)", - "tunnelTypeRemote": "Comandament a distància (-R)", - "tunnelTypeLocalDesc": "Reenvia el port local a un punt final remot", - "tunnelTypeRemoteDesc": "Reenvia el port remot a la màquina local", - "tunnelForwardDescriptionLocal": "Aquest túnel redirigirà el trànsit del port local {{sourcePort}} al port {{endpointPort}} de la màquina terminal.", - "tunnelForwardDescriptionRemote": "Aquest túnel redirigirà el trànsit del port {{sourcePort}} de la màquina d'origen (detalls de la connexió actual a la pestanya general) al port {{endpointPort}} de la màquina final.", "sshpassRequired": "Sshpass necessari per a l'autenticació amb contrasenya", "sshpassRequiredDesc": "Per a l'autenticació amb contrasenya en túnels, cal instal·lar sshpass al sistema.", "otherInstallMethods": "Altres mètodes d'instal·lació:", @@ -1529,7 +1551,7 @@ "splitVertical": "Dividir verticalment", "closePanel": "Tanca el panell", "reconnect": "Reconnecta", - "sessionEnded": "Sessió finalitzada", + "sessionEnded": "Session ended.", "connectionLost": "Connection lost", "error": "ERROR: {{message}}", "disconnected": "Desconnectat", @@ -1933,22 +1955,10 @@ "ascending": "Ascendent", "descending": "Descendent" }, - "tunnel": { - "log": { - "connecting": "Establint la connexió del túnel...", - "sourceConnecting": "Connectant a l'amfitrió d'origen {{host}}...", - "sourceConnected": "Connectat a l'amfitrió d'origen", - "endpointResolving": "Resolució de l'amfitrió del punt final {{host}}...", - "endpointResolved": "Amfitrió del punt final resolt", - "forwarding": "Configuració del reenviament de ports {{localPort}} → {{remotePort}}...", - "connected": "Túnel establert amb èxit", - "retrying": "La connexió ha fallat, es tornarà a intentar en {{countdown}}s (intent {{attempt}}/{{max}})...", - "retryExhausted": "S'ha arribat al màxim d'intents de reintent", - "error": "La connexió del túnel ha fallat: {{error}}" - } - }, "tunnels": { "title": "Túnels SSH", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "Sense túnels SSH", "createFirstTunnelMessage": "Encara no has creat cap túnel SSH. Configureu les connexions del túnel al Gestor d'amfitrions per començar.", "connected": "Connectat", @@ -1969,27 +1979,100 @@ "disconnect": "Desconnecta", "cancel": "Cancel·la", "port": "Port", + "localPort": "Port local", + "remotePort": "Port remot", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "Intent {{current}} de {{max}}", "nextRetryIn": "Proper intent en {{seconds}} segons", "checkDockerLogs": "Reviseu els registres de Docker per saber el motiu de l'error i uniu-vos al", "orCreate": "o crear un ", "noTunnelConnections": "No hi ha connexions de túnel configurades", "tunnelConnections": "Connexions de túnels", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "Afegeix un túnel", "editTunnel": "Edita el túnel", "deleteTunnel": "Suprimeix el túnel", "tunnelName": "Nom del túnel", - "localPort": "Port local", "remoteHost": "Amfitrió remot", - "remotePort": "Port remot", "autoStart": "Inici automàtic", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "Estat", "active": "Actiu", "inactive": "Inactiu", "start": "Inici", "stop": "Atura", + "test": "Test", "restart": "Reinicia", "connectionType": "Tipus de connexió", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "Local", "remote": "Remot", "dynamic": "Dinàmic", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Si us plau, proporcioneu les vostres credencials SSH per connectar-vos a aquest servidor.", "sshPasswordDescription": "Introduïu la contrasenya per a aquesta connexió SSH.", "sshKeyPasswordDescription": "Si la clau SSH està xifrada, introduïu la contrasenya aquí.", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "Pas 1: escaneja el codi QR amb l'aplicació d'autenticació", "manualEntryCode": "Codi d'entrada manual", "cannotScanQRText": "Si no podeu escanejar el codi QR, introduïu-lo manualment a l'aplicació d'autenticació.", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "No s'ha pogut completar el restabliment de la contrasenya", "invalidTotpCode": "Codi TOTP no vàlid", "failedOidcLogin": "No s'ha pogut iniciar l'inici de sessió a l'OIDC.", - "failedUserInfo": "No s'ha pogut obtenir la informació de l'usuari després de l'inici de sessió a l'OIDC.", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "L'autenticació OIDC ha fallat", "noTokenReceived": "No s'ha rebut cap testimoni de l'inici de sessió", "invalidAuthUrl": "URL d'autorització no vàlida rebuda del backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Mostra les etiquetes sota cada amfitrió a la barra lateral. Desactiva-les per ocultar totes les etiquetes.", "account": "Compte", "appearance": "Aspecte", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "Idioma i localització", "fileManagerSettings": "Gestor de fitxers", "terminalSettings": "Terminal", @@ -2370,6 +2472,10 @@ "description": "Descripció de les credencials SSH", "searchCredentials": "Cerca credencials per nom, nom d'usuari o etiquetes...", "sshConfig": "configuració ssh del punt final", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/llar", "clientId": "el-teu-ID-de-client", "clientSecret": "el-secret-del-teu-client", @@ -2549,6 +2655,7 @@ "version": "Versió", "upToDate": "Actualitzat", "updateAvailable": "Actualització disponible", + "beta": "Beta", "uptime": "Temps de funcionament", "database": "Base de dades", "healthy": "Saludable", @@ -2955,6 +3062,20 @@ "error": "La recopilació de mètriques ha fallat: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Establint la connexió del túnel...", + "sourceConnecting": "Connectant a l'amfitrió d'origen {{host}}...", + "sourceConnected": "Connectat a l'amfitrió d'origen", + "endpointResolving": "Resolució de l'amfitrió del punt final {{host}}...", + "endpointResolved": "Amfitrió del punt final resolt", + "forwarding": "Configuració del reenviament de ports {{localPort}} → {{remotePort}}...", + "connected": "Túnel establert amb èxit", + "retrying": "La connexió ha fallat, es tornarà a intentar en {{countdown}}s (intent {{attempt}}/{{max}})...", + "retryExhausted": "S'ha arribat al màxim d'intents de reintent", + "error": "La connexió del túnel ha fallat: {{error}}" + } + }, "sftp": { "log": { "connecting": "Connectant al servidor SFTP...", diff --git a/src/locales/translated/cs_CZ.json b/src/locales/translated/cs_CZ.json index 491738fc..891379be 100644 --- a/src/locales/translated/cs_CZ.json +++ b/src/locales/translated/cs_CZ.json @@ -402,6 +402,8 @@ "currentVersion": "Používáte verzi {{version}}", "updateAvailable": "Dostupná aktualizace", "newVersionAvailable": "Je dostupná nová verze! Používáte {{current}}, ale {{latest}} je k dispozici.", + "betaVersion": "Beta verze", + "betaVersionDesc": "Používáte {{current}}, což je novější než poslední stabilní vydání {{latest}}.", "releasedOn": "Vydáno v {{date}}", "downloadUpdate": "Stáhnout aktualizaci", "dismiss": "Odmítnout", @@ -426,6 +428,8 @@ "warning": "Varování", "info": "Info", "success": "Úspěšně", + "unsavedChanges": "Neuložené změny", + "dismiss": "Odmítnout", "loading": "Načítám...", "required": "Požadováno", "optional": "Nepovinné", @@ -471,6 +475,7 @@ "chinese": "Čínština", "german": "Němčina", "cancel": "Zrušit", + "done": "Hotovo", "username": "Uživatelské jméno", "name": "Název", "login": "Přihlásit se", @@ -486,6 +491,7 @@ "save": "Uložit", "saving": "Ukládání...", "delete": "Vymazat", + "rename": "Přejmenovat", "edit": "Upravit", "add": "Přidat", "search": "Hledat", @@ -559,7 +565,8 @@ "passwordCopied": "Heslo zkopírováno do schránky", "sudoPasswordCopied": "Sudo heslo zkopírováno do schránky", "noPasswordAvailable": "Žádné heslo není k dispozici", - "failedToCopyPassword": "Kopírování hesla se nezdařilo" + "failedToCopyPassword": "Kopírování hesla se nezdařilo", + "openFileManager": "Otevřít správce souborů" }, "admin": { "title": "Nastavení správce", @@ -868,7 +875,42 @@ "passwordMinLength": "Heslo musí mít alespoň 6 znaků", "currentRoles": "Aktuální role", "noRolesAssigned": "Nebyly přiřazeny žádné role", - "assignNewRole": "Přiřadit novou roli" + "assignNewRole": "Přiřadit novou roli", + "apiKeys": { + "tabLabel": "API klíče", + "title": "API klíče", + "createApiKey": "Vytvořit klíč API", + "createApiKeyDescription": "Vytvoření nového API klíče pro konkrétního uživatele. Token se zobrazí pouze jednou.", + "keyCreated": "API klíč vytvořen", + "keyCreatedDescription": "Zkopírujte tento klíč nyní - nebude znovu zobrazen.", + "keyName": "Název klíče", + "keyNamePlaceholder": "např. CI/CD potrubí", + "scopedUser": "Šifrovaný uživatel", + "selectUser": "Vyberte uživatele...", + "searchUsers": "Hledat uživatele...", + "noUsersFound": "Nenalezeni žádní uživatelé.", + "expiresAt": "Vyprší v", + "optional": "volitelné", + "expiresAtHelp": "Ponechte prázdné pro klíč, který nikdy nevyprší.", + "copyWarningTitle": "Uložit váš API klíč", + "copyWarningDescription": "Tento klíč se zobrazí pouze jednou. Uložte jej na bezpečném místě.", + "apiKey": "API klíč", + "tokenCopied": "Token zkopírován do schránky", + "creating": "Vytváření...", + "nameRequired": "Je vyžadován název klíče", + "userRequired": "Vyberte uživatele", + "failedToCreate": "Nepodařilo se vytvořit API klíč", + "noKeys": "Nebyly nalezeny žádné klíče API.", + "name": "Název", + "prefix": "Předpona", + "lastUsed": "Naposledy použito", + "never": "Nikdy", + "revokeKey": "Zrušit klíč", + "confirmRevoke": "Opravdu chcete zrušit klíč API \"{{name}}\"? Tuto akci nelze vrátit zpět.", + "revokedSuccessfully": "API klíč byl úspěšně odebrán", + "failedToRevoke": "Nepodařilo se zrušit klíč API", + "failedToFetch": "Nepodařilo se načíst API klíče" + } }, "hosts": { "title": "Správce hostitelů", @@ -962,28 +1004,8 @@ "enableDocker": "Povolit Docker", "defaultPath": "Výchozí cesta", "defaultPathDesc": "Výchozí adresář při otevírání správce souborů pro tohoto hostitele", - "tunnelConnections": "Připojení tunelu", "connection": "Připojení", "remove": "Odebrat", - "sourcePort": "Zdrojový port", - "sourcePortDesc": " (Odběr se týká podrobností o aktuálním připojení v obecné kartě)", - "endpointPort": "Port koncového bodu", - "endpointSshConfig": "Konfigurace koncového bodu SSH", - "tunnelForwardDescription": "Tento tunel přeposílá provoz z portu {{sourcePort}} na zdrojovém počítači (aktuální údaje o připojení obecně) do portu {{endpointPort}} na koncovém počítači.", - "maxRetries": "Maximální počet opakování", - "maxRetriesDescription": "Maximální počet pokusů o připojení k tunelu.", - "retryInterval": "Interval opakovat (sekundy)", - "retryIntervalDescription": "Čas čekat mezi pokusy opakovat.", - "autoStartContainer": "Automatické spuštění při spuštění kontejneru", - "autoStartDesc": "Automaticky spustit tunel při spuštění kontejneru", - "addConnection": "Přidat připojení k tunelu", - "tunnelType": "Typ tunelu", - "tunnelTypeLocal": "Místní (-L)", - "tunnelTypeRemote": "Vzdálené (-R)", - "tunnelTypeLocalDesc": "Přeposlat místní port na vzdálený koncový bod", - "tunnelTypeRemoteDesc": "Přeposlat vzdálený port do místního stroje", - "tunnelForwardDescriptionLocal": "Tento tunel přeposílá provoz z lokálního portu {{sourcePort}} do portu {{endpointPort}} na koncovém počítači.", - "tunnelForwardDescriptionRemote": "Tento tunel přeposílá provoz z portu {{sourcePort}} na zdrojovém počítači (aktuální údaje o připojení obecně) do portu {{endpointPort}} na koncovém počítači.", "sshpassRequired": "Sshpass vyžadován pro ověření hesla", "sshpassRequiredDesc": "Pro ověřování hesla v tunelech musí být v systému nainstalován sshpass.", "otherInstallMethods": "Jiné způsoby instalace:", @@ -1529,7 +1551,7 @@ "splitVertical": "Rozdělit vertikálně", "closePanel": "Zavřít panel", "reconnect": "Znovu připojit", - "sessionEnded": "Relace skončila", + "sessionEnded": "Relace byla ukončena.", "connectionLost": "Spojení ztraceno", "error": "CHYBA: {{message}}", "disconnected": "Odpojeno", @@ -1933,22 +1955,10 @@ "ascending": "Vzestupně", "descending": "sestupně" }, - "tunnel": { - "log": { - "connecting": "Navazování připojení tunelu...", - "sourceConnecting": "Připojování ke zdrojovému hostiteli {{host}}...", - "sourceConnected": "Připojeno ke zdrojovému hostiteli", - "endpointResolving": "Vyhledávání koncového bodu hostitele {{host}}...", - "endpointResolved": "Hostitel koncového bodu vyřešen", - "forwarding": "Nastavení portu přesměrování {{localPort}} → {{remotePort}}...", - "connected": "Tunel byl úspěšně vytvořen", - "retrying": "Připojení se nezdařilo, opakuji v {{countdown}}s (pokus {{attempt}}/{{max}})...", - "retryExhausted": "Dosažen maximální počet pokusů o opakování", - "error": "Připojení k tunelu selhalo: {{error}}" - } - }, "tunnels": { "title": "SSH tunely", + "noTunnelsConfigured": "Nejsou nastaveny žádné tunely", + "configureTunnelsInHostSettings": "Konfigurace připojení tunelu ve Správci hostitelů pro spuštění", "noSshTunnels": "Žádné SSH tunely", "createFirstTunnelMessage": "Zatím jste nevytvořili žádné SSH tunely. Nakonfigurujte připojení tunelu v hostitelském manažeru, abyste mohli začít.", "connected": "Připojeno", @@ -1969,27 +1979,100 @@ "disconnect": "Odpojit", "cancel": "Zrušit", "port": "Port", + "localPort": "Místní port", + "remotePort": "Vzdálený port", + "currentHostPort": "Aktuální port hostitele", + "endpointPort": "Přístav koncového bodu", + "bindIp": "Místní IP", + "currentHostIp": "Aktuální IP hostitele", + "endpointSshConfig": "Konfigurace koncového bodu SSH", + "endpointSshConfigRequired": "Konfigurace koncového bodu SSH je povinná", + "endpointSshHost": "Koncový bod SSH hostitel", + "endpointSshHostPlaceholder": "Vyberte nakonfigurovaného hostitele", + "endpointSshHostRequired": "Vyberte koncový SSH hostitele pro každý klientský tunel.", "attempt": "Pokusit se {{current}} o {{max}}", "nextRetryIn": "Další opakování za {{seconds}} sekund", "checkDockerLogs": "Zkontroluj své dokovací protokoly z důvodu chyby, připojte se k", "orCreate": "nebo vytvořte ", "noTunnelConnections": "Žádné připojení k tunelu není nastaveno", "tunnelConnections": "Připojení tunelu", + "serverTunnels": "Tuny serveru", + "serverTunnelsDesc": "Tunely spravované backend-managementem uložené s tímto hostitelem.", + "clientTunnels": "Tunely klienta", + "clientTunnelsUnavailable": "Klientské tunely vyžadují desktopového klienta.", + "serverTunnel": "Serverový tunel", + "clientTunnel": "Zákaznický tunel", + "addServerTunnel": "Přidat serverový tunel", + "addClientTunnel": "Přidat klientský tunel", + "noServerTunnels": "Žádné tunely serveru nejsou nastaveny.", + "noClientTunnels": "Na této ploše nejsou nakonfigurovány žádné tunely klienta.", + "manageClientTunnels": "Správa tunelů klienta", "addTunnel": "Přidat tunel", "editTunnel": "Upravit tunel", "deleteTunnel": "Odstranit tunel", "tunnelName": "Název tunelu", - "localPort": "Místní port", "remoteHost": "Vzdálený server", - "remotePort": "Vzdálený port", "autoStart": "Automatický start", + "autoStartContainer": "Automatické spuštění při spuštění", + "autoStartContainerDesc": "Automaticky spustit tento tunel při spuštění serveru Termix.", + "autoStartEnableFailed": "Hostitel uložen, ale nepodařilo se spustit automatické nastartování tunelů pro {{name}}.", + "clientAutoStartDesc": "Začne, když se tento desktopový klient otevře a zůstane připojen.", + "clientManualStartDesc": "Používejte Start a Zastavit z tohoto řádku. Termix jej automaticky neotevře.", + "clientRemoteServerNote": "Vzdálené přesměrování může vyžadovat AllowTcpForwarding a GatewayPorts na serveru SSH serveru. Vzdálený port se uzavře, když se tato plocha odpojí.", + "clientTunnelStarted": "Klientský tunel spuštěn", + "clientTunnelStopped": "Klientský tunel zastaven", + "tunnelTestSucceeded": "Test tunelu byl úspěšný", + "tunnelTestFailed": "Test tunelu selhal", + "localSaved": "Klientské tunely uloženy", + "localSaveError": "Nepodařilo se uložit místní klientské tunely", + "invalidBindIp": "Místní IP adresa musí být platná IPv4 adresa.", + "invalidLocalTargetIp": "Místní cílová IP musí být platná IPv4 adresa.", + "invalidCurrentHostIp": "Současná IP adresa hostitele musí být platnou IPv4 adresou.", + "invalidLocalPort": "Místní port musí být mezi 1 a 65535.", + "invalidRemotePort": "Vzdálený port musí být mezi 1 a 65535.", + "invalidLocalTargetPort": "Místní cílový port musí být mezi 1 a 65535.", + "invalidEndpointPort": "Přístav koncových bodů musí být mezi 1 a 65535.", + "duplicateAutoStartBind": "Pouze jeden klientský tunel s automatickým startem může používat {{bind}}.", + "manualControlError": "Aktualizace stavu tunelu se nezdařila.", + "saveHostBeforeManualControl": "Uložit tohoto hostitele před spuštěním nebo zastavením jeho serverových tunelů.", "status": "Stav", "active": "Aktivní", "inactive": "Neaktivní", "start": "Začít", "stop": "Zastavit", + "test": "Zkouška", "restart": "Restartovat", "connectionType": "Typ připojení", + "type": "Typ tunelu", + "typeLocal": "Místní (-L)", + "typeRemote": "Vzdálené (-R)", + "typeDynamic": "Dynamické (-D)", + "typeServerLocalDesc": "Aktuální hostitel ke koncovce.", + "typeServerRemoteDesc": "Koncový bod zpět do aktuálního hostitele.", + "typeClientLocalDesc": "Lokální počítač ke koncovce.", + "typeClientRemoteDesc": "Koncový bod zpět do lokálního počítače.", + "typeClientDynamicDesc": "SOCKS na místním počítači.", + "typeDynamicDesc": "Přesměrování SOCKS5 KONNECT provozu přes SSH", + "forwardDescriptionServerLocal": "Aktuální host {{sourcePort}} → koncový bod {{endpointPort}}.", + "forwardDescriptionServerRemote": "Koncový bod {{endpointPort}} → aktuální host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS na aktuálním hostiteli {{sourcePort}}.", + "forwardDescriptionClientLocal": "Místní {{sourcePort}} → vzdálené {{endpointPort}}.", + "forwardDescriptionClientRemote": "Vzdálená {{sourcePort}} → lokální {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS na místním portu {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS prostřednictvím {{endpoint}}", + "autoNameClientLocal": "Místní {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → místní {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} prostřednictvím {{endpoint}}", + "route": "Trasa:", + "lastStarted": "Naposledy spuštěno", + "lastTested": "Poslední test", + "lastError": "Poslední chyba", + "maxRetries": "Maximální počet opakování", + "maxRetriesDescription": "Maximální počet pokusů o opakování.", + "retryInterval": "Interval opakovat (sekundy)", + "retryIntervalDescription": "Čas čekat mezi pokusy opakovat.", "local": "Místní", "remote": "Vzdálené", "dynamic": "Dynamický", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Zadejte prosím vaše SSH přihlašovací údaje pro připojení k tomuto serveru.", "sshPasswordDescription": "Zadejte heslo pro toto SSH připojení.", "sshKeyPasswordDescription": "Pokud je váš SSH klíč šifrován, zadejte heslo zde.", + "passphraseRequired": "Vyžadována přístupová fráze", + "passphraseRequiredDescription": "SSH klíč je šifrován. Zadejte prosím heslo pro odemknutí.", "step1ScanQR": "Krok 1: Naskenujte QR kód pomocí vaší ověřovací aplikace", "manualEntryCode": "Ruční vstupní kód", "cannotScanQRText": "Pokud nemůžete naskenovat QR kód, zadejte tento kód ručně do vaší ověřovací aplikace", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Obnovení hesla se nezdařilo", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Nepodařilo se spustit OIDC přihlášení", - "failedUserInfo": "Nepodařilo se získat informace o uživateli po přihlášení OIDC", + "failedUserInfo": "Nepodařilo se získat informace o uživateli po přihlášení", "oidcAuthFailed": "OIDC ověření se nezdařilo", "noTokenReceived": "Od přihlášení nebyl obdržen žádný token", "invalidAuthUrl": "Z backendu obdržena neplatná autorizační URL", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Zobrazit štítky pod každým hostitelem v postranním panelu. Zakažte pro skrytí všech štítků.", "account": "Účet", "appearance": "Vzhled", + "c2sTunnelConfigDesc": "Místní stolní tunely zaměřující nastavené SSH hostitele.", + "c2sTunnelPresets": "Předvolby klientského tunelu", + "c2sTunnelPresetsDesc": "Uložte místní seznam tunelů tohoto desktopového klienta jako pojmenovanou předvolbu serveru, nebo nahrajte předvolbu zpět do tohoto klienta.", + "c2sTunnelPresetsUnavailable": "Předvolby klientského tunelu jsou k dispozici pouze v desktopovém klientovi.", + "c2sPresetName": "Název předvolby", + "c2sPresetNamePlaceholder": "Název předvolby klienta", + "c2sPresetToLoad": "Předvolba k načtení", + "c2sNoPresetSelected": "Nebyla vybrána žádná předvolba", + "c2sNoPresets": "Žádná přednastavení nebyla uložena", + "c2sLoadPreset": "Načíst", + "c2sCurrentLocalConfig": "{{count}} lokální klientské tunely nakonfigurovány na tomto počítači.", + "c2sPresetSyncNote": "Předvolby jsou explicitní snímky; načítání jednoho nahradí lokální klientský seznam klientských tunelů.", + "c2sPresetSaved": "Předvolba klientského tunelu byla uložena", + "c2sPresetLoaded": "Předvolba klientského tunelu byla načtena lokálně", + "c2sPresetRenamed": "Předvolba klientského tunelu přejmenována", + "c2sPresetDeleted": "Předvolba klientského tunelu byla smazána", + "c2sPresetLoadError": "Nepodařilo se načíst přednastavení klientského tunelu", "languageLocalization": "Jazyk & Lokalizace", "fileManagerSettings": "Správce souborů", "terminalSettings": "Terminál", @@ -2370,6 +2472,10 @@ "description": "SSH - popis pověření", "searchCredentials": "Hledat přihlašovací údaje podle jména, uživatelského jména nebo štítků...", "sshConfig": "konfigurace koncového bodu ssh", + "bindLocalhost": "127.0.0.1 (vázat na localhost)", + "localListenerHost": "127.0.0.1 (poslouchejte lokálně)", + "localTargetHost": "127.0.0.1 (cíl na tomto počítači)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/domů", "clientId": "vaše-klient-id", "clientSecret": "Vašich klient-tajných služeb", @@ -2549,6 +2655,7 @@ "version": "Verze", "upToDate": "Aktuální", "updateAvailable": "Dostupná aktualizace", + "beta": "Beta", "uptime": "Doba provozu", "database": "Databáze", "healthy": "Zdravé", @@ -2955,6 +3062,20 @@ "error": "Sbírka metriky selhala: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Navazování připojení tunelu...", + "sourceConnecting": "Připojování ke zdrojovému hostiteli {{host}}...", + "sourceConnected": "Připojeno ke zdrojovému hostiteli", + "endpointResolving": "Vyhledávání koncového bodu hostitele {{host}}...", + "endpointResolved": "Hostitel koncového bodu vyřešen", + "forwarding": "Nastavení portu přesměrování {{localPort}} → {{remotePort}}...", + "connected": "Tunel byl úspěšně vytvořen", + "retrying": "Připojení se nezdařilo, opakuji v {{countdown}}s (pokus {{attempt}}/{{max}})...", + "retryExhausted": "Dosažen maximální počet pokusů o opakování", + "error": "Připojení k tunelu selhalo: {{error}}" + } + }, "sftp": { "log": { "connecting": "Připojování k SFTP serveru...", diff --git a/src/locales/translated/da_DK.json b/src/locales/translated/da_DK.json index c1deb9d8..45a8f973 100644 --- a/src/locales/translated/da_DK.json +++ b/src/locales/translated/da_DK.json @@ -402,6 +402,8 @@ "currentVersion": "Du kører version {{version}}", "updateAvailable": "Opdatering Tilgængelig", "newVersionAvailable": "En ny version er tilgængelig! Du kører {{current}}, men {{latest}} er tilgængelig.", + "betaVersion": "Beta Version", + "betaVersionDesc": "Du kører {{current}}, som er nyere end den seneste stabile udgave {{latest}}.", "releasedOn": "Udgivet til {{date}}", "downloadUpdate": "Download Opdatering", "dismiss": "Afvis", @@ -426,6 +428,8 @@ "warning": "Advarsel", "info": "Info", "success": "Succes", + "unsavedChanges": "Ikke-gemte ændringer", + "dismiss": "Afvis", "loading": "Indlæser...", "required": "Påkrævet", "optional": "Valgfri", @@ -471,6 +475,7 @@ "chinese": "Kinesisk", "german": "Tysk", "cancel": "Annuller", + "done": "Udført", "username": "Brugernavn", "name": "Navn", "login": "Login", @@ -486,6 +491,7 @@ "save": "Gem", "saving": "Gemmer...", "delete": "Slet", + "rename": "Omdøb", "edit": "Rediger", "add": "Tilføj", "search": "Søg", @@ -559,7 +565,8 @@ "passwordCopied": "Adgangskode kopieret til udklipsholder", "sudoPasswordCopied": "Sudo adgangskode kopieret til udklipsholder", "noPasswordAvailable": "Ingen adgangskode tilgængelig", - "failedToCopyPassword": "Kunne ikke kopiere adgangskode" + "failedToCopyPassword": "Kunne ikke kopiere adgangskode", + "openFileManager": "Åbn Filhåndtering" }, "admin": { "title": "Admin Indstillinger", @@ -868,7 +875,42 @@ "passwordMinLength": "Adgangskoden skal være på mindst 6 tegn", "currentRoles": "Aktuelle Roller", "noRolesAssigned": "Ingen roller tildelt", - "assignNewRole": "Tildel Ny Rolle" + "assignNewRole": "Tildel Ny Rolle", + "apiKeys": { + "tabLabel": "Api Nøgler", + "title": "Api Nøgler", + "createApiKey": "Opret API-nøgle", + "createApiKeyDescription": "Opret en ny API-nøgle afgrænset til en bestemt bruger. Token vises kun én gang.", + "keyCreated": "Api Nøgle Oprettet", + "keyCreatedDescription": "Kopier denne nøgle nu - den vil ikke blive vist igen.", + "keyName": "Nøgle Navn", + "keyNamePlaceholder": "f.eks. CI/CD Rørledning", + "scopedUser": "Scoped Bruger", + "selectUser": "Vælg en bruger...", + "searchUsers": "Søg efter brugere...", + "noUsersFound": "Ingen brugere fundet.", + "expiresAt": "Udløber Ved", + "optional": "valgfri", + "expiresAtHelp": "Lad være tom for en nøgle, der aldrig udløber.", + "copyWarningTitle": "Gem din API-nøgle", + "copyWarningDescription": "Denne nøgle vil kun blive vist én gang. Opbevar den på et sikkert sted.", + "apiKey": "API Nøgle", + "tokenCopied": "Token kopieret til udklipsholder", + "creating": "Opretter...", + "nameRequired": "Nøgle navn er påkrævet", + "userRequired": "Vælg venligst en bruger", + "failedToCreate": "Kunne ikke oprette API-nøgle", + "noKeys": "Ingen API-nøgler fundet.", + "name": "Navn", + "prefix": "Præfiks", + "lastUsed": "Sidst Brugt", + "never": "Aldrig", + "revokeKey": "Tilbagekald nøgle", + "confirmRevoke": "Er du sikker på, at du vil tilbagekalde API-nøglen\"{{name}}\"? Dette kan ikke fortrydes.", + "revokedSuccessfully": "API-nøgle tilbagekaldt succesfuldt", + "failedToRevoke": "Mislykkedes at tilbagekalde API-nøgle", + "failedToFetch": "Kunne ikke hente API-nøgler" + } }, "hosts": { "title": "Vært Manager", @@ -962,28 +1004,8 @@ "enableDocker": "Aktiver Docker", "defaultPath": "Standard Sti", "defaultPathDesc": "Standard mappe ved åbning af filhåndtering for denne vært", - "tunnelConnections": "Tunnelforbindelser", "connection": "Forbindelse", "remove": "Fjern", - "sourcePort": "Kilde Port", - "sourcePortDesc": " (Ressource refererer til de aktuelle tilslutningsdetaljer i fanen Generelt)", - "endpointPort": "Endepunkt Port", - "endpointSshConfig": "Indstilling Af Endepunkt SSH", - "tunnelForwardDescription": "Denne tunnel vil videresende trafikken fra havnen {{sourcePort}} på kildemaskinen (aktuelle forbindelsesdetaljer i den generelle fane) til port {{endpointPort}} på endepunktsmaskinen.", - "maxRetries": "Maks. Forsøg", - "maxRetriesDescription": "Maksimalt antal forsøg på at prøve igen for tunnelforbindelse.", - "retryInterval": "Forsøg Interval (sekunder)", - "retryIntervalDescription": "Tid til at vente mellem forsøg igen.", - "autoStartContainer": "Automatisk start ved Container Start", - "autoStartDesc": "Start automatisk denne tunnel når beholderen starter", - "addConnection": "Tilføj Tunnelforbindelse", - "tunnelType": "Tunnel Type", - "tunnelTypeLocal": "Lokal (-L)", - "tunnelTypeRemote": "Fjernbetjening (-R)", - "tunnelTypeLocalDesc": "Videresend lokal port til fjern-endepunkt", - "tunnelTypeRemoteDesc": "Videresend fjernport til lokal maskine", - "tunnelForwardDescriptionLocal": "Denne tunnel vil videresende trafikken fra den lokale havn {{sourcePort}} til port {{endpointPort}} på slutmaskinen.", - "tunnelForwardDescriptionRemote": "Denne tunnel vil videresende trafikken fra havnen {{sourcePort}} på kildemaskinen (aktuelle forbindelsesdetaljer i den generelle fane) til port {{endpointPort}} på endepunktsmaskinen.", "sshpassRequired": "Sshpass Kræves For Adgangskodegodkendelse", "sshpassRequiredDesc": "For adgangskodegodkendelse i tunneler skal sshpass installeres på systemet.", "otherInstallMethods": "Andre installationsmetoder:", @@ -1529,7 +1551,7 @@ "splitVertical": "Opdel Lodret", "closePanel": "Luk Panel", "reconnect": "Genopret", - "sessionEnded": "Session Afsluttet", + "sessionEnded": "Session afsluttet.", "connectionLost": "Forbindelse tabt", "error": "FEJL: {{message}}", "disconnected": "Afbrudt", @@ -1933,22 +1955,10 @@ "ascending": "Stigende", "descending": "Faldende" }, - "tunnel": { - "log": { - "connecting": "Etablerer tunnelforbindelse...", - "sourceConnecting": "Forbinder til kildevært {{host}}...", - "sourceConnected": "Forbundet til kildevært", - "endpointResolving": "Fortolker værten {{host}}...", - "endpointResolved": "Endepunkt vært løst", - "forwarding": "Opsætning af videresendelse af port {{localPort}} → {{remotePort}}...", - "connected": "Tunnel oprettet med succes", - "retrying": "Forbindelse mislykkedes, prøver igen i {{countdown}}s (forsøg {{attempt}}/{{max}})...", - "retryExhausted": "Maks. gentagelsesforsøg nået", - "error": "Tunnelforbindelse mislykkedes: {{error}}" - } - }, "tunnels": { "title": "SSH-tunneler", + "noTunnelsConfigured": "Ingen Tunneler Konfigureret", + "configureTunnelsInHostSettings": "Konfigurer tunnelforbindelser i værtshåndteringen for at komme i gang", "noSshTunnels": "Ingen SSH-tunneler", "createFirstTunnelMessage": "Du har endnu ikke oprettet nogen SSH-tunneler. Konfigurer tunnelforbindelser i værtshåndteringen for at komme i gang.", "connected": "Forbundet", @@ -1969,27 +1979,100 @@ "disconnect": "Afbryd", "cancel": "Annuller", "port": "Port", + "localPort": "Lokal Port", + "remotePort": "Ekstern Port", + "currentHostPort": "Nuværende Værts Port", + "endpointPort": "Endepunkt Port", + "bindIp": "Lokal IP", + "currentHostIp": "Nuværende Vært Ip", + "endpointSshConfig": "Indstilling Af Endepunkt SSH", + "endpointSshConfigRequired": "Endpoint SSH konfiguration er påkrævet", + "endpointSshHost": "Endepunkt SSH Host", + "endpointSshHostPlaceholder": "Vælg en konfigureret vært", + "endpointSshHostRequired": "Vælg en SSH-vært for hver klienttunnel.", "attempt": "Forsøg {{current}} af {{max}}", "nextRetryIn": "Næste forsøg igen i {{seconds}} sekunder", "checkDockerLogs": "Tjek dine Docker logs for fejlårsagen, deltag i", "orCreate": "eller opret en ", "noTunnelConnections": "Ingen tunnelforbindelser konfigureret", "tunnelConnections": "Tunnelforbindelser", + "serverTunnels": "Servertunneler", + "serverTunnelsDesc": "Backend-administrerede tunneler gemt med denne vært.", + "clientTunnels": "Klient Tunneler", + "clientTunnelsUnavailable": "Klienttunneler kræver en desktop klient.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Klient Tunnel", + "addServerTunnel": "Tilføj Servertunnel", + "addClientTunnel": "Tilføj Klienttunnel", + "noServerTunnels": "Ingen servertunneler konfigureret.", + "noClientTunnels": "Ingen klienttunneler konfigureret på dette skrivebord.", + "manageClientTunnels": "Administrer Klienttunneler", "addTunnel": "Tilføj Tunnel", "editTunnel": "Rediger Tunnel", "deleteTunnel": "Slet Tunnel", "tunnelName": "Tunnel Navn", - "localPort": "Lokal Port", "remoteHost": "Ekstern Vært", - "remotePort": "Ekstern Port", "autoStart": "Automatisk Start", + "autoStartContainer": "Start automatisk ved start", + "autoStartContainerDesc": "Start automatisk denne tunnel når din Termix-server starter.", + "autoStartEnableFailed": "Vært gemt, men kunne ikke starte auto-start tunneler for {{name}}.", + "clientAutoStartDesc": "Starter når denne desktop klient åbner og forbliver tilsluttet.", + "clientManualStartDesc": "Brug Start og Stop fra denne række. Termix vil ikke åbne den automatisk.", + "clientRemoteServerNote": "Fjernvideresendelse kan kræve AllowTcpForwarding og GatewayPorts på SSH-slutserveren. Fjernporten lukker, når skrivebordet afbryder.", + "clientTunnelStarted": "Klienttunnel startet", + "clientTunnelStopped": "Klient tunnel stoppet", + "tunnelTestSucceeded": "Tunneltesten lykkedes", + "tunnelTestFailed": "Tunneltest mislykkedes", + "localSaved": "Klienttunneler gemt", + "localSaveError": "Kunne ikke gemme lokale klienttunneler", + "invalidBindIp": "Lokal IP skal være en gyldig IPv4-adresse.", + "invalidLocalTargetIp": "Lokalt mål IP skal være en gyldig IPv4-adresse.", + "invalidCurrentHostIp": "Nuværende værts IP skal være en gyldig IPv4-adresse.", + "invalidLocalPort": "Lokal port skal være mellem 1 og 65535.", + "invalidRemotePort": "Fjernport skal være mellem 1 og 65535.", + "invalidLocalTargetPort": "Lokal målport skal være mellem 1 og 65535.", + "invalidEndpointPort": "Endepunkthavn skal være mellem 1 og 65535.", + "duplicateAutoStartBind": "Kun én auto-start klienttunnel kan bruge {{bind}}.", + "manualControlError": "Mislykkedes at opdatere tunneltilstand.", + "saveHostBeforeManualControl": "Gem denne vært, før du starter eller stopper dens servertunneller.", "status": "Status", "active": "Aktiv", "inactive": "Inaktiv", "start": "Start", "stop": "Stop", + "test": "Test", "restart": "Genstart", "connectionType": "Forbindelsestype", + "type": "Tunnel Type", + "typeLocal": "Lokal (-L)", + "typeRemote": "Fjernbetjening (-R)", + "typeDynamic": "Dynamisk (-D)", + "typeServerLocalDesc": "Nuværende vært for slutpunktet.", + "typeServerRemoteDesc": "Endepunkt tilbage til nuværende vært.", + "typeClientLocalDesc": "Lokal computer til slutpunkt.", + "typeClientRemoteDesc": "Slutpunkt tilbage til lokal computer.", + "typeClientDynamicDesc": "SOCKS på lokal computer.", + "typeDynamicDesc": "Videresend SOCKS5 CONNECT trafik gennem SSH", + "forwardDescriptionServerLocal": "Nuværende vært {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS på nuværende vært {{sourcePort}}.", + "forwardDescriptionClientLocal": "Lokal {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS på lokal port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Lokal {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → Lokal {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Rute:", + "lastStarted": "Sidst startet", + "lastTested": "Sidst testet", + "lastError": "Seneste fejl", + "maxRetries": "Maks. Forsøg", + "maxRetriesDescription": "Maksimal mængde af forsøg igen.", + "retryInterval": "Forsøg Interval (sekunder)", + "retryIntervalDescription": "Tid til at vente mellem forsøg igen.", "local": "Lokal", "remote": "Fjernbetjening", "dynamic": "Dynamisk", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Angiv venligst dine SSH-legitimationsoplysninger for at oprette forbindelse til denne server.", "sshPasswordDescription": "Indtast adgangskoden til denne SSH-forbindelse.", "sshKeyPasswordDescription": "Hvis din SSH-nøgle er krypteret, så skriv adgangskoden her.", + "passphraseRequired": "Kodeord Kræves", + "passphraseRequiredDescription": "SSH-tasten er krypteret. Indtast kodeord for at låse den op.", "step1ScanQR": "Trin 1: Scan QR-koden med din autentificerings-app", "manualEntryCode": "Manuel Indgangskode", "cannotScanQRText": "Hvis du ikke kan scanne QR-koden, skal du indtaste denne kode manuelt i din autentificeringsapp", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Kunne ikke fuldføre nulstilling af adgangskode", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Mislykkedes at starte OIDC login", - "failedUserInfo": "Kunne ikke hente brugerinfo efter OIDC login", + "failedUserInfo": "Kunne ikke hente brugerinfo efter login", "oidcAuthFailed": "OIDC godkendelse mislykkedes", "noTokenReceived": "Ingen token modtaget fra login", "invalidAuthUrl": "Ugyldig autorisation URL modtaget fra backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Vis tags under hver vært i sidepanelet. Deaktivér for at skjule alle tags.", "account": "Konto", "appearance": "Udseende", + "c2sTunnelConfigDesc": "Lokale stationære tunneler rettet mod konfigurerede SSH-værter.", + "c2sTunnelPresets": "Klient Tunnel Forudindstillinger", + "c2sTunnelPresetsDesc": "Gem denne desktop klients lokale tunnelliste som en navngiven server forudindstilling, eller indlæs en forudindstillet tilbage i denne klient.", + "c2sTunnelPresetsUnavailable": "Klienttunnelforudindstillinger er kun tilgængelige i skrivebordsklienten.", + "c2sPresetName": "Forudindstillet Navn", + "c2sPresetNamePlaceholder": "Klient forudindstillede navn", + "c2sPresetToLoad": "Forudindstilling For At Indlæse", + "c2sNoPresetSelected": "Ingen forudindstilling valgt", + "c2sNoPresets": "Ingen forudindstillinger gemt", + "c2sLoadPreset": "Indlæs", + "c2sCurrentLocalConfig": "{{count}} lokal klienttunnel(er) konfigureret på dette skrivebord.", + "c2sPresetSyncNote": "Forudindstillinger er eksplicitte snapshots; indlæsning af en erstatter denne desktop klients lokale klienttunnelliste.", + "c2sPresetSaved": "Klient tunnel forudindstilling gemt", + "c2sPresetLoaded": "Forudindstillede klienttunnel indlæst lokalt", + "c2sPresetRenamed": "Klient tunnel forudindstillet omdøbt", + "c2sPresetDeleted": "Klient tunnel forudindstilling slettet", + "c2sPresetLoadError": "Kunne ikke indlæse klienttunnelforudindstillinger", "languageLocalization": "Sprog & Lokalisering", "fileManagerSettings": "Filhåndtering", "terminalSettings": "Terminal", @@ -2370,6 +2472,10 @@ "description": "Beskrivelse af SSH legitimationsoplysninger", "searchCredentials": "Søg efter legitimationsoplysninger efter navn, brugernavn eller tags...", "sshConfig": "endpoint ssh konfiguration", + "bindLocalhost": "127.0.0.1 (bind til localhost)", + "localListenerHost": "127.0.0.1 (lyt lokalt)", + "localTargetHost": "127.0.0.1 (mål på denne computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/hjem", "clientId": "din-client-id", "clientSecret": "din-klient-hemmelighed", @@ -2549,6 +2655,7 @@ "version": "Version", "upToDate": "Op til dato", "updateAvailable": "Opdatering Tilgængelig", + "beta": "Beta", "uptime": "Oppetid", "database": "Database", "healthy": "Sunde", @@ -2955,6 +3062,20 @@ "error": "Målesamling mislykkedes: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Etablerer tunnelforbindelse...", + "sourceConnecting": "Forbinder til kildevært {{host}}...", + "sourceConnected": "Forbundet til kildevært", + "endpointResolving": "Fortolker værten {{host}}...", + "endpointResolved": "Endepunkt vært løst", + "forwarding": "Opsætning af videresendelse af port {{localPort}} → {{remotePort}}...", + "connected": "Tunnel oprettet med succes", + "retrying": "Forbindelse mislykkedes, prøver igen i {{countdown}}s (forsøg {{attempt}}/{{max}})...", + "retryExhausted": "Maks. gentagelsesforsøg nået", + "error": "Tunnelforbindelse mislykkedes: {{error}}" + } + }, "sftp": { "log": { "connecting": "Forbinder til SFTP-server...", diff --git a/src/locales/translated/de_DE.json b/src/locales/translated/de_DE.json index 9d664c97..72e4bfc5 100644 --- a/src/locales/translated/de_DE.json +++ b/src/locales/translated/de_DE.json @@ -402,6 +402,8 @@ "currentVersion": "Sie verwenden Version {{version}}", "updateAvailable": "Update verfügbar", "newVersionAvailable": "Eine neue Version ist verfügbar! Sie verwenden {{current}}, aber {{latest}} ist verfügbar.", + "betaVersion": "Beta-Version", + "betaVersionDesc": "Sie verwenden {{current}}, was neuer ist als die neueste stabile Version {{latest}}.", "releasedOn": "Veröffentlicht am {{date}}", "downloadUpdate": "Update herunterladen", "dismiss": "Verwerfen", @@ -426,6 +428,8 @@ "warning": "Warnung", "info": "Info", "success": "Erfolg", + "unsavedChanges": "Ungespeicherte Änderungen", + "dismiss": "Verwerfen", "loading": "Wird geladen...", "required": "Benötigt", "optional": "Optional", @@ -471,6 +475,7 @@ "chinese": "Chinesisch", "german": "Deutsch", "cancel": "Abbrechen", + "done": "Fertig", "username": "Benutzername", "name": "Name", "login": "Anmelden", @@ -486,6 +491,7 @@ "save": "Speichern", "saving": "Speichern...", "delete": "Löschen", + "rename": "Umbenennen", "edit": "Bearbeiten", "add": "Neu", "search": "Suchen", @@ -559,7 +565,8 @@ "passwordCopied": "Passwort in Zwischenablage kopiert", "sudoPasswordCopied": "Sudo-Passwort in Zwischenablage kopiert", "noPasswordAvailable": "Kein Passwort verfügbar", - "failedToCopyPassword": "Fehler beim Kopieren des Passworts" + "failedToCopyPassword": "Fehler beim Kopieren des Passworts", + "openFileManager": "Dateimanager öffnen" }, "admin": { "title": "Admin-Einstellungen", @@ -868,7 +875,42 @@ "passwordMinLength": "Passwort muss mindestens 6 Zeichen lang sein", "currentRoles": "Aktuelle Rollen", "noRolesAssigned": "Keine Rollen zugewiesen", - "assignNewRole": "Neue Rolle zuweisen" + "assignNewRole": "Neue Rolle zuweisen", + "apiKeys": { + "tabLabel": "API-Schlüssel", + "title": "API-Schlüssel", + "createApiKey": "API-Schlüssel erstellen", + "createApiKeyDescription": "Erstellen Sie einen neuen API-Schlüssel für einen bestimmten Benutzer. Der Token wird nur einmal angezeigt.", + "keyCreated": "API-Schlüssel erstellt", + "keyCreatedDescription": "Diesen Schlüssel jetzt kopieren — er wird nicht wieder angezeigt.", + "keyName": "Schlüsselname", + "keyNamePlaceholder": "z.B. CI/CD Pipeline", + "scopedUser": "Gespeicherter Benutzer", + "selectUser": "Benutzer auswählen...", + "searchUsers": "Benutzer suchen...", + "noUsersFound": "Keine Benutzer gefunden.", + "expiresAt": "Gültig bis", + "optional": "optional", + "expiresAtHelp": "Leer lassen für einen Schlüssel, der nie ablaufen kann.", + "copyWarningTitle": "API-Schlüssel speichern", + "copyWarningDescription": "Dieser Schlüssel wird nur einmal angezeigt. Speichern Sie ihn an einem sicheren Ort.", + "apiKey": "API-Schlüssel", + "tokenCopied": "Token in Zwischenablage kopiert", + "creating": "Erstellen...", + "nameRequired": "Schlüsselname ist erforderlich", + "userRequired": "Bitte wählen Sie einen Benutzer", + "failedToCreate": "API-Schlüssel konnte nicht erstellt werden", + "noKeys": "Keine API-Schlüssel gefunden.", + "name": "Name", + "prefix": "Präfix", + "lastUsed": "Zuletzt verwendet", + "never": "Nie", + "revokeKey": "Schlüssel widerrufen", + "confirmRevoke": "Sind Sie sicher, dass Sie den API-Schlüssel \"{{name}}\" widerrufen möchten? Dies kann nicht rückgängig gemacht werden.", + "revokedSuccessfully": "API-Schlüssel erfolgreich widerrufen", + "failedToRevoke": "API-Schlüssel konnte nicht widerrufen", + "failedToFetch": "Fehler beim Abrufen der API-Schlüssel" + } }, "hosts": { "title": "Host-Manager", @@ -962,28 +1004,8 @@ "enableDocker": "Docker aktivieren", "defaultPath": "Standardpfad", "defaultPathDesc": "Standardverzeichnis beim Öffnen des Dateimanagers für diesen Host", - "tunnelConnections": "Tunnelverbindungen", "connection": "Verbindung", "remove": "Entfernen", - "sourcePort": "Quellport", - "sourcePortDesc": " (Quelle bezieht sich auf die aktuellen Verbindungsdetails in der Registerkarte Allgemein)", - "endpointPort": "Endpunkt-Port", - "endpointSshConfig": "Endpunkt SSH Konfiguration", - "tunnelForwardDescription": "Dieser Tunnel leitet den Verkehr von Port {{sourcePort}} auf der Quellmaschine (aktuelle Verbindungsdetails im allgemeinen Tab) an Port {{endpointPort}} auf dem Endpunkt-Rechner weiter.", - "maxRetries": "Max. Wiederholungen", - "maxRetriesDescription": "Maximale Anzahl der Wiederholungsversuche für die Tunnelverbindung.", - "retryInterval": "Wiederholungsintervall (Sekunden)", - "retryIntervalDescription": "Wartezeit zwischen wiederholten Versuchen.", - "autoStartContainer": "Beim Start des Containers automatisch starten", - "autoStartDesc": "Diesen Tunnel automatisch starten, wenn der Container startet", - "addConnection": "Tunnelverbindung hinzufügen", - "tunnelType": "Tunneltyp", - "tunnelTypeLocal": "Lokal (-L)", - "tunnelTypeRemote": "Remote (-R)", - "tunnelTypeLocalDesc": "Lokalen Port zum entfernten Endpunkt weiterleiten", - "tunnelTypeRemoteDesc": "Remote-Port an lokalen Rechner weiterleiten", - "tunnelForwardDescriptionLocal": "Dieser Tunnel leitet den Verkehr vom lokalen Port {{sourcePort}} an Port {{endpointPort}} auf der Endpunktmaschine weiter.", - "tunnelForwardDescriptionRemote": "Dieser Tunnel leitet den Verkehr von Port {{sourcePort}} auf der Quellmaschine (aktuelle Verbindungsdetails im allgemeinen Tab) an Port {{endpointPort}} auf dem Endpunkt-Rechner weiter.", "sshpassRequired": "Sshpass erforderlich für Passwort-Authentifizierung", "sshpassRequiredDesc": "Für die Passwort-Authentifizierung in Tunnels muss sshpass auf dem System installiert sein.", "otherInstallMethods": "Andere Installationsmethoden:", @@ -1529,7 +1551,7 @@ "splitVertical": "Vertikal teilen", "closePanel": "Panel schließen", "reconnect": "Neu verbinden", - "sessionEnded": "Sitzung beendet", + "sessionEnded": "Sitzung beendet.", "connectionLost": "Verbindung verloren", "error": "FEHLER: {{message}}", "disconnected": "Verbindung getrennt", @@ -1933,22 +1955,10 @@ "ascending": "Aufsteigend", "descending": "Absteigend" }, - "tunnel": { - "log": { - "connecting": "Tunnelverbindung wird eingerichtet...", - "sourceConnecting": "Verbindung zum Quell-Host {{host}}...", - "sourceConnected": "Mit Quell-Host verbunden", - "endpointResolving": "Löse Endpunkt-Host {{host}}...", - "endpointResolved": "Endpunkt-Host gelöst", - "forwarding": "Port-Weiterleitung von {{localPort}} → {{remotePort}} einrichten ...", - "connected": "Tunnel erfolgreich erstellt", - "retrying": "Verbindung fehlgeschlagen, Wiederversuchen in {{countdown}}s (Versuch {{attempt}}/{{max}})...", - "retryExhausted": "Maximale Wiederholungsversuche erreicht", - "error": "Tunnelverbindung fehlgeschlagen: {{error}}" - } - }, "tunnels": { "title": "SSH-Tunnel", + "noTunnelsConfigured": "Keine Tunnel konfiguriert", + "configureTunnelsInHostSettings": "Konfiguriere Tunnelverbindungen im Host-Manager um loszulegen", "noSshTunnels": "Keine SSH-Tunnel", "createFirstTunnelMessage": "Sie haben noch keine SSH-Tunnel erstellt. Konfigurieren Sie Tunnelverbindungen im Host Manager, um loszulegen.", "connected": "Verbunden", @@ -1969,27 +1979,100 @@ "disconnect": "Verbindung trennen", "cancel": "Abbrechen", "port": "Port", + "localPort": "Lokaler Port", + "remotePort": "Entfernter Port", + "currentHostPort": "Aktueller Host-Port", + "endpointPort": "Endpunkt-Port", + "bindIp": "Lokale IP", + "currentHostIp": "Aktuelle Host-IP", + "endpointSshConfig": "Endpunkt SSH Konfiguration", + "endpointSshConfigRequired": "Endpunkt SSH Konfiguration ist erforderlich", + "endpointSshHost": "Endpunkt SSH-Host", + "endpointSshHostPlaceholder": "Wähle einen konfigurierten Host", + "endpointSshHostRequired": "Wählen Sie einen Endpunkt-SSH-Host für jeden Client-Tunnel.", "attempt": "{{current}} von {{max}} versuchen", "nextRetryIn": "Nächste Wiederholung in {{seconds}} Sekunden", "checkDockerLogs": "Überprüfen Sie Ihre Docker Logs aus der Fehlerbegründung, melden Sie sich an", "orCreate": "oder erstellen Sie ein ", "noTunnelConnections": "Keine Tunnelverbindungen konfiguriert", "tunnelConnections": "Tunnelverbindungen", + "serverTunnels": "Servertunnel", + "serverTunnelsDesc": "Backend-verwaltete Tunnel mit diesem Host gespeichert.", + "clientTunnels": "Kliententunnel", + "clientTunnelsUnavailable": "Kliententunnel benötigen einen Desktop-Client.", + "serverTunnel": "Servertunnel", + "clientTunnel": "Kliententunnel", + "addServerTunnel": "Servertunnel hinzufügen", + "addClientTunnel": "Kliententunnel hinzufügen", + "noServerTunnels": "Keine Servertunnel konfiguriert.", + "noClientTunnels": "Keine Client-Tunnel auf diesem Desktop konfiguriert.", + "manageClientTunnels": "Kliententunnel verwalten", "addTunnel": "Tunnel hinzufügen", "editTunnel": "Tunnel bearbeiten", "deleteTunnel": "Tunnel löschen", "tunnelName": "Tunnelname", - "localPort": "Lokaler Port", "remoteHost": "Entfernter Host", - "remotePort": "Entfernter Port", "autoStart": "Autostart", + "autoStartContainer": "Auto-Start beim Start", + "autoStartContainerDesc": "Diesen Tunnel automatisch starten, wenn Ihr Termix Server gestartet wird.", + "autoStartEnableFailed": "Host gespeichert, aber Fehler beim Autostart von Tunnels für {{name}}.", + "clientAutoStartDesc": "Startet, wenn sich dieser Desktop-Client öffnet und verbunden bleibt.", + "clientManualStartDesc": "Verwenden Sie Start und Stop aus dieser Zeile. Termix öffnet sie nicht automatisch.", + "clientRemoteServerNote": "Remote-Weiterleitung kann AllowTcpForwarding und GatewayPorts auf dem SSH-Server erfordern. Der entfernte Port wird geschlossen, wenn dieser Desktop sich trennt.", + "clientTunnelStarted": "Kliententunnel gestartet", + "clientTunnelStopped": "Kliententunnel gestoppt", + "tunnelTestSucceeded": "Tunneltest erfolgreich", + "tunnelTestFailed": "Tunneltest fehlgeschlagen", + "localSaved": "Kliententunnel gespeichert", + "localSaveError": "Fehler beim Speichern lokaler Client-Tunnel", + "invalidBindIp": "Lokale IP muss eine gültige IPv4-Adresse sein.", + "invalidLocalTargetIp": "Lokale Ziel-IP muss eine gültige IPv4-Adresse sein.", + "invalidCurrentHostIp": "Aktuelle Host-IP muss eine gültige IPv4-Adresse sein.", + "invalidLocalPort": "Der lokale Port muss zwischen 1 und 65535 liegen.", + "invalidRemotePort": "Der Remote Port muss zwischen 1 und 65535 liegen.", + "invalidLocalTargetPort": "Lokaler Port muss zwischen 1 und 65535 liegen.", + "invalidEndpointPort": "Endpunkt-Port muss zwischen 1 und 65535 liegen.", + "duplicateAutoStartBind": "Nur ein Kliententunnel kann {{bind}} verwenden.", + "manualControlError": "Tunnel Status konnte nicht aktualisiert werden.", + "saveHostBeforeManualControl": "Speichere diesen Host, bevor du seine Servertunnel startest oder stoppst.", "status": "Status", "active": "Aktiv", "inactive": "Inaktiv", "start": "Start", "stop": "Stoppen", + "test": "Testen", "restart": "Neustart", "connectionType": "Verbindungstyp", + "type": "Tunneltyp", + "typeLocal": "Lokal (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamisch (-D)", + "typeServerLocalDesc": "Aktueller Host bis Endpunkt.", + "typeServerRemoteDesc": "Endpunkt zurück zum aktuellen Host.", + "typeClientLocalDesc": "Lokaler Computer bis Endpunkt.", + "typeClientRemoteDesc": "Endpunkt zurück zum lokalen Computer.", + "typeClientDynamicDesc": "SOCKS auf lokalem Computer.", + "typeDynamicDesc": "SOCKS5 CONNECT Verkehr durch SSH weiterleiten", + "forwardDescriptionServerLocal": "Aktueller Host {{sourcePort}} → Endpunkt {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpunkt {{endpointPort}} → aktueller Host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS auf dem aktuellen Host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Lokale {{sourcePort}} → Remote- {{endpointPort}}.", + "forwardDescriptionClientRemote": "Entfernte {{sourcePort}} → Lokale {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS auf lokalen Port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Lokale {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → lokale {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Zuletzt gestartet", + "lastTested": "Zuletzt geprüft", + "lastError": "Letzter Fehler", + "maxRetries": "Max. Wiederholungen", + "maxRetriesDescription": "Maximale Anzahl an Wiederholungsversuchen.", + "retryInterval": "Wiederholungsintervall (Sekunden)", + "retryIntervalDescription": "Wartezeit zwischen wiederholten Versuchen.", "local": "Lokal", "remote": "Entfernt", "dynamic": "Dynamisch", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Bitte geben Sie Ihre SSH-Zugangsdaten an, um sich mit diesem Server zu verbinden.", "sshPasswordDescription": "Geben Sie das Passwort für diese SSH-Verbindung ein.", "sshKeyPasswordDescription": "Wenn Ihr SSH-Schlüssel verschlüsselt ist, geben Sie hier die Passphrase ein.", + "passphraseRequired": "Passphrase erforderlich", + "passphraseRequiredDescription": "Der SSH-Schlüssel ist verschlüsselt. Bitte geben Sie die Passphrase ein, um ihn zu entsperren.", "step1ScanQR": "Schritt 1: Scannen Sie den QR-Code mit Ihrer Authentifizierungs-App", "manualEntryCode": "Manueller Eintrag-Code", "cannotScanQRText": "Wenn Sie den QR-Code nicht scannen können, geben Sie diesen Code manuell in Ihre Authentifizierungs-App ein", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Fehler beim Zurücksetzen des Passworts", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Fehler beim Starten des OIDC-Logins", - "failedUserInfo": "Fehler beim Abrufen der Benutzerinformationen nach dem OIDC-Login", + "failedUserInfo": "Fehler beim Abrufen der Benutzerinformationen nach dem Login", "oidcAuthFailed": "OIDC Authentifizierung fehlgeschlagen", "noTokenReceived": "Kein Token vom Login erhalten", "invalidAuthUrl": "Ungültige Autorisierungs-URL vom Backend erhalten", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Tags unter jedem Host in der Seitenleiste anzeigen. Deaktivieren, um alle Tags auszublenden.", "account": "Konto", "appearance": "Erscheinung", + "c2sTunnelConfigDesc": "Lokale Desktop-Tunnel, die auf konfigurierte SSH-Hosts abzielen.", + "c2sTunnelPresets": "Client-Tunnel Voreinstellungen", + "c2sTunnelPresetsDesc": "Speichere die lokale Tunnelliste dieses Desktop-Clients als benannte Server-Voreinstellung oder lade eine Voreinstellung zurück in diesen Client.", + "c2sTunnelPresetsUnavailable": "Voreinstellungen für den Client Tunnel sind nur im Desktop-Client verfügbar.", + "c2sPresetName": "Preset-Name", + "c2sPresetNamePlaceholder": "Name des Presets", + "c2sPresetToLoad": "Voreinstellung zum Laden", + "c2sNoPresetSelected": "Keine Vorlage ausgewählt", + "c2sNoPresets": "Keine Voreinstellungen gespeichert", + "c2sLoadPreset": "Laden", + "c2sCurrentLocalConfig": "{{count}} lokale Clienttunnel(s) auf dieser Arbeitsfläche konfiguriert.", + "c2sPresetSyncNote": "Voreinstellung sind explizite Schnappschüsse; das Laden eines Gerätes ersetzt die lokale Liste des Client-Tunnels.", + "c2sPresetSaved": "Voreinstellung für Kliententunnel gespeichert", + "c2sPresetLoaded": "Voreinstellung für Client-Tunnel lokal geladen", + "c2sPresetRenamed": "Voreinstellung für Kliententunnel umbenannt", + "c2sPresetDeleted": "Voreinstellung für Kliententunnel gelöscht", + "c2sPresetLoadError": "Fehler beim Laden der Client-Tunnel Voreinstellungen", "languageLocalization": "Sprache & Lokalisierung", "fileManagerSettings": "Datei-Manager", "terminalSettings": "Terminal", @@ -2370,6 +2472,10 @@ "description": "SSH-Anmeldeinformationen Beschreibung", "searchCredentials": "Anmeldedaten nach Namen, Benutzernamen oder Tags suchen...", "sshConfig": "endpoint ssh Konfiguration", + "bindLocalhost": "127.0.0.1 (an localhost binden)", + "localListenerHost": "127.0.0.1 (lokal lauschen)", + "localTargetHost": "127.0.0.1 (Ziel auf diesem Computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/home", "clientId": "eigene Client-Id", "clientSecret": "dein-client-Secret", @@ -2549,6 +2655,7 @@ "version": "Version", "upToDate": "Aktuell", "updateAvailable": "Update verfügbar", + "beta": "Beta", "uptime": "Laufzeit", "database": "Datenbank", "healthy": "Gesund", @@ -2955,6 +3062,20 @@ "error": "Metrik-Sammlung fehlgeschlagen: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Tunnelverbindung wird eingerichtet...", + "sourceConnecting": "Verbindung zum Quell-Host {{host}}...", + "sourceConnected": "Mit Quell-Host verbunden", + "endpointResolving": "Löse Endpunkt-Host {{host}}...", + "endpointResolved": "Endpunkt-Host gelöst", + "forwarding": "Port-Weiterleitung von {{localPort}} → {{remotePort}} einrichten ...", + "connected": "Tunnel erfolgreich erstellt", + "retrying": "Verbindung fehlgeschlagen, Wiederversuchen in {{countdown}}s (Versuch {{attempt}}/{{max}})...", + "retryExhausted": "Maximale Wiederholungsversuche erreicht", + "error": "Tunnelverbindung fehlgeschlagen: {{error}}" + } + }, "sftp": { "log": { "connecting": "Verbindung zum SFTP-Server...", diff --git a/src/locales/translated/el_GR.json b/src/locales/translated/el_GR.json index 74e1feec..ca545bdf 100644 --- a/src/locales/translated/el_GR.json +++ b/src/locales/translated/el_GR.json @@ -402,6 +402,8 @@ "currentVersion": "Εκτελείτε την έκδοση {{version}}", "updateAvailable": "Διαθέσιμη Ενημέρωση", "newVersionAvailable": "Μια νέα έκδοση είναι διαθέσιμη! Εκτελείτε {{current}}αλλά το {{latest}} είναι διαθέσιμο.", + "betaVersion": "Έκδοση Beta", + "betaVersionDesc": "Τρέχετε {{current}}, το οποίο είναι νεότερο από την τελευταία σταθερή κυκλοφορία {{latest}}.", "releasedOn": "Κυκλοφόρησε στο {{date}}", "downloadUpdate": "Λήψη Ενημέρωσης", "dismiss": "Απόρριψη", @@ -426,6 +428,8 @@ "warning": "Προειδοποίηση", "info": "Πληροφορίες", "success": "Επιτυχία", + "unsavedChanges": "Μη αποθηκευμένες αλλαγές", + "dismiss": "Απόρριψη", "loading": "Φόρτωση...", "required": "Απαιτείται", "optional": "Προαιρετικό", @@ -471,6 +475,7 @@ "chinese": "Κινέζικα", "german": "Γερμανικά", "cancel": "Ακύρωση", + "done": "Ολοκληρώθηκε", "username": "Όνομα Χρήστη", "name": "Όνομα", "login": "Είσοδος", @@ -486,6 +491,7 @@ "save": "Αποθήκευση", "saving": "Αποθηκεύεται...", "delete": "Διαγραφή", + "rename": "Μετονομασία", "edit": "Επεξεργασία", "add": "Προσθήκη", "search": "Αναζήτηση", @@ -559,7 +565,8 @@ "passwordCopied": "Ο κωδικός αντιγράφηκε στο πρόχειρο", "sudoPasswordCopied": "Ο κωδικός Sudo αντιγράφηκε στο πρόχειρο", "noPasswordAvailable": "Δεν υπάρχει διαθέσιμος κωδικός πρόσβασης", - "failedToCopyPassword": "Αποτυχία αντιγραφής κωδικού πρόσβασης" + "failedToCopyPassword": "Αποτυχία αντιγραφής κωδικού πρόσβασης", + "openFileManager": "Άνοιγμα Διαχειριστή Αρχείων" }, "admin": { "title": "Ρυθμίσεις Διαχειριστή", @@ -868,7 +875,42 @@ "passwordMinLength": "Ο κωδικός πρόσβασης πρέπει να περιέχει τουλάχιστον 6 χαρακτήρες", "currentRoles": "Τρέχοντες Ρόλοι", "noRolesAssigned": "Δεν έχουν ανατεθεί ρόλοι", - "assignNewRole": "Εκχώρηση Νέου Ρόλου" + "assignNewRole": "Εκχώρηση Νέου Ρόλου", + "apiKeys": { + "tabLabel": "Κλειδιά API", + "title": "Κλειδιά API", + "createApiKey": "Δημιουργία Κλειδιού Api", + "createApiKeyDescription": "Δημιουργία ενός νέου κλειδιού API για συγκεκριμένο χρήστη. Το διακριτικό εμφανίζεται μόνο μία φορά.", + "keyCreated": "Το Κλειδί Api Δημιουργήθηκε", + "keyCreatedDescription": "Αντιγραφή αυτού του κλειδιού τώρα - δεν θα εμφανιστεί ξανά.", + "keyName": "Όνομα Κλειδιού", + "keyNamePlaceholder": "π.χ. Αγωγός CI/CD", + "scopedUser": "Εμβέλεια Χρήστη", + "selectUser": "Επιλέξτε έναν χρήστη...", + "searchUsers": "Αναζήτηση χρηστη...", + "noUsersFound": "Δεν βρέθηκαν χρήστες.", + "expiresAt": "Λήγει Στις", + "optional": "προαιρετικό", + "expiresAtHelp": "Αφήστε κενό για ένα κλειδί που δεν λήγει ποτέ.", + "copyWarningTitle": "Αποθηκεύστε το κλειδί API σας", + "copyWarningDescription": "Αυτό το κλειδί θα εμφανίζεται μόνο μία φορά. Αποθηκεύστε το σε ασφαλές μέρος.", + "apiKey": "Κλειδί API", + "tokenCopied": "Το διακριτικό αντιγράφηκε στο πρόχειρο", + "creating": "Δημιουργία...", + "nameRequired": "Απαιτείται όνομα κλειδιού", + "userRequired": "Παρακαλώ επιλέξτε ένα χρήστη", + "failedToCreate": "Αποτυχία δημιουργίας κλειδιού API", + "noKeys": "Δεν βρέθηκαν κλειδιά API.", + "name": "Όνομα", + "prefix": "Πρόθεμα", + "lastUsed": "Τελευταία Χρήση", + "never": "Ποτέ", + "revokeKey": "Ανάκληση κλειδιού", + "confirmRevoke": "Είστε βέβαιοι ότι θέλετε να ανακαλέσετε το κλειδί API \"{{name}}\"? Αυτό δεν μπορεί να αναιρεθεί.", + "revokedSuccessfully": "Το κλειδί API ανακλήθηκε επιτυχώς", + "failedToRevoke": "Αποτυχία ανάκλησης κλειδιού API", + "failedToFetch": "Αποτυχία ανάκτησης κλειδιών API" + } }, "hosts": { "title": "Διαχειριστής Υπολογιστών", @@ -962,28 +1004,8 @@ "enableDocker": "Ενεργοποίηση Docker", "defaultPath": "Προεπιλεγμένη Διαδρομή", "defaultPathDesc": "Προεπιλεγμένος κατάλογος κατά το άνοιγμα του διαχειριστή αρχείων για αυτόν τον κεντρικό υπολογιστή", - "tunnelConnections": "Συνδέσεις Tunnel", "connection": "Σύνδεση", "remove": "Αφαίρεση", - "sourcePort": "Θύρα Πηγής", - "sourcePortDesc": " (Η πηγή αναφέρεται στις τρέχουσες λεπτομέρειες σύνδεσης στην καρτέλα Γενικά)", - "endpointPort": "Θύρα Τελικού Σημείου", - "endpointSshConfig": "Ρύθμιση Τελικού Σημείου SSH", - "tunnelForwardDescription": "Αυτή η σήραγγα θα προωθήσει την κυκλοφορία από το λιμάνι {{sourcePort}} στο πηγαίο μηχάνημα (τρέχουσες λεπτομέρειες σύνδεσης γενικά στην καρτέλα) στη θύρα {{endpointPort}} στη μηχανή τελικού σημείου.", - "maxRetries": "Μέγιστες Επαναλήψεις", - "maxRetriesDescription": "Μέγιστος αριθμός προσπαθειών επανάληψης για σύνδεση με σήραγγα.", - "retryInterval": "Διάστημα Επανάληψη (δευτερόλεπτα)", - "retryIntervalDescription": "Χρόνος αναμονής μεταξύ προσπαθειών επανάληψης.", - "autoStartContainer": "Αυτόματη εκκίνηση στο Container", - "autoStartDesc": "Αυτόματη εκκίνηση αυτής της σήραγγας όταν εκκινήσει ο περιέκτης", - "addConnection": "Προσθήκη Σύνδεσης Tunnel", - "tunnelType": "Τύπος Tunnel", - "tunnelTypeLocal": "Τοπικό (-L)", - "tunnelTypeRemote": "Απομακρυσμένο (-R)", - "tunnelTypeLocalDesc": "Προώθηση τοπικής θύρας για απομακρυσμένο τελικό σημείο", - "tunnelTypeRemoteDesc": "Προώθηση απομακρυσμένης θύρας στον τοπικό υπολογιστή", - "tunnelForwardDescriptionLocal": "Αυτή η σήραγγα θα προωθήσει την κυκλοφορία από το τοπικό λιμάνι {{sourcePort}} στο λιμάνι {{endpointPort}} στο μηχάνημα τελικού σημείου.", - "tunnelForwardDescriptionRemote": "Αυτή η σήραγγα θα προωθήσει την κυκλοφορία από το λιμάνι {{sourcePort}} στο πηγαίο μηχάνημα (τρέχουσες λεπτομέρειες σύνδεσης γενικά στην καρτέλα) στη θύρα {{endpointPort}} στη μηχανή τελικού σημείου.", "sshpassRequired": "Απαιτείται Sshpass Για Πιστοποίηση Κωδικού Πρόσβασης", "sshpassRequiredDesc": "Για τον έλεγχο ταυτότητας κωδικού πρόσβασης σε σήραγγες, το sshpass πρέπει να εγκατασταθεί στο σύστημα.", "otherInstallMethods": "Άλλες μέθοδοι εγκατάστασης:", @@ -1529,7 +1551,7 @@ "splitVertical": "Κάθετος Διαχωρισμός", "closePanel": "Κλείσιμο Πίνακα", "reconnect": "Επανασύνδεση", - "sessionEnded": "Η Συνεδρία Έληξε", + "sessionEnded": "Η συνεδρία έληξε.", "connectionLost": "Η σύνδεση χάθηκε", "error": "ΣΦΑΛΜΑ: {{message}}", "disconnected": "Αποσυνδέθηκε", @@ -1933,22 +1955,10 @@ "ascending": "Αύξουσα", "descending": "Φθίνουσα" }, - "tunnel": { - "log": { - "connecting": "Δημιουργία σύνδεσης σήραγγας...", - "sourceConnecting": "Σύνδεση στον πηγαίο υπολογιστή {{host}}...", - "sourceConnected": "Συνδεδεμένο στον πηγαίο υπολογιστή", - "endpointResolving": "Επίλυση του κεντρικού υπολογιστή τελικού σημείου {{host}}...", - "endpointResolved": "Κεντρικός υπολογιστής τελικού σημείου επιλύθηκε", - "forwarding": "Ρύθμιση προώθησης θύρας {{localPort}} → {{remotePort}}...", - "connected": "Η σήραγγα δημιουργήθηκε επιτυχώς", - "retrying": "Η σύνδεση απέτυχε, προσπάθεια ξανά στο {{countdown}}s (προσπάθεια {{attempt}}/{{max}})...", - "retryExhausted": "Επιτεύχθηκαν μέγιστες προσπάθειες επανάληψης", - "error": "Η σύνδεση της σήραγγας απέτυχε: {{error}}" - } - }, "tunnels": { "title": "SSH Σήραγγες", + "noTunnelsConfigured": "Δεν Ρυθμίστηκαν Σήραγγες", + "configureTunnelsInHostSettings": "Ρυθμίστε τις συνδέσεις δρομολόγησης στο Host Manager για να ξεκινήσετε", "noSshTunnels": "Χωρίς SSH Tunnels", "createFirstTunnelMessage": "Δεν έχετε δημιουργήσει ακόμα SSH tunnel. Ρυθμίστε τις συνδέσεις tunnel στο Host Manager για να ξεκινήσετε.", "connected": "Συνδεδεμένο", @@ -1969,27 +1979,100 @@ "disconnect": "Αποσύνδεση", "cancel": "Ακύρωση", "port": "Θύρα", + "localPort": "Τοπική Θύρα", + "remotePort": "Απομακρυσμένη Θύρα", + "currentHostPort": "Τρέχουσα Θύρα Διακομιστή", + "endpointPort": "Θύρα Τελικού Σημείου", + "bindIp": "Τοπική IP", + "currentHostIp": "Τρέχουσα IP Διακομιστή", + "endpointSshConfig": "Ρύθμιση Τελικού Σημείου SSH", + "endpointSshConfigRequired": "Απαιτείται ρύθμιση παραμέτρων SSH τελικού σημείου", + "endpointSshHost": "Τελικός Διακομιστής SSH", + "endpointSshHostPlaceholder": "Επιλέξτε έναν ρυθμισμένο διακομιστή", + "endpointSshHostRequired": "Επιλέξτε έναν υπολογιστή SSH τελικού σημείου για κάθε δρομολόγηση υπολογιστή-πελάτη.", "attempt": "Προσπάθεια {{current}} του {{max}}", "nextRetryIn": "Επόμενη προσπάθεια σε {{seconds}} δευτερόλεπτα", "checkDockerLogs": "Ελέγξτε τα αρχεία καταγραφής Docker για το λόγο σφάλματος, μπείτε στο", "orCreate": "ή δημιουργήστε ένα ", "noTunnelConnections": "Δεν έχουν ρυθμιστεί συνδέσεις διοχέτευσης", "tunnelConnections": "Συνδέσεις Tunnel", + "serverTunnels": "Σήραγγες Διακομιστή", + "serverTunnelsDesc": "Οπισθοδιαχειριζόμενες σήραγγες αποθηκευμένες με αυτόν τον υπολογιστή.", + "clientTunnels": "Σήραγγες Πελάτη", + "clientTunnelsUnavailable": "Οι σήραγγες πελατών απαιτούν έναν υπολογιστή-πελάτη.", + "serverTunnel": "Tunnel Διακομιστή", + "clientTunnel": "Σήραγγα Πελάτη", + "addServerTunnel": "Προσθήκη Tunnel Διακομιστή", + "addClientTunnel": "Προσθήκη Σήραγγας Πελάτη", + "noServerTunnels": "Δεν έχουν ρυθμιστεί διοχέτευση διακομιστή.", + "noClientTunnels": "Δεν έχουν ρυθμιστεί σήραγγες πελάτη σε αυτήν την επιφάνεια εργασίας.", + "manageClientTunnels": "Διαχείριση Tunnels Πελάτη", "addTunnel": "Προσθήκη Tunnel", "editTunnel": "Επεξεργασία Σήραγγας", "deleteTunnel": "Διαγραφή Tunnel", "tunnelName": "Όνομα Tunnel", - "localPort": "Τοπική Θύρα", "remoteHost": "Απομακρυσμένος Διακομιστής", - "remotePort": "Απομακρυσμένη Θύρα", "autoStart": "Αυτόματη Εκκίνηση", + "autoStartContainer": "Αυτόματη εκκίνηση κατά την εκκίνηση", + "autoStartContainerDesc": "Αυτόματη εκκίνηση αυτής της διοχέτευσης όταν ο διακομιστής Termix ξεκινάει.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Ξεκινά όταν ανοίγει αυτός ο υπολογιστής-πελάτης και παραμένει συνδεδεμένος.", + "clientManualStartDesc": "Χρησιμοποιήστε Έναρξη και Διακοπή από αυτή τη σειρά. Το Termix δεν θα το ανοίξει αυτόματα.", + "clientRemoteServerNote": "Η απομακρυσμένη προώθηση μπορεί να απαιτεί AllowTcpForwarding και GatewayPorts στον εξυπηρετητή τελικού σημείου SSH. Η απομακρυσμένη θύρα κλείνει όταν αποσυνδέεται αυτή η επιφάνεια εργασίας.", + "clientTunnelStarted": "Η σήραγγα πελάτη ξεκίνησε", + "clientTunnelStopped": "Η σήραγγα πελάτη σταμάτησε", + "tunnelTestSucceeded": "Επιτυχής δοκιμή σήραγγας", + "tunnelTestFailed": "Η δοκιμή σήραγγας απέτυχε", + "localSaved": "Οι σήραγγες πελατών αποθηκεύτηκαν", + "localSaveError": "Αποτυχία αποθήκευσης τοπικών tunnels πελάτη", + "invalidBindIp": "Η τοπική IP πρέπει να είναι μια έγκυρη διεύθυνση IPv4.", + "invalidLocalTargetIp": "Το τοπικό IP προορισμού πρέπει να είναι μια έγκυρη διεύθυνση IPv4.", + "invalidCurrentHostIp": "Το IP κεντρικού υπολογιστή πρέπει να είναι μια έγκυρη διεύθυνση IPv4.", + "invalidLocalPort": "Η τοπική θύρα πρέπει να είναι μεταξύ 1 και 65535.", + "invalidRemotePort": "Η απομακρυσμένη θύρα πρέπει να είναι μεταξύ 1 και 65535.", + "invalidLocalTargetPort": "Η τοπική θύρα προορισμού πρέπει να είναι μεταξύ 1 και 65535.", + "invalidEndpointPort": "Ο λιμένας τελικού σημείου πρέπει να είναι μεταξύ 1 και 65535.", + "duplicateAutoStartBind": "Μόνο μία αυτόματη εκκίνηση tunnel πελάτη μπορεί να χρησιμοποιήσει το {{bind}}.", + "manualControlError": "Αποτυχία ενημέρωσης κατάστασης διοχέτευσης.", + "saveHostBeforeManualControl": "Αποθηκεύστε αυτόν τον κεντρικό υπολογιστή πριν από την εκκίνηση ή τη διακοπή των σηράγγων του διακομιστή.", "status": "Κατάσταση", "active": "Ενεργό", "inactive": "Ανενεργό", "start": "Έναρξη", "stop": "Διακοπή", + "test": "Δοκιμή", "restart": "Επανεκκίνηση", "connectionType": "Τύπος Σύνδεσης", + "type": "Τύπος Tunnel", + "typeLocal": "Τοπικό (-L)", + "typeRemote": "Απομακρυσμένο (-R)", + "typeDynamic": "Δυναμικό (-D)", + "typeServerLocalDesc": "Τρέχων υπολογιστής στο τελικό σημείο.", + "typeServerRemoteDesc": "Τελικό σημείο πίσω στον τρέχοντα υπολογιστή.", + "typeClientLocalDesc": "Τοπικός υπολογιστής στο τελικό σημείο.", + "typeClientRemoteDesc": "Τελικό σημείο πίσω στον τοπικό υπολογιστή.", + "typeClientDynamicDesc": "SOCKS στον τοπικό υπολογιστή.", + "typeDynamicDesc": "Προώθηση κίνησης SOCKS5 ΣΥΝΔΕΣΗΣ μέσω SSH", + "forwardDescriptionServerLocal": "Τρέχων κεντρικός υπολογιστής {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Τοπικό {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS στο τοπικό λιμάνι {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS μέσω {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} μέσω {{endpoint}}", + "route": "Διαδρομή:", + "lastStarted": "Τελευταία εκκίνηση", + "lastTested": "Τελευταία δοκιμή", + "lastError": "Τελευταίο σφάλμα", + "maxRetries": "Μέγιστες Επαναλήψεις", + "maxRetriesDescription": "Μέγιστος αριθμός προσπαθειών επανάληψης.", + "retryInterval": "Διάστημα Επανάληψη (δευτερόλεπτα)", + "retryIntervalDescription": "Χρόνος αναμονής μεταξύ προσπαθειών επανάληψης.", "local": "Τοπικό", "remote": "Απομακρυσμένο", "dynamic": "Δυναμικό", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Παρακαλώ δώστε τα SSH διαπιστευτήρια σας για να συνδεθείτε σε αυτόν το διακομιστή.", "sshPasswordDescription": "Εισάγετε τον κωδικό πρόσβασης για αυτή τη σύνδεση SSH.", "sshKeyPasswordDescription": "Αν το SSH κλειδί σας είναι κρυπτογραφημένο, εισάγετε εδώ τη φράση πρόσβασης.", + "passphraseRequired": "Απαιτείται Συνθηματική φράση", + "passphraseRequiredDescription": "Το SSH κλειδί είναι κρυπτογραφημένο. Παρακαλώ εισάγετε τη φράση πρόσβασης για να το ξεκλειδώσετε.", "step1ScanQR": "Βήμα 1: Σαρώστε τον κωδικό QR με την εφαρμογή ελέγχου ταυτότητας", "manualEntryCode": "Χειροκίνητος Κώδικας Εισόδου", "cannotScanQRText": "Αν δεν μπορείτε να σαρώσετε τον κωδικό QR, πληκτρολογήστε αυτόν τον κωδικό χειροκίνητα στην εφαρμογή ελέγχου ταυτότητας", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Αποτυχία ολοκλήρωσης της επαναφοράς κωδικού πρόσβασης", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Αποτυχία έναρξης σύνδεσης OIDC", - "failedUserInfo": "Αποτυχία λήψης πληροφοριών χρήστη μετά την σύνδεση OIDC", + "failedUserInfo": "Αποτυχία λήψης πληροφοριών χρήστη μετά τη σύνδεση", "oidcAuthFailed": "Αποτυχία ταυτοποίησης OIDC", "noTokenReceived": "Δεν ελήφθη κανένα διακριτικό από τη σύνδεση", "invalidAuthUrl": "Μη έγκυρη έγκριση URL λήφθηκε από το σύστημα υποστήριξης", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Εμφάνιση ετικετών σε κάθε κεντρικό υπολογιστή στην πλαϊνή μπάρα. Απενεργοποιήστε για να αποκρύψετε όλες τις ετικέτες.", "account": "Λογαριασμός", "appearance": "Εμφάνιση", + "c2sTunnelConfigDesc": "Τοπικές σήραγγες επιφάνειας εργασίας με στόχο ρυθμισμένους SSH υπολογιστές.", + "c2sTunnelPresets": "Προεπιλογές Tunnel Πελάτη", + "c2sTunnelPresetsDesc": "Αποθήκευση της τοπικής λίστας διοχέτευσης αυτού του υπολογιστή-πελάτη γραφείου ως μια καθορισμένη προεπιλογή διακομιστή ή φόρτωση μιας προκαθορισμένης ρύθμισης σε αυτόν τον υπολογιστή-πελάτη.", + "c2sTunnelPresetsUnavailable": "Οι προεπιλογές διοχέτευσης πελάτη είναι διαθέσιμες μόνο στην επιφάνεια εργασίας προγράμματος-πελάτη.", + "c2sPresetName": "Προκαθορισμένο Όνομα", + "c2sPresetNamePlaceholder": "Προκαθορισμένο όνομα πελάτη", + "c2sPresetToLoad": "Προκαθορισμένο Για Φόρτωση", + "c2sNoPresetSelected": "Δεν επιλέχθηκε προεπιλογή", + "c2sNoPresets": "Δεν αποθηκεύτηκαν προεπιλογές", + "c2sLoadPreset": "Φόρτωση", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Οι προεπιλογές είναι σαφείς στιγμιότυπα. Η φόρτωση μιας αντικαθιστά την τοπική λίστα tunnel πελάτη της επιφάνειας εργασίας.", + "c2sPresetSaved": "Η προκαθορισμένη ρύθμιση δρομολόγησης πελάτη αποθηκεύτηκε", + "c2sPresetLoaded": "Τοπικά φορτισμένη σήραγγα πελάτη", + "c2sPresetRenamed": "Η προκαθορισμένη ρύθμιση δρομολόγησης πελάτη μετονομάστηκε", + "c2sPresetDeleted": "Η προκαθορισμένη ρύθμιση δρομολόγησης πελάτη διαγράφηκε", + "c2sPresetLoadError": "Αποτυχία φόρτωσης προεπιλογών tunnel πελάτη", "languageLocalization": "Γλώσσα & Τοπικοποίηση", "fileManagerSettings": "Διαχειριστής Αρχείων", "terminalSettings": "Τερματικό", @@ -2370,6 +2472,10 @@ "description": "Περιγραφή διαπιστευτηρίων SSH", "searchCredentials": "Αναζήτηση διαπιστευτηρίων με βάση όνομα, όνομα χρήστη ή ετικέτες...", "sshConfig": "ρύθμιση τελικού σημείου ssh", + "bindLocalhost": "127.0.0.1 (δέσμευση σε localhost)", + "localListenerHost": "127.0.0.1 (ακούστε τοπικά)", + "localTargetHost": "127.0.0.1 (στόχος σε αυτόν τον υπολογιστή)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/οικία", "clientId": "το δικό σας-πελάτη", "clientSecret": "σας-πελάτης-μυστικό", @@ -2549,6 +2655,7 @@ "version": "Έκδοση", "upToDate": "Έως την ημερομηνία", "updateAvailable": "Διαθέσιμη Ενημέρωση", + "beta": "Βήτα", "uptime": "Χρόνος", "database": "Βάση Δεδομένων", "healthy": "Υγιείς", @@ -2955,6 +3062,20 @@ "error": "Η συλλογή μετρήσεων απέτυχε: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Δημιουργία σύνδεσης σήραγγας...", + "sourceConnecting": "Σύνδεση στον πηγαίο υπολογιστή {{host}}...", + "sourceConnected": "Συνδεδεμένο στον πηγαίο υπολογιστή", + "endpointResolving": "Επίλυση του κεντρικού υπολογιστή τελικού σημείου {{host}}...", + "endpointResolved": "Κεντρικός υπολογιστής τελικού σημείου επιλύθηκε", + "forwarding": "Ρύθμιση προώθησης θύρας {{localPort}} → {{remotePort}}...", + "connected": "Η σήραγγα δημιουργήθηκε επιτυχώς", + "retrying": "Η σύνδεση απέτυχε, προσπάθεια ξανά στο {{countdown}}s (προσπάθεια {{attempt}}/{{max}})...", + "retryExhausted": "Επιτεύχθηκαν μέγιστες προσπάθειες επανάληψης", + "error": "Η σύνδεση της σήραγγας απέτυχε: {{error}}" + } + }, "sftp": { "log": { "connecting": "Σύνδεση σε διακομιστή SFTP...", diff --git a/src/locales/translated/es_ES.json b/src/locales/translated/es_ES.json index 2d8e3c17..8dbcec92 100644 --- a/src/locales/translated/es_ES.json +++ b/src/locales/translated/es_ES.json @@ -402,6 +402,8 @@ "currentVersion": "Estás ejecutando la versión {{version}}", "updateAvailable": "Actualización disponible", "newVersionAvailable": "¡Una nueva versión está disponible! Estás usando {{current}}, pero {{latest}} está disponible.", + "betaVersion": "Versión beta", + "betaVersionDesc": "Está ejecutando {{current}}, que es más reciente que la última versión estable {{latest}}.", "releasedOn": "Liberado en {{date}}", "downloadUpdate": "Descargar actualización", "dismiss": "Descartar", @@ -426,6 +428,8 @@ "warning": "Advertencia", "info": "Info", "success": "Éxito", + "unsavedChanges": "Cambios sin guardar", + "dismiss": "Descartar", "loading": "Cargando...", "required": "Requerido", "optional": "Opcional", @@ -471,6 +475,7 @@ "chinese": "Chino", "german": "Alemán", "cancel": "Cancelar", + "done": "Hecho", "username": "Usuario", "name": "Nombre", "login": "Ingresar", @@ -486,6 +491,7 @@ "save": "Guardar", "saving": "Guardando...", "delete": "Eliminar", + "rename": "Renombrar", "edit": "Editar", "add": "Añadir", "search": "Buscar", @@ -559,7 +565,8 @@ "passwordCopied": "Contraseña copiada al portapapeles", "sudoPasswordCopied": "Contraseña de Sudo copiada al portapapeles", "noPasswordAvailable": "Contraseña no disponible", - "failedToCopyPassword": "Error al copiar la contraseña" + "failedToCopyPassword": "Error al copiar la contraseña", + "openFileManager": "Abrir gestor de archivos" }, "admin": { "title": "Configuración de Admin", @@ -868,7 +875,42 @@ "passwordMinLength": "La contraseña debe tener al menos 6 caracteres", "currentRoles": "Roles actuales", "noRolesAssigned": "No hay roles asignados", - "assignNewRole": "Asignar nuevo rol" + "assignNewRole": "Asignar nuevo rol", + "apiKeys": { + "tabLabel": "Claves API", + "title": "Claves API", + "createApiKey": "Crear Clave API", + "createApiKeyDescription": "Crear una nueva clave API con alcance para un usuario específico. El token se muestra una sola vez.", + "keyCreated": "Clave API creada", + "keyCreatedDescription": "Copie esta clave ahora — no se mostrará de nuevo.", + "keyName": "Nombre clave", + "keyNamePlaceholder": "ej. Pipeline CI/CD", + "scopedUser": "Usuario de ámbito", + "selectUser": "Seleccione un usuario...", + "searchUsers": "Buscar usuarios...", + "noUsersFound": "No se encontraron usuarios.", + "expiresAt": "Caduca el", + "optional": "opcional", + "expiresAtHelp": "Dejar vacío para una clave que nunca expire.", + "copyWarningTitle": "Guarda tu clave API", + "copyWarningDescription": "Esta clave sólo se mostrará una vez. Guárdelo en un lugar seguro.", + "apiKey": "Clave API", + "tokenCopied": "Token copiado al portapapeles", + "creating": "Creando...", + "nameRequired": "Se requiere nombre de clave", + "userRequired": "Por favor, seleccione un usuario", + "failedToCreate": "Error al crear la clave API", + "noKeys": "No se encontraron claves API.", + "name": "Nombre", + "prefix": "Prefijo", + "lastUsed": "Último uso", + "never": "Nunca", + "revokeKey": "Revocar clave", + "confirmRevoke": "¿Está seguro de que desea revocar la clave de API \"{{name}}\"? Esto no se puede deshacer.", + "revokedSuccessfully": "Clave API revocada con éxito", + "failedToRevoke": "Error al revocar la clave API", + "failedToFetch": "No se pudo obtener las claves API" + } }, "hosts": { "title": "Gestor de Anfitriones", @@ -962,28 +1004,8 @@ "enableDocker": "Activar Docker", "defaultPath": "Ruta por defecto", "defaultPathDesc": "Directorio predeterminado al abrir el gestor de archivos para este host", - "tunnelConnections": "Conexiones de túnel", "connection": "Conexión", "remove": "Eliminar", - "sourcePort": "Puerto de origen", - "sourcePortDesc": " (El canal se refiere a los detalles de la conexión actual en la pestaña General)", - "endpointPort": "Puerto final", - "endpointSshConfig": "Configuración SSSH de punto final", - "tunnelForwardDescription": "Este túnel redirigirá el tráfico desde el puerto {{sourcePort}} en la máquina fuente (los detalles de conexión actuales en la pestaña general) al puerto {{endpointPort}} en la máquina de endpoint.", - "maxRetries": "Reintentos máximos", - "maxRetriesDescription": "Número máximo de intentos de reintento para la conexión del túnel.", - "retryInterval": "Intervalo de reintento (segundos)", - "retryIntervalDescription": "Tiempo de espera entre intentos de reintento.", - "autoStartContainer": "Inicio automático en el lanzamiento del contenedor", - "autoStartDesc": "Iniciar automáticamente este túnel cuando el contenedor se ejecuta", - "addConnection": "Añadir conexión de túnel", - "tunnelType": "Tipo de túnel", - "tunnelTypeLocal": "Local (-L)", - "tunnelTypeRemote": "Remoto (-R)", - "tunnelTypeLocalDesc": "Reenviar puerto local al extremo remoto", - "tunnelTypeRemoteDesc": "Reenviar puerto remoto a máquina local", - "tunnelForwardDescriptionLocal": "Este túnel redirigirá el tráfico desde el puerto local {{sourcePort}} al puerto {{endpointPort}} en la máquina endpoint.", - "tunnelForwardDescriptionRemote": "Este túnel redirigirá el tráfico desde el puerto {{sourcePort}} en la máquina fuente (los detalles de conexión actuales en la pestaña general) al puerto {{endpointPort}} en la máquina de endpoint.", "sshpassRequired": "Sshpass requerido para la autenticación de contraseña", "sshpassRequiredDesc": "Para la autenticación de contraseña en túneles, sshpass debe estar instalado en el sistema.", "otherInstallMethods": "Otros métodos de instalación:", @@ -1529,7 +1551,7 @@ "splitVertical": "Dividir vertical", "closePanel": "Cerrar panel", "reconnect": "Volver a conectar", - "sessionEnded": "Sesión finalizada", + "sessionEnded": "Sesión finalizada.", "connectionLost": "Conexión perdida", "error": "ERROR: {{message}}", "disconnected": "Desconectado", @@ -1933,22 +1955,10 @@ "ascending": "Ascendente", "descending": "Descendente" }, - "tunnel": { - "log": { - "connecting": "Estableciendo conexión de túnel...", - "sourceConnecting": "Conectando al host fuente {{host}}...", - "sourceConnected": "Conectado al host fuente", - "endpointResolving": "Resolviendo host de endpoint {{host}}...", - "endpointResolved": "Host de punto final resuelto", - "forwarding": "Configurando el reenvío de puertos {{localPort}} → {{remotePort}}...", - "connected": "Túnel establecido con éxito", - "retrying": "Conexión fallida, reintentando en {{countdown}}s (intento {{attempt}}/{{max}})...", - "retryExhausted": "Máximo de intentos de reintento alcanzado", - "error": "Conexión de túnel fallida: {{error}}" - } - }, "tunnels": { "title": "Túneles SSH", + "noTunnelsConfigured": "No hay túneles configurados", + "configureTunnelsInHostSettings": "Configurar conexiones de túnel en el Administrador de Equipos para comenzar", "noSshTunnels": "No hay túneles SSH", "createFirstTunnelMessage": "No has creado ningún túnel SSH todavía. Configura conexiones de túnel en el Administrador de Equipos para empezar.", "connected": "Conectado", @@ -1969,27 +1979,100 @@ "disconnect": "Desconectar", "cancel": "Cancelar", "port": "Puerto", + "localPort": "Puerto local", + "remotePort": "Puerto remoto", + "currentHostPort": "Puerto actual de host", + "endpointPort": "Puerto final", + "bindIp": "IP local", + "currentHostIp": "IP actual del Host", + "endpointSshConfig": "Configuración SSSH de punto final", + "endpointSshConfigRequired": "Se requiere configuración SSH de punto final", + "endpointSshHost": "Host SSH de punto final", + "endpointSshHostPlaceholder": "Seleccione un host configurado", + "endpointSshHostRequired": "Seleccione un endpoint SSH host para cada túnel de cliente.", "attempt": "Intento {{current}} de {{max}}", "nextRetryIn": "Siguiente reintento en {{seconds}} segundos", "checkDockerLogs": "Comprueba tus registros de Docker por la razón del error, únete a", "orCreate": "o crear un ", "noTunnelConnections": "No hay conexiones de túnel configuradas", "tunnelConnections": "Conexiones de túnel", + "serverTunnels": "Túneles de servidor", + "serverTunnelsDesc": "Túneles administrados en backend almacenados con este host.", + "clientTunnels": "Túneles de cliente", + "clientTunnelsUnavailable": "Túneles de clientes requieren un cliente de escritorio.", + "serverTunnel": "Túnel de Servidor", + "clientTunnel": "Túnel de cliente", + "addServerTunnel": "Añadir túnel de servidor", + "addClientTunnel": "Añadir túnel de cliente", + "noServerTunnels": "No hay túneles de servidor configurados.", + "noClientTunnels": "No hay túneles de cliente configurados en este ordenador.", + "manageClientTunnels": "Administrar túneles de cliente", "addTunnel": "Añadir túnel", "editTunnel": "Editar túnel", "deleteTunnel": "Eliminar túnel", "tunnelName": "Nombre del túnel", - "localPort": "Puerto local", "remoteHost": "Host remoto", - "remotePort": "Puerto remoto", "autoStart": "Auto inicio", + "autoStartContainer": "Inicio automático en el lanzamiento", + "autoStartContainerDesc": "Iniciar automáticamente este túnel cuando se inicia el servidor de Termix.", + "autoStartEnableFailed": "Host guardado, pero no se pudo iniciar túneles de autoarranque para {{name}}.", + "clientAutoStartDesc": "Se inicia cuando este cliente de escritorio se abre y permanece conectado.", + "clientManualStartDesc": "Usar Inicio y Detener de esta fila. Termix no lo abrirá automáticamente.", + "clientRemoteServerNote": "El reenvío remoto puede requerir AllowTcpForwarding y GatewayPorts en el servidor SSH. El puerto remoto se cierra cuando este escritorio se desconecta.", + "clientTunnelStarted": "Túnel de cliente iniciado", + "clientTunnelStopped": "Túnel de cliente detenido", + "tunnelTestSucceeded": "Prueba de túnel exitosa", + "tunnelTestFailed": "Prueba de túnel fallida", + "localSaved": "Túneles de cliente guardados", + "localSaveError": "Error al guardar túneles de cliente locales", + "invalidBindIp": "IP local debe ser una dirección IPv4 válida.", + "invalidLocalTargetIp": "IP de destino local debe ser una dirección IPv4 válida.", + "invalidCurrentHostIp": "La IP actual del host debe ser una dirección IPv4 válida.", + "invalidLocalPort": "El puerto local debe estar entre 1 y 65535.", + "invalidRemotePort": "Puerto remoto debe estar entre 1 y 65535.", + "invalidLocalTargetPort": "El puerto local destino debe estar entre 1 y 65535.", + "invalidEndpointPort": "El puerto de punto final debe estar entre 1 y 65535.", + "duplicateAutoStartBind": "Sólo un túnel de cliente de autoarranque puede usar {{bind}}.", + "manualControlError": "Error al actualizar el estado del túnel.", + "saveHostBeforeManualControl": "Guardar este host antes de iniciar o detener sus túneles de servidor.", "status": "Estado", "active": "Activo", "inactive": "Inactivo", "start": "Comenzar", "stop": "Parar", + "test": "Prueba", "restart": "Reiniciar", "connectionType": "Tipo de conexión", + "type": "Tipo de túnel", + "typeLocal": "Local (-L)", + "typeRemote": "Remoto (-R)", + "typeDynamic": "Dinámica (-D)", + "typeServerLocalDesc": "Anfitrión actual al final.", + "typeServerRemoteDesc": "Volver al punto final al host actual.", + "typeClientLocalDesc": "Ordenador local al final.", + "typeClientRemoteDesc": "Vuelve al punto final al ordenador local.", + "typeClientDynamicDesc": "SOCKS en el ordenador local.", + "typeDynamicDesc": "Reenviar tráfico CONNECT SOCKS5 a través de SSH", + "forwardDescriptionServerLocal": "Hosting actual {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → host actual {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS en el host actual {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remoto {{endpointPort}}.", + "forwardDescriptionClientRemote": "{{sourcePort}} remoto → {{endpointPort}} local .", + "forwardDescriptionClientDynamic": "SOCKS en el puerto local {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS vía {{endpoint}}", + "autoNameClientLocal": "{{localPort}} local → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → {{localPort}} local", + "autoNameClientDynamic": "SOCKS {{localPort}} vía {{endpoint}}", + "route": "Ruta:", + "lastStarted": "Último inicio", + "lastTested": "Última prueba", + "lastError": "Último error", + "maxRetries": "Reintentos máximos", + "maxRetriesDescription": "Cantidad máxima de intentos de reintento.", + "retryInterval": "Intervalo de reintento (segundos)", + "retryIntervalDescription": "Tiempo de espera entre intentos de reintento.", "local": "Local", "remote": "Remoto", "dynamic": "Dinámica", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Por favor, proporcione sus credenciales SSH para conectarse a este servidor.", "sshPasswordDescription": "Introduzca la contraseña para esta conexión SSH.", "sshKeyPasswordDescription": "Si su clave SSH está cifrada, introduzca la contraseña aquí.", + "passphraseRequired": "Contraseña requerida", + "passphraseRequiredDescription": "La clave SSH está cifrada. Por favor, introduzca la contraseña para desbloquearla.", "step1ScanQR": "Paso 1: Escanea el código QR con tu aplicación de autenticación", "manualEntryCode": "Código de entrada manual", "cannotScanQRText": "Si no puedes escanear el código QR, introduce este código manualmente en tu aplicación de autenticación", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Error al restablecer la contraseña", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Error al iniciar inicio de sesión OIDC", - "failedUserInfo": "Error al obtener la información del usuario después del inicio de sesión OIDC", + "failedUserInfo": "Error al obtener la información del usuario después de iniciar sesión", "oidcAuthFailed": "Autenticación OIDC fallida", "noTokenReceived": "No se ha recibido ningún token de inicio de sesión", "invalidAuthUrl": "URL de autorización no válida recibida del backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Mostrar etiquetas bajo cada host en la barra lateral. Desactivar para ocultar todas las etiquetas.", "account": "Cuenta", "appearance": "Apariencia", + "c2sTunnelConfigDesc": "Túneles de escritorio locales dirigidos a hosts SSH configurados.", + "c2sTunnelPresets": "Ajustes de túnel de cliente", + "c2sTunnelPresetsDesc": "Guarde la lista de túneles locales de este cliente de escritorio como un preset de servidor nombrado, o cargue un preset de nuevo en este cliente.", + "c2sTunnelPresetsUnavailable": "Los ajustes predeterminados del túnel de cliente sólo están disponibles en el cliente de escritorio.", + "c2sPresetName": "Nombre predefinido", + "c2sPresetNamePlaceholder": "Nombre predefinido del cliente", + "c2sPresetToLoad": "Preseleccionar para cargar", + "c2sNoPresetSelected": "Ningún preset seleccionado", + "c2sNoPresets": "No hay preajustes guardados", + "c2sLoadPreset": "Cargar", + "c2sCurrentLocalConfig": "{{count}} túnel(s) de cliente local configurado en este escritorio.", + "c2sPresetSyncNote": "Los ajustes predeterminados son instantáneas explícitas; la carga de uno reemplaza la lista de túneles de clientes locales de este cliente de escritorio.", + "c2sPresetSaved": "Preajuste de túnel de cliente guardado", + "c2sPresetLoaded": "Túnel de cliente preestablecido cargado localmente", + "c2sPresetRenamed": "Preajuste de túnel de cliente renombrado", + "c2sPresetDeleted": "Preajuste de túnel de cliente eliminado", + "c2sPresetLoadError": "Error al cargar los ajustes predeterminados del túnel del cliente", "languageLocalization": "Idioma y localización", "fileManagerSettings": "Gestor de archivos", "terminalSettings": "Terminal", @@ -2370,6 +2472,10 @@ "description": "Descripción de credencial SSH", "searchCredentials": "Buscar credenciales por nombre, nombre de usuario o etiquetas...", "sshConfig": "configuración de endpoint ssh", + "bindLocalhost": "127.0.0.1 (enlazar a localhost)", + "localListenerHost": "127.0.0.1 (escuchar localmente)", + "localTargetHost": "127.0.0.1 (objetivo en este ordenador)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/home", "clientId": "su-cliente-id", "clientSecret": "su-cliente-secreto-", @@ -2549,6 +2655,7 @@ "version": "Versión", "upToDate": "Hasta la fecha", "updateAvailable": "Actualización disponible", + "beta": "Beta", "uptime": "Actualización", "database": "Base de datos", "healthy": "Saludable", @@ -2955,6 +3062,20 @@ "error": "Error en la recolección de métricas: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Estableciendo conexión de túnel...", + "sourceConnecting": "Conectando al host fuente {{host}}...", + "sourceConnected": "Conectado al host fuente", + "endpointResolving": "Resolviendo host de endpoint {{host}}...", + "endpointResolved": "Host de punto final resuelto", + "forwarding": "Configurando el reenvío de puertos {{localPort}} → {{remotePort}}...", + "connected": "Túnel establecido con éxito", + "retrying": "Conexión fallida, reintentando en {{countdown}}s (intento {{attempt}}/{{max}})...", + "retryExhausted": "Máximo de intentos de reintento alcanzado", + "error": "Conexión de túnel fallida: {{error}}" + } + }, "sftp": { "log": { "connecting": "Conectando al servidor SFTP...", diff --git a/src/locales/translated/fi_FI.json b/src/locales/translated/fi_FI.json index dc1ae791..71a5a7c7 100644 --- a/src/locales/translated/fi_FI.json +++ b/src/locales/translated/fi_FI.json @@ -402,6 +402,8 @@ "currentVersion": "Käytössäsi on versio {{version}}", "updateAvailable": "Päivitys Saatavilla", "newVersionAvailable": "Uusi versio on saatavilla! Käytät {{current}}, mutta {{latest}} on saatavilla.", + "betaVersion": "Beta Versio", + "betaVersionDesc": "Käytössäsi on {{current}}, joka on uudempi kuin uusin vakaa julkaisu {{latest}}.", "releasedOn": "Julkaistu {{date}}", "downloadUpdate": "Lataa Päivitys", "dismiss": "Hylkää", @@ -426,6 +428,8 @@ "warning": "Varoitus", "info": "Tiedot", "success": "Onnistui", + "unsavedChanges": "Tallentamattomat muutokset", + "dismiss": "Hylkää", "loading": "Ladataan...", "required": "Pakollinen", "optional": "Valinnainen", @@ -471,6 +475,7 @@ "chinese": "Kiina", "german": "Saksa", "cancel": "Peruuta", + "done": "Valmis", "username": "Käyttäjätunnus", "name": "Nimi", "login": "Kirjaudu", @@ -486,6 +491,7 @@ "save": "Tallenna", "saving": "Tallennetaan...", "delete": "Poista", + "rename": "Uudelleennimeä", "edit": "Muokkaa", "add": "Lisää", "search": "Etsi", @@ -559,7 +565,8 @@ "passwordCopied": "Salasana kopioitu leikepöydälle", "sudoPasswordCopied": "Sudo salasana kopioitu leikepöydälle", "noPasswordAvailable": "Salasanaa ei ole saatavilla", - "failedToCopyPassword": "Salasanan kopiointi epäonnistui" + "failedToCopyPassword": "Salasanan kopiointi epäonnistui", + "openFileManager": "Avaa Tiedostonhallinta" }, "admin": { "title": "Ylläpitäjän Asetukset", @@ -868,7 +875,42 @@ "passwordMinLength": "Salasanan on oltava vähintään 6 merkkiä", "currentRoles": "Nykyiset Roolit", "noRolesAssigned": "Rooleja ei määritetty", - "assignNewRole": "Määritä Uusi Rooli" + "assignNewRole": "Määritä Uusi Rooli", + "apiKeys": { + "tabLabel": "Api Avaimet", + "title": "Api Avaimet", + "createApiKey": "Luo API-avain", + "createApiKeyDescription": "Luo uusi API-avain, joka on määritelty tietylle käyttäjälle. Tunnus näytetään vain kerran.", + "keyCreated": "Api Avain Luotu", + "keyCreatedDescription": "Kopioi tämä avain nyt — sitä ei näytetä uudelleen.", + "keyName": "Avaimen Nimi", + "keyNamePlaceholder": "esim. CI/CD Pipeline", + "scopedUser": "Poistettu Käyttäjä", + "selectUser": "Valitse käyttäjä...", + "searchUsers": "Etsi käyttäjiä...", + "noUsersFound": "Käyttäjiä ei löytynyt.", + "expiresAt": "Vanhenee", + "optional": "valinnainen", + "expiresAtHelp": "Jätä tyhjäksi avaimelle, joka ei ikinä vanhene.", + "copyWarningTitle": "Tallenna API-avaimesi", + "copyWarningDescription": "Tämä avain näytetään vain kerran. Säilytä se turvallisessa paikassa.", + "apiKey": "Api Avain", + "tokenCopied": "Token kopioitu leikepöydälle", + "creating": "Luodaan...", + "nameRequired": "Avaimen nimi vaaditaan", + "userRequired": "Ole hyvä ja valitse käyttäjä", + "failedToCreate": "API-avaimen luonti epäonnistui", + "noKeys": "API-avaimia ei löytynyt.", + "name": "Nimi", + "prefix": "Etuliite", + "lastUsed": "Viimeksi Käytetty", + "never": "Ei Koskaan", + "revokeKey": "Peruuta avain", + "confirmRevoke": "Oletko varma, että haluat peruuttaa API-avaimen \"{{name}}\"? Tätä ei voi perua.", + "revokedSuccessfully": "API-avain kumottu onnistuneesti", + "failedToRevoke": "API-avaimen peruuttaminen epäonnistui", + "failedToFetch": "API-avainten noutaminen epäonnistui" + } }, "hosts": { "title": "Isäntälaitteen Hallinta", @@ -962,28 +1004,8 @@ "enableDocker": "Ota Docker Käyttöön", "defaultPath": "Oletus Polku", "defaultPathDesc": "Oletushakemisto, kun avataan tiedostonhallintaohjelmaa tälle palvelimelle", - "tunnelConnections": "Tunneliyhteydet", "connection": "Yhteys", "remove": "Poista", - "sourcePort": "Lähde Portti", - "sourcePortDesc": " (Lähdöllä tarkoitetaan yleisen välilehden nykyisiä yhteystietoja.)", - "endpointPort": "Päätepisteen Portti", - "endpointSshConfig": "Päätepisteen Ssh Asetukset", - "tunnelForwardDescription": "Tämä tunneli siirtää liikennettä satamasta {{sourcePort}} lähdekoneella (nykyisen yhteyden tiedot yleensä välilehdessä) porttiin {{endpointPort}} päätepistekoneella.", - "maxRetries": "Maksimi Uudelleen", - "maxRetriesDescription": "Enimmäismäärä uudelleen kokeilevia yrityksiä tunneliyhteyttä varten.", - "retryInterval": "Uudelleen Aikaväli (Sekuntia)", - "retryIntervalDescription": "Aika odottaa yritysten uudelleenkokeilun välillä.", - "autoStartContainer": "Käynnistä automaattisesti kontin käynnistyksessä", - "autoStartDesc": "Käynnistä tämä tunneli automaattisesti kontin käynnistyessä", - "addConnection": "Lisää Tunneliyhteys", - "tunnelType": "Tunnelin Tyyppi", - "tunnelTypeLocal": "Paikallinen (-L)", - "tunnelTypeRemote": "Etäkäyttö (-R)", - "tunnelTypeLocalDesc": "Välitä paikallinen portti etäpäätepisteeseen", - "tunnelTypeRemoteDesc": "Välitä etäportti paikalliseen koneeseen", - "tunnelForwardDescriptionLocal": "Tämä tunneli siirtää liikennettä paikallisesta portista {{sourcePort}} porttiin {{endpointPort}} päätepistekoneella.", - "tunnelForwardDescriptionRemote": "Tämä tunneli siirtää liikennettä satamasta {{sourcePort}} lähdekoneella (nykyisen yhteyden tiedot yleensä välilehdessä) porttiin {{endpointPort}} päätepistekoneella.", "sshpassRequired": "Sshpassi Vaaditaan Salasanan Todentamiseksi", "sshpassRequiredDesc": "Jotta salasanan todennus tunneleissa, sshpass on asennettava järjestelmään.", "otherInstallMethods": "Muut asennusmenetelmät:", @@ -1529,7 +1551,7 @@ "splitVertical": "Jaa pystysuunnassa", "closePanel": "Sulje paneeli", "reconnect": "Yhdistä uudelleen", - "sessionEnded": "Istunto päättyi", + "sessionEnded": "Istunto päättyi.", "connectionLost": "Yhteys katkesi", "error": "VIRHE: {{message}}", "disconnected": "Yhteys Katkaistu", @@ -1933,22 +1955,10 @@ "ascending": "Nouseva", "descending": "Laskeva" }, - "tunnel": { - "log": { - "connecting": "Luodaan tunneliyhteyttä...", - "sourceConnecting": "Yhdistetään lähteen isäntään {{host}}...", - "sourceConnected": "Yhdistetty lähteen palvelimeen", - "endpointResolving": "Selvitetään päätepisteen isäntää {{host}}...", - "endpointResolved": "Päätepisteen isäntä ratkaistu", - "forwarding": "Portinsiirron määrittäminen {{localPort}} → {{remotePort}}...", - "connected": "Tunneli muodostettu onnistuneesti", - "retrying": "Yhteys epäonnistui, yritetään uudelleen {{countdown}}s kuluttua (yritys {{attempt}}/{{max}})...", - "retryExhausted": "Enimmäismäärä uudelleenyrityksiä saavutettu", - "error": "Tunneliyhteys epäonnistui: {{error}}" - } - }, "tunnels": { "title": "SSH-tunnelit", + "noTunnelsConfigured": "Tunneleita Ei Määritetty", + "configureTunnelsInHostSettings": "Määritä tunneliyhteydet isäntäpäällikössä aloittaaksesi sen", "noSshTunnels": "Ei SSH-tunneleita", "createFirstTunnelMessage": "Et ole vielä luonut SSH-tunneleita. Aloita määrittämällä tunneliyhteydet Host Managerissa.", "connected": "Yhdistetty", @@ -1969,27 +1979,100 @@ "disconnect": "Katkaise yhteys", "cancel": "Peruuta", "port": "Portti", + "localPort": "Paikallinen satama", + "remotePort": "Etäportti", + "currentHostPort": "Nykyinen Isäntäportti", + "endpointPort": "Päätepisteen Portti", + "bindIp": "Paikallinen IP-osoite", + "currentHostIp": "Nykyinen Isäntä Ip", + "endpointSshConfig": "Päätepisteen Ssh Asetukset", + "endpointSshConfigRequired": "Päätepisteen SSH asetukset vaaditaan", + "endpointSshHost": "Päätepiste SSH Isäntä", + "endpointSshHostPlaceholder": "Valitse määritetty isäntä", + "endpointSshHostRequired": "Valitse päätepiste SSH isäntä jokaiselle asiakkaan tunneli.", "attempt": "Yritys {{current}} / {{max}}", "nextRetryIn": "Seuraava retry {{seconds}} sekunnissa", "checkDockerLogs": "Tarkista virheen syy Docker-lokeistasi ja liity", "orCreate": "tai luo ", "noTunnelConnections": "Tunneliyhteyksiä ei ole määritetty", "tunnelConnections": "Tunneliyhteydet", + "serverTunnels": "Palvelimen Tunnelit", + "serverTunnelsDesc": "Backend-hallinnoidut tunnelit tallennettu tällä isäntä.", + "clientTunnels": "Asiakkaan Tunnelit", + "clientTunnelsUnavailable": "Asiakastunnelit vaativat työpöytäsovelluksen.", + "serverTunnel": "Palvelimen Tunneli", + "clientTunnel": "Asiakkaan Tunneli", + "addServerTunnel": "Lisää Palvelimen Tunneli", + "addClientTunnel": "Lisää Asiakastunneli", + "noServerTunnels": "Palvelimen tunneleita ei ole määritetty.", + "noClientTunnels": "Tällä työpöydällä ei ole määritettyjä asiakastunneleita.", + "manageClientTunnels": "Hallitse Asiakastunneleita", "addTunnel": "Lisää tunneli", "editTunnel": "Muokkaa tunnelia", "deleteTunnel": "Poista tunneli", "tunnelName": "Tunnelin nimi", - "localPort": "Paikallinen satama", "remoteHost": "Etäisäntä", - "remotePort": "Etäportti", "autoStart": "Automaattinen käynnistys", + "autoStartContainer": "Aloita automaattisesti käynnistyksessä", + "autoStartContainerDesc": "Käynnistä tämä tunneli automaattisesti, kun Termix-palvelin käynnistää.", + "autoStartEnableFailed": "Isäntä tallennettu, mutta ei käynnistänyt automaattista käynnistystä tunneleille {{name}}.", + "clientAutoStartDesc": "Aloittaa kun työpöytäohjelma avautuu ja pysyy kytkettynä.", + "clientManualStartDesc": "Käytä Käynnistä ja lopeta tämä rivi. Termix ei avaa sitä automaattisesti.", + "clientRemoteServerNote": "Etäsiirto saattaa vaatia AllowTcpForwarding ja GatewayPorts päätepisteessä SSH-palvelimella. Etäsiirros sulkeutuu kun työpöytä irrotetaan.", + "clientTunnelStarted": "Asiakkaan tunneli aloitettu", + "clientTunnelStopped": "Asiakkaan tunneli pysäytetty", + "tunnelTestSucceeded": "Tunnelin testi onnistui", + "tunnelTestFailed": "Tunnelitesti epäonnistui", + "localSaved": "Asiakastunnelit tallennettu", + "localSaveError": "Paikallisten asiakastunneleiden tallennus epäonnistui", + "invalidBindIp": "Paikallisen IP-osoitteen on oltava kelvollinen IPv4-osoite.", + "invalidLocalTargetIp": "Paikallisen kohteen IP-osoitteen on oltava kelvollinen IPv4-osoite.", + "invalidCurrentHostIp": "Nykyisen isäntäosoitteen on oltava kelvollinen IPv4-osoite.", + "invalidLocalPort": "Paikallinen satama on oltava välillä 1 ja 65535.", + "invalidRemotePort": "Etäportin on oltava välillä 1 ja 65535.", + "invalidLocalTargetPort": "Paikallisen tavoiteportin on oltava välillä 1–65535.", + "invalidEndpointPort": "Päätesataman on oltava välillä 1–65535.", + "duplicateAutoStartBind": "Vain yksi automaattinen käynnistys -asiakastunneli voi käyttää {{bind}} -tunnusta.", + "manualControlError": "Tunnelin tilan päivitys epäonnistui.", + "saveHostBeforeManualControl": "Tallenna tämä isäntä ennen kuin aloitat tai pysäytät sen serveritunnelit.", "status": "Status", "active": "Aktiivinen", "inactive": "Passiivinen", "start": "Aloita", "stop": "Stop", + "test": "Testi", "restart": "Käynnistä uudelleen", "connectionType": "Yhteystyyppi", + "type": "Tunnelin Tyyppi", + "typeLocal": "Paikallinen (-L)", + "typeRemote": "Etäkäyttö (-R)", + "typeDynamic": "Dynaaminen (-D)", + "typeServerLocalDesc": "Nykyinen isäntä päätepisteeseen.", + "typeServerRemoteDesc": "Päätä piste takaisin nykyiseen isäntään.", + "typeClientLocalDesc": "Paikallinen tietokone tutkittavaksi.", + "typeClientRemoteDesc": "Endpoint takaisin paikalliseen tietokoneeseen.", + "typeClientDynamicDesc": "SOCKS paikallisella tietokoneella.", + "typeDynamicDesc": "Siirrä SOCKS5 CONNECT liikennettä SSH:n kautta", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS paikallisessa portissa {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Reitti:", + "lastStarted": "Viimeksi aloitettu", + "lastTested": "Viimeksi testattu", + "lastError": "Viimeisin virhe", + "maxRetries": "Maksimi Uudelleen", + "maxRetriesDescription": "Enimmäismäärä uudelleen kokeilevia yrityksiä.", + "retryInterval": "Uudelleen Aikaväli (Sekuntia)", + "retryIntervalDescription": "Aika odottaa yritysten uudelleenkokeilun välillä.", "local": "Paikallinen", "remote": "Kauko", "dynamic": "Dynaaminen", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Anna SSH-tunnuksesi muodostaaksesi yhteyden tähän palvelimeen.", "sshPasswordDescription": "Anna tämän SSH-yhteyden salasana.", "sshKeyPasswordDescription": "Jos SSH-avaimesi on salattu, anna salasana tähän.", + "passphraseRequired": "Tunnuslause Vaaditaan", + "passphraseRequiredDescription": "SSH avain on salattu. Ole hyvä ja kirjoita salasana avataksesi sen.", "step1ScanQR": "Vaihe 1: Skannaa QR-koodi todennussovelluksellasi", "manualEntryCode": "Manuaalisen syöttökoodin", "cannotScanQRText": "Jos et pysty skannaamaan QR-koodia, syötä tämä koodi manuaalisesti todennussovellukseesi.", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Salasanan nollaus epäonnistui", "invalidTotpCode": "Virheellinen TOTP-koodi", "failedOidcLogin": "OIDC-kirjautumisen aloittaminen epäonnistui", - "failedUserInfo": "Käyttäjätietojen hakeminen epäonnistui OIDC-kirjautumisen jälkeen", + "failedUserInfo": "Käyttäjätietojen saaminen epäonnistui kirjautumisen jälkeen", "oidcAuthFailed": "OIDC-todennus epäonnistui", "noTokenReceived": "Kirjautumisesta ei vastaanotettu tunnusta", "invalidAuthUrl": "Virheellinen valtuutus-URL-osoite vastaanotettu taustajärjestelmästä", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Näytä tunnisteet jokaisen isännän alla sivupalkissa. Poista tämä käytöstä, jos haluat piilottaa kaikki tunnisteet.", "account": "Tili", "appearance": "Ulkonäkö", + "c2sTunnelConfigDesc": "Paikalliset työpöydän tunnelit kohdennettu määritetty SSH isännät.", + "c2sTunnelPresets": "Asiakkaan Tunnelin Esiasetukset", + "c2sTunnelPresetsDesc": "Tallenna tämä työpöytäasiakkaan paikallinen tunneliluettelo nimenä palvelimen esiasetuksena tai lataa esiasetus takaisin tähän ohjelmaan.", + "c2sTunnelPresetsUnavailable": "Asiakkaan tunnelin esiasetukset ovat käytettävissä vain työpöytäsovelluksessa.", + "c2sPresetName": "Esiasetuksen Nimi", + "c2sPresetNamePlaceholder": "Asiakkaan esiasetus nimi", + "c2sPresetToLoad": "Esiasetus Ladattavaksi", + "c2sNoPresetSelected": "Ei esiasetusta valittuna", + "c2sNoPresets": "Ei tallennettuja esiasetuksia", + "c2sLoadPreset": "Lataa", + "c2sCurrentLocalConfig": "{{count}} paikallista asiakastunnelia määritetty tällä työpöydällä.", + "c2sPresetSyncNote": "Esiasetukset ovat nimenomaisia kuvakaappauksia; lataus korvaa tämän työpöytäasiakkaan paikallisen tunneliluettelon.", + "c2sPresetSaved": "Asiakkaan tunnelin esiasetus tallennettu", + "c2sPresetLoaded": "Asiakastunnelin esiasetus ladattu paikallisesti", + "c2sPresetRenamed": "Asiakkaan tunnelin esiasetus uudelleen nimetty", + "c2sPresetDeleted": "Asiakkaan tunnelin esiasetus poistettu", + "c2sPresetLoadError": "Asiakastunnelin esiasetusten lataaminen epäonnistui", "languageLocalization": "Kieli ja lokalisointi", "fileManagerSettings": "Tiedostojen Hallinta", "terminalSettings": "Pääte", @@ -2370,6 +2472,10 @@ "description": "SSH-tunnistetietojen kuvaus", "searchCredentials": "Hae tunnistetietoja nimen, käyttäjätunnuksen tai tunnisteiden perusteella...", "sshConfig": "päätepisteen ssh-konfiguraatio", + "bindLocalhost": "127.0.0.1 (sitoudu paikalliseen)", + "localListenerHost": "127.0.0.1 (kuuntele paikallisesti)", + "localTargetHost": "127.0.0.1 (tämän tietokoneen tavoite)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/kotiin", "clientId": "asiakastunnuksesi", "clientSecret": "asiakkaasi-salaisuus", @@ -2549,6 +2655,7 @@ "version": "Versio", "upToDate": "Ajan tasalla", "updateAvailable": "Päivitys Saatavilla", + "beta": "Beeta", "uptime": "Käyttöaika", "database": "Tietokanta", "healthy": "Terveellinen", @@ -2955,6 +3062,20 @@ "error": "Metriikan kokoelma epäonnistui: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Luodaan tunneliyhteyttä...", + "sourceConnecting": "Yhdistetään lähteen isäntään {{host}}...", + "sourceConnected": "Yhdistetty lähteen palvelimeen", + "endpointResolving": "Selvitetään päätepisteen isäntää {{host}}...", + "endpointResolved": "Päätepisteen isäntä ratkaistu", + "forwarding": "Portinsiirron määrittäminen {{localPort}} → {{remotePort}}...", + "connected": "Tunneli muodostettu onnistuneesti", + "retrying": "Yhteys epäonnistui, yritetään uudelleen {{countdown}}s kuluttua (yritys {{attempt}}/{{max}})...", + "retryExhausted": "Enimmäismäärä uudelleenyrityksiä saavutettu", + "error": "Tunneliyhteys epäonnistui: {{error}}" + } + }, "sftp": { "log": { "connecting": "Yhdistetään SFTP-palvelimeen...", diff --git a/src/locales/translated/fr_FR.json b/src/locales/translated/fr_FR.json index 02578ac4..53b5751b 100644 --- a/src/locales/translated/fr_FR.json +++ b/src/locales/translated/fr_FR.json @@ -402,6 +402,8 @@ "currentVersion": "Vous utilisez la version {{version}}", "updateAvailable": "Mise à jour disponible", "newVersionAvailable": "Une nouvelle version est disponible ! Vous utilisez {{current}}, mais {{latest}} est disponible.", + "betaVersion": "Version bêta", + "betaVersionDesc": "Vous utilisez {{current}}, qui est plus récent que la dernière version stable {{latest}}.", "releasedOn": "Publié sur {{date}}", "downloadUpdate": "Télécharger la mise à jour", "dismiss": "Refuser", @@ -426,6 +428,8 @@ "warning": "Avertissement", "info": "Infos", "success": "Succès", + "unsavedChanges": "Modifications non enregistrées", + "dismiss": "Refuser", "loading": "Chargement en cours...", "required": "Requis", "optional": "Optionnel", @@ -471,6 +475,7 @@ "chinese": "Chinois", "german": "Allemand", "cancel": "Abandonner", + "done": "Fait", "username": "Nom d'utilisateur", "name": "Nom", "login": "Se connecter", @@ -486,6 +491,7 @@ "save": "Enregistrer", "saving": "Sauvegarde en cours...", "delete": "Supprimez", + "rename": "Renommer", "edit": "Editer", "add": "Ajouter", "search": "Chercher", @@ -559,7 +565,8 @@ "passwordCopied": "Mot de passe copié dans le presse-papiers", "sudoPasswordCopied": "Mot de passe Sudo copié dans le presse-papiers", "noPasswordAvailable": "Aucun mot de passe disponible", - "failedToCopyPassword": "Impossible de copier le mot de passe" + "failedToCopyPassword": "Impossible de copier le mot de passe", + "openFileManager": "Ouvrir le gestionnaire de fichiers" }, "admin": { "title": "Paramètres de l'administrateur", @@ -868,7 +875,42 @@ "passwordMinLength": "Le mot de passe doit comporter au moins 6 caractères", "currentRoles": "Rôles actuels", "noRolesAssigned": "Aucun rôle assigné", - "assignNewRole": "Assigner un nouveau rôle" + "assignNewRole": "Assigner un nouveau rôle", + "apiKeys": { + "tabLabel": "Clés API", + "title": "Clés API", + "createApiKey": "Créer une clé API", + "createApiKeyDescription": "Créer une nouvelle clé API portée à un utilisateur spécifique. Le jeton n'est affiché qu'une seule fois.", + "keyCreated": "Clé API créée", + "keyCreatedDescription": "Copiez cette clé maintenant — elle ne sera plus affichée.", + "keyName": "Nom de la clé", + "keyNamePlaceholder": "par exemple Pipeline CI/CD", + "scopedUser": "Utilisateur Scoped", + "selectUser": "Sélectionnez un utilisateur...", + "searchUsers": "Rechercher des utilisateurs...", + "noUsersFound": "Aucun utilisateur trouvé.", + "expiresAt": "Expire à", + "optional": "optionnel", + "expiresAtHelp": "Laisser vide pour une clé qui n'expire jamais.", + "copyWarningTitle": "Enregistrez votre clé API", + "copyWarningDescription": "Cette clé ne sera affichée qu'une seule fois. Stockez-la dans un endroit sûr.", + "apiKey": "Clé API", + "tokenCopied": "Jeton copié dans le presse-papiers", + "creating": "Création en cours...", + "nameRequired": "Le nom de la clé est requis", + "userRequired": "Veuillez sélectionner un utilisateur", + "failedToCreate": "Impossible de créer la clé API", + "noKeys": "Aucune clé API trouvée.", + "name": "Nom", + "prefix": "Préfixe", + "lastUsed": "Dernière utilisation", + "never": "Jamais", + "revokeKey": "Révoquer la clé", + "confirmRevoke": "Êtes-vous sûr de vouloir révoquer la clé API \"{{name}}\" ? Cette action est irréversible.", + "revokedSuccessfully": "Clé API révoquée avec succès", + "failedToRevoke": "Impossible de révoquer la clé API", + "failedToFetch": "Impossible de récupérer les clés API" + } }, "hosts": { "title": "Responsable d'hôte", @@ -962,28 +1004,8 @@ "enableDocker": "Activer Docker", "defaultPath": "Chemin par défaut", "defaultPathDesc": "Répertoire par défaut lors de l'ouverture du gestionnaire de fichiers pour cet hôte", - "tunnelConnections": "Connexions Tunnel", "connection": "Raccordement", "remove": "Retirer", - "sourcePort": "Port source", - "sourcePortDesc": " (Source se réfère aux détails de connexion en cours dans l'onglet Général)", - "endpointPort": "Port de terminaison", - "endpointSshConfig": "Configuration SSH du point d'extrémité", - "tunnelForwardDescription": "Ce tunnel acheminera le trafic depuis le port {{sourcePort}} sur la machine source (détails de connexion actuels dans l'onglet général) vers le port {{endpointPort}} sur la machine d'extrémité.", - "maxRetries": "Nombre maximum de tentatives", - "maxRetriesDescription": "Nombre maximum de tentatives de nouvelle tentative de connexion au tunnel.", - "retryInterval": "Intervalle de réessai (secondes)", - "retryIntervalDescription": "Temps d'attente entre les deux tentatives.", - "autoStartContainer": "Démarrage automatique au lancement du conteneur", - "autoStartDesc": "Démarrer automatiquement ce tunnel lorsque le conteneur démarre", - "addConnection": "Ajouter une connexion Tunnel", - "tunnelType": "Type de tunnel", - "tunnelTypeLocal": "Local (-L)", - "tunnelTypeRemote": "Télécommande (-R)", - "tunnelTypeLocalDesc": "Transférer le port local vers le point de terminaison distant", - "tunnelTypeRemoteDesc": "Transférer le port distant vers la machine locale", - "tunnelForwardDescriptionLocal": "Ce tunnel redirigera le trafic du port local {{sourcePort}} vers le port {{endpointPort}} sur la machine d'extrémité.", - "tunnelForwardDescriptionRemote": "Ce tunnel acheminera le trafic depuis le port {{sourcePort}} sur la machine source (détails de connexion actuels dans l'onglet général) vers le port {{endpointPort}} sur la machine d'extrémité.", "sshpassRequired": "Sshpass requis pour l'authentification par mot de passe", "sshpassRequiredDesc": "Pour l'authentification par mot de passe dans les tunnels, sshpass doit être installé sur le système.", "otherInstallMethods": "Autres méthodes d'installation :", @@ -1529,7 +1551,7 @@ "splitVertical": "Diviser verticalement", "closePanel": "Fermer le panneau", "reconnect": "Reconnecter", - "sessionEnded": "Session terminée", + "sessionEnded": "Session terminée.", "connectionLost": "Connexion perdue", "error": "ERREUR : {{message}}", "disconnected": "Déconnecté", @@ -1933,22 +1955,10 @@ "ascending": "Ascendant", "descending": "Descendant" }, - "tunnel": { - "log": { - "connecting": "Établissement de la connexion au tunnel...", - "sourceConnecting": "Connexion à l'hôte source {{host}}...", - "sourceConnected": "Connecté à l'hôte source", - "endpointResolving": "Résolution de l'hôte de terminaison {{host}}...", - "endpointResolved": "Hôte de point d'extrémité résolu", - "forwarding": "Mise en place de la redirection de port {{localPort}} → {{remotePort}}...", - "connected": "Tunnel établi avec succès", - "retrying": "La connexion a échoué, nouvelle tentative dans {{countdown}}s (tentative {{attempt}}/{{max}})...", - "retryExhausted": "Nombre maximum de tentatives de réessai atteint", - "error": "Échec de la connexion au tunnel: {{error}}" - } - }, "tunnels": { "title": "Tunnels SSH", + "noTunnelsConfigured": "Pas de tunnels configurés", + "configureTunnelsInHostSettings": "Configurer les connexions de tunnels dans le Gestionnaire d'Hôtes pour commencer", "noSshTunnels": "Pas de tunnels SSH", "createFirstTunnelMessage": "Vous n'avez pas encore créé de tunnels SSH. Configurez les connexions de tunnels dans le Gestionnaire d'Hôtes pour commencer.", "connected": "Connecté", @@ -1969,27 +1979,100 @@ "disconnect": "Déconnecter", "cancel": "Abandonner", "port": "Port", + "localPort": "Port local", + "remotePort": "Port distant", + "currentHostPort": "Port actuel de l'hôte", + "endpointPort": "Port de terminaison", + "bindIp": "IP locale", + "currentHostIp": "IP de l'hôte actuel", + "endpointSshConfig": "Configuration SSH du point d'extrémité", + "endpointSshConfigRequired": "La configuration SSH du point d'extrémité est requise", + "endpointSshHost": "Hôte SSH du point d'extrémité", + "endpointSshHostPlaceholder": "Sélectionnez un hôte configuré", + "endpointSshHostRequired": "Sélectionnez un serveur SSH de point de terminaison pour chaque tunnel client.", "attempt": "Tentative {{current}} de {{max}}", "nextRetryIn": "Prochaine tentative dans {{seconds}} secondes", "checkDockerLogs": "Vérifiez vos logs Docker pour la raison de l'erreur, rejoignez le", "orCreate": "ou créer un ", "noTunnelConnections": "Aucune connexion tunnel configurée", "tunnelConnections": "Connexions Tunnel", + "serverTunnels": "Tunnels serveur", + "serverTunnelsDesc": "Tunels gérés par le backend stockés avec cet hôte.", + "clientTunnels": "Tunnels client", + "clientTunnelsUnavailable": "Les tunnels du client nécessitent un client de bureau.", + "serverTunnel": "Tunnel serveur", + "clientTunnel": "Tunnel client", + "addServerTunnel": "Ajouter un tunnel serveur", + "addClientTunnel": "Ajouter un tunnel client", + "noServerTunnels": "Aucun tunnel serveur configuré.", + "noClientTunnels": "Aucun tunnel client configuré sur ce bureau.", + "manageClientTunnels": "Gérer les tunnels clients", "addTunnel": "Ajouter un tunnel", "editTunnel": "Modifier le tunnel", "deleteTunnel": "Supprimer le tunnel", "tunnelName": "Nom du tunnel", - "localPort": "Port local", "remoteHost": "Hôte distant", - "remotePort": "Port distant", "autoStart": "Démarrage automatique", + "autoStartContainer": "Démarrage automatique au lancement", + "autoStartContainerDesc": "Démarrer automatiquement ce tunnel au démarrage de votre serveur Termix.", + "autoStartEnableFailed": "Hôte enregistré, mais impossible de démarrer les tunnels de démarrage automatique pour {{name}}.", + "clientAutoStartDesc": "Démarre lorsque ce client de bureau s'ouvre et reste connecté.", + "clientManualStartDesc": "Utiliser Démarrer et Arrêter de cette ligne. Termix ne l'ouvrira pas automatiquement.", + "clientRemoteServerNote": "La redirection à distance peut nécessiter AllowTcpForwarding et GatewayPorts sur le serveur SSH de point d'extrémité. Le port distant se ferme lorsque ce bureau se déconnecte.", + "clientTunnelStarted": "Tunnel client démarré", + "clientTunnelStopped": "Tunnel client arrêté", + "tunnelTestSucceeded": "Test du tunnel réussi", + "tunnelTestFailed": "Le test du tunnel a échoué", + "localSaved": "Tunnel client sauvegardé", + "localSaveError": "Impossible d'enregistrer les tunnels du client local", + "invalidBindIp": "L'adresse IP locale doit être une adresse IPv4 valide.", + "invalidLocalTargetIp": "L'IP locale cible doit être une adresse IPv4 valide.", + "invalidCurrentHostIp": "L'IP actuelle de l'hôte doit être une adresse IPv4 valide.", + "invalidLocalPort": "Le port local doit être compris entre 1 et 65535.", + "invalidRemotePort": "Le port distant doit être compris entre 1 et 65535.", + "invalidLocalTargetPort": "Le port local cible doit être compris entre 1 et 65535.", + "invalidEndpointPort": "Le port du point d'entrée doit être compris entre 1 et 65535.", + "duplicateAutoStartBind": "Un seul tunnel client de démarrage automatique peut utiliser {{bind}}.", + "manualControlError": "Impossible de mettre à jour l'état du tunnel.", + "saveHostBeforeManualControl": "Enregistrez cet hôte avant de démarrer ou d'arrêter ses tunnels de serveur.", "status": "Statut", "active": "Actif", "inactive": "Inactif", "start": "Début", "stop": "Arrêter", + "test": "Tester", "restart": "Redémarrer", "connectionType": "Type de connexion", + "type": "Type de tunnel", + "typeLocal": "Local (-L)", + "typeRemote": "Télécommande (-R)", + "typeDynamic": "Dynamique (-D)", + "typeServerLocalDesc": "Hôte actuel vers point de terminaison.", + "typeServerRemoteDesc": "Point de fin de retour à l'hôte actuel.", + "typeClientLocalDesc": "Ordinateur local à terminal.", + "typeClientRemoteDesc": "Point de fin de retour à l'ordinateur local.", + "typeClientDynamicDesc": "SOCKS sur ordinateur local.", + "typeDynamicDesc": "Transférer le trafic SOCKS5 vers SSH", + "forwardDescriptionServerLocal": "Hôte actuel {{sourcePort}} → point de terminaison {{endpointPort}}.", + "forwardDescriptionServerRemote": "Point de terminaison {{endpointPort}} → hôte actuel {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS sur l'hôte actuel {{sourcePort}}.", + "forwardDescriptionClientLocal": "{{sourcePort}} local → {{endpointPort}} distant.", + "forwardDescriptionClientRemote": "{{sourcePort}} → {{endpointPort}} local.", + "forwardDescriptionClientDynamic": "SOCKS sur le port local {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "{{localPort}} local → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Voie :", + "lastStarted": "Dernier démarrage", + "lastTested": "Dernier test", + "lastError": "Dernière erreur", + "maxRetries": "Nombre maximum de tentatives", + "maxRetriesDescription": "Nombre maximum de tentatives de réessai.", + "retryInterval": "Intervalle de réessai (secondes)", + "retryIntervalDescription": "Temps d'attente entre les deux tentatives.", "local": "Locale", "remote": "Distante", "dynamic": "Dynamique", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Veuillez fournir vos identifiants SSH pour vous connecter à ce serveur.", "sshPasswordDescription": "Entrez le mot de passe de cette connexion SSH.", "sshKeyPasswordDescription": "Si votre clé SSH est chiffrée, entrez le mot de passe ici.", + "passphraseRequired": "Phrase de passe requise", + "passphraseRequiredDescription": "La clé SSH est chiffrée. Veuillez entrer le mot de passe pour la déverrouiller.", "step1ScanQR": "Étape 1 : Scannez le code QR avec votre application d'authentification", "manualEntryCode": "Code d'entrée manuel", "cannotScanQRText": "Si vous ne pouvez pas scanner le code QR, saisissez ce code manuellement dans votre application d'authentification", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Afficher les tags sous chaque hôte dans la barre latérale. Désactiver pour masquer tous les tags.", "account": "Compte client", "appearance": "Apparence", + "c2sTunnelConfigDesc": "Tunels locaux de bureau ciblant les hôtes SSH configurés.", + "c2sTunnelPresets": "Préréglages du tunnel client", + "c2sTunnelPresetsDesc": "Enregistrez la liste des tunnels locaux de ce client de bureau sous la forme d'un préréglage nommé, ou rechargez un préréglage dans ce client.", + "c2sTunnelPresetsUnavailable": "Les préréglages du tunnel client ne sont disponibles que dans le client de bureau.", + "c2sPresetName": "Nom du préréglage", + "c2sPresetNamePlaceholder": "Nom du préréglage client", + "c2sPresetToLoad": "Préréglage à charger", + "c2sNoPresetSelected": "Aucun préréglage sélectionné", + "c2sNoPresets": "Aucun préréglage enregistré", + "c2sLoadPreset": "Charger", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Les préréglages sont des instantanés explicites ; le chargement remplace la liste des tunnels clients locaux du client de bureau.", + "c2sPresetSaved": "Préréglage du tunnel client sauvegardé", + "c2sPresetLoaded": "Préréglage du tunnel client chargé localement", + "c2sPresetRenamed": "Préréglage du tunnel client renommé", + "c2sPresetDeleted": "Préréglage du tunnel client supprimé", + "c2sPresetLoadError": "Impossible de charger les préréglages du tunnel client", "languageLocalization": "Langue et localisation", "fileManagerSettings": "Gestionnaire de fichiers", "terminalSettings": "Terminal", @@ -2370,6 +2472,10 @@ "description": "Description des identifiants SSH", "searchCredentials": "Rechercher les identifiants par nom, nom d'utilisateur ou tags...", "sshConfig": "configuration ssh du point de terminaison", + "bindLocalhost": "127.0.0.1 (lier à localhost)", + "localListenerHost": "127.0.0.1 (écouter localement)", + "localTargetHost": "127.0.0.1 (cible sur cet ordinateur)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/home", "clientId": "votre-client-id", "clientSecret": "votre-client-secret", @@ -2549,6 +2655,7 @@ "version": "Version", "upToDate": "À jour", "updateAvailable": "Mise à jour disponible", + "beta": "Bêta", "uptime": "Délai de disponibilité", "database": "Base de données", "healthy": "Sain", @@ -2955,6 +3062,20 @@ "error": "La collection de métriques a échoué : {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Établissement de la connexion au tunnel...", + "sourceConnecting": "Connexion à l'hôte source {{host}}...", + "sourceConnected": "Connecté à l'hôte source", + "endpointResolving": "Résolution de l'hôte de terminaison {{host}}...", + "endpointResolved": "Hôte de point d'extrémité résolu", + "forwarding": "Mise en place de la redirection de port {{localPort}} → {{remotePort}}...", + "connected": "Tunnel établi avec succès", + "retrying": "La connexion a échoué, nouvelle tentative dans {{countdown}}s (tentative {{attempt}}/{{max}})...", + "retryExhausted": "Nombre maximum de tentatives de réessai atteint", + "error": "Échec de la connexion au tunnel: {{error}}" + } + }, "sftp": { "log": { "connecting": "Connexion au serveur SFTP...", diff --git a/src/locales/translated/he_IL.json b/src/locales/translated/he_IL.json index 4111aa6f..5bfc5a19 100644 --- a/src/locales/translated/he_IL.json +++ b/src/locales/translated/he_IL.json @@ -402,6 +402,8 @@ "currentVersion": "אתה משתמש בגרסה {{version}}", "updateAvailable": "עדכון זמין", "newVersionAvailable": "גרסה חדשה זמינה! אתה מפעיל {{current}}, אבל {{latest}} זמין.", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "יצא לאור בתאריך {{date}}", "downloadUpdate": "הורד עדכון", "dismiss": "לְפַטֵר", @@ -426,6 +428,8 @@ "warning": "אַזהָרָה", "info": "מידע", "success": "הַצלָחָה", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "טְעִינָה...", "required": "דָרוּשׁ", "optional": "אופציונלי", @@ -471,6 +475,7 @@ "chinese": "סִינִית", "german": "גֶרמָנִיָת", "cancel": "לְבַטֵל", + "done": "Done", "username": "שם משתמש", "name": "שֵׁם", "login": "כְּנִיסָה לַמַעֲרֶכֶת", @@ -486,6 +491,7 @@ "save": "לְהַצִיל", "saving": "חִסָכוֹן...", "delete": "לִמְחוֹק", + "rename": "Rename", "edit": "לַעֲרוֹך", "add": "לְהוֹסִיף", "search": "לְחַפֵּשׂ", @@ -559,7 +565,8 @@ "passwordCopied": "הסיסמה הועתקה ללוח", "sudoPasswordCopied": "סיסמת הסודו הועתקה ללוח", "noPasswordAvailable": "אין סיסמה זמינה", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Failed to copy password", + "openFileManager": "Open File Manager" }, "admin": { "title": "הגדרות מנהל מערכת", @@ -868,7 +875,42 @@ "passwordMinLength": "הסיסמה חייבת להיות באורך של לפחות 6 תווים", "currentRoles": "תפקידים נוכחיים", "noRolesAssigned": "לא הוקצו תפקידים", - "assignNewRole": "הקצאת תפקיד חדש" + "assignNewRole": "הקצאת תפקיד חדש", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "מנהל מארח", @@ -962,28 +1004,8 @@ "enableDocker": "הפעל את Docker", "defaultPath": "נתיב ברירת מחדל", "defaultPathDesc": "ספריית ברירת מחדל בעת פתיחת מנהל הקבצים עבור מחשב מארח זה", - "tunnelConnections": "חיבורי מנהרה", "connection": "קֶשֶׁר", "remove": "לְהַסִיר", - "sourcePort": "יציאת מקור", - "sourcePortDesc": " (המקור מתייחס לפרטי החיבור הנוכחיים בלשונית כללי)", - "endpointPort": "יציאת נקודת קצה", - "endpointSshConfig": "תצורת SSH של נקודת קצה", - "tunnelForwardDescription": "מנהרה זו תעביר תעבורה מפורט {{sourcePort}} במחשב המקור (פרטי החיבור הנוכחיים בכרטיסייה הכללית) לפורט {{endpointPort}} במחשב נקודת הקצה.", - "maxRetries": "מקסימום ניסיונות חוזרים", - "maxRetriesDescription": "מספר מרבי של ניסיונות חוזרים עבור חיבור מנהרה.", - "retryInterval": "מרווח זמן לניסיון חוזר (שניות)", - "retryIntervalDescription": "זמן המתנה בין ניסיונות חוזרים.", - "autoStartContainer": "הפעלה אוטומטית בעת הפעלת מכולה", - "autoStartDesc": "הפעל אוטומטית את המנהרה הזו בעת הפעלת המכולה", - "addConnection": "הוסף חיבור מנהרה", - "tunnelType": "סוג מנהרה", - "tunnelTypeLocal": "מקומי (-L)", - "tunnelTypeRemote": "מרחוק (-R)", - "tunnelTypeLocalDesc": "העברת פורט מקומי לנקודת קצה מרוחקת", - "tunnelTypeRemoteDesc": "העברת פורט מרוחק למחשב מקומי", - "tunnelForwardDescriptionLocal": "מנהרה זו תעביר תעבורה מפורט מקומי {{sourcePort}} לפורט {{endpointPort}} במחשב נקודת הקצה.", - "tunnelForwardDescriptionRemote": "מנהרה זו תעביר תעבורה מפורט {{sourcePort}} במחשב המקור (פרטי החיבור הנוכחיים בכרטיסייה הכללית) לפורט {{endpointPort}} במחשב נקודת הקצה.", "sshpassRequired": "נדרש Sshpass לאימות סיסמה", "sshpassRequiredDesc": "לאימות סיסמה במנהרות, יש להתקין sshpass במערכת.", "otherInstallMethods": "שיטות התקנה נוספות:", @@ -1529,7 +1551,7 @@ "splitVertical": "פיצול אנכי", "closePanel": "סגור את הפאנל", "reconnect": "התחבר מחדש", - "sessionEnded": "הסשן הסתיים", + "sessionEnded": "Session ended.", "connectionLost": "Connection lost", "error": "שגיאה: {{message}}", "disconnected": "מְנוּתָק", @@ -1933,22 +1955,10 @@ "ascending": "עוֹלֶה", "descending": "יורד" }, - "tunnel": { - "log": { - "connecting": "יצירת חיבור למנהרה...", - "sourceConnecting": "מתחבר למארח המקור {{host}}...", - "sourceConnected": "מחובר למארח המקור", - "endpointResolving": "פתרון מארח נקודת קצה {{host}}...", - "endpointResolved": "מארח נקודת הקצה נפתר", - "forwarding": "הגדרת העברת פורטים {{localPort}} → {{remotePort}}...", - "connected": "המנהרה הוקמה בהצלחה", - "retrying": "החיבור נכשל, ניסיון חוזר בעוד {{countdown}}שניות (ניסיון {{attempt}}/{{max}})...", - "retryExhausted": "הגעת למספר מקסימלי של ניסיונות ניסיון חוזר", - "error": "חיבור המנהרה נכשל: {{error}}" - } - }, "tunnels": { "title": "מנהרות SSH", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "אין מנהרות SSH", "createFirstTunnelMessage": "עדיין לא יצרת מנהרות SSH. הגדר חיבורי מנהרות במנהל המארח כדי להתחיל.", "connected": "מְחוּבָּר", @@ -1969,27 +1979,100 @@ "disconnect": "לְנַתֵק", "cancel": "לְבַטֵל", "port": "נָמָל", + "localPort": "נמל מקומי", + "remotePort": "יציאה מרוחקת", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "ניסיון {{current}} מתוך {{max}}", "nextRetryIn": "ניסיון חוזר הבא בעוד {{seconds}} שניות", "checkDockerLogs": "בדוק את יומני ה-Docker שלך כדי למצוא את סיבת השגיאה, הצטרף ל-", "orCreate": "או ליצור ", "noTunnelConnections": "לא הוגדרו חיבורי מנהרה", "tunnelConnections": "חיבורי מנהרה", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "הוסף מנהרה", "editTunnel": "עריכת מנהרה", "deleteTunnel": "מחיקת מנהרה", "tunnelName": "שם המנהרה", - "localPort": "נמל מקומי", "remoteHost": "מארח מרוחק", - "remotePort": "יציאה מרוחקת", "autoStart": "הפעלה אוטומטית", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "סטָטוּס", "active": "פָּעִיל", "inactive": "לֹא פָּעִיל", "start": "הַתחָלָה", "stop": "לְהַפְסִיק", + "test": "Test", "restart": "הפעלה מחדש", "connectionType": "סוג חיבור", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "מְקוֹמִי", "remote": "מְרוּחָק", "dynamic": "דִינָמִי", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "אנא ספק את פרטי ה-SSH שלך כדי להתחבר לשרת זה.", "sshPasswordDescription": "הזן את הסיסמה עבור חיבור SSH זה.", "sshKeyPasswordDescription": "אם מפתח ה-SSH שלך מוצפן, הזן את סיסמתך כאן.", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "שלב 1: סרוק את קוד ה-QR באמצעות אפליקציית האימות שלך", "manualEntryCode": "קוד הזנה ידנית", "cannotScanQRText": "אם אינך מצליח לסרוק את קוד ה-QR, הזן קוד זה ידנית באפליקציית האימות שלך.", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "נכשל השלמת איפוס הסיסמה", "invalidTotpCode": "קוד TOTP לא חוקי", "failedOidcLogin": "נכשל בהתחלת הכניסה ל-OIDC", - "failedUserInfo": "נכשלה קבלת פרטי המשתמש לאחר כניסה ל-OIDC", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "אימות OIDC נכשל", "noTokenReceived": "לא התקבל אסימון מהכניסה", "invalidAuthUrl": "כתובת URL לא חוקית להרשאה התקבלה מה-backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "הצג תגיות תחת כל מארח בסרגל הצד. השבת כדי להסתיר את כל התגיות.", "account": "חֶשְׁבּוֹן", "appearance": "הוֹפָעָה", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "שפה ולוקליזציה", "fileManagerSettings": "מנהל הקבצים", "terminalSettings": "מָסוֹף", @@ -2370,6 +2472,10 @@ "description": "תיאור אישורי SSH", "searchCredentials": "חפש פרטי כניסה לפי שם, שם משתמש או תגיות...", "sshConfig": "תצורת SSH של נקודת הקצה", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/בַּיִת", "clientId": "מזהה-הלקוח-שלך", "clientSecret": "סוד הלקוח שלך", @@ -2549,6 +2655,7 @@ "version": "גִרְסָה", "upToDate": "מעודכן", "updateAvailable": "עדכון זמין", + "beta": "Beta", "uptime": "זמן פעולה", "database": "מסד נתונים", "healthy": "בָּרִיא", @@ -2955,6 +3062,20 @@ "error": "איסוף המדדים נכשל: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "יצירת חיבור למנהרה...", + "sourceConnecting": "מתחבר למארח המקור {{host}}...", + "sourceConnected": "מחובר למארח המקור", + "endpointResolving": "פתרון מארח נקודת קצה {{host}}...", + "endpointResolved": "מארח נקודת הקצה נפתר", + "forwarding": "הגדרת העברת פורטים {{localPort}} → {{remotePort}}...", + "connected": "המנהרה הוקמה בהצלחה", + "retrying": "החיבור נכשל, ניסיון חוזר בעוד {{countdown}}שניות (ניסיון {{attempt}}/{{max}})...", + "retryExhausted": "הגעת למספר מקסימלי של ניסיונות ניסיון חוזר", + "error": "חיבור המנהרה נכשל: {{error}}" + } + }, "sftp": { "log": { "connecting": "מתחבר לשרת SFTP...", diff --git a/src/locales/translated/hi_IN.json b/src/locales/translated/hi_IN.json index 3e356473..69e035f6 100644 --- a/src/locales/translated/hi_IN.json +++ b/src/locales/translated/hi_IN.json @@ -402,6 +402,8 @@ "currentVersion": "आप संस्करण {{version}}चला रहे हैं", "updateAvailable": "उपलब्ध अद्यतन", "newVersionAvailable": "एक नया संस्करण उपलब्ध है! आप {{current}}चला रहे हैं, लेकिन {{latest}} भी उपलब्ध है।", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "{{date}}को जारी किया गया", "downloadUpdate": "अपडेट डाउनलोड करें", "dismiss": "नकार देना", @@ -426,6 +428,8 @@ "warning": "चेतावनी", "info": "जानकारी", "success": "सफलता", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "लोड हो रहा है...", "required": "आवश्यक", "optional": "वैकल्पिक", @@ -471,6 +475,7 @@ "chinese": "चीनी", "german": "जर्मन", "cancel": "रद्द करना", + "done": "Done", "username": "उपयोगकर्ता नाम", "name": "नाम", "login": "लॉग इन करें", @@ -486,6 +491,7 @@ "save": "बचाना", "saving": "सहेजा जा रहा है...", "delete": "मिटाना", + "rename": "Rename", "edit": "संपादन करना", "add": "जोड़ना", "search": "खोज", @@ -559,7 +565,8 @@ "passwordCopied": "पासवर्ड क्लिपबोर्ड पर कॉपी हो गया है", "sudoPasswordCopied": "सूडो पासवर्ड क्लिपबोर्ड पर कॉपी हो गया है", "noPasswordAvailable": "कोई पासवर्ड उपलब्ध नहीं है", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Failed to copy password", + "openFileManager": "Open File Manager" }, "admin": { "title": "व्यवस्थापक सेटिंग्स", @@ -868,7 +875,42 @@ "passwordMinLength": "पासवर्ड कम से कम 6 अंकों का होना चाहिए", "currentRoles": "वर्तमान भूमिकाएँ", "noRolesAssigned": "कोई भूमिका आवंटित नहीं की गई", - "assignNewRole": "नई भूमिका सौंपें" + "assignNewRole": "नई भूमिका सौंपें", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "मेजबान प्रबंधक", @@ -962,28 +1004,8 @@ "enableDocker": "डॉकर को सक्षम करें", "defaultPath": "डिफ़ॉल्ट पथ", "defaultPathDesc": "इस होस्ट के लिए फ़ाइल मैनेजर खोलते समय डिफ़ॉल्ट डायरेक्टरी", - "tunnelConnections": "सुरंग कनेक्शन", "connection": "संबंध", "remove": "निकालना", - "sourcePort": "स्रोत पोर्ट", - "sourcePortDesc": " (स्रोत से तात्पर्य सामान्य टैब में वर्तमान कनेक्शन विवरण से है)", - "endpointPort": "एंडपॉइंट पोर्ट", - "endpointSshConfig": "एंडपॉइंट एसएसएच कॉन्फ़िगरेशन", - "tunnelForwardDescription": "यह टनल स्रोत मशीन पर पोर्ट {{sourcePort}} (सामान्य टैब में वर्तमान कनेक्शन विवरण) से एंडपॉइंट मशीन पर पोर्ट {{endpointPort}} तक ट्रैफ़िक अग्रेषित करेगा।", - "maxRetries": "अधिकतम पुनः प्रयास", - "maxRetriesDescription": "टनल कनेक्शन के लिए अधिकतम पुनः प्रयास की संख्या।", - "retryInterval": "पुनः प्रयास अंतराल (सेकंड)", - "retryIntervalDescription": "पुनः प्रयास करने के बीच प्रतीक्षा करने का समय।", - "autoStartContainer": "कंटेनर लॉन्च होने पर ऑटो स्टार्ट", - "autoStartDesc": "कंटेनर लॉन्च होने पर यह टनल स्वचालित रूप से शुरू हो जाएगी", - "addConnection": "टनल कनेक्शन जोड़ें", - "tunnelType": "सुरंग प्रकार", - "tunnelTypeLocal": "स्थानीय (-एल)", - "tunnelTypeRemote": "रिमोट (-R)", - "tunnelTypeLocalDesc": "स्थानीय पोर्ट को रिमोट एंडपॉइंट पर अग्रेषित करें", - "tunnelTypeRemoteDesc": "रिमोट पोर्ट को लोकल मशीन पर फॉरवर्ड करें", - "tunnelForwardDescriptionLocal": "यह टनल स्थानीय पोर्ट {{sourcePort}} से एंडपॉइंट मशीन पर पोर्ट {{endpointPort}} तक ट्रैफ़िक को अग्रेषित करेगा।", - "tunnelForwardDescriptionRemote": "यह टनल स्रोत मशीन पर पोर्ट {{sourcePort}} (सामान्य टैब में वर्तमान कनेक्शन विवरण) से एंडपॉइंट मशीन पर पोर्ट {{endpointPort}} तक ट्रैफ़िक अग्रेषित करेगा।", "sshpassRequired": "पासवर्ड प्रमाणीकरण के लिए एसएसएचपास आवश्यक है", "sshpassRequiredDesc": "टनल में पासवर्ड प्रमाणीकरण के लिए, सिस्टम पर sshpass स्थापित होना आवश्यक है।", "otherInstallMethods": "स्थापना के अन्य तरीके:", @@ -1529,7 +1551,7 @@ "splitVertical": "ऊर्ध्वाधर विभाजन", "closePanel": "पैनल बंद करें", "reconnect": "रिकनेक्ट", - "sessionEnded": "सत्र समाप्त हुआ", + "sessionEnded": "Session ended.", "connectionLost": "Connection lost", "error": "त्रुटि: {{message}}", "disconnected": "डिस्कनेक्ट किया गया", @@ -1933,22 +1955,10 @@ "ascending": "आरोही", "descending": "अवरोही" }, - "tunnel": { - "log": { - "connecting": "सुरंग कनेक्शन स्थापित किया जा रहा है...", - "sourceConnecting": "स्रोत होस्ट {{host}}से कनेक्ट हो रहा है...", - "sourceConnected": "स्रोत होस्ट से कनेक्टेड", - "endpointResolving": "एंडपॉइंट होस्ट {{host}}को हल किया जा रहा है...", - "endpointResolved": "एंडपॉइंट होस्ट हल हो गया", - "forwarding": "पोर्ट फ़ॉरवर्डिंग सेटअप करना {{localPort}} → {{remotePort}}...", - "connected": "सुरंग सफलतापूर्वक स्थापित हो गई", - "retrying": "कनेक्शन विफल हो गया, {{countdown}}सेकंड में पुनः प्रयास किया जा रहा है (प्रयास {{attempt}}/{{max}})...", - "retryExhausted": "अधिकतम पुनः प्रयास प्रयासों की सीमा पूरी हो गई है।", - "error": "टनल कनेक्शन विफल: {{error}}" - } - }, "tunnels": { "title": "एसएसएच टनल", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "कोई एसएसएच टनल नहीं", "createFirstTunnelMessage": "आपने अभी तक कोई SSH टनल नहीं बनाई है। शुरुआत करने के लिए होस्ट मैनेजर में टनल कनेक्शन कॉन्फ़िगर करें।", "connected": "जुड़े हुए", @@ -1969,27 +1979,100 @@ "disconnect": "डिस्कनेक्ट", "cancel": "रद्द करना", "port": "पत्तन", + "localPort": "स्थानीय बंदरगाह", + "remotePort": "रिमोट पोर्ट", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "प्रयास {{current}} का {{max}}", "nextRetryIn": "अगला प्रयास {{seconds}} सेकंड में होगा", "checkDockerLogs": "त्रुटि का कारण जानने के लिए अपने डॉकर लॉग की जाँच करें, और फिर शामिल हों।", "orCreate": "या बनाएँ ", "noTunnelConnections": "कोई टनल कनेक्शन कॉन्फ़िगर नहीं किया गया है", "tunnelConnections": "सुरंग कनेक्शन", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "सुरंग जोड़ें", "editTunnel": "सुरंग संपादित करें", "deleteTunnel": "सुरंग हटाएं", "tunnelName": "सुरंग का नाम", - "localPort": "स्थानीय बंदरगाह", "remoteHost": "रिमोट होस्ट", - "remotePort": "रिमोट पोर्ट", "autoStart": "ऑटो स्टार्ट", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "स्थिति", "active": "सक्रिय", "inactive": "निष्क्रिय", "start": "शुरू", "stop": "रुकना", + "test": "Test", "restart": "पुनः आरंभ करें", "connectionType": "रिश्ते का प्रकार", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "स्थानीय", "remote": "दूर", "dynamic": "गतिशील", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "इस सर्वर से कनेक्ट करने के लिए कृपया अपने SSH क्रेडेंशियल प्रदान करें।", "sshPasswordDescription": "इस एसएसएच कनेक्शन के लिए पासवर्ड दर्ज करें।", "sshKeyPasswordDescription": "यदि आपकी SSH कुंजी एन्क्रिप्टेड है, तो यहां पासफ़्रेज़ दर्ज करें।", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "चरण 1: अपने प्रमाणीकरण ऐप से क्यूआर कोड को स्कैन करें", "manualEntryCode": "मैनुअल एंट्री कोड", "cannotScanQRText": "यदि आप क्यूआर कोड स्कैन नहीं कर पा रहे हैं, तो इस कोड को अपने प्रमाणीकरण ऐप में मैन्युअल रूप से दर्ज करें।", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "पासवर्ड रीसेट करने में विफलता", "invalidTotpCode": "अमान्य टीओटीपी कोड", "failedOidcLogin": "OIDC लॉगिन शुरू करने में विफल", - "failedUserInfo": "OIDC लॉगिन के बाद उपयोगकर्ता जानकारी प्राप्त करने में विफलता", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "OIDC प्रमाणीकरण विफल रहा", "noTokenReceived": "लॉगिन से कोई टोकन प्राप्त नहीं हुआ", "invalidAuthUrl": "बैकएंड से अमान्य प्राधिकरण यूआरएल प्राप्त हुआ।", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "साइडबार में प्रत्येक होस्ट के नीचे टैग प्रदर्शित करें। सभी टैग छिपाने के लिए इसे अक्षम करें।", "account": "खाता", "appearance": "उपस्थिति", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "भाषा और स्थानीयकरण", "fileManagerSettings": "फ़ाइल मैनेजर", "terminalSettings": "टर्मिनल", @@ -2370,6 +2472,10 @@ "description": "एसएसएच क्रेडेंशियल विवरण", "searchCredentials": "नाम, उपयोगकर्ता नाम या टैग के आधार पर क्रेडेंशियल खोजें...", "sshConfig": "एंडपॉइंट एसएसएच कॉन्फ़िगरेशन", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/घर", "clientId": "आपका क्लाइंट आईडी", "clientSecret": "आपका-ग्राहक-गुप्त", @@ -2549,6 +2655,7 @@ "version": "संस्करण", "upToDate": "अप टू डेट", "updateAvailable": "उपलब्ध अद्यतन", + "beta": "Beta", "uptime": "अपटाइम", "database": "डेटाबेस", "healthy": "स्वस्थ", @@ -2955,6 +3062,20 @@ "error": "मैट्रिक्स संग्रह विफल: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "सुरंग कनेक्शन स्थापित किया जा रहा है...", + "sourceConnecting": "स्रोत होस्ट {{host}}से कनेक्ट हो रहा है...", + "sourceConnected": "स्रोत होस्ट से कनेक्टेड", + "endpointResolving": "एंडपॉइंट होस्ट {{host}}को हल किया जा रहा है...", + "endpointResolved": "एंडपॉइंट होस्ट हल हो गया", + "forwarding": "पोर्ट फ़ॉरवर्डिंग सेटअप करना {{localPort}} → {{remotePort}}...", + "connected": "सुरंग सफलतापूर्वक स्थापित हो गई", + "retrying": "कनेक्शन विफल हो गया, {{countdown}}सेकंड में पुनः प्रयास किया जा रहा है (प्रयास {{attempt}}/{{max}})...", + "retryExhausted": "अधिकतम पुनः प्रयास प्रयासों की सीमा पूरी हो गई है।", + "error": "टनल कनेक्शन विफल: {{error}}" + } + }, "sftp": { "log": { "connecting": "SFTP सर्वर से कनेक्ट हो रहा है...", diff --git a/src/locales/translated/hu_HU.json b/src/locales/translated/hu_HU.json index a56262a3..66a6e5ac 100644 --- a/src/locales/translated/hu_HU.json +++ b/src/locales/translated/hu_HU.json @@ -402,6 +402,8 @@ "currentVersion": "A(z) {{version}}verziót futtatod", "updateAvailable": "Frissítés elérhető", "newVersionAvailable": "Új verzió érhető el! A(z) {{current}}verziót futtatod, de a(z) {{latest}} elérhető.", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "Megjelent: {{date}}", "downloadUpdate": "Frissítés letöltése", "dismiss": "Elvetés", @@ -426,6 +428,8 @@ "warning": "Figyelmeztetés", "info": "Információ", "success": "Siker", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "Terhelés...", "required": "Kívánt", "optional": "Választható", @@ -471,6 +475,7 @@ "chinese": "kínai", "german": "német", "cancel": "Mégsem", + "done": "Done", "username": "Felhasználónév", "name": "Név", "login": "Bejelentkezés", @@ -486,6 +491,7 @@ "save": "Megtakarítás", "saving": "Megtakarítás...", "delete": "Töröl", + "rename": "Rename", "edit": "Szerkesztés", "add": "Hozzáadás", "search": "Keresés", @@ -559,7 +565,8 @@ "passwordCopied": "Jelszó a vágólapra másolva", "sudoPasswordCopied": "A Sudo jelszó a vágólapra másolva", "noPasswordAvailable": "Nincs elérhető jelszó", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Failed to copy password", + "openFileManager": "Open File Manager" }, "admin": { "title": "Adminisztrátori beállítások", @@ -868,7 +875,42 @@ "passwordMinLength": "A jelszónak legalább 6 karakterből kell állnia", "currentRoles": "Jelenlegi szerepkörök", "noRolesAssigned": "Nincsenek hozzárendelt szerepkörök", - "assignNewRole": "Új szerepkör hozzárendelése" + "assignNewRole": "Új szerepkör hozzárendelése", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "Házigazda-kezelő", @@ -962,28 +1004,8 @@ "enableDocker": "Docker engedélyezése", "defaultPath": "Alapértelmezett elérési út", "defaultPathDesc": "Alapértelmezett könyvtár a gazdagép fájlkezelőjének megnyitásakor", - "tunnelConnections": "Alagútkapcsolatok", "connection": "Kapcsolat", "remove": "Eltávolítás", - "sourcePort": "Forrásport", - "sourcePortDesc": " (A forrás az Általános lapon található Aktuális kapcsolat adataira utal)", - "endpointPort": "Végponti port", - "endpointSshConfig": "Végpont SSH konfiguráció", - "tunnelForwardDescription": "Ez az alagút a forrásgép {{sourcePort}} portjáról (az aktuális kapcsolat részletei az általános fülön találhatók) a véggép {{endpointPort}} portjára továbbítja a forgalmat.", - "maxRetries": "Max. újrapróbálkozások", - "maxRetriesDescription": "Az alagútkapcsolat újrapróbálkozási kísérleteinek maximális száma.", - "retryInterval": "Újrapróbálkozási intervallum (másodperc)", - "retryIntervalDescription": "Várakozási idő az újrapróbálkozások között.", - "autoStartContainer": "Automatikus indítás konténerindításkor", - "autoStartDesc": "Automatikusan indítsa el ezt az alagutat a konténer indulásakor", - "addConnection": "Alagútkapcsolat hozzáadása", - "tunnelType": "Alagút típusa", - "tunnelTypeLocal": "Helyi (-L)", - "tunnelTypeRemote": "Távoli (-R)", - "tunnelTypeLocalDesc": "Helyi port továbbítása távoli végpontra", - "tunnelTypeRemoteDesc": "Távoli port továbbítása a helyi gépre", - "tunnelForwardDescriptionLocal": "Ez az alagút a helyi {{sourcePort}} portról a végpont gép {{endpointPort}} portjára fogja továbbítani a forgalmat.", - "tunnelForwardDescriptionRemote": "Ez az alagút a forrásgép {{sourcePort}} portjáról (az aktuális kapcsolat részletei az általános fülön találhatók) a véggép {{endpointPort}} portjára továbbítja a forgalmat.", "sshpassRequired": "Sshpass szükséges a jelszóhitelesítéshez", "sshpassRequiredDesc": "A jelszavas hitelesítéshez alagutakban az sshpass-nak telepítve kell lennie a rendszeren.", "otherInstallMethods": "Egyéb telepítési módok:", @@ -1529,7 +1551,7 @@ "splitVertical": "Függőleges felosztás", "closePanel": "Panel bezárása", "reconnect": "Újracsatlakozás", - "sessionEnded": "Munkamenet vége", + "sessionEnded": "Session ended.", "connectionLost": "Connection lost", "error": "HIBA: {{message}}", "disconnected": "Szétkapcsolt", @@ -1933,22 +1955,10 @@ "ascending": "Növekvő", "descending": "Csökkenő" }, - "tunnel": { - "log": { - "connecting": "Alagútkapcsolat létrehozása...", - "sourceConnecting": "Kapcsolódás a forrásgéphez {{host}}...", - "sourceConnected": "Csatlakozva a forrásgazdagéphez", - "endpointResolving": "Végpont hoszt feloldása {{host}}...", - "endpointResolved": "Végponti gazdagép feloldva", - "forwarding": "Porttovábbítás beállítása {{localPort}} → {{remotePort}}...", - "connected": "Alagút sikeresen létesült", - "retrying": "Sikertelen kapcsolódás, újrapróbálkozás {{countdown}}s múlva (próbálkozás {{attempt}}/{{max}})...", - "retryExhausted": "Elérte az újrapróbálkozások maximális számát", - "error": "Alagútkapcsolat sikertelen: {{error}}" - } - }, "tunnels": { "title": "SSH alagutak", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "Nincsenek SSH alagutak", "createFirstTunnelMessage": "Még nem hozott létre SSH alagutakat. A kezdéshez konfigurálja az alagútkapcsolatokat a Host Managerben.", "connected": "Csatlakoztatva", @@ -1969,27 +1979,100 @@ "disconnect": "Leválasztás", "cancel": "Mégsem", "port": "Kikötő", + "localPort": "Helyi kikötő", + "remotePort": "Távoli port", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "{{current}} kísérlet a {{max}}-ből", "nextRetryIn": "Következő újrapróbálkozás {{seconds}} másodperc múlva", "checkDockerLogs": "Ellenőrizd a Docker naplóidat a hiba okának kiderítéséhez, csatlakozz a", "orCreate": "vagy hozzon létre egy ", "noTunnelConnections": "Nincsenek konfigurált alagútkapcsolatok", "tunnelConnections": "Alagútkapcsolatok", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "Alagút hozzáadása", "editTunnel": "Alagút szerkesztése", "deleteTunnel": "Alagút törlése", "tunnelName": "Alagút neve", - "localPort": "Helyi kikötő", "remoteHost": "Távoli gép", - "remotePort": "Távoli port", "autoStart": "Automatikus indítás", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "Állapot", "active": "Aktív", "inactive": "Inaktív", "start": "Indul", "stop": "Stop", + "test": "Test", "restart": "Újraindítás", "connectionType": "Kapcsolat típusa", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "Helyi", "remote": "Távoli", "dynamic": "Dinamikus", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Kérjük, adja meg SSH hitelesítő adatait a szerverhez való csatlakozáshoz.", "sshPasswordDescription": "Add meg az SSH-kapcsolat jelszavát.", "sshKeyPasswordDescription": "Ha az SSH-kulcsa titkosított, adja meg itt a jelszót.", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "1. lépés: Olvasd be a QR-kódot a hitelesítő alkalmazásoddal", "manualEntryCode": "Manuális beviteli kód", "cannotScanQRText": "Ha nem tudod beolvasni a QR-kódot, írd be manuálisan a kódot a hitelesítő alkalmazásodba.", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Nem sikerült befejezni a jelszó visszaállítását", "invalidTotpCode": "Érvénytelen TOTP-kód", "failedOidcLogin": "Nem sikerült elindítani az OIDC bejelentkezést", - "failedUserInfo": "Nem sikerült lekérni a felhasználói adatokat az OIDC bejelentkezés után", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "OIDC hitelesítés sikertelen", "noTokenReceived": "Nem érkezett token a bejelentkezésből", "invalidAuthUrl": "Érvénytelen engedélyezési URL érkezett a háttérrendszertől", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Címkék megjelenítése az egyes gazdagépek alatt az oldalsávon. Letiltás az összes címke elrejtéséhez.", "account": "Fiók", "appearance": "Megjelenés", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "Nyelv és lokalizáció", "fileManagerSettings": "Fájlkezelő", "terminalSettings": "Terminál", @@ -2370,6 +2472,10 @@ "description": "SSH hitelesítő adatok leírása", "searchCredentials": "Hitelesítő adatok keresése név, felhasználónév vagy címkék alapján...", "sshConfig": "végpont ssh konfiguráció", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/otthon", "clientId": "az ügyfél-azonosítója", "clientSecret": "az-ügyfél-titkos-kulcsa", @@ -2549,6 +2655,7 @@ "version": "Változat", "upToDate": "Naprakész", "updateAvailable": "Frissítés elérhető", + "beta": "Beta", "uptime": "Üzemidő", "database": "Adatbázis", "healthy": "Egészséges", @@ -2955,6 +3062,20 @@ "error": "A metrikák gyűjtése sikertelen: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Alagútkapcsolat létrehozása...", + "sourceConnecting": "Kapcsolódás a forrásgéphez {{host}}...", + "sourceConnected": "Csatlakozva a forrásgazdagéphez", + "endpointResolving": "Végpont hoszt feloldása {{host}}...", + "endpointResolved": "Végponti gazdagép feloldva", + "forwarding": "Porttovábbítás beállítása {{localPort}} → {{remotePort}}...", + "connected": "Alagút sikeresen létesült", + "retrying": "Sikertelen kapcsolódás, újrapróbálkozás {{countdown}}s múlva (próbálkozás {{attempt}}/{{max}})...", + "retryExhausted": "Elérte az újrapróbálkozások maximális számát", + "error": "Alagútkapcsolat sikertelen: {{error}}" + } + }, "sftp": { "log": { "connecting": "Kapcsolódás az SFTP-kiszolgálóhoz...", diff --git a/src/locales/translated/id_ID.json b/src/locales/translated/id_ID.json index 4016d560..56c3416d 100644 --- a/src/locales/translated/id_ID.json +++ b/src/locales/translated/id_ID.json @@ -12,12 +12,12 @@ "updateCredential": "Perbarui Kredensial", "credentialName": "Nama Kredensial", "credentialDescription": "Keterangan", - "username": "Nama belakang", + "username": "Nama pengguna", "searchCredentials": "Cari kredensial...", "selectFolder": "Pilih Folder", "selectAuthType": "Pilih Jenis Otorisasi", "allFolders": "Semua Folder", - "allAuthTypes": "Semua Jenis Otorisasi", + "allAuthTypes": "Semua Tipe Autentikasi", "uncategorized": "Tidak dikategorikan", "totalCredentials": "Total", "keyBased": "Berbasis kunci", @@ -196,7 +196,7 @@ "description": "Terhubung langsung ke sesi terminal atau pengelola file tanpa menyimpan konfigurasi host.", "ipAddress": "Alamat IP atau Nama Host", "port": "Pelabuhan", - "username": "Nama belakang", + "username": "Nama pengguna", "password": "Kata sandi", "key": "Kunci Pribadi SSH", "keyPassword": "Kata Sandi Kunci (Opsional)", @@ -277,19 +277,19 @@ "copyTooltip": "Salin cuplikan ke papan klip", "editTooltip": "Edit cuplikan ini", "deleteTooltip": "Hapus cuplikan ini", - "shareTooltip": "Share this snippet", - "sharedWithYou": "Shared", - "sharedBy": "Shared by {{username}}", - "shareSnippet": "Share Snippet", - "user": "User", - "role": "Role", - "selectTarget": "Select...", - "currentAccess": "Current Access", - "shareSuccess": "Snippet shared successfully", - "shareFailed": "Failed to share snippet", - "revokeSuccess": "Access revoked", - "revokeFailed": "Failed to revoke access", - "failedToLoadShareData": "Failed to load sharing data", + "shareTooltip": "Bagikan snippet ini", + "sharedWithYou": "Dibagikan", + "sharedBy": "Dibagikan oleh {{username}}", + "shareSnippet": "Bagikan snippet", + "user": "Pengguna", + "role": "Peran", + "selectTarget": "Pilih...", + "currentAccess": "Akses saat ini", + "shareSuccess": "Snippet berhasil dibagikan", + "shareFailed": "Gagal membagikan snippet", + "revokeSuccess": "Akses dicabut", + "revokeFailed": "Gagal mencabut akses", + "failedToLoadShareData": "Gagal memuat data yang dibagikan", "newFolder": "Folder Baru", "reorderSameFolder": "Hanya dapat mengubah urutan cuplikan dalam folder yang sama.", "reorderSuccess": "Cuplikan berhasil diurutkan ulang", @@ -337,8 +337,8 @@ "dataAccessLockedReauth": "Akses data terkunci. Silakan autentikasi ulang.", "loading": "Memuat riwayat perintah...", "error": "Kesalahan Saat Memuat Riwayat", - "disabledTitle": "Command History is Disabled", - "disabledDescription": "Enable Command History Tracking in your profile under Appearance settings." + "disabledTitle": "Riwayat perintah dinonaktifkan", + "disabledDescription": "Aktifkan pelacakan riwayat perintah di profil Anda pada pengaturan Tampilan." }, "splitScreen": { "title": "Layar Terpisah", @@ -402,6 +402,8 @@ "currentVersion": "Anda menjalankan versi {{version}}", "updateAvailable": "Pembaruan Tersedia", "newVersionAvailable": "Versi baru tersedia! Anda menjalankan {{current}}, tetapi {{latest}} tersedia.", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "Dirilis pada {{date}}", "downloadUpdate": "Unduh Pembaruan", "dismiss": "Membubarkan", @@ -426,6 +428,8 @@ "warning": "Peringatan", "info": "Informasi", "success": "Kesuksesan", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "Memuat...", "required": "Diperlukan", "optional": "Opsional", @@ -465,13 +469,14 @@ "file": "Mengajukan", "renamedSuccessfully": "berhasil diganti namanya", "deletedSuccessfully": "berhasil dihapus", - "noTunnelConnections": "Tidak ada koneksi terowongan yang dikonfigurasi.", + "noTunnelConnections": "Tidak ada koneksi tunnel yang dikonfigurasi", "sshTools": "Alat SSH", "english": "Bahasa inggris", "chinese": "Cina", "german": "Jerman", "cancel": "Membatalkan", - "username": "Nama belakang", + "done": "Done", + "username": "Nama pengguna", "name": "Nama", "login": "Login", "logout": "Keluar", @@ -486,6 +491,7 @@ "save": "Menyimpan", "saving": "Penghematan...", "delete": "Menghapus", + "rename": "Rename", "edit": "Edit", "add": "Menambahkan", "search": "Mencari", @@ -525,8 +531,8 @@ "checkingDatabase": "Memeriksa koneksi basis data...", "checkingAuthentication": "Memeriksa autentikasi...", "backendReconnected": "Koneksi server dipulihkan.", - "connectionDegraded": "Server connection lost, recovering…", - "reload": "Reload", + "connectionDegraded": "Koneksi server terputus, sedang memulihkan…", + "reload": "Muat Ulang", "actions": "Tindakan", "remove": "Menghapus", "revoke": "Menarik kembali", @@ -539,7 +545,7 @@ "credentials": "Kredensial", "terminal": "Terminal", "docker": "Buruh pelabuhan", - "tunnels": "Terowongan", + "tunnels": "Tunnels", "fileManager": "Pengelola File", "serverStats": "Statistik Server", "admin": "Admin", @@ -559,7 +565,8 @@ "passwordCopied": "Kata sandi disalin ke papan klip", "sudoPasswordCopied": "Kata sandi Sudo disalin ke papan klip", "noPasswordAvailable": "Tidak ada kata sandi yang tersedia", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Gagal menyalin kata sandi", + "openFileManager": "Open File Manager" }, "admin": { "title": "Pengaturan Admin", @@ -592,7 +599,7 @@ "loading": "Memuat...", "refresh": "Menyegarkan", "loadingUsers": "Sedang memuat pengguna...", - "username": "Nama belakang", + "username": "Nama pengguna", "type": "Jenis", "actions": "Tindakan", "external": "Luar", @@ -826,13 +833,13 @@ "globalSettingsSaved": "Pengaturan pemantauan global tersimpan", "failedToSaveGlobalSettings": "Gagal menyimpan pengaturan pemantauan global.", "failedToLoadGlobalSettings": "Gagal memuat pengaturan pemantauan global.", - "sessionTimeout": "Session Timeout", - "sessionTimeoutDesc": "Configure how long user sessions last before requiring re-authentication. 'Remember Me' sessions are unaffected (always 30 days).", - "sessionTimeoutHours": "Timeout Duration", - "hours": "hours", - "sessionTimeoutNote": "Valid range: 1–720 hours. Changes apply to new sessions only.", - "sessionTimeoutSaved": "Session timeout saved", - "failedToSaveSessionTimeout": "Failed to save session timeout", + "sessionTimeout": "Sesi Kedaluwarsa", + "sessionTimeoutDesc": "Atur durasi sesi pengguna sebelum memerlukan autentikasi ulang. Sesi 'Ingat Saya' tidak terpengaruh (selalu 30 hari).", + "sessionTimeoutHours": "Durasi Kedaluwarsa", + "hours": "jam", + "sessionTimeoutNote": "Rentang valid: 1–720 jam. Perubahan hanya berlaku untuk sesi baru.", + "sessionTimeoutSaved": "Gagal menyimpan batas waktu sesi", + "failedToSaveSessionTimeout": "Gagal menyimpan batas waktu sesi", "guacamoleIntegration": "Integrasi Desktop Jarak Jauh (Guacamole)", "guacamoleIntegrationDesc": "Aktifkan koneksi RDP, VNC, dan Telnet melalui guacd. Membutuhkan instance guacd yang sedang berjalan.", "enableGuacamole": "Aktifkan dukungan RDP/VNC/Telnet", @@ -842,12 +849,12 @@ "guacamoleSettingsSaved": "Pengaturan guacamole tersimpan.", "failedToSaveGuacamoleSettings": "Gagal menyimpan pengaturan guacamole", "failedToLoadGuacamoleSettings": "Gagal memuat pengaturan guacamole", - "logLevel": "Log Level", - "logLevelDesc": "Control the verbosity of server logs. Higher levels reduce log output. Can also be set via the LOG_LEVEL environment variable.", - "logVerbosity": "Verbosity", - "logLevelNote": "Changes take effect immediately. Debug level may impact performance.", - "logLevelSaved": "Log level saved", - "failedToSaveLogLevel": "Failed to save log level", + "logLevel": "Level Log", + "logLevelDesc": "Atur seberapa detail log server yang ditampilkan. Level lebih tinggi berarti log lebih sedikit. Bisa juga diatur lewat environment variable LOG_LEVEL.", + "logVerbosity": "Tingkat Detail", + "logLevelNote": "Perubahan langsung berlaku. Level debug dapat mempengaruhi performa.", + "logLevelSaved": "Level log berhasil disimpan", + "failedToSaveLogLevel": "Gagal menyimpan level log", "clampedToValidRange": "disesuaikan ke rentang yang valid", "loadingSessions": "Memuat sesi...", "noActiveSessions": "Tidak ditemukan sesi aktif.", @@ -868,7 +875,42 @@ "passwordMinLength": "Kata sandi harus terdiri minimal 6 karakter.", "currentRoles": "Peran Saat Ini", "noRolesAssigned": "Tidak ada peran yang ditugaskan", - "assignNewRole": "Tetapkan Peran Baru" + "assignNewRole": "Tetapkan Peran Baru", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "Manajer Host", @@ -884,11 +926,11 @@ "hostsCount": "{{count}} tuan rumah", "importJson": "Impor JSON", "importing": "Pengimporan...", - "exportAllJson": "Export All", - "exporting": "Exporting...", - "exportedAllHosts": "Exported {{count}} hosts", - "failedToExportAllHosts": "Failed to export hosts. Please ensure you're logged in and have access to the host data.", - "exportAllSensitiveWarning": "The exported file will contain sensitive authentication data (passwords/SSH keys) in plaintext. Please keep the file secure and delete it after use.", + "exportAllJson": "Ekspor semua", + "exporting": "Mengekspor...", + "exportedAllHosts": "{{count}} host berhasil diekspor", + "failedToExportAllHosts": "Gagal mengekspor host. Pastikan Anda sudah login dan memiliki akses ke data host.", + "exportAllSensitiveWarning": "File yang diekspor akan mengandung data autentikasi sensitif (kata sandi/kunci SSH) dalam bentuk teks biasa. Simpan file ini dengan aman dan hapus setelah digunakan.", "importJsonTitle": "Impor Host SSH dari JSON", "importJsonDesc": "Unggah file JSON untuk mengimpor beberapa host SSH secara massal (maksimal 100).", "downloadSample": "Unduh Sampel", @@ -921,16 +963,16 @@ "guacamoleSettings": "Pengaturan Desktop Jarak Jauh", "organization": "Organisasi", "ipAddress": "Alamat IP atau Nama Host", - "macAddress": "MAC Address", - "macAddressDesc": "For Wake-on-LAN. Format: AA:BB:CC:DD:EE:FF", + "macAddress": "Alamat MAC", + "macAddressDesc": "Untuk Wake-on-LAN. Format: AA:BB:CC:DD:EE:FF", "wakeOnLan": "Wake-on-LAN", - "wolSent": "Wake-on-LAN packet sent", - "wolFailed": "Failed to send Wake-on-LAN packet", + "wolSent": "Paket Wake-on-LAN berhasil dikirim", + "wolFailed": "Gagal mengirim paket Wake-on-LAN", "ipRequired": "Alamat IP diperlukan.", "portRequired": "Port diperlukan", "port": "Pelabuhan", "name": "Nama", - "username": "Nama belakang", + "username": "Nama pengguna", "usernameRequired": "Nama pengguna wajib diisi (hanya untuk SSH/Telnet)", "folder": "Map", "tags": "Tag", @@ -954,7 +996,7 @@ "cloningHost": "Mengkloning host...", "enableTerminal": "Aktifkan Terminal", "enableTerminalDesc": "Aktifkan/nonaktifkan visibilitas host di tab Terminal.", - "enableTunnel": "Aktifkan Terowongan", + "enableTunnel": "Aktifkan Tunnel", "enableTunnelDesc": "Aktifkan/nonaktifkan visibilitas host di tab Tunnel.", "enableFileManager": "Aktifkan Pengelola File", "enableFileManagerDesc": "Aktifkan/nonaktifkan visibilitas host di tab Pengelola File.", @@ -962,30 +1004,10 @@ "enableDocker": "Aktifkan Docker", "defaultPath": "Jalur Default", "defaultPathDesc": "Direktori default saat membuka pengelola file untuk host ini", - "tunnelConnections": "Koneksi Terowongan", "connection": "Koneksi", "remove": "Menghapus", - "sourcePort": "Port Sumber", - "sourcePortDesc": " (Sumber mengacu pada Detail Koneksi Saat Ini di tab Umum)", - "endpointPort": "Port Titik Akhir", - "endpointSshConfig": "Konfigurasi Endpoint SSH", - "tunnelForwardDescription": "Terowongan ini akan meneruskan lalu lintas dari port {{sourcePort}} pada mesin sumber (detail koneksi saat ini di tab umum) ke port {{endpointPort}} pada mesin titik akhir.", - "maxRetries": "Jumlah Percobaan Maksimum", - "maxRetriesDescription": "Jumlah maksimum percobaan ulang untuk koneksi terowongan.", - "retryInterval": "Interval Percobaan Ulang (detik)", - "retryIntervalDescription": "Waktu tunggu antar upaya percobaan ulang.", - "autoStartContainer": "Mulai Otomatis saat Kontainer Diluncurkan", - "autoStartDesc": "Secara otomatis memulai terowongan ini saat kontainer diluncurkan.", - "addConnection": "Tambahkan Koneksi Terowongan", - "tunnelType": "Jenis Terowongan", - "tunnelTypeLocal": "Lokal (-L)", - "tunnelTypeRemote": "Jarak Jauh (-R)", - "tunnelTypeLocalDesc": "Teruskan port lokal ke titik akhir jarak jauh.", - "tunnelTypeRemoteDesc": "Teruskan port jarak jauh ke mesin lokal.", - "tunnelForwardDescriptionLocal": "Terowongan ini akan meneruskan lalu lintas dari port lokal {{sourcePort}} ke port {{endpointPort}} pada mesin titik akhir.", - "tunnelForwardDescriptionRemote": "Terowongan ini akan meneruskan lalu lintas dari port {{sourcePort}} pada mesin sumber (detail koneksi saat ini di tab umum) ke port {{endpointPort}} pada mesin titik akhir.", "sshpassRequired": "Sshpass Diperlukan untuk Otentikasi Kata Sandi", - "sshpassRequiredDesc": "Untuk otentikasi kata sandi di dalam terowongan, sshpass harus diinstal pada sistem.", + "sshpassRequiredDesc": "Untuk otentikasi kata sandi di dalam tunnel, sshpass harus diinstal pada sistem.", "otherInstallMethods": "Metode pemasangan lainnya:", "debianUbuntuEquivalent": "(Debian/Ubuntu) atau yang setara untuk sistem operasi Anda.", "or": "atau", @@ -993,7 +1015,7 @@ "macos": "macOS", "windows": "Windows (WSL, tidak ada binary resmi)", "sshServerConfigRequired": "Konfigurasi Server SSH Diperlukan", - "sshServerConfigDesc": "Untuk koneksi terowongan, server SSH harus dikonfigurasi untuk mengizinkan penerusan port:", + "sshServerConfigDesc": "Untuk koneksi tunnel, server SSH harus dikonfigurasi untuk mengizinkan penerusan port:", "gatewayPortsYes": "untuk mengikat port jarak jauh ke semua antarmuka", "allowTcpForwardingYes": "untuk mengaktifkan penerusan port", "permitRootLoginYes": "jika menggunakan pengguna root untuk tunneling", @@ -1033,11 +1055,11 @@ "existingCredential": "Kredensial yang Sudah Ada (klik untuk mengubah)", "addTagsSpaceToAdd": "Tambahkan tag (ruang untuk menambahkan)", "terminalBadge": "Terminal", - "tunnelBadge": "Terowongan", + "tunnelBadge": "Tunnel", "fileManagerBadge": "Pengelola File", "general": "Umum", "terminal": "Terminal", - "tunnel": "Terowongan", + "tunnel": "Tunnel", "fileManager": "Pengelola File", "serverStats": "Statistik Server", "status": "Status", @@ -1088,11 +1110,11 @@ "dragToMoveBetweenFolders": "Seret untuk berpindah antar folder", "exportedHostConfig": "Konfigurasi host yang diekspor untuk {{name}}", "openTerminal": "Terminal Terbuka", - "openRdp": "Open RDP", - "openVnc": "Open VNC", - "openTelnet": "Open Telnet", + "openRdp": "Buka RDP", + "openVnc": "Buka VNC", + "openTelnet": "Buka Telnet", "openFileManager": "Buka Pengelola File", - "openTunnels": "Terowongan Terbuka", + "openTunnels": "Tunnel Terbuka", "openServerDetails": "Buka Detail Server", "enabledWidgets": "Widget yang Diaktifkan", "openServerStats": "Statistik Server Terbuka", @@ -1204,8 +1226,8 @@ "jumpHostsOrder": "Koneksi akan dibuat secara berurutan: Jump Host 1 → Jump Host 2 → ... → Server Target", "socks5Proxy": "Proksi SOCKS5", "portKnocking": "Port Knocking", - "portKnockingDesc": "Send a sequence of connection attempts to specified ports before connecting. Used to open firewall rules dynamically.", - "addKnock": "Add Port", + "portKnockingDesc": "Kirim serangkaian percobaan koneksi ke port tertentu sebelum terhubung. Digunakan untuk membuka aturan firewall secara dinamis.", + "addKnock": "Tambah Port", "delayMs": "Delay", "socks5Description": "Konfigurasikan proxy SOCKS5 untuk koneksi SSH. Semua lalu lintas akan dialihkan melalui server proxy yang ditentukan.", "enableSocks5": "Aktifkan Proksi SOCKS5", @@ -1260,8 +1282,8 @@ "showTerminalInSidebarDesc": "Tampilkan terminal sebagai tombol cepat di bilah sisi.", "showFileManagerInSidebar": "Tampilkan Tombol Pengelola File", "showFileManagerInSidebarDesc": "Tampilkan pengelola file sebagai tombol cepat di bilah sisi.", - "showTunnelInSidebar": "Tampilkan Tombol Terowongan", - "showTunnelInSidebarDesc": "Tampilkan manajemen terowongan sebagai tombol cepat di bilah sisi.", + "showTunnelInSidebar": "Tampilkan Tombol Tunnel", + "showTunnelInSidebarDesc": "Tampilkan manajemen tunnel sebagai tombol cepat di bilah sisi", "showDockerInSidebar": "Tampilkan Tombol Docker", "showDockerInSidebarDesc": "Tampilkan manajemen Docker sebagai tombol cepat di bilah sisi.", "showServerStatsInSidebar": "Tombol Tampilkan Statistik Server", @@ -1292,7 +1314,7 @@ "moshCommand": "Komando MOSH", "moshCommandDesc": "Perintah MOSH untuk dieksekusi", "autoTmux": "Auto-tmux", - "autoTmuxDesc": "Automatically attach to an existing (or start a new) tmux session for persistent sessions and cross-device continuity", + "autoTmuxDesc": "Otomatis terhubung ke sesi tmux yang sudah ada (atau membuat baru) untuk sesi persisten dan kontinuitas lintas perangkat", "environmentVariables": "Variabel Lingkungan", "environmentVariablesDesc": "Tetapkan variabel lingkungan khusus untuk sesi terminal.", "variableName": "Nama variabel", @@ -1305,7 +1327,7 @@ "failedToCopyUrl": "Gagal menyalin URL ke papan klip.", "copyTerminalUrl": "Salin URL Terminal", "copyFileManagerUrl": "Salin URL Pengelola File", - "copyTunnelUrl": "Salin URL Terowongan", + "copyTunnelUrl": "Salin URL Tunnel", "copyServerStatsUrl": "Salin URL Statistik Server", "copyDockerUrl": "Salin URL Docker", "copyRemoteDesktopUrl": "Salin URL Remote Desktop", @@ -1414,8 +1436,8 @@ "disableMetrics": "Nonaktifkan Metrik", "bulkEnableTerminal": "Aktifkan Terminal", "bulkDisableTerminal": "Nonaktifkan Terminal", - "bulkEnableTunnel": "Aktifkan Terowongan", - "bulkDisableTunnel": "Nonaktifkan Terowongan", + "bulkEnableTunnel": "Aktifkan Tunnel", + "bulkDisableTunnel": "Nonaktifkan Tunnel", "bulkEnableFileManager": "Aktifkan Pengelola File", "bulkDisableFileManager": "Nonaktifkan Pengelola File", "bulkEnableDocker": "Aktifkan Docker", @@ -1529,8 +1551,8 @@ "splitVertical": "Vertikal Terpisah", "closePanel": "Tutup Panel", "reconnect": "Terhubung kembali", - "sessionEnded": "Sesi Berakhir", - "connectionLost": "Connection lost", + "sessionEnded": "Session ended.", + "connectionLost": "Koneksi terputus", "error": "KESALAHAN: {{message}}", "disconnected": "Terputus", "connectionClosed": "Koneksi terputus", @@ -1547,25 +1569,25 @@ "connecting": "Menghubungkan...", "reconnecting": "Menghubungkan kembali... ({{attempt}}/{{max}})", "reconnected": "Berhasil terhubung kembali", - "tmuxSessionCreated": "tmux session created: {{name}}", - "tmuxSessionAttached": "tmux session attached: {{name}}", - "tmuxUnavailable": "tmux is not installed on the remote host, falling back to standard shell", - "tmuxSessionPickerTitle": "tmux Sessions", - "tmuxSessionPickerDesc": "Existing tmux sessions found on this host. Select one to reattach or create a new session.", + "tmuxSessionCreated": "tmux session dibuat: {{name}}", + "tmuxSessionAttached": "sesi tmux terhubung: {{name}}", + "tmuxUnavailable": "tmux tidak terinstal di host, beralih ke shell standar", + "tmuxSessionPickerTitle": "sesi tmux", + "tmuxSessionPickerDesc": "Sesi tmux yang sudah ada ditemukan di host ini. Pilih salah satu untuk disambungkan kembali atau buat sesi baru.", "tmuxWindows": "Windows", "tmuxWindowCount": "{{count}} window", "tmuxWindowCount_other": "{{count}} windows", - "tmuxAttached": "Attached clients", - "tmuxAttachedCount": "{{count}} attached", - "tmuxLastActivity": "Last activity", - "tmuxTimeJustNow": "just now", - "tmuxTimeMinutes": "{{count}}m ago", - "tmuxTimeHours": "{{count}}h ago", - "tmuxTimeDays": "{{count}}d ago", - "tmuxCreateNew": "Start new session", - "tmuxCopyHint": "Adjust selection and press Enter to copy to clipboard", + "tmuxAttached": "Client terhubung", + "tmuxAttachedCount": "{{count}} terhubung", + "tmuxLastActivity": "Aktivitas terakhir", + "tmuxTimeJustNow": "baru saja", + "tmuxTimeMinutes": "{{count}} menit lalu", + "tmuxTimeHours": "{{count}} jam lalu", + "tmuxTimeDays": "{{count}} detik lalu", + "tmuxCreateNew": "Buat session baru", + "tmuxCopyHint": "Sesuaikan seleksi lalu tekan Enter untuk salin ke clipboard", "maxReconnectAttemptsReached": "Upaya penyambungan kembali maksimum telah tercapai.", - "closeTab": "Close", + "closeTab": "Tutup", "connectionTimeout": "Waktu habis koneksi", "terminalTitle": "Terminal - {{host}}", "terminalWithPath": "Terminal - {{host}}:{{path}}", @@ -1589,7 +1611,7 @@ "opksshTimeout": "Autentikasi habis waktu. Silakan coba lagi.", "opksshAuthFailed": "Autentikasi gagal. Silakan periksa kredensial Anda dan coba lagi.", "opksshConfigMissing": "Konfigurasi OPKSSH tidak ditemukan. Silakan buat ~/.opk/config.yml dengan pengaturan penyedia OIDC Anda. Lihat dokumentasi: https://github.com/openpubkey/opkssh#configuration", - "opksshSignInWith": "Sign in with {{provider}}", + "opksshSignInWith": "Masuk dengan {{provider}}", "sudoPasswordPopupTitle": "Masukkan kata sandi?", "sudoPasswordPopupHint": "Tekan Enter untuk memasukkan, Esc untuk menutup.", "sudoPasswordPopupConfirm": "Menyisipkan", @@ -1615,7 +1637,7 @@ "hostKeyRejected": "Verifikasi kunci host SSH ditolak. Koneksi dibatalkan.", "sessionTakenOver": "Sesi dibuka di tab lain. Sedang menyambungkan kembali...", "sessionAttachTimeout": "Waktu lampiran sesi habis. Membuat koneksi baru...", - "openFileManagerHere": "Open File Manager Here" + "openFileManagerHere": "Buka File Manager di Sini" }, "fileManager": { "title": "Pengelola File", @@ -1933,24 +1955,12 @@ "ascending": "Naik", "descending": "Menurun" }, - "tunnel": { - "log": { - "connecting": "Membangun koneksi terowongan...", - "sourceConnecting": "Menghubungkan ke host sumber {{host}}...", - "sourceConnected": "Terhubung ke host sumber", - "endpointResolving": "Menyelesaikan host titik akhir {{host}}...", - "endpointResolved": "Host titik akhir berhasil diidentifikasi.", - "forwarding": "Mengatur penerusan port {{localPort}} → {{remotePort}}...", - "connected": "Terowongan berhasil dibangun.", - "retrying": "Koneksi gagal, mencoba lagi dalam {{countdown}}detik (percobaan {{attempt}}/{{max}})...", - "retryExhausted": "Jumlah percobaan ulang maksimum telah tercapai.", - "error": "Koneksi terowongan gagal: {{error}}" - } - }, "tunnels": { - "title": "Terowongan SSH", - "noSshTunnels": "Tidak ada terowongan SSH", - "createFirstTunnelMessage": "Anda belum membuat terowongan SSH apa pun. Konfigurasikan koneksi terowongan di Host Manager untuk memulai.", + "title": "Tunnel SSH", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", + "noSshTunnels": "Tidak ada tunnel SSH", + "createFirstTunnelMessage": "Anda belum membuat tunnel SSH apa pun. Konfigurasikan koneksi tunnel di Host Manager untuk memulai.", "connected": "Terhubung", "disconnected": "Terputus", "connecting": "Menghubungkan...", @@ -1969,27 +1979,100 @@ "disconnect": "Memutuskan", "cancel": "Membatalkan", "port": "Pelabuhan", + "localPort": "Pelabuhan Lokal", + "remotePort": "Port Jarak Jauh", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "Percobaan {{current}} dari {{max}}", "nextRetryIn": "Percobaan berikutnya dalam {{seconds}} detik", "checkDockerLogs": "Periksa log Docker Anda untuk mengetahui penyebab kesalahan, bergabunglah dengan", "orCreate": "atau membuat ", - "noTunnelConnections": "Tidak ada koneksi terowongan yang dikonfigurasi.", - "tunnelConnections": "Koneksi Terowongan", - "addTunnel": "Tambahkan Terowongan", - "editTunnel": "Terowongan Edit", - "deleteTunnel": "Hapus Terowongan", - "tunnelName": "Nama Terowongan", - "localPort": "Pelabuhan Lokal", + "noTunnelConnections": "Tidak ada koneksi tunnel yang dikonfigurasi", + "tunnelConnections": "Koneksi Tunnel", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", + "addTunnel": "Tambahkan Tunnel", + "editTunnel": "Tunnel Edit", + "deleteTunnel": "Hapus Tunnel", + "tunnelName": "Nama Tunnel", "remoteHost": "Host Jarak Jauh", - "remotePort": "Port Jarak Jauh", "autoStart": "Mulai Otomatis", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "Status", "active": "Aktif", "inactive": "Tidak aktif", "start": "Awal", "stop": "Berhenti", + "test": "Test", "restart": "Mulai ulang", "connectionType": "Jenis Koneksi", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "Lokal", "remote": "Terpencil", "dynamic": "Dinamis", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Silakan berikan kredensial SSH Anda untuk terhubung ke server ini.", "sshPasswordDescription": "Masukkan kata sandi untuk koneksi SSH ini.", "sshKeyPasswordDescription": "Jika kunci SSH Anda dienkripsi, masukkan kata sandi di sini.", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "Langkah 1: Pindai kode QR dengan aplikasi otentikasi Anda", "manualEntryCode": "Kode Entri Manual", "cannotScanQRText": "Jika Anda tidak dapat memindai kode QR, masukkan kode ini secara manual di aplikasi otentikasi Anda.", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Gagal menyelesaikan pengaturan ulang kata sandi.", "invalidTotpCode": "Kode TOTP tidak valid", "failedOidcLogin": "Gagal memulai login OIDC.", - "failedUserInfo": "Gagal mendapatkan informasi pengguna setelah login OIDC.", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "Autentikasi OIDC gagal", "noTokenReceived": "Tidak ada token yang diterima dari login.", "invalidAuthUrl": "URL otorisasi yang diterima dari backend tidak valid.", @@ -2313,8 +2398,8 @@ "fileColorCodingDesc": "Beri kode warna pada file berdasarkan jenisnya: folder (merah), file (biru), symlink (hijau)", "commandAutocomplete": "Pelengkapan Otomatis Perintah", "commandAutocompleteDesc": "Aktifkan saran pelengkapan otomatis tombol Tab untuk perintah terminal berdasarkan riwayat perintah Anda.", - "commandHistoryTracking": "Save Command History", - "commandHistoryTrackingDesc": "Store terminal commands in history for autocomplete and sidebar. Disabled by default for privacy.", + "commandHistoryTracking": "Simpan Riwayat Perintah", + "commandHistoryTrackingDesc": "Simpan perintah terminal ke riwayat untuk autocomplete dan sidebar. Dinonaktifkan secara default untuk menjaga privasi.", "defaultSnippetFoldersCollapsed": "Secara default, folder cuplikan akan diciutkan.", "defaultSnippetFoldersCollapsedDesc": "Saat diaktifkan, semua folder cuplikan akan dilipat saat Anda membuka tab cuplikan.", "terminalSyntaxHighlighting": "Penyorotan Sintaks Terminal", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Tampilkan tag di bawah setiap host di sidebar. Nonaktifkan untuk menyembunyikan semua tag.", "account": "Akun", "appearance": "Penampilan", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "Bahasa & Lokalisasi", "fileManagerSettings": "Pengelola File", "terminalSettings": "Terminal", @@ -2356,7 +2458,7 @@ "maxRetries": "3", "retryInterval": "10", "language": "Bahasa", - "username": "nama belakang", + "username": "nama pengguna", "hostname": "nama host", "folder": "map", "password": "kata sandi", @@ -2370,6 +2472,10 @@ "description": "Deskripsi kredensial SSH", "searchCredentials": "Cari kredensial berdasarkan nama, nama pengguna, atau tag...", "sshConfig": "konfigurasi endpoint ssh", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/rumah", "clientId": "ID klien Anda", "clientSecret": "rahasia-klien-Anda", @@ -2432,7 +2538,7 @@ "offline": "Offline", "maintenance": "Pemeliharaan", "degraded": "Terdegradasi", - "noTunnelConnections": "Tidak ada koneksi terowongan yang dikonfigurasi.", + "noTunnelConnections": "Tidak ada koneksi tunnel yang dikonfigurasi", "discord": "Perselisihan", "connectToSshForOperations": "Hubungkan ke SSH untuk menggunakan operasi file.", "uploadFile": "Unggah File", @@ -2497,10 +2603,10 @@ "keyPassword": "Kata Sandi Kunci", "keyType": "Jenis Kunci", "enableTerminal": "Aktifkan Terminal", - "enableTunnel": "Aktifkan Terowongan", + "enableTunnel": "Aktifkan Tunnel", "enableFileManager": "Aktifkan Pengelola File", "defaultPath": "Jalur Default", - "tunnelConnections": "Koneksi Terowongan", + "tunnelConnections": "Koneksi Tunnel", "maxRetries": "Jumlah Percobaan Maksimum", "upload": "Mengunggah", "updateKey": "Kunci Pembaruan", @@ -2549,12 +2655,13 @@ "version": "Versi", "upToDate": "Terkini", "updateAvailable": "Pembaruan Tersedia", + "beta": "Beta", "uptime": "Waktu aktif", "database": "Basis data", "healthy": "Sehat", "error": "Kesalahan", - "totalHosts": "Total Hosts", - "totalTunnels": "Total Terowongan", + "totalHosts": "Total Host", + "totalTunnels": "Total Tunnel", "totalCredentials": "Kredensial Total", "recentActivity": "Aktivitas Terkini", "reset": "Mengatur ulang", @@ -2608,7 +2715,7 @@ "connectToHost": "Terhubung ke Host", "openTerminal": "Terminal Terbuka", "openFileManager": "Buka Pengelola File", - "openTunnel": "Terowongan Terbuka", + "openTunnel": "Tunnel Terbuka", "openDocker": "Buka Docker", "openServerStats": "Buka Detail Server", "moveToGroupAction": "Pindah ke Grup", @@ -2649,7 +2756,7 @@ "noNodeFound": "Tidak ada node yang ditemukan.", "terminal": "Terminal", "fileManager": "Pengelola File", - "tunnel": "Terowongan", + "tunnel": "Tunnel", "docker": "Buruh pelabuhan", "serverStats": "Statistik Server" }, @@ -2955,6 +3062,20 @@ "error": "Pengumpulan metrik gagal: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Membangun koneksi tunnel...", + "sourceConnecting": "Menghubungkan ke host sumber {{host}}...", + "sourceConnected": "Terhubung ke host sumber", + "endpointResolving": "Menyelesaikan host titik akhir {{host}}...", + "endpointResolved": "Host titik akhir berhasil diidentifikasi.", + "forwarding": "Mengatur penerusan port {{localPort}} → {{remotePort}}...", + "connected": "Tunnel berhasil dibangun", + "retrying": "Koneksi gagal, mencoba lagi dalam {{countdown}}detik (percobaan {{attempt}}/{{max}})...", + "retryExhausted": "Jumlah percobaan ulang maksimum telah tercapai.", + "error": "Koneksi tunnel gagal: {{error}}" + } + }, "sftp": { "log": { "connecting": "Menghubungkan ke server SFTP...", diff --git a/src/locales/translated/it_IT.json b/src/locales/translated/it_IT.json index 88e77a93..8f2eee0c 100644 --- a/src/locales/translated/it_IT.json +++ b/src/locales/translated/it_IT.json @@ -402,6 +402,8 @@ "currentVersion": "Stai eseguendo la versione {{version}}", "updateAvailable": "Aggiornamento Disponibile", "newVersionAvailable": "È disponibile una nuova versione! Stai eseguendo {{current}}, ma {{latest}} è disponibile.", + "betaVersion": "Versione Beta", + "betaVersionDesc": "Stai eseguendo {{current}}, che è più recente dell'ultima versione stabile {{latest}}.", "releasedOn": "Pubblicato il {{date}}", "downloadUpdate": "Scarica Aggiornamento", "dismiss": "Ignora", @@ -426,6 +428,8 @@ "warning": "Attenzione", "info": "Informazioni", "success": "Successo", + "unsavedChanges": "Modifiche non salvate", + "dismiss": "Ignora", "loading": "Caricamento...", "required": "Richiesto", "optional": "Facoltativo", @@ -471,6 +475,7 @@ "chinese": "Cinese", "german": "Tedesco", "cancel": "Annulla", + "done": "Fatto", "username": "Username", "name": "Nome", "login": "Accedi", @@ -486,6 +491,7 @@ "save": "Salva", "saving": "Salvataggio...", "delete": "Elimina", + "rename": "Rinomina", "edit": "Modifica", "add": "Aggiungi", "search": "Cerca", @@ -559,7 +565,8 @@ "passwordCopied": "Password copiata negli appunti", "sudoPasswordCopied": "Password Sudo copiata negli appunti", "noPasswordAvailable": "Nessuna password disponibile", - "failedToCopyPassword": "Impossibile copiare la password" + "failedToCopyPassword": "Impossibile copiare la password", + "openFileManager": "Apri File Manager" }, "admin": { "title": "Impostazioni Amministratore", @@ -868,7 +875,42 @@ "passwordMinLength": "La password deve contenere almeno 6 caratteri", "currentRoles": "Ruoli Attuali", "noRolesAssigned": "Nessun ruolo assegnato", - "assignNewRole": "Assegna Un Nuovo Ruolo" + "assignNewRole": "Assegna Un Nuovo Ruolo", + "apiKeys": { + "tabLabel": "Chiavi API", + "title": "Chiavi API", + "createApiKey": "Crea Chiave API", + "createApiKeyDescription": "Crea una nuova chiave API ad un utente specifico. Il token viene mostrato una sola volta.", + "keyCreated": "Chiave API Creata", + "keyCreatedDescription": "Copia questa chiave ora — non verrà mostrata di nuovo.", + "keyName": "Nome Della Chiave", + "keyNamePlaceholder": "es. Gasdotto CI/CD", + "scopedUser": "Utente Ampiato", + "selectUser": "Seleziona un utente...", + "searchUsers": "Cerca utenti...", + "noUsersFound": "Nessun utente trovato.", + "expiresAt": "Scade Il", + "optional": "opzionale", + "expiresAtHelp": "Lasciare vuoto per una chiave che non scade mai.", + "copyWarningTitle": "Salva la tua chiave API", + "copyWarningDescription": "Questa chiave verrà mostrata solo una volta. Conservala in un luogo sicuro.", + "apiKey": "Chiave API", + "tokenCopied": "Token copiato negli appunti", + "creating": "Creazione...", + "nameRequired": "Nome chiave obbligatorio", + "userRequired": "Seleziona un utente", + "failedToCreate": "Impossibile creare la chiave API", + "noKeys": "Nessuna chiave API trovata.", + "name": "Nome", + "prefix": "Prefisso", + "lastUsed": "Ultimo Utilizzato", + "never": "Mai", + "revokeKey": "Revoca chiave", + "confirmRevoke": "Sei sicuro di voler revocare la chiave API \"{{name}}\"? Questo non può essere annullato.", + "revokedSuccessfully": "Chiave API revocata con successo", + "failedToRevoke": "Impossibile revocare la chiave API", + "failedToFetch": "Recupero delle chiavi API non riuscito" + } }, "hosts": { "title": "Gestore Host", @@ -962,28 +1004,8 @@ "enableDocker": "Abilita Docker", "defaultPath": "Percorso Predefinito", "defaultPathDesc": "Directory predefinita all'apertura del file manager per questo host", - "tunnelConnections": "Connessioni Del Tunnel", "connection": "Connessione", "remove": "Rimuovi", - "sourcePort": "Porta Sorgente", - "sourcePortDesc": " (Fonte si riferisce ai dettagli della connessione corrente nella scheda Generale)", - "endpointPort": "Porta Endpoint", - "endpointSshConfig": "Configurazione SSH Endpoint", - "tunnelForwardDescription": "Questo tunnel inoltrerà il traffico dalla porta {{sourcePort}} sulla macchina di origine (dettagli di connessione corrente nella scheda generale) alla porta {{endpointPort}} sulla macchina di endpoint.", - "maxRetries": "Riprova Massima", - "maxRetriesDescription": "Numero massimo di tentativi di riprova per la connessione del tunnel.", - "retryInterval": "Intervallo Di Riprova (Secondi)", - "retryIntervalDescription": "Tempo di attesa tra i tentativi di riprova.", - "autoStartContainer": "Avvio automatico al lancio del contenitore", - "autoStartDesc": "Avvia automaticamente questo tunnel quando il contenitore viene lanciato", - "addConnection": "Aggiungi Connessione Tunnel", - "tunnelType": "Tipo Di Tunnel", - "tunnelTypeLocal": "Locale (-L)", - "tunnelTypeRemote": "Remoto (-R)", - "tunnelTypeLocalDesc": "Inoltra la porta locale all'endpoint remoto", - "tunnelTypeRemoteDesc": "Inoltra la porta remota alla macchina locale", - "tunnelForwardDescriptionLocal": "Questo tunnel inoltrerà il traffico dalla porta locale {{sourcePort}} alla porta {{endpointPort}} sulla macchina endpoint.", - "tunnelForwardDescriptionRemote": "Questo tunnel inoltrerà il traffico dalla porta {{sourcePort}} sulla macchina di origine (dettagli di connessione corrente nella scheda generale) alla porta {{endpointPort}} sulla macchina di endpoint.", "sshpassRequired": "Sshpass Richiesto Per Autenticazione Password", "sshpassRequiredDesc": "Per l'autenticazione con password in tunnel, sshpass deve essere installato sul sistema.", "otherInstallMethods": "Altri metodi di installazione:", @@ -1529,7 +1551,7 @@ "splitVertical": "Dividi Verticalmente", "closePanel": "Chiudi Pannello", "reconnect": "Riconnetti", - "sessionEnded": "Sessione Terminata", + "sessionEnded": "Sessione terminata.", "connectionLost": "Connessione persa", "error": "ERRORE: {{message}}", "disconnected": "Disconnesso", @@ -1933,22 +1955,10 @@ "ascending": "Crescente", "descending": "Decrescente" }, - "tunnel": { - "log": { - "connecting": "Stabilimento collegamento tunnel...", - "sourceConnecting": "Connessione all'host sorgente {{host}}...", - "sourceConnected": "Connesso all'host sorgente", - "endpointResolving": "Risoluzione host endpoint {{host}}...", - "endpointResolved": "Host endpoint risolto", - "forwarding": "Impostazione del port forwarding {{localPort}} → {{remotePort}}...", - "connected": "Tunnel creato con successo", - "retrying": "Connessione non riuscita, riprova in {{countdown}}s (tentativo {{attempt}}/{{max}})...", - "retryExhausted": "Max tentativi di riprova raggiunti", - "error": "Connessione tunnel fallita: {{error}}" - } - }, "tunnels": { "title": "Tunnel SSH", + "noTunnelsConfigured": "Nessun Tunnel Configurato", + "configureTunnelsInHostSettings": "Configura le connessioni del tunnel nel Gestore Host per iniziare", "noSshTunnels": "Nessun Tunnel Ssh", "createFirstTunnelMessage": "Non hai ancora creato nessun tunnel SSH. Configura le connessioni del tunnel nel Gestore Host per iniziare.", "connected": "Connesso", @@ -1969,27 +1979,100 @@ "disconnect": "Disconnetti", "cancel": "Annulla", "port": "Porta", + "localPort": "Porta Locale", + "remotePort": "Porta Remota", + "currentHostPort": "Porta Host Corrente", + "endpointPort": "Porta Endpoint", + "bindIp": "IP Locale", + "currentHostIp": "Ip Host Corrente", + "endpointSshConfig": "Configurazione SSH Endpoint", + "endpointSshConfigRequired": "È richiesta la configurazione SSH di Endpoint", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Seleziona un host configurato", + "endpointSshHostRequired": "Selezionare un host SSH endpoint per ogni tunnel client.", "attempt": "Tentativo di {{current}} di {{max}}", "nextRetryIn": "Prossimo riprovare in {{seconds}} secondi", "checkDockerLogs": "Controlla i tuoi registri Docker per il motivo di errore, unisciti al", "orCreate": "o crea un ", "noTunnelConnections": "Nessuna connessione al tunnel configurata", "tunnelConnections": "Connessioni Del Tunnel", + "serverTunnels": "Tunnel Del Server", + "serverTunnelsDesc": "Tunnel backend gestiti memorizzati con questo host.", + "clientTunnels": "Tunnel Client", + "clientTunnelsUnavailable": "I tunnel client richiedono un client desktop.", + "serverTunnel": "Tunnel Del Server", + "clientTunnel": "Tunnel Client", + "addServerTunnel": "Aggiungi Tunnel Server", + "addClientTunnel": "Aggiungi Tunnel Client", + "noServerTunnels": "Nessun tunnel server configurato.", + "noClientTunnels": "Nessun tunnel client configurato su questo desktop.", + "manageClientTunnels": "Gestisci Tunnel Client", "addTunnel": "Aggiungi Tunnel", "editTunnel": "Modifica Tunnel", "deleteTunnel": "Elimina Tunnel", "tunnelName": "Nome Del Tunnel", - "localPort": "Porta Locale", "remoteHost": "Host Remoto", - "remotePort": "Porta Remota", "autoStart": "Avvio Automatico", + "autoStartContainer": "Avvio automatico all'avvio", + "autoStartContainerDesc": "Avvia automaticamente questo tunnel quando il tuo server Termix si avvia.", + "autoStartEnableFailed": "Host salvato, ma non è riuscito ad avviare tunnel di avvio automatico per {{name}}.", + "clientAutoStartDesc": "Avvia quando questo client desktop si apre e rimane connesso.", + "clientManualStartDesc": "Usa Start e Stop da questa riga. Termix non lo aprirà automaticamente.", + "clientRemoteServerNote": "L'inoltro remoto potrebbe richiedere AllowTcpForwarding e GatewayPorts sul server SSH endpoint. La porta remota si chiude quando questo desktop si disconnette.", + "clientTunnelStarted": "Tunnel client avviato", + "clientTunnelStopped": "Tunnel client fermato", + "tunnelTestSucceeded": "Test tunnel riuscito", + "tunnelTestFailed": "Test tunnel fallito", + "localSaved": "Tunnel client salvati", + "localSaveError": "Impossibile salvare i tunnel del client locale", + "invalidBindIp": "L'IP locale deve essere un indirizzo IPv4 valido.", + "invalidLocalTargetIp": "L'IP di destinazione locale deve essere un indirizzo IPv4 valido.", + "invalidCurrentHostIp": "L'IP corrente dell'host deve essere un indirizzo IPv4 valido.", + "invalidLocalPort": "La porta locale deve essere compresa tra 1 e 65535.", + "invalidRemotePort": "La porta remota deve essere compresa tra 1 e 65535.", + "invalidLocalTargetPort": "La porta locale di destinazione deve essere compresa tra 1 e 65535.", + "invalidEndpointPort": "Il porto di endpoint deve essere compreso tra 1 e 65535.", + "duplicateAutoStartBind": "Solo un tunnel client di avvio automatico può usare {{bind}}.", + "manualControlError": "Impossibile aggiornare lo stato del tunnel.", + "saveHostBeforeManualControl": "Salva questo host prima di avviare o interrompere i tunnel del server.", "status": "Stato", "active": "Attivo", "inactive": "Inattivo", "start": "Inizia", "stop": "Ferma", + "test": "Prova", "restart": "Riavvia", "connectionType": "Tipo Di Connessione", + "type": "Tipo Di Tunnel", + "typeLocal": "Locale (-L)", + "typeRemote": "Remoto (-R)", + "typeDynamic": "Dinamico (-D)", + "typeServerLocalDesc": "Host attuale all'endpoint.", + "typeServerRemoteDesc": "Endpoint torna all'host corrente.", + "typeClientLocalDesc": "Computer locale all'endpoint.", + "typeClientRemoteDesc": "Endpoint torna al computer locale.", + "typeClientDynamicDesc": "SOCKS sul computer locale.", + "typeDynamicDesc": "Avanti SOCKS5 CONNECT traffico attraverso SSH", + "forwardDescriptionServerLocal": "Host corrente {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → host corrente {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "{{sourcePort}} → remoto {{endpointPort}}.", + "forwardDescriptionClientRemote": "{{sourcePort}} → locale {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS sulla porta locale {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "{{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → locale {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Percorso:", + "lastStarted": "Ultimo avvio", + "lastTested": "Ultimo test", + "lastError": "Ultimo errore", + "maxRetries": "Riprova Massima", + "maxRetriesDescription": "Quantità massima di tentativi di riprova.", + "retryInterval": "Intervallo Di Riprova (Secondi)", + "retryIntervalDescription": "Tempo di attesa tra i tentativi di riprova.", "local": "Locale", "remote": "Remoto", "dynamic": "Dinamico", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Fornisci le tue credenziali SSH per connetterti a questo server.", "sshPasswordDescription": "Inserire la password per questa connessione SSH.", "sshKeyPasswordDescription": "Se la tua chiave SSH è crittografata, inserisci qui la frase segreta.", + "passphraseRequired": "Passphrase Richiesto", + "passphraseRequiredDescription": "La chiave SSH è crittografata. Inserisci la frase segreta per sbloccarla.", "step1ScanQR": "Passo 1: Scansiona il codice QR con la tua app di autenticazione", "manualEntryCode": "Codice Manuale Di Entrata", "cannotScanQRText": "Se non riesci a scansionare il codice QR, inserisci questo codice manualmente nella tua app di autenticazione", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Impossibile completare il ripristino della password", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Avvio del login OIDC non riuscito", - "failedUserInfo": "Recupero delle informazioni utente dopo il login OIDC non riuscito", + "failedUserInfo": "Recupero delle informazioni utente dopo il login non riuscito", "oidcAuthFailed": "Autenticazione OIDC non riuscita", "noTokenReceived": "Nessun token ricevuto dal login", "invalidAuthUrl": "URL di autorizzazione non valido ricevuto dal backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Mostra i tag sotto ogni host nella barra laterale. Disabilita per nascondere tutti i tag.", "account": "Account", "appearance": "Aspetto", + "c2sTunnelConfigDesc": "Tunnels desktop locali targeting host SSH configurati.", + "c2sTunnelPresets": "Impostazioni Tunnel Client", + "c2sTunnelPresetsDesc": "Salva l'elenco dei tunnel locali di questo client desktop come preimpostazione server con nome o carica nuovamente un preset in questo client.", + "c2sTunnelPresetsUnavailable": "Le preimpostazioni del tunnel client sono disponibili solo nel client desktop.", + "c2sPresetName": "Nome Predefinito", + "c2sPresetNamePlaceholder": "Nome preset client", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "Nessuna preimpostazione selezionata", + "c2sNoPresets": "Nessun preset salvato", + "c2sLoadPreset": "Carica", + "c2sCurrentLocalConfig": "{{count}} tunnel client locali configurati su questo desktop.", + "c2sPresetSyncNote": "Le preimpostazioni sono istantanee esplicite; il caricamento di una sostituisce l'elenco dei tunnel dei client locali di questo client desktop.", + "c2sPresetSaved": "Preimpostazione tunnel client salvata", + "c2sPresetLoaded": "Preimpostazione tunnel client caricata localmente", + "c2sPresetRenamed": "Preimpostazione tunnel client rinominata", + "c2sPresetDeleted": "Preimpostazione tunnel client eliminata", + "c2sPresetLoadError": "Impossibile caricare le preimpostazioni del tunnel client", "languageLocalization": "Lingua E Localizzazione", "fileManagerSettings": "Gestore File", "terminalSettings": "Terminale", @@ -2370,6 +2472,10 @@ "description": "Descrizione credenziali SSH", "searchCredentials": "Cerca credenziali per nome, nome utente o tag...", "sshConfig": "configurazione ssh endpoint", + "bindLocalhost": "127.0.0.1 (collega a localhost)", + "localListenerHost": "127.0.0.1 (ascolta localmente)", + "localTargetHost": "127.0.0.1 (obiettivo su questo computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/home", "clientId": "tuo-client-id", "clientSecret": "tuo-client-secret", @@ -2549,6 +2655,7 @@ "version": "Versione", "upToDate": "Fino alla data", "updateAvailable": "Aggiornamento Disponibile", + "beta": "Beta", "uptime": "Uptime", "database": "Database", "healthy": "Sano", @@ -2955,6 +3062,20 @@ "error": "Collezione di metriche non riuscita: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Stabilimento collegamento tunnel...", + "sourceConnecting": "Connessione all'host sorgente {{host}}...", + "sourceConnected": "Connesso all'host sorgente", + "endpointResolving": "Risoluzione host endpoint {{host}}...", + "endpointResolved": "Host endpoint risolto", + "forwarding": "Impostazione del port forwarding {{localPort}} → {{remotePort}}...", + "connected": "Tunnel creato con successo", + "retrying": "Connessione non riuscita, riprova in {{countdown}}s (tentativo {{attempt}}/{{max}})...", + "retryExhausted": "Max tentativi di riprova raggiunti", + "error": "Connessione tunnel fallita: {{error}}" + } + }, "sftp": { "log": { "connecting": "Connessione al server SFTP...", diff --git a/src/locales/translated/ja_JP.json b/src/locales/translated/ja_JP.json index 00173e0d..d1a007ce 100644 --- a/src/locales/translated/ja_JP.json +++ b/src/locales/translated/ja_JP.json @@ -402,6 +402,8 @@ "currentVersion": "あなたはバージョン {{version}}を実行しています", "updateAvailable": "アップデートがあります", "newVersionAvailable": "新しいバージョンが利用可能です!あなたは {{current}}を実行していますが、 {{latest}} は利用可能です。", + "betaVersion": "ベータバージョン", + "betaVersionDesc": "あなたは最新の安定版 {{current}}より新しい {{latest}}を実行しています。", "releasedOn": "{{date}} でリリース", "downloadUpdate": "アップデートをダウンロード", "dismiss": "却下する", @@ -426,6 +428,8 @@ "warning": "警告", "info": "情報", "success": "成功", + "unsavedChanges": "保存されていない変更", + "dismiss": "却下する", "loading": "読み込み中...", "required": "必須", "optional": "省略可能", @@ -471,6 +475,7 @@ "chinese": "中国語", "german": "ドイツ語", "cancel": "キャンセル", + "done": "完了", "username": "ユーザー名", "name": "名前", "login": "ログイン", @@ -486,6 +491,7 @@ "save": "保存", "saving": "保存中...", "delete": "削除", + "rename": "名前の変更", "edit": "編集", "add": "追加", "search": "検索", @@ -559,7 +565,8 @@ "passwordCopied": "パスワードをクリップボードにコピーしました", "sudoPasswordCopied": "Sudoパスワードをクリップボードにコピーしました", "noPasswordAvailable": "パスワードがありません", - "failedToCopyPassword": "パスワードのコピーに失敗しました" + "failedToCopyPassword": "パスワードのコピーに失敗しました", + "openFileManager": "ファイルマネージャを開く" }, "admin": { "title": "管理者設定", @@ -868,7 +875,42 @@ "passwordMinLength": "パスワードは6文字以上でなければなりません", "currentRoles": "現在の役割", "noRolesAssigned": "ロールが割り当てられていません", - "assignNewRole": "新しいロールを割り当てる" + "assignNewRole": "新しいロールを割り当てる", + "apiKeys": { + "tabLabel": "API キー", + "title": "API キー", + "createApiKey": "API キーを作成", + "createApiKeyDescription": "特定のユーザーにスコープされた新しい API キーを作成します。トークンは一度だけ表示されます。", + "keyCreated": "API キーが作成されました", + "keyCreatedDescription": "今すぐこのキーをコピーします。再び表示されません。", + "keyName": "キー名", + "keyNamePlaceholder": "例: CI/CD パイプライン", + "scopedUser": "スコープユーザー", + "selectUser": "ユーザーを選択...", + "searchUsers": "ユーザーを検索...", + "noUsersFound": "ユーザーが見つかりませんでした。", + "expiresAt": "有効期限", + "optional": "省略可能", + "expiresAtHelp": "期限切れのないキーは空のままにしておきます。", + "copyWarningTitle": "API キーを保存", + "copyWarningDescription": "このキーは一度だけ表示されます。安全な場所に保管してください。", + "apiKey": "API キー", + "tokenCopied": "トークンをクリップボードにコピーしました", + "creating": "作成中...", + "nameRequired": "キー名が必要です", + "userRequired": "ユーザーを選択してください", + "failedToCreate": "API キーの作成に失敗しました", + "noKeys": "API キーが見つかりません。", + "name": "名前", + "prefix": "プレフィックス", + "lastUsed": "最後に使用したもの", + "never": "一切なし", + "revokeKey": "キーを取り消す", + "confirmRevoke": "API キー \"{{name}}\" を無効にしてもよろしいですか?元に戻すことはできません。", + "revokedSuccessfully": "APIキーが正常に取り消されました", + "failedToRevoke": "APIキーの取り消しに失敗しました", + "failedToFetch": "API キーの取得に失敗しました" + } }, "hosts": { "title": "ホスト マネージャー", @@ -962,28 +1004,8 @@ "enableDocker": "Docker を有効にする", "defaultPath": "既定のパス", "defaultPathDesc": "このホストのファイルマネージャーを開くときの既定のディレクトリ", - "tunnelConnections": "トンネル接続", "connection": "接続", "remove": "削除", - "sourcePort": "ソースポート", - "sourcePortDesc": " (ソースはformat@@0タブの現在の接続の詳細を参照します)", - "endpointPort": "エンドポイントポート", - "endpointSshConfig": "エンドポイントの SSH 設定", - "tunnelForwardDescription": "このトンネルは、ソースマシン上のポート {{sourcePort}} からエンドポイントマシン上のポート {{endpointPort}} へトラフィックを転送します。", - "maxRetries": "最大再試行回数", - "maxRetriesDescription": "トンネル接続の最大再試行回数。", - "retryInterval": "再試行間隔 (秒)", - "retryIntervalDescription": "再試行まで待機する時間。", - "autoStartContainer": "コンテナ起動時に自動起動", - "autoStartDesc": "コンテナが起動したときに自動的にこのトンネルを開始します", - "addConnection": "トンネル接続を追加", - "tunnelType": "トンネルタイプ", - "tunnelTypeLocal": "ローカル (-L)", - "tunnelTypeRemote": "リモート (-R)", - "tunnelTypeLocalDesc": "ローカルポートをリモートエンドポイントに転送する", - "tunnelTypeRemoteDesc": "リモートポートをローカルマシンに転送する", - "tunnelForwardDescriptionLocal": "このトンネルは、エンドポイントマシン上のローカルポート {{sourcePort}} からポート {{endpointPort}} へのトラフィックを転送します。", - "tunnelForwardDescriptionRemote": "このトンネルは、ソースマシン上のポート {{sourcePort}} からエンドポイントマシン上のポート {{endpointPort}} へトラフィックを転送します。", "sshpassRequired": "パスワード認証に必要な", "sshpassRequiredDesc": "トンネル内のパスワード認証のためには、sshpassをシステムにインストールする必要があります。", "otherInstallMethods": "その他のインストール方法:", @@ -1529,7 +1551,7 @@ "splitVertical": "垂直に分割", "closePanel": "パネルを閉じる", "reconnect": "再接続", - "sessionEnded": "セッション終了", + "sessionEnded": "セッションが終了しました。", "connectionLost": "接続が切断されました", "error": "エラー: {{message}}", "disconnected": "切断されました", @@ -1933,22 +1955,10 @@ "ascending": "昇順", "descending": "降順" }, - "tunnel": { - "log": { - "connecting": "トンネル接続を確立しています...", - "sourceConnecting": "ソースホスト {{host}} に接続中...", - "sourceConnected": "ソースホストに接続しました", - "endpointResolving": "エンドポイントホスト {{host}}を解決しています...", - "endpointResolved": "エンドポイントホストを解決しました", - "forwarding": "ポート転送の設定 {{localPort}} → {{remotePort}}...", - "connected": "トンネルが正常に設置されました", - "retrying": "接続に失敗しました。 {{countdown}}秒で ( {{attempt}}/{{max}} を試行) ...", - "retryExhausted": "最大再試行回数に達しました", - "error": "トンネル接続に失敗しました: {{error}}" - } - }, "tunnels": { "title": "SSH トンネル", + "noTunnelsConfigured": "トンネルが設定されていません", + "configureTunnelsInHostSettings": "ホストマネージャーでトンネル接続を設定して開始します", "noSshTunnels": "SSHトンネルがありません", "createFirstTunnelMessage": "SSH トンネルはまだ作成されていません。ホストマネージャーでトンネル接続を設定して開始します。", "connected": "接続しました", @@ -1969,27 +1979,100 @@ "disconnect": "接続を解除", "cancel": "キャンセル", "port": "ポート", + "localPort": "ローカルポート", + "remotePort": "リモートポート", + "currentHostPort": "現在のホスト ポート", + "endpointPort": "エンドポイントポート", + "bindIp": "ローカル IP", + "currentHostIp": "現在のホスト IP", + "endpointSshConfig": "エンドポイントの SSH 設定", + "endpointSshConfigRequired": "Endpoint SSH の設定が必要です", + "endpointSshHost": "エンドポイントの SSH ホスト", + "endpointSshHostPlaceholder": "設定されたホストを選択", + "endpointSshHostRequired": "各クライアント トンネルのエンドポイント SSH ホストを選択します。", "attempt": "{{current}} の {{max}} 試行回数", "nextRetryIn": "次の再試行は {{seconds}} 秒後です", "checkDockerLogs": "Docker ログにエラーの理由を確認し、参加する", "orCreate": "または ", "noTunnelConnections": "トンネル接続が設定されていません", "tunnelConnections": "トンネル接続", + "serverTunnels": "サーバートンネル", + "serverTunnelsDesc": "このホストに格納されているバックエンド管理トンネル。", + "clientTunnels": "クライアントトンネル", + "clientTunnelsUnavailable": "クライアント トンネルにはデスクトップ クライアントが必要です。", + "serverTunnel": "サーバートンネル", + "clientTunnel": "クライアントトンネル", + "addServerTunnel": "サーバートンネルを追加", + "addClientTunnel": "クライアントトンネルを追加", + "noServerTunnels": "サーバートンネルが設定されていません。", + "noClientTunnels": "このデスクトップにはクライアントトンネルが設定されていません。", + "manageClientTunnels": "クライアントトンネルの管理", "addTunnel": "トンネルを追加", "editTunnel": "トンネルを編集", "deleteTunnel": "トンネルを削除", "tunnelName": "トンネル名", - "localPort": "ローカルポート", "remoteHost": "リモートホスト", - "remotePort": "リモートポート", "autoStart": "自動起動", + "autoStartContainer": "起動時に自動起動", + "autoStartContainerDesc": "Termixサーバーの起動時に自動的にこのトンネルを開始します。", + "autoStartEnableFailed": "ホストは保存されましたが、 {{name}} の自動開始トンネルの開始に失敗しました。", + "clientAutoStartDesc": "このデスクトップ クライアントが開いて接続を維持したときに開始します。", + "clientManualStartDesc": "この行から開始と停止を使用します。Termixは自動的に開きません。", + "clientRemoteServerNote": "リモート転送では、エンドポイントの SSH サーバー上の AllowTcpForwarding と GatewayPorts が必要な場合があります。このデスクトップが切断されると、リモートポートが閉じます。", + "clientTunnelStarted": "クライアントトンネルを開始しました", + "clientTunnelStopped": "クライアントトンネルが停止しました", + "tunnelTestSucceeded": "トンネルテストが成功しました", + "tunnelTestFailed": "トンネルテストに失敗しました", + "localSaved": "クライアント・トンネルを保存しました", + "localSaveError": "ローカル クライアント トンネルの保存に失敗しました", + "invalidBindIp": "ローカルIPは有効なIPv4アドレスでなければなりません。", + "invalidLocalTargetIp": "ローカルターゲットIPは有効なIPv4アドレスでなければなりません。", + "invalidCurrentHostIp": "現在のホストIPは有効なIPv4アドレスでなければなりません。", + "invalidLocalPort": "ローカルポートは1から65535の間でなければなりません。", + "invalidRemotePort": "リモートポートは1から65535の間でなければなりません。", + "invalidLocalTargetPort": "ローカル ターゲット ポートは 1 から 65535 の範囲でなければなりません。", + "invalidEndpointPort": "エンドポイントポートは1から65535の間でなければなりません。", + "duplicateAutoStartBind": "{{bind}} を使用できるのは、自動起動クライアントトンネルが1つだけです。", + "manualControlError": "トンネル状態の更新に失敗しました。", + "saveHostBeforeManualControl": "サーバートンネルを開始または停止する前に、このホストを保存します。", "status": "ステータス", "active": "アクティブ", "inactive": "非アクティブ", "start": "開始", "stop": "停止", + "test": "テスト", "restart": "再起動", "connectionType": "接続タイプ", + "type": "トンネルタイプ", + "typeLocal": "ローカル (-L)", + "typeRemote": "リモート (-R)", + "typeDynamic": "ダイナミック (-D)", + "typeServerLocalDesc": "エンドポイントへの現在のホスト。", + "typeServerRemoteDesc": "現在のホストに戻るエンドポイント。", + "typeClientLocalDesc": "端末へのローカルコンピュータ。", + "typeClientRemoteDesc": "端末をローカルコンピュータに戻します。", + "typeClientDynamicDesc": "ローカルコンピュータ上でSOCKS。", + "typeDynamicDesc": "SOCKS5を転送 SSH経由でトラフィックを接続", + "forwardDescriptionServerLocal": "現在のホスト {{sourcePort}} → エンドポイント {{endpointPort}}。", + "forwardDescriptionServerRemote": "エンドポイント {{endpointPort}} → 現在のホスト {{sourcePort}}。", + "forwardDescriptionServerDynamic": "現在のホスト {{sourcePort}} のSOCKS。", + "forwardDescriptionClientLocal": "ローカル {{sourcePort}} → リモート {{endpointPort}}。", + "forwardDescriptionClientRemote": "リモート {{sourcePort}} → ローカル {{endpointPort}}。", + "forwardDescriptionClientDynamic": "ローカルポート {{sourcePort}}上のSOCKS。", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → {{endpoint}} 経由でSOCKS", + "autoNameClientLocal": "ローカル {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → ローカル {{localPort}}", + "autoNameClientDynamic": "{{localPort}} 経由のSOCKS {{endpoint}}", + "route": "ルート:", + "lastStarted": "最終開始", + "lastTested": "最終テスト", + "lastError": "最終エラー", + "maxRetries": "最大再試行回数", + "maxRetriesDescription": "再試行の最大回数", + "retryInterval": "再試行間隔 (秒)", + "retryIntervalDescription": "再試行まで待機する時間。", "local": "ローカル", "remote": "リモート", "dynamic": "ダイナミック", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "このサーバーに接続するためにSSH認証情報を入力してください。", "sshPasswordDescription": "SSH接続のパスワードを入力してください。", "sshKeyPasswordDescription": "SSHキーが暗号化されている場合は、ここにパスフレーズを入力してください。", + "passphraseRequired": "パスフレーズが必要です", + "passphraseRequiredDescription": "SSHキーは暗号化されています。パスワードを入力してロックを解除してください。", "step1ScanQR": "ステップ 1: 認証アプリで QR コードをスキャンする", "manualEntryCode": "手動入力コード", "cannotScanQRText": "QRコードをスキャンできない場合は、認証アプリに手動でこのコードを入力してください。", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "パスワードのリセットに失敗しました", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "OIDCログインの開始に失敗しました", - "failedUserInfo": "OIDCログイン後のユーザー情報の取得に失敗しました", + "failedUserInfo": "ログイン後のユーザー情報の取得に失敗しました", "oidcAuthFailed": "OIDC認証に失敗しました", "noTokenReceived": "ログインからトークンを受信していません", "invalidAuthUrl": "バックエンドから受信した認証URLが無効です", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "サイドバーに各ホストの下にタグを表示します。すべてのタグを非表示にするには無効にします。", "account": "アカウント", "appearance": "外観", + "c2sTunnelConfigDesc": "設定されたSSHホストを対象としたローカルデスクトップトンネル。", + "c2sTunnelPresets": "クライアントのトンネルプリセット", + "c2sTunnelPresetsDesc": "このデスクトップ クライアントのローカル トンネル リストを名前付きサーバー プリセットとして保存するか、このクライアントにプリセットをロードします。", + "c2sTunnelPresetsUnavailable": "クライアントトンネルプリセットはデスクトップクライアントでのみ使用できます。", + "c2sPresetName": "プリセット名", + "c2sPresetNamePlaceholder": "クライアントプリセット名", + "c2sPresetToLoad": "プリセットをロードする", + "c2sNoPresetSelected": "プリセットが選択されていません", + "c2sNoPresets": "プリセットは保存されていません", + "c2sLoadPreset": "読み込み", + "c2sCurrentLocalConfig": "{{count}} ローカルクライアントトンネルがこのデスクトップに設定されています。", + "c2sPresetSyncNote": "プリセットは明示的なスナップショットです。読み込むと、このデスクトップクライアントのローカルクライアントトンネルリストが置き換えられます。", + "c2sPresetSaved": "クライアントトンネルプリセットが保存されました", + "c2sPresetLoaded": "クライアントトンネルプリセットがローカルに読み込まれました", + "c2sPresetRenamed": "クライアントトンネルプリセットの名前を変更しました", + "c2sPresetDeleted": "クライアントトンネルプリセットが削除されました", + "c2sPresetLoadError": "クライアントトンネルプリセットの読み込みに失敗しました", "languageLocalization": "言語と翻訳", "fileManagerSettings": "ファイルマネージャー", "terminalSettings": "ターミナル", @@ -2370,6 +2472,10 @@ "description": "SSH認証情報の説明", "searchCredentials": "名前、ユーザー名、タグで資格情報を検索...", "sshConfig": "endpoint ssh の設定", + "bindLocalhost": "127.0.0.1 (localhostにバインド)", + "localListenerHost": "127.0.0.1 (ローカルで聴く)", + "localTargetHost": "127.0.0.1 (このコンピュータのターゲット)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/home", "clientId": "your-client-id", "clientSecret": "your-client-secret", @@ -2549,6 +2655,7 @@ "version": "バージョン", "upToDate": "日付まで", "updateAvailable": "アップデートがあります", + "beta": "Beta", "uptime": "稼働時間", "database": "データベース", "healthy": "健康的", @@ -2955,6 +3062,20 @@ "error": "メトリックの収集に失敗しました: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "トンネル接続を確立しています...", + "sourceConnecting": "ソースホスト {{host}} に接続中...", + "sourceConnected": "ソースホストに接続しました", + "endpointResolving": "エンドポイントホスト {{host}}を解決しています...", + "endpointResolved": "エンドポイントホストを解決しました", + "forwarding": "ポート転送の設定 {{localPort}} → {{remotePort}}...", + "connected": "トンネルが正常に設置されました", + "retrying": "接続に失敗しました。 {{countdown}}秒で ( {{attempt}}/{{max}} を試行) ...", + "retryExhausted": "最大再試行回数に達しました", + "error": "トンネル接続に失敗しました: {{error}}" + } + }, "sftp": { "log": { "connecting": "SFTP サーバーに接続中...", diff --git a/src/locales/translated/ko_KR.json b/src/locales/translated/ko_KR.json index 1c3c8863..bc51f51b 100644 --- a/src/locales/translated/ko_KR.json +++ b/src/locales/translated/ko_KR.json @@ -7,15 +7,15 @@ "createCredential": "자격 증명 생성", "editCredential": "자격 증명 수정", "viewCredential": "자격 증명 보기", - "duplicateCredential": "자격 증명 중복", + "duplicateCredential": "자격 증명 복제", "deleteCredential": "자격 증명 삭제", "updateCredential": "자격 증명 업데이트", "credentialName": "자격 증명 이름", "credentialDescription": "설명", "username": "사용자 이름", - "searchCredentials": "자격 증명을 검색하세요...", - "selectFolder": "폴더를 선택하세요", - "selectAuthType": "인증 유형을 선택하세요", + "searchCredentials": "자격 증명 검색...", + "selectFolder": "폴더 선택", + "selectAuthType": "인증 유형 선택", "allFolders": "모든 폴더", "allAuthTypes": "모든 인증 유형", "uncategorized": "분류되지 않음", @@ -24,39 +24,39 @@ "passwordBased": "비밀번호 기반", "folders": "폴더", "noCredentialsMatchFilters": "필터 조건에 맞는 자격 증명이 없습니다.", - "noCredentialsYet": "아직 생성된 자격 증명이 없습니다", + "noCredentialsYet": "아직 생성된 자격 증명이 없습니다.", "createFirstCredential": "첫 번째 자격 증명을 만드세요", - "failedToFetchCredentials": "자격 증명을 가져오는 데 실패했습니다.", - "credentialDeletedSuccessfully": "자격 증명이 성공적으로 삭제되었습니다.", + "failedToFetchCredentials": "자격 증명을 불러오는 데 실패했습니다.", + "credentialDeletedSuccessfully": "자격 증명이 삭제되었습니다.", "failedToDeleteCredential": "자격 증명 삭제에 실패했습니다.", "confirmDeleteCredential": "정말로 \"{{name}}\" 자격 증명을 삭제하시겠습니까?", - "credentialCreatedSuccessfully": "자격 증명이 성공적으로 생성되었습니다.", - "credentialUpdatedSuccessfully": "자격 증명이 성공적으로 업데이트되었습니다.", + "credentialCreatedSuccessfully": "자격 증명이 생성되었습니다.", + "credentialUpdatedSuccessfully": "자격 증명이 업데이트되었습니다.", "failedToSaveCredential": "자격 증명을 저장하는 데 실패했습니다.", - "failedToFetchCredentialDetails": "자격 증명 정보를 가져오는 데 실패했습니다.", - "failedToFetchHostsUsing": "이 자격 증명을 사용하여 호스트를 가져오는 데 실패했습니다.", + "failedToFetchCredentialDetails": "자격 증명 정보를 불러오는 데 실패했습니다.", + "failedToFetchHostsUsing": "이 자격 증명을 사용하는 호스트를 불러오는 데 실패했습니다.", "loadingCredentials": "자격 증명을 불러오는 중...", "retry": "재시도", - "noCredentials": "자격증명이 없음", + "noCredentials": "자격 증명 없음", "noCredentialsMessage": "아직 자격 증명을 추가하지 않았습니다. 시작하려면 \"자격 증명 추가\"를 클릭하세요.", "sshCredentials": "SSH 자격 증명", - "credentialsCount": "{{count}} 자격 증명", + "credentialsCount": "자격 증명 {{count}}개", "refresh": "새로고침", "passwordRequired": "비밀번호가 필요합니다", "sshKeyRequired": "SSH 키가 필요합니다.", - "credentialAddedSuccessfully": "자격 증명 \"{{name}}\"이 성공적으로 추가되었습니다.", + "credentialAddedSuccessfully": "자격 증명 \"{{name}}\"이 추가되었습니다.", "savingCredential": "자격 증명 저장 중...", "updatingCredential": "자격 증명을 업데이트하는 중...", "general": "일반", "description": "설명", "folder": "폴더", "tags": "태그", - "addTagsSpaceToAdd": "태그를 추가하세요 (스페이스 키를 눌러 추가)", + "addTagsSpaceToAdd": "태그 추가(스페이스 키로 추가)", "password": "비밀번호", "key": "키", "sshPrivateKey": "SSH 개인 키", "upload": "업로드", - "updateKey": "업데이트 키", + "updateKey": "키 업데이트", "keyPassword": "키 비밀번호", "keyType": "키 유형", "keyTypeRSA": "RSA", @@ -66,14 +66,14 @@ "authentication": "인증", "organization": "조직", "basicInformation": "기본 정보", - "basicInformationDescription": "이 자격증에 필요한 기본 정보를 입력하세요.", + "basicInformationDescription": "이 자격 증명에 필요한 기본 정보를 입력하세요.", "authenticationMethod": "인증 방법", "authenticationMethodDescription": "SSH 서버에서 인증하는 방법을 선택하세요.", "organizationDescription": "폴더와 태그를 사용하여 자격 증명을 정리하세요.", "enterCredentialName": "자격 증명 이름을 입력하세요", "enterCredentialDescription": "설명을 입력하세요 (선택 사항)", "enterUsername": "사용자 이름을 입력하세요", - "nameIsRequired": "자격증명은 필수 입력 사항입니다.", + "nameIsRequired": "자격 증명 이름은 필수 입력 사항입니다.", "usernameIsRequired": "사용자 이름은 필수입니다.", "authenticationType": "인증 유형", "passwordAuthDescription": "비밀번호 인증을 사용하세요", @@ -84,32 +84,32 @@ "privateKey": "개인 키", "enterPassword": "비밀번호를 입력하세요", "enterPrivateKey": "개인 키를 입력하세요", - "keyPassphrase": "키 암호문", + "keyPassphrase": "키 암호", "enterKeyPassphrase": "키 암호를 입력하세요(선택 사항).", - "keyPassphraseOptional": "선택 사항: 키에 암호가 없는 경우 비워 두십시오.", - "leaveEmptyToKeepCurrent": "현재 값을 유지하려면 비워 두십시오.", - "uploadKeyFile": "업로드 키 파일", - "generateKeyPairButton": "키 페어 생성", - "generateKeyPair": "키 페어 생성", - "generateKeyPairDescription": "새 SSH 키 쌍을 생성합니다. 암호를 사용하여 키를 보호하려면 먼저 아래의 키 암호 필드에 암호를 입력하십시오.", + "keyPassphraseOptional": "선택 사항: 키에 암호가 없으면 비워 두세요.", + "leaveEmptyToKeepCurrent": "현재 값을 유지하려면 비워 두세요.", + "uploadKeyFile": "키 파일 업로드", + "generateKeyPairButton": "키 쌍 생성", + "generateKeyPair": "키 쌍 생성", + "generateKeyPairDescription": "새 SSH 키 쌍을 생성합니다. 생성되는 개인 키에 암호를 설정하려면 아래의 \"키 비밀번호\" 필드에 입력하세요.", "deploySSHKey": "SSH 키 배포", "deploySSHKeyDescription": "대상 서버에 공개 키를 배포합니다.", - "sourceCredential": "출처 자격 증명", + "sourceCredential": "원본 자격 증명", "targetHost": "대상 호스트", - "deploymentProcess": "배포 프로세스", - "deploymentProcessDescription": "이렇게 하면 기존 키를 덮어쓰지 않고 대상 호스트의 ~/.ssh/authorized_keys 파일에 공개 키가 안전하게 추가됩니다. 이 작업은 되돌릴 수 있습니다.", + "deploymentProcess": "배포 과정", + "deploymentProcessDescription": "기존 키를 덮어쓰지 않고 대상 호스트의 ~/.ssh/authorized_keys 파일에 공개 키를 안전하게 추가합니다. 이 작업은 되돌릴 수 있습니다.", "chooseHostToDeploy": "배포할 호스트를 선택하세요...", "deploying": "배포 중...", "copyDeployCommand": "배포 명령 복사", - "copyDeployCommandDescription": "호스트의 authorized_keys 파일에 공개 키를 수동으로 추가하는 셸 명령어를 복사합니다. 암호 인증이 비활성화된 경우 유용합니다.", + "copyDeployCommandDescription": "호스트의 authorized_keys 파일에 공개 키를 수동으로 추가하는 셸 명령어를 복사합니다. 비밀번호 인증이 비활성화된 경우 유용합니다.", "deployCommandCopied": "배포 명령어가 클립보드에 복사되었습니다.", - "manualDeployInfo": "대상 호스트의 터미널(예: Proxmox 콘솔, IPMI 또는 물리적 접근)에 다음 명령어를 붙여넣어 SSH 키를 추가하십시오.", + "manualDeployInfo": "대상 호스트의 터미널(예: Proxmox 콘솔, IPMI 또는 물리적 접근)에 다음 명령어를 붙여넣어 SSH 키를 추가하세요.", "name": "이름", - "noHostsAvailable": "호스트를 사용할 수 없습니다.", + "noHostsAvailable": "사용 가능한 호스트가 없습니다.", "noHostsMatchSearch": "검색 조건에 맞는 호스트가 없습니다.", "sshKeyGenerationNotImplemented": "SSH 키 생성 기능이 곧 출시될 예정입니다.", "connectionTestingNotImplemented": "연결 테스트 기능이 곧 출시될 예정입니다.", - "testConnection": "테스트 연결", + "testConnection": "연결 테스트", "selectOrCreateFolder": "폴더를 선택하거나 생성하세요.", "noFolder": "폴더 없음", "orCreateNewFolder": "또는 새 폴더를 만드세요", @@ -118,10 +118,10 @@ "credentialId": "자격 증명 ID", "overview": "개요", "security": "보안", - "usage": "용법", + "usage": "사용 현황", "securityDetails": "보안 세부 정보", "securityDetailsDescription": "암호화된 자격 증명 정보를 확인하세요", - "credentialSecured": "자격 증명 확보됨", + "credentialSecured": "자격 증명이 보호됨", "credentialSecuredDescription": "모든 중요 데이터는 AES-256으로 암호화됩니다.", "passwordAuthentication": "비밀번호 인증", "keyAuthentication": "키 인증", @@ -135,37 +135,37 @@ "created": "생성됨", "lastModified": "최종 수정일", "usageStatistics": "사용 통계", - "copiedToClipboard": "{{field}} 클립보드에 복사됨", + "copiedToClipboard": "{{field}}이(가) 클립보드에 복사되었습니다.", "failedToCopy": "클립보드에 복사하는 데 실패했습니다.", "sshKey": "SSH 키", "createCredentialDescription": "안전한 접속을 위해 새 SSH 자격 증명을 생성하세요.", - "editCredentialDescription": "자격 증명 정보를 업데이트하세요", + "editCredentialDescription": "자격 증명 정보를 수정하세요.", "listView": "목록", "folderView": "폴더", "unknownCredential": "알려지지 않은", - "confirmRemoveFromFolder": "\"{{folder}}\" 폴더에서 \"{{name}}\"을 삭제하시겠습니까? 자격 증명은 \"분류되지 않음\"으로 이동됩니다.", - "removedFromFolder": "자격 증명 \"{{name}}\"이 폴더에서 성공적으로 제거되었습니다.", + "confirmRemoveFromFolder": "\"{{folder}}\" 폴더에서 \"{{name}}\"을 제거하시겠습니까? 자격 증명은 \"분류되지 않음\"으로 이동됩니다.", + "removedFromFolder": "자격 증명 \"{{name}}\"이 폴더에서 제거되었습니다.", "failedToRemoveFromFolder": "폴더에서 자격 증명을 제거하는 데 실패했습니다.", - "folderRenamed": "폴더 \"{{oldName}}\"의 이름이 \"{{newName}}\"로 성공적으로 변경되었습니다.", + "folderRenamed": "폴더 \"{{oldName}}\"의 이름이 \"{{newName}}\"로 변경되었습니다.", "failedToRenameFolder": "폴더 이름 변경에 실패했습니다", - "movedToFolder": "자격 증명 \"{{name}}\"이 \"{{folder}}\"으로 성공적으로 이동되었습니다.", + "movedToFolder": "자격 증명 \"{{name}}\"이 \"{{folder}}\"으로 이동되었습니다.", "failedToMoveToFolder": "자격 증명을 폴더로 이동하는 데 실패했습니다.", "sshPublicKey": "SSH 공개 키", "publicKeyNote": "공개 키는 선택 사항이지만 키 유효성 검사를 위해 권장됩니다.", - "publicKeyUploaded": "공개키 업로드됨", + "publicKeyUploaded": "공개 키 업로드됨", "uploadPublicKey": "공개 키 업로드", "uploadPrivateKeyFile": "개인 키 파일 업로드", "uploadPublicKeyFile": "공개 키 파일 업로드", - "privateKeyRequiredForGeneration": "공개키를 생성하려면 개인키가 필요합니다.", + "privateKeyRequiredForGeneration": "공개 키를 생성하려면 개인 키가 필요합니다.", "failedToGeneratePublicKey": "공개 키 생성에 실패했습니다.", "generatePublicKey": "개인 키에서 생성", - "publicKeyGeneratedSuccessfully": "공개 키가 성공적으로 생성되었습니다.", + "publicKeyGeneratedSuccessfully": "공개 키가 생성되었습니다.", "detectedKeyType": "감지된 키 유형", "detectingKeyType": "감지 중...", "optional": "선택 사항", "generateKeyPairNew": "새 키 쌍 생성", "generateEd25519": "Ed25519 생성", - "generateECDSA": "ECDSA를 생성합니다", + "generateECDSA": "ECDSA 생성", "generateRSA": "RSA 생성", "keyTypeEcdsaP256": "ECDSA P-256(SSH)", "keyTypeEcdsaP384": "ECDSA P-384(SSH)", @@ -173,18 +173,18 @@ "keyTypeDsa": "DSA(SSH)", "keyTypeRsaSha256": "RSA-SHA2-256", "keyTypeRsaSha512": "RSA-SHA2-512", - "keyPairGeneratedSuccessfully": "{{keyType}} 키 쌍이 성공적으로 생성되었습니다.", + "keyPairGeneratedSuccessfully": "{{keyType}} 키 쌍이 생성되었습니다.", "failedToGenerateKeyPair": "키 쌍 생성에 실패했습니다.", - "generateKeyPairNote": "새로운 SSH 키 쌍을 직접 생성합니다. 이렇게 하면 기존 키가 모두 대체됩니다.", - "invalidKey": "잘못된 키입니다", + "generateKeyPairNote": "새 SSH 키 쌍을 직접 생성합니다. 이렇게 하면 기존 키가 모두 대체됩니다.", + "invalidKey": "잘못된 키", "detectionError": "감지 오류", - "removing": "풀이:", + "removing": "제거 중:", "clickToEditCredential": "자격 증명을 수정하려면 클릭하세요.", "dragToMoveBetweenFolders": "드래그하여 폴더 간 이동", "keyBasedOnlyForDeployment": "SSH 키 기반 자격 증명만 배포할 수 있습니다.", "publicKeyRequiredForDeployment": "배포를 위해서는 공개 키가 필요합니다.", - "selectTargetHost": "대상 호스트를 선택하십시오.", - "keyDeployedSuccessfully": "SSH 키가 성공적으로 배포되었습니다.", + "selectTargetHost": "대상 호스트를 선택하세요.", + "keyDeployedSuccessfully": "SSH 키가 배포되었습니다.", "deploymentFailed": "배포 실패", "failedToDeployKey": "SSH 키 배포에 실패했습니다.", "clickToRenameFolder": "폴더 이름을 바꾸려면 클릭하세요", @@ -193,7 +193,7 @@ }, "quickConnect": { "title": "빠른 연결", - "description": "호스트 구성을 저장하지 않고 터미널 또는 파일 관리자 세션에 직접 연결합니다.", + "description": "호스트 설정을 저장하지 않고 터미널 또는 파일 관리자 세션에 직접 연결합니다.", "ipAddress": "IP 주소 또는 호스트 이름", "port": "포트", "username": "사용자 이름", @@ -205,25 +205,25 @@ "pasteKey": "붙여넣기 키", "credential": "자격 증명", "overrideUsername": "자격 증명 사용자 이름 재정의", - "overrideUsernameDesc": "자격 증명에 저장된 사용자 이름과 다른 사용자 이름을 사용하십시오.", + "overrideUsernameDesc": "자격 증명에 저장된 사용자 이름과 다른 사용자 이름을 사용하세요.", "connectTerminal": "터미널에 연결", "connectFileManager": "파일 관리자에 연결", "cancel": "취소", "passwordRequired": "비밀번호가 필요합니다", "keyRequired": "SSH 키가 필요합니다.", "credentialRequired": "자격 증명 선택이 필요합니다.", - "connectionEstablished": "연결이 성공적으로 설정되었습니다.", + "connectionEstablished": "연결이 설정되었습니다.", "connectionFailed": "연결 설정에 실패했습니다.", "autoDetect": "자동 감지", - "authentication": "입증" + "authentication": "인증" }, "dragIndicator": { "error": "오류: {{error}}", "dragging": "드래그 중 {{fileName}}", - "preparing": "{{fileName}}준비 중", - "readySingle": "다운로드 준비 완료 {{fileName}}", - "readyMultiple": "{{count}} 파일을 다운로드할 준비가 되었습니다.", - "batchDrag": "{{count}} 파일을 바탕 화면으로 드래그하세요.", + "preparing": "{{fileName}} 준비 중", + "readySingle": "{{fileName}} 다운로드 준비 완료", + "readyMultiple": "{{count}}개 파일을 다운로드할 준비가 되었습니다.", + "batchDrag": "{{count}}개 파일을 바탕 화면으로 드래그하세요.", "dragToDesktop": "바탕화면으로 드래그하세요", "canDragAnywhere": "바탕화면 어디든 파일을 드래그해서 옮길 수 있습니다." }, @@ -235,7 +235,7 @@ "stopKeyRecording": "매크로 중지", "selectTerminals": "터미널을 선택하세요:", "typeCommands": "명령어를 입력하세요(모든 키 지원):", - "commandsWillBeSent": "명령은 {{count}} 선택된 터미널로 전송됩니다.", + "commandsWillBeSent": "선택한 터미널 {{count}}개로 명령이 전송됩니다.", "settings": "설정", "enableRightClickCopyPaste": "마우스 오른쪽 버튼을 클릭하여 복사/붙여넣기를 활성화합니다.", "shareIdeas": "SSH 도구의 향후 기능에 대한 아이디어가 있으신가요? 공유해 주세요!", @@ -245,13 +245,13 @@ }, "snippets": { "title": "스니펫", - "new": "새로운 스니펫", + "new": "새 스니펫", "create": "스니펫 생성", "edit": "스니펫 편집", "run": "실행", "empty": "아직 설정된 스니펫이 없습니다", "emptyHint": "자주 사용하는 명령어를 저장할 수 있는 스니펫을 만드세요", - "searchSnippets": "검색 스니펫...", + "searchSnippets": "스니펫 검색...", "name": "이름", "description": "설명", "content": "명령", @@ -260,13 +260,13 @@ "contentPlaceholder": "예: sudo systemctl restart nginx", "nameRequired": "이름은 필수 입력 사항입니다.", "contentRequired": "명령어가 필요합니다.", - "createDescription": "빠른 실행을 위해 새로운 명령 스니펫을 만드세요.", - "editDescription": "이 명령 조각을 편집하세요", + "createDescription": "빠른 실행을 위한 새 명령 스니펫을 만드세요.", + "editDescription": "이 명령 스니펫을 편집하세요.", "deleteConfirmTitle": "스니펫 삭제", "deleteConfirmDescription": "\"{{name}}\"을 삭제하시겠습니까?", - "createSuccess": "스니펫이 성공적으로 생성되었습니다.", - "updateSuccess": "스니펫이 성공적으로 업데이트되었습니다", - "deleteSuccess": "스니펫이 성공적으로 삭제되었습니다.", + "createSuccess": "스니펫이 생성되었습니다.", + "updateSuccess": "스니펫이 업데이트되었습니다.", + "deleteSuccess": "스니펫이 삭제되었습니다.", "createFailed": "스니펫을 생성하는 데 실패했습니다", "updateFailed": "스니펫 업데이트에 실패했습니다", "deleteFailed": "스니펫을 삭제하는 데 실패했습니다", @@ -276,33 +276,33 @@ "runTooltip": "터미널에서 다음 스니펫을 실행하세요", "copyTooltip": "스니펫을 클립보드에 복사합니다", "editTooltip": "이 스니펫을 수정하세요", - "deleteTooltip": "이 부분을 삭제하세요", - "shareTooltip": "Share this snippet", - "sharedWithYou": "Shared", - "sharedBy": "Shared by {{username}}", - "shareSnippet": "Share Snippet", - "user": "User", - "role": "Role", - "selectTarget": "Select...", - "currentAccess": "Current Access", - "shareSuccess": "Snippet shared successfully", - "shareFailed": "Failed to share snippet", - "revokeSuccess": "Access revoked", - "revokeFailed": "Failed to revoke access", - "failedToLoadShareData": "Failed to load sharing data", + "deleteTooltip": "이 스니펫 삭제", + "shareTooltip": "이 스니펫 공유", + "sharedWithYou": "공유됨", + "sharedBy": "{{username}}님이 공유", + "shareSnippet": "스니펫 공유", + "user": "사용자", + "role": "역할", + "selectTarget": "선택...", + "currentAccess": "현재 접근 권한", + "shareSuccess": "스니펫이 공유되었습니다.", + "shareFailed": "스니펫 공유에 실패했습니다.", + "revokeSuccess": "접근 권한이 철회되었습니다.", + "revokeFailed": "접근 권한 철회에 실패했습니다.", + "failedToLoadShareData": "공유 데이터를 불러오는 데 실패했습니다.", "newFolder": "새 폴더", "reorderSameFolder": "같은 폴더 내에서만 스니펫 순서를 변경할 수 있습니다.", - "reorderSuccess": "스니펫 순서가 성공적으로 재정렬되었습니다.", + "reorderSuccess": "스니펫 순서가 변경되었습니다.", "reorderFailed": "스니펫 순서 변경에 실패했습니다.", "deleteFolderConfirm": "\"{{name}}\" 폴더를 삭제하시겠습니까? 모든 스니펫은 미분류로 이동됩니다.", - "deleteFolderSuccess": "폴더가 성공적으로 삭제되었습니다.", + "deleteFolderSuccess": "폴더가 삭제되었습니다.", "deleteFolderFailed": "폴더 삭제에 실패했습니다", - "updateFolderSuccess": "폴더가 성공적으로 업데이트되었습니다.", - "createFolderSuccess": "폴더가 성공적으로 생성되었습니다.", + "updateFolderSuccess": "폴더가 업데이트되었습니다.", + "createFolderSuccess": "폴더가 생성되었습니다.", "updateFolderFailed": "폴더 업데이트에 실패했습니다", "createFolderFailed": "폴더 생성에 실패했습니다", "selectTerminals": "터미널 선택 (선택 사항)", - "executeOnSelected": "{{count}} 선택된 터미널에서 실행", + "executeOnSelected": "선택한 터미널 {{count}}개에서 실행", "executeOnCurrent": "현재 터미널에서 실행 (여러 개를 선택하려면 클릭하세요)", "folder": "폴더", "selectFolder": "폴더를 선택하거나 비워 두세요.", @@ -311,67 +311,67 @@ "folderNameRequired": "폴더 이름은 필수 입력 사항입니다.", "folderColor": "폴더 색상", "folderIcon": "폴더 아이콘", - "preview": "시사", - "updateFolder": "업데이트 폴더", + "preview": "미리보기", + "updateFolder": "폴더 업데이트", "createFolder": "폴더 생성", "editFolder": "폴더 편집", "editFolderDescription": "스니펫 폴더를 사용자 지정하세요", - "createFolderDescription": "메모들을 폴더별로 정리하세요", + "createFolderDescription": "스니펫을 폴더별로 정리하세요.", "confirmExecution": "\"{{name}}\"을 실행하시겠습니까?", - "confirmExecutionDesc": "이 코드 조각을 실행하시겠습니까?" + "confirmExecutionDesc": "이 스니펫을 실행하시겠습니까?" }, "commandHistory": { "title": "사용 기록", - "searchPlaceholder": "검색 명령...", + "searchPlaceholder": "명령 검색...", "noTerminal": "활성화된 터미널 없음", "noTerminalHint": "터미널을 열어 명령 기록을 확인하세요.", "empty": "아직 명령 기록이 없습니다.", - "emptyHint": "현재 실행 중인 터미널에서 명령어를 실행하여 터미널의 히스토리를 구축합니다.", + "emptyHint": "현재 터미널에서 명령어를 실행하면 기록이 쌓입니다.", "noResults": "명령어를 찾을 수 없습니다.", - "noResultsHint": "\"{{query}}\" 와 일치하는 명령이 없습니다.", + "noResultsHint": "\"{{query}}\"와 일치하는 명령이 없습니다.", "deleteSuccess": "명령이 기록에서 삭제되었습니다.", - "deleteFailed": "삭제 명령에 실패했습니다.", - "deleteTooltip": "삭제 명령", - "tabHint": "사용자 프로필에서 자동 완성 기능이 활성화된 경우 터미널에서 Tab 키를 사용하여 명령 기록에서 자동 완성 기능을 활용하세요.", + "deleteFailed": "명령 삭제에 실패했습니다.", + "deleteTooltip": "명령 삭제", + "tabHint": "사용자 프로필에서 자동 완성이 활성화되어 있으면 터미널에서 Tab 키로 명령 기록 기반 자동 완성을 사용할 수 있습니다.", "authRequiredRefresh": "인증이 필요합니다. 페이지를 새로고침하세요.", "dataAccessLockedReauth": "데이터 접근이 잠겼습니다. 다시 인증해 주세요.", "loading": "명령 기록을 불러오는 중...", "error": "기록 불러오기 오류", - "disabledTitle": "Command History is Disabled", - "disabledDescription": "Enable Command History Tracking in your profile under Appearance settings." + "disabledTitle": "명령 기록이 비활성화되었습니다", + "disabledDescription": "프로필의 모양 설정에서 명령 기록 저장을 활성화하세요." }, "splitScreen": { "title": "분할 화면", "none": "없음", - "twoSplit": "양방향", - "threeSplit": "3방향", - "fourSplit": "4방향", - "fiveSplit": "5방향", - "sixSplit": "6방향", + "twoSplit": "2분할", + "threeSplit": "3분할", + "fourSplit": "4분할", + "fiveSplit": "5분할", + "sixSplit": "6분할", "availableTabs": "사용 가능한 탭", "dragTabsHint": "탭을 아래 레이아웃 셀로 드래그하여 할당하세요.", "layout": "분할 화면 레이아웃", "dropHere": "여기에 탭을 드롭하세요", "apply": "분할 적용", - "clear": "클리어 스플릿", + "clear": "분할 해제", "selectMode": "화면 분할 모드를 선택하세요", "helpText": "동시에 표시할 탭 개수를 선택하세요", - "success": "분할 화면이 성공적으로 적용되었습니다.", - "cleared": "분할 화면이 지워졌습니다", + "success": "분할 화면이 적용되었습니다.", + "cleared": "분할 화면이 해제되었습니다.", "error": { "noAssignments": "레이아웃에 최소 하나 이상의 탭을 지정해 주세요.", - "fillAllSlots": "지원하시려면 {{count}} 칸을 모두 채우신 후 지원해 주세요." + "fillAllSlots": "적용하려면 {{count}}개의 칸을 모두 채운 후 적용해 주세요." } }, "homepage": { "loggedInTitle": "로그인 완료!", - "loggedInMessage": "로그인하셨습니다! 사이드바를 이용하여 모든 도구를 사용하세요. 시작하려면 SSH 관리자 탭에서 SSH 호스트를 생성하세요. 호스트가 생성되면 사이드바의 다른 앱을 사용하여 연결할 수 있습니다.", + "loggedInMessage": "로그인되었습니다! 사이드바에서 모든 도구를 사용할 수 있습니다. 시작하려면 호스트 관리자 탭에서 SSH 호스트를 생성하세요. 호스트를 생성한 후에는 사이드바의 다른 앱에서 해당 호스트에 연결할 수 있습니다.", "failedToLoadAlerts": "알림을 불러오는 데 실패했습니다.", - "failedToDismissAlert": "경고를 해제하지 못했습니다" + "failedToDismissAlert": "알림을 닫는 데 실패했습니다." }, "serverConfig": { - "title": "서버 구성", - "description": "Termix 서버 URL을 구성하여 백엔드 서비스에 연결하십시오", + "title": "서버 설정", + "description": "백엔드 서비스에 연결할 Termix 서버 URL을 설정하세요.", "serverUrl": "서버 URL", "enterServerUrl": "서버 URL을 입력해 주세요", "testConnectionFirst": "먼저 연결 상태를 테스트해 주세요", @@ -380,16 +380,16 @@ "connectionError": "연결 오류가 발생했습니다", "connected": "연결됨", "disconnected": "연결이 끊어졌습니다", - "configSaved": "설정이 성공적으로 저장되었습니다.", + "configSaved": "설정이 저장되었습니다.", "saveFailed": "설정을 저장하는 데 실패했습니다.", "saveError": "설정 저장 오류", "saving": "저장 중...", "saveConfig": "설정 저장", - "helpText": "Termix 서버가 실행 중인 URL을 입력하십시오(예: http://localhost:30001 또는 https://your-server.com)", + "helpText": "Termix 서버가 실행 중인 URL을 입력하세요(예: http://localhost:30001 또는 https://your-server.com).", "warning": "경고", - "notValidatedWarning": "URL 유효성 검사에 실패했습니다. URL 이 올바른지 확인하세요", + "notValidatedWarning": "URL 유효성 검사에 실패했습니다. URL이 올바른지 확인하세요.", "changeServer": "서버 변경", - "mustIncludeProtocol": "서버 URL은 http:// 또는 https://로 시작해야 합니다", + "mustIncludeProtocol": "서버 URL은 http:// 또는 https://로 시작해야 합니다.", "useEmbedded": "로컬 서버 사용", "embeddedDesc": "Termix를 내장된 로컬 서버로 실행하세요(원격 서버는 필요하지 않습니다).", "embeddedConnecting": "로컬 서버에 연결 중...", @@ -399,14 +399,16 @@ "error": "버전 확인 오류", "checkFailed": "업데이트 확인에 실패했습니다", "upToDate": "앱이 최신 버전입니다", - "currentVersion": "현재 {{version}}버전을 실행 중입니다.", + "currentVersion": "현재 {{version}} 버전을 실행 중입니다.", "updateAvailable": "업데이트 가능", - "newVersionAvailable": "새로운 버전이 있습니다! 현재 {{current}} 버전을 사용 중이며, {{latest}} 버전을 사용할 수 있습니다.", + "newVersionAvailable": "새 버전이 있습니다! 현재 {{current}} 버전을 사용 중이며, {{latest}} 버전을 사용할 수 있습니다.", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "{{date}}에 출시됨", "downloadUpdate": "업데이트 다운로드", - "dismiss": "해고하다", + "dismiss": "닫기", "checking": "업데이트를 확인하는 중...", - "checkUpdates": "업데이트를 확인하세요", + "checkUpdates": "업데이트 확인", "checkingUpdates": "업데이트를 확인하는 중...", "refresh": "새로고침", "updateRequired": "업데이트 필요", @@ -414,32 +416,34 @@ "noUpdatesFound": "업데이트를 찾을 수 없습니다." }, "common": { - "close": "닫다", + "close": "닫기", "minimize": "최소화", "online": "온라인", "offline": "오프라인", - "continue": "계속하다", - "maintenance": "유지", - "degraded": "타락한", + "continue": "계속", + "maintenance": "유지보수", + "degraded": "성능 저하", "discord": "디스코드", "error": "오류", "warning": "경고", "info": "정보", "success": "성공", - "loading": "로딩 중...", - "required": "필수의", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", + "loading": "불러오는 중...", + "required": "필수", "optional": "선택 사항", - "connect": "연결하다", + "connect": "연결", "copied": "복사됨", "connecting": "연결 중...", "creating": "생성 중...", - "clear": "지우기(Clear)", - "toggleSidebar": "사이드바 토글", + "clear": "지우기", + "toggleSidebar": "사이드바 표시/숨기기", "sidebar": "사이드바", "home": "홈", "expired": "만료됨", "expiresToday": "오늘 만료됩니다", - "expiresTomorrow": "{{days}} 일 후에 만료됩니다", + "expiresTomorrow": "{{days}}일 후 만료됩니다", "updateAvailable": "업데이트 가능", "sshPath": "SSH 경로", "localPath": "로컬 경로", @@ -448,29 +452,30 @@ "resetSidebarWidth": "사이드바 너비 재설정", "dragToResizeSidebar": "드래그하여 사이드바 크기를 조절하세요", "noAuthCredentials": "이 SSH 호스트에 대한 인증 자격 증명을 사용할 수 없습니다.", - "noReleases": "출시 없음", + "noReleases": "릴리스 없음", "updatesAndReleases": "업데이트 및 릴리스", "newVersionAvailable": "새 버전({{version}})이 있습니다.", "failedToFetchUpdateInfo": "업데이트 정보를 가져오는 데 실패했습니다.", - "preRelease": "사전 공개", + "preRelease": "사전 릴리스", "loginFailed": "로그인 실패", - "noReleasesFound": "새로운 릴리스를 찾을 수 없습니다.", + "noReleasesFound": "릴리스를 찾을 수 없습니다.", "yourBackupCodes": "백업 코드", "sendResetCode": "재설정 코드 전송", - "verifyCode": "확인 코드", + "verifyCode": "코드 확인", "resetPassword": "비밀번호 재설정", "resetCode": "재설정 코드", "newPassword": "새 비밀번호", "folder": "폴더", "file": "파일", - "renamedSuccessfully": "성공적으로 이름이 변경되었습니다", - "deletedSuccessfully": "성공적으로 삭제되었습니다", + "renamedSuccessfully": "이름이 변경되었습니다", + "deletedSuccessfully": "삭제되었습니다", "noTunnelConnections": "구성된 터널 연결이 없습니다.", "sshTools": "SSH 도구", "english": "영어", - "chinese": "중국인", - "german": "독일 사람", + "chinese": "중국어", + "german": "독일어", "cancel": "취소", + "done": "Done", "username": "사용자 이름", "name": "이름", "login": "로그인", @@ -479,39 +484,40 @@ "password": "비밀번호", "version": "버전", "confirmPassword": "비밀번호 확인", - "back": "뒤쪽에", + "back": "뒤로", "email": "이메일", - "submit": "제출하다", - "change": "변화", - "save": "구하다", + "submit": "제출", + "change": "변경", + "save": "저장", "saving": "저장 중...", "delete": "삭제", + "rename": "Rename", "edit": "편집", - "add": "추가하다", - "search": "찾다", - "confirm": "확인하다", + "add": "추가", + "search": "검색", + "confirm": "확인", "yes": "예", "no": "아니요", "or": "또는", - "ok": "좋아요", + "ok": "확인", "enabled": "활성화됨", "disabled": "사용 안 함", - "important": "중요한", + "important": "중요", "notEnabled": "비활성화됨", "settingUp": "설정 중...", "next": "다음", - "previous": "이전의", + "previous": "이전", "refresh": "새로고침", "settings": "설정", - "profile": "윤곽", - "help": "돕다", - "about": "에 대한", + "profile": "프로필", + "help": "도움말", + "about": "정보", "language": "언어", "autoDetect": "자동 감지", "changeAccountPassword": "계정 비밀번호를 변경하세요", "passwordResetTitle": "비밀번호 재설정", "passwordResetDescription": "비밀번호를 재설정하려고 합니다. 이렇게 하면 모든 활성 세션에서 로그아웃됩니다.", - "enterSixDigitCode": "Docker 컨테이너 로그에서 사용자에 대한 6자리 코드를 입력하십시오.", + "enterSixDigitCode": "사용자의 Docker 컨테이너 로그에 있는 6자리 코드를 입력하세요:", "enterNewPassword": "사용자 계정의 새 비밀번호를 입력하세요:", "passwordsDoNotMatch": "비밀번호가 일치하지 않습니다", "passwordMinLength": "비밀번호는 최소 6자 이상이어야 합니다.", @@ -520,17 +526,17 @@ "failedToVerifyResetCode": "재설정 코드 확인에 실패했습니다.", "failedToCompletePasswordReset": "비밀번호 재설정을 완료하지 못했습니다.", "documentation": "문서", - "retry": "다시 해 보다", + "retry": "다시 시도", "checking": "확인 중...", "checkingDatabase": "데이터베이스 연결을 확인하는 중...", "checkingAuthentication": "인증 상태를 확인하는 중...", "backendReconnected": "서버 연결이 복구되었습니다.", - "connectionDegraded": "Server connection lost, recovering…", - "reload": "Reload", - "actions": "행위", - "remove": "제거하다", - "revoke": "취소", - "create": "만들다", + "connectionDegraded": "서버 연결이 끊어졌습니다. 복구 중…", + "reload": "새로고침", + "actions": "작업", + "remove": "제거", + "revoke": "철회", + "create": "생성", "update": "업데이트" }, "nav": { @@ -555,11 +561,12 @@ "tabNavigation": "탭 탐색", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", "copyPassword": "비밀번호 복사", - "copySudoPassword": "Sudo 암호 복사", + "copySudoPassword": "Sudo 비밀번호 복사", "passwordCopied": "비밀번호가 클립보드에 복사되었습니다.", - "sudoPasswordCopied": "Sudo 암호가 클립보드에 복사되었습니다.", + "sudoPasswordCopied": "Sudo 비밀번호가 클립보드에 복사되었습니다.", "noPasswordAvailable": "비밀번호를 사용할 수 없습니다.", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "비밀번호 복사에 실패했습니다.", + "openFileManager": "Open File Manager" }, "admin": { "title": "관리자 설정", @@ -568,18 +575,18 @@ "userManagement": "사용자 관리", "makeAdmin": "관리자 생성", "removeAdmin": "관리자 제거", - "deleteUser": "사용자 {{username}}를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", - "allowRegistration": "등록을 허용합니다", + "deleteUser": "사용자 {{username}}을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", + "allowRegistration": "등록 허용", "oidcSettings": "OIDC 설정", "clientId": "클라이언트 ID", - "clientSecret": "클라이언트 암호", + "clientSecret": "클라이언트 시크릿", "issuerUrl": "발급자 URL", "authorizationUrl": "인증 URL", "tokenUrl": "토큰 URL", - "updateSettings": "업데이트 설정", + "updateSettings": "설정 업데이트", "confirmDelete": "이 사용자를 삭제하시겠습니까?", - "confirmMakeAdmin": "{{username}} 님을 관리자로 지정하시겠습니까?", - "confirmRemoveAdmin": "{{username}}에서 관리자 권한을 제거하시겠습니까?", + "confirmMakeAdmin": "{{username}}님을 관리자로 지정하시겠습니까?", + "confirmRemoveAdmin": "{{username}}님의 관리자 권한을 제거하시겠습니까?", "externalAuthentication": "외부 인증(OIDC)", "configureExternalProvider": "OIDC/OAuth2 인증을 위해 외부 ID 공급자를 구성합니다.", "userIdentifierPath": "사용자 식별자 경로", @@ -589,60 +596,60 @@ "saveConfiguration": "설정 저장", "reset": "초기화", "success": "성공", - "loading": "로딩 중...", + "loading": "불러오는 중...", "refresh": "새로고침", "loadingUsers": "사용자 불러오는 중...", "username": "사용자 이름", "type": "유형", - "actions": "행위", + "actions": "작업", "external": "외부", - "local": "현지의", + "local": "로컬", "adminManagement": "관리자 관리", "makeUserAdmin": "사용자를 관리자로 만들기", "adding": "추가 중...", - "currentAdmins": "현 관리자", + "currentAdmins": "현재 관리자", "adminBadge": "관리자", "removeAdminButton": "관리자 제거", "general": "일반", "userRegistration": "사용자 등록", - "allowNewAccountRegistration": "새 계정 등록을 허용합니다", + "allowNewAccountRegistration": "새 계정 등록 허용", "allowPasswordLogin": "사용자 이름/비밀번호 로그인 허용", "allowPasswordReset": "재설정 코드를 통해 비밀번호 재설정을 허용합니다.", "missingRequiredFields": "필수 입력란이 누락되었습니다: {{fields}}", - "oidcConfigurationUpdated": "OIDC 구성이 성공적으로 업데이트되었습니다!", + "oidcConfigurationUpdated": "OIDC 설정이 업데이트되었습니다!", "failedToFetchOidcConfig": "OIDC 구성을 가져오는 데 실패했습니다.", "failedToFetchRegistrationStatus": "등록 상태를 가져오는 데 실패했습니다.", "failedToFetchPasswordLoginStatus": "비밀번호 로그인 상태를 가져오는 데 실패했습니다.", "failedToFetchUsers": "사용자 정보를 가져오는 데 실패했습니다.", - "oidcConfigurationDisabled": "OIDC 구성이 성공적으로 비활성화되었습니다!", + "oidcConfigurationDisabled": "OIDC 설정이 비활성화되었습니다!", "failedToUpdateOidcConfig": "OIDC 구성 업데이트에 실패했습니다.", "failedToDisableOidcConfig": "OIDC 구성을 비활성화하는 데 실패했습니다.", - "enterUsernameToMakeAdmin": "관리자 권한을 얻으려면 사용자 이름을 입력하세요.", - "userIsNowAdmin": "사용자 {{username}} 님이 이제 관리자입니다.", + "enterUsernameToMakeAdmin": "관리자로 지정할 사용자 이름을 입력하세요.", + "userIsNowAdmin": "사용자 {{username}}님이 이제 관리자입니다.", "failedToMakeUserAdmin": "사용자를 관리자로 만드는 데 실패했습니다.", - "removeAdminStatus": "{{username}}에서 관리자 상태를 제거하시겠습니까?", - "adminStatusRemoved": "{{username}}에서 관리자 상태가 제거되었습니다.", + "removeAdminStatus": "{{username}}님의 관리자 상태를 제거하시겠습니까?", + "adminStatusRemoved": "{{username}}님의 관리자 상태가 제거되었습니다.", "failedToRemoveAdminStatus": "관리자 권한 제거에 실패했습니다.", - "userDeletedSuccessfully": "사용자 {{username}} 님이 성공적으로 삭제했습니다.", + "userDeletedSuccessfully": "사용자 {{username}}님이 삭제되었습니다.", "failedToDeleteUser": "사용자 삭제에 실패했습니다", "overrideUserInfoUrl": "사용자 정보 URL 재정의 (필수 아님)", "allowedUsers": "허용된 사용자", "allowedUsersDescription": "허용되는 이메일 패턴 목록을 쉼표로 구분하여 입력하세요. 정확한 이메일 주소(user@example.com)를 사용하거나 도메인 접미사(@example.com)를 사용하거나, 모든 사용자를 허용하려면 비워 두세요.", "failedToFetchSessions": "세션을 가져오는 데 실패했습니다.", - "sessionRevokedSuccessfully": "세션이 성공적으로 취소되었습니다.", - "failedToRevokeSession": "세션 취소에 실패했습니다.", - "confirmRevokeSession": "이 세션을 취소하시겠습니까?", - "confirmRevokeAllSessions": "이 사용자의 모든 세션을 취소하시겠습니까?", - "failedToRevokeSessions": "세션 취소에 실패했습니다", - "sessionsRevokedSuccessfully": "세션이 성공적으로 취소되었습니다.", + "sessionRevokedSuccessfully": "세션이 철회되었습니다.", + "failedToRevokeSession": "세션 철회에 실패했습니다.", + "confirmRevokeSession": "이 세션을 철회하시겠습니까?", + "confirmRevokeAllSessions": "이 사용자의 모든 세션을 철회하시겠습니까?", + "failedToRevokeSessions": "세션 철회에 실패했습니다.", + "sessionsRevokedSuccessfully": "세션이 철회되었습니다.", "linkToPasswordAccount": "비밀번호 계정 링크", "linkOIDCDialogTitle": "OIDC 계정을 비밀번호 계정에 연결", - "linkOIDCDialogDescription": "{{username}} (OIDC 사용자)를 기존 암호 계정에 연결합니다. 이렇게 하면 암호 계정에 이중 인증이 활성화됩니다.", + "linkOIDCDialogDescription": "{{username}}(OIDC 사용자)를 기존 비밀번호 계정에 연결합니다. 이렇게 하면 비밀번호 계정에 이중 인증이 활성화됩니다.", "createUser": "사용자 생성", - "createUserDescription": "사용자 이름과 비밀번호를 사용하여 새 로컬 사용자를 생성합니다.", + "createUserDescription": "사용자 이름과 비밀번호로 새 로컬 사용자를 생성합니다.", "enterUsername": "사용자 이름을 입력하세요", "enterPassword": "비밀번호를 입력하세요", - "userCreatedSuccessfully": "사용자 {{username}} 님이 성공적으로 생성했습니다.", + "userCreatedSuccessfully": "사용자 {{username}}님이 생성되었습니다.", "failedToCreateUser": "사용자 생성에 실패했습니다", "manageUser": "사용자 관리", "manageUserDescription": "사용자 설정, 역할 및 권한을 관리합니다.", @@ -652,7 +659,7 @@ "regularUser": "일반 사용자", "adminPrivileges": "관리자 권한", "administratorRole": "관리자 역할", - "administratorRoleDescription": "전체 시스템 접근 권한 및 관리 권한을 부여하십시오.", + "administratorRoleDescription": "전체 시스템 접근 권한과 관리 권한을 부여합니다.", "passwordManagement": "비밀번호 관리", "passwordResetWarning": "사용자 비밀번호를 재설정하면 해당 사용자의 모든 데이터(SSH 호스트, 자격 증명, 설정)가 삭제됩니다. 이 작업은 되돌릴 수 없습니다.", "resetUserPassword": "사용자 비밀번호 재설정", @@ -660,10 +667,10 @@ "passwordResetInitiated": "{{username}}에 대한 비밀번호 재설정이 시작되었습니다. 재설정 코드가 전송되었습니다.", "failedToResetPassword": "비밀번호 재설정을 시작하는 데 실패했습니다.", "sessionManagement": "세션 관리", - "revokeAllSessions": "모든 세션 취소", + "revokeAllSessions": "모든 세션 철회", "revokeAllSessionsDescription": "모든 기기 및 세션에서 강제 로그아웃", - "revoking": "취소 중...", - "revoke": "모두 취소", + "revoking": "철회 중...", + "revoke": "모두 철회", "dangerZone": "위험 지역", "deleteUserTitle": "사용자 계정 삭제", "deleteUserWarning": "이 사용자 계정과 관련된 모든 데이터를 영구적으로 삭제합니다. 이 작업은 되돌릴 수 없습니다.", @@ -674,22 +681,22 @@ "cannotModifyOwnAdminStatus": "본인은 관리자 상태를 수정할 수 없습니다.", "dualAuth": "이중 인증", "externalOIDC": "외부(OIDC)", - "localPassword": "로컬 암호", - "confirmRevokeOwnSessions": "본인의 모든 세션을 취소하시겠습니까? 로그아웃됩니다.", + "localPassword": "로컬 비밀번호", + "confirmRevokeOwnSessions": "본인의 모든 세션을 철회하시겠습니까? 로그아웃됩니다.", "linkOIDCWarningTitle": "경고: OIDC 사용자 데이터가 삭제됩니다.", - "linkOIDCActionDeleteUser": "OIDC 사용자 계정과 해당 계정의 모든 데이터를 삭제하세요.", - "linkOIDCActionAddCapability": "대상 암호 계정에 OIDC 로그인 기능을 추가합니다.", + "linkOIDCActionDeleteUser": "OIDC 사용자 계정과 해당 계정의 모든 데이터를 삭제합니다.", + "linkOIDCActionAddCapability": "대상 비밀번호 계정에 OIDC 로그인 기능을 추가합니다.", "linkOIDCActionDualAuth": "비밀번호 계정이 비밀번호와 OIDC 모두를 사용하여 로그인할 수 있도록 허용합니다.", "linkTargetUsernameLabel": "대상 비밀번호 계정 사용자 이름", - "linkTargetUsernamePlaceholder": "사용자 이름과 비밀번호를 입력하세요.", + "linkTargetUsernamePlaceholder": "비밀번호 계정의 사용자 이름을 입력하세요.", "linkAccountsButton": "계정 연동", "linkingAccounts": "연결 중...", - "accountsLinkedSuccessfully": "OIDC 사용자 {{oidcUsername}} 가 {{targetUsername}}에 연결되었습니다.", + "accountsLinkedSuccessfully": "OIDC 사용자 {{oidcUsername}}이(가) {{targetUsername}}에 연결되었습니다.", "failedToLinkAccounts": "계정 연결에 실패했습니다", "linkTargetUsernameRequired": "대상 사용자 이름은 필수입니다.", "unlinkOIDCTitle": "OIDC 인증 연결 해제", - "unlinkOIDCDescription": "{{username}}에서 OIDC 인증을 제거하시겠습니까? 이렇게 하면 사용자는 사용자 이름/비밀번호로만 로그인할 수 있습니다.", - "unlinkOIDCSuccess": "OIDC가 {{username}}에서 연결 해제되었습니다.", + "unlinkOIDCDescription": "{{username}}님의 OIDC 인증을 제거하시겠습니까? 이렇게 하면 사용자는 사용자 이름/비밀번호로만 로그인할 수 있습니다.", + "unlinkOIDCSuccess": "{{username}}님의 OIDC 연결이 해제되었습니다.", "failedToUnlinkOIDC": "OIDC 연결 해제에 실패했습니다.", "databaseSecurity": "데이터베이스 보안", "encryptionStatus": "암호화 상태", @@ -698,7 +705,7 @@ "disabled": "사용 안 함", "keyId": "키 ID", "created": "생성됨", - "migrationStatus": "이민 상태", + "migrationStatus": "마이그레이션 상태", "migrationCompleted": "마이그레이션이 완료되었습니다", "migrationRequired": "마이그레이션 필요", "deviceProtectedMasterKey": "환경 보호 마스터 키", @@ -707,7 +714,7 @@ "keyNotProtectedByDeviceBinding": "환경 바인딩으로 보호되지 않는 키입니다(업그레이드 권장).", "valid": "유효한", "initializeDatabaseEncryption": "데이터베이스 암호화 초기화", - "enableAes256EncryptionWithDeviceBinding": "환경 변수에 따라 마스터 키가 보호되는 AES-256 암호화를 활성화합니다. 이를 통해 SSH 키, 암호 및 인증 토큰에 대한 기업 수준의 보안을 구축할 수 있습니다.", + "enableAes256EncryptionWithDeviceBinding": "환경에 바인딩된 마스터 키 보호와 함께 AES-256 암호화를 활성화합니다. 이를 통해 SSH 키, 비밀번호 및 인증 토큰에 엔터프라이즈급 보안을 제공합니다.", "featuresEnabled": "활성화된 기능:", "aes256GcmAuthenticatedEncryption": "AES-256-GCM 인증 암호화", "deviceFingerprintMasterKeyProtection": "환경 지문 마스터 키 보호(KEK)", @@ -717,7 +724,7 @@ "initializeEnterpriseEncryption": "엔터프라이즈 암호화 초기화", "migrateExistingData": "기존 데이터 마이그레이션", "encryptExistingUnprotectedData": "데이터베이스에 있는 보호되지 않은 기존 데이터를 암호화하세요. 이 과정은 안전하며 자동 백업을 생성합니다.", - "testMigrationDryRun": "암호화 호환성을 확인하세요", + "testMigrationDryRun": "암호화 호환성 확인", "migrating": "마이그레이션 중...", "migrateData": "데이터 마이그레이션", "securityInformation": "보안 정보", @@ -728,18 +735,18 @@ "pbkdf2HkdfKeyDerivation": "10만 번 반복을 사용한 PBKDF2 + HKDF 키 유도", "backwardCompatibleMigration": "마이그레이션 중에도 모든 데이터는 이전 버전과의 호환성을 유지합니다.", "enterpriseGradeSecurityActive": "엔터프라이즈급 보안 활성화", - "masterKeysProtectedByDeviceBinding": "마스터 암호화 키는 환경 지문 인식을 통해 보호됩니다. 이 기능은 서버 호스트 이름, 경로 및 기타 환경 정보를 사용하여 보호 키를 생성합니다. 서버를 마이그레이션하려면 새 서버에서 DB_ENCRYPTION_KEY 환경 변수를 설정하십시오.", - "important": "중요한", - "keepEncryptionKeysSecure": "데이터 보안을 확보하려면 데이터베이스 파일과 서버 구성을 정기적으로 백업하십시오. 새 서버로 마이그레이션하려면 새 환경에서 DB_ENCRYPTION_KEY 환경 변수를 설정하거나 동일한 호스트 이름과 디렉터리 구조를 유지하십시오.", + "masterKeysProtectedByDeviceBinding": "마스터 암호화 키는 환경 지문으로 보호됩니다. 서버 호스트 이름, 경로 및 기타 환경 정보를 사용해 보호 키를 생성합니다. 서버를 마이그레이션하려면 새 서버에서 DB_ENCRYPTION_KEY 환경 변수를 설정하세요.", + "important": "중요", + "keepEncryptionKeysSecure": "데이터 보안을 위해 데이터베이스 파일과 서버 구성을 정기적으로 백업하세요. 새 서버로 마이그레이션하려면 새 환경에서 DB_ENCRYPTION_KEY 환경 변수를 설정하거나 동일한 호스트 이름과 디렉터리 구조를 유지하세요.", "loadingEncryptionStatus": "암호화 상태를 불러오는 중...", - "testMigrationDescription": "기존 데이터를 실제로 수정하지 않고 안전하게 암호화된 형식으로 마이그레이션할 수 있는지 확인하십시오.", + "testMigrationDescription": "실제 데이터를 수정하지 않고도 기존 데이터를 암호화된 형식으로 안전하게 마이그레이션할 수 있는지 확인합니다.", "serverMigrationGuide": "서버 마이그레이션 가이드", "migrationInstructions": "암호화된 데이터를 새 서버로 마이그레이션하려면 다음 단계를 따르세요. 1) 데이터베이스 파일을 백업합니다. 2) 새 서버에서 환경 변수 DB_ENCRYPTION_KEY=\"your-key\"를 설정합니다. 3) 데이터베이스 파일을 복원합니다.", "environmentProtection": "환경 보호", "environmentProtectionDesc": "서버 환경 정보(호스트 이름, 경로 등)를 기반으로 암호화 키를 보호하며, 환경 변수를 통해 마이그레이션할 수 있습니다.", "verificationCompleted": "호환성 검증이 완료되었습니다. 데이터 변경 사항은 없습니다.", - "verificationInProgress": "확인 완료", - "dataMigrationCompleted": "데이터 마이그레이션이 성공적으로 완료되었습니다!", + "verificationInProgress": "검증 진행 중...", + "dataMigrationCompleted": "데이터 마이그레이션이 완료되었습니다!", "verificationFailed": "호환성 검증에 실패했습니다.", "migrationFailed": "마이그레이션이 실패했습니다", "runningVerification": "호환성 검증을 실행 중...", @@ -755,14 +762,14 @@ "databaseFileEncryption": "데이터베이스 파일 암호화", "dualLayerProtection": "이중 레이어 보호 기능 활성화", "bothFieldAndFileEncryptionActive": "최고 수준의 보안을 위해 필드 수준 암호화와 파일 수준 암호화가 모두 활성화되었습니다.", - "fieldLevelAes256Encryption": "중요 데이터용 필드 레벨 AES-256 암호화", + "fieldLevelAes256Encryption": "민감한 데이터를 위한 필드 수준 AES-256 암호화", "fileLevelDatabaseEncryption": "하드웨어 바인딩을 이용한 파일 수준 데이터베이스 암호화", "hardwareBoundFileKeys": "하드웨어 기반 파일 암호화 키", "automaticEncryptedBackups": "자동 암호화 백업 생성", "createEncryptedBackup": "암호화된 백업 생성", "creatingBackup": "백업 생성 중...", - "backupCreated": "백업이 생성되었습니다", - "encryptedBackupCreatedSuccessfully": "암호화된 백업이 성공적으로 생성되었습니다.", + "backupCreated": "백업 생성됨", + "encryptedBackupCreatedSuccessfully": "암호화된 백업이 생성되었습니다.", "backupCreationFailed": "백업 생성 실패", "databaseMigration": "데이터베이스 마이그레이션", "exportForMigration": "마이그레이션을 위해 내보내기", @@ -771,7 +778,7 @@ "exporting": "내보내는 중...", "exportCreated": "SQLite 내보내기가 생성되었습니다.", "exportContainsDecryptedData": "SQLite 내보내기 파일에는 암호 해독된 데이터가 포함되어 있습니다. 안전하게 보관하세요!", - "databaseExportedSuccessfully": "SQLite 데이터베이스 내보내기가 성공적으로 완료되었습니다.", + "databaseExportedSuccessfully": "SQLite 데이터베이스 내보내기가 완료되었습니다.", "databaseExportFailed": "SQLite 데이터베이스 내보내기 실패", "importFromMigration": "마이그레이션에서 가져오기", "importDatabaseFromAnotherSystem": "다른 시스템 또는 하드웨어에서 SQLite 데이터베이스를 가져옵니다.", @@ -779,8 +786,8 @@ "importing": "가져오는 중...", "selectedFile": "선택된 SQLite 파일", "importWillReplaceExistingData": "SQLite 가져오기는 기존 데이터를 덮어씁니다. 백업을 권장합니다!", - "pleaseSelectImportFile": "SQLite 가져오기 파일을 선택하십시오.", - "databaseImportedSuccessfully": "SQLite 데이터베이스를 성공적으로 가져왔습니다.", + "pleaseSelectImportFile": "가져올 SQLite 파일을 선택하세요.", + "databaseImportedSuccessfully": "SQLite 데이터베이스를 가져왔습니다.", "databaseImportFailed": "SQLite 데이터베이스 가져오기 실패", "manageEncryptionAndBackups": "암호화 키, 데이터베이스 보안 및 백업 작업을 관리합니다.", "activeSecurityFeatures": "현재 시행 중인 보안 조치 및 보호 조치", @@ -790,17 +797,17 @@ "noMigrationNeeded": "마이그레이션이 필요하지 않습니다.", "encryptionKey": "암호화 키", "keyProtection": "키 보호", - "active": "활동적인", - "legacy": "유산", + "active": "활성", + "legacy": "레거시", "dataStatus": "데이터 상태", "encrypted": "암호화됨", "needsMigration": "마이그레이션 필요", - "ready": "준비가 된", + "ready": "준비됨", "initializeEncryption": "암호화 초기화", "initialize": "초기화", - "test": "시험", - "migrate": "이주하다", - "backup": "지원", + "test": "테스트", + "migrate": "마이그레이션", + "backup": "백업", "createBackup": "백업 생성", "exportImport": "내보내기/가져오기", "export": "내보내기", @@ -810,65 +817,100 @@ "exportDescription": "SSH 호스트 및 자격 증명을 SQLite 파일로 내보내기", "importDescription": "중복 항목을 건너뛰는 증분 병합을 사용하여 SQLite 파일을 가져옵니다.", "criticalWarning": "심각한 경고", - "cannotDisablePasswordLoginWithoutOIDC": "OIDC가 구성되지 않은 상태에서는 암호 로그인을 비활성화할 수 없습니다! 암호 로그인을 비활성화하기 전에 OIDC 인증을 구성해야 합니다. 그렇지 않으면 Termix에 액세스할 수 없게 됩니다.", - "confirmDisablePasswordLogin": "암호 로그인을 비활성화하시겠습니까? 진행하기 전에 OIDC가 제대로 구성되어 작동하는지 확인하십시오. 그렇지 않으면 Termix 인스턴스에 액세스할 수 없게 됩니다.", - "passwordLoginDisabled": "비밀번호 로그인이 성공적으로 비활성화되었습니다.", - "passwordLoginAndRegistrationDisabled": "비밀번호 로그인 및 신규 계정 등록 기능이 성공적으로 비활성화되었습니다.", + "cannotDisablePasswordLoginWithoutOIDC": "OIDC가 구성되지 않은 상태에서는 비밀번호 로그인을 비활성화할 수 없습니다! 비밀번호 로그인을 비활성화하기 전에 OIDC 인증을 구성해야 합니다. 그렇지 않으면 Termix에 접근할 수 없게 됩니다.", + "confirmDisablePasswordLogin": "비밀번호 로그인을 비활성화하시겠습니까? 진행하기 전에 OIDC가 제대로 구성되어 작동하는지 확인하세요. 그렇지 않으면 Termix 인스턴스에 접근할 수 없게 됩니다.", + "passwordLoginDisabled": "비밀번호 로그인이 비활성화되었습니다.", + "passwordLoginAndRegistrationDisabled": "비밀번호 로그인 및 신규 계정 등록 기능이 비활성화되었습니다.", "requiresPasswordLogin": "비밀번호 로그인이 활성화되어 있어야 합니다.", - "passwordLoginDisabledWarning": "비밀번호 로그인이 비활성화되었습니다. OIDC가 올바르게 구성되어 있는지 확인하십시오. 그렇지 않으면 Termix에 로그인할 수 없습니다.", - "oidcRequiredWarning": "중요: 비밀번호 로그인이 비활성화되었습니다. OIDC를 재설정하거나 잘못 구성하면 Termix에 대한 모든 접근 권한을 잃고 인스턴스가 완전히 먹통이 됩니다. 절대적으로 확신하는 경우에만 진행하십시오.", + "passwordLoginDisabledWarning": "비밀번호 로그인이 비활성화되었습니다. OIDC가 올바르게 구성되어 있는지 확인하세요. 그렇지 않으면 Termix에 로그인할 수 없습니다.", + "oidcRequiredWarning": "중요: 비밀번호 로그인이 비활성화되었습니다. OIDC를 재설정하거나 잘못 구성하면 Termix에 대한 모든 접근 권한을 잃고 인스턴스를 사용할 수 없게 됩니다. 절대적으로 확신하는 경우에만 진행하세요.", "confirmDisableOIDCWarning": "경고: 비밀번호 로그인이 비활성화된 상태에서 OIDC를 비활성화하려고 합니다. 이렇게 하면 Termix 인스턴스가 완전히 먹통이 되어 모든 접근 권한을 잃게 됩니다. 정말로 계속 진행하시겠습니까?", "failedToUpdatePasswordLoginStatus": "비밀번호 로그인 상태 업데이트에 실패했습니다.", "monitoringDefaults": "모니터링 기본 설정", "monitoringDefaultsDesc": "상태 확인 및 메트릭 수집을 위한 전역 기본 간격입니다. 호스트별 설정은 이러한 값을 재정의합니다.", "globalStatusCheckInterval": "기본 상태 확인 간격", "globalMetricsInterval": "기본 메트릭 수집 간격", - "globalSettingsSaved": "글로벌 모니터링 설정이 저장되었습니다.", + "globalSettingsSaved": "전역 모니터링 설정이 저장되었습니다.", "failedToSaveGlobalSettings": "전역 모니터링 설정을 저장하는 데 실패했습니다.", "failedToLoadGlobalSettings": "전역 모니터링 설정을 불러오는 데 실패했습니다.", - "sessionTimeout": "Session Timeout", - "sessionTimeoutDesc": "Configure how long user sessions last before requiring re-authentication. 'Remember Me' sessions are unaffected (always 30 days).", - "sessionTimeoutHours": "Timeout Duration", - "hours": "hours", - "sessionTimeoutNote": "Valid range: 1–720 hours. Changes apply to new sessions only.", - "sessionTimeoutSaved": "Session timeout saved", - "failedToSaveSessionTimeout": "Failed to save session timeout", + "sessionTimeout": "세션 시간 제한", + "sessionTimeoutDesc": "재인증이 필요해지기 전까지 사용자 세션을 유지할 시간을 설정합니다. '로그인 상태 유지' 세션은 영향을 받지 않습니다(항상 30일).", + "sessionTimeoutHours": "시간 제한 기간", + "hours": "시간", + "sessionTimeoutNote": "유효 범위: 1~720시간. 변경 사항은 새 세션에만 적용됩니다.", + "sessionTimeoutSaved": "세션 시간 제한이 저장되었습니다.", + "failedToSaveSessionTimeout": "세션 시간 제한 저장에 실패했습니다.", "guacamoleIntegration": "원격 데스크톱 통합(Guacamole)", "guacamoleIntegrationDesc": "guacd를 통해 RDP, VNC 및 Telnet 연결을 활성화합니다. guacd 인스턴스가 실행 중이어야 합니다.", "enableGuacamole": "RDP/VNC/Telnet 지원을 활성화합니다.", "guacdUrl": "guacd URL (호스트:포트)", "guacdUrlPlaceholder": "guacd:4822", "guacdUrlNote": "guacd 호스트/포트 변경 사항을 적용하려면 서버를 다시 시작해야 합니다.", - "guacamoleSettingsSaved": "과카몰리 설정이 저장되었습니다.", - "failedToSaveGuacamoleSettings": "과카몰리 설정 저장에 실패했습니다.", - "failedToLoadGuacamoleSettings": "과카몰리 설정을 불러오는 데 실패했습니다.", - "logLevel": "Log Level", - "logLevelDesc": "Control the verbosity of server logs. Higher levels reduce log output. Can also be set via the LOG_LEVEL environment variable.", - "logVerbosity": "Verbosity", - "logLevelNote": "Changes take effect immediately. Debug level may impact performance.", - "logLevelSaved": "Log level saved", - "failedToSaveLogLevel": "Failed to save log level", + "guacamoleSettingsSaved": "Guacamole 설정이 저장되었습니다.", + "failedToSaveGuacamoleSettings": "Guacamole 설정 저장에 실패했습니다.", + "failedToLoadGuacamoleSettings": "Guacamole 설정을 불러오는 데 실패했습니다.", + "logLevel": "로그 수준", + "logLevelDesc": "서버 로그의 상세도를 제어합니다. 높은 수준일수록 로그 출력이 줄어듭니다. LOG_LEVEL 환경 변수로도 설정할 수 있습니다.", + "logVerbosity": "상세도", + "logLevelNote": "변경 사항은 즉시 적용됩니다. 디버그 수준은 성능에 영향을 줄 수 있습니다.", + "logLevelSaved": "로그 수준이 저장되었습니다.", + "failedToSaveLogLevel": "로그 수준 저장에 실패했습니다.", "clampedToValidRange": "유효 범위로 조정되었습니다.", "loadingSessions": "세션 불러오는 중...", - "noActiveSessions": "활성화된 세션이 없습니다.", + "noActiveSessions": "활성 세션이 없습니다.", "device": "장치", "user": "사용자", "lastActive": "최근 활동", "expires": "만료됨", - "revoked": "취소됨", - "revokeAllUserSessionsTitle": "이 사용자에 대한 모든 세션을 취소합니다.", - "revokeAll": "모두 취소", + "revoked": "철회됨", + "revokeAllUserSessionsTitle": "이 사용자의 모든 세션 철회", + "revokeAll": "모두 철회", "linkOidcToPasswordAccount": "OIDC 계정을 비밀번호 계정에 연결", - "linkOidcToPasswordAccountDescription": "{{username}} (OIDC 사용자)를 기존 암호 계정에 연결합니다. 이렇게 하면 암호 계정에 이중 인증이 활성화됩니다.", + "linkOidcToPasswordAccountDescription": "{{username}}(OIDC 사용자)를 기존 비밀번호 계정에 연결합니다. 이렇게 하면 비밀번호 계정에 이중 인증이 활성화됩니다.", "linkOidcWarningTitle": "경고: OIDC 사용자 데이터가 삭제됩니다.", "linkOidcWarningDescription": "이 작업은 다음과 같은 결과를 가져올 것입니다:", - "linkOidcActionDeleteUser": "OIDC 사용자 계정과 해당 계정의 모든 데이터를 삭제하세요.", - "linkOidcActionAddCapability": "대상 암호 계정에 OIDC 로그인 기능을 추가합니다.", + "linkOidcActionDeleteUser": "OIDC 사용자 계정과 해당 계정의 모든 데이터를 삭제합니다.", + "linkOidcActionAddCapability": "대상 비밀번호 계정에 OIDC 로그인 기능을 추가합니다.", "linkOidcActionDualAuth": "비밀번호 계정이 비밀번호와 OIDC 모두를 사용하여 로그인할 수 있도록 허용합니다.", "passwordMinLength": "비밀번호는 최소 6자 이상이어야 합니다.", - "currentRoles": "현재 담당 업무", + "currentRoles": "현재 역할", "noRolesAssigned": "역할이 할당되지 않았습니다.", - "assignNewRole": "새 역할 할당" + "assignNewRole": "새 역할 할당", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "호스트 관리자", @@ -877,31 +919,31 @@ "noHosts": "SSH 호스트 없음", "noHostsMessage": "아직 SSH 호스트를 추가하지 않았습니다. 시작하려면 \"호스트 추가\"를 클릭하세요.", "loadingHosts": "호스트를 불러오는 중...", - "failedToLoadHosts": "호스트를 로드하는 데 실패했습니다.", - "retry": "다시 해 보다", + "failedToLoadHosts": "호스트를 불러오는 데 실패했습니다.", + "retry": "다시 시도", "refresh": "새로고침", "optional": "선택 사항", - "hostsCount": "{{count}} 호스트", + "hostsCount": "{{count}}개 호스트", "importJson": "JSON 가져오기", "importing": "가져오는 중...", - "exportAllJson": "Export All", - "exporting": "Exporting...", - "exportedAllHosts": "Exported {{count}} hosts", - "failedToExportAllHosts": "Failed to export hosts. Please ensure you're logged in and have access to the host data.", - "exportAllSensitiveWarning": "The exported file will contain sensitive authentication data (passwords/SSH keys) in plaintext. Please keep the file secure and delete it after use.", + "exportAllJson": "모두 내보내기", + "exporting": "내보내는 중...", + "exportedAllHosts": "{{count}}개의 호스트를 내보냈습니다.", + "failedToExportAllHosts": "호스트 내보내기에 실패했습니다. 로그인되어 있고 호스트 데이터에 접근 권한이 있는지 확인하세요.", + "exportAllSensitiveWarning": "내보낸 파일에는 민감한 인증 데이터(비밀번호/SSH 키)가 평문으로 포함됩니다. 파일을 안전하게 보관하고 사용 후 삭제하세요.", "importJsonTitle": "JSON에서 SSH 호스트 가져오기", "importJsonDesc": "JSON 파일을 업로드하여 여러 SSH 호스트(최대 100개)를 일괄 가져올 수 있습니다.", "downloadSample": "샘플 다운로드", "formatGuide": "형식 가이드", - "exportCredentialWarning": "경고: 호스트 \"{{name}}\"는 자격 증명 인증을 사용합니다. 내보낸 파일에는 자격 증명 데이터가 포함되지 않으므로 가져온 후 수동으로 다시 구성해야 합니다. 계속하시겠습니까?", - "exportSensitiveDataWarning": "경고: 호스트 \"{{name}}\"에 민감한 인증 데이터(암호/SSH 키)가 포함되어 있습니다. 내보낸 파일에는 이 데이터가 평문으로 포함됩니다. 파일을 안전하게 보관하고 사용 후 삭제하십시오. 계속하시겠습니까?", + "exportCredentialWarning": "경고: 호스트 \"{{name}}\"은(는) 자격 증명 인증을 사용합니다. 내보낸 파일에는 자격 증명 데이터가 포함되지 않으므로 가져온 후 수동으로 다시 설정해야 합니다. 계속하시겠습니까?", + "exportSensitiveDataWarning": "경고: 호스트 \"{{name}}\"에 민감한 인증 데이터(비밀번호/SSH 키)가 포함되어 있습니다. 내보낸 파일에는 이 데이터가 평문으로 포함됩니다. 파일을 안전하게 보관하고 사용 후 삭제하세요. 계속하시겠습니까?", "uncategorized": "분류되지 않음", - "confirmDelete": "\"{{name}}\" 을 정말로 삭제하시겠습니까?", + "confirmDelete": "\"{{name}}\"을(를) 정말로 삭제하시겠습니까?", "failedToDeleteHost": "호스트 삭제에 실패했습니다", - "failedToExportHost": "호스트 내보내기에 실패했습니다. 로그인되어 있고 호스트 데이터에 접근 권한이 있는지 확인하십시오.", + "failedToExportHost": "호스트 내보내기에 실패했습니다. 로그인되어 있고 호스트 데이터에 접근 권한이 있는지 확인하세요.", "jsonMustContainHosts": "JSON에는 \"hosts\" 배열이 포함되어 있거나 호스트 배열이어야 합니다.", "noHostsInJson": "JSON 파일에서 호스트를 찾을 수 없습니다.", - "maxHostsAllowed": "가져오기당 최대 100개의 호스트가 허용됩니다.", + "maxHostsAllowed": "가져오기당 최대 100개의 호스트만 허용됩니다.", "importCompleted": "가져오기 완료: {{success}} 성공, {{failed}} 실패", "importCreated": "생성됨", "importUpdated": "업데이트됨", @@ -921,11 +963,11 @@ "guacamoleSettings": "원격 데스크톱 설정", "organization": "조직", "ipAddress": "IP 주소 또는 호스트 이름", - "macAddress": "MAC Address", - "macAddressDesc": "For Wake-on-LAN. Format: AA:BB:CC:DD:EE:FF", + "macAddress": "MAC 주소", + "macAddressDesc": "Wake-on-LAN용입니다. 형식: AA:BB:CC:DD:EE:FF", "wakeOnLan": "Wake-on-LAN", - "wolSent": "Wake-on-LAN packet sent", - "wolFailed": "Failed to send Wake-on-LAN packet", + "wolSent": "Wake-on-LAN 패킷을 전송했습니다.", + "wolFailed": "Wake-on-LAN 패킷 전송에 실패했습니다.", "ipRequired": "IP 주소가 필요합니다.", "portRequired": "포트가 필요합니다", "port": "포트", @@ -943,11 +985,11 @@ "mustSelectValidSshConfig": "목록에서 유효한 SSH 구성을 선택해야 합니다.", "addHost": "호스트 추가", "editHost": "호스트 편집", - "cloneHost": "클론 호스트", + "cloneHost": "호스트 복제", "updateHost": "호스트 업데이트", - "hostUpdatedSuccessfully": "호스트 \"{{name}}\"가 성공적으로 업데이트되었습니다!", - "hostAddedSuccessfully": "호스트 \"{{name}}\"가 성공적으로 추가되었습니다!", - "hostDeletedSuccessfully": "호스트 \"{{name}}\"가 성공적으로 삭제되었습니다!", + "hostUpdatedSuccessfully": "호스트 \"{{name}}\"이(가) 업데이트되었습니다!", + "hostAddedSuccessfully": "호스트 \"{{name}}\"이(가) 추가되었습니다!", + "hostDeletedSuccessfully": "호스트 \"{{name}}\"이(가) 삭제되었습니다!", "failedToSaveHost": "호스트 저장에 실패했습니다. 다시 시도해 주세요.", "savingHost": "호스트를 저장하는 중...", "updatingHost": "호스트를 업데이트하는 중...", @@ -961,33 +1003,13 @@ "enableDockerDesc": "Docker 탭에서 호스트 가시성 활성화/비활성화", "enableDocker": "Docker 활성화", "defaultPath": "기본 경로", - "defaultPathDesc": "이 호스트에서 파일 관리자를 열 때 기본 디렉터리가 설정됩니다.", - "tunnelConnections": "터널 연결", + "defaultPathDesc": "이 호스트에서 파일 관리자를 열 때 사용할 기본 디렉터리입니다.", "connection": "연결", - "remove": "제거하다", - "sourcePort": "소스 포트", - "sourcePortDesc": " (출처는 일반 탭의 현재 연결 세부 정보입니다.)", - "endpointPort": "엔드포인트 포트", - "endpointSshConfig": "엔드포인트 SSH 구성", - "tunnelForwardDescription": "이 터널은 소스 머신(일반 탭의 현재 연결 세부 정보 참조)의 포트 {{sourcePort}} 에서 엔드포인트 머신의 포트 {{endpointPort}} 로 트래픽을 전달합니다.", - "maxRetries": "최대 재시도 횟수", - "maxRetriesDescription": "터널 연결에 대한 최대 재시도 횟수입니다.", - "retryInterval": "재시도 간격(초)", - "retryIntervalDescription": "재시도 시도 간 대기 시간.", - "autoStartContainer": "컨테이너 실행 시 자동 시작", - "autoStartDesc": "컨테이너가 시작될 때 이 터널을 자동으로 시작합니다.", - "addConnection": "터널 연결 추가", - "tunnelType": "터널형", - "tunnelTypeLocal": "로컬(-L)", - "tunnelTypeRemote": "원격(-R)", - "tunnelTypeLocalDesc": "로컬 포트를 원격 엔드포인트로 포워딩합니다.", - "tunnelTypeRemoteDesc": "원격 포트를 로컬 머신으로 포워딩", - "tunnelForwardDescriptionLocal": "이 터널은 로컬 포트 {{sourcePort}} 에서 엔드포인트 머신의 포트 {{endpointPort}} 로 트래픽을 전달합니다.", - "tunnelForwardDescriptionRemote": "이 터널은 소스 머신(일반 탭의 현재 연결 세부 정보 참조)의 포트 {{sourcePort}} 에서 엔드포인트 머신의 포트 {{endpointPort}} 로 트래픽을 전달합니다.", - "sshpassRequired": "비밀번호 인증을 위해서는 SSH 비밀번호가 필요합니다.", - "sshpassRequiredDesc": "터널에서 암호 인증을 사용하려면 시스템에 sshpass가 설치되어 있어야 합니다.", + "remove": "제거", + "sshpassRequired": "비밀번호 인증에는 sshpass가 필요합니다.", + "sshpassRequiredDesc": "터널에서 비밀번호 인증을 사용하려면 시스템에 sshpass가 설치되어 있어야 합니다.", "otherInstallMethods": "기타 설치 방법:", - "debianUbuntuEquivalent": "(데비안/우분투) 또는 사용 중인 운영체제에 해당하는 명령어를 입력하세요.", + "debianUbuntuEquivalent": "(Debian/Ubuntu) 또는 사용 중인 OS에 맞는 명령어.", "or": "또는", "centosRhelFedora": "CentOS/RHEL/Fedora", "macos": "macOS", @@ -999,18 +1021,18 @@ "permitRootLoginYes": "루트 사용자를 터널링에 사용하는 경우", "editSshConfig": "SSH 설정 파일을 편집하세요:", "sshConfigPath": "/etc/ssh/sshd_config", - "restartSshService": "그런 다음 SSH 서비스를 다시 시작하십시오.", + "restartSshService": "그런 다음 SSH 서비스를 다시 시작하세요:", "restartSshCommand": "sudo systemctl restart sshd", "upload": "업로드", - "authentication": "입증", + "authentication": "인증", "password": "비밀번호", - "key": "열쇠", + "key": "키", "credential": "자격 증명", "none": "없음", "opkssh": "OPKSSH", "opksshAuthDescription": "접속할 때마다 OPKSSH 웹 인증을 요청합니다. 인증 토큰은 24시간 동안 유효하며, 갱신해야 합니다.", - "selectCredential": "자격증명을 선택하세요", - "selectCredentialPlaceholder": "자격증을 선택하세요...", + "selectCredential": "자격 증명 선택", + "selectCredentialPlaceholder": "자격 증명을 선택하세요...", "credentialRequired": "자격 증명 인증을 사용할 때는 자격 증명이 필요합니다.", "credentialDescription": "자격 증명을 선택하면 현재 사용자 이름이 덮어쓰여지고 해당 자격 증명의 인증 정보가 사용됩니다.", "cannotChangeAuthAsSharedUser": "공유 사용자로 인증 방식을 변경할 수 없습니다.", @@ -1028,10 +1050,10 @@ "rsaSha2512": "RSA SHA2-512", "uploadFile": "파일 업로드", "pasteKey": "붙여넣기 키", - "updateKey": "업데이트 키", + "updateKey": "키 업데이트", "existingKey": "기존 키 (클릭하여 변경)", "existingCredential": "기존 자격 증명 (클릭하여 변경)", - "addTagsSpaceToAdd": "태그 추가 (추가할 공간)", + "addTagsSpaceToAdd": "태그 추가(스페이스 키로 추가)", "terminalBadge": "터미널", "tunnelBadge": "터널", "fileManagerBadge": "파일 관리자", @@ -1045,54 +1067,54 @@ "hostViewer": "호스트 뷰어", "enableServerStats": "서버 통계 활성화", "enableServerStatsDesc": "이 호스트에 대한 서버 통계 수집을 활성화/비활성화합니다.", - "displayItems": "전시품", - "displayItemsDesc": "서버 통계 페이지에 표시할 지표를 선택하세요.", + "displayItems": "표시 항목", + "displayItemsDesc": "서버 통계 페이지에 표시할 메트릭을 선택하세요.", "enableCpu": "CPU 사용량", "enableMemory": "메모리 사용량", "enableDisk": "디스크 사용량", "enableNetwork": "네트워크 통계 (출시 예정)", - "enableProcesses": "처리 건수 (곧 공개 예정)", + "enableProcesses": "프로세스 수(출시 예정)", "enableUptime": "가동 시간 (출시 예정)", "enableHostname": "호스트 이름 (출시 예정)", "enableOs": "운영 체제 (출시 예정)", "customCommands": "사용자 지정 명령 (출시 예정)", - "customCommandsDesc": "이 서버에 대한 사용자 지정 종료 및 재부팅 명령을 정의하십시오.", + "customCommandsDesc": "이 서버에 사용할 사용자 지정 종료 및 재부팅 명령을 정의합니다.", "shutdownCommand": "종료 명령", "rebootCommand": "재부팅 명령", - "confirmRemoveFromFolder": "\"{{folder}}\" 폴더에서 \"{{name}}\"를 삭제하시겠습니까? 호스트가 \"폴더 없음\"으로 이동됩니다.", - "removedFromFolder": "호스트 \"{{name}}\"가 폴더에서 성공적으로 제거되었습니다.", + "confirmRemoveFromFolder": "\"{{folder}}\" 폴더에서 \"{{name}}\"을(를) 제거하시겠습니까? 호스트는 \"폴더 없음\"으로 이동됩니다.", + "removedFromFolder": "호스트 \"{{name}}\"이(가) 폴더에서 제거되었습니다.", "failedToRemoveFromFolder": "호스트를 폴더에서 제거하는 데 실패했습니다.", - "folderRenamed": "폴더 \"{{oldName}}\"의 이름이 \"{{newName}}\"로 성공적으로 변경되었습니다.", + "folderRenamed": "폴더 \"{{oldName}}\"의 이름이 \"{{newName}}\"로 변경되었습니다.", "failedToRenameFolder": "폴더 이름 변경에 실패했습니다", "editFolderAppearance": "폴더 모양 편집", "editFolderAppearanceDesc": "폴더의 색상과 아이콘을 사용자 지정하세요", "folderColor": "폴더 색상", "folderIcon": "폴더 아이콘", - "preview": "시사", - "folderAppearanceUpdated": "폴더 모양이 성공적으로 업데이트되었습니다.", + "preview": "미리보기", + "folderAppearanceUpdated": "폴더 모양이 업데이트되었습니다.", "failedToUpdateFolderAppearance": "폴더 모양 업데이트에 실패했습니다.", "deleteAllHostsInFolder": "폴더 안의 모든 호스트를 삭제합니다", - "confirmDeleteAllHostsInFolder": "\"{{folder}}\" 폴더에 있는 모든 {{count}} 호스트를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", - "allHostsInFolderDeleted": "폴더 \"{{folder}}\"에서 {{count}} 호스트를 성공적으로 삭제했습니다.", + "confirmDeleteAllHostsInFolder": "\"{{folder}}\" 폴더에 있는 호스트 {{count}}개를 모두 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", + "allHostsInFolderDeleted": "\"{{folder}}\" 폴더에서 호스트 {{count}}개를 삭제했습니다.", "failedToDeleteHostsInFolder": "폴더에서 호스트를 삭제하는 데 실패했습니다.", - "movedToFolder": "호스트 \"{{name}}\"가 \"{{folder}}\"로 성공적으로 이동했습니다.", + "movedToFolder": "호스트 \"{{name}}\"이(가) \"{{folder}}\"로 이동했습니다.", "failedToMoveToFolder": "호스트를 폴더로 이동하는 데 실패했습니다.", "clickToRenameFolder": "폴더 이름을 바꾸려면 클릭하세요", "renameFolder": "폴더 이름 변경", - "removeFromFolder": "폴더에서 제거 \"{{folder}}\"", + "removeFromFolder": "\"{{folder}}\" 폴더에서 제거", "editHostTooltip": "호스트 편집", "deleteHostTooltip": "호스트 삭제", "exportHostTooltip": "호스트 내보내기", "cloneHostTooltip": "클론 호스트", "clickToEditHost": "호스트를 수정하려면 클릭하세요", "dragToMoveBetweenFolders": "드래그하여 폴더 간 이동", - "exportedHostConfig": "{{name}}에 대한 호스트 구성을 내보냈습니다.", + "exportedHostConfig": "{{name}}의 호스트 설정을 내보냈습니다.", "openTerminal": "터미널 열기", - "openRdp": "Open RDP", - "openVnc": "Open VNC", - "openTelnet": "Open Telnet", + "openRdp": "RDP 열기", + "openVnc": "VNC 열기", + "openTelnet": "Telnet 열기", "openFileManager": "파일 관리자 열기", - "openTunnels": "개방형 터널", + "openTunnels": "터널 열기", "openServerDetails": "서버 세부 정보 열기", "enabledWidgets": "활성화된 위젯", "openServerStats": "서버 통계 열기", @@ -1100,33 +1122,33 @@ "monitoringConfiguration": "모니터링 구성", "monitoringConfigurationDesc": "서버 통계 및 상태 확인 빈도를 구성합니다.", "statusCheckEnabled": "상태 모니터링 활성화", - "statusCheckEnabledDesc": "서버가 온라인 상태인지 오프라인 상태인지 확인하십시오.", + "statusCheckEnabledDesc": "서버가 온라인인지 오프라인인지 확인합니다.", "statusCheckInterval": "상태 확인 간격", "statusCheckIntervalDesc": "호스트가 온라인 상태인지 확인하는 빈도 (5초 ~ 1시간)", "statusChecks": "상태 확인", "disableTcpPing": "TCP Ping 비활성화", - "disableTcpPingDescription": "이 호스트에 대한 상태 확인(온라인/오프라인 감지)을 끄세요.", + "disableTcpPingDescription": "이 호스트의 상태 확인(온라인/오프라인 감지)을 끕니다.", "useGlobalStatusInterval": "전역 기본값을 사용합니다", "useGlobalMetricsInterval": "전역 기본값을 사용합니다", "usingGlobalDefault": "전역 기본값 사용({{value}}s)", - "metricsCollection": "측정항목 수집", + "metricsCollection": "메트릭 수집", "metricsEnabled": "메트릭 모니터링 활성화", "metricsEnabledDesc": "CPU, RAM, 디스크 및 기타 시스템 통계를 수집합니다.", - "metricsInterval": "측정항목 수집 간격", + "metricsInterval": "메트릭 수집 간격", "metricsIntervalDesc": "서버 통계 수집 빈도 (5초 ~ 1시간)", "metricsNotAvailableForConnectionType": "서버 메트릭은 SSH 호스트에서만 사용할 수 있습니다. TCP 핑 상태 확인은 위에서 활성화할 수 있습니다.", "intervalSeconds": "초", "intervalMinutes": "분", "intervalValidation": "모니터링 간격은 5초에서 1시간(3600초) 사이여야 합니다.", "monitoringDisabled": "이 호스트에 대한 서버 모니터링이 비활성화되었습니다.", - "enableMonitoring": "호스트 관리자 → 통계 탭에서 모니터링을 활성화합니다.", - "monitoringDisabledBadge": "모니터링 중지", + "enableMonitoring": "호스트 관리자 → 통계 탭에서 모니터링을 활성화하세요.", + "monitoringDisabledBadge": "모니터링 꺼짐", "statusMonitoring": "상태", "metricsMonitoring": "측정 기준", "terminalCustomization": "터미널 맞춤 설정", "appearance": "외관", - "behavior": "행동", - "advanced": "고급의", + "behavior": "동작", + "advanced": "고급", "themePreview": "테마 미리보기", "theme": "테마", "selectTheme": "테마를 선택하세요", @@ -1140,12 +1162,12 @@ "letterSpacing": "글자 간격", "letterSpacingValue": "글자 간격: {{value}}픽셀", "adjustLetterSpacing": "문자 간 간격을 조정하세요", - "lineHeight": "선 높이", + "lineHeight": "줄 높이", "lineHeightValue": "선 높이: {{value}}", "adjustLineHeight": "줄 간격을 조정하세요", "cursorStyle": "커서 스타일", "selectCursorStyle": "커서 스타일을 선택하세요", - "cursorStyleBlock": "차단하다", + "cursorStyleBlock": "블록", "cursorStyleUnderline": "밑줄", "cursorStyleBar": "바", "chooseCursorAppearance": "커서 모양을 선택하세요", @@ -1161,7 +1183,7 @@ "bellStyleVisual": "시각", "bellStyleBoth": "둘 다", "bellStyleDesc": "터미널 알림음(BEL 문자, \\x07)을 처리하는 방법입니다. 프로그램은 작업 완료, 오류 발생 또는 알림 시 이 알림음을 발생시킵니다. \"소리\"는 경고음을 재생하고, \"시각\"은 화면을 잠깐 깜빡이게 하며, \"둘 다\"는 경고음과 화면 깜빡임을 모두 표시하고, \"없음\"은 알림음을 비활성화합니다.", - "rightClickSelectsWord": "마우스 오른쪽 버튼을 클릭하고 단어를 선택하세요.", + "rightClickSelectsWord": "오른쪽 클릭 시 단어 선택", "rightClickSelectsWordDesc": "마우스 오른쪽 버튼을 클릭하면 커서 아래에 있는 단어가 선택됩니다.", "fastScrollModifier": "빠른 스크롤 수정자", "selectModifier": "수정자를 선택하세요", @@ -1184,43 +1206,43 @@ "backspaceModeDesc": "호환성을 위한 백스페이스 키 동작", "startupSnippet": "스타트업 스니펫", "selectSnippet": "스니펫을 선택하세요", - "searchSnippets": "검색 스니펫...", + "searchSnippets": "스니펫 검색...", "snippetNone": "없음", - "noneAuthTitle": "키보드 인터랙티브 인증", + "noneAuthTitle": "키보드 대화형 인증", "noneAuthDescription": "이 인증 방식은 SSH 서버에 연결할 때 키보드 대화형 인증을 사용합니다.", "noneAuthDetails": "키보드 대화형 인증을 사용하면 서버에 연결하는 동안 자격 증명을 입력하라는 메시지가 표시됩니다. 이는 다단계 인증이 필요한 서버나 자격 증명을 로컬에 저장하지 않으려는 경우에 유용합니다.", "opksshAuthTitle": "OPKSSH 인증", "forceKeyboardInteractive": "키보드 상호작용 강제 적용", "forceKeyboardInteractiveDesc": "키보드 입력 방식의 인증을 강제로 사용하게 합니다. 이는 2단계 인증(TOTP/2FA)을 사용하는 서버에서 필요한 경우가 있습니다.", "overrideCredentialUsername": "자격 증명 사용자 이름 재정의", - "overrideCredentialUsernameDesc": "자격 증명에 저장된 사용자 이름과 다른 사용자 이름을 사용하십시오. 이렇게 하면 동일한 자격 증명을 여러 사용자 이름으로 사용할 수 있습니다.", + "overrideCredentialUsernameDesc": "자격 증명에 저장된 사용자 이름과 다른 사용자 이름을 사용하세요. 이렇게 하면 동일한 자격 증명을 여러 사용자 이름으로 사용할 수 있습니다.", "jumpHosts": "점프 호스트", - "jumpHostsDescription": "점프 호스트(또는 배스천 호스트)를 사용하면 하나 이상의 중간 서버를 통해 대상 서버에 연결할 수 있습니다. 이는 방화벽 뒤에 있거나 사설 네트워크에 있는 서버에 액세스할 때 유용합니다.", + "jumpHostsDescription": "점프 호스트(배스천 호스트라고도 함)를 사용하면 하나 이상의 중간 서버를 거쳐 대상 서버에 연결할 수 있습니다. 방화벽 뒤나 사설 네트워크에 있는 서버에 접근할 때 유용합니다.", "jumpHostChain": "점프 호스트 체인", "addJumpHost": "점프 호스트 추가", "selectServer": "서버를 선택하세요", - "searchServers": "검색 서버...", + "searchServers": "서버 검색...", "noServerFound": "서버를 찾을 수 없습니다.", "jumpHostsOrder": "연결은 다음 순서로 이루어집니다: 점프 호스트 1 → 점프 호스트 2 → ... → 대상 서버", "socks5Proxy": "SOCKS5 프록시", - "portKnocking": "Port Knocking", - "portKnockingDesc": "Send a sequence of connection attempts to specified ports before connecting. Used to open firewall rules dynamically.", - "addKnock": "Add Port", - "delayMs": "Delay", + "portKnocking": "포트 노킹", + "portKnockingDesc": "연결하기 전에 지정된 포트로 일련의 연결 시도를 보냅니다. 방화벽 규칙을 동적으로 여는 데 사용됩니다.", + "addKnock": "포트 추가", + "delayMs": "지연 시간", "socks5Description": "SSH 연결을 위해 SOCKS5 프록시를 구성합니다. 모든 트래픽은 지정된 프록시 서버를 통해 라우팅됩니다.", "enableSocks5": "SOCKS5 프록시 활성화", - "enableSocks5Description": "이 SSH 연결에는 SOCKS5 프록시를 사용하십시오.", + "enableSocks5Description": "이 SSH 연결에 SOCKS5 프록시를 사용합니다.", "socks5Host": "프록시 호스트", "socks5Port": "프록시 포트", "socks5Username": "프록시 사용자 이름", "socks5Password": "프록시 비밀번호", - "socks5UsernameOptional": "선택 사항: 프록시에 인증이 필요하지 않은 경우 비워 두십시오.", - "socks5PasswordOptional": "선택 사항: 프록시에 인증이 필요하지 않은 경우 비워 두십시오.", + "socks5UsernameOptional": "선택 사항: 프록시에 인증이 필요하지 않으면 비워 두세요.", + "socks5PasswordOptional": "선택 사항: 프록시에 인증이 필요하지 않으면 비워 두세요.", "socks5ProxyChain": "프록시 체인", - "socks5ProxyChainDescription": "SOCKS 프록시 체인을 구성하십시오. 체인의 각 프록시는 이전 프록시를 통해 연결됩니다.", + "socks5ProxyChainDescription": "SOCKS 프록시 체인을 구성합니다. 체인의 각 프록시는 이전 프록시를 통해 연결됩니다.", "socks5ProxyMode": "프록시 모드", "socks5UseSingleProxy": "단일 프록시 사용", - "socks5UseProxyChain": "프록시 체인을 사용하세요", + "socks5UseProxyChain": "프록시 체인 사용", "socks5UsePreset": "저장된 사전 설정 사용", "socks5SelectPreset": "사전 설정 선택", "socks5ManagePresets": "사전 설정 관리", @@ -1228,7 +1250,7 @@ "socks5AddProxy": "체인에 프록시 추가", "socks5RemoveProxy": "프록시 제거", "socks5ProxyType": "프록시 유형", - "socks5SaveAsPreset": "프리셋으로 저장", + "socks5SaveAsPreset": "사전 설정으로 저장", "socks5SavePresetTitle": "프록시 체인을 사전 설정으로 저장", "socks5SavePresetDescription": "현재 프록시 체인 구성을 재사용 가능한 사전 설정으로 저장합니다.", "socks5PresetName": "사전 설정 이름", @@ -1236,7 +1258,7 @@ "socks5PresetCreated": "프록시 체인 사전 설정이 생성되었습니다.", "socks5PresetUpdated": "프록시 체인 사전 설정이 업데이트되었습니다.", "socks5PresetDeleted": "프록시 체인 사전 설정이 삭제되었습니다.", - "socks5PresetSaved": "사전 설정 \"{{name}}\"이 성공적으로 저장되었습니다.", + "socks5PresetSaved": "사전 설정 \"{{name}}\"이 저장되었습니다.", "socks5PresetSaveError": "사전 설정 저장에 실패했습니다.", "socks5PresetNameRequired": "사전 설정 이름은 필수 입력 사항입니다.", "socks5EmptyChainError": "빈 프록시 체인을 저장할 수 없습니다.", @@ -1269,10 +1291,10 @@ "atLeastOneActionRequired": "사이드바에는 활성화된 작업 중 최소 하나 이상이 표시되어야 합니다.", "advancedAuthSettings": "고급 인증 설정", "sudoPasswordAutoFill": "Sudo 비밀번호 자동 완성", - "sudoPasswordAutoFillDesc": "sudo 명령어가 암호를 입력하라는 메시지를 표시할 때 SSH 암호를 자동으로 입력하도록 제안합니다.", + "sudoPasswordAutoFillDesc": "sudo가 비밀번호를 요청할 때 SSH 비밀번호 입력을 자동으로 제안합니다.", "sudoPassword": "Sudo 비밀번호", - "sudoPasswordDesc": "sudo 명령어에 사용할 선택적 암호 (키 인증 시 유용)", - "keepaliveSettings": "SSH Keepalive", + "sudoPasswordDesc": "sudo 명령어에 사용할 선택적 비밀번호(키 인증 시 유용)", + "keepaliveSettings": "SSH 연결 유지", "keepaliveSettingsDesc": "SSH 수준의 keepalive 동작을 구성합니다. 간격을 0으로 설정하면 SSH keepalive가 비활성화됩니다(mikroTik 및 keepalive 요청을 무시하는 기타 장치에 유용합니다).", "keepaliveInterval": "유지 간격(밀리초)", "keepaliveIntervalDesc": "SSH 유지 신호를 보내는 빈도입니다. 기본값: 30000(30초). 0으로 설정하면 비활성화됩니다.", @@ -1286,20 +1308,20 @@ "proxyTestSuccess": "프록시 연결 성공 ({{latency}}ms)", "proxyTestFailed": "프록시 테스트 실패: {{error}}", "connectionPath": "연결 경로", - "executeSnippetOnConnect": "터미널이 연결될 때 코드 조각을 실행합니다.", + "executeSnippetOnConnect": "터미널 연결 시 스니펫 실행", "autoMosh": "자동 MOSH", "autoMoshDesc": "연결 시 MOSH 명령을 자동으로 실행합니다.", "moshCommand": "MOSH 명령", "moshCommandDesc": "실행할 MOSH 명령어", - "autoTmux": "Auto-tmux", - "autoTmuxDesc": "Automatically attach to an existing (or start a new) tmux session for persistent sessions and cross-device continuity", + "autoTmux": "자동 tmux", + "autoTmuxDesc": "영구 세션과 여러 장치 간 연속성을 위해 기존 tmux 세션에 자동으로 연결하거나 새 세션을 시작합니다.", "environmentVariables": "환경 변수", "environmentVariablesDesc": "터미널 세션에 대한 사용자 지정 환경 변수를 설정합니다.", "variableName": "변수 이름", "variableValue": "값", "addVariable": "변수 추가", "docker": "도커", - "openDocker": "오픈 도커", + "openDocker": "Docker 열기", "copyFullScreenUrl": "전체 화면 URL 복사", "fullScreenUrlCopied": "전체 화면 URL이 클립보드에 복사되었습니다.", "failedToCopyUrl": "URL을 클립보드에 복사하는 데 실패했습니다.", @@ -1310,18 +1332,18 @@ "copyDockerUrl": "Docker URL 복사", "copyRemoteDesktopUrl": "원격 데스크톱 URL 복사", "fullScreenUrlTooltip": "이 앱을 전체 화면 모드로 열려면 URL을 복사하세요.", - "notEnabled": "이 호스트에서는 Docker가 활성화되어 있지 않습니다. Docker 기능을 사용하려면 호스트 설정에서 Docker를 활성화하십시오.", + "notEnabled": "이 호스트에서는 Docker가 활성화되어 있지 않습니다. Docker 기능을 사용하려면 호스트 설정에서 Docker를 활성화하세요.", "validating": "Docker 유효성 검사 중...", "error": "오류", "errorCode": "오류 코드: {{code}}", "version": "Docker v{{version}}", - "current": "현재의", + "current": "현재", "used_limit": "사용량/한도", "percentage": "백분율", "input": "입력", - "output": "산출", - "read": "읽다", - "write": "쓰다", + "output": "출력", + "read": "읽기", + "write": "쓰기", "pids": "PIDs", "id": "ID", "state": "상태", @@ -1336,13 +1358,13 @@ "disconnectedFromContainer": "컨테이너 콘솔 연결이 끊어졌습니다.", "containerNotRunning": "컨테이너가 실행 중이 아닙니다.", "startContainerToAccess": "콘솔에 접근하려면 컨테이너를 시작하세요.", - "selectShell": "쉘을 선택하세요", + "selectShell": "셸 선택", "bash": "세게 때리다", - "sh": "쉿", - "ash": "금연 건강 증진 협회", + "sh": "sh", + "ash": "ash", "connecting": "연결 중...", - "connect": "연결하다", - "disconnect": "연결을 끊으세요", + "connect": "연결", + "disconnect": "연결 끊기", "notConnected": "연결되지 않음", "clickToConnect": "연결을 클릭하여 대화형 셸을 시작하세요.", "connectingTo": "{{containerName}}에 연결 중...", @@ -1358,29 +1380,29 @@ "noContainersMatchFiltersHint": "검색 또는 필터 설정을 조정해 보세요.", "containerStarted": "컨테이너 {{name}} 시작됨", "failedToStartContainer": "컨테이너 시작 실패: {{error}}", - "containerStopped": "컨테이너 {{name}} 가 중지되었습니다.", - "failedToStopContainer": "컨테이너 {{error}}를 중지하는 데 실패했습니다.", - "containerRestarted": "컨테이너 {{name}} 가 재시작되었습니다.", + "containerStopped": "{{name}} 컨테이너가 중지되었습니다.", + "failedToStopContainer": "컨테이너 중지 실패: {{error}}", + "containerRestarted": "{{name}} 컨테이너가 재시작되었습니다.", "failedToRestartContainer": "컨테이너 재시작 실패: {{error}}", - "containerUnpaused": "컨테이너 {{name}} 일시 중지 해제됨", - "containerPaused": "컨테이너 {{name}} 일시 중지됨", + "containerUnpaused": "{{name}} 컨테이너의 일시 중지가 해제되었습니다.", + "containerPaused": "{{name}} 컨테이너가 일시 중지되었습니다.", "failedToTogglePauseContainer": "{{action}} 컨테이너에 실패했습니다: {{error}}", - "containerRemoved": "컨테이너 {{name}} 가 제거되었습니다.", - "failedToRemoveContainer": "컨테이너 {{error}}를 제거하는 데 실패했습니다.", - "image": "영상:", + "containerRemoved": "{{name}} 컨테이너가 제거되었습니다.", + "failedToRemoveContainer": "컨테이너 제거 실패: {{error}}", + "image": "이미지:", "idLabel": "ID:", - "ports": "항구:", + "ports": "포트:", "noPorts": "없음", "created": "생성일:", "start": "시작", - "stop": "멈추다", + "stop": "중지", "unpause": "일시 정지 해제", - "pause": "정지시키다", + "pause": "일시 정지", "restart": "재시작", - "removeContainer": "컨테이너를 제거하세요", + "removeContainer": "컨테이너 제거", "confirmRemoveContainer": "컨테이너 \"{{name}}\"를 정말로 제거하시겠습니까?", "runningContainerWarning": "경고: 이 컨테이너는 현재 실행 중이며 강제로 제거될 예정입니다.", - "removing": "풀이:", + "removing": "제거 중:", "containerNotFound": "컨테이너를 찾을 수 없습니다", "backToList": "목록으로 돌아가기", "logs": "로그", @@ -1398,14 +1420,14 @@ "autoRefresh": "자동 새로 고침", "filterLogsPlaceholder": "로그 필터링...", "noLogsAvailable": "로그 파일이 없습니다.", - "selectMode": "선택하다", + "selectMode": "선택", "exitSelectMode": "취소", "selectedCount": "{{count}} 선택됨", "bulkMonitoring": "모니터링", "bulkFeatures": "특징", "bulkMoveFolder": "폴더로 이동", "bulkPin": "핀", - "bulkUnpin": "핀을 해제하세요", + "bulkUnpin": "고정 해제", "enableAllFeatures": "모든 기능 활성화", "disableAllFeatures": "모든 기능 비활성화", "enableStatusCheck": "상태 확인 활성화", @@ -1420,9 +1442,9 @@ "bulkDisableFileManager": "파일 관리자 비활성화", "bulkEnableDocker": "Docker 활성화", "bulkDisableDocker": "Docker 비활성화", - "bulkUpdateSuccess": "{{count}} 호스트가 성공적으로 업데이트되었습니다.", + "bulkUpdateSuccess": "호스트 {{count}}개가 업데이트되었습니다.", "bulkUpdateFailed": "일괄 업데이트 실패", - "selectAll": "모두 선택하세요", + "selectAll": "모두 선택", "deselectAll": "모두 선택 해제", "useGlobalStatusDefault": "전역 기본값(상태) 사용", "useGlobalMetricsDefault": "전역 기본값(메트릭) 사용", @@ -1434,10 +1456,10 @@ "displaySettings": "디스플레이 설정", "colorDepth": "색심도", "width": "너비", - "height": "키", + "height": "높이", "dpi": "DPI", "resizeMethod": "크기 조정 방법", - "forceLossless": "힘 손실 없음", + "forceLossless": "무손실 강제 적용", "audioSettings": "오디오 설정", "disableAudio": "오디오 비활성화", "enableAudioInput": "오디오 입력 활성화", @@ -1456,7 +1478,7 @@ "enablePrinting": "인쇄 활성화", "enableDrive": "드라이브 리디렉션 활성화", "driveName": "드라이브 이름", - "drivePath": "차량 통행로", + "drivePath": "드라이브 경로", "createDrivePath": "드라이브 경로 생성", "disableDownload": "다운로드 비활성화", "disableUpload": "업로드 비활성화", @@ -1491,7 +1513,7 @@ "createRecordingPath": "녹화 경로 생성", "excludeOutput": "출력 제외", "excludeMouse": "마우스 제외", - "includeKeys": "키를 포함하세요", + "includeKeys": "키 포함", "sendWolPacket": "WoL 패킷을 전송합니다", "wolMacAddr": "MAC 주소", "wolBroadcastAddr": "방송 주소", @@ -1519,26 +1541,26 @@ "terminal": { "title": "터미널", "connect": "호스트에 연결", - "disconnect": "연결을 끊으세요", - "clear": "지우기(Clear)", + "disconnect": "연결 끊기", + "clear": "지우기", "copy": "복사", - "paste": "반죽", - "find": "찾다", + "paste": "붙여넣기", + "find": "찾기", "fullscreen": "전체 화면", "splitHorizontal": "가로 분할", "splitVertical": "세로 분할", "closePanel": "패널 닫기", "reconnect": "다시 연결", - "sessionEnded": "세션이 종료되었습니다", - "connectionLost": "Connection lost", + "sessionEnded": "Session ended.", + "connectionLost": "연결이 끊어졌습니다.", "error": "오류: {{message}}", "disconnected": "연결이 끊어졌습니다", "connectionClosed": "연결이 종료되었습니다", "connectionError": "연결 오류: {{message}}", "connected": "연결됨", "clipboardWriteFailed": "클립보드에 복사하는 데 실패했습니다. 페이지가 HTTPS 또는 localhost를 통해 제공되는지 확인하세요.", - "clipboardReadFailed": "클립보드에서 읽는 데 실패했습니다. 클립보드 권한이 부여되었는지 확인하십시오.", - "clipboardHttpWarning": "붙여넣기에는 HTTPS가 필요합니다. Ctrl+Shift+V를 사용하거나 Termix를 HTTPS를 통해 제공하십시오.", + "clipboardReadFailed": "클립보드에서 읽는 데 실패했습니다. 클립보드 권한이 부여되었는지 확인하세요.", + "clipboardHttpWarning": "붙여넣기에는 HTTPS가 필요합니다. Ctrl+Shift+V를 사용하거나 Termix를 HTTPS로 제공하세요.", "sshConnected": "SSH 연결이 설정되었습니다.", "authError": "인증 실패: {{message}}", "unknownError": "알 수 없는 오류가 발생했습니다.", @@ -1546,39 +1568,39 @@ "websocketError": "웹소켓 연결 오류", "connecting": "연결 중...", "reconnecting": "다시 연결 중... ({{attempt}}/{{max}})", - "reconnected": "성공적으로 다시 연결되었습니다.", - "tmuxSessionCreated": "tmux session created: {{name}}", - "tmuxSessionAttached": "tmux session attached: {{name}}", - "tmuxUnavailable": "tmux is not installed on the remote host, falling back to standard shell", - "tmuxSessionPickerTitle": "tmux Sessions", - "tmuxSessionPickerDesc": "Existing tmux sessions found on this host. Select one to reattach or create a new session.", - "tmuxWindows": "Windows", - "tmuxWindowCount": "{{count}} window", - "tmuxWindowCount_other": "{{count}} windows", - "tmuxAttached": "Attached clients", - "tmuxAttachedCount": "{{count}} attached", - "tmuxLastActivity": "Last activity", - "tmuxTimeJustNow": "just now", - "tmuxTimeMinutes": "{{count}}m ago", - "tmuxTimeHours": "{{count}}h ago", - "tmuxTimeDays": "{{count}}d ago", - "tmuxCreateNew": "Start new session", - "tmuxCopyHint": "Adjust selection and press Enter to copy to clipboard", + "reconnected": "다시 연결되었습니다.", + "tmuxSessionCreated": "tmux 세션 생성됨: {{name}}", + "tmuxSessionAttached": "tmux 세션 연결됨: {{name}}", + "tmuxUnavailable": "원격 호스트에 tmux가 설치되어 있지 않아 일반 셸로 대체합니다.", + "tmuxSessionPickerTitle": "tmux 세션", + "tmuxSessionPickerDesc": "이 호스트에서 기존 tmux 세션을 찾았습니다. 다시 연결할 세션을 선택하거나 새 세션을 생성하세요.", + "tmuxWindows": "창", + "tmuxWindowCount": "{{count}}개 창", + "tmuxWindowCount_other": "{{count}}개 창", + "tmuxAttached": "연결된 클라이언트", + "tmuxAttachedCount": "{{count}}개 연결됨", + "tmuxLastActivity": "마지막 활동", + "tmuxTimeJustNow": "방금 전", + "tmuxTimeMinutes": "{{count}}분 전", + "tmuxTimeHours": "{{count}}시간 전", + "tmuxTimeDays": "{{count}}일 전", + "tmuxCreateNew": "새 세션 시작", + "tmuxCopyHint": "선택 영역을 조정한 후 Enter를 눌러 클립보드에 복사하세요.", "maxReconnectAttemptsReached": "최대 재연결 시도 횟수에 도달했습니다.", - "closeTab": "Close", + "closeTab": "닫기", "connectionTimeout": "연결 시간 초과", "terminalTitle": "터미널 - {{host}}", "terminalWithPath": "터미널 - {{host}}:{{path}}", - "runTitle": "{{command}} - {{host}}실행 중", + "runTitle": "{{command}} - {{host}} 실행 중", "totpRequired": "2단계 인증이 필요합니다", "totpCodeLabel": "인증 코드", "totpPlaceholder": "000000", - "totpVerify": "확인하다", + "totpVerify": "확인", "warpgateAuthRequired": "워프게이트 인증 필요", "warpgateSecurityKey": "보안 키", "warpgateAuthUrl": "인증 URL", "warpgateOpenBrowser": "브라우저에서 열기", - "warpgateContinue": "인증이 완료되었습니다", + "warpgateContinue": "인증 완료", "warpgateTimeout": "워프게이트 인증 시간 초과입니다. 다시 연결해 주세요.", "opksshAuthRequired": "OPKSSH 인증이 필요합니다", "opksshAuthDescription": "계속하려면 브라우저에서 인증을 완료하세요. 이 세션은 24시간 동안 유효합니다.", @@ -1588,13 +1610,13 @@ "opksshAuthenticating": "인증 처리 중...", "opksshTimeout": "인증 시간이 초과되었습니다. 다시 시도해 주세요.", "opksshAuthFailed": "인증에 실패했습니다. 자격 증명을 확인하고 다시 시도해 주세요.", - "opksshConfigMissing": "OPKSSH 구성 파일을 찾을 수 없습니다. OIDC 공급자 설정이 포함된 ~/.opk/config.yml 파일을 생성하십시오. 자세한 내용은 다음 문서를 참조하십시오. https://github.com/openpubkey/opkssh#configuration", - "opksshSignInWith": "Sign in with {{provider}}", - "sudoPasswordPopupTitle": "비밀번호를 입력하시겠습니까?", - "sudoPasswordPopupHint": "Enter 키를 눌러 삽입하고, Esc 키를 눌러 닫습니다.", - "sudoPasswordPopupConfirm": "끼워 넣다", - "sudoPasswordPopupDismiss": "해고하다", - "websocketAbnormalClose": "연결이 예기치 않게 종료되었습니다. 이는 리버스 프록시 또는 SSL 구성 문제 때문일 수 있습니다. 서버 로그를 확인하십시오.", + "opksshConfigMissing": "OPKSSH 구성 파일을 찾을 수 없습니다. OIDC 공급자 설정이 포함된 ~/.opk/config.yml 파일을 생성하세요. 자세한 내용은 다음 문서를 참조하세요. https://github.com/openpubkey/opkssh#configuration", + "opksshSignInWith": "{{provider}}로 로그인", + "sudoPasswordPopupTitle": "비밀번호를 입력할까요?", + "sudoPasswordPopupHint": "Enter 키를 누르면 입력하고, Esc 키를 누르면 닫습니다.", + "sudoPasswordPopupConfirm": "입력", + "sudoPasswordPopupDismiss": "닫기", + "websocketAbnormalClose": "연결이 예기치 않게 종료되었습니다. 리버스 프록시 또는 SSL 구성 문제 때문일 수 있습니다. 서버 로그를 확인하세요.", "totpInvalid": "잘못된 코드입니다. 다시 시도해 주세요.", "authMethodFallback": "{{method}} 인증에 실패했습니다. 다른 방법을 시도합니다...", "authenticationRequired": "인증 필요", @@ -1605,46 +1627,46 @@ "connectionLogConnecting": "호스트에 연결 중...", "connectionLogCopied": "연결 로그가 클립보드에 복사되었습니다.", "connectionLogCopyFailed": "로그를 클립보드에 복사하는 데 실패했습니다.", - "allAuthMethodsFailed": "모든 인증 방법이 실패했습니다. 자격 증명을 확인하십시오.", + "allAuthMethodsFailed": "모든 인증 방법이 실패했습니다. 자격 증명을 확인하세요.", "methodNotSupported": "서버에서 {{method}} 인증을 지원하지 않습니다. 사용 가능한 방법은 {{available}}입니다.", "retryWithMethod": "{{method}}로 다시 시도하세요", "automaticFallback": "{{method}} 인증을 자동으로 시도합니다...", "totpTimeout": "TOTP 인증 시간이 초과되었습니다. 다시 연결해 주세요.", "passwordTimeout": "비밀번호 인증 시간이 초과되었습니다. 다시 연결해 주세요.", - "connectionRejected": "서버에서 연결이 거부되었습니다. 인증 및 네트워크 구성을 확인하십시오.", + "connectionRejected": "서버에서 연결이 거부되었습니다. 인증 및 네트워크 구성을 확인하세요.", "hostKeyRejected": "SSH 호스트 키 인증이 거부되었습니다. 연결이 취소되었습니다.", "sessionTakenOver": "세션이 다른 탭에서 열려 있습니다. 다시 연결 중...", "sessionAttachTimeout": "세션 연결 시간이 초과되었습니다. 새 연결을 생성합니다...", - "openFileManagerHere": "Open File Manager Here" + "openFileManagerHere": "여기에서 파일 관리자 열기" }, "fileManager": { "title": "파일 관리자", "file": "파일", "folder": "폴더", - "connectToSsh": "파일 작업을 사용하려면 SSH에 연결하십시오.", + "connectToSsh": "파일 작업을 사용하려면 SSH에 연결하세요.", "uploadFile": "파일 업로드", "downloadFile": "다운로드", "extractArchive": "압축 해제", - "extractingArchive": "{{name}}추출 중...", + "extractingArchive": "{{name}} 추출 중...", "archiveExtractedSuccessfully": "{{name}} 추출 성공", "extractFailed": "추출 실패", "compressFile": "파일 압축", "compressFiles": "파일 압축", - "compressFilesDesc": "{{count}} 항목을 아카이브로 압축합니다.", + "compressFilesDesc": "{{count}}개 항목을 아카이브로 압축합니다.", "archiveName": "아카이브 이름", "enterArchiveName": "아카이브 이름을 입력하세요...", "compressionFormat": "압축 형식", "selectedFiles": "선택된 파일", - "andMoreFiles": "그리고 {{count}} 더 보기...", - "compress": "압박 붕대", - "compressingFiles": "{{count}} 항목을 {{name}}로 압축 중...", - "filesCompressedSuccessfully": "{{name}} 이 성공적으로 생성되었습니다", + "andMoreFiles": "외 {{count}}개 더...", + "compress": "압축", + "compressingFiles": "{{count}}개 항목을 {{name}}(으)로 압축 중...", + "filesCompressedSuccessfully": "{{name}}이(가) 생성되었습니다.", "compressFailed": "압축 실패", "edit": "편집", - "preview": "시사", - "previous": "이전의", + "preview": "미리보기", + "previous": "이전", "next": "다음", - "pageXOfY": "{{total}}의 페이지 {{current}}", + "pageXOfY": "{{current}} / {{total}} 페이지", "zoomOut": "축소하기", "zoomIn": "확대", "newFile": "새 파일", @@ -1660,13 +1682,13 @@ "chooseFile": "파일을 선택하세요", "uploading": "업로드 중...", "downloading": "다운로드 중...", - "uploadingFile": "{{name}}업로드 중...", - "uploadingLargeFile": "대용량 파일 {{name}} ({{size}} ) 업로드 중...", - "downloadingFile": "{{name}}다운로드 중...", - "creatingFile": "{{name}}생성 중...", - "creatingFolder": "{{name}}생성 중...", - "deletingItem": "{{type}} {{name}}삭제 중...", - "renamingItem": "{{type}} {{oldName}} 를 {{newName}}로 이름 변경 중...", + "uploadingFile": "{{name}} 업로드 중...", + "uploadingLargeFile": "대용량 파일 {{name}}({{size}}) 업로드 중...", + "downloadingFile": "{{name}} 다운로드 중...", + "creatingFile": "{{name}} 생성 중...", + "creatingFolder": "{{name}} 생성 중...", + "deletingItem": "{{type}} {{name}} 삭제 중...", + "renamingItem": "{{type}} {{oldName}}을(를) {{newName}}로 이름 변경 중...", "createNewFile": "새 파일 만들기", "fileName": "파일 이름", "creating": "생성 중...", @@ -1676,73 +1698,73 @@ "createFolder": "폴더 생성", "warningCannotUndo": "경고: 이 작업은 되돌릴 수 없습니다.", "itemPath": "항목 경로", - "thisIsDirectory": "이것은 디렉토리입니다(재귀적으로 삭제됩니다).", + "thisIsDirectory": "이 항목은 디렉터리입니다(재귀적으로 삭제됩니다).", "deleting": "삭제 중...", "currentPathLabel": "현재 경로", - "newName": "새로운 이름", - "thisIsDirectoryRename": "이것은 디렉토리입니다.", + "newName": "새 이름", + "thisIsDirectoryRename": "이 항목은 디렉터리입니다.", "renaming": "이름 변경 중...", - "fileUploadedSuccessfully": "파일 \"{{name}}\"이 성공적으로 업로드되었습니다.", + "fileUploadedSuccessfully": "파일 \"{{name}}\"이 업로드되었습니다.", "failedToUploadFile": "파일 업로드에 실패했습니다", - "fileDownloadedSuccessfully": "파일 \"{{name}}\"이 성공적으로 다운로드되었습니다.", + "fileDownloadedSuccessfully": "파일 \"{{name}}\"이 다운로드되었습니다.", "failedToDownloadFile": "파일 다운로드에 실패했습니다", "noFileContent": "파일 내용이 수신되지 않았습니다.", "filePath": "파일 경로", - "fileCreatedSuccessfully": "파일 \"{{name}}\"이 성공적으로 생성되었습니다.", + "fileCreatedSuccessfully": "파일 \"{{name}}\"이 생성되었습니다.", "failedToCreateFile": "파일 생성에 실패했습니다.", - "folderCreatedSuccessfully": "폴더 \"{{name}}\"이 성공적으로 생성되었습니다.", + "folderCreatedSuccessfully": "폴더 \"{{name}}\"이 생성되었습니다.", "failedToCreateFolder": "폴더 생성에 실패했습니다", "failedToCreateItem": "아이템 생성에 실패했습니다", - "operationFailed": "{{operation}} 작업이 {{name}}에 대해 실패했습니다 : {{error}}", + "operationFailed": "{{name}}의 {{operation}} 작업에 실패했습니다: {{error}}", "failedToResolveSymlink": "심볼릭 링크를 해결할 수 없습니다.", - "itemDeletedSuccessfully": "{{type}} 성공적으로 삭제되었습니다", - "itemsDeletedSuccessfully": "{{count}} 항목이 성공적으로 삭제되었습니다", + "itemDeletedSuccessfully": "{{type}}이(가) 삭제되었습니다.", + "itemsDeletedSuccessfully": "항목 {{count}}개가 삭제되었습니다.", "failedToDeleteItems": "항목 삭제에 실패했습니다", - "sudoPasswordRequired": "관리자 암호가 필요합니다", - "enterSudoPassword": "이 작업을 계속하려면 sudo 암호를 입력하십시오.", + "sudoPasswordRequired": "관리자 비밀번호가 필요합니다", + "enterSudoPassword": "이 작업을 계속하려면 sudo 비밀번호를 입력하세요.", "sudoPassword": "Sudo 비밀번호", "sudoOperationFailed": "sudo 작업이 실패했습니다.", "sudoAuthFailed": "Sudo 인증에 실패했습니다.", "deleteOperation": "파일/폴더 삭제", "dragFilesToUpload": "파일을 여기에 드롭하여 업로드하세요", "emptyFolder": "이 폴더는 비어 있습니다", - "itemCount": "{{count}} 항목", - "selectedCount": "{{count}} 선택됨", + "itemCount": "{{count}}개 항목", + "selectedCount": "{{count}}개 선택됨", "searchFiles": "파일을 검색하세요...", "upload": "업로드", - "selectHostToStart": "파일 관리를 시작할 호스트를 선택하십시오.", + "selectHostToStart": "파일 관리를 시작할 호스트를 선택하세요.", "failedToConnect": "SSH 연결에 실패했습니다.", - "failedToLoadDirectory": "디렉토리를 불러오는 데 실패했습니다.", + "failedToLoadDirectory": "디렉터리를 불러오는 데 실패했습니다.", "noSSHConnection": "SSH 연결을 사용할 수 없습니다.", "enterFolderName": "폴더 이름을 입력하세요:", "enterFileName": "파일 이름을 입력하세요:", "copy": "복사", - "cut": "자르다", - "paste": "반죽", - "copyPath": "복사 경로", - "copyPaths": "복사 경로", + "cut": "잘라내기", + "paste": "붙여넣기", + "copyPath": "경로 복사", + "copyPaths": "경로 복사", "delete": "삭제", "properties": "속성", "refresh": "새로고침", - "downloadFiles": "브라우저로 {{count}} 파일을 다운로드하세요", - "copyFiles": "{{count}} 항목을 복사하세요", - "cutFiles": "{{count}} 항목을 잘라내세요", - "deleteFiles": "{{count}} 항목을 삭제합니다.", - "filesCopiedToClipboard": "{{count}} 항목이 클립보드에 복사되었습니다", - "filesCutToClipboard": "{{count}} 항목을 클립보드에 복사합니다", + "downloadFiles": "{{count}}개 파일을 브라우저로 다운로드", + "copyFiles": "{{count}}개 항목 복사", + "cutFiles": "{{count}}개 항목 잘라내기", + "deleteFiles": "{{count}}개 항목 삭제", + "filesCopiedToClipboard": "{{count}}개 항목이 클립보드에 복사되었습니다.", + "filesCutToClipboard": "{{count}}개 항목을 잘라내어 클립보드에 저장했습니다.", "pathCopiedToClipboard": "경로가 클립보드에 복사되었습니다", - "pathsCopiedToClipboard": "{{count}} 경로가 클립보드에 복사되었습니다", + "pathsCopiedToClipboard": "경로 {{count}}개가 클립보드에 복사되었습니다.", "failedToCopyPath": "클립보드에 경로를 복사하는 데 실패했습니다.", - "movedItems": "{{count}} 항목을 이동했습니다.", + "movedItems": "{{count}}개 항목을 이동했습니다.", "failedToDeleteItem": "항목 삭제에 실패했습니다", - "itemRenamedSuccessfully": "{{type}} 이름이 성공적으로 변경되었습니다", + "itemRenamedSuccessfully": "{{type}} 이름이 변경되었습니다.", "failedToRenameItem": "항목 이름 변경에 실패했습니다", "download": "다운로드", "permissions": "권한", "size": "크기", "modified": "수정됨", - "path": "길", - "confirmDelete": "{{name}}를 정말로 삭제하시겠습니까?", + "path": "경로", + "confirmDelete": "{{name}}을(를) 정말로 삭제하시겠습니까?", "uploadSuccess": "파일 업로드 완료", "uploadFailed": "파일 업로드 실패", "downloadSuccess": "파일 다운로드 완료", @@ -1752,23 +1774,23 @@ "internalServerError": "내부 서버 오류가 발생했습니다.", "serverError": "서버 오류", "error": "오류", - "requestFailed": "요청이 상태 코드와 함께 실패했습니다.", - "unknownFileError": "알려지지 않은", + "requestFailed": "상태 코드로 요청이 실패했습니다.", + "unknownFileError": "알 수 없음", "cannotReadFile": "파일을 읽을 수 없습니다", "noSshSessionId": "SSH 세션 ID를 사용할 수 없습니다.", "noFilePath": "파일 경로를 사용할 수 없습니다.", - "noCurrentHost": "현재 사용 가능한 호스트가 없습니다.", - "fileSavedSuccessfully": "파일이 성공적으로 저장되었습니다.", - "saveTimeout": "저장 작업 시간이 초과되었습니다. 파일은 성공적으로 저장되었을 수 있지만, 작업 완료에 너무 오랜 시간이 걸렸습니다. Docker 로그를 확인하여 확인하십시오.", + "noCurrentHost": "현재 선택된 호스트가 없습니다.", + "fileSavedSuccessfully": "파일이 저장되었습니다.", + "saveTimeout": "저장 작업 시간이 초과되었습니다. 파일은 성공적으로 저장되었을 수 있지만 작업 완료에 너무 오래 걸렸습니다. Docker 로그에서 확인하세요.", "failedToSaveFile": "파일 저장에 실패했습니다", - "deletedSuccessfully": "성공적으로 삭제되었습니다", + "deletedSuccessfully": "삭제되었습니다", "connectToServer": "서버에 연결", "selectServerToEdit": "사이드바에서 서버를 선택하여 파일 편집을 시작하세요.", "fileOperations": "파일 작업", - "confirmDeleteMessage": "{{name}}를 정말로 삭제하시겠습니까?", + "confirmDeleteMessage": "{{name}}을(를) 정말로 삭제하시겠습니까?", "confirmDeleteSingleItem": "\"{{name}}\"을 영구적으로 삭제하시겠습니까?", - "confirmDeleteMultipleItems": "{{count}} 항목을 영구적으로 삭제하시겠습니까?", - "confirmDeleteMultipleItemsWithFolders": "{{count}} 항목을 영구적으로 삭제하시겠습니까? 폴더와 그 내용물이 모두 포함됩니다.", + "confirmDeleteMultipleItems": "{{count}}개 항목을 영구적으로 삭제하시겠습니까?", + "confirmDeleteMultipleItemsWithFolders": "{{count}}개 항목을 영구적으로 삭제하시겠습니까? 폴더와 그 내용이 모두 포함됩니다.", "confirmDeleteFolder": "폴더 \"{{name}}\"와 그 안의 모든 내용을 영구적으로 삭제하시겠습니까?", "deleteDirectoryWarning": "이렇게 하면 폴더와 그 안에 있는 모든 내용이 삭제됩니다.", "actionCannotBeUndone": "이 작업은 되돌릴 수 없습니다.", @@ -1779,7 +1801,7 @@ "noRecentFiles": "최근 파일이 없습니다.", "noPinnedFiles": "고정된 파일이 없습니다.", "enterFolderPath": "폴더 경로를 입력하세요", - "noShortcuts": "지름길은 없다.", + "noShortcuts": "바로가기가 없습니다.", "searchFilesAndFolders": "파일 및 폴더 검색...", "noFilesOrFoldersFound": "파일이나 폴더를 찾을 수 없습니다.", "failedToConnectSSH": "SSH 연결에 실패했습니다.", @@ -1791,8 +1813,8 @@ "saveOperationTimeout": "저장 작업 시간이 초과되었습니다.", "cannotSaveFile": "파일을 저장할 수 없습니다", "dragSystemFilesToUpload": "시스템 파일을 여기에 드래그하여 업로드하세요.", - "dragFilesToWindowToDownload": "파일을 창 밖으로 드래그하여 다운로드하세요.", - "openTerminalHere": "터미널을 여기에서 여세요", + "dragFilesToWindowToDownload": "다운로드하려면 파일을 창 밖으로 드래그하세요.", + "openTerminalHere": "여기에서 터미널 열기", "run": "실행", "saveToSystem": "다른 이름으로 저장...", "selectLocationToSave": "저장할 위치를 선택하세요", @@ -1804,12 +1826,12 @@ "noHostSelected": "호스트가 선택되지 않았습니다.", "starred": "별표", "shortcuts": "바로가기", - "directories": "디렉토리", - "removedFromRecentFiles": "최근 파일에서 \"{{name}}\"를 제거했습니다.", + "directories": "디렉터리", + "removedFromRecentFiles": "최근 파일에서 \"{{name}}\"을(를) 제거했습니다.", "removeFailed": "제거 실패", - "unpinnedSuccessfully": "\"{{name}}\" 고정 해제 성공", + "unpinnedSuccessfully": "\"{{name}}\" 고정이 해제되었습니다.", "unpinFailed": "핀 해제 실패", - "removedShortcut": "바로가기 \"{{name}}\"를 제거했습니다.", + "removedShortcut": "바로가기 \"{{name}}\"을(를) 제거했습니다.", "removeShortcutFailed": "바로가기 제거 실패", "clearedAllRecentFiles": "최근 파일을 모두 삭제했습니다.", "clearFailed": "지우기 실패", @@ -1817,16 +1839,16 @@ "clearAllRecentFiles": "최근 파일을 모두 삭제합니다.", "unpinFile": "파일 고정 해제", "removeShortcut": "바로가기 제거", - "saveFilesToSystem": "{{count}} 파일을 다음과 같이 저장하세요...", - "pinFile": "핀 파일", + "saveFilesToSystem": "{{count}}개 파일을 다른 이름으로 저장...", + "pinFile": "파일 고정", "addToShortcuts": "바로가기에 추가", "downloadToDefaultLocation": "기본 위치로 다운로드", "pasteFailed": "붙여넣기 실패", "noUndoableActions": "되돌릴 수 없는 작업", - "undoCopySuccess": "실행 취소된 복사 작업: {{count}} 개의 복사된 파일이 삭제되었습니다.", + "undoCopySuccess": "복사 작업 실행 취소 완료: 복사된 파일 {{count}}개를 삭제했습니다.", "undoCopyFailedDelete": "실행 취소 실패: 복사된 파일을 삭제할 수 없습니다.", "undoCopyFailedNoInfo": "실행 취소 실패: 복사된 파일 정보를 찾을 수 없습니다.", - "undoMoveSuccess": "이동 취소 작업: {{count}} 파일을 원래 위치로 되돌렸습니다.", + "undoMoveSuccess": "이동 작업 실행 취소 완료: 파일 {{count}}개를 원래 위치로 되돌렸습니다.", "undoMoveFailedMove": "실행 취소 실패: 파일을 되돌릴 수 없습니다.", "undoMoveFailedNoInfo": "실행 취소 실패: 이동된 파일 정보를 찾을 수 없습니다.", "undoDeleteNotSupported": "삭제 작업은 되돌릴 수 없습니다. 파일이 서버에서 영구적으로 삭제되었습니다.", @@ -1835,31 +1857,31 @@ "unknownError": "알 수 없는 오류", "enterPath": "경로를 입력하세요...", "editPath": "경로 편집", - "confirm": "확인하다", + "confirm": "확인", "cancel": "취소", - "find": "찾다...", - "replaceWith": "다음으로 대체하세요...", - "replace": "바꾸다", - "replaceAll": "모두 교체", - "downloadInstead": "대신 다운로드하세요", + "find": "찾기...", + "replaceWith": "바꿀 내용...", + "replace": "바꾸기", + "replaceAll": "모두 바꾸기", + "downloadInstead": "대신 다운로드", "keyboardShortcuts": "키보드 단축키", "searchAndReplace": "검색 및 바꾸기", "editing": "편집", - "navigation": "항해", - "code": "암호", - "search": "찾다", + "navigation": "탐색", + "code": "코드", + "search": "검색", "findNext": "다음 찾기", "findPrevious": "이전 찾기", - "save": "구하다", + "save": "저장", "selectAll": "모두 선택", - "undo": "끄르다", - "redo": "다시 하다", - "goToLine": "라인으로 이동", - "moveLineUp": "이동 라인", + "undo": "실행 취소", + "redo": "다시 실행", + "goToLine": "줄로 이동", + "moveLineUp": "줄을 위로 이동", "moveLineDown": "줄을 아래로 이동", - "toggleComment": "댓글 토글", - "indent": "톱니 모양", - "outdent": "외치수", + "toggleComment": "주석 토글", + "indent": "들여쓰기", + "outdent": "내어쓰기", "autoComplete": "자동 완성", "imageLoadError": "이미지를 불러오는 데 실패했습니다.", "rotate": "회전", @@ -1868,48 +1890,48 @@ "unknownSize": "크기 미상", "fileIsEmpty": "파일이 비어 있습니다", "largeFileWarning": "대용량 파일 경고", - "largeFileWarningDesc": "이 파일의 크기는 {{size}} 이므로 텍스트 모드로 열면 성능 문제가 발생할 수 있습니다.", + "largeFileWarningDesc": "이 파일의 크기는 {{size}}이므로 텍스트 모드로 열면 성능 문제가 발생할 수 있습니다.", "fileNotFoundAndRemoved": "파일 \"{{name}}\"을(를) 찾을 수 없어 최근/고정된 파일 목록에서 제거되었습니다.", - "failedToLoadFile": "파일 로드 실패: {{error}}", + "failedToLoadFile": "파일을 불러오지 못했습니다: {{error}}", "serverErrorOccurred": "서버 오류가 발생했습니다. 나중에 다시 시도해 주세요.", "autoSaveFailed": "자동 저장 실패", - "fileAutoSaved": "파일이 자동 저장되었습니다", - "moveFileFailed": "{{name}}를 이동하는 데 실패했습니다.", + "fileAutoSaved": "파일이 자동으로 저장되었습니다.", + "moveFileFailed": "{{name}}을(를) 이동하는 데 실패했습니다.", "moveOperationFailed": "이동 작업이 실패했습니다.", "canOnlyCompareFiles": "두 파일만 비교할 수 있습니다.", "comparingFiles": "파일 비교: {{file1}} 및 {{file2}}", "dragFailed": "드래그 작업이 실패했습니다.", - "filePinnedSuccessfully": "파일 \"{{name}}\"이 성공적으로 고정되었습니다.", + "filePinnedSuccessfully": "파일 \"{{name}}\"이 고정되었습니다.", "pinFileFailed": "파일 고정 실패", - "fileUnpinnedSuccessfully": "파일 \"{{name}}\"이 성공적으로 고정 해제되었습니다.", + "fileUnpinnedSuccessfully": "파일 \"{{name}}\" 고정이 해제되었습니다.", "unpinFileFailed": "파일 고정 해제에 실패했습니다.", - "shortcutAddedSuccessfully": "폴더 바로가기 \"{{name}}\"가 성공적으로 추가되었습니다.", + "shortcutAddedSuccessfully": "폴더 바로가기 \"{{name}}\"가 추가되었습니다.", "addShortcutFailed": "바로가기 추가에 실패했습니다", - "operationCompletedSuccessfully": "{{operation}} {{count}} 항목이 성공적으로 완료되었습니다", - "operationCompleted": "{{operation}} {{count}} 항목", - "downloadFileSuccess": "파일 {{name}} 이 성공적으로 다운로드되었습니다.", + "operationCompletedSuccessfully": "{{operation}} 항목 {{count}}개 완료", + "operationCompleted": "{{operation}} {{count}}개 항목", + "downloadFileSuccess": "파일 {{name}}이 다운로드되었습니다.", "downloadFileFailed": "다운로드 실패", "moveTo": "{{name}}로 이동", - "diffCompareWith": "{{name}}와 차이점을 비교합니다.", - "dragOutsideToDownload": "다운로드하려면 창 바깥쪽으로 드래그하세요({{count}} 파일).", + "diffCompareWith": "{{name}}와(과) 차이점을 비교합니다.", + "dragOutsideToDownload": "다운로드하려면 창 바깥쪽으로 드래그하세요({{count}}개 파일).", "newFolderDefault": "새 폴더", "newFileDefault": "NewFile.txt", - "successfullyMovedItems": "{{count}} 항목을 {{target}}로 성공적으로 이동했습니다.", - "move": "이동하다", + "successfullyMovedItems": "항목 {{count}}개를 {{target}}(으)로 이동했습니다.", + "move": "이동", "searchInFile": "파일에서 검색(Ctrl+F)", "showKeyboardShortcuts": "키보드 단축키 표시", "startWritingMarkdown": "마크다운 콘텐츠 작성을 시작하세요...", - "loadingFileComparison": "파일 비교 로딩 중...", - "reload": "재장전", - "compare": "비교하다", + "loadingFileComparison": "파일 비교 불러오는 중...", + "reload": "다시 불러오기", + "compare": "비교", "sideBySide": "나란히", "inline": "인라인", "fileComparison": "파일 비교: {{file1}} vs {{file2}}", "fileTooLarge": "파일 크기가 너무 큽니다: {{error}}", - "sshConnectionFailed": "SSH 연결에 실패했습니다. {{name}} ({{ip}}:{{port}})에 대한 연결을 확인하십시오.", - "loadFileFailed": "파일 로드 실패: {{error}}", + "sshConnectionFailed": "SSH 연결에 실패했습니다. {{name}}({{ip}}:{{port}}) 연결을 확인하세요.", + "loadFileFailed": "파일을 불러오지 못했습니다: {{error}}", "connecting": "연결 중...", - "connectedSuccessfully": "성공적으로 연결되었습니다", + "connectedSuccessfully": "연결되었습니다", "totpVerificationFailed": "TOTP 인증 실패", "warpgateVerificationFailed": "Warpgate 인증 실패", "authenticationFailed": "인증 실패", @@ -1917,47 +1939,35 @@ "changePermissions": "권한 변경", "changePermissionsDesc": "파일 권한을 수정하세요", "currentPermissions": "현재 권한", - "newPermissions": "새로운 권한", + "newPermissions": "새 권한", "owner": "소유자", "group": "그룹", "others": "기타", - "read": "읽다", - "write": "쓰다", - "execute": "실행하다", - "permissionsChangedSuccessfully": "권한이 성공적으로 변경되었습니다.", + "read": "읽기", + "write": "쓰기", + "execute": "실행", + "permissionsChangedSuccessfully": "권한이 변경되었습니다.", "failedToChangePermissions": "권한 변경에 실패했습니다", "name": "이름", "sortByName": "이름", "sortByDate": "수정일", "sortBySize": "크기", - "ascending": "상승", - "descending": "하강" - }, - "tunnel": { - "log": { - "connecting": "터널 연결 구축 중...", - "sourceConnecting": "소스 호스트 {{host}}에 연결 중...", - "sourceConnected": "소스 호스트에 연결됨", - "endpointResolving": "엔드포인트 호스트 {{host}}확인 중...", - "endpointResolved": "엔드포인트 호스트가 확인되었습니다.", - "forwarding": "포트 포워딩 설정 중 {{localPort}} → {{remotePort}}...", - "connected": "터널 개통 성공", - "retrying": "연결에 실패했습니다. {{countdown}}초 후에 다시 시도합니다(시도 횟수: {{attempt}}/{{max}})...", - "retryExhausted": "최대 재시도 횟수에 도달했습니다.", - "error": "터널 연결 실패: {{error}}" - } + "ascending": "오름차순", + "descending": "내림차순" }, "tunnels": { "title": "SSH 터널", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "SSH 터널 없음", "createFirstTunnelMessage": "아직 SSH 터널을 생성하지 않았습니다. 시작하려면 호스트 관리자에서 터널 연결을 구성하세요.", "connected": "연결됨", "disconnected": "연결이 끊어졌습니다", "connecting": "연결 중...", "disconnecting": "연결을 해제하는 중...", - "unknownTunnelStatus": "알려지지 않은", - "statusUnknown": "알려지지 않은", - "unknown": "알려지지 않은", + "unknownTunnelStatus": "알 수 없음", + "statusUnknown": "알 수 없음", + "unknown": "알 수 없음", "error": "오류", "failed": "실패한", "retrying": "다시 시도 중", @@ -1965,35 +1975,108 @@ "waitingForRetry": "재시도 대기 중", "retryingConnection": "연결을 다시 시도합니다", "canceling": "취소 중...", - "connect": "연결하다", + "connect": "연결", "disconnect": "연결을 끊으세요", "cancel": "취소", "port": "포트", - "attempt": "{{max}}의 {{current}} 시도", - "nextRetryIn": "다음 재시도 후 {{seconds}} 초", - "checkDockerLogs": "오류 원인을 확인하려면 Docker 로그를 확인하고, 참여하세요.", + "localPort": "로컬 포트", + "remotePort": "원격 포트", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", + "attempt": "{{max}}회 중 {{current}}번째 시도", + "nextRetryIn": "{{seconds}}초 후 다시 시도", + "checkDockerLogs": "오류 원인을 확인하려면 Docker 로그를 확인하세요.", "orCreate": "또는 생성 ", "noTunnelConnections": "구성된 터널 연결이 없습니다.", "tunnelConnections": "터널 연결", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "터널 추가", "editTunnel": "터널 편집", "deleteTunnel": "터널 삭제", "tunnelName": "터널 이름", - "localPort": "현지 항구", "remoteHost": "원격 호스트", - "remotePort": "원격 포트", "autoStart": "자동 시작", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "상태", - "active": "활동적인", + "active": "활성", "inactive": "비활성화됨", "start": "시작", - "stop": "멈추다", + "stop": "중지", + "test": "Test", "restart": "재시작", "connectionType": "연결 유형", - "local": "현지의", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", + "local": "로컬", "remote": "원격", "dynamic": "동적", - "unknownConnectionStatus": "알려지지 않은", + "unknownConnectionStatus": "알 수 없음", "portMapping": "포트 {{sourcePort}} → {{endpointHost}}:{{endpointPort}}", "endpointHostNotFound": "엔드포인트 호스트를 찾을 수 없습니다.", "discord": "디스코드", @@ -2005,18 +2088,18 @@ "cpu": "CPU", "memory": "메모리", "disk": "디스크", - "network": "회로망", + "network": "네트워크", "uptime": "가동 시간", "loadAverage": "평균: {{avg1}}, {{avg5}}, {{avg15}}", "processes": "프로세스", - "connections": "사이", - "usage": "용법", + "connections": "연결 수", + "usage": "사용량", "available": "사용 가능", "total": "총", - "free": "무료", - "used": "사용된", - "percentage": "백분율", - "refreshStatusAndMetrics": "상태 및 지표 새로 고침", + "free": "여유", + "used": "사용됨", + "percentage": "비율", + "refreshStatusAndMetrics": "상태 및 메트릭 새로 고침", "refreshStatus": "상태 새로 고침", "fileManagerAlreadyOpen": "이 호스트에 대해 파일 관리자가 이미 열려 있습니다.", "openFileManager": "파일 관리자 열기", @@ -2024,7 +2107,7 @@ "connectionFailed": "서버 연결에 실패했습니다.", "cpuCores_one": "{{count}} CPU", "cpuCores_other": "{{count}} CPU", - "naCpus": "해당 없음 CPU(들)", + "naCpus": "CPU 해당 없음", "loadAverageNA": "평균: 해당 없음", "cpuUsage": "CPU 사용량", "memoryUsage": "메모리 사용량", @@ -2036,36 +2119,36 @@ "failedToFetchStatus": "서버 상태를 가져오는 데 실패했습니다.", "failedToFetchMetrics": "서버 메트릭을 가져오는 데 실패했습니다.", "failedToFetchHomeData": "홈 데이터를 가져오는 데 실패했습니다.", - "loadingMetrics": "지표를 불러오는 중...", + "loadingMetrics": "메트릭을 불러오는 중...", "refreshing": "새로 고치는 중...", "serverOffline": "서버 오프라인", "cannotFetchMetrics": "오프라인 서버에서 메트릭을 가져올 수 없습니다.", "totpRequired": "TOTP 인증이 필요합니다", "totpUnavailable": "TOTP가 활성화된 서버에서는 서버 통계를 사용할 수 없습니다.", - "totpVerified": "TOTP 인증 완료, 지표 수집 시작됨", + "totpVerified": "TOTP 인증 완료, 메트릭 수집 시작됨", "totpFailed": "TOTP 인증 실패", "totpInvalidCode": "잘못된 인증 코드입니다.", "totpCancelled": "데이터 수집이 취소되었습니다", "authenticationFailed": "인증 실패", "noneAuthNotSupported": "서버 통계는 '없음' 인증 유형을 지원하지 않습니다.", - "load": "짐", + "load": "부하", "editLayout": "레이아웃 편집", "cancelEdit": "취소", "addWidget": "위젯 추가", "saveLayout": "레이아웃 저장", "unsavedChanges": "저장되지 않은 변경 사항", - "layoutSaved": "레이아웃이 성공적으로 저장되었습니다.", + "layoutSaved": "레이아웃이 저장되었습니다.", "failedToSaveLayout": "레이아웃 저장에 실패했습니다", "systemInfo": "시스템 정보", "hostname": "호스트 이름", "operatingSystem": "운영 체제", - "kernel": "핵심", + "kernel": "커널", "totalUptime": "총 가동 시간", "seconds": "초", "networkInterfaces": "네트워크 인터페이스", "noInterfacesFound": "네트워크 인터페이스를 찾을 수 없습니다.", "totalProcesses": "전체 프로세스", - "running": "달리기", + "running": "실행 중", "noProcessesFound": "프로세스를 찾을 수 없습니다.", "loginStats": "SSH 로그인 통계", "totalLogins": "총 로그인 횟수", @@ -2073,16 +2156,16 @@ "recentSuccessfulLogins": "최근 성공적인 로그인", "recentFailedAttempts": "최근 실패한 시도들", "noRecentLoginData": "최근 로그인 데이터가 없습니다.", - "from": "~에서", + "from": "출처", "quickActions": "빠른 조치", - "executeQuickAction": "{{name}}를 실행하세요", - "executingQuickAction": "{{name}}실행 중...", - "quickActionSuccess": "{{name}} 성공적으로 완료되었습니다", + "executeQuickAction": "{{name}} 실행", + "executingQuickAction": "{{name}} 실행 중...", + "quickActionSuccess": "{{name}}이(가) 완료되었습니다.", "quickActionFailed": "{{name}} 실패", - "quickActionError": "{{name}}실행에 실패했습니다.", + "quickActionError": "{{name}} 실행에 실패했습니다.", "ports": { "title": "수신 포트", - "protocol": "규약", + "protocol": "프로토콜", "port": "포트", "address": "주소", "state": "상태", @@ -2091,21 +2174,21 @@ }, "firewall": { "title": "방화벽", - "active": "활동적인", + "active": "활성", "inactive": "비활성화됨", "notDetected": "감지되지 않음", "policy": "정책", "rules": "규칙", "noRules": "규칙 없음", "noData": "방화벽 데이터가 없습니다.", - "action": "행동", - "protocol": "프로토", + "action": "동작", + "protocol": "프로토콜", "port": "포트", - "source": "원천", - "accept": "수용하다", - "drop": "떨어지다", + "source": "소스", + "accept": "허용", + "drop": "차단", "reject": "거부하다", - "anywhere": "어딘가에" + "anywhere": "모든 위치" } }, "auth": { @@ -2113,7 +2196,7 @@ "description": "안전하고 강력하며 직관적인 SSH 연결 관리", "welcomeBack": "TERMIX에 다시 오신 것을 환영합니다", "createAccount": "TERMIX 계정을 만드세요", - "continueExternal": "외부 제공업체와 계속 진행하세요", + "continueExternal": "외부 제공업체로 계속", "loginTitle": "Termix에 로그인하세요", "registerTitle": "계정 생성", "loginButton": "로그인", @@ -2126,24 +2209,24 @@ "loginFailed": "로그인 실패", "registerSuccess": "등록 완료", "registerFailed": "등록 실패", - "logoutSuccess": "성공적으로 로그아웃되었습니다.", + "logoutSuccess": "로그아웃되었습니다.", "invalidCredentials": "잘못된 사용자 이름 또는 비밀번호입니다.", - "accountCreated": "계정이 성공적으로 생성되었습니다.", + "accountCreated": "계정이 생성되었습니다.", "passwordReset": "비밀번호 재설정 링크가 전송되었습니다.", "twoFactorAuth": "2단계 인증", "enterCode": "인증 코드를 입력하세요", "backupCode": "또는 백업 코드를 사용하세요.", - "verifyCode": "확인 코드", + "verifyCode": "코드 확인", "redirectingToApp": "앱으로 리디렉션 중...", - "enableTwoFactor": "2단계 인증을 활성화하세요", + "enableTwoFactor": "2단계 인증 활성화", "disableTwoFactor": "2단계 인증 비활성화", "scanQRCode": "인증 앱으로 이 QR 코드를 스캔하세요.", "backupCodes": "백업 코드", "saveBackupCodes": "이 백업 코드를 안전한 곳에 보관하세요.", - "twoFactorEnabledSuccess": "2단계 인증이 성공적으로 활성화되었습니다!", + "twoFactorEnabledSuccess": "2단계 인증이 활성화되었습니다!", "twoFactorDisabled": "2단계 인증이 비활성화되었습니다.", - "newBackupCodesGenerated": "새로운 백업 코드가 생성되었습니다.", - "backupCodesDownloaded": "다운로드된 백업 코드", + "newBackupCodesGenerated": "새 백업 코드가 생성되었습니다.", + "backupCodesDownloaded": "백업 코드가 다운로드되었습니다.", "pleaseEnterSixDigitCode": "6자리 코드를 입력해 주세요.", "invalidVerificationCode": "잘못된 인증 코드입니다.", "failedToDisableTotp": "TOTP를 비활성화하는 데 실패했습니다.", @@ -2151,7 +2234,7 @@ "enterPassword": "비밀번호를 입력하세요", "lockedOidcAuth": "잠금됨(OIDC 인증)", "twoFactorTitle": "2단계 인증", - "twoFactorProtected": "귀하의 계정은 2단계 인증으로 보호됩니다.", + "twoFactorProtected": "계정이 2단계 인증으로 보호되고 있습니다.", "twoFactorActive": "현재 계정에 2단계 인증이 활성화되어 있습니다.", "disable2FA": "2단계 인증 비활성화", "disableTwoFactorWarning": "2단계 인증을 비활성화하면 계정 보안이 취약해집니다.", @@ -2161,7 +2244,7 @@ "generateNewBackupCodes": "새 백업 코드 생성", "yourBackupCodes": "백업 코드", "download": "다운로드", - "setupTwoFactorTitle": "2단계 인증을 설정하세요", + "setupTwoFactorTitle": "2단계 인증 설정", "sshAuthenticationRequired": "SSH 인증이 필요합니다", "sshNoKeyboardInteractive": "키보드 기반 인증을 사용할 수 없습니다.", "sshAuthenticationFailed": "인증 실패", @@ -2170,8 +2253,10 @@ "sshAuthFailedDescription": "입력하신 정보가 올바르지 않습니다. 유효한 정보를 입력하여 다시 시도해 주세요.", "sshTimeoutDescription": "인증 시도 시간이 초과되었습니다. 다시 시도해 주세요.", "sshProvideCredentialsDescription": "이 서버에 연결하려면 SSH 자격 증명을 입력하세요.", - "sshPasswordDescription": "이 SSH 연결에 사용할 비밀번호를 입력하십시오.", - "sshKeyPasswordDescription": "SSH 키가 암호화된 경우 여기에 암호를 입력하십시오.", + "sshPasswordDescription": "이 SSH 연결에 사용할 비밀번호를 입력하세요.", + "sshKeyPasswordDescription": "SSH 키가 암호화되어 있으면 여기에 암호를 입력하세요.", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "1단계: 인증 앱으로 QR 코드를 스캔하세요.", "manualEntryCode": "수동 입력 코드", "cannotScanQRText": "QR 코드를 스캔할 수 없는 경우, 인증 앱에 이 코드를 직접 입력하세요.", @@ -2179,27 +2264,27 @@ "verifyAuthenticator": "인증 도구를 확인하세요", "step2EnterCode": "2단계: 인증 앱에서 받은 6자리 코드를 입력하세요.", "verificationCode": "인증 코드", - "back": "뒤쪽에", + "back": "뒤로", "verifyAndEnable": "확인 및 활성화", - "saveBackupCodesTitle": "백업 코드를 저장하세요", + "saveBackupCodesTitle": "백업 코드 저장", "step3StoreCodesSecurely": "3단계: 이 코드들을 안전한 곳에 보관하세요", "importantBackupCodesText": "이 백업 코드를 안전한 곳에 보관하세요. 인증 기기를 분실했을 경우 이 백업 코드를 사용하여 계정에 접속할 수 있습니다.", - "completeSetup": "완전 설치", + "completeSetup": "설정 완료", "notEnabledText": "2단계 인증은 로그인 시 인증 앱에서 전송된 코드를 요구하여 보안을 한층 강화합니다.", - "enableTwoFactorButton": "2단계 인증을 활성화하세요", - "addExtraSecurityLayer": "계정에 보안을 강화하세요", + "enableTwoFactorButton": "2단계 인증 활성화", + "addExtraSecurityLayer": "계정 보안을 강화하세요", "firstUser": "첫 번째 사용자", - "firstUserMessage": "당신은 첫 번째 사용자이며 관리자 권한을 부여받았습니다. 사이드바의 사용자 드롭다운 메뉴에서 관리자 설정을 확인할 수 있습니다. 오류라고 생각되면 Docker 로그를 확인하거나 GitHub에 이슈를 등록해 주세요.", + "firstUserMessage": "첫 번째 사용자이므로 관리자 권한이 부여됩니다. 관리자 설정은 사이드바의 사용자 드롭다운 메뉴에서 확인할 수 있습니다. 오류라고 생각되면 Docker 로그를 확인하거나 GitHub 이슈를 생성해 주세요.", "external": "외부", "loginWithExternal": "외부 제공업체로 로그인", "loginWithExternalDesc": "구성된 외부 ID 공급자를 사용하여 로그인하세요.", "externalNotSupportedInElectron": "Electron 앱에서는 아직 외부 인증이 지원되지 않습니다. OIDC 로그인을 위해서는 웹 버전을 이용해 주세요.", "resetPasswordButton": "비밀번호 재설정", "sendResetCode": "재설정 코드 전송", - "resetCodeDesc": "사용자 이름을 입력하여 비밀번호 재설정 코드를 받으세요. 코드는 도커 컨테이너 로그에 기록됩니다.", + "resetCodeDesc": "사용자 이름을 입력하여 비밀번호 재설정 코드를 받으세요. 코드는 Docker 컨테이너 로그에 기록됩니다.", "resetCode": "재설정 코드", - "verifyCodeButton": "확인 코드", - "enterResetCode": "Docker 컨테이너 로그에서 사용자에 대한 6자리 코드를 입력하십시오.", + "verifyCodeButton": "코드 확인", + "enterResetCode": "사용자의 Docker 컨테이너 로그에 있는 6자리 코드를 입력하세요:", "goToLogin": "로그인으로 이동", "newPassword": "새 비밀번호", "confirmNewPassword": "비밀번호 확인", @@ -2210,22 +2295,22 @@ "desktopApp": "데스크톱 앱", "loggingInToDesktopApp": "데스크톱 앱에 로그인하기", "loggingInToDesktopAppViaWeb": "웹 인터페이스를 통해 데스크톱 앱에 로그인하기", - "loadingServer": "서버 로딩 중...", + "loadingServer": "서버 불러오는 중...", "authenticating": "인증 중...", - "dataLossWarning": "이러한 방식으로 비밀번호를 재설정하면 저장된 모든 SSH 호스트, 자격 증명 및 기타 암호화된 데이터가 삭제됩니다. 이 작업은 되돌릴 수 없습니다. 비밀번호를 잊어버렸고 로그인되어 있지 않은 경우에만 이 방법을 사용하십시오.", + "dataLossWarning": "이 방식으로 비밀번호를 재설정하면 저장된 모든 SSH 호스트, 자격 증명 및 기타 암호화된 데이터가 삭제됩니다. 이 작업은 되돌릴 수 없습니다. 비밀번호를 잊어버렸고 로그인되어 있지 않은 경우에만 사용하세요.", "authenticationDisabled": "인증 비활성화됨", - "authenticationDisabledDesc": "현재 모든 인증 방식이 비활성화되어 있습니다. 관리자에게 문의하십시오.", + "authenticationDisabledDesc": "현재 모든 인증 방식이 비활성화되어 있습니다. 관리자에게 문의하세요.", "passwordResetSuccess": "비밀번호 재설정 성공", - "passwordResetSuccessDesc": "비밀번호가 성공적으로 재설정되었습니다. 이제 새 비밀번호로 로그인할 수 있습니다." + "passwordResetSuccessDesc": "비밀번호가 재설정되었습니다. 이제 새 비밀번호로 로그인할 수 있습니다." }, "hostKey": { "verifyNewHost": "SSH 호스트 키 확인", "keyChangedWarning": "SSH 호스트 키가 변경되었습니다.", "firstConnectionTitle": "이 호스트에 처음 연결합니다.", - "firstConnectionDescription": "이 호스트의 진위 여부를 확인할 수 없습니다. 지문이 예상과 일치하는지 확인하십시오.", + "firstConnectionDescription": "이 호스트의 신뢰성을 확인할 수 없습니다. 지문이 예상한 값과 일치하는지 확인하세요.", "keyChangedDescription": "이 서버의 호스트 키가 마지막 접속 이후 변경되었습니다. 이는 보안 문제를 나타낼 수 있습니다.", "previousKey": "이전 키", - "newFingerprint": "새로운 지문", + "newFingerprint": "새 지문", "fingerprint": "지문", "verifyInstructions": "이 호스트를 신뢰한다면 '수락'을 클릭하여 계속 진행하고 향후 연결을 위해 이 지문을 저장하세요.", "securityWarning": "보안 경고", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "비밀번호 재설정을 완료하지 못했습니다.", "invalidTotpCode": "잘못된 TOTP 코드", "failedOidcLogin": "OIDC 로그인 시작에 실패했습니다.", - "failedUserInfo": "OIDC 로그인 후 사용자 정보를 가져오는 데 실패했습니다.", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "OIDC 인증에 실패했습니다.", "noTokenReceived": "로그인에서 토큰을 받지 못했습니다.", "invalidAuthUrl": "백엔드에서 잘못된 인증 URL을 수신했습니다.", @@ -2269,22 +2354,22 @@ "resetCodeRateLimitedWithTime": "시도 횟수 제한: 인증 시도 횟수가 너무 많습니다. 다시 시도하기 전에 {{time}} 초 동안 기다려 주세요." }, "messages": { - "saveSuccess": "성공적으로 저장되었습니다", + "saveSuccess": "저장되었습니다", "saveError": "저장에 실패했습니다", - "deleteSuccess": "성공적으로 삭제되었습니다", + "deleteSuccess": "삭제되었습니다", "deleteError": "삭제에 실패했습니다", - "updateSuccess": "성공적으로 업데이트되었습니다.", + "updateSuccess": "업데이트되었습니다.", "updateError": "업데이트에 실패했습니다", "copySuccess": "클립보드에 복사됨", "copyError": "복사에 실패했습니다", - "copiedToClipboard": "{{item}} 클립보드에 복사됨", + "copiedToClipboard": "{{item}}이(가) 클립보드에 복사되었습니다.", "connectionEstablished": "연결이 설정되었습니다.", "connectionClosed": "연결이 종료되었습니다", "reconnecting": "다시 연결 중...", "processing": "처리 중...", "pleaseWait": "기다리세요...", "registrationDisabled": "관리자에 의해 신규 계정 등록이 현재 비활성화되었습니다. 로그인하시거나 관리자에게 문의해 주세요.", - "userNotAllowed": "귀하의 계정으로는 등록이 불가능합니다. 관리자에게 문의하십시오.", + "userNotAllowed": "이 계정은 등록 권한이 없습니다. 관리자에게 문의하세요.", "databaseConnected": "데이터베이스 연결에 성공했습니다.", "databaseConnectionFailed": "데이터베이스 서버에 연결하지 못했습니다.", "checkServerConnection": "서버 연결 상태를 확인하고 다시 시도해 주세요.", @@ -2305,7 +2390,7 @@ "admin": "관리자", "user": "사용자", "authMethod": "인증 방법", - "local": "현지의", + "local": "로컬", "external": "외부(OIDC)", "externalAndLocal": "이중 인증", "selectPreferredLanguage": "인터페이스에 사용할 언어를 선택하세요.", @@ -2313,22 +2398,39 @@ "fileColorCodingDesc": "파일 유형별로 색상을 지정합니다. 폴더(빨간색), 파일(파란색), 심볼릭 링크(녹색)", "commandAutocomplete": "명령어 자동 완성", "commandAutocompleteDesc": "명령어 기록을 기반으로 터미널 명령어에 대한 Tab 키 자동 완성 제안을 활성화합니다.", - "commandHistoryTracking": "Save Command History", - "commandHistoryTrackingDesc": "Store terminal commands in history for autocomplete and sidebar. Disabled by default for privacy.", - "defaultSnippetFoldersCollapsed": "기본적으로 스니펫 폴더를 접으세요", + "commandHistoryTracking": "명령 기록 저장", + "commandHistoryTrackingDesc": "자동 완성 및 사이드바에서 사용할 수 있도록 터미널 명령을 기록에 저장합니다. 개인정보 보호를 위해 기본적으로 비활성화되어 있습니다.", + "defaultSnippetFoldersCollapsed": "기본적으로 스니펫 폴더 접기", "defaultSnippetFoldersCollapsedDesc": "이 옵션을 활성화하면 스니펫 탭을 열 때 모든 스니펫 폴더가 접혀 표시됩니다.", "terminalSyntaxHighlighting": "터미널 구문 강조 표시", "showHostTags": "호스트 태그 표시", "showHostTagsDesc": "사이드바의 각 호스트 아래에 태그를 표시합니다. 이 기능을 비활성화하면 모든 태그가 숨겨집니다.", "account": "계정", "appearance": "외관", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "언어 및 현지화", "fileManagerSettings": "파일 관리자", "terminalSettings": "터미널", "hostSidebarSettings": "호스트 및 사이드바", "snippetsSettings": "스니펫", "confirmSnippetExecution": "스니펫 실행 확인", - "confirmSnippetExecutionDesc": "코드 조각 실행 전에 확인 대화 상자를 표시합니다.", + "confirmSnippetExecutionDesc": "스니펫 실행 전에 확인 대화 상자를 표시합니다.", "updateSettings": "업데이트", "disableUpdateCheck": "업데이트 확인 비활성화", "disableUpdateCheckDesc": "시작 시 및 대시보드에서 새 버전 확인을 중지합니다. 네트워크 요청이 줄어듭니다.", @@ -2340,7 +2442,7 @@ "themeDark": "다크", "themeSystem": "시스템", "appearanceDesc": "애플리케이션의 색상 테마를 선택하세요", - "terminalSyntaxHighlightingDesc": "터미널 출력에서 명령어, 경로, IP 주소 및 로그 레벨을 자동으로 강조 표시합니다.", + "terminalSyntaxHighlightingDesc": "터미널 출력에서 명령어, 경로, IP 주소 및 로그 수준을 자동으로 강조 표시합니다.", "enableCommandPaletteShortcut": "명령 팔레트 바로가기 활성화", "enableCommandPaletteShortcutDesc": "왼쪽 Shift 키를 두 번 누르면 호스트에 빠르게 접근할 수 있는 명령 팔레트가 열립니다.", "enableTerminalSessionPersistence": "고정 탭/세션", @@ -2370,6 +2472,10 @@ "description": "SSH 자격 증명 설명", "searchCredentials": "이름, 사용자 이름 또는 태그로 자격 증명을 검색하세요...", "sshConfig": "엔드포인트 SSH 구성", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/home", "clientId": "클라이언트 ID", "clientSecret": "클라이언트 암호", @@ -2381,11 +2487,11 @@ "scopes": "오픈아이드 이메일 프로필", "userinfoUrl": "https://your-provider.com/application/o/userinfo/", "allowedUsers": "user@example.com, @company.com", - "enterUsername": "관리자 권한을 얻으려면 사용자 이름을 입력하세요.", + "enterUsername": "관리자로 지정할 사용자 이름을 입력하세요.", "searchHosts": "호스트를 이름, 사용자 이름, IP 주소, 폴더, 태그 등으로 검색하세요.", "enterPassword": "비밀번호를 입력하세요", "totpCode": "6자리 TOTP 코드", - "searchHostsAny": "호스트를 검색합니다(시도: tag:prod, user:root, ip:192.168)...", + "searchHostsAny": "호스트 검색(예: tag:prod, user:root, ip:192.168)...", "confirmPassword": "비밀번호를 입력하여 확인하세요.", "typeHere": "여기에 입력하세요", "fileName": "파일 이름을 입력하세요 (예: example.txt)", @@ -2405,36 +2511,36 @@ "defaultRetryInterval": "10" }, "leftSidebar": { - "failedToLoadHosts": "호스트를 로드하는 데 실패했습니다.", + "failedToLoadHosts": "호스트를 불러오는 데 실패했습니다.", "noFolder": "폴더 없음", "passwordRequired": "비밀번호가 필요합니다", "failedToDeleteAccount": "계정 삭제에 실패했습니다", "failedToMakeUserAdmin": "사용자를 관리자로 만드는 데 실패했습니다.", - "userIsNowAdmin": "사용자 {{username}} 님이 이제 관리자입니다.", - "removeAdminConfirm": "{{username}}에서 관리자 권한을 제거하시겠습니까?", - "deleteUserConfirm": "사용자 {{username}}를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", + "userIsNowAdmin": "사용자 {{username}}님이 이제 관리자입니다.", + "removeAdminConfirm": "{{username}}님의 관리자 권한을 제거하시겠습니까?", + "deleteUserConfirm": "사용자 {{username}}을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", "deleteAccount": "계정 삭제", - "closeDeleteAccount": "닫기 계정 삭제", + "closeDeleteAccount": "계정 삭제 창 닫기", "deleteAccountWarning": "이 작업은 되돌릴 수 없습니다. 계정과 관련된 모든 데이터가 영구적으로 삭제됩니다.", "deleteAccountWarningDetails": "계정을 삭제하면 SSH 호스트, 구성 및 설정 등 모든 데이터가 삭제됩니다. 이 작업은 되돌릴 수 없습니다.", "deleteAccountWarningShort": "이 조치는 되돌릴 수 없으며 계정이 영구적으로 삭제됩니다.", "cannotDeleteAccount": "계정을 삭제할 수 없습니다", - "lastAdminWarning": "현재 관리자 계정은 귀하에게만 남아 있습니다. 계정을 삭제하시면 시스템에 관리자가 한 명도 남지 않게 되므로 삭제할 수 없습니다. 다른 사용자를 관리자로 지정하시거나 시스템 지원팀에 문의해 주십시오.", + "lastAdminWarning": "현재 마지막 관리자 사용자입니다. 계정을 삭제하면 시스템에 관리자가 남지 않으므로 삭제할 수 없습니다. 먼저 다른 사용자를 관리자로 지정하거나 시스템 지원팀에 문의해 주세요.", "confirmPassword": "비밀번호 확인", "deleting": "삭제 중...", "cancel": "취소" }, "interface": { "sidebar": "사이드바", - "toggleSidebar": "사이드바 토글", - "close": "닫다", + "toggleSidebar": "사이드바 표시/숨기기", + "close": "닫기", "online": "온라인", "offline": "오프라인", - "maintenance": "유지", - "degraded": "타락한", + "maintenance": "유지보수", + "degraded": "성능 저하", "noTunnelConnections": "구성된 터널 연결이 없습니다.", "discord": "디스코드", - "connectToSshForOperations": "파일 작업을 사용하려면 SSH에 연결하십시오.", + "connectToSshForOperations": "파일 작업을 사용하려면 SSH에 연결하세요.", "uploadFile": "파일 업로드", "newFile": "새 파일", "newFolder": "새 폴더", @@ -2448,7 +2554,7 @@ "sshHosts": "SSH 호스트", "importSshHosts": "JSON에서 SSH 호스트 가져오기", "clientId": "클라이언트 ID", - "clientSecret": "클라이언트 암호", + "clientSecret": "클라이언트 시크릿", "error": "오류", "warning": "경고", "deleteAccount": "계정 삭제", @@ -2463,7 +2569,7 @@ "resetSplitSizes": "분할 크기 재설정", "sshManagerAlreadyOpen": "SSH 관리자가 이미 열려 있습니다.", "disabledDuringSplitScreen": "화면 분할 중에는 비활성화됨", - "unknown": "알려지지 않은", + "unknown": "알 수 없음", "connected": "연결됨", "disconnected": "연결이 끊어졌습니다", "maxRetriesExhausted": "최대 재시도 횟수 초과", @@ -2471,13 +2577,13 @@ "administrator": "관리자", "user": "사용자", "external": "외부", - "local": "현지의", + "local": "로컬", "saving": "저장 중...", "saveConfiguration": "설정 저장", - "loading": "로딩 중...", + "loading": "불러오는 중...", "refresh": "새로고침", "adding": "추가 중...", - "makeAdmin": "관리자 생성", + "makeAdmin": "관리자로 지정", "verifying": "확인 중...", "verifyAndEnable": "확인 및 활성화", "secretKey": "비밀 키", @@ -2490,9 +2596,9 @@ "addHost": "호스트 추가", "editHost": "호스트 편집", "pinConnection": "핀 연결", - "authentication": "입증", + "authentication": "인증", "password": "비밀번호", - "key": "열쇠", + "key": "키", "sshPrivateKey": "SSH 개인 키", "keyPassword": "키 비밀번호", "keyType": "키 유형", @@ -2503,7 +2609,7 @@ "tunnelConnections": "터널 연결", "maxRetries": "최대 재시도 횟수", "upload": "업로드", - "updateKey": "업데이트 키", + "updateKey": "키 업데이트", "productionFolder": "생산", "databaseServer": "데이터베이스 서버", "developmentServer": "개발 서버", @@ -2519,7 +2625,7 @@ "loginWithExternalProvider": "외부 제공업체로 로그인", "loginWithExternal": "외부 제공업체로 로그인", "sendResetCode": "재설정 코드 전송", - "verifyCode": "확인 코드", + "verifyCode": "코드 확인", "resetPassword": "비밀번호 재설정", "login": "로그인", "signUp": "회원가입", @@ -2544,23 +2650,24 @@ "github": "깃허브", "support": "문의하기", "discord": "디스코드", - "donate": "기부하세요", + "donate": "기부", "serverOverview": "서버 개요", "version": "버전", - "upToDate": "최신 정보", + "upToDate": "최신 상태", "updateAvailable": "업데이트 가능", + "beta": "Beta", "uptime": "가동 시간", - "database": "데이터 베이스", - "healthy": "건강한", + "database": "데이터베이스", + "healthy": "정상", "error": "오류", - "totalHosts": "Total Hosts", - "totalTunnels": "토탈 터널", + "totalHosts": "전체 호스트", + "totalTunnels": "전체 터널", "totalCredentials": "총 자격 증명", "recentActivity": "최근 활동", "reset": "초기화", "loadingRecentActivity": "최근 활동 불러오는 중...", "noRecentActivity": "최근 활동 없음", - "quickActions": "빠른 조치", + "quickActions": "빠른 실행", "addHost": "호스트 추가", "addCredential": "자격 증명 추가", "adminSettings": "관리자 설정", @@ -2589,18 +2696,18 @@ "addLink": "링크 추가", "deleteSelected": "선택한 항목 삭제", "zoomIn": "확대", - "zoomOut": "축소하기", + "zoomOut": "축소", "resetView": "보기 재설정", "exportJson": "JSON 내보내기", "importJson": "JSON 가져오기", "selectHost": "호스트를 선택하세요", "chooseHost": "호스트를 선택하세요...", - "parentGroup": "학부모 단체", + "parentGroup": "상위 그룹", "noGroup": "그룹 없음", "groupName": "그룹 이름", "color": "색상", - "source": "원천", - "target": "목표", + "source": "소스", + "target": "대상", "moveToGroup": "그룹으로 이동", "selectGroup": "그룹을 선택하세요...", "addConnection": "연결 추가", @@ -2608,21 +2715,21 @@ "connectToHost": "호스트에 연결", "openTerminal": "터미널 열기", "openFileManager": "파일 관리자 열기", - "openTunnel": "개방형 터널", - "openDocker": "오픈 도커", + "openTunnel": "터널 열기", + "openDocker": "Docker 열기", "openServerStats": "서버 세부 정보 열기", "moveToGroupAction": "그룹으로 이동", "removeFromGroup": "그룹에서 제거", "addHostHere": "여기에 호스트를 추가하세요", - "editGroup": "편집 그룹", + "editGroup": "그룹 편집", "delete": "삭제", "cancel": "취소", - "add": "추가하다", - "create": "만들다", + "add": "추가", + "create": "생성", "update": "업데이트", - "move": "이동하다", - "connect": "연결하다", - "close": "닫다", + "move": "이동", + "connect": "연결", + "close": "닫기", "createGroup": "그룹 생성", "noAvailableHosts": "사용 가능한 호스트가 없습니다.", "selectSourcePlaceholder": "소스 선택...", @@ -2631,7 +2738,7 @@ "hostAlreadyExists": "호스트가 이미 토폴로지에 있습니다.", "sourceTargetMustDiffer": "소스와 대상은 서로 달라야 합니다.", "connectionExists": "이미 연결이 존재합니다", - "unknown": "알려지지 않은", + "unknown": "알 수 없음", "name": "이름", "ip": "IP", "status": "상태", @@ -2641,13 +2748,13 @@ "sourceDifferentFromTarget": "소스와 대상은 서로 달라야 합니다.", "exportJSON": "JSON 내보내기", "importJSON": "JSON 가져오기", - "searchHost": "호스트를 검색하세요...", + "searchHost": "호스트 검색...", "noHostFound": "호스트를 찾을 수 없습니다.", - "searchGroup": "검색 그룹...", + "searchGroup": "그룹 검색...", "noGroupFound": "그룹을 찾을 수 없습니다.", - "searchNode": "노드를 검색하세요...", + "searchNode": "노드 검색...", "noNodeFound": "노드를 찾을 수 없습니다.", - "terminal": "단말기", + "terminal": "터미널", "fileManager": "파일 관리자", "tunnel": "터널", "docker": "도커", @@ -2655,12 +2762,12 @@ }, "rbac": { "shareHost": "호스트 공유", - "shareHostTitle": "호스트 액세스 공유", - "shareHostDescription": "이 호스트에 대한 임시 또는 영구 액세스 권한을 부여하십시오.", + "shareHostTitle": "호스트 접근 권한 공유", + "shareHostDescription": "이 호스트에 대한 임시 또는 영구 접근 권한을 부여합니다.", "targetUser": "대상 사용자", "selectUser": "공유할 사용자를 선택하세요", "duration": "지속", - "durationHours": "소요 시간(시간)", + "durationHours": "지속 시간(시간)", "neverExpires": "만료되지 않습니다", "permissionLevel": "권한 수준", "permissionLevels": { @@ -2670,7 +2777,7 @@ "restrictedDesc": "위험한 명령어(passwd, rm -rf 등)를 차단합니다.", "monitored": "모니터링됨", "monitoredDesc": "모든 명령을 기록하지만 차단하지는 않습니다(권장).", - "full": "전체 액세스", + "full": "전체 접근 권한", "fullDesc": "제한 없음 (권장하지 않음)" }, "blockedCommands": "차단된 명령", @@ -2679,38 +2786,38 @@ "createTempUser": "임시 사용자 생성", "createTempUserDesc": "자격 증명을 공유하는 대신 서버에 제한된 사용자 계정을 생성합니다. sudo 권한이 필요하며, 가장 안전한 옵션입니다.", "expiresAt": "만료일", - "expiresIn": "{{hours}} 시간 후에 만료됩니다", + "expiresIn": "{{hours}}시간 후 만료됩니다", "expired": "만료됨", "grantedBy": "승인자:", "accessLevel": "접근 수준", "lastAccessed": "최근 접속일", "accessCount": "접근 횟수", - "revokeAccess": "접근 권한 취소", - "confirmRevokeAccess": "{{username}}에 대한 접근 권한을 취소하시겠습니까?", - "hostSharedSuccessfully": "호스트가 {{username}}와 성공적으로 공유되었습니다.", - "hostAccessUpdated": "호스트 액세스가 업데이트되었습니다.", + "revokeAccess": "접근 권한 철회", + "confirmRevokeAccess": "{{username}}의 접근 권한을 철회하시겠습니까?", + "hostSharedSuccessfully": "호스트가 {{username}}님과 공유되었습니다.", + "hostAccessUpdated": "호스트 접근 권한이 업데이트되었습니다.", "failedToShareHost": "호스트 공유에 실패했습니다", - "accessRevokedSuccessfully": "접근 권한이 성공적으로 취소되었습니다.", - "failedToRevokeAccess": "접근 권한 취소에 실패했습니다.", + "accessRevokedSuccessfully": "접근 권한이 철회되었습니다.", + "failedToRevokeAccess": "접근 권한 철회에 실패했습니다.", "shared": "공유됨", "sharedHosts": "공유 호스트", "sharedWithMe": "나와 공유됨", "noSharedHosts": "공유된 호스트가 없습니다", "owner": "소유자", "viewAccessList": "접근 권한 목록 보기", - "accessList": "액세스 목록", - "noAccessGranted": "이 호스트에 대한 액세스 권한이 부여되지 않았습니다.", - "noAccessGrantedMessage": "아직 이 호스트에 대한 접근 권한이 부여된 사용자는 없습니다.", - "manageAccessFor": "액세스 관리", - "totalAccessRecords": "{{count}} 액세스 레코드(들)", + "accessList": "접근 권한 목록", + "noAccessGranted": "이 호스트에 대한 접근 권한이 부여되지 않았습니다.", + "noAccessGrantedMessage": "아직 이 호스트에 대한 접근 권한이 부여된 사용자가 없습니다.", + "manageAccessFor": "접근 권한 관리", + "totalAccessRecords": "{{count}}개 접근 권한 기록", "neverAccessed": "절대", - "timesAccessed": "{{count}} 시간(초)", - "daysRemaining": "{{days}} 일", - "hoursRemaining": "{{hours}} 시간(초)", + "timesAccessed": "{{count}}회", + "daysRemaining": "{{days}}일", + "hoursRemaining": "{{hours}}시간", "failedToFetchAccessList": "접근 권한 목록을 가져오는 데 실패했습니다.", - "currentAccess": "현재 액세스", + "currentAccess": "현재 접근 권한", "securityWarning": "보안 경고", - "securityWarningMessage": "자격 증명을 공유하면 해당 사용자는 비밀번호 변경 및 파일 삭제를 포함하여 서버에서 모든 작업을 수행할 수 있는 완전한 권한을 갖게 됩니다. 신뢰할 수 있는 사용자에게만 공유하십시오.", + "securityWarningMessage": "자격 증명을 공유하면 해당 사용자는 비밀번호 변경 및 파일 삭제를 포함해 서버에서 모든 작업을 수행할 수 있는 전체 권한을 갖게 됩니다. 신뢰할 수 있는 사용자에게만 공유하세요.", "tempUserRecommended": "보안 강화를 위해 '임시 사용자 생성' 기능을 활성화하는 것을 권장합니다.", "roleManagement": "역할 관리", "manageRoles": "역할 관리", @@ -2721,9 +2828,9 @@ "permissions": "권한", "systemRole": "시스템 역할", "customRole": "사용자 지정 역할", - "roleAssignedSuccessfully": "{{username}} 에 역할이 성공적으로 할당되었습니다.", + "roleAssignedSuccessfully": "{{username}}님에게 역할이 할당되었습니다.", "failedToAssignRole": "역할 할당에 실패했습니다", - "roleRemovedSuccessfully": "{{username}} 에서 역할이 성공적으로 제거되었습니다.", + "roleRemovedSuccessfully": "{{username}}님에게서 역할이 제거되었습니다.", "failedToRemoveRole": "역할 제거에 실패했습니다", "cannotRemoveSystemRole": "시스템 역할을 제거할 수 없습니다", "cannotShareWithSelf": "본인과 호스트를 공유할 수 없습니다.", @@ -2733,7 +2840,7 @@ "credentialRequiredDescription": "이 호스트는 자격 증명 기반 인증을 사용하지 않습니다. 사용자별 암호화를 위해 호스트를 공유하려면 해당 호스트가 자격 증명 기반 인증을 사용해야 합니다.", "auditLogs": "감사 로그", "viewAuditLogs": "감사 로그 보기", - "action": "행동", + "action": "동작", "resourceType": "리소스 유형", "resourceName": "리소스 이름", "timestamp": "타임스탬프", @@ -2744,14 +2851,14 @@ "details": "세부", "noAuditLogs": "감사 로그를 사용할 수 없습니다.", "sessionRecordings": "세션 녹화", - "viewRecording": "녹화 영상 보기", + "viewRecording": "녹화 보기", "downloadRecording": "녹화본 다운로드", "dangerousCommand": "위험한 명령이 감지되었습니다", "commandBlocked": "명령이 차단되었습니다", "terminateSession": "세션 종료", "sessionTerminated": "호스트 소유자에 의해 세션이 종료되었습니다.", - "sharedAccessExpired": "이 호스트에 대한 공유 액세스 권한이 만료되었습니다.", - "sharedAccessExpiresIn": "공유 액세스는 {{hours}} 시간 후에 만료됩니다.", + "sharedAccessExpired": "이 호스트에 대한 공유 접근 권한이 만료되었습니다.", + "sharedAccessExpiresIn": "공유 접근 권한은 {{hours}}시간 후 만료됩니다.", "roles": { "label": "역할", "admin": "관리자", @@ -2767,22 +2874,22 @@ "selectUserPlaceholder": "사용자를 선택하세요", "searchUsers": "사용자 검색...", "noUserFound": "사용자를 찾을 수 없습니다.", - "currentRoles": "현재 담당 업무", + "currentRoles": "현재 역할", "noRolesAssigned": "역할이 할당되지 않았습니다.", "assignNewRole": "새 역할 할당", "selectRolePlaceholder": "역할을 선택하세요", - "searchRoles": "채용 공고를 검색하세요...", + "searchRoles": "역할 검색...", "noRoleFound": "역할을 찾을 수 없습니다.", - "assign": "양수인", - "roleCreatedSuccessfully": "역할이 성공적으로 생성되었습니다.", - "roleUpdatedSuccessfully": "역할이 성공적으로 업데이트되었습니다.", - "roleDeletedSuccessfully": "역할이 성공적으로 삭제되었습니다.", + "assign": "할당", + "roleCreatedSuccessfully": "역할이 생성되었습니다.", + "roleUpdatedSuccessfully": "역할이 업데이트되었습니다.", + "roleDeletedSuccessfully": "역할이 삭제되었습니다.", "failedToLoadRoles": "역할 불러오기에 실패했습니다", "failedToSaveRole": "역할 저장에 실패했습니다", "failedToDeleteRole": "역할 삭제에 실패했습니다", "roleDisplayNameRequired": "역할 표시 이름은 필수 입력 사항입니다.", "roleNameRequired": "역할 이름은 필수 입력 사항입니다.", - "roleNameHint": "소문자, 숫자, 밑줄, 하이픈만 사용하십시오.", + "roleNameHint": "소문자, 숫자, 밑줄, 하이픈만 사용하세요.", "displayNamePlaceholder": "개발자", "descriptionPlaceholder": "소프트웨어 개발자 및 엔지니어", "confirmDeleteRole": "역할 삭제", @@ -2790,7 +2897,7 @@ "confirmRemoveRole": "역할 제거", "confirmRemoveRoleDescription": "이 사용자에게서 해당 역할을 제거하시겠습니까?", "editRoleDescription": "역할 정보 업데이트", - "createRoleDescription": "사용자 그룹화를 위한 새로운 사용자 지정 역할을 생성하세요.", + "createRoleDescription": "사용자를 그룹화할 새 사용자 지정 역할을 생성하세요.", "assignRolesDescription": "사용자 역할 할당 관리", "noRoles": "역할을 찾을 수 없습니다.", "selectRole": "역할 선택", @@ -2798,27 +2905,27 @@ "user": "사용자", "role": "역할", "saveHostFirst": "호스트를 먼저 저장하세요", - "saveHostFirstDescription": "공유 설정을 구성하기 전에 호스트를 저장하십시오.", + "saveHostFirstDescription": "공유 설정을 구성하기 전에 호스트를 저장하세요.", "shareWithUser": "사용자와 공유", - "shareWithRole": "역할과 공유하기", - "share": "공유하다", - "target": "목표", + "shareWithRole": "역할과 공유", + "share": "공유", + "target": "대상", "expires": "만료됨", "never": "절대", "noAccessRecords": "접근 기록을 찾을 수 없습니다.", - "sharedSuccessfully": "성공적으로 공유되었습니다", + "sharedSuccessfully": "공유되었습니다", "failedToShare": "공유에 실패했습니다", - "confirmRevokeAccessDescription": "이 접근 권한을 취소하시겠습니까?", + "confirmRevokeAccessDescription": "이 접근 권한을 철회하시겠습니까?", "hours": "시간", - "sharing": "공유하기", + "sharing": "공유 중", "selectUserAndRole": "사용자와 역할을 모두 선택해 주세요.", "view": "보기 전용", "viewDesc": "Termix 암호화 시스템으로 인해 다른 권한 수준은 추후에 제공될 예정입니다." }, "commandPalette": { - "searchPlaceholder": "호스트 또는 빠른 실행 항목을 검색하세요...", + "searchPlaceholder": "호스트 또는 빠른 실행 항목 검색...", "recentActivity": "최근 활동", - "navigation": "항해", + "navigation": "탐색", "addHost": "호스트 추가", "addCredential": "자격 증명 추가", "adminSettings": "관리자 설정", @@ -2832,10 +2939,10 @@ "github": "깃허브", "support": "문의하기", "discord": "디스코드", - "donate": "기부하세요", - "press": "누르다", + "donate": "기부", + "press": "누르기", "toToggle": "토글하려면", - "close": "닫다", + "close": "닫기", "hostManager": "호스트 관리자", "pressToToggle": "Shift 키를 두 번 눌러 명령 팔레트를 엽니다." }, @@ -2851,59 +2958,59 @@ "totpVerificationFailed": "TOTP 인증에 실패했습니다. 다시 시도해 주세요.", "warpgateVerificationFailed": "워프게이트 인증에 실패했습니다. 다시 시도해 주세요.", "verificationCodePrompt": "인증 코드를 입력하세요", - "loadingContainers": "컨테이너 적재 중...", - "containerStarted": "컨테이너 {{name}} 시작됨", - "failedToStartContainer": "컨테이너 {{name}}시작에 실패했습니다.", - "containerStopped": "컨테이너 {{name}} 가 중지되었습니다.", - "failedToStopContainer": "컨테이너 {{name}}를 중지하는 데 실패했습니다.", - "containerRestarted": "컨테이너 {{name}} 가 재시작되었습니다.", - "failedToRestartContainer": "컨테이너 {{name}}재시작에 실패했습니다.", - "containerPaused": "컨테이너 {{name}} 일시 중지됨", - "containerUnpaused": "컨테이너 {{name}} 일시 중지 해제됨", + "loadingContainers": "컨테이너 불러오는 중...", + "containerStarted": "컨테이너 {{name}}이(가) 시작되었습니다.", + "failedToStartContainer": "컨테이너 {{name}} 시작에 실패했습니다.", + "containerStopped": "{{name}} 컨테이너가 중지되었습니다.", + "failedToStopContainer": "컨테이너 {{name}}을(를) 중지하는 데 실패했습니다.", + "containerRestarted": "{{name}} 컨테이너가 재시작되었습니다.", + "failedToRestartContainer": "컨테이너 {{name}} 재시작에 실패했습니다.", + "containerPaused": "{{name}} 컨테이너가 일시 중지되었습니다.", + "containerUnpaused": "{{name}} 컨테이너의 일시 중지가 해제되었습니다.", "failedToTogglePauseContainer": "컨테이너 {{name}}의 일시 정지 상태를 전환하는 데 실패했습니다.", - "containerRemoved": "컨테이너 {{name}} 가 제거되었습니다.", - "failedToRemoveContainer": "컨테이너 {{name}}를 제거하는 데 실패했습니다.", - "image": "영상", + "containerRemoved": "{{name}} 컨테이너가 제거되었습니다.", + "failedToRemoveContainer": "컨테이너 {{name}}을(를) 제거하는 데 실패했습니다.", + "image": "이미지", "idLabel": "ID", - "ports": "항구", + "ports": "포트", "noPorts": "포트 없음", "created": "생성됨", "start": "시작", - "stop": "멈추다", - "pause": "정지시키다", + "stop": "중지", + "pause": "일시 정지", "unpause": "일시 정지 해제", "restart": "재시작", - "remove": "제거하다", - "removeContainer": "컨테이너를 제거하세요", - "confirmRemoveContainer": "컨테이너 '{{name}}'를 정말로 제거하시겠습니까? 이 작업은 되돌릴 수 없습니다.", + "remove": "제거", + "removeContainer": "컨테이너 제거", + "confirmRemoveContainer": "컨테이너 \"{{name}}\"을(를) 정말로 제거하시겠습니까? 이 작업은 되돌릴 수 없습니다.", "runningContainerWarning": "경고: 이 컨테이너는 현재 실행 중입니다. 제거하려면 먼저 컨테이너가 중지되어야 합니다.", - "removing": "풀이...", + "removing": "제거 중...", "noContainersFound": "컨테이너를 찾을 수 없습니다.", "noContainersFoundHint": "이 호스트에는 사용 가능한 Docker 컨테이너가 없습니다.", - "searchPlaceholder": "검색 컨테이너...", + "searchPlaceholder": "컨테이너 검색...", "filterByStatusPlaceholder": "상태별 필터링", "allContainersCount": "모두 ({{count}})", "statusCount": "{{status}} ({{count}})", "noContainersMatchFilters": "필터 조건에 맞는 컨테이너가 없습니다.", - "noContainersMatchFiltersHint": "검색 또는 필터 조건을 조정해 보세요.", + "noContainersMatchFiltersHint": "검색어 또는 필터 조건을 조정해 보세요.", "containerMustBeRunningToViewStats": "통계를 보려면 컨테이너가 실행 중이어야 합니다.", "failedToFetchStats": "컨테이너 통계를 가져오는 데 실패했습니다.", "containerNotRunning": "컨테이너가 실행 중이 아닙니다", "startContainerToViewStats": "컨테이너를 시작하여 통계를 확인하세요.", - "loadingStats": "통계 자료를 불러오는 중...", - "errorLoadingStats": "통계 로딩 오류", + "loadingStats": "통계 불러오는 중...", + "errorLoadingStats": "통계 불러오기 오류", "noStatsAvailable": "이용 가능한 통계가 없습니다.", "cpuUsage": "CPU 사용량", - "current": "현재의", + "current": "현재", "memoryUsage": "메모리 사용량", "usedLimit": "사용량/한도", "percentage": "백분율", "networkIo": "네트워크 I/O", "input": "입력", - "output": "산출", + "output": "출력", "blockIo": "블록 I/O", - "read": "읽다", - "write": "쓰다", + "read": "읽기", + "write": "쓰기", "pids": "PIDs", "containerInformation": "컨테이너 정보", "name": "이름", @@ -2918,12 +3025,12 @@ "errorMessage": "오류: {{message}}", "failedToConnect": "컨테이너에 연결하지 못했습니다.", "console": "콘솔", - "selectShell": "쉘을 선택하세요", + "selectShell": "셸 선택", "bash": "세게 때리다", "sh": "쉿", "ash": "금연 건강 증진 협회", - "connect": "연결하다", - "disconnect": "연결을 끊으세요", + "connect": "연결", + "disconnect": "연결 끊기", "notConnected": "연결되지 않음", "clickToConnect": "연결을 클릭하여 셸 세션을 시작하세요.", "connectingTo": "{{containerName}}에 연결 중...", @@ -2945,16 +3052,30 @@ }, "stats": { "log": { - "connecting": "측정항목 수집을 시작합니다...", - "existingSession": "기존 메트릭 세션 사용", + "connecting": "메트릭 수집을 시작합니다...", + "existingSession": "기존 메트릭 세션 사용 중", "totpVerifying": "TOTP 인증이 필요합니다.", - "sessionEstablished": "측정 지표 세션이 개설되었습니다.", + "sessionEstablished": "메트릭 세션이 설정되었습니다.", "collecting": "서버 메트릭 수집", - "heartbeat": "연결을 유지하세요", + "heartbeat": "연결 유지 중", "stopped": "메트릭 수집이 중지되었습니다", "error": "메트릭 수집 실패: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "터널 연결 구축 중...", + "sourceConnecting": "소스 호스트 {{host}}에 연결 중...", + "sourceConnected": "소스 호스트에 연결됨", + "endpointResolving": "엔드포인트 호스트 {{host}} 확인 중...", + "endpointResolved": "엔드포인트 호스트가 확인되었습니다.", + "forwarding": "포트 포워딩 설정 중 {{localPort}} → {{remotePort}}...", + "connected": "터널 개통 성공", + "retrying": "연결에 실패했습니다. {{countdown}}초 후에 다시 시도합니다(시도 횟수: {{attempt}}/{{max}})...", + "retryExhausted": "최대 재시도 횟수에 도달했습니다.", + "error": "터널 연결 실패: {{error}}" + } + }, "sftp": { "log": { "connecting": "SFTP 서버에 연결 중...", @@ -2965,7 +3086,7 @@ } }, "theme": { - "switchToLight": "라이트테마로 변경", + "switchToLight": "라이트 테마로 변경", "switchToDark": "다크 테마로 변경" } } diff --git a/src/locales/translated/nl_NL.json b/src/locales/translated/nl_NL.json index 21796a44..674cfef4 100644 --- a/src/locales/translated/nl_NL.json +++ b/src/locales/translated/nl_NL.json @@ -402,6 +402,8 @@ "currentVersion": "Je gebruikt versie {{version}}", "updateAvailable": "Update beschikbaar", "newVersionAvailable": "Er is een nieuwe versie beschikbaar! U voert {{current}}uit, maar {{latest}} is beschikbaar.", + "betaVersion": "Beta versie", + "betaVersionDesc": "Je gebruikt {{current}}, die nieuwer is dan de laatste stabiele versie {{latest}}.", "releasedOn": "Uitgebracht op {{date}}", "downloadUpdate": "Update downloaden", "dismiss": "Uitschakelen", @@ -426,6 +428,8 @@ "warning": "Waarschuwing", "info": "Informatie", "success": "Geslaagd", + "unsavedChanges": "Niet-opgeslagen wijzigingen", + "dismiss": "Uitschakelen", "loading": "Laden...", "required": "vereist", "optional": "Optioneel", @@ -471,6 +475,7 @@ "chinese": "Chinees", "german": "Duits", "cancel": "annuleren", + "done": "Voltooid", "username": "Gebruikersnaam", "name": "naam", "login": "Aanmelden", @@ -486,6 +491,7 @@ "save": "Opslaan", "saving": "Opslaan...", "delete": "Verwijderen", + "rename": "Hernoem", "edit": "Bewerken", "add": "Toevoegen", "search": "Zoeken", @@ -559,7 +565,8 @@ "passwordCopied": "Wachtwoord gekopieerd naar klembord", "sudoPasswordCopied": "Sudo wachtwoord gekopieerd naar klembord", "noPasswordAvailable": "Geen wachtwoord beschikbaar", - "failedToCopyPassword": "Wachtwoord kopiëren mislukt" + "failedToCopyPassword": "Wachtwoord kopiëren mislukt", + "openFileManager": "Bestandsbeheer openen" }, "admin": { "title": "Beheerder Instellingen", @@ -868,7 +875,42 @@ "passwordMinLength": "Wachtwoord moet ten minste 6 tekens bevatten", "currentRoles": "Huidige rollen", "noRolesAssigned": "Geen rollen toegewezen", - "assignNewRole": "Nieuwe rol toewijzen" + "assignNewRole": "Nieuwe rol toewijzen", + "apiKeys": { + "tabLabel": "API sleutels", + "title": "API sleutels", + "createApiKey": "API-sleutel aanmaken", + "createApiKeyDescription": "Maak een nieuwe API-sleutel aan voor een specifieke gebruiker. De sleutel wordt slechts één keer getoond.", + "keyCreated": "API-sleutel aangemaakt", + "keyCreatedDescription": "Kopieer deze sleutel nu - deze zal niet meer getoond worden.", + "keyName": "Toets naam", + "keyNamePlaceholder": "bijv. CI/CD Pipeline", + "scopedUser": "Gebruiker Begrensd", + "selectUser": "Selecteer een gebruiker...", + "searchUsers": "Gebruikers zoeken...", + "noUsersFound": "Geen gebruikers gevonden.", + "expiresAt": "Verloopt op", + "optional": "optioneel", + "expiresAtHelp": "Laat leeg voor een sleutel die nooit verloopt.", + "copyWarningTitle": "Sla je API-sleutel op", + "copyWarningDescription": "Deze sleutel wordt slechts één keer getoond. Bewaar deze op een veilige plaats.", + "apiKey": "API Sleutel", + "tokenCopied": "Token gekopieerd naar klembord", + "creating": "Maken...", + "nameRequired": "Sleutelnaam is vereist", + "userRequired": "Selecteer een gebruiker", + "failedToCreate": "API-sleutel aanmaken mislukt", + "noKeys": "Geen API sleutels gevonden.", + "name": "naam", + "prefix": "Voorvoegsel", + "lastUsed": "Laatst gebruikt", + "never": "Nooit", + "revokeKey": "Intrekken sleutel", + "confirmRevoke": "Weet u zeker dat u de API-sleutel wilt intrekken\"{{name}}\"? Dit kan niet ongedaan worden gemaakt.", + "revokedSuccessfully": "API-sleutel met succes ingetrokken", + "failedToRevoke": "API-sleutel intrekken is mislukt", + "failedToFetch": "API-sleutels ophalen mislukt" + } }, "hosts": { "title": "Host Manager", @@ -962,28 +1004,8 @@ "enableDocker": "Docker inschakelen", "defaultPath": "Standaard pad", "defaultPathDesc": "Standaard map bij het openen van bestandsbeheer voor deze host", - "tunnelConnections": "Tunnel verbindingen", "connection": "Verbindingsinstellingen", "remove": "Verwijderen", - "sourcePort": "Bron poort", - "sourcePortDesc": " (Source verwijst naar de huidige Connectiedetails op het tabblad Algemeen)", - "endpointPort": "Eindpunt Poort", - "endpointSshConfig": "Endpoint SSH configuratie", - "tunnelForwardDescription": "Deze tunnel zal verkeer van poort {{sourcePort}} op de bron machine doorsturen (huidige verbindingsdetails in algemene tab) naar poort {{endpointPort}} op de eindpuntmachine.", - "maxRetries": "Maximaal aantal pogingen", - "maxRetriesDescription": "Maximum aantal opnieuw proberen te proberen voor tunnelverbinding.", - "retryInterval": "Interval opnieuw proberen (seconden)", - "retryIntervalDescription": "Tijd om te wachten tussen opnieuw proberen pogingen.", - "autoStartContainer": "Start automatisch bij opstarten van Container", - "autoStartDesc": "Automatisch deze tunnel starten wanneer de container wordt gelanceerd", - "addConnection": "Tunnel verbinding toevoegen", - "tunnelType": "Tunnel type", - "tunnelTypeLocal": "Lokaal (-L)", - "tunnelTypeRemote": "Afstandsbediening (-R)", - "tunnelTypeLocalDesc": "Lokale poort doorsturen naar eindpunt op afstand", - "tunnelTypeRemoteDesc": "Doorsturen van externe poort naar lokale machine", - "tunnelForwardDescriptionLocal": "Deze tunnel zal verkeer van lokale poort {{sourcePort}} doorsturen naar poort {{endpointPort}} op de eindmachine.", - "tunnelForwardDescriptionRemote": "Deze tunnel zal verkeer van poort {{sourcePort}} op de bron machine doorsturen (huidige verbindingsdetails in algemene tab) naar poort {{endpointPort}} op de eindpuntmachine.", "sshpassRequired": "Sshpass vereist voor wachtwoordverificatie", "sshpassRequiredDesc": "Voor wachtwoord authenticatie in tunnels, moet sshpass op het systeem geïnstalleerd zijn.", "otherInstallMethods": "Andere installatiemethoden:", @@ -1529,7 +1551,7 @@ "splitVertical": "Verticaal splitsen", "closePanel": "Paneel sluiten", "reconnect": "Opnieuw verbinden", - "sessionEnded": "Sessie beëindigd", + "sessionEnded": "Sessie beëindigd.", "connectionLost": "Verbinding verbroken", "error": "FOUT: {{message}}", "disconnected": "Losgekoppeld", @@ -1933,22 +1955,10 @@ "ascending": "Oplopend", "descending": "Aflopend" }, - "tunnel": { - "log": { - "connecting": "tunnelverbinding aanmaken...", - "sourceConnecting": "Verbinding maken met bronhost {{host}}...", - "sourceConnected": "Verbonden met bronhost", - "endpointResolving": "Eindpunt host {{host}} oplossen...", - "endpointResolved": "Endpoint host opgelost", - "forwarding": "Instellen poort doorsturen {{localPort}} → {{remotePort}}...", - "connected": "Tunnel met succes opgericht", - "retrying": "Verbinding mislukt, opnieuw proberen in {{countdown}}s (poging {{attempt}}/{{max}})...", - "retryExhausted": "Max. aantal pogingen opnieuw proberen bereikt", - "error": "Tunnel verbinding mislukt: {{error}}" - } - }, "tunnels": { "title": "SSH tunnels", + "noTunnelsConfigured": "Geen tunnels geconfigureerd", + "configureTunnelsInHostSettings": "Configureer tunnelverbindingen in de Host Manager om te starten", "noSshTunnels": "Geen SSH tunnels", "createFirstTunnelMessage": "U heeft nog geen SSH tunnels aangemaakt. Configureer tunnelverbindingen in de Host Manager om te beginnen.", "connected": "Verbonden", @@ -1969,27 +1979,100 @@ "disconnect": "Verbreek", "cancel": "annuleren", "port": "Poort", + "localPort": "Lokale poort", + "remotePort": "Externe poort", + "currentHostPort": "Huidige host poort", + "endpointPort": "Eindpunt Poort", + "bindIp": "Lokaal IP-adres", + "currentHostIp": "Huidige Host IP", + "endpointSshConfig": "Endpoint SSH configuratie", + "endpointSshConfigRequired": "Endpoint SSH configuratie is vereist", + "endpointSshHost": "Eindpunt SSH host", + "endpointSshHostPlaceholder": "Selecteer een geconfigureerde host", + "endpointSshHostRequired": "Selecteer een SSH-host voor elke clienttunnel.", "attempt": "Poging {{current}} van {{max}}", "nextRetryIn": "Volgende herpoging in {{seconds}} seconden", "checkDockerLogs": "Controleer uw Docker logs voor de foutreden, join de", "orCreate": "of maak een ", "noTunnelConnections": "Geen tunnelverbindingen geconfigureerd", "tunnelConnections": "Tunnel verbindingen", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-beheerde tunnels die zijn opgeslagen met deze host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Clienttunnels vereisen een desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Servertunnel toevoegen", + "addClientTunnel": "Client-tunnel toevoegen", + "noServerTunnels": "Geen server tunnels geconfigureerd.", + "noClientTunnels": "Geen clienttunnels op dit bureaublad geconfigureerd.", + "manageClientTunnels": "Client-tunnels beheren", "addTunnel": "Tunnel toevoegen", "editTunnel": "Bewerk tunnel", "deleteTunnel": "Tunnel verwijderen", "tunnelName": "Tunnel naam", - "localPort": "Lokale poort", "remoteHost": "Externe host", - "remotePort": "Externe poort", "autoStart": "Automatisch starten", + "autoStartContainer": "Automatisch starten bij opstarten", + "autoStartContainerDesc": "Start deze tunnel automatisch wanneer uw Termix server start", + "autoStartEnableFailed": "Host opgeslagen, maar het starten van autostart tunnels voor {{name}} is mislukt.", + "clientAutoStartDesc": "Start wanneer deze desktopclient opent en verbonden blijft.", + "clientManualStartDesc": "Start en Stop vanaf deze rij. Termix zal het niet automatisch openen.", + "clientRemoteServerNote": "Op afstand doorschakelen kan AllowTcpForwarding en GatewayPorts vereisen op de SSH-server van het eindpunt. De externe poort sluit wanneer deze desktop verbinding verbreekt.", + "clientTunnelStarted": "Client tunnel gestart", + "clientTunnelStopped": "Clienttunnel gestopt", + "tunnelTestSucceeded": "Tunnel test geslaagd", + "tunnelTestFailed": "Tunnel test mislukt", + "localSaved": "Client tunnels opgeslagen", + "localSaveError": "Opslaan van lokale clienttunnels mislukt", + "invalidBindIp": "Lokaal IP adres moet een geldig IPv4-adres zijn.", + "invalidLocalTargetIp": "Lokaal doel IP moet een geldig IPv4-adres zijn.", + "invalidCurrentHostIp": "Huidige Host IP moet een geldig IPv4-adres zijn.", + "invalidLocalPort": "De lokale poort moet tussen 1 en 65535 liggen.", + "invalidRemotePort": "De externe poort moet tussen 1 en 65535 liggen.", + "invalidLocalTargetPort": "Lokale doelpoort moet tussen 1 en 65535 liggen.", + "invalidEndpointPort": "Eindpunt poort moet tussen 1 en 65535 liggen.", + "duplicateAutoStartBind": "Slechts één auto-start tunnel kan {{bind}} gebruiken.", + "manualControlError": "Bijwerken van tunnel status mislukt.", + "saveHostBeforeManualControl": "Sla deze host op voordat u begint of stopt met de server tunnels.", "status": "status", "active": "actief", "inactive": "Inactief", "start": "Beginnen", "stop": "Stoppen", + "test": "Test", "restart": "Herstarten", "connectionType": "Type verbinding", + "type": "Tunnel type", + "typeLocal": "Lokaal (-L)", + "typeRemote": "Afstandsbediening (-R)", + "typeDynamic": "Dynamisch (-D)", + "typeServerLocalDesc": "Huidige host tot het eindpunt.", + "typeServerRemoteDesc": "Eindig terug naar de huidige host.", + "typeClientLocalDesc": "Lokale computer tot het eindpunt.", + "typeClientRemoteDesc": "Eindpoint terug naar de lokale computer.", + "typeClientDynamicDesc": "SOCKS op lokale computer.", + "typeDynamicDesc": "SOCKS5 CONNECT-verkeer via SSH doorsturen", + "forwardDescriptionServerLocal": "Huidige host {{sourcePort}} → eindpunt {{endpointPort}}.", + "forwardDescriptionServerRemote": "Eindpunt {{endpointPort}} → huidige host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS van huidige host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Lokale {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Externe {{sourcePort}} → lokale {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS op lokale poort {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Lokale {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → lokale {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Laatst gestart", + "lastTested": "Laatst getest", + "lastError": "Laatste fout", + "maxRetries": "Maximaal aantal pogingen", + "maxRetriesDescription": "Maximale hoeveelheid opnieuw proberen te proberen.", + "retryInterval": "Interval opnieuw proberen (seconden)", + "retryIntervalDescription": "Tijd om te wachten tussen opnieuw proberen pogingen.", "local": "lokaal", "remote": "Afstandsbediening", "dynamic": "Dynamisch", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Geef uw SSH inloggegevens op om verbinding te maken met deze server.", "sshPasswordDescription": "Voer het wachtwoord in voor deze SSH verbinding.", "sshKeyPasswordDescription": "Als uw SSH sleutel is versleuteld, voer hier het wachtwoord in.", + "passphraseRequired": "Wachtwoordzin vereist", + "passphraseRequiredDescription": "De SSH sleutel is versleuteld. Voer het wachtwoord in om te ontgrendelen.", "step1ScanQR": "Stap 1: Scan de QR-code met je authenticatie-app", "manualEntryCode": "Handmatige invoercode", "cannotScanQRText": "Als u de QR-code niet kunt scannen, vul deze code dan handmatig in in uw authenticatie-app", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Wachtwoord resetten voltooien mislukt", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "OIDC login starten mislukt", - "failedUserInfo": "Fout bij het ophalen van gebruikersinformatie na OIDC login", + "failedUserInfo": "Fout bij het ophalen van gebruikersinformatie na het inloggen", "oidcAuthFailed": "OIDC authenticatie mislukt", "noTokenReceived": "Geen token ontvangen van login", "invalidAuthUrl": "Ongeldige autorisatie URL ontvangen van de backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Toon tags onder elke host in de zijbalk. Uitschakelen om alle tags te verbergen.", "account": "Rekening", "appearance": "Uiterlijk", + "c2sTunnelConfigDesc": "Lokale desktoptunnels gericht op geconfigureerde SSH hosts.", + "c2sTunnelPresets": "Voorinstellingen voor klanttunnel", + "c2sTunnelPresetsDesc": "Sla de lokale tunnellijst van deze desktop cliënt op als een voorkeursinstelling met naam server of laad een voorinstelling terug naar deze client.", + "c2sTunnelPresetsUnavailable": "Client tunnelvoorinstellingen zijn alleen beschikbaar in de desktop client.", + "c2sPresetName": "Naam voorinstelling", + "c2sPresetNamePlaceholder": "Naam van voorinstelling klant", + "c2sPresetToLoad": "Voorinstelling om te laden", + "c2sNoPresetSelected": "Geen voorinstelling geselecteerd", + "c2sNoPresets": "Geen voorinstellingen opgeslagen", + "c2sLoadPreset": "Belasting", + "c2sCurrentLocalConfig": "{{count}} lokale clienttunnel(s) geconfigureerd op dit bureaublad.", + "c2sPresetSyncNote": "Voorkeursinstellingen zijn expliciete momentopnamen, het laden van deze desktop cliënt tunnellijst vervangt.", + "c2sPresetSaved": "Client tunnel voorinstelling opgeslagen", + "c2sPresetLoaded": "Client tunnel voorinstelling lokaal geladen", + "c2sPresetRenamed": "Klant tunnel voorinstelling hernoemd", + "c2sPresetDeleted": "Client tunnel voorinstelling verwijderd", + "c2sPresetLoadError": "Fout bij het laden van de clienttunnel voorinstellingen", "languageLocalization": "Taal & Lokalisatie", "fileManagerSettings": "Bestands Beheer", "terminalSettings": "Terminal", @@ -2370,6 +2472,10 @@ "description": "SSH referentiebeschrijving", "searchCredentials": "Inloggegevens zoeken op naam, gebruikersnaam of tags...", "sshConfig": "eindpunt ssh configuratie", + "bindLocalhost": "127.0.1 (verbonden met localhost)", + "localListenerHost": "127.0.1 (lokaal beluisteren)", + "localTargetHost": "127.0.1 (doel op deze computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/home", "clientId": "jouw-client-id", "clientSecret": "jouw-client-secret", @@ -2549,6 +2655,7 @@ "version": "Versie", "upToDate": "Tot op heden", "updateAvailable": "Update beschikbaar", + "beta": "Bèta", "uptime": "Actief", "database": "Database", "healthy": "Gezond", @@ -2955,6 +3062,20 @@ "error": "Metrics collectie mislukt: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "tunnelverbinding aanmaken...", + "sourceConnecting": "Verbinding maken met bronhost {{host}}...", + "sourceConnected": "Verbonden met bronhost", + "endpointResolving": "Eindpunt host {{host}} oplossen...", + "endpointResolved": "Endpoint host opgelost", + "forwarding": "Instellen poort doorsturen {{localPort}} → {{remotePort}}...", + "connected": "Tunnel met succes opgericht", + "retrying": "Verbinding mislukt, opnieuw proberen in {{countdown}}s (poging {{attempt}}/{{max}})...", + "retryExhausted": "Max. aantal pogingen opnieuw proberen bereikt", + "error": "Tunnel verbinding mislukt: {{error}}" + } + }, "sftp": { "log": { "connecting": "Verbinden met SFTP-server...", diff --git a/src/locales/translated/no_NO.json b/src/locales/translated/no_NO.json index 832c9887..a65c9f54 100644 --- a/src/locales/translated/no_NO.json +++ b/src/locales/translated/no_NO.json @@ -402,6 +402,8 @@ "currentVersion": "Du kjører versjon {{version}}", "updateAvailable": "Oppdatering tilgjengelig", "newVersionAvailable": "En ny versjon er tilgjengelig! Du kjører {{current}}, men {{latest}} er tilgjengelig.", + "betaVersion": "Beta versjon", + "betaVersionDesc": "Du kjører {{current}}, som er nyere enn den nyeste stabile utgivelsen {{latest}}.", "releasedOn": "Utgitt {{date}}", "downloadUpdate": "Last ned oppdatering", "dismiss": "Avvis", @@ -426,6 +428,8 @@ "warning": "Advarsel", "info": "Informasjon", "success": "Suksess", + "unsavedChanges": "Ulagrede endringer", + "dismiss": "Avvis", "loading": "Laster...", "required": "Påkrevd", "optional": "Valgfritt", @@ -471,6 +475,7 @@ "chinese": "Kinesisk", "german": "Tysk", "cancel": "Avbryt", + "done": "Ferdig", "username": "Brukernavn", "name": "Navn", "login": "Logg inn", @@ -486,6 +491,7 @@ "save": "Lagre", "saving": "Lagrer...", "delete": "Slett", + "rename": "Omdøp", "edit": "Rediger", "add": "Legg til", "search": "Søk", @@ -559,7 +565,8 @@ "passwordCopied": "Passordet er kopiert til utklippstavlen", "sudoPasswordCopied": "Sudo-passordet ble kopiert til utklippstavlen", "noPasswordAvailable": "Ingen passord tilgjengelig", - "failedToCopyPassword": "Kopiering av passord feilet" + "failedToCopyPassword": "Kopiering av passord feilet", + "openFileManager": "Åpne filbehandler" }, "admin": { "title": "Administratorinnstillinger", @@ -868,7 +875,42 @@ "passwordMinLength": "Passord må bestå av minst 6 tegn", "currentRoles": "Gjeldende roller", "noRolesAssigned": "Ingen roller tildelt", - "assignNewRole": "Tilordne ny rolle" + "assignNewRole": "Tilordne ny rolle", + "apiKeys": { + "tabLabel": "API nøkler", + "title": "API nøkler", + "createApiKey": "Opprett API-nøkkel", + "createApiKeyDescription": "Opprett en ny API-nøkkel scopet til en bestemt bruker. Tokenet vises kun én gang.", + "keyCreated": "API-nøkkel opprettet", + "keyCreatedDescription": "Kopier nøkkelen nå – den vil ikke bli vist igjen.", + "keyName": "Nøkkelens navn", + "keyNamePlaceholder": "f.eks CI/CD Pipeline", + "scopedUser": "Kopiert bruker", + "selectUser": "Velg en bruker...", + "searchUsers": "Søk etter brukere...", + "noUsersFound": "Ingen brukere funnet.", + "expiresAt": "Utløper ved", + "optional": "valgfritt", + "expiresAtHelp": "La stå tom for en nøkkel som aldri utløper.", + "copyWarningTitle": "Lagre API-nøkkel", + "copyWarningDescription": "Denne nøkkelen vil bare bli vist en gang. Lagre den på et trygt sted.", + "apiKey": "API-nøkkel (Automatic Translation)", + "tokenCopied": "Token kopiert til utklippstavlen", + "creating": "Oppretter...", + "nameRequired": "Nøkkelnavn er påkrevd", + "userRequired": "Vennligst velg en bruker", + "failedToCreate": "Kunne ikke opprette API-nøkkel", + "noKeys": "Ingen API-nøkler funnet.", + "name": "Navn", + "prefix": "Prefiks", + "lastUsed": "Sist brukt", + "never": "Aldri", + "revokeKey": "Fjern nøkkel", + "confirmRevoke": "Er du sikker på at du vil tilbakekalle API-nøkkel \"{{name}}\"? Dette kan ikke angres.", + "revokedSuccessfully": "API-nøkkelen er trukket tilbake", + "failedToRevoke": "Kan ikke tilbakekalle API-nøkkel", + "failedToFetch": "Kan ikke hente API-nøkler" + } }, "hosts": { "title": "Vertadministrator", @@ -962,28 +1004,8 @@ "enableDocker": "Aktiver Docker", "defaultPath": "Standardsti", "defaultPathDesc": "Standardkatalog når filbehandleren åpnes for denne verten", - "tunnelConnections": "Tunneltilkoblinger", "connection": "Tilkobling", "remove": "Fjern", - "sourcePort": "Kildeport", - "sourcePortDesc": " (Kilde refererer til gjeldende tilkoblingsdetaljer i fanen Generelt)", - "endpointPort": "Endepunktport", - "endpointSshConfig": "Endepunkt-SSH-konfigurasjon", - "tunnelForwardDescription": "Denne tunnelen videresender trafikk fra port {{sourcePort}} på kilde-maskinen (gjeldende tilkoblingsdetaljer i fanen Generelt) til port {{endpointPort}} på endepunktmaskinen.", - "maxRetries": "Maks forsøk", - "maxRetriesDescription": "Maksimalt antall forsøk på å gjenopprette tunneltilkoblingen.", - "retryInterval": "Intervall mellom forsøk (sekunder)", - "retryIntervalDescription": "Tid som ventes mellom tilkoblingsforsøk.", - "autoStartContainer": "Autostart ved containeroppstart", - "autoStartDesc": "Start denne tunnelen automatisk når containeren starter", - "addConnection": "Legg til tunneltilkobling", - "tunnelType": "Type tunnel", - "tunnelTypeLocal": "Lokal (-L)", - "tunnelTypeRemote": "Ekstern (-R)", - "tunnelTypeLocalDesc": "Videresend lokal port til fjern endepunkt", - "tunnelTypeRemoteDesc": "Videresend ekstern port til lokal maskin", - "tunnelForwardDescriptionLocal": "Denne tunnelen vil videresende trafikk fra lokal port {{sourcePort}} til port {{endpointPort}} på sluttmaskinen.", - "tunnelForwardDescriptionRemote": "Denne tunnelen vil videresende trafikk fra port {{sourcePort}} på kildemaskinen (nåværende tilkoblingsdetaljer i generell fan) som skal port {{endpointPort}} på endepunktsmaskinen.", "sshpassRequired": "sshpass kreves for passordautentisering", "sshpassRequiredDesc": "For passordautentisering i tunneler må sshpass være installert på systemet.", "otherInstallMethods": "Andre installasjonsmetoder:", @@ -1529,7 +1551,7 @@ "splitVertical": "Del vertikalt", "closePanel": "Lukk panel", "reconnect": "Koble til på nytt", - "sessionEnded": "Økt avsluttet", + "sessionEnded": "Sesjonen ble avsluttet.", "connectionLost": "Tilkobling mistet", "error": "FEIL: {{message}}", "disconnected": "Frakoblet", @@ -1933,22 +1955,10 @@ "ascending": "Stigende", "descending": "Synkende" }, - "tunnel": { - "log": { - "connecting": "Etablerer tunnel tilkobling...", - "sourceConnecting": "Kobler til kildevert {{host}}...", - "sourceConnected": "Koblet til kildevert", - "endpointResolving": "Løser endepunkt verten {{host}}...", - "endpointResolved": "Endepunktvert løst", - "forwarding": "Setter opp port videresending av {{localPort}} → {{remotePort}}...", - "connected": "Tunnel ble vellykket opprettet", - "retrying": "Tilkoblingen mislyktes, prøver på nytt i {{countdown}}s (forsøk på {{attempt}}/{{max}})...", - "retryExhausted": "Maksimalt antall forsøk nådd", - "error": "Tunnel tilkobling feilet: {{error}}" - } - }, "tunnels": { "title": "SSH-tunneler", + "noTunnelsConfigured": "Ingen tunnelels konfigurert", + "configureTunnelsInHostSettings": "Konfigurer tunnelforbindelser i Host Manager for å komme i gang", "noSshTunnels": "Ingen SSH-tunneler", "createFirstTunnelMessage": "Du har ikke opprettet noen SSH-tunneler ennå. Konfigurer tunneltilkoblinger i Vertadministrator for å komme i gang.", "connected": "Tilkoblet", @@ -1969,27 +1979,100 @@ "disconnect": "Koble fra", "cancel": "Avbryt", "port": "Port", + "localPort": "Lokal port", + "remotePort": "Fjernport", + "currentHostPort": "Gjeldende Vert Port", + "endpointPort": "Endepunkt port", + "bindIp": "Lokal IP", + "currentHostIp": "Nåværende Verts-IP", + "endpointSshConfig": "Endepunkt SSH konfigurasjon", + "endpointSshConfigRequired": "Endepunkt SSH-konfigurasjon er påkrevd", + "endpointSshHost": "Endepunkt SSH vert", + "endpointSshHostPlaceholder": "Velg en konfigurert vert", + "endpointSshHostRequired": "Velg en endepunkt SSH-vert for hver klienttunnel.", "attempt": "Forsøk {{current}} av {{max}}", "nextRetryIn": "Neste forsøk om {{seconds}} sekunder", "checkDockerLogs": "Sjekk Docker-loggene dine for feilen, bli med i", "orCreate": "eller opprette en ", "noTunnelConnections": "Ingen tunneltilkoblinger konfigurert", "tunnelConnections": "Tunneltilkoblinger", + "serverTunnels": "Server Tunneler", + "serverTunnelsDesc": "Bakoverstyrte tunneler lagret med denne verten.", + "clientTunnels": "Klient tunneler", + "clientTunnelsUnavailable": "Klienttunneler krever en stasjonær klient.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Klient tunnel", + "addServerTunnel": "Legg til servertunnel", + "addClientTunnel": "Legg til klienttunnel", + "noServerTunnels": "Ingen server tunneler konfigurert.", + "noClientTunnels": "Ingen klienttunneler konfigurert på denne datamaskinen.", + "manageClientTunnels": "Behandle klient tunneler", "addTunnel": "Legg til tunnel", "editTunnel": "Rediger tunnel", "deleteTunnel": "Slett tunnel", "tunnelName": "Tunnelnavn", - "localPort": "Lokal port", "remoteHost": "Fjernvert", - "remotePort": "Fjernport", "autoStart": "Autostart", + "autoStartContainer": "Start automatisk ved oppstart", + "autoStartContainerDesc": "Start denne tunnelen automatisk når din Termix server lanseres.", + "autoStartEnableFailed": "Vert lagret, men klarte ikke å starte automatisk tunneler for {{name}}.", + "clientAutoStartDesc": "Starter når denne skrivebordsklienten åpner og forblir tilkoblet.", + "clientManualStartDesc": "Bruk start og stopp fra denne raden. Termix vil ikke åpne den automatisk.", + "clientRemoteServerNote": "Ekstern videresending kan kreve Tillatt TcpForwarding og GatewayPorts når endepunktet SSH-tjener avsluttes. Den eksterne porten lukkes når denne skrivebordet kobles fra.", + "clientTunnelStarted": "Klienttunnel startet", + "clientTunnelStopped": "Klienttunnel stoppet", + "tunnelTestSucceeded": "Tunnelsetest lyktes", + "tunnelTestFailed": "Tunneltesten mislyktes", + "localSaved": "Klienttunneler lagret", + "localSaveError": "Klarte ikke å lagre lokale klienttunneler", + "invalidBindIp": "Lokal IP må være en gyldig IPv4-adresse.", + "invalidLocalTargetIp": "Lokal mål-IP må være en gyldig IPv4-adresse.", + "invalidCurrentHostIp": "Gjeldende verts-IP må være en gyldig IPv4-adresse.", + "invalidLocalPort": "Lokal port må være mellom 1 og 65535.", + "invalidRemotePort": "Ekstern port må være mellom 1 og 65535.", + "invalidLocalTargetPort": "Lokal målport må være mellom 1 og 65535.", + "invalidEndpointPort": "Endepunktsporten må være mellom 1 og 65535.", + "duplicateAutoStartBind": "Bare én automatisk start klienttunnel kan bruke {{bind}}.", + "manualControlError": "Kunne ikke oppdatere tunneltilstand.", + "saveHostBeforeManualControl": "Lagre denne verten før du starter eller stopper servertunnelene.", "status": "Status:", "active": "Aktiv", "inactive": "Inaktiv", "start": "Begynn", "stop": "Stopp", + "test": "Prøve", "restart": "Start på nytt", "connectionType": "Tilkoblingstype", + "type": "Type tunnel", + "typeLocal": "Lokal (-L)", + "typeRemote": "Ekstern (-R)", + "typeDynamic": "Dynamisk (-D)", + "typeServerLocalDesc": "Nåværende vert til slutt.", + "typeServerRemoteDesc": "Endepunkt tilbake til gjeldende vert.", + "typeClientLocalDesc": "Lokal datamaskin til endepunkt.", + "typeClientRemoteDesc": "Sluttpunkt tilbake til lokal datamaskin.", + "typeClientDynamicDesc": "SOCKS på lokal datamaskin.", + "typeDynamicDesc": "Videresend SOCKS5 CONNECT trafikk gjennom SSH", + "forwardDescriptionServerLocal": "Nåværende vert {{sourcePort}} → endepunkt {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endepunkt {{endpointPort}} → gjeldende vert {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS på gjeldende vert {{sourcePort}}.", + "forwardDescriptionClientLocal": "Lokal {{sourcePort}} → ekstern {{endpointPort}}.", + "forwardDescriptionClientRemote": "Ekstern {{sourcePort}} → lokal {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS på lokal port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Lokalt {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → lokale {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Rute:", + "lastStarted": "Sist startet", + "lastTested": "Sist testet", + "lastError": "Siste feil", + "maxRetries": "Maks antall forsøk", + "maxRetriesDescription": "Maksimum antall forsøk på nytt.", + "retryInterval": "Gjenværende intervall (sekunder)", + "retryIntervalDescription": "Tid å vente mellom forsøk på nytt.", "local": "Lokal", "remote": "Fjern", "dynamic": "Dynamisk", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Oppgi SSH-legitimasjonen din for å koble til denne serveren.", "sshPasswordDescription": "Skriv inn passordet for denne SSH-tilkoblingen.", "sshKeyPasswordDescription": "Hvis SSH-nøkkelen er kryptert, skriv inn passordfrasen her.", + "passphraseRequired": "Passfrase kreves", + "passphraseRequiredDescription": "SSH-nøkkelen er kryptert. Skriv inn adgangskoden for å låse opp den.", "step1ScanQR": "Trinn 1: Skann QR-koden med autentiseringsappen", "manualEntryCode": "Kode for manuell inntasting", "cannotScanQRText": "Hvis du ikke kan skanne QR-koden, skriv inn denne koden i autentiseringsappen", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Kunne ikke fullføre passordtilbakestilling", "invalidTotpCode": "Ugyldig TOTP-kode", "failedOidcLogin": "Kunne ikke starte OIDC-innlogging", - "failedUserInfo": "Kunne ikke hente brukerinfo etter OIDC-innlogging", + "failedUserInfo": "Klarte ikke å hente brukerinformasjon etter innlogging", "oidcAuthFailed": "OIDC-autentisering mislyktes", "noTokenReceived": "Mottok ingen token fra innlogging", "invalidAuthUrl": "Ugyldig autorisasjons-URL mottatt fra backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Vis etiketter under hver vert i sidestolpen. Deaktiver for å skjule alle tagger.", "account": "Konto", "appearance": "Utseende", + "c2sTunnelConfigDesc": "Lokalt skrivebordtunneler som har målrettinger mot SSH-verter.", + "c2sTunnelPresets": "Forhåndsinnstillinger for klienttunnel", + "c2sTunnelPresetsDesc": "Lagre denne stasjonære klientens lokale tunnelliste som en navngitt server forhåndsinnstilling, eller last en forhåndsinnstilling tilbake i denne klienten.", + "c2sTunnelPresetsUnavailable": "Forhåndsinnstillinger for klienter er bare tilgjengelig på skrivebordsklienten.", + "c2sPresetName": "Forhåndsinnstilt navn", + "c2sPresetNamePlaceholder": "Klientens forhåndsinnstillingsnavn", + "c2sPresetToLoad": "Forhåndsinnstilling til lasting", + "c2sNoPresetSelected": "Ingen forhåndsinnstilling valgt", + "c2sNoPresets": "Ingen forhåndsinnstillinger er lagret", + "c2sLoadPreset": "Last", + "c2sCurrentLocalConfig": "{{count}} lokale klient tunnel(er) konfigurert på denne skrivebordet.", + "c2sPresetSyncNote": "Forhåndsinstillinger er eksplisitte øyeblikksbilder; lasting én erstatter denne stasjonære klientens lokale klient tunnel liste.", + "c2sPresetSaved": "Klienttunnel forhåndsinnstilling lagret", + "c2sPresetLoaded": "Forhåndsinnstilling for klient lastet lokalt", + "c2sPresetRenamed": "Klienttunnel forhåndsinnstilling endret navn", + "c2sPresetDeleted": "Klienttunnel forhåndsinnstilling slettet", + "c2sPresetLoadError": "Kunne ikke laste klienttunnelen forhåndsinnstillinger", "languageLocalization": "Språk og lokalisering", "fileManagerSettings": "Fil Behandler", "terminalSettings": "Terminal", @@ -2370,6 +2472,10 @@ "description": "Beskrivelse av SSH-legitimasjon", "searchCredentials": "Søk i legitimasjon etter navn, brukernavn eller tagger...", "sshConfig": "sluttpunkt-ssh-konfigurasjon", + "bindLocalhost": "127.0.0.1 (binder til localhost)", + "localListenerHost": "127.0.0.1 (lytt lokalt)", + "localTargetHost": "127.0.0.1 (mål på denne maskinen)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/hjem", "clientId": "din-klient-id", "clientSecret": "din-klient-hemmelighet", @@ -2549,6 +2655,7 @@ "version": "Versjon", "upToDate": "Oppdatert", "updateAvailable": "Oppdatering tilgjengelig", + "beta": "beta", "uptime": "Oppetid", "database": "Databasen", "healthy": "Frisk", @@ -2955,6 +3062,20 @@ "error": "Beregninger samlingen mislyktes: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Etablerer tunnel tilkobling...", + "sourceConnecting": "Kobler til kildevert {{host}}...", + "sourceConnected": "Koblet til kildevert", + "endpointResolving": "Løser endepunkt verten {{host}}...", + "endpointResolved": "Endepunktvert løst", + "forwarding": "Setter opp port videresending av {{localPort}} → {{remotePort}}...", + "connected": "Tunnel ble vellykket opprettet", + "retrying": "Tilkoblingen mislyktes, prøver på nytt i {{countdown}}s (forsøk på {{attempt}}/{{max}})...", + "retryExhausted": "Maksimalt antall forsøk nådd", + "error": "Tunnel tilkobling feilet: {{error}}" + } + }, "sftp": { "log": { "connecting": "Kobler til SFTP server...", diff --git a/src/locales/translated/pl_PL.json b/src/locales/translated/pl_PL.json index 3dd9bbc6..d12a52a9 100644 --- a/src/locales/translated/pl_PL.json +++ b/src/locales/translated/pl_PL.json @@ -402,6 +402,8 @@ "currentVersion": "Używasz wersji {{version}}", "updateAvailable": "Dostępna aktualizacja", "newVersionAvailable": "Dostępna jest nowa wersja! Używasz {{current}}, ale {{latest}} jest dostępny.", + "betaVersion": "Wersja beta", + "betaVersionDesc": "Używasz {{current}}, który jest nowszy niż najnowsze stabilne wydanie {{latest}}.", "releasedOn": "Wydano dnia {{date}}", "downloadUpdate": "Pobierz aktualizację", "dismiss": "Odrzuć", @@ -426,6 +428,8 @@ "warning": "Ostrzeżenie", "info": "Informacje", "success": "Sukces", + "unsavedChanges": "Niezapisane zmiany", + "dismiss": "Odrzuć", "loading": "Ładowanie...", "required": "Wymagane", "optional": "Opcjonalnie", @@ -471,6 +475,7 @@ "chinese": "Chiński", "german": "niemiecki", "cancel": "Anuluj", + "done": "Gotowe", "username": "Nazwa użytkownika", "name": "Nazwisko", "login": "Logowanie", @@ -486,6 +491,7 @@ "save": "Zapisz", "saving": "Zapisywanie...", "delete": "Usuń", + "rename": "Zmień nazwę", "edit": "Edytuj", "add": "Dodaj", "search": "Szukaj", @@ -559,7 +565,8 @@ "passwordCopied": "Hasło skopiowane do schowka", "sudoPasswordCopied": "Hasło Sudo skopiowane do schowka", "noPasswordAvailable": "Hasło nie jest dostępne", - "failedToCopyPassword": "Nie udało się skopiować hasła" + "failedToCopyPassword": "Nie udało się skopiować hasła", + "openFileManager": "Otwórz menedżera plików" }, "admin": { "title": "Ustawienia administratora", @@ -868,7 +875,42 @@ "passwordMinLength": "Hasło musi mieć co najmniej 6 znaków", "currentRoles": "Bieżące role", "noRolesAssigned": "Brak przypisanych ról", - "assignNewRole": "Przypisz nową rolę" + "assignNewRole": "Przypisz nową rolę", + "apiKeys": { + "tabLabel": "Klucze API", + "title": "Klucze API", + "createApiKey": "Utwórz klucz API", + "createApiKeyDescription": "Utwórz nowy klucz API dla konkretnego użytkownika. Token jest wyświetlany tylko raz.", + "keyCreated": "Klucz API utworzony", + "keyCreatedDescription": "Skopiuj ten klucz teraz - nie będzie on ponownie wyświetlany.", + "keyName": "Nazwa klucza", + "keyNamePlaceholder": "np. rurociąg CI/CD", + "scopedUser": "Skopiowany użytkownik", + "selectUser": "Wybierz użytkownika...", + "searchUsers": "Szukaj użytkowników...", + "noUsersFound": "Nie znaleziono użytkowników.", + "expiresAt": "Wygasa", + "optional": "fakultatywne", + "expiresAtHelp": "Pozostaw puste dla klucza, który nigdy nie wygasa.", + "copyWarningTitle": "Zapisz swój klucz API", + "copyWarningDescription": "Ten klucz zostanie wyświetlony tylko raz. Przechowuj go w bezpiecznym miejscu.", + "apiKey": "Klucz API", + "tokenCopied": "Token skopiowany do schowka", + "creating": "Tworzenie...", + "nameRequired": "Nazwa klucza jest wymagana", + "userRequired": "Wybierz użytkownika", + "failedToCreate": "Nie udało się utworzyć klucza API", + "noKeys": "Nie znaleziono kluczy API.", + "name": "Nazwisko", + "prefix": "Prefiks", + "lastUsed": "Ostatnio używane", + "never": "Nigdy", + "revokeKey": "Unieważnij klucz", + "confirmRevoke": "Czy na pewno chcesz cofnąć klucz API \"{{name}}\"? Tej operacji nie można cofnąć.", + "revokedSuccessfully": "Klucz API odwołany pomyślnie", + "failedToRevoke": "Nie udało się odwołać klucza API", + "failedToFetch": "Nie udało się pobrać kluczy API" + } }, "hosts": { "title": "Host Manager", @@ -962,28 +1004,8 @@ "enableDocker": "Włącz Docker", "defaultPath": "Domyślna ścieżka", "defaultPathDesc": "Domyślny katalog podczas otwierania menedżera plików dla tego hosta", - "tunnelConnections": "Połączenia tunelu", "connection": "Połączenie", "remove": "Usuń", - "sourcePort": "Port źródłowy", - "sourcePortDesc": " (Źródło odnosi się do bieżących danych połączenia w karcie ogólnej)", - "endpointPort": "Port punktu końcowego", - "endpointSshConfig": "Konfiguracja SSH punktu końcowego", - "tunnelForwardDescription": "Ten tunel przeniesie ruch z portu {{sourcePort}} na maszynie źródłowej (bieżące szczegóły połączenia w zakładce) do portu {{endpointPort}} na maszynie punktu końcowego.", - "maxRetries": "Maksymalna liczba prób", - "maxRetriesDescription": "Maksymalna liczba powtórzeń prób połączenia tunelu.", - "retryInterval": "Powtórz interwał (w sekundach)", - "retryIntervalDescription": "Czas oczekiwania pomiędzy ponownymi próbami.", - "autoStartContainer": "Automatyczne uruchamianie przy uruchomieniu kontenera", - "autoStartDesc": "Automatycznie uruchom ten tunel po uruchomieniu kontenera", - "addConnection": "Dodaj połączenie tunelu", - "tunnelType": "Typ tunelu", - "tunnelTypeLocal": "Lokalna (-L)", - "tunnelTypeRemote": "Zdalny (-R)", - "tunnelTypeLocalDesc": "Przekieruj port lokalny do zdalnego punktu końcowego", - "tunnelTypeRemoteDesc": "Przekieruj zdalny port do lokalnej maszyny", - "tunnelForwardDescriptionLocal": "Ten tunel przeniesie ruch z lokalnego portu {{sourcePort}} do portu {{endpointPort}} na maszynie punktu końcowego.", - "tunnelForwardDescriptionRemote": "Ten tunel przeniesie ruch z portu {{sourcePort}} na maszynie źródłowej (bieżące szczegóły połączenia w zakładce) do portu {{endpointPort}} na maszynie punktu końcowego.", "sshpassRequired": "Sshpass wymagany do uwierzytelniania hasła", "sshpassRequiredDesc": "Dla uwierzytelniania hasła w tunelach sshpass musi być zainstalowany w systemie.", "otherInstallMethods": "Inne metody instalacji:", @@ -1529,7 +1551,7 @@ "splitVertical": "Podziel pionowo", "closePanel": "Zamknij panel", "reconnect": "Połącz ponownie", - "sessionEnded": "Sesja zakończona", + "sessionEnded": "Sesja zakończona.", "connectionLost": "Utracono połączenie", "error": "BŁĄD: {{message}}", "disconnected": "Rozłączony", @@ -1933,22 +1955,10 @@ "ascending": "Rosnąco", "descending": "Malejąco" }, - "tunnel": { - "log": { - "connecting": "Tworzenie połączenia z tunelem...", - "sourceConnecting": "Łączenie z hostem źródłowym {{host}}...", - "sourceConnected": "Połączono z hostem źródłowym", - "endpointResolving": "Rozwiązywanie hosta punktu końcowego {{host}}...", - "endpointResolved": "Serwer punktu końcowego rozwiązany", - "forwarding": "Konfigurowanie portu przekierowywającego {{localPort}} → {{remotePort}}...", - "connected": "Tunel utworzony pomyślnie", - "retrying": "Połączenie nie powiodło się, ponawianie próby w {{countdown}}s (próba {{attempt}}/{{max}})...", - "retryExhausted": "Osiągnięto maksymalną liczbę prób powtórzenia", - "error": "Połączenie tunelu nie powiodło się: {{error}}" - } - }, "tunnels": { "title": "Tunele SSH", + "noTunnelsConfigured": "Brak skonfigurowanych tuneli", + "configureTunnelsInHostSettings": "Skonfiguruj połączenia tuneli w Menedżerze hostów, aby rozpocząć", "noSshTunnels": "Brak tuneli SSH", "createFirstTunnelMessage": "Nie utworzyłeś jeszcze żadnych tuneli SSH. Skonfiguruj połączenia tuneli w Host Manager, aby rozpocząć.", "connected": "Połączono", @@ -1969,27 +1979,100 @@ "disconnect": "Rozłącz", "cancel": "Anuluj", "port": "Port", + "localPort": "Port lokalny", + "remotePort": "Port zdalny", + "currentHostPort": "Bieżący port hosta", + "endpointPort": "Port punktu końcowego", + "bindIp": "Lokalny adres IP", + "currentHostIp": "Aktualny adres IP hosta", + "endpointSshConfig": "Konfiguracja SSH punktu końcowego", + "endpointSshConfigRequired": "Konfiguracja SSH punktu końcowego jest wymagana", + "endpointSshHost": "Host SSH punktu końcowego", + "endpointSshHostPlaceholder": "Wybierz skonfigurowany host", + "endpointSshHostRequired": "Wybierz host SSH punktu końcowego dla każdego tunelu klienta.", "attempt": "Próba {{current}} dla {{max}}", "nextRetryIn": "Następna próba za {{seconds}} sekund", "checkDockerLogs": "Sprawdź swoje dzienniki Dockera z powodu błędu, dołącz do", "orCreate": "lub utwórz ", "noTunnelConnections": "Brak skonfigurowanych połączeń z tunelem", "tunnelConnections": "Połączenia tunelu", + "serverTunnels": "Tunele serwera", + "serverTunnelsDesc": "Tunele zarządzane wstecz przechowywane z tym hostem.", + "clientTunnels": "Tunele klienta", + "clientTunnelsUnavailable": "Tunele klienta wymagają klienta pulpitu.", + "serverTunnel": "Tunel serwera", + "clientTunnel": "Tunel klienta", + "addServerTunnel": "Dodaj Tunel Serwera", + "addClientTunnel": "Dodaj Tunel Klienta", + "noServerTunnels": "Nie skonfigurowano tuneli serwera.", + "noClientTunnels": "Nie skonfigurowano tuneli klienckich na tym komputerze.", + "manageClientTunnels": "Zarządzaj tunelami klienta", "addTunnel": "Dodaj Tunel", "editTunnel": "Edytuj Tunel", "deleteTunnel": "Usuń tunel", "tunnelName": "Nazwa tunelu", - "localPort": "Port lokalny", "remoteHost": "Zdalny host", - "remotePort": "Port zdalny", "autoStart": "Automatyczne uruchamianie", + "autoStartContainer": "Automatyczne uruchamianie przy uruchomieniu", + "autoStartContainerDesc": "Automatycznie uruchom ten tunel po uruchomieniu serwera Termix.", + "autoStartEnableFailed": "Host zapisany, ale nie udało się uruchomić automatycznie uruchamianych tuneli dla {{name}}.", + "clientAutoStartDesc": "Rozpoczyna się, gdy ten klient na pulpicie otworzy się i zostanie połączony.", + "clientManualStartDesc": "Użyj startu i zatrzymania z tego wiersza. Termiks nie otworzy się automatycznie.", + "clientRemoteServerNote": "Przekazywanie zdalne może wymagać AllowTcpForwarding i GatewayPorts na serwerze SSH punktu końcowego. Zdalny port zamyka się po rozłączeniu tego pulpitu.", + "clientTunnelStarted": "Tunel klienta rozpoczęty", + "clientTunnelStopped": "Tunel klienta zatrzymany", + "tunnelTestSucceeded": "Test tunelu zakończony sukcesem", + "tunnelTestFailed": "Test tunelu nie powiódł się", + "localSaved": "Tunele klienta zapisane", + "localSaveError": "Nie udało się zapisać lokalnych tuneli klienta", + "invalidBindIp": "Lokalny adres IP musi być prawidłowym adresem IPv4.", + "invalidLocalTargetIp": "Lokalny docelowy adres IP musi być prawidłowym adresem IPv4.", + "invalidCurrentHostIp": "Bieżący adres IP hosta musi być prawidłowym adresem IPv4.", + "invalidLocalPort": "Port lokalny musi mieć od 1 do 65535.", + "invalidRemotePort": "Zdalny port musi być pomiędzy 1 a 65535.", + "invalidLocalTargetPort": "Lokalny port docelowy musi znajdować się w przedziale od 1 do 65535.", + "invalidEndpointPort": "Port punktu końcowego musi być pomiędzy 1 a 65535.", + "duplicateAutoStartBind": "Tylko jeden tunel klienta automatycznego startu może użyć {{bind}}.", + "manualControlError": "Nie udało się zaktualizować stanu tunelu.", + "saveHostBeforeManualControl": "Zapisz ten host przed uruchomieniem lub zatrzymaniem tuneli serwera.", "status": "Status", "active": "Aktywne", "inactive": "Nieaktywny", "start": "Rozpocznij", "stop": "Zatrzymaj", + "test": "Badanie", "restart": "Uruchom ponownie", "connectionType": "Typ połączenia", + "type": "Typ tunelu", + "typeLocal": "Lokalna (-L)", + "typeRemote": "Zdalny (-R)", + "typeDynamic": "Dynamiczne (-D)", + "typeServerLocalDesc": "Bieżący host do punktu końcowego.", + "typeServerRemoteDesc": "Końcowy punkt wstecz do bieżącego hosta.", + "typeClientLocalDesc": "Lokalny komputer do punktu końcowego.", + "typeClientRemoteDesc": "Punkt końcowy z powrotem do komputera lokalnego.", + "typeClientDynamicDesc": "SOCKS na komputerze lokalnym.", + "typeDynamicDesc": "Przekaż ruch SOCKS5 CONNECT przez SSH", + "forwardDescriptionServerLocal": "Bieżący host {{sourcePort}} → punkt końcowy {{endpointPort}}.", + "forwardDescriptionServerRemote": "Punkt końcowy {{endpointPort}} → bieżący host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS dla bieżącego hosta {{sourcePort}}.", + "forwardDescriptionClientLocal": "Lokalny {{sourcePort}} → zdalny {{endpointPort}}.", + "forwardDescriptionClientRemote": "Zdalny {{sourcePort}} → lokalny {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS na lokalnym porcie {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS przez {{endpoint}}", + "autoNameClientLocal": "Lokalny {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → lokalny {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} przez {{endpoint}}", + "route": "Droga:", + "lastStarted": "Ostatnio uruchomione", + "lastTested": "Ostatnio testowane", + "lastError": "Ostatni błąd", + "maxRetries": "Maksymalna liczba prób", + "maxRetriesDescription": "Maksymalna ilość powtórzeń próby.", + "retryInterval": "Powtórz interwał (w sekundach)", + "retryIntervalDescription": "Czas oczekiwania pomiędzy ponownymi próbami.", "local": "Lokalny", "remote": "Zdalny", "dynamic": "Dynamiczny", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Podaj swoje poświadczenia SSH aby połączyć się z tym serwerem.", "sshPasswordDescription": "Wprowadź hasło dla tego połączenia SSH.", "sshKeyPasswordDescription": "Jeśli twój klucz SSH jest zaszyfrowany, wprowadź hasło tutaj.", + "passphraseRequired": "Wymagane hasło", + "passphraseRequiredDescription": "Klucz SSH jest zaszyfrowany. Wprowadź hasło, aby go odblokować.", "step1ScanQR": "Krok 1: Zeskanuj kod QR za pomocą aplikacji uwierzytelniającej", "manualEntryCode": "Ręczny kod wpisu", "cannotScanQRText": "Jeśli nie możesz zeskanować kodu QR, wprowadź ten kod ręcznie w aplikacji uwierzytelniającej", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Nie udało się zakończyć resetowania hasła", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Nie udało się uruchomić logowania OIDC", - "failedUserInfo": "Nie udało się uzyskać informacji o użytkowniku po logowaniu OIDC", + "failedUserInfo": "Nie udało się uzyskać informacji o użytkowniku po zalogowaniu", "oidcAuthFailed": "Uwierzytelnianie OIDC nie powiodło się", "noTokenReceived": "Nie otrzymano tokenu z logowania", "invalidAuthUrl": "Nieprawidłowy adres URL autoryzacji otrzymany z backendu", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Wyświetlaj tagi pod każdym hostem na pasku bocznym. Wyłącz, aby ukryć wszystkie tagi.", "account": "Konto", "appearance": "Wygląd", + "c2sTunnelConfigDesc": "Lokalne tunele pulpitu ukierunkowane na skonfigurowane hosty SSH.", + "c2sTunnelPresets": "Ustawienia tunelu klienta", + "c2sTunnelPresetsDesc": "Zapisz lokalną listę tuneli tego klienta jako ustawienie serwera lub załaduj ustawienie z powrotem do tego klienta.", + "c2sTunnelPresetsUnavailable": "Ustawienia tunelu klienta są dostępne tylko w kliencie pulpitu.", + "c2sPresetName": "Nazwa ustawień wstępnych", + "c2sPresetNamePlaceholder": "Nazwa predefiniowana klienta", + "c2sPresetToLoad": "Ustawienie do załadowania", + "c2sNoPresetSelected": "Nie wybrano ustawień wstępnych", + "c2sNoPresets": "Nie zapisano ustawień wstępnych", + "c2sLoadPreset": "Załaduj", + "c2sCurrentLocalConfig": "{{count}} lokalne tunele klienta skonfigurowane na tym komputerze.", + "c2sPresetSyncNote": "Presety są wyraźnymi zrzutami migawek; ładowanie jednego zastępuje lokalną listę tuneli klienta tego komputera.", + "c2sPresetSaved": "Ustawienia tunelu klienta zapisane", + "c2sPresetLoaded": "Ustawienia tunelu klienta załadowane lokalnie", + "c2sPresetRenamed": "Zmieniono nazwę tunelu klienta", + "c2sPresetDeleted": "Usunięto ustawienie tunelu klienta", + "c2sPresetLoadError": "Nie udało się załadować ustawień tunelu klienta", "languageLocalization": "Język i lokalizacja", "fileManagerSettings": "Menedżer plików", "terminalSettings": "Terminal", @@ -2370,6 +2472,10 @@ "description": "Opis logowania SSH", "searchCredentials": "Szukaj danych logowania według nazwy, nazwy użytkownika lub tagów...", "sshConfig": "konfiguracja SSh punktu końcowego", + "bindLocalhost": "127.0.0.1 (powiązanie z localhost)", + "localListenerHost": "127.0.0.1 (słuchaj lokalnie)", + "localTargetHost": "127.0.0.1 (cel na tym komputerze)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/dom", "clientId": "Twój klient id", "clientSecret": "Twój klient - sekret", @@ -2549,6 +2655,7 @@ "version": "Wersja", "upToDate": "Dotychczas", "updateAvailable": "Dostępna aktualizacja", + "beta": "Beta", "uptime": "Czas pracy", "database": "Baza danych", "healthy": "Zdrowe", @@ -2955,6 +3062,20 @@ "error": "Kolekcja metryki nie powiodła się: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Tworzenie połączenia z tunelem...", + "sourceConnecting": "Łączenie z hostem źródłowym {{host}}...", + "sourceConnected": "Połączono z hostem źródłowym", + "endpointResolving": "Rozwiązywanie hosta punktu końcowego {{host}}...", + "endpointResolved": "Serwer punktu końcowego rozwiązany", + "forwarding": "Konfigurowanie portu przekierowywającego {{localPort}} → {{remotePort}}...", + "connected": "Tunel utworzony pomyślnie", + "retrying": "Połączenie nie powiodło się, ponawianie próby w {{countdown}}s (próba {{attempt}}/{{max}})...", + "retryExhausted": "Osiągnięto maksymalną liczbę prób powtórzenia", + "error": "Połączenie tunelu nie powiodło się: {{error}}" + } + }, "sftp": { "log": { "connecting": "Łączenie z serwerem SFTP...", diff --git a/src/locales/translated/pt_BR.json b/src/locales/translated/pt_BR.json index 378db906..0c0af59e 100644 --- a/src/locales/translated/pt_BR.json +++ b/src/locales/translated/pt_BR.json @@ -402,6 +402,8 @@ "currentVersion": "Você está executando a versão {{version}}", "updateAvailable": "Atualização disponível", "newVersionAvailable": "Uma nova versão está disponível! Você está executando {{current}}, mas {{latest}} está disponível.", + "betaVersion": "Versão Beta", + "betaVersionDesc": "Você está executando {{current}}, que é mais recente que a última versão estável {{latest}}.", "releasedOn": "Lançado em {{date}}", "downloadUpdate": "Baixar atualização", "dismiss": "Descartar", @@ -426,6 +428,8 @@ "warning": "ATENÇÃO", "info": "Informações", "success": "Sucesso", + "unsavedChanges": "Alterações não salvas", + "dismiss": "Descartar", "loading": "Carregandochar@@0", "required": "Obrigatório", "optional": "Opcional", @@ -471,6 +475,7 @@ "chinese": "chinês", "german": "alemão", "cancel": "cancelar", + "done": "Concluído", "username": "Usuário:", "name": "Nome:", "login": "Conectar-se", @@ -486,6 +491,7 @@ "save": "Guardar", "saving": "Salvando...", "delete": "excluir", + "rename": "Renomear", "edit": "Alterar", "add": "Adicionar", "search": "Pesquisa", @@ -559,7 +565,8 @@ "passwordCopied": "Senha copiada para área de transferência", "sudoPasswordCopied": "Senha sudo copiada para área de transferência", "noPasswordAvailable": "Nenhuma senha disponível", - "failedToCopyPassword": "Falha ao copiar a senha" + "failedToCopyPassword": "Falha ao copiar a senha", + "openFileManager": "Abrir Gerenciador de Arquivos" }, "admin": { "title": "Configurações de administrador", @@ -868,7 +875,42 @@ "passwordMinLength": "A senha deve ter pelo menos 6 caracteres", "currentRoles": "Papéis Atuais", "noRolesAssigned": "Nenhum cargo atribuído", - "assignNewRole": "Atribuir Nova Função" + "assignNewRole": "Atribuir Nova Função", + "apiKeys": { + "tabLabel": "Chaves API", + "title": "Chaves API", + "createApiKey": "Criar chave de API", + "createApiKeyDescription": "Crie uma nova chave de API com escopo para um usuário específico. O token é exibido apenas uma vez.", + "keyCreated": "Chave de API Criada", + "keyCreatedDescription": "Copie esta chave agora — ela não será exibida novamente.", + "keyName": "Nome da Chave", + "keyNamePlaceholder": "ex: Pipeline CI/CD", + "scopedUser": "Usuário com escopo", + "selectUser": "Selecione um usuário...", + "searchUsers": "Procurar usuários...", + "noUsersFound": "Usuários não encontrados.", + "expiresAt": "Expira em", + "optional": "opcional", + "expiresAtHelp": "Deixe em branco para uma chave que nunca expira.", + "copyWarningTitle": "Salve sua chave de API", + "copyWarningDescription": "Essa chave só será exibida uma vez. Guarde-a em um lugar seguro.", + "apiKey": "Chave de API", + "tokenCopied": "Token copiado para área de transferência", + "creating": "Criando...", + "nameRequired": "O nome da chave é obrigatório", + "userRequired": "Por favor, selecione um usuário", + "failedToCreate": "Falha ao criar chave de API", + "noKeys": "Nenhuma chave de API encontrada.", + "name": "Nome:", + "prefix": "Prefixo", + "lastUsed": "Último uso", + "never": "nunca", + "revokeKey": "Revogar chave", + "confirmRevoke": "Você tem certeza que deseja revogar a chave API \"{{name}}\"? Isso não pode ser desfeito.", + "revokedSuccessfully": "Chave de API revogada com sucesso", + "failedToRevoke": "Falha ao revogar chave de API", + "failedToFetch": "Falha ao obter chaves de API" + } }, "hosts": { "title": "Gerenciador de Host", @@ -962,28 +1004,8 @@ "enableDocker": "Ativar Docker", "defaultPath": "Caminho Padrão", "defaultPathDesc": "Diretório padrão ao abrir o gerenciador de arquivos para este host", - "tunnelConnections": "Conexões de túnel", "connection": "Ligação", "remove": "Excluir", - "sourcePort": "Porta de origem", - "sourcePortDesc": " (código-fonte refere-se aos detalhes da conexão atual na guia geral)", - "endpointPort": "Porta de Endpoint", - "endpointSshConfig": "Configuração do Endpoint SSH", - "tunnelForwardDescription": "Este túnel irá encaminhar o tráfego da porta {{sourcePort}} na máquina de origem (detalhes atuais da conexão em geral) para a porta {{endpointPort}} na máquina de fim de linha.", - "maxRetries": "Máximo de buscas", - "maxRetriesDescription": "Número máximo de tentativas de tentar conectar túneis novamente.", - "retryInterval": "Intervalo de Repetir (segundos)", - "retryIntervalDescription": "Tempo de espera entre tentativas novamente.", - "autoStartContainer": "Iniciar automaticamente no lançamento do contêiner", - "autoStartDesc": "Iniciar automaticamente este túnel quando o contêiner iniciar", - "addConnection": "Adicionar Conexão de Túnel", - "tunnelType": "Tipo de túnel", - "tunnelTypeLocal": "Local (-L)", - "tunnelTypeRemote": "Remoto (-R)", - "tunnelTypeLocalDesc": "Encaminhar porta local para o ponto de extremidade remota", - "tunnelTypeRemoteDesc": "Encaminhar porta remota para a máquina local", - "tunnelForwardDescriptionLocal": "Este túnel irá encaminhar o tráfego da porta local {{sourcePort}} para a porta {{endpointPort}} na máquina de extremidade.", - "tunnelForwardDescriptionRemote": "Este túnel irá encaminhar o tráfego da porta {{sourcePort}} na máquina de origem (detalhes atuais da conexão em geral) para a porta {{endpointPort}} na máquina de fim de linha.", "sshpassRequired": "Sshpass necessário para autenticação de senha", "sshpassRequiredDesc": "Para autenticação de senha nos túneis, o sshpass deve ser instalado no sistema.", "otherInstallMethods": "Outros métodos de instalação:", @@ -1529,7 +1551,7 @@ "splitVertical": "Divisão Vertical", "closePanel": "Fechar Painel", "reconnect": "Reconectar", - "sessionEnded": "Sessão Encerrada", + "sessionEnded": "Sessão terminada.", "connectionLost": "Conexão perdida", "error": "ERRO: {{message}}", "disconnected": "Desconectado", @@ -1933,22 +1955,10 @@ "ascending": "Ascendente", "descending": "Descendente" }, - "tunnel": { - "log": { - "connecting": "Estabelecendo conexão de túnel...", - "sourceConnecting": "Conectando ao host de origem {{host}}...", - "sourceConnected": "Conectado ao host de origem", - "endpointResolving": "Resolvendo host do ponto final {{host}}...", - "endpointResolved": "Servidor de Endpoint resolvido", - "forwarding": "Configurando o encaminhamento de porta {{localPort}} → {{remotePort}}...", - "connected": "Túnel criado com sucesso", - "retrying": "Falha na conexão, tentando novamente em {{countdown}}s (tentativa {{attempt}}/{{max}})...", - "retryExhausted": "Máximo de tentativas de repetição atingido", - "error": "Falha na conexão de túnel: {{error}}" - } - }, "tunnels": { "title": "Túneis SSH", + "noTunnelsConfigured": "Nenhum túnel configurado", + "configureTunnelsInHostSettings": "Configure conexões de túnel no Gerenciador de Host para começar", "noSshTunnels": "Sem Túneis SSH", "createFirstTunnelMessage": "Você ainda não criou nenhum túnel SSH. Configure as conexões de túnel no Gerenciador de Host para começar.", "connected": "Conectado", @@ -1969,27 +1979,100 @@ "disconnect": "Desconectar", "cancel": "cancelar", "port": "Porta", + "localPort": "Porta local", + "remotePort": "Porta remota", + "currentHostPort": "Porta atual do Host", + "endpointPort": "Porta de Endpoint", + "bindIp": "IP local", + "currentHostIp": "IP do host atual", + "endpointSshConfig": "Configuração do Endpoint SSH", + "endpointSshConfigRequired": "Configuração do Endpoint SSH é necessária", + "endpointSshHost": "Host do Endpoint SSH", + "endpointSshHostPlaceholder": "Selecione um host configurado", + "endpointSshHostRequired": "Selecione um host SSH para cada túnel do cliente.", "attempt": "Tentativa {{current}} de {{max}}", "nextRetryIn": "Próxima repetição em {{seconds}} segundos", "checkDockerLogs": "Verifique os seus logs do Docker pelo motivo de erro, junte-se ao", "orCreate": "ou criar uma ", "noTunnelConnections": "Nenhuma conexão de túnel configurada", "tunnelConnections": "Conexões de túnel", + "serverTunnels": "Túneis do servidor", + "serverTunnelsDesc": "Túneis gerenciados por backend armazenados com este host.", + "clientTunnels": "Túneis do cliente", + "clientTunnelsUnavailable": "Túneis de cliente requerem um cliente desktop.", + "serverTunnel": "Túnel do servidor", + "clientTunnel": "Túnel Cliente", + "addServerTunnel": "Adicionar túnel de servidor", + "addClientTunnel": "Adicionar túnel de cliente", + "noServerTunnels": "Nenhum túnel de servidor configurado.", + "noClientTunnels": "Nenhum túnel do cliente configurado nesta área de trabalho.", + "manageClientTunnels": "Gerenciar Túneis de Cliente", "addTunnel": "Adicionar túnel", "editTunnel": "Editar túnel", "deleteTunnel": "Excluir túnel", "tunnelName": "Nome do túnel", - "localPort": "Porta local", "remoteHost": "Host Remoto", - "remotePort": "Porta remota", "autoStart": "Início automático", + "autoStartContainer": "Início automático ao iniciar", + "autoStartContainerDesc": "Iniciar automaticamente este túnel quando o servidor do seu Termix for iniciado.", + "autoStartEnableFailed": "Host salvo, mas não foi possível iniciar túneis de início automático para {{name}}.", + "clientAutoStartDesc": "Inicia quando este cliente desktop abre e permanece conectado.", + "clientManualStartDesc": "Use Iniciar e Parar dessa linha. O Termix não abrirá automaticamente.", + "clientRemoteServerNote": "O encaminhamento remoto pode exigir AllowTcpForwarding e GatewayPorts no servidor SSH do endpoint. A porta remota é fechada quando este desktop desconecta.", + "clientTunnelStarted": "Túnel de cliente iniciado", + "clientTunnelStopped": "Túnel de cliente parado", + "tunnelTestSucceeded": "Teste de túnel bem-sucedido", + "tunnelTestFailed": "Teste do túnel falhou", + "localSaved": "Túneis do cliente salvos", + "localSaveError": "Falha ao salvar túneis locais do cliente", + "invalidBindIp": "O IP local deve ter um endereço IPv4 válido.", + "invalidLocalTargetIp": "IP de destino local deve ser um endereço IPv4 válido.", + "invalidCurrentHostIp": "O IP do Host atual deve ser um endereço IPv4 válido.", + "invalidLocalPort": "A porta local deve estar entre 1 e 65535.", + "invalidRemotePort": "Porta remota deve estar entre 1 e 65535.", + "invalidLocalTargetPort": "Porta local de destino deve estar entre 1 e 65535.", + "invalidEndpointPort": "Porta de Endpoint deve estar entre 1 e 65535.", + "duplicateAutoStartBind": "Apenas um túnel de cliente iniciar automaticamente pode usar o {{bind}}.", + "manualControlError": "Falha ao atualizar o estado do túnel.", + "saveHostBeforeManualControl": "Salve este host antes de iniciar ou parar seus túneis de servidor.", "status": "SItuação", "active": "ativo", "inactive": "Inativo", "start": "Iniciar", "stop": "Interromper", + "test": "teste", "restart": "Reiniciar", "connectionType": "Tipo de conexão", + "type": "Tipo de túnel", + "typeLocal": "Local (-L)", + "typeRemote": "Remoto (-R)", + "typeDynamic": "Dinâmico (-D)", + "typeServerLocalDesc": "Host atual para endpoint.", + "typeServerRemoteDesc": "Endpoint de volta ao host atual.", + "typeClientLocalDesc": "Computador local para endpoint.", + "typeClientRemoteDesc": "Endpoint de volta ao computador local.", + "typeClientDynamicDesc": "SOCKS no computador local.", + "typeDynamicDesc": "Encaminhar tráfego SOCKS5 CONNECT através de SSH", + "forwardDescriptionServerLocal": "Host atual {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → host atual {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS no host atual {{sourcePort}}.", + "forwardDescriptionClientLocal": "{{sourcePort}} local → remoto {{endpointPort}}.", + "forwardDescriptionClientRemote": "{{sourcePort}} remoto → {{endpointPort}} local.", + "forwardDescriptionClientDynamic": "SOCKS na porta local {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "{{localPort}} local → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → {{localPort}} local", + "autoNameClientDynamic": "format@@0 SOCKS {{localPort}} via {{endpoint}}", + "route": "Itinerário:", + "lastStarted": "Último início", + "lastTested": "Último teste", + "lastError": "Último erro", + "maxRetries": "Máximo de buscas", + "maxRetriesDescription": "Quantidade máxima de tentativas de repetição.", + "retryInterval": "Intervalo de Repetir (segundos)", + "retryIntervalDescription": "Tempo de espera entre tentativas novamente.", "local": "Localização", "remote": "Remoto", "dynamic": "Dinâmico", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Por favor, forneça suas credenciais SSH para conectar a este servidor.", "sshPasswordDescription": "Digite a senha para esta conexão SSH.", "sshKeyPasswordDescription": "Se a sua chave SSH estiver criptografada, digite a senha aqui.", + "passphraseRequired": "Senha Obrigatória", + "passphraseRequiredDescription": "A chave SSH está criptografada. Digite a senha para desbloqueá-la.", "step1ScanQR": "Passo 1: Digitalize o código QR com o seu aplicativo de autenticador", "manualEntryCode": "Código de Entrada Manual", "cannotScanQRText": "Se você não puder escanear o código QR, insira este código manualmente no seu aplicativo autenticador", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Falha ao concluir a redefinição de senha", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Falha ao iniciar o login OIDC", - "failedUserInfo": "Falha ao obter informações de usuário após login OIDC", + "failedUserInfo": "Falha ao obter informações do usuário após o login", "oidcAuthFailed": "Falha na autenticação OIDC", "noTokenReceived": "Nenhum token recebido do login", "invalidAuthUrl": "URL de autorização inválida recebida do backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Exibir tags em cada host na barra lateral. Desative para ocultar todas as tags.", "account": "conta", "appearance": "Aparência", + "c2sTunnelConfigDesc": "Túneis locais de desktop, direcionando hosts SSH configurados.", + "c2sTunnelPresets": "Predefinições do Túnel Cliente", + "c2sTunnelPresetsDesc": "Salvar a lista de túneis locais do cliente local como uma predefinição de servidor nomeada ou carregar uma predefinição de volta para este cliente.", + "c2sTunnelPresetsUnavailable": "Predefinições de túnel cliente só estão disponíveis no cliente desktop.", + "c2sPresetName": "Nome da predefinição", + "c2sPresetNamePlaceholder": "Nome da predefinição cliente", + "c2sPresetToLoad": "Predefinição para carregar", + "c2sNoPresetSelected": "Nenhuma predefinição selecionada", + "c2sNoPresets": "Nenhuma predefinição salva", + "c2sLoadPreset": "Carregar", + "c2sCurrentLocalConfig": "{{count}} túneis locais do cliente configurados nesta área de trabalho.", + "c2sPresetSyncNote": "As predefinições são imagens explícitas; carregar uma substitui a lista de túneis de cliente local desse cliente.", + "c2sPresetSaved": "Túnel de cliente predefinido salvo", + "c2sPresetLoaded": "Túnel cliente predefinido carregado localmente", + "c2sPresetRenamed": "Pré-ajuste do túnel cliente renomeado", + "c2sPresetDeleted": "Prédefinição de túnel de cliente excluído", + "c2sPresetLoadError": "Falha ao carregar as predefinições do túnel do cliente", "languageLocalization": "Idioma e localização", "fileManagerSettings": "Gerenciador de Arquivos", "terminalSettings": "Terminal", @@ -2370,6 +2472,10 @@ "description": "Descrição de credenciais SSH", "searchCredentials": "Pesquisar credenciais por nome, nome de usuário, ou tags...", "sshConfig": "configuração endpoint ssh", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (ouvir localmente)", + "localTargetHost": "127.0.0.1 (alvo neste computador)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/casa", "clientId": "seu-ID-cliente", "clientSecret": "seu-cliente-secreto", @@ -2549,6 +2655,7 @@ "version": "Versão", "upToDate": "Até a data", "updateAvailable": "Atualização disponível", + "beta": "Beta", "uptime": "Tempo em atividade", "database": "Banco", "healthy": "Saudável", @@ -2955,6 +3062,20 @@ "error": "Falha na coleta de métricas: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Estabelecendo conexão de túnel...", + "sourceConnecting": "Conectando ao host de origem {{host}}...", + "sourceConnected": "Conectado ao host de origem", + "endpointResolving": "Resolvendo host do ponto final {{host}}...", + "endpointResolved": "Servidor de Endpoint resolvido", + "forwarding": "Configurando o encaminhamento de porta {{localPort}} → {{remotePort}}...", + "connected": "Túnel criado com sucesso", + "retrying": "Falha na conexão, tentando novamente em {{countdown}}s (tentativa {{attempt}}/{{max}})...", + "retryExhausted": "Máximo de tentativas de repetição atingido", + "error": "Falha na conexão de túnel: {{error}}" + } + }, "sftp": { "log": { "connecting": "Conectando ao servidor SFTP...", diff --git a/src/locales/translated/pt_PT.json b/src/locales/translated/pt_PT.json index db1d00fb..0ddcd2cc 100644 --- a/src/locales/translated/pt_PT.json +++ b/src/locales/translated/pt_PT.json @@ -402,6 +402,8 @@ "currentVersion": "Você está executando a versão {{version}}", "updateAvailable": "Atualização disponível", "newVersionAvailable": "Uma nova versão está disponível! Você está executando {{current}}, mas {{latest}} está disponível.", + "betaVersion": "Versão Beta", + "betaVersionDesc": "Você está executando {{current}}, que é mais recente que a última versão estável {{latest}}.", "releasedOn": "Lançado em {{date}}", "downloadUpdate": "Baixar atualização", "dismiss": "Descartar", @@ -426,6 +428,8 @@ "warning": "ATENÇÃO", "info": "Informações", "success": "Sucesso", + "unsavedChanges": "Alterações não salvas", + "dismiss": "Descartar", "loading": "Carregandochar@@0", "required": "Obrigatório", "optional": "Opcional", @@ -471,6 +475,7 @@ "chinese": "chinês", "german": "alemão", "cancel": "cancelar", + "done": "Concluído", "username": "Usuário:", "name": "Nome:", "login": "Conectar-se", @@ -486,6 +491,7 @@ "save": "Guardar", "saving": "Salvando...", "delete": "excluir", + "rename": "Renomear", "edit": "Alterar", "add": "Adicionar", "search": "Pesquisa", @@ -559,7 +565,8 @@ "passwordCopied": "Senha copiada para área de transferência", "sudoPasswordCopied": "Senha sudo copiada para área de transferência", "noPasswordAvailable": "Nenhuma senha disponível", - "failedToCopyPassword": "Falha ao copiar a senha" + "failedToCopyPassword": "Falha ao copiar a senha", + "openFileManager": "Abrir Gerenciador de Arquivos" }, "admin": { "title": "Configurações de administrador", @@ -868,7 +875,42 @@ "passwordMinLength": "A senha deve ter pelo menos 6 caracteres", "currentRoles": "Papéis Atuais", "noRolesAssigned": "Nenhum cargo atribuído", - "assignNewRole": "Atribuir Nova Função" + "assignNewRole": "Atribuir Nova Função", + "apiKeys": { + "tabLabel": "Chaves API", + "title": "Chaves API", + "createApiKey": "Criar chave de API", + "createApiKeyDescription": "Crie uma nova chave de API com escopo para um usuário específico. O token é exibido apenas uma vez.", + "keyCreated": "Chave de API Criada", + "keyCreatedDescription": "Copie esta chave agora — ela não será exibida novamente.", + "keyName": "Nome da Chave", + "keyNamePlaceholder": "ex: Pipeline CI/CD", + "scopedUser": "Usuário com escopo", + "selectUser": "Selecione um usuário...", + "searchUsers": "Procurar usuários...", + "noUsersFound": "Usuários não encontrados.", + "expiresAt": "Expira em", + "optional": "opcional", + "expiresAtHelp": "Deixe em branco para uma chave que nunca expira.", + "copyWarningTitle": "Salve sua chave de API", + "copyWarningDescription": "Essa chave só será exibida uma vez. Guarde-a em um lugar seguro.", + "apiKey": "Chave de API", + "tokenCopied": "Token copiado para área de transferência", + "creating": "Criando...", + "nameRequired": "O nome da chave é obrigatório", + "userRequired": "Por favor, selecione um usuário", + "failedToCreate": "Falha ao criar chave de API", + "noKeys": "Nenhuma chave de API encontrada.", + "name": "Nome:", + "prefix": "Prefixo", + "lastUsed": "Último uso", + "never": "nunca", + "revokeKey": "Revogar chave", + "confirmRevoke": "Você tem certeza que deseja revogar a chave API \"{{name}}\"? Isso não pode ser desfeito.", + "revokedSuccessfully": "Chave de API revogada com sucesso", + "failedToRevoke": "Falha ao revogar chave de API", + "failedToFetch": "Falha ao obter chaves de API" + } }, "hosts": { "title": "Gerenciador de Host", @@ -962,28 +1004,8 @@ "enableDocker": "Ativar Docker", "defaultPath": "Caminho Padrão", "defaultPathDesc": "Diretório padrão ao abrir o gerenciador de arquivos para este host", - "tunnelConnections": "Conexões de túnel", "connection": "Ligação", "remove": "Excluir", - "sourcePort": "Porta de origem", - "sourcePortDesc": " (código-fonte refere-se aos detalhes da conexão atual na guia geral)", - "endpointPort": "Porta de Endpoint", - "endpointSshConfig": "Configuração do Endpoint SSH", - "tunnelForwardDescription": "Este túnel irá encaminhar o tráfego da porta {{sourcePort}} na máquina de origem (detalhes atuais da conexão em geral) para a porta {{endpointPort}} na máquina de fim de linha.", - "maxRetries": "Máximo de buscas", - "maxRetriesDescription": "Número máximo de tentativas de tentar conectar túneis novamente.", - "retryInterval": "Intervalo de Repetir (segundos)", - "retryIntervalDescription": "Tempo de espera entre tentativas novamente.", - "autoStartContainer": "Iniciar automaticamente no lançamento do contêiner", - "autoStartDesc": "Iniciar automaticamente este túnel quando o contêiner iniciar", - "addConnection": "Adicionar Conexão de Túnel", - "tunnelType": "Tipo de túnel", - "tunnelTypeLocal": "Local (-L)", - "tunnelTypeRemote": "Remoto (-R)", - "tunnelTypeLocalDesc": "Encaminhar porta local para o ponto de extremidade remota", - "tunnelTypeRemoteDesc": "Encaminhar porta remota para a máquina local", - "tunnelForwardDescriptionLocal": "Este túnel irá encaminhar o tráfego da porta local {{sourcePort}} para a porta {{endpointPort}} na máquina de extremidade.", - "tunnelForwardDescriptionRemote": "Este túnel irá encaminhar o tráfego da porta {{sourcePort}} na máquina de origem (detalhes atuais da conexão em geral) para a porta {{endpointPort}} na máquina de fim de linha.", "sshpassRequired": "Sshpass necessário para autenticação de senha", "sshpassRequiredDesc": "Para autenticação de senha nos túneis, o sshpass deve ser instalado no sistema.", "otherInstallMethods": "Outros métodos de instalação:", @@ -1529,7 +1551,7 @@ "splitVertical": "Divisão Vertical", "closePanel": "Fechar Painel", "reconnect": "Reconectar", - "sessionEnded": "Sessão Encerrada", + "sessionEnded": "Sessão terminada.", "connectionLost": "Conexão perdida", "error": "ERRO: {{message}}", "disconnected": "Desconectado", @@ -1933,22 +1955,10 @@ "ascending": "Ascendente", "descending": "Descendente" }, - "tunnel": { - "log": { - "connecting": "Estabelecendo conexão de túnel...", - "sourceConnecting": "Conectando ao host de origem {{host}}...", - "sourceConnected": "Conectado ao host de origem", - "endpointResolving": "Resolvendo host do ponto final {{host}}...", - "endpointResolved": "Servidor de Endpoint resolvido", - "forwarding": "Configurando o encaminhamento de porta {{localPort}} → {{remotePort}}...", - "connected": "Túnel criado com sucesso", - "retrying": "Falha na conexão, tentando novamente em {{countdown}}s (tentativa {{attempt}}/{{max}})...", - "retryExhausted": "Máximo de tentativas de repetição atingido", - "error": "Falha na conexão de túnel: {{error}}" - } - }, "tunnels": { "title": "Túneis SSH", + "noTunnelsConfigured": "Nenhum túnel configurado", + "configureTunnelsInHostSettings": "Configure conexões de túnel no Gerenciador de Host para começar", "noSshTunnels": "Sem Túneis SSH", "createFirstTunnelMessage": "Você ainda não criou nenhum túnel SSH. Configure as conexões de túnel no Gerenciador de Host para começar.", "connected": "Conectado", @@ -1969,27 +1979,100 @@ "disconnect": "Desconectar", "cancel": "cancelar", "port": "Porta", + "localPort": "Porta local", + "remotePort": "Porta remota", + "currentHostPort": "Porta atual do Host", + "endpointPort": "Porta de Endpoint", + "bindIp": "IP local", + "currentHostIp": "IP do host atual", + "endpointSshConfig": "Configuração do Endpoint SSH", + "endpointSshConfigRequired": "Configuração do Endpoint SSH é necessária", + "endpointSshHost": "Host do Endpoint SSH", + "endpointSshHostPlaceholder": "Selecione um host configurado", + "endpointSshHostRequired": "Selecione um host SSH para cada túnel do cliente.", "attempt": "Tentativa {{current}} de {{max}}", "nextRetryIn": "Próxima repetição em {{seconds}} segundos", "checkDockerLogs": "Verifique os seus logs do Docker pelo motivo de erro, junte-se ao", "orCreate": "ou criar uma ", "noTunnelConnections": "Nenhuma conexão de túnel configurada", "tunnelConnections": "Conexões de túnel", + "serverTunnels": "Túneis do servidor", + "serverTunnelsDesc": "Túneis gerenciados por backend armazenados com este host.", + "clientTunnels": "Túneis do cliente", + "clientTunnelsUnavailable": "Túneis de cliente requerem um cliente desktop.", + "serverTunnel": "Túnel do servidor", + "clientTunnel": "Túnel Cliente", + "addServerTunnel": "Adicionar túnel de servidor", + "addClientTunnel": "Adicionar túnel de cliente", + "noServerTunnels": "Nenhum túnel de servidor configurado.", + "noClientTunnels": "Nenhum túnel do cliente configurado nesta área de trabalho.", + "manageClientTunnels": "Gerenciar Túneis de Cliente", "addTunnel": "Adicionar túnel", "editTunnel": "Editar túnel", "deleteTunnel": "Excluir túnel", "tunnelName": "Nome do túnel", - "localPort": "Porta local", "remoteHost": "Host Remoto", - "remotePort": "Porta remota", "autoStart": "Início automático", + "autoStartContainer": "Início automático ao iniciar", + "autoStartContainerDesc": "Iniciar automaticamente este túnel quando o servidor do seu Termix for iniciado.", + "autoStartEnableFailed": "Host salvo, mas não foi possível iniciar túneis de início automático para {{name}}.", + "clientAutoStartDesc": "Inicia quando este cliente desktop abre e permanece conectado.", + "clientManualStartDesc": "Use Iniciar e Parar dessa linha. O Termix não abrirá automaticamente.", + "clientRemoteServerNote": "O encaminhamento remoto pode exigir AllowTcpForwarding e GatewayPorts no servidor SSH do endpoint. A porta remota é fechada quando este desktop desconecta.", + "clientTunnelStarted": "Túnel de cliente iniciado", + "clientTunnelStopped": "Túnel de cliente parado", + "tunnelTestSucceeded": "Teste de túnel bem-sucedido", + "tunnelTestFailed": "Teste do túnel falhou", + "localSaved": "Túneis do cliente salvos", + "localSaveError": "Falha ao salvar túneis locais do cliente", + "invalidBindIp": "O IP local deve ter um endereço IPv4 válido.", + "invalidLocalTargetIp": "IP de destino local deve ser um endereço IPv4 válido.", + "invalidCurrentHostIp": "O IP do Host atual deve ser um endereço IPv4 válido.", + "invalidLocalPort": "A porta local deve estar entre 1 e 65535.", + "invalidRemotePort": "Porta remota deve estar entre 1 e 65535.", + "invalidLocalTargetPort": "Porta local de destino deve estar entre 1 e 65535.", + "invalidEndpointPort": "Porta de Endpoint deve estar entre 1 e 65535.", + "duplicateAutoStartBind": "Apenas um túnel de cliente iniciar automaticamente pode usar o {{bind}}.", + "manualControlError": "Falha ao atualizar o estado do túnel.", + "saveHostBeforeManualControl": "Salve este host antes de iniciar ou parar seus túneis de servidor.", "status": "SItuação", "active": "ativo", "inactive": "Inativo", "start": "Iniciar", "stop": "Interromper", + "test": "teste", "restart": "Reiniciar", "connectionType": "Tipo de conexão", + "type": "Tipo de túnel", + "typeLocal": "Local (-L)", + "typeRemote": "Remoto (-R)", + "typeDynamic": "Dinâmico (-D)", + "typeServerLocalDesc": "Host atual para endpoint.", + "typeServerRemoteDesc": "Endpoint de volta ao host atual.", + "typeClientLocalDesc": "Computador local para endpoint.", + "typeClientRemoteDesc": "Endpoint de volta ao computador local.", + "typeClientDynamicDesc": "SOCKS no computador local.", + "typeDynamicDesc": "Encaminhar tráfego SOCKS5 CONNECT através de SSH", + "forwardDescriptionServerLocal": "Host atual {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → host atual {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS no host atual {{sourcePort}}.", + "forwardDescriptionClientLocal": "{{sourcePort}} local → remoto {{endpointPort}}.", + "forwardDescriptionClientRemote": "{{sourcePort}} remoto → {{endpointPort}} local.", + "forwardDescriptionClientDynamic": "SOCKS na porta local {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "{{localPort}} local → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → {{localPort}} local", + "autoNameClientDynamic": "format@@0 SOCKS {{localPort}} via {{endpoint}}", + "route": "Itinerário:", + "lastStarted": "Último início", + "lastTested": "Último teste", + "lastError": "Último erro", + "maxRetries": "Máximo de buscas", + "maxRetriesDescription": "Quantidade máxima de tentativas de repetição.", + "retryInterval": "Intervalo de Repetir (segundos)", + "retryIntervalDescription": "Tempo de espera entre tentativas novamente.", "local": "Localização", "remote": "Remoto", "dynamic": "Dinâmico", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Por favor, forneça suas credenciais SSH para conectar a este servidor.", "sshPasswordDescription": "Digite a senha para esta conexão SSH.", "sshKeyPasswordDescription": "Se a sua chave SSH estiver criptografada, digite a senha aqui.", + "passphraseRequired": "Senha Obrigatória", + "passphraseRequiredDescription": "A chave SSH está criptografada. Digite a senha para desbloqueá-la.", "step1ScanQR": "Passo 1: Digitalize o código QR com o seu aplicativo de autenticador", "manualEntryCode": "Código de Entrada Manual", "cannotScanQRText": "Se você não puder escanear o código QR, insira este código manualmente no seu aplicativo autenticador", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Falha ao concluir a redefinição de senha", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Falha ao iniciar o login OIDC", - "failedUserInfo": "Falha ao obter informações de usuário após login OIDC", + "failedUserInfo": "Falha ao obter informações do usuário após o login", "oidcAuthFailed": "Falha na autenticação OIDC", "noTokenReceived": "Nenhum token recebido do login", "invalidAuthUrl": "URL de autorização inválida recebida do backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Exibir tags em cada host na barra lateral. Desative para ocultar todas as tags.", "account": "conta", "appearance": "Aparência", + "c2sTunnelConfigDesc": "Túneis locais de desktop, direcionando hosts SSH configurados.", + "c2sTunnelPresets": "Predefinições do Túnel Cliente", + "c2sTunnelPresetsDesc": "Salvar a lista de túneis locais do cliente local como uma predefinição de servidor nomeada ou carregar uma predefinição de volta para este cliente.", + "c2sTunnelPresetsUnavailable": "Predefinições de túnel cliente só estão disponíveis no cliente desktop.", + "c2sPresetName": "Nome da predefinição", + "c2sPresetNamePlaceholder": "Nome da predefinição cliente", + "c2sPresetToLoad": "Predefinição para carregar", + "c2sNoPresetSelected": "Nenhuma predefinição selecionada", + "c2sNoPresets": "Nenhuma predefinição salva", + "c2sLoadPreset": "Carregar", + "c2sCurrentLocalConfig": "{{count}} túneis locais do cliente configurados nesta área de trabalho.", + "c2sPresetSyncNote": "As predefinições são imagens explícitas; carregar uma substitui a lista de túneis de cliente local desse cliente.", + "c2sPresetSaved": "Túnel de cliente predefinido salvo", + "c2sPresetLoaded": "Túnel cliente predefinido carregado localmente", + "c2sPresetRenamed": "Pré-ajuste do túnel cliente renomeado", + "c2sPresetDeleted": "Prédefinição de túnel de cliente excluído", + "c2sPresetLoadError": "Falha ao carregar as predefinições do túnel do cliente", "languageLocalization": "Idioma e localização", "fileManagerSettings": "Gerenciador de Arquivos", "terminalSettings": "Terminal", @@ -2370,6 +2472,10 @@ "description": "Descrição de credenciais SSH", "searchCredentials": "Pesquisar credenciais por nome, nome de usuário, ou tags...", "sshConfig": "configuração endpoint ssh", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (ouvir localmente)", + "localTargetHost": "127.0.0.1 (alvo neste computador)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/casa", "clientId": "seu-ID-cliente", "clientSecret": "seu-cliente-secreto", @@ -2549,6 +2655,7 @@ "version": "Versão", "upToDate": "Até a data", "updateAvailable": "Atualização disponível", + "beta": "Beta", "uptime": "Tempo em atividade", "database": "Banco", "healthy": "Saudável", @@ -2955,6 +3062,20 @@ "error": "Coleção de métricas falhou: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Estabelecendo conexão de túnel...", + "sourceConnecting": "Conectando ao host de origem {{host}}...", + "sourceConnected": "Conectado ao host de origem", + "endpointResolving": "Resolvendo host do ponto final {{host}}...", + "endpointResolved": "Servidor de Endpoint resolvido", + "forwarding": "Configurando o encaminhamento de porta {{localPort}} → {{remotePort}}...", + "connected": "Túnel criado com sucesso", + "retrying": "Falha na conexão, tentando novamente em {{countdown}}s (tentativa {{attempt}}/{{max}})...", + "retryExhausted": "Máximo de tentativas de repetição atingido", + "error": "Falha na conexão de túnel: {{error}}" + } + }, "sftp": { "log": { "connecting": "Conectando ao servidor SFTP...", diff --git a/src/locales/translated/ro_RO.json b/src/locales/translated/ro_RO.json index 0688e657..0e5e866b 100644 --- a/src/locales/translated/ro_RO.json +++ b/src/locales/translated/ro_RO.json @@ -402,6 +402,8 @@ "currentVersion": "Rulați versiunea {{version}}", "updateAvailable": "Actualizare disponibilă", "newVersionAvailable": "O nouă versiune este disponibilă! Funcționezi {{current}}, dar {{latest}} este disponibil.", + "betaVersion": "Versiune Beta", + "betaVersionDesc": "Rulați {{current}}, care este mai nou decât cea mai recentă versiune stabilă {{latest}}.", "releasedOn": "Publicat pe {{date}}", "downloadUpdate": "Descarcă actualizare", "dismiss": "Renunţaţi", @@ -426,6 +428,8 @@ "warning": "Avertizare", "info": "Info", "success": "Succes", + "unsavedChanges": "Modificări nesalvate", + "dismiss": "Renunţaţi", "loading": "Încărcare...", "required": "Necesar", "optional": "Opţional", @@ -471,6 +475,7 @@ "chinese": "Chineză", "german": "Germană", "cancel": "Anulează", + "done": "Terminat", "username": "Nume", "name": "Nume", "login": "Autentificare", @@ -486,6 +491,7 @@ "save": "Salvează", "saving": "Salvare...", "delete": "Ștergere", + "rename": "Redenumire", "edit": "Editare", "add": "Adăugare", "search": "Caută", @@ -559,7 +565,8 @@ "passwordCopied": "Parola a fost copiată în clipboard", "sudoPasswordCopied": "Parolă Sudo copiată în clipboard", "noPasswordAvailable": "Nici o parolă disponibilă", - "failedToCopyPassword": "Copierea parolei a eșuat" + "failedToCopyPassword": "Copierea parolei a eșuat", + "openFileManager": "Deschide managerul de fişiere" }, "admin": { "title": "Setări Admin", @@ -868,7 +875,42 @@ "passwordMinLength": "Parola trebuie să conțină cel puțin 6 caractere", "currentRoles": "Rolurile curente", "noRolesAssigned": "Niciun rol atribuit", - "assignNewRole": "Atribuie rol nou" + "assignNewRole": "Atribuie rol nou", + "apiKeys": { + "tabLabel": "Chei API", + "title": "Chei API", + "createApiKey": "Creare cheie API", + "createApiKeyDescription": "Creează o cheie API nouă scoasă la un anumit utilizator. Token-ul este afișat o singură dată.", + "keyCreated": "Cheie API creată", + "keyCreatedDescription": "Copiază această cheie acum — nu va mai fi afișată din nou.", + "keyName": "Nume tastă", + "keyNamePlaceholder": "ex. conducta CI / CD", + "scopedUser": "Utilizator Scopat", + "selectUser": "Selectați un utilizator...", + "searchUsers": "Caută utilizatori...", + "noUsersFound": "Niciun utilizator găsit.", + "expiresAt": "Expiră la", + "optional": "opţional", + "expiresAtHelp": "Lăsați gol pentru o cheie care nu expiră niciodată.", + "copyWarningTitle": "Salvează cheia API", + "copyWarningDescription": "Această cheie va fi afișată o singură dată. Păstrați-o într-un loc sigur.", + "apiKey": "Cheie API", + "tokenCopied": "Monedă copiată în clipboard", + "creating": "Creare...", + "nameRequired": "Numele cheii este necesar", + "userRequired": "Vă rugăm să selectaţi un utilizator", + "failedToCreate": "Crearea cheii API a eșuat", + "noKeys": "Nu au fost găsite chei API.", + "name": "Nume", + "prefix": "Prefix", + "lastUsed": "Ultima utilizare", + "never": "Niciodată", + "revokeKey": "Revocă cheie", + "confirmRevoke": "Sigur doriți să revocați cheia API \"{{name}}\"? Acest lucru nu poate fi anulat.", + "revokedSuccessfully": "Cheie API revocată cu succes", + "failedToRevoke": "Eroare la revocarea cheii API", + "failedToFetch": "Nu s-a reușit preluarea cheilor API" + } }, "hosts": { "title": "Manager Gazdă", @@ -962,28 +1004,8 @@ "enableDocker": "Activează Docker", "defaultPath": "Cale implicită", "defaultPathDesc": "Directorul implicit la deschiderea managerului de fişiere pentru acest gazdă", - "tunnelConnections": "Conexiuni Tunel", "connection": "Conexiune", "remove": "Elimină", - "sourcePort": "Portul sursă", - "sourcePortDesc": " (Sursa se referă la detaliile curente ale conexiunii în fila generală)", - "endpointPort": "Port final", - "endpointSshConfig": "Configurare SSH final", - "tunnelForwardDescription": "Acest tunel va redirecționa traficul de la portul {{sourcePort}} de pe aparatul sursă (detaliile curente ale conexiunii în general tab) către portul {{endpointPort}} pe aparatul de control.", - "maxRetries": "Repetări maxime", - "maxRetriesDescription": "Numărul maxim de încercări de reîncercare pentru conexiunea la tunel.", - "retryInterval": "Interval de reîncercare (secunde)", - "retryIntervalDescription": "Timpul de asteptare intre incercarile de reincercare.", - "autoStartContainer": "Pornire automată la lansarea containerului", - "autoStartDesc": "Pornește automat acest tunel atunci când containerul este lansat", - "addConnection": "Adaugă conexiune Tunel", - "tunnelType": "Tip tunel", - "tunnelTypeLocal": "Local (-L)", - "tunnelTypeRemote": "Distanta (-R)", - "tunnelTypeLocalDesc": "Redirecționează portul local la distanță", - "tunnelTypeRemoteDesc": "Înaintează portul de la distanță către mașina locală", - "tunnelForwardDescriptionLocal": "Acest tunel va redirecționa traficul din portul local {{sourcePort}} către portul {{endpointPort}} pe mașina de final.", - "tunnelForwardDescriptionRemote": "Acest tunel va redirecționa traficul de la portul {{sourcePort}} de pe aparatul sursă (detaliile curente ale conexiunii în general tab) către portul {{endpointPort}} pe aparatul de control.", "sshpassRequired": "Sshpass necesar pentru Autentificarea Parolei", "sshpassRequiredDesc": "Pentru autentificarea cu parolă în tuneluri, sshpass trebuie să fie instalat în sistem.", "otherInstallMethods": "Alte metode de instalare:", @@ -1529,7 +1551,7 @@ "splitVertical": "Divizare verticală", "closePanel": "Închide panoul", "reconnect": "Reconectare", - "sessionEnded": "Sesiune încheiată", + "sessionEnded": "Sesiunea s-a încheiat.", "connectionLost": "Conexiune pierdută", "error": "EROARE: {{message}}", "disconnected": "Deconectat", @@ -1933,22 +1955,10 @@ "ascending": "Crescător", "descending": "Descrescător" }, - "tunnel": { - "log": { - "connecting": "Se stabilește conexiunea tunelului...", - "sourceConnecting": "Conectare la sursa gazdă {{host}}...", - "sourceConnected": "Conectat la gazda sursă", - "endpointResolving": "Rezolvare obiectiv gazdă {{host}}...", - "endpointResolved": "Gazda punctului final rezolvată", - "forwarding": "Configurare redirecționare port {{localPort}} → {{remotePort}}...", - "connected": "Tunelul stabilit cu succes", - "retrying": "Conexiune eșuată, reîncercare în {{countdown}}s (încercare {{attempt}}/{{max}})...", - "retryExhausted": "S-a atins numărul maxim de încercări", - "error": "Conexiunea tunelului a eșuat: {{error}}" - } - }, "tunnels": { "title": "Tuneluri SSH", + "noTunnelsConfigured": "Nicio tuneluri configurată", + "configureTunnelsInHostSettings": "Configurați conexiunile tunelului în Managerul de Gazdă pentru a începe", "noSshTunnels": "Fără tuneluri SSH", "createFirstTunnelMessage": "Nu ai creat încă nici un tunel SSH. Configurați conexiunile tunelului în Managerul de Gazdă pentru a începe.", "connected": "Conectat", @@ -1969,27 +1979,100 @@ "disconnect": "Deconectare", "cancel": "Anulează", "port": "Portul", + "localPort": "Port local", + "remotePort": "Port la distanță", + "currentHostPort": "Portul Gazdei Curente", + "endpointPort": "Port final", + "bindIp": "IP local", + "currentHostIp": "IP Gazda Curenta", + "endpointSshConfig": "Configurare SSH final", + "endpointSshConfigRequired": "Este necesară configurarea SSH în punctul final", + "endpointSshHost": "Sfârșit gazdă SSH", + "endpointSshHostPlaceholder": "Selectați un gazdă configurat", + "endpointSshHostRequired": "Selectați o gazdă SSH pentru fiecare tunel client.", "attempt": "Încercare de {{current}} de {{max}}", "nextRetryIn": "Următoarea reîncercare în {{seconds}} secunde", "checkDockerLogs": "Verificați jurnalele Docker pentru motivul de eroare, alăturați-vă la", "orCreate": "sau creaţi un ", "noTunnelConnections": "Nu sunt configurate conexiuni tunel", "tunnelConnections": "Conexiuni Tunel", + "serverTunnels": "Tuneluri server", + "serverTunnelsDesc": "Tuneluri gestionate înapoi stocate cu această gazdă.", + "clientTunnels": "Tuneluri client", + "clientTunnelsUnavailable": "Tunelurile clientului necesită un client desktop.", + "serverTunnel": "Tunelul serverului", + "clientTunnel": "Tunelul clientului", + "addServerTunnel": "Adaugă tunel server", + "addClientTunnel": "Adaugă Tunel Client", + "noServerTunnels": "Niciun tunel de server configurat.", + "noClientTunnels": "Nu există tuneluri client configurate pe acest desktop.", + "manageClientTunnels": "Gestionează tunelurile clientului", "addTunnel": "Adaugă tunel", "editTunnel": "Editare tunel", "deleteTunnel": "Șterge tunelul", "tunnelName": "Nume tunel", - "localPort": "Port local", "remoteHost": "Gazdă la distanță", - "remotePort": "Port la distanță", "autoStart": "Pornire automată", + "autoStartContainer": "Pornire automată la lansare", + "autoStartContainerDesc": "Pornește automat acest tunel atunci când serverul Termix pornește.", + "autoStartEnableFailed": "Gazda a fost salvată, dar a eșuat pornirea automată a tunelurilor pentru {{name}}.", + "clientAutoStartDesc": "Începe atunci când acest client pentru desktop se deschide și rămâne conectat.", + "clientManualStartDesc": "Folosiți Start și Stop de la acest rând. Termixul nu îl va deschide automat.", + "clientRemoteServerNote": "Redirecționarea la distanță poate necesita AllowTcpForwarding și GatewayPorts pe serverul SSH final. Portul de la distanță se închide atunci când acest desktop se deconectează.", + "clientTunnelStarted": "Tunelul clientului a început", + "clientTunnelStopped": "Tunelul clientului oprit", + "tunnelTestSucceeded": "Test tunel reușit", + "tunnelTestFailed": "Testul tunelului a eșuat", + "localSaved": "Tuneluri client salvate", + "localSaveError": "Salvarea tunelurilor client locale nu a reușit", + "invalidBindIp": "IP-ul local trebuie să fie o adresă IPv4 validă.", + "invalidLocalTargetIp": "IP-ul ţintă local trebuie să fie o adresă IPv4 validă.", + "invalidCurrentHostIp": "IP-ul Gazda Curentă trebuie să fie o adresă IPv4 validă.", + "invalidLocalPort": "Portul local trebuie să aibă între 1 şi 65535.", + "invalidRemotePort": "Portul la distanță trebuie să fie între 1 și 65535.", + "invalidLocalTargetPort": "Portul ţintă local trebuie să fie între 1 şi 65535.", + "invalidEndpointPort": "Portul punctului final trebuie să fie cuprins între 1 și 65535.", + "duplicateAutoStartBind": "Doar un singur tunel de pornire automată poate utiliza {{bind}}.", + "manualControlError": "Actualizarea stării tunelului a eșuat.", + "saveHostBeforeManualControl": "Salvați această gazdă înainte de a începe sau opri tunelurile de server.", "status": "Status", "active": "Activ", "inactive": "Inactiv", "start": "Pornire", "stop": "Oprește", + "test": "Testare", "restart": "Repornire", "connectionType": "Tipul conexiunii", + "type": "Tip tunel", + "typeLocal": "Local (-L)", + "typeRemote": "Distanta (-R)", + "typeDynamic": "Dinamic (-D)", + "typeServerLocalDesc": "Până la punctul final gazda curentă.", + "typeServerRemoteDesc": "Punct final înapoi la gazda curentă.", + "typeClientLocalDesc": "Localizarea calculatorului este finalizată.", + "typeClientRemoteDesc": "Punct final înapoi la calculatorul local.", + "typeClientDynamicDesc": "SOCKS pe calculatorul local.", + "typeDynamicDesc": "Transmitere trafic SOCKS5 CONNECT prin SSH", + "forwardDescriptionServerLocal": "Actuala gazdă {{sourcePort}} → final {{endpointPort}}.", + "forwardDescriptionServerRemote": "Sfârşit {{endpointPort}} → Gazda curentă {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS pe gazda curentă {{sourcePort}}.", + "forwardDescriptionClientLocal": "{{sourcePort}} → {{endpointPort}} telecomandă.", + "forwardDescriptionClientRemote": "{{sourcePort}} → {{endpointPort}} local.", + "forwardDescriptionClientDynamic": "SOCKS pentru portul local {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "{{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → {{localPort}} local", + "autoNameClientDynamic": "SOCKS {{localPort}} prin {{endpoint}}", + "route": "Rută:", + "lastStarted": "Ultima dată început", + "lastTested": "Ultimul test", + "lastError": "Ultima eroare", + "maxRetries": "Repetări maxime", + "maxRetriesDescription": "Numărul maxim de încercări de reîncercare.", + "retryInterval": "Interval de reîncercare (secunde)", + "retryIntervalDescription": "Timpul de asteptare intre incercarile de reincercare.", "local": "Local", "remote": "Distanta", "dynamic": "Dinamic", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Te rugăm să introduci datele tale de autentificare SSH pentru a te conecta la acest server.", "sshPasswordDescription": "Introduceți parola pentru această conexiune SSH.", "sshKeyPasswordDescription": "Dacă cheia SSH este criptată, introduceți parola de acces aici.", + "passphraseRequired": "Parolă necesară", + "passphraseRequiredDescription": "Cheia SSH este criptată. Introduceți parola de acces pentru a o debloca.", "step1ScanQR": "Pasul 1: Scanați codul QR cu aplicația de autentificare", "manualEntryCode": "Cod de intrare manual", "cannotScanQRText": "Dacă nu puteți scana codul QR, introduceți acest cod manual în aplicația de autentificare", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Finalizarea resetării parolei a eșuat", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Pornirea autentificării OIDC a eșuat", - "failedUserInfo": "Obținerea informațiilor utilizatorului după autentificarea OIDC a eșuat", + "failedUserInfo": "Obținerea informațiilor utilizatorului a eșuat după autentificare", "oidcAuthFailed": "Autentificarea OIDC a eșuat", "noTokenReceived": "Niciun token primit de la autentificare", "invalidAuthUrl": "URL autorizare invalid primit de la backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Afișează etichetele sub fiecare gazdă în bara laterală. Dezactivează pentru a ascunde toate etichetele.", "account": "Cont", "appearance": "Aspectul", + "c2sTunnelConfigDesc": "Tuneluri locale pentru desktop care vizează gazdele SSH configurate.", + "c2sTunnelPresets": "Setările Tunelului Client", + "c2sTunnelPresetsDesc": "Salvați lista locală de tunel a acestui client desktop ca o anumită presetare de server sau încărcați o presetare înapoi în acest client.", + "c2sTunnelPresetsUnavailable": "Setările de presetare ale clientului sunt disponibile doar în clientul desktop.", + "c2sPresetName": "Nume presetare", + "c2sPresetNamePlaceholder": "Numele prestabilit al clientului", + "c2sPresetToLoad": "Presetare la încărcare", + "c2sNoPresetSelected": "Nicio presetare selectată", + "c2sNoPresets": "Nicio presetare salvată", + "c2sLoadPreset": "Încărcare", + "c2sCurrentLocalConfig": "{{count}} local client tunel configurat pe acest desktop.", + "c2sPresetSyncNote": "Presetarile sunt instantanee explicite; incarcarea uneia inlocuieste aceasta lista locala de clienti clienti din lista locala.", + "c2sPresetSaved": "Presetare client tunel salvat", + "c2sPresetLoaded": "Setul de presetare al clientului încărcat local", + "c2sPresetRenamed": "Setul prestabilit al clientului a fost redenumit", + "c2sPresetDeleted": "Setare presetare client ștearsă", + "c2sPresetLoadError": "Încărcarea presetărilor client tunel a eșuat", "languageLocalization": "Limbă și localizare", "fileManagerSettings": "Manager fişiere", "terminalSettings": "Terminal", @@ -2370,6 +2472,10 @@ "description": "Descrierea acreditărilor SSH", "searchCredentials": "Căutare acreditări după nume, nume de utilizator sau etichete...", "sshConfig": "obiectiv de configurare ssh", + "bindLocalhost": "127.0.0,1 (conectare la localhost)", + "localListenerHost": "127.0.0,1 (ascultați local)", + "localTargetHost": "127.0.0,1 (țintă pe acest calculator)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/Home", "clientId": "id-clientul tău", "clientSecret": "clientul-tau-secret", @@ -2549,6 +2655,7 @@ "version": "Versiune", "upToDate": "Până la data", "updateAvailable": "Actualizare disponibilă", + "beta": "Beta", "uptime": "Uptime", "database": "Baza de date", "healthy": "sănătos", @@ -2955,6 +3062,20 @@ "error": "Colecția de valori a eșuat: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Se stabilește conexiunea tunelului...", + "sourceConnecting": "Conectare la sursa gazdă {{host}}...", + "sourceConnected": "Conectat la gazda sursă", + "endpointResolving": "Rezolvare obiectiv gazdă {{host}}...", + "endpointResolved": "Gazda punctului final rezolvată", + "forwarding": "Configurare redirecționare port {{localPort}} → {{remotePort}}...", + "connected": "Tunelul stabilit cu succes", + "retrying": "Conexiune eșuată, reîncercare în {{countdown}}s (încercare {{attempt}}/{{max}})...", + "retryExhausted": "S-a atins numărul maxim de încercări", + "error": "Conexiunea tunelului a eșuat: {{error}}" + } + }, "sftp": { "log": { "connecting": "Conectare la serverul SFTP...", diff --git a/src/locales/translated/ru_RU.json b/src/locales/translated/ru_RU.json index c4f3369e..7670b9d5 100644 --- a/src/locales/translated/ru_RU.json +++ b/src/locales/translated/ru_RU.json @@ -402,6 +402,8 @@ "currentVersion": "Вы используете версию {{version}}", "updateAvailable": "Доступно обновление", "newVersionAvailable": "Доступна новая версия! Вы используете {{current}}, но {{latest}} доступен.", + "betaVersion": "Бета-версия", + "betaVersionDesc": "Вы используете {{current}}, который новее, чем последний стабильный релиз {{latest}}.", "releasedOn": "Выпущено на {{date}}", "downloadUpdate": "Загрузить обновление", "dismiss": "Отклонить", @@ -426,6 +428,8 @@ "warning": "Предупреждение", "info": "Инфо", "success": "Успешно", + "unsavedChanges": "Несохраненные изменения", + "dismiss": "Отклонить", "loading": "Загрузка...", "required": "Требуется", "optional": "Опционально", @@ -471,6 +475,7 @@ "chinese": "Китайский", "german": "Немецкий", "cancel": "Отмена", + "done": "Готово", "username": "Имя пользователя", "name": "Наименование", "login": "Логин", @@ -486,6 +491,7 @@ "save": "Сохранить", "saving": "Сохранение...", "delete": "Удалить", + "rename": "Переименовать", "edit": "Редактирование", "add": "Добавить", "search": "Искать", @@ -559,7 +565,8 @@ "passwordCopied": "Пароль скопирован в буфер обмена", "sudoPasswordCopied": "Sudo пароль скопирован в буфер обмена", "noPasswordAvailable": "Пароль не доступен", - "failedToCopyPassword": "Не удалось скопировать пароль" + "failedToCopyPassword": "Не удалось скопировать пароль", + "openFileManager": "Открыть файловый менеджер" }, "admin": { "title": "Админ настройки", @@ -868,7 +875,42 @@ "passwordMinLength": "Пароль должен содержать не менее 6 символов", "currentRoles": "Текущие роли", "noRolesAssigned": "Роли не назначены", - "assignNewRole": "Назначить новую роль" + "assignNewRole": "Назначить новую роль", + "apiKeys": { + "tabLabel": "Ключи API", + "title": "Ключи API", + "createApiKey": "Создать ключ API", + "createApiKeyDescription": "Создайте новый API-ключ для определенного пользователя. Токен отображается только один раз.", + "keyCreated": "Ключ API создан", + "keyCreatedDescription": "Скопируйте этот ключ сейчас — он не будет показан снова.", + "keyName": "Имя ключа", + "keyNamePlaceholder": "напр. CI/CD конвейер", + "scopedUser": "Облачный пользователь", + "selectUser": "Выберите пользователя...", + "searchUsers": "Поиск пользователей...", + "noUsersFound": "Пользователи не найдены.", + "expiresAt": "Истекает", + "optional": "опционально", + "expiresAtHelp": "Оставьте пустым для ключа, который никогда не истекает.", + "copyWarningTitle": "Сохраните ключ API", + "copyWarningDescription": "Этот ключ будет показан только один раз. Храните его в надежном месте.", + "apiKey": "Ключ API", + "tokenCopied": "Маркер скопирован в буфер обмена", + "creating": "Создание...", + "nameRequired": "Требуется имя ключа", + "userRequired": "Пожалуйста, выберите пользователя", + "failedToCreate": "Не удалось создать ключ API", + "noKeys": "Ключи API не найдены.", + "name": "Наименование", + "prefix": "Префикс", + "lastUsed": "Последнее Использовано", + "never": "Никогда", + "revokeKey": "Отозвать ключ", + "confirmRevoke": "Вы уверены, что хотите отозвать API ключ \"{{name}}? Это действие не может быть отменено.", + "revokedSuccessfully": "API ключ успешно отозван", + "failedToRevoke": "Не удалось отозвать ключ API", + "failedToFetch": "Не удалось получить ключи API" + } }, "hosts": { "title": "Менеджер хостов", @@ -962,28 +1004,8 @@ "enableDocker": "Включить Docker", "defaultPath": "Путь по умолчанию", "defaultPathDesc": "Каталог по умолчанию при открытии файлового менеджера для этого узла", - "tunnelConnections": "Туннель соединения", "connection": "Подключение", "remove": "Удалить", - "sourcePort": "Порт источника", - "sourcePortDesc": " (Источник относится к текущей информации о соединении на вкладке Общие)", - "endpointPort": "Порт точки входа", - "endpointSshConfig": "Конфигурация SSH", - "tunnelForwardDescription": "Этот туннель будет перенаправлять трафик с порта {{sourcePort}} на исходной машине (текущая информация о соединении) на порт {{endpointPort}} на конечной машине.", - "maxRetries": "Макс. повторов", - "maxRetriesDescription": "Максимальное количество попыток повтора для туннельного соединения.", - "retryInterval": "Интервал повтора (секунд)", - "retryIntervalDescription": "Время ожидания между попытками повтора.", - "autoStartContainer": "Автозапуск при запуске контейнера", - "autoStartDesc": "Автоматически запускать этот туннель при запуске контейнера", - "addConnection": "Добавить туннельное соединение", - "tunnelType": "Тип туннеля", - "tunnelTypeLocal": "Локальный (-L)", - "tunnelTypeRemote": "Удалённый (-R)", - "tunnelTypeLocalDesc": "Переслать локальный порт на удаленную конечную точку", - "tunnelTypeRemoteDesc": "Переслать удаленный порт на локальную машину", - "tunnelForwardDescriptionLocal": "Этот туннель будет перенаправлять трафик с локального порта {{sourcePort}} в порт {{endpointPort}} на конечной машине.", - "tunnelForwardDescriptionRemote": "Этот туннель будет перенаправлять трафик с порта {{sourcePort}} на исходной машине (текущая информация о соединении) на порт {{endpointPort}} на конечной машине.", "sshpassRequired": "Для аутентификации пароля требуется Sshpass", "sshpassRequiredDesc": "Для аутентификации паролей в туннелях в системе должен быть установлен sshpass.", "otherInstallMethods": "Другие методы установки:", @@ -1529,7 +1551,7 @@ "splitVertical": "Разбить по вертикали", "closePanel": "Закрыть панель", "reconnect": "Переподключить", - "sessionEnded": "Сессия завершена", + "sessionEnded": "Сессия завершена.", "connectionLost": "Соединение потеряно", "error": "ОШИБКА: {{message}}", "disconnected": "Отключено", @@ -1933,22 +1955,10 @@ "ascending": "По возрастанию", "descending": "По убыванию" }, - "tunnel": { - "log": { - "connecting": "Установка туннельного соединения...", - "sourceConnecting": "Подключение к хосту источника {{host}}...", - "sourceConnected": "Подключено к хосту источника", - "endpointResolving": "Разрешение хоста конечной точки {{host}}...", - "endpointResolved": "Хост конечной точки разрешен", - "forwarding": "Настройка переадресации портов {{localPort}} → {{remotePort}}...", - "connected": "Туннель успешно создан", - "retrying": "Соединение не удалось, повторная попытка в {{countdown}}с (попытка {{attempt}}/{{max}})...", - "retryExhausted": "Достигнут максимум попыток повтора", - "error": "Сбой соединения с туннелем: {{error}}" - } - }, "tunnels": { "title": "SSH туннели", + "noTunnelsConfigured": "Туннели не настроены", + "configureTunnelsInHostSettings": "Настроить туннельные соединения в менеджере хостов для начала", "noSshTunnels": "Нет SSH туннелей", "createFirstTunnelMessage": "Вы еще не создали SSH туннелей. Настройте туннельные соединения в менеджере хостов, чтобы начать.", "connected": "Подключено", @@ -1969,27 +1979,100 @@ "disconnect": "Отключиться", "cancel": "Отмена", "port": "Порт", + "localPort": "Локальный порт", + "remotePort": "Удаленный порт", + "currentHostPort": "Текущий порт хоста", + "endpointPort": "Порт точки входа", + "bindIp": "Локальный IP", + "currentHostIp": "Текущий IP хоста", + "endpointSshConfig": "Конфигурация SSH", + "endpointSshConfigRequired": "Требуется настройка SSH", + "endpointSshHost": "Конечная точка SSH хоста", + "endpointSshHostPlaceholder": "Выберите настроенный хост", + "endpointSshHostRequired": "Выберите SSH хост конечной точки для каждого клиентского туннеля.", "attempt": "Попытка {{current}} из {{max}}", "nextRetryIn": "Следующая повтор через {{seconds}} секунд", "checkDockerLogs": "Проверьте логи Docker по причине ошибки, присоединитесь", "orCreate": "или создать ", "noTunnelConnections": "туннельные соединения не настроены", "tunnelConnections": "Туннель соединения", + "serverTunnels": "Серверные туннели", + "serverTunnelsDesc": "Управляемые бэкендом туннели, хранящиеся с этим хостом.", + "clientTunnels": "Клиентские туннели", + "clientTunnelsUnavailable": "Клиентские туннели требуют клиента для рабочего стола.", + "serverTunnel": "Серверный туннель", + "clientTunnel": "Клиентский Туннель", + "addServerTunnel": "Добавить серверный туннель", + "addClientTunnel": "Добавить клиентский туннель", + "noServerTunnels": "Не настроены туннели сервера.", + "noClientTunnels": "На этом рабочем столе не настроены клиентские туннели.", + "manageClientTunnels": "Управление клиентскими туннелями", "addTunnel": "Добавить Туннель", "editTunnel": "Редактировать Туннель", "deleteTunnel": "Удалить Туннель", "tunnelName": "Название Туннеля", - "localPort": "Локальный порт", "remoteHost": "Удаленный хост", - "remotePort": "Удаленный порт", "autoStart": "Автозапуск", + "autoStartContainer": "Автозапуск при запуске", + "autoStartContainerDesc": "Автоматически запускать этот туннель при запуске сервера Termix.", + "autoStartEnableFailed": "Хост сохранен, но не удалось запустить автозапуск туннелей для {{name}}.", + "clientAutoStartDesc": "Запускается после открытия этого десктопного клиента и остаётся подключенным.", + "clientManualStartDesc": "Используйте Start and Stop from this row. Termix не будет открывать его автоматически.", + "clientRemoteServerNote": "Удаленная пересылка может потребовать AllowTcpForwarding и GatewayPorts на сервере SSH. Удаленный порт закрывается при отключении рабочего стола.", + "clientTunnelStarted": "Клиентский туннель запущен", + "clientTunnelStopped": "Клиентский туннель остановлен", + "tunnelTestSucceeded": "Туннельный тест выполнен", + "tunnelTestFailed": "Тест туннеля не удался", + "localSaved": "Клиентские туннели сохранены", + "localSaveError": "Не удалось сохранить локальные клиентские туннели", + "invalidBindIp": "Локальный IP должен быть действительным адресом IPv4.", + "invalidLocalTargetIp": "Локальный целевой IP должен быть действительным адресом IPv4.", + "invalidCurrentHostIp": "Текущий IP-адрес хоста должен быть действительным адресом IPv4.", + "invalidLocalPort": "Локальный порт должен быть от 1 до 65535.", + "invalidRemotePort": "Удаленный порт должен быть от 1 до 65535.", + "invalidLocalTargetPort": "Локальный целевой порт должен быть от 1 до 65535.", + "invalidEndpointPort": "Порт конечной точки должен быть от 1 до 65535.", + "duplicateAutoStartBind": "Только один клиентский туннель автозапуска может использовать {{bind}}.", + "manualControlError": "Не удалось обновить состояние туннеля.", + "saveHostBeforeManualControl": "Сохраните этот хост перед запуском или остановкой его серверных туннелей.", "status": "Статус", "active": "Активный", "inactive": "Неактивный", "start": "Начать", "stop": "Остановить", + "test": "Тест", "restart": "Перезапустить", "connectionType": "Тип соединения", + "type": "Тип туннеля", + "typeLocal": "Локальный (-L)", + "typeRemote": "Удалённый (-R)", + "typeDynamic": "Динамика (-D)", + "typeServerLocalDesc": "Текущий хост до конечной точки.", + "typeServerRemoteDesc": "Вернуться к текущему хосту.", + "typeClientLocalDesc": "Локальный компьютер к конечной точке.", + "typeClientRemoteDesc": "Вернуться на локальный компьютер.", + "typeClientDynamicDesc": "SOCKS на локальном компьютере.", + "typeDynamicDesc": "Переадресация SOCKS5 CONNECT трафика через SSH", + "forwardDescriptionServerLocal": "Текущий хост {{sourcePort}} → конечная точка {{endpointPort}}.", + "forwardDescriptionServerRemote": "Конечная точка {{endpointPort}} → текущий хост {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS при текущем хосте {{sourcePort}}.", + "forwardDescriptionClientLocal": "Локальный {{sourcePort}} → удаленный {{endpointPort}}.", + "forwardDescriptionClientRemote": "Удаленная {{sourcePort}} → локальная {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS на локальном порту {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS через {{endpoint}}", + "autoNameClientLocal": "Локальная {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → локальная {{localPort}}", + "autoNameClientDynamic": "{{localPort}} SOCKS {{localPort}} через {{endpoint}}", + "route": "Маршрут:", + "lastStarted": "Последнее начало", + "lastTested": "Последняя проверка", + "lastError": "Последняя ошибка", + "maxRetries": "Макс. повторов", + "maxRetriesDescription": "Максимальное количество попыток повторной попытки.", + "retryInterval": "Интервал повтора (секунд)", + "retryIntervalDescription": "Время ожидания между попытками повтора.", "local": "Локальный", "remote": "Удалённый", "dynamic": "Динамический", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Пожалуйста, предоставьте ваши учетные данные SSH для подключения к этому серверу.", "sshPasswordDescription": "Введите пароль для этого SSH соединения.", "sshKeyPasswordDescription": "Если ваш SSH ключ зашифрован, введите здесь ключевую фразу.", + "passphraseRequired": "Требуется пароль", + "passphraseRequiredDescription": "SSH ключ зашифрован. Пожалуйста, введите парольную фразу для разблокировки.", "step1ScanQR": "Шаг 1: Отсканируйте QR-код с вашим приложением-аутентификатором", "manualEntryCode": "Код входа вручную", "cannotScanQRText": "Если вы не можете сканировать QR-код, введите этот код вручную в приложении аутентификатора", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Не удалось завершить сброс пароля", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Не удалось запустить вход OIDC", - "failedUserInfo": "Не удалось получить информацию о пользователе после входа в OIDC", + "failedUserInfo": "Не удалось получить информацию о пользователе после входа", "oidcAuthFailed": "Ошибка аутентификации OIDC", "noTokenReceived": "Нет токенов, полученных от логина", "invalidAuthUrl": "Неправильный URL-адрес авторизации получен из бэкэнда", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Отображать теги под каждым хостом в боковой панели. Отключите, чтобы скрыть все теги.", "account": "Аккаунт", "appearance": "Внешний вид", + "c2sTunnelConfigDesc": "Местные настольные туннели, нацеленные на настроенные хосты SSH.", + "c2sTunnelPresets": "Пресеты клиентского туннеля", + "c2sTunnelPresetsDesc": "Сохраните список локальных туннелей этого клиента в качестве именованного шаблона сервера или загрузите пресет обратно в этот клиент.", + "c2sTunnelPresetsUnavailable": "Пресеты Клиентского туннеля доступны только в клиенте для рабочего стола.", + "c2sPresetName": "Имя шаблона", + "c2sPresetNamePlaceholder": "Имя шаблона клиента", + "c2sPresetToLoad": "Пресет для загрузки", + "c2sNoPresetSelected": "Пресет не выбран", + "c2sNoPresets": "Пресеты не сохранены", + "c2sLoadPreset": "Нагрузка", + "c2sCurrentLocalConfig": "Конфигурация локального клиентского туннеля(ов) {{count}} на этом рабочем столе.", + "c2sPresetSyncNote": "Пресеты являются явными снимками; загрузка одной заменяет список локальных клиентских туннелей этого клиента.", + "c2sPresetSaved": "Предустановка туннеля клиента сохранена", + "c2sPresetLoaded": "Конфигурация туннеля клиента загружена локально", + "c2sPresetRenamed": "Предустановка туннеля клиента переименована", + "c2sPresetDeleted": "Предустановка туннеля клиента удалена", + "c2sPresetLoadError": "Не удалось загрузить пресеты туннеля клиента", "languageLocalization": "Язык и локализация", "fileManagerSettings": "Файловый менеджер", "terminalSettings": "Терминал", @@ -2370,6 +2472,10 @@ "description": "Описание учетных данных SSH", "searchCredentials": "Поиск учётных данных по имени, имени пользователя или тегам...", "sshConfig": "конфигурация endpoint ssh", + "bindLocalhost": "127.0.0.1 (привязка к localhost)", + "localListenerHost": "127.0.0.1 (слушать локально)", + "localTargetHost": "127.0.0.1 (цель на этом компьютере)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/home", "clientId": "ваш идентификатор клиента", "clientSecret": "ваш клиент-секрет", @@ -2549,6 +2655,7 @@ "version": "Версии", "upToDate": "Актуально", "updateAvailable": "Доступно обновление", + "beta": "Бета", "uptime": "Время работы", "database": "База данных", "healthy": "Исправен", @@ -2955,6 +3062,20 @@ "error": "Сбор метрик не удался: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Установка туннельного соединения...", + "sourceConnecting": "Подключение к хосту источника {{host}}...", + "sourceConnected": "Подключено к хосту источника", + "endpointResolving": "Разрешение хоста конечной точки {{host}}...", + "endpointResolved": "Хост конечной точки разрешен", + "forwarding": "Настройка переадресации портов {{localPort}} → {{remotePort}}...", + "connected": "Туннель успешно создан", + "retrying": "Соединение не удалось, повторная попытка в {{countdown}}с (попытка {{attempt}}/{{max}})...", + "retryExhausted": "Достигнут максимум попыток повтора", + "error": "Сбой соединения с туннелем: {{error}}" + } + }, "sftp": { "log": { "connecting": "Подключение к SFTP серверу...", diff --git a/src/locales/translated/sr_SP.json b/src/locales/translated/sr_SP.json index 8c343a8f..54b2a11f 100644 --- a/src/locales/translated/sr_SP.json +++ b/src/locales/translated/sr_SP.json @@ -402,6 +402,8 @@ "currentVersion": "Користите верзију {{version}}", "updateAvailable": "Ажурирање је доступно", "newVersionAvailable": "Нова верзија је доступна! Користите {{current}}, али је доступан {{latest}} .", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "Објављено {{date}}", "downloadUpdate": "Преузми ажурирање", "dismiss": "Одбаци", @@ -426,6 +428,8 @@ "warning": "Упозорење", "info": "Информације", "success": "Успех", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "Учитавање...", "required": "Обавезно", "optional": "Опционо", @@ -471,6 +475,7 @@ "chinese": "Кинески", "german": "Немачки", "cancel": "Откажи", + "done": "Done", "username": "Корисничко име", "name": "Име", "login": "Пријава", @@ -486,6 +491,7 @@ "save": "Сачувај", "saving": "Чување...", "delete": "Обриши", + "rename": "Rename", "edit": "Измени", "add": "Додај", "search": "Претрага", @@ -559,7 +565,8 @@ "passwordCopied": "Лозинка је копирана у међуспремник", "sudoPasswordCopied": "Лозинка за судо је копирана у међуспремник", "noPasswordAvailable": "Није доступна лозинка", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Failed to copy password", + "openFileManager": "Open File Manager" }, "admin": { "title": "Администраторска подешавања", @@ -868,7 +875,42 @@ "passwordMinLength": "Лозинка мора имати најмање 6 карактера", "currentRoles": "Тренутне улоге", "noRolesAssigned": "Нема додељених улога", - "assignNewRole": "Додели нову улогу" + "assignNewRole": "Додели нову улогу", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "Менаџер домаћина", @@ -962,28 +1004,8 @@ "enableDocker": "Омогући Докер", "defaultPath": "Подразумевана путања", "defaultPathDesc": "Подразумевани директоријум при отварању менаџера датотека за овај хост", - "tunnelConnections": "Везе са тунелима", "connection": "Веза", "remove": "Уклони", - "sourcePort": "Изворни порт", - "sourcePortDesc": " (Извор се односи на Детаље тренутне везе на картици Опште)", - "endpointPort": "Порт крајње тачке", - "endpointSshConfig": "SSH конфигурација крајње тачке", - "tunnelForwardDescription": "Овај тунел ће прослеђивати саобраћај са порта {{sourcePort}} на изворној машини (тренутни детаљи везе на картици „Опште“) на порт {{endpointPort}} на крајњој машини.", - "maxRetries": "Максималан број поновних покушаја", - "maxRetriesDescription": "Максималан број поновних покушаја за тунелску везу.", - "retryInterval": "Интервал поновног покушаја (секунде)", - "retryIntervalDescription": "Време чекања између поновних покушаја.", - "autoStartContainer": "Аутоматски старт при покретању контејнера", - "autoStartDesc": "Аутоматски покрени овај тунел када се контејнер покрене", - "addConnection": "Додај везу са тунелом", - "tunnelType": "Тип тунела", - "tunnelTypeLocal": "Локално (-Л)", - "tunnelTypeRemote": "Даљински (-R)", - "tunnelTypeLocalDesc": "Прослеђивање локалног порта на удаљену крајњу тачку", - "tunnelTypeRemoteDesc": "Прослеђивање удаљеног порта на локалну машину", - "tunnelForwardDescriptionLocal": "Овај тунел ће прослеђивати саобраћај са локалног порта {{sourcePort}} на порт {{endpointPort}} на крајњој машини.", - "tunnelForwardDescriptionRemote": "Овај тунел ће прослеђивати саобраћај са порта {{sourcePort}} на изворној машини (тренутни детаљи везе на картици „Опште“) на порт {{endpointPort}} на крајњој машини.", "sshpassRequired": "Sshpass је потребан за аутентификацију лозинком", "sshpassRequiredDesc": "За аутентификацију лозинком у тунелима, sshpass мора бити инсталиран на систему.", "otherInstallMethods": "Други начини инсталације:", @@ -1529,7 +1551,7 @@ "splitVertical": "Подели вертикално", "closePanel": "Затвори панел", "reconnect": "Поново се повежите", - "sessionEnded": "Сесија је завршена", + "sessionEnded": "Session ended.", "connectionLost": "Connection lost", "error": "ГРЕШКА: {{message}}", "disconnected": "Искључено", @@ -1933,22 +1955,10 @@ "ascending": "Растуће", "descending": "Опадајући" }, - "tunnel": { - "log": { - "connecting": "Успостављање везе са тунелом...", - "sourceConnecting": "Повезивање са изворним хостом {{host}}...", - "sourceConnected": "Повезано са изворним хостом", - "endpointResolving": "Разрешавање крајње тачке хоста {{host}}...", - "endpointResolved": "Хост крајње тачке решен", - "forwarding": "Подешавање преусмеравања портова {{localPort}} → {{remotePort}}...", - "connected": "Тунел успешно изграђен", - "retrying": "Веза није успела, поновни покушај за {{countdown}}с (покушај {{attempt}}/{{max}})...", - "retryExhausted": "Достигнут је максималан број покушаја", - "error": "Тунелска веза није успела: {{error}}" - } - }, "tunnels": { "title": "SSH тунели", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "Нема SSH тунела", "createFirstTunnelMessage": "Још увек нисте креирали ниједан SSH тунел. Конфигуришите тунелске везе у Host Manager-у да бисте започели.", "connected": "Повезано", @@ -1969,27 +1979,100 @@ "disconnect": "Прекини везу", "cancel": "Откажи", "port": "Лука", + "localPort": "Локални порт", + "remotePort": "Удаљени порт", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "Покушај {{current}} од {{max}}", "nextRetryIn": "Следећи поновни покушај за {{seconds}} секунди", "checkDockerLogs": "Проверите своје Docker логове за разлог грешке, придружите се", "orCreate": "или креирајте ", "noTunnelConnections": "Није конфигурисана ниједна тунелска веза", "tunnelConnections": "Везе са тунелима", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "Додај тунел", "editTunnel": "Измени тунел", "deleteTunnel": "Обриши тунел", "tunnelName": "Назив тунела", - "localPort": "Локални порт", "remoteHost": "Удаљени хост", - "remotePort": "Удаљени порт", "autoStart": "Аутоматски старт", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "Статус", "active": "Активно", "inactive": "Неактивно", "start": "Почетак", "stop": "Заустави", + "test": "Test", "restart": "Поново покрени", "connectionType": "Тип везе", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "Локално", "remote": "Даљински", "dynamic": "Динамично", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Молимо вас да наведете своје SSH акредитиве да бисте се повезали са овим сервером.", "sshPasswordDescription": "Унесите лозинку за ову SSH везу.", "sshKeyPasswordDescription": "Ако је ваш SSH кључ шифрован, унесите лозинку овде.", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "Корак 1: Скенирајте QR код помоћу апликације за аутентификатор", "manualEntryCode": "Ручни унос кода", "cannotScanQRText": "Ако не можете да скенирате QR код, унесите га ручно у апликацију за аутентификатор", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Ресетовање лозинке није успело", "invalidTotpCode": "Неважећи TOTP код", "failedOidcLogin": "Није успело покретање OIDC пријаве", - "failedUserInfo": "Није успело добијање корисничких података након пријаве на OIDC", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "OIDC аутентификација није успела", "noTokenReceived": "Није примљен токен након пријаве", "invalidAuthUrl": "Неважећи URL за ауторизацију примљен од бекенда", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Прикажи ознаке испод сваког хоста у бочној траци. Онемогући да би се сакриле све ознаке.", "account": "Налог", "appearance": "Изглед", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "Језик и локализација", "fileManagerSettings": "Менаџер датотека", "terminalSettings": "Терминал", @@ -2370,6 +2472,10 @@ "description": "Опис SSH акредитива", "searchCredentials": "Претражите акредитиве по имену, корисничком имену или ознакама...", "sshConfig": "конфигурација SSH крајње тачке", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/кућа", "clientId": "ИД вашег клијента", "clientSecret": "тајна-вашег-клијента", @@ -2549,6 +2655,7 @@ "version": "Верзија", "upToDate": "Ажурирано", "updateAvailable": "Ажурирање је доступно", + "beta": "Beta", "uptime": "Време непрекидног рада", "database": "База података", "healthy": "Здраво", @@ -2955,6 +3062,20 @@ "error": "Прикупљање метрика није успело: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Успостављање везе са тунелом...", + "sourceConnecting": "Повезивање са изворним хостом {{host}}...", + "sourceConnected": "Повезано са изворним хостом", + "endpointResolving": "Разрешавање крајње тачке хоста {{host}}...", + "endpointResolved": "Хост крајње тачке решен", + "forwarding": "Подешавање преусмеравања портова {{localPort}} → {{remotePort}}...", + "connected": "Тунел успешно изграђен", + "retrying": "Веза није успела, поновни покушај за {{countdown}}с (покушај {{attempt}}/{{max}})...", + "retryExhausted": "Достигнут је максималан број покушаја", + "error": "Тунелска веза није успела: {{error}}" + } + }, "sftp": { "log": { "connecting": "Повезивање са SFTP сервером...", diff --git a/src/locales/translated/sv_SE.json b/src/locales/translated/sv_SE.json index bb53cf41..452391a1 100644 --- a/src/locales/translated/sv_SE.json +++ b/src/locales/translated/sv_SE.json @@ -402,6 +402,8 @@ "currentVersion": "Du kör version {{version}}", "updateAvailable": "Uppdatering tillgänglig", "newVersionAvailable": "En ny version är tillgänglig! Du kör {{current}}, men {{latest}} är tillgänglig.", + "betaVersion": "Beta version", + "betaVersionDesc": "Du kör {{current}}som är nyare än den senaste stabila utgåvan {{latest}}.", "releasedOn": "Släppt på {{date}}", "downloadUpdate": "Ladda ner uppdatering", "dismiss": "Avfärda", @@ -426,6 +428,8 @@ "warning": "Varning", "info": "Information", "success": "Klart", + "unsavedChanges": "Osparade ändringar", + "dismiss": "Avfärda", "loading": "Laddar...", "required": "Krävs", "optional": "Valfri", @@ -471,6 +475,7 @@ "chinese": "Kinesiska", "german": "Tyska", "cancel": "Avbryt", + "done": "Klar", "username": "Användarnamn", "name": "Namn", "login": "Inloggning", @@ -486,6 +491,7 @@ "save": "Spara", "saving": "Sparar...", "delete": "Radera", + "rename": "Döp om", "edit": "Redigera", "add": "Lägg till", "search": "Sök", @@ -559,7 +565,8 @@ "passwordCopied": "Lösenord kopierat till urklipp", "sudoPasswordCopied": "Sudo lösenord kopierat till urklipp", "noPasswordAvailable": "Inget lösenord tillgängligt", - "failedToCopyPassword": "Det gick inte att kopiera lösenord" + "failedToCopyPassword": "Det gick inte att kopiera lösenord", + "openFileManager": "Öppna filhanteraren" }, "admin": { "title": "Administratörsinställningar", @@ -868,7 +875,42 @@ "passwordMinLength": "Lösenordet måste vara minst 6 tecken", "currentRoles": "Nuvarande roller", "noRolesAssigned": "Inga roller tilldelade", - "assignNewRole": "Tilldela ny roll" + "assignNewRole": "Tilldela ny roll", + "apiKeys": { + "tabLabel": "API Nycklar", + "title": "API Nycklar", + "createApiKey": "Skapa API-nyckel", + "createApiKeyDescription": "Skapa en ny API-nyckel som gäller för en specifik användare. Token visas endast en gång.", + "keyCreated": "API-nyckel skapad", + "keyCreatedDescription": "Kopiera denna nyckel nu — det kommer inte att visas igen.", + "keyName": "Nyckel namn", + "keyNamePlaceholder": "t.ex. CI/CD Pipeline", + "scopedUser": "Omfattad användare", + "selectUser": "Välj en användar...", + "searchUsers": "Sök användare...", + "noUsersFound": "Inga användare hittades.", + "expiresAt": "Förfaller vid", + "optional": "valfri", + "expiresAtHelp": "Lämna tomt för en nyckel som aldrig går ut.", + "copyWarningTitle": "Spara din API-nyckel", + "copyWarningDescription": "Denna nyckel visas bara en gång. Förvara den på ett säkert ställe.", + "apiKey": "API nyckel", + "tokenCopied": "Token kopierad till urklipp", + "creating": "Skapar...", + "nameRequired": "Nyckelnamn krävs", + "userRequired": "Välj en användare", + "failedToCreate": "Det gick inte att skapa API-nyckel", + "noKeys": "Inga API-nycklar hittades.", + "name": "Namn", + "prefix": "Prefix", + "lastUsed": "Senast använd", + "never": "Aldrig", + "revokeKey": "Återkalla nyckel", + "confirmRevoke": "Är du säker på att du vill återkalla API-nyckeln \"{{name}}\"? Detta kan inte ångras.", + "revokedSuccessfully": "API-nyckel återkallas framgångsrikt", + "failedToRevoke": "Det gick inte att återkalla API-nyckel", + "failedToFetch": "Det gick inte att hämta API-nycklar" + } }, "hosts": { "title": "Värdhanterare", @@ -962,28 +1004,8 @@ "enableDocker": "Aktivera Docker", "defaultPath": "Standard sökväg", "defaultPathDesc": "Förvald katalog när filhanteraren öppnas för denna värd", - "tunnelConnections": "Anslutningar till tunneln", "connection": "Anslutning", "remove": "Radera", - "sourcePort": "Källans port", - "sourcePortDesc": " (Källa hänvisar till aktuella anslutningsdetaljer i fliken Allmänt)", - "endpointPort": "Slutpunkt port", - "endpointSshConfig": "Slutpunkt SSH-konfiguration", - "tunnelForwardDescription": "Denna tunnel kommer att vidarebefordra trafik från port {{sourcePort}} på källmaskinen (aktuella anslutningsdetaljer i allmän flik) till port {{endpointPort}} på slutpunktsmaskinen.", - "maxRetries": "Max antal försök", - "maxRetriesDescription": "Maximalt antal försök att försöka igen för tunnelanslutning.", - "retryInterval": "Försök igen intervall (sekunder)", - "retryIntervalDescription": "Dags att vänta mellan försök igen.", - "autoStartContainer": "Starta automatiskt vid lansering av behållare", - "autoStartDesc": "Starta automatiskt denna tunnel när behållaren startar", - "addConnection": "Lägg till tunnelanslutning", - "tunnelType": "Typ av tunnel", - "tunnelTypeLocal": "Lokal (-L)", - "tunnelTypeRemote": "Fjärrkontroll (-R)", - "tunnelTypeLocalDesc": "Vidarebefordra lokal port till fjärrslutpunkt", - "tunnelTypeRemoteDesc": "Vidarebefordra fjärranslutning till lokal maskin", - "tunnelForwardDescriptionLocal": "Denna tunnel kommer att vidarebefordra trafik från lokal port {{sourcePort}} till port {{endpointPort}} på slutpunktsmaskinen.", - "tunnelForwardDescriptionRemote": "Denna tunnel kommer att vidarebefordra trafik från port {{sourcePort}} på källmaskinen (aktuella anslutningsdetaljer i allmän flik) till port {{endpointPort}} på slutpunktsmaskinen.", "sshpassRequired": "Sshpass krävs för lösenordsautentisering", "sshpassRequiredDesc": "För lösenordsautentisering i tunnlar måste sshpass installeras på systemet.", "otherInstallMethods": "Andra installationsmetoder:", @@ -1529,7 +1551,7 @@ "splitVertical": "Dela vertikalt", "closePanel": "Stäng panelen", "reconnect": "Återanslut", - "sessionEnded": "Sessionen avslutad", + "sessionEnded": "Sessionen avslutades.", "connectionLost": "Anslutning förlorad", "error": "FEL: {{message}}", "disconnected": "Frånkopplad", @@ -1933,22 +1955,10 @@ "ascending": "Stigande", "descending": "Fallande" }, - "tunnel": { - "log": { - "connecting": "Etablerar tunnelanslutning...", - "sourceConnecting": "Ansluter till källvärden {{host}}...", - "sourceConnected": "Ansluten till källvärden", - "endpointResolving": "Löser slutpunktsvärd {{host}}...", - "endpointResolved": "Slutpunkt värd löst", - "forwarding": "Ställer in portvidarebefordran {{localPort}} → {{remotePort}}...", - "connected": "Tunneln har upprättats", - "retrying": "Anslutningen misslyckades, försök igen i {{countdown}}s (försök {{attempt}}/{{max}})...", - "retryExhausted": "Max antal försök har gjorts", - "error": "Tunnelanslutning misslyckades: {{error}}" - } - }, "tunnels": { "title": "SSH-tunnlar", + "noTunnelsConfigured": "Inga tunnlar konfigurerade", + "configureTunnelsInHostSettings": "Konfigurera tunnelanslutningar i värdhanteraren för att komma igång", "noSshTunnels": "Inga SSH-tunnlar", "createFirstTunnelMessage": "Du har inte skapat några SSH-tunnlar än. Konfigurera tunnelanslutningar i värdhanteraren för att komma igång.", "connected": "Ansluten", @@ -1969,27 +1979,100 @@ "disconnect": "Koppla från", "cancel": "Avbryt", "port": "Port", + "localPort": "Lokal port", + "remotePort": "Fjärr port", + "currentHostPort": "Nuvarande värdport", + "endpointPort": "Slutpunkt port", + "bindIp": "Lokal IP", + "currentHostIp": "Nuvarande värd IP", + "endpointSshConfig": "Slutpunkt SSH-konfiguration", + "endpointSshConfigRequired": "Endpoint SSH-konfiguration krävs", + "endpointSshHost": "Slutpunkt SSH värd", + "endpointSshHostPlaceholder": "Välj en konfigurerad värd", + "endpointSshHostRequired": "Välj en slutpunkt SSH-värd för varje klienttunnel.", "attempt": "Försök {{current}} av {{max}}", "nextRetryIn": "Nästa försök igen om {{seconds}} sekunder", "checkDockerLogs": "Kontrollera dina Docker loggar av felskäl, gå med i", "orCreate": "eller skapa en ", "noTunnelConnections": "Inga tunnelanslutningar konfigurerade", "tunnelConnections": "Anslutningar till tunneln", + "serverTunnels": "Serverns tunnlar", + "serverTunnelsDesc": "Backend-hanterade tunnlar lagrade med detta värd.", + "clientTunnels": "Klienttunnlar", + "clientTunnelsUnavailable": "Klienttunnlar kräver en skrivbordsklient.", + "serverTunnel": "Server tunnel", + "clientTunnel": "Klienttunnel", + "addServerTunnel": "Lägg till servertunnel", + "addClientTunnel": "Lägg till klienttunnel", + "noServerTunnels": "Inga servertunnlar har konfigurerats.", + "noClientTunnels": "Inga klienttunnlar konfigurerade på detta skrivbord.", + "manageClientTunnels": "Hantera klienttunnlar", "addTunnel": "Lägg till tunnel", "editTunnel": "Redigera tunnel", "deleteTunnel": "Ta bort tunnel", "tunnelName": "Tunnel namn", - "localPort": "Lokal port", "remoteHost": "Fjärrkontroll värd", - "remotePort": "Fjärr port", "autoStart": "Starta automatiskt", + "autoStartContainer": "Starta automatiskt vid start", + "autoStartContainerDesc": "Starta automatiskt den här tunneln när din Termix server startar.", + "autoStartEnableFailed": "Värden sparad, men misslyckades med att starta auto-starta tunnlar för {{name}}.", + "clientAutoStartDesc": "Startar när denna klient öppnas och förblir ansluten.", + "clientManualStartDesc": "Använd Start och Stop från denna rad. Termix kommer inte att öppna den automatiskt.", + "clientRemoteServerNote": "Fjärrvidarebefordran kan kräva AllowTcpForwarding och GatewayPorts på endpoint SSH-servern. Fjärrporten stängs när detta skrivbord kopplas från.", + "clientTunnelStarted": "Klienttunneln startad", + "clientTunnelStopped": "Klienttunneln stoppad", + "tunnelTestSucceeded": "Tunneltestet lyckades", + "tunnelTestFailed": "Tunneltestet misslyckades", + "localSaved": "Klienttunnlar sparade", + "localSaveError": "Det gick inte att spara lokala klienttunnlar", + "invalidBindIp": "Lokala IP måste vara en giltig IPv4-adress.", + "invalidLocalTargetIp": "Lokalt mål IP måste vara en giltig IPv4-adress.", + "invalidCurrentHostIp": "Nuvarande värdIP-adress måste vara en giltig IPv4-adress.", + "invalidLocalPort": "Lokal hamn måste vara mellan 1 och 65535.", + "invalidRemotePort": "Fjärrporten måste vara mellan 1 och 65535.", + "invalidLocalTargetPort": "Lokal målport måste vara mellan 1 och 65535.", + "invalidEndpointPort": "Endpoint port måste vara mellan 1 och 65535.", + "duplicateAutoStartBind": "Endast en automatisk start klienttunnel kan använda {{bind}}.", + "manualControlError": "Det gick inte att uppdatera tunnelns tillstånd.", + "saveHostBeforeManualControl": "Spara denna värd innan du startar eller stoppar dess servertunnlar.", "status": "Status", "active": "Aktiv", "inactive": "Inaktiv", "start": "Starta", "stop": "Stoppa", + "test": "Testa", "restart": "Starta om", "connectionType": "Typ av anslutning", + "type": "Typ av tunnel", + "typeLocal": "Lokal (-L)", + "typeRemote": "Fjärrkontroll (-R)", + "typeDynamic": "Dynamisk (-D)", + "typeServerLocalDesc": "Nuvarande värd till slutpunkt.", + "typeServerRemoteDesc": "Slutpunkt tillbaka till nuvarande värd.", + "typeClientLocalDesc": "Lokal dator till slutpunkt.", + "typeClientRemoteDesc": "Slutpunkt tillbaka till lokal dator.", + "typeClientDynamicDesc": "SOCKS på lokal dator.", + "typeDynamicDesc": "Vidarebefordra SOCKS5 CONNECT trafik genom SSH", + "forwardDescriptionServerLocal": "Nuvarande värd {{sourcePort}} → slutpunkt {{endpointPort}}.", + "forwardDescriptionServerRemote": "Slutpunkt {{endpointPort}} → nuvarande värd {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS på nuvarande värd {{sourcePort}}.", + "forwardDescriptionClientLocal": "Lokalt {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Fjärr {{sourcePort}} → lokal {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS på lokal port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Lokalt {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → lokal {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Senast startad", + "lastTested": "Senast testad", + "lastError": "Senaste fel", + "maxRetries": "Max antal försök", + "maxRetriesDescription": "Maximalt antal försök att försöka igen.", + "retryInterval": "Försök igen intervall (sekunder)", + "retryIntervalDescription": "Dags att vänta mellan försök igen.", "local": "Lokal", "remote": "Fjärrkontroll", "dynamic": "Dynamisk", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Ange dina SSH-uppgifter för att ansluta till den här servern.", "sshPasswordDescription": "Ange lösenordet för denna SSH-anslutning.", "sshKeyPasswordDescription": "Om din SSH-nyckel är krypterad, ange lösenfrasen här.", + "passphraseRequired": "Lösenfras krävs", + "passphraseRequiredDescription": "SSH-nyckeln är krypterad. Ange lösenfrasen för att låsa upp den.", "step1ScanQR": "Steg 1: Skanna QR-koden med din autentiseringsapp", "manualEntryCode": "Manuell inmatningskod", "cannotScanQRText": "Om du inte kan skanna QR-koden anger du koden manuellt i din autentiseringsapp", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Det gick inte att slutföra lösenordsåterställningen", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Det gick inte att starta OIDC-inloggning", - "failedUserInfo": "Det gick inte att hämta användarinfo efter OIDC-inloggning", + "failedUserInfo": "Det gick inte att hämta användarinformation efter inloggningen", "oidcAuthFailed": "OIDC-autentisering misslyckades", "noTokenReceived": "Ingen token mottagen från inloggningen", "invalidAuthUrl": "Ogiltig auktoriserings-URL mottagen från backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Visa taggar under varje värd i sidofältet. Inaktivera för att dölja alla taggar.", "account": "Konto", "appearance": "Utseende", + "c2sTunnelConfigDesc": "Lokala stationära tunnlar med inriktning på konfigurerade SSH-värdar.", + "c2sTunnelPresets": "Förinställningar för klienttunnel", + "c2sTunnelPresetsDesc": "Spara klientens lokala tunnellista som en namngiven server förinställning, eller ladda en förinställning tillbaka till denna klient.", + "c2sTunnelPresetsUnavailable": "Förinställningar för klienttunnlar är endast tillgängliga i klientklienten.", + "c2sPresetName": "Förinställt namn", + "c2sPresetNamePlaceholder": "Klientens förinställda namn", + "c2sPresetToLoad": "Förval att ladda", + "c2sNoPresetSelected": "Ingen förinställning vald", + "c2sNoPresets": "Inga förval sparade", + "c2sLoadPreset": "Ladda", + "c2sCurrentLocalConfig": "{{count}} lokala klienttunnel(er) konfigurerade på detta skrivbord.", + "c2sPresetSyncNote": "Förval är explicita ögonblicksbilder; inläsning av en ersätter klientens lokala klienttunnellista.", + "c2sPresetSaved": "Förinställning för klienttunneln sparad", + "c2sPresetLoaded": "Klienttunnelförinställning laddad lokalt", + "c2sPresetRenamed": "Förinställd klienttunnel bytt namn", + "c2sPresetDeleted": "Förinställning för klienttunneln borttagen", + "c2sPresetLoadError": "Det gick inte att ladda förinställningar för klienttunneln", "languageLocalization": "Språk & Lokalisering", "fileManagerSettings": "Filhanterare", "terminalSettings": "Terminal", @@ -2370,6 +2472,10 @@ "description": "SSH-autentiseringsbeskrivning", "searchCredentials": "Sök inloggningsuppgifter efter namn, användarnamn eller taggar...", "sshConfig": "slutpunkt ssh konfiguration", + "bindLocalhost": "127.0.0.1 (bind till localhost)", + "localListenerHost": "127.0.0.1 (lyssna lokalt)", + "localTargetHost": "127.0.0.1 (mål på denna dator)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/hem", "clientId": "ditt-klient-ID", "clientSecret": "din-klient-hemlighet", @@ -2549,6 +2655,7 @@ "version": "Version", "upToDate": "Upp till datum", "updateAvailable": "Uppdatering tillgänglig", + "beta": "Beta", "uptime": "Drifttid", "database": "Databas", "healthy": "Friska", @@ -2955,6 +3062,20 @@ "error": "Insamling av mätvärden misslyckades: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Etablerar tunnelanslutning...", + "sourceConnecting": "Ansluter till källvärden {{host}}...", + "sourceConnected": "Ansluten till källvärden", + "endpointResolving": "Löser slutpunktsvärd {{host}}...", + "endpointResolved": "Slutpunkt värd löst", + "forwarding": "Ställer in portvidarebefordran {{localPort}} → {{remotePort}}...", + "connected": "Tunneln har upprättats", + "retrying": "Anslutningen misslyckades, försök igen i {{countdown}}s (försök {{attempt}}/{{max}})...", + "retryExhausted": "Max antal försök har gjorts", + "error": "Tunnelanslutning misslyckades: {{error}}" + } + }, "sftp": { "log": { "connecting": "Ansluter till SFTP-server...", diff --git a/src/locales/translated/th_TH.json b/src/locales/translated/th_TH.json index d16ad145..8560c5d7 100644 --- a/src/locales/translated/th_TH.json +++ b/src/locales/translated/th_TH.json @@ -402,6 +402,8 @@ "currentVersion": "คุณกำลังใช้งานเวอร์ชัน {{version}}", "updateAvailable": "มีการอัปเดตแล้ว", "newVersionAvailable": "มีเวอร์ชันใหม่ให้ใช้งานแล้ว! คุณกำลังใช้งาน {{current}}อยู่ แต่มี {{latest}} ให้ใช้งานแล้ว", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "เผยแพร่เมื่อ {{date}}", "downloadUpdate": "ดาวน์โหลดการอัปเดต", "dismiss": "อนุญาตให้ออกไป", @@ -426,6 +428,8 @@ "warning": "คำเตือน", "info": "ข้อมูล", "success": "ความสำเร็จ", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "กำลังโหลด...", "required": "ที่จำเป็น", "optional": "ไม่จำเป็น", @@ -471,6 +475,7 @@ "chinese": "ชาวจีน", "german": "ภาษาเยอรมัน", "cancel": "ยกเลิก", + "done": "Done", "username": "ชื่อผู้ใช้", "name": "ชื่อ", "login": "เข้าสู่ระบบ", @@ -486,6 +491,7 @@ "save": "บันทึก", "saving": "ประหยัด...", "delete": "ลบ", + "rename": "Rename", "edit": "แก้ไข", "add": "เพิ่ม", "search": "ค้นหา", @@ -559,7 +565,8 @@ "passwordCopied": "คัดลอกรหัสผ่านไปยังคลิปบอร์ดแล้ว", "sudoPasswordCopied": "คัดลอกรหัสผ่าน Sudo ไปยังคลิปบอร์ดแล้ว", "noPasswordAvailable": "ไม่มีรหัสผ่านให้ใช้งาน", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Failed to copy password", + "openFileManager": "Open File Manager" }, "admin": { "title": "การตั้งค่าผู้ดูแลระบบ", @@ -868,7 +875,42 @@ "passwordMinLength": "รหัสผ่านต้องมีความยาวอย่างน้อย 6 ตัวอักษร", "currentRoles": "ตำแหน่งงานปัจจุบัน", "noRolesAssigned": "ไม่มีการกำหนดบทบาทใดๆ", - "assignNewRole": "มอบหมายบทบาทใหม่" + "assignNewRole": "มอบหมายบทบาทใหม่", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "ผู้จัดการโฮสต์", @@ -962,28 +1004,8 @@ "enableDocker": "เปิดใช้งาน Docker", "defaultPath": "เส้นทางเริ่มต้น", "defaultPathDesc": "ไดเร็กทอรีเริ่มต้นเมื่อเปิดตัวจัดการไฟล์สำหรับโฮสต์นี้", - "tunnelConnections": "การเชื่อมต่ออุโมงค์", "connection": "การเชื่อมต่อ", "remove": "ลบ", - "sourcePort": "พอร์ตต้นทาง", - "sourcePortDesc": " (แหล่งที่มาหมายถึงรายละเอียดการเชื่อมต่อปัจจุบันในแท็บทั่วไป)", - "endpointPort": "พอร์ตปลายทาง", - "endpointSshConfig": "การกำหนดค่า SSH ปลายทาง", - "tunnelForwardDescription": "อุโมงค์นี้จะส่งต่อทราฟฟิกจากพอร์ต {{sourcePort}} บนเครื่องต้นทาง (รายละเอียดการเชื่อมต่อปัจจุบันในแท็บทั่วไป) ไปยังพอร์ต {{endpointPort}} บนเครื่องปลายทาง", - "maxRetries": "จำนวนครั้งการลองใหม่สูงสุด", - "maxRetriesDescription": "จำนวนครั้งสูงสุดในการลองเชื่อมต่ออุโมงค์อีกครั้ง", - "retryInterval": "ช่วงเวลาการลองใหม่ (วินาที)", - "retryIntervalDescription": "ต้องรอเวลาระหว่างการลองใหม่แต่ละครั้ง", - "autoStartContainer": "เริ่มการทำงานอัตโนมัติเมื่อคอนเทนเนอร์เริ่มทำงาน", - "autoStartDesc": "เริ่มอุโมงค์นี้โดยอัตโนมัติเมื่อคอนเทนเนอร์เริ่มทำงาน", - "addConnection": "เพิ่มการเชื่อมต่ออุโมงค์", - "tunnelType": "ประเภทอุโมงค์", - "tunnelTypeLocal": "ท้องถิ่น (-L)", - "tunnelTypeRemote": "รีโมท (-R)", - "tunnelTypeLocalDesc": "ส่งต่อพอร์ตภายในเครื่องไปยังปลายทางระยะไกล", - "tunnelTypeRemoteDesc": "ส่งต่อพอร์ตระยะไกลไปยังเครื่องโลคอล", - "tunnelForwardDescriptionLocal": "อุโมงค์นี้จะส่งต่อทราฟฟิกจากพอร์ตภายในเครื่อง {{sourcePort}} ไปยังพอร์ต {{endpointPort}} บนเครื่องปลายทาง", - "tunnelForwardDescriptionRemote": "อุโมงค์นี้จะส่งต่อทราฟฟิกจากพอร์ต {{sourcePort}} บนเครื่องต้นทาง (รายละเอียดการเชื่อมต่อปัจจุบันในแท็บทั่วไป) ไปยังพอร์ต {{endpointPort}} บนเครื่องปลายทาง", "sshpassRequired": "ต้องใช้ SSHPass เพื่อยืนยันรหัสผ่าน", "sshpassRequiredDesc": "สำหรับการตรวจสอบสิทธิ์ด้วยรหัสผ่านในอุโมงค์เชื่อมต่อ ต้องติดตั้ง sshpass ไว้ในระบบ", "otherInstallMethods": "วิธีการติดตั้งอื่นๆ:", @@ -1529,7 +1551,7 @@ "splitVertical": "แยกแนวตั้ง", "closePanel": "ปิดแผงควบคุม", "reconnect": "เชื่อมต่อใหม่", - "sessionEnded": "สิ้นสุดการประชุม", + "sessionEnded": "Session ended.", "connectionLost": "Connection lost", "error": "ข้อผิดพลาด: {{message}}", "disconnected": "ตัดการเชื่อมต่อ", @@ -1933,22 +1955,10 @@ "ascending": "ขึ้นไป", "descending": "ลง" }, - "tunnel": { - "log": { - "connecting": "การเชื่อมต่ออุโมงค์...", - "sourceConnecting": "กำลังเชื่อมต่อกับโฮสต์ต้นทาง {{host}}...", - "sourceConnected": "เชื่อมต่อกับโฮสต์ต้นทางแล้ว", - "endpointResolving": "กำลังแก้ไขโฮสต์ปลายทาง {{host}}...", - "endpointResolved": "ระบุโฮสต์ปลายทางแล้ว", - "forwarding": "กำลังตั้งค่าการส่งต่อพอร์ต {{localPort}} → {{remotePort}}...", - "connected": "อุโมงค์สร้างเสร็จเรียบร้อยแล้ว", - "retrying": "การเชื่อมต่อล้มเหลว กำลังลองใหม่ใน {{countdown}}วินาที (ครั้งที่ {{attempt}}/{{max}})...", - "retryExhausted": "จำนวนครั้งการลองใหม่สูงสุดครบแล้ว", - "error": "การเชื่อมต่ออุโมงค์ล้มเหลว: {{error}}" - } - }, "tunnels": { "title": "อุโมงค์ SSH", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "ไม่มีอุโมงค์ SSH", "createFirstTunnelMessage": "คุณยังไม่ได้สร้างอุโมงค์ SSH ใดๆ เลย กำหนดค่าการเชื่อมต่ออุโมงค์ใน Host Manager เพื่อเริ่มต้นใช้งาน", "connected": "เชื่อมต่อแล้ว", @@ -1969,27 +1979,100 @@ "disconnect": "ตัดการเชื่อมต่อ", "cancel": "ยกเลิก", "port": "ท่าเรือ", + "localPort": "ท่าเรือท้องถิ่น", + "remotePort": "พอร์ตระยะไกล", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "ความพยายาม {{current}} ของ {{max}}", "nextRetryIn": "ลองใหม่อีกครั้งใน {{seconds}} วินาที", "checkDockerLogs": "ตรวจสอบบันทึก Docker ของคุณเพื่อดูสาเหตุของข้อผิดพลาด เข้าร่วมกลุ่มสนทนา", "orCreate": "หรือสร้าง ", "noTunnelConnections": "ไม่มีการกำหนดค่าการเชื่อมต่ออุโมงค์", "tunnelConnections": "การเชื่อมต่ออุโมงค์", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "เพิ่มอุโมงค์", "editTunnel": "แก้ไขอุโมงค์", "deleteTunnel": "ลบอุโมงค์", "tunnelName": "ชื่ออุโมงค์", - "localPort": "ท่าเรือท้องถิ่น", "remoteHost": "โฮสต์ระยะไกล", - "remotePort": "พอร์ตระยะไกล", "autoStart": "เริ่มอัตโนมัติ", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "สถานะ", "active": "คล่องแคล่ว", "inactive": "ไม่ใช้งาน", "start": "เริ่ม", "stop": "หยุด", + "test": "Test", "restart": "เริ่มใหม่", "connectionType": "ประเภทการเชื่อมต่อ", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "ท้องถิ่น", "remote": "ระยะไกล", "dynamic": "พลวัต", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "โปรดระบุข้อมูลประจำตัว SSH ของคุณเพื่อเชื่อมต่อกับเซิร์ฟเวอร์นี้", "sshPasswordDescription": "ป้อนรหัสผ่านสำหรับการเชื่อมต่อ SSH นี้", "sshKeyPasswordDescription": "หากคีย์ SSH ของคุณถูกเข้ารหัส ให้ป้อนรหัสผ่านที่นี่", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "ขั้นตอนที่ 1: สแกนคิวอาร์โค้ดด้วยแอปยืนยันตัวตนของคุณ", "manualEntryCode": "รหัสป้อนด้วยตนเอง", "cannotScanQRText": "หากคุณไม่สามารถสแกนคิวอาร์โค้ดได้ โปรดป้อนโค้ดนี้ด้วยตนเองในแอปยืนยันตัวตนของคุณ", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "ไม่สามารถทำการรีเซ็ตรหัสผ่านให้เสร็จสมบูรณ์ได้", "invalidTotpCode": "รหัส TOTP ไม่ถูกต้อง", "failedOidcLogin": "ไม่สามารถเริ่มต้นการเข้าสู่ระบบ OIDC ได้", - "failedUserInfo": "ไม่สามารถรับข้อมูลผู้ใช้ได้หลังจากการเข้าสู่ระบบ OIDC", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "การตรวจสอบสิทธิ์ OIDC ล้มเหลว", "noTokenReceived": "ไม่ได้รับโทเค็นจากการเข้าสู่ระบบ", "invalidAuthUrl": "ได้รับ URL การอนุญาตที่ไม่ถูกต้องจากแบ็กเอนด์", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "แสดงแท็กใต้แต่ละโฮสต์ในแถบด้านข้าง ปิดใช้งานเพื่อซ่อนแท็กทั้งหมด", "account": "บัญชี", "appearance": "รูปร่าง", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "ภาษาและการแปล", "fileManagerSettings": "ตัวจัดการไฟล์", "terminalSettings": "เทอร์มินัล", @@ -2370,6 +2472,10 @@ "description": "คำอธิบายข้อมูลรับรอง SSH", "searchCredentials": "ค้นหาข้อมูลประจำตัวโดยใช้ชื่อ ชื่อผู้ใช้ หรือแท็ก...", "sshConfig": "การกำหนดค่า SSH ปลายทาง", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/บ้าน", "clientId": "รหัสไคลเอ็นต์ของคุณ", "clientSecret": "ความลับของลูกค้าของคุณ", @@ -2549,6 +2655,7 @@ "version": "เวอร์ชั่น", "upToDate": "อัปเดตล่าสุด", "updateAvailable": "มีการอัปเดตแล้ว", + "beta": "Beta", "uptime": "เวลาใช้งาน", "database": "ฐานข้อมูล", "healthy": "สุขภาพดี", @@ -2955,6 +3062,20 @@ "error": "การรวบรวมข้อมูลเมตริกล้มเหลว: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "การเชื่อมต่ออุโมงค์...", + "sourceConnecting": "กำลังเชื่อมต่อกับโฮสต์ต้นทาง {{host}}...", + "sourceConnected": "เชื่อมต่อกับโฮสต์ต้นทางแล้ว", + "endpointResolving": "กำลังแก้ไขโฮสต์ปลายทาง {{host}}...", + "endpointResolved": "ระบุโฮสต์ปลายทางแล้ว", + "forwarding": "กำลังตั้งค่าการส่งต่อพอร์ต {{localPort}} → {{remotePort}}...", + "connected": "อุโมงค์สร้างเสร็จเรียบร้อยแล้ว", + "retrying": "การเชื่อมต่อล้มเหลว กำลังลองใหม่ใน {{countdown}}วินาที (ครั้งที่ {{attempt}}/{{max}})...", + "retryExhausted": "จำนวนครั้งการลองใหม่สูงสุดครบแล้ว", + "error": "การเชื่อมต่ออุโมงค์ล้มเหลว: {{error}}" + } + }, "sftp": { "log": { "connecting": "กำลังเชื่อมต่อกับเซิร์ฟเวอร์ SFTP...", diff --git a/src/locales/translated/tr_TR.json b/src/locales/translated/tr_TR.json index 54c8469a..2eef3019 100644 --- a/src/locales/translated/tr_TR.json +++ b/src/locales/translated/tr_TR.json @@ -402,6 +402,8 @@ "currentVersion": "Şu anda {{version}}sürümünü çalıştırıyorsunuz.", "updateAvailable": "Güncelleme Mevcut", "newVersionAvailable": "Yeni bir sürüm mevcut! Şu anda {{current}}çalıştırıyorsunuz, ancak {{latest}} kullanılabilir durumda.", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "{{date}}tarihinde yayınlandı", "downloadUpdate": "Güncellemeyi İndir", "dismiss": "Azletmek", @@ -426,6 +428,8 @@ "warning": "Uyarı", "info": "Bilgi", "success": "Başarı", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "Yükleniyor...", "required": "Gerekli", "optional": "İsteğe bağlı", @@ -471,6 +475,7 @@ "chinese": "Çince", "german": "Almanca", "cancel": "İptal etmek", + "done": "Done", "username": "Kullanıcı adı", "name": "İsim", "login": "Giriş yapmak", @@ -486,6 +491,7 @@ "save": "Kaydetmek", "saving": "Tasarruf...", "delete": "Silmek", + "rename": "Rename", "edit": "Düzenlemek", "add": "Eklemek", "search": "Aramak", @@ -559,7 +565,8 @@ "passwordCopied": "Parola panoya kopyalandı", "sudoPasswordCopied": "Sudo şifresi panoya kopyalandı", "noPasswordAvailable": "Şifre mevcut değil.", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Failed to copy password", + "openFileManager": "Open File Manager" }, "admin": { "title": "Yönetici Ayarları", @@ -868,7 +875,42 @@ "passwordMinLength": "Parola en az 6 karakter uzunluğunda olmalıdır.", "currentRoles": "Mevcut Görevler", "noRolesAssigned": "Görev atanmadı.", - "assignNewRole": "Yeni Rol Ata" + "assignNewRole": "Yeni Rol Ata", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "Sunucu Yöneticisi", @@ -962,28 +1004,8 @@ "enableDocker": "Docker'ı etkinleştirin", "defaultPath": "Varsayılan Yol", "defaultPathDesc": "Bu sunucu için dosya yöneticisi açıldığında varsayılan dizin.", - "tunnelConnections": "Tünel Bağlantıları", "connection": "Bağlantı", "remove": "Kaldırmak", - "sourcePort": "Kaynak Bağlantı Noktası", - "sourcePortDesc": " (Kaynak, Genel sekmesindeki Geçerli Bağlantı Ayrıntıları'na atıfta bulunmaktadır.)", - "endpointPort": "Uç Nokta Bağlantı Noktası", - "endpointSshConfig": "Uç Nokta SSH Yapılandırması", - "tunnelForwardDescription": "Bu tünel, kaynak makinedeki {{sourcePort}} portundan (genel sekmesindeki mevcut bağlantı ayrıntıları) gelen trafiği uç nokta makinedeki {{endpointPort}} portuna yönlendirecektir.", - "maxRetries": "Maksimum Yeniden Deneme Sayısı", - "maxRetriesDescription": "Tünel bağlantısı için maksimum yeniden deneme sayısı.", - "retryInterval": "Tekrar Deneme Aralığı (saniye)", - "retryIntervalDescription": "Yeniden deneme girişimleri arasında beklenecek süre.", - "autoStartContainer": "Konteyner Başlatıldığında Otomatik Başlatma", - "autoStartDesc": "Konteyner başlatıldığında bu tüneli otomatik olarak başlat.", - "addConnection": "Tünel Bağlantısı Ekle", - "tunnelType": "Tünel Tipi", - "tunnelTypeLocal": "Yerel (-L)", - "tunnelTypeRemote": "Uzaktan (-R)", - "tunnelTypeLocalDesc": "Yerel portu uzak uç noktaya yönlendirin", - "tunnelTypeRemoteDesc": "Uzak bağlantı noktasını yerel makineye yönlendirin", - "tunnelForwardDescriptionLocal": "Bu tünel, yerel port {{sourcePort}} 'dan gelen trafiği uç nokta makinesindeki port {{endpointPort}} 'e yönlendirecektir.", - "tunnelForwardDescriptionRemote": "Bu tünel, kaynak makinedeki {{sourcePort}} portundan (genel sekmesindeki mevcut bağlantı ayrıntıları) gelen trafiği uç nokta makinedeki {{endpointPort}} portuna yönlendirecektir.", "sshpassRequired": "Parola doğrulaması için SSH şifresi gereklidir.", "sshpassRequiredDesc": "Tünellerde parola kimlik doğrulaması için sistemde sshpass kurulu olmalıdır.", "otherInstallMethods": "Diğer kurulum yöntemleri:", @@ -1529,7 +1551,7 @@ "splitVertical": "Dikey Bölünmüş", "closePanel": "Paneli Kapat", "reconnect": "Yeniden bağlan", - "sessionEnded": "Oturum Sona Erdi", + "sessionEnded": "Session ended.", "connectionLost": "Connection lost", "error": "HATA: {{message}}", "disconnected": "Bağlantı kesildi", @@ -1933,22 +1955,10 @@ "ascending": "Yükselen", "descending": "İnen" }, - "tunnel": { - "log": { - "connecting": "Tünel bağlantısı kuruluyor...", - "sourceConnecting": "Kaynak sunucuya bağlanılıyor {{host}}...", - "sourceConnected": "Kaynak sunucuya bağlandı.", - "endpointResolving": "Uç nokta ana bilgisayarını çözümlüyor {{host}}...", - "endpointResolved": "Uç nokta ana bilgisayarı çözümlendi", - "forwarding": "Port yönlendirmesi ayarlanıyor {{localPort}} → {{remotePort}}...", - "connected": "Tünel başarıyla kuruldu.", - "retrying": "Bağlantı başarısız oldu, {{countdown}}saniye sonra tekrar denenecek (deneme {{attempt}}/{{max}})...", - "retryExhausted": "Maksimum yeniden deneme sayısına ulaşıldı.", - "error": "Tünel bağlantısı başarısız oldu: {{error}}" - } - }, "tunnels": { "title": "SSH Tünelleri", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "SSH Tüneli Yok", "createFirstTunnelMessage": "Henüz hiçbir SSH tüneli oluşturmadınız. Başlamak için Ana Bilgisayar Yöneticisi'nde tünel bağlantılarını yapılandırın.", "connected": "Bağlı", @@ -1969,27 +1979,100 @@ "disconnect": "Bağlantıyı kes", "cancel": "İptal etmek", "port": "Liman", + "localPort": "Yerel Liman", + "remotePort": "Uzak Liman", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "{{max}}'in {{current}} denemesi", "nextRetryIn": "Sonraki deneme {{seconds}} saniye sonra", "checkDockerLogs": "Hata nedenini öğrenmek için Docker günlüklerinizi kontrol edin, katılın.", "orCreate": "veya bir oluşturun ", "noTunnelConnections": "Tünel bağlantısı yapılandırılmamış.", "tunnelConnections": "Tünel Bağlantıları", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "Tünel Ekle", "editTunnel": "Tüneli Düzenle", "deleteTunnel": "Tüneli Sil", "tunnelName": "Tünel Adı", - "localPort": "Yerel Liman", "remoteHost": "Uzak Sunucu", - "remotePort": "Uzak Liman", "autoStart": "Otomatik Başlatma", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "Durum", "active": "Aktif", "inactive": "Aktif değil", "start": "Başlangıç", "stop": "Durmak", + "test": "Test", "restart": "Tekrar başlat", "connectionType": "Bağlantı Türü", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "Yerel", "remote": "Uzak", "dynamic": "Dinamik", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Lütfen bu sunucuya bağlanmak için SSH kimlik bilgilerinizi girin.", "sshPasswordDescription": "Bu SSH bağlantısı için şifreyi girin.", "sshKeyPasswordDescription": "SSH anahtarınız şifrelenmişse, parolayı buraya girin.", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "Adım 1: Kimlik doğrulama uygulamanızla QR kodunu tarayın.", "manualEntryCode": "Manuel Giriş Kodu", "cannotScanQRText": "QR kodunu tarayamıyorsanız, bu kodu kimlik doğrulama uygulamanıza manuel olarak girin.", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Parola sıfırlama işlemi tamamlanamadı.", "invalidTotpCode": "Geçersiz TOTP kodu", "failedOidcLogin": "OIDC oturum açma işlemi başlatılamadı.", - "failedUserInfo": "OIDC oturum açma işleminden sonra kullanıcı bilgilerini alma başarısız oldu.", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "OIDC kimlik doğrulaması başarısız oldu", "noTokenReceived": "Giriş işleminden hiçbir belirteç alınmadı.", "invalidAuthUrl": "Arka uçtan geçersiz yetkilendirme URL'si alındı.", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Kenar çubuğundaki her sunucunun altında etiketleri görüntüleyin. Tüm etiketleri gizlemek için devre dışı bırakın.", "account": "Hesap", "appearance": "Dış görünüş", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "Dil ve Yerelleştirme", "fileManagerSettings": "Dosya Yöneticisi", "terminalSettings": "terminal", @@ -2370,6 +2472,10 @@ "description": "SSH kimlik bilgisi açıklaması", "searchCredentials": "İsim, kullanıcı adı veya etiketlere göre kimlik bilgilerini arayın...", "sshConfig": "uç nokta ssh yapılandırması", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/Ev", "clientId": "istemci kimliğiniz", "clientSecret": "müşteri sırrınız", @@ -2549,6 +2655,7 @@ "version": "Sürüm", "upToDate": "Güncel", "updateAvailable": "Güncelleme Mevcut", + "beta": "Beta", "uptime": "Çalışma süresi", "database": "Veritabanı", "healthy": "Sağlıklı", @@ -2955,6 +3062,20 @@ "error": "Ölçüm toplama başarısız oldu: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Tünel bağlantısı kuruluyor...", + "sourceConnecting": "Kaynak sunucuya bağlanılıyor {{host}}...", + "sourceConnected": "Kaynak sunucuya bağlandı.", + "endpointResolving": "Uç nokta ana bilgisayarını çözümlüyor {{host}}...", + "endpointResolved": "Uç nokta ana bilgisayarı çözümlendi", + "forwarding": "Port yönlendirmesi ayarlanıyor {{localPort}} → {{remotePort}}...", + "connected": "Tünel başarıyla kuruldu.", + "retrying": "Bağlantı başarısız oldu, {{countdown}}saniye sonra tekrar denenecek (deneme {{attempt}}/{{max}})...", + "retryExhausted": "Maksimum yeniden deneme sayısına ulaşıldı.", + "error": "Tünel bağlantısı başarısız oldu: {{error}}" + } + }, "sftp": { "log": { "connecting": "SFTP sunucusuna bağlanılıyor...", diff --git a/src/locales/translated/uk_UA.json b/src/locales/translated/uk_UA.json index 4a94b690..40ef3ee8 100644 --- a/src/locales/translated/uk_UA.json +++ b/src/locales/translated/uk_UA.json @@ -402,6 +402,8 @@ "currentVersion": "Ваша версія {{version}}", "updateAvailable": "Доступне оновлення", "newVersionAvailable": "Доступна нова версія! Ви використовуєте {{current}}, але {{latest}} доступна.", + "betaVersion": "Бета версія", + "betaVersionDesc": "Ви використовуєте {{current}}, який є новішим, ніж останній стабільний реліз {{latest}}.", "releasedOn": "Випущена на {{date}}", "downloadUpdate": "Завантажити оновлення", "dismiss": "Відхилити", @@ -426,6 +428,8 @@ "warning": "Застереження", "info": "Інформація", "success": "Успіх", + "unsavedChanges": "Незбережені зміни", + "dismiss": "Відхилити", "loading": "Завантажується...", "required": "Обов'язково", "optional": "За бажанням", @@ -471,6 +475,7 @@ "chinese": "Китайська", "german": "Німецька", "cancel": "Скасувати", + "done": "Виконано", "username": "Ім'я користувача", "name": "Ім'я", "login": "Логін", @@ -486,6 +491,7 @@ "save": "Зберегти", "saving": "Збереження...", "delete": "Видалити", + "rename": "Перейменувати", "edit": "Редагувати", "add": "Додати", "search": "Пошук", @@ -559,7 +565,8 @@ "passwordCopied": "Пароль скопійовано до буфера обміну", "sudoPasswordCopied": "Пароль Sudo скопійовано до буфера обміну", "noPasswordAvailable": "Немає доступного пароля", - "failedToCopyPassword": "Не вдалося скопіювати пароль" + "failedToCopyPassword": "Не вдалося скопіювати пароль", + "openFileManager": "Відкрити файловий менеджер" }, "admin": { "title": "Адміністративні налаштування", @@ -868,7 +875,42 @@ "passwordMinLength": "Пароль повинен містити щонайменше 6 символів", "currentRoles": "Поточні ролі", "noRolesAssigned": "Немає призначених ролей", - "assignNewRole": "Призначити нову роль" + "assignNewRole": "Призначити нову роль", + "apiKeys": { + "tabLabel": "Ключі API", + "title": "Ключі API", + "createApiKey": "Створити ключ API", + "createApiKeyDescription": "Створити новий ключ API, видимий для конкретного користувача. Токен показується лише один раз.", + "keyCreated": "Створено ключ API", + "keyCreatedDescription": "Скопіюйте цей ключ зараз - він більше не буде показуватись.", + "keyName": "Назва ключа", + "keyNamePlaceholder": "напр. CI/CD Pipeline", + "scopedUser": "Скорочений користувач", + "selectUser": "Виберіть користувача...", + "searchUsers": "Пошук користувачів...", + "noUsersFound": "Користувачів не знайдено.", + "expiresAt": "Завершується в", + "optional": "необов'язково", + "expiresAtHelp": "(залиште порожнім для ключа не визначеного терміну.", + "copyWarningTitle": "Зберегти ваш ключ API", + "copyWarningDescription": "Цей ключ буде показано лише один раз. Зберігайте його в безпечному місці.", + "apiKey": "API ключ", + "tokenCopied": "Маркер скопійовано до буфера обміну", + "creating": "Створюю...", + "nameRequired": "Потрібне ім'я ключа", + "userRequired": "Будь ласка, виберіть користувача", + "failedToCreate": "Не вдалося створити ключ API", + "noKeys": "Не знайдено ключів API.", + "name": "Ім'я", + "prefix": "Префікс", + "lastUsed": "Останнє використане", + "never": "Ніколи", + "revokeKey": "Відкликати ключ", + "confirmRevoke": "Ви впевнені, що хочете відкликати ключ API-\"{{name}}? Це не можна буде скасувати.", + "revokedSuccessfully": "API ключ успішно відкликаний", + "failedToRevoke": "Не вдалося відкликати ключ API", + "failedToFetch": "Не вдалося отримати ключі API" + } }, "hosts": { "title": "Менеджер хостів", @@ -962,28 +1004,8 @@ "enableDocker": "Увімкнути Docker", "defaultPath": "Типовий шлях", "defaultPathDesc": "Папка за замовчуванням при відкритті файлового менеджера для цього хосту", - "tunnelConnections": "Тунельні з'єднання", "connection": "З'єднання", "remove": "Видалити", - "sourcePort": "Вихідний порт", - "sourcePortDesc": " (Джерело посилається на інформацію про поточне підключення в Загальній вкладці)", - "endpointPort": "Порт кінцевої точки", - "endpointSshConfig": "Налаштування SSH кінцевої точки", - "tunnelForwardDescription": "Цей тунель переведе трафік з порту {{sourcePort}} на вихідному машині (дані про поточне підключення в загальній вкладці) до порту {{endpointPort}} на машині кінцевої точки.", - "maxRetries": "Кількість спроб", - "maxRetriesDescription": "Максимальна кількість спроб спроб повторити для з'єднання тунелю.", - "retryInterval": "Інтервал повтору (секунди)", - "retryIntervalDescription": "Час очікування між спробами повторити спробу.", - "autoStartContainer": "Автоматичний запуск при запуску контейнерів", - "autoStartDesc": "Автоматично запускати цей тунель при запуску контейнера", - "addConnection": "Додати тунельне з'єднання", - "tunnelType": "Тип тунелю", - "tunnelTypeLocal": "Локальний (-L)", - "tunnelTypeRemote": "Віддалений (-R)", - "tunnelTypeLocalDesc": "Переслати локальний порт до віддаленої точки", - "tunnelTypeRemoteDesc": "Переслати віддалений порт на локальний комп’ютер", - "tunnelForwardDescriptionLocal": "Цей тунель переміститься трафік із локального порту {{sourcePort}} в порт {{endpointPort}} на машині кінцевої точки.", - "tunnelForwardDescriptionRemote": "Цей тунель переведе трафік з порту {{sourcePort}} на вихідному машині (дані про поточне підключення в загальній вкладці) до порту {{endpointPort}} на машині кінцевої точки.", "sshpassRequired": "Необхідно Sshpass для автентифікації пароля", "sshpassRequiredDesc": "Для аутентифікації пароля в тунелях, Sshpass повинен бути встановлений на системі.", "otherInstallMethods": "Інші методи встановлення:", @@ -1529,7 +1551,7 @@ "splitVertical": "Розділити вертикально", "closePanel": "Закрити панель", "reconnect": "Перепід'єднатись", - "sessionEnded": "Сесію завершено", + "sessionEnded": "Сесія закінчилася.", "connectionLost": "З'єднання втрачено", "error": "ПОМИЛКА: {{message}}", "disconnected": "Від’єднано", @@ -1933,22 +1955,10 @@ "ascending": "За зростанням", "descending": "За спаданням" }, - "tunnel": { - "log": { - "connecting": "Встановлення з'єднання тунелів...", - "sourceConnecting": "Підключення до початкового хоста {{host}}...", - "sourceConnected": "Підключено до вихідного хосту", - "endpointResolving": "Визначення хоста кінцевої точки {{host}}...", - "endpointResolved": "Встановлено хост кінцевої точки", - "forwarding": "Встановлення пересилання порту {{localPort}} → {{remotePort}}...", - "connected": "Тунель успішно встановлено", - "retrying": "Підключення не вдалося, повторна спроба в {{countdown}}s (спроба {{attempt}}/{{max}})...", - "retryExhausted": "Досягнуто максимальної кількості спроб повторити", - "error": "Помилка підключення до тунелю: {{error}}" - } - }, "tunnels": { "title": "SSH тунелі", + "noTunnelsConfigured": "Тунелі не налаштовано", + "configureTunnelsInHostSettings": "Налаштування з'єднання тунелів в менеджері хоста для запуску", "noSshTunnels": "Немає SSH тунелів", "createFirstTunnelMessage": "Ви ще не створили жодних тунелів SSH. Налаштуйте тунельні з'єднання в хості менеджері.", "connected": "Підключено", @@ -1969,27 +1979,100 @@ "disconnect": "Від'єднатись", "cancel": "Скасувати", "port": "Порт", + "localPort": "Локальний порт", + "remotePort": "Віддалений порт", + "currentHostPort": "Поточний порт хоста", + "endpointPort": "Порт кінцевої точки", + "bindIp": "Локальний IP", + "currentHostIp": "Поточний IP хоста", + "endpointSshConfig": "Налаштування SSH кінцевої точки", + "endpointSshConfigRequired": "Необхідна конфігурація SSH кінцевої точки", + "endpointSshHost": "SSH хост кінцевої точки", + "endpointSshHostPlaceholder": "Оберіть налаштований хост", + "endpointSshHostRequired": "Вибрати SSH кінцевої точки для кожного клієнтського тунелю.", "attempt": "Спроба {{current}} від {{max}}", "nextRetryIn": "Наступна спроба через {{seconds}} секунд", "checkDockerLogs": "Перевірте журнали Docker для причини помилки, приєднайтеся", "orCreate": "або створити ", "noTunnelConnections": "Тунельні з’єднання не налаштовано", "tunnelConnections": "Тунельні з'єднання", + "serverTunnels": "Налаштування сервера", + "serverTunnelsDesc": "Тунтелі, керовані бекендом, зберігаються в цьому хості.", + "clientTunnels": "Тунелі клієнта", + "clientTunnelsUnavailable": "Клієнтський тунель потребує клієнт для комп'ютеру.", + "serverTunnel": "Тунель сервера", + "clientTunnel": "Тунель клієнта", + "addServerTunnel": "Додати тунель сервера", + "addClientTunnel": "Додати тунель клієнта", + "noServerTunnels": "Тунелі сервера не налаштовано.", + "noClientTunnels": "Немає клієнтських тунелів, налаштованих на цьому робочому столі.", + "manageClientTunnels": "Керування тунелями клієнта", "addTunnel": "Додати тунель", "editTunnel": "Редагувати тунель", "deleteTunnel": "Видалити тунель", "tunnelName": "Назва тунелю", - "localPort": "Локальний порт", "remoteHost": "Віддалений хост", - "remotePort": "Віддалений порт", "autoStart": "Авто старт", + "autoStartContainer": "Автозапуск при запуску", + "autoStartContainerDesc": "Автоматично запускати цей тунель при запуску вашого сервера Termix автоматично.", + "autoStartEnableFailed": "Хост збережений, але не вдалося автоматично запускати тунелі для {{name}}.", + "clientAutoStartDesc": "Починається коли цей настільний клієнт відкривається і залишається підключеним.", + "clientManualStartDesc": "Використовуйте старт і зупинку для цього рядка. Термікс не відкриє його автоматично.", + "clientRemoteServerNote": "Віддалене пересилання може вимагати обмеження TcpForwarding і GatewayPorts на кінцевому сервері SSH. Віддалений порт закриється, коли цей комп'ютер відключається.", + "clientTunnelStarted": "Тунель клієнта запущено", + "clientTunnelStopped": "Тунель клієнта зупинено", + "tunnelTestSucceeded": "Тунельний тест пройшов успішно", + "tunnelTestFailed": "Помилка тесту Тунелю", + "localSaved": "Тунелі клієнта збережено", + "localSaveError": "Не вдалося зберегти локальні тунелі клієнта", + "invalidBindIp": "Локальний IP повинен бути дійсною адресою IPv4.", + "invalidLocalTargetIp": "Локальний цільовий IP повинен бути дійсною адресою IPv4.", + "invalidCurrentHostIp": "Поточний IP хоста має бути коректною адресою IPv4.", + "invalidLocalPort": "Локальний порт має бути від 1 до 65535.", + "invalidRemotePort": "Віддалений порт має бути від 1 до 65535.", + "invalidLocalTargetPort": "Локальний цільовий порт має бути від 1 до 65535.", + "invalidEndpointPort": "Порт кінцевої точки має бути від 1 до 65535.", + "duplicateAutoStartBind": "Лише один автостарт тунель може використовувати {{bind}}.", + "manualControlError": "Не вдалося оновити стан тунелю.", + "saveHostBeforeManualControl": "Збережіть цей хост перед початком або зупинкою тунелів сервера.", "status": "Статус", "active": "Активний", "inactive": "Неактивний", "start": "Старт", "stop": "Зупинити", + "test": "Тест", "restart": "Перезапустити", "connectionType": "Тип з'єднання", + "type": "Тип тунелю", + "typeLocal": "Локальний (-L)", + "typeRemote": "Віддалений (-R)", + "typeDynamic": "Динамічний (-D)", + "typeServerLocalDesc": "Поточний хост до кінцевої точки.", + "typeServerRemoteDesc": "Повернення до поточного хосту.", + "typeClientLocalDesc": "Локальний комп'ютер для кінцевої точки.", + "typeClientRemoteDesc": "Повернення вихідної точки до локального комп'ютера.", + "typeClientDynamicDesc": "SOCKS на локальному комп'ютері.", + "typeDynamicDesc": "Forward SOCKS5 підключити трафік через SSH", + "forwardDescriptionServerLocal": "Поточний хост {{sourcePort}} → кінцеву точку {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS на цьому хості {{sourcePort}}.", + "forwardDescriptionClientLocal": "Локальний {{sourcePort}} → віддалене {{endpointPort}}.", + "forwardDescriptionClientRemote": "Віддалене {{sourcePort}} → локальне {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS на локальному порту {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS через {{endpoint}}", + "autoNameClientLocal": "Локальний {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → локальна {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} через {{endpoint}}", + "route": "Рейс:", + "lastStarted": "Останній початок", + "lastTested": "Останнє тестування", + "lastError": "Остання помилка", + "maxRetries": "Кількість спроб", + "maxRetriesDescription": "Максимальна кількість спроб повторної спроби.", + "retryInterval": "Інтервал повтору (секунди)", + "retryIntervalDescription": "Час очікування між спробами повторити спробу.", "local": "Місцевий", "remote": "Пульт", "dynamic": "Динамічний", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Будь ласка, надайте свої дані SSH для підключення до цього сервера.", "sshPasswordDescription": "Введіть пароль для цього SSH підключення.", "sshKeyPasswordDescription": "Якщо ваш SSH ключ зашифровано, введіть кодову фразу тут.", + "passphraseRequired": "Потрібна кодова фраза", + "passphraseRequiredDescription": "Ключ SSH зашифровано. Введіть секретну фразу, щоб розблокувати його.", "step1ScanQR": "Крок 1: Скануйте QR-код за допомогою програми авторизації", "manualEntryCode": "Ручний код входу", "cannotScanQRText": "Якщо ви не можете сканувати QR-код, введіть цей код вручну в своєму додатку для автентифікації", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Не вдалося виконати скидання пароля", "invalidTotpCode": "Invalid TOTP code", "failedOidcLogin": "Не вдалося запустити OIDC логін", - "failedUserInfo": "Не вдалося отримати дані користувача після входу на OIDC", + "failedUserInfo": "Не вдалося отримати дані користувача після входу", "oidcAuthFailed": "Помилка автентифікації OIDC", "noTokenReceived": "Немає токену, отриманого від логіну", "invalidAuthUrl": "Неприпустима URL-адреса авторизації, отримана від backend", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Відображати теги, які належать кожному хосту на бічній панелі. Для приховування всіх тегів.", "account": "Обліковий запис", "appearance": "Зовнішній вигляд", + "c2sTunnelConfigDesc": "Тунелі локального комп'ютера налаштовані SSH хости.", + "c2sTunnelPresets": "Пресети тунелів клієнта", + "c2sTunnelPresetsDesc": "Збережіть локальний список тунелів для цього комп'ютера в якості пресету сервера або завантажте пресет назад до цього клієнта.", + "c2sTunnelPresetsUnavailable": "Шаблони клієнтського тунелю доступні лише в стільничному клієнті.", + "c2sPresetName": "Назва заданого параметра", + "c2sPresetNamePlaceholder": "Ім'я пресету клієнта", + "c2sPresetToLoad": "Пресет для завантаження", + "c2sNoPresetSelected": "Шаблони не вибрані", + "c2sNoPresets": "Немає збережених попередніх налаштувань", + "c2sLoadPreset": "Загрузити", + "c2sCurrentLocalConfig": "{{count}} локальний клієнт тунелі налаштований на цьому робочому столі.", + "c2sPresetSyncNote": "Пресети явні знімки; завантаження один замінює локальний список тунелів для клієнта.", + "c2sPresetSaved": "Налаштування клієнтського тунелю збережено", + "c2sPresetLoaded": "Налаштування клієнтського тунелю завантажені локально", + "c2sPresetRenamed": "Налаштування клієнтського тунелю перейменовано", + "c2sPresetDeleted": "Налаштування клієнтського тунелю видалено", + "c2sPresetLoadError": "Не вдалося завантажити налаштування тунелю для клієнта", "languageLocalization": "Мова і локалізація", "fileManagerSettings": "Файловий менеджер", "terminalSettings": "Термінал", @@ -2370,6 +2472,10 @@ "description": "Опис облікових даних SSH", "searchCredentials": "Пошук облікових даних за ім'ям, ім'ям або тегами...", "sshConfig": "налаштування кінця точки", + "bindLocalhost": "127.0.0.1 (прив'язка до localhost)", + "localListenerHost": "127.0.1 (послухати локально)", + "localTargetHost": "127.0.0.1 (ціль на цьому комп'ютері)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/Головна", "clientId": "ваш клієнт-код", "clientSecret": "ваш кліент-секрет", @@ -2549,6 +2655,7 @@ "version": "Версія", "upToDate": "Теперішня версія", "updateAvailable": "Доступне оновлення", + "beta": "Бета", "uptime": "Час роботи", "database": "База даних", "healthy": "Здоровий", @@ -2955,6 +3062,20 @@ "error": "Не вдалося зібрати показники: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Встановлення з'єднання тунелів...", + "sourceConnecting": "Підключення до початкового хоста {{host}}...", + "sourceConnected": "Підключено до вихідного хосту", + "endpointResolving": "Визначення хоста кінцевої точки {{host}}...", + "endpointResolved": "Встановлено хост кінцевої точки", + "forwarding": "Встановлення пересилання порту {{localPort}} → {{remotePort}}...", + "connected": "Тунель успішно встановлено", + "retrying": "Підключення не вдалося, повторна спроба в {{countdown}}s (спроба {{attempt}}/{{max}})...", + "retryExhausted": "Досягнуто максимальної кількості спроб повторити", + "error": "Помилка підключення до тунелю: {{error}}" + } + }, "sftp": { "log": { "connecting": "Підключення до SFTP сервера...", diff --git a/src/locales/translated/vi_VN.json b/src/locales/translated/vi_VN.json index 82511114..c3a6e51b 100644 --- a/src/locales/translated/vi_VN.json +++ b/src/locales/translated/vi_VN.json @@ -402,6 +402,8 @@ "currentVersion": "Bạn đang sử dụng phiên bản {{version}}", "updateAvailable": "Đã có bản cập nhật", "newVersionAvailable": "Phiên bản mới đã có sẵn! Bạn đang sử dụng {{current}}, nhưng {{latest}} đã có sẵn.", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "Phát hành vào {{date}}", "downloadUpdate": "Tải xuống bản cập nhật", "dismiss": "Miễn nhiệm", @@ -426,6 +428,8 @@ "warning": "Cảnh báo", "info": "Thông tin", "success": "Thành công", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "Đang tải...", "required": "Yêu cầu", "optional": "Không bắt buộc", @@ -471,6 +475,7 @@ "chinese": "Trung Quốc", "german": "tiếng Đức", "cancel": "Hủy bỏ", + "done": "Done", "username": "Tên người dùng", "name": "Tên", "login": "Đăng nhập", @@ -486,6 +491,7 @@ "save": "Cứu", "saving": "Đang lưu...", "delete": "Xóa bỏ", + "rename": "Rename", "edit": "Biên tập", "add": "Thêm vào", "search": "Tìm kiếm", @@ -559,7 +565,8 @@ "passwordCopied": "Mật khẩu đã được sao chép vào clipboard", "sudoPasswordCopied": "Mật khẩu Sudo đã được sao chép vào clipboard", "noPasswordAvailable": "Không có mật khẩu nào khả dụng", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Failed to copy password", + "openFileManager": "Open File Manager" }, "admin": { "title": "Cài đặt quản trị", @@ -868,7 +875,42 @@ "passwordMinLength": "Mật khẩu phải có ít nhất 6 ký tự.", "currentRoles": "Các vị trí hiện tại", "noRolesAssigned": "Chưa có vai trò nào được chỉ định.", - "assignNewRole": "Chỉ định vai trò mới" + "assignNewRole": "Chỉ định vai trò mới", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "Quản lý máy chủ", @@ -962,28 +1004,8 @@ "enableDocker": "Bật Docker", "defaultPath": "Đường dẫn mặc định", "defaultPathDesc": "Thư mục mặc định khi mở trình quản lý tập tin cho máy chủ này", - "tunnelConnections": "Kết nối đường hầm", "connection": "Sự liên quan", "remove": "Di dời", - "sourcePort": "Cổng nguồn", - "sourcePortDesc": " (Nguồn tham khảo là Chi tiết kết nối hiện tại trong tab Chung)", - "endpointPort": "Cổng điểm cuối", - "endpointSshConfig": "Cấu hình SSH điểm cuối", - "tunnelForwardDescription": "Đường hầm này sẽ chuyển tiếp lưu lượng truy cập từ cổng {{sourcePort}} trên máy nguồn (chi tiết kết nối hiện tại trong tab chung) đến cổng {{endpointPort}} trên máy đích.", - "maxRetries": "Số lần thử lại tối đa", - "maxRetriesDescription": "Số lần thử lại tối đa cho kết nối đường hầm.", - "retryInterval": "Khoảng thời gian thử lại (giây)", - "retryIntervalDescription": "Thời gian chờ giữa các lần thử lại.", - "autoStartContainer": "Tự động khởi động khi mở container", - "autoStartDesc": "Tự động khởi động đường hầm này khi container được khởi chạy.", - "addConnection": "Thêm kết nối đường hầm", - "tunnelType": "Loại đường hầm", - "tunnelTypeLocal": "Địa phương (-L)", - "tunnelTypeRemote": "Điều khiển từ xa (-R)", - "tunnelTypeLocalDesc": "Chuyển tiếp cổng cục bộ đến điểm cuối từ xa", - "tunnelTypeRemoteDesc": "Chuyển tiếp cổng từ xa đến máy cục bộ", - "tunnelForwardDescriptionLocal": "Đường hầm này sẽ chuyển tiếp lưu lượng truy cập từ cổng cục bộ {{sourcePort}} đến cổng {{endpointPort}} trên máy đích.", - "tunnelForwardDescriptionRemote": "Đường hầm này sẽ chuyển tiếp lưu lượng truy cập từ cổng {{sourcePort}} trên máy nguồn (chi tiết kết nối hiện tại trong tab chung) đến cổng {{endpointPort}} trên máy đích.", "sshpassRequired": "Cần có SSHpass để xác thực mật khẩu.", "sshpassRequiredDesc": "Để xác thực mật khẩu trong đường hầm, sshpass phải được cài đặt trên hệ thống.", "otherInstallMethods": "Các phương pháp lắp đặt khác:", @@ -1529,7 +1551,7 @@ "splitVertical": "Chia dọc", "closePanel": "Đóng bảng điều khiển", "reconnect": "Kết nối lại", - "sessionEnded": "Phiên họp đã kết thúc", + "sessionEnded": "Session ended.", "connectionLost": "Connection lost", "error": "LỖI: {{message}}", "disconnected": "Đã ngắt kết nối", @@ -1933,22 +1955,10 @@ "ascending": "Đi lên", "descending": "Đi xuống" }, - "tunnel": { - "log": { - "connecting": "Thiết lập kết nối đường hầm...", - "sourceConnecting": "Đang kết nối đến máy chủ nguồn {{host}}...", - "sourceConnected": "Đã kết nối với máy chủ nguồn", - "endpointResolving": "Đang phân giải máy chủ điểm cuối {{host}}...", - "endpointResolved": "Máy chủ điểm cuối đã được giải quyết", - "forwarding": "Thiết lập chuyển tiếp cổng {{localPort}} → {{remotePort}}...", - "connected": "Đường hầm được xây dựng thành công", - "retrying": "Kết nối thất bại, đang thử lại sau {{countdown}}giây (lần thử {{attempt}}/{{max}})...", - "retryExhausted": "Đã đạt số lần thử lại tối đa", - "error": "Kết nối đường hầm thất bại: {{error}}" - } - }, "tunnels": { "title": "Đường hầm SSH", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "Không có đường hầm SSH", "createFirstTunnelMessage": "Bạn chưa tạo bất kỳ đường hầm SSH nào. Hãy cấu hình các kết nối đường hầm trong Trình quản lý máy chủ để bắt đầu.", "connected": "Đã kết nối", @@ -1969,27 +1979,100 @@ "disconnect": "Ngắt kết nối", "cancel": "Hủy bỏ", "port": "Cảng", + "localPort": "Cảng địa phương", + "remotePort": "Cổng từ xa", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "Lần thử {{current}} của {{max}}", "nextRetryIn": "Lần thử lại tiếp theo sau {{seconds}} giây", "checkDockerLogs": "Kiểm tra nhật ký Docker để tìm nguyên nhân lỗi, tham gia nhóm.", "orCreate": "hoặc tạo một ", "noTunnelConnections": "Không có kết nối đường hầm nào được cấu hình.", "tunnelConnections": "Kết nối đường hầm", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "Thêm đường hầm", "editTunnel": "Chỉnh sửa Đường hầm", "deleteTunnel": "Xóa đường hầm", "tunnelName": "Tên đường hầm", - "localPort": "Cảng địa phương", "remoteHost": "Máy chủ từ xa", - "remotePort": "Cổng từ xa", "autoStart": "Tự động khởi động", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "Trạng thái", "active": "Tích cực", "inactive": "Không hoạt động", "start": "Bắt đầu", "stop": "Dừng lại", + "test": "Test", "restart": "Khởi động lại", "connectionType": "Loại kết nối", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "Địa phương", "remote": "Xa", "dynamic": "Năng động", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "Vui lòng cung cấp thông tin đăng nhập SSH của bạn để kết nối với máy chủ này.", "sshPasswordDescription": "Nhập mật khẩu cho kết nối SSH này.", "sshKeyPasswordDescription": "Nếu khóa SSH của bạn được mã hóa, hãy nhập mật khẩu vào đây.", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "Bước 1: Quét mã QR bằng ứng dụng xác thực của bạn.", "manualEntryCode": "Mã nhập thủ công", "cannotScanQRText": "Nếu bạn không thể quét mã QR, hãy nhập mã này theo cách thủ công vào ứng dụng xác thực của bạn.", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "Không thể hoàn tất quá trình đặt lại mật khẩu.", "invalidTotpCode": "Mã TOTP không hợp lệ", "failedOidcLogin": "Không thể bắt đầu đăng nhập OIDC.", - "failedUserInfo": "Không thể lấy thông tin người dùng sau khi đăng nhập OIDC.", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "Xác thực OIDC thất bại", "noTokenReceived": "Không nhận được mã thông báo nào từ quá trình đăng nhập.", "invalidAuthUrl": "URL xác thực không hợp lệ được nhận từ máy chủ phụ trợ.", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "Hiển thị các thẻ dưới mỗi máy chủ trong thanh bên. Tắt tùy chọn này để ẩn tất cả các thẻ.", "account": "Tài khoản", "appearance": "Vẻ bề ngoài", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "Ngôn ngữ & Bản địa hóa", "fileManagerSettings": "Trình quản lý tập tin", "terminalSettings": "Phần cuối", @@ -2370,6 +2472,10 @@ "description": "Mô tả thông tin xác thực SSH", "searchCredentials": "Tìm kiếm thông tin đăng nhập theo tên, tên người dùng hoặc thẻ...", "sshConfig": "cấu hình ssh điểm cuối", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/trang chủ", "clientId": "mã khách hàng của bạn", "clientSecret": "bí mật khách hàng của bạn", @@ -2549,6 +2655,7 @@ "version": "Phiên bản", "upToDate": "Đã cập nhật", "updateAvailable": "Đã có bản cập nhật", + "beta": "Beta", "uptime": "Thời gian hoạt động", "database": "Cơ sở dữ liệu", "healthy": "Khỏe mạnh", @@ -2955,6 +3062,20 @@ "error": "Thu thập số liệu thất bại: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "Thiết lập kết nối đường hầm...", + "sourceConnecting": "Đang kết nối đến máy chủ nguồn {{host}}...", + "sourceConnected": "Đã kết nối với máy chủ nguồn", + "endpointResolving": "Đang phân giải máy chủ điểm cuối {{host}}...", + "endpointResolved": "Máy chủ điểm cuối đã được giải quyết", + "forwarding": "Thiết lập chuyển tiếp cổng {{localPort}} → {{remotePort}}...", + "connected": "Đường hầm được xây dựng thành công", + "retrying": "Kết nối thất bại, đang thử lại sau {{countdown}}giây (lần thử {{attempt}}/{{max}})...", + "retryExhausted": "Đã đạt số lần thử lại tối đa", + "error": "Kết nối đường hầm thất bại: {{error}}" + } + }, "sftp": { "log": { "connecting": "Đang kết nối đến máy chủ SFTP...", diff --git a/src/locales/translated/zh_CN.json b/src/locales/translated/zh_CN.json index 37df2fdf..035f9c6e 100644 --- a/src/locales/translated/zh_CN.json +++ b/src/locales/translated/zh_CN.json @@ -402,6 +402,8 @@ "currentVersion": "您正在运行版本 {{version}}", "updateAvailable": "更新可用", "newVersionAvailable": "新版本已发布!您当前运行的是 {{current}} 版本,但 {{latest}} 版本可用。", + "betaVersion": "测试版", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "发布日期:{{date}}", "downloadUpdate": "下载更新", "dismiss": "关闭", @@ -426,6 +428,8 @@ "warning": "警告", "info": "信息", "success": "成功", + "unsavedChanges": "未保存的更改", + "dismiss": "关闭", "loading": "加载中...", "required": "必需的", "optional": "选修的", @@ -471,6 +475,7 @@ "chinese": "中文", "german": "德语", "cancel": "取消", + "done": "完成", "username": "用户名", "name": "名称", "login": "登录", @@ -486,6 +491,7 @@ "save": "保存", "saving": "保存中...", "delete": "删除", + "rename": "重命名:", "edit": "编辑", "add": "添加", "search": "搜索", @@ -559,7 +565,8 @@ "passwordCopied": "密码已复制到剪贴板", "sudoPasswordCopied": "Sudo 密码已复制到剪贴板", "noPasswordAvailable": "没有可用密码", - "failedToCopyPassword": "无法复制密码" + "failedToCopyPassword": "无法复制密码", + "openFileManager": "打开文件管理器" }, "admin": { "title": "管理员设置", @@ -868,7 +875,42 @@ "passwordMinLength": "密码长度必须至少为 6 个字符", "currentRoles": "目前角色", "noRolesAssigned": "未分配任何角色", - "assignNewRole": "分配新角色" + "assignNewRole": "分配新角色", + "apiKeys": { + "tabLabel": "API 密钥", + "title": "API 密钥", + "createApiKey": "创建 API 密钥", + "createApiKeyDescription": "为特定用户创建新的 API 密钥范围。令牌只显示一次。", + "keyCreated": "API 密钥已创建", + "keyCreatedDescription": "现在复制此密钥——它将不会再次显示。", + "keyName": "密钥名称", + "keyNamePlaceholder": "例如:CI/CD 管线", + "scopedUser": "范围用户", + "selectUser": "选择一个用户...", + "searchUsers": "搜索用户...", + "noUsersFound": "未找到用户。", + "expiresAt": "到期于", + "optional": "可选的", + "expiresAtHelp": "留空的密钥永远不会过期。", + "copyWarningTitle": "保存您的 API 密钥", + "copyWarningDescription": "此密钥将只显示一次。将其存储在一个安全的地方。", + "apiKey": "API 密钥", + "tokenCopied": "代币已复制到剪贴板", + "creating": "创建中...", + "nameRequired": "密钥名称是必需的", + "userRequired": "请选择一个用户", + "failedToCreate": "创建 API 密钥失败", + "noKeys": "没有找到 API 密钥。", + "name": "名称", + "prefix": "前缀", + "lastUsed": "上次使用", + "never": "从不使用", + "revokeKey": "吊销密钥", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API 密钥已成功撤销。", + "failedToRevoke": "吊销API密钥失败", + "failedToFetch": "获取 API 密钥失败" + } }, "hosts": { "title": "主机管理", @@ -962,28 +1004,8 @@ "enableDocker": "启用 Docker", "defaultPath": "默认路径", "defaultPathDesc": "打开此主机的文件管理器时的默认目录", - "tunnelConnections": "隧道连接", "connection": "连接", "remove": "移除", - "sourcePort": "源端口", - "sourcePortDesc": "(来源指的是「常规」选项卡中的「当前连接详情」)", - "endpointPort": "端点端口", - "endpointSshConfig": "端点 SSH 配置", - "tunnelForwardDescription": "此隧道会将源机器(「常规」选项卡中的当前连接详情)上 {{sourcePort}} 端口的流量,转发至目标机器上的 {{endpointPort}} 端口。", - "maxRetries": "最大重试次数", - "maxRetriesDescription": "隧道连接的最大重试次数。", - "retryInterval": "重试间隔(秒)", - "retryIntervalDescription": "重试之间需要等待一段时间。", - "autoStartContainer": "容器启动时自动启动", - "autoStartDesc": "容器启动时自动启动此隧道", - "addConnection": "添加隧道连接", - "tunnelType": "隧道类型", - "tunnelTypeLocal": "本地(-L)", - "tunnelTypeRemote": "远程 (-R)", - "tunnelTypeLocalDesc": "转发本地端口到远程端点", - "tunnelTypeRemoteDesc": "转发远程端口到本地机", - "tunnelForwardDescriptionLocal": "此隧道会将本地端口 {{sourcePort}} 的流量转发到终端机器上的端口 {{endpointPort}} 。", - "tunnelForwardDescriptionRemote": "此隧道会将源机器(常规选项卡中的当前连接详细信息)上的端口 {{sourcePort}} 的流量转发到端点机器上的端口 {{endpointPort}} 。", "sshpassRequired": "密码验证需要使用 SSH 密码", "sshpassRequiredDesc": "对于隧道中的密码认证,系统必须安装 sshpass", "otherInstallMethods": "其他安装方法:", @@ -1529,7 +1551,7 @@ "splitVertical": "垂直分割", "closePanel": "关闭面板", "reconnect": "重新连接", - "sessionEnded": "会话结束", + "sessionEnded": "会话已结束。", "connectionLost": "连接丢失", "error": "错误:{{message}}", "disconnected": "断开连接", @@ -1933,22 +1955,10 @@ "ascending": "升序", "descending": "降序" }, - "tunnel": { - "log": { - "connecting": "建立隧道连接……", - "sourceConnecting": "正在连接到源主机 {{host}}...", - "sourceConnected": "已连接到源主机", - "endpointResolving": "正在解析端点主机 {{host}}...", - "endpointResolved": "端点主机已解析", - "forwarding": "设置端口转发 {{localPort}} → {{remotePort}}...", - "connected": "隧道已成功建成", - "retrying": "连接失败,将在 {{countdown}}秒后重试(尝试 {{attempt}}/{{max}})。", - "retryExhausted": "已达到最大重试次数", - "error": "隧道连接失败: {{error}}" - } - }, "tunnels": { "title": "SSH隧道", + "noTunnelsConfigured": "未配置 Tunnels", + "configureTunnelsInHostSettings": "配置主机管理器中的隧道连接来启动", "noSshTunnels": "没有 SSH 隧道", "createFirstTunnelMessage": "您尚未创建任何 SSH 隧道。请在主机管理器中配置隧道连接以开始操作。", "connected": "已连接", @@ -1969,27 +1979,100 @@ "disconnect": "断开", "cancel": "取消", "port": "港口", + "localPort": "本地端口", + "remotePort": "远程端口", + "currentHostPort": "当前主机端口", + "endpointPort": "端点端口", + "bindIp": "本地IP", + "currentHostIp": "当前主机IP", + "endpointSshConfig": "端点SSH 配置", + "endpointSshConfigRequired": "端点SSH 配置是必需的", + "endpointSshHost": "端点SSH 主机", + "endpointSshHostPlaceholder": "选择一个配置的主机", + "endpointSshHostRequired": "为每个客户端隧道选择一个端点 SSH 主机。", "attempt": "尝试 {{current}} 次,共 {{max}} 次", "nextRetryIn": "下次重试时间为 {{seconds}} 秒", "checkDockerLogs": "检查 Docker 日志以查找错误原因,并加入讨论。", "orCreate": "或者创建一个", "noTunnelConnections": "未配置隧道连接", "tunnelConnections": "隧道连接", + "serverTunnels": "服务器Tunnels", + "serverTunnelsDesc": "此主机存储后端管理隧道。", + "clientTunnels": "客户端Tunnels", + "clientTunnelsUnavailable": "客户端隧道需要桌面客户端。", + "serverTunnel": "服务器Tunnel", + "clientTunnel": "客户端隧道", + "addServerTunnel": "添加服务器Tunnel", + "addClientTunnel": "添加客户端Tunnel", + "noServerTunnels": "未配置服务器隧道。", + "noClientTunnels": "在此桌面上没有配置客户端隧道。", + "manageClientTunnels": "管理客户端Tunnel", "addTunnel": "添加隧道", "editTunnel": "编辑隧道", "deleteTunnel": "删除隧道", "tunnelName": "隧道名称", - "localPort": "本地端口", "remoteHost": "远程主机", - "remotePort": "远程端口", "autoStart": "自动启动", + "autoStartContainer": "启动时自动启动", + "autoStartContainerDesc": "当您的 Termixed 服务器启动时自动启动此隧道。", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "当此桌面客户端打开并保持连接时开始。", + "clientManualStartDesc": "使用启动和停止此行。混合函数不会自动打开。", + "clientRemoteServerNote": "远程转发可能需要 allowTcpForwarding 和 GatewayPorts 在端点 SSH 服务器上。当此桌面断开连接时,远程端口将关闭。", + "clientTunnelStarted": "客户端隧道已启动", + "clientTunnelStopped": "客户端隧道已停止", + "tunnelTestSucceeded": "隧道测试成功", + "tunnelTestFailed": "隧道测试失败", + "localSaved": "客户端隧道已保存", + "localSaveError": "保存本地客户端隧道失败", + "invalidBindIp": "本地IP必须是有效的IPv4地址。", + "invalidLocalTargetIp": "本地目标IP必须是有效的IPv4地址。", + "invalidCurrentHostIp": "当前主机IP必须是有效的 IPv4 地址。", + "invalidLocalPort": "本地端口必须介于 1 到 65535 之间。", + "invalidRemotePort": "远程端口必须介于 1 到 65535 之间。", + "invalidLocalTargetPort": "本地目标端口必须介于 1 到 65535 之间。", + "invalidEndpointPort": "端点端口必须介于 1 到 65535 之间。", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "更新隧道状态失败。", + "saveHostBeforeManualControl": "在启动或停止其服务器隧道之前保存此主机。", "status": "状态", "active": "已激活", "inactive": "未激活", "start": "开始", "stop": "停止", + "test": "测试", "restart": "重启", "connectionType": "连接类型", + "type": "隧道类型", + "typeLocal": "本地(-L)", + "typeRemote": "远程 (-R)", + "typeDynamic": "动态 (-D)", + "typeServerLocalDesc": "当前端点的主机。", + "typeServerRemoteDesc": "返回到当前主机的终点。", + "typeClientLocalDesc": "本地计算机到端点。", + "typeClientRemoteDesc": "返回本地计算机的端点。", + "typeClientDynamicDesc": "本地计算机上的SOCKS。", + "typeDynamicDesc": "通过 SSH 转发SOCKS5 连接", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "路由:", + "lastStarted": "上次启动", + "lastTested": "上次测试", + "lastError": "最后一个错误", + "maxRetries": "最大重试次数", + "maxRetriesDescription": "最大重试次数.", + "retryInterval": "重试间隔 (秒)", + "retryIntervalDescription": "重试之间等待的时间。", "local": "本地", "remote": "远程", "dynamic": "动态", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "请提供您的 SSH 凭证以连接到此服务器。", "sshPasswordDescription": "请输入此SSH连接的密码。", "sshKeyPasswordDescription": "如果您的 SSH 密钥已加密,请在此处输入密码。", + "passphraseRequired": "需要密码", + "passphraseRequiredDescription": "SSH 密钥已加密。请输入密码以解锁它。", "step1ScanQR": "步骤 1:使用您的身份验证器应用程序扫描二维码", "manualEntryCode": "手动输入代码", "cannotScanQRText": "如果无法扫描二维码,请在您的身份验证器应用程序中手动输入此代码。", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "密码重置失败", "invalidTotpCode": "无效的 TOTP 代码", "failedOidcLogin": "OIDC 登录启动失败", - "failedUserInfo": "OIDC登录后获取用户信息失败", + "failedUserInfo": "登录后无法获取用户信息", "oidcAuthFailed": "OIDC 身份验证失败", "noTokenReceived": "登录未收到令牌", "invalidAuthUrl": "从后端收到的授权 URL 无效", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "在侧边栏的每个主机下方显示标签。禁用则隐藏所有标签。", "account": "账号", "appearance": "外观", + "c2sTunnelConfigDesc": "针对已配置的 SSH 主机的本地桌面隧道。", + "c2sTunnelPresets": "客户端隧道预设", + "c2sTunnelPresetsDesc": "将此桌面客户端的本地隧道列表保存为服务器预设,或将预设加载到此客户端。", + "c2sTunnelPresetsUnavailable": "客户端隧道预设仅在桌面客户端可用。", + "c2sPresetName": "预设名称", + "c2sPresetNamePlaceholder": "客户端预设名称", + "c2sPresetToLoad": "预设负载", + "c2sNoPresetSelected": "未选择预设", + "c2sNoPresets": "未保存预设", + "c2sLoadPreset": "负载", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "预设是显式的快照;正在加载一个以替换此桌面客户端本地隧道列表。", + "c2sPresetSaved": "客户端隧道预设保存", + "c2sPresetLoaded": "客户端隧道预设本地加载", + "c2sPresetRenamed": "客户端隧道预设重命名", + "c2sPresetDeleted": "客户端隧道预设已删除", + "c2sPresetLoadError": "加载客户端隧道预设失败", "languageLocalization": "语言和本地化", "fileManagerSettings": "文件管理器", "terminalSettings": "终端", @@ -2370,6 +2472,10 @@ "description": "SSH凭证描述", "searchCredentials": "按名称、用户名或标签搜索凭证……", "sshConfig": "端点 SSH 配置", + "bindLocalhost": "127.0.0.1 (ind to localhost)", + "localListenerHost": "127.0.0.1 (本地监听)", + "localTargetHost": "127.0.0.1 (此计算机上的目标)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/home", "clientId": "您的客户端 ID", "clientSecret": "你的客户密钥", @@ -2549,6 +2655,7 @@ "version": "版本", "upToDate": "最新", "updateAvailable": "更新可用", + "beta": "测试版", "uptime": "运行时长", "database": "数据库", "healthy": "健康", @@ -2955,6 +3062,20 @@ "error": "指标收集失败: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "建立隧道连接……", + "sourceConnecting": "正在连接到源主机 {{host}}...", + "sourceConnected": "已连接到源主机", + "endpointResolving": "正在解析端点主机 {{host}}...", + "endpointResolved": "端点主机已解析", + "forwarding": "设置端口转发 {{localPort}} → {{remotePort}}...", + "connected": "隧道已成功建成", + "retrying": "连接失败,将在 {{countdown}}秒后重试(尝试 {{attempt}}/{{max}})。", + "retryExhausted": "已达到最大重试次数", + "error": "隧道连接失败: {{error}}" + } + }, "sftp": { "log": { "connecting": "正在连接SFTP服务器......", diff --git a/src/locales/translated/zh_TW.json b/src/locales/translated/zh_TW.json index d5ee6d04..5b02ab72 100644 --- a/src/locales/translated/zh_TW.json +++ b/src/locales/translated/zh_TW.json @@ -402,6 +402,8 @@ "currentVersion": "您正在運行版本 {{version}}", "updateAvailable": "更新可用", "newVersionAvailable": "新版本可用!您正在執行 {{current}},但 {{latest}} 可用。", + "betaVersion": "Beta Version", + "betaVersionDesc": "You are running {{current}}, which is newer than the latest stable release {{latest}}.", "releasedOn": "發佈日期: {{date}}", "downloadUpdate": "下載更新", "dismiss": "解僱", @@ -426,6 +428,8 @@ "warning": "警告", "info": "資訊", "success": "成功", + "unsavedChanges": "Unsaved changes", + "dismiss": "Dismiss", "loading": "載入中...", "required": "必需的", "optional": "選擇性", @@ -471,6 +475,7 @@ "chinese": "中國人", "german": "德文", "cancel": "取消", + "done": "Done", "username": "使用者名稱", "name": "姓名", "login": "登入", @@ -486,6 +491,7 @@ "save": "儲存", "saving": "儲存...", "delete": "刪除", + "rename": "Rename", "edit": "編輯", "add": "添加", "search": "搜尋", @@ -559,7 +565,8 @@ "passwordCopied": "密碼已複製到剪貼簿", "sudoPasswordCopied": "sudo 密碼已複製到剪貼簿", "noPasswordAvailable": "沒有可用密碼", - "failedToCopyPassword": "Failed to copy password" + "failedToCopyPassword": "Failed to copy password", + "openFileManager": "Open File Manager" }, "admin": { "title": "管理員設定", @@ -868,7 +875,42 @@ "passwordMinLength": "密碼長度必須至少為 6 個字符", "currentRoles": "目前職位", "noRolesAssigned": "未分配任何角色", - "assignNewRole": "指派新角色" + "assignNewRole": "指派新角色", + "apiKeys": { + "tabLabel": "API Keys", + "title": "API Keys", + "createApiKey": "Create API Key", + "createApiKeyDescription": "Create a new API key scoped to a specific user. The token is shown only once.", + "keyCreated": "API Key Created", + "keyCreatedDescription": "Copy this key now — it will not be shown again.", + "keyName": "Key Name", + "keyNamePlaceholder": "e.g. CI/CD Pipeline", + "scopedUser": "Scoped User", + "selectUser": "Select a user...", + "searchUsers": "Search users...", + "noUsersFound": "No users found.", + "expiresAt": "Expires At", + "optional": "optional", + "expiresAtHelp": "Leave empty for a key that never expires.", + "copyWarningTitle": "Save your API key", + "copyWarningDescription": "This key will only be shown once. Store it in a safe place.", + "apiKey": "API Key", + "tokenCopied": "Token copied to clipboard", + "creating": "Creating...", + "nameRequired": "Key name is required", + "userRequired": "Please select a user", + "failedToCreate": "Failed to create API key", + "noKeys": "No API keys found.", + "name": "Name", + "prefix": "Prefix", + "lastUsed": "Last Used", + "never": "Never", + "revokeKey": "Revoke key", + "confirmRevoke": "Are you sure you want to revoke the API key \"{{name}}\"? This cannot be undone.", + "revokedSuccessfully": "API key revoked successfully", + "failedToRevoke": "Failed to revoke API key", + "failedToFetch": "Failed to fetch API keys" + } }, "hosts": { "title": "主機管理器", @@ -962,28 +1004,8 @@ "enableDocker": "啟用 Docker", "defaultPath": "預設路徑", "defaultPathDesc": "開啟此主機的檔案管理器時的預設目錄", - "tunnelConnections": "隧道連接", "connection": "聯繫", "remove": "消除", - "sourcePort": "來源連接埠", - "sourcePortDesc": " (來源指「常規」標籤中的「目前連線詳細資料」)", - "endpointPort": "端點埠", - "endpointSshConfig": "端點 SSH 配置", - "tunnelForwardDescription": "此隧道會將來源機器(常規標籤中的目前連接詳細資料)上的連接埠 {{sourcePort}} 的流量轉送到端點機器上的連接埠 {{endpointPort}} 。", - "maxRetries": "最大重試次數", - "maxRetriesDescription": "隧道連線的最大重試次數。", - "retryInterval": "重試間隔(秒)", - "retryIntervalDescription": "重試之間需要等待一段時間。", - "autoStartContainer": "容器啟動時自動啟動", - "autoStartDesc": "容器啟動時自動啟動此隧道", - "addConnection": "新增隧道連接", - "tunnelType": "隧道類型", - "tunnelTypeLocal": "本地(-L)", - "tunnelTypeRemote": "遠端(-R)", - "tunnelTypeLocalDesc": "將本機連接埠轉送到遠端端點", - "tunnelTypeRemoteDesc": "將遠端連接埠轉送至本機", - "tunnelForwardDescriptionLocal": "此隧道會將本機連接埠 {{sourcePort}} 的流量轉送至終端機上的連接埠 {{endpointPort}} 。", - "tunnelForwardDescriptionRemote": "此隧道會將來源機器(常規標籤中的目前連接詳細資料)上的連接埠 {{sourcePort}} 的流量轉送到端點機器上的連接埠 {{endpointPort}} 。", "sshpassRequired": "密碼驗證需要使用 SSH 密碼", "sshpassRequiredDesc": "對於隧道中的密碼認證,系統上必須安裝 sshpass。", "otherInstallMethods": "其他安裝方法:", @@ -1529,7 +1551,7 @@ "splitVertical": "垂直分割", "closePanel": "關閉面板", "reconnect": "重新連接", - "sessionEnded": "會話結束", + "sessionEnded": "Session ended.", "connectionLost": "Connection lost", "error": "錯誤: {{message}}", "disconnected": "斷開連接", @@ -1933,22 +1955,10 @@ "ascending": "上升", "descending": "下降" }, - "tunnel": { - "log": { - "connecting": "建立隧道連線…", - "sourceConnecting": "正在連線到來源主機 {{host}}...", - "sourceConnected": "已連接到來源主機", - "endpointResolving": "正在解析端點主機 {{host}}...", - "endpointResolved": "端點主機已解析", - "forwarding": "設定連接埠轉送 {{localPort}} → {{remotePort}}...", - "connected": "隧道已成功建成", - "retrying": "連線失敗,將在 {{countdown}}秒後重試(嘗試 {{attempt}}/{{max}})。", - "retryExhausted": "已達最大重試次數", - "error": "隧道連線失敗: {{error}}" - } - }, "tunnels": { "title": "SSH 隧道", + "noTunnelsConfigured": "No Tunnels Configured", + "configureTunnelsInHostSettings": "Configure tunnel connections in the Host Manager to get started", "noSshTunnels": "沒有 SSH 隧道", "createFirstTunnelMessage": "您尚未建立任何 SSH 隧道。請在主機管理員中設定隧道連線以開始使用。", "connected": "已連接", @@ -1969,27 +1979,100 @@ "disconnect": "斷開", "cancel": "取消", "port": "連接埠", + "localPort": "本地連接埠", + "remotePort": "遠端埠", + "currentHostPort": "Current Host Port", + "endpointPort": "Endpoint Port", + "bindIp": "Local IP", + "currentHostIp": "Current Host IP", + "endpointSshConfig": "Endpoint SSH Configuration", + "endpointSshConfigRequired": "Endpoint SSH configuration is required", + "endpointSshHost": "Endpoint SSH Host", + "endpointSshHostPlaceholder": "Select a configured host", + "endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.", "attempt": "試 {{current}} 的 {{max}}", "nextRetryIn": "下次重試將在 {{seconds}} 秒後進行", "checkDockerLogs": "檢查 Docker 日誌以查找錯誤原因,並加入討論。", "orCreate": "或建立一個 ", "noTunnelConnections": "未配置隧道連接", "tunnelConnections": "隧道連接", + "serverTunnels": "Server Tunnels", + "serverTunnelsDesc": "Backend-managed tunnels stored with this host.", + "clientTunnels": "Client Tunnels", + "clientTunnelsUnavailable": "Client tunnels require a desktop client.", + "serverTunnel": "Server Tunnel", + "clientTunnel": "Client Tunnel", + "addServerTunnel": "Add Server Tunnel", + "addClientTunnel": "Add Client Tunnel", + "noServerTunnels": "No server tunnels configured.", + "noClientTunnels": "No client tunnels configured on this desktop.", + "manageClientTunnels": "Manage Client Tunnels", "addTunnel": "添加隧道", "editTunnel": "編輯隧道", "deleteTunnel": "刪除隧道", "tunnelName": "隧道名稱", - "localPort": "本地連接埠", "remoteHost": "遠端主機", - "remotePort": "遠端埠", "autoStart": "自動啟動", + "autoStartContainer": "Auto Start on Launch", + "autoStartContainerDesc": "Automatically start this tunnel when your Termix server launches.", + "autoStartEnableFailed": "Host saved, but failed to start auto-start tunnels for {{name}}.", + "clientAutoStartDesc": "Starts when this desktop client opens and stays connected.", + "clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.", + "clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.", + "clientTunnelStarted": "Client tunnel started", + "clientTunnelStopped": "Client tunnel stopped", + "tunnelTestSucceeded": "Tunnel test succeeded", + "tunnelTestFailed": "Tunnel test failed", + "localSaved": "Client tunnels saved", + "localSaveError": "Failed to save local client tunnels", + "invalidBindIp": "Local IP must be a valid IPv4 address.", + "invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.", + "invalidCurrentHostIp": "Current Host IP must be a valid IPv4 address.", + "invalidLocalPort": "Local port must be between 1 and 65535.", + "invalidRemotePort": "Remote port must be between 1 and 65535.", + "invalidLocalTargetPort": "Local target port must be between 1 and 65535.", + "invalidEndpointPort": "Endpoint port must be between 1 and 65535.", + "duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.", + "manualControlError": "Failed to update tunnel state.", + "saveHostBeforeManualControl": "Save this host before starting or stopping its server tunnels.", "status": "地位", "active": "積極的", "inactive": "非活躍狀態", "start": "開始", "stop": "停止", + "test": "Test", "restart": "重啟", "connectionType": "連接類型", + "type": "Tunnel Type", + "typeLocal": "Local (-L)", + "typeRemote": "Remote (-R)", + "typeDynamic": "Dynamic (-D)", + "typeServerLocalDesc": "Current host to endpoint.", + "typeServerRemoteDesc": "Endpoint back to current host.", + "typeClientLocalDesc": "Local computer to endpoint.", + "typeClientRemoteDesc": "Endpoint back to local computer.", + "typeClientDynamicDesc": "SOCKS on local computer.", + "typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH", + "forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.", + "forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.", + "forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.", + "forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.", + "forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.", + "forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.", + "summaryClientLocal": "{{localHost}}:{{localPort}} → {{endpoint}}:{{remotePort}}", + "summaryClientRemote": "{{endpoint}}:{{remotePort}} → {{localHost}}:{{localPort}}", + "summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}", + "autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}", + "autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}", + "autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}", + "route": "Route:", + "lastStarted": "Last started", + "lastTested": "Last tested", + "lastError": "Last error", + "maxRetries": "Max Retries", + "maxRetriesDescription": "Maximum amount of retry attempts.", + "retryInterval": "Retry Interval (seconds)", + "retryIntervalDescription": "Time to wait between retry attempts.", "local": "本地", "remote": "偏僻的", "dynamic": "動態的", @@ -2172,6 +2255,8 @@ "sshProvideCredentialsDescription": "請提供您的 SSH 憑證以連接到此伺服器。", "sshPasswordDescription": "請輸入此 SSH 連線的密碼。", "sshKeyPasswordDescription": "如果您的 SSH 金鑰已加密,請在此輸入密碼。", + "passphraseRequired": "Passphrase Required", + "passphraseRequiredDescription": "The SSH key is encrypted. Please enter the passphrase to unlock it.", "step1ScanQR": "步驟 1:使用您的身份驗證器應用程式掃描二維碼", "manualEntryCode": "手動輸入代碼", "cannotScanQRText": "如果無法掃描二維碼,請在身份驗證器應用程式中手動輸入此代碼。", @@ -2246,7 +2331,7 @@ "failedCompleteReset": "密碼重置失敗", "invalidTotpCode": "無效的 TOTP 程式碼", "failedOidcLogin": "OIDC 登入啟動失敗", - "failedUserInfo": "OIDC登入後取得使用者資訊失敗", + "failedUserInfo": "Failed to get user info after login", "oidcAuthFailed": "OIDC 驗證失敗", "noTokenReceived": "登入未收到令牌", "invalidAuthUrl": "從後端收到的授權 URL 無效", @@ -2322,6 +2407,23 @@ "showHostTagsDesc": "在側邊欄中顯示每個主機下方的標籤。停用此選項可隱藏所有標籤。", "account": "帳戶", "appearance": "外觀", + "c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.", + "c2sTunnelPresets": "Client Tunnel Presets", + "c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.", + "c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.", + "c2sPresetName": "Preset Name", + "c2sPresetNamePlaceholder": "Client preset name", + "c2sPresetToLoad": "Preset To Load", + "c2sNoPresetSelected": "No preset selected", + "c2sNoPresets": "No presets saved", + "c2sLoadPreset": "Load", + "c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.", + "c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.", + "c2sPresetSaved": "Client tunnel preset saved", + "c2sPresetLoaded": "Client tunnel preset loaded locally", + "c2sPresetRenamed": "Client tunnel preset renamed", + "c2sPresetDeleted": "Client tunnel preset deleted", + "c2sPresetLoadError": "Failed to load client tunnel presets", "languageLocalization": "語言和本地化", "fileManagerSettings": "檔案管理器", "terminalSettings": "終端機", @@ -2370,6 +2472,10 @@ "description": "SSH憑證描述", "searchCredentials": "按名稱、使用者名稱或標籤搜尋憑證…", "sshConfig": "端點 SSH 配置", + "bindLocalhost": "127.0.0.1 (bind to localhost)", + "localListenerHost": "127.0.0.1 (listen locally)", + "localTargetHost": "127.0.0.1 (target on this computer)", + "socksListenerHost": "127.0.0.1 (SOCKS listener)", "homePath": "/家", "clientId": "您的客戶端 ID", "clientSecret": "你的客戶密鑰", @@ -2549,6 +2655,7 @@ "version": "版本", "upToDate": "最新", "updateAvailable": "更新可用", + "beta": "Beta", "uptime": "正常運作時間", "database": "資料庫", "healthy": "健康", @@ -2955,6 +3062,20 @@ "error": "指標收集失敗: {{error}}" } }, + "tunnel": { + "log": { + "connecting": "建立隧道連線…", + "sourceConnecting": "正在連線到來源主機 {{host}}...", + "sourceConnected": "已連接到來源主機", + "endpointResolving": "正在解析端點主機 {{host}}...", + "endpointResolved": "端點主機已解析", + "forwarding": "設定連接埠轉送 {{localPort}} → {{remotePort}}...", + "connected": "隧道已成功建成", + "retrying": "連線失敗,將在 {{countdown}}秒後重試(嘗試 {{attempt}}/{{max}})。", + "retryExhausted": "已達最大重試次數", + "error": "隧道連線失敗: {{error}}" + } + }, "sftp": { "log": { "connecting": "正在連接SFTP伺服器...",