From d049588f7f9ede081f3383c7d0b53ce224e05a8f Mon Sep 17 00:00:00 2001 From: LukeGus Date: Sun, 18 Oct 2026 17:25:59 -0500 Subject: [PATCH] feat: move the classic layout into its own bundled plugin --- .prettierignore | 1 - CHANGELOG.md | 2 + docker/bundled-plugins.json | 7 + package.json | 2 +- packages/plugin-sdk/CHANGELOG.md | 2 + packages/plugin-sdk/PLUGIN-GUIDE.md | 10 +- packages/plugin-sdk/ui.api.txt | 406 ++++ scripts/check-core-plugin-ids.cjs | 1 + scripts/check-sdk-ui-exports.cjs | 408 +++- scripts/generate-settings-search-index.cjs | 176 -- src/backend/database/routes/plugins.ts | 57 + src/backend/plugins/manage.ts | 99 +- .../tests/database/routes/plugins.test.ts | 30 + src/backend/tests/plugins/manage.test.ts | 48 + src/ui/api/plugins-api.ts | 9 + src/ui/dashboard/DashboardTab.tsx | 1015 -------- src/ui/dashboard/dashboard-core-cards.tsx | 448 ---- src/ui/dashboard/quarter-borders.ts | 15 - src/ui/lib/app-version.ts | 3 + src/ui/lib/plugin-i18n.ts | 10 +- src/ui/lib/role-label.ts | 4 +- src/ui/locales/en.json | 891 +------ src/ui/locales/translated/af_ZA.json | 882 +------ src/ui/locales/translated/ar_SA.json | 882 +------ src/ui/locales/translated/bg_BG.json | 882 +------ src/ui/locales/translated/bn_BD.json | 882 +------ src/ui/locales/translated/ca_ES.json | 882 +------ src/ui/locales/translated/cs_CZ.json | 882 +------ src/ui/locales/translated/da_DK.json | 882 +------ src/ui/locales/translated/de_DE.json | 882 +------ src/ui/locales/translated/el_GR.json | 882 +------ src/ui/locales/translated/es_ES.json | 882 +------ src/ui/locales/translated/et_EE.json | 882 +------ src/ui/locales/translated/fi_FI.json | 882 +------ src/ui/locales/translated/fr_FR.json | 882 +------ src/ui/locales/translated/he_IL.json | 882 +------ src/ui/locales/translated/hi_IN.json | 882 +------ src/ui/locales/translated/hr_HR.json | 882 +------ src/ui/locales/translated/hu_HU.json | 882 +------ src/ui/locales/translated/id_ID.json | 882 +------ src/ui/locales/translated/it_IT.json | 882 +------ src/ui/locales/translated/ja_JP.json | 882 +------ src/ui/locales/translated/ko_KR.json | 882 +------ src/ui/locales/translated/lt_LT.json | 882 +------ src/ui/locales/translated/lv_LV.json | 882 +------ src/ui/locales/translated/ms_MY.json | 882 +------ src/ui/locales/translated/nl_NL.json | 882 +------ src/ui/locales/translated/no_NO.json | 882 +------ src/ui/locales/translated/pl_PL.json | 882 +------ src/ui/locales/translated/pt_BR.json | 882 +------ src/ui/locales/translated/pt_PT.json | 882 +------ src/ui/locales/translated/ro_RO.json | 882 +------ src/ui/locales/translated/ru_RU.json | 882 +------ src/ui/locales/translated/sk_SK.json | 882 +------ src/ui/locales/translated/sl_SI.json | 882 +------ src/ui/locales/translated/sr_SP.json | 882 +------ src/ui/locales/translated/sv_SE.json | 882 +------ src/ui/locales/translated/th_TH.json | 882 +------ src/ui/locales/translated/tr_TR.json | 882 +------ src/ui/locales/translated/uk_UA.json | 882 +------ src/ui/locales/translated/vi_VN.json | 882 +------ src/ui/locales/translated/zh_CN.json | 882 +------ src/ui/locales/translated/zh_TW.json | 882 +------ src/ui/locales/translations-lock.json | 838 +------ .../appearance => look}/LookSettings.tsx | 0 src/ui/look/RepairView.tsx | 71 +- src/ui/look/layout-registry.ts | 27 +- src/ui/look/resolve-look.ts | 15 +- src/ui/manage/EditorPane.tsx | 411 ---- src/ui/manage/ManageList.tsx | 467 ---- src/ui/manage/ManageTab.tsx | 588 ----- src/ui/manage/defaults-rows.ts | 43 - src/ui/manage/host-validation.ts | 21 - src/ui/manage/manage-tree.ts | 256 -- src/ui/plugin-host/sdk-ui.ts | 494 ++++ src/ui/plugin-host/testing-host.tsx | 41 + src/ui/settings/DesktopUpdatesCard.tsx | 162 -- src/ui/settings/FeatureSettingsSections.tsx | 232 -- src/ui/settings/KeybindingsSettings.tsx | 478 ---- src/ui/settings/SettingsTab.tsx | 429 ---- src/ui/settings/UpdatesSettings.tsx | 330 --- src/ui/settings/page-filter.ts | 139 -- src/ui/settings/settings-embed.ts | 11 - src/ui/settings/settings-pages.ts | 264 --- src/ui/settings/settings-search-index.ts | 488 ---- src/ui/settings/sync/SyncPanel.tsx | 635 ----- src/ui/shell/CommandPalette.tsx | 604 ----- src/ui/shell/DockPanel.tsx | 175 -- src/ui/shell/MobileBar.tsx | 301 --- src/ui/shell/ShellRoot.tsx | 70 +- src/ui/shell/TabBar.tsx | 905 -------- .../controller/ShellControllerProvider.tsx | 7 +- src/ui/shell/controller/use-regions.ts | 4 +- src/ui/shell/layout/LayoutHost.tsx | 3 - src/ui/shell/layout/builtin/DefaultLayout.tsx | 396 ---- src/ui/shell/layout/builtin/index.ts | 11 - src/ui/shell/stage/TabPortals.tsx | 1 - src/ui/shell/tabUtils.tsx | 86 +- src/ui/sidebar/AdminApiKeysSection.tsx | 259 --- src/ui/sidebar/AdminAuditLogSection.tsx | 491 ---- src/ui/sidebar/AdminBrandingSection.tsx | 154 -- src/ui/sidebar/AdminHostTags.tsx | 99 - src/ui/sidebar/AdminManagementSections.tsx | 822 ------- src/ui/sidebar/AdminPluginDeveloperMode.tsx | 77 - src/ui/sidebar/AdminSecondFactorsSection.tsx | 112 - src/ui/sidebar/AdminSettingsPanel.tsx | 992 -------- src/ui/sidebar/AdminSettingsSections.tsx | 530 ----- src/ui/sidebar/AdminSettingsShared.tsx | 68 - src/ui/sidebar/AdminUserDialogs.tsx | 576 ----- src/ui/sidebar/AdminUserManagePanel.tsx | 996 -------- src/ui/sidebar/AppRail.tsx | 617 ----- src/ui/sidebar/ConnectionsPanel.tsx | 548 ----- src/ui/sidebar/CredentialEditorView.tsx | 613 ----- src/ui/sidebar/CredentialList.tsx | 321 --- src/ui/sidebar/CredentialShareModal.tsx | 578 ----- src/ui/sidebar/CredentialsPanel.tsx | 323 --- .../CustomizeCredentialsSidebarPanel.tsx | 157 -- src/ui/sidebar/CustomizeSidebarPanel.tsx | 308 --- src/ui/sidebar/FixedShortcutsList.tsx | 48 - src/ui/sidebar/FolderMetadataDialog.tsx | 244 -- src/ui/sidebar/FolderPathPicker.tsx | 207 -- src/ui/sidebar/HostAuthOverrideModal.tsx | 202 -- src/ui/sidebar/HostEditor.tsx | 1559 ------------- src/ui/sidebar/HostEditorData.ts | 311 --- src/ui/sidebar/HostEditorGeneralTab.tsx | 948 -------- src/ui/sidebar/HostExportDialog.tsx | 347 --- src/ui/sidebar/HostParentPicker.tsx | 176 -- src/ui/sidebar/HostShareModal.tsx | 701 ------ src/ui/sidebar/HostsPanel.tsx | 1096 --------- src/ui/sidebar/InterfacePresetSettings.tsx | 208 -- .../sidebar/NavigationVisibilityToggles.tsx | 113 - src/ui/sidebar/QuickConnectPanel.tsx | 316 --- src/ui/sidebar/RailBadge.tsx | 30 - src/ui/sidebar/ReorderIndicator.tsx | 22 - src/ui/sidebar/SidebarTree.tsx | 2 - src/ui/sidebar/SshAuthProviderFields.tsx | 82 - src/ui/sidebar/UserProfilePanel.tsx | 2054 ----------------- src/ui/sidebar/branding-logo-file.ts | 18 - src/ui/sidebar/credential-sort.ts | 68 - .../CredentialItem/CredentialItem.tsx | 415 ---- .../credential-tree/CredentialSidebarTree.tsx | 463 ---- .../FolderItem/CredentialFolderItem.tsx | 174 -- .../credential-tree/credential-row-height.ts | 64 - .../hooks/useCredentialSidebarPreferences.ts | 126 - src/ui/sidebar/credential-tree/index.ts | 2 - .../sidebar/credential-tree/visible-rows.ts | 66 - src/ui/sidebar/hidden-rail-tabs.ts | 59 - .../host-defaults/HostDefaultsEditorView.tsx | 79 - src/ui/sidebar/host-defaults/form-mapping.ts | 294 --- .../host-defaults/quick-connect-defaults.ts | 34 - src/ui/sidebar/host-permissions.ts | 66 - src/ui/sidebar/host-sort.ts | 102 - src/ui/sidebar/live-host-status.ts | 36 - src/ui/sidebar/quick-created-credential.ts | 23 - src/ui/sidebar/rail-preferences.ts | 48 - src/ui/sidebar/reorder-utils.ts | 140 -- .../sidebar/tree/FolderItem/FolderActions.tsx | 89 - src/ui/sidebar/tree/FolderItem/FolderItem.tsx | 396 ---- src/ui/sidebar/tree/HostItem/HostItem.tsx | 1356 ----------- src/ui/sidebar/tree/SidebarTree.tsx | 1504 ------------ .../tree/hooks/useHostSidebarPreferences.ts | 125 - .../sidebar/tree/hooks/useHostSpeedSearch.ts | 63 - .../sidebar/tree/hooks/useSidebarDragState.ts | 14 - .../sidebar/tree/hooks/useSidebarSelection.ts | 53 - src/ui/sidebar/tree/host-bar-actions.ts | 39 - src/ui/sidebar/tree/index.ts | 3 - src/ui/sidebar/tree/row-metrics.ts | 21 - src/ui/sidebar/tree/visible-rows.ts | 218 -- src/ui/sidebar/use-arrange-lock.ts | 52 - .../tests/dashboard/HostStatusCard.test.tsx | 92 - .../tests/dashboard/HostStatusMobile.test.tsx | 33 - .../tests/dashboard/quarter-borders.test.ts | 20 - .../appearance => look}/LookSettings.test.tsx | 2 +- src/ui/tests/look/RepairView.test.tsx | 56 +- src/ui/tests/look/resolve-look.test.ts | 5 +- src/ui/tests/manage/EditorPane.test.tsx | 199 -- src/ui/tests/manage/ManageList.test.tsx | 72 - src/ui/tests/manage/defaults-rows.test.ts | 20 - src/ui/tests/manage/host-validation.test.ts | 21 - src/ui/tests/manage/manage-tree.test.ts | 80 - src/ui/tests/plugin-host/registries.test.tsx | 27 - .../tests/plugin-host/view-ownership.test.tsx | 40 +- .../settings/DesktopUpdatesCard.test.tsx | 99 - .../settings/FeatureSettingsSections.test.tsx | 216 -- .../settings/KeybindingsSettings.test.tsx | 88 - src/ui/tests/settings/page-filter.test.ts | 44 - src/ui/tests/settings/settings-pages.test.ts | 70 - src/ui/tests/settings/sync/SyncPanel.test.tsx | 127 - src/ui/tests/shell/MobileBar.test.tsx | 97 - src/ui/tests/shell/TabBar.test.tsx | 181 -- .../shell/controller/use-regions.test.ts | 3 +- src/ui/tests/shell/layout/LayoutHost.test.tsx | 3 - src/ui/tests/shell/tab-handles.test.tsx | 79 +- src/ui/tests/sidebar/AdminHostTags.test.tsx | 44 - .../AdminSecondFactorsSection.test.tsx | 58 - .../tests/sidebar/AdminSettingsPanel.test.tsx | 113 - .../sidebar/AdminUserManagePanel.test.tsx | 217 -- src/ui/tests/sidebar/AppRail.test.tsx | 206 -- .../tests/sidebar/ConnectionsPanel.test.tsx | 78 - .../tests/sidebar/FixedShortcutsList.test.tsx | 17 - src/ui/tests/sidebar/FolderPathPicker.test.ts | 52 - .../sidebar/HostAuthOverrideModal.test.tsx | 271 --- src/ui/tests/sidebar/HostEditorData.test.ts | 542 ----- .../tests/sidebar/HostExportDialog.test.tsx | 237 -- src/ui/tests/sidebar/HostParentPicker.test.ts | 41 - src/ui/tests/sidebar/HostShareModal.test.tsx | 41 - .../tests/sidebar/QuickConnectPanel.test.tsx | 203 -- .../tests/sidebar/UserProfilePanel.test.tsx | 171 -- .../tests/sidebar/branding-logo-file.test.ts | 28 - src/ui/tests/sidebar/build-host-tree.test.ts | 6 +- src/ui/tests/sidebar/credential-sort.test.ts | 120 - .../credential-row-height.test.ts | 86 - .../useCredentialSidebarPreferences.test.ts | 171 -- .../credential-tree/visible-rows.test.ts | 88 - src/ui/tests/sidebar/hidden-rail-tabs.test.ts | 18 - .../host-defaults/form-mapping.test.ts | 103 - src/ui/tests/sidebar/host-permissions.test.ts | 76 - .../sidebar/host-recording-settings.test.tsx | 97 - .../sidebar/host-sharing-settings.test.tsx | 80 - src/ui/tests/sidebar/host-sort.test.ts | 180 -- src/ui/tests/sidebar/live-host-status.test.ts | 41 - .../sidebar/quick-created-credential.test.ts | 14 - src/ui/tests/sidebar/rail-preferences.test.ts | 125 - src/ui/tests/sidebar/reorder-utils.test.ts | 191 -- .../sidebar/role-permission-groups.test.tsx | 202 -- .../sidebar/sidebar-tree-visible-rows.test.ts | 206 -- .../tree/FolderItem/FolderItem.test.tsx | 73 - .../sidebar/tree/HostItem/HostItem.test.tsx | 444 ---- .../tree/HostItem/host-status-tooltip.test.ts | 109 - .../hooks/useHostSidebarPreferences.test.ts | 146 -- .../sidebar/tree/host-bar-actions.test.ts | 16 - .../sidebar/tree/host-speed-search.test.tsx | 89 - src/ui/tests/sidebar/tree/row-metrics.test.ts | 64 - .../sidebar/tree/sidebar-density.test.tsx | 207 -- 234 files changed, 3066 insertions(+), 76205 deletions(-) delete mode 100644 scripts/generate-settings-search-index.cjs delete mode 100644 src/ui/dashboard/DashboardTab.tsx delete mode 100644 src/ui/dashboard/dashboard-core-cards.tsx delete mode 100644 src/ui/dashboard/quarter-borders.ts create mode 100644 src/ui/lib/app-version.ts rename src/ui/{settings/appearance => look}/LookSettings.tsx (100%) delete mode 100644 src/ui/manage/EditorPane.tsx delete mode 100644 src/ui/manage/ManageList.tsx delete mode 100644 src/ui/manage/ManageTab.tsx delete mode 100644 src/ui/manage/defaults-rows.ts delete mode 100644 src/ui/manage/host-validation.ts delete mode 100644 src/ui/manage/manage-tree.ts delete mode 100644 src/ui/settings/DesktopUpdatesCard.tsx delete mode 100644 src/ui/settings/FeatureSettingsSections.tsx delete mode 100644 src/ui/settings/KeybindingsSettings.tsx delete mode 100644 src/ui/settings/SettingsTab.tsx delete mode 100644 src/ui/settings/UpdatesSettings.tsx delete mode 100644 src/ui/settings/page-filter.ts delete mode 100644 src/ui/settings/settings-embed.ts delete mode 100644 src/ui/settings/settings-pages.ts delete mode 100644 src/ui/settings/settings-search-index.ts delete mode 100644 src/ui/settings/sync/SyncPanel.tsx delete mode 100644 src/ui/shell/CommandPalette.tsx delete mode 100644 src/ui/shell/DockPanel.tsx delete mode 100644 src/ui/shell/MobileBar.tsx delete mode 100644 src/ui/shell/TabBar.tsx delete mode 100644 src/ui/shell/layout/builtin/DefaultLayout.tsx delete mode 100644 src/ui/shell/layout/builtin/index.ts delete mode 100644 src/ui/sidebar/AdminApiKeysSection.tsx delete mode 100644 src/ui/sidebar/AdminAuditLogSection.tsx delete mode 100644 src/ui/sidebar/AdminBrandingSection.tsx delete mode 100644 src/ui/sidebar/AdminHostTags.tsx delete mode 100644 src/ui/sidebar/AdminManagementSections.tsx delete mode 100644 src/ui/sidebar/AdminPluginDeveloperMode.tsx delete mode 100644 src/ui/sidebar/AdminSecondFactorsSection.tsx delete mode 100644 src/ui/sidebar/AdminSettingsPanel.tsx delete mode 100644 src/ui/sidebar/AdminSettingsSections.tsx delete mode 100644 src/ui/sidebar/AdminSettingsShared.tsx delete mode 100644 src/ui/sidebar/AdminUserDialogs.tsx delete mode 100644 src/ui/sidebar/AdminUserManagePanel.tsx delete mode 100644 src/ui/sidebar/AppRail.tsx delete mode 100644 src/ui/sidebar/ConnectionsPanel.tsx delete mode 100644 src/ui/sidebar/CredentialEditorView.tsx delete mode 100644 src/ui/sidebar/CredentialList.tsx delete mode 100644 src/ui/sidebar/CredentialShareModal.tsx delete mode 100644 src/ui/sidebar/CredentialsPanel.tsx delete mode 100644 src/ui/sidebar/CustomizeCredentialsSidebarPanel.tsx delete mode 100644 src/ui/sidebar/CustomizeSidebarPanel.tsx delete mode 100644 src/ui/sidebar/FixedShortcutsList.tsx delete mode 100644 src/ui/sidebar/FolderMetadataDialog.tsx delete mode 100644 src/ui/sidebar/FolderPathPicker.tsx delete mode 100644 src/ui/sidebar/HostAuthOverrideModal.tsx delete mode 100644 src/ui/sidebar/HostEditor.tsx delete mode 100644 src/ui/sidebar/HostEditorData.ts delete mode 100644 src/ui/sidebar/HostEditorGeneralTab.tsx delete mode 100644 src/ui/sidebar/HostExportDialog.tsx delete mode 100644 src/ui/sidebar/HostParentPicker.tsx delete mode 100644 src/ui/sidebar/HostShareModal.tsx delete mode 100644 src/ui/sidebar/HostsPanel.tsx delete mode 100644 src/ui/sidebar/InterfacePresetSettings.tsx delete mode 100644 src/ui/sidebar/NavigationVisibilityToggles.tsx delete mode 100644 src/ui/sidebar/QuickConnectPanel.tsx delete mode 100644 src/ui/sidebar/RailBadge.tsx delete mode 100644 src/ui/sidebar/ReorderIndicator.tsx delete mode 100644 src/ui/sidebar/SidebarTree.tsx delete mode 100644 src/ui/sidebar/SshAuthProviderFields.tsx delete mode 100644 src/ui/sidebar/UserProfilePanel.tsx delete mode 100644 src/ui/sidebar/branding-logo-file.ts delete mode 100644 src/ui/sidebar/credential-sort.ts delete mode 100644 src/ui/sidebar/credential-tree/CredentialItem/CredentialItem.tsx delete mode 100644 src/ui/sidebar/credential-tree/CredentialSidebarTree.tsx delete mode 100644 src/ui/sidebar/credential-tree/FolderItem/CredentialFolderItem.tsx delete mode 100644 src/ui/sidebar/credential-tree/credential-row-height.ts delete mode 100644 src/ui/sidebar/credential-tree/hooks/useCredentialSidebarPreferences.ts delete mode 100644 src/ui/sidebar/credential-tree/index.ts delete mode 100644 src/ui/sidebar/credential-tree/visible-rows.ts delete mode 100644 src/ui/sidebar/hidden-rail-tabs.ts delete mode 100644 src/ui/sidebar/host-defaults/HostDefaultsEditorView.tsx delete mode 100644 src/ui/sidebar/host-defaults/form-mapping.ts delete mode 100644 src/ui/sidebar/host-defaults/quick-connect-defaults.ts delete mode 100644 src/ui/sidebar/host-permissions.ts delete mode 100644 src/ui/sidebar/host-sort.ts delete mode 100644 src/ui/sidebar/live-host-status.ts delete mode 100644 src/ui/sidebar/quick-created-credential.ts delete mode 100644 src/ui/sidebar/rail-preferences.ts delete mode 100644 src/ui/sidebar/reorder-utils.ts delete mode 100644 src/ui/sidebar/tree/FolderItem/FolderActions.tsx delete mode 100644 src/ui/sidebar/tree/FolderItem/FolderItem.tsx delete mode 100644 src/ui/sidebar/tree/HostItem/HostItem.tsx delete mode 100644 src/ui/sidebar/tree/SidebarTree.tsx delete mode 100644 src/ui/sidebar/tree/hooks/useHostSidebarPreferences.ts delete mode 100644 src/ui/sidebar/tree/hooks/useHostSpeedSearch.ts delete mode 100644 src/ui/sidebar/tree/hooks/useSidebarDragState.ts delete mode 100644 src/ui/sidebar/tree/hooks/useSidebarSelection.ts delete mode 100644 src/ui/sidebar/tree/host-bar-actions.ts delete mode 100644 src/ui/sidebar/tree/index.ts delete mode 100644 src/ui/sidebar/tree/row-metrics.ts delete mode 100644 src/ui/sidebar/tree/visible-rows.ts delete mode 100644 src/ui/sidebar/use-arrange-lock.ts delete mode 100644 src/ui/tests/dashboard/HostStatusCard.test.tsx delete mode 100644 src/ui/tests/dashboard/HostStatusMobile.test.tsx delete mode 100644 src/ui/tests/dashboard/quarter-borders.test.ts rename src/ui/tests/{settings/appearance => look}/LookSettings.test.tsx (97%) delete mode 100644 src/ui/tests/manage/EditorPane.test.tsx delete mode 100644 src/ui/tests/manage/ManageList.test.tsx delete mode 100644 src/ui/tests/manage/defaults-rows.test.ts delete mode 100644 src/ui/tests/manage/host-validation.test.ts delete mode 100644 src/ui/tests/manage/manage-tree.test.ts delete mode 100644 src/ui/tests/settings/DesktopUpdatesCard.test.tsx delete mode 100644 src/ui/tests/settings/FeatureSettingsSections.test.tsx delete mode 100644 src/ui/tests/settings/KeybindingsSettings.test.tsx delete mode 100644 src/ui/tests/settings/page-filter.test.ts delete mode 100644 src/ui/tests/settings/settings-pages.test.ts delete mode 100644 src/ui/tests/settings/sync/SyncPanel.test.tsx delete mode 100644 src/ui/tests/shell/MobileBar.test.tsx delete mode 100644 src/ui/tests/shell/TabBar.test.tsx delete mode 100644 src/ui/tests/sidebar/AdminHostTags.test.tsx delete mode 100644 src/ui/tests/sidebar/AdminSecondFactorsSection.test.tsx delete mode 100644 src/ui/tests/sidebar/AdminSettingsPanel.test.tsx delete mode 100644 src/ui/tests/sidebar/AdminUserManagePanel.test.tsx delete mode 100644 src/ui/tests/sidebar/AppRail.test.tsx delete mode 100644 src/ui/tests/sidebar/ConnectionsPanel.test.tsx delete mode 100644 src/ui/tests/sidebar/FixedShortcutsList.test.tsx delete mode 100644 src/ui/tests/sidebar/FolderPathPicker.test.ts delete mode 100644 src/ui/tests/sidebar/HostAuthOverrideModal.test.tsx delete mode 100644 src/ui/tests/sidebar/HostEditorData.test.ts delete mode 100644 src/ui/tests/sidebar/HostExportDialog.test.tsx delete mode 100644 src/ui/tests/sidebar/HostParentPicker.test.ts delete mode 100644 src/ui/tests/sidebar/HostShareModal.test.tsx delete mode 100644 src/ui/tests/sidebar/QuickConnectPanel.test.tsx delete mode 100644 src/ui/tests/sidebar/UserProfilePanel.test.tsx delete mode 100644 src/ui/tests/sidebar/branding-logo-file.test.ts delete mode 100644 src/ui/tests/sidebar/credential-sort.test.ts delete mode 100644 src/ui/tests/sidebar/credential-tree/credential-row-height.test.ts delete mode 100644 src/ui/tests/sidebar/credential-tree/hooks/useCredentialSidebarPreferences.test.ts delete mode 100644 src/ui/tests/sidebar/credential-tree/visible-rows.test.ts delete mode 100644 src/ui/tests/sidebar/hidden-rail-tabs.test.ts delete mode 100644 src/ui/tests/sidebar/host-defaults/form-mapping.test.ts delete mode 100644 src/ui/tests/sidebar/host-permissions.test.ts delete mode 100644 src/ui/tests/sidebar/host-recording-settings.test.tsx delete mode 100644 src/ui/tests/sidebar/host-sharing-settings.test.tsx delete mode 100644 src/ui/tests/sidebar/host-sort.test.ts delete mode 100644 src/ui/tests/sidebar/live-host-status.test.ts delete mode 100644 src/ui/tests/sidebar/quick-created-credential.test.ts delete mode 100644 src/ui/tests/sidebar/rail-preferences.test.ts delete mode 100644 src/ui/tests/sidebar/reorder-utils.test.ts delete mode 100644 src/ui/tests/sidebar/role-permission-groups.test.tsx delete mode 100644 src/ui/tests/sidebar/sidebar-tree-visible-rows.test.ts delete mode 100644 src/ui/tests/sidebar/tree/FolderItem/FolderItem.test.tsx delete mode 100644 src/ui/tests/sidebar/tree/HostItem/HostItem.test.tsx delete mode 100644 src/ui/tests/sidebar/tree/HostItem/host-status-tooltip.test.ts delete mode 100644 src/ui/tests/sidebar/tree/hooks/useHostSidebarPreferences.test.ts delete mode 100644 src/ui/tests/sidebar/tree/host-bar-actions.test.ts delete mode 100644 src/ui/tests/sidebar/tree/host-speed-search.test.tsx delete mode 100644 src/ui/tests/sidebar/tree/row-metrics.test.ts delete mode 100644 src/ui/tests/sidebar/tree/sidebar-density.test.tsx diff --git a/.prettierignore b/.prettierignore index 11fe2e1de..db6faabac 100644 --- a/.prettierignore +++ b/.prettierignore @@ -11,4 +11,3 @@ db *.min.css openapi.json drizzle/ -src/ui/settings/settings-search-index.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index d491e55aa..40cfd28d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,11 @@ - Plugins can add layouts and themes - A repair screen shows when the chosen layout cannot load, with ways to update, switch, reset or turn it off. Open it any time with ?safe-layout=1, or for everyone with TERMIX_SAFE_LAYOUT=1 - Hovering a theme in Settings previews it +- Restore the bundled copy of a plugin from the repair screen, which also pins the shipped version ### Changed +- The icon rail, sidebar, tab bar, dock, Dashboard, Manage, Settings and command palette now come from a bundled layout. It can be swapped for another layout but not removed, and a fix to it no longer needs a Termix release - Your theme is saved to your account so your other devices use it too, unless you keep settings on this device only ## 26.10.2 diff --git a/docker/bundled-plugins.json b/docker/bundled-plugins.json index 75cc1d7ba..230b50d6b 100644 --- a/docker/bundled-plugins.json +++ b/docker/bundled-plugins.json @@ -28,6 +28,13 @@ "url": "https://github.com/Termix-SSH/Plugin-Automations/releases/download/v1.0.2/automations-1.0.2.tmxplug", "sha256": "674eb04276b4a0c77c794b30647f8680218a78de8d52b73e99ec900cc1b3fdb3" }, + { + "id": "classic-layout", + "source": "tmxplug", + "url": "https://github.com/Termix-SSH/Plugin-Classic-Layout/releases/download/v1.0.0/classic-layout-1.0.0.tmxplug", + "sha256": "3a51cc9a4c966478f2ebfd58dbbe025ff0ebe8bbdcd3ba73156151e555f62dec", + "defaultLook": true + }, { "id": "docker", "source": "tmxplug", diff --git a/package.json b/package.json index 282cea5da..06afe4542 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "postinstall": "node scripts/patch-app-builder-lib.cjs && node scripts/patch-better-sqlite3.cjs && node scripts/patch-nan.cjs && node scripts/patch-node-pty.cjs && node scripts/patch-ssh2-agent.cjs", "prepare": "husky || true", "prebuild": "node scripts/write-electron-build-info.cjs", - "lint": "node scripts/generate-dialect-schema.cjs --check && eslint . && node scripts/check-importmap-csp.cjs && node scripts/check-core-plugin-ids.cjs && node scripts/check-sdk-ui-exports.cjs && node scripts/check-sdk-guide.cjs && node scripts/generate-settings-search-index.cjs --check && node scripts/check-test-locations.cjs && node scripts/check-changelog.cjs && node scripts/check-env-catalog.cjs", + "lint": "node scripts/generate-dialect-schema.cjs --check && eslint . && node scripts/check-importmap-csp.cjs && node scripts/check-core-plugin-ids.cjs && node scripts/check-sdk-ui-exports.cjs && node scripts/check-sdk-guide.cjs && node scripts/check-test-locations.cjs && node scripts/check-changelog.cjs && node scripts/check-env-catalog.cjs", "lint:fix": "eslint --fix .", "type-check": "npm run build:sdk && tsc -b --force", "test": "vitest run", diff --git a/packages/plugin-sdk/CHANGELOG.md b/packages/plugin-sdk/CHANGELOG.md index 8babb7242..6f872e8de 100644 --- a/packages/plugin-sdk/CHANGELOG.md +++ b/packages/plugin-sdk/CHANGELOG.md @@ -11,6 +11,8 @@ Plugin API 1.4.0. - `useShell()` gives a layout the live shell: tabs, splits, hosts, docks, the command palette and the registries - `TabStage` and `ShellConfirmCapture` in `@termix-ssh/plugin-sdk/ui`, for a layout to place tabs - `validateThemeCss()` in `@termix-ssh/plugin-sdk/manifest` +- `@termix-ssh/plugin-sdk/ui` also exports what a whole layout is built from: the API client, shared types, hooks, `useShellController()` and `APP_VERSION`. These reach into core, so they can change with a core release +- `@termix-ssh/plugin-sdk/testing-host` exports the registries and permission seam a layout's own tests fill directly ### Fixed diff --git a/packages/plugin-sdk/PLUGIN-GUIDE.md b/packages/plugin-sdk/PLUGIN-GUIDE.md index 739027a62..03c6ba420 100644 --- a/packages/plugin-sdk/PLUGIN-GUIDE.md +++ b/packages/plugin-sdk/PLUGIN-GUIDE.md @@ -546,7 +546,15 @@ export function activate(app: TermixApp) { keeps its connection. The command palette, overlays and onboarding stay in core. - `mobileComponent` is used on phones and narrow windows. The desktop app always gets `component`. - Only the chosen layout's plugin is loaded. If it fails to load or crashes twice, Termix shows a repair - screen where people can switch, reset, update or turn it off. `?safe-layout=1` opens it any time. + screen where people can switch, reset, update, turn it off or (for a bundled plugin) restore the copy that + shipped. `?safe-layout=1` opens it any time. +- Termix has no layout of its own. The default is the bundled Classic Layout plugin + (https://github.com/Termix-SSH/Plugin-Classic-Layout), which is also a full example. It owns the rail, + sidebar, tab bar, docks, Dashboard, Manage, Settings and command palette, registers the `dashboard`, + `host-manager` and `settings` tab types, and offers the host list and dashboard as the components + `classic-layout.hostTree` and `classic-layout.dashboard` for other plugins to place with `PluginComponent`. + It reads the shell with `useShellController()` from `@termix-ssh/plugin-sdk/ui`, which exposes more than + `useShell()` and may change with Termix. A third party layout should start from `useShell()`. A theme is CSS only. Declare it in `contributes.themes` (`id`, `label`, `mode` light or dark, `css` path, optional `swatch` colors for the picker) with the `ui:theme` capability. The id becomes a class on ``, diff --git a/packages/plugin-sdk/ui.api.txt b/packages/plugin-sdk/ui.api.txt index 5d6c8a103..e8e4f12a4 100644 --- a/packages/plugin-sdk/ui.api.txt +++ b/packages/plugin-sdk/ui.api.txt @@ -1,5 +1,10 @@ +ACCENT_PRESET_COLORS (value): { label: string; value: string; }[] +APP_VERSION (value): string +AccessRecord (type): AccessRecord ActionSlot (value): ({ slotId, context, className, enabled, renderItem, hideLabels, when, }: ActionSlotProps) => Element +ActiveSessionInfo (type): ActiveSessionInfo AddButton (value): ({ label, compact, className, ...rest }: { label?: string; compact?: boolean; className?: string; } & Omit, "children"> & { ref?: Ref; }) => Element +AdminSection (type): AdminSection Alert (value): ({ className, variant, ...props }: ClassAttributes & HTMLAttributes & VariantProps<(props?: ConfigVariants<{ variant: { default: string; destructive: string; }; }> & ClassProp) => string>) => Element AlertDescription (value): ({ className, ...props }: DetailedHTMLProps, HTMLDivElement>) => Element AlertDialog (value): ({ ...props }: AlertDialogProps) => Element @@ -14,14 +19,23 @@ AlertDialogPortal (value): ({ ...props }: AlertDialogPortalProps) => Element AlertDialogTitle (value): ({ className, ...props }: AlertDialogTitleProps & RefAttributes) => Element AlertDialogTrigger (value): ({ ...props }: AlertDialogTriggerProps & RefAttributes) => Element AlertTitle (value): ({ className, ...props }: DetailedHTMLProps, HTMLDivElement>) => Element +ApiKey (type): ApiKey +AuditLog (type): AuditLog +AuditLogFilters (type): AuditLogFilters +AuthEnrollmentSections (value): () => Element +AuthOverrideProtocol (type): string BackButton (value): ({ onClick, label, className, }: { onClick: () => void; label?: string; className?: string; }) => Element Badge (value): ({ className, variant, asChild, ...props }: ClassAttributes & HTMLAttributes & VariantProps<(props?: ConfigVariants<{ variant: { default: string; secondary: string; destructive: string; outline: string; }; }> & ClassProp) => string> & { asChild?: boolean; }) => Element BarSeries (value): ({ items, max, className, colorClassName, }: BarSeriesProps) => Element BarSeriesItem (type): BarSeriesItem BarSeriesProps (type): BarSeriesProps +BrandingSettings (type): BrandingSettings BrowserSignInDialog (value): ({ isOpen, label, url, code, onContinue, onCancel, onOpenUrl, backgroundColor, }: BrowserSignInDialogProps) => Element Button (value): ({ className, variant, size, asChild, ...props }: ClassAttributes & ButtonHTMLAttributes & VariantProps<(props?: ConfigVariants<{ variant: { default: string; outline: string; secondary: string; ghost: string; destructive: string; link: string; }; size: { default: string; xs: string; sm: string; lg: string; icon: string; "icon-xs": string; "icon-sm": string; "icon-lg": string; }; }> & ClassProp) => string> & { asChild?: boolean; }) => Element ButtonProps (type): ButtonProps +CORE_HOST_DEFAULTS (value): readonly CoreHostDefault[] +CORE_NAMESPACE (value): "core" +CREDENTIAL_ROW_FIELD_KEYS (value): (keyof CredentialRowFields)[] Card (value): ({ className, size, ...props }: ClassAttributes & HTMLAttributes & { size?: "default" | "sm"; }) => Element CardAction (value): ({ className, ...props }: DetailedHTMLProps, HTMLDivElement>) => Element CardContent (value): ({ className, ...props }: DetailedHTMLProps, HTMLDivElement>) => Element @@ -33,6 +47,12 @@ CardMasonry (value): ({ columns, stack, className, children, }: { columns: numbe CardTitle (value): ({ className, ...props }: DetailedHTMLProps, HTMLDivElement>) => Element Checkbox (value): ({ className, ...props }: CheckboxProps & RefAttributes) => Element ColumnCountStepper (value): ({ columns, onChange, }: { columns: number; onChange: (columns: number) => void; }) => Element +Command (value): ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes> & { label?: string; shouldFilter?: boolean; filter?: CommandFilter; defaultValue?: string; value?: string; onValueChange?: (value: string) => void; loop?: boolean; disablePointerSelection?: boolean; vimBindings?: boolean; } & RefAttributes, "ref"> & RefAttributes> +CommandEmpty (value): ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes> & RefAttributes, "ref"> & RefAttributes> +CommandGroup (value): ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes>, "value" | "heading"> & { heading?: ReactNode; value?: string; forceMount?: boolean; } & RefAttributes, "ref"> & RefAttributes> +CommandItem (value): ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes>, "disabled" | "value" | "onSelect"> & { disabled?: boolean; onSelect?: (value: string) => void; value?: string; keywords?: string[]; forceMount?: boolean; } & RefAttributes, "ref"> & RefAttributes> +CommandList (value): ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes> & { label?: string; } & RefAttributes, "ref"> & RefAttributes> +CommandPrimitive (value): ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes> & { label?: string; shouldFilter?: boolean; filter?: CommandFilter; defaultValue?: string; value?: string; onValueChange?: (value: string) => void; loop?: boolean; disablePointerSelection?: boolean; vimBindings?: boolean; } & RefAttributes> & { List: ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes> & { label?: string; } & RefAttributes>; Item: ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes>, "disabled" | "value" | "onSelect"> & { disabled?: boolean; onSelect?: (value: string) => void; value?: string; keywords?: string[]; forceMount?: boolean; } & RefAttributes>; Input: ForwardRefExoticComponent, HTMLInputElement>, "key" | keyof InputHTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof InputHTMLAttributes>, "type" | "value" | "onChange"> & { value?: string; onValueChange?: (search: string) => void; } & RefAttributes>; Group: ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes>, "value" | "heading"> & { heading?: ReactNode; value?: string; forceMount?: boolean; } & RefAttributes>; Separator: ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes> & { alwaysRender?: boolean; } & RefAttributes>; Dialog: ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes> & { label?: string; shouldFilter?: boolean; filter?: CommandFilter; defaultValue?: string; value?: string; onValueChange?: (value: string) => void; loop?: boolean; disablePointerSelection?: boolean; vimBindings?: boolean; } & { overlayClassName?: string; contentClassName?: string; container?: HTMLElement; } & RefAttributes>; Empty: ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes> & RefAttributes>; Loading: ForwardRefExoticComponent, HTMLDivElement>, "key" | keyof HTMLAttributes> & { ref?: Ref; } & { asChild?: boolean; }, "key" | "asChild" | keyof HTMLAttributes> & { progress?: number; label?: string; } & RefAttributes>; } ComponentSlot (value): ({ slotId, props, when, }: { slotId: string; props?: Record; when?: Record; }) => Element ConfirmOptions (type): ConfirmOptions ConnectionGate (value): (props: ConnectionGateProps) => Element @@ -45,9 +65,26 @@ ConnectionScreen (value): ({ status, message, detail, errorDetail, unavailable, ConnectionStage (type): ConnectionStage ConnectionStatus (type): ConnectionStatus ConnectionUnavailable (type): ConnectionUnavailable +CreatedApiKey (type): CreatedApiKey +Credential (type): Credential +CredentialDensity (type): CredentialDensity +CredentialPermissionLevel (type): CredentialPermissionLevel +CredentialRowFields (type): CredentialRowFields +CredentialSidebarFilterState (type): CredentialSidebarFilterState +CredentialSidebarPreferences (type): CredentialSidebarPreferences +CredentialSortKey (type): CredentialSortKey +CredentialTrayTrigger (type): CredentialTrayTrigger CustomKeybinding (type): CustomKeybinding +DASHBOARD_CARDS (value): DashboardCardConfig[] +DEFAULT_FOLDER_COLOR (value): "#f59145" +DEFAULT_FOLDER_ICON (value): "folder" +DashboardCardId (type): DashboardCardId DataColumn (type): DataColumn DataView (value): ({ items, view, density, getKey, renderCard, columns, listColumns, onRowClick, isRowActive, empty, className, }: { items: T[]; view: PanelViewMode; density?: PanelDensity; getKey: (item: T) => string; renderCard: (item: T) => ReactNode; columns: GridColumns; listColumns: DataColumn[]; onRowClick?: (item: T) => void; isRowActive?: (item: T) => boolean; empty: ReactNode; className?: string; }) => Element +DefaultOverrides (type): DefaultOverrides +DefaultsOnly (value): ({ settingKey, children, }: { settingKey: string; children: ReactNode; }) => Element +DesktopUpdateMode (type): DesktopUpdateMode +DesktopUpdateState (type): DesktopUpdateState Dialog (value): ({ ...props }: DialogProps) => Element DialogClose (value): ({ ...props }: DialogCloseProps & RefAttributes) => Element DialogContent (value): ({ className, children, showCloseButton, ...props }: DialogContentProps & RefAttributes & { showCloseButton?: boolean; }) => Element @@ -60,6 +97,7 @@ DialogTitle (value): ({ className, ...props }: DialogTitleProps & RefAttributes< DialogTrigger (value): ({ ...props }: DialogTriggerProps & RefAttributes) => Element DocsLink (value): ({ core, page, anchor, href, variant, children, className, }: DocsLinkProps) => Element DocsLinkProps (type): DocsLinkProps +DocsPage (type): "dashboard" | "users" | "sessions" | "roles" | "branding" | "database" | "manage" | "settings" | "plugins" | "install" | "cli" | "develop" | "home" | "updating" | "betas" | "envVars" | "https" | "reverseProxy" | "desktopSync" | "interface" | "hosts" | "portKnocking" | "hostDefaults" | "credentials" | "sharing" | "account" | "accountSecurity" | "accountData" | "apiKeys" | "commandPalette" | "interfaceSettings" | "appearance" | "keybindings" | "adminGeneral" | "adminDatabase" | "adminSsl" | "auditLog" | "importExport" | "pluginCatalog" | "communityRegistry" | "pluginRegistries" | "hostRegistry" DropdownMenu (value): ({ ...props }: DropdownMenuProps) => Element DropdownMenuCheckboxItem (value): ({ className, children, checked, inset, ...props }: DropdownMenuCheckboxItemProps & RefAttributes & { inset?: boolean; }) => Element DropdownMenuContent (value): ({ className, align, sideOffset, ...props }: DropdownMenuContentProps & RefAttributes) => Element @@ -77,11 +115,17 @@ DropdownMenuSubTrigger (value): ({ className, inset, children, ...props }: Dropd DropdownMenuTrigger (value): ({ ...props }: DropdownMenuTriggerProps & RefAttributes) => Element EditingWidth (type): EditingWidth EmptyState (value): ({ icon: Icon, title, hint, action, className, }: { icon?: LucideIcon; title: string; hint?: string; action?: ReactNode; className?: string; }) => Element +ExportPayload (type): ExportPayload FOLDER_COLORS (value): string[] +FONT_SIZES (value): { id: FontSizeId; label: string; }[] Facts (value): ({ className, children, }: { className?: string; children: ReactNode; }) => Element FakeSwitch (value): ({ defaultChecked, disabled, checked, onChange, }: { defaultChecked?: boolean; disabled?: boolean; checked?: boolean; onChange?: (v: boolean) => void; }) => Element Field (value): ({ label, hint, error, aside, htmlFor, className, children, }: { label: string; hint?: ReactNode; error?: string; aside?: ReactNode; htmlFor?: string; className?: string; children: ReactNode; }) => Element +FieldGroup (type): FieldGroup FieldPair (value): ({ children }: { children: ReactNode; }) => Element +FolderAccessRule (type): FolderAccessRule +FolderIconEl (value): ({ icon, className, style, }: { icon?: string; className?: string; style?: CSSProperties; }) => Element +FontSizeId (type): FontSizeId FormFooter (value): ({ onCancel, onSave, saveLabel, cancelLabel, saving, dirty, status, disabled, onDelete, deleteLabel, extra, saveType, form, }: { onCancel?: () => void; onSave?: () => void; saveLabel?: string; cancelLabel?: string; saving?: boolean; dirty?: boolean; status?: ReactNode; disabled?: boolean; onDelete?: () => void; deleteLabel?: string; extra?: ReactNode; saveType?: "button" | "submit"; form?: string; }) => Element FullScreenAppPhase (type): FullScreenAppPhase FullScreenAppWrapper (value): FC @@ -91,11 +135,33 @@ GridColumns (type): GridColumns GridLayout (type): GridLayout GridSlot (type): GridSlot GroupHeading (value): ({ title, count, action, className, }: { title: string; count?: number; action?: ReactNode; className?: string; }) => Element +HexColorPicker (value): ({ value, onChange, }: { value: string; onChange: (hex: string) => void; }) => Element +Host (type): Host +HostActionDef (type): HostActionDef +HostClickBehavior (type): HostClickBehavior +HostData (type): HostData HostDefaultBadge (value): ({ settingKey }: { settingKey: string; }) => Element HostDefaultField (value): ({ settingKey, children, }: { settingKey: string; children: ReactNode; }) => Element +HostDefaultsChange (type): HostDefaultsChange +HostDefaultsContext (value): Context +HostDefaultsContextValue (type): HostDefaultsContextValue +HostDefaultsLevel (type): HostDefaultsLevel +HostDefaultsTarget (type): HostDefaultsTarget +HostDensity (type): HostDensity HostFeatureFields (value): ({ form, updateForm, }: HostFeatureFieldsProps) => Element HostFeatureFieldsProps (type): HostFeatureFieldsProps +HostFolder (type): HostFolder +HostGroupKey (type): HostGroupKey HostKeyVerificationDialog (value): ({ isOpen, scenario, ip, port, hostname, fingerprint, oldFingerprint, onAccept, onReject, backgroundColor, }: HostKeyVerificationDialogProps) => Element +HostOnly (value): ({ children }: { children: ReactNode; }) => Element +HostProtocolAuthInput (type): HostProtocolAuthInput +HostProtocolDef (type): HostProtocolDef +HostProtocols (type): HostProtocols +HostRowFields (type): HostRowFields +HostSidebarFilterState (type): HostSidebarFilterState +HostSidebarPreferences (type): HostSidebarPreferences +HostTrayTrigger (type): HostTrayTrigger +IconPicker (value): ({ value, color, onChange, }: { value: string; color?: string; onChange: (icon: string) => void; }) => Element InlineView (value): ({ open, onOpenChange, title, icon, status, actions, toolbar, footer, width, onBeforeClose, scroll, bare, className, children, }: { open: boolean; onOpenChange: (open: boolean) => void; title: ReactNode; icon?: ReactNode; status?: ReactNode; actions?: ReactNode; toolbar?: ReactNode; footer?: ReactNode; width?: EditingWidth; onBeforeClose?: () => boolean | Promise; scroll?: boolean; bare?: boolean; className?: string; children: ReactNode; }) => ReactPortal Input (value): ({ className, type, ...props }: DetailedHTMLProps, HTMLInputElement>) => Element Kbd (value): ForwardRefExoticComponent> @@ -103,10 +169,14 @@ KbdKey (value): { ({ className, ...props }: HTMLAttributes): El KbdSeparator (value): { ({ className, ...props }: HTMLAttributes): Element; displayName: string; } KeyCombo (type): KeyCombo KeybindingAction (type): KeybindingAction +KeybindingActionDef (type): KeybindingActionDef KeybindingActionType (type): string +LANGUAGES (value): readonly { code: string; label: string; }[] Label (value): ({ className, ...props }: LabelProps & RefAttributes) => Element LineChart (value): ({ series, timestamps, domain, yFormatter, height, className, }: LineChartProps) => Element LineChartSeries (type): LineChartSeries +LinkServerDialog (value): ({ open, onOpenChange, onLinked, relogin, }: LinkServerDialogProps) => Element +LinkedAccountInfo (type): LinkedAccountInfo ListBadge (value): ({ tone, className, children, }: { tone?: "destructive" | "muted" | "brand" | "warning" | "success"; className?: string; children: ReactNode; }) => Element ListRow (value): ({ title, icon, badges, meta, stripe, tone, color, selected, active, dimmed, leading, trailing, actions, onClick, className, children, ...rest }: { title: ReactNode; icon?: ReactNode; badges?: ReactNode; meta?: ReactNode; stripe?: number; tone?: ListRowTone; color?: string; selected?: boolean; active?: boolean; dimmed?: boolean; leading?: ReactNode; trailing?: ReactNode; actions?: ReactNode; onClick?: () => void; className?: string; children?: ReactNode; } & Omit, "title" | "children" | "onClick">) => Element ListRowAction (value): ({ label, tone, className, children, ...rest }: { label: string; tone?: "default" | "destructive" | "brand"; className?: string; children: ReactNode; } & Omit, "children"> & { ref?: Ref; }) => Element @@ -114,7 +184,12 @@ ListRowFolder (value): ({ name, icon, count, open, onToggle, stripe, actions, dr ListRowTone (type): ListRowTone LogContext (type): LogContext LogEntry (type): LogEntry +LookSettings (value): ({ isAdmin }: { isAdmin: boolean; }) => Element +MANAGE_REQUEST_EVENT (value): "manage:request" +MAX_PANES (value): 8 MFAPromptMode (type): MFAPromptMode +ManageMode (type): ManageMode +ManageRequest (type): ManageRequest ManagerCardError (type): ManagerCardError ManagerCardShell (value): ({ title, icon, loading, error, onRefresh, empty, emptyMessage, children, headerExtra, }: { title: string; icon: ReactNode; loading: boolean; error: ManagerCardError; onRefresh: () => void; empty?: boolean; emptyMessage?: string; children: ReactNode; headerExtra?: ReactNode; }) => Element ManagerSearch (value): ({ value, onChange, placeholder, count, extra, }: { value: string; onChange: (value: string) => void; placeholder?: string; count?: number; extra?: ReactNode; }) => Element @@ -122,10 +197,13 @@ Meter (value): ({ percent, className, }: { percent: number; className?: string; MetricCard (value): ({ title, icon, action, children, bodyClassName, scroll, scrollMax, }: { title: string; icon: ReactNode; action?: ReactNode; children: ReactNode; bodyClassName?: string; scroll?: boolean; scrollMax?: number; }) => Element MiniStat (value): ({ caption, value, valueClassName, className, }: { caption: ReactNode; value: ReactNode; valueClassName?: string; className?: string; }) => Element NumberField (value): ({ label, value, onChange, placeholder, hint, error, min, max, disabled, className, }: { label: string; value: number; onChange: (value: number) => void; placeholder?: string; hint?: ReactNode; error?: string; min?: number; max?: number; disabled?: boolean; className?: string; }) => Element +OPEN_PLUGINS_EVENT (value): "termix:open-plugins" +OpenTabRecord (type): OpenTabRecord PANEL (value): { readonly body: "p-2.5"; readonly gap: "gap-2"; readonly band: "px-3 py-2"; readonly cardHead: "px-3 py-2.5"; readonly header: "h-12.5"; } PROMPT_BUTTON (value): "inline-flex h-7 items-center justify-center gap-1.5 border border-border px-3 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50" PROMPT_DESTRUCTIVE_BUTTON (value): "inline-flex h-7 items-center justify-center gap-1.5 bg-destructive px-3 text-xs font-medium text-white transition-colors hover:bg-destructive/90 focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50" PROMPT_PRIMARY_BUTTON (value): "inline-flex h-7 items-center justify-center gap-1.5 border border-accent-brand/40 px-3 text-xs font-medium text-accent-brand transition-colors hover:bg-accent-brand/10 focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50" +PaletteItemDef (type): PaletteItemDef PanePrompt (value): ({ open, title, titleId, description, icon, tone, actions, onCancel, role, labelledBy, layer, backgroundColor, className, children, }: { open: boolean; title: ReactNode; titleId?: string; description?: ReactNode; icon?: ReactNode; tone?: "default" | "destructive"; actions?: ReactNode; onCancel?: () => void; role?: "dialog" | "alertdialog"; labelledBy?: string; layer?: "connection" | "pane"; backgroundColor?: string; className?: string; children?: ReactNode; }) => Element PanelDensity (type): PanelDensity PanelList (value): ({ empty, className, children, }: { empty?: ReactNode; className?: string; children?: ReactNode; }) => Element @@ -134,18 +212,35 @@ PanelShell (value): ({ chrome, icon, title, status, leading, actions, toolbar, t PanelViewMode (type): PanelViewMode PassphraseDialog (value): ({ isOpen, onSubmit, onCancel, hostInfo, backgroundColor, }: PassphraseDialogProps) => Element PasswordInput (value): ForwardRefExoticComponent> +PermissionCatalogEntry (type): PermissionCatalogEntry PluginComponent (value): ({ id, fallback, ...props }: { [prop: string]: unknown; id: string; fallback?: ReactNode; }) => ReactNode +PluginIcon (value): ({ name, ...props }: { name?: string; } & LucideProps) => Element +PluginSettingsErrors (type): PluginSettingsErrors +PluginSettingsField (type): PluginSettingsField +PluginSettingsValidationError (value): typeof PluginSettingsValidationError +PluginSummary (type): PluginSummary PluginViewPlaceholder (value): ({ kind, viewId, compact, }: { kind: ViewKind; viewId: string; compact?: boolean; }) => Element Popover (value): ({ ...props }: PopoverProps) => Element PopoverAnchor (value): ({ ...props }: PopoverAnchorProps & RefAttributes) => Element PopoverContent (value): ({ className, align, sideOffset, ...props }: PopoverContentProps & RefAttributes) => Element PopoverTrigger (value): ({ ...props }: PopoverTriggerProps & RefAttributes) => Element +ProxyNode (type): ProxyNode +ProxySettingsFields (value): ({ customHeaders, basicAuth, onChange, }: ProxySettingsFieldsProps) => Element RadialGauge (value): ({ value, label, caption, size, strokeWidth, className, colorClassName, }: RadialGaugeProps) => Element RadialGaugeProps (type): RadialGaugeProps +RailGroup (type): RailGroup +RailItemDef (type): RailItemDef RecentActivityItem (type): RecentActivityItem +ReleaseInfo (type): ReleaseInfo Repeater (value): ({ label, items, onChange, makeItem, empty, addLabel, hint, renderItem, }: { label: string; items: T[]; onChange: (items: T[]) => void; makeItem: () => T; empty: string; addLabel: string; hint?: ReactNode; renderItem: (item: T, update: (next: T) => void, index: number) => ReactNode; }) => Element +ResolvedHostDefault (type): ResolvedHostDefault RobustClipboardProvider (value): typeof RobustClipboardProvider +Role (type): Role SSHAuthDialog (value): ({ isOpen, reason, onSubmit, onCancel, hostInfo, backgroundColor, }: SSHAuthDialogProps) => Element +SSHHost (type): Host +SSHHostData (type): HostData +SSHHostWithStatus (type): SSHHostWithStatus +SSH_AUTH_PROTOCOL (value): "ssh" ScrollArea (value): ({ className, children, ...props }: ScrollAreaProps & RefAttributes) => Element ScrollBar (value): ({ className, orientation, ...props }: ScrollAreaScrollbarProps & RefAttributes) => Element SecretField (value): ({ label, value, onChange, placeholder, hint, error, disabled, className, }: { label: string; value: string; onChange: (value: string) => void; placeholder?: string; hint?: ReactNode; error?: string; disabled?: boolean; className?: string; }) => Element @@ -165,6 +260,9 @@ SelectTrigger (value): ({ className, size, children, ...props }: SelectTriggerPr SelectValue (value): ({ ...props }: SelectValueProps & RefAttributes) => Element Separator (value): ({ className, orientation, decorative, ...props }: SeparatorProps & RefAttributes) => Element SettingRow (value): ({ label, badge, description, defaultKey, rowId, children, }: { label: string; badge?: string; description?: ReactNode; defaultKey?: string; rowId?: string; children: ReactNode; }) => Element +SettingsFieldRow (value): ({ pluginId, field, values, setValue, running, error, disabled, defaultKey, }: SettingsFieldProps) => Element +SharePermissionLevel (type): SharePermissionLevel +ShareTarget (type): ShareTarget Sheet (value): ({ ...props }: DialogProps) => Element SheetClose (value): ({ ...props }: DialogCloseProps & RefAttributes) => Element SheetContent (value): ({ className, children, side, showCloseButton, ...props }: DialogContentProps & RefAttributes & { side?: "top" | "right" | "bottom" | "left"; showCloseButton?: boolean; }) => Element @@ -176,70 +274,378 @@ SheetTrigger (value): ({ ...props }: DialogTriggerProps & RefAttributes null Skeleton (value): ({ className, ...props }: DetailedHTMLProps, HTMLDivElement>) => Element Slider (value): ({ className, defaultValue, value, min, max, ...props }: SliderProps & RefAttributes) => Element +SortKey (type): SortKey Sparkline (value): ({ data, domain, className, colorClassName, showLastDot, height, }: SparklineProps) => Element SparklineProps (type): SparklineProps +SplitLayoutMenu (value): ({ activeIsSplit, canAddPane, onSplit, onPreset, }: { activeIsSplit: boolean; canAddPane: boolean; onSplit: (edge: "right" | "bottom") => void; onPreset: (id: SplitPresetId) => void; }) => Element +SplitOpenTarget (type): SplitOpenTarget +SplitSummary (type): SplitSummary StatRow (value): ({ label, value, mono, className, }: { label: ReactNode; value: ReactNode; mono?: boolean; className?: string; }) => Element +StatusValue (type): StatusValue SurfaceKind (type): SurfaceKind SurfaceScope (value): ({ kind, onEditingChange, onClose, className, children, }: { kind?: SurfaceKind; onClose?: () => void; onEditingChange?: (editing: EditingWidth) => void; className?: string; children: ReactNode; }) => Element Switch (value): ({ className, ...props }: SwitchProps & RefAttributes) => Element SwitchRow (value): ({ label, description, badge, checked, onChange, disabled, defaultKey, rowId, }: { label: string; description?: ReactNode; badge?: string; checked: boolean; onChange: (value: boolean) => void; disabled?: boolean; defaultKey?: string; rowId?: string; }) => Element +SyncBasicAuth (type): SyncBasicAuth +SyncConflictItem (type): SyncConflictItem +SyncEntityInfo (type): SyncEntityInfo +SyncErrorItem (type): SyncErrorItem +SyncProxyHeader (type): SyncProxyHeader +SyncStatus (type): SyncStatus TOTPDialog (value): ({ isOpen, prompt, mode, waiting, onSubmit, onCancel, backgroundColor, }: TOTPDialogProps) => Element +Tab (type): Tab +TabShellCallbacks (type): TabShellCallbacks +TabSplitAction (type): TabSplitAction TabStage (value): ({ className }: { className?: string; }) => Element TabStrip (value): ({ tabs, activeTab, onTabChange, isActive, variant, trailing, className, }: { tabs: TabStripItem[]; activeTab: string; onTabChange: (id: string) => void; isActive?: (id: string) => boolean; variant?: "secondary" | "primary"; trailing?: ReactNode; className?: string; }) => Element TabStripItem (type): TabStripItem +TabType (type): TabType TagInput (value): ({ tags, input, placeholder, onTagsChange, onInputChange, }: { tags: string[]; input: string; placeholder: string; onTagsChange: (tags: string[]) => void; onInputChange: (value: string) => void; }) => Element TextAreaField (value): ({ label, value, onChange, placeholder, rows, hint, error, aside, mono, disabled, className, }: { label: string; value: string; onChange: (value: string) => void; placeholder?: string; rows?: number; hint?: ReactNode; error?: string; aside?: ReactNode; mono?: boolean; disabled?: boolean; className?: string; }) => Element TextField (value): ({ label, value, onChange, placeholder, hint, error, aside, disabled, mono, className, }: { label: string; value: string; onChange: (value: string) => void; placeholder?: string; hint?: ReactNode; error?: string; aside?: ReactNode; disabled?: boolean; mono?: boolean; className?: string; }) => Element Textarea (value): ForwardRefExoticComponent> TextareaProps (type): TextareaProps +ThemeId (type): string +TlsStatus (type): TlsStatus +ToolsTab (type): ToolsTab Tooltip (value): ({ ...props }: TooltipProps) => Element TooltipContent (value): ({ className, sideOffset, children, ...props }: TooltipContentProps & RefAttributes) => Element TooltipProvider (value): ({ delayDuration, ...props }: TooltipProviderProps) => Element TooltipTrigger (value): ({ ...props }: TooltipTriggerProps & RefAttributes) => Element +UI_AREA_KEYS (value): UiAreaKey[] +UI_FONTS (value): { id: UiFontId; label: string; family: string; }[] +UiAreaKey (type): UiAreaKey +UiFontId (type): UiFontId +UiPreset (type): UiPreset +UpdateChannelState (type): UpdateChannelState UptimeInfo (type): UptimeInfo UsagePair (value): ({ label, percent, detail, }: { label?: string; percent: number; detail?: string; }) => Element +UserPreferences (type): UserPreferences +UserRole (type): UserRole +UserSecondFactorSummary (type): UserSecondFactorSummary +VersionBadge (value): ({ status, releaseUrl, className, }: VersionBadgeProps) => Element VersionInfo (type): VersionInfo ViewToggle (value): ({ view, onView, density, onDensity, }: { view: PanelViewMode; onView: (next: PanelViewMode) => void; density?: PanelDensity; onDensity?: (next: PanelDensity) => void; }) => Element WebSocketConnectionTarget (type): WebSocketConnectionTarget WidgetTitle (value): ({ title, icon, fallback }: WidgetTitleProps) => Element +actionOrder (value): (action: HostActionDef) => number +activityTarget (value): (type: string) => ActivityTarget +adminCreateUser (value): (username: string, password: string) => Promise> +adminCreateUserCredential (value): (targetUserId: string, credentialData: Record) => Promise> +adminCreateUserHost (value): (targetUserId: string, hostData: HostData) => Promise +adminDeleteUserCredential (value): (targetUserId: string, credentialId: number) => Promise> +adminDeleteUserHost (value): (targetUserId: string, hostId: number) => Promise> +adminExportUserData (value): (userId: string) => Promise> +adminGetHostPassword (value): (targetUserId: string, hostId: number, field?: "key" | "password" | "sudoPassword" | "keyPassword") => Promise +adminGetUserCredentials (value): (targetUserId: string) => Promise | Record[]> +adminGetUserHosts (value): (targetUserId: string) => Promise +adminResetUserPassword (value): (userId: string, newPassword: string, confirmDataWipe?: boolean) => Promise<{ message: string; dataWiped?: boolean; }> +adminUpdateUserCredential (value): (targetUserId: string, credentialId: number, credentialData: Record) => Promise> +adminUpdateUserHost (value): (targetUserId: string, hostId: number, hostData: HostData) => Promise +applyAccentColor (value): (colorValue: string) => void +applyFontSize (value): (id: FontSizeId) => void +applyPresetSideEffects (value): (preset: "advanced" | "simple" | "balanced") => Promise +applyUiFont (value): (id: UiFontId) => void +assignRoleToUser (value): (userId: string, roleId: number) => Promise<{ success: boolean; }> +beginSplitDrag (value): (source: SplitDragSource, x: number, y: number) => void +buildExportPayload (value): (raw: ExportPayload, selected: Set, groups: Set, withCredentials: boolean, pluginSecrets?: PluginSecretKeys) => ExportPayload buildOriginWsUrl (value): ({ origin, localPort, localPath, remotePath, includeJwt, }: { origin: ConnectionOrigin; localPort: number; localPath: string; remotePath: string; includeJwt?: boolean; }) => Promise +bulkImportSSHHosts (value): (hosts: HostData[], overwrite?: boolean, credentials?: Record[]) => Promise<{ message: string; success: number; updated: number; skipped: number; failed: number; errors: string[]; }> +bulkUpdateSSHHosts (value): (hostIds: number[], updates: Record) => Promise<{ updated: number; failed: number; errors: string[]; }> +canConfigureUpdates (value): (state: DesktopUpdateState) => state is DesktopUpdateState +canJoinSplit (value): (tab: Tab) => boolean +changeAppLanguage (value): (language: string) => Promise +changePassword (value): (oldPassword: string, newPassword: string) => Promise +clearLocalAdaptivePreferences (value): () => void cn (value): (...inputs: ClassValue[]) => string copyToClipboard (value): (text: string) => Promise +createApiKey (value): (name: string, userId: string, expiresAt?: string) => Promise +createCredential (value): (credentialData: Record) => Promise> createFrontendLogger (value): (serviceName: string, serviceIcon?: string, serviceColor?: string) => FrontendLogger createQuickConnectHost (value): (input: QuickConnectInput) => Host +createRole (value): (roleData: { name: string; displayName: string; description?: string; }) => Promise<{ role: Role; }> +createSSHHost (value): (hostData: HostData) => Promise +defaultConnectAction (value): (all: HostActionDef[], host: Host) => HostActionDef +defaultCredentialRowFields (value): () => CredentialRowFields +defaultCredentialSidebarPreferences (value): () => CredentialSidebarPreferences +defaultHostRowFields (value): () => HostRowFields +defaultHostSidebarPreferences (value): () => HostSidebarPreferences +defaultValuesEqual (value): (a: unknown, b: unknown) => boolean +deleteAccount (value): (password: string) => Promise> +deleteAllHostsInFolder (value): (folderName: string) => Promise<{ deletedCount: number; }> +deleteApiKey (value): (keyId: string) => Promise<{ success: boolean; }> +deleteCredential (value): (credentialId: number) => Promise> +deleteOpenTab (value): (instanceId: string) => Promise +deleteRole (value): (roleId: number) => Promise<{ success: boolean; }> +deleteSSHHost (value): (hostId: number) => Promise> +deleteUser (value): (username: string, successorUserId?: string) => Promise> +deployCredentialToHost (value): (credentialId: number, targetHostId: number) => Promise> +desktopUpdates (value): () => DesktopUpdatesBridge +docsUrl (value): (page?: "dashboard" | "users" | "sessions" | "roles" | "branding" | "database" | "manage" | "settings" | "plugins" | "install" | "cli" | "develop" | "home" | "updating" | "betas" | "envVars" | "https" | "reverseProxy" | "desktopSync" | "interface" | "hosts" | "portKnocking" | "hostDefaults" | "credentials" | "sharing" | "account" | "accountSecurity" | "accountData" | "apiKeys" | "commandPalette" | "interfaceSettings" | "appearance" | "keybindings" | "adminGeneral" | "adminDatabase" | "adminSsl" | "auditLog" | "importExport" | "pluginCatalog" | "communityRegistry" | "pluginRegistries" | "hostRegistry") => string +duplicateCredential (value): (credentialId: number, data: Record) => Promise> +enabledHostProtocols (value): (host: { pluginSettings?: Record>; }, list?: HostProtocolDef[]) => HostProtocolDef[] +endSplitDrag (value): (commit: boolean) => void +exportAllSSHHosts (value): { (): Promise<{ hosts: Host[]; }>; (options: { share: true; }): Promise<{ version: string; exportedAt: string; credentials: Record[]; hosts: Host[]; }>; } +filterPaletteItems (value): (items: PaletteItemDef[], query: string, showWhenEmpty?: boolean) => PaletteItemDef[] +findCoreHostDefault (value): (key: string) => CoreHostDefault findMatchingKeybinding (value): (e: KeyboardEvent, bindings: CustomKeybinding[]) => CustomKeybinding +generateKeyPair (value): (keyType: "ssh-ed25519" | "ssh-rsa" | "ecdsa-sha2-nistp256", keySize?: number, passphrase?: string) => Promise +generatePublicKeyFromPrivate (value): (privateKey: string, keyPassword?: string) => Promise +getActiveSessions (value): () => Promise getAdaptiveResourceBudget (value): (kind: AdaptiveTaskKind) => AdaptiveResourceBudget +getApiKeys (value): () => Promise<{ apiKeys: ApiKey[]; }> +getAuditForwarding (value): () => Promise +getAuditLogActions (value): () => Promise<{ actions: string[]; }> +getAuditLogs (value): (filters?: AuditLogFilters) => Promise getBasePath (value): () => string +getBranding (value): () => Promise +getChannelReleases (value): () => Promise<{ localVersion: string; stable: ReleaseInfo; beta: ReleaseInfo; }> +getConnectedRemoteApi (value): () => Promise +getCredentialAccess (value): (credentialId: number) => Promise<{ access: AccessRecord[]; }> +getCredentialDetails (value): (credentialId: number) => Promise> +getCredentialSidebarPreferences (value): () => Promise +getCredentials (value): () => Promise | Record[]> getDatabaseHealth (value): () => Promise> +getDatabaseTransferUrl (value): (operation: "export" | "import", { electron, configuredServerUrl, location }: DatabaseTransferUrlOptions) => string +getDefaultConnectionTab (value): (host: Host) => TabType +getDeveloperMode (value): () => Promise getDeviceId (value): () => string +getErrorMessage (value): (error: unknown, fallback?: string) => string +getExternalAutoProvision (value): () => Promise<{ enabled: boolean; }> +getFolderAccess (value): (folder: string) => Promise<{ rules: FolderAccessRule[]; }> +getFolderDefaultsId (value): (name: string) => Promise +getHostAccess (value): (hostId: number, syncId?: string) => Promise<{ accessList: AccessRecord[]; isOwner?: boolean; }> +getHostAuthOverride (value): (hostId: number, protocol: string, sharedCopySyncId?: string) => Promise<{ protocol: string; credentialId: number; }> +getHostDefaultsLevel (value): (target: HostDefaultsTarget) => Promise +getHostEditorSection (value): (id: string) => HostEditorSectionDef +getHostPassword (value): (hostId: number, field?: "key" | "password" | "sudoPassword" | "keyPassword") => Promise +getHostSidebarPreferences (value): () => Promise +getHostTags (value): () => Promise +getLiveHostStatus (value): (hostId: number) => StatusValue +getLogLevel (value): () => Promise<{ level: string; }> +getNotificationPrivateEndpoints (value): () => Promise +getPanel (value): (id: string) => PanelDef +getPasswordLoginAllowed (value): () => Promise<{ allowed: boolean; forced?: boolean; }> +getPasswordResetAllowed (value): () => Promise +getPermissionsCatalog (value): () => Promise<{ catalog: PermissionCatalogEntry[]; }> +getPluginAdminSettings (value): (pluginId: string) => Promise +getPluginHostSettings (value): (pluginId: string, hostId: number) => Promise +getPluginUserSettings (value): (pluginId: string) => Promise +getPlugins (value): () => Promise getPollingEnvironmentMultiplier (value): (connection?: NetworkInformationLike) => number +getPreferredHostAction (value): (hostId: string, candidates: readonly TabType[], fallback: TabType) => TabType getRecentActivity (value): (limit?: number) => Promise +getRegisteredDashboardCard (value): (id: string) => RegisteredDashboardCard +getRegistrationAllowed (value): () => Promise<{ allowed: boolean; }> +getRoles (value): () => Promise<{ roles: Role[]; }> +getSSHFolders (value): () => Promise +getSSHHosts (value): () => Promise +getSecondFactorAfterExternalLogin (value): () => Promise<{ enabled: boolean; }> +getSessionTimeout (value): () => Promise<{ timeoutHours: number; }> +getSessionTimeoutMinutes (value): () => Promise +getSessions (value): () => Promise<{ sessions: { id: string; userId: string; username?: string; deviceType: string; deviceInfo: string; createdAt: string; expiresAt: string; lastActiveAt: string; isRevoked?: boolean; isCurrentSession?: boolean; }[]; }> +getStatusCheckSettings (value): () => Promise<{ statusCheckInterval: number; }> +getStatusClasses (value): (status: boolean | "online" | "offline" | "unknown", scheme: StatusColorScheme, variant: "dot" | "stripe" | "badge", loading?: boolean) => string +getSyncConflicts (value): () => Promise +getSyncErrors (value): () => Promise +getTabType (value): (id: string) => TabTypeDef +getTlsStatus (value): () => Promise +getUpdateChannel (value): () => Promise getUptime (value): () => Promise +getUserInfo (value): () => Promise +getUserList (value): (options?: UserListOptions) => Promise<{ users: UserInfo[]; total?: number; }> +getUserPreferences (value): () => Promise +getUserRoles (value): (userId: string) => Promise<{ roles: UserRole[]; }> +getUserSecondFactors (value): (userId: string) => Promise getVersionInfo (value): (checkRemote?: boolean) => Promise globalShortcutHandler (value): { current: (e: KeyboardEvent) => void; } +groupRailItems (value): (items: RailItemDef[]) => { group: RailGroup; items: RailItemDef[]; }[] +hasVisibleFields (value): (fields: PluginSettingsField[]) => boolean +hostActionsFor (value): (all: HostActionDef[], host: Host, kind?: "open" | "connect") => HostActionDef[] +hostBadgesFor (value): (all: HostBadgeDef[], host: Host) => HostBadgeDef[] +hostKey (value): (host: Record) => string +hostMenuItemsFor (value): (all: HostContextMenuItemDef[], host: Host) => HostContextMenuItemDef[] +hostProtocolFlags (value): (host: { enableSsh?: boolean; pluginSettings?: Record>; }, list?: HostProtocolDef[]) => HostProtocols hydrateLocalSharedHostAuth (value): (host: T) => Promise +importSSHConfigHosts (value): (content: string, overwrite?: boolean) => Promise<{ message: string; success: number; updated: number; skipped: number; failed: number; errors: string[]; }> +invalidateHostsAndStatusCaches (value): () => void +invalidateServerStatusCache (value): () => void +isCoreRailView (value): (id: string) => boolean isElectron (value): () => boolean +isFieldShown (value): (field: PluginSettingsField, values: Record) => boolean isMacPlatform (value): () => boolean +isPersistentTabType (value): (type: string) => boolean +isPrerelease (value): (version: string) => boolean +isSessionTabType (value): (type: string) => boolean +isSplitDragging (value): () => boolean +isSplitTab (value): (tab: Tab) => tab is SplitTab isTabJumpHotkey (value): (e: KeyboardEvent) => boolean +linkExternalToPasswordAccount (value): (externalUserId: string, targetUsername: string) => Promise<{ success: boolean; message: string; }> linkedServerUrl (value): () => Promise +listHostActions (value): () => HostActionDef[] +listHostProtocols (value): () => HostProtocolDef[] +loadPaletteGroup (value): (group: PaletteGroupDef) => Promise +logoutUser (value): () => Promise<{ success: boolean; message: string; }> +makeHostSshSubTabs (value): (t: (key: string, options?: { defaultValue?: string; }) => string, protocols?: Record, defaultsMode?: boolean) => HostTab[] +makeHostTabs (value): (t: (key: string, options?: { defaultValue?: string; }) => string, protocols?: Record, defaultsMode?: boolean) => HostTab[] +makeUserAdmin (value): (userId: string) => Promise> +mapCredentials (value): (res: unknown) => Credential[] markAdaptiveResourceUsed (value): (kind: AdaptiveTaskKind, action: string, now?: number) => void +markTabSurfaceUsed (value): (type: TabType) => void +maskSecrets (value): (payload: ExportPayload, pluginSecrets?: PluginSecretKeys) => ExportPayload +moveRailItem (value): (items: RailItemDef[], id: string, beforeId: string) => string[] +moveSplitDrag (value): (x: number, y: number) => void +normalizeLanguageCode (value): (language?: string) => string +notifySyncChanged (value): () => void +openInSplit (value): (target: SplitOpenTarget, open: () => void) => void +paletteEntriesFor (value): (all: PaletteEntryDef[], scope: "global" | "host", host?: Host) => PaletteEntryDef[] +parseCustomKeybindings (value): (raw?: string) => CustomKeybinding[] +parseServerTime (value): (ts: string) => Date +pluginKey (value): { (pluginId: string, key: string): string; (pluginId: string, key: string): string; } +pluginName (value): (t: Translator, plugin: { id: string; name: string; }) => string +pluginSecretKeys (value): (summaries: { id: string; contributes?: { settings?: { host?: { fields?: { key: string; secretKeys?: string[]; }[]; }; }; }; }[]) => PluginSecretKeys pluginWsUrl (value): (pluginId: string, path: string, options?: { origin?: ConnectionOrigin; }) => Promise +preloadTabSurface (value): (type: TabType) => void +previewHostDefaultsLevel (value): (target: HostDefaultsTarget, change: HostDefaultsChange) => Promise<{ changedHosts: number; }> +promotableIds (value): () => string[] +protocolEnabled (value): (pluginSettings: Record>, protocol: HostProtocolDef) => boolean +protocolPort (value): (pluginSettings: Record>, protocol: HostProtocolDef) => number +quickConnectTargets (value): (all: HostActionDef[], host: Host) => HostActionDef[] +railItemLabel (value): (id: string, t: (key: string) => string) => string readFromClipboard (value): () => Promise +recordHostActionPreference (value): (hostId: string, action: TabType) => void +refreshSyncStatus (value): () => void +registerLayout (value): (item: RegisteredLayout) => () => void +registerTabCloseGuard (value): (tabId: string, guard: Guard) => () => void +releaseUrlFrom (value): (info: VersionInfo) => string +rem (value): (px: number) => string +removeAdminStatus (value): (userId: string) => Promise> +removeRoleFromUser (value): (userId: string, roleId: number) => Promise<{ success: boolean; }> +renameCredentialFolder (value): (oldName: string, newName: string) => Promise> +renameFolder (value): (oldName: string, newName: string) => Promise> +reorderCredentials (value): (positions: { id: number; sortOrder: number; }[]) => Promise<{ updated: number; }> +reorderFolders (value): (positions: { name: string; sortOrder: number; }[]) => Promise<{ updated: number; }> +reorderSSHHosts (value): (positions: { id: number; sortOrder: number; }[]) => Promise<{ updated: number; }> +reportBetaFeedbackUrl (value): (termixVersion?: string, betaPlugins?: { id: string; version: string; }[]) => string +reportCoreIssueUrl (value): (termixVersion?: string) => string +requestFromLegacyEvent (value): (name: string, detail?: unknown) => ManageRequest +requestManage (value): (request: ManageRequest) => void +resetHostToDefaults (value): (hostIds: number[], reset: { all?: boolean; namespaces?: string[]; keys?: string[]; }) => Promise +resetRecentActivity (value): () => Promise<{ message: string; }> +resetUserSecondFactors (value): (userId: string) => Promise resolveConnectionOrigin (value): (host: OriginResolvableHost, options?: { defaultRemote?: boolean; }) => Promise +resolveHostDefaults (value): (where: { hostId?: number; folder?: string; parentHostId?: number; }, adminTargetUserId?: string) => Promise> +resolveHostTabType (value): (host: Host, preferredType?: TabType) => TabType resolveRemoteHostId (value): (syncId: string) => Promise +retrySyncErrors (value): () => Promise +revokeAllUserSessions (value): (userId: string) => Promise<{ success: boolean; message: string; }> +revokeCredentialAccess (value): (credentialId: number, accessId: number) => Promise +revokeFolderAccess (value): (ruleId: number) => Promise +revokeHostAccess (value): (hostId: number, accessId: number, syncId?: string) => Promise<{ success: boolean; }> +revokeSession (value): (sessionId: string) => Promise<{ success: boolean; message: string; }> +rightDockableIds (value): () => string[] +roleLabel (value): (t: Translator, displayName: T) => string | T runAdaptiveBackgroundTask (value): (kind: AdaptiveTaskKind, action: string, task: () => Promise, options?: AdaptiveTaskOptions) => boolean runAdaptivePolling (value): (poll: () => AdaptivePollResult | Promise, policy: AdaptivePollingPolicy, options?: { enabled?: () => boolean; visible?: () => boolean; runImmediately?: boolean; random?: () => number; intervalMultiplier?: () => number; onError?: (error: unknown) => void; }) => () => void +runHostAction (value): (action: HostActionDef, host: Host, shell: TabShellCallbacks) => void runVisibleInterval (value): (tick: () => void, intervalMs: number) => () => void +sanitizeCredentialSidebarPreferences (value): (input: unknown) => CredentialSidebarPreferences +sanitizeHostSidebarPreferences (value): (input: unknown) => HostSidebarPreferences +saveCredentialSidebarPreferences (value): (preferences: CredentialSidebarPreferences) => Promise +saveHostDefaultsLevel (value): (target: HostDefaultsTarget, change: HostDefaultsChange) => Promise<{ changedHosts?: number; jobId?: string; }> +saveHostSidebarPreferences (value): (preferences: HostSidebarPreferences) => Promise +saveHostTags (value): (tags: string[]) => Promise +saveUserPreferences (value): (prefs: Partial) => Promise +setAllPluginChannels (value): (channel: PluginChannel) => Promise<{ changed: string[]; }> +setDeveloperMode (value): (enabled: boolean) => Promise +setHostAuthOverride (value): (hostId: number, protocol: string, credentialId: number, sharedCopySyncId?: string) => Promise<{ success: boolean; protocol: string; credentialId: number; }> +setNotificationPrivateEndpoints (value): (hosts: string[]) => Promise +setPluginOptions (value): (pluginId: string, options: { autoUpdate?: boolean; pinned?: boolean; channel?: PluginChannel; }) => Promise<{ autoUpdate: boolean; pinnedVersion: string; channel: PluginChannel; }> +setSyncStatus (value): (next: SyncStatus) => void +setUpdateChannel (value): (channel: UpdateChannel) => Promise +settleSyncConflict (value): (id: number, keep: "mine" | "server") => Promise +shareCredential (value): (credentialId: number, targets: ShareTarget[], permissionLevel: CredentialPermissionLevel, durationHours?: number) => Promise<{ success: boolean; expiresAt: string; }> +shareFolder (value): (folder: string, shareData: { targets: ShareTarget[]; permissionLevel: SharePermissionLevel; durationHours?: number; }) => Promise<{ success: boolean; expiresAt: string; hostsShared: number; hostsTotal: number; hostResults: { hostId: number; shared: boolean; reason?: string; }[]; }> +shareHost (value): (hostId: number, shareData: { targets: ShareTarget[]; permissionLevel: SharePermissionLevel; durationHours?: number; }, syncId?: string) => Promise<{ success: boolean; expiresAt: string; results: { type: "role" | "user"; id: string | number; accessId: number; created: boolean; }[]; }> +shell (value): TabShellCallbacks +splitDefaultKey (value): (fullKey: string) => [string, string] +sshHostToHost (value): (h: SSHHostWithStatus) => Host +syncNow (value): () => Promise +tabIcon (value): (type: TabType) => Element +tabJumpHotkeyKeys (value): () => string[] +takePendingManageRequest (value): () => ManageRequest +unlinkExternalFromPasswordAccount (value): (userId: string) => Promise<{ success: boolean; message: string; }> +unlinkServer (value): (keepData: boolean) => Promise +updateAuditForwarding (value): (url: string, token?: string) => Promise<{ url: string; hasToken: boolean; }> +updateBranding (value): (update: BrandingSettingsUpdate) => Promise +updateCredential (value): (credentialId: number, credentialData: Record) => Promise> +updateExternalAutoProvision (value): (enabled: boolean) => Promise> +updateFolderMetadata (value): (name: string, color?: string, icon?: string, credentialId?: number, localOnly?: boolean) => Promise +updateHostAccess (value): (hostId: number, accessId: number, update: { permissionLevel?: SharePermissionLevel; durationHours?: number; }, syncId?: string) => Promise<{ success: boolean; expiresAt: string; }> +updateLogLevel (value): (level: string) => Promise +updatePasswordLoginAllowed (value): (allowed: boolean) => Promise<{ allowed: boolean; }> +updatePasswordResetAllowed (value): (allowed: boolean) => Promise<{ allowed: boolean; }> +updatePluginAdminSettings (value): (pluginId: string, values: PluginSettingsValues) => Promise +updatePluginHostSettings (value): (pluginId: string, hostId: number, values: PluginSettingsValues) => Promise +updatePluginUserSettings (value): (pluginId: string, values: PluginSettingsValues) => Promise +updateRegistrationAllowed (value): (allowed: boolean) => Promise> +updateRole (value): (roleId: number, roleData: { displayName?: string; description?: string; permissions?: string[]; }) => Promise<{ role: Role; }> +updateSSHHost (value): (hostId: number, hostData: HostData) => Promise +updateSecondFactorAfterExternalLogin (value): (enabled: boolean) => Promise> +updateSessionTimeout (value): (timeoutHours: number) => Promise +updateStatusCheckSettings (value): (settings: { statusCheckInterval: number; }) => Promise +updateSyncSettings (value): (settings: { disabledTypes?: string[]; customHeaders?: SyncProxyHeader[]; basicAuth?: SyncBasicAuth; allowInvalidCertificate?: boolean; }) => Promise +uploadTlsCertificate (value): (payload: { certificate: string; privateKey: string; }) => Promise usageBarColor (value): (percent: number) => string usageColor (value): (percent: number) => string +useActionSlot (value): (slotId: string, context?: Record) => SlotContribution[] useAdaptivePolling (value): (poll: () => AdaptivePollResult | Promise, policy: AdaptivePollingPolicy, enabled?: boolean, options?: { runImmediately?: boolean; onError?: (error: unknown) => void; }) => void useAppTheme (value): () => ThemeProviderState +useAreaPreferences (value): (area: A) => UiAreaPreferences[A] +useBranding (value): () => BrandingContextValue +useChooseTheme (value): () => (themeId: string) => void useConfirm (value): () => (options: ConfirmOptions) => Promise useConnectionGate (value): () => ConnectionGateController useConnectionLog (value): () => ConnectionLogContextType +useDesktopUpdate (value): () => DesktopUpdateState +useEditorDefaultKeys (value): () => Map +useHostActions (value): () => HostActionDef[] +useHostBadges (value): () => HostBadgeDef[] +useHostContextMenuItems (value): () => HostContextMenuItemDef[] +useHostEditorSections (value): () => HostEditorSectionDef[] +useHostProtocols (value): () => HostProtocolDef[] +useHostStatus (value): (hostId: number, statusCheckEnabled?: boolean) => StatusValue +useInstalledPlugins (value): () => PluginSummary[] useIsDefaultsEditor (value): () => boolean useIsMobile (value): () => boolean +useKeybindingActions (value): () => KeybindingActionDef[] +useKeybindingDefaults (value): () => KeybindingDefaultDef[] useOptionalConnectionLog (value): () => ConnectionLogContextType +usePageVisibleInterval (value): (callback: () => void, intervalMs: number, enabled?: boolean, options?: Options) => void +usePaletteEntries (value): () => PaletteEntryDef[] +usePaletteGroups (value): () => PaletteGroupDef[] +usePanels (value): () => PanelDef[] +usePermissions (value): () => PermissionsState +usePluginDocsUrl (value): (pluginId: string, page?: string, anchor?: string) => string +usePluginHostSections (value): () => PluginSummary[] +usePluginStore (value): () => StoreState +useRailItems (value): () => RailItemDef[] +useRegisteredDashboardCards (value): () => RegisteredDashboardCard[] +useServerStatus (value): () => ServerStatusContextType +useServerStatusMeta (value): () => { initialLoadComplete: boolean; } +useShellController (value): () => ShellController +useSplitTargets (value): () => SplitTargetsSnapshot +useSshAuthEditors (value): () => SshAuthEditorDef[] +useSshAuthProviders (value): () => { providers: SshAuthTypeOption[]; loaded: boolean; find: (type: string) => SshAuthTypeOption; } +useStatusColorScheme (value): () => StatusColorScheme useSurfaceKind (value): () => SurfaceKind +useSyncStatus (value): () => any +useTabHandlesVersion (value): () => number useTabs (value): () => TabContextType useTabsSafe (value): () => TabContextType +useTheme (value): () => ThemeProviderState +useThemeOptions (value): () => ThemeOption[] +useUiPreference (value): (area: A, key: K) => UiAreaPreferences[A][K] +useUiPreferencesContext (value): () => UiPreferencesContextValue +waitForDefaultsJob (value): (id: string, intervalMs?: number, maxWaitMs?: number) => Promise +withProtocolSettings (value): (pluginSettings: Record>, flags: HostProtocols, list?: HostProtocolDef[]) => Record> diff --git a/scripts/check-core-plugin-ids.cjs b/scripts/check-core-plugin-ids.cjs index 884914da3..4ea6a133d 100644 --- a/scripts/check-core-plugin-ids.cjs +++ b/scripts/check-core-plugin-ids.cjs @@ -33,6 +33,7 @@ const OFFICIAL_IDS = [ "ai", "alerts", "automations", + "classic-layout", "docker", "file-manager", "fleets", diff --git a/scripts/check-sdk-ui-exports.cjs b/scripts/check-sdk-ui-exports.cjs index ede1ef83e..9016c26c8 100644 --- a/scripts/check-sdk-ui-exports.cjs +++ b/scripts/check-sdk-ui-exports.cjs @@ -19,8 +19,13 @@ const SDK_UI = path.join(ROOT, "src", "ui", "plugin-host", "sdk-ui.ts"); const TSCONFIG = path.join(ROOT, "tsconfig.app.json"); const ALLOWED = [ + "ACCENT_PRESET_COLORS", + "APP_VERSION", + "AccessRecord", "ActionSlot", + "ActiveSessionInfo", "AddButton", + "AdminSection", "Alert", "AlertDescription", "AlertDialog", @@ -35,14 +40,23 @@ const ALLOWED = [ "AlertDialogTitle", "AlertDialogTrigger", "AlertTitle", + "ApiKey", + "AuditLog", + "AuditLogFilters", + "AuthEnrollmentSections", + "AuthOverrideProtocol", "BackButton", "Badge", "BarSeries", "BarSeriesItem", "BarSeriesProps", + "BrandingSettings", "BrowserSignInDialog", "Button", "ButtonProps", + "CORE_HOST_DEFAULTS", + "CORE_NAMESPACE", + "CREDENTIAL_ROW_FIELD_KEYS", "Card", "CardAction", "CardContent", @@ -54,6 +68,12 @@ const ALLOWED = [ "CardTitle", "Checkbox", "ColumnCountStepper", + "Command", + "CommandEmpty", + "CommandGroup", + "CommandItem", + "CommandList", + "CommandPrimitive", "ComponentSlot", "ConfirmOptions", "ConnectionGate", @@ -66,9 +86,26 @@ const ALLOWED = [ "ConnectionStage", "ConnectionStatus", "ConnectionUnavailable", + "CreatedApiKey", + "Credential", + "CredentialDensity", + "CredentialPermissionLevel", + "CredentialRowFields", + "CredentialSidebarFilterState", + "CredentialSidebarPreferences", + "CredentialSortKey", + "CredentialTrayTrigger", "CustomKeybinding", + "DASHBOARD_CARDS", + "DEFAULT_FOLDER_COLOR", + "DEFAULT_FOLDER_ICON", + "DashboardCardId", "DataColumn", "DataView", + "DefaultOverrides", + "DefaultsOnly", + "DesktopUpdateMode", + "DesktopUpdateState", "Dialog", "DialogClose", "DialogContent", @@ -81,6 +118,7 @@ const ALLOWED = [ "DialogTrigger", "DocsLink", "DocsLinkProps", + "DocsPage", "DropdownMenu", "DropdownMenuCheckboxItem", "DropdownMenuContent", @@ -98,11 +136,17 @@ const ALLOWED = [ "DropdownMenuTrigger", "EditingWidth", "EmptyState", + "ExportPayload", "FOLDER_COLORS", + "FONT_SIZES", "Facts", "FakeSwitch", "Field", + "FieldGroup", "FieldPair", + "FolderAccessRule", + "FolderIconEl", + "FontSizeId", "FormFooter", "FullScreenAppPhase", "FullScreenAppWrapper", @@ -112,11 +156,33 @@ const ALLOWED = [ "GridLayout", "GridSlot", "GroupHeading", + "HexColorPicker", + "Host", + "HostActionDef", + "HostClickBehavior", + "HostData", "HostDefaultBadge", "HostDefaultField", + "HostDefaultsChange", + "HostDefaultsContext", + "HostDefaultsContextValue", + "HostDefaultsLevel", + "HostDefaultsTarget", + "HostDensity", "HostFeatureFields", "HostFeatureFieldsProps", + "HostFolder", + "HostGroupKey", "HostKeyVerificationDialog", + "HostOnly", + "HostProtocolAuthInput", + "HostProtocolDef", + "HostProtocols", + "HostRowFields", + "HostSidebarFilterState", + "HostSidebarPreferences", + "HostTrayTrigger", + "IconPicker", "InlineView", "Input", "Kbd", @@ -124,10 +190,14 @@ const ALLOWED = [ "KbdSeparator", "KeyCombo", "KeybindingAction", + "KeybindingActionDef", "KeybindingActionType", + "LANGUAGES", "Label", "LineChart", "LineChartSeries", + "LinkServerDialog", + "LinkedAccountInfo", "ListBadge", "ListRow", "ListRowAction", @@ -135,7 +205,12 @@ const ALLOWED = [ "ListRowTone", "LogContext", "LogEntry", + "LookSettings", + "MANAGE_REQUEST_EVENT", + "MAX_PANES", "MFAPromptMode", + "ManageMode", + "ManageRequest", "ManagerCardError", "ManagerCardShell", "ManagerSearch", @@ -143,11 +218,14 @@ const ALLOWED = [ "MetricCard", "MiniStat", "NumberField", + "OPEN_PLUGINS_EVENT", + "OpenTabRecord", "PANEL", - "PanePrompt", "PROMPT_BUTTON", "PROMPT_DESTRUCTIVE_BUTTON", "PROMPT_PRIMARY_BUTTON", + "PaletteItemDef", + "PanePrompt", "PanelDensity", "PanelList", "PanelSearch", @@ -155,18 +233,35 @@ const ALLOWED = [ "PanelViewMode", "PassphraseDialog", "PasswordInput", + "PermissionCatalogEntry", "PluginComponent", + "PluginIcon", + "PluginSettingsErrors", + "PluginSettingsField", + "PluginSettingsValidationError", + "PluginSummary", "PluginViewPlaceholder", "Popover", "PopoverAnchor", "PopoverContent", "PopoverTrigger", + "ProxyNode", + "ProxySettingsFields", "RadialGauge", "RadialGaugeProps", + "RailGroup", + "RailItemDef", "RecentActivityItem", + "ReleaseInfo", "Repeater", + "ResolvedHostDefault", "RobustClipboardProvider", + "Role", "SSHAuthDialog", + "SSHHost", + "SSHHostData", + "SSHHostWithStatus", + "SSH_AUTH_PROTOCOL", "ScrollArea", "ScrollBar", "SecretField", @@ -186,6 +281,9 @@ const ALLOWED = [ "SelectValue", "Separator", "SettingRow", + "SettingsFieldRow", + "SharePermissionLevel", + "ShareTarget", "Sheet", "SheetClose", "SheetContent", @@ -197,73 +295,381 @@ const ALLOWED = [ "ShellConfirmCapture", "Skeleton", "Slider", + "SortKey", "Sparkline", "SparklineProps", + "SplitLayoutMenu", + "SplitOpenTarget", + "SplitSummary", "StatRow", + "StatusValue", "SurfaceKind", "SurfaceScope", "Switch", "SwitchRow", + "SyncBasicAuth", + "SyncConflictItem", + "SyncEntityInfo", + "SyncErrorItem", + "SyncProxyHeader", + "SyncStatus", "TOTPDialog", + "Tab", + "TabShellCallbacks", + "TabSplitAction", "TabStage", "TabStrip", "TabStripItem", + "TabType", "TagInput", "TextAreaField", "TextField", "Textarea", "TextareaProps", + "ThemeId", + "TlsStatus", + "ToolsTab", "Tooltip", "TooltipContent", "TooltipProvider", "TooltipTrigger", + "UI_AREA_KEYS", + "UI_FONTS", + "UiAreaKey", + "UiFontId", + "UiPreset", + "UpdateChannelState", "UptimeInfo", "UsagePair", + "UserPreferences", + "UserRole", + "UserSecondFactorSummary", + "VersionBadge", "VersionInfo", "ViewToggle", "WebSocketConnectionTarget", "WidgetTitle", + "actionOrder", + "activityTarget", + "adminCreateUser", + "adminCreateUserCredential", + "adminCreateUserHost", + "adminDeleteUserCredential", + "adminDeleteUserHost", + "adminExportUserData", + "adminGetHostPassword", + "adminGetUserCredentials", + "adminGetUserHosts", + "adminResetUserPassword", + "adminUpdateUserCredential", + "adminUpdateUserHost", + "applyAccentColor", + "applyFontSize", + "applyPresetSideEffects", + "applyUiFont", + "assignRoleToUser", + "beginSplitDrag", + "buildExportPayload", "buildOriginWsUrl", + "bulkImportSSHHosts", + "bulkUpdateSSHHosts", + "canConfigureUpdates", + "canJoinSplit", + "changeAppLanguage", + "changePassword", + "clearLocalAdaptivePreferences", "cn", "copyToClipboard", + "createApiKey", + "createCredential", "createFrontendLogger", "createQuickConnectHost", + "createRole", + "createSSHHost", + "defaultConnectAction", + "defaultCredentialRowFields", + "defaultCredentialSidebarPreferences", + "defaultHostRowFields", + "defaultHostSidebarPreferences", + "defaultValuesEqual", + "deleteAccount", + "deleteAllHostsInFolder", + "deleteApiKey", + "deleteCredential", + "deleteOpenTab", + "deleteRole", + "deleteSSHHost", + "deleteUser", + "deployCredentialToHost", + "desktopUpdates", + "docsUrl", + "duplicateCredential", + "enabledHostProtocols", + "endSplitDrag", + "exportAllSSHHosts", + "filterPaletteItems", + "findCoreHostDefault", "findMatchingKeybinding", + "generateKeyPair", + "generatePublicKeyFromPrivate", + "getActiveSessions", "getAdaptiveResourceBudget", + "getApiKeys", + "getAuditForwarding", + "getAuditLogActions", + "getAuditLogs", "getBasePath", + "getBranding", + "getChannelReleases", + "getConnectedRemoteApi", + "getCredentialAccess", + "getCredentialDetails", + "getCredentialSidebarPreferences", + "getCredentials", "getDatabaseHealth", + "getDatabaseTransferUrl", + "getDefaultConnectionTab", + "getDeveloperMode", "getDeviceId", + "getErrorMessage", + "getExternalAutoProvision", + "getFolderAccess", + "getFolderDefaultsId", + "getHostAccess", + "getHostAuthOverride", + "getHostDefaultsLevel", + "getHostEditorSection", + "getHostPassword", + "getHostSidebarPreferences", + "getHostTags", + "getLiveHostStatus", + "getLogLevel", + "getNotificationPrivateEndpoints", + "getPanel", + "getPasswordLoginAllowed", + "getPasswordResetAllowed", + "getPermissionsCatalog", + "getPluginAdminSettings", + "getPluginHostSettings", + "getPluginUserSettings", + "getPlugins", "getPollingEnvironmentMultiplier", + "getPreferredHostAction", "getRecentActivity", + "getRegisteredDashboardCard", + "getRegistrationAllowed", + "getRoles", + "getSSHFolders", + "getSSHHosts", + "getSecondFactorAfterExternalLogin", + "getSessionTimeout", + "getSessionTimeoutMinutes", + "getSessions", + "getStatusCheckSettings", + "getStatusClasses", + "getSyncConflicts", + "getSyncErrors", + "getTabType", + "getTlsStatus", + "getUpdateChannel", "getUptime", + "getUserInfo", + "getUserList", + "getUserPreferences", + "getUserRoles", + "getUserSecondFactors", "getVersionInfo", "globalShortcutHandler", + "groupRailItems", + "hasVisibleFields", + "hostActionsFor", + "hostBadgesFor", + "hostKey", + "hostMenuItemsFor", + "hostProtocolFlags", "hydrateLocalSharedHostAuth", + "importSSHConfigHosts", + "invalidateHostsAndStatusCaches", + "invalidateServerStatusCache", + "isCoreRailView", "isElectron", + "isFieldShown", "isMacPlatform", + "isPersistentTabType", + "isPrerelease", + "isSessionTabType", + "isSplitDragging", + "isSplitTab", "isTabJumpHotkey", + "linkExternalToPasswordAccount", "linkedServerUrl", + "listHostActions", + "listHostProtocols", + "loadPaletteGroup", + "logoutUser", + "makeHostSshSubTabs", + "makeHostTabs", + "makeUserAdmin", + "mapCredentials", "markAdaptiveResourceUsed", + "markTabSurfaceUsed", + "maskSecrets", + "moveRailItem", + "moveSplitDrag", + "normalizeLanguageCode", + "notifySyncChanged", + "openInSplit", + "paletteEntriesFor", + "parseCustomKeybindings", + "parseServerTime", + "pluginKey", + "pluginName", + "pluginSecretKeys", "pluginWsUrl", + "preloadTabSurface", + "previewHostDefaultsLevel", + "promotableIds", + "protocolEnabled", + "protocolPort", + "quickConnectTargets", + "railItemLabel", "readFromClipboard", + "recordHostActionPreference", + "refreshSyncStatus", + "registerLayout", + "registerTabCloseGuard", + "releaseUrlFrom", + "rem", + "removeAdminStatus", + "removeRoleFromUser", + "renameCredentialFolder", + "renameFolder", + "reorderCredentials", + "reorderFolders", + "reorderSSHHosts", + "reportBetaFeedbackUrl", + "reportCoreIssueUrl", + "requestFromLegacyEvent", + "requestManage", + "resetHostToDefaults", + "resetRecentActivity", + "resetUserSecondFactors", "resolveConnectionOrigin", + "resolveHostDefaults", + "resolveHostTabType", "resolveRemoteHostId", + "retrySyncErrors", + "revokeAllUserSessions", + "revokeCredentialAccess", + "revokeFolderAccess", + "revokeHostAccess", + "revokeSession", + "rightDockableIds", + "roleLabel", "runAdaptiveBackgroundTask", "runAdaptivePolling", + "runHostAction", "runVisibleInterval", + "sanitizeCredentialSidebarPreferences", + "sanitizeHostSidebarPreferences", + "saveCredentialSidebarPreferences", + "saveHostDefaultsLevel", + "saveHostSidebarPreferences", + "saveHostTags", + "saveUserPreferences", + "setAllPluginChannels", + "setDeveloperMode", + "setHostAuthOverride", + "setNotificationPrivateEndpoints", + "setPluginOptions", + "setSyncStatus", + "setUpdateChannel", + "settleSyncConflict", + "shareCredential", + "shareFolder", + "shareHost", + "shell", + "splitDefaultKey", + "sshHostToHost", + "syncNow", + "tabIcon", + "tabJumpHotkeyKeys", + "takePendingManageRequest", + "unlinkExternalFromPasswordAccount", + "unlinkServer", + "updateAuditForwarding", + "updateBranding", + "updateCredential", + "updateExternalAutoProvision", + "updateFolderMetadata", + "updateHostAccess", + "updateLogLevel", + "updatePasswordLoginAllowed", + "updatePasswordResetAllowed", + "updatePluginAdminSettings", + "updatePluginHostSettings", + "updatePluginUserSettings", + "updateRegistrationAllowed", + "updateRole", + "updateSSHHost", + "updateSecondFactorAfterExternalLogin", + "updateSessionTimeout", + "updateStatusCheckSettings", + "updateSyncSettings", + "uploadTlsCertificate", "usageBarColor", "usageColor", + "useActionSlot", "useAdaptivePolling", "useAppTheme", + "useAreaPreferences", + "useBranding", + "useChooseTheme", "useConfirm", "useConnectionGate", "useConnectionLog", + "useDesktopUpdate", + "useEditorDefaultKeys", + "useHostActions", + "useHostBadges", + "useHostContextMenuItems", + "useHostEditorSections", + "useHostProtocols", + "useHostStatus", + "useInstalledPlugins", "useIsDefaultsEditor", "useIsMobile", + "useKeybindingActions", + "useKeybindingDefaults", "useOptionalConnectionLog", + "usePageVisibleInterval", + "usePaletteEntries", + "usePaletteGroups", + "usePanels", + "usePermissions", + "usePluginDocsUrl", + "usePluginHostSections", + "usePluginStore", + "useRailItems", + "useRegisteredDashboardCards", + "useServerStatus", + "useServerStatusMeta", + "useShellController", + "useSplitTargets", + "useSshAuthEditors", + "useSshAuthProviders", + "useStatusColorScheme", "useSurfaceKind", + "useSyncStatus", + "useTabHandlesVersion", "useTabs", "useTabsSafe", + "useTheme", + "useThemeOptions", + "useUiPreference", + "useUiPreferencesContext", + "waitForDefaultsJob", + "withProtocolSettings", ]; /** Every name a module exports, resolved the way the compiler sees it. */ diff --git a/scripts/generate-settings-search-index.cjs b/scripts/generate-settings-search-index.cjs deleted file mode 100644 index 42df28a75..000000000 --- a/scripts/generate-settings-search-index.cjs +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/bin/env node -/** - * Builds src/ui/settings/settings-search-index.ts: the i18n keys each core - * settings section shows, so the Settings search can match on any label in - * a section without mounting it. Run it after changing a settings section. - * - * --check fails when the committed file is out of date. - */ - -const fs = require("node:fs"); -const path = require("node:path"); - -const ROOT = path.resolve(__dirname, ".."); -const SIDEBAR = path.join(ROOT, "src", "ui", "sidebar"); -const OUT = path.join( - ROOT, - "src", - "ui", - "settings", - "settings-search-index.ts", -); - -function flatKeys(obj, prefix = "") { - return Object.entries(obj).flatMap(([key, value]) => - typeof value === "object" - ? flatKeys(value, `${prefix}${key}.`) - : [`${prefix}${key}`], - ); -} - -const EN_KEYS = new Set( - flatKeys(require(path.join(ROOT, "src", "ui", "locales", "en.json"))), -); - -// t("x", { count }) reads x_one or x_other, so index the plural key. -function realKey(key) { - return EN_KEYS.has(key) || !EN_KEYS.has(`${key}_other`) - ? key - : `${key}_other`; -} - -function keysIn(text) { - return [ - ...new Set( - [...text.matchAll(/\bt\(\s*"([\w.-]+)"/g)].map((m) => realKey(m[1])), - ), - ]; -} - -function read(file) { - return fs.readFileSync(path.join(SIDEBAR, file), "utf8"); -} - -/** The body of one exported or local function, by name. */ -function functionBody(source, name) { - const start = source.search(new RegExp(`function ${name}\\b`)); - if (start < 0) throw new Error(`No function ${name}`); - const next = source.slice(start + 1).search(/\n(export )?function \w+/); - return next < 0 ? source.slice(start) : source.slice(start, start + 1 + next); -} - -/** Profile sections, split on their AccordionSection ids. */ -function profileSections() { - const source = read("UserProfilePanel.tsx"); - const lines = source.split("\n"); - const starts = []; - lines.forEach((line, i) => { - if (/^\s{6} { - const end = k + 1 < starts.length ? starts[k + 1] : lines.length; - const chunk = lines.slice(start, end).join("\n"); - const id = (chunk.match(/\bid="([^"]+)"/) || [])[1]; - if (id) out[id] = keysIn(chunk); - }); - out.interface = [ - ...new Set([ - ...(out.interface ?? []), - ...keysIn(read("InterfacePresetSettings.tsx")), - ]), - ]; - out.security = [ - ...new Set([ - ...(out.security ?? []), - ...keysIn(read("AuthEnrollmentSections.tsx")), - ...keysIn(functionBody(source, "PasswordChangeSection")), - ]), - ]; - out["api-keys"] = [ - ...new Set([ - ...(out["api-keys"] ?? []), - ...keysIn(functionBody(source, "NewApiKeyDialog")), - ]), - ]; - out.keybindings = keysIn( - fs.readFileSync( - path.join(ROOT, "src", "ui", "settings", "KeybindingsSettings.tsx"), - "utf8", - ), - ); - return out; -} - -function adminSections() { - const settings = read("AdminSettingsSections.tsx"); - const management = read("AdminManagementSections.tsx"); - return { - "admin-general": [ - ...new Set([ - ...keysIn(functionBody(settings, "AdminGeneralSettingsSection")), - ...keysIn(read("AdminPluginDeveloperMode.tsx")), - ]), - ], - "admin-users": [ - ...new Set([ - ...keysIn(functionBody(management, "AdminUsersSection")), - ...keysIn(read("AdminUserDialogs.tsx")), - ]), - ], - "admin-sessions": keysIn(functionBody(management, "AdminSessionsSection")), - "admin-roles": keysIn(functionBody(management, "AdminRolesSection")), - "admin-host-defaults": [ - ...new Set([ - ...keysIn(functionBody(settings, "AdminHostDefaultsSection")), - ...keysIn(read("AdminHostTags.tsx")), - ]), - ], - "admin-branding": keysIn(read("AdminBrandingSection.tsx")), - "admin-database": keysIn(functionBody(settings, "AdminDatabaseSection")), - "admin-ssl": keysIn(functionBody(settings, "AdminSSLSection")), - "admin-api-keys": keysIn(read("AdminApiKeysSection.tsx")), - "admin-audit-log": keysIn(read("AdminAuditLogSection.tsx")), - updates: [ - ...new Set( - ["UpdatesSettings.tsx", "DesktopUpdatesCard.tsx"].flatMap((file) => - keysIn( - fs.readFileSync( - path.join(ROOT, "src", "ui", "settings", file), - "utf8", - ), - ), - ), - ), - ], - }; -} - -function render() { - const index = { ...profileSections(), ...adminSections() }; - const body = Object.entries(index) - .sort(([a], [b]) => a.localeCompare(b)) - .map( - ([id, keys]) => - ` ${JSON.stringify(id)}: [\n${keys - .sort() - .map((key) => ` ${JSON.stringify(key)},`) - .join("\n")}\n ],`, - ) - .join("\n"); - return `// Generated by scripts/generate-settings-search-index.cjs. Do not edit.\n\n/** The i18n keys each core settings section shows, for search. */\nexport const SETTINGS_SEARCH_INDEX: Record = {\n${body}\n};\n`; -} - -const next = render(); -if (process.argv.includes("--check")) { - const current = fs.existsSync(OUT) ? fs.readFileSync(OUT, "utf8") : ""; - if (current !== next) { - console.error( - "src/ui/settings/settings-search-index.ts is out of date. Run: node scripts/generate-settings-search-index.cjs", - ); - process.exit(1); - } -} else { - fs.writeFileSync(OUT, next); - console.log(`Wrote ${path.relative(ROOT, OUT)}`); -} diff --git a/src/backend/database/routes/plugins.ts b/src/backend/database/routes/plugins.ts index f1e9c04d5..1d11cd32e 100644 --- a/src/backend/database/routes/plugins.ts +++ b/src/backend/database/routes/plugins.ts @@ -2281,6 +2281,63 @@ router.post( }, ); +/** + * @openapi + * /plugins/{id}/restore-bundled: + * post: + * summary: Restore the bundled copy of a plugin + * description: > + * Drops any update downloaded over a plugin that ships with Termix and + * loads the copy from the image again, so a broken release can be rolled + * back from the layout repair view. The shipped version is pinned so + * auto update does not bring the release back. Dependents restart. + * tags: + * - Plugins + * parameters: + * - in: path + * name: id + * required: true + * schema: + * type: string + * responses: + * 200: + * description: The restored version and the plugin's state. + * 400: + * description: Invalid plugin id. + * 403: + * description: The caller lacks admin.plugins.manage. + * 409: + * description: The plugin has no bundled copy, or a linked server manages it. + */ +router.post( + "/:id/restore-bundled", + authenticateJWT, + requireManagePlugins, + async (req: Request, res: Response) => { + const pluginId = String(req.params.id); + if (!ID_PATTERN.test(pluginId)) { + res.status(400).json({ error: "Invalid plugin id" }); + return; + } + if (await refuseOnLinkedDesktop(res)) return; + try { + const { restoreBundledPlugin } = await import("../../plugins/manage.js"); + const result = await restoreBundledPlugin(pluginId); + await auditPluginAction(req, "restore_bundled_plugin", pluginId, { + version: result.version, + }); + res.json(result); + } catch (error) { + sendManageError( + res, + error, + "Failed to restore the bundled copy", + "plugin_restore_bundled", + ); + } + }, +); + /** * @openapi * /plugins/{id}: diff --git a/src/backend/plugins/manage.ts b/src/backend/plugins/manage.ts index 21e80c9fc..83de771e7 100644 --- a/src/backend/plugins/manage.ts +++ b/src/backend/plugins/manage.ts @@ -1644,41 +1644,94 @@ export function installUpload( }); } +/** + * Loads the copy in the bundled folder again. Running dependents stop first + * and start again after. `prepare` runs once the plugin is stopped, for work + * that needs its files out of use. + */ +async function reloadBundledUnlocked( + pluginId: string, + prepare?: (previous: LoadedPlugin | undefined) => Promise, +): Promise<{ id: string; version: string; state: string }> { + const { loader } = getPluginRuntime(); + const previous = loader.get(pluginId); + if (previous && previous.source !== "bundled" && !prepare) { + throw new PluginManageError( + `${pluginId} is not loaded from the bundled folder`, + 409, + "NOT_BUNDLED", + ); + } + const dependents = previous + ? dependentChain(pluginId, await enabledIds()).filter( + (id) => loader.get(id)?.state === "active", + ) + : []; + for (const id of dependents) await deactivatePlugin(id); + await unloadPlugin(pluginId); + if (prepare) await prepare(previous); + + const plugin = await loader.loadBundled(pluginId); + await registerLoadedPlugins([plugin]); + + let state = "stopped"; + if ((await enabledIds()).has(pluginId)) { + const { missing } = dependencyChain(pluginId); + state = missing.length > 0 ? "blocked" : await startAndRecord(pluginId); + } + for (const id of [...dependents].reverse()) await startAndRecord(id); + return { id: pluginId, version: plugin.manifest.version, state }; +} + /** * Loads the copy in the bundled folder again after it was rebuilt, for the - * dev runner. Running dependents stop first and start again after. + * dev runner. */ export function reloadBundledPlugin( pluginId: string, +): Promise<{ id: string; version: string; state: string }> { + return serialized(() => reloadBundledUnlocked(pluginId)); +} + +/** + * Puts a bundled plugin back to the copy that shipped with this install, + * dropping any update downloaded over it. The shipped version is pinned so + * auto update does not bring a broken release straight back; unpin it in the + * Plugins tab to follow updates again. + */ +export function restoreBundledPlugin( + pluginId: string, ): Promise<{ id: string; version: string; state: string }> { return serialized(async () => { + if (!ID_PATTERN.test(pluginId)) { + throw new PluginManageError("Invalid plugin id", 400, "INVALID_ID"); + } const { loader } = getPluginRuntime(); - const previous = loader.get(pluginId); - if (previous && previous.source !== "bundled") { + if (!loader.bundledIds().has(pluginId) || !isBundledOnDisk(pluginId)) { throw new PluginManageError( - `${pluginId} is not loaded from the bundled folder`, + "This plugin has no bundled copy", 409, - "NOT_BUNDLED", + "NO_BUNDLED_COPY", ); } - const dependents = previous - ? dependentChain(pluginId, await enabledIds()).filter( - (id) => loader.get(id)?.state === "active", - ) - : []; - for (const id of dependents) await deactivatePlugin(id); - await unloadPlugin(pluginId); - - const plugin = await loader.loadBundled(pluginId); - await registerLoadedPlugins([plugin]); - - let state = "stopped"; - if ((await enabledIds()).has(pluginId)) { - const { missing } = dependencyChain(pluginId); - state = missing.length > 0 ? "blocked" : await startAndRecord(pluginId); - } - for (const id of [...dependents].reverse()) await startAndRecord(id); - return { id: pluginId, version: plugin.manifest.version, state }; + const { createCurrentPluginRepository } = await repos(); + const repository = createCurrentPluginRepository(); + const result = await reloadBundledUnlocked(pluginId, async (previous) => { + await removeArtifactFiles(pluginId, previous?.artifact); + await fs.promises.rm(path.join(getUnpackedPluginsDir(), pluginId), { + recursive: true, + force: true, + }); + }); + await repository.update(pluginId, { + autoUpdate: false, + pinnedVersion: result.version, + }); + await applyPin(pluginId, result.version); + pluginLogger.info(`Restored the bundled copy of ${pluginId}`, { + operation: "plugin_restore_bundled", + }); + return result; }); } diff --git a/src/backend/tests/database/routes/plugins.test.ts b/src/backend/tests/database/routes/plugins.test.ts index 0e4e07dc7..74de8949a 100644 --- a/src/backend/tests/database/routes/plugins.test.ts +++ b/src/backend/tests/database/routes/plugins.test.ts @@ -169,6 +169,7 @@ const manageMock = vi.hoisted(() => ({ updatePlugin: vi.fn(), updateAllPlugins: vi.fn(), uninstallPlugin: vi.fn(), + restoreBundledPlugin: vi.fn(), setPluginOptions: vi.fn(), setAllPluginChannels: vi.fn(), getPluginDataSummary: vi.fn(), @@ -1141,6 +1142,35 @@ describe("plugins route", () => { expect(manageMock.uninstallPlugin).toHaveBeenCalledWith("docker"); }); + it("restores the bundled copy", async () => { + manageMock.restoreBundledPlugin.mockResolvedValue({ + id: "docker", + version: "1.0.0", + state: "active", + }); + const res = await post("/plugins/docker/restore-bundled"); + expect(res.status).toBe(200); + expect(await res.json()).toEqual({ + id: "docker", + version: "1.0.0", + state: "active", + }); + expect(manageMock.restoreBundledPlugin).toHaveBeenCalledWith("docker"); + }); + + it("answers 409 when a plugin has no bundled copy", async () => { + manageMock.restoreBundledPlugin.mockRejectedValue( + new PluginManageError( + "This plugin has no bundled copy", + 409, + "NO_BUNDLED_COPY", + ), + ); + const res = await post("/plugins/docker/restore-bundled"); + expect(res.status).toBe(409); + expect((await res.json()).code).toBe("NO_BUNDLED_COPY"); + }); + it("refuses changes on a linked desktop", async () => { manageMock.isLinkedDesktop.mockResolvedValue(true); const res = await post("/plugins/docker/install"); diff --git a/src/backend/tests/plugins/manage.test.ts b/src/backend/tests/plugins/manage.test.ts index 6aa90f589..8f1fe9a34 100644 --- a/src/backend/tests/plugins/manage.test.ts +++ b/src/backend/tests/plugins/manage.test.ts @@ -661,6 +661,54 @@ describe("reloading a bundled plugin for the dev runner", () => { }); }); +describe("restoring the bundled copy", () => { + it("drops a downloaded update, loads the shipped copy and pins it", async () => { + createFixturePlugin({ id: "docker", root: bundled }); + const loader = await boot(); + // What a signed update leaves behind next to the shipped copy. + const artifact = path.join(data, "plugins", "docker.tmxplug"); + fs.mkdirSync(path.dirname(artifact), { recursive: true }); + fs.writeFileSync(artifact, "update"); + fs.writeFileSync(`${artifact}.sig`, "sig"); + + const result = await manage.restoreBundledPlugin("docker"); + + expect(result).toEqual({ id: "docker", version: "1.0.0", state: "active" }); + expect(loader.get("docker")?.manifest.version).toBe("1.0.0"); + expect(fs.existsSync(artifact)).toBe(false); + expect(fs.existsSync(`${artifact}.sig`)).toBe(false); + expect(db.rows.get("docker")).toMatchObject({ + pinnedVersion: "1.0.0", + autoUpdate: false, + }); + }); + + it("keeps a plugin that is turned off stopped", async () => { + createFixturePlugin({ id: "docker", root: bundled }); + const loader = await boot(); + await manage.setPluginState("docker", false); + const result = await manage.restoreBundledPlugin("docker"); + expect(result.state).toBe("stopped"); + expect(loader.get("docker")?.state).toBe("loaded"); + }); + + it("refuses a plugin that has no bundled copy", async () => { + createFixturePlugin({ id: "notes", root: path.join(data, "plugins") }); + await boot(); + await expect(manage.restoreBundledPlugin("notes")).rejects.toMatchObject({ + code: "NO_BUNDLED_COPY", + status: 409, + }); + }); + + it("refuses a bad id", async () => { + await expect(manage.restoreBundledPlugin("../x")).rejects.toMatchObject({ + code: "INVALID_ID", + status: 400, + }); + }); +}); + describe("consent", () => { it("refuses an install without the consented list, before any download", async () => { registry.index.plugins = [registryEntry("notes", [{ version: "1.0.0" }])]; diff --git a/src/ui/api/plugins-api.ts b/src/ui/api/plugins-api.ts index 5b4575645..3b512032d 100644 --- a/src/ui/api/plugins-api.ts +++ b/src/ui/api/plugins-api.ts @@ -519,6 +519,15 @@ export async function uninstallPlugin(pluginId: string): Promise { } } +/** Puts a bundled plugin back to the copy that shipped with this install. */ +export async function restoreBundledPlugin(pluginId: string): Promise { + try { + await rbacApi.post(`${pluginPath(pluginId)}/restore-bundled`); + } finally { + announcePluginsChanged(); + } +} + export async function previewPluginState( pluginId: string, enabled: boolean, diff --git a/src/ui/dashboard/DashboardTab.tsx b/src/ui/dashboard/DashboardTab.tsx deleted file mode 100644 index 1c0e75bbd..000000000 --- a/src/ui/dashboard/DashboardTab.tsx +++ /dev/null @@ -1,1015 +0,0 @@ -import { useState, useRef, useCallback, useEffect, useMemo } from "react"; -import { useActionSlot } from "@/hooks/use-action-slot"; -import { useIsMobile } from "@/hooks/use-mobile"; -import { usePluginStore } from "@/plugin-host/plugin-store"; -import { Button } from "@/components/button"; -import { Skeleton } from "@/components/skeleton"; -import { Kbd } from "@/components/kbd"; -import { - Facts, - GroupHeading, - PanelShell, - Segmented, -} from "@/components/panel-layout"; -import { useConfirm } from "@/components/surface/surface-scope"; -import { - Activity, - Check, - Database, - GripVertical, - LayoutGrid, - Pencil, - Plus, - RotateCcw, - Server, - X, - Zap, -} from "lucide-react"; -import { DASHBOARD_CARDS } from "@/lib/theme"; -import type { DashboardCardId, TabType, Host } from "@/types/ui-types"; -import { - getSSHHosts, - getUptime, - getVersionInfo, - releaseUrlFrom, - getDatabaseHealth, - getRecentActivity, - getCredentials, - resetRecentActivity, - getUserInfo, - isElectron, -} from "@/main-axios"; -import type { RecentActivityItem } from "@/main-axios"; -import { useTranslation } from "react-i18next"; -import { - getRegisteredDashboardCard, - useRegisteredDashboardCards, -} from "./dashboard-cards-registry"; -import { PluginViewPlaceholder } from "@/plugin-host/PluginViewPlaceholder"; -import { shell } from "@/plugin-host/shell-bridge"; -import { - useServerStatus, - useServerStatusMeta, -} from "@/lib/ServerStatusContext"; -import { withLiveHostStatus } from "@/sidebar/live-host-status"; -import { sshHostToHost } from "@/sidebar/HostManagerData"; -import { sortHostTree, type SortKey } from "@/sidebar/host-sort"; -import { Select2 } from "@/components/select2"; -import { - CountersStrip, - HostStatusList, - QuickActions, - RecentActivityList, - StatsStrip, - type VersionStatus, -} from "./dashboard-core-cards"; -import { reportCoreIssueUrl } from "@/lib/issue-url"; -import { docsUrl } from "@/lib/docs"; - -export { HostStatusList as HostStatusCard } from "./dashboard-core-cards"; - -const HOST_STATUS_SORT_LABELS: Partial> = { - default: "hosts.sortDefault", - "name-asc": "hosts.sortNameAsc", - "name-desc": "hosts.sortNameDesc", - "ip-asc": "hosts.sortIpAsc", - "ip-desc": "hosts.sortIpDesc", - "status-online": "hosts.sortOnlineFirst", - "status-offline": "hosts.sortOfflineFirst", -}; -const HOST_STATUS_SORTS = Object.keys(HOST_STATUS_SORT_LABELS) as SortKey[]; - -// ─── Types ──────────────────────────────────────────────────────────────────── - -type PanelId = "main" | "side"; - -type CardSlot = { - key: string; - id: DashboardCardId; - panel: PanelId; - order: number; - height: number | null; -}; - -// ─── Default layout ─────────────────────────────────────────────────────────── - -const DEFAULT_SLOTS: CardSlot[] = [ - { key: "stats_bar_0", id: "stats_bar", panel: "main", order: 0, height: 76 }, - { - key: "counters_bar_0", - id: "counters_bar", - panel: "main", - order: 1, - height: 52, - }, - { - key: "host_status_0", - id: "host_status", - panel: "main", - order: 2, - height: null, - }, - { - key: "quick_actions_0", - id: "quick_actions", - panel: "side", - order: 0, - height: 180, - }, - { - key: "recent_activity_0", - id: "recent_activity", - panel: "side", - order: 1, - height: null, - }, -]; - -/** Cards core draws itself, how they are framed and what marks them. */ -const CORE_CARD_META: Record< - string, - { icon: React.ElementType; frame: "framed" | "bare" } -> = { - stats_bar: { icon: Activity, frame: "bare" }, - counters_bar: { icon: Database, frame: "bare" }, - quick_actions: { icon: Zap, frame: "framed" }, - host_status: { icon: Server, frame: "framed" }, - recent_activity: { icon: Activity, frame: "framed" }, -}; - -/** - * A plugin's card, or a placeholder that keeps the slot while its plugin is - * off, so the card comes back in the same place when the plugin does. - */ -export function PluginCardSlot({ - id, - isVisible, - onOpenSingletonTab, -}: { - id: string; - isVisible: boolean; - onOpenSingletonTab: (type: TabType, pendingEvent?: string) => void; -}) { - useRegisteredDashboardCards(); - const cardShell = useMemo( - () => ({ - ...shell, - openSingletonTab: (type: string) => onOpenSingletonTab(type as TabType), - }), - [onOpenSingletonTab], - ); - const card = getRegisteredDashboardCard(id); - if (!card) { - return ( -
- -
- ); - } - const Component = card.component; - return ; -} - -function isStatusCheckEnabled(host: Host): boolean { - return host.statusCheckEnabled !== false; -} - -// ─── Sections ───────────────────────────────────────────────────────────────── - -interface CardMeta { - label: string; - icon: React.ElementType; - frame: "framed" | "bare"; - action?: React.ReactNode; -} - -/** One section of a column, separated from the next by a hairline. */ -function Section({ - slot, - meta, - editMode, - last, - dragging, - onDragStart, - onDrop, - onRemove, - onHeightChange, - autoHeight, - children, -}: { - slot: CardSlot; - meta: CardMeta; - editMode: boolean; - last: boolean; - dragging: boolean; - onDragStart: () => void; - onDrop: () => void; - onRemove: () => void; - onHeightChange: (key: string, h: number) => void; - /** Phones stack cards, so each takes the height of its content. */ - autoHeight?: boolean; - children: React.ReactNode; -}) { - const { t } = useTranslation(); - const ref = useRef(null); - // The last section always fills the column, so resizing one never leaves - // dead space underneath. - const flex = last || slot.height === null; - const Icon = meta.icon; - - const onResizeMouseDown = (e: React.MouseEvent) => { - e.preventDefault(); - e.stopPropagation(); - const startY = e.clientY; - const startH = ref.current?.getBoundingClientRect().height ?? 100; - const onMove = (ev: MouseEvent) => - onHeightChange(slot.key, Math.max(48, startH + (ev.clientY - startY))); - const onUp = () => { - window.removeEventListener("mousemove", onMove); - window.removeEventListener("mouseup", onUp); - }; - window.addEventListener("mousemove", onMove); - window.addEventListener("mouseup", onUp); - }; - - return ( -
editMode && e.preventDefault()} - onDrop={(e) => { - if (!editMode) return; - e.stopPropagation(); - onDrop(); - }} - style={{ - height: flex || autoHeight ? undefined : (slot.height ?? undefined), - }} - className={`relative flex shrink-0 flex-col border-b border-border last:border-b-0 ${ - flex ? "min-h-48 flex-1" : "" - } ${dragging ? "opacity-40" : ""} ${editMode ? "cursor-grab select-none" : ""}`} - > - {(meta.frame === "framed" || editMode) && ( -
- {editMode && ( - - )} - - - {meta.label} - - - {!editMode && meta.action} - {editMode && ( - - )} - -
- )} -
- {children} -
- {!last && ( -
{ - e.preventDefault(); - e.stopPropagation(); - }} - onMouseDown={onResizeMouseDown} - title={t("cardGrid.dragToResize")} - className="absolute inset-x-0 bottom-0 z-10 h-1.5 cursor-ns-resize transition-colors hover:bg-accent-brand/40" - /> - )} -
- ); -} - -/** Everything that could go on the dashboard but is not on it. */ -function AddTray({ - available, - labels, - onAdd, -}: { - available: { id: string; plugin: boolean }[]; - labels: Record; - onAdd: (id: string) => void; -}) { - const { t } = useTranslation(); - const builtin = available.filter((c) => !c.plugin); - const fromPlugins = available.filter((c) => c.plugin); - const row = (cards: typeof available) => ( -
- {cards.map((card) => ( - - ))} -
- ); - return ( -
- - {available.length === 0 ? ( -

- {t("dashboardTab.allSectionsShown")} -

- ) : ( -
- {builtin.length > 0 && row(builtin)} - {fromPlugins.length > 0 && ( - <> - - {t("dashboardTab.fromPlugins")} - - {row(fromPlugins)} - - )} -
- )} -
- ); -} - -// ─── DashboardTab ───────────────────────────────────────────────────────────── - -export function DashboardTab({ - onOpenSingletonTab, - onOpenTab, - isVisible = true, -}: { - onOpenSingletonTab: (type: TabType, pendingEvent?: string) => void; - onOpenTab: (host: Host, type: TabType) => void; - /** When false, pause dashboard metrics refresh while the tab stays mounted. */ - isVisible?: boolean; -}) { - const registeredCards = useRegisteredDashboardCards(); - const { t, i18n } = useTranslation(); - const confirm = useConfirm(); - const { initialLoadComplete } = useServerStatusMeta(); - const statusLoading = !initialLoadComplete; - - const [slots, setSlots] = useState(() => { - try { - const saved = localStorage.getItem("dashboardTab.slots"); - if (saved) { - const parsed = JSON.parse(saved) as CardSlot[]; - return parsed.map((s, i) => ({ key: s.key ?? `${s.id}_${i}`, ...s })); - } - } catch { - /* ignore */ - } - return DEFAULT_SLOTS; - }); - - // Picking an interface preset rewrites the stored layout from settings, so - // pick it up without waiting for a remount. - useEffect(() => { - const handler = () => { - try { - const saved = localStorage.getItem("dashboardTab.slots"); - if (!saved) return; - const parsed = JSON.parse(saved) as CardSlot[]; - setSlots( - parsed.map((s, i) => ({ key: s.key ?? `${s.id}_${i}`, ...s })), - ); - } catch { - /* ignore */ - } - }; - window.addEventListener("dashboardSlotsChanged", handler); - return () => window.removeEventListener("dashboardSlotsChanged", handler); - }, []); - - // A plugin's own view next to the dashboard, e.g. the homepage canvas. - const secondaryViews = useActionSlot("dashboard.secondaryView"); - const secondaryView = secondaryViews[0]; - const { settled: pluginsSettled } = usePluginStore(); - - const [dashboardView, setDashboardView] = useState(() => { - try { - return localStorage.getItem("dashboardView") ?? "dashboard"; - } catch { - return "dashboard"; - } - }); - // Until plugins settle, a plugin view saved last session has not had a - // chance to register, so its absence does not mean it is gone. - const viewPending = !pluginsSettled && dashboardView !== "dashboard"; - const isDashboardView = - dashboardView === "dashboard" || - (!viewPending && !secondaryView) || - (!!secondaryView && dashboardView !== secondaryView.actionId); - - useEffect(() => { - try { - localStorage.setItem("dashboardView", dashboardView); - } catch { - /* ignore */ - } - }, [dashboardView]); - - const [editMode, setEditMode] = useState(false); - const [dragKey, setDragKey] = useState(null); - - const [mainWidthPct, setMainWidthPct] = useState(() => { - try { - const saved = localStorage.getItem("dashboardTab.mainWidthPct"); - if (saved) return Number(saved); - } catch { - /* ignore */ - } - return 68; - }); - - useEffect(() => { - try { - localStorage.setItem("dashboardTab.slots", JSON.stringify(slots)); - } catch { - /* ignore */ - } - }, [slots]); - - useEffect(() => { - try { - localStorage.setItem("dashboardTab.mainWidthPct", String(mainWidthPct)); - } catch { - /* ignore */ - } - }, [mainWidthPct]); - - const [configHosts, setHosts] = useState([]); - const { statuses, getStatus } = useServerStatus(); - const hosts = useMemo( - () => withLiveHostStatus(configHosts, getStatus), - // statuses changes identity whenever a host's status changes - // eslint-disable-next-line react-hooks/exhaustive-deps - [configHosts, statuses, getStatus], - ); - const [isAdmin, setIsAdmin] = useState(false); - const [uptimeFormatted, setUptimeFormatted] = useState(""); - const [versionText, setVersionText] = useState(""); - const [versionStatus, setVersionStatus] = - useState("up_to_date"); - const [releaseUrl, setReleaseUrl] = useState(""); - const [dbHealth, setDbHealth] = useState<"healthy" | "error">("healthy"); - const [credentialCount, setCredentialCount] = useState(0); - const [activity, setActivity] = useState([]); - const [hostStatusSort, setHostStatusSort] = useState(() => { - try { - const saved = localStorage.getItem("dashboardTab.hostStatusSort"); - return HOST_STATUS_SORTS.includes(saved as SortKey) - ? (saved as SortKey) - : "default"; - } catch { - return "default"; - } - }); - const statusCheckHosts = sortHostTree( - { name: "", children: hosts.filter(isStatusCheckEnabled) }, - hostStatusSort, - ).children as Host[]; - - useEffect(() => { - let mounted = true; - const load = async () => { - const raw = await getSSHHosts().catch(() => []); - if (mounted) setHosts(raw.map(sshHostToHost)); - }; - load(); - - getUserInfo() - .then((info) => { - // A desktop on its own has one implicit user and nothing to - // administer; linked, it is an admin when the server account is. - setIsAdmin(isElectron() ? !!info.linked?.isAdmin : !!info.is_admin); - }) - .catch(() => {}); - getUptime() - .then((u) => setUptimeFormatted(u.formatted)) - .catch(() => {}); - getVersionInfo() - .then((info) => { - setVersionText(info.localVersion ?? ""); - setVersionStatus(info.status ?? "unknown"); - setReleaseUrl(releaseUrlFrom(info)); - }) - .catch(() => {}); - getDatabaseHealth() - .then((health) => { - setDbHealth( - health.status === "ok" || health.status === "healthy" - ? "healthy" - : "error", - ); - }) - .catch(() => { - setDbHealth("error"); - }); - getRecentActivity(50) - .then(setActivity) - .catch(() => {}); - getCredentials() - .then((res) => - setCredentialCount( - Array.isArray(res) - ? res.length - : Array.isArray(res?.credentials) - ? res.credentials.length - : 0, - ), - ) - .catch(() => {}); - - if (!isVisible) { - return () => { - mounted = false; - }; - } - - const hostsInterval = setInterval(async () => { - if (document.visibilityState === "hidden") return; - const raw = await getSSHHosts().catch(() => []); - if (mounted) setHosts(raw.map(sshHostToHost)); - }, 30000); - - return () => { - mounted = false; - clearInterval(hostsInterval); - }; - }, [isVisible]); - - const handleClearActivity = async () => { - const ok = await confirm({ - title: t("dashboardTab.clearActivityConfirm"), - confirmLabel: t("dashboardTab.clear"), - }); - if (!ok) return; - try { - await resetRecentActivity(); - setActivity([]); - } catch { - /* ignore */ - } - }; - - const todayLabel = new Date().toLocaleDateString(i18n.language, { - weekday: "long", - month: "long", - day: "numeric", - }); - const bodyRef = useRef(null); - const isMobile = useIsMobile(); - - const mainSlots = slots - .filter((s) => s.panel === "main") - .sort((a, b) => a.order - b.order); - const sideSlots = slots - .filter((s) => s.panel === "side") - .sort((a, b) => a.order - b.order); - const showSide = sideSlots.length > 0 || editMode; - - const labels: Record = { - stats_bar: t("dashboard.serverOverview"), - counters_bar: t("dashboard.serverStats"), - quick_actions: t("dashboard.quickActions"), - host_status: t("dashboardTab.hostStatus"), - recent_activity: t("dashboard.recentActivity"), - ...Object.fromEntries( - registeredCards.map((card) => [card.id, t(card.titleKey)]), - ), - }; - - const metaFor = (id: string): CardMeta => { - const core = CORE_CARD_META[id]; - if (core) - return { - label: labels[id] ?? id, - icon: core.icon, - frame: core.frame, - action: - id === "host_status" && statusCheckHosts.length > 1 ? ( - { - const key = e.target.value as SortKey; - setHostStatusSort(key); - try { - localStorage.setItem("dashboardTab.hostStatusSort", key); - } catch { - /* ignore */ - } - }} - className="h-6 border border-border bg-background px-1.5 text-[10px] outline-none focus:ring-1 focus:ring-ring" - > - {HOST_STATUS_SORTS.map((key) => ( - - ))} - - ) : id === "recent_activity" && activity.length > 0 ? ( - - ) : undefined, - }; - const registered = getRegisteredDashboardCard(id); - return { - label: labels[id] ?? id, - icon: LayoutGrid, - frame: registered?.frame ?? "bare", - }; - }; - - const renderCard = (id: string) => { - switch (id) { - case "stats_bar": - return ( - - ); - case "counters_bar": - return ( - - ); - case "quick_actions": - return ( - - ); - case "host_status": - return ( - - ); - case "recent_activity": - return ( - - ); - default: - return ( - - ); - } - }; - - const onColumnDividerMouseDown = useCallback( - (e: React.MouseEvent) => { - e.preventDefault(); - const startX = e.clientX; - const startPct = mainWidthPct; - const totalW = bodyRef.current?.getBoundingClientRect().width ?? 0; - if (!totalW) return; - let frame = 0; - let clientX = startX; - const onMove = (ev: MouseEvent) => { - clientX = ev.clientX; - if (frame) return; - frame = requestAnimationFrame(() => { - frame = 0; - setMainWidthPct( - Math.min( - 85, - Math.max(25, startPct + ((clientX - startX) / totalW) * 100), - ), - ); - }); - }; - const onUp = () => { - window.removeEventListener("mousemove", onMove); - window.removeEventListener("mouseup", onUp); - }; - window.addEventListener("mousemove", onMove); - window.addEventListener("mouseup", onUp); - }, - [mainWidthPct], - ); - - const drop = (panel: PanelId, order: number) => { - if (!dragKey) return; - setSlots((prev) => { - const moving = prev.find((s) => s.key === dragKey); - if (!moving) return prev; - const rest = prev.filter((s) => s.key !== dragKey); - const target = rest - .filter((s) => s.panel === panel) - .sort((a, b) => a.order - b.order); - const others = rest.filter((s) => s.panel !== panel); - const at = target.findIndex((s) => s.order > order); - const index = at === -1 ? target.length : at; - const next = [ - ...target.slice(0, index), - { ...moving, panel }, - ...target.slice(index), - ].map((s, i) => ({ ...s, order: i })); - return [...others, ...next]; - }); - setDragKey(null); - }; - - const handleAdd = (id: DashboardCardId) => { - const registered = getRegisteredDashboardCard(id); - const panel: PanelId = registered?.defaultPanel ?? "main"; - setSlots((prev) => { - const panelSlots = prev.filter((s) => s.panel === panel); - const order = - panelSlots.length > 0 - ? Math.max(...panelSlots.map((s) => s.order)) + 1 - : 0; - const height: number | null = - registered?.defaultHeight ?? - (id === "host_status" || id === "recent_activity" ? null : 150); - return [ - ...prev, - { key: `${id}_${Date.now()}`, id, panel, order, height }, - ]; - }); - }; - - const handleHeightChange = (key: string, h: number) => - setSlots((prev) => - prev.map((s) => (s.key === key ? { ...s, height: h } : s)), - ); - - const handleReset = async () => { - const ok = await confirm({ - title: t("dashboardTab.resetConfirm"), - confirmLabel: t("dashboard.reset"), - }); - if (!ok) return; - setSlots(DEFAULT_SLOTS); - setMainWidthPct(68); - setEditMode(false); - try { - localStorage.removeItem("dashboardTab.slots"); - localStorage.removeItem("dashboardTab.mainWidthPct"); - } catch { - /* ignore */ - } - }; - - const placed = new Set(slots.map((s) => s.id as string)); - const available = [ - ...DASHBOARD_CARDS.map((card) => ({ - id: card.id as string, - plugin: false, - })), - ...registeredCards.map((card) => ({ id: card.id, plugin: true })), - ].filter((card) => !placed.has(card.id)); - - const column = (panel: PanelId, columnSlots: CardSlot[], width: string) => ( -
editMode && e.preventDefault()} - onDrop={() => editMode && drop(panel, columnSlots.length)} - > - {columnSlots.length === 0 && editMode && ( -
- {t("dashboardTab.dropHere")} -
- )} - {columnSlots.map((slot, i) => ( -
setDragKey(slot.key)} - onDrop={() => drop(panel, slot.order - 0.5)} - onRemove={() => - setSlots((prev) => prev.filter((s) => s.key !== slot.key)) - } - onHeightChange={handleHeightChange} - autoHeight={isMobile} - > - {renderCard(slot.id)} -
- ))} -
- ); - - const online = hosts.filter((h) => h.status === "online").length; - const links = [ - { - href: "https://github.com/Termix-SSH/Termix", - label: t("dashboard.github"), - }, - { - href: reportCoreIssueUrl(import.meta.env.VITE_APP_VERSION || undefined), - label: t("dashboard.reportBug"), - }, - { - href: "https://discord.com/invite/jVQGdvHDrf", - label: t("dashboard.discord"), - }, - { href: docsUrl(), label: t("dashboard.docs") }, - { href: "https://donate.termix.site/", label: t("dashboard.donate") }, - ]; - - const title = - secondaryView && !viewPending ? ( - - ) : ( - t("dashboard.title") - ); - - return ( - } - title={title} - status={isDashboardView ? todayLabel : undefined} - scroll={false} - docs={docsUrl("dashboard")} - actions={ - <> - {isDashboardView && !viewPending && ( - <> - {editMode ? ( - <> - - {t("dashboardTab.dragToReorder")} - - - - ) : ( - - - {t("dashboardTab.onlineCount", { count: online })} - - - {t("dashboardTab.hostCount", { count: hosts.length })} - - - {t("dashboardTab.commandPalette")} - ⇧⇧ - - - )} - - - )} - - {links.map((link) => ( -
- {link.label} - - ))} - - {isDashboardView && ( - - )} - - } - > - {viewPending ? ( -
- - - -
- ) : !isDashboardView && secondaryView?.component ? ( -
- -
- ) : ( -
-
- {column( - "main", - mainSlots, - isMobile || !showSide ? "100%" : `${mainWidthPct}%`, - )} - {showSide && ( - <> -
- {column( - "side", - sideSlots, - isMobile ? "100%" : `${100 - mainWidthPct}%`, - )} - - )} -
- {editMode && ( - handleAdd(id as DashboardCardId)} - /> - )} -
- )} - - ); -} diff --git a/src/ui/dashboard/dashboard-core-cards.tsx b/src/ui/dashboard/dashboard-core-cards.tsx deleted file mode 100644 index f4789eef1..000000000 --- a/src/ui/dashboard/dashboard-core-cards.tsx +++ /dev/null @@ -1,448 +0,0 @@ -import { useIsMobile } from "@/hooks/use-mobile"; -import { useTranslation } from "react-i18next"; -import { - ExternalLink, - KeyRound, - Plus, - Server, - Settings, - User, -} from "lucide-react"; -import { ComponentSlot } from "@/shell/ActionSlot"; -import { VersionBadge } from "@/components/version-badge"; -import { Facts } from "@/components/panel-layout"; -import { enabledHostProtocols, protocolPort } from "@/sidebar/host-protocols"; -import { activityTarget } from "@/lib/activity-types"; -import { - defaultConnectAction, - hostActionsFor, - listHostActions, -} from "@/sidebar/host-contributions"; -import { - getStatusClasses, - useStatusColorScheme, -} from "@/hooks/use-status-color-scheme"; -import { getDefaultConnectionTab } from "@/lib/host-connection-tabs"; -import type { RecentActivityItem } from "@/main-axios"; -import type { Host, TabType } from "@/types/ui-types"; -import { quarterBorders } from "./quarter-borders"; -import { parseServerTime } from "@/lib/server-time"; - -export type VersionStatus = - "up_to_date" | "requires_update" | "beta" | "unknown"; - -function Stat({ - label, - aside, - children, -}: { - label: string; - /** Sits beside the label, like the release channel. */ - aside?: React.ReactNode; - children: React.ReactNode; -}) { - return ( -
- {children} -
- - {label} - - {aside} -
-
- ); -} - -export function StatsStrip({ - hosts, - uptimeFormatted, - versionText, - versionStatus, - releaseUrl, - dbHealth, -}: { - hosts: Host[]; - uptimeFormatted: string; - versionText: string; - versionStatus: VersionStatus; - releaseUrl: string; - dbHealth: "healthy" | "error"; -}) { - const { t } = useTranslation(); - const online = hosts.filter((h) => h.status === "online").length; - const big = "text-2xl font-bold leading-none tracking-tight"; - return ( -
- - } - > - - {versionText || "-"} - - - - {uptimeFormatted || "-"} - - - - {dbHealth === "healthy" - ? t("dashboard.healthy") - : t("dashboard.error")} - - - -
- {online} - - /{hosts.length} - -
-
-
- ); -} - -export function CountersStrip({ - hosts, - credentialCount, - onOpenSingletonTab, -}: { - hosts: Host[]; - credentialCount: number; - onOpenSingletonTab: (type: TabType, pendingEvent?: string) => void; -}) { - const { t } = useTranslation(); - const item = - "flex items-center gap-2 px-3 py-2 text-left transition-colors hover:bg-muted/50"; - return ( -
- - - -
- ); -} - -function ActionButton({ - icon: Icon, - label, - hint, - onClick, - className, -}: { - icon: React.ElementType; - label: string; - hint: string; - onClick: () => void; - className?: string; -}) { - return ( - - ); -} - -export function QuickActions({ - onOpenSingletonTab, - hosts, - onOpenTab, - isAdmin, -}: { - onOpenSingletonTab: (type: TabType, pendingEvent?: string) => void; - hosts: Host[]; - onOpenTab: (host: Host, type: TabType) => void; - isAdmin: boolean; -}) { - const { t } = useTranslation(); - const pinnedHosts = hosts.filter((h) => h.pin).slice(0, 4); - const endpoint = (host: Host) => { - const protocol = host.enableSsh ? undefined : enabledHostProtocols(host)[0]; - const port = host.enableSsh - ? host.sshPort - : protocol - ? protocolPort(host.pluginSettings, protocol) - : host.port; - return `${host.ip}:${port ?? host.port}`; - }; - const actions = [ - { - icon: Plus, - label: t("dashboard.addHost"), - hint: t("dashboardTab.registerNewServer"), - onClick: () => - onOpenSingletonTab("host-manager", "host-manager:add-host"), - }, - { - icon: KeyRound, - label: t("dashboard.addCredential"), - hint: t("dashboardTab.storeSshKeysOrPasswords"), - onClick: () => - onOpenSingletonTab("host-manager", "host-manager:add-credential"), - }, - ...(isAdmin - ? [ - { - icon: Settings, - label: t("dashboard.adminSettings"), - hint: t("dashboardTab.manageUsersAndRoles"), - onClick: () => onOpenSingletonTab("admin-settings"), - }, - ] - : []), - { - icon: User, - label: t("dashboard.userProfile"), - hint: t("dashboardTab.manageYourAccount"), - onClick: () => onOpenSingletonTab("user-profile"), - }, - ]; - return ( -
-
- {actions.map((action, i) => ( - - ))} -
- {pinnedHosts.length > 0 && ( -
- {pinnedHosts.map((host) => { - const Icon = - defaultConnectAction(listHostActions(), host)?.icon ?? Server; - return ( - - ); - })} -
- )} -
- ); -} - -export function HostStatusList({ - hosts, - onOpenTab, - statusLoading, -}: { - hosts: Host[]; - onOpenTab: (host: Host, type: TabType) => void; - statusLoading?: boolean; -}) { - const { t } = useTranslation(); - const scheme = useStatusColorScheme(); - // A phone has no room for the metric bars next to the host name. - const isMobile = useIsMobile(); - if (hosts.length === 0) { - return ( -
- {t("dashboardTab.noHostsConfigured")} -
- ); - } - return ( -
- {hosts.map((host) => { - const availability = host.status ?? "offline"; - return ( -
{ - // An overview action (a metrics view) wins over connecting. - const actions = hostActionsFor(listHostActions(), host); - const target = - actions.find((action) => action.overview)?.tabType ?? - defaultConnectAction(actions, host)?.tabType; - if (target) onOpenTab(host, target); - }} - className="group/row flex min-w-0 cursor-pointer items-center gap-2 px-3 py-1.5 hover:bg-muted/50" - > - - - - - {host.name} - - - {host.ip} - - - - {/* Plugins add live details to a host row here. */} - {!isMobile && ( - - )} - - {statusLoading || availability === "unknown" - ? t("dashboardTab.checking") - : availability === "online" - ? t("hosts.status.online") - : t("hosts.status.offline")} - - -
- ); - })} -
- ); -} - -export function RecentActivityList({ - activity, - hosts, - onOpenTab, - statusLoading, -}: { - activity: RecentActivityItem[]; - hosts: Host[]; - onOpenTab: (host: Host, type: TabType) => void; - statusLoading?: boolean; -}) { - const { t } = useTranslation(); - const scheme = useStatusColorScheme(); - const ago = (ts: string) => { - const diff = Math.floor( - (Date.now() - parseServerTime(ts).getTime()) / 1000, - ); - if (diff < 60) return t("dashboard.justNow"); - if (diff < 3600) return `${Math.floor(diff / 60)}m`; - if (diff < 86400) return `${Math.floor(diff / 3600)}h`; - return `${Math.floor(diff / 86400)}d`; - }; - if (activity.length === 0) { - return ( -
- {t("dashboard.noRecentActivity")} -
- ); - } - return ( -
- {activity.map((item) => { - const host = hosts.find((h) => h.id === String(item.hostId)); - const target = activityTarget(item.type); - const Icon = target?.icon ?? Server; - return ( -
{ - if (host && target) onOpenTab(host, target.tab); - }} - className="flex cursor-pointer items-center gap-2 px-3 py-1.5 hover:bg-muted/50" - > - - - - {item.hostName} - - - - - {target?.labelKey - ? t(target.labelKey) - : item.type.replace("_", " ")} - - - - - {ago(item.timestamp)} - -
- ); - })} -
- ); -} diff --git a/src/ui/dashboard/quarter-borders.ts b/src/ui/dashboard/quarter-borders.ts deleted file mode 100644 index f2944c8dc..000000000 --- a/src/ui/dashboard/quarter-borders.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Lines only between cells, so the actions read as quarters: one column on - * small screens, two above. An odd last cell spans the full row. - */ -export function quarterBorders(index: number, count: number): string { - const classes = ["border-border"]; - const last = index === count - 1; - if (!last) classes.push("border-b"); - if (Math.floor(index / 2) === Math.floor((count - 1) / 2)) { - classes.push("sm:border-b-0"); - } - if (index % 2 === 0 && !last) classes.push("sm:border-r"); - if (last && count % 2 === 1) classes.push("sm:col-span-2"); - return classes.join(" "); -} diff --git a/src/ui/lib/app-version.ts b/src/ui/lib/app-version.ts new file mode 100644 index 000000000..126625fdd --- /dev/null +++ b/src/ui/lib/app-version.ts @@ -0,0 +1,3 @@ +/** The version of this build, empty in a dev build. */ +export const APP_VERSION: string | undefined = + import.meta.env.VITE_APP_VERSION || undefined; diff --git a/src/ui/lib/plugin-i18n.ts b/src/ui/lib/plugin-i18n.ts index 1e85c8b65..48167d210 100644 --- a/src/ui/lib/plugin-i18n.ts +++ b/src/ui/lib/plugin-i18n.ts @@ -1,4 +1,8 @@ -import type { TFunction } from "i18next"; +/** The part of a translate function these helpers use. */ +export type Translator = ( + key: string, + options?: Record, +) => string; /** * Where a plugin's i18n keys resolve from. @@ -28,7 +32,7 @@ export function pluginKey( * listed in a registry, shows the manifest name. */ export function pluginName( - t: TFunction, + t: Translator, plugin: { id: string; name: string }, ): string { return t(pluginKey(plugin.id, "plugin.name"), { defaultValue: plugin.name }); @@ -36,7 +40,7 @@ export function pluginName( /** Same as pluginName, for "plugin.description". */ export function pluginDescription( - t: TFunction, + t: Translator, plugin: { id: string; description?: string | null }, ): string { return t(pluginKey(plugin.id, "plugin.description"), { diff --git a/src/ui/lib/role-label.ts b/src/ui/lib/role-label.ts index 4dbae6719..a3c5e9d3f 100644 --- a/src/ui/lib/role-label.ts +++ b/src/ui/lib/role-label.ts @@ -1,8 +1,8 @@ -import type { TFunction } from "i18next"; +import type { Translator } from "./plugin-i18n"; /** System roles store an i18n key as their display name. */ export function roleLabel( - t: TFunction, + t: Translator, displayName: T, ): T | string { return typeof displayName === "string" && diff --git a/src/ui/locales/en.json b/src/ui/locales/en.json index b4ee07f37..ed314fc1d 100644 --- a/src/ui/locales/en.json +++ b/src/ui/locales/en.json @@ -141,7 +141,6 @@ "continue": "Continue", "error": "Error", "unsavedChanges": "Unsaved changes", - "more": "More", "loading": "Loading...", "host": "Host", "selectHost": "Select a host...", @@ -154,7 +153,6 @@ "cancel": "Cancel", "username": "Username", "login": "Login", - "logout": "Logout", "register": "Register", "password": "Password", "confirmPassword": "Confirm Password", @@ -165,8 +163,6 @@ "rename": "Rename", "edit": "Edit", "confirm": "Confirm", - "next": "Next", - "previous": "Previous", "refresh": "Refresh", "language": "Language", "backendReconnected": "Server connection restored", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Read about each one" }, "desktopUpdates": { - "title": "Desktop app", - "mode": "Updates", - "modeHint": "How this app gets new versions.", - "manualModeHint": "This copy can not update itself, so Termix only tells you when a new version is out.", "modeAutomatic": "Automatic", "modePrompt": "Ask first", "modeNever": "Never", @@ -247,15 +239,6 @@ "onboardingTitle": "App updates", "onboardingBody": "The desktop app can now update itself. Pick how you want new versions to arrive. You can change this later in Settings, Updates.", "onboardingManual": "This copy of the app was installed in a way that can not update itself, so Termix will tell you when a new version is out with a link to download it.", - "status": "Version {{version}}", - "statusIdle": "Not checked yet", - "statusChecking": "Checking for updates", - "statusAvailable": "Version {{version}} is available", - "statusDownloading": "Downloading {{version}} ({{progress}}%)", - "statusReady": "Version {{version}} is ready. Restart to install it.", - "statusUpToDate": "You have the newest version", - "statusError": "Could not check for updates. Try again later.", - "checkNow": "Check now", "download": "Download", "restart": "Restart now", "later": "Later", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Close", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Copy Password", - "copySudoPassword": "Copy Sudo Password", - "passwordCopied": "Password copied to clipboard", - "failedToCopyPassword": "Failed to copy password", - "refreshTab": "Refresh connection", - "renameTab": "Rename tab", "dashboard": "Dashboard", "quickConnect": "Quick Connect", - "openAsTabHint": "Ctrl+click or middle click to open as a tab", - "openAsTab": "Open as tab", - "openInRightDock": "Open in right dock", - "closeRightDock": "Close right dock", - "toggleRightDock": "Toggle right dock", "hosts": "Hosts", "credentials": "Credentials", "connections": "Connections", - "keepSideMenuOpen": "Keep Menu Open", - "collapseSideMenu": "Collapse Menu", - "roleAdministrator": "Administrator", - "roleUser": "User", "sync": "Sync", "reconnectDisconnectedTerminals": "Reconnect all disconnected terminals", "reconnectingTerminals_one": "Reconnecting {{count}} terminal", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "Could not start reconnecting {{count}} terminals", "fullscreenUnsupported": "Fullscreen is not supported by this browser", "fullscreenFailed": "Could not toggle fullscreen", - "resetSidebarWidth": "Reset width", - "collapseSidebar": "Collapse sidebar", - "openSidebar": "Open sidebar", "confirmCloseHost": "Close {{host}}?", - "enterFullscreen": "Enter fullscreen (Ctrl+Shift+F)", - "exitFullscreen": "Exit fullscreen (Ctrl+Shift+F)", - "group": { - "objects": "Yours", - "tools": "Tools", - "system": "System" - }, - "searchEverything": "Search hosts, tabs and actions", - "search": "Search", "hiddenCount_one": "{{count}} hidden", "hiddenCount_other": "{{count}} hidden", - "showInRail": "Show in sidebar", - "moveUp": "Move up", - "moveDown": "Move down", - "resetRailOrder": "Reset order", - "hideFromRail": "Hide from sidebar", - "openSettings": "Open settings", "settings": "Settings", "manage": "Manage", - "mobileNavigation": "Navigation", "plugins": "Plugins" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "Import done: {{imported}} imported, {{updated}} updated, {{failed}} failed", "importHostsFailed": "Failed to import hosts" }, - "commandPalette": { - "searchPlaceholder": "Search hosts, commands, or settings...", - "quickActions": "Quick Actions", - "navigation": "Navigation", - "orShortcut": "or", - "addNewHost": "Add New Host", - "adminSettings": "Admin Settings", - "addCredential": "Add Credential", - "recentActivity": "Recent Activity", - "serversAndHosts": "Servers & Hosts", - "noHostsFound": "No hosts found matching \"{{search}}\"", - "links": "Links", - "navigate": "Navigate", - "select": "Select", - "pluginActions": "More actions", - "noTargetTab": "No terminal tab is open", - "documentation": "Documentation" - }, "splitScreen": { "title": "Split screen", "defaultLabel": "Split {{number}}", "splitRight": "Split right", "splitDown": "Split down", - "addToSplit": "Add to {{split}}", "paneEmptyItem": "Pane {{index}}: empty", "paneItem": "Pane {{index}}: {{label}}", "paneNumber": "Pane {{index}}", - "newPaneRight": "New pane on the right", - "newPaneBelow": "New pane below", "emptyTitle": "Empty pane", "emptyHint": "Pick something to show here. While this pane is selected, anything you open from the sidebar also opens here.", "openTabs": "Open tabs", @@ -962,7 +890,6 @@ "clearPane": "Empty this pane", "zoom": "Zoom pane", "unzoom": "Restore layout", - "unsplit": "Unsplit", "layouts": "Layouts", "applyLayout": "Change layout", "maxPanes_one": "A split can hold up to {{count}} pane", @@ -971,8 +898,6 @@ "dropHere": "Drop to show here", "paneActions": "Pane actions", "dividerHint": "Drag to resize. Double-click to even out.", - "openInSplit": "Open in split", - "openInNewSplit": "New split with the current tab", "shortcuts": "Shortcuts", "shortcutNavigate": "Move between panes", "presets": { @@ -986,23 +911,6 @@ "grid6": "Grid of six" } }, - "connections": { - "noConnections": "No connections", - "noConnectionsDesc": "Open a terminal, file manager, or remote desktop to see connections here", - "connectedFor": "Connected for {{duration}}", - "connected": "Connected", - "disconnected": "Disconnected", - "reconnect": "Reconnect", - "sectionOpen": "Open", - "sectionBackground": "Background", - "backgroundDesc": "Sessions persist for {{minutes}} minutes after disconnect and can be reconnected.", - "expiresIn": "Expires in {{duration}}", - "search": "Search connections...", - "noSearchResults": "No connections match your search", - "rename": "Rename session", - "forgetConfirm": "End the background session for {{name}}?", - "forget": "End session" - }, "sshAuth": { "totpRequired": "Two-Factor Authentication Required", "totpCodeLabel": "Verification Code", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "key password", "pastePrivateKey": "Paste your private key here...", - "enterPassword": "Enter your password", - "apiKeyName": "e.g., CI Pipeline", - "credentialName": "e.g. Production SSH Key", - "optionalDetails": "Optional details...", - "sshUsername": "e.g. root or deploy", - "hostAddress": "10.0.0.1 or example.com", - "hostName": "e.g. Web Server Production" + "enterPassword": "Enter your password" }, "dashboard": { - "title": "Dashboard", - "github": "GitHub", - "reportBug": "Report a bug", - "discord": "Discord", - "docs": "Docs", - "donate": "Donate", - "serverOverview": "Server Overview", - "version": "Version", "updateAvailable": "Update Available", - "beta": "Beta", - "uptime": "Uptime", - "database": "Database", - "healthy": "Healthy", - "error": "Error", - "totalHosts": "Total Hosts", - "totalCredentials": "Total Credentials", - "recentActivity": "Recent Activity", - "reset": "Reset", - "noRecentActivity": "No recent activity", - "quickActions": "Quick Actions", - "addHost": "Add Host", - "addCredential": "Add Credential", - "adminSettings": "Admin Settings", - "userProfile": "User Profile", - "serverStats": "Server Stats", - "customizeLayout": "Customize Dashboard", - "justNow": "just now" + "beta": "Beta" }, "dashboardTab": { "stable": "STABLE", - "registerNewServer": "Register a new server", - "storeSshKeysOrPasswords": "Store SSH keys or passwords", - "manageUsersAndRoles": "Manage users and roles", - "manageYourAccount": "Manage your account", - "hostStatus": "Host Status", - "noHostsConfigured": "No hosts configured", - "checking": "CHECKING", - "commandPalette": "Command Palette", - "done": "Done", - "clear": "Clear", - "dragToResizeColumns": "Drag to resize columns", - "hostsAvailable": "Hosts Available", - "removeSection": "Remove section", - "addSection": "Add a section", - "allSectionsShown": "Everything is already on the dashboard.", - "fromPlugins": "From plugins", - "dropHere": "Drop a section here", - "dragToReorder": "Drag sections to reorder them", - "clearActivityConfirm": "Clear your recent activity?", - "resetConfirm": "Reset the dashboard to its default layout?", "onlineCount_one": "{{count}} online", "onlineCount_other": "{{count}} online", "hostCount_one": "{{count}} host", "hostCount_other": "{{count}} hosts" }, "admin": { - "sectionGeneral": "General", - "sectionUsers": "Users", - "sectionSessions": "Sessions", - "sectionRoles": "Roles", - "sectionDatabase": "Database", - "sectionApiKeys": "API Keys", - "sectionAuditLog": "Audit Log", - "sectionSsl": "HTTPS certificate", - "sectionBranding": "White Label", - "brandingAppName": "Application Name", - "brandingAppNameDesc": "Shown on the login screen and browser tab. Leave empty to use \"Termix\".", - "brandingTagline": "Tagline", - "brandingTaglineDesc": "Shown under the application name on the login screen. Leave empty to use the default tagline.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG or WEBP, up to 750 KB. Replaces the default icon on the login screen and browser tab.", - "brandingLogoUpload": "Upload logo", - "brandingLogoReset": "Reset to default", - "brandingLogoInvalid": "Invalid image. Use a PNG, JPEG or WEBP file up to 750 KB.", - "brandingSaved": "Branding settings saved", - "brandingSaveFailed": "Failed to save branding settings", - "sslDescription": "The certificate Termix serves over HTTPS. Upload your own here, or get and renew one from Let's Encrypt in the ACME Certificates section.", - "sslDocsLink": "View SSL docs", - "sslCertStatus": "Certificate Status", - "sslCertStatusNone": "No certificate", - "sslCertStatusValid": "Valid", - "sslCertStatusExpiring": "Expiring soon", - "sslCertStatusExpired": "Expired", - "sslCertExpiresAt": "Expires {{date}}", - "sslInfoNote": "After issuing or uploading a certificate, Termix will automatically enable HTTPS on SSL_PORT (default 8443) in addition to the existing HTTP port. Make sure that port is published/mapped to this container so it is reachable.", - "sslManualCert": "Certificate (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Private Key (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Paste your existing certificate and private key, including a full chain if required by your CA.", - "sslManualUpload": "Upload & Install Certificate", - "sslManualUploadLoading": "Uploading certificate...", - "sslManualUploadSuccess": "Certificate uploaded and installed successfully", - "sslManualUploadFailed": "Certificate upload failed", - "sslManualRequiresFields": "Certificate and private key are required", - "auditLogTotal": "{{total}} total entries", - "auditLogEmpty": "No audit log entries found", - "auditLogSuccess": "Success", - "auditLogFailed": "Failed", - "auditLogClearFilters": "Clear Filters", - "auditLogPage": "Page {{page}} of {{totalPages}} ({{total}} total)", - "auditLogIp": "IP", - "auditLogResourceId": "Resource ID", - "auditLogFilterUser": "User", - "auditLogFilterAction": "Action", - "auditLogFilterResourceType": "Resource Type", - "auditLogFilterStatus": "Status", - "auditLogFilterFrom": "From", - "auditLogFilterTo": "To", - "auditLogFilterAll": "All", - "allowRegistration": "Allow User Registration", - "allowRegistrationDesc": "Let new users self-register with a username and password", - "allowPasswordLogin": "Allow Password Login", - "allowPasswordLoginDesc": "Username/password login", - "externalAutoProvision": "Auto-create external accounts", - "externalAutoProvisionDesc": "Create an account the first time someone signs in through an external login such as SSO or LDAP. When off, only people who already have an account can sign in that way", - "secondFactorAfterExternalLogin": "Ask for a second factor after external logins (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Off, an enrolled second factor is only asked for after password and other local logins, same as before. On, it is asked for after every login method, including SSO and LDAP.", - "allowPasswordReset": "Allow Password Reset", - "allowPasswordResetDesc": "Reset code via Docker logs", - "auditForwardingTitle": "Forward to SIEM", - "auditForwardingDesc": "Ship a copy of every audit entry to an external collector as NDJSON. Local logs stay the source of truth.", - "auditForwardingEnvNotice": "An environment variable also configures forwarding; the URL saved here takes precedence.", - "auditForwardingToken": "Bearer token (optional)", - "auditForwardingTokenStored": "Bearer token (stored)", - "auditForwardingSaved": "Audit forwarding settings saved", - "auditForwardingSaveError": "Failed to save audit forwarding settings", - "sessionTimeout": "Session Timeout", - "hours": "hours", - "sessionTimeoutRange": "Min 1h, max 720h", - "monitoringDefaults": "Monitoring Defaults", - "statusCheck": "Status Check", - "sec": "sec", - "logLevel": "Log Level", "usersCount_one": "{{count}} user", - "usersCount_other": "{{count}} users", - "searchUsers": "Search users...", - "noUsers": "No users", - "noUsersMatch": "No users match your search", - "pageOf": "Page {{page}} of {{total}}", - "createUser": "Create", - "newRole": "New Role", - "roleName": "Name", - "roleDisplayName": "Display Name", - "roleDescription": "Description", "rolesCount_one": "{{count}} role", - "rolesCount_other": "{{count}} roles", - "createRole": "Create", - "creating": "Creating...", - "exportDatabase": "Export Database", - "exportDatabaseDesc": "Download a portable SQLite backup of all hosts, credentials, and settings", - "export": "Export", - "exporting": "Exporting...", - "importDatabase": "Import Database", - "importDatabaseDesc": "Restore from a portable .sqlite backup on any database backend", - "importDatabaseSelected": "Selected: {{name}}", - "selectFile": "Select File", - "changeFile": "Change", - "import": "Import", - "importing": "Importing...", "apiKeysCount_one": "{{count}} key", - "apiKeysCount_other": "{{count}} keys", - "apiKeysDocsLink": "View docs", - "apiKeysCliHint": "Use an API key with the Termix CLI to manage servers from your terminal.", - "apiKeysCliLink": "View CLI docs", - "newApiKey": "New API Key", - "apiKeyCreatedWarning": "Key created - copy it now, it won't be shown again.", - "apiKeyName": "Name", - "apiKeyUser": "User", - "apiKeySelectUser": "Select a user...", - "apiKeyExpiresAt": "Expires At", - "createKey": "Create Key", - "apiKeyNoExpiry": "No expiry", - "revokedBadge": "REVOKED", - "authTypeDual": "Dual Auth", - "authTypeExternal": "External", - "authTypeLocal": "Local", - "adminStatusAdministrator": "Administrator", - "adminStatusRegularUser": "Regular User", - "adminBadge": "ADMIN", - "systemBadge": "SYS", - "customBadge": "CUSTOM", - "youBadge": "YOU", "sessionsActive_one": "{{count}} active", - "sessionsActive_other": "{{count}} active", - "sessionActive": "Active: {{time}}", - "sessionExpires": "Exp: {{time}}", - "revokeAll": "All", - "revokeAllSessionsSuccess": "All sessions for user revoked", - "revokeAllSessionsFailed": "Failed to revoke sessions", - "revokeSessionFailed": "Failed to revoke session", - "addRole": "Add role", - "noCustomRoles": "No custom roles defined", - "removeRoleFailed": "Failed to remove role", - "assignRoleFailed": "Failed to assign role", - "userAdminAccess": "Administrator", - "userAdminAccessDesc": "Full access to all admin settings", - "userRoles": "Roles", - "revokeAllUserSessions": "Revoke All Sessions", - "revokeAllUserSessionsDesc": "Force re-login on all devices", - "revoke": "Revoke", - "deleteUserWarning": "Deleting this user is permanent.", - "deleteUser": "Delete {{username}}", - "deleting": "Deleting...", - "deleteUserFailed": "Failed to delete user", - "deleteUserSuccess": "User \"{{username}}\" deleted", - "deleteRoleSuccess": "Role \"{{name}}\" deleted", - "revokeKeySuccess": "Key \"{{name}}\" revoked", - "revokeKeyFailed": "Failed to revoke key", - "copiedToClipboard": "Copied to clipboard", - "done": "Done", - "createUserTitle": "Create User", - "createUserDesc": "Create a new local account.", - "createUserUsername": "Username", - "createUserPassword": "Password", - "createUserPasswordHint": "Minimum 6 characters.", - "createUserEnterUsername": "Enter username", - "createUserSubmit": "Create User", - "editUserTitle": "Manage User: {{username}}", - "editUserDesc": "Edit roles, admin status, sessions, and account settings.", - "editUserUsername": "Username", - "editUserAuthType": "Auth Type", - "editUserAdminStatus": "Admin Status", - "editUserUserId": "User ID", - "linkAccountTitle": "Link Accounts", - "linkAccountDesc": "Merge the external account {{username}} with an existing local account.", - "linkAccountDescLocal": "Link a local account {{username}} with an existing external-only account.", - "linkAccountWarningTitle": "This will:", - "linkAccountEffect1": "Delete the external-only account", - "linkAccountEffect2": "Add its external sign-in to the target account", - "linkAccountEffect3": "Allow both external and password sign-in", - "linkAccountTargetUsername": "Local Account Username", - "linkAccountTargetPlaceholder": "Enter the local account username to link to", - "linkAccountExternalUsername": "External Account Username", - "linkAccountExternalPlaceholder": "Enter the external-only account username to merge in", - "linkAccountExternalNotFound": "No external-only account found with that username", - "linkAccounts": "Link Accounts", - "linkAccountSuccess": "Accounts linked successfully", - "linkAccountFailed": "Failed to link accounts", - "linkAccountInProgress": "Linking...", - "unlinkAccountTitle": "Unlink External Sign-in", - "unlinkAccountDesc": "Remove external sign-in from {{username}}. They will only be able to log in with their password.", - "unlinkAccountWarning": "This will remove external sign-in from this account. The user must have a password set to keep logging in.", - "unlinkAccount": "Unlink External Sign-in", - "unlinkAccountInProgress": "Unlinking...", - "unlinkAccountSuccess": "External sign-in unlinked", - "unlinkAccountFailed": "Failed to unlink external sign-in", - "updateRegistrationFailed": "Failed to update registration setting", - "updatePasswordLoginFailed": "Failed to update password login setting", - "updateSecondFactorAfterExternalLoginFailed": "Failed to update second factor setting", - "updatePasswordResetFailed": "Failed to update password reset setting", - "sessionTimeoutRange2": "Session timeout must be between 1 and 720 hours", - "sessionTimeoutSaved": "Session timeout saved", - "sessionTimeoutSaveFailed": "Failed to save session timeout", - "monitoringIntervalInvalid": "Invalid interval values", - "monitoringSaved": "Monitoring settings saved", - "monitoringSaveFailed": "Failed to save monitoring settings", - "logLevelUpdateFailed": "Failed to update log level", - "createUserRequired": "Username and password are required", - "createUserPasswordTooShort": "Password must be at least 6 characters", - "createUserSuccess": "User \"{{username}}\" created", - "createUserFailed": "Failed to create user", - "updateAdminStatusFailed": "Failed to update admin status", - "allSessionsRevoked": "All sessions revoked", - "revokeSessionsFailed": "Failed to revoke sessions", - "manageUserData": "Manage user data", - "backToUsers": "Back to users", - "manageTabAccount": "Account", - "manageTabHosts": "Hosts", - "manageTabCredentials": "Credentials", - "manageTabSessions": "Sessions", - "manageTabDanger": "Danger", - "manageEditorBack": "Back to {{username}}'s data", - "dataLockedBadge": "LOCKED", - "dataLockedNotice": "{{username}}'s data stays locked until they next log in. Their hosts, credentials and snippets cannot be viewed or edited until then.", - "resetPasswordTitle": "Reset Password", - "resetPasswordExternalOnly": "This user signs in through an external provider and has no password.", - "resetPasswordPlaceholder": "New password", - "resetPasswordBtn": "Reset", - "resetPasswordWorking": "Resetting...", - "resetPasswordSuccess": "Password reset", - "resetPasswordSuccessWiped": "Password reset. The user's encrypted data was wiped.", - "resetPasswordFailed": "Failed to reset password", - "resetPasswordConfirmWipe": "{{username}} has not logged in since the encryption upgrade, so their data cannot be recovered. Resetting now will delete their hosts, credentials and snippets. Continue?", - "manageApiKeys": "API Keys", - "apiKeyNamePlaceholder": "Key name", - "apiKeyCopyNotice": "Copy this key now, it won't be shown again.", - "noApiKeysForUser": "No API keys", - "apiKeyDeleteFailed": "Failed to delete API key", - "exportUserData": "Data Export", - "exportUserDataDesc": "Download this user's hosts, credentials and file manager data as JSON. Secrets are decrypted.", - "exportUserDataSuccess": "User data exported", - "exportUserDataFailed": "Failed to export user data", "hostsCount_one": "{{count}} host", "hostsCount_other": "{{count}} hosts", - "addHostForUser": "Add Host", - "noHostsForUser": "This user has no hosts", - "connectToHost": "Connect", - "deleteHostConfirm": "Delete host \"{{name}}\" belonging to {{username}}?", - "hostDeletedSuccess": "Host deleted", - "hostDeleteFailed": "Failed to delete host", "credentialsCount_one": "{{count}} credential", "credentialsCount_other": "{{count}} credentials", - "addCredentialForUser": "Add Credential", - "noCredentialsForUser": "This user has no credentials", - "deleteCredentialConfirm": "Delete credential \"{{name}}\" belonging to {{username}}?", - "credentialDeletedSuccess": "Credential deleted", - "credentialDeleteFailed": "Failed to delete credential", - "noSessionsForUser": "No active sessions", - "deleteSuccessorLabel": "Hand over hosts and credentials to", - "deleteSuccessorMe": "Me (the deleting admin)", - "deleteSuccessorNone": "Nobody, delete them", - "deleteSuccessorDesc": "Everything this user shared keeps working under the new owner; choosing nobody removes their hosts, credentials and shares.", - "deleteUserDangerDesc": "Permanently delete {{username}} and all of their data (hosts, credentials, snippets, history). This cannot be undone.", - "deleteUserConfirm": "Permanently delete {{username}} and all of their data?", - "deleteUserAdminBlocked": "Remove admin status before deleting this user.", - "createRoleRequired": "Name and display name are required", - "createRoleSuccess": "Role \"{{name}}\" created", - "createRoleFailed": "Failed to create role", - "apiKeyNameRequired": "Key name is required", - "apiKeyUserRequired": "User ID is required", - "apiKeyCreatedSuccess": "API key \"{{name}}\" created", - "apiKeyCreateFailed": "Failed to create API key", - "exportSuccess": "Database exported successfully", - "exportFailed": "Database export failed", - "importSelectFile": "Please select a file first", - "importCompleted": "Import completed: {{total}} items imported, {{skipped}} skipped", - "importFailed": "Import failed: {{error}}", - "importError": "Database import failed", - "sectionHostDefaults": "Host Defaults", "rolePermissions": { "count_one": "{{count}} permission", - "count_other": "{{count}} permissions", - "editAction": "Edit permissions", - "loadError": "Failed to load the permissions catalog", - "saved": "Role permissions saved", - "saveError": "Failed to save role permissions", - "save": "Save", - "saving": "Saving...", - "pluginDisabled": "Plugin disabled", "groups": { "hosts": "Hosts", "credentials": "Credentials", "admin": "Administration" } - }, - "notificationPrivateEndpoints": "Allowed private notification hosts", - "notificationPrivateEndpointsDesc": "Exact private hosts that notification channels may contact. Separate them with commas.", - "updateNotificationEndpointsFailed": "Failed to update notification endpoint allowlist", - "secondFactorsSectionTitle": "Second factors", - "secondFactorsNone": "No second factors enrolled", - "secondFactorUnavailable": "Unavailable", - "resetSecondFactors": "Reset second factors", - "resetSecondFactorsConfirm": "Remove every second factor for {{username}}? They can sign in with their password or SSO and enrol again.", - "secondFactorsResetSuccess": "Second factors reset", - "secondFactorsResetFailed": "Failed to reset second factors", - "passwordLoginForced": "Password login is turned off, but no other login method is enabled, so it stays on for now. Nobody gets locked out.", - "sslNotRenewed": "Nothing renews this certificate. It expires {{date}}. Turn on automatic renewal in the ACME Certificates section, or upload a new one before then.", - "sslSelfSigned": "Self-signed certificate made by Termix. Browsers will warn about it.", - "sslRenewedBy": "Renewed automatically by {{plugin}}", - "sslIssuer": "Issued by {{issuer}}", - "sslNames": "Covers {{names}}", - "sslManualTitle": "Upload a certificate", - "updateExternalAutoProvisionFailed": "Failed to update the auto-create setting", - "hostTags": "Predefined host tags", - "hostTagsDesc": "Tags every user sees as suggestions in the host editor. Press Space or Enter to add one. Removing a tag here does not remove it from hosts.", - "hostTagsError": "Could not load or save host tag suggestions.", - "revokeAllSessionsConfirm": "Sign {{username}} out everywhere?", - "revokeSessionConfirm": "Sign out this session?", - "revokeSession": "Sign out", - "deleteRoleConfirm": "Delete the {{name}} role?", - "revokeKeyConfirm": "Revoke the API key {{name}}?", - "revokeKey": "Revoke" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Where", - "who": "Who", - "hostLabel": "Host", - "hostPlaceholder": "192.168.1.1 or example.com", - "portLabel": "Port", - "usernameLabel": "Username", - "usernamePlaceholder": "username", - "authLabel": "Auth", - "passwordLabel": "Password", - "passwordPlaceholder": "password", - "privateKeyLabel": "Private Key", - "privateKeyPlaceholder": "Paste private key...", - "credentialLabel": "Credential", - "credentialPlaceholder": "Select a saved credential", - "protocolLabel": "Protocol", - "domainLabel": "Domain", - "domainPlaceholder": "optional", - "connectToAction": "Connect to {{name}}", - "sshProtocol": "SSH", - "noTarget": "Nothing installed can connect to this host type" + "usernameLabel": "Username" }, "keybindings": { - "description": "Bind keys to actions in the terminal and the app, or change the built-in shortcuts.", - "defaultsHeading": "Built-in Shortcuts", - "fixedHeading": "App Shortcuts", - "fixed": { - "splitRight": "Split right", - "splitDown": "Split down", - "zoomPane": "Zoom the focused pane", - "navigatePane": "Move between panes", - "nextTab": "Next tab", - "previousTab": "Previous tab", - "jumpTab": "Jump to tab", - "previousView": "Back to the previous sidebar view", - "fullscreen": "Toggle fullscreen" - }, - "customHeading": "Custom Shortcuts", - "addBinding": "Add Shortcut", - "addBindingTitle": "Add Shortcut", - "editBindingTitle": "Edit Shortcut", - "loading": "Loading...", - "noCustomBindings": "No custom shortcuts yet", - "defaultBadge": "Default", - "customizedBadge": "Customized", - "customize": "Customize", - "resetToDefault": "Reset to default", - "resetAllToDefaults": "Reset all to defaults", - "cancel": "Cancel", - "saveBinding": "Save Shortcut", - "saveError": "Failed to save keyboard shortcuts", - "pressKeysToRecord": "Key combination", - "pressKeysPlaceholder": "Click and press keys", - "recording": "Press keys...", - "comboRequiredError": "Press a key combination first", - "conflictWarning": "This combination is already bound to {{combo}}. Saving will make both fire.", - "actionLabel": "Action", "actionNextTab": "Switch to next tab", "actionPreviousTab": "Switch to previous tab", "actionOpenCommandPalette": "Open quick search", - "actionReconnectSession": "Reconnect current session", - "unavailableAction": "{{type}} (not available)", - "actionRequiredError": "Pick an action first", - "deleteConfirm": "Delete this keybinding?", - "resetAllConfirm": "Reset every keybinding to its default?" + "actionReconnectSession": "Reconnect current session" }, "userProfile": { - "storageModeLocal": "Browser", - "storageModeCloud": "Database", - "storageModeDescription": "Browser stores settings in this browser only. Database syncs to the server and loads on any device.", - "resetToDefaults": "Reset to Defaults", - "resetToDefaultsSuccess": "Settings reset to defaults.", - "storageModeSwitch": "Preference Storage", - "sectionAccount": "Account", - "desktopProfileTitle": "This device only", - "desktopProfileDescription": "This profile lives on this device and signs in by itself. Link it to a Termix server to use the same hosts and settings on every device.", - "sectionInterface": "Interface", - "interfacePresetDesc": "How much detail Termix shows. Every feature stays available.", "preset_simple": "Simple", "preset_simple_desc": "The essentials only.", "preset_balanced": "Balanced", "preset_balanced_desc": "The standard layout.", "preset_advanced": "Advanced", "preset_advanced_desc": "Everything on, densely packed.", - "presetClearOverrides": "Reset all", - "presetOverridesTitle": "Customized", - "presetRevertArea": "Revert", - "presetConfirmTitle": "Switch to {{preset}}?", - "presetConfirmDesc": "This resets your sidebar, navigation, dashboard layout, terminal toolbar and file manager view. Your hosts, credentials and homepage are not touched.", - "presetConfirmApply": "Apply preset", - "runSetupAgainDesc": "Walk through the first-run setup again.", - "runSetupAgainButton": "Run setup", "uiArea_chrome": "App chrome", "uiArea_hostList": "Host list", "uiArea_credentialList": "Credential list", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "File manager", "uiArea_hostEditor": "Host editor", - "sectionAppearance": "Appearance", - "sectionSecurity": "Security", - "sectionApiKeys": "API Keys", - "sectionData": "Data", - "usernameLabel": "Username", - "roleLabel": "Role", - "roleAdministrator": "Administrator", - "authMethodLabel": "Auth Method", - "authMethodLocal": "Local", - "twoFaLabel": "2FA", - "twoFaOn": "On", - "twoFaOff": "Off", - "versionLabel": "Version", - "cliTitle": "Termix CLI", - "cliDescription": "Open terminals, run commands and move files from your own shell.", - "cliLearnMore": "Learn More", - "deleteAccount": "Delete Account", - "deleteAccountDescription": "Permanently delete your account", - "deleteButton": "Delete", - "deleteAccountPermanent": "This action is permanent and cannot be undone.", - "deleteAccountWarning": "All sessions, hosts, credentials, and settings will be permanently deleted.", - "confirmPasswordDeletePlaceholder": "Enter your password to confirm", "languageLabel": "Language", "themeLabel": "Theme", "fontSizeLabel": "Font Size", "interfaceFontLabel": "Interface Font", "interfaceFontDescription": "Changes the application interface font. Terminal profiles keep their own font settings.", "accentColorLabel": "Accent Color", - "keyboardShortcuts": "Keyboard Shortcuts", - "keyboardShortcutsDescription": "Customize terminal copy, paste, and command shortcuts", - "manageShortcuts": "Manage", - "commandPalette": "Command Palette", - "commandPaletteDesc": "Enable keyboard shortcut", - "reopenTabsOnLogin": "Reopen Tabs on Login", - "reopenTabsOnLoginDesc": "Restore your open tabs when you log in or refresh the page, even from another device", - "confirmTabClose": "Confirm Tab Close", - "confirmTabCloseDesc": "Ask before closing terminal tabs", - "showTabNumbers": "Show Tab Numbers", - "showTabNumbersDesc": "Display a number on each tab to help tell them apart", - "settingsAppRail": "App Rail", - "sidebarSettingsMoved": "Host sidebar display settings have moved to the Customize sidebar panel, opened from the Hosts toolbar.", - "showHostTags": "Show Host Tags", - "showHostTagsDesc": "Display tags in host list", - "statusColors": "Real Status Colors", - "statusColorsDesc": "Use green/red for online/offline status instead of the accent color", - "pinAppRail": "Pin App Rail", - "pinAppRailDesc": "Keep the left sidebar app rail always expanded instead of expanding on hover", - "expandAppRailOnHover": "Expand App Rail on Hover", - "expandAppRailOnHoverDesc": "Allow the left sidebar app rail to expand when the pointer moves over it", - "appRailHoverPushesContent": "Push content when it expands", - "appRailHoverPushesContentDesc": "Make room for the expanded rail instead of opening it over the page. Open sessions, like remote desktop, resize each time", - "showPinAppRailButton": "Show Pin App Rail Button", - "showPinAppRailButtonDesc": "Show a button in the app rail to pin it open. Off by default.", - "settingsNavigation": "Navigation", - "navigationTabsDesc": "Choose which tabs appear in the app rail", - "settingsUpdates": "Updates", - "disableUpdateChecks": "Disable Update Checks", - "disableUpdateChecksDesc": "Stop checking for updates", - "changePassword": "Change Password", - "currentPasswordLabel": "Current Password", - "currentPasswordPlaceholder": "Current password", - "newPasswordLabel": "New Password", - "newPasswordPlaceholder": "New password", - "confirmPasswordLabel": "Confirm New Password", - "confirmPasswordPlaceholder": "Confirm new password", - "updatePassword": "Update Password", - "createApiKeyTitle": "Create API Key", - "createApiKeyDescription": "Generate a new API key for programmatic access.", - "apiKeyNameLabel": "Name", - "apiKeyNamePlaceholder": "e.g. CI Pipeline", - "expiryDateLabel": "Expiry Date", - "optional": "optional", - "cancel": "Cancel", - "createKey": "Create Key", - "apiKeyCreatedWarning": "Key created - copy it now, it won't be shown again.", - "copyApiKey": "Copy API key", - "copiedToClipboard": "Copied to clipboard", "apiKeyCount_one": "{{count}} key", - "apiKeyCount_other": "{{count}} keys", - "newKey": "New Key", - "noApiKeys": "No API keys yet.", - "apiKeyActive": "Active", - "apiKeyUsageHint": "Include your key in the", - "apiKeyUsageHintHeader": "header.", - "apiKeyPermissionsHint": "Keys inherit the permissions of the creating user.", - "exportData": "Export My Data", - "exportDataDesc": "Download a backup of your hosts, credentials, and settings to transfer to another device", - "export": "Export", - "exporting": "Exporting...", - "importData": "Import My Data", - "importDataDesc": "Restore your hosts, credentials, and settings from a .sqlite backup file", - "importDataSelected": "Selected: {{name}}", - "selectFile": "Select File", - "changeFile": "Change", - "import": "Import", - "importing": "Importing...", - "exportSuccess": "Data exported successfully", - "exportFailed": "Data export failed", - "importSelectFile": "Please select a file first", - "importCompleted": "Import completed: {{total}} items imported, {{skipped}} skipped", - "importFailed": "Import failed: {{error}}", - "roleUser": "User", - "authMethodDual": "Dual Auth", - "authMethodExternal": "External", - "done": "Done", - "apiKeyNameRequired": "Key name is required", - "apiKeyCreated": "API key \"{{name}}\" created", - "apiKeyCreateFailed": "Failed to create API key", - "apiKeyUser": "User", - "apiKeyExpires": "Expires", - "apiKeyRevoked": "API key \"{{name}}\" revoked", - "apiKeyRevokeFailed": "Failed to revoke API key", - "passwordFieldsRequired": "Current and new passwords are required", - "passwordMismatch": "Passwords do not match", - "passwordTooShort": "Password must be at least 6 characters", - "passwordUpdated": "Password updated successfully", - "passwordUpdateFailed": "Failed to update password", - "deletePasswordRequired": "Password is required to delete your account", - "deleteFailed": "Failed to delete account", - "deleting": "Deleting...", "colorPickerTooltip": "Open color picker", "themeSystem": "System", "themeLight": "Light", @@ -1755,24 +1122,11 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Signed in to {{server}}", - "linkedProfileDescription": "This device uses your account on the server and keeps a copy of your data, so it still works offline.", - "manageSync": "Manage sync", - "setUpSync": "Link to a server", - "settingsTabsAndShortcuts": "Tabs and Shortcuts", - "onBetaTitle": "You are on a beta", - "onBetaDescription": "Thanks for testing. Tell us what breaks.", - "tryBetaTitle": "Try new features early", - "tryBetaDescription": "Join the beta program in Updates.", - "sendBetaFeedback": "Send beta feedback", - "openUpdates": "Updates" + "themeGruvbox": "Gruvbox" } } }, "looks": { - "builtinLayout": "Classic", - "layoutLabel": "Layout", "layoutHint": "How the whole app is laid out. Themes and layouts come from plugins.", "defaultsLabel": "Default for everyone", "defaultsHint": "What people see until they choose their own layout or theme.", @@ -1793,8 +1147,6 @@ "retry": "Try again", "reset": "Reset to the default look", "resetEveryone": "Reset the default for everyone", - "settings": "Open Settings", - "back": "Back", "update": "Update {{name}} to {{version}}", "disable": "Turn off {{name}}", "install": "Find layouts and themes", @@ -1815,7 +1167,10 @@ "incompatible": "The plugin that provides this layout does not work with this version of Termix.", "failed": "The layout failed to start.", "crashed": "The layout crashed twice while drawing the app." - } + }, + "noLayout": "No layout is set", + "restore": "Restore the bundled {{name}}", + "restoreFailed": "Could not restore the bundled copy" } }, "plugins": { @@ -2076,8 +1431,7 @@ "hasDependents": "{{name}} is needed by {{list}}. Turn those off or uninstall them first.", "missingDependencies": "{{name}} needs {{list}}, which is not installed.", "consentChanged": "What this plugin asks for changed since you looked. Check the list again.", - "upload": "Could not read {{name}}: {{error}}", - "developerMode": "Could not change developer mode: {{error}}" + "upload": "Could not read {{name}}: {{error}}" }, "data": { "title": "Stored data", @@ -2202,13 +1556,7 @@ "browsePlugins": "Browse plugins", "loading": "Loading", "developer": { - "title": "Plugin developer mode", - "hint": "Lets admins install plugins from a .tmxplug file in the Plugins tab, without the registry checks. Use it to build and test your own plugins.", - "enableTitle": "Turn on developer mode?", - "enableBody": "Admins will be able to install plugins from files that Termix has not checked. A plugin can do anything its capabilities allow, so only turn this on while you are building or testing plugins.", - "enable": "Turn on", - "installFromFile": "Install from file", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS is set, so installing from a file stays blocked." + "installFromFile": "Install from file" }, "count": { "downloads_one": "{{formatted}} download", @@ -2246,71 +1594,7 @@ "secretSet": "Set", "secretNotSet": "Not set", "secretReplace": "Replace", - "pluginSettingsSaved": "Settings saved", - "pluginSettingsInvalid": "Some settings could not be saved. Check the highlighted fields.", - "pluginSettingsSaveFailed": "Failed to save settings", - "pluginSettingsLoadFailed": "Failed to load settings", - "featureUnavailable": "{{name}} is unavailable right now. These settings are saved but will not take effect.", - "account": "Account", - "security": "Security", - "apiKeys": "API keys", - "data": "Data and sync", - "interface": "Interface", - "appearance": "Appearance", - "keybindings": "Keybindings", - "adminGeneral": "General", - "adminUsers": "Users", - "adminSessions": "Sessions", - "adminRoles": "Roles", - "adminHostDefaults": "Host defaults", - "adminBranding": "Branding", - "adminDatabase": "Database", - "adminSsl": "SSL", - "adminApiKeys": "API keys", - "adminAuditLog": "Audit log", - "bandYou": "Your account", - "bandApp": "This app", - "bandPlugins": "Plugins", - "bandInstance": "This server", - "searchPlaceholder": "Search settings", - "noResults": "No settings match.", - "pages": "Pages", - "instanceSettings": "Server settings", - "nothingHere": "Nothing to set here.", - "searchPage": "Search this page", - "noPageMatches": "Nothing on this page matches.", - "updates": { - "title": "Updates", - "betaProgram": "Beta program", - "betaIntro": "Betas are early builds of the next Termix version. They come out on Tuesdays and Fridays when there is something new to try. They can have bugs, and your feedback is what makes the stable release better.", - "termixBetas": "Termix betas", - "termixBetasHint": "Tell me about new betas, not only stable releases.", - "runningBetaBuild": "You are running a beta build. To leave, switch back to a stable image or installer.", - "howToInstall": "How to get the beta", - "desktopInstall": "Download the beta installer and install it over this one.", - "downloadBeta": "Download {{version}}", - "dockerInstall": "Change your image to the beta tag and restart the container:", - "copy": "Copy", - "copied": "Copied", - "copyFailed": "Could not copy", - "learnMore": "Learn more about betas", - "feedback": "Feedback", - "feedbackHint": "Found a bug or have an idea? It goes straight to the developers with your version filled in.", - "sendFeedback": "Send beta feedback", - "releases": "Releases", - "thisVersion": "This version", - "newestStable": "Newest stable", - "newestBeta": "Newest beta", - "noRelease": "None right now", - "pluginBetas": "Plugin betas", - "pluginBetasIntro": "Each plugin can use betas on its own. To try one, open it and press Try beta.", - "openPlugins": "Open Plugins", - "waitingForStable": "Back on stable. Stays on {{version}} until a stable release is newer.", - "backToStable": "Back to stable", - "allPluginsBeta": "Use betas for all plugins", - "allPluginsStable": "All plugins back to stable", - "saveFailed": "Could not save the change" - } + "featureUnavailable": "{{name}} is unavailable right now. These settings are saved but will not take effect." }, "managerCard": { "refresh": "Refresh", @@ -2320,83 +1604,13 @@ "filter": "Filter..." }, "sync": { - "server": "Termix server", - "account": "Account", - "status": "Status", - "never": "never", - "justNow": "just now", "minutesAgo_one": "{{count}} minute ago", "minutesAgo_other": "{{count}} minutes ago", "hoursAgo_one": "{{count}} hour ago", "hoursAgo_other": "{{count}} hours ago", - "actionFailed": "That did not work. Try again.", - "unlinkedTitle": "This device only", - "unlinkedBody": "Termix works on its own on this device. Link it to your Termix server to keep everything in step.", - "unlinkedPointHosts": "Your hosts, credentials, snippets and settings follow you to every device.", - "unlinkedPointOffline": "Everything still works when the server cannot be reached, and catches up later.", - "unlinkedPointAccount": "You sign in with your server account, and hosts people shared with you show up here too.", - "linkButton": "Link to a server", - "state": { - "syncing": "Syncing", - "offline": "Server not reachable", - "error": "Sync stopped", - "signedOut": "Signed out", - "synced": "Synced {{time}}" - }, "pending_one": "{{count}} change waiting to sync", "pending_other": "{{count}} changes waiting to sync", - "signInAgain": "Sign in again", - "syncNow": "Sync now", - "unlink": "Unlink", - "unlinked": "This device is no longer linked", - "unlinkTitle": "Unlink this device?", - "unlinkDescription": "It stops syncing and signs out of the server. Hosts shared with you by others are removed from this device either way.", - "unlinkKeepTitle": "Keep my data here", - "unlinkKeepBody": "Your hosts, credentials and settings stay on this device and keep working on their own.", - "unlinkRemoveTitle": "Remove synced data", - "unlinkRemoveBody": "Everything that came from the server is removed from this device. Hosts kept on this device only stay.", - "conflictsTitle": "Conflicts", - "conflictsDescription": "These were changed here and on the server at the same time. The server version is in use. Keep yours to send it to the server instead.", - "keepMine": "Keep mine", - "keepServer": "Keep server", - "errorsTitle": "Not synced", - "errorsDescription": "The server did not accept these changes. They stay on this device.", - "errorPermission": "Your account on the server is not allowed to make this change.", - "retry": "Try again", - "whatSyncs": "What syncs", - "whatSyncsDescription": "Turn off anything you want to keep on this device only.", - "coreGroup": "Termix", - "notOnServer": "The server does not have this", - "notOnDevice": "Not on this device yet", - "localOnlyHint": "You can also keep single hosts or folders on this device from their settings.", - "originTitle": "Where connections start", - "originDescription": "Connect to hosts from this device, or through the server. You can change this per host.", - "originLocal": "This device", - "originRemote": "The server", - "entities": { - "hosts": "Hosts", - "sshCredentials": "Credentials", - "sshFolders": "Folders", - "userPreferences": "Preferences", - "pluginUserSettings": "Plugin settings", - "sharedHosts": "Hosts shared with you", - "sharedCredentials": "Credentials shared with you", - "vaultProfiles": "Vault profiles", - "snippetFolders": "Snippet folders", - "snippets": "Snippets", - "dashboardServiceLinks": "Service links", - "homepageItems": "Homepage items", - "networkTopology": "Network map", - "workspaces": "Workspaces", - "hostDefaults": "Host defaults", - "hostDefaultsAdmin": "Server host defaults", - "aiProviders": "AI providers", - "homepageLayouts": "Homepage layouts", - "accountProfile": "Account profile" - }, "proxy": { - "title": "Reverse proxy", - "description": "Only needed when something like Cloudflare Access or a login page sits in front of your server.", "headersTitle": "Extra headers", "headersHint": "Sent with every request to the server, for example a Cloudflare Access service token.", "headerName": "Header name", @@ -2409,8 +1623,7 @@ "username": "Username", "password": "Password", "allowInvalidCertificate": "Trust a self-signed certificate", - "allowInvalidCertificateHint": "Only for your own server, when its certificate is not from a known authority.", - "saved": "Saved" + "allowInvalidCertificateHint": "Only for your own server, when its certificate is not from a known authority." }, "problems": { "invalidUrl": "That does not look like a web address.", @@ -2448,6 +1661,27 @@ "linking": "Linking and running the first sync...", "linked": "Linked. Your data is syncing now.", "signedInAgain": "Signed in. Sync is running again." + }, + "entities": { + "hosts": "Hosts", + "sshCredentials": "Credentials", + "sshFolders": "Folders", + "userPreferences": "Preferences", + "pluginUserSettings": "Plugin settings", + "sharedHosts": "Hosts shared with you", + "sharedCredentials": "Credentials shared with you", + "vaultProfiles": "Vault profiles", + "snippetFolders": "Snippet folders", + "snippets": "Snippets", + "dashboardServiceLinks": "Service links", + "homepageItems": "Homepage items", + "networkTopology": "Network map", + "workspaces": "Workspaces", + "hostDefaults": "Host defaults", + "hostDefaultsAdmin": "Server host defaults", + "aiProviders": "AI providers", + "homepageLayouts": "Homepage layouts", + "accountProfile": "Account profile" } }, "hostDefaults": { @@ -2464,31 +1698,12 @@ "resetTitle": "This host sets its own value. Click to use the default from {{source}} again", "clearTitle": "Set at this level. Click to clear it and use {{source}} instead", "inheritedTitle": "Follows the default from {{source}}", - "titleAdmin": "Server host defaults", - "titleUser": "My host defaults", - "titleFolder": "Folder defaults: {{name}}", - "descriptionAdmin": "Defaults for every host on this server. A user's own defaults, a folder's defaults or the host itself can still set a different value. Change a field to set it here, or clear it to leave it unset.", - "descriptionUser": "Defaults for all of your hosts, over the server's. A folder or the host itself can still set a different value. Change a field to set it here, or clear it to leave it unset.", - "descriptionFolder": "Defaults for the hosts in this folder and its subfolders, over your own. A host can still set a different value. Change a field to set it here, or clear it to leave it unset.", - "save": "Save defaults", "saved_one": "Defaults saved. {{count}} host was updated.", "saved_other": "Defaults saved. {{count}} hosts were updated.", - "savedInBackground": "Defaults saved. Hosts are being updated in the background.", "appliedToHosts_one": "{{count}} host was updated with the new defaults.", "appliedToHosts_other": "{{count}} hosts were updated with the new defaults.", - "saveFailed": "Could not save the defaults", - "loadFailed": "Could not load the defaults", - "confirmTitle": "Save defaults?", "confirmChanges_one": "{{count}} host follows these defaults and will change.", "confirmChanges_other": "{{count}} hosts follow these defaults and will change.", - "confirmNoChanges": "No existing host changes. New hosts will start with these defaults.", - "menuMyDefaults": "My host defaults", - "folderDefaultsAction": "Folder defaults", - "adminSectionDescription": "Set the defaults every host on this server follows, for every setting a host has, including each plugin's. Users and folders can set their own on top, and any host can still use its own value.", - "editServerDefaults": "Edit server defaults", - "resetMenu": "Reset", - "resetAll": "Everything to defaults", - "resetCore": "Connection and SSH to defaults", "resetDone_one": "{{count}} host now follows its defaults.", "resetDone_other": "{{count}} hosts now follow their defaults." }, @@ -2502,47 +1717,13 @@ "fields": { "secretSaved": "Saved. Type to replace it." }, - "sharing": { - "revokeConfirm": "Remove access for {{name}}?", - "revoke": "Remove access" - }, "manage": { - "searchSettings": "Search settings", - "noMatchingSettings": "No settings match.", - "sections": "Sections", - "sectionNeedsAttention": "Something here needs attention", "needsAttention_one": "One thing needs attention.", "needsAttention_other": "{{count}} things need attention.", - "bandHost": "Host", - "bandFeatures": "Protocols and plugins", - "bandCredential": "Credential", - "sshConnection": "SSH connection", - "errorAddressRequired": "An address is required.", - "errorPortRange": "Use a port between 1 and 65535.", - "defaults": "Defaults", - "searchHosts": "Search hosts", - "searchCredentials": "Search credentials", - "searchDefaults": "Search defaults", - "addCredential": "Add credential", - "nothingMatches": "Nothing matches", - "nothingYet": "Nothing here yet", - "emptyHostsHint": "Add a host and it shows up here, in whatever folder you give it.", - "emptyCredentialsHint": "Credentials you save can be reused by any host.", - "collapse": "Collapse", - "expand": "Expand", - "cannotBeUndone": "This cannot be undone.", - "hostNotFound": "Couldn't find that host. Try refreshing the list.", "hostCount_one": "{{count}} host", "hostCount_other": "{{count}} hosts", "credentialCount_one": "{{count}} credential", - "credentialCount_other": "{{count}} credentials", - "newHost": "New host", - "newCredential": "New credential", - "advanced": "Advanced", - "pickHost": "Pick a host to edit", - "pickCredential": "Pick a credential to edit", - "pickDefaults": "Pick a level of defaults to edit", - "pickHint": "Everything about a connection lives here, grouped so you can find it." + "credentialCount_other": "{{count}} credentials" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/af_ZA.json b/src/ui/locales/translated/af_ZA.json index 8fcef3bb1..94bfbdec7 100644 --- a/src/ui/locales/translated/af_ZA.json +++ b/src/ui/locales/translated/af_ZA.json @@ -141,7 +141,6 @@ "continue": "Gaan voort", "error": "Fout", "unsavedChanges": "Onbewaarde veranderinge", - "more": "Meer", "loading": "Laai tans...", "host": "Gasheer", "selectHost": "Kies 'n gasheer...", @@ -154,7 +153,6 @@ "cancel": "Kanselleer", "username": "Gebruikersnaam", "login": "Teken in", - "logout": "Teken uit", "register": "Registreer", "password": "Wagwoord", "confirmPassword": "Bevestig wagwoord", @@ -165,8 +163,6 @@ "rename": "Hernoem", "edit": "Wysig", "confirm": "Bevestig", - "next": "Volgende", - "previous": "Vorige", "refresh": "Verfris", "language": "Taal", "backendReconnected": "Bedienerverbinding herstel", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Lees oor elkeen" }, "desktopUpdates": { - "title": "Buro-toepassing", - "mode": "Opdaterings", - "modeHint": "Hoe hierdie toepassing nuwe weergawes kry.", - "manualModeHint": "Hierdie kopie kan nie self opdateer nie, so Termix vertel jou net wanneer 'n nuwe weergas beskikbaar is.", "modeAutomatic": "Outomaties", "modePrompt": "Vra eers", "modeNever": "Nooit", @@ -247,15 +239,6 @@ "onboardingTitle": "Toepassing-opdaterings", "onboardingBody": "Die buro-toepassing kan nou self opdateer. Kies hoe jy wil hê nuwe weergawes moet aankom. Jy kan dit later in Instellings, Opdaterings verander.", "onboardingManual": "Hierdie kopie van die toepassing is op 'n manier geïnstalleer wat nie self kan opdateer nie, so Termix sal jou vertel wanneer 'n nuwe weergawe beskikbaar is met 'n skakel om dit af te laai.", - "status": "Weergawe {{version}}", - "statusIdle": "Nog nie gecontroleer nie", - "statusChecking": "Soek na opdaterings", - "statusAvailable": "Weergawe {{version}} is beskikbaar", - "statusDownloading": "Laai {{version}} af ({{progress}}%)", - "statusReady": "Weergawe {{version}} is gereed. Herbegin om dit te installeer.", - "statusUpToDate": "Jy het die nuutste weergawe", - "statusError": "Kon nie na opdaterings soek nie. Probeer later weer.", - "checkNow": "Soek nou", "download": "Laai af", "restart": "Herbegin nou", "later": "Later", @@ -269,26 +252,11 @@ "terminal": "Terminaal", "close": "Maak toe", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopieer wagwoord", - "copySudoPassword": "Kopieer sudo-wagwoord", - "passwordCopied": "Wagwoord na knipbord gekopieer", - "failedToCopyPassword": "Kon nie wagwoord kopieer nie", - "refreshTab": "Verfris verbinding", - "renameTab": "Hernoem oortjie", "dashboard": "Kontrolepaneel", "quickConnect": "Vinnige Koppeling", - "openAsTabHint": "Ctrl+klik of middel-klik om as oortjie oop te maak", - "openAsTab": "Maak oop as oortjie", - "openInRightDock": "Maak oop in regterdok", - "closeRightDock": "Maak regterdok toe", - "toggleRightDock": "Wissel regterdok", "hosts": "Gasheer", "credentials": "Aanmeldingsgegewens", "connections": "Verbindings", - "keepSideMenuOpen": "Hou Menu Oop", - "collapseSideMenu": "Vou Menu In", - "roleAdministrator": "Administrateur", - "roleUser": "Gebruiker", "sync": "Sinkroniseer", "reconnectDisconnectedTerminals": "Herstel al die ontkoppelde terminale", "reconnectingTerminals_one": "Herstel tans {{count}} terminaal", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "Kon nie herstel van {{count}} terminale begin nie", "fullscreenUnsupported": "Volledige skerm word nie deur hierdie blaaier ondersteun nie", "fullscreenFailed": "Kon nie na volledige skerm wissel nie", - "resetSidebarWidth": "Stel breedte terug", - "collapseSidebar": "Vou sybalk in", - "openSidebar": "Maak sybalk oop", "confirmCloseHost": "Maak {{host}} toe?", - "enterFullscreen": "Gaan na volledige skerm (Ctrl+Shift+F)", - "exitFullscreen": "Verlaat volledige skerm (Ctrl+Shift+F)", - "group": { - "objects": "Joune", - "tools": "Hulpmiddels", - "system": "Stelsel" - }, - "searchEverything": "Soek gasheer, oortjies en aksies", - "search": "Soek", "hiddenCount_one": "{{count}} versteek", "hiddenCount_other": "{{count}} versteek", - "showInRail": "Wys in sybalk", - "moveUp": "Beweeg op", - "moveDown": "Beweeg af", - "resetRailOrder": "Stel volgorde terug", - "hideFromRail": "Versteek van sybalk", - "openSettings": "Maak instellings oop", "settings": "Instellings", "manage": "Bestuur", - "mobileNavigation": "Navigasie", "plugins": "Plugins" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "Invoer gedoen: {{imported}} ingevoer, {{updated}} opgedateer, {{failed}} misluk", "importHostsFailed": "Kon nie gasheer invoer nie" }, - "commandPalette": { - "searchPlaceholder": "Soek gasheer, opdragte, of instellings...", - "quickActions": "Vinnige Aksies", - "navigation": "Navigasie", - "orShortcut": "of", - "addNewHost": "Voeg nuwe gasheer by", - "adminSettings": "Admin-instellings", - "addCredential": "Voeg geloofsbriewe by", - "recentActivity": "Onlangse aktiwiteit", - "serversAndHosts": "Bedieners & gasheer", - "noHostsFound": "Geen gasheer gevind wat ooreenstem met \"{{search}}\" nie", - "links": "Skakels", - "navigate": "Navigeer", - "select": "Kies", - "pluginActions": "Meer aksies", - "noTargetTab": "Geen terminaal-oortjie is oop nie", - "documentation": "Dokumentasie" - }, "splitScreen": { "title": "Gesplete skerm", "defaultLabel": "Splitsing {{number}}", "splitRight": "Splits regs", "splitDown": "Splits af", - "addToSplit": "Voeg by {{split}}", "paneEmptyItem": "Paneel {{index}}: leeg", "paneItem": "Paneel {{index}}: {{label}}", "paneNumber": "Paneel {{index}}", - "newPaneRight": "Nuwe paneel regs", - "newPaneBelow": "Nuwe paneel onder", "emptyTitle": "Leë paneel", "emptyHint": "Kies iets om hier te wys. Terwyl hierdie paneel geselekteer is, sal alles wat jy van die sybalk oopmaak, ook hier oopmaak.", "openTabs": "Oop oortjies", @@ -962,7 +890,6 @@ "clearPane": "Maak hierdie paneel leeg", "zoom": "Zoom paneel", "unzoom": "Herstel uitleg", - "unsplit": "Maak splitsing ongedaan", "layouts": "Uitlegte", "applyLayout": "Verander uitleg", "maxPanes_one": "'n Opdeling kan tot {{count}} paneel hou", @@ -971,8 +898,6 @@ "dropHere": "Laat val om hier te wys", "paneActions": "Paneelaksies", "dividerHint": "Sleep om te herskaal. Dubbelklik om gelyk te maak.", - "openInSplit": "Maak oop in splitsing", - "openInNewSplit": "Nuwe splitsing met die huidige oortjie", "shortcuts": "Sneltoetse", "shortcutNavigate": "Beweeg tussen panele", "presets": { @@ -986,23 +911,6 @@ "grid6": "Rooster van ses" } }, - "connections": { - "noConnections": "Geen verbinding nie", - "noConnectionsDesc": "Maak 'n terminaal, bestuursprogram of afgeleë skerm oop om verbinding hier te sien", - "connectedFor": "Verbind vir {{duration}}", - "connected": "Verbind", - "disconnected": "Ontkoppel", - "reconnect": "Herverbind", - "sectionOpen": "Oop", - "sectionBackground": "Agtergrond", - "backgroundDesc": "Sessies bly vir {{minutes}} minute na ontkoppeling en kan hervat word.", - "expiresIn": "Verval in {{duration}}", - "search": "Soek verbindings...", - "noSearchResults": "Geen verbindings pas by jou soektog nie", - "rename": "Hernoem sessie", - "forgetConfirm": "Beëindig die agtergrondsessie vir {{name}}?", - "forget": "Beëindig sessie" - }, "sshAuth": { "totpRequired": "Twee-Faktor Verifikasie Vereis", "totpCodeLabel": "Verifikasiekode", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "sleutelwagwoord", "pastePrivateKey": "Plak jou privaat sleutel hier...", - "enterPassword": "Voer jou wagwoord in", - "apiKeyName": "bv. CI-pyplyn", - "credentialName": "bv. Produksie SSH-sleutel", - "optionalDetails": "Opsionele besonderhede...", - "sshUsername": "bv. root of deploy", - "hostAddress": "10.0.0.1 of voorbeeld.com", - "hostName": "bv. Webbediener Produksie" + "enterPassword": "Voer jou wagwoord in" }, "dashboard": { - "title": "Kontrolepaneel", - "github": "GitHub", - "reportBug": "Rapporteer 'n fout", - "discord": "Discord", - "docs": "Dokumentasie", - "donate": "Doneer", - "serverOverview": "Bedieneroorsig", - "version": "Weergawe", "updateAvailable": "Opdatering beskikbaar", - "beta": "Beta", - "uptime": "Bedryfstyd", - "database": "Databasis", - "healthy": "Gesond", - "error": "Fout", - "totalHosts": "Totale gasheerbedieners", - "totalCredentials": "Totale geloofsbriewe", - "recentActivity": "Onlangse aktiviteit", - "reset": "Herstel", - "noRecentActivity": "Geen onlangse aktiviteit nie", - "quickActions": "Vinnige aksies", - "addHost": "Voeg gasheerbediener by", - "addCredential": "Voeg geloofsbryf by", - "adminSettings": "Admin-instellings", - "userProfile": "Gebruikerprofiel", - "serverStats": "Bedienerstatistieke", - "customizeLayout": "Pas kontrolepaneel aan", - "justNow": "net nou" + "beta": "Beta" }, "dashboardTab": { "stable": "STABIL", - "registerNewServer": "Registreer 'n nuwe bediener", - "storeSshKeysOrPasswords": "Stoor SSH-sleutels of wagwoorde", - "manageUsersAndRoles": "Bestuur gebruikers en rolle", - "manageYourAccount": "Bestuur jou rekening", - "hostStatus": "Gasheerbedienerstatus", - "noHostsConfigured": "Geen gasheerbedieners geconfigureer nie", - "checking": "TOETS", - "commandPalette": "Opdragpalet", - "done": "Klaar", - "clear": "Vee uit", - "dragToResizeColumns": "Sleep om kolomme te hergroot", - "hostsAvailable": "Hosts Beskikbaar", - "removeSection": "Verwyder afdeling", - "addSection": "Voeg 'n afdeling by", - "allSectionsShown": "Alles is reeds op die dashboard.", - "fromPlugins": "Van plugins", - "dropHere": "Laat 'n afdeling hier val", - "dragToReorder": "Sleep afdelings om hulle te herskik", - "clearActivityConfirm": "Vee jou onlangse aktiwiteit uit?", - "resetConfirm": "Stel die dashboard terug na die standaard uitleg?", "onlineCount_one": "{{count}} aanlyn", "onlineCount_other": "{{count}} aanlyn", "hostCount_one": "{{count}} host", "hostCount_other": "{{count}} hosts" }, "admin": { - "sectionGeneral": "Algemeen", - "sectionUsers": "Gebruikers", - "sectionSessions": "Sessies", - "sectionRoles": "Rolle", - "sectionDatabase": "Databasis", - "sectionApiKeys": "API-sleutels", - "sectionAuditLog": "Ouditlogboek", - "sectionSsl": "HTTPS-sertifikaat", - "sectionBranding": "Witmerk", - "brandingAppName": "Toepassingnaam", - "brandingAppNameDesc": "Word op die aanmeldskerm en blaaier-oortjie vertoon. Laat leeg om \"Termix\" te gebruik.", - "brandingTagline": "Slogan", - "brandingTaglineDesc": "Word onder die toepassingsnaam op die aanmeldskerm vertoon. Laat leeg om die standaard slogan te gebruik.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG of WEBP, tot 750 KB. Vervang die standaard ikoon op die aanmeldskerm en blaaier-oortjie.", - "brandingLogoUpload": "Laai logo op", - "brandingLogoReset": "Stel terug na standaard", - "brandingLogoInvalid": "Ongeldige beeld. Gebruik 'n PNG, JPEG of WEBP-lêer tot 750 KB.", - "brandingSaved": "Witmerk-instellings gestoor", - "brandingSaveFailed": "Kon nie witmerk-instellings stoor nie", - "sslDescription": "Die sertifikaat wat Termix oor HTTPS bedien. Laai jou eie hier op, of kry en vernuwe een van Let's Encrypt in die ACME-sertifikate-afdeling.", - "sslDocsLink": "Bekyk SSL-dokumentasie", - "sslCertStatus": "Sertifikaatstatus", - "sslCertStatusNone": "Geen sertifikaat nie", - "sslCertStatusValid": "Geldig", - "sslCertStatusExpiring": "Verval binnekort", - "sslCertStatusExpired": "Verstryk", - "sslCertExpiresAt": "Verval op {{date}}", - "sslInfoNote": "Nadat 'n sertifikaat uitgereik of opgelaai is, sal Termix outomaties HTTPS op SSL_PORT (standaard 8443) inskakel, in addisionele tot die bestaande HTTP-poort. Maak seker dat hierdie poort gepubliseer/gemapping is na hierdie houer sodat dit bereikbaar is.", - "sslManualCert": "Sertifikaat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Privaat sleutel (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Plak jou bestaande sertifikaat en privaat sleutel, insluitend 'n volledige ketting as dit deur jou CA vereis word.", - "sslManualUpload": "Laai op en installeer sertifikaat", - "sslManualUploadLoading": "Laai sertifikaat op...", - "sslManualUploadSuccess": "Sertifikaat suksesvol opgelaai en geïnstalleer", - "sslManualUploadFailed": "Sertifikaat-oplaai het misluk", - "sslManualRequiresFields": "Sertifikaat en privaat sleutel is vereis", - "auditLogTotal": "{{total}} totale inskrywings", - "auditLogEmpty": "Geen ouditlogboek-inskrywings gevind nie", - "auditLogSuccess": "Sukses", - "auditLogFailed": "Misluk", - "auditLogClearFilters": "Vee filters uit", - "auditLogPage": "Bladsy {{page}} van {{totalPages}} ({{total}} totaal)", - "auditLogIp": "IP", - "auditLogResourceId": "Hulpbrong ID", - "auditLogFilterUser": "Gebruiker", - "auditLogFilterAction": "Aksie", - "auditLogFilterResourceType": "Hulpbrontipe", - "auditLogFilterStatus": "Status", - "auditLogFilterFrom": "Van", - "auditLogFilterTo": "Tot", - "auditLogFilterAll": "Alles", - "allowRegistration": "Laat Gebruikeraanmelding Toe", - "allowRegistrationDesc": "Laat nuwe gebruikers self registreer met 'n gebruikersnaam en wagwoord", - "allowPasswordLogin": "Laat Wagwoordinlogging Toe", - "allowPasswordLoginDesc": "Gebruikersnaam/wagwoord-inlogging", - "externalAutoProvision": "Skep eksterne rekeninge outomaties", - "externalAutoProvisionDesc": "Skep 'n rekening die eerste keer iemand inlog deur middel van 'n eksterne inlogmetode soos SSO of LDAP. As dit af is, kan slegs mense wat reeds 'n rekening het, op daardie manier inlog", - "secondFactorAfterExternalLogin": "Vra vir 'n tweede faktor na eksterne inlogpogings (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Af: 'n ingeskrewe tweede faktor word slegs gevra na wagwoord- en ander plaaslike inlogpogings, soos voorheen. Aan: dit word gevra na elke inlogmetode, insluitend SSO en LDAP.", - "allowPasswordReset": "Laat Wagwoordherstel Toe", - "allowPasswordResetDesc": "Herstelkode via Docker-logboeke", - "auditForwardingTitle": "Stuur na SIEM", - "auditForwardingDesc": "Stuur 'n kopie van elke ouditinskrywing na 'n eksterne versamelaar as NDJSON. Plaaslike logboeke bly die bron van waarheid.", - "auditForwardingEnvNotice": "'n Omgewingsveranderlike stel ook verryging op; die URL wat hier gestoor is, het voorrang.", - "auditForwardingToken": "Draer-teken (opsioneel)", - "auditForwardingTokenStored": "Draer-teken (gestoor)", - "auditForwardingSaved": "Ouditverrygingsinstellings gestoor", - "auditForwardingSaveError": "Kon nie ouditverrygingsinstellings stoor nie", - "sessionTimeout": "Sessie-tydperk", - "hours": "ure", - "sessionTimeoutRange": "Min 1u, maks 720u", - "monitoringDefaults": "Moniteringstandaarde", - "statusCheck": "Statuskontrole", - "sec": "sek", - "logLevel": "Logvlak", "usersCount_one": "{{count}} gebruiker", - "usersCount_other": "{{count}} gebruikers", - "searchUsers": "Soek gebruikers...", - "noUsers": "Geen gebruikers nie", - "noUsersMatch": "Geen gebruikers stem ooreen met jou soektog nie", - "pageOf": "Bladsy {{page}} van {{total}}", - "createUser": "Skep", - "newRole": "Nuwe Rol", - "roleName": "Naam", - "roleDisplayName": "Vertoonnaam", - "roleDescription": "Beskrywing", "rolesCount_one": "{{count}} rol", - "rolesCount_other": "{{count}} rolle", - "createRole": "Skep", - "creating": "Besig om te skep...", - "exportDatabase": "Voer Databasis Uit", - "exportDatabaseDesc": "Laai 'n draagbare SQLite-terugvoer van alle gasheer, geloofsbriewe en instellings af", - "export": "Voer Uit", - "exporting": "Besig om uit te voer...", - "importDatabase": "Voer Databasis In", - "importDatabaseDesc": "Herstel van 'n draagbare .sqlite-terugvoer op enige databasisagterkant", - "importDatabaseSelected": "Geselekteer: {{name}}", - "selectFile": "Kies Lêer", - "changeFile": "Verander", - "import": "Voer In", - "importing": "Besig om in te voer...", "apiKeysCount_one": "{{count}} sleutel", - "apiKeysCount_other": "{{count}} sleutels", - "apiKeysDocsLink": "Bekyk dokumentasie", - "apiKeysCliHint": "Gebruik 'n API-sleutel met die Termix CLI om bedieners vanaf jou terminaal te bestuur.", - "apiKeysCliLink": "Bekyk CLI-dokumentasie", - "newApiKey": "Nuwe API-sleutel", - "apiKeyCreatedWarning": "Sleutel geskep - kopieer dit nou, dit sal nie weer vertoon word nie.", - "apiKeyName": "Naam", - "apiKeyUser": "Gebruiker", - "apiKeySelectUser": "Kies 'n gebruiker...", - "apiKeyExpiresAt": "Verval op", - "createKey": "Skep Sleutel", - "apiKeyNoExpiry": "Geen verval nie", - "revokedBadge": "HERROEP", - "authTypeDual": "Dubbele Verifikasie", - "authTypeExternal": "Ekstern", - "authTypeLocal": "Plaaslik", - "adminStatusAdministrator": "Administrateur", - "adminStatusRegularUser": "Gewone Gebruiker", - "adminBadge": "ADMIN", - "systemBadge": "STEL", - "customBadge": "AANPAS", - "youBadge": "JY", "sessionsActive_one": "{{count}} aktief", - "sessionsActive_other": "{{count}} aktief", - "sessionActive": "Aktief: {{time}}", - "sessionExpires": "Verval: {{time}}", - "revokeAll": "Almal", - "revokeAllSessionsSuccess": "Alles sessies vir gebruiker is herroep", - "revokeAllSessionsFailed": "Kon nie sessies herroep nie", - "revokeSessionFailed": "Kon nie sessie herroep nie", - "addRole": "Voeg rol by", - "noCustomRoles": "Geen aangepaste rolle gedefinieer nie", - "removeRoleFailed": "Kon nie rol verwyder nie", - "assignRoleFailed": "Kon nie rol toewys nie", - "userAdminAccess": "Administrateur", - "userAdminAccessDesc": "Volledige toegang tot alle administrateur-instellings", - "userRoles": "Rolle", - "revokeAllUserSessions": "Herroep Alle Sessies", - "revokeAllUserSessionsDesc": "Dwing heraanmelding op alle toestelle", - "revoke": "Herroep", - "deleteUserWarning": "Die verwydering van hierdie gebruiker is permanent.", - "deleteUser": "Verwyder {{username}}", - "deleting": "Verwyder...", - "deleteUserFailed": "Kon nie gebruiker verwyder nie", - "deleteUserSuccess": "Gebruiker \"{{username}}\" verwyder", - "deleteRoleSuccess": "Rol \"{{name}}\" verwyder", - "revokeKeySuccess": "Sleutel \"{{name}}\" herroep", - "revokeKeyFailed": "Kon nie sleutel herroep nie", - "copiedToClipboard": "Na knipbord gekopieer", - "done": "Klaar", - "createUserTitle": "Skep Gebruiker", - "createUserDesc": "Skep 'n nuwe plaaslike rekening.", - "createUserUsername": "Gebruikersnaam", - "createUserPassword": "Wagwoord", - "createUserPasswordHint": "Minimum 6 karakters.", - "createUserEnterUsername": "Voer gebruikersnaam in", - "createUserSubmit": "Skep Gebruiker", - "editUserTitle": "Bestuur Gebruiker: {{username}}", - "editUserDesc": "Redigeer rolle, administrateur-status, sessies en rekening-instellings.", - "editUserUsername": "Gebruikersnaam", - "editUserAuthType": "Verifikasietipe", - "editUserAdminStatus": "Administrateur-status", - "editUserUserId": "Gebruiker-ID", - "linkAccountTitle": "Koppel Rekeninge", - "linkAccountDesc": "Voeg die eksterne rekening {{username}} saam met 'n bestaande plaaslike rekening.", - "linkAccountDescLocal": "Koppel 'n plaaslike rekening {{username}} met 'n bestaande slegs-eksterne rekening.", - "linkAccountWarningTitle": "Dit sal:", - "linkAccountEffect1": "Vee die slegs-eksterne rekening uit", - "linkAccountEffect2": "Voeg die eksterne aanmelding by die teikenrekening", - "linkAccountEffect3": "Laat beide eksterne en wagwoord-aanmelding toe", - "linkAccountTargetUsername": "Plaaslike Rekening Gebruikersnaam", - "linkAccountTargetPlaceholder": "Voer die plaaslike rekening se gebruikersnaam in om aan te koppel", - "linkAccountExternalUsername": "Eksterne Rekening Gebruikersnaam", - "linkAccountExternalPlaceholder": "Voer die slegs-eksterne rekening se gebruikersnaam in om saam te voeg", - "linkAccountExternalNotFound": "Geen slegs-eksterne rekening met daardie gebruikersnaam gevind nie", - "linkAccounts": "Koppel Rekeninge", - "linkAccountSuccess": "Rekeninge suksesvol gekoppel", - "linkAccountFailed": "Kon nie rekeninge koppel nie", - "linkAccountInProgress": "Koppel...", - "unlinkAccountTitle": "Ontkoppel Eksterne Aanmelding", - "unlinkAccountDesc": "Verwyder eksterne aanmelding van {{username}}. Hulle sal slegs met hul wagwoord kan aanmeld.", - "unlinkAccountWarning": "Dit sal eksterne aanmelding van hierdie rekening verwyder. Die gebruiker moet 'n wagwoord gestel hê om voort te gaan met aanmelding.", - "unlinkAccount": "Ontkoppel Eksterne Aanmelding", - "unlinkAccountInProgress": "Ontkoppel...", - "unlinkAccountSuccess": "Eksterne aanmelding ontkoppel", - "unlinkAccountFailed": "Kon nie eksterne aanmelding ontkoppel nie", - "updateRegistrationFailed": "Kon nie registrasie-instelling opdateer nie", - "updatePasswordLoginFailed": "Kon nie wagwoord-aanmelding instelling opdateer nie", - "updateSecondFactorAfterExternalLoginFailed": "Kon nie tweede faktor instelling opdateer nie", - "updatePasswordResetFailed": "Kon nie wagwoord-reset instelling opdateer nie", - "sessionTimeoutRange2": "Sessie-tydskryf moet tussen 1 en 720 uur wees", - "sessionTimeoutSaved": "Sessie-tydskryf gestoor", - "sessionTimeoutSaveFailed": "Kon nie sessie-tydskryf stoor nie", - "monitoringIntervalInvalid": "Ongeldige intervalwaardes", - "monitoringSaved": "Moniteringsinstellings gestoor", - "monitoringSaveFailed": "Kon nie moniteringsinstellings stoor nie", - "logLevelUpdateFailed": "Kon nie logvlak opdateer nie", - "createUserRequired": "Gebruikersnaam en wagwoord is verpligtend", - "createUserPasswordTooShort": "Wagwoord moet ten minste 6 karakters lank wees", - "createUserSuccess": "Gebruiker \"{{username}}\" geskep", - "createUserFailed": "Kon nie gebruiker skep nie", - "updateAdminStatusFailed": "Kon nie admin-status opdateer nie", - "allSessionsRevoked": "Alle sessies ingetrek", - "revokeSessionsFailed": "Kon nie sessies intrek nie", - "manageUserData": "Bestuur gebruikersdata", - "backToUsers": "Terug na gebruikers", - "manageTabAccount": "Rekening", - "manageTabHosts": "Gashere", - "manageTabCredentials": "Aanmeldingsgegewens", - "manageTabSessions": "Sessies", - "manageTabDanger": "Gevaar", - "manageEditorBack": "Terug na {{username}} se data", - "dataLockedBadge": "GESLOT", - "dataLockedNotice": "{{username}} se data bly gesluit totdat hulle die volgende keer aanmeld. Hul gashere, aanmeldingsgegewens en snippets kan nie voorheen besigtig of redigeer word nie.", - "resetPasswordTitle": "Stel Wagwoord Op Nuut", - "resetPasswordExternalOnly": "Hierdie gebruiker meld aan deur 'n eksterne verskaffer en het geen wagwoord nie.", - "resetPasswordPlaceholder": "Nuwe wagwoord", - "resetPasswordBtn": "Stel Op Nuut", - "resetPasswordWorking": "Stel op nuut...", - "resetPasswordSuccess": "Wagwoord op nuut gestel", - "resetPasswordSuccessWiped": "Wagwoord op nuut gestel. Die gebruiker se versleutelde data is uitgewis.", - "resetPasswordFailed": "Kon nie wagwoord op nuut stel nie", - "resetPasswordConfirmWipe": "{{username}} het nie aangemeld sedert die versleuteling-opgradering nie, dus kan hul data nie herstel word nie. As jy nou opstel, sal hul gashere, aanmeldingsgegewens en snippets verwyder word. Gaan voort?", - "manageApiKeys": "API-sleutels", - "apiKeyNamePlaceholder": "Sleutelnaam", - "apiKeyCopyNotice": "Kopieer hierdie sleutel nou, dit sal nie weer vertoon word nie.", - "noApiKeysForUser": "Geen API-sleutels nie", - "apiKeyDeleteFailed": "Kon nie API-sleutel verwyder nie", - "exportUserData": "Data-eksport", - "exportUserDataDesc": "Laai hierdie gebruiker se gasheer, geloofsbriewe en lêerbestuurder-data af as JSON. Geheime word ontsleutel.", - "exportUserDataSuccess": "Gebruikerdata geëksporteer", - "exportUserDataFailed": "Kon nie gebruikerdata eksporteer nie", "hostsCount_one": "{{count}} gasheer", "hostsCount_other": "{{count}} gasheer", - "addHostForUser": "Voeg Gasheer by", - "noHostsForUser": "Hierdie gebruiker het geen gasheer nie", - "connectToHost": "Koppel", - "deleteHostConfirm": "Verwyder gasheer \"{{name}}\" wat aan {{username}} behoort?", - "hostDeletedSuccess": "Gasheer verwyder", - "hostDeleteFailed": "Kon nie gasheer verwyder nie", "credentialsCount_one": "{{count}} geloofsbriew", "credentialsCount_other": "{{count}} geloofsbriewe", - "addCredentialForUser": "Voeg Geloofsbryf by", - "noCredentialsForUser": "Hierdie gebruiker het geen geloofsbriewe nie", - "deleteCredentialConfirm": "Verwyder geloofsbryf \"{{name}}\" wat aan {{username}} behoort?", - "credentialDeletedSuccess": "Geloofsbryf verwyder", - "credentialDeleteFailed": "Kon nie geloofsbryf verwyder nie", - "noSessionsForUser": "Geen aktiewe sessies nie", - "deleteSuccessorLabel": "Hand oor gasheer en geloofsbriewe aan", - "deleteSuccessorMe": "My (die admin wat verwyder)", - "deleteSuccessorNone": "Niemand, verwyder hulle nie", - "deleteSuccessorDesc": "Alles wat hierdie gebruiker gedeel het, bly werk onder die nuwe eienaar; as jy niemand kies nie, word hul gasheer, geloofsbriewe en deelings verwyder.", - "deleteUserDangerDesc": "Verwyder {{username}} en al hul data (gasheer, geloofsbriewe, fragmente, geskiedenis) permanent. Dit kan nie ongedaan gemaak word nie.", - "deleteUserConfirm": "Verwyder {{username}} en al hul data permanent?", - "deleteUserAdminBlocked": "Verwyder admin-status voordat jy hierdie gebruiker verwyder.", - "createRoleRequired": "Naam en vertoonnaam is verpligtend", - "createRoleSuccess": "Rol \"{{name}}\" geskep", - "createRoleFailed": "Kon nie rol skep nie", - "apiKeyNameRequired": "Sleutelsnaam is verpligtend", - "apiKeyUserRequired": "Gebruiker-ID is verpligtend", - "apiKeyCreatedSuccess": "API-sleutel \"{{name}}\" geskep", - "apiKeyCreateFailed": "Kon nie API-sleutel skep nie", - "exportSuccess": "Databasis suksesvol geëksporteer", - "exportFailed": "Databasis-eksport het misluk", - "importSelectFile": "Kies eers 'n lêer", - "importCompleted": "Invoer voltooi: {{total}} items ingevoer, {{skipped}} oorgeslaan", - "importFailed": "Invoer het misluk: {{error}}", - "importError": "Databasis-invoer het misluk", - "sectionHostDefaults": "Gasheer-standaarde", "rolePermissions": { "count_one": "{{count}} toestemming", - "count_other": "{{count}} toestemmings", - "editAction": "Redigeer toestemmings", - "loadError": "Kon nie die toestemmingskatalogus laai nie", - "saved": "Rol-toestemmings gestoor", - "saveError": "Kon nie rol-toestemmings stoor nie", - "save": "Stoor", - "saving": "Besig om te stoor...", - "pluginDisabled": "Plugin gedeaktiveer", "groups": { "hosts": "Gasheer", "credentials": "Geloofsbriewe", "admin": "Administrasie" } - }, - "notificationPrivateEndpoints": "Toegestane privaat kennisgewingsgasheer", - "notificationPrivateEndpointsDesc": "Presiese privaat gasheer wat kennisgewingskanale mag kontak. Skei hulle met kommas.", - "updateNotificationEndpointsFailed": "Kon nie die kennisgewings-eindpunt-toegelyste lys opdateer nie", - "secondFactorsSectionTitle": "Tweede faktore", - "secondFactorsNone": "Geen tweede faktore ingeskrewe nie", - "secondFactorUnavailable": "Onbeskikbaar", - "resetSecondFactors": "Stel tweede faktore terug", - "resetSecondFactorsConfirm": "Verwyder elke tweede faktor vir {{username}}? Hulle kan aanmeld met hul wagwoord of SSO en weer inskryf.", - "secondFactorsResetSuccess": "Tweede faktore herstel", - "secondFactorsResetFailed": "Kon nie tweede faktore herstel nie", - "passwordLoginForced": "Wagwoordaanmelding is afgeskakel, maar geen ander aanmeldmetode is ingeskakel nie, dus bly dit vir nou aan. Niemand word uitgesluit nie.", - "sslNotRenewed": "Niks hernu hierdie sertifikaat nie. Dit verval op {{date}}. Skakel outomatiese hernuwing in die ACME-sertifikate-seksie in, of laai een voor daardie tyd op.", - "sslSelfSigned": "Selfondertekende sertifikaat gemaak deur Termix. Blaaiers sal daaroor waarsku.", - "sslRenewedBy": "Outomaties hernu deur {{plugin}}", - "sslIssuer": "Uitgereik deur {{issuer}}", - "sslNames": "Bedek {{names}}", - "sslManualTitle": "Laai 'n sertifikaat op", - "updateExternalAutoProvisionFailed": "Kon nie die outomatiese skepping-instelling opdateer nie", - "hostTags": "Vooraf gedefinieerde gasheermerkers", - "hostTagsDesc": "Merkers wat elke gebruiker as voorstelle in die gasheerediteur sien. Druk Spasie of Enter om een by te voeg. As jy 'n merker hier verwyder, word dit nie van gasheer verwyder nie.", - "hostTagsError": "Kon nie gasheermerker-voorstelle laai of stoor nie.", - "revokeAllSessionsConfirm": "Meld {{username}} oral af?", - "revokeSessionConfirm": "Meld hierdie sessie af?", - "revokeSession": "Meld af", - "deleteRoleConfirm": "Vee die {{name}}-rol uit?", - "revokeKeyConfirm": "Onttrek die API-sleutel {{name}}?", - "revokeKey": "Onttrek" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Waar", - "who": "Wie", - "hostLabel": "Gasheer", - "hostPlaceholder": "192.168.1.1 of example.com", - "portLabel": "Poort", - "usernameLabel": "Gebruikersnaam", - "usernamePlaceholder": "gebruikersnaam", - "authLabel": "Verifikasie", - "passwordLabel": "Wagwoord", - "passwordPlaceholder": "wagwoord", - "privateKeyLabel": "Privaatsleutel", - "privateKeyPlaceholder": "Plak privaat sleutel...", - "credentialLabel": "Aanmeldgegewens", - "credentialPlaceholder": "Kies 'n gestoorde aanmeldgegewens", - "protocolLabel": "Protokol", - "domainLabel": "Domein", - "domainPlaceholder": "opsioneel", - "connectToAction": "Maak verbinding met {{name}}", - "sshProtocol": "SSH", - "noTarget": "Niks wat geïnstalleer is kan met hierdie gasheertipe verbind nie" + "usernameLabel": "Gebruikersnaam" }, "keybindings": { - "description": "Koppel sleutels aan aksies in die terminaal en die app, of verander die ingeboude kortpaaie.", - "defaultsHeading": "Ingeboude kortpaaie", - "fixedHeading": "App-kortpaaie", - "fixed": { - "splitRight": "Splits regs", - "splitDown": "Splits af", - "zoomPane": "Zoom die gefokusde paneel", - "navigatePane": "Beweeg tussen panele", - "nextTab": "Volgende oortjie", - "previousTab": "Vorige oortjie", - "jumpTab": "Spring na oortjie", - "previousView": "Terug na die vorige sybalkaansig", - "fullscreen": "Wissel na volskerm" - }, - "customHeading": "Aangepaste kortpaaie", - "addBinding": "Voeg kortpad by", - "addBindingTitle": "Voeg kortpad by", - "editBindingTitle": "Wysig kortpad", - "loading": "Laai...", - "noCustomBindings": "Nog geen aangepaste kortpaaie nie", - "defaultBadge": "Verstek", - "customizedBadge": "Aangepas", - "customize": "Pas aan", - "resetToDefault": "Stel terug na verstek", - "resetAllToDefaults": "Stel alles terug na verstek", - "cancel": "Kanselleer", - "saveBinding": "Stoor kortpad", - "saveError": "Kon nie toetsbordkortpade stoor nie", - "pressKeysToRecord": "Sleutelkombinasie", - "pressKeysPlaceholder": "Klik en druk sleutels", - "recording": "Druk sleutels...", - "comboRequiredError": "Druk eers 'n sleutelkombinasie", - "conflictWarning": "Hierdie kombinasie is reeds aan {{combo}} gekoppel. As jy dit stoor, sal beide aktiwasies aktiver.", - "actionLabel": "Aksie", "actionNextTab": "Wissel na volgende tab", "actionPreviousTab": "Wissel na vorige tab", "actionOpenCommandPalette": "Maak vinnige soek oop", - "actionReconnectSession": "Herstel huidige sessie", - "unavailableAction": "{{type}} (nie beskikbaar nie)", - "actionRequiredError": "Kies eers 'n aksie", - "deleteConfirm": "Verwyder hierdie sleutelbinding?", - "resetAllConfirm": "Stel elke sleutelbinding terug na sy verstek?" + "actionReconnectSession": "Herstel huidige sessie" }, "userProfile": { - "storageModeLocal": "Blaaier", - "storageModeCloud": "Databasis", - "storageModeDescription": "Blaaier stoor instellings slegs in hierdie blaaier. Databasis sinkroniseer na die bediener en laai op enige toestel.", - "resetToDefaults": "Stel terug na verstek", - "resetToDefaultsSuccess": "Instellings is teruggestel na verstek.", - "storageModeSwitch": "Voorkeursberging", - "sectionAccount": "Rekening", - "desktopProfileTitle": "Slegs hierdie toestel", - "desktopProfileDescription": "Hierdie profiel is op hierdie toestel en meld onafhanklik aan. Koppel dit aan 'n Termix-bediener om dieselfde gasheer en instellings op elke toestel te gebruik.", - "sectionInterface": "Koppelvlak", - "interfacePresetDesc": "Hoeveel besonderhede Termix wys. Elke funksie bly beskikbaar.", "preset_simple": "Eenvoudig", "preset_simple_desc": "Slegs die essensiële.", "preset_balanced": "Gebalanseerd", "preset_balanced_desc": "Die standaard uitleg.", "preset_advanced": "Gevorderd", "preset_advanced_desc": "Alles aan, dig gepak.", - "presetClearOverrides": "Stel alles terug", - "presetOverridesTitle": "Aangepas", - "presetRevertArea": "Maak ongedaan", - "presetConfirmTitle": "Wissel na {{preset}}?", - "presetConfirmDesc": "Hierdie stel jou sybalk, navigasie, dashboard-uitleg, terminal-balk en lêerbestuur-aansig terug. Jou gasheer, geloofsbriewe en tuisblad word nie geraak nie.", - "presetConfirmApply": "Pas voorafinstelling toe", - "runSetupAgainDesc": "Gaan weer deur die eerste-opstelling.", - "runSetupAgainButton": "Voer opstelling uit", "uiArea_chrome": "Toepassing-omhulsel", "uiArea_hostList": "Gasheerlys", "uiArea_credentialList": "Geloofsbriewe-lys", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Terminaal", "uiArea_fileManager": "Lêerbestuurder", "uiArea_hostEditor": "Gasheer-redigeerder", - "sectionAppearance": "Voorkoms", - "sectionSecurity": "Beveiliging", - "sectionApiKeys": "API-sleutels", - "sectionData": "Data", - "usernameLabel": "Gebruikersnaam", - "roleLabel": "Rol", - "roleAdministrator": "Administrateur", - "authMethodLabel": "Verifikasie-metode", - "authMethodLocal": "Plaaslik", - "twoFaLabel": "2FA", - "twoFaOn": "Aan", - "twoFaOff": "Af", - "versionLabel": "Weergawe", - "cliTitle": "Termix CLI", - "cliDescription": "Maak terminale oop, voer opdragte uit en beweeg lêers vanaf jou eie shell.", - "cliLearnMore": "Leer meer", - "deleteAccount": "Vee rekening uit", - "deleteAccountDescription": "Vee jou rekening permanent uit", - "deleteButton": "Vee uit", - "deleteAccountPermanent": "Hierdie aksie is permanent en kan nie ongedaan gemaak word nie.", - "deleteAccountWarning": "Alle sessies, gasheer, geloofsbriewe en instellings sal permanent verwyder word.", - "confirmPasswordDeletePlaceholder": "Voer jou wagwoord in om te bevestig", "languageLabel": "Taal", "themeLabel": "Tema", "fontSizeLabel": "Lettergrootte", "interfaceFontLabel": "Koppelvlaklettertipe", "interfaceFontDescription": "Verander die toepassing se koppelvlaklettertipe. Terminaalprofiele behou hul eie lettertipe-instellings.", "accentColorLabel": "Aksentkleur", - "keyboardShortcuts": "Sneltoetse", - "keyboardShortcutsDescription": "Pas terminaal-kopieer, plak en opdrag-sneltoetse aan", - "manageShortcuts": "Bestuur", - "commandPalette": "Opdragpalet", - "commandPaletteDesc": "Aktiveer sneltoets", - "reopenTabsOnLogin": "Heropen oortjies by aanmelding", - "reopenTabsOnLoginDesc": "Herstel jou oop oortjies wanneer jy aanmeld of die bladsy vernuwe, selfs vanaf 'n ander toestel", - "confirmTabClose": "Bevestig oortjie-sluiting", - "confirmTabCloseDesc": "Vra voor die sluit van terminaal-oortjies", - "showTabNumbers": "Wys oortjienommers", - "showTabNumbersDesc": "Wys 'n nommer op elke oortjie om hulle makliker te onderskei", - "settingsAppRail": "Toepingsbalk", - "sidebarSettingsMoved": "Gasheer-sybalke se vertooninstellings is na die Pas Aan sybalk-paneel verskuif, wat oopgemaak word vanaf die Gasheer-balk.", - "showHostTags": "Wys gasheer-merkers", - "showHostTagsDesc": "Wys merkers in gasheerlys", - "statusColors": "Regte statuskleure", - "statusColorsDesc": "Gebruik groen/rooi vir aanlyn/aflyn-status in plaas van die aksentkleur", - "pinAppRail": "Speld toepingsbalk vas", - "pinAppRailDesc": "Hou die linkersybalke-toepingsbalk altyd uitgebrei in plaas daarvan om dit slegs by hover uit te brei", - "expandAppRailOnHover": "Brei toepingsbalk uit by hover", - "expandAppRailOnHoverDesc": "Laat die linkersybalke-toepingsbalk uitbrei wanneer die aanwyser daaroor beweeg", - "appRailHoverPushesContent": "Druk inhoud uit wanneer dit uitbrei", - "appRailHoverPushesContentDesc": "Maak plek vir die uitgebreide spoor in plaas daarvan om dit oor die bladsy oop te maak. Oop sessies, soos afgeleë bureblad, word elke keer herskaal", - "showPinAppRailButton": "Wys speld-toepingsbalk-knoppie", - "showPinAppRailButtonDesc": "Wys 'n knoppie in die toepingsbalk om dit oop te speld. Standaard af.", - "settingsNavigation": "Navigasie", - "navigationTabsDesc": "Kies watter oortjies in die toepingsbalk verskyn", - "settingsUpdates": "Opdaterings", - "disableUpdateChecks": "Deaktiveer opdateringskontroles", - "disableUpdateChecksDesc": "Stop met die soek na opdaterings", - "changePassword": "Verander wagwoord", - "currentPasswordLabel": "Huidige wagwoord", - "currentPasswordPlaceholder": "Huidige wagwoord", - "newPasswordLabel": "Nuwe wagwoord", - "newPasswordPlaceholder": "Nuwe wagwoord", - "confirmPasswordLabel": "Bevestig nuwe wagwoord", - "confirmPasswordPlaceholder": "Bevestig nuwe wagwoord", - "updatePassword": "Dateer wagwoord op", - "createApiKeyTitle": "Skep API-sleutel", - "createApiKeyDescription": "Genereer 'n nuwe API-sleutel vir programmatiese toegang.", - "apiKeyNameLabel": "Naam", - "apiKeyNamePlaceholder": "bv. CI-pyplyn", - "expiryDateLabel": "Vervaldatum", - "optional": "opsioneel", - "cancel": "Kanselleer", - "createKey": "Skep Sleutel", - "apiKeyCreatedWarning": "Sleutel geskep - kopieer dit nou, dit sal nie weer vertoon word nie.", - "copyApiKey": "Kopieer API-sleutel", - "copiedToClipboard": "Gekopieer na knipbord", "apiKeyCount_one": "{{count}} sleutel", - "apiKeyCount_other": "{{count}} sleutels", - "newKey": "Nuwe Sleutel", - "noApiKeys": "Nog geen API-sleutels nie.", - "apiKeyActive": "Aktief", - "apiKeyUsageHint": "Sluit jou sleutel in die", - "apiKeyUsageHintHeader": "kop.", - "apiKeyPermissionsHint": "Sleutels erf die toestemmings van die skeppende gebruiker.", - "exportData": "Voer My Data Uit", - "exportDataDesc": "Laai 'n rugsteunkopie van jou gasheer, geloofsbriewe en instellings af om na 'n ander toestel oor te dra", - "export": "Voer Uit", - "exporting": "Voer uit...", - "importData": "Voer My Data In", - "importDataDesc": "Stel jou gasheer, geloofsbriewe en instellings herstel uit 'n .sqlite rugsteunkopieerlêer", - "importDataSelected": "Geselekteer: {{name}}", - "selectFile": "Kies Lêer", - "changeFile": "Verander", - "import": "Voer In", - "importing": "Voer in...", - "exportSuccess": "Data suksesvol uitgevoer", - "exportFailed": "Data-uitvoer misluk", - "importSelectFile": "Kies asseblief eers 'n lêer", - "importCompleted": "Invoer voltooi: {{total}} items ingevoer, {{skipped}} oorgeslaan", - "importFailed": "Invoer misluk: {{error}}", - "roleUser": "Gebruiker", - "authMethodDual": "Dubbele Verifikasie", - "authMethodExternal": "Eksterne", - "done": "Klaar", - "apiKeyNameRequired": "Sleutelsnaam is verpligtend", - "apiKeyCreated": "API-sleutel \"{{name}}\" geskep", - "apiKeyCreateFailed": "Kon nie API-sleutel skep nie", - "apiKeyUser": "Gebruiker", - "apiKeyExpires": "Verval", - "apiKeyRevoked": "API-sleutel \"{{name}}\" ingetrek", - "apiKeyRevokeFailed": "Kon nie API-sleutel intrek nie", - "passwordFieldsRequired": "Huidige en nuwe wagwoorde is verpligtend", - "passwordMismatch": "Wagwoorde stem nie ooreen nie", - "passwordTooShort": "Wagwoord moet ten minste 6 karakters wees", - "passwordUpdated": "Wagwoord suksesvol opgedateer", - "passwordUpdateFailed": "Kon nie wagwoord opdateer nie", - "deletePasswordRequired": "Wagwoord is verpligtend om jou rekening te verwyder", - "deleteFailed": "Kon nie rekening verwyder nie", - "deleting": "Verwyder...", "colorPickerTooltip": "Maak kleurkiezer oop", "themeSystem": "Stelsel", "themeLight": "Lig", @@ -1755,18 +1122,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Aanmeld by {{server}}", - "linkedProfileDescription": "Hierdie toestel gebruik jou rekening op die bediener en hou 'n kopie van jou data, sodat dit steeds aflyn werk.", - "manageSync": "Bestuur sinkronisering", - "setUpSync": "Koppel aan 'n bediener", - "settingsTabsAndShortcuts": "Oortjies en kortpaaie", - "onBetaTitle": "Jy is op 'n beta-weergawe", - "onBetaDescription": "Dankie dat jy toets. Vertel ons wat breek.", - "tryBetaTitle": "Probeer nuwe funksies vroeg", - "tryBetaDescription": "Sluit aan by die beta-program in Opdaterings.", - "sendBetaFeedback": "Stuur beta-terugvoer", - "openUpdates": "Opdaterings" + "themeGruvbox": "Gruvbox" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "{{name}} word deur {{list}} benodig. Skakel daardie eers af of deïnstalleer hulle.", "missingDependencies": "{{name}} het {{list}} nodig, wat nie geïnstalleer is nie.", "consentChanged": "Wat hierdie plugin vra, het verander sedert jy gekyk het. Kyk weer na die lys.", - "upload": "Kon nie {{name}} lees nie: {{error}}", - "developerMode": "Kon nie ontwikkelaarmodus verander nie: {{error}}" + "upload": "Kon nie {{name}} lees nie: {{error}}" }, "data": { "title": "Gestoorde data", @@ -2145,13 +1500,7 @@ "browsePlugins": "Blaai plugins", "loading": "Laai", "developer": { - "title": "Plugin-ontwikkelaarmodus", - "hint": "Laat administrateurs plugins vanaf 'n .tmxplug-lêer in die Plugins-oortjie installeer, sonder die registerkontroles. Gebruik dit om jou eie plugins te bou en te toets.", - "enableTitle": "Aktiveer ontwikkelaarmodus?", - "enableBody": "Administrateurs sal plugins vanaf lêers kan installeer wat Termix nie gecheck het nie. 'n Plugin kan alles doen wat sy vermoëns toelaat, dus skakel dit slegs aan terwyl jy plugins bou of toets.", - "enable": "Aktiveer", - "installFromFile": "Installeer vanaf lêer", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS is gestel, dus bly installering vanaf 'n lêer geblokkeer." + "installFromFile": "Installeer vanaf lêer" }, "count": { "downloads_one": "{{formatted}} aflaai", @@ -2189,71 +1538,7 @@ "secretSet": "Stel", "secretNotSet": "Nie gestel nie", "secretReplace": "Vervang", - "pluginSettingsSaved": "Instellings gestoor", - "pluginSettingsInvalid": "Sommige instellings kon nie gestoor word nie. Kontroleer die gemarkeerde velde.", - "pluginSettingsSaveFailed": "Kon nie instellings stoor nie", - "pluginSettingsLoadFailed": "Kon nie instellings laai nie", - "featureUnavailable": "{{name}} is tans nie beskikbaar nie. Hierdie instellings word gestoor, maar sal nie effek hê nie.", - "account": "Rekening", - "security": "Veiligheid", - "apiKeys": "API-sleutels", - "data": "Data en sinkronisering", - "interface": "Koppelvlak", - "appearance": "Voorkoms", - "keybindings": "Sleutelbindings", - "adminGeneral": "Algemeen", - "adminUsers": "Gebruikers", - "adminSessions": "Sessies", - "adminRoles": "Rolle", - "adminHostDefaults": "Gasheer-verstekke", - "adminBranding": "Merk", - "adminDatabase": "Databasis", - "adminSsl": "SSL", - "adminApiKeys": "API-sleutels", - "adminAuditLog": "Ouditlog", - "bandYou": "Jou rekening", - "bandApp": "Hierdie app", - "bandPlugins": "Plugins", - "bandInstance": "Hierdie bediener", - "searchPlaceholder": "Soek instellings", - "noResults": "Geen instellings pas by nie.", - "pages": "Bladsye", - "instanceSettings": "Bedienerinstellings", - "nothingHere": "Niks om hier te stel nie.", - "searchPage": "Soek hierdie bladsy", - "noPageMatches": "Niks op hierdie bladsy pas.", - "updates": { - "title": "Opdaterings", - "betaProgram": "Beta-program", - "betaIntro": "Betas is vroeë boue van die volgende Termix-weergawe. Hulle kom uit op Dinsdae en Vrydae wanneer daar iets nuuts is om te probeer. Hulle kan foute hê, en jou terugvoer maak die stabiele vrystelling beter.", - "termixBetas": "Termix-betas", - "termixBetasHint": "Vertel my van nuwe betas, nie net stabiele vrystellings nie.", - "runningBetaBuild": "Jy gebruik 'n beta-bou. Om te verlaat, skakel terug na 'n stabiele beeld of installeerder.", - "howToInstall": "Hoe om die beta te kry", - "desktopInstall": "Laai die beta-installeerder af en installeer dit oor hierdie een.", - "downloadBeta": "Laai {{version}} af", - "dockerInstall": "Verander jou beeld na die beta-tag en herbegin die houer:", - "copy": "Kopieer", - "copied": "Gekopieer", - "copyFailed": "Kon nie kopieer nie", - "learnMore": "Leer meer oor betas", - "feedback": "Terugvoer", - "feedbackHint": "Gevind 'n fout of het 'n idee? Dit gaan regstreeks na die ontwikkelaars met jou weergawe ingevul.", - "sendFeedback": "Stuur beta-terugvoer", - "releases": "Vrystellings", - "thisVersion": "Hierdie weergawe", - "newestStable": "Nuutste stabiel", - "newestBeta": "Nuutste beta", - "noRelease": "Niks reg nou nie", - "pluginBetas": "Plugin-betas", - "pluginBetasIntro": "Elke plugin kan sy eie betas gebruik. Om een te probeer, open dit en druk Probeer beta.", - "openPlugins": "Open Plugins", - "waitingForStable": "Terug op stabiel. Bly op {{version}} tot 'n stabiele vrystelling nuwer is.", - "backToStable": "Terug na stabiel", - "allPluginsBeta": "Gebruik betas vir alle plugins", - "allPluginsStable": "Alle plugins terug na stabiel", - "saveFailed": "Kon nie die verandering stoor nie" - } + "featureUnavailable": "{{name}} is tans nie beskikbaar nie. Hierdie instellings word gestoor, maar sal nie effek hê nie." }, "managerCard": { "refresh": "Verfris", @@ -2263,83 +1548,13 @@ "filter": "Filter..." }, "sync": { - "server": "Termix-bediener", - "account": "Rekening", - "status": "Status", - "never": "nooit", - "justNow": "net nou", "minutesAgo_one": "{{count}} minuut gelede", "minutesAgo_other": "{{count}} minute gelede", "hoursAgo_one": "{{count}} uur gelede", "hoursAgo_other": "{{count}} uur gelede", - "actionFailed": "Dit het nie gewerk nie. Probeer weer.", - "unlinkedTitle": "Slegs hierdie toestel", - "unlinkedBody": "Termix werk op sy eie op hierdie toestel. Koppel dit aan jou Termix-bediener om alles op datum te hou.", - "unlinkedPointHosts": "Jou gasheer, geloofsbriewe, fragmente en instellings volg jou na elke toestel.", - "unlinkedPointOffline": "Alles werk steeds wanneer die bediener nie bereikbaar is nie, en vang later in.", - "unlinkedPointAccount": "Jy meld aan met jou bedienerrekening, en gasheer wat mense met jou gedeel het, verskyn hier ook.", - "linkButton": "Koppel aan 'n bediener", - "state": { - "syncing": "Sinkroniseer", - "offline": "Bediener nie bereikbaar nie", - "error": "Sinkronisering gestop", - "signedOut": "Afgemeld", - "synced": "Gesinkroniseer {{time}}" - }, "pending_one": "{{count}} verandering wag om te sinkroniseer", "pending_other": "{{count}} veranderinge wag om te sinkroniseer", - "signInAgain": "Meld weer aan", - "syncNow": "Sinkroniseer nou", - "unlink": "Ontkoppel", - "unlinked": "Hierdie toestel is nie langer gekoppel nie", - "unlinkTitle": "Ontkoppel hierdie toestel?", - "unlinkDescription": "Dit stop die sinkronisering en meld af van die bediener. Bedieners wat deur ander met jou gedeel is, word in elk geval van hierdie toestel verwyder.", - "unlinkKeepTitle": "Behou my data hier", - "unlinkKeepBody": "Jou bedieners, inlogbesonderhede en instellings bly op hierdie toestel en gaan voort om onafhanklik te werk.", - "unlinkRemoveTitle": "Verwyder gesinkroniseerde data", - "unlinkRemoveBody": "Alles wat van die bediener af gekom het, word van hierdie toestel verwyder. Slegs bedieners wat lokaal op hierdie toestel gehou word, bly oor.", - "conflictsTitle": "Konflikte", - "conflictsDescription": "Hierdie is gelyktydig hier en op die bediener verander. Die bediener se weergawe word tans gebruik. Behou joune om dit in plaas daarvan na die bediener te stuur.", - "keepMine": "Behou myne", - "keepServer": "Behou bediener", - "errorsTitle": "Nie gesinkroniseer nie", - "errorsDescription": "Die bediener het hierdie veranderinge nie aanvaar nie. Hulle bly op hierdie toestel.", - "errorPermission": "Jou rekening op die bediener het nie toestemming om hierdie verandering te maak nie.", - "retry": "Probeer weer", - "whatSyncs": "Wat word gesinkroniseer", - "whatSyncsDescription": "Skakel iets af wat jy slegs op hierdie toestel wil behou.", - "coreGroup": "Termix", - "notOnServer": "Die bediener het nie hierdie nie", - "notOnDevice": "Nog nie op hierdie toestel nie", - "localOnlyHint": "Jy kan ook individuele bedieners of vouers op hierdie toestel behou vanaf hul instellings.", - "originTitle": "Waar verbindinge begin", - "originDescription": "Maak verbinding met bedieners vanaf hierdie toestel, of deur die bediener. Jy kan dit per bediener verander.", - "originLocal": "Hierdie toestel", - "originRemote": "Die bediener", - "entities": { - "hosts": "Bedieners", - "sshCredentials": "Inlogbesonderhede", - "sshFolders": "Vouers", - "userPreferences": "Voorkeure", - "pluginUserSettings": "Plugin-instellings", - "sharedHosts": "Bedieners wat met jou gedeel is", - "sharedCredentials": "Inlogbesonderhede wat met jou gedeel is", - "vaultProfiles": "Vault-profile", - "snippetFolders": "Snippet-vouers", - "snippets": "Snippets", - "dashboardServiceLinks": "Diensskakels", - "homepageItems": "Tuisblad-items", - "networkTopology": "Netwerkkaart", - "workspaces": "Werkruimtes", - "hostDefaults": "Bediener-standaarde", - "hostDefaultsAdmin": "Bediener se bediener-standaarde", - "aiProviders": "AI-lewerders", - "homepageLayouts": "Tuisblad-lêers", - "accountProfile": "Rekeningprofiel" - }, "proxy": { - "title": "Omgekeerde proxy", - "description": "Slegs nodig wanneer iets soos Cloudflare Access of 'n inlogskaaf voor jou bediener sit.", "headersTitle": "Bykomende koptekste", "headersHint": "Word saam met elke versoek na die bediener gestuur, byvoorbeeld 'n Cloudflare Access-diens token.", "headerName": "Koptekstnaam", @@ -2352,8 +1567,7 @@ "username": "Gebruikersnaam", "password": "Wagwoord", "allowInvalidCertificate": "Vertrou 'n self-ondertekende sertifikaat", - "allowInvalidCertificateHint": "Slegs vir jou eie bediener, wanneer sy sertifikaat nie van 'n bekende owerheid kom nie.", - "saved": "Opgeslaan" + "allowInvalidCertificateHint": "Slegs vir jou eie bediener, wanneer sy sertifikaat nie van 'n bekende owerheid kom nie." }, "problems": { "invalidUrl": "Dit lyk nie soos 'n webadres nie.", @@ -2391,6 +1605,27 @@ "linking": "Koppel en voer die eerste sinkronisering uit...", "linked": "Gekoppel. Jou data word nou gesinkroniseer.", "signedInAgain": "Aangemeld. Sinkronisering loop weer." + }, + "entities": { + "hosts": "Bedieners", + "sshCredentials": "Inlogbesonderhede", + "sshFolders": "Vouers", + "userPreferences": "Voorkeure", + "pluginUserSettings": "Plugin-instellings", + "sharedHosts": "Bedieners wat met jou gedeel is", + "sharedCredentials": "Inlogbesonderhede wat met jou gedeel is", + "vaultProfiles": "Vault-profile", + "snippetFolders": "Snippet-vouers", + "snippets": "Snippets", + "dashboardServiceLinks": "Diensskakels", + "homepageItems": "Tuisblad-items", + "networkTopology": "Netwerkkaart", + "workspaces": "Werkruimtes", + "hostDefaults": "Bediener-standaarde", + "hostDefaultsAdmin": "Bediener se bediener-standaarde", + "aiProviders": "AI-lewerders", + "homepageLayouts": "Tuisblad-lêers", + "accountProfile": "Rekeningprofiel" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "Hierdie host stel sy eie waarde. Klik om weer die verstek van {{source}} te gebruik", "clearTitle": "Gestel op hierdie vlak. Klik om dit te wis en {{source}} in plaas daarvan te gebruik", "inheritedTitle": "Volg die verstek van {{source}}", - "titleAdmin": "Bedienaar-host-verstekke", - "titleUser": "My host-verstekke", - "titleFolder": "Map-verstekke: {{name}}", - "descriptionAdmin": "Verstekke vir elke host op hierdie bedienaar. 'n Gebruiker se eie verstekke, 'n map se verstekke of die host self kan steeds 'n ander waarde stel. Verander 'n veld om dit hier te stel, of wis dit om dit ongestel te laat.", - "descriptionUser": "Verstekke vir al jou hosts, bo die bediener s'n. 'n Map of die host self kan steeds 'n ander waarde stel. Verander 'n veld om dit hier te stel, of wis dit om dit ongestel te laat.", - "descriptionFolder": "Verstekke vir die hosts in hierdie map en sy submappe, bo jou eie. 'n Host kan steeds 'n ander waarde stel. Verander 'n veld om dit hier te stel, of wis dit om dit ongestel te laat.", - "save": "Stoor verstekke", "saved_one": "Verstekke gestoor. {{count}} host is opgedateer.", "saved_other": "Verstekke gestoor. {{count}} hosts is opgedateer.", - "savedInBackground": "Verstekke gestoor. Hosts word in die agtergrond opgedateer.", "appliedToHosts_one": "{{count}} host is opgedateer met die nuwe verstekke.", "appliedToHosts_other": "{{count}} hosts is opgedateer met die nuwe verstekke.", - "saveFailed": "Kon nie die verstekke stoor nie", - "loadFailed": "Kon nie die verstekke laai nie", - "confirmTitle": "Stoor verstekke?", "confirmChanges_one": "{{count}} host volg hierdie verstekke en sal verander.", "confirmChanges_other": "{{count}} hosts volg hierdie verstekke en sal verander.", - "confirmNoChanges": "Geen bestaande host verander nie. Nuwe hosts sal met hierdie verstekke begin.", - "menuMyDefaults": "My host-verstekke", - "folderDefaultsAction": "Map-verstekke", - "adminSectionDescription": "Stel die verstekke wat elke host op hierdie bedienaar volg, vir elke instelling wat 'n host het, insluitend elke plugin s'n. Gebruikers en mappe kan hul eie bo-op stel, en enige host kan steeds sy eie waarde gebruik.", - "editServerDefaults": "Redigeer bedienaar-verstekke", - "resetMenu": "Herstel", - "resetAll": "Stel alles terug na verstek", - "resetCore": "Stel verbinding en SSH terug na verstek", "resetDone_one": "{{count}} gasheer gebruik nou sy verstekinstellings.", "resetDone_other": "{{count}} gasheer gebruik nou hul verstekinstellings." }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "Opgeslaan. Tik om dit te vervang." }, - "sharing": { - "revokeConfirm": "Verwyder toegang vir {{name}}?", - "revoke": "Verwyder toegang" - }, "manage": { - "searchSettings": "Soek instellings", - "noMatchingSettings": "Geen instellings pas by nie.", - "sections": "Afdelings", - "sectionNeedsAttention": "Iets hier benodig aandag", "needsAttention_one": "Een ding benodig aandag.", "needsAttention_other": "{{count}} dinge benodig aandag.", - "bandHost": "Gasheer", - "bandFeatures": "Protokolle en plugins", - "bandCredential": "Aanmeldgegewens", - "sshConnection": "SSH-verbinding", - "errorAddressRequired": "'n Adres is vereis.", - "errorPortRange": "Gebruik 'n poort tussen 1 en 65535.", - "defaults": "Verstek", - "searchHosts": "Soek gasheer", - "searchCredentials": "Soek aanmeldgegewens", - "searchDefaults": "Soek verstek", - "addCredential": "Voeg aanmeldgegewens by", - "nothingMatches": "Niets pas by nie", - "nothingYet": "Nog niks hier nie", - "emptyHostsHint": "Voeg 'n gasheer by en dit verskyn hier, in watter vouer jy ook al aan hom gee.", - "emptyCredentialsHint": "Aanmeldgegewens wat jy stoor, kan deur enige gasheer hergebruik word.", - "collapse": "Vou in", - "expand": "Vou uit", - "cannotBeUndone": "Dit kan nie ongedaan gemaak word nie.", - "hostNotFound": "Kon daardie gasheer nie vind nie. Probeer die lys verfris.", "hostCount_one": "{{count}} gasheer", "hostCount_other": "{{count}} gasheer", "credentialCount_one": "{{count}} aanmeldgegewens", - "credentialCount_other": "{{count}} aanmeldgegewens", - "newHost": "Nuwe gasheer", - "newCredential": "Nuwe aanmeldgegewens", - "advanced": "Gevorderd", - "pickHost": "Kies 'n gasheer om te redigeer", - "pickCredential": "Kies aanmeldgegewens om te redigeer", - "pickDefaults": "Kies 'n vlak van verstekinstellings om te redigeer", - "pickHint": "Alles oor 'n verbinding is hier, gegroepeer sodat jy dit kan vind." + "credentialCount_other": "{{count}} aanmeldgegewens" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/ar_SA.json b/src/ui/locales/translated/ar_SA.json index e9c466b52..e163ed50d 100644 --- a/src/ui/locales/translated/ar_SA.json +++ b/src/ui/locales/translated/ar_SA.json @@ -141,7 +141,6 @@ "continue": "متابعة", "error": "خطأ", "unsavedChanges": "تغييرات غير محفوظة", - "more": "المزيد", "loading": "جارٍ التحميل...", "host": "المضيف", "selectHost": "اختر مضيفًا...", @@ -154,7 +153,6 @@ "cancel": "إلغاء", "username": "اسم المستخدم", "login": "تسجيل الدخول", - "logout": "تسجيل الخروج", "register": "تسجيل", "password": "كلمة المرور", "confirmPassword": "تأكيد كلمة المرور", @@ -165,8 +163,6 @@ "rename": "إعادة تسمية", "edit": "تعديل", "confirm": "تأكيد", - "next": "التالي", - "previous": "السابق", "refresh": "تحديث", "language": "اللغة", "backendReconnected": "تم استعادة اتصال الخادم", @@ -234,10 +230,6 @@ "pluginsDocsLink": "اقرأ عن كل منها" }, "desktopUpdates": { - "title": "تطبيق سطح المكتب", - "mode": "التحديثات", - "modeHint": "كيف يحصل هذا التطبيق على الإصدارات الجديدة.", - "manualModeHint": "لا يمكن لهذا النسخة تحديث نفسها، لذا يخبرك Termix فقط عند إصدار نسخة جديدة.", "modeAutomatic": "تلقائي", "modePrompt": "اسأل أولاً", "modeNever": "أبداً", @@ -247,15 +239,6 @@ "onboardingTitle": "تحديثات التطبيق", "onboardingBody": "يمكن لتطبيق سطح المكتب الآن تحديث نفسه. اختر كيف تريد وصول الإصدارات الجديدة. يمكنك تغيير ذلك لاحقاً في الإعدادات، التحديثات.", "onboardingManual": "تم تثبيت هذه النسخة من التطبيق بطريقة لا تسمح لها بالتحديث التلقائي، لذا سيخبرك Termix عند إصدار نسخة جديدة مع رابط لتحميلها.", - "status": "الإصدار {{version}}", - "statusIdle": "لم يتم التحقق بعد", - "statusChecking": "جارٍ التحقق من وجود تحديثات", - "statusAvailable": "الإصدار {{version}} متاح", - "statusDownloading": "جارٍ تحميل {{version}} ({{progress}}%)", - "statusReady": "الإصدار {{version}} جاهز. أعد التشغيل لتثبيته.", - "statusUpToDate": "لديك أحدث إصدار", - "statusError": "تعذر التحقق من وجود تحديثات. حاول مرة أخرى لاحقاً.", - "checkNow": "تحقق الآن", "download": "تحميل", "restart": "إعادة التشغيل الآن", "later": "لاحقاً", @@ -269,26 +252,11 @@ "terminal": "الطرفية", "close": "إغلاق", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "نسخ كلمة المرور", - "copySudoPassword": "نسخ كلمة مرور Sudo", - "passwordCopied": "تم نسخ كلمة المرور إلى الحافظة", - "failedToCopyPassword": "فشل نسخ كلمة المرور", - "refreshTab": "تحديث الاتصال", - "renameTab": "إعادة تسمية علامة التبويب", "dashboard": "لوحة التحكم", "quickConnect": "اتصال سريع", - "openAsTabHint": "Ctrl+نقر أو نقر بالزر الأوسط لفتحها كعلامة تبويب", - "openAsTab": "فتح كعلامة تبويب", - "openInRightDock": "فتح في الشريط الجانبي الأيمن", - "closeRightDock": "إغلاق الشريط الجانبي الأيمن", - "toggleRightDock": "تبديل الشريط الجانبي الأيمن", "hosts": "المضيفين", "credentials": "بيانات الاعتماد", "connections": "الاتصالات", - "keepSideMenuOpen": "إبقاء القائمة مفتوحة", - "collapseSideMenu": "طي القائمة", - "roleAdministrator": "مدير النظام", - "roleUser": "مستخدم", "sync": "مزامنة", "reconnectDisconnectedTerminals": "إعادة توصيل جميع المحطات المنفصلة", "reconnectingTerminals_zero": "جاري إعادة توصيل {{count}} محطة", @@ -306,34 +274,15 @@ "reconnectTerminalsFailed_other": "تعذر بدء إعادة توصيل {{count}} محطة", "fullscreenUnsupported": "لا يدعم هذا المتصفح وضع ملء الشاشة", "fullscreenFailed": "تعذر التبديل إلى وضع ملء الشاشة", - "resetSidebarWidth": "إعادة تعيين العرض", - "collapseSidebar": "طي الشريط الجانبي", - "openSidebar": "فتح الشريط الجانبي", "confirmCloseHost": "إغلاق {{host}}؟", - "enterFullscreen": "الانتقال إلى وضع ملء الشاشة (Ctrl+Shift+F)", - "exitFullscreen": "الخروج من وضع ملء الشاشة (Ctrl+Shift+F)", - "group": { - "objects": "ملكي", - "tools": "أدوات", - "system": "النظام" - }, - "searchEverything": "البحث في المضيفين والعلامات والإجراءات", - "search": "بحث", "hiddenCount_zero": "0 مخفي", "hiddenCount_one": "1 مخفي", "hiddenCount_two": "2 مخفي", "hiddenCount_few": "{{count}} مخفي", "hiddenCount_many": "{{count}} مخفي", "hiddenCount_other": "{{count}} مخفي", - "showInRail": "إظهار في الشريط الجانبي", - "moveUp": "تحريك لأعلى", - "moveDown": "تحريك لأسفل", - "resetRailOrder": "إعادة تعيين الترتيب", - "hideFromRail": "إخفاء من الشريط الجانبي", - "openSettings": "فتح الإعدادات", "settings": "الإعدادات", "manage": "إدارة", - "mobileNavigation": "التنقل", "plugins": "الإضافات" }, "hosts": { @@ -969,35 +918,14 @@ "importSummary": "اكتمل الاستيراد: {{imported}} تم استيرادها، {{updated}} تم تحديثها، {{failed}} فشلت", "importHostsFailed": "فشل في استيراد المضيفين" }, - "commandPalette": { - "searchPlaceholder": "البحث عن المضيفين، الأوامر، أو الإعدادات...", - "quickActions": "الإجراءات السريعة", - "navigation": "التنقل", - "orShortcut": "أو", - "addNewHost": "إضافة مضيف جديد", - "adminSettings": "إعدادات المسؤول", - "addCredential": "إضافة بيانات اعتماد", - "recentActivity": "النشاط الأخير", - "serversAndHosts": "الخوادم والمضيفين", - "noHostsFound": "لم يتم العثور على مضيفين يطابقون \"{{search}}\"", - "links": "روابط", - "navigate": "التنقل", - "select": "تحديد", - "pluginActions": "إجراءات أخرى", - "noTargetTab": "لا توجد علامة تبويب طرفية مفتوحة", - "documentation": "التوثيق" - }, "splitScreen": { "title": "شاشة مقسمة", "defaultLabel": "تقسيم {{number}}", "splitRight": "تقسيم لليمين", "splitDown": "تقسيم للأسفل", - "addToSplit": "إضافة إلى {{split}}", "paneEmptyItem": "لوحة {{index}}: فارغة", "paneItem": "لوحة {{index}}: {{label}}", "paneNumber": "لوحة {{index}}", - "newPaneRight": "لوحة جديدة على اليمين", - "newPaneBelow": "لوحة جديدة في الأسفل", "emptyTitle": "لوحة فارغة", "emptyHint": "اختر شيئاً لعرضه هنا. أثناء تحديد هذه اللوحة، سيتم فتح أي شيء تفتحه من الشريط الجانبي هنا أيضاً.", "openTabs": "علامات التبويب المفتوحة", @@ -1014,7 +942,6 @@ "clearPane": "تفريغ هذه اللوحة", "zoom": "تكبير اللوحة", "unzoom": "استعادة التخطيط", - "unsplit": "إلغاء التقسيم", "layouts": "التخطيطات", "applyLayout": "تغيير التخطيط", "maxPanes_zero": "يمكن أن يحتوي التقسيم على ما يصل إلى {{count}} جزء", @@ -1027,8 +954,6 @@ "dropHere": "إسقاط للعرض هنا", "paneActions": "إجراءات اللوحة", "dividerHint": "اسحب لتغيير الحجم. انقر نقرًا مزدوجًا لتسوية الأحجام.", - "openInSplit": "فتح في تقسيم", - "openInNewSplit": "تقسيم جديد مع علامة التبويب الحالية", "shortcuts": "الاختصارات", "shortcutNavigate": "التنقل بين اللوحات", "presets": { @@ -1042,23 +967,6 @@ "grid6": "شبكة من ستة" } }, - "connections": { - "noConnections": "لا توجد اتصالات", - "noConnectionsDesc": "افتح طرفية أو مدير ملفات أو سطح مكتب عن بُعد لرؤية الاتصالات هنا", - "connectedFor": "متصل منذ {{duration}}", - "connected": "متصل", - "disconnected": "غير متصل", - "reconnect": "إعادة الاتصال", - "sectionOpen": "مفتوح", - "sectionBackground": "الخلفية", - "backgroundDesc": "تستمر الجلسات لمدة {{minutes}} دقيقة بعد قطع الاتصال ويمكن إعادة الاتصال بها.", - "expiresIn": "تنتهي صلاحيتها خلال {{duration}}", - "search": "البحث في الاتصالات...", - "noSearchResults": "لا توجد اتصالات تطابق بحثك", - "rename": "إعادة تسمية الجلسة", - "forgetConfirm": "إنهاء الجلسة في الخلفية لـ {{name}}؟", - "forget": "إنهاء الجلسة" - }, "sshAuth": { "totpRequired": "مطلوب المصادقة الثنائية", "totpCodeLabel": "رمز التحقق", @@ -1196,65 +1104,14 @@ "placeholders": { "keyPassword": "كلمة مرور المفتاح", "pastePrivateKey": "الصق مفتاحك الخاص هنا...", - "enterPassword": "أدخل كلمة المرور الخاصة بك", - "apiKeyName": "مثل: خط أنابيب CI", - "credentialName": "مثل: مفتاح SSH للإنتاج", - "optionalDetails": "تفاصيل اختيارية...", - "sshUsername": "مثل: root أو deploy", - "hostAddress": "10.0.0.1 أو example.com", - "hostName": "مثل: خادم الويب للإنتاج" + "enterPassword": "أدخل كلمة المرور الخاصة بك" }, "dashboard": { - "title": "لوحة التحكم", - "github": "GitHub", - "reportBug": "الإبلاغ عن خطأ", - "discord": "Discord", - "docs": "التوثيق", - "donate": "تبرع", - "serverOverview": "نظرة عامة على الخادم", - "version": "الإصدار", "updateAvailable": "تحديث متاح", - "beta": "تجريبي", - "uptime": "وقت التشغيل", - "database": "قاعدة البيانات", - "healthy": "سليم", - "error": "خطأ", - "totalHosts": "إجمالي المضيفين", - "totalCredentials": "إجمالي بيانات الاعتماد", - "recentActivity": "النشاط الأخير", - "reset": "إعادة تعيين", - "noRecentActivity": "لا يوجد نشاط حديث", - "quickActions": "إجراءات سريعة", - "addHost": "إضافة مضيف", - "addCredential": "إضافة بيانات اعتماد", - "adminSettings": "إعدادات المسؤول", - "userProfile": "ملف المستخدم الشخصي", - "serverStats": "إحصائيات الخادم", - "customizeLayout": "تخصيص لوحة التحكم", - "justNow": "الآن" + "beta": "تجريبي" }, "dashboardTab": { "stable": "مستقر", - "registerNewServer": "تسجيل خادم جديد", - "storeSshKeysOrPasswords": "تخزين مفاتيح SSH أو كلمات المرور", - "manageUsersAndRoles": "إدارة المستخدمين والأدوار", - "manageYourAccount": "إدارة حسابك", - "hostStatus": "حالة المضيف", - "noHostsConfigured": "لم يتم تكوين أي مضيفين", - "checking": "جارٍ التحقق", - "commandPalette": "لوحة الأوامر", - "done": "تم", - "clear": "مسح", - "dragToResizeColumns": "اسحب لتغيير حجم الأعمدة", - "hostsAvailable": "المضيفون المتاحون", - "removeSection": "إزالة القسم", - "addSection": "إضافة قسم", - "allSectionsShown": "كل شيء موجود بالفعل في لوحة التحكم.", - "fromPlugins": "من الإضافات", - "dropHere": "أفلت قسماً هنا", - "dragToReorder": "اسحب الأقسام لإعادة ترتيبها", - "clearActivityConfirm": "مسح نشاطك الأخير؟", - "resetConfirm": "إعادة ضبط لوحة التحكم إلى تخطيطها الافتراضي؟", "onlineCount_zero": "لا يوجد متصل", "onlineCount_one": "متصل واحد", "onlineCount_two": "متصلان", @@ -1269,446 +1126,69 @@ "hostCount_other": "{{count}} مضيف" }, "admin": { - "sectionGeneral": "عام", - "sectionUsers": "المستخدمون", - "sectionSessions": "الجلسات", - "sectionRoles": "الأدوار", - "sectionDatabase": "قاعدة البيانات", - "sectionApiKeys": "مفاتيح API", - "sectionAuditLog": "سجل التدقيق", - "sectionSsl": "شهادة HTTPS", - "sectionBranding": "التسمية البيضاء", - "brandingAppName": "اسم التطبيق", - "brandingAppNameDesc": "يظهر على شاشة تسجيل الدخول ولوحة المتصفح. اتركه فارغاً لاستخدام \"Termix\".", - "brandingTagline": "الشعار اللفظي", - "brandingTaglineDesc": "يظهر أسفل اسم التطبيق على شاشة تسجيل الدخول. اتركه فارغاً لاستخدام الشعار اللفظي الافتراضي.", - "brandingLogo": "الشعار", - "brandingLogoDesc": "PNG أو JPEG أو WEBP، بحد أقصى 750 كيلوبايت. يستبدل الأيقونة الافتراضية على شاشة تسجيل الدخول ولوحة المتصفح.", - "brandingLogoUpload": "رفع الشعار", - "brandingLogoReset": "إعادة التعيين إلى الافتراضي", - "brandingLogoInvalid": "صورة غير صالحة. استخدم ملف PNG أو JPEG أو WEBP بحد أقصى 750 كيلوبايت.", - "brandingSaved": "تم حفظ إعدادات التسمية البيضاء", - "brandingSaveFailed": "فشل حفظ إعدادات التسمية البيضاء", - "sslDescription": "الشهادة التي يقدمها Termix عبر HTTPS. قم برفع شهادتك الخاصة هنا، أو احصل على شهادة من Let's Encrypt وتجديدها في قسم شهادات ACME.", - "sslDocsLink": "عرض وثائق SSL", - "sslCertStatus": "حالة الشهادة", - "sslCertStatusNone": "لا توجد شهادة", - "sslCertStatusValid": "صالحة", - "sslCertStatusExpiring": "توشك على الانتهاء", - "sslCertStatusExpired": "منتهية الصلاحية", - "sslCertExpiresAt": "تنتهي في {{date}}", - "sslInfoNote": "بعد إصدار أو رفع شهادة، سيقوم Termix تلقائياً بتمكين HTTPS على SSL_PORT (الافتراضي 8443) بالإضافة إلى منفذ HTTP الحالي. تأكد من أن هذا المنفذ منشور/مُعرّف لهذا الحاوية حتى يمكن الوصول إليه.", - "sslManualCert": "الشهادة (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "المفتاح الخاص (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "الصق شهادتك الحالية والمفتاح الخاص، بما في ذلك السلسلة الكاملة إذا كانت مطلوبة من جهة الشهادات الخاصة بك.", - "sslManualUpload": "رفع وتثبيت الشهادة", - "sslManualUploadLoading": "جارٍ رفع الشهادة...", - "sslManualUploadSuccess": "تم رفع الشهادة وتثبيتها بنجاح", - "sslManualUploadFailed": "فشل رفع الشهادة", - "sslManualRequiresFields": "الشهادة والمفتاح الخاص مطلوبان", - "auditLogTotal": "{{total}} إجمالي الإدخالات", - "auditLogEmpty": "لم يتم العثور على إدخالات في سجل التدقيق", - "auditLogSuccess": "ناجح", - "auditLogFailed": "فشل", - "auditLogClearFilters": "مسح الفلاتر", - "auditLogPage": "الصفحة {{page}} من {{totalPages}} ({{total}} إجمالي)", - "auditLogIp": "عنوان IP", - "auditLogResourceId": "معرف المورد", - "auditLogFilterUser": "المستخدم", - "auditLogFilterAction": "الإجراء", - "auditLogFilterResourceType": "نوع المورد", - "auditLogFilterStatus": "الحالة", - "auditLogFilterFrom": "من", - "auditLogFilterTo": "إلى", - "auditLogFilterAll": "الكل", - "allowRegistration": "السماح بتسجيل المستخدمين", - "allowRegistrationDesc": "اسمح للمستخدمين الجدد بالتسجيل الذاتي باستخدام اسم مستخدم وكلمة مرور", - "allowPasswordLogin": "السماح بتسجيل الدخول بكلمة المرور", - "allowPasswordLoginDesc": "تسجيل الدخول باسم المستخدم وكلمة المرور", - "externalAutoProvision": "إنشاء الحسابات الخارجية تلقائيًا", - "externalAutoProvisionDesc": "أنشئ حسابًا في المرة الأولى التي يسجل فيها شخص ما الدخول عبر تسجيل دخول خارجي مثل SSO أو LDAP. عند الإيقاف، يمكن فقط للأشخاص الذين لديهم حساب بالفعل تسجيل الدخول بهذه الطريقة", - "secondFactorAfterExternalLogin": "اطلب عاملًا ثانيًا بعد تسجيلات الدخول الخارجية (SSO، GitHub، Google، LDAP)", - "secondFactorAfterExternalLoginDesc": "عند الإيقاف، يُطلب عامل المصادقة الثاني المسجل فقط بعد تسجيل الدخول بكلمة المرور وطرق تسجيل الدخول المحلية الأخرى، كما كان من قبل. عند التفعيل، يُطلب بعد كل طريقة تسجيل دخول، بما في ذلك SSO و LDAP.", - "allowPasswordReset": "السماح بإعادة تعيين كلمة المرور", - "allowPasswordResetDesc": "رمز إعادة التعيين عبر سجلات Docker", - "auditForwardingTitle": "إعادة التوجيه إلى SIEM", - "auditForwardingDesc": "أرسل نسخة من كل إدخال تدقيق إلى جامع خارجي بتنسيق NDJSON. تظل السجلات المحلية هي المصدر الموثوق.", - "auditForwardingEnvNotice": "تُعد متغير البيئة أيضًا لإعادة التوجيه؛ يأخذ URL المحفوظ هنا الأسبقية.", - "auditForwardingToken": "رمز Bearer (اختياري)", - "auditForwardingTokenStored": "رمز Bearer (محفوظ)", - "auditForwardingSaved": "تم حفظ إعدادات إعادة توجيه التدقيق", - "auditForwardingSaveError": "فشل حفظ إعدادات إعادة توجيه التدقيق", - "sessionTimeout": "مهلة الجلسة", - "hours": "ساعات", - "sessionTimeoutRange": "الحد الأدنى 1 ساعة، الحد الأقصى 720 ساعة", - "monitoringDefaults": "إعدادات المراقبة الافتراضية", - "statusCheck": "فحص الحالة", - "sec": "ثانية", - "logLevel": "مستوى السجل", "usersCount_zero": "{{count}} مستخدم", "usersCount_one": "مستخدم واحد", "usersCount_two": "{{count}} مستخدمين", "usersCount_few": "{{count}} مستخدمين", "usersCount_many": "{{count}} مستخدمًا", - "usersCount_other": "{{count}} مستخدم", - "searchUsers": "البحث عن المستخدمين...", - "noUsers": "لا يوجد مستخدمون", - "noUsersMatch": "لا يتطابق أي مستخدم مع بحثك", - "pageOf": "الصفحة {{page}} من {{total}}", - "createUser": "إنشاء", - "newRole": "دور جديد", - "roleName": "الاسم", - "roleDisplayName": "اسم العرض", - "roleDescription": "الوصف", "rolesCount_zero": "{{count}} دور", "rolesCount_one": "دور واحد", "rolesCount_two": "{{count}} دورين", "rolesCount_few": "{{count}} أدوار", "rolesCount_many": "{{count}} دورًا", - "rolesCount_other": "{{count}} دور", - "createRole": "إنشاء", - "creating": "جارٍ الإنشاء...", - "exportDatabase": "تصدير قاعدة البيانات", - "exportDatabaseDesc": "قم بتنزيل نسخة احتياطية محمولة من SQLite لجميع المضيفين والبيانات الاعتمادية والإعدادات", - "export": "تصدير", - "exporting": "جارٍ التصدير...", - "importDatabase": "استيراد قاعدة البيانات", - "importDatabaseDesc": "استعادة من نسخة احتياطية محمولة بصيغة .sqlite على أي خلفية لقاعدة البيانات", - "importDatabaseSelected": "المحدد: {{name}}", - "selectFile": "اختر ملفًا", - "changeFile": "تغيير", - "import": "استيراد", - "importing": "جارٍ الاستيراد...", "apiKeysCount_zero": "{{count}} مفتاح", "apiKeysCount_one": "مفتاح واحد", "apiKeysCount_two": "{{count}} مفتاحين", "apiKeysCount_few": "{{count}} مفاتيح", "apiKeysCount_many": "{{count}} مفتاحًا", - "apiKeysCount_other": "{{count}} مفتاح", - "apiKeysDocsLink": "عرض التوثيق", - "apiKeysCliHint": "استخدم مفتاح API مع Termix CLI لإدارة الخوادم من جهازك الطرفي.", - "apiKeysCliLink": "عرض توثيق CLI", - "newApiKey": "مفتاح API جديد", - "apiKeyCreatedWarning": "تم إنشاء المفتاح - انسخه الآن، لن يتم عرضه مرة أخرى.", - "apiKeyName": "الاسم", - "apiKeyUser": "المستخدم", - "apiKeySelectUser": "اختر مستخدمًا...", - "apiKeyExpiresAt": "تاريخ الانتهاء", - "createKey": "إنشاء مفتاح", - "apiKeyNoExpiry": "بدون انتهاء", - "revokedBadge": "ملغى", - "authTypeDual": "المصادقة المزدوجة", - "authTypeExternal": "خارجي", - "authTypeLocal": "محلي", - "adminStatusAdministrator": "مدير", - "adminStatusRegularUser": "مستخدم عادي", - "adminBadge": "مدير", - "systemBadge": "نظام", - "customBadge": "مخصص", - "youBadge": "أنت", "sessionsActive_zero": "0 نشط", "sessionsActive_one": "1 نشط", "sessionsActive_two": "2 نشط", "sessionsActive_few": "{{count}} نشطة", "sessionsActive_many": "{{count}} نشطة", - "sessionsActive_other": "{{count}} نشطة", - "sessionActive": "نشط: {{time}}", - "sessionExpires": "ينتهي: {{time}}", - "revokeAll": "الكل", - "revokeAllSessionsSuccess": "تم إلغاء جميع جلسات المستخدم", - "revokeAllSessionsFailed": "فشل في إلغاء الجلسات", - "revokeSessionFailed": "فشل في إلغاء الجلسة", - "addRole": "إضافة دور", - "noCustomRoles": "لم يتم تعريف أدوار مخصصة", - "removeRoleFailed": "فشل في إزالة الدور", - "assignRoleFailed": "فشل في تعيين الدور", - "userAdminAccess": "مدير", - "userAdminAccessDesc": "وصول كامل إلى جميع إعدادات المسؤول", - "userRoles": "الأدوار", - "revokeAllUserSessions": "إلغاء جميع الجلسات", - "revokeAllUserSessionsDesc": "إجبار إعادة تسجيل الدخول على جميع الأجهزة", - "revoke": "إلغاء", - "deleteUserWarning": "حذف هذا المستخدم نهائي.", - "deleteUser": "حذف {{username}}", - "deleting": "جاري الحذف...", - "deleteUserFailed": "فشل في حذف المستخدم", - "deleteUserSuccess": "تم حذف المستخدم \"{{username}}\"", - "deleteRoleSuccess": "تم حذف الدور \"{{name}}\"", - "revokeKeySuccess": "تم إلغاء المفتاح \"{{name}}\"", - "revokeKeyFailed": "فشل في إلغاء المفتاح", - "copiedToClipboard": "تم النسخ إلى الحافظة", - "done": "تم", - "createUserTitle": "إنشاء مستخدم", - "createUserDesc": "إنشاء حساب محلي جديد.", - "createUserUsername": "اسم المستخدم", - "createUserPassword": "كلمة المرور", - "createUserPasswordHint": "الحد الأدنى 6 أحرف.", - "createUserEnterUsername": "أدخل اسم المستخدم", - "createUserSubmit": "إنشاء مستخدم", - "editUserTitle": "إدارة المستخدم: {{username}}", - "editUserDesc": "تعديل الأدوار، حالة المسؤول، الجلسات، وإعدادات الحساب.", - "editUserUsername": "اسم المستخدم", - "editUserAuthType": "نوع المصادقة", - "editUserAdminStatus": "حالة المسؤول", - "editUserUserId": "معرف المستخدم", - "linkAccountTitle": "ربط الحسابات", - "linkAccountDesc": "دمج الحساب الخارجي {{username}} مع حساب محلي موجود.", - "linkAccountDescLocal": "ربط حساب محلي {{username}} مع حساب خارجي فقط موجود.", - "linkAccountWarningTitle": "سيؤدي هذا إلى:", - "linkAccountEffect1": "حذف الحساب الخارجي فقط", - "linkAccountEffect2": "إضافة تسجيل الدخول الخارجي إلى الحساب الهدف", - "linkAccountEffect3": "السماح بتسجيل الدخول الخارجي وكلمة المرور", - "linkAccountTargetUsername": "اسم المستخدم للحساب المحلي", - "linkAccountTargetPlaceholder": "أدخل اسم المستخدم للحساب المحلي للربط به", - "linkAccountExternalUsername": "اسم المستخدم للحساب الخارجي", - "linkAccountExternalPlaceholder": "أدخل اسم المستخدم للحساب الخارجي فقط لدمجه", - "linkAccountExternalNotFound": "لم يتم العثور على حساب خارجي فقط بهذا الاسم", - "linkAccounts": "ربط الحسابات", - "linkAccountSuccess": "تم ربط الحسابات بنجاح", - "linkAccountFailed": "فشل في ربط الحسابات", - "linkAccountInProgress": "جارٍ الربط...", - "unlinkAccountTitle": "إلغاء ربط تسجيل الدخول الخارجي", - "unlinkAccountDesc": "إزالة تسجيل الدخول الخارجي من {{username}}. لن يتمكنوا من تسجيل الدخول إلا باستخدام كلمة المرور الخاصة بهم.", - "unlinkAccountWarning": "سيؤدي هذا إلى إزالة تسجيل الدخول الخارجي من هذا الحساب. يجب أن يكون للمستخدم كلمة مرور مضبوطة ليتمكن من الاستمرار في تسجيل الدخول.", - "unlinkAccount": "إلغاء ربط تسجيل الدخول الخارجي", - "unlinkAccountInProgress": "جارٍ إلغاء الربط...", - "unlinkAccountSuccess": "تم إلغاء ربط تسجيل الدخول الخارجي", - "unlinkAccountFailed": "فشل في إلغاء ربط تسجيل الدخول الخارجي", - "updateRegistrationFailed": "فشل في تحديث إعداد التسجيل", - "updatePasswordLoginFailed": "فشل في تحديث إعداد تسجيل الدخول بكلمة المرور", - "updateSecondFactorAfterExternalLoginFailed": "فشل في تحديث إعداد العامل الثاني", - "updatePasswordResetFailed": "فشل في تحديث إعداد إعادة تعيين كلمة المرور", - "sessionTimeoutRange2": "يجب أن يكون مهلة الجلسة بين 1 و 720 ساعة", - "sessionTimeoutSaved": "تم حفظ مهلة الجلسة", - "sessionTimeoutSaveFailed": "فشل في حفظ مهلة الجلسة", - "monitoringIntervalInvalid": "قيم الفاصل الزمني غير صالحة", - "monitoringSaved": "تم حفظ إعدادات المراقبة", - "monitoringSaveFailed": "فشل في حفظ إعدادات المراقبة", - "logLevelUpdateFailed": "فشل في تحديث مستوى السجل", - "createUserRequired": "اسم المستخدم وكلمة المرور مطلوبان", - "createUserPasswordTooShort": "يجب أن تتكون كلمة المرور من 6 أحرف على الأقل", - "createUserSuccess": "تم إنشاء المستخدم \"{{username}}\"", - "createUserFailed": "فشل في إنشاء المستخدم", - "updateAdminStatusFailed": "فشل في تحديث حالة المسؤول", - "allSessionsRevoked": "تم إلغاء جميع الجلسات", - "revokeSessionsFailed": "فشل في إلغاء الجلسات", - "manageUserData": "إدارة بيانات المستخدم", - "backToUsers": "العودة إلى المستخدمين", - "manageTabAccount": "الحساب", - "manageTabHosts": "المضيفين", - "manageTabCredentials": "بيانات الاعتماد", - "manageTabSessions": "الجلسات", - "manageTabDanger": "الخطر", - "manageEditorBack": "العودة إلى بيانات {{username}}", - "dataLockedBadge": "مقفل", - "dataLockedNotice": "تظل بيانات {{username}} مقفلة حتى تسجيل الدخول التالي. لا يمكن عرض مضيفيه وبيانات الاعتماد والمقتطفات أو تحريرها حتى ذلك الحين.", - "resetPasswordTitle": "إعادة تعيين كلمة المرور", - "resetPasswordExternalOnly": "يسجل هذا المستخدم الدخول عبر مزود خارجي وليس لديه كلمة مرور.", - "resetPasswordPlaceholder": "كلمة المرور الجديدة", - "resetPasswordBtn": "إعادة تعيين", - "resetPasswordWorking": "جارٍ إعادة التعيين...", - "resetPasswordSuccess": "تمت إعادة تعيين كلمة المرور", - "resetPasswordSuccessWiped": "تمت إعادة تعيين كلمة المرور. تم مسح البيانات المشفرة للمستخدم.", - "resetPasswordFailed": "فشل في إعادة تعيين كلمة المرور", - "resetPasswordConfirmWipe": "لم يسجل {{username}} الدخول منذ ترقية التشفير، لذا لا يمكن استرداد بياناته. سيؤدي إعادة التعيين الآن إلى حذف مضيفيه وبيانات الاعتماد والمقتطفات. هل تريد المتابعة؟", - "manageApiKeys": "مفاتيح API", - "apiKeyNamePlaceholder": "اسم المفتاح", - "apiKeyCopyNotice": "انسخ هذا المفتاح الآن، لن يتم عرضه مرة أخرى.", - "noApiKeysForUser": "لا توجد مفاتيح API", - "apiKeyDeleteFailed": "فشل حذف مفتاح API", - "exportUserData": "تصدير البيانات", - "exportUserDataDesc": "قم بتنزيل بيانات المضيفين، بيانات الاعتماد، ومدير الملفات لهذا المستخدم بصيغة JSON. سيتم فك تشفير الأسرار.", - "exportUserDataSuccess": "تم تصدير بيانات المستخدم", - "exportUserDataFailed": "فشل تصدير بيانات المستخدم", "hostsCount_zero": "{{count}} مضيف", "hostsCount_one": "مضيف واحد", "hostsCount_two": "{{count}} مضيفين", "hostsCount_few": "{{count}} مضيفين", "hostsCount_many": "{{count}} مضيفًا", "hostsCount_other": "{{count}} مضيف", - "addHostForUser": "إضافة مضيف", - "noHostsForUser": "لا يمتلك هذا المستخدم أي مضيفين", - "connectToHost": "اتصال", - "deleteHostConfirm": "هل تريد حذف المضيف \"{{name}}\" المملوك لـ {{username}}؟", - "hostDeletedSuccess": "تم حذف المضيف", - "hostDeleteFailed": "فشل حذف المضيف", "credentialsCount_zero": "{{count}} بيانات اعتماد", "credentialsCount_one": "بيانات اعتماد واحدة", "credentialsCount_two": "{{count}} بيانات اعتماد", "credentialsCount_few": "{{count}} بيانات اعتماد", "credentialsCount_many": "{{count}} بيانات اعتماد", "credentialsCount_other": "{{count}} بيانات اعتماد", - "addCredentialForUser": "إضافة بيانات اعتماد", - "noCredentialsForUser": "لا يمتلك هذا المستخدم أي بيانات اعتماد", - "deleteCredentialConfirm": "هل تريد حذف بيانات الاعتماد \"{{name}}\" المملوكة لـ {{username}}؟", - "credentialDeletedSuccess": "تم حذف بيانات الاعتماد", - "credentialDeleteFailed": "فشل حذف بيانات الاعتماد", - "noSessionsForUser": "لا توجد جلسات نشطة", - "deleteSuccessorLabel": "تسليم المضيفين وبيانات الاعتماد إلى", - "deleteSuccessorMe": "أنا (المسؤول الذي يقوم بالحذف)", - "deleteSuccessorNone": "لا أحد، احذفها", - "deleteSuccessorDesc": "ستستمر جميع العناصر التي شاركها هذا المستخدم في العمل تحت الملكية الجديدة؛ اختيار \"لا أحد\" سيؤدي إلى حذف مضيفيه، بيانات الاعتماد، والمشاركات الخاصة به.", - "deleteUserDangerDesc": "احذف {{username}} وجميع بياناته (المضيفين، بيانات الاعتماد، المقاطع، السجل) بشكل دائم. لا يمكن التراجع عن هذا الإجراء.", - "deleteUserConfirm": "هل تريد حذف {{username}} وجميع بياناته بشكل دائم؟", - "deleteUserAdminBlocked": "قم بإزالة حالة المسؤول قبل حذف هذا المستخدم.", - "createRoleRequired": "الاسم واسم العرض مطلوبان", - "createRoleSuccess": "تم إنشاء الدور \"{{name}}\"", - "createRoleFailed": "فشل إنشاء الدور", - "apiKeyNameRequired": "اسم المفتاح مطلوب", - "apiKeyUserRequired": "معرف المستخدم مطلوب", - "apiKeyCreatedSuccess": "تم إنشاء مفتاح API \"{{name}}\"", - "apiKeyCreateFailed": "فشل إنشاء مفتاح API", - "exportSuccess": "تم تصدير قاعدة البيانات بنجاح", - "exportFailed": "فشل تصدير قاعدة البيانات", - "importSelectFile": "يرجى اختيار ملف أولاً", - "importCompleted": "اكتمل الاستيراد: تم استيراد {{total}} عنصر، تم تخطي {{skipped}}", - "importFailed": "فشل الاستيراد: {{error}}", - "importError": "فشل استيراد قاعدة البيانات", - "sectionHostDefaults": "الإعدادات الافتراضية للمضيف", "rolePermissions": { "count_zero": "{{count}} إذن", "count_one": "إذن واحد", "count_two": "{{count}} إذنين", "count_few": "{{count}} أذونات", "count_many": "{{count}} إذنًا", - "count_other": "{{count}} إذن", - "editAction": "تعديل الأذونات", - "loadError": "فشل تحميل كتالوج الأذونات", - "saved": "تم حفظ أذونات الدور", - "saveError": "فشل حفظ أذونات الدور", - "save": "حفظ", - "saving": "جارٍ الحفظ...", - "pluginDisabled": "الإضافة معطلة", "groups": { "hosts": "المضيفين", "credentials": "بيانات الاعتماد", "admin": "الإدارة" } - }, - "notificationPrivateEndpoints": "مضيفي الإشعارات الخاصة المسموح بهم", - "notificationPrivateEndpointsDesc": "المضيفين الخاصين الدقيقين الذين يمكن لقنوات الإشعارات الاتصال بهم. افصل بينهم بفاصلات.", - "updateNotificationEndpointsFailed": "فشل تحديث قائمة السماح بنقاط نهاية الإشعارات", - "secondFactorsSectionTitle": "عوامل المصادقة الثانية", - "secondFactorsNone": "لم يتم تسجيل أي عوامل مصادقة ثانية", - "secondFactorUnavailable": "غير متاح", - "resetSecondFactors": "إعادة تعيين عوامل المصادقة الثانية", - "resetSecondFactorsConfirm": "هل تريد إزالة جميع عوامل المصادقة الثانية لـ {{username}}؟ يمكنهم تسجيل الدخول باستخدام كلمة المرور أو SSO وتسجيل أنفسهم مرة أخرى.", - "secondFactorsResetSuccess": "تم إعادة تعيين العوامل الثانوية", - "secondFactorsResetFailed": "فشل في إعادة تعيين العوامل الثانوية", - "passwordLoginForced": "تم إيقاف تسجيل الدخول بكلمة المرور، لكن لا توجد طريقة تسجيل دخول أخرى مفعّلة، لذا ستبقى مفعّلة مؤقتاً. لن يُحجب أي مستخدم.", - "sslNotRenewed": "لا يوجد ما يجدد هذا الشهادة. ستنتهي صلاحيتها في {{date}}. فعّل التجديد التلقائي في قسم شهادات ACME، أو ارفع شهادة جديدة قبل ذلك.", - "sslSelfSigned": "شهادة موقعة ذاتياً أنشأها Termix. ستظهر تحذيرات في المتصفحات.", - "sslRenewedBy": "تم التجديد تلقائياً بواسطة {{plugin}}", - "sslIssuer": "صدرت بواسطة {{issuer}}", - "sslNames": "تغطي {{names}}", - "sslManualTitle": "رفع شهادة", - "updateExternalAutoProvisionFailed": "فشل في تحديث إعداد الإنشاء التلقائي", - "hostTags": "علامات المضيف المحددة مسبقاً", - "hostTagsDesc": "علامات يراها كل مستخدم كاقتراحات في محرر المضيف. اضغط مسافة أو Enter لإضافة واحدة. إزالة علامة من هنا لا تزيلها من المضيفين.", - "hostTagsError": "تعذر تحميل أو حفظ اقتراحات علامات المضيف.", - "revokeAllSessionsConfirm": "تسجيل خروج {{username}} من كل مكان؟", - "revokeSessionConfirm": "تسجيل خروج هذه الجلسة؟", - "revokeSession": "تسجيل خروج", - "deleteRoleConfirm": "حذف دور {{name}}؟", - "revokeKeyConfirm": "إلغاء صلاحية مفتاح API {{name}}؟", - "revokeKey": "إلغاء صلاحية" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "أين", - "who": "من", - "hostLabel": "المضيف", - "hostPlaceholder": "192.168.1.1 أو example.com", - "portLabel": "المنفذ", - "usernameLabel": "اسم المستخدم", - "usernamePlaceholder": "اسم المستخدم", - "authLabel": "المصادقة", - "passwordLabel": "كلمة المرور", - "passwordPlaceholder": "كلمة المرور", - "privateKeyLabel": "المفتاح الخاص", - "privateKeyPlaceholder": "الصق المفتاح الخاص...", - "credentialLabel": "البيانات الاعتمادية", - "credentialPlaceholder": "اختر بيانات اعتمادية محفوظة", - "protocolLabel": "البروتوكول", - "domainLabel": "النطاق", - "domainPlaceholder": "اختياري", - "connectToAction": "الاتصال بـ {{name}}", - "sshProtocol": "SSH", - "noTarget": "لا يوجد ما هو مثبت يمكنه الاتصال بهذا النوع من المضيفين" + "usernameLabel": "اسم المستخدم" }, "keybindings": { - "description": "ربط المفاتيح بالإجراءات في المحطة والتطبيق، أو تغيير الاختصارات المدمجة.", - "defaultsHeading": "الاختصارات المدمجة", - "fixedHeading": "اختصارات التطبيق", - "fixed": { - "splitRight": "تقسيم لليمين", - "splitDown": "تقسيم للأسفل", - "zoomPane": "تكبير اللوحة المركّز عليها", - "navigatePane": "التنقل بين اللوحات", - "nextTab": "العلامة التالية", - "previousTab": "العلامة السابقة", - "jumpTab": "الانتقال إلى علامة", - "previousView": "العودة إلى عرض الشريط الجانبي السابق", - "fullscreen": "تبديل ملء الشاشة" - }, - "customHeading": "الاختصارات المخصصة", - "addBinding": "إضافة اختصار", - "addBindingTitle": "إضافة اختصار", - "editBindingTitle": "تعديل الاختصار", - "loading": "جارٍ التحميل...", - "noCustomBindings": "لا توجد اختصارات مخصصة بعد", - "defaultBadge": "افتراضي", - "customizedBadge": "مخصص", - "customize": "تخصيص", - "resetToDefault": "إعادة التعيين إلى الافتراضي", - "resetAllToDefaults": "إعادة تعيين الكل إلى الافتراضي", - "cancel": "إلغاء", - "saveBinding": "حفظ الاختصار", - "saveError": "فشل في حفظ اختصارات لوحة المفاتيح", - "pressKeysToRecord": "توليفة المفاتيح", - "pressKeysPlaceholder": "انقر واضغط على المفاتيح", - "recording": "اضغط على المفاتيح...", - "comboRequiredError": "اضغط على توليفة مفاتيح أولاً", - "conflictWarning": "هذه التوليفة مربوطة بالفعل بـ {{combo}}. الحفظ سيجعل كلاهما يعمل.", - "actionLabel": "الإجراء", "actionNextTab": "التبديل إلى علامة التبويب التالية", "actionPreviousTab": "التبديل إلى علامة التبويب السابقة", "actionOpenCommandPalette": "فتح البحث السريع", - "actionReconnectSession": "إعادة الاتصال بالجلسة الحالية", - "unavailableAction": "{{type}} (غير متوفر)", - "actionRequiredError": "اختر إجراءً أولاً", - "deleteConfirm": "حذف هذا الاختصار؟", - "resetAllConfirm": "إعادة تعيين كل اختصار إلى افتراضيه؟" + "actionReconnectSession": "إعادة الاتصال بالجلسة الحالية" }, "userProfile": { - "storageModeLocal": "المتصفح", - "storageModeCloud": "قاعدة البيانات", - "storageModeDescription": "يخزن المتصفح الإعدادات في هذا المتصفح فقط. تقوم قاعدة البيانات بمزامنة الإعدادات مع الخادم وتحميلها على أي جهاز.", - "resetToDefaults": "إعادة التعيين إلى الافتراضي", - "resetToDefaultsSuccess": "تمت إعادة تعيين الإعدادات إلى الافتراضي.", - "storageModeSwitch": "تخزين التفضيلات", - "sectionAccount": "الحساب", - "desktopProfileTitle": "هذا الجهاز فقط", - "desktopProfileDescription": "يعيش هذا الملف الشخصي على هذا الجهاز ويسجل الدخول بنفسه. اربطه بخادم Termix لاستخدام نفس المضيفين والإعدادات على كل جهاز.", - "sectionInterface": "الواجهة", - "interfacePresetDesc": "كم من التفاصيل يعرضها Termix. تظل كل ميزة متاحة.", "preset_simple": "بسيط", "preset_simple_desc": "الأساسيات فقط.", "preset_balanced": "متوازن", "preset_balanced_desc": "التخطيط القياسي.", "preset_advanced": "متقدم", "preset_advanced_desc": "كل شيء مفعّل، مكتظ.", - "presetClearOverrides": "إعادة تعيين الكل", - "presetOverridesTitle": "مخصص", - "presetRevertArea": "تراجع", - "presetConfirmTitle": "التبديل إلى {{preset}}؟", - "presetConfirmDesc": "هذا يعيد تعيين الشريط الجانبي، والتنقل، وتخطيط لوحة المعلومات، وشريط أدوات المحرر، وعرض مدير الملفات. لن يتم لمس مضيفيك، أو بيانات الاعتماد، أو الصفحة الرئيسية.", - "presetConfirmApply": "تطبيق الإعداد المسبق", - "runSetupAgainDesc": "مرر عبر إعداد التشغيل الأول مرة أخرى.", - "runSetupAgainButton": "تشغيل الإعداد", "uiArea_chrome": "واجهة التطبيق", "uiArea_hostList": "قائمة المضيفين", "uiArea_credentialList": "قائمة بيانات الاعتماد", @@ -1717,130 +1197,17 @@ "uiArea_terminal": "المحرر", "uiArea_fileManager": "مدير الملفات", "uiArea_hostEditor": "محرر المضيف", - "sectionAppearance": "المظهر", - "sectionSecurity": "الأمان", - "sectionApiKeys": "مفاتيح API", - "sectionData": "البيانات", - "usernameLabel": "اسم المستخدم", - "roleLabel": "الدور", - "roleAdministrator": "مدير النظام", - "authMethodLabel": "طريقة المصادقة", - "authMethodLocal": "محلي", - "twoFaLabel": "المصادقة الثنائية", - "twoFaOn": "مفعّلة", - "twoFaOff": "معطّلة", - "versionLabel": "الإصدار", - "cliTitle": "سطر أوامر Termix", - "cliDescription": "افتح المحطات الطرفية، ونفّذ الأوامر، وحرّك الملفات من قذيفة النظام الخاصة بك.", - "cliLearnMore": "المزيد من المعلومات", - "deleteAccount": "حذف الحساب", - "deleteAccountDescription": "احذف حسابك نهائيًا", - "deleteButton": "حذف", - "deleteAccountPermanent": "هذا الإجراء دائم ولا يمكن التراجع عنه.", - "deleteAccountWarning": "سيتم حذف جميع الجلسات، والمضيفين، والبيانات الاعتمادية، والإعدادات نهائيًا.", - "confirmPasswordDeletePlaceholder": "أدخل كلمة المرور للتأكيد", "languageLabel": "اللغة", "themeLabel": "السمة", "fontSizeLabel": "حجم الخط", "interfaceFontLabel": "خط الواجهة", "interfaceFontDescription": "يغيّر خط واجهة التطبيق. تحتفظ ملفات تعريف المحطة الطرفية بإعدادات الخط الخاصة بها.", "accentColorLabel": "لون التمييز", - "keyboardShortcuts": "اختصارات لوحة المفاتيح", - "keyboardShortcutsDescription": "تخصيص اختصارات النسخ، واللصق، والأوامر في المحطة الطرفية", - "manageShortcuts": "إدارة", - "commandPalette": "لوحة الأوامر", - "commandPaletteDesc": "تفعيل اختصار لوحة المفاتيح", - "reopenTabsOnLogin": "إعادة فتح علامات التبويب عند تسجيل الدخول", - "reopenTabsOnLoginDesc": "استعد علامات التبويب المفتوحة عند تسجيل الدخول أو تحديث الصفحة، حتى من جهاز آخر", - "confirmTabClose": "تأكيد إغلاق علامة التبويب", - "confirmTabCloseDesc": "اسأل قبل إغلاق علامات تبويب المحطة الطرفية", - "showTabNumbers": "إظهار أرقام علامات التبويب", - "showTabNumbersDesc": "اعرض رقمًا على كل علامة تبويب للمساعدة في التمييز بينها", - "settingsAppRail": "شريط التطبيقات", - "sidebarSettingsMoved": "تم نقل إعدادات عرض شريط المضيفين الجانبي إلى لوحة تخصيص الشريط الجانبي، والتي تُفتح من شريط أدوات المضيفين.", - "showHostTags": "إظهار وسوم المضيف", - "showHostTagsDesc": "اعرض الوسوم في قائمة المضيفين", - "statusColors": "ألوان الحالة الحقيقية", - "statusColorsDesc": "استخدم الأخضر/الأحمر للحالة المتصل/غير متصل بدلاً من لون التمييز", - "pinAppRail": "تثبيت شريط التطبيقات", - "pinAppRailDesc": "أبقِ شريط التطبيقات الجانبي الأيسر موسعًا دائمًا بدلاً من توسيعه عند التمرير فوقه", - "expandAppRailOnHover": "توسيع شريط التطبيقات عند التمرير", - "expandAppRailOnHoverDesc": "اسمح لشريط التطبيقات الجانبي الأيسر بالتوسع عند تحريك المؤشر فوقه", - "appRailHoverPushesContent": "دفع المحتوى عند التوسيع", - "appRailHoverPushesContentDesc": "توفير مساحة للشريط الموسع بدلاً من فتحه فوق الصفحة. سيتم تغيير حجم الجلسات المفتوحة، مثل سطح المكتب عن بُعد، في كل مرة", - "showPinAppRailButton": "إظهار زر تثبيت شريط التطبيقات", - "showPinAppRailButtonDesc": "اعرض زرًا في شريط التطبيقات لتثبيته مفتوحًا. معطّل افتراضيًا.", - "settingsNavigation": "التنقل", - "navigationTabsDesc": "اختر علامات التبويب التي تظهر في شريط التطبيقات", - "settingsUpdates": "التحديثات", - "disableUpdateChecks": "تعطيل فحوصات التحديث", - "disableUpdateChecksDesc": "توقف عن التحقق من وجود تحديثات", - "changePassword": "تغيير كلمة المرور", - "currentPasswordLabel": "كلمة المرور الحالية", - "currentPasswordPlaceholder": "كلمة المرور الحالية", - "newPasswordLabel": "كلمة المرور الجديدة", - "newPasswordPlaceholder": "كلمة المرور الجديدة", - "confirmPasswordLabel": "تأكيد كلمة المرور الجديدة", - "confirmPasswordPlaceholder": "تأكيد كلمة المرور الجديدة", - "updatePassword": "تحديث كلمة المرور", - "createApiKeyTitle": "إنشاء مفتاح API", - "createApiKeyDescription": "أنشئ مفتاح API جديد للوصول البرمجي.", - "apiKeyNameLabel": "الاسم", - "apiKeyNamePlaceholder": "مثال: خط أنابيب CI", - "expiryDateLabel": "تاريخ الانتهاء", - "optional": "اختياري", - "cancel": "إلغاء", - "createKey": "إنشاء مفتاح", - "apiKeyCreatedWarning": "تم إنشاء المفتاح - انسخه الآن، لن يظهر مرة أخرى.", - "copyApiKey": "نسخ مفتاح API", - "copiedToClipboard": "تم النسخ إلى الحافظة", "apiKeyCount_zero": "{{count}} مفتاح", "apiKeyCount_one": "مفتاح واحد", "apiKeyCount_two": "{{count}} مفتاحين", "apiKeyCount_few": "{{count}} مفاتيح", "apiKeyCount_many": "{{count}} مفتاحًا", - "apiKeyCount_other": "{{count}} مفتاح", - "newKey": "مفتاح جديد", - "noApiKeys": "لا توجد مفاتيح API بعد.", - "apiKeyActive": "نشط", - "apiKeyUsageHint": "قم بتضمين مفتاحك في", - "apiKeyUsageHintHeader": "الرأس.", - "apiKeyPermissionsHint": "تورث المفاتيح صلاحيات المستخدم الذي أنشأها.", - "exportData": "تصدير بياناتي", - "exportDataDesc": "قم بتنزيل نسخة احتياطية من مضيفيك، بيانات الاعتماد، والإعدادات لنقلها إلى جهاز آخر", - "export": "تصدير", - "exporting": "جارٍ التصدير...", - "importData": "استيراد بياناتي", - "importDataDesc": "استعد مضيفيك، بيانات الاعتماد، والإعدادات من ملف نسخ احتياطي بصيغة .sqlite", - "importDataSelected": "المحدد: {{name}}", - "selectFile": "اختر ملفًا", - "changeFile": "تغيير", - "import": "استيراد", - "importing": "جارٍ الاستيراد...", - "exportSuccess": "تم تصدير البيانات بنجاح", - "exportFailed": "فشل تصدير البيانات", - "importSelectFile": "يرجى اختيار ملف أولاً", - "importCompleted": "اكتمل الاستيراد: تم استيراد {{total}} عنصر، تم تخطي {{skipped}}", - "importFailed": "فشل الاستيراد: {{error}}", - "roleUser": "مستخدم", - "authMethodDual": "المصادقة المزدوجة", - "authMethodExternal": "خارجي", - "done": "تم", - "apiKeyNameRequired": "اسم المفتاح مطلوب", - "apiKeyCreated": "تم إنشاء مفتاح API \"{{name}}\"", - "apiKeyCreateFailed": "فشل إنشاء مفتاح API", - "apiKeyUser": "مستخدم", - "apiKeyExpires": "ينتهي في", - "apiKeyRevoked": "تم إلغاء مفتاح API \"{{name}}\"", - "apiKeyRevokeFailed": "فشل إلغاء مفتاح API", - "passwordFieldsRequired": "كلمة المرور الحالية والجديدة مطلوبة", - "passwordMismatch": "كلمات المرور غير متطابقة", - "passwordTooShort": "يجب أن تتكون كلمة المرور من 6 أحرف على الأقل", - "passwordUpdated": "تم تحديث كلمة المرور بنجاح", - "passwordUpdateFailed": "فشل تحديث كلمة المرور", - "deletePasswordRequired": "كلمة المرور مطلوبة لحذف حسابك", - "deleteFailed": "فشل حذف الحساب", - "deleting": "جارٍ الحذف...", "colorPickerTooltip": "فتح منتقي الألوان", "themeSystem": "النظام", "themeLight": "فاتح", @@ -1851,18 +1218,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "تم تسجيل الدخول إلى {{server}}", - "linkedProfileDescription": "يستخدم هذا الجهاز حسابك على الخادم ويحفظ نسخة من بياناتك، لذا يعمل حتى بدون اتصال بالإنترنت.", - "manageSync": "إدارة المزامنة", - "setUpSync": "الربط بخادم", - "settingsTabsAndShortcuts": "العلامات والاختصارات", - "onBetaTitle": "أنت تستخدم نسخة تجريبية", - "onBetaDescription": "شكراً لتجربتك. أخبرنا عن أي مشاكل تواجهك.", - "tryBetaTitle": "جرّب الميزات الجديدة مبكراً", - "tryBetaDescription": "انضم إلى البرنامج التجريبي في التحديثات.", - "sendBetaFeedback": "إرسال ملاحظات حول النسخة التجريبية", - "openUpdates": "التحديثات" + "themeGruvbox": "Gruvbox" } } }, @@ -2163,8 +1519,7 @@ "hasDependents": "{{name}} مطلوب من قبل {{list}}. قم بتعطيلها أو إلغاء تثبيتها أولاً.", "missingDependencies": "{{name}} يحتاج إلى {{list}}، وهو غير مثبت.", "consentChanged": "تغير ما تطلبه هذه الإضافة منذ أن نظرته. تحقق من القائمة مرة أخرى.", - "upload": "تعذر قراءة {{name}}: {{error}}", - "developerMode": "تعذر تغيير وضع المطور: {{error}}" + "upload": "تعذر قراءة {{name}}: {{error}}" }, "data": { "title": "البيانات المخزنة", @@ -2317,13 +1672,7 @@ "browsePlugins": "تصفح الإضافات", "loading": "جارٍ التحميل", "developer": { - "title": "وضع مطور الإضافات", - "hint": "يسمح للمسؤولين بتثبيت الإضافات من ملف .tmxplug في علامة التبويب الإضافات، دون فحوصات السجل. استخدمه لبناء واختبار إضافاتك الخاصة.", - "enableTitle": "تفعيل وضع المطور؟", - "enableBody": "سيتمكن المسؤولون من تثبيت الإضافات من ملفات لم يتم فحصها بواسطة Termix. يمكن للإضافة أن تفعل أي شيء تسمح به قدراتها، لذا قم بتفعيل هذا فقط أثناء بناء أو اختبار الإضافات.", - "enable": "تفعيل", - "installFromFile": "التثبيت من ملف", - "signedOnly": "تم تعيين TERMIX_REQUIRE_SIGNED_PLUGINS، لذا يبقى التثبيت من ملف محظورًا." + "installFromFile": "التثبيت من ملف" }, "count": { "downloads_zero": "لا توجد تنزيلات.", @@ -2365,71 +1714,7 @@ "secretSet": "تم التعيين", "secretNotSet": "لم يتم التعيين", "secretReplace": "استبدال", - "pluginSettingsSaved": "تم حفظ الإعدادات", - "pluginSettingsInvalid": "تعذر حفظ بعض الإعدادات. تحقق من الحقول المميزة.", - "pluginSettingsSaveFailed": "فشل حفظ الإعدادات", - "pluginSettingsLoadFailed": "فشل تحميل الإعدادات", - "featureUnavailable": "{{name}} غير متاح حالياً. يتم حفظ هذه الإعدادات لكنها لن تُطبّق.", - "account": "الحساب", - "security": "الأمان", - "apiKeys": "مفاتيح API", - "data": "البيانات والمزامنة", - "interface": "الواجهة", - "appearance": "المظهر", - "keybindings": "اختصارات لوحة المفاتيح", - "adminGeneral": "عام", - "adminUsers": "المستخدمون", - "adminSessions": "الجلسات", - "adminRoles": "الأدوار", - "adminHostDefaults": "الإعدادات الافتراضية للمضيف", - "adminBranding": "العلامة التجارية", - "adminDatabase": "قاعدة البيانات", - "adminSsl": "SSL", - "adminApiKeys": "مفاتيح API", - "adminAuditLog": "سجل التدقيق", - "bandYou": "حسابك", - "bandApp": "هذه التطبيق", - "bandPlugins": "المكوّنات الإضافية", - "bandInstance": "هذا الخادم", - "searchPlaceholder": "البحث في الإعدادات", - "noResults": "لا توجد إعدادات مطابقة.", - "pages": "الصفحات", - "instanceSettings": "إعدادات الخادم", - "nothingHere": "لا يوجد شيء للإعداد هنا.", - "searchPage": "البحث في هذه الصفحة", - "noPageMatches": "لا توجد نتائج مطابقة في هذه الصفحة.", - "updates": { - "title": "التحديثات", - "betaProgram": "برنامج بيتا", - "betaIntro": "إصدارات بيتا هي نسخ مبكرة من الإصدار القادم من Termix. تُصدر في أيام الثلاثاء والجمعة عندما يكون هناك شيء جديد لتجربته. قد تحتوي على أخطاء، وملاحظاتك هي ما يجعل الإصدار المستقر أفضل.", - "termixBetas": "إصدارات Termix بيتا", - "termixBetasHint": "أبلغني عن إصدارات بيتا الجديدة، وليس فقط الإصدارات المستقرة.", - "runningBetaBuild": "أنت تستخدم إصدار بيتا. للخروج منه، عد إلى صورة أو مثبت مستقر.", - "howToInstall": "كيفية الحصول على إصدار بيتا", - "desktopInstall": "حمّل مثبت بيتا وثبّته فوق هذا الإصدار.", - "downloadBeta": "تحميل {{version}}", - "dockerInstall": "غيّر الصورة إلى وسم بيتا وأعد تشغيل الحاوية:", - "copy": "نسخ", - "copied": "تم النسخ", - "copyFailed": "تعذر النسخ", - "learnMore": "اعرف المزيد عن إصدارات بيتا", - "feedback": "الملاحظات", - "feedbackHint": "وجدت خطأً أو لديك فكرة؟ ستصل مباشرة إلى المطورين مع ملء نسختك تلقائياً.", - "sendFeedback": "إرسال ملاحظات حول بيتا", - "releases": "الإصدارات", - "thisVersion": "هذا الإصدار", - "newestStable": "أحدث إصدار مستقر", - "newestBeta": "أحدث إصدار بيتا", - "noRelease": "لا يوجد حالياً", - "pluginBetas": "إصدارات الإضافات بيتا", - "pluginBetasIntro": "يمكن لكل إضافة استخدام إصدارات بيتا بشكل مستقل. لتجربة ذلك، افتح الإضافة واضغط على \"تجربة بيتا\".", - "openPlugins": "فتح الإضافات", - "waitingForStable": "العودة إلى الإصدار المستقر. يبقى على {{version}} حتى يتوفر إصدار مستقر أحدث.", - "backToStable": "العودة إلى الإصدار المستقر", - "allPluginsBeta": "استخدام إصدارات بيتا لجميع الإضافات", - "allPluginsStable": "إعادة جميع الإضافات إلى الإصدار المستقر", - "saveFailed": "تعذر حفظ التغيير" - } + "featureUnavailable": "{{name}} غير متاح حالياً. يتم حفظ هذه الإعدادات لكنها لن تُطبّق." }, "managerCard": { "refresh": "تحديث", @@ -2439,11 +1724,6 @@ "filter": "تصفية..." }, "sync": { - "server": "خادم Termix", - "account": "الحساب", - "status": "الحالة", - "never": "أبداً", - "justNow": "الآن", "minutesAgo_zero": "منذ {{count}} دقائق", "minutesAgo_one": "منذ دقيقة واحدة", "minutesAgo_two": "منذ دقيقتين", @@ -2456,78 +1736,13 @@ "hoursAgo_few": "منذ {{count}} ساعات", "hoursAgo_many": "منذ {{count}} ساعة", "hoursAgo_other": "منذ {{count}} ساعة", - "actionFailed": "لم ينجح ذلك. حاول مرة أخرى.", - "unlinkedTitle": "هذا الجهاز فقط", - "unlinkedBody": "يعمل Termix بشكل مستقل على هذا الجهاز. اربطه بخادم Termix الخاص بك للحفاظ على كل شيء متزامناً.", - "unlinkedPointHosts": "مضيفيك، بيانات الاعتماد، الأجزاء الإعدادات تتبعك إلى كل جهاز.", - "unlinkedPointOffline": "كل شيء يعمل حتى عندما لا يمكن الوصول إلى الخادم، ويتم المزامنة لاحقاً.", - "unlinkedPointAccount": "تسجيل الدخول بحساب الخادم الخاص بك، وستظهر هنا أيضاً المضيفين الذين شاركهم معك الآخرون.", - "linkButton": "الربط بخادم", - "state": { - "syncing": "جارٍ المزامنة", - "offline": "الخادم غير متاح", - "error": "توقفت المزامنة", - "signedOut": "تم تسجيل الخروج", - "synced": "تمت المزامنة {{time}}" - }, "pending_zero": "{{count}} تغييرات في انتظار المزامنة", "pending_one": "تغيير واحد في انتظار المزامنة", "pending_two": "تغييران في انتظار المزامنة", "pending_few": "{{count}} تغييرات في انتظار المزامنة", "pending_many": "{{count}} تغييراً في انتظار المزامنة", "pending_other": "{{count}} تغيير في انتظار المزامنة", - "signInAgain": "تسجيل الدخول مرة أخرى", - "syncNow": "مزامنة الآن", - "unlink": "فك الربط", - "unlinked": "لم يعد هذا الجهاز مرتبطاً", - "unlinkTitle": "فصل هذا الجهاز؟", - "unlinkDescription": "سيؤدي ذلك إلى إيقاف المزامنة وتسجيل الخروج من الخادم. سيتم إزالة المضيفين الذين شاركهم معك آخرون من هذا الجهاز في كلتا الحالتين.", - "unlinkKeepTitle": "إبقاء بياناتي هنا", - "unlinkKeepBody": "تبقى المضيفين، بيانات الاعتماد والإعدادات على هذا الجهاز وتعمل بشكل مستقل.", - "unlinkRemoveTitle": "إزالة البيانات المتزامنة", - "unlinkRemoveBody": "يتم إزالة كل ما جاء من الخادم من هذا الجهاز. تبقى فقط المضيفين المحفوظين على هذا الجهاز.", - "conflictsTitle": "التعارضات", - "conflictsDescription": "تم تغيير هذه هنا وعلى الخادم في نفس الوقت. النسخة الموجودة على الخادم هي المستخدمة حالياً. احتفظ بنسختك لإرسالها إلى الخادم بدلاً من ذلك.", - "keepMine": "احتفظ بنسختي", - "keepServer": "احتفظ بنسخة الخادم", - "errorsTitle": "غير متزامن", - "errorsDescription": "لم يقبل الخادم هذه التغييرات. تبقى على هذا الجهاز.", - "errorPermission": "حسابك على الخادم غير مسموح له بإجراء هذا التغيير.", - "retry": "حاول مرة أخرى", - "whatSyncs": "ما الذي يتم مزامنته", - "whatSyncsDescription": "أعطِ أي شيء تريد إبقائه على هذا الجهاز فقط.", - "coreGroup": "Termix", - "notOnServer": "الخادم لا يحتوي على هذا", - "notOnDevice": "غير موجود على هذا الجهاز بعد", - "localOnlyHint": "يمكنك أيضاً إبقاء مضيفين أو مجلدات فردية على هذا الجهاز من إعداداتهم.", - "originTitle": "من أين تبدأ الاتصالات", - "originDescription": "اتصل بالمضيفين من هذا الجهاز، أو عبر الخادم. يمكنك تغيير هذا لكل مضيف.", - "originLocal": "هذا الجهاز", - "originRemote": "الخادم", - "entities": { - "hosts": "المضيفين", - "sshCredentials": "بيانات الاعتماد", - "sshFolders": "المجلدات", - "userPreferences": "التفضيلات", - "pluginUserSettings": "إعدادات الإضافات", - "sharedHosts": "المضيفين المشتركين معك", - "sharedCredentials": "بيانات الاعتماد المشتركة معك", - "vaultProfiles": "ملفات تعريف Vault", - "snippetFolders": "مجلدات المقاطع", - "snippets": "المقاطع", - "dashboardServiceLinks": "روابط الخدمات", - "homepageItems": "عناصر الصفحة الرئيسية", - "networkTopology": "خريطة الشبكة", - "workspaces": "مساحات العمل", - "hostDefaults": "الإعدادات الافتراضية للمضيفين", - "hostDefaultsAdmin": "الإعدادات الافتراضية لمضيفي الخادم", - "aiProviders": "مزودي الذكاء الاصطناعي", - "homepageLayouts": "تخطيطات الصفحة الرئيسية", - "accountProfile": "ملف تعريف الحساب" - }, "proxy": { - "title": "الوكيل العكسي", - "description": "مطلوب فقط عندما يكون هناك شيء مثل Cloudflare Access أو صفحة تسجيل الدخول أمام خادمك.", "headersTitle": "رؤوس إضافية", "headersHint": "تُرسَل مع كل طلب إلى الخادم، على سبيل المثال رمز خدمة Cloudflare Access.", "headerName": "اسم الرأس", @@ -2540,8 +1755,7 @@ "username": "اسم المستخدم", "password": "كلمة المرور", "allowInvalidCertificate": "الثقة بشهادة موقعة ذاتياً", - "allowInvalidCertificateHint": "فقط لخادمك الخاص، عندما لا تكون شهادته من جهة معروفة.", - "saved": "تم الحفظ" + "allowInvalidCertificateHint": "فقط لخادمك الخاص، عندما لا تكون شهادته من جهة معروفة." }, "problems": { "invalidUrl": "هذا لا يبدو كعنوان ويب.", @@ -2587,6 +1801,27 @@ "linking": "جارٍ الربط وتشغيل المزامنة الأولى...", "linked": "تم الربط. بياناتك تتم مزامنتها الآن.", "signedInAgain": "تم تسجيل الدخول. المزامنة تعمل مرة أخرى." + }, + "entities": { + "hosts": "المضيفين", + "sshCredentials": "بيانات الاعتماد", + "sshFolders": "المجلدات", + "userPreferences": "التفضيلات", + "pluginUserSettings": "إعدادات الإضافات", + "sharedHosts": "المضيفين المشتركين معك", + "sharedCredentials": "بيانات الاعتماد المشتركة معك", + "vaultProfiles": "ملفات تعريف Vault", + "snippetFolders": "مجلدات المقاطع", + "snippets": "المقاطع", + "dashboardServiceLinks": "روابط الخدمات", + "homepageItems": "عناصر الصفحة الرئيسية", + "networkTopology": "خريطة الشبكة", + "workspaces": "مساحات العمل", + "hostDefaults": "الإعدادات الافتراضية للمضيفين", + "hostDefaultsAdmin": "الإعدادات الافتراضية لمضيفي الخادم", + "aiProviders": "مزودي الذكاء الاصطناعي", + "homepageLayouts": "تخطيطات الصفحة الرئيسية", + "accountProfile": "ملف تعريف الحساب" } }, "hostDefaults": { @@ -2603,43 +1838,24 @@ "resetTitle": "يحدد هذا المضيف قيمته الخاصة. انقر لاستخدام القيمة الافتراضية من {{source}} مرة أخرى", "clearTitle": "تم التعيين على هذا المستوى. انقر لإزالته واستخدام {{source}} بدلاً من ذلك", "inheritedTitle": "يتبع القيمة الافتراضية من {{source}}", - "titleAdmin": "الإعدادات الافتراضية لمضيفات الخادم", - "titleUser": "إعداداتي الافتراضية للمضيفات", - "titleFolder": "الإعدادات الافتراضية للمجلد: {{name}}", - "descriptionAdmin": "القيم الافتراضية لكل مضيف على هذا الخادم. لا يزال بإمكان إعدادات المستخدم الخاصة، أو إعدادات المجلد، أو المضيف نفسه تعيين قيمة مختلفة. غيّر حقلًا لتعيينه هنا، أو امسحه لتركه غير محدد.", - "descriptionUser": "القيم الافتراضية لجميع مضيفيك، فوق قيم الخادم. لا يزال بإمكان المجلد أو المضيف نفسه تعيين قيمة مختلفة. غيّر حقلًا لتعيينه هنا، أو امسحه لتركه غير محدد.", - "descriptionFolder": "القيم الافتراضية للمضيفات في هذا المجلد ومجلداته الفرعية، فوق قيمك الخاصة. لا يزال بإمكان المضيف تعيين قيمة مختلفة. غيّر حقلًا لتعيينه هنا، أو امسحه لتركه غير محدد.", - "save": "حفظ الإعدادات الافتراضية", "saved_zero": "تم حفظ الإعدادات الافتراضية. تم تحديث {{count}} مضيفًا.", "saved_one": "تم حفظ الإعدادات الافتراضية. تم تحديث مضيف واحد.", "saved_two": "تم حفظ الإعدادات الافتراضية. تم تحديث مضيفين.", "saved_few": "تم حفظ الإعدادات الافتراضية. تم تحديث {{count}} مضيفين.", "saved_many": "تم حفظ الإعدادات الافتراضية. تم تحديث {{count}} مضيفًا.", "saved_other": "تم حفظ الإعدادات الافتراضية. تم تحديث {{count}} مضيفًا.", - "savedInBackground": "تم حفظ الإعدادات الافتراضية. جاري تحديث المضيفات في الخلفية.", "appliedToHosts_zero": "تم تحديث {{count}} مضيفًا بالإعدادات الافتراضية الجديدة.", "appliedToHosts_one": "تم تحديث مضيف واحد بالإعدادات الافتراضية الجديدة.", "appliedToHosts_two": "تم تحديث مضيفين بالإعدادات الافتراضية الجديدة.", "appliedToHosts_few": "تم تحديث {{count}} مضيفين بالإعدادات الافتراضية الجديدة.", "appliedToHosts_many": "تم تحديث {{count}} مضيفًا بالإعدادات الافتراضية الجديدة.", "appliedToHosts_other": "تم تحديث {{count}} مضيفًا بالإعدادات الافتراضية الجديدة.", - "saveFailed": "تعذر حفظ الإعدادات الافتراضية", - "loadFailed": "تعذر تحميل الإعدادات الافتراضية", - "confirmTitle": "حفظ الإعدادات الافتراضية؟", "confirmChanges_zero": "{{count}} مضيفًا يتبع هذه الإعدادات الافتراضية وسيتم تغييره.", "confirmChanges_one": "مضيف واحد يتبع هذه الإعدادات الافتراضية وسيتم تغييره.", "confirmChanges_two": "مضيفان يتبعان هذه الإعدادات الافتراضية وسيتم تغييرهما.", "confirmChanges_few": "{{count}} مضيفين يتبعان هذه الإعدادات الافتراضية وسيتم تغييرهما.", "confirmChanges_many": "{{count}} مضيفًا يتبع هذه الإعدادات الافتراضية وسيتم تغييره.", "confirmChanges_other": "{{count}} مضيفًا يتبع هذه الإعدادات الافتراضية وسيتم تغييره.", - "confirmNoChanges": "لا توجد تغييرات في المضيفين الحاليين. ستبدأ المضيفات الجديدة بهذه الإعدادات الافتراضية.", - "menuMyDefaults": "إعداداتي الافتراضية للمضيفات", - "folderDefaultsAction": "الإعدادات الافتراضية للمجلد", - "adminSectionDescription": "قم بتعيين الإعدادات الافتراضية التي يتبعها كل مضيف على هذا الخادم، لكل إعداد يمتلكه المضيف، بما في ذلك كل إضافة (Plugin). يمكن للمستخدمين والمجلدات تعيين إعداداتهم الخاصة فوق ذلك، وأي مضيف لا يزال بإمكانه استخدام قيمته الخاصة.", - "editServerDefaults": "تحرير الإعدادات الافتراضية للخادم", - "resetMenu": "إعادة تعيين", - "resetAll": "إعادة تعيين الكل إلى الافتراضي", - "resetCore": "إعادة تعيين الاتصال و SSH إلى الافتراضي", "resetDone_zero": "لا يوجد مضيف.", "resetDone_one": "مضيف واحد يتبع الآن الإعدادات الافتراضية.", "resetDone_two": "مضيفان يتبعان الآن الإعدادات الافتراضية.", @@ -2657,40 +1873,13 @@ "fields": { "secretSaved": "تم الحفظ. اكتب لاستبداله." }, - "sharing": { - "revokeConfirm": "إزالة صلاحية الوصول لـ {{name}}؟", - "revoke": "إزالة صلاحية الوصول" - }, "manage": { - "searchSettings": "البحث في الإعدادات", - "noMatchingSettings": "لا توجد إعدادات مطابقة.", - "sections": "الأقسام", - "sectionNeedsAttention": "يحتاج شيء هنا إلى الانتباه", "needsAttention_zero": "لا شيء يحتاج إلى الانتباه.", "needsAttention_one": "شيء واحد يحتاج إلى الانتباه.", "needsAttention_two": "شيئان يحتاجان إلى الانتباه.", "needsAttention_few": "{{count}} أشياء تحتاج إلى الانتباه.", "needsAttention_many": "{{count}} شيئًا تحتاج إلى الانتباه.", "needsAttention_other": "{{count}} شيء يحتاج إلى الانتباه.", - "bandHost": "المضيف", - "bandFeatures": "البروتوكولات والإضافات", - "bandCredential": "بيانات الاعتماد", - "sshConnection": "اتصال SSH", - "errorAddressRequired": "العنوان مطلوب.", - "errorPortRange": "استخدم منفذًا بين 1 و 65535.", - "defaults": "الافتراضيات", - "searchHosts": "البحث في المضيفين", - "searchCredentials": "البحث في بيانات الاعتماد", - "searchDefaults": "البحث في الافتراضيات", - "addCredential": "إضافة بيانات اعتماد", - "nothingMatches": "لا يوجد تطابق", - "nothingYet": "لا شيء هنا بعد", - "emptyHostsHint": "أضف مضيفًا وسيظهر هنا، في أي مجلد تحدده له.", - "emptyCredentialsHint": "يمكن إعادة استخدام بيانات الاعتماد المحفوظة من قبل أي مضيف.", - "collapse": "طي", - "expand": "توسيع", - "cannotBeUndone": "لا يمكن التراجع عن هذا.", - "hostNotFound": "تعذر العثور على ذلك المضيف. حاول تحديث القائمة.", "hostCount_zero": "لا يوجد مضيف.", "hostCount_one": "مضيف واحد", "hostCount_two": "مضيفان", @@ -2702,14 +1891,7 @@ "credentialCount_two": "بيانتا اعتماد", "credentialCount_few": "{{count}} بيانات اعتماد", "credentialCount_many": "{{count}} بيانات اعتمادًا", - "credentialCount_other": "{{count}} بيانات اعتماد", - "newHost": "مضيف جديد", - "newCredential": "بيانات اعتماد جديدة", - "advanced": "متقدم", - "pickHost": "اختر مضيفًا لتحريره", - "pickCredential": "اختر بيانات اعتماد لتحريرها", - "pickDefaults": "اختر مستوى من الافتراضيات لتحريره", - "pickHint": "كل شيء يتعلق بالاتصال موجود هنا، ومجمّع لتسهيل العثور عليه." + "credentialCount_other": "{{count}} بيانات اعتماد" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/bg_BG.json b/src/ui/locales/translated/bg_BG.json index 91fda935b..44c5ea585 100644 --- a/src/ui/locales/translated/bg_BG.json +++ b/src/ui/locales/translated/bg_BG.json @@ -141,7 +141,6 @@ "continue": "Продължи", "error": "Грешка", "unsavedChanges": "Несъхранени промени", - "more": "Още", "loading": "Зареждане...", "host": "Хост", "selectHost": "Изберете хост...", @@ -154,7 +153,6 @@ "cancel": "Отказ", "username": "Потребителско име", "login": "Вход", - "logout": "Изход", "register": "Регистрация", "password": "Парола", "confirmPassword": "Потвърдете паролата", @@ -165,8 +163,6 @@ "rename": "Преименувай", "edit": "Редактирай", "confirm": "Потвърди", - "next": "Напред", - "previous": "Предишен", "refresh": "Опресни", "language": "Език", "backendReconnected": "Връзката със сървъра е възстановена", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Прочетете за всеки от тях" }, "desktopUpdates": { - "title": "Десктоп приложение", - "mode": "Обновления", - "modeHint": "Как това приложение получава нови версии.", - "manualModeHint": "Тази копия не може да се обновява сама, така че Termix само ви информира, когато има нова версия.", "modeAutomatic": "Автоматично", "modePrompt": "Питай първо", "modeNever": "Никога", @@ -247,15 +239,6 @@ "onboardingTitle": "Обновления на приложението", "onboardingBody": "Десктоп приложението вече може да се обновява само. Изберете как искате да пристигат новите версии. Можете да промените това по-късно в Настройки, Обновления.", "onboardingManual": "Тази копия на приложението е инсталирана по начин, който не позволява самообновяване, така че Termix ще ви информира, когато има нова версия, с връзка за изтегляне.", - "status": "Версия {{version}}", - "statusIdle": "Все още не е проверено", - "statusChecking": "Проверка за обновления", - "statusAvailable": "Версия {{version}} е налична", - "statusDownloading": "Изтегляне на {{version}} ({{progress}}%)", - "statusReady": "Версия {{version}} е готова. Рестартирайте, за да я инсталирате.", - "statusUpToDate": "Имате най-новата версия", - "statusError": "Не може да се провери за обновления. Опитайте отново по-късно.", - "checkNow": "Провери сега", "download": "Изтегли", "restart": "Рестартирай сега", "later": "По-късно", @@ -269,26 +252,11 @@ "terminal": "Терминал", "close": "Затвори", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Копирай парола", - "copySudoPassword": "Копирай sudo парола", - "passwordCopied": "Паролата е копирана в клипборда", - "failedToCopyPassword": "Грешка при копирането на паролата", - "refreshTab": "Опресни връзката", - "renameTab": "Преименувай таба", "dashboard": "Табло", "quickConnect": "Бърза връзка", - "openAsTabHint": "Ctrl+клик или среден клик за отваряне като таб", - "openAsTab": "Отвори като таб", - "openInRightDock": "Отвори в десния панел", - "closeRightDock": "Затвори десния панел", - "toggleRightDock": "Превключи десния панел", "hosts": "Хостове", "credentials": "Удостоверения", "connections": "Връзки", - "keepSideMenuOpen": "Запази менюто отворено", - "collapseSideMenu": "Свий менюто", - "roleAdministrator": "Администратор", - "roleUser": "Потребител", "sync": "Синхронизиране", "reconnectDisconnectedTerminals": "Повторно свързване на всички прекъснати терминали", "reconnectingTerminals_one": "Повторно свързване на {{count}} терминал", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "Неуспешно стартиране на повторно свързване на {{count}} терминала", "fullscreenUnsupported": "Цял екран не се поддържа от този браузър", "fullscreenFailed": "Неуспешно превключване на цял екран", - "resetSidebarWidth": "Нулиране на ширината", - "collapseSidebar": "Свий страничната лента", - "openSidebar": "Отвори страничната лента", "confirmCloseHost": "Затваряне на {{host}}?", - "enterFullscreen": "Вход в цял екран (Ctrl+Shift+F)", - "exitFullscreen": "Изход от цял екран (Ctrl+Shift+F)", - "group": { - "objects": "Мои", - "tools": "Инструменти", - "system": "Система" - }, - "searchEverything": "Търсене на хостове, таблове и действия", - "search": "Търсене", "hiddenCount_one": "{{count}} скрит", "hiddenCount_other": "{{count}} скрити", - "showInRail": "Покажи в страничната лента", - "moveUp": "Премести нагоре", - "moveDown": "Премести надолу", - "resetRailOrder": "Нулиране на реда", - "hideFromRail": "Скрий от страничната лента", - "openSettings": "Отвори настройките", "settings": "Настройки", "manage": "Управление", - "mobileNavigation": "Навигация", "plugins": "Добавки" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "Импортирането е завършено: {{imported}} импортирани, {{updated}} актуализирани, {{failed}} неуспешни", "importHostsFailed": "Неуспешно импортиране на хостове" }, - "commandPalette": { - "searchPlaceholder": "Търсене на хостове, команди или настройки...", - "quickActions": "Бързи действия", - "navigation": "Навигация", - "orShortcut": "или", - "addNewHost": "Добавяне на нов хост", - "adminSettings": "Административни настройки", - "addCredential": "Добавяне на идентификационни данни", - "recentActivity": "Скорошна активност", - "serversAndHosts": "Сервери и хостове", - "noHostsFound": "Няма намерени хостове, съвпадащи с \"{{search}}\"", - "links": "Връзки", - "navigate": "Навигация", - "select": "Избор", - "pluginActions": "Още действия", - "noTargetTab": "Няма отворен терминален таб", - "documentation": "Документация" - }, "splitScreen": { "title": "Разделен екран", "defaultLabel": "Раздел {{number}}", "splitRight": "Разделяне надясно", "splitDown": "Разделяне надолу", - "addToSplit": "Добавяне към {{split}}", "paneEmptyItem": "Панел {{index}}: празен", "paneItem": "Панел {{index}}: {{label}}", "paneNumber": "Панел {{index}}", - "newPaneRight": "Нов панел отдясно", - "newPaneBelow": "Нов панел отдолу", "emptyTitle": "Празен панел", "emptyHint": "Изберете нещо за показване тук. Докато този панел е избран, всичко, което отворите от страничната лента, се отваря и тук.", "openTabs": "Отворени табове", @@ -962,7 +890,6 @@ "clearPane": "Изчистване на този панел", "zoom": "Увеличаване на панела", "unzoom": "Възстановяване на подредбата", - "unsplit": "Обединяване", "layouts": "Подредби", "applyLayout": "Промяна на подредбата", "maxPanes_one": "Едно разделяне може да съдържа до {{count}} панел", @@ -971,8 +898,6 @@ "dropHere": "Пускане за показване тук", "paneActions": "Действия с панела", "dividerHint": "Плъзнете за промяна на размера. Кликнете два пъти за изравняване.", - "openInSplit": "Отваряне в разделяне", - "openInNewSplit": "Ново разделяне с текущия таб", "shortcuts": "Клавишни комбинации", "shortcutNavigate": "Преместване между панелите", "presets": { @@ -986,23 +911,6 @@ "grid6": "Мрежа от шест" } }, - "connections": { - "noConnections": "Няма връзки", - "noConnectionsDesc": "Отворете терминал, файлов мениджър или отдалечен работен плот, за да видите връзките тук", - "connectedFor": "Свързан за {{duration}}", - "connected": "Свързан", - "disconnected": "Разкачен", - "reconnect": "Повторно свързване", - "sectionOpen": "Отворени", - "sectionBackground": "В фонов режим", - "backgroundDesc": "Сесиите се запазват за {{minutes}} минути след разкачване и могат да бъдат възстановени.", - "expiresIn": "Изтича след {{duration}}", - "search": "Търсене на връзки...", - "noSearchResults": "Няма намерени връзки, отговарящи на търсенето", - "rename": "Преименуване на сесия", - "forgetConfirm": "Да прекратите фоновата сесия за {{name}}?", - "forget": "Прекратяване на сесия" - }, "sshAuth": { "totpRequired": "Изисква се двуфакторна автентикация", "totpCodeLabel": "Код за потвърждение", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "парола за ключ", "pastePrivateKey": "Поставете вашия личен ключ тук...", - "enterPassword": "Въведете вашата парола", - "apiKeyName": "напр. CI Pipeline", - "credentialName": "напр. Production SSH Key", - "optionalDetails": "Допълнителни детайли...", - "sshUsername": "напр. root или deploy", - "hostAddress": "10.0.0.1 или example.com", - "hostName": "напр. Web Server Production" + "enterPassword": "Въведете вашата парола" }, "dashboard": { - "title": "Табло", - "github": "GitHub", - "reportBug": "Съобщете за грешка", - "discord": "Discord", - "docs": "Документация", - "donate": "Дарете", - "serverOverview": "Преглед на сървъра", - "version": "Версия", "updateAvailable": "Налична актуализация", - "beta": "Бета", - "uptime": "Време на работа", - "database": "База данни", - "healthy": "Здравословно", - "error": "Грешка", - "totalHosts": "Общо хостове", - "totalCredentials": "Общо идентификационни данни", - "recentActivity": "Последна активност", - "reset": "Нулиране", - "noRecentActivity": "Няма последна активност", - "quickActions": "Бързи действия", - "addHost": "Добави хост", - "addCredential": "Добави идентификационни данни", - "adminSettings": "Настройки на администратора", - "userProfile": "Профил на потребителя", - "serverStats": "Статистика на сървъра", - "customizeLayout": "Персонализирай таблото", - "justNow": "току-що" + "beta": "Бета" }, "dashboardTab": { "stable": "СТАБИЛНА", - "registerNewServer": "Регистрирайте нов сървър", - "storeSshKeysOrPasswords": "Съхранявайте SSH ключове или пароли", - "manageUsersAndRoles": "Управлявайте потребители и роли", - "manageYourAccount": "Управлявайте вашия акаунт", - "hostStatus": "Състояние на хоста", - "noHostsConfigured": "Няма конфигурирани хостове", - "checking": "ПРОВЕРКА", - "commandPalette": "Палитра за команди", - "done": "Готово", - "clear": "Изчистване", - "dragToResizeColumns": "Плъзнете, за да промените размера на колоните", - "hostsAvailable": "Налични хостове", - "removeSection": "Премахване на секция", - "addSection": "Добавяне на секция", - "allSectionsShown": "Всичко вече е показано на таблото.", - "fromPlugins": "От плъгини", - "dropHere": "Пуснете секция тук", - "dragToReorder": "Плъзнете секциите, за да ги пренаредите", - "clearActivityConfirm": "Да изчистите ли наскоро активността си?", - "resetConfirm": "Да нулирате ли таблото до стандартния му изглед?", "onlineCount_one": "{{count}} онлайн", "onlineCount_other": "{{count}} онлайн", "hostCount_one": "{{count}} хост", "hostCount_other": "{{count}} хоста" }, "admin": { - "sectionGeneral": "Общи", - "sectionUsers": "Потребители", - "sectionSessions": "Сесии", - "sectionRoles": "Роли", - "sectionDatabase": "База данни", - "sectionApiKeys": "API ключове", - "sectionAuditLog": "Аудитен дневник", - "sectionSsl": "HTTPS сертификат", - "sectionBranding": "Брандиране", - "brandingAppName": "Име на приложението", - "brandingAppNameDesc": "Показва се на екрана за вход и в раздела на браузъра. Оставете празно, за да се използва „Termix“.", - "brandingTagline": "Девиз", - "brandingTaglineDesc": "Показва се под името на приложението на екрана за вход. Оставете празно, за да се използва стандартният девиз.", - "brandingLogo": "Лого", - "brandingLogoDesc": "PNG, JPEG или WEBP, до 750 KB. Заменя стандартната икона на екрана за вход и в раздела на браузъра.", - "brandingLogoUpload": "Качване на лого", - "brandingLogoReset": "Връщане към стандартно", - "brandingLogoInvalid": "Невалидна изображение. Използвайте PNG, JPEG или WEBP файл до 750 KB.", - "brandingSaved": "Настройките за брандиране са запазени", - "brandingSaveFailed": "Грешка при запазване на настройките за брандиране", - "sslDescription": "Сертификатът, който Termix предоставя чрез HTTPS. Качете свой собствен тук или получете и подновете такъв от Let's Encrypt в секцията ACME сертификати.", - "sslDocsLink": "Преглед на документацията за SSL", - "sslCertStatus": "Статус на сертификата", - "sslCertStatusNone": "Няма сертификат", - "sslCertStatusValid": "Валиден", - "sslCertStatusExpiring": "Изтича скоро", - "sslCertStatusExpired": "Изтекъл", - "sslCertExpiresAt": "Изтича на {{date}}", - "sslInfoNote": "След издаване или качване на сертификат, Termix автоматично ще активира HTTPS на SSL_PORT (по подразбиране 8443) в допълнение към съществуващия HTTP порт. Уверете се, че този порт е публикуван/мапиран към този контейнер, за да бъде достъпен.", - "sslManualCert": "Сертификат (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Частен ключ (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Поставете вашия съществуващ сертификат и частен ключ, включително пълна верига, ако това се изисква от вашия CA.", - "sslManualUpload": "Качване и инсталиране на сертификат", - "sslManualUploadLoading": "Качване на сертификат...", - "sslManualUploadSuccess": "Сертификатът е качен и инсталиран успешно", - "sslManualUploadFailed": "Грешка при качване на сертификата", - "sslManualRequiresFields": "Сертификатът и частният ключ са задължителни", - "auditLogTotal": "{{total}} общо записа", - "auditLogEmpty": "Не са намерени записи в аудитния дневник", - "auditLogSuccess": "Успешно", - "auditLogFailed": "Неуспешно", - "auditLogClearFilters": "Изчистване на филтрите", - "auditLogPage": "Страница {{page}} от {{totalPages}} ({{total}} общо)", - "auditLogIp": "IP", - "auditLogResourceId": "ID на ресурса", - "auditLogFilterUser": "Потребител", - "auditLogFilterAction": "Действие", - "auditLogFilterResourceType": "Вид ресурс", - "auditLogFilterStatus": "Статус", - "auditLogFilterFrom": "От", - "auditLogFilterTo": "До", - "auditLogFilterAll": "Всички", - "allowRegistration": "Разрешаване на регистрация на потребители", - "allowRegistrationDesc": "Позволете на новите потребители да се регистрират сами с потребителско име и парола", - "allowPasswordLogin": "Разрешаване на влизане с парола", - "allowPasswordLoginDesc": "Влизане с потребителско име и парола", - "externalAutoProvision": "Автоматично създаване на външни акаунти", - "externalAutoProvisionDesc": "Създаване на акаунт при първо влизане чрез външен метод като SSO или LDAP. Ако е изключено, само потребители със съществуващ акаунт могат да влизат по този начин", - "secondFactorAfterExternalLogin": "Заявяване на втор фактор след външно влизане (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Ако е изключено, вторият фактор се изисква само след влизане с парола и други локални методи, както преди. Ако е включено, се изисква при всеки метод за влизане, включително SSO и LDAP.", - "allowPasswordReset": "Разрешаване на нулиране на парола", - "allowPasswordResetDesc": "Код за нулиране чрез Docker логове", - "auditForwardingTitle": "Пренасочване към SIEM", - "auditForwardingDesc": "Изпращане на копие от всеки запис в одитния дневник към външен колектор във формат NDJSON. Локалните логове остават основният източник на информация.", - "auditForwardingEnvNotice": "Променлива на средата също конфигурира пренасочването; URL адресът, запазен тук, има предимство.", - "auditForwardingToken": "Bearer токен (по избор)", - "auditForwardingTokenStored": "Bearer токен (запазен)", - "auditForwardingSaved": "Настройките за пренасочване на одитния дневник са запазени", - "auditForwardingSaveError": "Грешка при запазване на настройките за пренасочване на одитния дневник", - "sessionTimeout": "Изтичане на сесията", - "hours": "часа", - "sessionTimeoutRange": "Мин. 1 ч., макс. 720 ч.", - "monitoringDefaults": "Стандартни настройки за мониторинг", - "statusCheck": "Проверка на статуса", - "sec": "сек.", - "logLevel": "Ниво на логване", "usersCount_one": "{{count}} потребител", - "usersCount_other": "{{count}} потребителя", - "searchUsers": "Търсене на потребители...", - "noUsers": "Няма потребители", - "noUsersMatch": "Няма потребители, отговарящи на търсенето ви", - "pageOf": "Страница {{page}} от {{total}}", - "createUser": "Създаване", - "newRole": "Нова роля", - "roleName": "Име", - "roleDisplayName": "Показвано име", - "roleDescription": "Описание", "rolesCount_one": "{{count}} роля", - "rolesCount_other": "{{count}} роли", - "createRole": "Създаване", - "creating": "Създаване...", - "exportDatabase": "Експортиране на базата данни", - "exportDatabaseDesc": "Изтегляне на преносим SQLite архив на всички хостове, идентификационни данни и настройки", - "export": "Експортиране", - "exporting": "Експортиране...", - "importDatabase": "Импортиране на база данни", - "importDatabaseDesc": "Възстановяване от преносим .sqlite архив върху всякаква база данни", - "importDatabaseSelected": "Избрано: {{name}}", - "selectFile": "Избор на файл", - "changeFile": "Промяна", - "import": "Импортиране", - "importing": "Импортиране...", "apiKeysCount_one": "{{count}} ключ", - "apiKeysCount_other": "{{count}} ключа", - "apiKeysDocsLink": "Преглед на документацията", - "apiKeysCliHint": "Използвайте API ключ с Termix CLI, за да управлявате сървъри от терминала си.", - "apiKeysCliLink": "Преглед на документацията за CLI", - "newApiKey": "Нов API ключ", - "apiKeyCreatedWarning": "Ключът е създаден – копирайте го сега, няма да бъде показан отново.", - "apiKeyName": "Име", - "apiKeyUser": "Потребител", - "apiKeySelectUser": "Изберете потребител...", - "apiKeyExpiresAt": "Изтича на", - "createKey": "Създаване на ключ", - "apiKeyNoExpiry": "Без изтичане", - "revokedBadge": "АНУЛИРАН", - "authTypeDual": "Двойна автентикация", - "authTypeExternal": "Външна", - "authTypeLocal": "Локална", - "adminStatusAdministrator": "Администратор", - "adminStatusRegularUser": "Обикновен потребител", - "adminBadge": "АДМИН", - "systemBadge": "СИСТ", - "customBadge": "ПОТРЕБИТЕЛСКИ", - "youBadge": "ВИЕ", "sessionsActive_one": "{{count}} активен", - "sessionsActive_other": "{{count}} активни", - "sessionActive": "Активна: {{time}}", - "sessionExpires": "Изтича: {{time}}", - "revokeAll": "Всички", - "revokeAllSessionsSuccess": "Всички сесии за потребителя са анулирани", - "revokeAllSessionsFailed": "Грешка при анулиране на сесиите", - "revokeSessionFailed": "Грешка при анулиране на сесията", - "addRole": "Добавяне на роля", - "noCustomRoles": "Няма дефинирани потребителски роли", - "removeRoleFailed": "Грешка при премахване на ролята", - "assignRoleFailed": "Грешка при присвояване на ролята", - "userAdminAccess": "Администратор", - "userAdminAccessDesc": "Пълен достъп до всички административни настройки", - "userRoles": "Роли", - "revokeAllUserSessions": "Анулиране на всички сесии", - "revokeAllUserSessionsDesc": "Принудително повторно влизане на всички устройства", - "revoke": "Анулиране", - "deleteUserWarning": "Изтриването на този потребител е постоянно.", - "deleteUser": "Изтриване на {{username}}", - "deleting": "Изтриване...", - "deleteUserFailed": "Грешка при изтриване на потребителя", - "deleteUserSuccess": "Потребителят \"{{username}}\" е изтрит", - "deleteRoleSuccess": "Ролята \"{{name}}\" е изтрита", - "revokeKeySuccess": "Ключът \"{{name}}\" е анулиран", - "revokeKeyFailed": "Грешка при анулиране на ключа", - "copiedToClipboard": "Копирано в клипборда", - "done": "Готово", - "createUserTitle": "Създаване на потребител", - "createUserDesc": "Създаване на нов локален акаунт.", - "createUserUsername": "Потребителско име", - "createUserPassword": "Парола", - "createUserPasswordHint": "Минимум 6 символа.", - "createUserEnterUsername": "Въведете потребителско име", - "createUserSubmit": "Създаване на потребител", - "editUserTitle": "Управление на потребител: {{username}}", - "editUserDesc": "Редактиране на роли, административен статус, сесии и настройки на акаунта.", - "editUserUsername": "Потребителско име", - "editUserAuthType": "Вид автентикация", - "editUserAdminStatus": "Административен статус", - "editUserUserId": "ID на потребителя", - "linkAccountTitle": "Връзка на акаунти", - "linkAccountDesc": "Обединяване на външния акаунт {{username}} със съществуващ локален акаунт.", - "linkAccountDescLocal": "Връзка на локален акаунт {{username}} със съществуващ само външен акаунт.", - "linkAccountWarningTitle": "Това ще:", - "linkAccountEffect1": "Изтрие акаунта, достъпен само чрез външен вход", - "linkAccountEffect2": "Добави външния му вход към целевия акаунт", - "linkAccountEffect3": "Позволи вход както с външен акаунт, така и с парола", - "linkAccountTargetUsername": "Потребителско име на локален акаунт", - "linkAccountTargetPlaceholder": "Въведете потребителското име на локалния акаунт, към който да се свърже", - "linkAccountExternalUsername": "Потребителско име на външен акаунт", - "linkAccountExternalPlaceholder": "Въведете потребителското име на акаунта с външен вход, който да се обедини", - "linkAccountExternalNotFound": "Не е намерен акаунт с външен вход с това потребителско име", - "linkAccounts": "Свързване на акаунти", - "linkAccountSuccess": "Акаунтите са свързани успешно", - "linkAccountFailed": "Грешка при свързване на акаунти", - "linkAccountInProgress": "Свързване...", - "unlinkAccountTitle": "Премахване на външен вход", - "unlinkAccountDesc": "Премахване на външния вход от {{username}}. Потребителят ще може да влиза само с парола.", - "unlinkAccountWarning": "Това ще премахне външния вход от този акаунт. Потребителят трябва да има зададена парола, за да продължи да влиза.", - "unlinkAccount": "Премахване на външен вход", - "unlinkAccountInProgress": "Премахване...", - "unlinkAccountSuccess": "Външният вход е премахнат", - "unlinkAccountFailed": "Грешка при премахване на външен вход", - "updateRegistrationFailed": "Грешка при актуализиране на настройката за регистрация", - "updatePasswordLoginFailed": "Грешка при актуализиране на настройката за вход с парола", - "updateSecondFactorAfterExternalLoginFailed": "Грешка при актуализиране на настройката за втор фактор", - "updatePasswordResetFailed": "Грешка при актуализиране на настройката за нулиране на парола", - "sessionTimeoutRange2": "Времето за изтичане на сесията трябва да е между 1 и 720 часа", - "sessionTimeoutSaved": "Времето за изтичане на сесията е запазено", - "sessionTimeoutSaveFailed": "Грешка при запазване на времето за изтичане на сесията", - "monitoringIntervalInvalid": "Невалидни стойности за интервала", - "monitoringSaved": "Настройките за мониторинг са запазени", - "monitoringSaveFailed": "Грешка при запазване на настройките за мониторинг", - "logLevelUpdateFailed": "Грешка при актуализиране на нивото на логовете", - "createUserRequired": "Потребителското име и паролата са задължителни", - "createUserPasswordTooShort": "Паролата трябва да съдържа поне 6 символа", - "createUserSuccess": "Потребителят \"{{username}}\" е създаден", - "createUserFailed": "Грешка при създаване на потребител", - "updateAdminStatusFailed": "Грешка при актуализиране на администраторския статус", - "allSessionsRevoked": "Всички сесии са отменени", - "revokeSessionsFailed": "Грешка при отмяна на сесиите", - "manageUserData": "Управление на потребителски данни", - "backToUsers": "Назад към потребителите", - "manageTabAccount": "Акаунт", - "manageTabHosts": "Хостове", - "manageTabCredentials": "Удостоверения", - "manageTabSessions": "Сесии", - "manageTabDanger": "Опасни действия", - "manageEditorBack": "Назад към данните на {{username}}", - "dataLockedBadge": "ЗАКЛЮЧЕНО", - "dataLockedNotice": "Данните на {{username}} остават заключени, докато не влезе отново. Хостовете, удостоверенията и фрагментите му не могат да се преглеждат или редактират до тогава.", - "resetPasswordTitle": "Нулиране на парола", - "resetPasswordExternalOnly": "Този потребител влиза чрез външен доставчик и няма зададена парола.", - "resetPasswordPlaceholder": "Нова парола", - "resetPasswordBtn": "Нулиране", - "resetPasswordWorking": "Нулиране...", - "resetPasswordSuccess": "Паролата е нулирана", - "resetPasswordSuccessWiped": "Паролата е нулирана. Криптираните данни на потребителя са изтрити.", - "resetPasswordFailed": "Грешка при нулиране на паролата", - "resetPasswordConfirmWipe": "{{username}} не е влизал след ъпгрейда на криптирането, така че данните му не могат да бъдат възстановени. Нулирането сега ще изтрие хостовете, удостоверенията и фрагментите му. Продължавате ли?", - "manageApiKeys": "API ключове", - "apiKeyNamePlaceholder": "Име на ключа", - "apiKeyCopyNotice": "Копирайте този ключ сега, той няма да се покаже отново.", - "noApiKeysForUser": "Няма API ключове", - "apiKeyDeleteFailed": "Грешка при изтриване на API ключ", - "exportUserData": "Експортиране на данни", - "exportUserDataDesc": "Изтеглете хостовете, идентификационните данни и данните от файловия мениджър на този потребител като JSON. Тайните са дешифрани.", - "exportUserDataSuccess": "Данните на потребителя са експортирани", - "exportUserDataFailed": "Грешка при експортиране на данните на потребителя", "hostsCount_one": "{{count}} хост", "hostsCount_other": "{{count}} хоста", - "addHostForUser": "Добавяне на хост", - "noHostsForUser": "Този потребител няма хостове", - "connectToHost": "Свързване", - "deleteHostConfirm": "Да се изтрие ли хостът „{{name}}“, принадлежащ на {{username}}?", - "hostDeletedSuccess": "Хостът е изтрит", - "hostDeleteFailed": "Грешка при изтриване на хост", "credentialsCount_one": "{{count}} идентификационни данни", "credentialsCount_other": "{{count}} идентификационни данни", - "addCredentialForUser": "Добавяне на идентификационни данни", - "noCredentialsForUser": "Този потребител няма идентификационни данни", - "deleteCredentialConfirm": "Да се изтрият ли идентификационните данни „{{name}}“, принадлежащи на {{username}}?", - "credentialDeletedSuccess": "Идентификационните данни са изтрити", - "credentialDeleteFailed": "Грешка при изтриване на идентификационни данни", - "noSessionsForUser": "Няма активни сесии", - "deleteSuccessorLabel": "Прехвърляне на хостове и идентификационни данни на", - "deleteSuccessorMe": "Мене (администратора, който изтрива)", - "deleteSuccessorNone": "Никой, да се изтрият", - "deleteSuccessorDesc": "Всичко, което този потребител е споделил, ще продължи да работи под новия собственик; изборът на „Никой“ премахва хостовете, идентификационните данни и споделянията му.", - "deleteUserDangerDesc": "За постоянно изтриване на {{username}} и всички му данни (хостове, идентификационни данни, фрагменти, история). Това действие е необратимо.", - "deleteUserConfirm": "Да се изтрият ли за постоянно {{username}} и всички му данни?", - "deleteUserAdminBlocked": "Премахнете администраторския статус, преди да изтриете този потребител.", - "createRoleRequired": "Името и името за показване са задължителни", - "createRoleSuccess": "Ролята „{{name}}“ е създадена", - "createRoleFailed": "Грешка при създаване на роля", - "apiKeyNameRequired": "Името на ключа е задължително", - "apiKeyUserRequired": "Идентификаторът на потребителя е задължителен", - "apiKeyCreatedSuccess": "API ключът „{{name}}“ е създаден", - "apiKeyCreateFailed": "Грешка при създаване на API ключ", - "exportSuccess": "Базата данни е експортирана успешно", - "exportFailed": "Грешка при експортиране на базата данни", - "importSelectFile": "Моля, първо изберете файл", - "importCompleted": "Импортирането е завършено: {{total}} елемента импортирани, {{skipped}} пропуснати", - "importFailed": "Грешка при импортиране: {{error}}", - "importError": "Грешка при импортиране на базата данни", - "sectionHostDefaults": "Стандартни настройки за хостове", "rolePermissions": { "count_one": "{{count}} разрешение", - "count_other": "{{count}} разрешения", - "editAction": "Редактиране на разрешения", - "loadError": "Грешка при зареждане на каталога с разрешения", - "saved": "Разрешенията на ролята са запазени", - "saveError": "Грешка при запазване на разрешенията на ролята", - "save": "Запазване", - "saving": "Запазване...", - "pluginDisabled": "Плъгинът е деактивиран", "groups": { "hosts": "Хостове", "credentials": "Идентификационни данни", "admin": "Администрация" } - }, - "notificationPrivateEndpoints": "Разрешени частни хостове за известия", - "notificationPrivateEndpointsDesc": "Точни частни хостове, които каналите за известия могат да контактуват. Разделете ги със запетаи.", - "updateNotificationEndpointsFailed": "Грешка при актуализиране на списъка с разрешени крайни точки за известия", - "secondFactorsSectionTitle": "Втори фактори", - "secondFactorsNone": "Няма регистрирани втори фактори", - "secondFactorUnavailable": "Неразположим", - "resetSecondFactors": "Нулиране на вторите фактори", - "resetSecondFactorsConfirm": "Да се премахнат ли всички втори фактори за {{username}}? Те могат да влязат с паролата си или чрез SSO и да се регистрират отново.", - "secondFactorsResetSuccess": "Вторите фактори са нулирани", - "secondFactorsResetFailed": "Нулирането на вторите фактори не бе успешно", - "passwordLoginForced": "Влизането с парола е изключено, но няма активиран друг метод за влизане, затова то остава включено засега. Никой няма да остане заключен.", - "sslNotRenewed": "Няма нищо, което да подновява този сертификат. Той изтича на {{date}}. Включете автоматичното подновяване в секцията ACME сертификати или качете нов преди това.", - "sslSelfSigned": "Самоподписан сертификат, генериран от Termix. Браузърите ще предупреждават за него.", - "sslRenewedBy": "Подновен автоматично от {{plugin}}", - "sslIssuer": "Издаден от {{issuer}}", - "sslNames": "Покрива {{names}}", - "sslManualTitle": "Качване на сертификат", - "updateExternalAutoProvisionFailed": "Актуализирането на настройката за автоматично създаване не бе успешно", - "hostTags": "Предварително определени етикети за хостове", - "hostTagsDesc": "Етикети, които всеки потребител вижда като предложения в редактора на хостове. Натиснете Space или Enter, за да добавите един. Премахването на етикет тук не го премахва от хостовете.", - "hostTagsError": "Не може да се заредят или запазят предложенията за етикети на хостове.", - "revokeAllSessionsConfirm": "Да се излезе от {{username}} навсякъде?", - "revokeSessionConfirm": "Да се излезе от тази сесия?", - "revokeSession": "Изход", - "deleteRoleConfirm": "Да се изтрие ролята {{name}}?", - "revokeKeyConfirm": "Да се анулира API ключът {{name}}?", - "revokeKey": "Анулиране" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Къде", - "who": "Кой", - "hostLabel": "Хост", - "hostPlaceholder": "192.168.1.1 или example.com", - "portLabel": "Порт", - "usernameLabel": "Потребителско име", - "usernamePlaceholder": "потребителско име", - "authLabel": "Удостоверяване", - "passwordLabel": "Парола", - "passwordPlaceholder": "парола", - "privateKeyLabel": "Частен ключ", - "privateKeyPlaceholder": "Поставете частния ключ...", - "credentialLabel": "Удостоверение", - "credentialPlaceholder": "Изберете запазено удостоверение", - "protocolLabel": "Протокол", - "domainLabel": "Домейн", - "domainPlaceholder": "по желание", - "connectToAction": "Свързване с {{name}}", - "sshProtocol": "SSH", - "noTarget": "Нищо инсталирано не може да се свърже с този тип хост" + "usernameLabel": "Потребителско име" }, "keybindings": { - "description": "Свържете клавиши с действия в терминала и приложението, или променете вградените комбинации.", - "defaultsHeading": "Вградени комбинации", - "fixedHeading": "Комбинации за приложението", - "fixed": { - "splitRight": "Разделяне надясно", - "splitDown": "Разделяне надолу", - "zoomPane": "Увеличаване на активния панел", - "navigatePane": "Преместване между панелите", - "nextTab": "Следваща карта", - "previousTab": "Предишна карта", - "jumpTab": "Прескачане към карта", - "previousView": "Назад към предишния изглед в страничната лента", - "fullscreen": "Превключване на цял екран" - }, - "customHeading": "Персонализирани комбинации", - "addBinding": "Добавяне на комбинация", - "addBindingTitle": "Добавяне на комбинация", - "editBindingTitle": "Редактиране на комбинация", - "loading": "Зареждане...", - "noCustomBindings": "Все още няма персонализирани комбинации", - "defaultBadge": "По подразбиране", - "customizedBadge": "Персонализирано", - "customize": "Персонализиране", - "resetToDefault": "Възстановяване на стойностите по подразбиране", - "resetAllToDefaults": "Възстановяване на всички по подразбиране", - "cancel": "Отказ", - "saveBinding": "Запазване на клавишната комбинация", - "saveError": "Грешка при запазване на клавишните комбинации", - "pressKeysToRecord": "Клавишна комбинация", - "pressKeysPlaceholder": "Кликнете и натиснете клавиши", - "recording": "Натиснете клавиши...", - "comboRequiredError": "Първо натиснете клавишна комбинация", - "conflictWarning": "Тази комбинация вече е свързана с {{combo}}. Запазването ще активира и двете.", - "actionLabel": "Действие", "actionNextTab": "Превключване към следващия раздел", "actionPreviousTab": "Превключване към предишния раздел", "actionOpenCommandPalette": "Отваряне на бързо търсене", - "actionReconnectSession": "Повторно свързване на текущата сесия", - "unavailableAction": "{{type}} (не е налично)", - "actionRequiredError": "Първо изберете действие", - "deleteConfirm": "Изтриване на тази клавишна комбинация?", - "resetAllConfirm": "Възстановяване на всички клавишни комбинации по подразбиране?" + "actionReconnectSession": "Повторно свързване на текущата сесия" }, "userProfile": { - "storageModeLocal": "Браузър", - "storageModeCloud": "База данни", - "storageModeDescription": "Браузърът съхранява настройките само в този браузър. Базата данни синхронизира с сървъра и зарежда на всяко устройство.", - "resetToDefaults": "Възстановяване по подразбиране", - "resetToDefaultsSuccess": "Настройките са възстановени по подразбиране.", - "storageModeSwitch": "Съхранение на предпочитанията", - "sectionAccount": "Акаунт", - "desktopProfileTitle": "Само това устройство", - "desktopProfileDescription": "Този профил съществува само на това устройство и влиза самостоятелно. Свържете го със сървър на Termix, за да използвате същите хостове и настройки на всяко устройство.", - "sectionInterface": "Интерфейс", - "interfacePresetDesc": "Колко детайли показва Termix. Всяка функция остава налична.", "preset_simple": "Прост", "preset_simple_desc": "Само основното.", "preset_balanced": "Балансиран", "preset_balanced_desc": "Стандартният изглед.", "preset_advanced": "Разширен", "preset_advanced_desc": "Всичко включено, плътно подредено.", - "presetClearOverrides": "Възстановяване на всички", - "presetOverridesTitle": "Персонализирани", - "presetRevertArea": "Връщане", - "presetConfirmTitle": "Превключване към {{preset}}?", - "presetConfirmDesc": "Това възстановява страничната лента, навигацията, подредбата на таблото, лентата с инструменти на терминала и изгледа на файловия мениджър. Хостовете, идентификационните данни и началната страница не се засягат.", - "presetConfirmApply": "Прилагане на шаблона", - "runSetupAgainDesc": "Повторно преминаване през настройката при първо стартиране.", - "runSetupAgainButton": "Стартиране на настройката", "uiArea_chrome": "Интерфейс на приложението", "uiArea_hostList": "Списък с хостове", "uiArea_credentialList": "Списък с идентификационни данни", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Терминал", "uiArea_fileManager": "Файлов мениджър", "uiArea_hostEditor": "Редактор на хостове", - "sectionAppearance": "Изглед", - "sectionSecurity": "Сигурност", - "sectionApiKeys": "API ключове", - "sectionData": "Данни", - "usernameLabel": "Потребителско име", - "roleLabel": "Роля", - "roleAdministrator": "Администратор", - "authMethodLabel": "Метод за удостоверяване", - "authMethodLocal": "Локален", - "twoFaLabel": "2FA", - "twoFaOn": "Включено", - "twoFaOff": "Изключено", - "versionLabel": "Версия", - "cliTitle": "Termix CLI", - "cliDescription": "Отваряйте терминали, изпълнявайте команди и премествайте файлове от собствената си командна конзола.", - "cliLearnMore": "Научете повече", - "deleteAccount": "Изтриване на акаунт", - "deleteAccountDescription": "Постоянно изтриване на вашия акаунт", - "deleteButton": "Изтриване", - "deleteAccountPermanent": "Това действие е постоянно и не може да бъде отменено.", - "deleteAccountWarning": "Всички сесии, хостове, идентификационни данни и настройки ще бъдат изтрити завинаги.", - "confirmPasswordDeletePlaceholder": "Въведете паролата си за потвърждение", "languageLabel": "Език", "themeLabel": "Тема", "fontSizeLabel": "Размер на шрифта", "interfaceFontLabel": "Шрифт на интерфейса", "interfaceFontDescription": "Променя шрифта на интерфейса на приложението. Профилите на терминала запазват собствените си настройки за шрифт.", "accentColorLabel": "Акцентен цвят", - "keyboardShortcuts": "Клавишни комбинации", - "keyboardShortcutsDescription": "Персонализирайте клавишните комбинации за копиране, поставяне и команди в терминала", - "manageShortcuts": "Управление", - "commandPalette": "Палитра за команди", - "commandPaletteDesc": "Активиране на клавишна комбинация", - "reopenTabsOnLogin": "Отваряне на табловете при влизане", - "reopenTabsOnLoginDesc": "Възстановяване на отворените таблове при влизане или презареждане на страницата, дори от друго устройство", - "confirmTabClose": "Потвърждение при затваряне на табло", - "confirmTabCloseDesc": "Питайте преди затваряне на табловете на терминала", - "showTabNumbers": "Показване на номера на табловете", - "showTabNumbersDesc": "Показване на номер на всяко табло за по-лесно разпознаване", - "settingsAppRail": "Лента с приложения", - "sidebarSettingsMoved": "Настройките за показване на страничната лента с хостове са преместени в панела за персонализиране на страничната лента, който се отваря от лентата с инструменти на Хостовете.", - "showHostTags": "Показване на етикети на хостове", - "showHostTagsDesc": "Показване на етикети в списъка с хостове", - "statusColors": "Реални цветове на статуса", - "statusColorsDesc": "Използване на зелено/червено за онлайн/офлайн статус вместо акцентния цвят", - "pinAppRail": "Закачане на лентата с приложения", - "pinAppRailDesc": "Държане на лявата лента с приложения винаги разгъната, вместо да се разгъва при посочване", - "expandAppRailOnHover": "Разгъване на лентата с приложения при посочване", - "expandAppRailOnHoverDesc": "Разрешаване на разгъване на лявата лента с приложения, когато курсорът се премести върху нея", - "appRailHoverPushesContent": "Избутвай съдържанието при разгъване", - "appRailHoverPushesContentDesc": "Остави място за разгънатата лента вместо да я отваряш върху страницата. Отворените сесии, като отдалечен плот, ще се преоразмеряват всеки път", - "showPinAppRailButton": "Показване на бутона за закачане на лентата с приложения", - "showPinAppRailButtonDesc": "Показване на бутон в лентата с приложения за нейното закачване. Изключено по подразбиране.", - "settingsNavigation": "Навигация", - "navigationTabsDesc": "Изберете кои таблове се появяват в лентата с приложения", - "settingsUpdates": "Актуализации", - "disableUpdateChecks": "Деактивиране на проверките за актуализации", - "disableUpdateChecksDesc": "Спиране на проверките за актуализации", - "changePassword": "Промяна на паролата", - "currentPasswordLabel": "Текуща парола", - "currentPasswordPlaceholder": "Текуща парола", - "newPasswordLabel": "Нова парола", - "newPasswordPlaceholder": "Нова парола", - "confirmPasswordLabel": "Потвърждение на новата парола", - "confirmPasswordPlaceholder": "Потвърдете новата парола", - "updatePassword": "Актуализиране на паролата", - "createApiKeyTitle": "Създаване на API ключ", - "createApiKeyDescription": "Генериране на нов API ключ за програмно достъпване.", - "apiKeyNameLabel": "Име", - "apiKeyNamePlaceholder": "напр. CI Pipeline", - "expiryDateLabel": "Дата на изтичане", - "optional": "по избор", - "cancel": "Отказ", - "createKey": "Създаване на ключ", - "apiKeyCreatedWarning": "Ключът е създаден – копирайте го сега, няма да се покаже отново.", - "copyApiKey": "Копиране на API ключ", - "copiedToClipboard": "Копирано в клипборда", "apiKeyCount_one": "{{count}} ключ", - "apiKeyCount_other": "{{count}} ключа", - "newKey": "Нов ключ", - "noApiKeys": "Все още няма API ключове.", - "apiKeyActive": "Активен", - "apiKeyUsageHint": "Включете ключа си в", - "apiKeyUsageHintHeader": "заглавието.", - "apiKeyPermissionsHint": "Ключовете наследяват правата на потребителя, който ги е създал.", - "exportData": "Експортиране на моите данни", - "exportDataDesc": "Изтеглете резервно копие на хостовете, идентификационните данни и настройките си, за да ги прехвърлите на друго устройство", - "export": "Експортиране", - "exporting": "Експортиране...", - "importData": "Импортиране на моите данни", - "importDataDesc": "Възстановете хостовете, идентификационните данни и настройките си от .sqlite резервен файл", - "importDataSelected": "Избрано: {{name}}", - "selectFile": "Избор на файл", - "changeFile": "Промяна", - "import": "Импортиране", - "importing": "Импортиране...", - "exportSuccess": "Данните бяха експортирани успешно", - "exportFailed": "Експортирането на данни не бе успешно", - "importSelectFile": "Моля, първо изберете файл", - "importCompleted": "Импортирането приключи: {{total}} елемента импортирани, {{skipped}} пропуснати", - "importFailed": "Импортирането не бе успешно: {{error}}", - "roleUser": "Потребител", - "authMethodDual": "Двойна автентикация", - "authMethodExternal": "Външна", - "done": "Готово", - "apiKeyNameRequired": "Името на ключа е задължително", - "apiKeyCreated": "API ключът „{{name}}“ е създаден", - "apiKeyCreateFailed": "Създаването на API ключ не бе успешно", - "apiKeyUser": "Потребител", - "apiKeyExpires": "Изтича на", - "apiKeyRevoked": "API ключът „{{name}}“ е отменен", - "apiKeyRevokeFailed": "Отмяната на API ключа не бе успешна", - "passwordFieldsRequired": "Текущата и новата парола са задължителни", - "passwordMismatch": "Паролите не съвпадат", - "passwordTooShort": "Паролата трябва да съдържа поне 6 символа", - "passwordUpdated": "Паролата е обновена успешно", - "passwordUpdateFailed": "Обновяването на паролата не бе успешно", - "deletePasswordRequired": "Паролата е необходима за изтриване на акаунта ви", - "deleteFailed": "Изтриването на акаунта не бе успешно", - "deleting": "Изтриване...", "colorPickerTooltip": "Отваряне на изборника на цветове", "themeSystem": "Системна", "themeLight": "Светла", @@ -1755,18 +1122,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Влезли сте в {{server}}", - "linkedProfileDescription": "Това устройство използва акаунта ви на сървъра и пази копие на данните ви, за да работи и офлайн.", - "manageSync": "Управление на синхронизацията", - "setUpSync": "Връзка със сървър", - "settingsTabsAndShortcuts": "Раздели и клавишни комбинации", - "onBetaTitle": "Използвате бета версия", - "onBetaDescription": "Благодарим ви за тестването. Кажете ни какво не работи.", - "tryBetaTitle": "Опитайте нови функции по-рано", - "tryBetaDescription": "Присъединете се към бета програмата в Актуализации.", - "sendBetaFeedback": "Изпратете обратна връзка за бета версията", - "openUpdates": "Актуализации" + "themeGruvbox": "Gruvbox" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "{{name}} е необходим за {{list}}. Изключете ги или ги деинсталирайте първо.", "missingDependencies": "{{name}} се нуждае от {{list}}, който не е инсталиран.", "consentChanged": "Какво изисква този плъгин се е променило от последния път, когато го проверихте. Проверете списъка отново.", - "upload": "Не можа да се прочете {{name}}: {{error}}", - "developerMode": "Не можа да се промени режимът за разработчици: {{error}}" + "upload": "Не можа да се прочете {{name}}: {{error}}" }, "data": { "title": "Съхранени данни", @@ -2145,13 +1500,7 @@ "browsePlugins": "Разгледай плъгините", "loading": "Зареждане", "developer": { - "title": "Режим за разработчици на плъгини", - "hint": "Позволява на администраторите да инсталират плъгини от .tmxplug файл в раздела Плъгини, без проверки от регистъра. Използвайте го за изграждане и тестване на собствени плъгини.", - "enableTitle": "Да активирате ли режима за разработчици?", - "enableBody": "Администраторите ще могат да инсталират плъгини от файлове, които Termix не е проверявал. Плъгинът може да прави всичко, което му позволяват възможностите му, затова активирайте тази опция само докато изграждате или тествате плъгини.", - "enable": "Активирай", - "installFromFile": "Инсталирай от файл", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS е зададено, затова инсталацията от файл остава блокирана." + "installFromFile": "Инсталирай от файл" }, "count": { "downloads_one": "{{formatted}} изтегляне", @@ -2189,71 +1538,7 @@ "secretSet": "Зададени", "secretNotSet": "Не са зададени", "secretReplace": "Замени", - "pluginSettingsSaved": "Настройките са запазени", - "pluginSettingsInvalid": "Някои настройки не могат да бъдат запазени. Проверете маркираните полета.", - "pluginSettingsSaveFailed": "Грешка при запазване на настройките", - "pluginSettingsLoadFailed": "Грешка при зареждане на настройките", - "featureUnavailable": "{{name}} в момента е недостъпен. Тези настройки са запазени, но няма да влязат в сила.", - "account": "Акаунт", - "security": "Сигурност", - "apiKeys": "API ключове", - "data": "Данни и синхронизация", - "interface": "Интерфейс", - "appearance": "Изглед", - "keybindings": "Клавишни комбинации", - "adminGeneral": "Общи", - "adminUsers": "Потребители", - "adminSessions": "Сесии", - "adminRoles": "Роли", - "adminHostDefaults": "Стандартни настройки за хостове", - "adminBranding": "Брандиране", - "adminDatabase": "База данни", - "adminSsl": "SSL", - "adminApiKeys": "API ключове", - "adminAuditLog": "Аудитен дневник", - "bandYou": "Вашият акаунт", - "bandApp": "Това приложение", - "bandPlugins": "Плъгини", - "bandInstance": "Този сървър", - "searchPlaceholder": "Търсене в настройките", - "noResults": "Няма съвпадащи настройки.", - "pages": "Страници", - "instanceSettings": "Настройки на сървъра", - "nothingHere": "Няма нищо за настройка тук.", - "searchPage": "Търсене на тази страница", - "noPageMatches": "Няма съвпадения на тази страница.", - "updates": { - "title": "Актуализации", - "betaProgram": "Бета програма", - "betaIntro": "Бета версиите са ранни издания на следващата версия на Termix. Те се публикуват във вторник и петък, когато има нещо ново за тестване. Може да съдържат грешки, а вашата обратна връзка помага стабилната версия да бъде по-добра.", - "termixBetas": "Termix бета версии", - "termixBetasHint": "Информирай ме за нови бета версии, не само за стабилни издания.", - "runningBetaBuild": "Използвате бета версия. За да излезете от нея, превключете обратно към стабилен образ или инсталатор.", - "howToInstall": "Как да получите бета версията", - "desktopInstall": "Изтеглете бета инсталатора и го инсталирайте върху текущия.", - "downloadBeta": "Изтегли {{version}}", - "dockerInstall": "Сменете образа си с бета таг и рестартирайте контейнера:", - "copy": "Копирай", - "copied": "Копирано", - "copyFailed": "Неуспешно копиране", - "learnMore": "Научете повече за бета версиите", - "feedback": "Обратна връзка", - "feedbackHint": "Открихте грешка или имате идея? Тя ще бъде изпратена директно до разработчиците с попълнена версия.", - "sendFeedback": "Изпрати обратна връзка за бета версията", - "releases": "Издания", - "thisVersion": "Тази версия", - "newestStable": "Най-нова стабилна", - "newestBeta": "Най-нова бета", - "noRelease": "Няма в момента", - "pluginBetas": "Бета версии на плъгините", - "pluginBetasIntro": "Всеки плъгин може да използва бета версии самостоятелно. За да опитате, отворете го и натиснете Опитай бета.", - "openPlugins": "Отвори плъгините", - "waitingForStable": "Върнахте се към стабилна версия. Ще остане на {{version}}, докато не се появи по-нова стабилна версия.", - "backToStable": "Назад към стабилна версия", - "allPluginsBeta": "Използвай бета версии за всички плъгини", - "allPluginsStable": "Всички плъгини са върнати към стабилна версия", - "saveFailed": "Неуспешно запазване на промяната" - } + "featureUnavailable": "{{name}} в момента е недостъпен. Тези настройки са запазени, но няма да влязат в сила." }, "managerCard": { "refresh": "Опресни", @@ -2263,83 +1548,13 @@ "filter": "Филтър..." }, "sync": { - "server": "Termix сървър", - "account": "Акаунт", - "status": "Статус", - "never": "никога", - "justNow": "току-що", "minutesAgo_one": "преди {{count}} минута", "minutesAgo_other": "преди {{count}} минути", "hoursAgo_one": "преди {{count}} час", "hoursAgo_other": "преди {{count}} часа", - "actionFailed": "Не успя. Опитайте отново.", - "unlinkedTitle": "Само това устройство", - "unlinkedBody": "Termix работи самостоятелно на това устройство. Свържете го с вашия Termix сървър, за да поддържате всичко синхронизирано.", - "unlinkedPointHosts": "Вашите хостове, идентификационни данни, фрагменти и настройки ще ви следват на всяко устройство.", - "unlinkedPointOffline": "Всичко продължава да работи, когато сървърът е недостъпен, и се синхронизира по-късно.", - "unlinkedPointAccount": "Влизате с акаунта си на сървъра, а хостовете, споделени с вас от други хора, също се появяват тук.", - "linkButton": "Свържи със сървър", - "state": { - "syncing": "Синхронизиране", - "offline": "Сървърът е недостъпен", - "error": "Синхронизацията е спряна", - "signedOut": "Излязохте", - "synced": "Синхронизирано {{time}}" - }, "pending_one": "{{count}} промяна чака синхронизиране", "pending_other": "{{count}} промени чакат синхронизиране", - "signInAgain": "Влезте отново", - "syncNow": "Синхронизирай сега", - "unlink": "Премахни връзката", - "unlinked": "Това устройство вече не е свързано", - "unlinkTitle": "Да премахна връзката с това устройство?", - "unlinkDescription": "Синхронизирането ще спре и ще излезете от сървъра. Хостове, споделени с вас от други, ще бъдат премахнати от това устройство във всеки случай.", - "unlinkKeepTitle": "Да запазя данните си тук", - "unlinkKeepBody": "Хостовете, идентификационните данни и настройките ви остават на това устройство и продължават да работят самостоятелно.", - "unlinkRemoveTitle": "Да премахна синхронизираните данни", - "unlinkRemoveBody": "Всичко, което е дошло от сървъра, ще бъде премахнато от това устройство. Само хостовете, запазени локално на това устройство, ще останат.", - "conflictsTitle": "Конфликти", - "conflictsDescription": "Тези елементи са променени едновременно тук и на сървъра. Използва се версията от сървъра. Запазете вашата, за да я изпратите на сървъра вместо нея.", - "keepMine": "Да запазя моята", - "keepServer": "Да запазя от сървъра", - "errorsTitle": "Не са синхронизирани", - "errorsDescription": "Сървърът не е приел тези промени. Те остават на това устройство.", - "errorPermission": "Вашият акаунт на сървъра няма разрешение за тази промяна.", - "retry": "Опитай отново", - "whatSyncs": "Какво се синхронизира", - "whatSyncsDescription": "Изключете всичко, което искате да запазите само на това устройство.", - "coreGroup": "Termix", - "notOnServer": "Сървърът няма това", - "notOnDevice": "Още не е на това устройство", - "localOnlyHint": "Можете също да запазите отделни хостове или папки само на това устройство от техните настройки.", - "originTitle": "Откъде започват връзките", - "originDescription": "Свързвайте се с хостове от това устройство или чрез сървъра. Можете да промените това за всеки хост.", - "originLocal": "Това устройство", - "originRemote": "Сървърът", - "entities": { - "hosts": "Хостове", - "sshCredentials": "Идентификационни данни", - "sshFolders": "Папки", - "userPreferences": "Предпочитания", - "pluginUserSettings": "Настройки на плъгините", - "sharedHosts": "Хостове, споделени с вас", - "sharedCredentials": "Идентификационни данни, споделени с вас", - "vaultProfiles": "Профили на Vault", - "snippetFolders": "Папки със снипети", - "snippets": "Снипети", - "dashboardServiceLinks": "Връзки към услуги", - "homepageItems": "Елементи на началната страница", - "networkTopology": "Мрежова карта", - "workspaces": "Работни пространства", - "hostDefaults": "Стандартни настройки на хостовете", - "hostDefaultsAdmin": "Стандартни настройки на хостовете на сървъра", - "aiProviders": "AI доставчици", - "homepageLayouts": "Разположения на началната страница", - "accountProfile": "Профил на акаунта" - }, "proxy": { - "title": "Обратен прокси", - "description": "Необходимо само когато нещо като Cloudflare Access или страница за вход стои пред сървъра ви.", "headersTitle": "Допълнителни хедъри", "headersHint": "Изпращат се с всяка заявка към сървъра, например токен за услуга Cloudflare Access.", "headerName": "Име на хедъра", @@ -2352,8 +1567,7 @@ "username": "Потребителско име", "password": "Парола", "allowInvalidCertificate": "Да доверя самоподписан сертификат", - "allowInvalidCertificateHint": "Само за вашия собствен сървър, когато сертификатът му не е от известен орган.", - "saved": "Запазено" + "allowInvalidCertificateHint": "Само за вашия собствен сървър, когато сертификатът му не е от известен орган." }, "problems": { "invalidUrl": "Това не изглежда като уеб адрес.", @@ -2391,6 +1605,27 @@ "linking": "Свързване и стартиране на първата синхронизация...", "linked": "Свързано. Данните ви се синхронизират.", "signedInAgain": "Влезте. Синхронизацията работи отново." + }, + "entities": { + "hosts": "Хостове", + "sshCredentials": "Идентификационни данни", + "sshFolders": "Папки", + "userPreferences": "Предпочитания", + "pluginUserSettings": "Настройки на плъгините", + "sharedHosts": "Хостове, споделени с вас", + "sharedCredentials": "Идентификационни данни, споделени с вас", + "vaultProfiles": "Профили на Vault", + "snippetFolders": "Папки със снипети", + "snippets": "Снипети", + "dashboardServiceLinks": "Връзки към услуги", + "homepageItems": "Елементи на началната страница", + "networkTopology": "Мрежова карта", + "workspaces": "Работни пространства", + "hostDefaults": "Стандартни настройки на хостовете", + "hostDefaultsAdmin": "Стандартни настройки на хостовете на сървъра", + "aiProviders": "AI доставчици", + "homepageLayouts": "Разположения на началната страница", + "accountProfile": "Профил на акаунта" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "Този хост задава собствена стойност. Кликнете, за да използвате отново стойността по подразбиране от {{source}}", "clearTitle": "Зададено на това ниво. Кликнете, за да го изчистите и да използвате {{source}} вместо това", "inheritedTitle": "Следва стойността по подразбиране от {{source}}", - "titleAdmin": "Стойности по подразбиране за хостовете на сървъра", - "titleUser": "Моите стойности по подразбиране за хостовете", - "titleFolder": "Стойности по подразбиране за папката: {{name}}", - "descriptionAdmin": "Стойности по подразбиране за всеки хост на този сървър. Потребителските, папковите или собствените на хоста стойности все още могат да зададат различна стойност. Променете поле, за да го зададете тук, или изчистете, за да го оставите незададено.", - "descriptionUser": "Стойности по подразбиране за всички ваши хостове, над тези на сървъра. Папка или самият хост все още могат да зададат различна стойност. Променете поле, за да го зададете тук, или изчистете, за да го оставите незададено.", - "descriptionFolder": "Стойности по подразбиране за хостовете в тази папка и подпапките ѝ, над вашите собствени. Хост все още може да зададе различна стойност. Променете поле, за да го зададете тук, или изчистете, за да го оставите незададено.", - "save": "Запази стойностите по подразбиране", "saved_one": "Стойностите по подразбиране са запазени. {{count}} хост беше актуализиран.", "saved_other": "Стойностите по подразбиране са запазени. {{count}} хоста бяха актуализирани.", - "savedInBackground": "Стойностите по подразбиране са запазени. Хостовете се актуализират във фонов режим.", "appliedToHosts_one": "{{count}} хост беше актуализиран с новите стойности по подразбиране.", "appliedToHosts_other": "{{count}} хоста бяха актуализирани с новите стойности по подразбиране.", - "saveFailed": "Не може да се запазят стойностите по подразбиране", - "loadFailed": "Не може да се заредят стойностите по подразбиране", - "confirmTitle": "Запазване на стойностите по подразбиране?", "confirmChanges_one": "{{count}} хост следва тези стойности по подразбиране и ще се промени.", "confirmChanges_other": "{{count}} хоста следват тези стойности по подразбиране и ще се променят.", - "confirmNoChanges": "Няма промени в съществуващи хостове. Новите хостове ще започнат с тези стойности по подразбиране.", - "menuMyDefaults": "Моите стойности по подразбиране за хостовете", - "folderDefaultsAction": "Стойности по подразбиране за папката", - "adminSectionDescription": "Задайте стойностите по подразбиране, които всеки хост на този сървър следва, за всяка настройка на хост, включително тези на всеки плъгин. Потребителите и папките могат да зададат свои собствени върху тях, а всеки хост все още може да използва собствена стойност.", - "editServerDefaults": "Редактиране на стойностите по подразбиране на сървъра", - "resetMenu": "Нулиране", - "resetAll": "Всичко по подразбиране", - "resetCore": "Връзка и SSH по подразбиране", "resetDone_one": "{{count}} хост вече използва стойностите по подразбиране.", "resetDone_other": "{{count}} хоста вече използват стойностите по подразбиране." }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "Запазено. Въведете ново, за да го замените." }, - "sharing": { - "revokeConfirm": "Да се премахне достъпът на {{name}}?", - "revoke": "Премахване на достъп" - }, "manage": { - "searchSettings": "Търсене в настройките", - "noMatchingSettings": "Няма съвпадащи настройки.", - "sections": "Секции", - "sectionNeedsAttention": "Тук има нещо, което изисква внимание", "needsAttention_one": "Едно нещо изисква внимание.", "needsAttention_other": "{{count}} неща изискват внимание.", - "bandHost": "Хост", - "bandFeatures": "Протоколи и добавки", - "bandCredential": "Удостоверение", - "sshConnection": "SSH връзка", - "errorAddressRequired": "Адресът е задължителен.", - "errorPortRange": "Използвайте порт между 1 и 65535.", - "defaults": "По подразбиране", - "searchHosts": "Търсене на хостове", - "searchCredentials": "Търсене на удостоверения", - "searchDefaults": "Търсене в настройките по подразбиране", - "addCredential": "Добавяне на удостоверение", - "nothingMatches": "Няма съвпадения", - "nothingYet": "Тук все още няма нищо", - "emptyHostsHint": "Добавете хост и той ще се появи тук, в която и папка да го поставите.", - "emptyCredentialsHint": "Запазените удостоверения могат да се използват от всеки хост.", - "collapse": "Свиване", - "expand": "Разгъване", - "cannotBeUndone": "Това действие не може да бъде отменено.", - "hostNotFound": "Не можахме да намерим този хост. Опитайте да опресните списъка.", "hostCount_one": "{{count}} хост", "hostCount_other": "{{count}} хоста", "credentialCount_one": "{{count}} удостоверение", - "credentialCount_other": "{{count}} удостоверения", - "newHost": "Нов хост", - "newCredential": "Ново удостоверение", - "advanced": "Разширени", - "pickHost": "Изберете хост за редактиране", - "pickCredential": "Изберете удостоверение за редактиране", - "pickDefaults": "Изберете ниво на настройки по подразбиране за редактиране", - "pickHint": "Всичко, свързано с връзката, се намира тук, групирано за лесно намиране." + "credentialCount_other": "{{count}} удостоверения" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/bn_BD.json b/src/ui/locales/translated/bn_BD.json index 5336b6371..2f7374e1d 100644 --- a/src/ui/locales/translated/bn_BD.json +++ b/src/ui/locales/translated/bn_BD.json @@ -141,7 +141,6 @@ "continue": "চালিয়ে যান", "error": "ত্রুটি", "unsavedChanges": "সংরক্ষণ করা হয়নি এমন পরিবর্তন", - "more": "আরও", "loading": "লোড হচ্ছে...", "host": "হোস্ট", "selectHost": "একটি হোস্ট নির্বাচন করুন...", @@ -154,7 +153,6 @@ "cancel": "বাতিল করুন", "username": "ব্যবহারকারীর নাম", "login": "লগইন", - "logout": "লগআউট", "register": "নিবন্ধন করুন", "password": "পাসওয়ার্ড", "confirmPassword": "পাসওয়ার্ড নিশ্চিত করুন", @@ -165,8 +163,6 @@ "rename": "নাম পরিবর্তন করুন", "edit": "সম্পাদনা করুন", "confirm": "নিশ্চিত করুন", - "next": "পরবর্তী", - "previous": "পূর্ববর্তী", "refresh": "রিফ্রেশ করুন", "language": "ভাষা", "backendReconnected": "সার্ভার সংযোগ পুনরুদ্ধার করা হয়েছে", @@ -234,10 +230,6 @@ "pluginsDocsLink": "প্রতিটির সম্পর্কে পড়ুন" }, "desktopUpdates": { - "title": "ডেস্কটপ অ্যাপ", - "mode": "আপডেট", - "modeHint": "এই অ্যাপটি নতুন ভার্সন কীভাবে পায়।", - "manualModeHint": "এই কপিটি নিজে থেকে আপডেট করতে পারে না, তাই Termix শুধু তখনই জানায় যখন নতুন ভার্সন আসে।", "modeAutomatic": "স্বয়ংক্রিয়", "modePrompt": "প্রথমে জিজ্ঞাসা করুন", "modeNever": "কখনো না", @@ -247,15 +239,6 @@ "onboardingTitle": "অ্যাপ আপডেট", "onboardingBody": "ডেস্কটপ অ্যাপটি এখন নিজে থেকে আপডেট করতে পারে। নতুন ভার্সন কীভাবে আসবে তা বেছে নিন। আপনি পরে সেটিংস, আপডেট থেকে এটি পরিবর্তন করতে পারেন।", "onboardingManual": "এই অ্যাপের কপিটি এমনভাবে ইনস্টল করা হয়েছে যা নিজে থেকে আপডেট করতে পারে না, তাই Termix নতুন ভার্সন আসলে ডাউনলোড করার লিংক সহ আপনাকে জানাবে।", - "status": "ভার্সন {{version}}", - "statusIdle": "এখনো চেক করা হয়নি", - "statusChecking": "আপডেট চেক করা হচ্ছে", - "statusAvailable": "ভার্সন {{version}} উপলব্ধ", - "statusDownloading": "{{version}} ডাউনলোড হচ্ছে ({{progress}}%)", - "statusReady": "ভার্সন {{version}} প্রস্তুত। ইনস্টল করতে রিস্টার্ট করুন।", - "statusUpToDate": "আপনার কাছে সর্বশেষ ভার্সন রয়েছে", - "statusError": "আপডেট চেক করা যায়নি। পরে আবার চেষ্টা করুন।", - "checkNow": "এখনই চেক করুন", "download": "ডাউনলোড", "restart": "এখনই রিস্টার্ট করুন", "later": "পরে", @@ -269,26 +252,11 @@ "terminal": "টার্মিনাল", "close": "বন্ধ করুন", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "পাসওয়ার্ড কপি করুন", - "copySudoPassword": "সুডো পাসওয়ার্ড কপি করুন", - "passwordCopied": "পাসওয়ার্ড ক্লিপবোর্ডে কপি করা হয়েছে", - "failedToCopyPassword": "পাসওয়ার্ড কপি করতে ব্যর্থ হয়েছে", - "refreshTab": "সংযোগ রিফ্রেশ করুন", - "renameTab": "ট্যাবের নাম পরিবর্তন করুন", "dashboard": "ড্যাশবোর্ড", "quickConnect": "দ্রুত সংযোগ", - "openAsTabHint": "ট্যাব হিসেবে খুলতে Ctrl+ক্লিক বা মাঝের ক্লিক করুন", - "openAsTab": "ট্যাব হিসেবে খুলুন", - "openInRightDock": "ডান ডকে খুলুন", - "closeRightDock": "ডান ডক বন্ধ করুন", - "toggleRightDock": "ডান ডক টগল করুন", "hosts": "হোস্টসমূহ", "credentials": "ক্রেডেনশিয়াল", "connections": "কানেকশন", - "keepSideMenuOpen": "মেনু খোলা রাখুন", - "collapseSideMenu": "মেনু ভাঁজ করুন", - "roleAdministrator": "অ্যাডমিনিস্ট্রেটর", - "roleUser": "ব্যবহারকারী", "sync": "সিঙ্ক", "reconnectDisconnectedTerminals": "সব বিচ্ছিন্ন টার্মিনাল পুনরায় সংযোগ করুন", "reconnectingTerminals_one": "{{count}} টার্মিনাল পুনরায় সংযোগ করা হচ্ছে", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "{{count}} টার্মিনাল পুনরায় সংযোগ শুরু করা যায়নি", "fullscreenUnsupported": "এই ব্রাউজারে ফুলস্ক্রিন সমর্থিত নয়", "fullscreenFailed": "ফুলস্ক্রিন টগল করা যায়নি", - "resetSidebarWidth": "প্রস্থ রিসেট করুন", - "collapseSidebar": "সাইডবার ভাঁজ করুন", - "openSidebar": "সাইডবার খুলুন", "confirmCloseHost": "{{host}} বন্ধ করবেন?", - "enterFullscreen": "ফুলস্ক্রিনে প্রবেশ করুন (Ctrl+Shift+F)", - "exitFullscreen": "ফুলস্ক্রিন থেকে বের হন (Ctrl+Shift+F)", - "group": { - "objects": "আপনার", - "tools": "টুলস", - "system": "সিস্টেম" - }, - "searchEverything": "হোস্ট, ট্যাব এবং অ্যাকশন খুঁজুন", - "search": "খুঁজুন", "hiddenCount_one": "{{count}}টি লুকানো", "hiddenCount_other": "{{count}}টি লুকানো", - "showInRail": "সাইডবারে দেখান", - "moveUp": "উপরে সরান", - "moveDown": "নিচে সরান", - "resetRailOrder": "ক্রম রিসেট করুন", - "hideFromRail": "সাইডবার থেকে লুকান", - "openSettings": "সেটিংস খুলুন", "settings": "সেটিংস", "manage": "ম্যানেজ করুন", - "mobileNavigation": "নেভিগেশন", "plugins": "প্লাগইন" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "ইমপোর্ট সম্পন্ন: {{imported}} ইমপোর্ট করা হয়েছে, {{updated}} আপডেট করা হয়েছে, {{failed}} ব্যর্থ হয়েছে", "importHostsFailed": "হোস্ট ইমপোর্ট করতে ব্যর্থ হয়েছে" }, - "commandPalette": { - "searchPlaceholder": "হোস্ট, কমান্ড, অথবা সেটিংস খুঁজুন...", - "quickActions": "দ্রুত অ্যাকশন", - "navigation": "নেভিগেশন", - "orShortcut": "অথবা", - "addNewHost": "নতুন হোস্ট যোগ করুন", - "adminSettings": "অ্যাডমিন সেটিংস", - "addCredential": "ক্রেডেনশিয়াল যোগ করুন", - "recentActivity": "সাম্প্রতিক কার্যকলাপ", - "serversAndHosts": "সার্ভার ও হোস্ট", - "noHostsFound": "\"{{search}}\" এর সাথে মিলে এমন কোনো হোস্ট পাওয়া যায়নি", - "links": "লিংক", - "navigate": "নেভিগেট", - "select": "নির্বাচন করুন", - "pluginActions": "আরও অ্যাকশন", - "noTargetTab": "কোনো টার্মিনাল ট্যাব খোলা নেই", - "documentation": "ডকুমেন্টেশন" - }, "splitScreen": { "title": "স্প্লিট স্ক্রিন", "defaultLabel": "স্প্লিট {{number}}", "splitRight": "ডানদিকে স্প্লিট করুন", "splitDown": "নিচে স্প্লিট করুন", - "addToSplit": "{{split}} এ যোগ করুন", "paneEmptyItem": "পেন {{index}}: খালি", "paneItem": "পেন {{index}}: {{label}}", "paneNumber": "পেন {{index}}", - "newPaneRight": "ডানদিকে নতুন পেন", - "newPaneBelow": "নিচে নতুন পেন", "emptyTitle": "খালি পেন", "emptyHint": "এখানে দেখার জন্য কিছু নির্বাচন করুন। এই পেনটি নির্বাচিত থাকাকালীন, সাইডবার থেকে যা খুলবেন তা এখানেও খুলবে।", "openTabs": "খোলা ট্যাব", @@ -962,7 +890,6 @@ "clearPane": "এই পেনটি খালি করুন", "zoom": "পেন জুম করুন", "unzoom": "লেআউট পুনরুদ্ধার করুন", - "unsplit": "স্প্লিট সরান", "layouts": "লেআউট", "applyLayout": "লেআউট পরিবর্তন করুন", "maxPanes_one": "একটি স্প্লিটে সর্বোচ্চ {{count}}টি পেন থাকতে পারে", @@ -971,8 +898,6 @@ "dropHere": "এখানে দেখাতে ড্রপ করুন", "paneActions": "পেন অ্যাকশন", "dividerHint": "আকার পরিবর্তন করতে ড্র্যাগ করুন। সমান করতে ডাবল-ক্লিক করুন।", - "openInSplit": "স্প্লিটে খুলুন", - "openInNewSplit": "বর্তমান ট্যাব সহ নতুন স্প্লিট", "shortcuts": "শর্টকাট", "shortcutNavigate": "পেনগুলোর মধ্যে চলাচল করুন", "presets": { @@ -986,23 +911,6 @@ "grid6": "ছয়টির গ্রিড" } }, - "connections": { - "noConnections": "কোনো সংযোগ নেই", - "noConnectionsDesc": "এখানে সংযোগ দেখতে একটি টার্মিনাল, ফাইল ম্যানেজার বা রিমোট ডেস্কটপ খুলুন", - "connectedFor": "Connected for {{duration}}", - "connected": "Connected", - "disconnected": "Disconnected", - "reconnect": "Reconnect", - "sectionOpen": "Open", - "sectionBackground": "Background", - "backgroundDesc": "Sessions persist for {{minutes}} minutes after disconnect and can be reconnected.", - "expiresIn": "Expires in {{duration}}", - "search": "Search connections...", - "noSearchResults": "No connections match your search", - "rename": "Rename session", - "forgetConfirm": "End the background session for {{name}}?", - "forget": "End session" - }, "sshAuth": { "totpRequired": "Two-Factor Authentication Required", "totpCodeLabel": "Verification Code", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "কী পাসওয়ার্ড", "pastePrivateKey": "আপনার প্রাইভেট কী এখানে পেস্ট করুন...", - "enterPassword": "আপনার পাসওয়ার্ড লিখুন", - "apiKeyName": "যেমন, CI Pipeline", - "credentialName": "যেমন, Production SSH Key", - "optionalDetails": "ঐচ্ছিক বিবরণ...", - "sshUsername": "যেমন, root বা deploy", - "hostAddress": "10.0.0.1 বা example.com", - "hostName": "যেমন, Web Server Production" + "enterPassword": "আপনার পাসওয়ার্ড লিখুন" }, "dashboard": { - "title": "ড্যাশবোর্ড", - "github": "GitHub", - "reportBug": "বাগ রিপোর্ট করুন", - "discord": "Discord", - "docs": "ডক্স", - "donate": "দান করুন", - "serverOverview": "সার্ভারের সারসংক্ষেপ", - "version": "ভার্সন", "updateAvailable": "আপডেট উপলব্ধ", - "beta": "বেটা", - "uptime": "আপটাইম", - "database": "ডেটাবেস", - "healthy": "সুস্থ", - "error": "ত্রুটি", - "totalHosts": "মোট হোস্ট", - "totalCredentials": "মোট ক্রেডেনশিয়াল", - "recentActivity": "সাম্প্রতিক কার্যকলাপ", - "reset": "রিসেট", - "noRecentActivity": "কোনো সাম্প্রতিক কার্যকলাপ নেই", - "quickActions": "দ্রুত অ্যাকশন", - "addHost": "হোস্ট যোগ করুন", - "addCredential": "ক্রেডেনশিয়াল যোগ করুন", - "adminSettings": "প্রশাসক সেটিংস", - "userProfile": "ব্যবহারকারীর প্রোফাইল", - "serverStats": "সার্ভার পরিসংখ্যান", - "customizeLayout": "ড্যাশবোর্ড কাস্টমাইজ করুন", - "justNow": "এইমাত্র" + "beta": "বেটা" }, "dashboardTab": { "stable": "স্থিতিশীল", - "registerNewServer": "একটি নতুন সার্ভার রেজিস্টার করুন", - "storeSshKeysOrPasswords": "SSH কী বা পাসওয়ার্ড সংরক্ষণ করুন", - "manageUsersAndRoles": "ব্যবহারকারী এবং ভূমিকা পরিচালনা করুন", - "manageYourAccount": "আপনার অ্যাকাউন্ট পরিচালনা করুন", - "hostStatus": "হোস্টের অবস্থা", - "noHostsConfigured": "কোনো হোস্ট কনফিগার করা নেই", - "checking": "পরীক্ষা চলছে", - "commandPalette": "কমান্ড প্যালেট", - "done": "সম্পন্ন", - "clear": "মুছুন", - "dragToResizeColumns": "কলামের আকার পরিবর্তন করতে ড্র্যাগ করুন", - "hostsAvailable": "হোস্ট উপলব্ধ", - "removeSection": "সেকশন সরান", - "addSection": "একটি সেকশন যোগ করুন", - "allSectionsShown": "ড্যাশবোর্ডে সবকিছুই ইতিমধ্যে রয়েছে।", - "fromPlugins": "প্লাগইন থেকে", - "dropHere": "এখানে একটি সেকশন ড্রপ করুন", - "dragToReorder": "সেকশনগুলোর ক্রম পরিবর্তন করতে ড্র্যাগ করুন", - "clearActivityConfirm": "আপনার সাম্প্রতিক কার্যকলাপ মুছে ফেলবেন?", - "resetConfirm": "ড্যাশবোর্ডের লেআউট ডিফল্টে রিসেট করবেন?", "onlineCount_one": "{{count}} অনলাইন", "onlineCount_other": "{{count}} অনলাইন", "hostCount_one": "{{count}} হোস্ট", "hostCount_other": "{{count}} হোস্ট" }, "admin": { - "sectionGeneral": "সাধারণ", - "sectionUsers": "ব্যবহারকারী", - "sectionSessions": "সেশন", - "sectionRoles": "ভূমিকা", - "sectionDatabase": "ডেটাবেস", - "sectionApiKeys": "API কী", - "sectionAuditLog": "অডিট লগ", - "sectionSsl": "HTTPS সার্টিফিকেট", - "sectionBranding": "হোয়াইট লেবেল", - "brandingAppName": "অ্যাপ্লিকেশনের নাম", - "brandingAppNameDesc": "লগইন স্ক্রিন এবং ব্রাউজার ট্যাবে প্রদর্শিত হয়। \"Termix\" ব্যবহার করতে খালি রাখুন।", - "brandingTagline": "ট্যাগলাইন", - "brandingTaglineDesc": "লগইন স্ক্রিনে অ্যাপ্লিকেশনের নামের নিচে প্রদর্শিত হয়। ডিফল্ট ট্যাগলাইন ব্যবহার করতে খালি রাখুন।", - "brandingLogo": "লোগো", - "brandingLogoDesc": "PNG, JPEG বা WEBP, সর্বোচ্চ ৭৫০ কেবি। লগইন স্ক্রিন এবং ব্রাউজার ট্যাবে ডিফল্ট আইকনটি প্রতিস্থাপন করে।", - "brandingLogoUpload": "লোগো আপলোড করুন", - "brandingLogoReset": "ডিফল্টে রিসেট করুন", - "brandingLogoInvalid": "অবৈধ ছবি। ৭৫০ কেবি পর্যন্ত PNG, JPEG বা WEBP ফাইল ব্যবহার করুন।", - "brandingSaved": "ব্র্যান্ডিং সেটিংস সংরক্ষিত হয়েছে", - "brandingSaveFailed": "ব্র্যান্ডিং সেটিংস সংরক্ষণে ব্যর্থ হয়েছে", - "sslDescription": "Termix যে সার্টিফিকেটটি HTTPS এর মাধ্যমে পরিবেশন করে। এখানে আপনার নিজস্ব সার্টিফিকেট আপলোড করুন, অথবা ACME সার্টিফিকেট সেকশন থেকে Let's Encrypt থেকে একটি সার্টিফিকেট অর্জন এবং নবায়ন করুন।", - "sslDocsLink": "SSL ডকুমেন্টেশন দেখুন", - "sslCertStatus": "সার্টিফিকেটের অবস্থা", - "sslCertStatusNone": "কোনো সার্টিফিকেট নেই", - "sslCertStatusValid": "বৈধ", - "sslCertStatusExpiring": "শীঘ্রই মেয়াদ শেষ হবে", - "sslCertStatusExpired": "মেয়াদ শেষ হয়েছে", - "sslCertExpiresAt": "{{date}} তারিখে মেয়াদ শেষ হবে", - "sslInfoNote": "একটি সার্টিফিকেট ইস্যু বা আপলোড করার পর, Termix স্বয়ংক্রিয়ভাবে বিদ্যমান HTTP পোর্টের পাশাপাশি SSL_PORT (ডিফল্ট ৮৪৪৩) এ HTTPS সক্রিয় করবে। নিশ্চিত করুন যে পোর্টটি এই কন্টেইনারে প্রকাশিত/ম্যাপ করা হয়েছে যাতে এটি অ্যাক্সেসযোগ্য হয়।", - "sslManualCert": "সার্টিফিকেট (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "প্রাইভেট কী (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "আপনার বিদ্যমান সার্টিফিকেট এবং প্রাইভেট কী পেস্ট করুন, আপনার CA দ্বারা প্রয়োজন হলে পূর্ণ চেইন সহ।", - "sslManualUpload": "সার্টিফিকেট আপলোড ও ইনস্টল করুন", - "sslManualUploadLoading": "সার্টিফিকেট আপলোড হচ্ছে...", - "sslManualUploadSuccess": "সার্টিফিকেট সফলভাবে আপলোড ও ইনস্টল হয়েছে", - "sslManualUploadFailed": "সার্টিফিকেট আপলোডে ব্যর্থ হয়েছে", - "sslManualRequiresFields": "সার্টিফিকেট এবং প্রাইভেট কী প্রয়োজন", - "auditLogTotal": "মোট {{total}}টি এন্ট্রি", - "auditLogEmpty": "কোনো অডিট লগ এন্ট্রি পাওয়া যায়নি", - "auditLogSuccess": "সফল", - "auditLogFailed": "ব্যর্থ", - "auditLogClearFilters": "ফিল্টার মুছুন", - "auditLogPage": "{{totalPages}} এর মধ্যে {{page}} পৃষ্ঠা (মোট {{total}})", - "auditLogIp": "IP", - "auditLogResourceId": "রিসোর্স ID", - "auditLogFilterUser": "ব্যবহারকারী", - "auditLogFilterAction": "অ্যাকশন", - "auditLogFilterResourceType": "রিসোর্স টাইপ", - "auditLogFilterStatus": "স্ট্যাটাস", - "auditLogFilterFrom": "থেকে", - "auditLogFilterTo": "পর্যন্ত", - "auditLogFilterAll": "সব", - "allowRegistration": "ব্যবহারকারী রেজিস্ট্রেশন অনুমতি দিন", - "allowRegistrationDesc": "নতুন ব্যবহারকারীদের ইউজারনেম এবং পাসওয়ার্ড দিয়ে নিজেদের রেজিস্টার করতে দিন", - "allowPasswordLogin": "পাসওয়ার্ড লগইন অনুমতি দিন", - "allowPasswordLoginDesc": "ইউজারনেম/পাসওয়ার্ড লগইন", - "externalAutoProvision": "বাহ্যিক অ্যাকাউন্ট স্বয়ংক্রিয়ভাবে তৈরি করুন", - "externalAutoProvisionDesc": "SSO বা LDAP-এর মতো বাহ্যিক লগইনের মাধ্যমে কেউ প্রথমবার সাইন ইন করলে একটি অ্যাকাউন্ট তৈরি করুন। বন্ধ থাকলে, শুধুমাত্র যাদের আগে থেকেই অ্যাকাউন্ট আছে তারা এইভাবে সাইন ইন করতে পারবে", - "secondFactorAfterExternalLogin": "বাহ্যিক লগইনের পরে দ্বিতীয় ফ্যাক্টর চান (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "বন্ধ থাকলে, এনরোল করা দ্বিতীয় ফ্যাক্টর শুধুমাত্র পাসওয়ার্ড এবং অন্যান্য স্থানীয় লগইনের পরে চাওয়া হয়, আগের মতোই। চালু থাকলে, SSO এবং LDAP সহ প্রতিটি লগইন পদ্ধতির পরে এটি চাওয়া হয়।", - "allowPasswordReset": "পাসওয়ার্ড রিসেট অনুমতি দিন", - "allowPasswordResetDesc": "Docker লগের মাধ্যমে রিসেট কোড", - "auditForwardingTitle": "SIEM-এ ফরওয়ার্ড করুন", - "auditForwardingDesc": "প্রতিটি অডিট এন্ট্রির একটি কপি NDJSON হিসেবে একটি বাহ্যিক কালেক্টরে পাঠান। স্থানীয় লগ সত্যের উৎস হিসেবেই থাকবে।", - "auditForwardingEnvNotice": "একটি পরিবেশ ভেরিয়েবলও ফরওয়ার্ডিং কনফিগার করে; এখানে সংরক্ষিত URL-এর অগ্রাধিকার থাকবে।", - "auditForwardingToken": "বিয়ারার টোকেন (ঐচ্ছিক)", - "auditForwardingTokenStored": "বিয়ারার টোকেন (সংরক্ষিত)", - "auditForwardingSaved": "অডিট ফরওয়ার্ডিং সেটিংস সংরক্ষিত হয়েছে", - "auditForwardingSaveError": "অডিট ফরওয়ার্ডিং সেটিংস সংরক্ষণে ব্যর্থ হয়েছে", - "sessionTimeout": "সেশন টাইমআউট", - "hours": "ঘণ্টা", - "sessionTimeoutRange": "ন্যূনতম ১ ঘণ্টা, সর্বোচ্চ ৭২০ ঘণ্টা", - "monitoringDefaults": "মনিটরিং ডিফল্ট", - "statusCheck": "স্ট্যাটাস চেক", - "sec": "সেকেন্ড", - "logLevel": "লগ লেভেল", "usersCount_one": "{{count}}টি ব্যবহারকারী", - "usersCount_other": "{{count}}টি ব্যবহারকারী", - "searchUsers": "ব্যবহারকারী খুঁজুন...", - "noUsers": "কোনো ব্যবহারকারী নেই", - "noUsersMatch": "আপনার অনুসন্ধানের সাথে কোনো ব্যবহারকারী মিলছে না", - "pageOf": "{{total}} এর মধ্যে {{page}} পৃষ্ঠা", - "createUser": "তৈরি করুন", - "newRole": "নতুন ভূমিকা", - "roleName": "নাম", - "roleDisplayName": "ডিসপ্লে নাম", - "roleDescription": "বিবরণ", "rolesCount_one": "{{count}}টি ভূমিকা", - "rolesCount_other": "{{count}}টি ভূমিকা", - "createRole": "তৈরি করুন", - "creating": "তৈরি হচ্ছে...", - "exportDatabase": "ডেটাবেস রপ্তানি করুন", - "exportDatabaseDesc": "সব হোস্ট, ক্রেডেনশিয়াল এবং সেটিংসের একটি পোর্টেবল SQLite ব্যাকআপ ডাউনলোড করুন", - "export": "রপ্তানি করুন", - "exporting": "রপ্তানি হচ্ছে...", - "importDatabase": "ডেটাবেস আমদানি করুন", - "importDatabaseDesc": "যেকোনো ডেটাবেস ব্যাকএন্ডে একটি পোর্টেবল .sqlite ব্যাকআপ থেকে পুনরুদ্ধার করুন", - "importDatabaseSelected": "নির্বাচিত: {{name}}", - "selectFile": "ফাইল নির্বাচন করুন", - "changeFile": "পরিবর্তন করুন", - "import": "আমদানি করুন", - "importing": "আমদানি হচ্ছে...", "apiKeysCount_one": "{{count}}টি কী", - "apiKeysCount_other": "{{count}}টি কী", - "apiKeysDocsLink": "ডক্স দেখুন", - "apiKeysCliHint": "আপনার টার্মিনাল থেকে সার্ভার পরিচালনার জন্য Termix CLI-এর সাথে একটি API কী ব্যবহার করুন।", - "apiKeysCliLink": "CLI ডক্স দেখুন", - "newApiKey": "নতুন API কী", - "apiKeyCreatedWarning": "কী তৈরি হয়েছে - এখনই কপি করুন, এটি আর দেখানো হবে না।", - "apiKeyName": "নাম", - "apiKeyUser": "ব্যবহারকারী", - "apiKeySelectUser": "একজন ব্যবহারকারী নির্বাচন করুন...", - "apiKeyExpiresAt": "মেয়াদ শেষের সময়", - "createKey": "কী তৈরি করুন", - "apiKeyNoExpiry": "মেয়াদ শেষ নেই", - "revokedBadge": "বাতিল করা হয়েছে", - "authTypeDual": "ডুয়াল অথ", - "authTypeExternal": "বহিঃস্থ", - "authTypeLocal": "স্থানীয়", - "adminStatusAdministrator": "এডমিনিস্ট্রেটর", - "adminStatusRegularUser": "সাধারণ ব্যবহারকারী", - "adminBadge": "এডমিন", - "systemBadge": "সিস্টেম", - "customBadge": "কাস্টম", - "youBadge": "আপনি", "sessionsActive_one": "{{count}}টি সক্রিয়", - "sessionsActive_other": "{{count}}টি সক্রিয়", - "sessionActive": "সক্রিয়: {{time}}", - "sessionExpires": "মেয়াদ: {{time}}", - "revokeAll": "সব", - "revokeAllSessionsSuccess": "ব্যবহারকারীর সকল সেশন বাতিল করা হয়েছে", - "revokeAllSessionsFailed": "সেশন বাতিল করতে ব্যর্থ হয়েছে", - "revokeSessionFailed": "সেশন বাতিল করতে ব্যর্থ হয়েছে", - "addRole": "ভূমিকা যোগ করুন", - "noCustomRoles": "কোনো কাস্টম ভূমিকা সংজ্ঞায়িত নেই", - "removeRoleFailed": "ভূমিকা সরানোতে ব্যর্থ হয়েছে", - "assignRoleFailed": "ভূমিকা নির্ধারণ করতে ব্যর্থ হয়েছে", - "userAdminAccess": "এডমিনিস্ট্রেটর", - "userAdminAccessDesc": "সকল এডমিন সেটিংসে সম্পূর্ণ অ্যাক্সেস", - "userRoles": "ভূমিকা", - "revokeAllUserSessions": "সকল সেশন বাতিল করুন", - "revokeAllUserSessionsDesc": "সকল ডিভাইসে পুনরায় লগইন বাধ্য করুন", - "revoke": "বাতিল করুন", - "deleteUserWarning": "এই ব্যবহারকারীকে মুছে ফেলা স্থায়ী।", - "deleteUser": "{{username}} মুছুন", - "deleting": "মুছে ফেলা হচ্ছে...", - "deleteUserFailed": "ব্যবহারকারী মুছে ফেলতে ব্যর্থ হয়েছে", - "deleteUserSuccess": "ব্যবহারকারী \"{{username}}\" মুছে ফেলা হয়েছে", - "deleteRoleSuccess": "ভূমিকা \"{{name}}\" মুছে ফেলা হয়েছে", - "revokeKeySuccess": "কী \"{{name}}\" বাতিল করা হয়েছে", - "revokeKeyFailed": "কী বাতিল করতে ব্যর্থ হয়েছে", - "copiedToClipboard": "ক্লিপবোর্ডে কপি করা হয়েছে", - "done": "সম্পন্ন", - "createUserTitle": "ব্যবহারকারী তৈরি করুন", - "createUserDesc": "একটি নতুন স্থানীয় অ্যাকাউন্ট তৈরি করুন।", - "createUserUsername": "ব্যবহারকারীর নাম", - "createUserPassword": "পাসওয়ার্ড", - "createUserPasswordHint": "ন্যূনতম ৬টি অক্ষর।", - "createUserEnterUsername": "ব্যবহারকারীর নাম লিখুন", - "createUserSubmit": "ব্যবহারকারী তৈরি করুন", - "editUserTitle": "ব্যবহারকারী পরিচালনা: {{username}}", - "editUserDesc": "ভূমিকা, এডমিন স্ট্যাটাস, সেশন এবং অ্যাকাউন্ট সেটিংস সম্পাদনা করুন।", - "editUserUsername": "ব্যবহারকারীর নাম", - "editUserAuthType": "অথ টাইপ", - "editUserAdminStatus": "এডমিন স্ট্যাটাস", - "editUserUserId": "ব্যবহারকারী আইডি", - "linkAccountTitle": "অ্যাকাউন্ট লিঙ্ক করুন", - "linkAccountDesc": "বহিঃস্থ অ্যাকাউন্ট {{username}} কে একটি বিদ্যমান স্থানীয় অ্যাকাউন্টের সাথে একত্রিত করুন।", - "linkAccountDescLocal": "স্থানীয় অ্যাকাউন্ট {{username}} কে একটি বিদ্যমান শুধুমাত্র বহিঃস্থ অ্যাকাউন্টের সাথে লিঙ্ক করুন।", - "linkAccountWarningTitle": "এটি করবে:", - "linkAccountEffect1": "বহিঃস্থ-মাত্র অ্যাকাউন্টটি মুছে ফেলবে", - "linkAccountEffect2": "টার্গেট অ্যাকাউন্টে এর বহিঃস্থ সাইন-ইন যোগ করবে", - "linkAccountEffect3": "বহিঃস্থ এবং পাসওয়ার্ড সাইন-ইন উভয়ই অনুমতি দেবে", - "linkAccountTargetUsername": "স্থানীয় অ্যাকাউন্টের ব্যবহারকারীর নাম", - "linkAccountTargetPlaceholder": "যার সাথে সংযুক্ত করতে চান সেই স্থানীয় অ্যাকাউন্টের ব্যবহারকারীর নাম লিখুন", - "linkAccountExternalUsername": "বহিঃস্থ অ্যাকাউন্টের ব্যবহারকারীর নাম", - "linkAccountExternalPlaceholder": "যা একত্রিত করতে চান সেই বহিঃস্থ-মাত্র অ্যাকাউন্টের ব্যবহারকারীর নাম লিখুন", - "linkAccountExternalNotFound": "এই ব্যবহারকারীর নামে কোনো বহিঃস্থ-মাত্র অ্যাকাউন্ট পাওয়া যায়নি", - "linkAccounts": "অ্যাকাউন্ট সংযুক্ত করুন", - "linkAccountSuccess": "অ্যাকাউন্ট সফলভাবে সংযুক্ত হয়েছে", - "linkAccountFailed": "অ্যাকাউন্ট সংযুক্ত করতে ব্যর্থ হয়েছে", - "linkAccountInProgress": "সংযুক্ত হচ্ছে...", - "unlinkAccountTitle": "বহিঃস্থ সাইন-ইন বিচ্ছিন্ন করুন", - "unlinkAccountDesc": "{{username}} থেকে বহিঃস্থ সাইন-ইন সরিয়ে ফেলুন। তারা শুধুমাত্র তাদের পাসওয়ার্ড দিয়ে লগইন করতে পারবে।", - "unlinkAccountWarning": "এটি এই অ্যাকাউন্ট থেকে বহিঃস্থ সাইন-ইন সরিয়ে ফেলবে। লগইন চালিয়ে যাওয়ার জন্য ব্যবহারকারীর একটি পাসওয়ার্ড সেট থাকতে হবে।", - "unlinkAccount": "বহিঃস্থ সাইন-ইন বিচ্ছিন্ন করুন", - "unlinkAccountInProgress": "বিচ্ছিন্ন হচ্ছে...", - "unlinkAccountSuccess": "বহিঃস্থ সাইন-ইন বিচ্ছিন্ন হয়েছে", - "unlinkAccountFailed": "বহিঃস্থ সাইন-ইন বিচ্ছিন্ন করতে ব্যর্থ হয়েছে", - "updateRegistrationFailed": "রেজিস্ট্রেশন সেটিংস আপডেট করতে ব্যর্থ হয়েছে", - "updatePasswordLoginFailed": "পাসওয়ার্ড লগইন সেটিংস আপডেট করতে ব্যর্থ হয়েছে", - "updateSecondFactorAfterExternalLoginFailed": "দ্বিতীয় ফ্যাক্টর সেটিংস আপডেট করতে ব্যর্থ হয়েছে", - "updatePasswordResetFailed": "পাসওয়ার্ড রিসেট সেটিংস আপডেট করতে ব্যর্থ হয়েছে", - "sessionTimeoutRange2": "সেশন টাইমআউট ১ থেকে ৭২০ ঘণ্টার মধ্যে হতে হবে", - "sessionTimeoutSaved": "সেশন টাইমআউট সংরক্ষিত হয়েছে", - "sessionTimeoutSaveFailed": "সেশন টাইমআউট সংরক্ষণ করতে ব্যর্থ হয়েছে", - "monitoringIntervalInvalid": "অবৈধ ইন্টারভ্যাল মান", - "monitoringSaved": "মনিটরিং সেটিংস সংরক্ষিত হয়েছে", - "monitoringSaveFailed": "মনিটরিং সেটিংস সংরক্ষণ করতে ব্যর্থ হয়েছে", - "logLevelUpdateFailed": "লগ লেভেল আপডেট করতে ব্যর্থ হয়েছে", - "createUserRequired": "ব্যবহারকারীর নাম এবং পাসওয়ার্ড প্রয়োজন", - "createUserPasswordTooShort": "পাসওয়ার্ড কমপক্ষে ৬ অক্ষরের হতে হবে", - "createUserSuccess": "ব্যবহারকারী \"{{username}}\" তৈরি হয়েছে", - "createUserFailed": "ব্যবহারকারী তৈরি করতে ব্যর্থ হয়েছে", - "updateAdminStatusFailed": "অ্যাডমিন স্ট্যাটাস আপডেট করতে ব্যর্থ হয়েছে", - "allSessionsRevoked": "সব সেশন বাতিল করা হয়েছে", - "revokeSessionsFailed": "সেশন বাতিল করতে ব্যর্থ হয়েছে", - "manageUserData": "ব্যবহারকারীর ডেটা পরিচালনা করুন", - "backToUsers": "ব্যবহারকারীদের কাছে ফিরে যান", - "manageTabAccount": "অ্যাকাউন্ট", - "manageTabHosts": "হোস্ট", - "manageTabCredentials": "ক্রেডেনশিয়াল", - "manageTabSessions": "সেশন", - "manageTabDanger": "বিপদ", - "manageEditorBack": "{{username}}'s ডেটার কাছে ফিরে যান", - "dataLockedBadge": "লক করা", - "dataLockedNotice": "{{username}}'s ডেটা লক থাকবে যতক্ষণ না তারা পরবর্তীবার লগইন করে। ততক্ষণ তাদের হোস্ট, ক্রেডেনশিয়াল এবং স্নিপেট দেখা বা সম্পাদনা করা যাবে না।", - "resetPasswordTitle": "পাসওয়ার্ড রিসেট করুন", - "resetPasswordExternalOnly": "এই ব্যবহারকারী একটি বহিঃস্থ প্রদানকারীর মাধ্যমে সাইন-ইন করে এবং কোনো পাসওয়ার্ড নেই।", - "resetPasswordPlaceholder": "নতুন পাসওয়ার্ড", - "resetPasswordBtn": "রিসেট", - "resetPasswordWorking": "রিসেট হচ্ছে...", - "resetPasswordSuccess": "পাসওয়ার্ড রিসেট হয়েছে", - "resetPasswordSuccessWiped": "পাসওয়ার্ড রিসেট হয়েছে। ব্যবহারকারীর এনক্রিপ্টেড ডেটা মুছে ফেলা হয়েছে।", - "resetPasswordFailed": "পাসওয়ার্ড রিসেট করতে ব্যর্থ হয়েছে", - "resetPasswordConfirmWipe": "{{username}} এনক্রিপশন আপগ্রেডের পর থেকে লগইন করেননি, তাই তাদের ডেটা পুনরুদ্ধার করা সম্ভব নয়। এখন রিসেট করলে তাদের হোস্ট, ক্রেডেনশিয়াল এবং স্নিপেট মুছে ফেলা হবে। চালিয়ে যাবেন?", - "manageApiKeys": "API কী", - "apiKeyNamePlaceholder": "কীর নাম", - "apiKeyCopyNotice": "এই কীটি এখনই কপি করুন, এটি আর দেখানো হবে না।", - "noApiKeysForUser": "কোনো API কী নেই", - "apiKeyDeleteFailed": "API কী মুছে ফেলতে ব্যর্থ হয়েছে", - "exportUserData": "ডেটা রপ্তানি", - "exportUserDataDesc": "এই ব্যবহারকারীর হোস্ট, ক্রেডেনশিয়াল এবং ফাইল ম্যানেজার ডেটা JSON হিসেবে ডাউনলোড করুন। গোপন তথ্যগুলো ডিক্রিপ্ট করা হবে।", - "exportUserDataSuccess": "ব্যবহারকারীর ডেটা রপ্তানি করা হয়েছে", - "exportUserDataFailed": "ব্যবহারকারীর ডেটা রপ্তানি করতে ব্যর্থ হয়েছে", "hostsCount_one": "{{count}}টি হোস্ট", "hostsCount_other": "{{count}}টি হোস্ট", - "addHostForUser": "হোস্ট যোগ করুন", - "noHostsForUser": "এই ব্যবহারকারীর কোনো হোস্ট নেই", - "connectToHost": "সংযোগ করুন", - "deleteHostConfirm": "{{username}}-এর হোস্ট \"{{name}}\" মুছে ফেলবেন?", - "hostDeletedSuccess": "হোস্ট মুছে ফেলা হয়েছে", - "hostDeleteFailed": "হোস্ট মুছে ফেলতে ব্যর্থ হয়েছে", "credentialsCount_one": "{{count}}টি ক্রেডেনশিয়াল", "credentialsCount_other": "{{count}}টি ক্রেডেনশিয়াল", - "addCredentialForUser": "ক্রেডেনশিয়াল যোগ করুন", - "noCredentialsForUser": "এই ব্যবহারকারীর কোনো ক্রেডেনশিয়াল নেই", - "deleteCredentialConfirm": "{{username}}-এর ক্রেডেনশিয়াল \"{{name}}\" মুছে ফেলবেন?", - "credentialDeletedSuccess": "ক্রেডেনশিয়াল মুছে ফেলা হয়েছে", - "credentialDeleteFailed": "ক্রেডেনশিয়াল মুছে ফেলতে ব্যর্থ হয়েছে", - "noSessionsForUser": "কোনো সক্রিয় সেশন নেই", - "deleteSuccessorLabel": "হোস্ট এবং ক্রেডেনশিয়াল হস্তান্তর করুন", - "deleteSuccessorMe": "আমি (মুছে ফেলতে থাকা প্রশাসক)", - "deleteSuccessorNone": "কেউ না, মুছে ফেলুন", - "deleteSuccessorDesc": "এই ব্যবহারকারী যারা শেয়ার করেছিল, তারা নতুন মালিকের অধীনে কাজ চালিয়ে যাবে; কেউ না বেছে নিলে তাদের হোস্ট, ক্রেডেনশিয়াল এবং শেয়ার মুছে ফেলা হবে।", - "deleteUserDangerDesc": "{{username}} এবং তাদের সমস্ত ডেটা (হোস্ট, ক্রেডেনশিয়াল, স্নিপেট, ইতিহাস) স্থায়ীভাবে মুছে ফেলুন। এটি পূর্বাবস্থায় ফেরানো যাবে না।", - "deleteUserConfirm": "{{username}} এবং তাদের সমস্ত ডেটা স্থায়ীভাবে মুছে ফেলবেন?", - "deleteUserAdminBlocked": "এই ব্যবহারকারীকে মুছে ফেলার আগে প্রশাসক স্ট্যাটাস সরান।", - "createRoleRequired": "নাম এবং প্রদর্শন নাম আবশ্যক", - "createRoleSuccess": "ভূমিকা \"{{name}}\" তৈরি করা হয়েছে", - "createRoleFailed": "ভূমিকা তৈরি করতে ব্যর্থ হয়েছে", - "apiKeyNameRequired": "কী নাম আবশ্যক", - "apiKeyUserRequired": "ব্যবহারকারী আইডি আবশ্যক", - "apiKeyCreatedSuccess": "API কী \"{{name}}\" তৈরি করা হয়েছে", - "apiKeyCreateFailed": "API কী তৈরি করতে ব্যর্থ হয়েছে", - "exportSuccess": "ডেটাবেস সফলভাবে রপ্তানি করা হয়েছে", - "exportFailed": "ডেটাবেস রপ্তানি ব্যর্থ হয়েছে", - "importSelectFile": "অনুগ্রহ করে প্রথমে একটি ফাইল নির্বাচন করুন", - "importCompleted": "আমদানি সম্পন্ন: {{total}} আইটেম আমদানি করা হয়েছে, {{skipped}} বাদ দেওয়া হয়েছে", - "importFailed": "আমদানি ব্যর্থ: {{error}}", - "importError": "ডেটাবেস আমদানি ব্যর্থ হয়েছে", - "sectionHostDefaults": "হোস্ট ডিফল্ট", "rolePermissions": { "count_one": "{{count}}টি অনুমতি", - "count_other": "{{count}}টি অনুমতি", - "editAction": "অনুমতি সম্পাদনা করুন", - "loadError": "অনুমতি ক্যাটালগ লোড করতে ব্যর্থ হয়েছে", - "saved": "ভূমিকার অনুমতি সংরক্ষিত হয়েছে", - "saveError": "ভূমিকার অনুমতি সংরক্ষণ করতে ব্যর্থ হয়েছে", - "save": "সংরক্ষণ করুন", - "saving": "সংরক্ষণ করা হচ্ছে...", - "pluginDisabled": "প্লাগিন নিষ্ক্রিয়", "groups": { "hosts": "হোস্ট", "credentials": "ক্রেডেনশিয়াল", "admin": "প্রশাসন" } - }, - "notificationPrivateEndpoints": "অনুমোদিত প্রাইভেট নোটিফিকেশন হোস্ট", - "notificationPrivateEndpointsDesc": "নোটিফিকেশন চ্যানেল যোগাযোগ করতে পারে এমন সঠিক প্রাইভেট হোস্ট। সেগুলো কমা দিয়ে আলাদা করুন।", - "updateNotificationEndpointsFailed": "নোটিফিকেশন এন্ডপয়েন্ট অনুমোদন তালিকা আপডেট করতে ব্যর্থ হয়েছে", - "secondFactorsSectionTitle": "দ্বিতীয় ফ্যাক্টর", - "secondFactorsNone": "কোনো দ্বিতীয় ফ্যাক্টর এনরোল করা হয়নি", - "secondFactorUnavailable": "অনুপলব্ধ", - "resetSecondFactors": "দ্বিতীয় ফ্যাক্টর রিসেট করুন", - "resetSecondFactorsConfirm": "{{username}}-এর প্রতিটি দ্বিতীয় ফ্যাক্টর সরানো হবে? তারা তাদের পাসওয়ার্ড বা SSO দিয়ে সাইন ইন করতে পারবে এবং আবার এনরোল করতে পারবে।", - "secondFactorsResetSuccess": "দ্বিতীয় ফ্যাক্টর রিসেট করা হয়েছে", - "secondFactorsResetFailed": "দ্বিতীয় ফ্যাক্টর রিসেট করতে ব্যর্থ হয়েছে", - "passwordLoginForced": "পাসওয়ার্ড লগইন বন্ধ করা হয়েছে, কিন্তু অন্য কোনো লগইন পদ্ধতি সক্রিয় নেই, তাই এটি এখনও চালু থাকবে। কেউ লকআউট হবে না।", - "sslNotRenewed": "এই সার্টিফিকেটটি নবায়ন করবে না। এটি {{date}} তারিখে মেয়াদ শেষ হবে। ACME সার্টিফিকেট বিভাগে স্বয়ংক্রিয় নবায়ন চালু করুন, অথবা তার আগে একটি নতুন সার্টিফিকেট আপলোড করুন।", - "sslSelfSigned": "Termix দ্বারা তৈরি স্ব-স্বাক্ষরিত সার্টিফিকেট। ব্রাউজার এ সম্পর্কে সতর্ক করবে।", - "sslRenewedBy": "{{plugin}} দ্বারা স্বয়ংক্রিয়ভাবে নবায়ন করা হয়েছে", - "sslIssuer": "{{issuer}} দ্বারা ইস্যুকৃত", - "sslNames": "{{names}} কভার করে", - "sslManualTitle": "একটি সার্টিফিকেট আপলোড করুন", - "updateExternalAutoProvisionFailed": "স্বয়ংক্রিয় তৈরি সেটিংস আপডেট করতে ব্যর্থ হয়েছে", - "hostTags": "পূর্বনির্ধারিত হোস্ট ট্যাগ", - "hostTagsDesc": "প্রতিটি ব্যবহারকারী হোস্ট এডিটরে প্রস্তাব হিসেবে যে ট্যাগগুলো দেখেন। একটি ট্যাগ যোগ করতে Space বা Enter চাপুন। এখানে একটি ট্যাগ সরানো হোস্ট থেকে তা সরায় না।", - "hostTagsError": "হোস্ট ট্যাগ প্রস্তাব লোড বা সংরক্ষণ করা যায়নি।", - "revokeAllSessionsConfirm": "{{username}} কে সর্বত্র সাইন আউট করবেন?", - "revokeSessionConfirm": "এই সেশন থেকে সাইন আউট করবেন?", - "revokeSession": "সাইন আউট", - "deleteRoleConfirm": "{{name}} রোলটি মুছে ফেলবেন?", - "revokeKeyConfirm": "API কী {{name}} বাতিল করবেন?", - "revokeKey": "বাতিল করুন" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "কোথায়", - "who": "কে", - "hostLabel": "হোস্ট", - "hostPlaceholder": "192.168.1.1 বা example.com", - "portLabel": "পোর্ট", - "usernameLabel": "ব্যবহারকারীর নাম", - "usernamePlaceholder": "ব্যবহারকারীর নাম", - "authLabel": "প্রমাণীকরণ", - "passwordLabel": "পাসওয়ার্ড", - "passwordPlaceholder": "পাসওয়ার্ড", - "privateKeyLabel": "প্রাইভেট কী", - "privateKeyPlaceholder": "প্রাইভেট কী পেস্ট করুন...", - "credentialLabel": "ক্রেডেনশিয়াল", - "credentialPlaceholder": "একটি সংরক্ষিত ক্রেডেনশিয়াল নির্বাচন করুন", - "protocolLabel": "প্রোটোকল", - "domainLabel": "ডোমেইন", - "domainPlaceholder": "ঐচ্ছিক", - "connectToAction": "{{name}} এ সংযোগ করুন", - "sshProtocol": "SSH", - "noTarget": "এই হোস্ট টাইপের সাথে সংযোগ করতে কিছুই ইনস্টল করা নেই" + "usernameLabel": "ব্যবহারকারীর নাম" }, "keybindings": { - "description": "টার্মিনাল এবং অ্যাপে কীগুলিকে কাজের সাথে বাঁধুন, অথবা বিল্ট-ইন শর্টকাট পরিবর্তন করুন।", - "defaultsHeading": "বিল্ট-ইন শর্টকাট", - "fixedHeading": "অ্যাপ শর্টকাট", - "fixed": { - "splitRight": "ডানদিকে বিভক্ত করুন", - "splitDown": "নিচে বিভক্ত করুন", - "zoomPane": "ফোকাস করা পেন জুম করুন", - "navigatePane": "পেনগুলির মধ্যে চলাচল করুন", - "nextTab": "পরবর্তী ট্যাব", - "previousTab": "পূর্ববর্তী ট্যাব", - "jumpTab": "ট্যাবে যান", - "previousView": "পূর্ববর্তী সাইডবার ভিউতে ফিরে যান", - "fullscreen": "ফুলস্ক্রিন টগল করুন" - }, - "customHeading": "কাস্টম শর্টকাট", - "addBinding": "শর্টকাট যোগ করুন", - "addBindingTitle": "শর্টকাট যোগ করুন", - "editBindingTitle": "শর্টকাট সম্পাদনা করুন", - "loading": "লোড হচ্ছে...", - "noCustomBindings": "এখনো কোনো কাস্টম শর্টকাট নেই", - "defaultBadge": "ডিফল্ট", - "customizedBadge": "কাস্টমাইজড", - "customize": "কাস্টমাইজ করুন", - "resetToDefault": "ডিফল্টে রিসেট করুন", - "resetAllToDefaults": "সব ডিফল্টে রিসেট করুন", - "cancel": "বাতিল করুন", - "saveBinding": "শর্টকাট সেভ করুন", - "saveError": "কীবোর্ড শর্টকাট সেভ করা যায়নি", - "pressKeysToRecord": "কী কম্বিনেশন", - "pressKeysPlaceholder": "ক্লিক করুন এবং কী চাপুন", - "recording": "কী চাপুন...", - "comboRequiredError": "প্রথমে একটি কী কম্বিনেশন চাপুন", - "conflictWarning": "এই কম্বিনেশনটি ইতিমধ্যে {{combo}} এর সাথে যুক্ত। সেভ করলে উভয়ই চালু হবে।", - "actionLabel": "অ্যাকশন", "actionNextTab": "পরবর্তী ট্যাবে যান", "actionPreviousTab": "পূর্ববর্তী ট্যাবে যান", "actionOpenCommandPalette": "দ্রুত অনুসন্ধান খুলুন", - "actionReconnectSession": "বর্তমান সেশন পুনরায় সংযোগ করুন", - "unavailableAction": "{{type}} (উপলব্ধ নয়)", - "actionRequiredError": "প্রথমে একটি অ্যাকশন নির্বাচন করুন", - "deleteConfirm": "এই কীবাইন্ডিং মুছে ফেলবেন?", - "resetAllConfirm": "প্রতিটি কীবাইন্ডিং ডিফল্টে রিসেট করবেন?" + "actionReconnectSession": "বর্তমান সেশন পুনরায় সংযোগ করুন" }, "userProfile": { - "storageModeLocal": "ব্রাউজার", - "storageModeCloud": "ডেটাবেস", - "storageModeDescription": "ব্রাউজার সেটিংস শুধুমাত্র এই ব্রাউজারে সংরক্ষণ করে। ডেটাবেস সার্ভারে সিঙ্ক করে এবং যেকোনো ডিভাইসে লোড হয়।", - "resetToDefaults": "ডিফল্টে রিসেট করুন", - "resetToDefaultsSuccess": "সেটিংস ডিফল্টে রিসেট করা হয়েছে।", - "storageModeSwitch": "পছন্দের সংরক্ষণ", - "sectionAccount": "অ্যাকাউন্ট", - "desktopProfileTitle": "শুধুমাত্র এই ডিভাইসে", - "desktopProfileDescription": "এই প্রোফাইলটি এই ডিভাইসে থাকে এবং নিজেই সাইন ইন করে। প্রতিটি ডিভাইসে একই হোস্ট এবং সেটিংস ব্যবহার করতে এটি একটি Termix সার্ভারের সাথে লিঙ্ক করুন।", - "sectionInterface": "ইন্টারফেস", - "interfacePresetDesc": "Termix কতটা বিস্তারিত দেখায়। প্রতিটি ফিচার উপলব্ধ থাকে।", "preset_simple": "সহজ", "preset_simple_desc": "শুধুমাত্র প্রয়োজনীয় বিষয়।", "preset_balanced": "সামঞ্জস্যপূর্ণ", "preset_balanced_desc": "মানক লেআউট।", "preset_advanced": "উন্নত", "preset_advanced_desc": "সবকিছু চালু, ঘনভাবে সাজানো।", - "presetClearOverrides": "সব রিসেট করুন", - "presetOverridesTitle": "কাস্টমাইজড", - "presetRevertArea": "পূর্বাবস্থায় ফিরুন", - "presetConfirmTitle": "{{preset}} এ সুইচ করবেন?", - "presetConfirmDesc": "এটি আপনার সাইডবার, নেভিগেশন, ড্যাশবোর্ড লেআউট, টার্মিনাল টুলবার এবং ফাইল ম্যানেজার ভিউ রিসেট করে। আপনার হোস্ট, ক্রেডেনশিয়াল এবং হোমপেজ প্রভাবিত হয় না।", - "presetConfirmApply": "প্রিসেট প্রয়োগ করুন", - "runSetupAgainDesc": "প্রথমবারের সেটআপটি আবার সম্পন্ন করুন।", - "runSetupAgainButton": "সেটআপ চালান", "uiArea_chrome": "অ্যাপ ক্রোম", "uiArea_hostList": "হোস্ট তালিকা", "uiArea_credentialList": "ক্রেডেনশিয়াল তালিকা", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "টার্মিনাল", "uiArea_fileManager": "ফাইল ম্যানেজার", "uiArea_hostEditor": "হোস্ট এডিটর", - "sectionAppearance": "চেহারা", - "sectionSecurity": "নিরাপত্তা", - "sectionApiKeys": "API কী", - "sectionData": "ডেটা", - "usernameLabel": "ব্যবহারকারীর নাম", - "roleLabel": "ভূমিকা", - "roleAdministrator": "অ্যাডমিনিস্ট্রেটর", - "authMethodLabel": "অথেন্টিকেশন পদ্ধতি", - "authMethodLocal": "স্থানীয়", - "twoFaLabel": "২এফএ", - "twoFaOn": "চালু", - "twoFaOff": "বন্ধ", - "versionLabel": "সংস্করণ", - "cliTitle": "টার্মিক্স ক্লি", - "cliDescription": "আপনার নিজের শেল থেকে টার্মিনাল খুলুন, কমান্ড চালান এবং ফাইল সরান।", - "cliLearnMore": "আরও জানুন", - "deleteAccount": "অ্যাকাউন্ট মুছুন", - "deleteAccountDescription": "আপনার অ্যাকাউন্ট স্থায়ীভাবে মুছে ফেলুন", - "deleteButton": "মুছুন", - "deleteAccountPermanent": "এই কাজটি স্থায়ী এবং এটি পূর্বাবস্থায় ফেরানো যাবে না।", - "deleteAccountWarning": "সব সেশন, হোস্ট, ক্রেডেনশিয়াল এবং সেটিংস স্থায়ীভাবে মুছে ফেলা হবে।", - "confirmPasswordDeletePlaceholder": "নিশ্চিত করতে আপনার পাসওয়ার্ড লিখুন", "languageLabel": "ভাষা", "themeLabel": "থিম", "fontSizeLabel": "ফন্টের আকার", "interfaceFontLabel": "ইন্টারফেস ফন্ট", "interfaceFontDescription": "অ্যাপ্লিকেশন ইন্টারফেসের ফন্ট পরিবর্তন করে। টার্মিনাল প্রোফাইল তাদের নিজস্ব ফন্ট সেটিংস বজায় রাখে।", "accentColorLabel": "অ্যাকসেন্ট রঙ", - "keyboardShortcuts": "কীবোর্ড শর্টকাট", - "keyboardShortcutsDescription": "টার্মিনাল কপি, পেস্ট এবং কমান্ড শর্টকাট কাস্টমাইজ করুন", - "manageShortcuts": "ব্যবস্থাপনা", - "commandPalette": "কমান্ড প্যালেট", - "commandPaletteDesc": "কীবোর্ড শর্টকাট সক্রিয় করুন", - "reopenTabsOnLogin": "লগইনের সময় ট্যাব পুনরায় খুলুন", - "reopenTabsOnLoginDesc": "আপনি যখন লগইন করেন বা পেজ রিফ্রেশ করেন, এমনকি অন্য ডিভাইস থেকেও, আপনার খোলা ট্যাবগুলো পুনরুদ্ধার করুন", - "confirmTabClose": "ট্যাব বন্ধ নিশ্চিত করুন", - "confirmTabCloseDesc": "টার্মিনাল ট্যাব বন্ধ করার আগে জিজ্ঞাসা করুন", - "showTabNumbers": "ট্যাবের নম্বর দেখান", - "showTabNumbersDesc": "প্রতিটি ট্যাবে একটি নম্বর দেখান যাতে এগুলো আলাদা করা সহজ হয়", - "settingsAppRail": "অ্যাপ রেল", - "sidebarSettingsMoved": "হোস্ট সাইডবারের প্রদর্শন সেটিংস এখন কাস্টমাইজ সাইডবার প্যানেলে সরে গেছে, যা হোস্ট টুলবার থেকে খোলা যায়।", - "showHostTags": "হোস্ট ট্যাগ দেখান", - "showHostTagsDesc": "হোস্ট তালিকায় ট্যাগ দেখান", - "statusColors": "বাস্তব স্ট্যাটাস রঙ", - "statusColorsDesc": "অ্যাকসেন্ট রঙের পরিবর্তে অনলাইন/অফলাইন স্ট্যাটাসের জন্য সবুজ/লাল ব্যবহার করুন", - "pinAppRail": "অ্যাপ রেল পিন করুন", - "pinAppRailDesc": "হোভার করলে প্রসারিত হওয়ার পরিবর্তে বাম সাইডবারের অ্যাপ রেল সবসময় প্রসারিত রাখুন", - "expandAppRailOnHover": "হোভার করলে অ্যাপ রেল প্রসারিত করুন", - "expandAppRailOnHoverDesc": "পয়েন্টার এর উপর দিয়ে চলাচল করলে বাম সাইডবারের অ্যাপ রেল প্রসারিত হতে দিন", - "appRailHoverPushesContent": "বিস্তারিত হলে কন্টেন্ট সরান", - "appRailHoverPushesContentDesc": "পৃষ্ঠার উপরে না খুলে বিস্তৃত রেলের জন্য জায়গা তৈরি করুন। রিমোট ডেস্কটপের মতো খোলা সেশনগুলো প্রতিবার আকার পরিবর্তন করে", - "showPinAppRailButton": "অ্যাপ রেল পিন বাটন দেখান", - "showPinAppRailButtonDesc": "এটি খোলা রাখতে অ্যাপ রেলের মধ্যে একটি বাটন দেখান। ডিফল্টভাবে বন্ধ থাকে।", - "settingsNavigation": "নেভিগেশন", - "navigationTabsDesc": "অ্যাপ রেলের কোন ট্যাবগুলো দেখাবে তা নির্বাচন করুন", - "settingsUpdates": "আপডেট", - "disableUpdateChecks": "আপডেট চেক বন্ধ করুন", - "disableUpdateChecksDesc": "আপডেট খোঁজা বন্ধ করুন", - "changePassword": "পাসওয়ার্ড পরিবর্তন করুন", - "currentPasswordLabel": "বর্তমান পাসওয়ার্ড", - "currentPasswordPlaceholder": "বর্তমান পাসওয়ার্ড", - "newPasswordLabel": "নতুন পাসওয়ার্ড", - "newPasswordPlaceholder": "নতুন পাসওয়ার্ড", - "confirmPasswordLabel": "নতুন পাসওয়ার্ড নিশ্চিত করুন", - "confirmPasswordPlaceholder": "নতুন পাসওয়ার্ড নিশ্চিত করুন", - "updatePassword": "পাসওয়ার্ড আপডেট করুন", - "createApiKeyTitle": "এপিআই কী তৈরি করুন", - "createApiKeyDescription": "প্রোগ্রাম্যাটিক অ্যাক্সেসের জন্য একটি নতুন এপিআই কী তৈরি করুন।", - "apiKeyNameLabel": "নাম", - "apiKeyNamePlaceholder": "যেমন: সিআই পাইপলাইন", - "expiryDateLabel": "মেয়াদ শেষের তারিখ", - "optional": "ঐচ্ছিক", - "cancel": "বাতিল", - "createKey": "কি তৈরি করুন", - "apiKeyCreatedWarning": "কি তৈরি হয়েছে - এখনই কপি করুন, এটি আর দেখানো হবে না।", - "copyApiKey": "API কি কপি করুন", - "copiedToClipboard": "ক্লিপবোর্ডে কপি করা হয়েছে", "apiKeyCount_one": "{{count}}টি কী", - "apiKeyCount_other": "{{count}}টি কী", - "newKey": "নতুন কি", - "noApiKeys": "এখনো কোনো API কি নেই।", - "apiKeyActive": "সক্রিয়", - "apiKeyUsageHint": "আপনার কি অন্তর্ভুক্ত করুন", - "apiKeyUsageHintHeader": "হেডারে।", - "apiKeyPermissionsHint": "কি তৈরি করা ব্যবহারকারীর অনুমতিগুলো উত্তরাধিকার সূত্রে পায়।", - "exportData": "আমার ডেটা রপ্তানি করুন", - "exportDataDesc": "অন্য ডিভাইসে স্থানান্তরের জন্য আপনার হোস্ট, ক্রেডেনশিয়াল এবং সেটিংসের ব্যাকআপ ডাউনলোড করুন", - "export": "রপ্তানি", - "exporting": "রপ্তানি করা হচ্ছে...", - "importData": "আমার ডেটা আমদানি করুন", - "importDataDesc": ".sqlite ব্যাকআপ ফাইল থেকে আপনার হোস্ট, ক্রেডেনশিয়াল এবং সেটিংস পুনরুদ্ধার করুন", - "importDataSelected": "নির্বাচিত: {{name}}", - "selectFile": "ফাইল নির্বাচন করুন", - "changeFile": "পরিবর্তন", - "import": "আমদানি", - "importing": "আমদানি করা হচ্ছে...", - "exportSuccess": "ডেটা সফলভাবে রপ্তানি করা হয়েছে", - "exportFailed": "ডেটা রপ্তানি ব্যর্থ হয়েছে", - "importSelectFile": "অনুগ্রহ করে প্রথমে একটি ফাইল নির্বাচন করুন", - "importCompleted": "আমদানি সম্পন্ন: {{total}} আইটেম আমদানি করা হয়েছে, {{skipped}} বাদ দেওয়া হয়েছে", - "importFailed": "আমদানি ব্যর্থ: {{error}}", - "roleUser": "ব্যবহারকারী", - "authMethodDual": "ডুয়াল অথ", - "authMethodExternal": "বাহ্যিক", - "done": "সম্পন্ন", - "apiKeyNameRequired": "কির নাম আবশ্যক", - "apiKeyCreated": "API কি \"{{name}}\" তৈরি করা হয়েছে", - "apiKeyCreateFailed": "API কি তৈরি করতে ব্যর্থ হয়েছে", - "apiKeyUser": "ব্যবহারকারী", - "apiKeyExpires": "মেয়াদ শেষ", - "apiKeyRevoked": "API কি \"{{name}}\" বাতিল করা হয়েছে", - "apiKeyRevokeFailed": "API কি বাতিল করতে ব্যর্থ হয়েছে", - "passwordFieldsRequired": "বর্তমান এবং নতুন পাসওয়ার্ড আবশ্যক", - "passwordMismatch": "পাসওয়ার্ড মিলছে না", - "passwordTooShort": "পাসওয়ার্ড অন্তত ৬ অক্ষরের হতে হবে", - "passwordUpdated": "পাসওয়ার্ড সফলভাবে আপডেট করা হয়েছে", - "passwordUpdateFailed": "পাসওয়ার্ড আপডেট করতে ব্যর্থ হয়েছে", - "deletePasswordRequired": "আপনার অ্যাকাউন্ট মুছে ফেলতে পাসওয়ার্ড আবশ্যক", - "deleteFailed": "অ্যাকাউন্ট মুছে ফেলতে ব্যর্থ হয়েছে", - "deleting": "মুছে ফেলা হচ্ছে...", "colorPickerTooltip": "কালার পিকার খুলুন", "themeSystem": "সিস্টেম", "themeLight": "লাইট", @@ -1755,18 +1122,7 @@ "themeSolarized": "সোলারাইজড", "themeTokyoNight": "টোকিও নাইট", "themeOneDark": "ওয়ান ডার্ক", - "themeGruvbox": "গ্রুভবক্স", - "linkedProfileTitle": "সাইন ইন করা হয়েছে {{server}} এ", - "linkedProfileDescription": "এই ডিভাইসটি সার্ভারে আপনার অ্যাকাউন্ট ব্যবহার করে এবং আপনার ডেটার একটি কপি রাখে, তাই এটি অফলাইনেও কাজ করে।", - "manageSync": "সিঙ্ক পরিচালনা করুন", - "setUpSync": "একটি সার্ভারের সাথে লিংক করুন", - "settingsTabsAndShortcuts": "ট্যাব এবং শর্টকাট", - "onBetaTitle": "আপনি একটি বিটা ভার্সনে আছেন", - "onBetaDescription": "টেস্ট করার জন্য ধন্যবাদ। আমাদের জানান কী ভেঙে গেছে।", - "tryBetaTitle": "নতুন ফিচার আগেই চেষ্টা করুন", - "tryBetaDescription": "আপডেট থেকে বিটা প্রোগ্রামে যোগ দিন।", - "sendBetaFeedback": "বিটা ফিডব্যাক পাঠান", - "openUpdates": "আপডেট" + "themeGruvbox": "গ্রুভবক্স" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "{{name}} এর প্রয়োজন {{list}} এর। আগে সেগুলো বন্ধ করুন বা আনইনস্টল করুন।", "missingDependencies": "{{name}} এর প্রয়োজন {{list}}, যা ইনস্টল করা নেই।", "consentChanged": "আপনি দেখার পর থেকে এই প্লাগইনটি যা চায় তা পরিবর্তন হয়েছে। তালিকাটি আবার চেক করুন।", - "upload": "{{name}} পড়া যায়নি: {{error}}", - "developerMode": "ডেভেলপার মোড পরিবর্তন করা যায়নি: {{error}}" + "upload": "{{name}} পড়া যায়নি: {{error}}" }, "data": { "title": "সংরক্ষিত ডেটা", @@ -2145,13 +1500,7 @@ "browsePlugins": "প্লাগইন ব্রাউজ করুন", "loading": "লোড হচ্ছে", "developer": { - "title": "প্লাগইন ডেভেলপার মোড", - "hint": "এটি অ্যাডমিনদের রেজিস্ট্রি চেক ছাড়াই প্লাগইন ট্যাব থেকে .tmxplug ফাইল থেকে প্লাগইন ইনস্টল করতে দেয়। এটি ব্যবহার করুন আপনার নিজস্ব প্লাগইন তৈরি এবং পরীক্ষা করার জন্য।", - "enableTitle": "ডেভেলপার মোড চালু করবেন?", - "enableBody": "অ্যাডমিনরা Termix যাচাই করা ফাইল থেকে প্লাগইন ইনস্টল করতে পারবেন। একটি প্লাগইন তার ক্ষমতার অনুমতি অনুযায়ী যেকোনো কিছু করতে পারে, তাই শুধুমাত্র প্লাগইন তৈরি বা পরীক্ষা করার সময় এটি চালু করুন।", - "enable": "চালু করুন", - "installFromFile": "ফাইল থেকে ইনস্টল করুন", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS সেট করা আছে, তাই ফাইল থেকে ইনস্টল করা অবরুদ্ধ থাকবে।" + "installFromFile": "ফাইল থেকে ইনস্টল করুন" }, "count": { "downloads_one": "{{formatted}}টি ডাউনলোড", @@ -2189,71 +1538,7 @@ "secretSet": "সেট করা আছে", "secretNotSet": "সেট করা নেই", "secretReplace": "প্রতিস্থাপন করুন", - "pluginSettingsSaved": "সেটিংস সেভ হয়েছে", - "pluginSettingsInvalid": "কিছু সেটিংস সেভ করা যায়নি। হাইলাইট করা ফিল্ডগুলো পরীক্ষা করুন।", - "pluginSettingsSaveFailed": "সেটিংস সেভ করতে ব্যর্থ হয়েছে", - "pluginSettingsLoadFailed": "সেটিংস লোড করতে ব্যর্থ হয়েছে", - "featureUnavailable": "{{name}} বর্তমানে অপ্রাপ্য। এই সেটিংস সেভ করা হয়েছে কিন্তু কার্যকর হবে না।", - "account": "অ্যাকাউন্ট", - "security": "নিরাপত্তা", - "apiKeys": "API কী", - "data": "ডেটা এবং সিঙ্ক", - "interface": "ইন্টারফেস", - "appearance": "চেহারা", - "keybindings": "কীবাইন্ডিং", - "adminGeneral": "সাধারণ", - "adminUsers": "ব্যবহারকারী", - "adminSessions": "সেশন", - "adminRoles": "ভূমিকা", - "adminHostDefaults": "হোস্ট ডিফল্ট", - "adminBranding": "ব্র্যান্ডিং", - "adminDatabase": "ডেটাবেস", - "adminSsl": "SSL", - "adminApiKeys": "API কী", - "adminAuditLog": "অডিট লগ", - "bandYou": "আপনার অ্যাকাউন্ট", - "bandApp": "এই অ্যাপ", - "bandPlugins": "প্লাগইন", - "bandInstance": "এই সার্ভার", - "searchPlaceholder": "সেটিংস খুঁজুন", - "noResults": "কোনো সেটিংস মিলছে না।", - "pages": "পৃষ্ঠা", - "instanceSettings": "সার্ভার সেটিংস", - "nothingHere": "এখানে সেট করার কিছু নেই।", - "searchPage": "এই পৃষ্ঠা খুঁজুন", - "noPageMatches": "এই পৃষ্ঠায় কিছুই মিলছে না।", - "updates": { - "title": "আপডেট", - "betaProgram": "বেটা প্রোগ্রাম", - "betaIntro": "বেটা হলো পরবর্তী Termix ভার্সনের প্রাথমিক বিল্ড। নতুন কিছু চেষ্টার থাকলে মঙ্গলবার এবং শুক্রবার এগুলো আসে। এগুলোতে বাগ থাকতে পারে, এবং আপনার ফিডব্যাকই স্থিতিশীল রিলিজকে আরও ভালো করে।", - "termixBetas": "Termix বেটা", - "termixBetasHint": "শুধুমাত্র স্থিতিশীল রিলিজ নয়, নতুন বেটার বিষয়েও আমাকে জানান।", - "runningBetaBuild": "আপনি একটি বেটা বিল্ড চালাচ্ছেন। বের হতে, স্থিতিশীল ইমেজ বা ইনস্টলারে ফিরে যান।", - "howToInstall": "বেটা কীভাবে পাবেন", - "desktopInstall": "বেটা ইনস্টলার ডাউনলোড করুন এবং এটির উপর ইনস্টল করুন।", - "downloadBeta": "{{version}} ডাউনলোড করুন", - "dockerInstall": "আপনার ইমেজটি বেটা ট্যাগে পরিবর্তন করুন এবং কন্টেইনারটি রিস্টার্ট করুন:", - "copy": "কপি করুন", - "copied": "কপি হয়েছে", - "copyFailed": "কপি করা যায়নি", - "learnMore": "বেটার বিষয়ে আরও জানুন", - "feedback": "ফিডব্যাক", - "feedbackHint": "কোনো বাগ খুঁজে পেয়েছেন বা কোনো আইডিয়া আছে? এটি সরাসরি ডেভেলপারদের কাছে যাবে, আপনার ভার্সনটি আগে থেকেই পূরণ থাকবে।", - "sendFeedback": "বেটা ফিডব্যাক পাঠান", - "releases": "রিলিজ", - "thisVersion": "এই ভার্সন", - "newestStable": "সর্বশেষ স্থিতিশীল", - "newestBeta": "সর্বশেষ বেটা", - "noRelease": "এখনো কিছু নেই", - "pluginBetas": "প্লাগইন বেটা", - "pluginBetasIntro": "প্রতিটি প্লাগইন নিজের বেটা ব্যবহার করতে পারে। একটি চেষ্টা করতে, এটি খুলুন এবং 'Try beta' চাপুন।", - "openPlugins": "প্লাগইন খুলুন", - "waitingForStable": "স্থিতিশীলে ফিরে এসেছেন। একটি স্থিতিশীল রিলিজ নতুন না হওয়া পর্যন্ত {{version}}-এ থাকবে।", - "backToStable": "স্থিতিশীলে ফিরুন", - "allPluginsBeta": "সব প্লাগইনের জন্য বেটা ব্যবহার করুন", - "allPluginsStable": "সব প্লাগইন স্থিতিশীলে ফিরিয়ে আনুন", - "saveFailed": "পরিবর্তনটি সংরক্ষণ করা যায়নি" - } + "featureUnavailable": "{{name}} বর্তমানে অপ্রাপ্য। এই সেটিংস সেভ করা হয়েছে কিন্তু কার্যকর হবে না।" }, "managerCard": { "refresh": "রিফ্রেশ", @@ -2263,83 +1548,13 @@ "filter": "ফিল্টার..." }, "sync": { - "server": "Termix সার্ভার", - "account": "অ্যাকাউন্ট", - "status": "স্ট্যাটাস", - "never": "কখনোই নয়", - "justNow": "এইমাত্র", "minutesAgo_one": "{{count}} মিনিট আগে", "minutesAgo_other": "{{count}} মিনিট আগে", "hoursAgo_one": "{{count}} ঘণ্টা আগে", "hoursAgo_other": "{{count}} ঘণ্টা আগে", - "actionFailed": "এটি কাজ করেনি। আবার চেষ্টা করুন।", - "unlinkedTitle": "শুধুমাত্র এই ডিভাইসে", - "unlinkedBody": "Termix এই ডিভাইসে স্বাধীনভাবে কাজ করে। সবকিছু সমন্বিত রাখতে এটিকে আপনার Termix সার্ভারের সাথে লিংক করুন।", - "unlinkedPointHosts": "আপনার হোস্ট, ক্রেডেনশিয়াল, স্নিপেট এবং সেটিংস সব ডিভাইসে আপনার সাথে চলে।", - "unlinkedPointOffline": "সার্ভার অ্যাক্সেসযোগ্য না থাকলেও সবকিছু কাজ করে এবং পরে আপডেট হয়।", - "unlinkedPointAccount": "আপনি আপনার সার্ভার অ্যাকাউন্ট দিয়ে সাইন ইন করেন, এবং অন্যরা আপনার সাথে শেয়ার করা হোস্টগুলোও এখানে দেখা যায়।", - "linkButton": "একটি সার্ভারের সাথে লিংক করুন", - "state": { - "syncing": "সিঙ্ক হচ্ছে", - "offline": "সার্ভার অ্যাক্সেসযোগ্য নয়", - "error": "সিঙ্ক বন্ধ হয়েছে", - "signedOut": "সাইন আউট হয়েছে", - "synced": "{{time}}-এ সিঙ্ক হয়েছে" - }, "pending_one": "{{count}} পরিবর্তন সিঙ্ক হওয়ার অপেক্ষায়", "pending_other": "{{count}} পরিবর্তন সিঙ্ক হওয়ার অপেক্ষায়", - "signInAgain": "আবার সাইন ইন করুন", - "syncNow": "এখনই সিঙ্ক করুন", - "unlink": "আনলিংক করুন", - "unlinked": "এই ডিভাইসটি আর লিংক করা নেই", - "unlinkTitle": "এই ডিভাইসটি আনলিঙ্ক করবেন?", - "unlinkDescription": "এটি সিঙ্কিং বন্ধ করে এবং সার্ভার থেকে সাইন আউট করে। অন্যরা আপনার সাথে যারা হোস্ট শেয়ার করেছে, তারা যেকোনোভাবেই এই ডিভাইস থেকে সরানো হবে।", - "unlinkKeepTitle": "আমার ডেটা এখানে রাখুন", - "unlinkKeepBody": "আপনার হোস্ট, ক্রেডেনশিয়াল এবং সেটিংস এই ডিভাইসে থেকে যাবে এবং স্বাধীনভাবে কাজ চালিয়ে যাবে।", - "unlinkRemoveTitle": "সিঙ্ক করা ডেটা মুছুন", - "unlinkRemoveBody": "সার্ভার থেকে আসা সবকিছু এই ডিভাইস থেকে সরানো হবে। শুধুমাত্র এই ডিভাইসে রাখা হোস্টগুলোই থেকে যাবে।", - "conflictsTitle": "সংঘাত", - "conflictsDescription": "এগুলো একই সাথে এখানে এবং সার্ভারে পরিবর্তন করা হয়েছিল। সার্ভারের সংস্করণটি ব্যবহার করা হচ্ছে। পরিবর্তে এটি সার্ভারে পাঠাতে আপনার সংস্করণটি রাখুন।", - "keepMine": "আমারটি রাখুন", - "keepServer": "সার্ভারেরটি রাখুন", - "errorsTitle": "সিঙ্ক হয়নি", - "errorsDescription": "সার্ভার এই পরিবর্তনগুলো গ্রহণ করেনি। এগুলো এই ডিভাইসেই থেকে যাবে।", - "errorPermission": "সার্ভারে আপনার অ্যাকাউন্ট এই পরিবর্তনটি করতে অনুমতি পায়নি।", - "retry": "আবার চেষ্টা করুন", - "whatSyncs": "কী সিঙ্ক হয়", - "whatSyncsDescription": "যে কিছু শুধুমাত্র এই ডিভাইসে রাখতে চান, তা বন্ধ করুন।", - "coreGroup": "Termix", - "notOnServer": "সার্ভারে এটি নেই", - "notOnDevice": "এই ডিভাইসে এখনো নেই", - "localOnlyHint": "আপনি তাদের সেটিংস থেকে একক হোস্ট বা ফোল্ডারও এই ডিভাইসে রাখতে পারেন।", - "originTitle": "কানেকশন কোথা থেকে শুরু হয়", - "originDescription": "এই ডিভাইস থেকে বা সার্ভারের মাধ্যমে হোস্টগুলোর সাথে কানেক্ট করুন। আপনি প্রতিটি হোস্টের জন্য এটি পরিবর্তন করতে পারেন।", - "originLocal": "এই ডিভাইস", - "originRemote": "সার্ভার", - "entities": { - "hosts": "হোস্ট", - "sshCredentials": "ক্রেডেনশিয়াল", - "sshFolders": "ফোল্ডার", - "userPreferences": "পছন্দ", - "pluginUserSettings": "প্লাগইন সেটিংস", - "sharedHosts": "আপনার সাথে শেয়ার করা হোস্ট", - "sharedCredentials": "আপনার সাথে শেয়ার করা ক্রেডেনশিয়াল", - "vaultProfiles": "Vault প্রোফাইল", - "snippetFolders": "স্নিপেট ফোল্ডার", - "snippets": "স্নিপেট", - "dashboardServiceLinks": "সার্ভিস লিঙ্ক", - "homepageItems": "হোমপেজ আইটেম", - "networkTopology": "নেটওয়ার্ক ম্যাপ", - "workspaces": "ওয়ার্কস্পেস", - "hostDefaults": "হোস্ট ডিফল্ট", - "hostDefaultsAdmin": "সার্ভার হোস্ট ডিফল্ট", - "aiProviders": "AI প্রোভাইডার", - "homepageLayouts": "হোমপেজ লেআউট", - "accountProfile": "অ্যাকাউন্ট প্রোফাইল" - }, "proxy": { - "title": "রিভার্স প্রক্সি", - "description": "শুধুমাত্র তখন প্রয়োজন যখন Cloudflare Access বা একটি লগইন পেজের মতো কিছু আপনার সার্ভারের সামনে থাকে।", "headersTitle": "অতিরিক্ত হেডার", "headersHint": "সার্ভারে প্রতিটি অনুরোধের সাথে পাঠানো হয়, যেমন একটি Cloudflare Access সার্ভিস টোকেন।", "headerName": "হেডারের নাম", @@ -2352,8 +1567,7 @@ "username": "ইউজারনেম", "password": "পাসওয়ার্ড", "allowInvalidCertificate": "সেলফ-সাইনড সার্টিফিকেটকে বিশ্বাস করুন", - "allowInvalidCertificateHint": "শুধুমাত্র আপনার নিজস্ব সার্ভারের জন্য, যখন এর সার্টিফিকেট কোনো পরিচিত কর্তৃপক্ষ থেকে না আসে।", - "saved": "সংরক্ষিত" + "allowInvalidCertificateHint": "শুধুমাত্র আপনার নিজস্ব সার্ভারের জন্য, যখন এর সার্টিফিকেট কোনো পরিচিত কর্তৃপক্ষ থেকে না আসে।" }, "problems": { "invalidUrl": "এটি একটি ওয়েব ঠিকানার মতো দেখাচ্ছে না।", @@ -2391,6 +1605,27 @@ "linking": "লিংক করা হচ্ছে এবং প্রথম সিঙ্ক চালানো হচ্ছে...", "linked": "লিংক করা হয়েছে। আপনার ডেটা এখন সিঙ্ক হচ্ছে।", "signedInAgain": "সাইন ইন করা হয়েছে। সিঙ্ক আবার চলছে।" + }, + "entities": { + "hosts": "হোস্ট", + "sshCredentials": "ক্রেডেনশিয়াল", + "sshFolders": "ফোল্ডার", + "userPreferences": "পছন্দ", + "pluginUserSettings": "প্লাগইন সেটিংস", + "sharedHosts": "আপনার সাথে শেয়ার করা হোস্ট", + "sharedCredentials": "আপনার সাথে শেয়ার করা ক্রেডেনশিয়াল", + "vaultProfiles": "Vault প্রোফাইল", + "snippetFolders": "স্নিপেট ফোল্ডার", + "snippets": "স্নিপেট", + "dashboardServiceLinks": "সার্ভিস লিঙ্ক", + "homepageItems": "হোমপেজ আইটেম", + "networkTopology": "নেটওয়ার্ক ম্যাপ", + "workspaces": "ওয়ার্কস্পেস", + "hostDefaults": "হোস্ট ডিফল্ট", + "hostDefaultsAdmin": "সার্ভার হোস্ট ডিফল্ট", + "aiProviders": "AI প্রোভাইডার", + "homepageLayouts": "হোমপেজ লেআউট", + "accountProfile": "অ্যাকাউন্ট প্রোফাইল" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "এই হোস্টটি নিজস্ব মান সেট করে। {{source}} থেকে ডিফল্ট মান ব্যবহার করতে ক্লিক করুন", "clearTitle": "এই স্তরে সেট করা হয়েছে। এটি মুছে {{source}} ব্যবহার করতে ক্লিক করুন", "inheritedTitle": "{{source}} থেকে ডিফল্ট মান অনুসরণ করে", - "titleAdmin": "সার্ভার হোস্ট ডিফল্ট সেটিংস", - "titleUser": "আমার হোস্ট ডিফল্ট সেটিংস", - "titleFolder": "ফোল্ডার ডিফল্ট সেটিংস: {{name}}", - "descriptionAdmin": "এই সার্ভারের প্রতিটি হোস্টের জন্য ডিফল্ট সেটিংস। ব্যবহারকারীর নিজস্ব ডিফল্ট, ফোল্ডারের ডিফল্ট বা হোস্ট নিজেই ভিন্ন মান সেট করতে পারে। এখানে সেট করতে কোনো ফিল্ড পরিবর্তন করুন, অথবা সেট না রাখতে মুছে ফেলুন।", - "descriptionUser": "সার্ভারের উপরে আপনার সকল হোস্টের জন্য ডিফল্ট সেটিংস। ফোল্ডার বা হোস্ট নিজেই ভিন্ন মান সেট করতে পারে। এখানে সেট করতে কোনো ফিল্ড পরিবর্তন করুন, অথবা সেট না রাখতে মুছে ফেলুন।", - "descriptionFolder": "এই ফোল্ডার এবং এর সাবফোল্ডারের হোস্টগুলোর জন্য ডিফল্ট সেটিংস, আপনার নিজস্ব সেটিংসের উপরে। হোস্ট নিজেই ভিন্ন মান সেট করতে পারে। এখানে সেট করতে কোনো ফিল্ড পরিবর্তন করুন, অথবা সেট না রাখতে মুছে ফেলুন।", - "save": "ডিফল্ট সেটিংস সংরক্ষণ করুন", "saved_one": "ডিফল্ট সেটিংস সংরক্ষণ করা হয়েছে। {{count}}টি হোস্ট আপডেট করা হয়েছে।", "saved_other": "ডিফল্ট সেটিংস সংরক্ষণ করা হয়েছে। {{count}}টি হোস্ট আপডেট করা হয়েছে।", - "savedInBackground": "ডিফল্ট সেটিংস সংরক্ষণ করা হয়েছে। হোস্টগুলো ব্যাকগ্রাউন্ডে আপডেট হচ্ছে।", "appliedToHosts_one": "নতুন ডিফল্ট সেটিংস দিয়ে {{count}}টি হোস্ট আপডেট করা হয়েছে।", "appliedToHosts_other": "নতুন ডিফল্ট সেটিংস দিয়ে {{count}}টি হোস্ট আপডেট করা হয়েছে।", - "saveFailed": "ডিফল্ট সেটিংস সংরক্ষণ করা যায়নি", - "loadFailed": "ডিফল্ট সেটিংস লোড করা যায়নি", - "confirmTitle": "ডিফল্ট সেটিংস সংরক্ষণ করবেন?", "confirmChanges_one": "{{count}}টি হোস্ট এই ডিফল্ট সেটিংস অনুসরণ করে এবং পরিবর্তিত হবে।", "confirmChanges_other": "{{count}}টি হোস্ট এই ডিফল্ট সেটিংস অনুসরণ করে এবং পরিবর্তিত হবে।", - "confirmNoChanges": "কোনো বিদ্যমান হোস্ট পরিবর্তিত হবে না। নতুন হোস্টগুলো এই ডিফল্ট সেটিংস দিয়ে শুরু হবে।", - "menuMyDefaults": "আমার হোস্ট ডিফল্ট সেটিংস", - "folderDefaultsAction": "ফোল্ডার ডিফল্ট সেটিংস", - "adminSectionDescription": "এই সার্ভারের প্রতিটি হোস্ট অনুসরণ করবে এমন ডিফল্ট সেটিংস সেট করুন, হোস্টের প্রতিটি সেটিংসের জন্য, প্রতিটি প্লাগইনের সেটিংস সহ। ব্যবহারকারী এবং ফোল্ডার তাদের নিজস্ব সেটিংস উপরে সেট করতে পারে, এবং যেকোনো হোস্ট তার নিজস্ব মান ব্যবহার করতে পারে।", - "editServerDefaults": "সার্ভার ডিফল্ট সেটিংস সম্পাদনা করুন", - "resetMenu": "রিসেট", - "resetAll": "সবকিছু ডিফল্টে ফিরিয়ে আনুন", - "resetCore": "কানেকশন এবং SSH ডিফল্টে ফিরিয়ে আনুন", "resetDone_one": "{{count}} হোস্ট এখন তার ডিফল্ট মান অনুসরণ করছে।", "resetDone_other": "{{count}} হোস্ট এখন তাদের ডিফল্ট মান অনুসরণ করছে।" }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "সংরক্ষিত হয়েছে। এটি প্রতিস্থাপন করতে টাইপ করুন।" }, - "sharing": { - "revokeConfirm": "{{name}} এর অ্যাক্সেস সরিয়ে ফেলবেন?", - "revoke": "অ্যাক্সেস সরান" - }, "manage": { - "searchSettings": "সেটিংস খুঁজুন", - "noMatchingSettings": "কোনো সেটিংস মিলছে না।", - "sections": "সেকশন", - "sectionNeedsAttention": "এখানে কিছু একটা মনোযোগ চাইছে", "needsAttention_one": "একটি বিষয় মনোযোগ চাইছে।", "needsAttention_other": "{{count}}টি বিষয় মনোযোগ চাইছে।", - "bandHost": "হোস্ট", - "bandFeatures": "প্রোটোকল এবং প্লাগইন", - "bandCredential": "ক্রেডেনশিয়াল", - "sshConnection": "SSH কানেকশন", - "errorAddressRequired": "একটি ঠিকানা প্রয়োজন।", - "errorPortRange": "১ থেকে ৬৫৫৩৫ এর মধ্যে একটি পোর্ট ব্যবহার করুন।", - "defaults": "ডিফল্ট", - "searchHosts": "হোস্ট খুঁজুন", - "searchCredentials": "ক্রেডেনশিয়াল খুঁজুন", - "searchDefaults": "ডিফল্ট খুঁজুন", - "addCredential": "ক্রেডেনশিয়াল যোগ করুন", - "nothingMatches": "কিছুই মিলছে না", - "nothingYet": "এখনো এখানে কিছু নেই", - "emptyHostsHint": "একটি হোস্ট যোগ করুন এবং এটি আপনার নির্দিষ্ট ফোল্ডারে এখানে দেখা যাবে।", - "emptyCredentialsHint": "আপনার সংরক্ষিত ক্রেডেনশিয়াল যেকোনো হোস্ট দ্বারা পুনরায় ব্যবহার করা যেতে পারে।", - "collapse": "সংকুচিত করুন", - "expand": "প্রসারিত করুন", - "cannotBeUndone": "এটি পূর্বাবস্থায় ফেরানো যাবে না।", - "hostNotFound": "হোস্টটি খুঁজে পাওয়া যায়নি। তালিকাটি রিফ্রেশ করার চেষ্টা করুন।", "hostCount_one": "{{count}} হোস্ট", "hostCount_other": "{{count}} হোস্ট", "credentialCount_one": "{{count}} ক্রেডেনশিয়াল", - "credentialCount_other": "{{count}} ক্রেডেনশিয়াল", - "newHost": "নতুন হোস্ট", - "newCredential": "নতুন ক্রেডেনশিয়াল", - "advanced": "অ্যাডভান্সড", - "pickHost": "সম্পাদনা করতে একটি হোস্ট নির্বাচন করুন", - "pickCredential": "সম্পাদনা করতে একটি ক্রেডেনশিয়াল নির্বাচন করুন", - "pickDefaults": "সম্পাদনা করতে ডিফল্টের একটি স্তর নির্বাচন করুন", - "pickHint": "কানেকশনের সবকিছু এখানেই থাকে, যাতে আপনি সহজে খুঁজে পান সেভাবে গোছানো আছে।" + "credentialCount_other": "{{count}} ক্রেডেনশিয়াল" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/ca_ES.json b/src/ui/locales/translated/ca_ES.json index e5ff18913..b5a1cf9de 100644 --- a/src/ui/locales/translated/ca_ES.json +++ b/src/ui/locales/translated/ca_ES.json @@ -141,7 +141,6 @@ "continue": "Continua", "error": "Error", "unsavedChanges": "Canvis no desats", - "more": "Més", "loading": "S'està carregant...", "host": "Amfitrió", "selectHost": "Selecciona un amfitrió...", @@ -154,7 +153,6 @@ "cancel": "Cancel·la", "username": "Nom d'usuari", "login": "Inicia sessió", - "logout": "Tanca sessió", "register": "Registra't", "password": "Contrasenya", "confirmPassword": "Confirma la contrasenya", @@ -165,8 +163,6 @@ "rename": "Canvia el nom", "edit": "Edita", "confirm": "Confirma", - "next": "Següent", - "previous": "Anterior", "refresh": "Actualitza", "language": "Idioma", "backendReconnected": "Connexió al servidor restaurada", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Llegeix sobre cadascun" }, "desktopUpdates": { - "title": "Aplicació d'escriptori", - "mode": "Actualitzacions", - "modeHint": "Com obté aquesta aplicació les noves versions.", - "manualModeHint": "Aquesta còpia no es pot actualitzar sola, per la qual cosa Termix només t'informa quan hi ha una nova versió disponible.", "modeAutomatic": "Automàtic", "modePrompt": "Pregunta primer", "modeNever": "Mai", @@ -247,15 +239,6 @@ "onboardingTitle": "Actualitzacions de l'aplicació", "onboardingBody": "L'aplicació d'escriptori ara es pot actualitzar sola. Tria com vols que arribin les noves versions. Pots canviar-ho més endavant a Configuració, Actualitzacions.", "onboardingManual": "Aquesta còpia de l'aplicació s'ha instal·lat d'una manera que no es pot actualitzar sola, per la qual cosa Termix t'informarà quan hi hagi una nova versió disponible amb un enllaç per descarregar-la.", - "status": "Versió {{version}}", - "statusIdle": "Encara no s'ha comprovat", - "statusChecking": "Comprovant si hi ha actualitzacions", - "statusAvailable": "Hi ha disponible la versió {{version}}", - "statusDownloading": "Descarregant {{version}} ({{progress}}%)", - "statusReady": "La versió {{version}} està llesta. Reinicia per instal·lar-la.", - "statusUpToDate": "Tens l'última versió", - "statusError": "No s'ha pogut comprovar si hi ha actualitzacions. Torna-ho a provar més tard.", - "checkNow": "Comprova ara", "download": "Descarrega", "restart": "Reinicia ara", "later": "Més tard", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Tanca", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Copia la contrasenya", - "copySudoPassword": "Copia la contrasenya de sudo", - "passwordCopied": "Contrasenya copiada al porta-retalls", - "failedToCopyPassword": "No s'ha pogut copiar la contrasenya", - "refreshTab": "Refresca la connexió", - "renameTab": "Canvia el nom de la pestanya", "dashboard": "Tauler de control", "quickConnect": "Connexió ràpida", - "openAsTabHint": "Ctrl+clic o clic central per obrir com a pestanya", - "openAsTab": "Obre com a pestanya", - "openInRightDock": "Obre al panell dret", - "closeRightDock": "Tanca el panell dret", - "toggleRightDock": "Alterna el panell dret", "hosts": "Amfitrions", "credentials": "Credencials", "connections": "Connexions", - "keepSideMenuOpen": "Mantenir el menú obert", - "collapseSideMenu": "Replegar el menú", - "roleAdministrator": "Administrador", - "roleUser": "Usuari", "sync": "Sincronitzar", "reconnectDisconnectedTerminals": "Tornar a connectar tots els terminals desconnectats", "reconnectingTerminals_one": "Tornant a connectar {{count}} terminal", @@ -300,31 +268,12 @@ "reconnectTerminalsFailed_other": "No s'ha pogut iniciar la reconexió de {{count}} terminals", "fullscreenUnsupported": "Aquest navegador no admet la pantalla completa", "fullscreenFailed": "No s'ha pogut alternar la pantalla completa", - "resetSidebarWidth": "Restablir l'amplada", - "collapseSidebar": "Replegar la barra lateral", - "openSidebar": "Obrir la barra lateral", "confirmCloseHost": "Tancar {{host}}?", - "enterFullscreen": "Entrar en pantalla completa (Ctrl+Shift+F)", - "exitFullscreen": "Sortir de la pantalla completa (Ctrl+Shift+F)", - "group": { - "objects": "Teves", - "tools": "Eines", - "system": "Sistema" - }, - "searchEverything": "Cercar amfitrions, pestanyes i accions", - "search": "Cercar", "hiddenCount_one": "{{count}} amagat", "hiddenCount_many": "{{count}} amagats", "hiddenCount_other": "{{count}} amagats", - "showInRail": "Mostrar a la barra lateral", - "moveUp": "Moure amunt", - "moveDown": "Moure avall", - "resetRailOrder": "Restablir l'ordre", - "hideFromRail": "Ocultar de la barra lateral", - "openSettings": "Obrir la configuració", "settings": "Configuració", "manage": "Gestionar", - "mobileNavigation": "Navegació", "plugins": "Complements" }, "hosts": { @@ -930,35 +879,14 @@ "importSummary": "Importació completada: {{imported}} importats, {{updated}} actualitzats, {{failed}} fallits", "importHostsFailed": "No s'han pogut importar els hosts" }, - "commandPalette": { - "searchPlaceholder": "Cercar hosts, ordres o configuracions...", - "quickActions": "Accions ràpides", - "navigation": "Navegació", - "orShortcut": "o", - "addNewHost": "Afegeix un nou host", - "adminSettings": "Configuració d'administrador", - "addCredential": "Afegeix credencials", - "recentActivity": "Activitat recent", - "serversAndHosts": "Servidors i hosts", - "noHostsFound": "No s'han trobat hosts que coincideixin amb «{{search}}»", - "links": "Enllaços", - "navigate": "Navega", - "select": "Selecciona", - "pluginActions": "Més accions", - "noTargetTab": "No hi ha cap pestanya de terminal oberta", - "documentation": "Documentació" - }, "splitScreen": { "title": "Pantalla dividida", "defaultLabel": "Divisió {{number}}", "splitRight": "Divideix a la dreta", "splitDown": "Divideix cap avall", - "addToSplit": "Afegeix a {{split}}", "paneEmptyItem": "Panell {{index}}: buit", "paneItem": "Panell {{index}}: {{label}}", "paneNumber": "Panell {{index}}", - "newPaneRight": "Panell nou a la dreta", - "newPaneBelow": "Panell nou a sota", "emptyTitle": "Panell buit", "emptyHint": "Tria què mostrar aquí. Mentre aquest panell està seleccionat, tot el que obris des de la barra lateral també s'obrirà aquí.", "openTabs": "Pestanyes obertes", @@ -975,7 +903,6 @@ "clearPane": "Buida aquest panell", "zoom": "Amplia el panell", "unzoom": "Restaura la disposició", - "unsplit": "Suprimeix la divisió", "layouts": "Disposicions", "applyLayout": "Canvia la disposició", "maxPanes_one": "Una divisió pot contenir fins a {{count}} panell", @@ -985,8 +912,6 @@ "dropHere": "Deixa anar per mostrar aquí", "paneActions": "Accions del panell", "dividerHint": "Arrossega per canviar la mida. Fes doble clic per igualar-los.", - "openInSplit": "Obre en una divisió", - "openInNewSplit": "Divisió nova amb la pestanya actual", "shortcuts": "Dreceres", "shortcutNavigate": "Desplaça't entre panells", "presets": { @@ -1000,23 +925,6 @@ "grid6": "Graella de sis" } }, - "connections": { - "noConnections": "Cap connexió", - "noConnectionsDesc": "Obre un terminal, un gestor de fitxers o un escriptori remot per veure les connexions aquí", - "connectedFor": "Connectat durant {{duration}}", - "connected": "Connectat", - "disconnected": "Desconnectat", - "reconnect": "Torna a connectar", - "sectionOpen": "Obert", - "sectionBackground": "Segon pla", - "backgroundDesc": "Les sessions es mantenen actives durant {{minutes}} minuts després de la desconnexió i es poden tornar a connectar.", - "expiresIn": "Caduca en {{duration}}", - "search": "Cerca connexions...", - "noSearchResults": "Cap connexió no coincideix amb la cerca", - "rename": "Canvia el nom de la sessió", - "forgetConfirm": "Vols finalitzar la sessió en segon pla de {{name}}?", - "forget": "Finalitza la sessió" - }, "sshAuth": { "totpRequired": "S'requereix autenticació de dos factors", "totpCodeLabel": "Codi de verificació", @@ -1154,65 +1062,14 @@ "placeholders": { "keyPassword": "contrasenya de la clau", "pastePrivateKey": "Enganxa la teva clau privada aquí...", - "enterPassword": "Introdueix la teva contrasenya", - "apiKeyName": "p. ex., Pipeline CI", - "credentialName": "p. ex., Clau SSH de Producció", - "optionalDetails": "Detalls opcionals...", - "sshUsername": "p. ex., root o deploy", - "hostAddress": "10.0.0.1 o example.com", - "hostName": "p. ex., Servidor Web de Producció" + "enterPassword": "Introdueix la teva contrasenya" }, "dashboard": { - "title": "Tauler de control", - "github": "GitHub", - "reportBug": "Informar d'un error", - "discord": "Discord", - "docs": "Documentació", - "donate": "Donar", - "serverOverview": "Vista general del servidor", - "version": "Versió", "updateAvailable": "Actualització disponible", - "beta": "Beta", - "uptime": "Temps de funcionament", - "database": "Base de dades", - "healthy": "Sa", - "error": "Error", - "totalHosts": "Total de servidors", - "totalCredentials": "Total de credencials", - "recentActivity": "Activitat recent", - "reset": "Restablir", - "noRecentActivity": "Cap activitat recent", - "quickActions": "Accions ràpides", - "addHost": "Afegir servidor", - "addCredential": "Afegir credencial", - "adminSettings": "Configuració d'administrador", - "userProfile": "Perfil d'usuari", - "serverStats": "Estadístiques del servidor", - "customizeLayout": "Personalitzar el tauler de control", - "justNow": "ara mateix" + "beta": "Beta" }, "dashboardTab": { "stable": "ESTABLE", - "registerNewServer": "Registra un nou servidor", - "storeSshKeysOrPasswords": "Emmagatzema claus SSH o contrasenyes", - "manageUsersAndRoles": "Gestiona usuaris i rols", - "manageYourAccount": "Gestiona el teu compte", - "hostStatus": "Estat del servidor", - "noHostsConfigured": "Cap servidor configurat", - "checking": "VERIFICANT", - "commandPalette": "Paleta de comandes", - "done": "Fet", - "clear": "Esborra", - "dragToResizeColumns": "Arrossega per canviar la mida de les columnes", - "hostsAvailable": "Hosts disponibles", - "removeSection": "Elimina la secció", - "addSection": "Afegeix una secció", - "allSectionsShown": "Tot ja es mostra al tauler.", - "fromPlugins": "Dels connectors", - "dropHere": "Deixa anar una secció aquí", - "dragToReorder": "Arrossega les seccions per reordenar-les", - "clearActivityConfirm": "Vols esborrar l'activitat recent?", - "resetConfirm": "Vols restablir el tauler al disseny predeterminat?", "onlineCount_one": "{{count}} en línia", "onlineCount_many": "{{count}} en línia", "onlineCount_other": "{{count}} en línia", @@ -1221,425 +1078,48 @@ "hostCount_other": "{{count}} hosts" }, "admin": { - "sectionGeneral": "General", - "sectionUsers": "Usuaris", - "sectionSessions": "Sessions", - "sectionRoles": "Rols", - "sectionDatabase": "Base de dades", - "sectionApiKeys": "Claus API", - "sectionAuditLog": "Registre d'auditoria", - "sectionSsl": "Certificat HTTPS", - "sectionBranding": "Marca blanca", - "brandingAppName": "Nom de l'aplicació", - "brandingAppNameDesc": "Es mostra a la pantalla d'inici de sessió i a la pestanya del navegador. Deixa-ho buit per utilitzar «Termix».", - "brandingTagline": "Lema", - "brandingTaglineDesc": "Es mostra sota el nom de l'aplicació a la pantalla d'inici de sessió. Deixa-ho buit per utilitzar el lema predeterminat.", - "brandingLogo": "Logotip", - "brandingLogoDesc": "PNG, JPEG o WEBP, fins a 750 KB. Substitueix la icona predeterminada a la pantalla d'inici de sessió i a la pestanya del navegador.", - "brandingLogoUpload": "Pujar el logotip", - "brandingLogoReset": "Restablir al valor predeterminat", - "brandingLogoInvalid": "Imatge no vàlida. Utilitza un fitxer PNG, JPEG o WEBP de fins a 750 KB.", - "brandingSaved": "Configuració de la marca desada", - "brandingSaveFailed": "No s'ha pogut desar la configuració de la marca", - "sslDescription": "El certificat que Termix serveix a través d'HTTPS. Pujau el vostre propi aquí o obteneu-ne i renoveu-ne un de Let's Encrypt a la secció de certificats ACME.", - "sslDocsLink": "Veure la documentació d'SSL", - "sslCertStatus": "Estat del certificat", - "sslCertStatusNone": "Sense certificat", - "sslCertStatusValid": "Vàlid", - "sslCertStatusExpiring": "Caduca aviat", - "sslCertStatusExpired": "Caducat", - "sslCertExpiresAt": "Caduca el {{date}}", - "sslInfoNote": "Un cop emès o pujat un certificat, Termix activarà automàticament HTTPS al port SSL_PORT (per defecte 8443) a més del port HTTP existent. Assegureu-vos que aquest port està publicat o mapejat a aquest contenidor perquè sigui accessible.", - "sslManualCert": "Certificat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Clau privada (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Enganxeu el vostre certificat i clau privada existents, inclosa la cadena completa si ho requereix la vostra CA.", - "sslManualUpload": "Pujar i instal·lar el certificat", - "sslManualUploadLoading": "Pujant el certificat...", - "sslManualUploadSuccess": "Certificat pujat i instal·lat correctament", - "sslManualUploadFailed": "Ha fallat la pujada del certificat", - "sslManualRequiresFields": "El certificat i la clau privada són obligatoris", - "auditLogTotal": "{{total}} entrades en total", - "auditLogEmpty": "No s'han trobat entrades al registre d'auditoria", - "auditLogSuccess": "Èxit", - "auditLogFailed": "Ha fallat", - "auditLogClearFilters": "Esborra els filtres", - "auditLogPage": "Pàgina {{page}} de {{totalPages}} ({{total}} en total)", - "auditLogIp": "IP", - "auditLogResourceId": "ID del recurs", - "auditLogFilterUser": "Usuari", - "auditLogFilterAction": "Acció", - "auditLogFilterResourceType": "Tipus de recurs", - "auditLogFilterStatus": "Estat", - "auditLogFilterFrom": "Des de", - "auditLogFilterTo": "Fins a", - "auditLogFilterAll": "Tots", - "allowRegistration": "Permetre el registre d'usuaris", - "allowRegistrationDesc": "Permetre que els nous usuaris es registrin ells mateixos amb un nom d'usuari i una contrasenya", - "allowPasswordLogin": "Permetre l'inici de sessió amb contrasenya", - "allowPasswordLoginDesc": "Inici de sessió amb nom d'usuari i contrasenya", - "externalAutoProvision": "Crear comptes externs automàticament", - "externalAutoProvisionDesc": "Crear un compte la primera vegada que algú s'hi connecta a través d'un inici de sessió extern com SSO o LDAP. Si està desactivat, només les persones que ja tenen un compte poden iniciar sessió d'aquesta manera", - "secondFactorAfterExternalLogin": "Sol·licitar un segon factor després d'inicis de sessió externs (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Si està desactivat, només es demana un segon factor registrat després d'inicis de sessió amb contrasenya i altres inicis de sessió locals, com abans. Si està activat, es demana després de cada mètode d'inici de sessió, incloent-hi SSO i LDAP.", - "allowPasswordReset": "Permetre la recuperació de contrasenya", - "allowPasswordResetDesc": "Codi de recuperació a través dels registres de Docker", - "auditForwardingTitle": "Reenviar al SIEM", - "auditForwardingDesc": "Enviar una còpia de cada entrada de registre d'auditoria a un col·lector extern en format NDJSON. Els registres locals continuen sent la font de veritat.", - "auditForwardingEnvNotice": "Una variable d'entorn també configura el reenviament; l'URL desada aquí té prioritat.", - "auditForwardingToken": "Token Bearer (opcional)", - "auditForwardingTokenStored": "Token Bearer (desat)", - "auditForwardingSaved": "Configuració de reenviament d'auditoria desada", - "auditForwardingSaveError": "No s'ha pogut desar la configuració de reenviament d'auditoria", - "sessionTimeout": "Temps d'expiració de la sessió", - "hours": "hores", - "sessionTimeoutRange": "Mín. 1h, màx. 720h", - "monitoringDefaults": "Valors predeterminats de monitoratge", - "statusCheck": "Comprovació d'estat", - "sec": "seg", - "logLevel": "Nivell de registre", "usersCount_one": "{{count}} usuari", "usersCount_many": "{{count}} usuaris", - "usersCount_other": "{{count}} usuari", - "searchUsers": "Cercar usuaris...", - "noUsers": "Cap usuari", - "noUsersMatch": "Cap usuari coincideix amb la vostra cerca", - "pageOf": "Pàgina {{page}} de {{total}}", - "createUser": "Crear", - "newRole": "Nou rol", - "roleName": "Nom", - "roleDisplayName": "Nom visible", - "roleDescription": "Descripció", "rolesCount_one": "{{count}} rol", "rolesCount_many": "{{count}} rols", - "rolesCount_other": "{{count}} rol", - "createRole": "Crear", - "creating": "Creant...", - "exportDatabase": "Exportar base de dades", - "exportDatabaseDesc": "Descarregar una còpia de seguretat SQLite portàtil de tots els amfitrions, credencials i configuracions", - "export": "Exportar", - "exporting": "Exportant...", - "importDatabase": "Importar base de dades", - "importDatabaseDesc": "Restaurar des d'una còpia de seguretat .sqlite portàtil en qualsevol backend de base de dades", - "importDatabaseSelected": "Seleccionat: {{name}}", - "selectFile": "Seleccionar fitxer", - "changeFile": "Canviar", - "import": "Importar", - "importing": "Important...", "apiKeysCount_one": "{{count}} clau", "apiKeysCount_many": "{{count}} claus", - "apiKeysCount_other": "{{count}} clau", - "apiKeysDocsLink": "Veure la documentació", - "apiKeysCliHint": "Utilitza una clau API amb la CLI de Termix per gestionar servidors des del teu terminal.", - "apiKeysCliLink": "Veure la documentació de la CLI", - "newApiKey": "Nova clau API", - "apiKeyCreatedWarning": "Clau creada: copia-la ara, no es tornarà a mostrar.", - "apiKeyName": "Nom", - "apiKeyUser": "Usuari", - "apiKeySelectUser": "Selecciona un usuari...", - "apiKeyExpiresAt": "Caduca el", - "createKey": "Crea clau", - "apiKeyNoExpiry": "Sense caducitat", - "revokedBadge": "REVOCADA", - "authTypeDual": "Autenticació dual", - "authTypeExternal": "Externa", - "authTypeLocal": "Local", - "adminStatusAdministrator": "Administrador", - "adminStatusRegularUser": "Usuari habitual", - "adminBadge": "ADMIN", - "systemBadge": "SIS", - "customBadge": "PERSONALITZAT", - "youBadge": "TU", "sessionsActive_one": "{{count}} actiu", "sessionsActive_many": "{{count}} actius", - "sessionsActive_other": "{{count}} actius", - "sessionActive": "Activa: {{time}}", - "sessionExpires": "Cad: {{time}}", - "revokeAll": "Totes", - "revokeAllSessionsSuccess": "S'han revocat totes les sessions de l'usuari", - "revokeAllSessionsFailed": "No s'han pogut revocar les sessions", - "revokeSessionFailed": "No s'ha pogut revocar la sessió", - "addRole": "Afegeix rol", - "noCustomRoles": "No hi ha rols personalitzats definits", - "removeRoleFailed": "No s'ha pogut eliminar el rol", - "assignRoleFailed": "No s'ha pogut assignar el rol", - "userAdminAccess": "Administrador", - "userAdminAccessDesc": "Accés complet a totes les configuracions d'administració", - "userRoles": "Rols", - "revokeAllUserSessions": "Revoca totes les sessions", - "revokeAllUserSessionsDesc": "Força la tornada a iniciar sessió en tots els dispositius", - "revoke": "Revoca", - "deleteUserWarning": "L'eliminació d'aquest usuari és permanent.", - "deleteUser": "Elimina {{username}}", - "deleting": "S'està eliminant...", - "deleteUserFailed": "No s'ha pogut eliminar l'usuari", - "deleteUserSuccess": "Usuari «{{username}}» eliminat", - "deleteRoleSuccess": "Rol «{{name}}» eliminat", - "revokeKeySuccess": "Clau «{{name}}» revocada", - "revokeKeyFailed": "No s'ha pogut revocar la clau", - "copiedToClipboard": "Copiat al porta-retalls", - "done": "Fet", - "createUserTitle": "Crea usuari", - "createUserDesc": "Crea un nou compte local.", - "createUserUsername": "Nom d'usuari", - "createUserPassword": "Contrasenya", - "createUserPasswordHint": "Mínim 6 caràcters.", - "createUserEnterUsername": "Introdueix el nom d'usuari", - "createUserSubmit": "Crea usuari", - "editUserTitle": "Gestiona l'usuari: {{username}}", - "editUserDesc": "Edita els rols, l'estat d'administrador, les sessions i la configuració del compte.", - "editUserUsername": "Nom d'usuari", - "editUserAuthType": "Tipus d'autenticació", - "editUserAdminStatus": "Estat d'administrador", - "editUserUserId": "ID d'usuari", - "linkAccountTitle": "Vincula comptes", - "linkAccountDesc": "Fusiona el compte extern {{username}} amb un compte local existent.", - "linkAccountDescLocal": "Vincula un compte local {{username}} amb un compte extern existent.", - "linkAccountWarningTitle": "Això farà:", - "linkAccountEffect1": "Suprimeix el compte només extern", - "linkAccountEffect2": "Afegeix l'inici de sessió extern al compte de destí", - "linkAccountEffect3": "Permet l'inici de sessió tant extern com amb contrasenya", - "linkAccountTargetUsername": "Nom d'usuari del compte local", - "linkAccountTargetPlaceholder": "Introduïu el nom d'usuari del compte local al qual enllaçar", - "linkAccountExternalUsername": "Nom d'usuari del compte extern", - "linkAccountExternalPlaceholder": "Introduïu el nom d'usuari del compte només extern a fusionar", - "linkAccountExternalNotFound": "No s'ha trobat cap compte només extern amb aquest nom d'usuari", - "linkAccounts": "Enllaçar comptes", - "linkAccountSuccess": "Comptes enllaçats correctament", - "linkAccountFailed": "No s'han pogut enllaçar els comptes", - "linkAccountInProgress": "Enllaçant...", - "unlinkAccountTitle": "Desenllaçar inici de sessió extern", - "unlinkAccountDesc": "Elimina l'inici de sessió extern de {{username}}. Només podrà iniciar sessió amb la seva contrasenya.", - "unlinkAccountWarning": "Això eliminarà l'inici de sessió extern d'aquest compte. L'usuari ha de tenir una contrasenya establerta per continuar iniciant sessió.", - "unlinkAccount": "Desenllaçar inici de sessió extern", - "unlinkAccountInProgress": "Desenllaçant...", - "unlinkAccountSuccess": "Inici de sessió extern desenllaçat", - "unlinkAccountFailed": "No s'ha pogut desenllaçar l'inici de sessió extern", - "updateRegistrationFailed": "No s'ha pogut actualitzar la configuració de registre", - "updatePasswordLoginFailed": "No s'ha pogut actualitzar la configuració d'inici de sessió amb contrasenya", - "updateSecondFactorAfterExternalLoginFailed": "No s'ha pogut actualitzar la configuració del segon factor", - "updatePasswordResetFailed": "No s'ha pogut actualitzar la configuració de restabliment de contrasenya", - "sessionTimeoutRange2": "El temps d'expiració de la sessió ha de ser entre 1 i 720 hores", - "sessionTimeoutSaved": "Temps d'expiració de la sessió desat", - "sessionTimeoutSaveFailed": "No s'ha pogut desar el temps d'expiració de la sessió", - "monitoringIntervalInvalid": "Valors d'interval no vàlids", - "monitoringSaved": "Configuració de monitoratge desada", - "monitoringSaveFailed": "No s'ha pogut desar la configuració de monitoratge", - "logLevelUpdateFailed": "No s'ha pogut actualitzar el nivell de registre", - "createUserRequired": "El nom d'usuari i la contrasenya són obligatoris", - "createUserPasswordTooShort": "La contrasenya ha de tenir almenys 6 caràcters", - "createUserSuccess": "Usuari «{{username}}» creat", - "createUserFailed": "No s'ha pogut crear l'usuari", - "updateAdminStatusFailed": "No s'ha pogut actualitzar l'estat d'administrador", - "allSessionsRevoked": "Totes les sessions revocades", - "revokeSessionsFailed": "No s'han pogut revocar les sessions", - "manageUserData": "Gestionar dades d'usuari", - "backToUsers": "Tornar als usuaris", - "manageTabAccount": "Compte", - "manageTabHosts": "Amfitrions", - "manageTabCredentials": "Credencials", - "manageTabSessions": "Sessions", - "manageTabDanger": "Perill", - "manageEditorBack": "Tornar a les dades de {{username}}", - "dataLockedBadge": "BLOQUEJAT", - "dataLockedNotice": "Les dades de {{username}} romandran bloquejades fins que iniciï sessió de nou. Els seus amfitrions, credencials i fragments no es podran veure ni editar fins llavors.", - "resetPasswordTitle": "Restablir contrasenya", - "resetPasswordExternalOnly": "Aquest usuari inicia sessió a través d'un proveïdor extern i no té contrasenya.", - "resetPasswordPlaceholder": "Nova contrasenya", - "resetPasswordBtn": "Restablir", - "resetPasswordWorking": "Restablint...", - "resetPasswordSuccess": "Contrasenya restablerta", - "resetPasswordSuccessWiped": "Contrasenya restablerta. Les dades xifrades de l'usuari s'han esborrat.", - "resetPasswordFailed": "No s'ha pogut restablir la contrasenya", - "resetPasswordConfirmWipe": "{{username}} no ha iniciat sessió des de la millora de xifratge, per la qual cosa les seves dades no es poden recuperar. Restablir ara eliminarà els seus amfitrions, credencials i fragments. Continueu?", - "manageApiKeys": "Claus API", - "apiKeyNamePlaceholder": "Nom de la clau", - "apiKeyCopyNotice": "Copieu aquesta clau ara, no es tornarà a mostrar.", - "noApiKeysForUser": "Cap clau API", - "apiKeyDeleteFailed": "No s'ha pogut eliminar la clau API", - "exportUserData": "Exportació de dades", - "exportUserDataDesc": "Descarrega els amfitrions, les credencials i les dades del gestor de fitxers d'aquest usuari en format JSON. Els secrets es desencripten.", - "exportUserDataSuccess": "Dades d'usuari exportades", - "exportUserDataFailed": "No s'han pogut exportar les dades de l'usuari", "hostsCount_one": "{{count}} amfitrió", "hostsCount_many": "{{count}} amfitrions", "hostsCount_other": "{{count}} amfitrió", - "addHostForUser": "Afegeix amfitrió", - "noHostsForUser": "Aquest usuari no té amfitrions", - "connectToHost": "Connecta", - "deleteHostConfirm": "Vols eliminar l'amfitrió «{{name}}» que pertany a {{username}}?", - "hostDeletedSuccess": "Amfitrió eliminat", - "hostDeleteFailed": "No s'ha pogut eliminar l'amfitrió", "credentialsCount_one": "{{count}} credencial", "credentialsCount_many": "{{count}} credencials", "credentialsCount_other": "{{count}} credencial", - "addCredentialForUser": "Afegeix credencial", - "noCredentialsForUser": "Aquest usuari no té credencials", - "deleteCredentialConfirm": "Vols eliminar la credencial «{{name}}» que pertany a {{username}}?", - "credentialDeletedSuccess": "Credencial eliminada", - "credentialDeleteFailed": "No s'ha pogut eliminar la credencial", - "noSessionsForUser": "Cap sessió activa", - "deleteSuccessorLabel": "Transfereix els amfitrions i les credencials a", - "deleteSuccessorMe": "Jo (l'administrador que elimina)", - "deleteSuccessorNone": "Cap, elimina'ls", - "deleteSuccessorDesc": "Tot el que aquest usuari ha compartit continuarà funcionant sota el nou propietari; si trieu «cap», s'eliminaran els seus amfitrions, credencials i comparticions.", - "deleteUserDangerDesc": "Elimina permanentment {{username}} i totes les seves dades (amfitrions, credencials, fragments, historial). Aquesta acció no es pot desfer.", - "deleteUserConfirm": "Vols eliminar permanentment {{username}} i totes les seves dades?", - "deleteUserAdminBlocked": "Elimina l'estat d'administrador abans d'eliminar aquest usuari.", - "createRoleRequired": "El nom i el nom per mostrar són obligatoris", - "createRoleSuccess": "Rol «{{name}}» creat", - "createRoleFailed": "No s'ha pogut crear el rol", - "apiKeyNameRequired": "El nom de la clau és obligatori", - "apiKeyUserRequired": "L'ID d'usuari és obligatori", - "apiKeyCreatedSuccess": "Clau API «{{name}}» creada", - "apiKeyCreateFailed": "No s'ha pogut crear la clau API", - "exportSuccess": "Base de dades exportada correctament", - "exportFailed": "Ha fallat l'exportació de la base de dades", - "importSelectFile": "Selecciona primer un fitxer", - "importCompleted": "Importació completada: {{total}} elements importats, {{skipped}} omesos", - "importFailed": "Ha fallat la importació: {{error}}", - "importError": "Ha fallat la importació de la base de dades", - "sectionHostDefaults": "Valors predeterminats dels amfitrions", "rolePermissions": { "count_one": "{{count}} permís", "count_many": "{{count}} permisos", - "count_other": "{{count}} permís", - "editAction": "Edita els permisos", - "loadError": "No s'ha pogut carregar el catàleg de permisos", - "saved": "Permisos del rol desats", - "saveError": "No s'han pogut desar els permisos del rol", - "save": "Desa", - "saving": "S'està desant...", - "pluginDisabled": "Complement desactivat", "groups": { "hosts": "Amfitrions", "credentials": "Credencials", "admin": "Administració" } - }, - "notificationPrivateEndpoints": "Amfitrions privats de notificacions permesos", - "notificationPrivateEndpointsDesc": "Amfitrions privats exactes als quals poden contactar els canals de notificació. Separa'ls amb comes.", - "updateNotificationEndpointsFailed": "No s'ha pogut actualitzar la llista permesa de punts finals de notificació", - "secondFactorsSectionTitle": "Segons factors", - "secondFactorsNone": "Cap segon factor registrat", - "secondFactorUnavailable": "No disponible", - "resetSecondFactors": "Restableix els segons factors", - "resetSecondFactorsConfirm": "Vols eliminar tots els segons factors de {{username}}? Podran iniciar sessió amb la contrasenya o SSO i registrar-se de nou.", - "secondFactorsResetSuccess": "Els factors secundaris s'han restablert", - "secondFactorsResetFailed": "No s'han pogut restablir els factors secundaris", - "passwordLoginForced": "L'inici de sessió amb contrasenya està desactivat, però no hi ha cap altre mètode d'inici de sessió habilitat, de manera que es manté activat per ara. Ningú queda bloquejat.", - "sslNotRenewed": "Res no renova aquest certificat. Venç el {{date}}. Activeu el renovament automàtic a la secció de certificats ACME o pugeu-ne un de nou abans d'aleshores.", - "sslSelfSigned": "Certificat autofirmat creat per Termix. Els navegadors en donaran un avís.", - "sslRenewedBy": "Renovat automàticament per {{plugin}}", - "sslIssuer": "Emitit per {{issuer}}", - "sslNames": "Cobreix {{names}}", - "sslManualTitle": "Pujar un certificat", - "updateExternalAutoProvisionFailed": "No s'ha pogut actualitzar la configuració de creació automàtica", - "hostTags": "Etiquetes de host predefinides", - "hostTagsDesc": "Etiquetes que tots els usuaris veuen com a suggeriments a l'editor de host. Premeu Espai o Retorn per afegir-ne una. Eliminar una etiqueta d'aquí no l'elimina dels hosts.", - "hostTagsError": "No s'han pogut carregar o desar les suggerències d'etiquetes de host.", - "revokeAllSessionsConfirm": "Voleu tancar la sessió de {{username}} a tot arreu?", - "revokeSessionConfirm": "Voleu tancar aquesta sessió?", - "revokeSession": "Tancar sessió", - "deleteRoleConfirm": "Voleu suprimir el rol {{name}}?", - "revokeKeyConfirm": "Voleu revocar la clau API {{name}}?", - "revokeKey": "Revocar" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "On", - "who": "Qui", - "hostLabel": "Host", - "hostPlaceholder": "192.168.1.1 o example.com", - "portLabel": "Port", - "usernameLabel": "Nom d'usuari", - "usernamePlaceholder": "nom d'usuari", - "authLabel": "Autenticació", - "passwordLabel": "Contrasenya", - "passwordPlaceholder": "contrasenya", - "privateKeyLabel": "Clau privada", - "privateKeyPlaceholder": "Enganxeu la clau privada...", - "credentialLabel": "Credencial", - "credentialPlaceholder": "Seleccioneu una credencial desada", - "protocolLabel": "Protocol", - "domainLabel": "Domini", - "domainPlaceholder": "opcional", - "connectToAction": "Connectar a {{name}}", - "sshProtocol": "SSH", - "noTarget": "Cap programa instal·lat pot connectar-se a aquest tipus de host" + "usernameLabel": "Nom d'usuari" }, "keybindings": { - "description": "Associeu tecles a accions al terminal i a l'aplicació, o canvieu els dreceres integrades.", - "defaultsHeading": "Dreceres integrades", - "fixedHeading": "Dreceres de l'aplicació", - "fixed": { - "splitRight": "Dividir a la dreta", - "splitDown": "Dividir cap avall", - "zoomPane": "Ampliar el panell enfocat", - "navigatePane": "Desplaçar-se entre panells", - "nextTab": "Pestanya següent", - "previousTab": "Pestanya anterior", - "jumpTab": "Anar a la pestanya", - "previousView": "Tornar a la vista anterior de la barra lateral", - "fullscreen": "Alternar la pantalla completa" - }, - "customHeading": "Dreceres personalitzades", - "addBinding": "Afegir drecera", - "addBindingTitle": "Afegir drecera", - "editBindingTitle": "Editar drecera", - "loading": "S'està carregant...", - "noCustomBindings": "Encara no hi ha dreceres personalitzades", - "defaultBadge": "Predeterminat", - "customizedBadge": "Personalitzat", - "customize": "Personalitzar", - "resetToDefault": "Restableix els valors predeterminats", - "resetAllToDefaults": "Restableix-ho tot als valors predeterminats", - "cancel": "Cancel·la", - "saveBinding": "Desa l'accés directe", - "saveError": "No s'han pogut desar els accessos directes del teclat", - "pressKeysToRecord": "Combinació de tecles", - "pressKeysPlaceholder": "Feu clic i premeu les tecles", - "recording": "Premeu les tecles...", - "comboRequiredError": "Premeu primer una combinació de tecles", - "conflictWarning": "Aquesta combinació ja està associada a {{combo}}. Si la deseu, s'executaran totes dues.", - "actionLabel": "Acció", "actionNextTab": "Canvia a la pestanya següent", "actionPreviousTab": "Canvia a la pestanya anterior", "actionOpenCommandPalette": "Obre la cerca ràpida", - "actionReconnectSession": "Torna a connectar la sessió actual", - "unavailableAction": "{{type}} (no disponible)", - "actionRequiredError": "Trieu primer una acció", - "deleteConfirm": "Voleu suprimir aquesta combinació de tecles?", - "resetAllConfirm": "Voleu restablir totes les combinacions de tecles als valors predeterminats?" + "actionReconnectSession": "Torna a connectar la sessió actual" }, "userProfile": { - "storageModeLocal": "Navegador", - "storageModeCloud": "Base de dades", - "storageModeDescription": "El navegador emmagatzema la configuració només en aquest navegador. La base de dades sincronitza amb el servidor i es carrega en qualsevol dispositiu.", - "resetToDefaults": "Restableix als valors predeterminats", - "resetToDefaultsSuccess": "La configuració s'ha restablert als valors predeterminats.", - "storageModeSwitch": "Emmagatzematge de preferències", - "sectionAccount": "Compte", - "desktopProfileTitle": "Només en aquest dispositiu", - "desktopProfileDescription": "Aquest perfil es troba en aquest dispositiu i s'hi connecta de manera independent. Enllaçeu-lo a un servidor Termix per utilitzar els mateixos amfitrions i la mateixa configuració en tots els dispositius.", - "sectionInterface": "Interfície", - "interfacePresetDesc": "Quant de detall mostra Termix. Totes les funcions continuen estant disponibles.", "preset_simple": "Senzill", "preset_simple_desc": "Només l'essencial.", "preset_balanced": "Equilibrat", "preset_balanced_desc": "El disseny estàndard.", "preset_advanced": "Avançat", "preset_advanced_desc": "Tot activat, molt compacte.", - "presetClearOverrides": "Restableix-ho tot", - "presetOverridesTitle": "Personalitzat", - "presetRevertArea": "Desfés", - "presetConfirmTitle": "Voleu canviar a {{preset}}?", - "presetConfirmDesc": "Això restableix la barra lateral, la navegació, el disseny del tauler de control, la barra d'eines del terminal i la vista del gestor de fitxers. Els vostres amfitrions, credencials i pàgina d'inici no es veuran afectats.", - "presetConfirmApply": "Aplica el preset", - "runSetupAgainDesc": "Torneu a fer el procés de configuració inicial.", - "runSetupAgainButton": "Executa la configuració", "uiArea_chrome": "Marc de l'aplicació", "uiArea_hostList": "Llista d'amfitrions", "uiArea_credentialList": "Llista de credencials", @@ -1648,127 +1128,14 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Gestor de fitxers", "uiArea_hostEditor": "Editor d'amfitrions", - "sectionAppearance": "Aparença", - "sectionSecurity": "Seguretat", - "sectionApiKeys": "Claus API", - "sectionData": "Dades", - "usernameLabel": "Nom d'usuari", - "roleLabel": "Rol", - "roleAdministrator": "Administrador", - "authMethodLabel": "Mètode d'autenticació", - "authMethodLocal": "Local", - "twoFaLabel": "2FA", - "twoFaOn": "Activat", - "twoFaOff": "Desactivat", - "versionLabel": "Versió", - "cliTitle": "Termix CLI", - "cliDescription": "Obre terminals, executa ordres i mou fitxers des del teu propi shell.", - "cliLearnMore": "Més informació", - "deleteAccount": "Suprimeix el compte", - "deleteAccountDescription": "Suprimeix el teu compte de manera permanent", - "deleteButton": "Suprimeix", - "deleteAccountPermanent": "Aquesta acció és permanent i no es pot desfer.", - "deleteAccountWarning": "Totes les sessions, amfitrions, credencials i configuracions es suprimiran de manera permanent.", - "confirmPasswordDeletePlaceholder": "Introdueix la teva contrasenya per confirmar", "languageLabel": "Idioma", "themeLabel": "Tema", "fontSizeLabel": "Mida de la font", "interfaceFontLabel": "Font de la interfície", "interfaceFontDescription": "Canvia la font de la interfície de l'aplicació. Els perfils de terminal conserven la seva pròpia configuració de font.", "accentColorLabel": "Color d'accent", - "keyboardShortcuts": "Dreceres de teclat", - "keyboardShortcutsDescription": "Personalitza les dreceres de copiar, enganxar i ordres del terminal", - "manageShortcuts": "Gestiona", - "commandPalette": "Paleta d'ordres", - "commandPaletteDesc": "Activa la drecera de teclat", - "reopenTabsOnLogin": "Torna a obrir les pestanyes en iniciar sessió", - "reopenTabsOnLoginDesc": "Restaura les pestanyes obertes quan iniciïs sessió o actualitzis la pàgina, fins i tot des d'un altre dispositiu", - "confirmTabClose": "Confirma el tancament de la pestanya", - "confirmTabCloseDesc": "Demana confirmació abans de tancar les pestanyes del terminal", - "showTabNumbers": "Mostra els números de les pestanyes", - "showTabNumbersDesc": "Mostra un número a cada pestanya per ajudar a distingir-les", - "settingsAppRail": "Barra d'aplicacions", - "sidebarSettingsMoved": "La configuració de visualització de la barra lateral d'amfitrions s'ha mogut al panell Personalitza la barra lateral, que s'obre des de la barra d'eines d'Amfitrions.", - "showHostTags": "Mostra les etiquetes dels amfitrions", - "showHostTagsDesc": "Mostra les etiquetes a la llista d'amfitrions", - "statusColors": "Colors d'estat reals", - "statusColorsDesc": "Utilitza verd/vermell per a l'estat en línia/fuera de línia en lloc del color d'accent", - "pinAppRail": "Fixa la barra d'aplicacions", - "pinAppRailDesc": "Mantén la barra d'aplicacions de la barra lateral esquerra sempre ampliada en lloc d'ampliar-la en passar el cursor per sobre", - "expandAppRailOnHover": "Amplia la barra d'aplicacions en passar el cursor", - "expandAppRailOnHoverDesc": "Permet que la barra d'aplicacions de la barra lateral esquerra s'ampliï quan el cursor passi per sobre", - "appRailHoverPushesContent": "Desplaça el contingut en expandir-se", - "appRailHoverPushesContentDesc": "Deixa espai per a la barra lateral expandida en lloc d'obrir-la sobre la pàgina. Les sessions obertes, com l'escriptori remot, es redimensionen cada vegada.", - "showPinAppRailButton": "Mostra el botó per fixar la barra d'aplicacions", - "showPinAppRailButtonDesc": "Mostra un botó a la barra d'aplicacions per fixar-la oberta. Desactivat per defecte.", - "settingsNavigation": "Navegació", - "navigationTabsDesc": "Tria quines pestanyes apareixen a la barra d'aplicacions", - "settingsUpdates": "Actualitzacions", - "disableUpdateChecks": "Desactiva les comprovacions d'actualització", - "disableUpdateChecksDesc": "Deixa de comprovar si hi ha actualitzacions", - "changePassword": "Canvia la contrasenya", - "currentPasswordLabel": "Contrasenya actual", - "currentPasswordPlaceholder": "Contrasenya actual", - "newPasswordLabel": "Nova contrasenya", - "newPasswordPlaceholder": "Nova contrasenya", - "confirmPasswordLabel": "Confirma la nova contrasenya", - "confirmPasswordPlaceholder": "Confirma la nova contrasenya", - "updatePassword": "Actualitza la contrasenya", - "createApiKeyTitle": "Crea una clau API", - "createApiKeyDescription": "Genera una nova clau API per a l'accés programàtic.", - "apiKeyNameLabel": "Nom", - "apiKeyNamePlaceholder": "p. ex. Pipeline CI", - "expiryDateLabel": "Data de caducitat", - "optional": "opcional", - "cancel": "Cancel·la", - "createKey": "Crea una clau", - "apiKeyCreatedWarning": "Clau creada: copia-la ara, no es mostrarà de nou.", - "copyApiKey": "Copia la clau API", - "copiedToClipboard": "Copiat al porta-retalls", "apiKeyCount_one": "{{count}} clau", "apiKeyCount_many": "{{count}} claus", - "apiKeyCount_other": "{{count}} clau", - "newKey": "Clau nova", - "noApiKeys": "Encara no hi ha claus API.", - "apiKeyActive": "Activa", - "apiKeyUsageHint": "Inclou la teva clau a l'", - "apiKeyUsageHintHeader": "capçalera.", - "apiKeyPermissionsHint": "Les claus hereten els permisos de l'usuari que les ha creat.", - "exportData": "Exporta les meves dades", - "exportDataDesc": "Descarrega una còpia de seguretat dels teus amfitrions, credencials i configuració per transferir-los a un altre dispositiu", - "export": "Exporta", - "exporting": "Exportant...", - "importData": "Importa les meves dades", - "importDataDesc": "Restaura els teus amfitrions, credencials i configuració des d'un fitxer de còpia de seguretat .sqlite", - "importDataSelected": "Seleccionat: {{name}}", - "selectFile": "Selecciona un fitxer", - "changeFile": "Canvia", - "import": "Importa", - "importing": "Important...", - "exportSuccess": "Dades exportades correctament", - "exportFailed": "Ha fallat l'exportació de les dades", - "importSelectFile": "Selecciona primer un fitxer", - "importCompleted": "Importació completada: {{total}} elements importats, {{skipped}} omesos", - "importFailed": "Ha fallat la importació: {{error}}", - "roleUser": "Usuari", - "authMethodDual": "Autenticació dual", - "authMethodExternal": "Externa", - "done": "Fet", - "apiKeyNameRequired": "El nom de la clau és obligatori", - "apiKeyCreated": "Clau API «{{name}}» creada", - "apiKeyCreateFailed": "Ha fallat la creació de la clau API", - "apiKeyUser": "Usuari", - "apiKeyExpires": "Caduca", - "apiKeyRevoked": "Clau API «{{name}}» revocada", - "apiKeyRevokeFailed": "Ha fallat la revocació de la clau API", - "passwordFieldsRequired": "Són necessàries la contrasenya actual i la nova", - "passwordMismatch": "Les contrasenyes no coincideixen", - "passwordTooShort": "La contrasenya ha de tenir almenys 6 caràcters", - "passwordUpdated": "Contrasenya actualitzada correctament", - "passwordUpdateFailed": "Ha fallat l'actualització de la contrasenya", - "deletePasswordRequired": "Cal la contrasenya per suprimir el teu compte", - "deleteFailed": "Ha fallat la supressió del compte", - "deleting": "Suprimint...", "colorPickerTooltip": "Obre el selector de color", "themeSystem": "Sistema", "themeLight": "Clar", @@ -1779,18 +1146,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "S'ha iniciat sessió a {{server}}", - "linkedProfileDescription": "Aquest dispositiu utilitza el vostre compte al servidor i manté una còpia de les vostres dades, de manera que continua funcionant sense connexió.", - "manageSync": "Gestionar la sincronització", - "setUpSync": "Vincular a un servidor", - "settingsTabsAndShortcuts": "Pestanyes i dreceres", - "onBetaTitle": "Esteu en una versió beta", - "onBetaDescription": "Gràcies per provar-ho. Digueu-nos què falla.", - "tryBetaTitle": "Proveu les noves funcions abans que ningú", - "tryBetaDescription": "Uniu-vos al programa beta a Actualitzacions.", - "sendBetaFeedback": "Enviar comentaris sobre la beta", - "openUpdates": "Actualitzacions" + "themeGruvbox": "Gruvbox" } } }, @@ -2055,8 +1411,7 @@ "hasDependents": "{{name}} és necessari per a {{list}}. Desactiva'ls o desinstal·la'ls primer.", "missingDependencies": "{{name}} necessita {{list}}, que no està instal·lat.", "consentChanged": "El que demana aquest complement ha canviat des que ho vas consultar. Revisa la llista de nou.", - "upload": "No s'ha pogut llegir {{name}}: {{error}}", - "developerMode": "No s'ha pogut modificar el mode de desenvolupador: {{error}}" + "upload": "No s'ha pogut llegir {{name}}: {{error}}" }, "data": { "title": "Dades emmagatzemades", @@ -2188,13 +1543,7 @@ "browsePlugins": "Explorar complements", "loading": "Carregant", "developer": { - "title": "Mode desenvolupador de complements", - "hint": "Permet als administradors instal·lar complements des d'un fitxer .tmxplug a la pestanya de complements, sense les comprovacions del registre. Utilitza-ho per crear i provar els teus propis complements.", - "enableTitle": "Vols activar el mode desenvolupador?", - "enableBody": "Els administradors podran instal·lar complements des de fitxers que Termix no ha verificat. Un complement pot fer qualsevol cosa que els seus permisos permetin, així que només activis aquesta opció mentre desenvolupes o proves complements.", - "enable": "Activar", - "installFromFile": "Instal·lar des d'un fitxer", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS està configurat, per la qual cosa la instal·lació des d'un fitxer continua bloquejada." + "installFromFile": "Instal·lar des d'un fitxer" }, "count": { "downloads_one": "{{formatted}} descàrrega", @@ -2233,71 +1582,7 @@ "secretSet": "Establert", "secretNotSet": "No establert", "secretReplace": "Substituir", - "pluginSettingsSaved": "Configuració desada", - "pluginSettingsInvalid": "Alguns paràmetres no s'han pogut desar. Comprova els camps destacats.", - "pluginSettingsSaveFailed": "No s'han pogut desar els paràmetres", - "pluginSettingsLoadFailed": "No s'han pogut carregar els paràmetres", - "featureUnavailable": "{{name}} no està disponible ara mateix. Aquests paràmetres es desaran però no tindran efecte.", - "account": "Compte", - "security": "Seguretat", - "apiKeys": "Claus API", - "data": "Dades i sincronització", - "interface": "Interfície", - "appearance": "Aparença", - "keybindings": "Dreceres de teclat", - "adminGeneral": "General", - "adminUsers": "Usuaris", - "adminSessions": "Sessions", - "adminRoles": "Rols", - "adminHostDefaults": "Valors predeterminats dels servidors", - "adminBranding": "Marca", - "adminDatabase": "Base de dades", - "adminSsl": "SSL", - "adminApiKeys": "Claus API", - "adminAuditLog": "Registre d'auditoria", - "bandYou": "El teu compte", - "bandApp": "Aquesta aplicació", - "bandPlugins": "Complements", - "bandInstance": "Aquest servidor", - "searchPlaceholder": "Cerca paràmetres", - "noResults": "Cap paràmetre coincideix.", - "pages": "Pàgines", - "instanceSettings": "Configuració del servidor", - "nothingHere": "No hi ha res per configurar aquí.", - "searchPage": "Cerca en aquesta pàgina", - "noPageMatches": "Res d'aquesta pàgina no coincideix.", - "updates": { - "title": "Actualitzacions", - "betaProgram": "Programa beta", - "betaIntro": "Les versions beta són compilacions anticipades de la propera versió de Termix. Es publiquen els dimarts i divendres quan hi ha alguna cosa nova per provar. Poden tenir errors, i els teus comentaris són el que millora la versió estable.", - "termixBetas": "Versions beta de Termix", - "termixBetasHint": "Informa'm de les noves versions beta, no només de les versions estables.", - "runningBetaBuild": "Estàs executant una compilació beta. Per sortir-ne, torna a una imatge o instal·lador estable.", - "howToInstall": "Com obtenir la versió beta", - "desktopInstall": "Descarrega l'instal·lador beta i instal·la'l sobre aquest.", - "downloadBeta": "Descarrega la {{version}}", - "dockerInstall": "Canvia la teva imatge a l'etiqueta beta i reinicia el contenidor:", - "copy": "Copia", - "copied": "Copiat", - "copyFailed": "No s'ha pogut copiar", - "learnMore": "Més informació sobre les versions beta", - "feedback": "Comentaris", - "feedbackHint": "Has trobat un error o tens una idea? Anirà directament als desenvolupadors amb la teva versió omplerta.", - "sendFeedback": "Envia comentaris sobre la versió beta", - "releases": "Versions", - "thisVersion": "Aquesta versió", - "newestStable": "Última versió estable", - "newestBeta": "Última versió beta", - "noRelease": "Cap per ara", - "pluginBetas": "Versions beta dels connectors", - "pluginBetasIntro": "Cada connector pot utilitzar versions beta per separat. Per provar-ne un, obre'l i prem Prova la versió beta.", - "openPlugins": "Obre els connectors", - "waitingForStable": "Tornat a la versió estable. Es manté a la {{version}} fins que hi hagi una versió estable més recent.", - "backToStable": "Torna a la versió estable", - "allPluginsBeta": "Utilitza versions beta per a tots els connectors", - "allPluginsStable": "Tots els connectors tornen a la versió estable", - "saveFailed": "No s'ha pogut desar el canvi" - } + "featureUnavailable": "{{name}} no està disponible ara mateix. Aquests paràmetres es desaran però no tindran efecte." }, "managerCard": { "refresh": "Actualitza", @@ -2307,86 +1592,16 @@ "filter": "Filtra..." }, "sync": { - "server": "Servidor Termix", - "account": "Compte", - "status": "Estat", - "never": "mai", - "justNow": "ara mateix", "minutesAgo_one": "fa {{count}} minut", "minutesAgo_many": "fa {{count}} minuts", "minutesAgo_other": "fa {{count}} minuts", "hoursAgo_one": "fa {{count}} hora", "hoursAgo_many": "fa {{count}} hores", "hoursAgo_other": "fa {{count}} hores", - "actionFailed": "No ha funcionat. Torna-ho a provar.", - "unlinkedTitle": "Només aquest dispositiu", - "unlinkedBody": "Termix funciona de manera independent en aquest dispositiu. Vincula'l al teu servidor Termix per mantenir tot al dia.", - "unlinkedPointHosts": "Els teus amfitrions, credencials, fragments i configuracions et segueixen a cada dispositiu.", - "unlinkedPointOffline": "Tot continua funcionant quan el servidor no és accessible i s'actualitza més tard.", - "unlinkedPointAccount": "Inicis sessió amb el teu compte del servidor, i els amfitrions que la gent ha compartit amb tu també apareixen aquí.", - "linkButton": "Vincula a un servidor", - "state": { - "syncing": "Sincronitzant", - "offline": "Servidor no accessible", - "error": "Sincronització aturada", - "signedOut": "Sessió tancada", - "synced": "Sincronitzat {{time}}" - }, "pending_one": "{{count}} canvi pendent de sincronitzar", "pending_many": "{{count}} canvis pendents de sincronitzar", "pending_other": "{{count}} canvis pendents de sincronitzar", - "signInAgain": "Inicia sessió de nou", - "syncNow": "Sincronitza ara", - "unlink": "Desvincula", - "unlinked": "Aquest dispositiu ja no està vinculat", - "unlinkTitle": "Vols desvincular aquest dispositiu?", - "unlinkDescription": "S'atura la sincronització i es tanca la sessió del servidor. Els amfitrions compartits amb tu per altres persones s'eliminen d'aquest dispositiu en qualsevol cas.", - "unlinkKeepTitle": "Conserva les meves dades aquí", - "unlinkKeepBody": "Els teus amfitrions, credencials i configuracions es mantenen en aquest dispositiu i continuen funcionant de manera independent.", - "unlinkRemoveTitle": "Elimina les dades sincronitzades", - "unlinkRemoveBody": "Tot el que prové del servidor s'elimina d'aquest dispositiu. Només es mantenen els amfitrions conservats en aquest dispositiu.", - "conflictsTitle": "Conflictes", - "conflictsDescription": "Aquests s'han modificat aquí i al servidor al mateix temps. La versió del servidor està en ús. Conserva la teva per enviar-la al servidor en el seu lloc.", - "keepMine": "Conserva la meva", - "keepServer": "Conserva la del servidor", - "errorsTitle": "No sincronitzat", - "errorsDescription": "El servidor no ha acceptat aquests canvis. Es mantenen en aquest dispositiu.", - "errorPermission": "El teu compte al servidor no té permís per fer aquest canvi.", - "retry": "Torna-ho a provar", - "whatSyncs": "Què es sincronitza", - "whatSyncsDescription": "Desactiva el que vulguis mantenir només en aquest dispositiu.", - "coreGroup": "Termix", - "notOnServer": "El servidor no té això", - "notOnDevice": "Encara no en aquest dispositiu", - "localOnlyHint": "També pots mantenir amfitrions o carpetes individuals en aquest dispositiu des de la seva configuració.", - "originTitle": "D'on comencen les connexions", - "originDescription": "Connecta't als amfitrions des d'aquest dispositiu o a través del servidor. Pots canviar-ho per amfitrió.", - "originLocal": "Aquest dispositiu", - "originRemote": "El servidor", - "entities": { - "hosts": "Amfitrions", - "sshCredentials": "Credencials", - "sshFolders": "Carpetes", - "userPreferences": "Preferències", - "pluginUserSettings": "Configuració del complement", - "sharedHosts": "Amfitrions compartits amb tu", - "sharedCredentials": "Credencials compartides amb tu", - "vaultProfiles": "Perfils de Vault", - "snippetFolders": "Carpetes de fragments", - "snippets": "Fragments", - "dashboardServiceLinks": "Enllaços de servei", - "homepageItems": "Elements de la pàgina d'inici", - "networkTopology": "Mapa de xarxa", - "workspaces": "Espais de treball", - "hostDefaults": "Valors predeterminats de l'amfitrió", - "hostDefaultsAdmin": "Valors predeterminats de l'amfitrió del servidor", - "aiProviders": "Proveïdors d'IA", - "homepageLayouts": "Disseny de la pàgina d'inici", - "accountProfile": "Perfil del compte" - }, "proxy": { - "title": "Proxy invers", - "description": "Només necessari quan alguna cosa com Cloudflare Access o una pàgina d'inici de sessió es troba davant del teu servidor.", "headersTitle": "Encapçalaments addicionals", "headersHint": "S'envien amb cada sol·licitud al servidor, per exemple, un testimoni de servei de Cloudflare Access.", "headerName": "Nom de l'encapçalament", @@ -2399,8 +1614,7 @@ "username": "Nom d'usuari", "password": "Contrasenya", "allowInvalidCertificate": "Confia en un certificat autofirmat", - "allowInvalidCertificateHint": "Només per al teu propi servidor, quan el seu certificat no prové d'una autoritat coneguda.", - "saved": "Desat" + "allowInvalidCertificateHint": "Només per al teu propi servidor, quan el seu certificat no prové d'una autoritat coneguda." }, "problems": { "invalidUrl": "Això no sembla una adreça web.", @@ -2440,6 +1654,27 @@ "linking": "Vinculant i executant la primera sincronització...", "linked": "Vinculat. Les teves dades s'estan sincronitzant ara.", "signedInAgain": "Iniciat la sessió. La sincronització s'ha tornat a executar." + }, + "entities": { + "hosts": "Amfitrions", + "sshCredentials": "Credencials", + "sshFolders": "Carpetes", + "userPreferences": "Preferències", + "pluginUserSettings": "Configuració del complement", + "sharedHosts": "Amfitrions compartits amb tu", + "sharedCredentials": "Credencials compartides amb tu", + "vaultProfiles": "Perfils de Vault", + "snippetFolders": "Carpetes de fragments", + "snippets": "Fragments", + "dashboardServiceLinks": "Enllaços de servei", + "homepageItems": "Elements de la pàgina d'inici", + "networkTopology": "Mapa de xarxa", + "workspaces": "Espais de treball", + "hostDefaults": "Valors predeterminats de l'amfitrió", + "hostDefaultsAdmin": "Valors predeterminats de l'amfitrió del servidor", + "aiProviders": "Proveïdors d'IA", + "homepageLayouts": "Disseny de la pàgina d'inici", + "accountProfile": "Perfil del compte" } }, "hostDefaults": { @@ -2456,34 +1691,15 @@ "resetTitle": "Aquest amfitrió estableix el seu propi valor. Feu clic per tornar a utilitzar el valor predeterminat de {{source}}", "clearTitle": "Establert a aquest nivell. Feu clic per esborrar-lo i utilitzar {{source}} en el seu lloc", "inheritedTitle": "Segueix el valor predeterminat de {{source}}", - "titleAdmin": "Valors predeterminats dels amfitrions del servidor", - "titleUser": "Els meus valors predeterminats d'amfitrió", - "titleFolder": "Valors predeterminats de la carpeta: {{name}}", - "descriptionAdmin": "Valors predeterminats per a tots els amfitrions d'aquest servidor. Els valors predeterminats d'un usuari, d'una carpeta o de l'amfitrió mateix encara poden establir un valor diferent. Canvieu un camp per establir-lo aquí o esbuceu-lo per deixar-lo sense establir.", - "descriptionUser": "Valors predeterminats per a tots els vostres amfitrions, per sobre dels del servidor. Una carpeta o l'amfitrió mateix encara poden establir un valor diferent. Canvieu un camp per establir-lo aquí o esbuceu-lo per deixar-lo sense establir.", - "descriptionFolder": "Valors predeterminats per als amfitrions d'aquesta carpeta i les seves subcarpetes, per sobre dels vostres. Un amfitrió encara pot establir un valor diferent. Canvieu un camp per establir-lo aquí o esbuceu-lo per deixar-lo sense establir.", - "save": "Desa els valors predeterminats", "saved_one": "Valors predeterminats desats. S'ha actualitzat {{count}} amfitrió.", "saved_many": "Valors predeterminats desats. S'han actualitzat {{count}} amfitrions.", "saved_other": "Valors predeterminats desats. S'han actualitzat {{count}} amfitrions.", - "savedInBackground": "Valors predeterminats desats. Els amfitrions s'estan actualitzant en segon pla.", "appliedToHosts_one": "{{count}} amfitrió s'ha actualitzat amb els valors predeterminats nous.", "appliedToHosts_many": "{{count}} amfitrions s'han actualitzat amb els valors predeterminats nous.", "appliedToHosts_other": "{{count}} amfitrions s'han actualitzat amb els valors predeterminats nous.", - "saveFailed": "No s'han pogut desar els valors predeterminats", - "loadFailed": "No s'han pogut carregar els valors predeterminats", - "confirmTitle": "Vols desar els valors predeterminats?", "confirmChanges_one": "{{count}} amfitrió segueix aquests valors predeterminats i canviarà.", "confirmChanges_many": "{{count}} amfitrions segueixen aquests valors predeterminats i canviaran.", "confirmChanges_other": "{{count}} amfitrions segueixen aquests valors predeterminats i canviaran.", - "confirmNoChanges": "Cap amfitrió existent no canvia. Els amfitrions nous començaran amb aquests valors predeterminats.", - "menuMyDefaults": "Els meus valors predeterminats d'amfitrió", - "folderDefaultsAction": "Valors predeterminats de la carpeta", - "adminSectionDescription": "Estableix els valors predeterminats que segueix cada amfitrió d'aquest servidor, per a cada configuració que tingui un amfitrió, inclosos els de cada complement. Els usuaris i les carpetes poden establir els seus propis valors per sobre, i qualsevol amfitrió encara pot utilitzar el seu propi valor.", - "editServerDefaults": "Edita els valors predeterminats del servidor", - "resetMenu": "Restableix", - "resetAll": "Restableix-ho tot als valors predeterminats", - "resetCore": "Restableix la connexió i SSH als valors predeterminats", "resetDone_one": "{{count}} host ara utilitza els seus valors predeterminats.", "resetDone_many": "{{count}} hosts ara utilitzen els seus valors predeterminats.", "resetDone_other": "{{count}} hosts ara utilitzen els seus valors predeterminats." @@ -2498,50 +1714,16 @@ "fields": { "secretSaved": "Desat. Escriu per substituir-lo." }, - "sharing": { - "revokeConfirm": "Vols eliminar l'accés de {{name}}?", - "revoke": "Elimina l'accés" - }, "manage": { - "searchSettings": "Cerca configuració", - "noMatchingSettings": "Cap configuració coincideix.", - "sections": "Seccions", - "sectionNeedsAttention": "Alguna cosa aquí necessita atenció", "needsAttention_one": "Una cosa necessita atenció.", "needsAttention_many": "{{count}} coses necessiten atenció.", "needsAttention_other": "{{count}} coses necessiten atenció.", - "bandHost": "Host", - "bandFeatures": "Protocols i complements", - "bandCredential": "Credencial", - "sshConnection": "Connexió SSH", - "errorAddressRequired": "Cal proporcionar una adreça.", - "errorPortRange": "Utilitza un port entre 1 i 65535.", - "defaults": "Valors predeterminats", - "searchHosts": "Cerca hosts", - "searchCredentials": "Cerca credencials", - "searchDefaults": "Cerca valors predeterminats", - "addCredential": "Afegeix credencial", - "nothingMatches": "Res no coincideix", - "nothingYet": "Encara no hi ha res aquí", - "emptyHostsHint": "Afegeix un host i apareixerà aquí, a la carpeta que li assignis.", - "emptyCredentialsHint": "Les credencials que desis es poden reutilitzar per a qualsevol host.", - "collapse": "Replega", - "expand": "Expandeix", - "cannotBeUndone": "Això no es pot desfer.", - "hostNotFound": "No s'ha pogut trobar aquest host. Prova de refrescar la llista.", "hostCount_one": "{{count}} host", "hostCount_many": "{{count}} hosts", "hostCount_other": "{{count}} hosts", "credentialCount_one": "{{count}} credencial", "credentialCount_many": "{{count}} credencials", - "credentialCount_other": "{{count}} credencials", - "newHost": "Host nou", - "newCredential": "Credencial nova", - "advanced": "Avançat", - "pickHost": "Tria un host per editar", - "pickCredential": "Tria una credencial per editar", - "pickDefaults": "Tria un nivell de valors predeterminats per editar", - "pickHint": "Tot el que fa referència a una connexió es troba aquí, agrupat perquè puguis trobar-ho fàcilment." + "credentialCount_other": "{{count}} credencials" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/cs_CZ.json b/src/ui/locales/translated/cs_CZ.json index 47a62c552..abd7ae9c6 100644 --- a/src/ui/locales/translated/cs_CZ.json +++ b/src/ui/locales/translated/cs_CZ.json @@ -141,7 +141,6 @@ "continue": "Pokračovat", "error": "Chyba", "unsavedChanges": "Neuložené změny", - "more": "Více", "loading": "Načítání...", "host": "Hostitel", "selectHost": "Vyberte hostitele...", @@ -154,7 +153,6 @@ "cancel": "Zrušit", "username": "Uživatelské jméno", "login": "Přihlásit se", - "logout": "Odhlásit se", "register": "Registrovat", "password": "Heslo", "confirmPassword": "Potvrdit heslo", @@ -165,8 +163,6 @@ "rename": "Přejmenovat", "edit": "Upravit", "confirm": "Potvrdit", - "next": "Další", - "previous": "Předchozí", "refresh": "Obnovit", "language": "Jazyk", "backendReconnected": "Připojení k serveru obnoveno", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Přečtěte si o každém z nich" }, "desktopUpdates": { - "title": "Desktopová aplikace", - "mode": "Aktualizace", - "modeHint": "Jak tato aplikace získává nové verze.", - "manualModeHint": "Tato kopie se nedokáže aktualizovat sama, takže Termix vás pouze informuje, když je k dispozici nová verze.", "modeAutomatic": "Automaticky", "modePrompt": "Nejprve se zeptat", "modeNever": "Nikdy", @@ -247,15 +239,6 @@ "onboardingTitle": "Aktualizace aplikace", "onboardingBody": "Desktopová aplikace se nyní dokáže aktualizovat sama. Vyberte si, jak chcete, aby nové verze přicházely. Toto můžete později změnit v Nastavení, Aktualizace.", "onboardingManual": "Tato kopie aplikace byla nainstalována způsobem, který neumožňuje automatickou aktualizaci, takže Termix vás upozorní, když je k dispozici nová verze, a poskytne odkaz ke stažení.", - "status": "Verze {{version}}", - "statusIdle": "Ještě nekontrolováno", - "statusChecking": "Kontrola aktualizací", - "statusAvailable": "Je k dispozici verze {{version}}", - "statusDownloading": "Stahování {{version}} ({{progress}} %)", - "statusReady": "Verze {{version}} je připravena. Restartujte pro instalaci.", - "statusUpToDate": "Máte nejnovější verzi", - "statusError": "Nelze zkontrolovat aktualizace. Zkuste to později.", - "checkNow": "Zkontrolovat nyní", "download": "Stáhnout", "restart": "Restartovat nyní", "later": "Později", @@ -269,26 +252,11 @@ "terminal": "Terminál", "close": "Zavřít", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopírovat heslo", - "copySudoPassword": "Kopírovat sudo heslo", - "passwordCopied": "Heslo zkopírováno do schránky", - "failedToCopyPassword": "Kopírování hesla se nezdařilo", - "refreshTab": "Obnovit připojení", - "renameTab": "Přejmenovat kartu", "dashboard": "Přehled", "quickConnect": "Rychlé připojení", - "openAsTabHint": "Ctrl+klik nebo prostřední tlačítko myši pro otevření jako karty", - "openAsTab": "Otevřít jako kartu", - "openInRightDock": "Otevřít v pravém panelu", - "closeRightDock": "Zavřít pravý panel", - "toggleRightDock": "Přepnout pravý panel", "hosts": "Hostitelé", "credentials": "Přihlašovací údaje", "connections": "Připojení", - "keepSideMenuOpen": "Nechat menu otevřené", - "collapseSideMenu": "Sbalit menu", - "roleAdministrator": "Administrátor", - "roleUser": "Uživatel", "sync": "Synchronizace", "reconnectDisconnectedTerminals": "Znovu připojit všechny odpojené terminály", "reconnectingTerminals_one": "Znovu se připojuji k {{count}} terminálu", @@ -302,32 +270,13 @@ "reconnectTerminalsFailed_other": "Nelze zahájit opětovné připojení {{count}} terminálů", "fullscreenUnsupported": "Režim celé obrazovky není tímto prohlížečem podporován", "fullscreenFailed": "Nelze přepnout režim celé obrazovky", - "resetSidebarWidth": "Obnovit šířku", - "collapseSidebar": "Sbalit postranní panel", - "openSidebar": "Otevřít postranní panel", "confirmCloseHost": "Zavřít {{host}}?", - "enterFullscreen": "Přejít do režimu celé obrazovky (Ctrl+Shift+F)", - "exitFullscreen": "Ukončit režim celé obrazovky (Ctrl+Shift+F)", - "group": { - "objects": "Moje", - "tools": "Nástroje", - "system": "Systém" - }, - "searchEverything": "Hledat hostitele, karty a akce", - "search": "Hledat", "hiddenCount_one": "{{count}} skrytý", "hiddenCount_few": "{{count}} skryté", "hiddenCount_many": "{{count}} skrytých", "hiddenCount_other": "{{count}} skrytých", - "showInRail": "Zobrazit v postranním panelu", - "moveUp": "Posunout nahoru", - "moveDown": "Posunout dolů", - "resetRailOrder": "Obnovit pořadí", - "hideFromRail": "Skrýt z postranního panelu", - "openSettings": "Otevřít nastavení", "settings": "Nastavení", "manage": "Spravovat", - "mobileNavigation": "Navigace", "plugins": "Pluginy" }, "hosts": { @@ -943,35 +892,14 @@ "importSummary": "Import dokončen: {{imported}} importováno, {{updated}} aktualizováno, {{failed}} selhalo", "importHostsFailed": "Nepodařilo se importovat hostitele" }, - "commandPalette": { - "searchPlaceholder": "Hledat hostitele, příkazy nebo nastavení...", - "quickActions": "Rychlé akce", - "navigation": "Navigace", - "orShortcut": "nebo", - "addNewHost": "Přidat nový hostitel", - "adminSettings": "Nastavení správce", - "addCredential": "Přidat přihlašovací údaje", - "recentActivity": "Nedávná aktivita", - "serversAndHosts": "Servery a hostitelé", - "noHostsFound": "Nebyly nalezeny žádné hostitele odpovídající „{{search}}“", - "links": "Odkazy", - "navigate": "Navigace", - "select": "Vybrat", - "pluginActions": "Další akce", - "noTargetTab": "Není otevřen žádný terminálový záložka", - "documentation": "Dokumentace" - }, "splitScreen": { "title": "Rozdělená obrazovka", "defaultLabel": "Rozdělení {{number}}", "splitRight": "Rozdělit vpravo", "splitDown": "Rozdělit dolů", - "addToSplit": "Přidat do {{split}}", "paneEmptyItem": "Panel {{index}}: prázdný", "paneItem": "Panel {{index}}: {{label}}", "paneNumber": "Panel {{index}}", - "newPaneRight": "Nový panel vpravo", - "newPaneBelow": "Nový panel níže", "emptyTitle": "Prázdný panel", "emptyHint": "Vyberte, co se má zde zobrazit. Zatímco je tento panel vybrán, vše, co otevřete z postranního panelu, se otevře také zde.", "openTabs": "Otevřené záložky", @@ -988,7 +916,6 @@ "clearPane": "Vyprázdnit tento panel", "zoom": "Přiblížit panel", "unzoom": "Obnovit rozložení", - "unsplit": "Zrušit rozdělení", "layouts": "Rozložení", "applyLayout": "Změnit rozložení", "maxPanes_one": "Rozdělení může obsahovat až {{count}} panel", @@ -999,8 +926,6 @@ "dropHere": "Přetáhnout pro zobrazení zde", "paneActions": "Akce panelu", "dividerHint": "Tažením změňte velikost. Dvojklikem vyrovnejte.", - "openInSplit": "Otevřít v rozdělení", - "openInNewSplit": "Nové rozdělení s aktuální záložkou", "shortcuts": "Zkratky", "shortcutNavigate": "Přesunout mezi panely", "presets": { @@ -1014,23 +939,6 @@ "grid6": "Mřížka šesti" } }, - "connections": { - "noConnections": "Žádná připojení", - "noConnectionsDesc": "Otevřete terminál, správce souborů nebo vzdálenou plochu pro zobrazení připojení zde", - "connectedFor": "Připojeno po dobu {{duration}}", - "connected": "Připojeno", - "disconnected": "Odpojeno", - "reconnect": "Znovu připojit", - "sectionOpen": "Otevřené", - "sectionBackground": "Na pozadí", - "backgroundDesc": "Relace přetrvávají {{minutes}} minut po odpojení a lze se k nim znovu připojit.", - "expiresIn": "Vyprší za {{duration}}", - "search": "Hledat připojení...", - "noSearchResults": "Žádná připojení neodpovídají vašemu hledání", - "rename": "Přejmenovat relaci", - "forgetConfirm": "Ukončit relaci na pozadí pro {{name}}?", - "forget": "Ukončit relaci" - }, "sshAuth": { "totpRequired": "Vyžadováno dvoufázové ověřování", "totpCodeLabel": "Ověřovací kód", @@ -1168,65 +1076,14 @@ "placeholders": { "keyPassword": "heslo k klíči", "pastePrivateKey": "Sem vložte svůj soukromý klíč...", - "enterPassword": "Zadejte své heslo", - "apiKeyName": "např. CI Pipeline", - "credentialName": "např. Produkční SSH klíč", - "optionalDetails": "Volitelné podrobnosti...", - "sshUsername": "např. root nebo deploy", - "hostAddress": "10.0.0.1 nebo example.com", - "hostName": "např. Produkční webový server" + "enterPassword": "Zadejte své heslo" }, "dashboard": { - "title": "Přehled", - "github": "GitHub", - "reportBug": "Nahlásit chybu", - "discord": "Discord", - "docs": "Dokumentace", - "donate": "Přispět", - "serverOverview": "Přehled serveru", - "version": "Verze", "updateAvailable": "Dostupná aktualizace", - "beta": "Beta", - "uptime": "Doba běhu", - "database": "Databáze", - "healthy": "V pořádku", - "error": "Chyba", - "totalHosts": "Celkový počet hostitelů", - "totalCredentials": "Celkový počet přihlašovacích údajů", - "recentActivity": "Nedávná aktivita", - "reset": "Resetovat", - "noRecentActivity": "Žádná nedávná aktivita", - "quickActions": "Rychlé akce", - "addHost": "Přidat hostitele", - "addCredential": "Přidat přihlašovací údaje", - "adminSettings": "Nastavení administrátora", - "userProfile": "Profil uživatele", - "serverStats": "Statistiky serveru", - "customizeLayout": "Přizpůsobit přehled", - "justNow": "právě teď" + "beta": "Beta" }, "dashboardTab": { "stable": "STABILNÍ", - "registerNewServer": "Registrovat nový server", - "storeSshKeysOrPasswords": "Ukládat SSH klíče nebo hesla", - "manageUsersAndRoles": "Spravovat uživatele a role", - "manageYourAccount": "Spravovat svůj účet", - "hostStatus": "Stav hostitele", - "noHostsConfigured": "Nejsou nakonfigurováni žádní hostitelé", - "checking": "KONTROLUJE SE", - "commandPalette": "Paleta příkazů", - "done": "Hotovo", - "clear": "Vymazat", - "dragToResizeColumns": "Tažením změňte šířku sloupců", - "hostsAvailable": "Dostupné hosty", - "removeSection": "Odebrat sekci", - "addSection": "Přidat sekci", - "allSectionsShown": "Vše je již na ovládacím panelu.", - "fromPlugins": "Z pluginů", - "dropHere": "Sem přetáhněte sekci", - "dragToReorder": "Tažením přeuspořádejte sekce", - "clearActivityConfirm": "Vymazat vaši nedávnou aktivitu?", - "resetConfirm": "Obnovit ovládací panel na výchozí rozložení?", "onlineCount_one": "{{count}} online", "onlineCount_few": "{{count}} online", "onlineCount_many": "{{count}} online", @@ -1237,432 +1094,55 @@ "hostCount_other": "{{count}} hostů" }, "admin": { - "sectionGeneral": "Obecné", - "sectionUsers": "Uživatelé", - "sectionSessions": "Relace", - "sectionRoles": "Role", - "sectionDatabase": "Databáze", - "sectionApiKeys": "API klíče", - "sectionAuditLog": "Auditní protokol", - "sectionSsl": "HTTPS certifikát", - "sectionBranding": "White Label", - "brandingAppName": "Název aplikace", - "brandingAppNameDesc": "Zobrazuje se na přihlašovací obrazovce a v záložce prohlížeče. Nechte prázdné pro použití \"Termix\".", - "brandingTagline": "Slogan", - "brandingTaglineDesc": "Zobrazuje se pod názvem aplikace na přihlašovací obrazovce. Nechte prázdné pro použití výchozího slogana.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG nebo WEBP, maximálně 750 KB. Nahradí výchozí ikonu na přihlašovací obrazovce a v záložce prohlížeče.", - "brandingLogoUpload": "Nahrát logo", - "brandingLogoReset": "Obnovit na výchozí", - "brandingLogoInvalid": "Neplatný obrázek. Použijte soubor PNG, JPEG nebo WEBP o velikosti do 750 KB.", - "brandingSaved": "Nastavení branding uloženo", - "brandingSaveFailed": "Nepodařilo se uložit nastavení branding", - "sslDescription": "Certifikát, který Termix poskytuje přes HTTPS. Nahrajte vlastní zde, nebo si vyžádejte a obnovte certifikát od Let's Encrypt v sekci ACME Certifikáty.", - "sslDocsLink": "Zobrazit dokumentaci SSL", - "sslCertStatus": "Stav certifikátu", - "sslCertStatusNone": "Žádný certifikát", - "sslCertStatusValid": "Platný", - "sslCertStatusExpiring": "Brzy vyprší", - "sslCertStatusExpired": "Vypršel", - "sslCertExpiresAt": "Vyprší {{date}}", - "sslInfoNote": "Po vydání nebo nahrání certifikátu Termix automaticky povolí HTTPS na SSL_PORT (výchozí 8443) kromě stávajícího HTTP portu. Ujistěte se, že tento port je publikován/mapován na tento kontejner, aby byl dostupný.", - "sslManualCert": "Certifikát (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Soukromý klíč (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Vložte svůj stávající certifikát a soukromý klíč, včetně plného řetězce, pokud to vyžaduje váš CA.", - "sslManualUpload": "Nahrát a nainstalovat certifikát", - "sslManualUploadLoading": "Nahrávání certifikátu...", - "sslManualUploadSuccess": "Certifikát byl úspěšně nahrán a nainstalován", - "sslManualUploadFailed": "Nahrávání certifikátu selhalo", - "sslManualRequiresFields": "Certifikát a soukromý klíč jsou povinné", - "auditLogTotal": "{{total}} celkem záznamů", - "auditLogEmpty": "Nebyly nalezeny žádné záznamy auditního protokolu", - "auditLogSuccess": "Úspěch", - "auditLogFailed": "Selhání", - "auditLogClearFilters": "Vymazat filtry", - "auditLogPage": "Strana {{page}} z {{totalPages}} ({{total}} celkem)", - "auditLogIp": "IP", - "auditLogResourceId": "ID zdroje", - "auditLogFilterUser": "Uživatel", - "auditLogFilterAction": "Akce", - "auditLogFilterResourceType": "Typ zdroje", - "auditLogFilterStatus": "Stav", - "auditLogFilterFrom": "Od", - "auditLogFilterTo": "Do", - "auditLogFilterAll": "Vše", - "allowRegistration": "Povolit registraci uživatelů", - "allowRegistrationDesc": "Umožnit novým uživatelům registrovat se pomocí uživatelského jména a hesla", - "allowPasswordLogin": "Povolit přihlášení heslem", - "allowPasswordLoginDesc": "Přihlášení pomocí uživatelského jména a hesla", - "externalAutoProvision": "Automatické vytváření externích účtů", - "externalAutoProvisionDesc": "Vytvořit účet při prvním přihlášení prostřednictvím externí metody, jako je SSO nebo LDAP. Pokud je vypnuto, mohou se tímto způsobem přihlásit pouze uživatelé, kteří již mají účet.", - "secondFactorAfterExternalLogin": "Požadovat druhý faktor po externím přihlášení (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Pokud je vypnuto, druhý faktor se vyžaduje pouze po přihlášení heslem a jiných lokálních přihlášeních, stejně jako dříve. Pokud je zapnuto, vyžaduje se po každé metodě přihlášení, včetně SSO a LDAP.", - "allowPasswordReset": "Povolit obnovení hesla", - "allowPasswordResetDesc": "Obnovovací kód přes Docker logy", - "auditForwardingTitle": "Přeposílání do SIEM", - "auditForwardingDesc": "Odesílat kopii každého záznamu auditu do externího sběrníku ve formátu NDJSON. Lokální logy zůstávají primárním zdrojem pravdy.", - "auditForwardingEnvNotice": "Přeposílání lze nakonfigurovat také pomocí proměnné prostředí; URL uložená zde má přednost.", - "auditForwardingToken": "Bearer token (volitelné)", - "auditForwardingTokenStored": "Bearer token (uložený)", - "auditForwardingSaved": "Nastavení přeposílání auditu uloženo", - "auditForwardingSaveError": "Nepodařilo se uložit nastavení přeposílání auditu", - "sessionTimeout": "Časový limit relace", - "hours": "hodin", - "sessionTimeoutRange": "Min 1 h, max 720 h", - "monitoringDefaults": "Výchozí nastavení monitorování", - "statusCheck": "Kontrola stavu", - "sec": "s", - "logLevel": "Úroveň logování", "usersCount_one": "{{count}} uživatel", "usersCount_few": "{{count}} uživatelé", "usersCount_many": "{{count}} uživatelů", - "usersCount_other": "{{count}} uživatelů", - "searchUsers": "Hledat uživatele...", - "noUsers": "Žádní uživatelé", - "noUsersMatch": "Žádní uživatelé neodpovídají vašemu hledání", - "pageOf": "Strana {{page}} z {{total}}", - "createUser": "Vytvořit", - "newRole": "Nová role", - "roleName": "Název", - "roleDisplayName": "Zobrazovaný název", - "roleDescription": "Popis", "rolesCount_one": "{{count}} role", "rolesCount_few": "{{count}} role", "rolesCount_many": "{{count}} rolí", - "rolesCount_other": "{{count}} rolí", - "createRole": "Vytvořit", - "creating": "Vytváření...", - "exportDatabase": "Exportovat databázi", - "exportDatabaseDesc": "Stáhnout přenosnou zálohu SQLite všech hostitelů, přihlašovacích údajů a nastavení", - "export": "Exportovat", - "exporting": "Exportování...", - "importDatabase": "Importovat databázi", - "importDatabaseDesc": "Obnovit z přenosné zálohy .sqlite na jakémkoli backendu databáze", - "importDatabaseSelected": "Vybráno: {{name}}", - "selectFile": "Vybrat soubor", - "changeFile": "Změnit", - "import": "Importovat", - "importing": "Importování...", "apiKeysCount_one": "{{count}} klíč", "apiKeysCount_few": "{{count}} klíče", "apiKeysCount_many": "{{count}} klíčů", - "apiKeysCount_other": "{{count}} klíčů", - "apiKeysDocsLink": "Zobrazit dokumentaci", - "apiKeysCliHint": "Použijte API klíč s Termix CLI pro správu serverů z vašeho terminálu.", - "apiKeysCliLink": "Zobrazit dokumentaci CLI", - "newApiKey": "Nový API klíč", - "apiKeyCreatedWarning": "Klíč vytvořen – zkopírujte ho nyní, znovu se nezobrazí.", - "apiKeyName": "Název", - "apiKeyUser": "Uživatel", - "apiKeySelectUser": "Vyberte uživatele...", - "apiKeyExpiresAt": "Platnost do", - "createKey": "Vytvořit klíč", - "apiKeyNoExpiry": "Bez expirace", - "revokedBadge": "ZRUŠENO", - "authTypeDual": "Duální autentizace", - "authTypeExternal": "Externí", - "authTypeLocal": "Lokální", - "adminStatusAdministrator": "Administrátor", - "adminStatusRegularUser": "Běžný uživatel", - "adminBadge": "ADMIN", - "systemBadge": "SYS", - "customBadge": "VLASTNÍ", - "youBadge": "VY", "sessionsActive_one": "{{count}} aktivní", "sessionsActive_few": "{{count}} aktivní", "sessionsActive_many": "{{count}} aktivních", - "sessionsActive_other": "{{count}} aktivních", - "sessionActive": "Aktivní: {{time}}", - "sessionExpires": "Platnost: {{time}}", - "revokeAll": "Vše", - "revokeAllSessionsSuccess": "Všechny relace pro uživatele zrušeny", - "revokeAllSessionsFailed": "Nepodařilo se zrušit relace", - "revokeSessionFailed": "Nepodařilo se zrušit relaci", - "addRole": "Přidat roli", - "noCustomRoles": "Nejsou definovány žádné vlastní role", - "removeRoleFailed": "Nepodařilo se odstranit roli", - "assignRoleFailed": "Nepodařilo se přiřadit roli", - "userAdminAccess": "Administrátor", - "userAdminAccessDesc": "Plný přístup ke všem nastavením administrátora", - "userRoles": "Role", - "revokeAllUserSessions": "Zrušit všechny relace", - "revokeAllUserSessionsDesc": "Vynutit znovu přihlášení na všech zařízeních", - "revoke": "Zrušit", - "deleteUserWarning": "Smazání tohoto uživatele je trvalé.", - "deleteUser": "Smazat {{username}}", - "deleting": "Maže se...", - "deleteUserFailed": "Nepodařilo se smazat uživatele", - "deleteUserSuccess": "Uživatel \"{{username}}\" smazán", - "deleteRoleSuccess": "Role \"{{name}}\" smazána", - "revokeKeySuccess": "Klíč \"{{name}}\" zrušen", - "revokeKeyFailed": "Nepodařilo se zrušit klíč", - "copiedToClipboard": "Zkopírováno do schránky", - "done": "Hotovo", - "createUserTitle": "Vytvořit uživatele", - "createUserDesc": "Vytvořit nový lokální účet.", - "createUserUsername": "Uživatelské jméno", - "createUserPassword": "Heslo", - "createUserPasswordHint": "Minimálně 6 znaků.", - "createUserEnterUsername": "Zadejte uživatelské jméno", - "createUserSubmit": "Vytvořit uživatele", - "editUserTitle": "Spravovat uživatele: {{username}}", - "editUserDesc": "Upravit role, status administrátora, relace a nastavení účtu.", - "editUserUsername": "Uživatelské jméno", - "editUserAuthType": "Typ autentizace", - "editUserAdminStatus": "Status administrátora", - "editUserUserId": "ID uživatele", - "linkAccountTitle": "Propojit účty", - "linkAccountDesc": "Sloučit externí účet {{username}} s existujícím lokálním účtem.", - "linkAccountDescLocal": "Propojit lokální účet {{username}} s existujícím pouze externím účtem.", - "linkAccountWarningTitle": "Toto provede:", - "linkAccountEffect1": "Smazat účet pouze s externím přihlášením", - "linkAccountEffect2": "Přidat jeho externí přihlášení k cílovému účtu", - "linkAccountEffect3": "Povolit přihlášení pomocí externího poskytovatele i hesla", - "linkAccountTargetUsername": "Uživatelské jméno místního účtu", - "linkAccountTargetPlaceholder": "Zadejte uživatelské jméno místního účtu, ke kterému chcete propojit", - "linkAccountExternalUsername": "Uživatelské jméno externího účtu", - "linkAccountExternalPlaceholder": "Zadejte uživatelské jméno účtu pouze s externím přihlášením, který chcete sloučit", - "linkAccountExternalNotFound": "Nebyl nalezen žádný účet pouze s externím přihlášením s tímto uživatelským jménem", - "linkAccounts": "Propojit účty", - "linkAccountSuccess": "Účty byly úspěšně propojeny", - "linkAccountFailed": "Propojení účtů selhalo", - "linkAccountInProgress": "Propojuji...", - "unlinkAccountTitle": "Odpojit externí přihlášení", - "unlinkAccountDesc": "Odebrat externí přihlášení z účtu {{username}}. Uživatel se bude moci přihlásit pouze pomocí hesla.", - "unlinkAccountWarning": "Tímto krokem se z tohoto účtu odstraní externí přihlášení. Uživatel musí mít nastavené heslo, aby se mohl nadále přihlašovat.", - "unlinkAccount": "Odpojit externí přihlášení", - "unlinkAccountInProgress": "Odpojuji...", - "unlinkAccountSuccess": "Externí přihlášení bylo odpojeno", - "unlinkAccountFailed": "Odpojení externího přihlášení selhalo", - "updateRegistrationFailed": "Aktualizace nastavení registrace selhala", - "updatePasswordLoginFailed": "Aktualizace nastavení přihlášení heslem selhala", - "updateSecondFactorAfterExternalLoginFailed": "Aktualizace nastavení druhého faktoru selhala", - "updatePasswordResetFailed": "Aktualizace nastavení obnovení hesla selhala", - "sessionTimeoutRange2": "Časový limit relace musí být mezi 1 a 720 hodinami", - "sessionTimeoutSaved": "Časový limit relace byl uložen", - "sessionTimeoutSaveFailed": "Uložení časového limitu relace selhalo", - "monitoringIntervalInvalid": "Neplatné hodnoty intervalu", - "monitoringSaved": "Nastavení monitorování bylo uloženo", - "monitoringSaveFailed": "Uložení nastavení monitorování selhalo", - "logLevelUpdateFailed": "Aktualizace úrovně logování selhala", - "createUserRequired": "Uživatelské jméno a heslo jsou povinné", - "createUserPasswordTooShort": "Heslo musí mít alespoň 6 znaků", - "createUserSuccess": "Uživatel „{{username}}“ byl vytvořen", - "createUserFailed": "Vytvoření uživatele selhalo", - "updateAdminStatusFailed": "Aktualizace stavu administrátora selhala", - "allSessionsRevoked": "Všechny relace byly zrušeny", - "revokeSessionsFailed": "Zrušení relací selhalo", - "manageUserData": "Správa uživatelských dat", - "backToUsers": "Zpět na uživatele", - "manageTabAccount": "Účet", - "manageTabHosts": "Hostitelé", - "manageTabCredentials": "Přihlašovací údaje", - "manageTabSessions": "Relace", - "manageTabDanger": "Nebezpečí", - "manageEditorBack": "Zpět na data uživatele {{username}}", - "dataLockedBadge": "UZAMČENO", - "dataLockedNotice": "Data uživatele {{username}} zůstanou zamčená do jeho dalšího přihlášení. Jeho hostitelé, přihlašovací údaje a úryvky nelze do té doby zobrazit ani upravit.", - "resetPasswordTitle": "Obnovit heslo", - "resetPasswordExternalOnly": "Tento uživatel se přihlašuje prostřednictvím externího poskytovatele a nemá nastavené heslo.", - "resetPasswordPlaceholder": "Nové heslo", - "resetPasswordBtn": "Obnovit", - "resetPasswordWorking": "Obnovuji...", - "resetPasswordSuccess": "Heslo bylo obnoveno", - "resetPasswordSuccessWiped": "Heslo bylo obnoveno. Šifrovaná data uživatele byla smazána.", - "resetPasswordFailed": "Obnovení hesla selhalo", - "resetPasswordConfirmWipe": "Uživatel {{username}} se nepřihlásil od aktualizace šifrování, takže jeho data nelze obnovit. Obnovení nyní smaže jeho hostitele, přihlašovací údaje a úryvky. Pokračovat?", - "manageApiKeys": "Klíče API", - "apiKeyNamePlaceholder": "Název klíče", - "apiKeyCopyNotice": "Zkopírujte tento klíč nyní, znovu se nezobrazí.", - "noApiKeysForUser": "Žádné API klíče", - "apiKeyDeleteFailed": "Nepodařilo se smazat API klíč", - "exportUserData": "Export dat", - "exportUserDataDesc": "Stáhněte si hostitele, přihlašovací údaje a data správce souborů tohoto uživatele ve formátu JSON. Tajné údaje jsou dešifrovány.", - "exportUserDataSuccess": "Uživatelská data exportována", - "exportUserDataFailed": "Nepodařilo se exportovat uživatelská data", "hostsCount_one": "{{count}} host", "hostsCount_few": "{{count}} hosté", "hostsCount_many": "{{count}} hostů", "hostsCount_other": "{{count}} hostů", - "addHostForUser": "Přidat hostitele", - "noHostsForUser": "Tento uživatel nemá žádné hostitele", - "connectToHost": "Připojit", - "deleteHostConfirm": "Smazat hostitele „{{name}}“ patřící uživateli {{username}}?", - "hostDeletedSuccess": "Hostitel smazán", - "hostDeleteFailed": "Nepodařilo se smazat hostitele", "credentialsCount_one": "{{count}} přihlašovací údaje", "credentialsCount_few": "{{count}} přihlašovací údaje", "credentialsCount_many": "{{count}} přihlašovacích údajů", "credentialsCount_other": "{{count}} přihlašovacích údajů", - "addCredentialForUser": "Přidat přihlašovací údaje", - "noCredentialsForUser": "Tento uživatel nemá žádné přihlašovací údaje", - "deleteCredentialConfirm": "Smazat přihlašovací údaje „{{name}}“ patřící uživateli {{username}}?", - "credentialDeletedSuccess": "Přihlašovací údaje smazány", - "credentialDeleteFailed": "Nepodařilo se smazat přihlašovací údaje", - "noSessionsForUser": "Žádné aktivní relace", - "deleteSuccessorLabel": "Převést hostitele a přihlašovací údaje na", - "deleteSuccessorMe": "Mě (mažící správce)", - "deleteSuccessorNone": "Nikoho, smazat je", - "deleteSuccessorDesc": "Vše, co tento uživatel sdílel, bude nadále fungovat pod novým vlastníkem; výběr nikoho odstraní jeho hostitele, přihlašovací údaje a sdílené položky.", - "deleteUserDangerDesc": "Trvale smazat uživatele {{username}} a všechna jeho data (hostitele, přihlašovací údaje, úryvky, historii). Tuto akci nelze vrátit zpět.", - "deleteUserConfirm": "Trvale smazat uživatele {{username}} a všechna jeho data?", - "deleteUserAdminBlocked": "Před smazáním tohoto uživatele odeberte status správce.", - "createRoleRequired": "Je vyžadován název a zobrazovaný název", - "createRoleSuccess": "Role „{{name}}“ vytvořena", - "createRoleFailed": "Nepodařilo se vytvořit roli", - "apiKeyNameRequired": "Je vyžadován název klíče", - "apiKeyUserRequired": "Je vyžadováno ID uživatele", - "apiKeyCreatedSuccess": "API klíč „{{name}}“ vytvořen", - "apiKeyCreateFailed": "Nepodařilo se vytvořit API klíč", - "exportSuccess": "Databáze úspěšně exportována", - "exportFailed": "Export databáze selhal", - "importSelectFile": "Nejprve vyberte soubor", - "importCompleted": "Import dokončen: {{total}} položek importováno, {{skipped}} přeskočeno", - "importFailed": "Import selhal: {{error}}", - "importError": "Import databáze selhal", - "sectionHostDefaults": "Výchozí nastavení hostitelů", "rolePermissions": { "count_one": "{{count}} oprávnění", "count_few": "{{count}} oprávnění", "count_many": "{{count}} oprávnění", - "count_other": "{{count}} oprávnění", - "editAction": "Upravit oprávnění", - "loadError": "Nepodařilo se načíst katalog oprávnění", - "saved": "Oprávnění role uložena", - "saveError": "Nepodařilo se uložit oprávnění role", - "save": "Uložit", - "saving": "Ukládání...", - "pluginDisabled": "Plugin zakázán", "groups": { "hosts": "Hostitelé", "credentials": "Přihlašovací údaje", "admin": "Správa" } - }, - "notificationPrivateEndpoints": "Povolené soukromé hostitele pro oznámení", - "notificationPrivateEndpointsDesc": "Přesné soukromé hostitele, které mohou kanály pro oznámení kontaktovat. Oddělte je čárkami.", - "updateNotificationEndpointsFailed": "Nepodařilo se aktualizovat seznam povolených koncových bodů pro oznámení", - "secondFactorsSectionTitle": "Druhé faktory", - "secondFactorsNone": "Žádné druhé faktory nejsou zaregistrovány", - "secondFactorUnavailable": "Nedostupné", - "resetSecondFactors": "Resetovat druhé faktory", - "resetSecondFactorsConfirm": "Odebrat všechny druhé faktory pro uživatele {{username}}? Může se přihlásit pomocí hesla nebo SSO a znovu je zaregistrovat.", - "secondFactorsResetSuccess": "Druhé faktory resetovány", - "secondFactorsResetFailed": "Resetování druhých faktorů selhalo", - "passwordLoginForced": "Přihlašování heslem je vypnuto, ale žádná jiná metoda přihlášení není povolena, takže zatím zůstává zapnuté. Nikdo se nezamkne.", - "sslNotRenewed": "Tento certifikát se automaticky obnovuje. Vyprší {{date}}. Zapněte automatickou obnovu v sekci ACME Certifikáty nebo nahrajte nový certifikát před touto datem.", - "sslSelfSigned": "Self-signed certifikát vygenerovaný Termixem. Prohlížeče budou upozorňovat na nebezpečí.", - "sslRenewedBy": "Automaticky obnoven pluginem {{plugin}}", - "sslIssuer": "Vydáno {{issuer}}", - "sslNames": "Pokrývá {{names}}", - "sslManualTitle": "Nahrát certifikát", - "updateExternalAutoProvisionFailed": "Aktualizace nastavení automatického vytváření selhala", - "hostTags": "Předdefinované štítky hostitelů", - "hostTagsDesc": "Štítky, které vidí každý uživatel jako návrhy v editoru hostitele. Stiskněte Mezerník nebo Enter pro přidání. Odstranění štítku zde neodstraní štítek z hostitelů.", - "hostTagsError": "Nelze načíst nebo uložit návrhy štítků hostitelů.", - "revokeAllSessionsConfirm": "Odhlásit uživatele {{username}} všude?", - "revokeSessionConfirm": "Odhlásit tuto relaci?", - "revokeSession": "Odhlásit", - "deleteRoleConfirm": "Smazat roli {{name}}?", - "revokeKeyConfirm": "Zrušit API klíč {{name}}?", - "revokeKey": "Zrušit" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Kam", - "who": "Kdo", - "hostLabel": "Hostitel", - "hostPlaceholder": "192.168.1.1 nebo example.com", - "portLabel": "Port", - "usernameLabel": "Uživatelské jméno", - "usernamePlaceholder": "uzivatel", - "authLabel": "Ověření", - "passwordLabel": "Heslo", - "passwordPlaceholder": "heslo", - "privateKeyLabel": "Soukromý klíč", - "privateKeyPlaceholder": "Vložit soukromý klíč...", - "credentialLabel": "Přihlašovací údaje", - "credentialPlaceholder": "Vyberte uložené přihlašovací údaje", - "protocolLabel": "Protokol", - "domainLabel": "Doména", - "domainPlaceholder": "volitelné", - "connectToAction": "Připojit se k {{name}}", - "sshProtocol": "SSH", - "noTarget": "Nic nainstalovaného se nemůže připojit k tomuto typu hostitele" + "usernameLabel": "Uživatelské jméno" }, "keybindings": { - "description": "Přiřaďte klávesy akcím v terminálu a aplikaci, nebo změňte vestavěné zkratky.", - "defaultsHeading": "Vestavěné zkratky", - "fixedHeading": "Zkratky aplikace", - "fixed": { - "splitRight": "Rozdělit vpravo", - "splitDown": "Rozdělit dolů", - "zoomPane": "Přiblížit vybraný panel", - "navigatePane": "Přesunout mezi panely", - "nextTab": "Další karta", - "previousTab": "Předchozí karta", - "jumpTab": "Přejít na kartu", - "previousView": "Zpět na předchozí zobrazení postranního panelu", - "fullscreen": "Přepnout na celou obrazovku" - }, - "customHeading": "Vlastní zkratky", - "addBinding": "Přidat zkratku", - "addBindingTitle": "Přidat zkratku", - "editBindingTitle": "Upravit zkratku", - "loading": "Načítání...", - "noCustomBindings": "Zatím žádné vlastní zkratky", - "defaultBadge": "Výchozí", - "customizedBadge": "Přizpůsobeno", - "customize": "Přizpůsobit", - "resetToDefault": "Obnovit výchozí", - "resetAllToDefaults": "Obnovit vše na výchozí", - "cancel": "Zrušit", - "saveBinding": "Uložit zkratku", - "saveError": "Nepodařilo se uložit klávesové zkratky", - "pressKeysToRecord": "Kombinace kláves", - "pressKeysPlaceholder": "Klikněte a stiskněte klávesy", - "recording": "Stiskněte klávesy...", - "comboRequiredError": "Nejprve stiskněte kombinaci kláves", - "conflictWarning": "Tato kombinace je již přiřazena k {{combo}}. Uložením se spustí obě akce.", - "actionLabel": "Akce", "actionNextTab": "Přepnout na další kartu", "actionPreviousTab": "Přepnout na předchozí kartu", "actionOpenCommandPalette": "Otevřít rychlé vyhledávání", - "actionReconnectSession": "Znovu připojit aktuální relaci", - "unavailableAction": "{{type}} (není dostupné)", - "actionRequiredError": "Nejprve vyberte akci", - "deleteConfirm": "Smazat toto přiřazení kláves?", - "resetAllConfirm": "Obnovit všechna přiřazení kláves na výchozí?" + "actionReconnectSession": "Znovu připojit aktuální relaci" }, "userProfile": { - "storageModeLocal": "Prohlížeč", - "storageModeCloud": "Databáze", - "storageModeDescription": "Prohlížeč ukládá nastavení pouze v tomto prohlížeči. Databáze synchronizuje data se serverem a načte se na jakémkoli zařízení.", - "resetToDefaults": "Obnovit výchozí nastavení", - "resetToDefaultsSuccess": "Nastavení obnoveno na výchozí hodnoty.", - "storageModeSwitch": "Ukládání preferencí", - "sectionAccount": "Účet", - "desktopProfileTitle": "Pouze toto zařízení", - "desktopProfileDescription": "Tento profil existuje pouze na tomto zařízení a přihlašuje se samostatně. Propojte jej se serverem Termix, abyste mohli používat stejné hostitele a nastavení na všech zařízeních.", - "sectionInterface": "Rozhraní", - "interfacePresetDesc": "Jak mnoho detailů Termix zobrazuje. Všechny funkce zůstávají dostupné.", "preset_simple": "Jednoduché", "preset_simple_desc": "Pouze základní prvky.", "preset_balanced": "Vyvážené", "preset_balanced_desc": "Standardní rozložení.", "preset_advanced": "Pokročilé", "preset_advanced_desc": "Vše zapnuto, hustě uspořádané.", - "presetClearOverrides": "Obnovit vše", - "presetOverridesTitle": "Přizpůsobeno", - "presetRevertArea": "Vrátit", - "presetConfirmTitle": "Přepnout na {{preset}}?", - "presetConfirmDesc": "Tím se obnoví vaše postranní panel, navigace, rozložení dashboardu, lišta terminálu a zobrazení správce souborů. Vaši hostitelé, přihlašovací údaje a domovská stránka zůstanou nedotčeny.", - "presetConfirmApply": "Použít předvolbu", - "runSetupAgainDesc": "Projít znovu průvodcem prvním spuštěním.", - "runSetupAgainButton": "Spustit nastavení", "uiArea_chrome": "Rám aplikace", "uiArea_hostList": "Seznam hostitelů", "uiArea_credentialList": "Seznam přihlašovacích údajů", @@ -1671,128 +1151,15 @@ "uiArea_terminal": "Terminál", "uiArea_fileManager": "Správce souborů", "uiArea_hostEditor": "Editor hostitele", - "sectionAppearance": "Vzhled", - "sectionSecurity": "Zabezpečení", - "sectionApiKeys": "API klíče", - "sectionData": "Data", - "usernameLabel": "Uživatelské jméno", - "roleLabel": "Role", - "roleAdministrator": "Administrátor", - "authMethodLabel": "Metoda ověření", - "authMethodLocal": "Místní", - "twoFaLabel": "2FA", - "twoFaOn": "Zapnuto", - "twoFaOff": "Vypnuto", - "versionLabel": "Verze", - "cliTitle": "Termix CLI", - "cliDescription": "Otevírejte terminály, spouštějte příkazy a přesouvejte soubory přímo z vašeho shellu.", - "cliLearnMore": "Zjistit více", - "deleteAccount": "Smazat účet", - "deleteAccountDescription": "Trvale smazat váš účet", - "deleteButton": "Smazat", - "deleteAccountPermanent": "Tato akce je trvalá a nelze ji vrátit zpět.", - "deleteAccountWarning": "Všechny relace, hostitelé, přihlašovací údaje a nastavení budou trvale smazány.", - "confirmPasswordDeletePlaceholder": "Pro potvrzení zadejte své heslo", "languageLabel": "Jazyk", "themeLabel": "Motiv", "fontSizeLabel": "Velikost písma", "interfaceFontLabel": "Písmo rozhraní", "interfaceFontDescription": "Změní písmo uživatelského rozhraní aplikace. Profily terminálu si zachovávají vlastní nastavení písma.", "accentColorLabel": "Akcentová barva", - "keyboardShortcuts": "Klávesové zkratky", - "keyboardShortcutsDescription": "Přizpůsobte zkratky pro kopírování, vkládání a příkazy v terminálu", - "manageShortcuts": "Spravovat", - "commandPalette": "Paleta příkazů", - "commandPaletteDesc": "Povolit klávesovou zkratku", - "reopenTabsOnLogin": "Obnovit karty po přihlášení", - "reopenTabsOnLoginDesc": "Obnoví vaše otevřené karty při přihlášení nebo obnovení stránky, i z jiného zařízení", - "confirmTabClose": "Potvrdit uzavření karty", - "confirmTabCloseDesc": "Zeptat se před uzavřením karet terminálu", - "showTabNumbers": "Zobrazit čísla karet", - "showTabNumbersDesc": "Zobrazí číslo na každé kartě pro lepší rozlišení", - "settingsAppRail": "Panel aplikací", - "sidebarSettingsMoved": "Nastavení zobrazení postranního panelu hostitelů bylo přesunuto do panelu Přizpůsobit postranní panel, který se otevře z lišty Hostitelé.", - "showHostTags": "Zobrazit štítky hostitelů", - "showHostTagsDesc": "Zobrazit štítky v seznamu hostitelů", - "statusColors": "Skutečné barvy stavu", - "statusColorsDesc": "Použít zelenou/červenou pro stav online/offline místo akcentové barvy", - "pinAppRail": "Připnout panel aplikací", - "pinAppRailDesc": "Nechat levý postranní panel aplikací vždy rozbalený místo rozbalení při najetí myší", - "expandAppRailOnHover": "Rozbalit panel aplikací při najetí myší", - "expandAppRailOnHoverDesc": "Povolit rozbalení levého postranního panelu aplikací při najetí ukazatelem", - "appRailHoverPushesContent": "Posunout obsah při rozbalení", - "appRailHoverPushesContentDesc": "Uvolnit místo pro rozbalený panel místo překrytí stránky. Otevřené relace, jako je vzdálená plocha, se při každém rozbalení přizpůsobí velikosti.", - "showPinAppRailButton": "Zobrazit tlačítko pro připnutí panelu aplikací", - "showPinAppRailButtonDesc": "Zobrazí tlačítko v panelu aplikací pro jeho připnutí. Ve výchozím nastavení vypnuto.", - "settingsNavigation": "Navigace", - "navigationTabsDesc": "Vyberte, které karty se zobrazí v panelu aplikací", - "settingsUpdates": "Aktualizace", - "disableUpdateChecks": "Zakázat kontrolu aktualizací", - "disableUpdateChecksDesc": "Přestat kontrolovat aktualizace", - "changePassword": "Změnit heslo", - "currentPasswordLabel": "Aktuální heslo", - "currentPasswordPlaceholder": "Aktuální heslo", - "newPasswordLabel": "Nové heslo", - "newPasswordPlaceholder": "Nové heslo", - "confirmPasswordLabel": "Potvrdit nové heslo", - "confirmPasswordPlaceholder": "Potvrdit nové heslo", - "updatePassword": "Aktualizovat heslo", - "createApiKeyTitle": "Vytvořit API klíč", - "createApiKeyDescription": "Vygenerovat nový API klíč pro programový přístup.", - "apiKeyNameLabel": "Název", - "apiKeyNamePlaceholder": "např. CI Pipeline", - "expiryDateLabel": "Datum vypršení platnosti", - "optional": "volitelné", - "cancel": "Zrušit", - "createKey": "Vytvořit klíč", - "apiKeyCreatedWarning": "Klíč byl vytvořen – zkopírujte jej nyní, již se nezobrazí znovu.", - "copyApiKey": "Kopírovat API klíč", - "copiedToClipboard": "Zkopírováno do schránky", "apiKeyCount_one": "{{count}} klíč", "apiKeyCount_few": "{{count}} klíče", "apiKeyCount_many": "{{count}} klíčů", - "apiKeyCount_other": "{{count}} klíčů", - "newKey": "Nový klíč", - "noApiKeys": "Zatím žádné API klíče.", - "apiKeyActive": "Aktivní", - "apiKeyUsageHint": "Zahrňte svůj klíč do hlavičky", - "apiKeyUsageHintHeader": "hlavičky.", - "apiKeyPermissionsHint": "Klíče zdědují oprávnění uživatele, který je vytvořil.", - "exportData": "Exportovat moje data", - "exportDataDesc": "Stáhněte si zálohu svých hostitelů, přihlašovacích údajů a nastavení pro přenos na jiné zařízení", - "export": "Exportovat", - "exporting": "Exportuje se...", - "importData": "Importovat moje data", - "importDataDesc": "Obnovte své hostitele, přihlašovací údaje a nastavení ze záložního souboru .sqlite", - "importDataSelected": "Vybráno: {{name}}", - "selectFile": "Vybrat soubor", - "changeFile": "Změnit", - "import": "Importovat", - "importing": "Importuje se...", - "exportSuccess": "Data byla úspěšně exportována", - "exportFailed": "Export dat selhal", - "importSelectFile": "Nejprve vyberte soubor", - "importCompleted": "Import dokončen: {{total}} položek importováno, {{skipped}} přeskočeno", - "importFailed": "Import selhal: {{error}}", - "roleUser": "Uživatel", - "authMethodDual": "Duální ověřování", - "authMethodExternal": "Externí", - "done": "Hotovo", - "apiKeyNameRequired": "Název klíče je povinný", - "apiKeyCreated": "API klíč „{{name}}“ byl vytvořen", - "apiKeyCreateFailed": "Vytvoření API klíče selhalo", - "apiKeyUser": "Uživatel", - "apiKeyExpires": "Vyprší", - "apiKeyRevoked": "API klíč „{{name}}“ byl zrušen", - "apiKeyRevokeFailed": "Zrušení API klíče selhalo", - "passwordFieldsRequired": "Je vyžadováno současné i nové heslo", - "passwordMismatch": "Hesla se neshodují", - "passwordTooShort": "Heslo musí mít alespoň 6 znaků", - "passwordUpdated": "Heslo bylo úspěšně aktualizováno", - "passwordUpdateFailed": "Aktualizace hesla selhala", - "deletePasswordRequired": "Pro smazání účtu je vyžadováno heslo", - "deleteFailed": "Smazání účtu selhalo", - "deleting": "Maže se...", "colorPickerTooltip": "Otevřít výběr barev", "themeSystem": "Systém", "themeLight": "Světlý", @@ -1803,18 +1170,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Přihlášeno k {{server}}", - "linkedProfileDescription": "Toto zařízení používá váš účet na serveru a udržuje kopii vašich dat, takže funguje i offline.", - "manageSync": "Spravovat synchronizaci", - "setUpSync": "Propojit se serverem", - "settingsTabsAndShortcuts": "Záložky a zkratky", - "onBetaTitle": "Používáte beta verzi", - "onBetaDescription": "Děkujeme za testování. Dejte nám vědět, co nefunguje.", - "tryBetaTitle": "Vyzkoušejte nové funkce dříve", - "tryBetaDescription": "Přidejte se k beta programu v sekci Aktualizace.", - "sendBetaFeedback": "Odeslat zpětnou vazbu k beta verzi", - "openUpdates": "Aktualizace" + "themeGruvbox": "Gruvbox" } } }, @@ -2091,8 +1447,7 @@ "hasDependents": "{{name}} je potřeba pro {{list}}. Nejprve je vypněte nebo odinstalujte.", "missingDependencies": "{{name}} potřebuje {{list}}, který není nainstalován.", "consentChanged": "Požadavky tohoto pluginu se od vašeho posledního zobrazení změnily. Zkontrolujte seznam znovu.", - "upload": "Nelze přečíst {{name}}: {{error}}", - "developerMode": "Nelze změnit režim vývojáře: {{error}}" + "upload": "Nelze přečíst {{name}}: {{error}}" }, "data": { "title": "Uložená data", @@ -2231,13 +1586,7 @@ "browsePlugins": "Procházet pluginy", "loading": "Načítání", "developer": { - "title": "Režim vývojáře pluginů", - "hint": "Umožňuje administrátorům instalovat pluginy ze souboru .tmxplug ve záložce Pluginy bez kontroly registru. Použijte jej k vytváření a testování vlastních pluginů.", - "enableTitle": "Zapnout režim vývojáře?", - "enableBody": "Administrátoři budou moci instalovat pluginy ze souborů, které Termix nekontroloval. Plugin může dělat cokoliv, co mu jeho možnosti umožňují, takže tuto možnost zapínejte pouze při vývoji nebo testování pluginů.", - "enable": "Zapnout", - "installFromFile": "Instalovat ze souboru", - "signedOnly": "Je nastavena proměnná TERMIX_REQUIRE_SIGNED_PLUGINS, takže instalace ze souboru zůstává blokována." + "installFromFile": "Instalovat ze souboru" }, "count": { "downloads_one": "{{formatted}} stažení", @@ -2277,71 +1626,7 @@ "secretSet": "Nastaveno", "secretNotSet": "Nenastaveno", "secretReplace": "Nahradit", - "pluginSettingsSaved": "Nastavení uloženo", - "pluginSettingsInvalid": "Některá nastavení se nepodařilo uložit. Zkontrolujte zvýrazněná pole.", - "pluginSettingsSaveFailed": "Nepodařilo se uložit nastavení", - "pluginSettingsLoadFailed": "Nepodařilo se načíst nastavení", - "featureUnavailable": "Funkce {{name}} není právě dostupná. Tato nastavení jsou uložena, ale nebudou mít žádný efekt.", - "account": "Účet", - "security": "Zabezpečení", - "apiKeys": "API klíče", - "data": "Data a synchronizace", - "interface": "Rozhraní", - "appearance": "Vzhled", - "keybindings": "Klávesové zkratky", - "adminGeneral": "Obecné", - "adminUsers": "Uživatelé", - "adminSessions": "Relace", - "adminRoles": "Role", - "adminHostDefaults": "Výchozí nastavení hostitelů", - "adminBranding": "Značka", - "adminDatabase": "Databáze", - "adminSsl": "SSL", - "adminApiKeys": "API klíče", - "adminAuditLog": "Auditní protokol", - "bandYou": "Váš účet", - "bandApp": "Tato aplikace", - "bandPlugins": "Pluginy", - "bandInstance": "Tento server", - "searchPlaceholder": "Hledat v nastavení", - "noResults": "Žádné nastavení neodpovídá.", - "pages": "Stránky", - "instanceSettings": "Nastavení serveru", - "nothingHere": "Zde není co nastavovat.", - "searchPage": "Hledat na této stránce", - "noPageMatches": "Na této stránce nic neodpovídá.", - "updates": { - "title": "Aktualizace", - "betaProgram": "Beta program", - "betaIntro": "Bety jsou rané sestavy další verze Termixu. Vycházejí ve středy a v pátky, když je něco nového k vyzkoušení. Mohou obsahovat chyby a vaši zpětná vazba pomáhá zlepšit stabilní verzi.", - "termixBetas": "Termix bety", - "termixBetasHint": "Informuj mě o nových betách, nejen o stabilních verzích.", - "runningBetaBuild": "Používáte beta sestavu. Pro návrat přepněte zpět na stabilní obraz nebo instalační program.", - "howToInstall": "Jak získat betu", - "desktopInstall": "Stáhněte si instalační program bety a nainstalujte jej přes tuto verzi.", - "downloadBeta": "Stáhnout {{version}}", - "dockerInstall": "Změňte svůj obraz na beta tag a restartujte kontejner:", - "copy": "Kopírovat", - "copied": "Zkopírováno", - "copyFailed": "Nelze zkopírovat", - "learnMore": "Zjistit více o betách", - "feedback": "Zpětná vazba", - "feedbackHint": "Našli jste chybu nebo máte nápad? Přejde přímo vývojářům s vyplněnou vaší verzí.", - "sendFeedback": "Odeslat zpětnou vazbu k betě", - "releases": "Verze", - "thisVersion": "Tato verze", - "newestStable": "Nejnovější stabilní", - "newestBeta": "Nejnovější beta", - "noRelease": "Právě žádná", - "pluginBetas": "Bety pluginů", - "pluginBetasIntro": "Každý plugin může používat bety samostatně. Pro vyzkoušení jej otevřete a stiskněte Zkusit betu.", - "openPlugins": "Otevřít pluginy", - "waitingForStable": "Zpět na stabilní. Zůstává na {{version}}, dokud není stabilní verze novější.", - "backToStable": "Zpět na stabilní", - "allPluginsBeta": "Používat bety pro všechny pluginy", - "allPluginsStable": "Všechny pluginy zpět na stabilní", - "saveFailed": "Nelze uložit změnu" - } + "featureUnavailable": "Funkce {{name}} není právě dostupná. Tato nastavení jsou uložena, ale nebudou mít žádný efekt." }, "managerCard": { "refresh": "Obnovit", @@ -2351,11 +1636,6 @@ "filter": "Filtrovat..." }, "sync": { - "server": "Termix server", - "account": "Účet", - "status": "Stav", - "never": "nikdy", - "justNow": "právě teď", "minutesAgo_one": "před {{count}} minutou", "minutesAgo_few": "před {{count}} minutami", "minutesAgo_many": "před {{count}} minutami", @@ -2364,76 +1644,11 @@ "hoursAgo_few": "před {{count}} hodinami", "hoursAgo_many": "před {{count}} hodinami", "hoursAgo_other": "před {{count}} hodinami", - "actionFailed": "To nefungovalo. Zkuste to znovu.", - "unlinkedTitle": "Pouze toto zařízení", - "unlinkedBody": "Termix funguje na tomto zařízení samostatně. Propojte jej se svým Termix serverem pro udržení synchronizace.", - "unlinkedPointHosts": "Vaši hostitelé, přihlašovací údaje, úryvky a nastavení vás následují na každém zařízení.", - "unlinkedPointOffline": "Vše stále funguje, když nelze dosáhnout serveru, a později se synchronizuje.", - "unlinkedPointAccount": "Přihlašujete se svým serverovým účtem a hostitelé, které s vámi sdíleli ostatní, se také zobrazí zde.", - "linkButton": "Propojit se serverem", - "state": { - "syncing": "Synchronizace", - "offline": "Server nedostupný", - "error": "Synchronizace zastavena", - "signedOut": "Odhlášeno", - "synced": "Synchronizováno {{time}}" - }, "pending_one": "{{count}} změna čeká na synchronizaci", "pending_few": "{{count}} změny čekají na synchronizaci", "pending_many": "{{count}} změn čeká na synchronizaci", "pending_other": "{{count}} změn čeká na synchronizaci", - "signInAgain": "Přihlásit se znovu", - "syncNow": "Synchronizovat nyní", - "unlink": "Odpojit", - "unlinked": "Toto zařízení již není propojeno", - "unlinkTitle": "Odkázat toto zařízení?", - "unlinkDescription": "Tím se zastaví synchronizace a odhlásíte se ze serveru. Hostitelé, které vám sdíleli ostatní, budou z tohoto zařízení v každém případě odstraněni.", - "unlinkKeepTitle": "Zachovat si data zde", - "unlinkKeepBody": "Vaši hostitelé, přihlašovací údaje a nastavení zůstanou na tomto zařízení a budou nadále fungovat nezávisle.", - "unlinkRemoveTitle": "Odstranit synchronizovaná data", - "unlinkRemoveBody": "Všechno, co přišlo ze serveru, bude z tohoto zařízení odstraněno. Zůstanou pouze hostitelé, kteří jsou uloženi pouze na tomto zařízení.", - "conflictsTitle": "Konflikty", - "conflictsDescription": "Tyto položky byly změněny zde i na serveru současně. Používá se verze ze serveru. Pokud chcete odeslat svou verzi na server, vyberte možnost Zachovat mou.", - "keepMine": "Zachovat mou", - "keepServer": "Zachovat serverovou", - "errorsTitle": "Nesynchronizováno", - "errorsDescription": "Server tyto změny nepřijal. Zůstanou na tomto zařízení.", - "errorPermission": "Váš účet na serveru nemá oprávnění k provedení této změny.", - "retry": "Zkusit znovu", - "whatSyncs": "Co se synchronizuje", - "whatSyncsDescription": "Vypněte cokoliv, co chcete ponechat pouze na tomto zařízení.", - "coreGroup": "Termix", - "notOnServer": "Server toto nemá", - "notOnDevice": "Ještě není na tomto zařízení", - "localOnlyHint": "Můžete také ponechat jednotlivé hostitele nebo složky pouze na tomto zařízení prostřednictvím jejich nastavení.", - "originTitle": "Zdroj připojení", - "originDescription": "Připojujte se k hostitelům z tohoto zařízení nebo přes server. Toto lze změnit pro každého hostitele zvlášť.", - "originLocal": "Toto zařízení", - "originRemote": "Server", - "entities": { - "hosts": "Hostitelé", - "sshCredentials": "Přihlašovací údaje", - "sshFolders": "Složky", - "userPreferences": "Předvolby", - "pluginUserSettings": "Nastavení pluginů", - "sharedHosts": "Hostitelé sdílení s vámi", - "sharedCredentials": "Přihlašovací údaje sdílené s vámi", - "vaultProfiles": "Profily Vault", - "snippetFolders": "Složky úryvků", - "snippets": "Úryvky", - "dashboardServiceLinks": "Odkazy na služby", - "homepageItems": "Položky na domovské stránce", - "networkTopology": "Mapa sítě", - "workspaces": "Pracovní prostory", - "hostDefaults": "Výchozí hodnoty hostitelů", - "hostDefaultsAdmin": "Výchozí hodnoty hostitelů serveru", - "aiProviders": "Poskytovatelé AI", - "homepageLayouts": "Rozložení domovské stránky", - "accountProfile": "Profil účtu" - }, "proxy": { - "title": "Reverzní proxy", - "description": "Potřebné pouze v případě, že před vaším serverem stojí něco jako Cloudflare Access nebo přihlašovací stránka.", "headersTitle": "Další hlavičky", "headersHint": "Odesílány s každým požadavkem na server, například token služby Cloudflare Access.", "headerName": "Název hlavičky", @@ -2446,8 +1661,7 @@ "username": "Uživatelské jméno", "password": "Heslo", "allowInvalidCertificate": "Důvěřovat certifikátu podepsanému sám sebou", - "allowInvalidCertificateHint": "Pouze pro váš vlastní server, pokud jeho certifikát není od známé autority.", - "saved": "Uloženo" + "allowInvalidCertificateHint": "Pouze pro váš vlastní server, pokud jeho certifikát není od známé autority." }, "problems": { "invalidUrl": "To nevypadá jako webová adresa.", @@ -2489,6 +1703,27 @@ "linking": "Probíhá propojování a první synchronizace...", "linked": "Propojeno. Vaše data se nyní synchronizují.", "signedInAgain": "Přihlášen. Synchronizace běží znovu." + }, + "entities": { + "hosts": "Hostitelé", + "sshCredentials": "Přihlašovací údaje", + "sshFolders": "Složky", + "userPreferences": "Předvolby", + "pluginUserSettings": "Nastavení pluginů", + "sharedHosts": "Hostitelé sdílení s vámi", + "sharedCredentials": "Přihlašovací údaje sdílené s vámi", + "vaultProfiles": "Profily Vault", + "snippetFolders": "Složky úryvků", + "snippets": "Úryvky", + "dashboardServiceLinks": "Odkazy na služby", + "homepageItems": "Položky na domovské stránce", + "networkTopology": "Mapa sítě", + "workspaces": "Pracovní prostory", + "hostDefaults": "Výchozí hodnoty hostitelů", + "hostDefaultsAdmin": "Výchozí hodnoty hostitelů serveru", + "aiProviders": "Poskytovatelé AI", + "homepageLayouts": "Rozložení domovské stránky", + "accountProfile": "Profil účtu" } }, "hostDefaults": { @@ -2505,37 +1740,18 @@ "resetTitle": "Tento hostitel má vlastní hodnotu. Kliknutím znovu použijete výchozí hodnotu z {{source}}", "clearTitle": "Nastaveno na této úrovni. Kliknutím tuto hodnotu zrušíte a místo toho použijete {{source}}", "inheritedTitle": "Převzato z {{source}}", - "titleAdmin": "Výchozí nastavení hostitelů serveru", - "titleUser": "Moje výchozí nastavení hostitelů", - "titleFolder": "Výchozí nastavení složky: {{name}}", - "descriptionAdmin": "Výchozí hodnoty pro všechny hostitele na tomto serveru. Uživatel, složka nebo samotný hostitel mohou stále nastavit jinou hodnotu. Změňte pole pro nastavení hodnoty zde, nebo jej vyprázdněte pro ponechání bez nastavení.", - "descriptionUser": "Výchozí hodnoty pro všechny vaše hostitele, přepisující nastavení serveru. Složka nebo samotný hostitel mohou stále nastavit jinou hodnotu. Změňte pole pro nastavení hodnoty zde, nebo jej vyprázdněte pro ponechání bez nastavení.", - "descriptionFolder": "Výchozí hodnoty pro hostitele v této složce a jejích podsložkách, přepisující vaše vlastní nastavení. Samotný hostitel může stále nastavit jinou hodnotu. Změňte pole pro nastavení hodnoty zde, nebo jej vyprázdněte pro ponechání bez nastavení.", - "save": "Uložit výchozí hodnoty", "saved_one": "Výchozí hodnoty uloženy. Aktualizován {{count}} hostitel.", "saved_few": "Výchozí hodnoty uloženy. Aktualizováno {{count}} hostitelů.", "saved_many": "Výchozí hodnoty uloženy. Aktualizováno {{count}} hostitelů.", "saved_other": "Výchozí hodnoty uloženy. Aktualizováno {{count}} hostitelů.", - "savedInBackground": "Výchozí hodnoty uloženy. Hostitelé se aktualizují na pozadí.", "appliedToHosts_one": "{{count}} host byl aktualizován podle nových výchozích hodnot.", "appliedToHosts_few": "{{count}} hosty byly aktualizovány podle nových výchozích hodnot.", "appliedToHosts_many": "{{count}} hostů bylo aktualizováno podle nových výchozích hodnot.", "appliedToHosts_other": "{{count}} hostů bylo aktualizováno podle nových výchozích hodnot.", - "saveFailed": "Nelze uložit výchozí hodnoty", - "loadFailed": "Nelze načíst výchozí hodnoty", - "confirmTitle": "Uložit výchozí hodnoty?", "confirmChanges_one": "{{count}} host používá tyto výchozí hodnoty a bude změněn.", "confirmChanges_few": "{{count}} hosty používají tyto výchozí hodnoty a budou změněny.", "confirmChanges_many": "{{count}} hostů používá tyto výchozí hodnoty a bude změněno.", "confirmChanges_other": "{{count}} hostů používá tyto výchozí hodnoty a bude změněno.", - "confirmNoChanges": "Žádné existující hosty nebudou změněny. Nové hosty budou mít tyto výchozí hodnoty.", - "menuMyDefaults": "Moje výchozí hodnoty hostů", - "folderDefaultsAction": "Výchozí hodnoty složky", - "adminSectionDescription": "Nastavte výchozí hodnoty, které budou používat všechny hosty na tomto serveru pro každé nastavení, včetně nastavení jednotlivých pluginů. Uživatelé a složky si mohou nastavit vlastní hodnoty a každý host může stále používat vlastní hodnotu.", - "editServerDefaults": "Upravit výchozí hodnoty serveru", - "resetMenu": "Obnovit", - "resetAll": "Vše na výchozí hodnoty", - "resetCore": "Připojení a SSH na výchozí hodnoty", "resetDone_one": "{{count}} host nyní používá výchozí hodnoty.", "resetDone_few": "{{count}} hosty nyní používají výchozí hodnoty.", "resetDone_many": "{{count}} hostů nyní používá výchozí hodnoty.", @@ -2551,38 +1767,11 @@ "fields": { "secretSaved": "Uloženo. Napište pro nahrazení." }, - "sharing": { - "revokeConfirm": "Odebrat přístup pro {{name}}?", - "revoke": "Odebrat přístup" - }, "manage": { - "searchSettings": "Vyhledat nastavení", - "noMatchingSettings": "Žádné nastavení neodpovídá.", - "sections": "Sekce", - "sectionNeedsAttention": "Něco zde vyžaduje pozornost", "needsAttention_one": "Jedna věc vyžaduje pozornost.", "needsAttention_few": "{{count}} věci vyžadují pozornost.", "needsAttention_many": "{{count}} věcí vyžaduje pozornost.", "needsAttention_other": "{{count}} věcí vyžaduje pozornost.", - "bandHost": "Host", - "bandFeatures": "Protokoly a pluginy", - "bandCredential": "Přihlašovací údaje", - "sshConnection": "SSH připojení", - "errorAddressRequired": "Adresa je povinná.", - "errorPortRange": "Použijte port mezi 1 a 65535.", - "defaults": "Výchozí hodnoty", - "searchHosts": "Vyhledat hosty", - "searchCredentials": "Vyhledat přihlašovací údaje", - "searchDefaults": "Vyhledat výchozí hodnoty", - "addCredential": "Přidat přihlašovací údaje", - "nothingMatches": "Nic neodpovídá", - "nothingYet": "Zatím nic zde není", - "emptyHostsHint": "Přidejte hosta a objeví se zde, v jakémkoli adresáři, který mu přiřadíte.", - "emptyCredentialsHint": "Uložené přihlašovací údaje lze znovu použít pro jakýkoli host.", - "collapse": "Sbalit", - "expand": "Rozbalit", - "cannotBeUndone": "Toto nelze vrátit zpět.", - "hostNotFound": "Host nebyl nalezen. Zkuste obnovit seznam.", "hostCount_one": "{{count}} host", "hostCount_few": "{{count}} hosty", "hostCount_many": "{{count}} hostů", @@ -2590,14 +1779,7 @@ "credentialCount_one": "{{count}} přihlašovací údaje", "credentialCount_few": "{{count}} přihlašovací údaje", "credentialCount_many": "{{count}} přihlašovacích údajů", - "credentialCount_other": "{{count}} přihlašovacích údajů", - "newHost": "Nový host", - "newCredential": "Nové přihlašovací údaje", - "advanced": "Rozšířené", - "pickHost": "Vyberte hosta k úpravě", - "pickCredential": "Vyberte přihlašovací údaje k úpravě", - "pickDefaults": "Vyberte úroveň výchozích hodnot k úpravě", - "pickHint": "Vše o připojení je zde, seskupeno pro snadné hledání." + "credentialCount_other": "{{count}} přihlašovacích údajů" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/da_DK.json b/src/ui/locales/translated/da_DK.json index ff323bfb9..6d2a73946 100644 --- a/src/ui/locales/translated/da_DK.json +++ b/src/ui/locales/translated/da_DK.json @@ -141,7 +141,6 @@ "continue": "Fortsæt", "error": "Fejl", "unsavedChanges": "Ugemte ændringer", - "more": "Mere", "loading": "Indlæser...", "host": "Vært", "selectHost": "Vælg en vært...", @@ -154,7 +153,6 @@ "cancel": "Annuller", "username": "Brugernavn", "login": "Log ind", - "logout": "Log ud", "register": "Opret konto", "password": "Adgangskode", "confirmPassword": "Bekræft adgangskode", @@ -165,8 +163,6 @@ "rename": "Omdøb", "edit": "Rediger", "confirm": "Bekræft", - "next": "Næste", - "previous": "Forrige", "refresh": "Opdater", "language": "Sprog", "backendReconnected": "Serverforbindelse genoprettet", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Læs om hver enkelt" }, "desktopUpdates": { - "title": "Skrivebordsapp", - "mode": "Opdateringer", - "modeHint": "Sådan får appen nye versioner.", - "manualModeHint": "Denne kopi kan ikke opdatere sig selv, så Termix giver kun besked, når en ny version er udkommet.", "modeAutomatic": "Automatisk", "modePrompt": "Spørg først", "modeNever": "Aldrig", @@ -247,15 +239,6 @@ "onboardingTitle": "App-opdateringer", "onboardingBody": "Skrivebordsappen kan nu opdatere sig selv. Vælg, hvordan du vil modtage nye versioner. Du kan ændre dette senere i Indstillinger, Opdateringer.", "onboardingManual": "Denne kopi af appen blev installeret på en måde, der ikke understøtter selvopdatering, så Termix vil give dig besked, når en ny version er udkommet, med et link til at downloade den.", - "status": "Version {{version}}", - "statusIdle": "Ikke tjekket endnu", - "statusChecking": "Tjekker efter opdateringer", - "statusAvailable": "Version {{version}} er tilgængelig", - "statusDownloading": "Downloader {{version}} ({{progress}}%)", - "statusReady": "Version {{version}} er klar. Genstart for at installere den.", - "statusUpToDate": "Du har den nyeste version", - "statusError": "Kunne ikke tjekke efter opdateringer. Prøv igen senere.", - "checkNow": "Tjek nu", "download": "Download", "restart": "Genstart nu", "later": "Senere", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Luk", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopiér adgangskode", - "copySudoPassword": "Kopiér sudo-adgangskode", - "passwordCopied": "Adgangskode kopieret til udklipsholderen", - "failedToCopyPassword": "Kunne ikke kopiere adgangskode", - "refreshTab": "Opdater forbindelse", - "renameTab": "Omdøb fane", "dashboard": "Dashboard", "quickConnect": "Hurtig forbindelse", - "openAsTabHint": "Ctrl+klik eller midterklik for at åbne som en fane", - "openAsTab": "Åbn som fane", - "openInRightDock": "Åbn i højre dok", - "closeRightDock": "Luk højre dok", - "toggleRightDock": "Skift højre dok", "hosts": "Værter", "credentials": "Legitimationsoplysninger", "connections": "Forbindelser", - "keepSideMenuOpen": "Hold menu åben", - "collapseSideMenu": "Skjul menu", - "roleAdministrator": "Administrator", - "roleUser": "Bruger", "sync": "Synkroniser", "reconnectDisconnectedTerminals": "Genopret alle afbrudte terminaler", "reconnectingTerminals_one": "Genopretter {{count}} terminal", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "Kunne ikke starte genoprettelse af {{count}} terminaler", "fullscreenUnsupported": "Fuldskærm understøttes ikke af denne browser", "fullscreenFailed": "Kunne ikke skifte til fuldskærm", - "resetSidebarWidth": "Nulstil bredde", - "collapseSidebar": "Skjul sidebjælke", - "openSidebar": "Åbn sidebjælke", "confirmCloseHost": "Luk {{host}}?", - "enterFullscreen": "Gå til fuldskærm (Ctrl+Shift+F)", - "exitFullscreen": "Forlad fuldskærm (Ctrl+Shift+F)", - "group": { - "objects": "Dine", - "tools": "Værktøjer", - "system": "System" - }, - "searchEverything": "Søg i værter, faner og handlinger", - "search": "Søg", "hiddenCount_one": "{{count}} skjult", "hiddenCount_other": "{{count}} skjulte", - "showInRail": "Vis i sidebjælke", - "moveUp": "Flyt op", - "moveDown": "Flyt ned", - "resetRailOrder": "Nulstil rækkefølge", - "hideFromRail": "Skjul i sidebjælke", - "openSettings": "Åbn indstillinger", "settings": "Indstillinger", "manage": "Administrer", - "mobileNavigation": "Navigation", "plugins": "Plugins" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "Import fuldført: {{imported}} importeret, {{updated}} opdateret, {{failed}} fejlet", "importHostsFailed": "Kunne ikke importere værter" }, - "commandPalette": { - "searchPlaceholder": "Søg i værter, kommandoer eller indstillinger...", - "quickActions": "Hurtige handlinger", - "navigation": "Navigation", - "orShortcut": "eller", - "addNewHost": "Tilføj ny vært", - "adminSettings": "Admin-indstillinger", - "addCredential": "Tilføj legitimationsoplysninger", - "recentActivity": "Seneste aktivitet", - "serversAndHosts": "Servere og værter", - "noHostsFound": "Ingen værter fundet, der matcher \"{{search}}\"", - "links": "Links", - "navigate": "Naviger", - "select": "Vælg", - "pluginActions": "Flere handlinger", - "noTargetTab": "Ingen terminalfane er åben", - "documentation": "Dokumentation" - }, "splitScreen": { "title": "Delt skærm", "defaultLabel": "Del {{number}}", "splitRight": "Del til højre", "splitDown": "Del nedad", - "addToSplit": "Tilføj til {{split}}", "paneEmptyItem": "Vindue {{index}}: tomt", "paneItem": "Vindue {{index}}: {{label}}", "paneNumber": "Vindue {{index}}", - "newPaneRight": "Nyt vindue til højre", - "newPaneBelow": "Nyt vindue nedenfor", "emptyTitle": "Tomt vindue", "emptyHint": "Vælg noget, der skal vises her. Mens dette vindue er valgt, åbnes alt, du åbner fra sidebjælken, også her.", "openTabs": "Åbn faner", @@ -962,7 +890,6 @@ "clearPane": "Tøm dette vindue", "zoom": "Zoom vindue", "unzoom": "Gendan layout", - "unsplit": "Fjern opdeling", "layouts": "Layouts", "applyLayout": "Skift layout", "maxPanes_one": "En opdeling kan indeholde op til {{count}} panel", @@ -971,8 +898,6 @@ "dropHere": "Slip for at vise her", "paneActions": "Vinduehandlinger", "dividerHint": "Træk for at ændre størrelse. Dobbeltklik for at gøre dem lige store.", - "openInSplit": "Åbn i opdeling", - "openInNewSplit": "Ny opdeling med den aktuelle fane", "shortcuts": "Genveje", "shortcutNavigate": "Flyt mellem vinduer", "presets": { @@ -986,23 +911,6 @@ "grid6": "Gitter med seks" } }, - "connections": { - "noConnections": "Ingen forbindelser", - "noConnectionsDesc": "Åbn en terminal, filhåndtering eller fjernskrivebord for at se forbindelser her", - "connectedFor": "Forbundet i {{duration}}", - "connected": "Forbundet", - "disconnected": "Afbundet", - "reconnect": "Forbind igen", - "sectionOpen": "Åben", - "sectionBackground": "Baggrund", - "backgroundDesc": "Sessioner bevares i {{minutes}} minutter efter afbinding og kan genforbindes.", - "expiresIn": "Udløber om {{duration}}", - "search": "Søg i forbindelser...", - "noSearchResults": "Ingen forbindelser matcher din søgning", - "rename": "Omdøb session", - "forgetConfirm": "Afslut baggrundssessionen for {{name}}?", - "forget": "Afslut session" - }, "sshAuth": { "totpRequired": "To-faktor godkendelse påkrævet", "totpCodeLabel": "Bekræftelseskode", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "nøgleadgangskode", "pastePrivateKey": "Indsæt din private nøgle her...", - "enterPassword": "Indtast din adgangskode", - "apiKeyName": "f.eks. CI Pipeline", - "credentialName": "f.eks. Production SSH Key", - "optionalDetails": "Valgfrie detaljer...", - "sshUsername": "f.eks. root eller deploy", - "hostAddress": "10.0.0.1 eller example.com", - "hostName": "f.eks. Web Server Production" + "enterPassword": "Indtast din adgangskode" }, "dashboard": { - "title": "Dashboard", - "github": "GitHub", - "reportBug": "Rapportér en fejl", - "discord": "Discord", - "docs": "Dokumentation", - "donate": "Donér", - "serverOverview": "Serveroversigt", - "version": "Version", "updateAvailable": "Opdatering tilgængelig", - "beta": "Beta", - "uptime": "Oppetid", - "database": "Database", - "healthy": "Sund", - "error": "Fejl", - "totalHosts": "Samlet antal værter", - "totalCredentials": "Samlet antal legitimationsoplysninger", - "recentActivity": "Seneste aktivitet", - "reset": "Nulstil", - "noRecentActivity": "Ingen seneste aktivitet", - "quickActions": "Hurtige handlinger", - "addHost": "Tilføj vært", - "addCredential": "Tilføj legitimationsoplysning", - "adminSettings": "Admin-indstillinger", - "userProfile": "Brugerprofil", - "serverStats": "Serverstatistik", - "customizeLayout": "Tilpas dashboard", - "justNow": "lige nu" + "beta": "Beta" }, "dashboardTab": { "stable": "STABIL", - "registerNewServer": "Registrer en ny server", - "storeSshKeysOrPasswords": "Gem SSH-nøgler eller adgangskoder", - "manageUsersAndRoles": "Administrer brugere og roller", - "manageYourAccount": "Administrer din konto", - "hostStatus": "Værtstatus", - "noHostsConfigured": "Ingen værter konfigureret", - "checking": "TJENER", - "commandPalette": "Kommandopalette", - "done": "Færdig", - "clear": "Ryd", - "dragToResizeColumns": "Træk for at ændre kolonnebredde", - "hostsAvailable": "Tilgængelige værter", - "removeSection": "Fjern sektion", - "addSection": "Tilføj en sektion", - "allSectionsShown": "Alt er allerede på dashboardet.", - "fromPlugins": "Fra plugins", - "dropHere": "Slip en sektion her", - "dragToReorder": "Træk sektionerne for at ændre rækkefølgen", - "clearActivityConfirm": "Ryd din seneste aktivitet?", - "resetConfirm": "Nulstil dashboardet til standardlayoutet?", "onlineCount_one": "{{count}} online", "onlineCount_other": "{{count}} online", "hostCount_one": "{{count}} vært", "hostCount_other": "{{count}} værter" }, "admin": { - "sectionGeneral": "Generelt", - "sectionUsers": "Brugere", - "sectionSessions": "Sessioner", - "sectionRoles": "Rolle", - "sectionDatabase": "Database", - "sectionApiKeys": "API-nøgler", - "sectionAuditLog": "Revisionslog", - "sectionSsl": "HTTPS-certifikat", - "sectionBranding": "White Label", - "brandingAppName": "Applikationsnavn", - "brandingAppNameDesc": "Vises på login-skærmen og i browserfanen. Lad være med at udfylde for at bruge \"Termix\".", - "brandingTagline": "Slogan", - "brandingTaglineDesc": "Vises under applikationsnavnet på login-skærmen. Lad være med at udfylde for at bruge standardsloganet.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG eller WEBP, op til 750 KB. Udskifter standardikonet på login-skærmen og i browserfanen.", - "brandingLogoUpload": "Upload logo", - "brandingLogoReset": "Nulstil til standard", - "brandingLogoInvalid": "Ugyldigt billede. Brug en PNG, JPEG eller WEBP-fil på op til 750 KB.", - "brandingSaved": "Branding-indstillinger gemt", - "brandingSaveFailed": "Kunne ikke gemme branding-indstillingerne", - "sslDescription": "Certifikatet, som Termix serverer over HTTPS. Upload dit eget her, eller få og forny et fra Let's Encrypt i sektionen ACME-certifikater.", - "sslDocsLink": "Se SSL-dokumentation", - "sslCertStatus": "Certifikatstatus", - "sslCertStatusNone": "Intet certifikat", - "sslCertStatusValid": "Gyldigt", - "sslCertStatusExpiring": "Udløber snart", - "sslCertStatusExpired": "Udløbet", - "sslCertExpiresAt": "Udløber {{date}}", - "sslInfoNote": "Efter udstedelse eller upload af et certifikat aktiverer Termix automatisk HTTPS på SSL_PORT (standard 8443) ud over den eksisterende HTTP-port. Sørg for, at denne port er udgivet/mappet til denne container, så den er tilgængelig.", - "sslManualCert": "Certifikat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Privat nøgle (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Indsæt dit eksisterende certifikat og private nøgle, inklusive en fuld kæde, hvis det kræves af din CA.", - "sslManualUpload": "Upload og installer certifikat", - "sslManualUploadLoading": "Uploader certifikat...", - "sslManualUploadSuccess": "Certifikatet er uploadet og installeret korrekt", - "sslManualUploadFailed": "Upload af certifikat mislykkedes", - "sslManualRequiresFields": "Certifikat og privat nøgle er påkrævet", - "auditLogTotal": "{{total}} poster i alt", - "auditLogEmpty": "Ingen poster i revisionsloggen fundet", - "auditLogSuccess": "Lykkedes", - "auditLogFailed": "Mislykkedes", - "auditLogClearFilters": "Ryd filtre", - "auditLogPage": "Side {{page}} af {{totalPages}} ({{total}} i alt)", - "auditLogIp": "IP", - "auditLogResourceId": "Ressource-ID", - "auditLogFilterUser": "Bruger", - "auditLogFilterAction": "Handling", - "auditLogFilterResourceType": "Resstype", - "auditLogFilterStatus": "Status", - "auditLogFilterFrom": "Fra", - "auditLogFilterTo": "Til", - "auditLogFilterAll": "Alle", - "allowRegistration": "Tillad brugerregistrering", - "allowRegistrationDesc": "Lad nye brugere registrere sig selv med et brugernavn og en adgangskode", - "allowPasswordLogin": "Tillad login med adgangskode", - "allowPasswordLoginDesc": "Login med brugernavn/adgangskode", - "externalAutoProvision": "Opret eksterne konti automatisk", - "externalAutoProvisionDesc": "Opret en konto første gang nogen logger ind via en ekstern login som SSO eller LDAP. Når den er slået fra, kan kun personer, der allerede har en konto, logge ind på denne måde", - "secondFactorAfterExternalLogin": "Bed om en anden faktor efter eksterne logins (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Når den er slået fra, bedes der kun om en anden faktor efter login med adgangskode og andre lokale logins, som før. Når den er slået til, bedes der om den efter hver loginmetode, herunder SSO og LDAP.", - "allowPasswordReset": "Tillad nulstilling af adgangskode", - "allowPasswordResetDesc": "Nulstillingskode via Docker logs", - "auditForwardingTitle": "Videresend til SIEM", - "auditForwardingDesc": "Send en kopi af hver auditpost til en ekstern samler som NDJSON. De lokale logs forbliver sandhedens kilde.", - "auditForwardingEnvNotice": "En miljøvariabel konfigurerer også videresendelse; URL'en gemt her har forrang.", - "auditForwardingToken": "Bearer-token (valgfrit)", - "auditForwardingTokenStored": "Bearer-token (gemt)", - "auditForwardingSaved": "Audit-videresendelsesindstillinger gemt", - "auditForwardingSaveError": "Kunne ikke gemme audit-videresendelsesindstillinger", - "sessionTimeout": "Sessionstidsgrænse", - "hours": "timer", - "sessionTimeoutRange": "Min 1t, maks 720t", - "monitoringDefaults": "Standardværdier for overvågning", - "statusCheck": "Statuskontrol", - "sec": "sek", - "logLevel": "Logniveau", "usersCount_one": "{{count}} bruger", - "usersCount_other": "{{count}} brugere", - "searchUsers": "Søg efter brugere...", - "noUsers": "Ingen brugere", - "noUsersMatch": "Ingen brugere matcher din søgning", - "pageOf": "Side {{page}} af {{total}}", - "createUser": "Opret", - "newRole": "Ny rolle", - "roleName": "Navn", - "roleDisplayName": "Visningsnavn", - "roleDescription": "Beskrivelse", "rolesCount_one": "{{count}} rolle", - "rolesCount_other": "{{count}} roller", - "createRole": "Opret", - "creating": "Opretter...", - "exportDatabase": "Eksporter database", - "exportDatabaseDesc": "Download en bærbar SQLite-sikkerhedskopi af alle værter, legitimationsoplysninger og indstillinger", - "export": "Eksporter", - "exporting": "Eksporterer...", - "importDatabase": "Importer database", - "importDatabaseDesc": "Gendan fra en bærbar .sqlite-sikkerhedskopi på ethvert databasebackend", - "importDatabaseSelected": "Valgt: {{name}}", - "selectFile": "Vælg fil", - "changeFile": "Skift", - "import": "Importer", - "importing": "Importerer...", "apiKeysCount_one": "{{count}} nøgle", - "apiKeysCount_other": "{{count}} nøgler", - "apiKeysDocsLink": "Se dokumentation", - "apiKeysCliHint": "Brug en API-nøgle med Termix CLI til at administrere servere fra din terminal.", - "apiKeysCliLink": "Se CLI-dokumentation", - "newApiKey": "Ny API-nøgle", - "apiKeyCreatedWarning": "Nøgle oprettet - kopier den nu, den vises ikke igen.", - "apiKeyName": "Navn", - "apiKeyUser": "Bruger", - "apiKeySelectUser": "Vælg en bruger...", - "apiKeyExpiresAt": "Udløber den", - "createKey": "Opret nøgle", - "apiKeyNoExpiry": "Ingen udløb", - "revokedBadge": "INDDRAGET", - "authTypeDual": "Dobbelt godkendelse", - "authTypeExternal": "Ekstern", - "authTypeLocal": "Lokal", - "adminStatusAdministrator": "Administrator", - "adminStatusRegularUser": "Almindelig bruger", - "adminBadge": "ADMIN", - "systemBadge": "SYS", - "customBadge": "TILPASSET", - "youBadge": "DIG", "sessionsActive_one": "{{count}} aktiv", - "sessionsActive_other": "{{count}} aktive", - "sessionActive": "Aktiv: {{time}}", - "sessionExpires": "Udløb: {{time}}", - "revokeAll": "Alle", - "revokeAllSessionsSuccess": "Alle sessioner for brugeren er inddraget", - "revokeAllSessionsFailed": "Kunne ikke inddrage sessioner", - "revokeSessionFailed": "Kunne ikke inddrage session", - "addRole": "Tilføj rolle", - "noCustomRoles": "Ingen tilpassede roller er defineret", - "removeRoleFailed": "Kunne ikke fjerne rolle", - "assignRoleFailed": "Kunne ikke tildele rolle", - "userAdminAccess": "Administrator", - "userAdminAccessDesc": "Fuld adgang til alle admin-indstillinger", - "userRoles": "Roller", - "revokeAllUserSessions": "Inddrag alle sessioner", - "revokeAllUserSessionsDesc": "Tving log ind på alle enheder", - "revoke": "Inddrag", - "deleteUserWarning": "Sletning af denne bruger er permanent.", - "deleteUser": "Slet {{username}}", - "deleting": "Sletter...", - "deleteUserFailed": "Kunne ikke slette bruger", - "deleteUserSuccess": "Bruger \"{{username}}\" slettet", - "deleteRoleSuccess": "Rolle \"{{name}}\" slettet", - "revokeKeySuccess": "Nøgle \"{{name}}\" inddraget", - "revokeKeyFailed": "Kunne ikke inddrage nøgle", - "copiedToClipboard": "Kopieret til udklipsholder", - "done": "Færdig", - "createUserTitle": "Opret bruger", - "createUserDesc": "Opret en ny lokal konto.", - "createUserUsername": "Brugernavn", - "createUserPassword": "Adgangskode", - "createUserPasswordHint": "Minimum 6 tegn.", - "createUserEnterUsername": "Indtast brugernavn", - "createUserSubmit": "Opret bruger", - "editUserTitle": "Administrer bruger: {{username}}", - "editUserDesc": "Rediger roller, admin-status, sessioner og kontoindstillinger.", - "editUserUsername": "Brugernavn", - "editUserAuthType": "Godkendelsestype", - "editUserAdminStatus": "Admin-status", - "editUserUserId": "Bruger-ID", - "linkAccountTitle": "Link konti", - "linkAccountDesc": "Sammenflet den eksterne konto {{username}} med en eksisterende lokal konto.", - "linkAccountDescLocal": "Link en lokal konto {{username}} med en eksisterende konto, der kun er ekstern.", - "linkAccountWarningTitle": "Dette vil:", - "linkAccountEffect1": "Slette den eksterne konto", - "linkAccountEffect2": "Tilføje dens eksterne login til målkontoen", - "linkAccountEffect3": "Tillade både eksternt login og login med adgangskode", - "linkAccountTargetUsername": "Brugernavn for lokal konto", - "linkAccountTargetPlaceholder": "Indtast brugernavnet for den lokale konto, der skal linkes til", - "linkAccountExternalUsername": "Brugernavn for ekstern konto", - "linkAccountExternalPlaceholder": "Indtast brugernavnet for den eksterne konto, der skal sammenføjes", - "linkAccountExternalNotFound": "Ingen ekstern konto fundet med det brugernavn", - "linkAccounts": "Link konti", - "linkAccountSuccess": "Konti linket succesfuldt", - "linkAccountFailed": "Kunne ikke link konti", - "linkAccountInProgress": "Linker...", - "unlinkAccountTitle": "Fjern link til eksternt login", - "unlinkAccountDesc": "Fjern eksternt login fra {{username}}. De vil kun kunne logge ind med deres adgangskode.", - "unlinkAccountWarning": "Dette vil fjerne eksternt login fra denne konto. Brugeren skal have en adgangskode indstillet for at fortsætte med at logge ind.", - "unlinkAccount": "Fjern link til eksternt login", - "unlinkAccountInProgress": "Fjerner link...", - "unlinkAccountSuccess": "Eksternt login fjernet", - "unlinkAccountFailed": "Kunne ikke fjerne link til eksternt login", - "updateRegistrationFailed": "Kunne ikke opdatere registreringsindstilling", - "updatePasswordLoginFailed": "Kunne ikke opdatere indstilling for login med adgangskode", - "updateSecondFactorAfterExternalLoginFailed": "Kunne ikke opdatere indstilling for anden faktor", - "updatePasswordResetFailed": "Kunne ikke opdatere indstilling for nulstilling af adgangskode", - "sessionTimeoutRange2": "Sessionstidsgrænsen skal være mellem 1 og 720 timer", - "sessionTimeoutSaved": "Sessionstidsgrænse gemt", - "sessionTimeoutSaveFailed": "Kunne ikke gemme sessionstidsgrænse", - "monitoringIntervalInvalid": "Ugyldige intervalværdier", - "monitoringSaved": "Overvågningsindstillinger gemt", - "monitoringSaveFailed": "Kunne ikke gemme overvågningsindstillinger", - "logLevelUpdateFailed": "Kunne ikke opdatere logniveau", - "createUserRequired": "Brugernavn og adgangskode er påkrævet", - "createUserPasswordTooShort": "Adgangskoden skal være på mindst 6 tegn", - "createUserSuccess": "Brugeren \"{{username}}\" oprettet", - "createUserFailed": "Kunne ikke oprette bruger", - "updateAdminStatusFailed": "Kunne ikke opdatere admin-status", - "allSessionsRevoked": "Alle sessioner er inddraget", - "revokeSessionsFailed": "Kunne ikke inddrage sessioner", - "manageUserData": "Administrer brugerdata", - "backToUsers": "Tilbage til brugere", - "manageTabAccount": "Konto", - "manageTabHosts": "Værter", - "manageTabCredentials": "Legitimationsoplysninger", - "manageTabSessions": "Sessioner", - "manageTabDanger": "Farligt", - "manageEditorBack": "Tilbage til {{username}}'s data", - "dataLockedBadge": "LÅST", - "dataLockedNotice": "{{username}}'s data forbliver låst, indtil de næste gang logger ind. Deres værter, legitimationsoplysninger og snippets kan ikke vises eller redigeres, før da.", - "resetPasswordTitle": "Nulstil adgangskode", - "resetPasswordExternalOnly": "Denne bruger logger ind via en ekstern udbyder og har ingen adgangskode.", - "resetPasswordPlaceholder": "Ny adgangskode", - "resetPasswordBtn": "Nulstil", - "resetPasswordWorking": "Nulstiller...", - "resetPasswordSuccess": "Adgangskode nulstillet", - "resetPasswordSuccessWiped": "Adgangskode nulstillet. Brugerens krypterede data blev slettet.", - "resetPasswordFailed": "Kunne ikke nulstille adgangskode", - "resetPasswordConfirmWipe": "{{username}} har ikke logget ind siden krypteringsopgraderingen, så deres data kan ikke gendannes. Nulstilling nu vil slette deres værter, legitimationsoplysninger og snippets. Fortsæt?", - "manageApiKeys": "API-nøgler", - "apiKeyNamePlaceholder": "Nøgle navn", - "apiKeyCopyNotice": "Kopier denne nøgle nu, den vises ikke igen.", - "noApiKeysForUser": "Ingen API-nøgler", - "apiKeyDeleteFailed": "Kunne ikke slette API-nøgle", - "exportUserData": "Dataeksport", - "exportUserDataDesc": "Download denne brugers værter, legitimationsoplysninger og filhåndteringsdata som JSON. Hemmeligheder er afkrypteret.", - "exportUserDataSuccess": "Brugerdata eksporteret", - "exportUserDataFailed": "Kunne ikke eksportere brugerdata", "hostsCount_one": "{{count}} vært", "hostsCount_other": "{{count}} værter", - "addHostForUser": "Tilføj vært", - "noHostsForUser": "Denne bruger har ingen værter", - "connectToHost": "Forbind", - "deleteHostConfirm": "Slet værten \"{{name}}\", der tilhører {{username}}?", - "hostDeletedSuccess": "Vært slettet", - "hostDeleteFailed": "Kunne ikke slette vært", "credentialsCount_one": "{{count}} legitimationsoplysning", "credentialsCount_other": "{{count}} legitimationsoplysninger", - "addCredentialForUser": "Tilføj legitimationsoplysning", - "noCredentialsForUser": "Denne bruger har ingen legitimationsoplysninger", - "deleteCredentialConfirm": "Slet legitimationsoplysningen \"{{name}}\", der tilhører {{username}}?", - "credentialDeletedSuccess": "Legitimationsoplysning slettet", - "credentialDeleteFailed": "Kunne ikke slette legitimationsoplysning", - "noSessionsForUser": "Ingen aktive sessioner", - "deleteSuccessorLabel": "Overdrag værter og legitimationsoplysninger til", - "deleteSuccessorMe": "Mig (den slettende administrator)", - "deleteSuccessorNone": "Ingen, slet dem", - "deleteSuccessorDesc": "Alt, hvad denne bruger har delt, fortsætter med at virke under den nye ejer; hvis du vælger ingen, fjernes deres værter, legitimationsoplysninger og delinger.", - "deleteUserDangerDesc": "Slet {{username}} og alle deres data (værter, legitimationsoplysninger, uddrag, historik) permanent. Dette kan ikke fortrydes.", - "deleteUserConfirm": "Slet {{username}} og alle deres data permanent?", - "deleteUserAdminBlocked": "Fjern administratorstatus, før du sletter denne bruger.", - "createRoleRequired": "Navn og visningsnavn er påkrævet", - "createRoleSuccess": "Rollen \"{{name}}\" oprettet", - "createRoleFailed": "Kunne ikke oprette rolle", - "apiKeyNameRequired": "Nøgle navn er påkrævet", - "apiKeyUserRequired": "Bruger-ID er påkrævet", - "apiKeyCreatedSuccess": "API-nøglen \"{{name}}\" oprettet", - "apiKeyCreateFailed": "Kunne ikke oprette API-nøgle", - "exportSuccess": "Database eksporteret succesfuldt", - "exportFailed": "Databaseeksport mislykkedes", - "importSelectFile": "Vælg venligst en fil først", - "importCompleted": "Import fuldført: {{total}} elementer importeret, {{skipped}} springet over", - "importFailed": "Import mislykkedes: {{error}}", - "importError": "Databaseimport mislykkedes", - "sectionHostDefaults": "Værtstandarder", "rolePermissions": { "count_one": "{{count}} tilladelse", - "count_other": "{{count}} tilladelser", - "editAction": "Rediger tilladelser", - "loadError": "Kunne ikke indlæse tilladelseskataloget", - "saved": "Rolle tilladelser gemt", - "saveError": "Kunne ikke gemme rolle tilladelser", - "save": "Gem", - "saving": "Gemmer...", - "pluginDisabled": "Plugin deaktiveret", "groups": { "hosts": "Værter", "credentials": "Legitimationsoplysninger", "admin": "Administration" } - }, - "notificationPrivateEndpoints": "Tilladte private notifikationsværter", - "notificationPrivateEndpointsDesc": "Præcise private værter, som notifikationskanaler må kontakte. Adskil dem med kommaer.", - "updateNotificationEndpointsFailed": "Kunne ikke opdatere tilladelseslisten for notifikationsendepunkter", - "secondFactorsSectionTitle": "Anden faktor", - "secondFactorsNone": "Ingen anden faktor tilmeldt", - "secondFactorUnavailable": "Utilgængelig", - "resetSecondFactors": "Nulstil anden faktor", - "resetSecondFactorsConfirm": "Fjern hver anden faktor for {{username}}? De kan logge ind med deres adgangskode eller SSO og tilmelde sig igen.", - "secondFactorsResetSuccess": "Anden faktor nulstillet", - "secondFactorsResetFailed": "Kunne ikke nulstille anden faktor", - "passwordLoginForced": "Login med adgangskode er slået fra, men der er ikke aktiveret andre login-metoder, så det er slået til for nu. Ingen bliver låst ude.", - "sslNotRenewed": "Intet fornyer dette certifikat. Det udløber den {{date}}. Slå automatisk fornyelse til i afsnittet ACME-certifikater, eller upload et nyt certifikat før da.", - "sslSelfSigned": "Selvsigneret certifikat lavet af Termix. Browsere vil advare om det.", - "sslRenewedBy": "Fornyet automatisk af {{plugin}}", - "sslIssuer": "Udstedt af {{issuer}}", - "sslNames": "Dækker {{names}}", - "sslManualTitle": "Upload et certifikat", - "updateExternalAutoProvisionFailed": "Kunne ikke opdatere indstillingen for automatisk oprettelse", - "hostTags": "Foruddefinerede værtsmærker", - "hostTagsDesc": "Mærker, som alle brugere ser som forslag i værrediteren. Tryk på Mellemrum eller Enter for at tilføje et. Hvis du fjerner et mærke her, fjernes det ikke fra værter.", - "hostTagsError": "Kunne ikke indlæse eller gemme forslag til værtsmærker.", - "revokeAllSessionsConfirm": "Log {{username}} ud overalt?", - "revokeSessionConfirm": "Log ud af denne session?", - "revokeSession": "Log ud", - "deleteRoleConfirm": "Slet rollen {{name}}?", - "revokeKeyConfirm": "Ophæv API-nøglen {{name}}?", - "revokeKey": "Ophæv" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Hvor", - "who": "Hvem", - "hostLabel": "Vært", - "hostPlaceholder": "192.168.1.1 eller example.com", - "portLabel": "Port", - "usernameLabel": "Brugernavn", - "usernamePlaceholder": "brugernavn", - "authLabel": "Godkendelse", - "passwordLabel": "Adgangskode", - "passwordPlaceholder": "adgangskode", - "privateKeyLabel": "Privat nøgle", - "privateKeyPlaceholder": "Indsæt privat nøgle...", - "credentialLabel": "Legitimationsoplysninger", - "credentialPlaceholder": "Vælg en gemt legitimationsoplysning", - "protocolLabel": "Protokol", - "domainLabel": "Domæne", - "domainPlaceholder": "valgfrit", - "connectToAction": "Forbind til {{name}}", - "sshProtocol": "SSH", - "noTarget": "Intet installeret kan forbinde til denne type vært" + "usernameLabel": "Brugernavn" }, "keybindings": { - "description": "Tilknyt taster til handlinger i terminalen og appen, eller ændr de indbyggede genveje.", - "defaultsHeading": "Indbyggede genveje", - "fixedHeading": "App-genveje", - "fixed": { - "splitRight": "Del til højre", - "splitDown": "Del nedad", - "zoomPane": "Zoom ind på det fokuserede panel", - "navigatePane": "Flyt mellem paneler", - "nextTab": "Næste fane", - "previousTab": "Forrige fane", - "jumpTab": "Hop til fane", - "previousView": "Tilbage til den forrige sidepanelvisning", - "fullscreen": "Skift til fuldskærm" - }, - "customHeading": "Brugerdefinerede genveje", - "addBinding": "Tilføj genvej", - "addBindingTitle": "Tilføj genvej", - "editBindingTitle": "Rediger genvej", - "loading": "Indlæser...", - "noCustomBindings": "Ingen brugerdefinerede genveje endnu", - "defaultBadge": "Standard", - "customizedBadge": "Brugerdefineret", - "customize": "Tilpas", - "resetToDefault": "Nulstil til standard", - "resetAllToDefaults": "Nulstil alle til standard", - "cancel": "Annuller", - "saveBinding": "Gem genvej", - "saveError": "Kunne ikke gemme tastaturgenveje", - "pressKeysToRecord": "Tastekombination", - "pressKeysPlaceholder": "Klik og tryk på taster", - "recording": "Tryk på taster...", - "comboRequiredError": "Tryk først på en tastekombination", - "conflictWarning": "Denne kombination er allerede tildelt {{combo}}. Hvis du gemmer, udløses begge.", - "actionLabel": "Handling", "actionNextTab": "Skift til næste fane", "actionPreviousTab": "Skift til forrige fane", "actionOpenCommandPalette": "Åbn hurtigsøgning", - "actionReconnectSession": "Genopret forbindelse til nuværende session", - "unavailableAction": "{{type}} (ikke tilgængelig)", - "actionRequiredError": "Vælg først en handling", - "deleteConfirm": "Slet denne tastekombination?", - "resetAllConfirm": "Nulstil alle tastekombinationer til standard?" + "actionReconnectSession": "Genopret forbindelse til nuværende session" }, "userProfile": { - "storageModeLocal": "Browser", - "storageModeCloud": "Database", - "storageModeDescription": "Browser gemmer indstillinger kun i denne browser. Database synkroniserer med serveren og indlæses på enhver enhed.", - "resetToDefaults": "Nulstil til standard", - "resetToDefaultsSuccess": "Indstillinger nulstillet til standard.", - "storageModeSwitch": "Gemmeplads for præferencer", - "sectionAccount": "Konto", - "desktopProfileTitle": "Kun denne enhed", - "desktopProfileDescription": "Denne profil findes kun på denne enhed og logger sig selv ind. Link den til en Termix-server for at bruge de samme værter og indstillinger på alle enheder.", - "sectionInterface": "Grænseflade", - "interfacePresetDesc": "Hvor mange detaljer Termix viser. Alle funktioner forbliver tilgængelige.", "preset_simple": "Enkel", "preset_simple_desc": "Kun det essentielle.", "preset_balanced": "Balanceret", "preset_balanced_desc": "Det standard layout.", "preset_advanced": "Avanceret", "preset_advanced_desc": "Alt tændt, tæt pakket.", - "presetClearOverrides": "Nulstil alle", - "presetOverridesTitle": "Tilpasset", - "presetRevertArea": "Fortryd", - "presetConfirmTitle": "Skift til {{preset}}?", - "presetConfirmDesc": "Dette nulstiller din sidebjælke, navigation, dashboard-layout, terminalværktøjslinje og filhåndteringsvisning. Dine værter, legitimationsoplysninger og startside påvirkes ikke.", - "presetConfirmApply": "Anvend forudindstilling", - "runSetupAgainDesc": "Gå igen gennem opsætningen ved første start.", - "runSetupAgainButton": "Kør opsætning", "uiArea_chrome": "App-chrome", "uiArea_hostList": "Værtsliste", "uiArea_credentialList": "Legitimationsliste", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Filhåndtering", "uiArea_hostEditor": "Værtredigering", - "sectionAppearance": "Udseende", - "sectionSecurity": "Sikkerhed", - "sectionApiKeys": "API-nøgler", - "sectionData": "Data", - "usernameLabel": "Brugernavn", - "roleLabel": "Rolle", - "roleAdministrator": "Administrator", - "authMethodLabel": "Godkendelsesmetode", - "authMethodLocal": "Lokal", - "twoFaLabel": "2FA", - "twoFaOn": "Tændt", - "twoFaOff": "Slukket", - "versionLabel": "Version", - "cliTitle": "Termix CLI", - "cliDescription": "Åbn terminaler, kør kommandoer og flyt filer fra din egen shell.", - "cliLearnMore": "Læs mere", - "deleteAccount": "Slet konto", - "deleteAccountDescription": "Slet din konto permanent", - "deleteButton": "Slet", - "deleteAccountPermanent": "Denne handling er permanent og kan ikke fortrydes.", - "deleteAccountWarning": "Alle sessioner, værter, legitimationsoplysninger og indstillinger slettes permanent.", - "confirmPasswordDeletePlaceholder": "Indtast din adgangskode for at bekræfte", "languageLabel": "Sprog", "themeLabel": "Tema", "fontSizeLabel": "Skriftstørrelse", "interfaceFontLabel": "Grænsefladeskrifttype", "interfaceFontDescription": "Skifter skrifttypen i applikationens grænseflade. Terminalprofiler beholder deres egne skrifttypeindstillinger.", "accentColorLabel": "Accentfarve", - "keyboardShortcuts": "Tastaturgenveje", - "keyboardShortcutsDescription": "Tilpas genveje til kopiering, indsætning og kommandoer i terminalen", - "manageShortcuts": "Administrer", - "commandPalette": "Kommandopalette", - "commandPaletteDesc": "Aktiver tastaturgenvej", - "reopenTabsOnLogin": "Genåbn faner ved login", - "reopenTabsOnLoginDesc": "Gendan dine åbne faner, når du logger ind eller opdaterer siden, selv fra en anden enhed", - "confirmTabClose": "Bekræft lukning af fane", - "confirmTabCloseDesc": "Spørg, før terminalfaner lukkes", - "showTabNumbers": "Vis fanenumre", - "showTabNumbersDesc": "Vis et nummer på hver fane for at gøre det nemmere at skelne dem", - "settingsAppRail": "App-stolpe", - "sidebarSettingsMoved": "Indstillingerne for visning af værtsiderstolpen er flyttet til panelet Tilpas siderstolpe, som åbnes fra værtsværktøjslinjen.", - "showHostTags": "Vis værtnøgleord", - "showHostTagsDesc": "Vis nøgleord i værtslisten", - "statusColors": "Ægte statusfarver", - "statusColorsDesc": "Brug grøn/rød for online/offline-status i stedet for accentfarven", - "pinAppRail": "Fastgør app-stolpe", - "pinAppRailDesc": "Hold venstre app-stolpe altid udvidet i stedet for at udvide den ved hover", - "expandAppRailOnHover": "Udvid app-stolpe ved hover", - "expandAppRailOnHoverDesc": "Tillad, at venstre app-stolpe udvides, når markøren bevæger sig over den", - "appRailHoverPushesContent": "Skub indholdet, når den udvides", - "appRailHoverPushesContentDesc": "Gør plads til den udvidede sidebjælke i stedet for at åbne den over siden. Åbne sessioner, som f.eks. fjernskrivebord, ændrer størrelse hver gang", - "showPinAppRailButton": "Vis knap til fastgørelse af app-stolpe", - "showPinAppRailButtonDesc": "Vis en knap i app-stolpen til at fastgøre den åben. Slukket som standard.", - "settingsNavigation": "Navigation", - "navigationTabsDesc": "Vælg, hvilke faner der vises i app-stolpen", - "settingsUpdates": "Opdateringer", - "disableUpdateChecks": "Deaktiver opdateringskontroller", - "disableUpdateChecksDesc": "Stop med at tjekke for opdateringer", - "changePassword": "Skift adgangskode", - "currentPasswordLabel": "Nuværende adgangskode", - "currentPasswordPlaceholder": "Nuværende adgangskode", - "newPasswordLabel": "Ny adgangskode", - "newPasswordPlaceholder": "Ny adgangskode", - "confirmPasswordLabel": "Bekræft ny adgangskode", - "confirmPasswordPlaceholder": "Bekræft ny adgangskode", - "updatePassword": "Opdater adgangskode", - "createApiKeyTitle": "Opret API-nøgle", - "createApiKeyDescription": "Generer en ny API-nøgle til programmeret adgang.", - "apiKeyNameLabel": "Navn", - "apiKeyNamePlaceholder": "f.eks. CI Pipeline", - "expiryDateLabel": "Udløbsdato", - "optional": "valgfrit", - "cancel": "Annuller", - "createKey": "Opret nøgle", - "apiKeyCreatedWarning": "Nøgle oprettet - kopier den nu, da den ikke vises igen.", - "copyApiKey": "Kopiér API-nøgle", - "copiedToClipboard": "Kopieret til udklipsholder", "apiKeyCount_one": "{{count}} nøgle", - "apiKeyCount_other": "{{count}} nøgler", - "newKey": "Ny nøgle", - "noApiKeys": "Ingen API-nøgler endnu.", - "apiKeyActive": "Aktiv", - "apiKeyUsageHint": "Indkludér din nøgle i", - "apiKeyUsageHintHeader": "headeren.", - "apiKeyPermissionsHint": "Nøgler arver rettighederne fra den bruger, der oprettede dem.", - "exportData": "Eksportér mine data", - "exportDataDesc": "Download en backup af dine værter, legitimationsoplysninger og indstillinger for at overføre til en anden enhed", - "export": "Eksportér", - "exporting": "Eksporterer...", - "importData": "Importér mine data", - "importDataDesc": "Gendan dine værter, legitimationsoplysninger og indstillinger fra en .sqlite-backupfil", - "importDataSelected": "Valgt: {{name}}", - "selectFile": "Vælg fil", - "changeFile": "Skift", - "import": "Importér", - "importing": "Importerer...", - "exportSuccess": "Data eksporteret korrekt", - "exportFailed": "Eksport af data mislykkedes", - "importSelectFile": "Vælg venligst en fil først", - "importCompleted": "Import fuldført: {{total}} elementer importeret, {{skipped}} springet over", - "importFailed": "Import mislykkedes: {{error}}", - "roleUser": "Bruger", - "authMethodDual": "Dobbelt godkendelse", - "authMethodExternal": "Ekstern", - "done": "Udført", - "apiKeyNameRequired": "Nøglenavn er påkrævet", - "apiKeyCreated": "API-nøglen \"{{name}}\" oprettet", - "apiKeyCreateFailed": "Kunne ikke oprette API-nøgle", - "apiKeyUser": "Bruger", - "apiKeyExpires": "Udløber", - "apiKeyRevoked": "API-nøglen \"{{name}}\" tilbagekaldt", - "apiKeyRevokeFailed": "Kunne ikke tilbagekalde API-nøgle", - "passwordFieldsRequired": "Nuværende og ny adgangskode er påkrævet", - "passwordMismatch": "Adgangskoderne matcher ikke", - "passwordTooShort": "Adgangskoden skal være på mindst 6 tegn", - "passwordUpdated": "Adgangskode opdateret korrekt", - "passwordUpdateFailed": "Kunne ikke opdatere adgangskode", - "deletePasswordRequired": "Adgangskode er påkrævet for at slette din konto", - "deleteFailed": "Kunne ikke slette konto", - "deleting": "Sletter...", "colorPickerTooltip": "Åbn farvevælger", "themeSystem": "System", "themeLight": "Lys", @@ -1755,18 +1122,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Logget ind på {{server}}", - "linkedProfileDescription": "Denne enhed bruger din konto på serveren og gemmer en kopi af dine data, så den stadig fungerer offline.", - "manageSync": "Administrer synkronisering", - "setUpSync": "Link til en server", - "settingsTabsAndShortcuts": "Faner og genveje", - "onBetaTitle": "Du er i en beta-version", - "onBetaDescription": "Tak for, at du tester. Fortæl os, hvad der går galt.", - "tryBetaTitle": "Prøv nye funktioner tidligt", - "tryBetaDescription": "Deltag i beta-programmet under Opdateringer.", - "sendBetaFeedback": "Send beta-feedback", - "openUpdates": "Opdateringer" + "themeGruvbox": "Gruvbox" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "{{name}} er nødvendig for {{list}}. Sluk dem eller afinstaller dem først.", "missingDependencies": "{{name}} har brug for {{list}}, som ikke er installeret.", "consentChanged": "Det, dette plugin anmoder om, er ændret siden du kiggede. Tjek listen igen.", - "upload": "Kunne ikke læse {{name}}: {{error}}", - "developerMode": "Kunne ikke ændre udvikler-tilstand: {{error}}" + "upload": "Kunne ikke læse {{name}}: {{error}}" }, "data": { "title": "Gemte data", @@ -2145,13 +1500,7 @@ "browsePlugins": "Gennemse plugins", "loading": "Indlæser", "developer": { - "title": "Udviklermodus til plugins", - "hint": "Gør det muligt for administratorer at installere plugins fra en .tmxplug-fil i fanen Plugins uden kontrol fra registret. Brug det til at bygge og teste dine egne plugins.", - "enableTitle": "Aktiver udviklermodus?", - "enableBody": "Administratorer vil kunne installere plugins fra filer, som Termix ikke har kontrolleret. Et plugin kan gøre alt, hvad dets funktioner tillader, så aktiver kun dette, mens du bygger eller tester plugins.", - "enable": "Aktiver", - "installFromFile": "Installer fra fil", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS er indstillet, så installation fra fil forbliver blokeret." + "installFromFile": "Installer fra fil" }, "count": { "downloads_one": "{{formatted}} download", @@ -2189,71 +1538,7 @@ "secretSet": "Indstillet", "secretNotSet": "Ikke indstillet", "secretReplace": "Erstat", - "pluginSettingsSaved": "Indstillinger gemt", - "pluginSettingsInvalid": "Nogle indstillinger kunne ikke gemmes. Tjek de markerede felter.", - "pluginSettingsSaveFailed": "Kunne ikke gemme indstillinger", - "pluginSettingsLoadFailed": "Kunne ikke indlæse indstillinger", - "featureUnavailable": "{{name}} er ikke tilgængelig lige nu. Disse indstillinger gemmes, men træder ikke i kraft.", - "account": "Konto", - "security": "Sikkerhed", - "apiKeys": "API-nøgler", - "data": "Data og synkronisering", - "interface": "Grænseflade", - "appearance": "Udseende", - "keybindings": "Tastaturgenveje", - "adminGeneral": "Generelt", - "adminUsers": "Brugere", - "adminSessions": "Sessioner", - "adminRoles": "Rolle", - "adminHostDefaults": "Standardværdier for værter", - "adminBranding": "Branding", - "adminDatabase": "Database", - "adminSsl": "SSL", - "adminApiKeys": "API-nøgler", - "adminAuditLog": "Revisionslog", - "bandYou": "Din konto", - "bandApp": "Denne app", - "bandPlugins": "Plugins", - "bandInstance": "Denne server", - "searchPlaceholder": "Søg i indstillinger", - "noResults": "Ingen indstillinger matcher.", - "pages": "Sider", - "instanceSettings": "Serverindstillinger", - "nothingHere": "Intet at indstille her.", - "searchPage": "Søg på denne side", - "noPageMatches": "Intet på denne side matcher.", - "updates": { - "title": "Opdateringer", - "betaProgram": "Beta-program", - "betaIntro": "Betas er tidlige versioner af den næste Termix-version. De udkommer om tirsdagen og fredagen, når der er noget nyt at prøve. De kan indeholde fejl, og din feedback er det, der gør den stabile version bedre.", - "termixBetas": "Termix betas", - "termixBetasHint": "Fortæl mig om nye betas, ikke kun stabile versioner.", - "runningBetaBuild": "Du kører en beta-version. For at forlade den, skal du skifte tilbage til et stabilt image eller installeringsprogram.", - "howToInstall": "Sådan får du betaversionen", - "desktopInstall": "Download beta-installationsprogrammet og installer det oveni den nuværende version.", - "downloadBeta": "Download {{version}}", - "dockerInstall": "Skift dit image til beta-tagget og genstart containeren:", - "copy": "Kopier", - "copied": "Kopieret", - "copyFailed": "Kunne ikke kopiere", - "learnMore": "Læs mere om betas", - "feedback": "Feedback", - "feedbackHint": "Har du fundet en fejl eller har du en idé? Den sendes direkte til udviklerne med din version udfyldt.", - "sendFeedback": "Send beta-feedback", - "releases": "Versioner", - "thisVersion": "Denne version", - "newestStable": "Nyeste stabile version", - "newestBeta": "Nyeste beta", - "noRelease": "Ingen lige nu", - "pluginBetas": "Plugin-betas", - "pluginBetasIntro": "Hvert plugin kan bruge betas på egen hånd. For at prøve et, skal du åbne det og trykke på Prøv beta.", - "openPlugins": "Åbn plugins", - "waitingForStable": "Tilbage på stabil version. Bliver på {{version}}, indtil en stabil version er nyere.", - "backToStable": "Tilbage til stabil version", - "allPluginsBeta": "Brug betas til alle plugins", - "allPluginsStable": "Alle plugins tilbage til stabil version", - "saveFailed": "Kunne ikke gemme ændringen" - } + "featureUnavailable": "{{name}} er ikke tilgængelig lige nu. Disse indstillinger gemmes, men træder ikke i kraft." }, "managerCard": { "refresh": "Opdater", @@ -2263,83 +1548,13 @@ "filter": "Filtrer..." }, "sync": { - "server": "Termix-server", - "account": "Konto", - "status": "Status", - "never": "aldrig", - "justNow": "lige nu", "minutesAgo_one": "{{count}} minut siden", "minutesAgo_other": "{{count}} minutter siden", "hoursAgo_one": "{{count}} time siden", "hoursAgo_other": "{{count}} timer siden", - "actionFailed": "Det virkede ikke. Prøv igen.", - "unlinkedTitle": "Kun denne enhed", - "unlinkedBody": "Termix fungerer selvstændigt på denne enhed. Link den til din Termix-server for at holde alt synkroniseret.", - "unlinkedPointHosts": "Dine værter, legitimationsoplysninger, snippets og indstillinger følger dig til hver enhed.", - "unlinkedPointOffline": "Alt fungerer stadig, når serveren ikke kan nås, og opdateres senere.", - "unlinkedPointAccount": "Du logger ind med din serverkonto, og værter, som andre har delt med dig, vises også her.", - "linkButton": "Link til en server", - "state": { - "syncing": "Synkroniserer", - "offline": "Serveren kan ikke nås", - "error": "Synkronisering stoppet", - "signedOut": "Logget ud", - "synced": "Synkroniseret {{time}}" - }, "pending_one": "{{count}} ændring venter på synkronisering", "pending_other": "{{count}} ændringer venter på synkronisering", - "signInAgain": "Log ind igen", - "syncNow": "Synkroniser nu", - "unlink": "Fjern link", - "unlinked": "Denne enhed er ikke længere linket", - "unlinkTitle": "Fjern kobling til denne enhed?", - "unlinkDescription": "Det stopper synkroniseringen og logger dig ud af serveren. Værter, der er delt med dig af andre, fjernes fra denne enhed uanset hvad.", - "unlinkKeepTitle": "Behold mine data her", - "unlinkKeepBody": "Dine værter, legitimationsoplysninger og indstillinger forbliver på denne enhed og fungerer fortsat uafhængigt.", - "unlinkRemoveTitle": "Fjern synkroniserede data", - "unlinkRemoveBody": "Alt, der kom fra serveren, fjernes fra denne enhed. Kun værter, der er gemt lokalt på denne enhed, forbliver.", - "conflictsTitle": "Konflikter", - "conflictsDescription": "Disse blev ændret her og på serveren på samme tid. Serverversionen er i brug. Behold din version for at sende den til serveren i stedet.", - "keepMine": "Behold min version", - "keepServer": "Behold serverversion", - "errorsTitle": "Ikke synkroniseret", - "errorsDescription": "Serveren accepterede ikke disse ændringer. De forbliver på denne enhed.", - "errorPermission": "Din konto på serveren har ikke tilladelse til at foretage denne ændring.", - "retry": "Prøv igen", - "whatSyncs": "Hvad der synkroniseres", - "whatSyncsDescription": "Sluk for alt, du vil beholde kun på denne enhed.", - "coreGroup": "Termix", - "notOnServer": "Serveren har ikke dette", - "notOnDevice": "Ikke på denne enhed endnu", - "localOnlyHint": "Du kan også beholde enkelte værter eller mapper lokalt på denne enhed via deres indstillinger.", - "originTitle": "Hvor forbindelser starter", - "originDescription": "Forbind til værter fra denne enhed, eller gennem serveren. Du kan ændre dette pr. vært.", - "originLocal": "Denne enhed", - "originRemote": "Serveren", - "entities": { - "hosts": "Værter", - "sshCredentials": "Legitimationsoplysninger", - "sshFolders": "Mapper", - "userPreferences": "Præferencer", - "pluginUserSettings": "Plugin-indstillinger", - "sharedHosts": "Værter delt med dig", - "sharedCredentials": "Legitimationsoplysninger delt med dig", - "vaultProfiles": "Vault-profiler", - "snippetFolders": "Snippet-mapper", - "snippets": "Snippets", - "dashboardServiceLinks": "Service-links", - "homepageItems": "Startside-elementer", - "networkTopology": "Netværkskort", - "workspaces": "Arbejdsområder", - "hostDefaults": "Standardindstillinger for værter", - "hostDefaultsAdmin": "Standardindstillinger for serverværter", - "aiProviders": "AI-leverandører", - "homepageLayouts": "Startside-layouts", - "accountProfile": "Kontoprofil" - }, "proxy": { - "title": "Omvendt proxy", - "description": "Kun nødvendigt, når noget som Cloudflare Access eller en login-side sidder foran din server.", "headersTitle": "Ekstra headers", "headersHint": "Sendes med hver anmodning til serveren, f.eks. en Cloudflare Access service-token.", "headerName": "Header-navn", @@ -2352,8 +1567,7 @@ "username": "Brugernavn", "password": "Adgangskode", "allowInvalidCertificate": "Stol på et selvsigneret certifikat", - "allowInvalidCertificateHint": "Kun til din egen server, når dens certifikat ikke er fra en kendt autoritet.", - "saved": "Gemt" + "allowInvalidCertificateHint": "Kun til din egen server, når dens certifikat ikke er fra en kendt autoritet." }, "problems": { "invalidUrl": "Det ligner ikke en webadresse.", @@ -2391,6 +1605,27 @@ "linking": "Linker og kører den første synkronisering...", "linked": "Linket. Dine data synkroniseres nu.", "signedInAgain": "Logget ind. Synkroniseringen kører igen." + }, + "entities": { + "hosts": "Værter", + "sshCredentials": "Legitimationsoplysninger", + "sshFolders": "Mapper", + "userPreferences": "Præferencer", + "pluginUserSettings": "Plugin-indstillinger", + "sharedHosts": "Værter delt med dig", + "sharedCredentials": "Legitimationsoplysninger delt med dig", + "vaultProfiles": "Vault-profiler", + "snippetFolders": "Snippet-mapper", + "snippets": "Snippets", + "dashboardServiceLinks": "Service-links", + "homepageItems": "Startside-elementer", + "networkTopology": "Netværkskort", + "workspaces": "Arbejdsområder", + "hostDefaults": "Standardindstillinger for værter", + "hostDefaultsAdmin": "Standardindstillinger for serverværter", + "aiProviders": "AI-leverandører", + "homepageLayouts": "Startside-layouts", + "accountProfile": "Kontoprofil" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "Denne vært sætter sin egen værdi. Klik for at bruge standarden fra {{source}} igen", "clearTitle": "Sat på dette niveau. Klik for at rydde det og bruge {{source}} i stedet", "inheritedTitle": "Følger standarden fra {{source}}", - "titleAdmin": "Serverens værtstandarder", - "titleUser": "Mine værtstandarder", - "titleFolder": "Mappestandarder: {{name}}", - "descriptionAdmin": "Standarder for hver vært på denne server. En brugs egne standarder, en mappes standarder eller værten selv kan stadig sætte en anden værdi. Ændr et felt for at sætte det her, eller rydd det for at lade det være usat.", - "descriptionUser": "Standarder for alle dine værter, over serverens. En mappe eller værten selv kan stadig sætte en anden værdi. Ændr et felt for at sætte det her, eller rydd det for at lade det være usat.", - "descriptionFolder": "Standarder for værterne i denne mappe og dens undermapper, over dine egne. En vært kan stadig sætte en anden værdi. Ændr et felt for at sætte det her, eller rydd det for at lade det være usat.", - "save": "Gem standarder", "saved_one": "Standarder gemt. {{count}} vært blev opdateret.", "saved_other": "Standarder gemt. {{count}} værter blev opdateret.", - "savedInBackground": "Standarder gemt. Værterne opdateres i baggrunden.", "appliedToHosts_one": "{{count}} vært blev opdateret med de nye standarder.", "appliedToHosts_other": "{{count}} værter blev opdateret med de nye standarder.", - "saveFailed": "Kunne ikke gemme standarderne", - "loadFailed": "Kunne ikke indlæse standarderne", - "confirmTitle": "Gem standarder?", "confirmChanges_one": "{{count}} vært følger disse standarder og vil ændre sig.", "confirmChanges_other": "{{count}} værter følger disse standarder og vil ændre sig.", - "confirmNoChanges": "Ingen eksisterende værter ændres. Nye værter starter med disse standarder.", - "menuMyDefaults": "Mine værtstandarder", - "folderDefaultsAction": "Mappestandarder", - "adminSectionDescription": "Sæt de standarder, hver vært på denne server følger, for hver indstilling en vært har, inklusive hver plugins. Brugere og mapper kan sætte deres egne ovenpå, og enhver vært kan stadig bruge sin egen værdi.", - "editServerDefaults": "Rediger serverstandarder", - "resetMenu": "Nulstil", - "resetAll": "Nulstil alt til standardværdier", - "resetCore": "Nulstil forbindelse og SSH til standardværdier", "resetDone_one": "{{count}} vært følger nu sine standardværdier.", "resetDone_other": "{{count}} værter følger nu deres standardværdier." }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "Gemt. Skriv for at erstatte det." }, - "sharing": { - "revokeConfirm": "Fjern adgang for {{name}}?", - "revoke": "Fjern adgang" - }, "manage": { - "searchSettings": "Søg i indstillinger", - "noMatchingSettings": "Ingen indstillinger matcher.", - "sections": "Sektioner", - "sectionNeedsAttention": "Noget her kræver opmærksomhed", "needsAttention_one": "Én ting kræver opmærksomhed.", "needsAttention_other": "{{count}} ting kræver opmærksomhed.", - "bandHost": "Vært", - "bandFeatures": "Protokoller og plugins", - "bandCredential": "Legitimationsoplysninger", - "sshConnection": "SSH-forbindelse", - "errorAddressRequired": "En adresse er påkrævet.", - "errorPortRange": "Brug en port mellem 1 og 65535.", - "defaults": "Standardværdier", - "searchHosts": "Søg i værter", - "searchCredentials": "Søg i legitimationsoplysninger", - "searchDefaults": "Søg i standardværdier", - "addCredential": "Tilføj legitimationsoplysninger", - "nothingMatches": "Intet matcher", - "nothingYet": "Intet her endnu", - "emptyHostsHint": "Tilføj en vært, og den vises her i den mappe, du tildeler den.", - "emptyCredentialsHint": "Legitimationsoplysninger, du gemmer, kan genbruges af enhver vært.", - "collapse": "Skjul", - "expand": "Udvid", - "cannotBeUndone": "Dette kan ikke fortrydes.", - "hostNotFound": "Kunne ikke finde den vært. Prøv at opdatere listen.", "hostCount_one": "{{count}} vært", "hostCount_other": "{{count}} værter", "credentialCount_one": "{{count}} legitimationsoplysning", - "credentialCount_other": "{{count}} legitimationsoplysninger", - "newHost": "Ny vært", - "newCredential": "Nye legitimationsoplysninger", - "advanced": "Avanceret", - "pickHost": "Vælg en vært at redigere", - "pickCredential": "Vælg legitimationsoplysninger at redigere", - "pickDefaults": "Vælg et niveau af standardværdier at redigere", - "pickHint": "Alt om en forbindelse findes her, grupperet så du kan finde det." + "credentialCount_other": "{{count}} legitimationsoplysninger" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/de_DE.json b/src/ui/locales/translated/de_DE.json index 92e415d39..9213a0ebd 100644 --- a/src/ui/locales/translated/de_DE.json +++ b/src/ui/locales/translated/de_DE.json @@ -141,7 +141,6 @@ "continue": "Weiter", "error": "Fehler", "unsavedChanges": "Nicht gespeicherte Änderungen", - "more": "Mehr", "loading": "Wird geladen...", "host": "Host", "selectHost": "Host auswählen...", @@ -154,7 +153,6 @@ "cancel": "Abbrechen", "username": "Benutzername", "login": "Anmelden", - "logout": "Abmelden", "register": "Registrieren", "password": "Passwort", "confirmPassword": "Passwort bestätigen", @@ -165,8 +163,6 @@ "rename": "Umbenennen", "edit": "Bearbeiten", "confirm": "Bestätigen", - "next": "Weiter", - "previous": "Zurück", "refresh": "Aktualisieren", "language": "Sprache", "backendReconnected": "Serververbindung wiederhergestellt", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Mehr über jedes Plugin erfahren" }, "desktopUpdates": { - "title": "Desktop-App", - "mode": "Updates", - "modeHint": "Wie diese App neue Versionen erhält.", - "manualModeHint": "Diese Kopie kann sich nicht selbst aktualisieren, daher teilt Termix Ihnen nur mit, wenn eine neue Version verfügbar ist.", "modeAutomatic": "Automatisch", "modePrompt": "Zuerst fragen", "modeNever": "Nie", @@ -247,15 +239,6 @@ "onboardingTitle": "App-Updates", "onboardingBody": "Die Desktop-App kann sich nun selbst aktualisieren. Wähle aus, wie neue Versionen bereitgestellt werden sollen. Du kannst dies später in den Einstellungen unter Updates ändern.", "onboardingManual": "Diese Kopie der App wurde auf eine Weise installiert, die keine Selbstaktualisierung unterstützt. Daher teilt Termix Ihnen mit, wenn eine neue Version verfügbar ist, und stellt einen Link zum Herunterladen bereit.", - "status": "Version {{version}}", - "statusIdle": "Noch nicht geprüft", - "statusChecking": "Prüfe auf Updates", - "statusAvailable": "Version {{version}} ist verfügbar", - "statusDownloading": "Lade {{version}} herunter ({{progress}}%)", - "statusReady": "Version {{version}} ist bereit. Neustart zur Installation.", - "statusUpToDate": "Du hast die neueste Version", - "statusError": "Konnte nicht nach Updates suchen. Versuche es später erneut.", - "checkNow": "Jetzt prüfen", "download": "Herunterladen", "restart": "Jetzt neu starten", "later": "Später", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Schließen", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Passwort kopieren", - "copySudoPassword": "Sudo-Passwort kopieren", - "passwordCopied": "Passwort in die Zwischenablage kopiert", - "failedToCopyPassword": "Passwort konnte nicht kopiert werden", - "refreshTab": "Verbindung aktualisieren", - "renameTab": "Tab umbenennen", "dashboard": "Dashboard", "quickConnect": "Schnellverbindung", - "openAsTabHint": "Strg+Klick oder Mittelklick, um als Tab zu öffnen", - "openAsTab": "Als Tab öffnen", - "openInRightDock": "Im rechten Dock öffnen", - "closeRightDock": "Rechtes Dock schließen", - "toggleRightDock": "Rechtes Dock umschalten", "hosts": "Hosts", "credentials": "Anmeldeinformationen", "connections": "Verbindungen", - "keepSideMenuOpen": "Menü offen halten", - "collapseSideMenu": "Menü einklappen", - "roleAdministrator": "Administrator", - "roleUser": "Benutzer", "sync": "Synchronisieren", "reconnectDisconnectedTerminals": "Alle getrennten Terminals wiederherstellen", "reconnectingTerminals_one": "Stelle {{count}} Terminal wieder her", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "Wiederherstellen von {{count}} Terminals konnte nicht gestartet werden", "fullscreenUnsupported": "Vollbild wird von diesem Browser nicht unterstützt", "fullscreenFailed": "Vollbildmodus konnte nicht umgeschaltet werden", - "resetSidebarWidth": "Breite zurücksetzen", - "collapseSidebar": "Seitenleiste einklappen", - "openSidebar": "Seitenleiste öffnen", "confirmCloseHost": "{{host}} schließen?", - "enterFullscreen": "Vollbildmodus (Strg+Umschalt+F)", - "exitFullscreen": "Vollbildmodus beenden (Strg+Umschalt+F)", - "group": { - "objects": "Deine", - "tools": "Tools", - "system": "System" - }, - "searchEverything": "Hosts, Tabs und Aktionen durchsuchen", - "search": "Suchen", "hiddenCount_one": "{{count}} ausgeblendet", "hiddenCount_other": "{{count}} ausgeblendet", - "showInRail": "In Seitenleiste anzeigen", - "moveUp": "Nach oben verschieben", - "moveDown": "Nach unten verschieben", - "resetRailOrder": "Reihenfolge zurücksetzen", - "hideFromRail": "In Seitenleiste ausblenden", - "openSettings": "Einstellungen öffnen", "settings": "Einstellungen", "manage": "Verwalten", - "mobileNavigation": "Navigation", "plugins": "Plugins" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "Import abgeschlossen: {{imported}} importiert, {{updated}} aktualisiert, {{failed}} fehlgeschlagen", "importHostsFailed": "Import von Hosts fehlgeschlagen" }, - "commandPalette": { - "searchPlaceholder": "Hosts, Befehle oder Einstellungen durchsuchen...", - "quickActions": "Schnellaktionen", - "navigation": "Navigation", - "orShortcut": "oder", - "addNewHost": "Neuen Host hinzufügen", - "adminSettings": "Admin-Einstellungen", - "addCredential": "Anmeldeinformationen hinzufügen", - "recentActivity": "Letzte Aktivitäten", - "serversAndHosts": "Server & Hosts", - "noHostsFound": "Keine Hosts gefunden, die mit „{{search}}“ übereinstimmen", - "links": "Links", - "navigate": "Navigieren", - "select": "Auswählen", - "pluginActions": "Weitere Aktionen", - "noTargetTab": "Kein Terminal-Tab ist geöffnet", - "documentation": "Dokumentation" - }, "splitScreen": { "title": "Geteilter Bildschirm", "defaultLabel": "Aufteilung {{number}}", "splitRight": "Nach rechts aufteilen", "splitDown": "Nach unten aufteilen", - "addToSplit": "Zu {{split}} hinzufügen", "paneEmptyItem": "Fenster {{index}}: leer", "paneItem": "Fenster {{index}}: {{label}}", "paneNumber": "Fenster {{index}}", - "newPaneRight": "Neues Fenster rechts", - "newPaneBelow": "Neues Fenster unten", "emptyTitle": "Leeres Fenster", "emptyHint": "Wählen Sie aus, was hier angezeigt werden soll. Solange dieses Fenster ausgewählt ist, wird alles, was Sie aus der Seitenleiste öffnen, auch hier geöffnet.", "openTabs": "Offene Tabs", @@ -962,7 +890,6 @@ "clearPane": "Dieses Fenster leeren", "zoom": "Fenster vergrößern", "unzoom": "Layout wiederherstellen", - "unsplit": "Aufteilung aufheben", "layouts": "Layouts", "applyLayout": "Layout ändern", "maxPanes_one": "Eine Aufteilung kann maximal {{count}} Bereich enthalten", @@ -971,8 +898,6 @@ "dropHere": "Hierher ziehen zum Anzeigen", "paneActions": "Fensteraktionen", "dividerHint": "Ziehen zum Ändern der Größe. Doppelklick zum Ausgleich.", - "openInSplit": "In Aufteilung öffnen", - "openInNewSplit": "Neue Aufteilung mit dem aktuellen Tab", "shortcuts": "Tastenkürzel", "shortcutNavigate": "Zwischen Fenstern wechseln", "presets": { @@ -986,23 +911,6 @@ "grid6": "Raster mit sechs" } }, - "connections": { - "noConnections": "Keine Verbindungen", - "noConnectionsDesc": "Öffnen Sie ein Terminal, einen Dateimanager oder einen Remotedesktop, um Verbindungen hier zu sehen", - "connectedFor": "Verbunden seit {{duration}}", - "connected": "Verbunden", - "disconnected": "Getrennt", - "reconnect": "Erneut verbinden", - "sectionOpen": "Offen", - "sectionBackground": "Hintergrund", - "backgroundDesc": "Sitzungen bleiben {{minutes}} Minuten nach der Trennung erhalten und können erneut verbunden werden.", - "expiresIn": "Läuft in {{duration}} ab", - "search": "Verbindungen durchsuchen...", - "noSearchResults": "Keine Verbindungen entsprechen Ihrer Suche", - "rename": "Sitzung umbenennen", - "forgetConfirm": "Hintergrundsitzung für {{name}} beenden?", - "forget": "Sitzung beenden" - }, "sshAuth": { "totpRequired": "Zwei-Faktor-Authentifizierung erforderlich", "totpCodeLabel": "Bestätigungscode", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "Schlüsselpasswort", "pastePrivateKey": "Fügen Sie Ihren privaten Schlüssel hier ein...", - "enterPassword": "Geben Sie Ihr Passwort ein", - "apiKeyName": "z. B. CI-Pipeline", - "credentialName": "z. B. Produktions-SSH-Schlüssel", - "optionalDetails": "Optionale Details...", - "sshUsername": "z. B. root oder deploy", - "hostAddress": "10.0.0.1 oder example.com", - "hostName": "z. B. Webserver Produktion" + "enterPassword": "Geben Sie Ihr Passwort ein" }, "dashboard": { - "title": "Dashboard", - "github": "GitHub", - "reportBug": "Fehler melden", - "discord": "Discord", - "docs": "Dokumentation", - "donate": "Spenden", - "serverOverview": "Serverübersicht", - "version": "Version", "updateAvailable": "Update verfügbar", - "beta": "Beta", - "uptime": "Betriebszeit", - "database": "Datenbank", - "healthy": "Funktionsfähig", - "error": "Fehler", - "totalHosts": "Gesamtzahl der Hosts", - "totalCredentials": "Gesamtzahl der Anmeldeinformationen", - "recentActivity": "Letzte Aktivitäten", - "reset": "Zurücksetzen", - "noRecentActivity": "Keine aktuellen Aktivitäten", - "quickActions": "Schnellaktionen", - "addHost": "Host hinzufügen", - "addCredential": "Anmeldeinformation hinzufügen", - "adminSettings": "Admin-Einstellungen", - "userProfile": "Benutzerprofil", - "serverStats": "Serverstatistiken", - "customizeLayout": "Dashboard anpassen", - "justNow": "gerade eben" + "beta": "Beta" }, "dashboardTab": { "stable": "STABIL", - "registerNewServer": "Neuen Server registrieren", - "storeSshKeysOrPasswords": "SSH-Schlüssel oder Passwörter speichern", - "manageUsersAndRoles": "Benutzer und Rollen verwalten", - "manageYourAccount": "Ihr Konto verwalten", - "hostStatus": "Host-Status", - "noHostsConfigured": "Keine Hosts konfiguriert", - "checking": "PRÜFUNG", - "commandPalette": "Befehlspalette", - "done": "Fertig", - "clear": "Leeren", - "dragToResizeColumns": "Spaltenbreite per Drag anpassen", - "hostsAvailable": "Verfügbare Hosts", - "removeSection": "Bereich entfernen", - "addSection": "Bereich hinzufügen", - "allSectionsShown": "Alles ist bereits auf dem Dashboard.", - "fromPlugins": "Aus Plugins", - "dropHere": "Bereich hier ablegen", - "dragToReorder": "Bereiche per Drag neu anordnen", - "clearActivityConfirm": "Letzte Aktivitäten löschen?", - "resetConfirm": "Dashboard auf das Standard-Layout zurücksetzen?", "onlineCount_one": "{{count}} online", "onlineCount_other": "{{count}} online", "hostCount_one": "{{count}} Host", "hostCount_other": "{{count}} Hosts" }, "admin": { - "sectionGeneral": "Allgemein", - "sectionUsers": "Benutzer", - "sectionSessions": "Sitzungen", - "sectionRoles": "Rollen", - "sectionDatabase": "Datenbank", - "sectionApiKeys": "API-Schlüssel", - "sectionAuditLog": "Audit-Protokoll", - "sectionSsl": "HTTPS-Zertifikat", - "sectionBranding": "White Label", - "brandingAppName": "Anwendungsname", - "brandingAppNameDesc": "Wird auf dem Anmeldebildschirm und im Browser-Tab angezeigt. Leer lassen, um \"Termix\" zu verwenden.", - "brandingTagline": "Slogan", - "brandingTaglineDesc": "Wird unter dem Anwendungsname auf dem Anmeldebildschirm angezeigt. Leer lassen, um den Standardslogan zu verwenden.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG oder WEBP, bis zu 750 KB. Ersetzt das Standard-Icon auf dem Anmeldebildschirm und im Browser-Tab.", - "brandingLogoUpload": "Logo hochladen", - "brandingLogoReset": "Auf Standard zurücksetzen", - "brandingLogoInvalid": "Ungültiges Bild. Verwenden Sie eine PNG-, JPEG- oder WEBP-Datei mit maximal 750 KB.", - "brandingSaved": "Branding-Einstellungen gespeichert", - "brandingSaveFailed": "Fehler beim Speichern der Branding-Einstellungen", - "sslDescription": "Das Zertifikat, das Termix über HTTPS bereitstellt. Laden Sie hier Ihr eigenes hoch oder beziehen und erneuern Sie eines von Let's Encrypt im Bereich ACME-Zertifikate.", - "sslDocsLink": "SSL-Dokumentation anzeigen", - "sslCertStatus": "Zertifikatsstatus", - "sslCertStatusNone": "Kein Zertifikat", - "sslCertStatusValid": "Gültig", - "sslCertStatusExpiring": "Demnächst ablaufend", - "sslCertStatusExpired": "Abgelaufen", - "sslCertExpiresAt": "Läuft am {{date}} ab", - "sslInfoNote": "Nach dem Ausstellen oder Hochladen eines Zertifikats aktiviert Termix automatisch HTTPS auf SSL_PORT (Standard 8443) zusätzlich zum bestehenden HTTP-Port. Stellen Sie sicher, dass dieser Port für diesen Container veröffentlicht/mapped ist, damit er erreichbar ist.", - "sslManualCert": "Zertifikat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Privater Schlüssel (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Fügen Sie Ihr bestehendes Zertifikat und den privaten Schlüssel ein, einschließlich der vollständigen Kette, falls von Ihrer CA erforderlich.", - "sslManualUpload": "Zertifikat hochladen & installieren", - "sslManualUploadLoading": "Zertifikat wird hochgeladen...", - "sslManualUploadSuccess": "Zertifikat erfolgreich hochgeladen und installiert", - "sslManualUploadFailed": "Zertifikat-Upload fehlgeschlagen", - "sslManualRequiresFields": "Zertifikat und privater Schlüssel sind erforderlich", - "auditLogTotal": "{{total}} Einträge insgesamt", - "auditLogEmpty": "Keine Audit-Protokolleinträge gefunden", - "auditLogSuccess": "Erfolgreich", - "auditLogFailed": "Fehlgeschlagen", - "auditLogClearFilters": "Filter löschen", - "auditLogPage": "Seite {{page}} von {{totalPages}} ({{total}} insgesamt)", - "auditLogIp": "IP", - "auditLogResourceId": "Ressourcen-ID", - "auditLogFilterUser": "Benutzer", - "auditLogFilterAction": "Aktion", - "auditLogFilterResourceType": "Ressourcentyp", - "auditLogFilterStatus": "Status", - "auditLogFilterFrom": "Von", - "auditLogFilterTo": "Bis", - "auditLogFilterAll": "Alle", - "allowRegistration": "Benutzerregistrierung erlauben", - "allowRegistrationDesc": "Neue Benutzer können sich selbst mit einem Benutzernamen und Passwort registrieren", - "allowPasswordLogin": "Anmeldung mit Passwort erlauben", - "allowPasswordLoginDesc": "Anmeldung mit Benutzername und Passwort", - "externalAutoProvision": "Externe Konten automatisch erstellen", - "externalAutoProvisionDesc": "Erstellt ein Konto beim ersten Anmelden über eine externe Methode wie SSO oder LDAP. Wenn deaktiviert, können sich nur Benutzer mit einem bestehenden Konto auf diese Weise anmelden", - "secondFactorAfterExternalLogin": "Nach externer Anmeldung (SSO, GitHub, Google, LDAP) nach einem zweiten Faktor fragen", - "secondFactorAfterExternalLoginDesc": "Wenn deaktiviert, wird ein registrierter zweiter Faktor nur nach der Passwort- und anderen lokalen Anmeldungen abgefragt, wie bisher. Wenn aktiviert, wird er nach jeder Anmeldemethode, einschließlich SSO und LDAP, abgefragt.", - "allowPasswordReset": "Passwortzurücksetzung erlauben", - "allowPasswordResetDesc": "Zurücksetzungscode über Docker-Logs", - "auditForwardingTitle": "An SIEM weiterleiten", - "auditForwardingDesc": "Sendet eine Kopie jedes Audit-Eintrags als NDJSON an einen externen Collector. Die lokalen Logs bleiben die einzige Wahrheit.", - "auditForwardingEnvNotice": "Eine Umgebungsvariable konfiguriert ebenfalls die Weiterleitung; die hier gespeicherte URL hat Vorrang.", - "auditForwardingToken": "Bearer-Token (optional)", - "auditForwardingTokenStored": "Bearer-Token (gespeichert)", - "auditForwardingSaved": "Audit-Weiterleitungseinstellungen gespeichert", - "auditForwardingSaveError": "Fehler beim Speichern der Audit-Weiterleitungseinstellungen", - "sessionTimeout": "Sitzungszeitüberschreitung", - "hours": "Stunden", - "sessionTimeoutRange": "Min. 1h, max. 720h", - "monitoringDefaults": "Standardwerte für Überwachung", - "statusCheck": "Statusprüfung", - "sec": "Sek.", - "logLevel": "Protokollebene", "usersCount_one": "{{count}} Benutzer", - "usersCount_other": "{{count}} Benutzer", - "searchUsers": "Benutzer suchen...", - "noUsers": "Keine Benutzer", - "noUsersMatch": "Keine Benutzer entsprechen Ihrer Suche", - "pageOf": "Seite {{page}} von {{total}}", - "createUser": "Erstellen", - "newRole": "Neue Rolle", - "roleName": "Name", - "roleDisplayName": "Anzeigename", - "roleDescription": "Beschreibung", "rolesCount_one": "{{count}} Rolle", - "rolesCount_other": "{{count}} Rollen", - "createRole": "Erstellen", - "creating": "Wird erstellt...", - "exportDatabase": "Datenbank exportieren", - "exportDatabaseDesc": "Laden Sie ein portables SQLite-Backup aller Hosts, Anmeldedaten und Einstellungen herunter", - "export": "Exportieren", - "exporting": "Wird exportiert...", - "importDatabase": "Datenbank importieren", - "importDatabaseDesc": "Wiederherstellen aus einem portablen .sqlite-Backup auf jedem Datenbank-Backend", - "importDatabaseSelected": "Ausgewählt: {{name}}", - "selectFile": "Datei auswählen", - "changeFile": "Ändern", - "import": "Importieren", - "importing": "Wird importiert...", "apiKeysCount_one": "{{count}} Schlüssel", - "apiKeysCount_other": "{{count}} Schlüssel", - "apiKeysDocsLink": "Dokumentation anzeigen", - "apiKeysCliHint": "Verwenden Sie einen API-Schlüssel mit der Termix-CLI, um Server von Ihrem Terminal aus zu verwalten.", - "apiKeysCliLink": "CLI-Dokumentation anzeigen", - "newApiKey": "Neuer API-Schlüssel", - "apiKeyCreatedWarning": "Schlüssel erstellt – kopieren Sie ihn jetzt, er wird nicht erneut angezeigt.", - "apiKeyName": "Name", - "apiKeyUser": "Benutzer", - "apiKeySelectUser": "Benutzer auswählen...", - "apiKeyExpiresAt": "Ablaufdatum", - "createKey": "Schlüssel erstellen", - "apiKeyNoExpiry": "Kein Ablaufdatum", - "revokedBadge": "WIDERRUFEN", - "authTypeDual": "Zweifaktor-Auth", - "authTypeExternal": "Extern", - "authTypeLocal": "Lokal", - "adminStatusAdministrator": "Administrator", - "adminStatusRegularUser": "Normaler Benutzer", - "adminBadge": "ADMIN", - "systemBadge": "SYS", - "customBadge": "BENUTZERDEFINIERT", - "youBadge": "SIE", "sessionsActive_one": "{{count}} aktiv", - "sessionsActive_other": "{{count}} aktiv", - "sessionActive": "Aktiv: {{time}}", - "sessionExpires": "Abl: {{time}}", - "revokeAll": "Alle", - "revokeAllSessionsSuccess": "Alle Sitzungen für den Benutzer wurden widerrufen", - "revokeAllSessionsFailed": "Sitzungen konnten nicht widerrufen werden", - "revokeSessionFailed": "Sitzung konnte nicht widerrufen werden", - "addRole": "Rolle hinzufügen", - "noCustomRoles": "Keine benutzerdefinierten Rollen definiert", - "removeRoleFailed": "Rolle konnte nicht entfernt werden", - "assignRoleFailed": "Rolle konnte nicht zugewiesen werden", - "userAdminAccess": "Administrator", - "userAdminAccessDesc": "Vollzugriff auf alle Admin-Einstellungen", - "userRoles": "Rollen", - "revokeAllUserSessions": "Alle Sitzungen widerrufen", - "revokeAllUserSessionsDesc": "Erzwingt die erneute Anmeldung auf allen Geräten", - "revoke": "Widerrufen", - "deleteUserWarning": "Das Löschen dieses Benutzers ist endgültig.", - "deleteUser": "{{username}} löschen", - "deleting": "Löschen...", - "deleteUserFailed": "Benutzer konnte nicht gelöscht werden", - "deleteUserSuccess": "Benutzer \"{{username}}\" gelöscht", - "deleteRoleSuccess": "Rolle \"{{name}}\" gelöscht", - "revokeKeySuccess": "Schlüssel \"{{name}}\" widerrufen", - "revokeKeyFailed": "Schlüssel konnte nicht widerrufen werden", - "copiedToClipboard": "In die Zwischenablage kopiert", - "done": "Fertig", - "createUserTitle": "Benutzer erstellen", - "createUserDesc": "Ein neues lokales Konto erstellen.", - "createUserUsername": "Benutzername", - "createUserPassword": "Passwort", - "createUserPasswordHint": "Mindestens 6 Zeichen.", - "createUserEnterUsername": "Benutzernamen eingeben", - "createUserSubmit": "Benutzer erstellen", - "editUserTitle": "Benutzer verwalten: {{username}}", - "editUserDesc": "Rollen, Admin-Status, Sitzungen und Kontoeinstellungen bearbeiten.", - "editUserUsername": "Benutzername", - "editUserAuthType": "Authentifizierungstyp", - "editUserAdminStatus": "Admin-Status", - "editUserUserId": "Benutzer-ID", - "linkAccountTitle": "Konten verknüpfen", - "linkAccountDesc": "Das externe Konto {{username}} mit einem bestehenden lokalen Konto zusammenführen.", - "linkAccountDescLocal": "Ein lokales Konto {{username}} mit einem bestehenden rein externen Konto verknüpfen.", - "linkAccountWarningTitle": "Dies wird:", - "linkAccountEffect1": "Das nur extern nutzbare Konto löschen", - "linkAccountEffect2": "Die externe Anmeldung zum Zielkonto hinzufügen", - "linkAccountEffect3": "Sowohl externe als auch Passwordanmeldung zulassen", - "linkAccountTargetUsername": "Benutzername des lokalen Kontos", - "linkAccountTargetPlaceholder": "Gib den Benutzernamen des lokalen Kontos ein, mit dem verknüpft werden soll", - "linkAccountExternalUsername": "Benutzername des externen Kontos", - "linkAccountExternalPlaceholder": "Gib den Benutzernamen des nur extern nutzbaren Kontos ein, das zusammengeführt werden soll", - "linkAccountExternalNotFound": "Kein nur extern nutzbares Konto mit diesem Benutzernamen gefunden", - "linkAccounts": "Konten verknüpfen", - "linkAccountSuccess": "Konten erfolgreich verknüpft", - "linkAccountFailed": "Verknüpfung der Konten fehlgeschlagen", - "linkAccountInProgress": "Verknüpfung läuft...", - "unlinkAccountTitle": "Externe Anmeldung trennen", - "unlinkAccountDesc": "Externe Anmeldung von {{username}} entfernen. Der Benutzer kann sich dann nur noch mit seinem Passwort anmelden.", - "unlinkAccountWarning": "Dadurch wird die externe Anmeldung von diesem Konto entfernt. Der Benutzer muss ein Passwort gesetzt haben, um sich weiterhin anmelden zu können.", - "unlinkAccount": "Externe Anmeldung trennen", - "unlinkAccountInProgress": "Trennung läuft...", - "unlinkAccountSuccess": "Externe Anmeldung getrennt", - "unlinkAccountFailed": "Trennung der externen Anmeldung fehlgeschlagen", - "updateRegistrationFailed": "Aktualisierung der Registrierungseinstellung fehlgeschlagen", - "updatePasswordLoginFailed": "Aktualisierung der Passwordanmeldungs-Einstellung fehlgeschlagen", - "updateSecondFactorAfterExternalLoginFailed": "Aktualisierung der Einstellung für den zweiten Faktor fehlgeschlagen", - "updatePasswordResetFailed": "Aktualisierung der Passwortzurücksetzungseinstellung fehlgeschlagen", - "sessionTimeoutRange2": "Die Sitzungstimeout muss zwischen 1 und 720 Stunden liegen", - "sessionTimeoutSaved": "Sitzungstimeout gespeichert", - "sessionTimeoutSaveFailed": "Speichern des Sitzungstimeouts fehlgeschlagen", - "monitoringIntervalInvalid": "Ungültige Intervallwerte", - "monitoringSaved": "Überwachungseinstellungen gespeichert", - "monitoringSaveFailed": "Speichern der Überwachungseinstellungen fehlgeschlagen", - "logLevelUpdateFailed": "Aktualisierung des Protokollniveaus fehlgeschlagen", - "createUserRequired": "Benutzername und Passwort sind erforderlich", - "createUserPasswordTooShort": "Das Passwort muss mindestens 6 Zeichen lang sein", - "createUserSuccess": "Benutzer \"{{username}}\" erstellt", - "createUserFailed": "Erstellen des Benutzers fehlgeschlagen", - "updateAdminStatusFailed": "Aktualisierung des Admin-Status fehlgeschlagen", - "allSessionsRevoked": "Alle Sitzungen widerrufen", - "revokeSessionsFailed": "Widerruf der Sitzungen fehlgeschlagen", - "manageUserData": "Benutzerdaten verwalten", - "backToUsers": "Zurück zu den Benutzern", - "manageTabAccount": "Konto", - "manageTabHosts": "Hosts", - "manageTabCredentials": "Anmeldeinformationen", - "manageTabSessions": "Sitzungen", - "manageTabDanger": "Gefahr", - "manageEditorBack": "Zurück zu {{username}}s Daten", - "dataLockedBadge": "GESCHLOSSEN", - "dataLockedNotice": "{{username}}s Daten bleiben gesperrt, bis sie sich das nächste Mal anmelden. Ihre Hosts, Anmeldeinformationen und Snippets können bis dahin nicht angezeigt oder bearbeitet werden.", - "resetPasswordTitle": "Passwort zurücksetzen", - "resetPasswordExternalOnly": "Dieser Benutzer meldet sich über einen externen Anbieter an und hat kein Passwort.", - "resetPasswordPlaceholder": "Neues Passwort", - "resetPasswordBtn": "Zurücksetzen", - "resetPasswordWorking": "Wird zurückgesetzt...", - "resetPasswordSuccess": "Passwort zurückgesetzt", - "resetPasswordSuccessWiped": "Passwort zurückgesetzt. Die verschlüsselten Daten des Benutzers wurden gelöscht.", - "resetPasswordFailed": "Passwortzurücksetzung fehlgeschlagen", - "resetPasswordConfirmWipe": "{{username}} hat sich seit dem Verschlüsselungs-Upgrade nicht angemeldet, daher können ihre Daten nicht wiederhergestellt werden. Ein Zurücksetzen jetzt wird ihre Hosts, Anmeldeinformationen und Snippets löschen. Fortfahren?", - "manageApiKeys": "API-Schlüssel", - "apiKeyNamePlaceholder": "Schlüsselname", - "apiKeyCopyNotice": "Kopiere diesen Schlüssel jetzt, er wird nicht noch einmal angezeigt.", - "noApiKeysForUser": "Keine API-Schlüssel", - "apiKeyDeleteFailed": "API-Schlüssel konnte nicht gelöscht werden", - "exportUserData": "Datenexport", - "exportUserDataDesc": "Laden Sie die Hosts, Anmeldeinformationen und Dateimanager-Daten dieses Benutzers als JSON herunter. Geheimnisse werden entschlüsselt.", - "exportUserDataSuccess": "Benutzerdaten exportiert", - "exportUserDataFailed": "Export der Benutzerdaten fehlgeschlagen", "hostsCount_one": "{{count}} Host", "hostsCount_other": "{{count}} Hosts", - "addHostForUser": "Host hinzufügen", - "noHostsForUser": "Dieser Benutzer hat keine Hosts", - "connectToHost": "Verbinden", - "deleteHostConfirm": "Host „{{name}}“ von {{username}} löschen?", - "hostDeletedSuccess": "Host gelöscht", - "hostDeleteFailed": "Host konnte nicht gelöscht werden", "credentialsCount_one": "{{count}} Anmeldeinformation", "credentialsCount_other": "{{count}} Anmeldeinformationen", - "addCredentialForUser": "Anmeldeinformation hinzufügen", - "noCredentialsForUser": "Dieser Benutzer hat keine Anmeldeinformationen", - "deleteCredentialConfirm": "Anmeldeinformation „{{name}}“ von {{username}} löschen?", - "credentialDeletedSuccess": "Anmeldeinformation gelöscht", - "credentialDeleteFailed": "Anmeldeinformation konnte nicht gelöscht werden", - "noSessionsForUser": "Keine aktiven Sitzungen", - "deleteSuccessorLabel": "Hosts und Anmeldeinformationen übergeben an", - "deleteSuccessorMe": "Mich (den löschenden Administrator)", - "deleteSuccessorNone": "Niemand, alles löschen", - "deleteSuccessorDesc": "Alles, was dieser Benutzer geteilt hat, funktioniert weiterhin unter dem neuen Eigentümer; die Auswahl von „Niemand“ entfernt deren Hosts, Anmeldeinformationen und Freigaben.", - "deleteUserDangerDesc": "{{username}} und alle zugehörigen Daten (Hosts, Anmeldeinformationen, Snippets, Verlauf) endgültig löschen. Dies kann nicht rückgängig gemacht werden.", - "deleteUserConfirm": "{{username}} und alle zugehörigen Daten endgültig löschen?", - "deleteUserAdminBlocked": "Entfernen Sie den Administratorstatus, bevor Sie diesen Benutzer löschen.", - "createRoleRequired": "Name und Anzeigename sind erforderlich", - "createRoleSuccess": "Rolle „{{name}}“ erstellt", - "createRoleFailed": "Rolle konnte nicht erstellt werden", - "apiKeyNameRequired": "Schlüsselname ist erforderlich", - "apiKeyUserRequired": "Benutzer-ID ist erforderlich", - "apiKeyCreatedSuccess": "API-Schlüssel „{{name}}“ erstellt", - "apiKeyCreateFailed": "API-Schlüssel konnte nicht erstellt werden", - "exportSuccess": "Datenbank erfolgreich exportiert", - "exportFailed": "Datenbankexport fehlgeschlagen", - "importSelectFile": "Bitte wählen Sie zuerst eine Datei aus", - "importCompleted": "Import abgeschlossen: {{total}} Elemente importiert, {{skipped}} übersprungen", - "importFailed": "Import fehlgeschlagen: {{error}}", - "importError": "Datenbankimport fehlgeschlagen", - "sectionHostDefaults": "Host-Standardwerte", "rolePermissions": { "count_one": "{{count}} Berechtigung", - "count_other": "{{count}} Berechtigungen", - "editAction": "Berechtigungen bearbeiten", - "loadError": "Berechtigungskatalog konnte nicht geladen werden", - "saved": "Rollenberechtigungen gespeichert", - "saveError": "Rollenberechtigungen konnten nicht gespeichert werden", - "save": "Speichern", - "saving": "Wird gespeichert...", - "pluginDisabled": "Plugin deaktiviert", "groups": { "hosts": "Hosts", "credentials": "Anmeldeinformationen", "admin": "Verwaltung" } - }, - "notificationPrivateEndpoints": "Erlaubte private Benachrichtigungs-Hosts", - "notificationPrivateEndpointsDesc": "Exakte private Hosts, die Benachrichtigungskanäle kontaktieren dürfen. Trennen Sie diese durch Kommas.", - "updateNotificationEndpointsFailed": "Erlaubnisliste für Benachrichtigungs-Endpunkte konnte nicht aktualisiert werden", - "secondFactorsSectionTitle": "Zweite Faktoren", - "secondFactorsNone": "Keine zweiten Faktoren registriert", - "secondFactorUnavailable": "Nicht verfügbar", - "resetSecondFactors": "Zweite Faktoren zurücksetzen", - "resetSecondFactorsConfirm": "Alle zweiten Faktoren für {{username}} entfernen? Sie können sich mit ihrem Passwort oder SSO anmelden und erneut registrieren.", - "secondFactorsResetSuccess": "Zweite Faktoren zurückgesetzt", - "secondFactorsResetFailed": "Zweite Faktoren konnten nicht zurückgesetzt werden", - "passwordLoginForced": "Die Passwortanmeldung ist deaktiviert, aber es ist keine andere Anmeldemethode aktiviert. Sie bleibt daher vorerst aktiv, damit niemand ausgesperrt wird.", - "sslNotRenewed": "Dieses Zertifikat wird nicht erneuert. Es läuft am {{date}} ab. Aktivieren Sie die automatische Erneuerung im Bereich ACME-Zertifikate oder laden Sie vorher ein neues Zertifikat hoch.", - "sslSelfSigned": "Selbstsigniertes Zertifikat von Termix. Browser werden eine Warnung anzeigen.", - "sslRenewedBy": "Automatisch von {{plugin}} erneuert", - "sslIssuer": "Ausgestellt von {{issuer}}", - "sslNames": "Gilt für {{names}}", - "sslManualTitle": "Zertifikat hochladen", - "updateExternalAutoProvisionFailed": "Die Einstellung für die automatische Erstellung konnte nicht aktualisiert werden", - "hostTags": "Vordefinierte Host-Tags", - "hostTagsDesc": "Tags, die jeder Benutzer als Vorschläge im Host-Editor sieht. Drücken Sie Leertaste oder Eingabetaste, um einen hinzuzufügen. Das Entfernen eines Tags hier entfernt es nicht von den Hosts.", - "hostTagsError": "Die Vorschläge für Host-Tags konnten nicht geladen oder gespeichert werden.", - "revokeAllSessionsConfirm": "{{username}} überall abmelden?", - "revokeSessionConfirm": "Diese Sitzung abmelden?", - "revokeSession": "Abmelden", - "deleteRoleConfirm": "Rolle {{name}} löschen?", - "revokeKeyConfirm": "API-Schlüssel {{name}} widerrufen?", - "revokeKey": "Widerrufen" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Wo", - "who": "Wer", - "hostLabel": "Host", - "hostPlaceholder": "192.168.1.1 oder example.com", - "portLabel": "Port", - "usernameLabel": "Benutzername", - "usernamePlaceholder": "Benutzername", - "authLabel": "Auth", - "passwordLabel": "Passwort", - "passwordPlaceholder": "Passwort", - "privateKeyLabel": "Privater Schlüssel", - "privateKeyPlaceholder": "Privaten Schlüssel einfügen...", - "credentialLabel": "Anmeldeinformationen", - "credentialPlaceholder": "Gespeicherte Anmeldeinformationen auswählen", - "protocolLabel": "Protokoll", - "domainLabel": "Domäne", - "domainPlaceholder": "optional", - "connectToAction": "Mit {{name}} verbinden", - "sshProtocol": "SSH", - "noTarget": "Nichts Installiertes kann mit diesem Host-Typ verbinden" + "usernameLabel": "Benutzername" }, "keybindings": { - "description": "Tasten an Aktionen im Terminal und in der App binden oder die integrierten Tastenkürzel ändern.", - "defaultsHeading": "Integrierte Tastenkürzel", - "fixedHeading": "App-Tastenkürzel", - "fixed": { - "splitRight": "Nach rechts aufteilen", - "splitDown": "Nach unten aufteilen", - "zoomPane": "Fokussiertes Fenster vergrößern", - "navigatePane": "Zwischen Fenstern wechseln", - "nextTab": "Nächster Tab", - "previousTab": "Vorheriger Tab", - "jumpTab": "Zu Tab springen", - "previousView": "Zurück zur vorherigen Seitenleistenansicht", - "fullscreen": "Vollbild umschalten" - }, - "customHeading": "Benutzerdefinierte Tastenkürzel", - "addBinding": "Tastenkürzel hinzufügen", - "addBindingTitle": "Tastenkürzel hinzufügen", - "editBindingTitle": "Tastenkürzel bearbeiten", - "loading": "Wird geladen...", - "noCustomBindings": "Noch keine benutzerdefinierten Tastenkürzel", - "defaultBadge": "Standard", - "customizedBadge": "Angepasst", - "customize": "Anpassen", - "resetToDefault": "Auf Standard zurücksetzen", - "resetAllToDefaults": "Alle auf Standard zurücksetzen", - "cancel": "Abbrechen", - "saveBinding": "Tastenkürzel speichern", - "saveError": "Tastenkürzel konnten nicht gespeichert werden", - "pressKeysToRecord": "Tastenkombination", - "pressKeysPlaceholder": "Klicken und Tasten drücken", - "recording": "Tasten drücken...", - "comboRequiredError": "Drücken Sie zuerst eine Tastenkombination", - "conflictWarning": "Diese Kombination ist bereits {{combo}} zugeordnet. Beim Speichern werden beide ausgelöst.", - "actionLabel": "Aktion", "actionNextTab": "Zum nächsten Tab wechseln", "actionPreviousTab": "Zum vorherigen Tab wechseln", "actionOpenCommandPalette": "Schnellsuche öffnen", - "actionReconnectSession": "Aktuelle Sitzung neu verbinden", - "unavailableAction": "{{type}} (nicht verfügbar)", - "actionRequiredError": "Wählen Sie zuerst eine Aktion aus", - "deleteConfirm": "Diese Tastenkombination löschen?", - "resetAllConfirm": "Alle Tastenkombinationen auf Standard zurücksetzen?" + "actionReconnectSession": "Aktuelle Sitzung neu verbinden" }, "userProfile": { - "storageModeLocal": "Browser", - "storageModeCloud": "Datenbank", - "storageModeDescription": "Der Browser speichert die Einstellungen nur in diesem Browser. Die Datenbank synchronisiert sie mit dem Server und lädt sie auf jedem Gerät.", - "resetToDefaults": "Auf Standard zurücksetzen", - "resetToDefaultsSuccess": "Einstellungen auf Standard zurückgesetzt.", - "storageModeSwitch": "Speicherort der Einstellungen", - "sectionAccount": "Konto", - "desktopProfileTitle": "Nur dieses Gerät", - "desktopProfileDescription": "Dieses Profil existiert nur auf diesem Gerät und meldet sich eigenständig an. Verknüpfen Sie es mit einem Termix-Server, um dieselben Hosts und Einstellungen auf allen Geräten zu verwenden.", - "sectionInterface": "Oberfläche", - "interfacePresetDesc": "Wie viele Details Termix anzeigt. Alle Funktionen bleiben verfügbar.", "preset_simple": "Einfach", "preset_simple_desc": "Nur das Wesentliche.", "preset_balanced": "Ausgewogen", "preset_balanced_desc": "Das Standardlayout.", "preset_advanced": "Erweitert", "preset_advanced_desc": "Alles aktiv, kompakt angeordnet.", - "presetClearOverrides": "Alle zurücksetzen", - "presetOverridesTitle": "Angepasst", - "presetRevertArea": "Rückgängig", - "presetConfirmTitle": "Zu {{preset}} wechseln?", - "presetConfirmDesc": "Dadurch werden Seitenleiste, Navigation, Dashboard-Layout, Terminal-Werkzeugleiste und Dateimanager-Ansicht zurückgesetzt. Ihre Hosts, Anmeldeinformationen und Startseite bleiben unberührt.", - "presetConfirmApply": "Voreinstellung anwenden", - "runSetupAgainDesc": "Den Einrichtungsassistenten erneut durchlaufen.", - "runSetupAgainButton": "Einrichtung starten", "uiArea_chrome": "App-Rahmen", "uiArea_hostList": "Host-Liste", "uiArea_credentialList": "Anmeldeinformationsliste", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Dateimanager", "uiArea_hostEditor": "Host-Editor", - "sectionAppearance": "Erscheinungsbild", - "sectionSecurity": "Sicherheit", - "sectionApiKeys": "API-Schlüssel", - "sectionData": "Daten", - "usernameLabel": "Benutzername", - "roleLabel": "Rolle", - "roleAdministrator": "Administrator", - "authMethodLabel": "Authentifizierungsmethode", - "authMethodLocal": "Lokal", - "twoFaLabel": "2FA", - "twoFaOn": "An", - "twoFaOff": "Aus", - "versionLabel": "Version", - "cliTitle": "Termix CLI", - "cliDescription": "Öffnen Sie Terminals, führen Sie Befehle aus und verschieben Sie Dateien direkt aus Ihrer Shell.", - "cliLearnMore": "Mehr erfahren", - "deleteAccount": "Konto löschen", - "deleteAccountDescription": "Ihr Konto endgültig löschen", - "deleteButton": "Löschen", - "deleteAccountPermanent": "Diese Aktion ist endgültig und kann nicht rückgängig gemacht werden.", - "deleteAccountWarning": "Alle Sitzungen, Hosts, Anmeldeinformationen und Einstellungen werden endgültig gelöscht.", - "confirmPasswordDeletePlaceholder": "Geben Sie Ihr Passwort zur Bestätigung ein", "languageLabel": "Sprache", "themeLabel": "Design", "fontSizeLabel": "Schriftgröße", "interfaceFontLabel": "Schriftart der Oberfläche", "interfaceFontDescription": "Ändert die Schriftart der Anwendungsoberfläche. Terminalprofile behalten ihre eigenen Schriftarteinstellungen.", "accentColorLabel": "Akzentfarbe", - "keyboardShortcuts": "Tastenkürzel", - "keyboardShortcutsDescription": "Passen Sie die Tastenkürzel für Kopieren, Einfügen und Befehle im Terminal an", - "manageShortcuts": "Verwalten", - "commandPalette": "Befehlspalette", - "commandPaletteDesc": "Tastenkürzel aktivieren", - "reopenTabsOnLogin": "Tabs beim Anmelden wiederherstellen", - "reopenTabsOnLoginDesc": "Stellen Sie Ihre geöffneten Tabs wieder her, wenn Sie sich anmelden oder die Seite aktualisieren, auch von einem anderen Gerät aus", - "confirmTabClose": "Schließen von Tabs bestätigen", - "confirmTabCloseDesc": "Vor dem Schließen von Terminal-Tabs nachfragen", - "showTabNumbers": "Tab-Nummern anzeigen", - "showTabNumbersDesc": "Zeigt eine Nummer auf jedem Tab an, um sie besser unterscheiden zu können", - "settingsAppRail": "App-Leiste", - "sidebarSettingsMoved": "Die Anzeigeeinstellungen für die Host-Seitenleiste wurden in den Bereich „Seitenleiste anpassen“ verschoben, der über die Host-Werkzeugleiste geöffnet wird.", - "showHostTags": "Host-Tags anzeigen", - "showHostTagsDesc": "Tags in der Host-Liste anzeigen", - "statusColors": "Echte Statusfarben", - "statusColorsDesc": "Verwenden Sie Grün/Rot für Online-/Offline-Status anstelle der Akzentfarbe", - "pinAppRail": "App-Leiste anheften", - "pinAppRailDesc": "Halten Sie die linke App-Leiste der Seitenleiste immer erweitert, anstatt sie beim Hovern zu erweitern", - "expandAppRailOnHover": "App-Leiste beim Hovern erweitern", - "expandAppRailOnHoverDesc": "Erlauben Sie der linken App-Leiste der Seitenleiste, sich zu erweitern, wenn der Mauszeiger darüber bewegt wird", - "appRailHoverPushesContent": "Inhalt verschieben, wenn sie sich ausdehnt", - "appRailHoverPushesContentDesc": "Platz für die ausgeklappte Leiste schaffen, anstatt sie über die Seite zu legen. Offene Sitzungen, wie Remote Desktop, werden jedes Mal neu angepasst", - "showPinAppRailButton": "Schaltfläche zum Anheften der App-Leiste anzeigen", - "showPinAppRailButtonDesc": "Zeigt eine Schaltfläche in der App-Leiste zum Anheften an. Standardmäßig deaktiviert.", - "settingsNavigation": "Navigation", - "navigationTabsDesc": "Wählen Sie aus, welche Tabs in der App-Leiste angezeigt werden", - "settingsUpdates": "Updates", - "disableUpdateChecks": "Update-Prüfungen deaktivieren", - "disableUpdateChecksDesc": "Update-Prüfungen stoppen", - "changePassword": "Passwort ändern", - "currentPasswordLabel": "Aktuelles Passwort", - "currentPasswordPlaceholder": "Aktuelles Passwort", - "newPasswordLabel": "Neues Passwort", - "newPasswordPlaceholder": "Neues Passwort", - "confirmPasswordLabel": "Neues Passwort bestätigen", - "confirmPasswordPlaceholder": "Neues Passwort bestätigen", - "updatePassword": "Passwort aktualisieren", - "createApiKeyTitle": "API-Schlüssel erstellen", - "createApiKeyDescription": "Generieren Sie einen neuen API-Schlüssel für den programmatischen Zugriff.", - "apiKeyNameLabel": "Name", - "apiKeyNamePlaceholder": "z. B. CI-Pipeline", - "expiryDateLabel": "Ablaufdatum", - "optional": "optional", - "cancel": "Abbrechen", - "createKey": "Schlüssel erstellen", - "apiKeyCreatedWarning": "Schlüssel erstellt – kopieren Sie ihn jetzt, da er nicht mehr angezeigt wird.", - "copyApiKey": "API-Schlüssel kopieren", - "copiedToClipboard": "In die Zwischenablage kopiert", "apiKeyCount_one": "{{count}} Schlüssel", - "apiKeyCount_other": "{{count}} Schlüssel", - "newKey": "Neuer Schlüssel", - "noApiKeys": "Noch keine API-Schlüssel vorhanden.", - "apiKeyActive": "Aktiv", - "apiKeyUsageHint": "Fügen Sie Ihren Schlüssel im", - "apiKeyUsageHintHeader": "Header hinzu.", - "apiKeyPermissionsHint": "Schlüssel erben die Berechtigungen des erstellenden Benutzers.", - "exportData": "Meine Daten exportieren", - "exportDataDesc": "Laden Sie ein Backup Ihrer Hosts, Anmeldeinformationen und Einstellungen herunter, um sie auf ein anderes Gerät zu übertragen", - "export": "Exportieren", - "exporting": "Exportiere...", - "importData": "Meine Daten importieren", - "importDataDesc": "Stellen Sie Ihre Hosts, Anmeldeinformationen und Einstellungen aus einer .sqlite-Backup-Datei wieder her", - "importDataSelected": "Ausgewählt: {{name}}", - "selectFile": "Datei auswählen", - "changeFile": "Ändern", - "import": "Importieren", - "importing": "Importiere...", - "exportSuccess": "Daten erfolgreich exportiert", - "exportFailed": "Datenexport fehlgeschlagen", - "importSelectFile": "Bitte wählen Sie zuerst eine Datei aus", - "importCompleted": "Import abgeschlossen: {{total}} Elemente importiert, {{skipped}} übersprungen", - "importFailed": "Import fehlgeschlagen: {{error}}", - "roleUser": "Benutzer", - "authMethodDual": "Zweifaktor-Authentifizierung", - "authMethodExternal": "Extern", - "done": "Fertig", - "apiKeyNameRequired": "Schlüsselname ist erforderlich", - "apiKeyCreated": "API-Schlüssel \"{{name}}\" erstellt", - "apiKeyCreateFailed": "Erstellen des API-Schlüssels fehlgeschlagen", - "apiKeyUser": "Benutzer", - "apiKeyExpires": "Läuft ab", - "apiKeyRevoked": "API-Schlüssel \"{{name}}\" widerrufen", - "apiKeyRevokeFailed": "Widerruf des API-Schlüssels fehlgeschlagen", - "passwordFieldsRequired": "Aktuelles und neues Passwort sind erforderlich", - "passwordMismatch": "Passwörter stimmen nicht überein", - "passwordTooShort": "Passwort muss mindestens 6 Zeichen lang sein", - "passwordUpdated": "Passwort erfolgreich aktualisiert", - "passwordUpdateFailed": "Aktualisierung des Passworts fehlgeschlagen", - "deletePasswordRequired": "Passwort ist erforderlich, um Ihr Konto zu löschen", - "deleteFailed": "Löschen des Kontos fehlgeschlagen", - "deleting": "Lösche...", "colorPickerTooltip": "Farbauswahl öffnen", "themeSystem": "System", "themeLight": "Hell", @@ -1755,18 +1122,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Angemeldet bei {{server}}", - "linkedProfileDescription": "Dieses Gerät verwendet Ihr Konto auf dem Server und speichert eine Kopie Ihrer Daten, sodass es auch offline funktioniert.", - "manageSync": "Synchronisierung verwalten", - "setUpSync": "Mit einem Server verknüpfen", - "settingsTabsAndShortcuts": "Tabs und Tastenkürzel", - "onBetaTitle": "Sie verwenden eine Beta-Version", - "onBetaDescription": "Danke für das Testen. Lassen Sie uns wissen, was nicht funktioniert.", - "tryBetaTitle": "Neue Funktionen frühzeitig testen", - "tryBetaDescription": "Nehmen Sie in den Einstellungen unter Updates am Beta-Programm teil.", - "sendBetaFeedback": "Beta-Feedback senden", - "openUpdates": "Updates" + "themeGruvbox": "Gruvbox" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "{{name}} wird von {{list}} benötigt. Deaktiviere oder deinstalliere diese zuerst.", "missingDependencies": "{{name}} benötigt {{list}}, das nicht installiert ist.", "consentChanged": "Die Anforderungen dieses Plugins haben sich seit deinem letzten Blick geändert. Prüfe die Liste erneut.", - "upload": "{{name}} konnte nicht gelesen werden: {{error}}", - "developerMode": "Entwicklermodus konnte nicht geändert werden: {{error}}" + "upload": "{{name}} konnte nicht gelesen werden: {{error}}" }, "data": { "title": "Gespeicherte Daten", @@ -2145,13 +1500,7 @@ "browsePlugins": "Plugins durchsuchen", "loading": "Wird geladen", "developer": { - "title": "Entwicklermodus für Plugins", - "hint": "Ermöglicht Administratoren, Plugins aus einer .tmxplug-Datei im Tab Plugins zu installieren, ohne die Registrierungsprüfungen. Verwenden Sie dies, um Ihre eigenen Plugins zu erstellen und zu testen.", - "enableTitle": "Entwicklermodus aktivieren?", - "enableBody": "Administratoren können Plugins aus Dateien installieren, die Termix nicht geprüft hat. Ein Plugin kann alles tun, was seine Fähigkeiten erlauben, daher sollten Sie dies nur aktivieren, während Sie Plugins erstellen oder testen.", - "enable": "Aktivieren", - "installFromFile": "Aus Datei installieren", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS ist gesetzt, daher bleibt die Installation aus einer Datei blockiert." + "installFromFile": "Aus Datei installieren" }, "count": { "downloads_one": "{{formatted}} Download", @@ -2189,71 +1538,7 @@ "secretSet": "Gesetzt", "secretNotSet": "Nicht gesetzt", "secretReplace": "Ersetzen", - "pluginSettingsSaved": "Einstellungen gespeichert", - "pluginSettingsInvalid": "Einige Einstellungen konnten nicht gespeichert werden. Überprüfe die hervorgehobenen Felder.", - "pluginSettingsSaveFailed": "Einstellungen konnten nicht gespeichert werden", - "pluginSettingsLoadFailed": "Einstellungen konnten nicht geladen werden", - "featureUnavailable": "{{name}} ist derzeit nicht verfügbar. Diese Einstellungen werden gespeichert, haben aber keine Wirkung.", - "account": "Konto", - "security": "Sicherheit", - "apiKeys": "API-Schlüssel", - "data": "Daten und Synchronisierung", - "interface": "Schnittstelle", - "appearance": "Erscheinungsbild", - "keybindings": "Tastenkombinationen", - "adminGeneral": "Allgemein", - "adminUsers": "Benutzer", - "adminSessions": "Sitzungen", - "adminRoles": "Rollen", - "adminHostDefaults": "Host-Standardwerte", - "adminBranding": "Branding", - "adminDatabase": "Datenbank", - "adminSsl": "SSL", - "adminApiKeys": "API-Schlüssel", - "adminAuditLog": "Audit-Protokoll", - "bandYou": "Dein Konto", - "bandApp": "Diese App", - "bandPlugins": "Plugins", - "bandInstance": "Dieser Server", - "searchPlaceholder": "Einstellungen durchsuchen", - "noResults": "Keine passenden Einstellungen.", - "pages": "Seiten", - "instanceSettings": "Servereinstellungen", - "nothingHere": "Hier gibt es nichts einzustellen.", - "searchPage": "Diese Seite durchsuchen", - "noPageMatches": "Auf dieser Seite gibt es keine Übereinstimmungen.", - "updates": { - "title": "Updates", - "betaProgram": "Beta-Programm", - "betaIntro": "Betas sind frühe Versionen der nächsten Termix-Version. Sie erscheinen dienstags und freitags, wenn es Neues auszuprobieren gibt. Sie können Fehler enthalten, und dein Feedback sorgt dafür, dass die stabile Version besser wird.", - "termixBetas": "Termix-Betas", - "termixBetasHint": "Informiere mich über neue Betas, nicht nur über stabile Versionen.", - "runningBetaBuild": "Du verwendest eine Beta-Version. Um zurückzukehren, wechsle zu einem stabilen Image oder Installer.", - "howToInstall": "So erhältst du die Beta", - "desktopInstall": "Lade den Beta-Installer herunter und installiere ihn über die aktuelle Version.", - "downloadBeta": "{{version}} herunterladen", - "dockerInstall": "Ändere dein Image auf das Beta-Tag und starte den Container neu:", - "copy": "Kopieren", - "copied": "Kopiert", - "copyFailed": "Kopieren fehlgeschlagen", - "learnMore": "Mehr über Betas erfahren", - "feedback": "Feedback", - "feedbackHint": "Hast du einen Fehler gefunden oder eine Idee? Sie geht direkt an die Entwickler, wobei deine Version automatisch ausgefüllt wird.", - "sendFeedback": "Beta-Feedback senden", - "releases": "Versionen", - "thisVersion": "Diese Version", - "newestStable": "Neueste stabile Version", - "newestBeta": "Neueste Beta", - "noRelease": "Derzeit keine", - "pluginBetas": "Plugin-Betas", - "pluginBetasIntro": "Jedes Plugin kann eigenständig Betas verwenden. Um eines auszuprobieren, öffne es und drücke „Beta testen“.", - "openPlugins": "Plugins öffnen", - "waitingForStable": "Zurück zur stabilen Version. Bleibt bei {{version}}, bis eine neuere stabile Version verfügbar ist.", - "backToStable": "Zurück zur stabilen Version", - "allPluginsBeta": "Betas für alle Plugins verwenden", - "allPluginsStable": "Alle Plugins zurück zur stabilen Version", - "saveFailed": "Änderung konnte nicht gespeichert werden" - } + "featureUnavailable": "{{name}} ist derzeit nicht verfügbar. Diese Einstellungen werden gespeichert, haben aber keine Wirkung." }, "managerCard": { "refresh": "Aktualisieren", @@ -2263,83 +1548,13 @@ "filter": "Filtern..." }, "sync": { - "server": "Termix-Server", - "account": "Konto", - "status": "Status", - "never": "nie", - "justNow": "gerade eben", "minutesAgo_one": "vor {{count}} Minute", "minutesAgo_other": "vor {{count}} Minuten", "hoursAgo_one": "vor {{count}} Stunde", "hoursAgo_other": "vor {{count}} Stunden", - "actionFailed": "Das hat nicht funktioniert. Versuche es erneut.", - "unlinkedTitle": "Nur dieses Gerät", - "unlinkedBody": "Termix funktioniert auf diesem Gerät eigenständig. Verbinde es mit deinem Termix-Server, um alles synchron zu halten.", - "unlinkedPointHosts": "Deine Hosts, Anmeldeinformationen, Snippets und Einstellungen folgen dir auf jedes Gerät.", - "unlinkedPointOffline": "Alles funktioniert weiterhin, wenn der Server nicht erreichbar ist, und wird später synchronisiert.", - "unlinkedPointAccount": "Du meldest dich mit deinem Server-Konto an, und Hosts, die andere mit dir geteilt haben, erscheinen hier ebenfalls.", - "linkButton": "Mit einem Server verbinden", - "state": { - "syncing": "Synchronisiere", - "offline": "Server nicht erreichbar", - "error": "Synchronisierung angehalten", - "signedOut": "Abgemeldet", - "synced": "Synchronisiert um {{time}}" - }, "pending_one": "{{count}} Änderung wartet auf Synchronisierung", "pending_other": "{{count}} Änderungen warten auf Synchronisierung", - "signInAgain": "Erneut anmelden", - "syncNow": "Jetzt synchronisieren", - "unlink": "Verbindung trennen", - "unlinked": "Dieses Gerät ist nicht mehr verbunden", - "unlinkTitle": "Dieses Gerät verknüpfung aufheben?", - "unlinkDescription": "Die Synchronisierung wird gestoppt und Sie werden vom Server abgemeldet. Von anderen mit Ihnen geteilte Hosts werden auf jeden Fall von diesem Gerät entfernt.", - "unlinkKeepTitle": "Meine Daten hier behalten", - "unlinkKeepBody": "Ihre Hosts, Anmeldeinformationen und Einstellungen bleiben auf diesem Gerät und funktionieren weiterhin eigenständig.", - "unlinkRemoveTitle": "Gespeicherte Daten entfernen", - "unlinkRemoveBody": "Alles, was vom Server stammt, wird von diesem Gerät entfernt. Nur Hosts, die ausschließlich auf diesem Gerät gespeichert sind, bleiben erhalten.", - "conflictsTitle": "Konflikte", - "conflictsDescription": "Diese wurden gleichzeitig hier und auf dem Server geändert. Die Serverversion wird verwendet. Behalten Sie Ihre Version, um sie stattdessen an den Server zu senden.", - "keepMine": "Meine behalten", - "keepServer": "Serverversion behalten", - "errorsTitle": "Nicht synchronisiert", - "errorsDescription": "Der Server hat diese Änderungen nicht akzeptiert. Sie bleiben auf diesem Gerät.", - "errorPermission": "Ihr Konto auf dem Server ist nicht berechtigt, diese Änderung vorzunehmen.", - "retry": "Erneut versuchen", - "whatSyncs": "Was synchronisiert wird", - "whatSyncsDescription": "Schalten Sie alles aus, was Sie nur auf diesem Gerät behalten möchten.", - "coreGroup": "Termix", - "notOnServer": "Das hat der Server nicht", - "notOnDevice": "Noch nicht auf diesem Gerät", - "localOnlyHint": "Sie können einzelne Hosts oder Ordner auch über deren Einstellungen auf diesem Gerät behalten.", - "originTitle": "Wo Verbindungen starten", - "originDescription": "Verbinden Sie sich mit Hosts von diesem Gerät aus oder über den Server. Sie können dies pro Host ändern.", - "originLocal": "Dieses Gerät", - "originRemote": "Der Server", - "entities": { - "hosts": "Hosts", - "sshCredentials": "Anmeldeinformationen", - "sshFolders": "Ordner", - "userPreferences": "Einstellungen", - "pluginUserSettings": "Plugin-Einstellungen", - "sharedHosts": "Mit Ihnen geteilte Hosts", - "sharedCredentials": "Mit Ihnen geteilte Anmeldeinformationen", - "vaultProfiles": "Vault-Profile", - "snippetFolders": "Snippet-Ordner", - "snippets": "Snippets", - "dashboardServiceLinks": "Service-Links", - "homepageItems": "Startseiten-Elemente", - "networkTopology": "Netzwerkübersicht", - "workspaces": "Arbeitsbereiche", - "hostDefaults": "Host-Standardwerte", - "hostDefaultsAdmin": "Server-Host-Standardwerte", - "aiProviders": "AI-Anbieter", - "homepageLayouts": "Startseiten-Layouts", - "accountProfile": "Kontoprofil" - }, "proxy": { - "title": "Reverse Proxy", - "description": "Nur erforderlich, wenn etwas wie Cloudflare Access oder eine Anmeldeseite vor Ihrem Server liegt.", "headersTitle": "Zusätzliche Header", "headersHint": "Wird mit jeder Anfrage an den Server gesendet, z. B. ein Cloudflare Access Service-Token.", "headerName": "Header-Name", @@ -2352,8 +1567,7 @@ "username": "Benutzername", "password": "Passwort", "allowInvalidCertificate": "Selbstsigniertes Zertifikat vertrauen", - "allowInvalidCertificateHint": "Nur für Ihren eigenen Server, wenn dessen Zertifikat nicht von einer bekannten Stelle stammt.", - "saved": "Gespeichert" + "allowInvalidCertificateHint": "Nur für Ihren eigenen Server, wenn dessen Zertifikat nicht von einer bekannten Stelle stammt." }, "problems": { "invalidUrl": "Das sieht nicht nach einer Webadresse aus.", @@ -2391,6 +1605,27 @@ "linking": "Verknüpfung wird hergestellt und erste Synchronisierung wird ausgeführt...", "linked": "Verknüpft. Ihre Daten werden jetzt synchronisiert.", "signedInAgain": "Angemeldet. Die Synchronisierung läuft wieder." + }, + "entities": { + "hosts": "Hosts", + "sshCredentials": "Anmeldeinformationen", + "sshFolders": "Ordner", + "userPreferences": "Einstellungen", + "pluginUserSettings": "Plugin-Einstellungen", + "sharedHosts": "Mit Ihnen geteilte Hosts", + "sharedCredentials": "Mit Ihnen geteilte Anmeldeinformationen", + "vaultProfiles": "Vault-Profile", + "snippetFolders": "Snippet-Ordner", + "snippets": "Snippets", + "dashboardServiceLinks": "Service-Links", + "homepageItems": "Startseiten-Elemente", + "networkTopology": "Netzwerkübersicht", + "workspaces": "Arbeitsbereiche", + "hostDefaults": "Host-Standardwerte", + "hostDefaultsAdmin": "Server-Host-Standardwerte", + "aiProviders": "AI-Anbieter", + "homepageLayouts": "Startseiten-Layouts", + "accountProfile": "Kontoprofil" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "Dieser Host legt seinen eigenen Wert fest. Klicken Sie, um erneut den Standardwert von {{source}} zu verwenden", "clearTitle": "Auf dieser Ebene festgelegt. Klicken Sie, um dies zu löschen und stattdessen {{source}} zu verwenden", "inheritedTitle": "Folgt dem Standardwert von {{source}}", - "titleAdmin": "Server-Host-Standardeinstellungen", - "titleUser": "Meine Host-Standardeinstellungen", - "titleFolder": "Ordner-Standardeinstellungen: {{name}}", - "descriptionAdmin": "Standardeinstellungen für jeden Host auf diesem Server. Die eigenen Standardeinstellungen eines Benutzers, die Standardeinstellungen eines Ordners oder der Host selbst können weiterhin einen anderen Wert festlegen. Ändern Sie ein Feld, um es hier festzulegen, oder löschen Sie es, um es nicht festzulegen.", - "descriptionUser": "Standardeinstellungen für alle Ihre Hosts, die die des Servers überschreiben. Ein Ordner oder der Host selbst kann weiterhin einen anderen Wert festlegen. Ändern Sie ein Feld, um es hier festzulegen, oder löschen Sie es, um es nicht festzulegen.", - "descriptionFolder": "Standardeinstellungen für die Hosts in diesem Ordner und seinen Unterordnern, die Ihre eigenen überschreiben. Ein Host kann weiterhin einen anderen Wert festlegen. Ändern Sie ein Feld, um es hier festzulegen, oder löschen Sie es, um es nicht festzulegen.", - "save": "Standardeinstellungen speichern", "saved_one": "Standardeinstellungen gespeichert. {{count}} Host wurde aktualisiert.", "saved_other": "Standardeinstellungen gespeichert. {{count}} Hosts wurden aktualisiert.", - "savedInBackground": "Standardeinstellungen gespeichert. Hosts werden im Hintergrund aktualisiert.", "appliedToHosts_one": "{{count}} Host wurde mit den neuen Standardeinstellungen aktualisiert.", "appliedToHosts_other": "{{count}} Hosts wurden mit den neuen Standardeinstellungen aktualisiert.", - "saveFailed": "Standardeinstellungen konnten nicht gespeichert werden", - "loadFailed": "Standardeinstellungen konnten nicht geladen werden", - "confirmTitle": "Standardeinstellungen speichern?", "confirmChanges_one": "{{count}} Host folgt diesen Standardeinstellungen und wird geändert.", "confirmChanges_other": "{{count}} Hosts folgen diesen Standardeinstellungen und werden geändert.", - "confirmNoChanges": "Keine Änderungen an vorhandenen Hosts. Neue Hosts starten mit diesen Standardeinstellungen.", - "menuMyDefaults": "Meine Host-Standardeinstellungen", - "folderDefaultsAction": "Ordner-Standardeinstellungen", - "adminSectionDescription": "Legen Sie die Standardeinstellungen fest, denen jeder Host auf diesem Server folgt, für jede Einstellung, die ein Host hat, einschließlich der jedes Plugins. Benutzer und Ordner können darüber hinaus ihre eigenen festlegen, und jeder Host kann weiterhin seinen eigenen Wert verwenden.", - "editServerDefaults": "Server-Standardeinstellungen bearbeiten", - "resetMenu": "Zurücksetzen", - "resetAll": "Alles auf Standardwerte", - "resetCore": "Verbindung und SSH auf Standardwerte", "resetDone_one": "{{count}} Host verwendet jetzt die Standardwerte.", "resetDone_other": "{{count}} Hosts verwenden jetzt die Standardwerte." }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "Gespeichert. Tippen, um es zu ersetzen." }, - "sharing": { - "revokeConfirm": "Zugriff für {{name}} entfernen?", - "revoke": "Zugriff entfernen" - }, "manage": { - "searchSettings": "Einstellungen durchsuchen", - "noMatchingSettings": "Keine Einstellungen gefunden.", - "sections": "Abschnitte", - "sectionNeedsAttention": "Hier ist etwas Aufmerksamkeit erforderlich", "needsAttention_one": "Ein Punkt erfordert Aufmerksamkeit.", "needsAttention_other": "{{count}} Punkte erfordern Aufmerksamkeit.", - "bandHost": "Host", - "bandFeatures": "Protokolle und Plugins", - "bandCredential": "Anmeldeinformationen", - "sshConnection": "SSH-Verbindung", - "errorAddressRequired": "Eine Adresse ist erforderlich.", - "errorPortRange": "Verwenden Sie einen Port zwischen 1 und 65535.", - "defaults": "Standardwerte", - "searchHosts": "Hosts durchsuchen", - "searchCredentials": "Anmeldeinformationen durchsuchen", - "searchDefaults": "Standardwerte durchsuchen", - "addCredential": "Anmeldeinformationen hinzufügen", - "nothingMatches": "Nichts gefunden", - "nothingYet": "Hier ist noch nichts vorhanden", - "emptyHostsHint": "Fügen Sie einen Host hinzu, und er erscheint hier, in dem Ordner, den Sie ihm zuweisen.", - "emptyCredentialsHint": "Gespeicherte Anmeldeinformationen können von jedem Host wiederverwendet werden.", - "collapse": "Einklappen", - "expand": "Aufklappen", - "cannotBeUndone": "Dies kann nicht rückgängig gemacht werden.", - "hostNotFound": "Dieser Host wurde nicht gefunden. Versuchen Sie, die Liste zu aktualisieren.", "hostCount_one": "{{count}} Host", "hostCount_other": "{{count}} Hosts", "credentialCount_one": "{{count}} Anmeldeinformation", - "credentialCount_other": "{{count}} Anmeldeinformationen", - "newHost": "Neuer Host", - "newCredential": "Neue Anmeldeinformationen", - "advanced": "Erweitert", - "pickHost": "Wählen Sie einen Host zum Bearbeiten", - "pickCredential": "Wählen Sie Anmeldeinformationen zum Bearbeiten", - "pickDefaults": "Wählen Sie eine Ebene der Standardwerte zum Bearbeiten", - "pickHint": "Alles rund um eine Verbindung befindet sich hier, gruppiert, damit Sie es leicht finden." + "credentialCount_other": "{{count}} Anmeldeinformationen" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/el_GR.json b/src/ui/locales/translated/el_GR.json index c15e98c64..b4accc3fa 100644 --- a/src/ui/locales/translated/el_GR.json +++ b/src/ui/locales/translated/el_GR.json @@ -141,7 +141,6 @@ "continue": "Συνέχεια", "error": "Σφάλμα", "unsavedChanges": "Μη αποθηκευμένες αλλαγές", - "more": "Περισσότερα", "loading": "Φόρτωση...", "host": "Host", "selectHost": "Επιλέξτε έναν host...", @@ -154,7 +153,6 @@ "cancel": "Ακύρωση", "username": "Όνομα χρήστη", "login": "Σύνδεση", - "logout": "Αποσύνδεση", "register": "Εγγραφή", "password": "Κωδικός πρόσβασης", "confirmPassword": "Επιβεβαίωση κωδικού", @@ -165,8 +163,6 @@ "rename": "Μετονομασία", "edit": "Επεξεργασία", "confirm": "Επιβεβαίωση", - "next": "Επόμενο", - "previous": "Προηγούμενο", "refresh": "Ανανέωση", "language": "Γλώσσα", "backendReconnected": "Η σύνδεση με τον server αποκαταστάθηκε", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Διαβάστε για καθένα" }, "desktopUpdates": { - "title": "Εφαρμογή επιφάνειας εργασίας", - "mode": "Ενημερώσεις", - "modeHint": "Πώς λαμβάνει η εφαρμογή νέες εκδόσεις.", - "manualModeHint": "Αυτό το αντίγραφο δεν μπορεί να ενημερωθεί αυτόματα, οπότε το Termix σας ενημερώνει μόνο όταν κυκλοφορεί νέα έκδοση.", "modeAutomatic": "Αυτόματο", "modePrompt": "Ερώτηση πρώτα", "modeNever": "Ποτέ", @@ -247,15 +239,6 @@ "onboardingTitle": "Ενημερώσεις εφαρμογής", "onboardingBody": "Η εφαρμογή επιφάνειας εργασίας μπορεί πλέον να ενημερώνεται αυτόματα. Επιλέξτε πώς θέλετε να φτάνουν οι νέες εκδόσεις. Μπορείτε να αλλάξετε αυτό αργότερα στις Ρυθμίσεις, Ενημερώσεις.", "onboardingManual": "Αυτό το αντίγραφο της εφαρμογής εγκαταστάθηκε με τρόπο που δεν επιτρέπει αυτόματη ενημέρωση, οπότε το Termix θα σας ενημερώνει όταν κυκλοφορεί νέα έκδοση με σύνδεσμο για λήψη.", - "status": "Έκδοση {{version}}", - "statusIdle": "Δεν έχει γίνει έλεγχος ακόμη", - "statusChecking": "Έλεγχος για ενημερώσεις", - "statusAvailable": "Η έκδοση {{version}} είναι διαθέσιμη", - "statusDownloading": "Λήψη {{version}} ({{progress}}%)", - "statusReady": "Η έκδοση {{version}} είναι έτοιμη. Επανεκκινήστε για εγκατάσταση.", - "statusUpToDate": "Έχετε την πιο πρόσφατη έκδοση", - "statusError": "Αδυναμία ελέγχου για ενημερώσεις. Δοκιμάστε ξανά αργότερα.", - "checkNow": "Έλεγχος τώρα", "download": "Λήψη", "restart": "Επανεκκίνηση τώρα", "later": "Αργότερα", @@ -269,26 +252,11 @@ "terminal": "Τερματικό", "close": "Κλείσιμο", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Αντιγραφή Κωδικού", - "copySudoPassword": "Αντιγραφή Κωδικού Sudo", - "passwordCopied": "Ο κωδικός αντιγράφηκε στο πρόχειρο", - "failedToCopyPassword": "Αποτυχία αντιγραφής κωδικού", - "refreshTab": "Ανανέωση σύνδεσης", - "renameTab": "Μετονομασία καρτέλας", "dashboard": "Πίνακας ελέγχου", "quickConnect": "Γρήγορη Σύνδεση", - "openAsTabHint": "Ctrl+κλικ ή κλικ με το μεσαίο κουμπί για άνοιγμα ως καρτέλα", - "openAsTab": "Άνοιγμα ως καρτέλα", - "openInRightDock": "Άνοιγμα στη δεξιά πλευρά", - "closeRightDock": "Κλείσιμο δεξιάς πλευράς", - "toggleRightDock": "Εναλλαγή δεξιάς πλευράς", "hosts": "Διακομιστές", "credentials": "Στοιχεία Εισόδου", "connections": "Συνδέσεις", - "keepSideMenuOpen": "Διατήρηση Μενού Ανοικτό", - "collapseSideMenu": "Σύμπτυξη Μενού", - "roleAdministrator": "Διαχειριστής", - "roleUser": "Χρήστης", "sync": "Συγχρονισμός", "reconnectDisconnectedTerminals": "Επανασύνδεση όλων των αποσυνδεδεμένων τερματικών", "reconnectingTerminals_one": "Επανασύνδεση {{count}} τερματικού", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "Αδυναμία έναρξης επανασύνδεσης {{count}} τερματικών", "fullscreenUnsupported": "Η λειτουργία πλήρους οθόνης δεν υποστηρίζεται από αυτόν τον περιηγητή", "fullscreenFailed": "Αδυναμία εναλλαγής σε πλήρη οθόνη", - "resetSidebarWidth": "Επαναφορά πλάτους", - "collapseSidebar": "Σύμπτυξη πλαϊνής μπάρας", - "openSidebar": "Άνοιγμα πλαϊνής μπάρας", "confirmCloseHost": "Κλείσιμο {{host}};", - "enterFullscreen": "Είσοδος σε πλήρη οθόνη (Ctrl+Shift+F)", - "exitFullscreen": "Έξοδος από πλήρη οθόνη (Ctrl+Shift+F)", - "group": { - "objects": "Τα δικά σας", - "tools": "Εργαλεία", - "system": "Σύστημα" - }, - "searchEverything": "Αναζήτηση hosts, καρτελών και ενεργειών", - "search": "Αναζήτηση", "hiddenCount_one": "{{count}} κρυφό", "hiddenCount_other": "{{count}} κρυφά", - "showInRail": "Εμφάνιση στην πλαϊνή μπάρα", - "moveUp": "Μετακίνηση επάνω", - "moveDown": "Μετακίνηση κάτω", - "resetRailOrder": "Επαναφορά σειράς", - "hideFromRail": "Απόκρυψη από την πλαϊνή μπάρα", - "openSettings": "Άνοιγμα ρυθμίσεων", "settings": "Ρυθμίσεις", "manage": "Διαχείριση", - "mobileNavigation": "Πλοήγηση", "plugins": "Πρόσθετα" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "Η εισαγωγή ολοκληρώθηκε: {{imported}} εισήχθησαν, {{updated}} ενημερώθηκαν, {{failed}} απέτυχαν", "importHostsFailed": "Αποτυχία εισαγωγής υπολογιστών" }, - "commandPalette": { - "searchPlaceholder": "Αναζήτηση υπολογιστών, εντολών ή ρυθμίσεων...", - "quickActions": "Γρήγορες Ενέργειες", - "navigation": "Πλοήγηση", - "orShortcut": "ή", - "addNewHost": "Προσθήκη νέου υπολογιστή", - "adminSettings": "Ρυθμίσεις διαχειριστή", - "addCredential": "Προσθήκη στοιχείων σύνδεσης", - "recentActivity": "Πρόσφατη δραστηριότητα", - "serversAndHosts": "Διακομιστές & Υπολογιστές", - "noHostsFound": "Δεν βρέθηκαν υπολογιστές που να ταιριάζουν με το \"{{search}}\"", - "links": "Σύνδεσμοι", - "navigate": "Πλοήγηση", - "select": "Επιλογή", - "pluginActions": "Περισσότερες ενέργειες", - "noTargetTab": "Δεν ανοίγει καρτέλα τερματικού", - "documentation": "Τεκμηρίωση" - }, "splitScreen": { "title": "Διαίρεση οθόνης", "defaultLabel": "Διαίρεση {{number}}", "splitRight": "Διαίρεση δεξιά", "splitDown": "Διαίρεση κάτω", - "addToSplit": "Προσθήκη στο {{split}}", "paneEmptyItem": "Περιοχή {{index}}: κενή", "paneItem": "Περιοχή {{index}}: {{label}}", "paneNumber": "Περιοχή {{index}}", - "newPaneRight": "Νέα περιοχή δεξιά", - "newPaneBelow": "Νέα περιοχή κάτω", "emptyTitle": "Κενή περιοχή", "emptyHint": "Επιλέξτε κάτι για εμφάνιση εδώ. Ενώ αυτή η περιοχή είναι επιλεγμένη, ό,τι ανοίξετε από την πλευρική μπάρα θα ανοίξει επίσης εδώ.", "openTabs": "Ανοιχτές καρτέλες", @@ -962,7 +890,6 @@ "clearPane": "Άδειασμα αυτής της περιοχής", "zoom": "Μεγέθυνση περιοχής", "unzoom": "Επαναφορά διάταξης", - "unsplit": "Ακύρωση διαίρεσης", "layouts": "Διάταξη", "applyLayout": "Αλλαγή διάταξης", "maxPanes_one": "Ένα split μπορεί να περιέχει έως {{count}} παράθυρο", @@ -971,8 +898,6 @@ "dropHere": "Απόθεση για εμφάνιση εδώ", "paneActions": "Ενέργειες περιοχής", "dividerHint": "Σύρετε για αλλαγή μεγέθους. Κάντε διπλό κλικ για εξίσωση.", - "openInSplit": "Άνοιγμα σε διαίρεση", - "openInNewSplit": "Νέα διαίρεση με την τρέχουσα καρτέλα", "shortcuts": "Συντομεύσεις", "shortcutNavigate": "Μετακίνηση μεταξύ περιοχών", "presets": { @@ -986,23 +911,6 @@ "grid6": "Πλέγμα έξι" } }, - "connections": { - "noConnections": "Καμία σύνδεση", - "noConnectionsDesc": "Ανοίξτε ένα τερματικό, διαχειριστή αρχείων ή απομακρυσμένη οθόνη για να δείτε τις συνδέσεις εδώ", - "connectedFor": "Συνδεδεμένος για {{duration}}", - "connected": "Συνδεδεμένος", - "disconnected": "Αποσυνδεδεμένος", - "reconnect": "Επανασύνδεση", - "sectionOpen": "Ανοιχτά", - "sectionBackground": "Υπόβαθρο", - "backgroundDesc": "Οι συνεδρίες διατηρούνται για {{minutes}} λεπτά μετά την αποσύνδεση και μπορούν να επανασυνδεθούν.", - "expiresIn": "Λήγει σε {{duration}}", - "search": "Αναζήτηση συνδέσεων...", - "noSearchResults": "Καμία σύνδεση δεν ταιριάζει με την αναζήτησή σας", - "rename": "Μετονομασία συνεδρίας", - "forgetConfirm": "Τερματισμός της συνεδρίας υποβάθρου για το {{name}};", - "forget": "Τερματισμός συνεδρίας" - }, "sshAuth": { "totpRequired": "Απαιτείται Επαλήθευση Δύο Παράγοντων", "totpCodeLabel": "Κωδικός Επαλήθευσης", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "κωδικός πρόσβασης κλειδιού", "pastePrivateKey": "Επικολλήστε το ιδιωτικό σας κλειδί εδώ...", - "enterPassword": "Εισάγετε τον κωδικό πρόσβασής σας", - "apiKeyName": "π.χ. CI Pipeline", - "credentialName": "π.χ. SSH Key Παραγωγής", - "optionalDetails": "Προαιρετικές λεπτομέρειες...", - "sshUsername": "π.χ. root ή deploy", - "hostAddress": "10.0.0.1 ή example.com", - "hostName": "π.χ. Διακομιστής Ιστού Παραγωγής" + "enterPassword": "Εισάγετε τον κωδικό πρόσβασής σας" }, "dashboard": { - "title": "Πίνακας Ελέγχου", - "github": "GitHub", - "reportBug": "Αναφορά σφάλματος", - "discord": "Discord", - "docs": "Τεκμηρίωση", - "donate": "Δωρεά", - "serverOverview": "Επισκόπηση Διακομιστή", - "version": "Έκδοση", "updateAvailable": "Διαθέσιμη Ενημέρωση", - "beta": "Beta", - "uptime": "Χρόνος Λειτουργίας", - "database": "Βάση Δεδομένων", - "healthy": "Σταθερή", - "error": "Σφάλμα", - "totalHosts": "Συνολικοί Διακομιστές", - "totalCredentials": "Συνολικά Στοιχεία Ελέγχου Ταυτότητας", - "recentActivity": "Πρόσφατη Δραστηριότητα", - "reset": "Επαναφορά", - "noRecentActivity": "Καμία πρόσφατη δραστηριότητα", - "quickActions": "Γρήγορες Ενέργειες", - "addHost": "Προσθήκη Διακομιστή", - "addCredential": "Προσθήκη Στοιχείου Ελέγχου Ταυτότητας", - "adminSettings": "Ρυθμίσεις Διαχειριστή", - "userProfile": "Προφίλ Χρήστη", - "serverStats": "Στατιστικά Διακομιστή", - "customizeLayout": "Προσαρμογή Πίνακα Ελέγχου", - "justNow": "μόλις τώρα" + "beta": "Beta" }, "dashboardTab": { "stable": "ΣΤΑΘΕΡΗ", - "registerNewServer": "Εγγραφή νέου διακομιστή", - "storeSshKeysOrPasswords": "Αποθήκευση κλειδιών SSH ή κωδικών πρόσβασης", - "manageUsersAndRoles": "Διαχείριση χρηστών και ρόλων", - "manageYourAccount": "Διαχείριση του λογαριασμού σας", - "hostStatus": "Κατάσταση Διακομιστή", - "noHostsConfigured": "Δεν έχουν οριστεί διακομιστές", - "checking": "ΕΛΕΓΧΟΣ", - "commandPalette": "Παλέτα Εντολών", - "done": "Ολοκληρώθηκε", - "clear": "Εκκαθάριση", - "dragToResizeColumns": "Σύρετε για αλλαγή μεγέθους στηλών", - "hostsAvailable": "Διαθέσιμοι Ξενιστές", - "removeSection": "Αφαίρεση ενότητας", - "addSection": "Προσθήκη ενότητας", - "allSectionsShown": "Όλα είναι ήδη στον πίνακα ελέγχου.", - "fromPlugins": "Από πρόσθετα", - "dropHere": "Αφήστε μια ενότητα εδώ", - "dragToReorder": "Σύρετε τις ενότητες για αναδιάταξη", - "clearActivityConfirm": "Εκκαθάριση της πρόσφατης δραστηριότητάς σας;", - "resetConfirm": "Επαναφορά του πίνακα ελέγχου στην προεπιλεγμένη διάταξη;", "onlineCount_one": "{{count}} συνδεδεμένος", "onlineCount_other": "{{count}} συνδεδεμένοι", "hostCount_one": "{{count}} ξενιστής", "hostCount_other": "{{count}} ξενιστές" }, "admin": { - "sectionGeneral": "Γενικά", - "sectionUsers": "Χρήστες", - "sectionSessions": "Συνδέσεις", - "sectionRoles": "Ρόλοι", - "sectionDatabase": "Βάση Δεδομένων", - "sectionApiKeys": "Κλειδιά API", - "sectionAuditLog": "Καταγραφή Ελέγχου", - "sectionSsl": "Πιστοποιητικό HTTPS", - "sectionBranding": "Εξατομίκευση Επωνυμίας", - "brandingAppName": "Όνομα Εφαρμογής", - "brandingAppNameDesc": "Εμφανίζεται στην οθόνη σύνδεσης και στην καρτέλα του περιηγητή. Αφήστε κενό για χρήση του \"Termix\".", - "brandingTagline": "Σύνθημα", - "brandingTaglineDesc": "Εμφανίζεται κάτω από το όνομα της εφαρμογής στην οθόνη σύνδεσης. Αφήστε κενό για χρήση του προεπιλεγμένου συνθήματος.", - "brandingLogo": "Λογότυπο", - "brandingLogoDesc": "PNG, JPEG ή WEBP, έως 750 KB. Αντικαθιστά το προεπιλεγμένο εικονίδιο στην οθόνη σύνδεσης και την καρτέλα του περιηγητή.", - "brandingLogoUpload": "Ανέβασμα λογοτύπου", - "brandingLogoReset": "Επαναφορά στην προεπιλογή", - "brandingLogoInvalid": "Μη έγκυρη εικόνα. Χρησιμοποιήστε αρχείο PNG, JPEG ή WEBP έως 750 KB.", - "brandingSaved": "Οι ρυθμίσεις εξατομίκευσης αποθηκεύτηκαν", - "brandingSaveFailed": "Αποτυχία αποθήκευσης των ρυθμίσεων εξατομίκευσης", - "sslDescription": "Το πιστοποιητικό που παρέχει το Termix μέσω HTTPS. Ανεβάστε το δικό σας εδώ, ή αποκτήστε και ανανεώστε ένα από το Let's Encrypt στην ενότητα Πιστοποιητικών ACME.", - "sslDocsLink": "Προβολή τεκμηρίωσης SSL", - "sslCertStatus": "Κατάσταση Πιστοποιητικού", - "sslCertStatusNone": "Χωρίς πιστοποιητικό", - "sslCertStatusValid": "Έγκυρο", - "sslCertStatusExpiring": "Λήγει σύντομα", - "sslCertStatusExpired": "Ληγμένο", - "sslCertExpiresAt": "Λήγει {{date}}", - "sslInfoNote": "Μετά την έκδοση ή το ανέβασμα ενός πιστοποιητικού, το Termix θα ενεργοποιήσει αυτόματα το HTTPS στην SSL_PORT (προεπιλογή 8443) εκτός από την υπάρχουσα θύρα HTTP. Βεβαιωθείτε ότι αυτή η θύρα είναι δημοσιευμένη/αντιστοιχισμένη σε αυτό το container ώστε να είναι προσβάσιμη.", - "sslManualCert": "Πιστοποιητικό (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Ιδιωτικό Κλειδί (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Επικολλήστε το υπάρχον πιστοποιητικό και ιδιωτικό κλειδί, συμπεριλαμβανομένης της πλήρους αλυσίδας εάν απαιτείται από την αρχή πιστοποίησης σας.", - "sslManualUpload": "Ανέβασμα & Εγκατάσταση Πιστοποιητικού", - "sslManualUploadLoading": "Ανέβασμα πιστοποιητικού...", - "sslManualUploadSuccess": "Το πιστοποιητικό ανεβήκε και εγκαταστάθηκε επιτυχώς", - "sslManualUploadFailed": "Αποτυχία ανέβασματος πιστοποιητικού", - "sslManualRequiresFields": "Το πιστοποιητικό και το ιδιωτικό κλειδί είναι υποχρεωτικά", - "auditLogTotal": "{{total}} συνολικές καταχωρίσεις", - "auditLogEmpty": "Δεν βρέθηκαν καταχωρίσεις καταγραφής ελέγχου", - "auditLogSuccess": "Επιτυχία", - "auditLogFailed": "Αποτυχία", - "auditLogClearFilters": "Εκκαθάριση Φίλτρων", - "auditLogPage": "Σελίδα {{page}} από {{totalPages}} ({{total}} συνολικά)", - "auditLogIp": "IP", - "auditLogResourceId": "Αναγνωριστικό Πόρου", - "auditLogFilterUser": "Χρήστης", - "auditLogFilterAction": "Ενέργεια", - "auditLogFilterResourceType": "Τύπος Πόρου", - "auditLogFilterStatus": "Κατάσταση", - "auditLogFilterFrom": "Από", - "auditLogFilterTo": "Έως", - "auditLogFilterAll": "Όλα", - "allowRegistration": "Επιτρέψτε Εγγραφή Χρηστών", - "allowRegistrationDesc": "Επιτρέψτε σε νέους χρήστες να εγγραφούν μόνοι τους με όνομα χρήστη και κωδικό πρόσβασης", - "allowPasswordLogin": "Επιτρέψτε Σύνδεση με Κωδικό", - "allowPasswordLoginDesc": "Σύνδεση με όνομα χρήστη/κωδικό πρόσβασης", - "externalAutoProvision": "Αυτόματη δημιουργία εξωτερικών λογαριασμών", - "externalAutoProvisionDesc": "Δημιουργία λογαριασμού την πρώτη φορά που κάποιος συνδέεται μέσω εξωτερικής μεθόδου όπως SSO ή LDAP. Όταν είναι απενεργοποιημένο, μόνο όσοι έχουν ήδη λογαριασμό μπορούν να συνδεθούν με αυτόν τον τρόπο", - "secondFactorAfterExternalLogin": "Αίτηση δεύτερου παράγοντα μετά από εξωτερικές συνδέσεις (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Όταν είναι απενεργοποιημένο, ο εγγεγραμμένος δεύτερος παράγοντας ζητείται μόνο μετά από σύνδεση με κωδικό και άλλες τοπικές συνδέσεις, όπως πριν. Όταν είναι ενεργοποιημένο, ζητείται μετά από κάθε μέθοδο σύνδεσης, συμπεριλαμβανομένων SSO και LDAP.", - "allowPasswordReset": "Επιτρέψτε Επαναφορά Κωδικού", - "allowPasswordResetDesc": "Κώδικας επαναφοράς μέσω καταγραφών Docker", - "auditForwardingTitle": "Μεταφορά σε SIEM", - "auditForwardingDesc": "Αποστολή αντιγράφου κάθε εγγραφής ελέγχου σε εξωτερικό συλλέκτη ως NDJSON. Οι τοπικές καταγραφές παραμένουν η πηγή αλήθειας.", - "auditForwardingEnvNotice": "Μια μεταβλητή περιβάλλοντος επίσης διαμορφώνει τη μεταφορά· το URL που αποθηκεύεται εδώ έχει προτεραιότητα.", - "auditForwardingToken": "Διακριτικό Bearer (προαιρετικό)", - "auditForwardingTokenStored": "Διακριτικό Bearer (αποθηκευμένο)", - "auditForwardingSaved": "Οι ρυθμίσεις μεταφοράς ελέγχου αποθηκεύτηκαν", - "auditForwardingSaveError": "Αποτυχία αποθήκευσης ρυθμίσεων μεταφοράς ελέγχου", - "sessionTimeout": "Λήξη Συνεδρίας", - "hours": "ώρες", - "sessionTimeoutRange": "Ελάχιστο 1ω, μέγιστο 720ω", - "monitoringDefaults": "Προεπιλογές Παρακολούθησης", - "statusCheck": "Έλεγχος Κατάστασης", - "sec": "δευτ", - "logLevel": "Επίπεδο Καταγραφής", "usersCount_one": "{{count}} χρήστης", - "usersCount_other": "{{count}} χρήστες", - "searchUsers": "Αναζήτηση χρηστών...", - "noUsers": "Κανένας χρήστης", - "noUsersMatch": "Κανένας χρήστης δεν ταιριάζει με την αναζήτησή σας", - "pageOf": "Σελίδα {{page}} από {{total}}", - "createUser": "Δημιουργία", - "newRole": "Νέος Ρόλος", - "roleName": "Όνομα", - "roleDisplayName": "Εμφανιζόμενο Όνομα", - "roleDescription": "Περιγραφή", "rolesCount_one": "{{count}} ρόλος", - "rolesCount_other": "{{count}} ρόλοι", - "createRole": "Δημιουργία", - "creating": "Δημιουργία...", - "exportDatabase": "Εξαγωγή Βάσης Δεδομένων", - "exportDatabaseDesc": "Λήψη φορητού αντίγραφα ασφαλείας SQLite όλων των hosts, διαπιστευτηρίων και ρυθμίσεων", - "export": "Εξαγωγή", - "exporting": "Εξαγωγή...", - "importDatabase": "Εισαγωγή Βάσης Δεδομένων", - "importDatabaseDesc": "Ανάκτηση από φορητό αντίγραφο ασφαλείας .sqlite σε οποιοδήποτε backend βάσης δεδομένων", - "importDatabaseSelected": "Επιλεγμένο: {{name}}", - "selectFile": "Επιλογή Αρχείου", - "changeFile": "Αλλαγή", - "import": "Εισαγωγή", - "importing": "Εισαγωγή...", "apiKeysCount_one": "{{count}} κλειδί", - "apiKeysCount_other": "{{count}} κλειδιά", - "apiKeysDocsLink": "Προβολή τεκμηρίωσης", - "apiKeysCliHint": "Χρησιμοποιήστε ένα κλειδί API με το Termix CLI για διαχείριση διακομιστών από το τερματικό σας.", - "apiKeysCliLink": "Προβολή τεκμηρίωσης CLI", - "newApiKey": "Νέο Κλειδί API", - "apiKeyCreatedWarning": "Δημιουργήθηκε κλειδί - αντιγράψτε το τώρα, δεν θα εμφανιστεί ξανά.", - "apiKeyName": "Όνομα", - "apiKeyUser": "Χρήστης", - "apiKeySelectUser": "Επιλέξτε έναν χρήστη...", - "apiKeyExpiresAt": "Λήξη", - "createKey": "Δημιουργία Κλειδιού", - "apiKeyNoExpiry": "Χωρίς λήξη", - "revokedBadge": "ΑΚΥΡΩΘΗΚΕ", - "authTypeDual": "Διπλή Επαλήθευση", - "authTypeExternal": "Εξωτερική", - "authTypeLocal": "Τοπική", - "adminStatusAdministrator": "Διαχειριστής", - "adminStatusRegularUser": "Κανονικός Χρήστης", - "adminBadge": "ΔΙΑΧΕΙΡΙΣΤΗΣ", - "systemBadge": "ΣΥΣ", - "customBadge": "ΠΡΟΣΑΡΜΟΣΜΕΝΟ", - "youBadge": "ΕΣΑΣ", "sessionsActive_one": "{{count}} ενεργό", - "sessionsActive_other": "{{count}} ενεργά", - "sessionActive": "Ενεργή: {{time}}", - "sessionExpires": "Λήξη: {{time}}", - "revokeAll": "Όλες", - "revokeAllSessionsSuccess": "Όλες οι συνεδρίες για τον χρήστη ακυρώθηκαν", - "revokeAllSessionsFailed": "Αποτυχία ακύρωσης συνεδριών", - "revokeSessionFailed": "Αποτυχία ακύρωσης συνεδρίας", - "addRole": "Προσθήκη ρόλου", - "noCustomRoles": "Δεν έχουν οριστεί προσαρμοσμένοι ρόλοι", - "removeRoleFailed": "Αποτυχία αφαίρεσης ρόλου", - "assignRoleFailed": "Αποτυχία ανάθεσης ρόλου", - "userAdminAccess": "Διαχειριστής", - "userAdminAccessDesc": "Πλήρης πρόσβαση σε όλες τις ρυθμίσεις διαχειριστή", - "userRoles": "Ρόλοι", - "revokeAllUserSessions": "Ακύρωση Όλων των Συνεδριών", - "revokeAllUserSessionsDesc": "Αναγκαστική επανασύνδεση σε όλες τις συσκευές", - "revoke": "Ακύρωση", - "deleteUserWarning": "Η διαγραφή αυτού του χρήστη είναι μόνιμη.", - "deleteUser": "Διαγραφή του {{username}}", - "deleting": "Διαγραφή...", - "deleteUserFailed": "Αποτυχία διαγραφής χρήστη", - "deleteUserSuccess": "Ο χρήστης \"{{username}}\" διαγράφηκε", - "deleteRoleSuccess": "Ο ρόλος \"{{name}}\" διαγράφηκε", - "revokeKeySuccess": "Το κλειδί \"{{name}}\" ακυρώθηκε", - "revokeKeyFailed": "Αποτυχία ακύρωσης κλειδιού", - "copiedToClipboard": "Αντιγράφηκε στο πρόχειρο", - "done": "Ολοκληρώθηκε", - "createUserTitle": "Δημιουργία Χρήστη", - "createUserDesc": "Δημιουργήστε έναν νέο τοπικό λογαριασμό.", - "createUserUsername": "Όνομα χρήστη", - "createUserPassword": "Κωδικός πρόσβασης", - "createUserPasswordHint": "Ελάχιστο 6 χαρακτήρες.", - "createUserEnterUsername": "Εισαγάγετε όνομα χρήστη", - "createUserSubmit": "Δημιουργία Χρήστη", - "editUserTitle": "Διαχείριση Χρήστη: {{username}}", - "editUserDesc": "Επεξεργασία ρόλων, καθεστώτος διαχειριστή, συνεδριών και ρυθμίσεων λογαριασμού.", - "editUserUsername": "Όνομα χρήστη", - "editUserAuthType": "Τύπος Επαλήθευσης", - "editUserAdminStatus": "Καθεστώς Διαχειριστή", - "editUserUserId": "ID Χρήστη", - "linkAccountTitle": "Σύνδεση Λογαριασμών", - "linkAccountDesc": "Ενσωματώστε τον εξωτερικό λογαριασμό {{username}} με έναν υπάρχοντα τοπικό λογαριασμό.", - "linkAccountDescLocal": "Συνδέστε έναν τοπικό λογαριασμό {{username}} με έναν υπάρχοντα λογαριασμό μόνο εξωτερικής πρόσβασης.", - "linkAccountWarningTitle": "Αυτό θα:", - "linkAccountEffect1": "Διαγράψει τον λογαριασμό μόνο εξωτερικής πρόσβασης", - "linkAccountEffect2": "Προσθέσει την εξωτερική σύνδεσή του στον προορισμό λογαριασμού", - "linkAccountEffect3": "Επιτρέψει τόσο εξωτερική όσο και σύνδεση με κωδικό", - "linkAccountTargetUsername": "Όνομα χρήστη τοπικού λογαριασμού", - "linkAccountTargetPlaceholder": "Εισάγετε το όνομα χρήστη του τοπικού λογαριασμού για σύνδεση", - "linkAccountExternalUsername": "Όνομα χρήστη εξωτερικού λογαριασμού", - "linkAccountExternalPlaceholder": "Εισάγετε το όνομα χρήστη του λογαριασμού μόνο εξωτερικής πρόσβασης για συγχώνευση", - "linkAccountExternalNotFound": "Δεν βρέθηκε λογαριασμός μόνο εξωτερικής πρόσβασης με αυτό το όνομα χρήστη", - "linkAccounts": "Σύνδεση λογαριασμών", - "linkAccountSuccess": "Οι λογαριασμοί συνδέθηκαν επιτυχώς", - "linkAccountFailed": "Αποτυχία σύνδεσης λογαριασμών", - "linkAccountInProgress": "Σύνδεση...", - "unlinkAccountTitle": "Αποσύνδεση εξωτερικής πρόσβασης", - "unlinkAccountDesc": "Αφαίρεση εξωτερικής σύνδεσης από τον {{username}}. Θα μπορούν να συνδεθούν μόνο με τον κωδικό τους.", - "unlinkAccountWarning": "Αυτό θα αφαιρέσει την εξωτερική σύνδεση από αυτόν τον λογαριασμό. Ο χρήστης πρέπει να έχει ορίσει κωδικό για να συνεχίσει να συνδέεται.", - "unlinkAccount": "Αποσύνδεση εξωτερικής πρόσβασης", - "unlinkAccountInProgress": "Αποσύνδεση...", - "unlinkAccountSuccess": "Η εξωτερική σύνδεση αποσυνδέθηκε", - "unlinkAccountFailed": "Αποτυχία αποσύνδεσης εξωτερικής πρόσβασης", - "updateRegistrationFailed": "Αποτυχία ενημέρωσης ρύθμισης εγγραφής", - "updatePasswordLoginFailed": "Αποτυχία ενημέρωσης ρύθμισης σύνδεσης με κωδικό", - "updateSecondFactorAfterExternalLoginFailed": "Αποτυχία ενημέρωσης ρύθμισης δεύτερου παράγοντα", - "updatePasswordResetFailed": "Αποτυχία ενημέρωσης ρύθμισης επαναφοράς κωδικού", - "sessionTimeoutRange2": "Η λήξη συνεδρίας πρέπει να είναι μεταξύ 1 και 720 ωρών", - "sessionTimeoutSaved": "Η λήξη συνεδρίας αποθηκεύτηκε", - "sessionTimeoutSaveFailed": "Αποτυχία αποθήκευσης λήξης συνεδρίας", - "monitoringIntervalInvalid": "Μη έγκυρες τιμές διαστήματος", - "monitoringSaved": "Οι ρυθμίσεις παρακολούθησης αποθηκεύτηκαν", - "monitoringSaveFailed": "Αποτυχία αποθήκευσης ρυθμίσεων παρακολούθησης", - "logLevelUpdateFailed": "Αποτυχία ενημέρωσης επιπέδου καταγραφής", - "createUserRequired": "Το όνομα χρήστη και ο κωδικός είναι υποχρεωτικά", - "createUserPasswordTooShort": "Ο κωδικός πρέπει να έχει τουλάχιστον 6 χαρακτήρες", - "createUserSuccess": "Ο χρήστης \"{{username}}\" δημιουργήθηκε", - "createUserFailed": "Αποτυχία δημιουργίας χρήστη", - "updateAdminStatusFailed": "Αποτυχία ενημέρωσης καθεστώτος διαχειριστή", - "allSessionsRevoked": "Όλες οι συνεδρίες ακυρώθηκαν", - "revokeSessionsFailed": "Αποτυχία ακύρωσης συνεδριών", - "manageUserData": "Διαχείριση δεδομένων χρήστη", - "backToUsers": "Επιστροφή στους χρήστες", - "manageTabAccount": "Λογαριασμός", - "manageTabHosts": "Hosts", - "manageTabCredentials": "Στοιχεία πρόσβασης", - "manageTabSessions": "Συνεδρίες", - "manageTabDanger": "Κίνδυνος", - "manageEditorBack": "Επιστροφή στα δεδομένα του {{username}}", - "dataLockedBadge": "ΚΛΕΙΔΩΜΕΝΟ", - "dataLockedNotice": "Τα δεδομένα του {{username}} παραμένουν κλειδωμένα μέχρι την επόμενη σύνδεσή του. Οι hosts, τα στοιχεία πρόσβασης και τα snippets δεν μπορούν να προβληθούν ή να επεξεργαστούν μέχρι τότε.", - "resetPasswordTitle": "Επαναφορά κωδικού", - "resetPasswordExternalOnly": "Αυτός ο χρήστης συνδέεται μέσω εξωτερικού παρόχου και δεν έχει κωδικό.", - "resetPasswordPlaceholder": "Νέος κωδικός", - "resetPasswordBtn": "Επαναφορά", - "resetPasswordWorking": "Επαναφορά...", - "resetPasswordSuccess": "Ο κωδικός επαναφέρθηκε", - "resetPasswordSuccessWiped": "Ο κωδικός επαναφέρθηκε. Τα κρυπτογραφημένα δεδομένα του χρήστη διαγράφηκαν.", - "resetPasswordFailed": "Αποτυχία επαναφοράς κωδικού", - "resetPasswordConfirmWipe": "Ο {{username}} δεν έχει συνδεθεί από την αναβάθμιση κρυπτογράφησης, οπότε τα δεδομένα του δεν μπορούν να ανακτηθούν. Η επαναφορά τώρα θα διαγράψει τους hosts, τα στοιχεία πρόσβασης και τα snippets του. Συνέχεια;", - "manageApiKeys": "Κλειδιά API", - "apiKeyNamePlaceholder": "Όνομα κλειδιού", - "apiKeyCopyNotice": "Αντιγράψτε αυτό το κλειδί τώρα, δεν θα εμφανιστεί ξανά.", - "noApiKeysForUser": "Κανένα κλειδιά API", - "apiKeyDeleteFailed": "Αποτυχία διαγραφής κλειδιού API", - "exportUserData": "Εξαγωγή δεδομένων", - "exportUserDataDesc": "Λήψη των hosts, των διαπιστευτηρίων και των δεδομένων του διαχειριστή αρχείων αυτού του χρήστη ως JSON. Τα μυστικά αποκρυπτογραφούνται.", - "exportUserDataSuccess": "Τα δεδομένα του χρήστη εξήχθησαν", - "exportUserDataFailed": "Αποτυχία εξαγωγής των δεδομένων του χρήστη", "hostsCount_one": "{{count}} host", "hostsCount_other": "{{count}} hosts", - "addHostForUser": "Προσθήκη Host", - "noHostsForUser": "Αυτός ο χρήστης δεν έχει hosts", - "connectToHost": "Σύνδεση", - "deleteHostConfirm": "Διαγραφή του host \"{{name}}\" που ανήκει στον {{username}};", - "hostDeletedSuccess": "Το host διαγράφηκε", - "hostDeleteFailed": "Αποτυχία διαγραφής του host", "credentialsCount_one": "{{count}} στοιχείο πιστοποίησης", "credentialsCount_other": "{{count}} στοιχεία πιστοποίησης", - "addCredentialForUser": "Προσθήκη Διαπιστευτηρίου", - "noCredentialsForUser": "Αυτός ο χρήστης δεν έχει διαπιστευτήρια", - "deleteCredentialConfirm": "Διαγραφή του διαπιστευτηρίου \"{{name}}\" που ανήκει στον {{username}};", - "credentialDeletedSuccess": "Το διαπιστευτήριο διαγράφηκε", - "credentialDeleteFailed": "Αποτυχία διαγραφής του διαπιστευτηρίου", - "noSessionsForUser": "Κανενός ενεργού συνεδρίας", - "deleteSuccessorLabel": "Παράδοση hosts και διαπιστευτηρίων σε", - "deleteSuccessorMe": "Εμένα (τον διαχειριστή που κάνει τη διαγραφή)", - "deleteSuccessorNone": "Κανέναν, διαγραφή τους", - "deleteSuccessorDesc": "Ό,τι μοιραζόταν αυτός ο χρήστης θα συνεχίσει να λειτουργεί υπό τον νέο ιδιοκτήτη· η επιλογή «κανέναν» αφαιρεί τα hosts, τα διαπιστευτήρια και τις κοινές πόρους του.", - "deleteUserDangerDesc": "Μόνιμη διαγραφή του {{username}} και όλων των δεδομένων του (hosts, διαπιστευτήρια, snippets, ιστορικό). Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.", - "deleteUserConfirm": "Μόνιμη διαγραφή του {{username}} και όλων των δεδομένων του;", - "deleteUserAdminBlocked": "Αφαιρέστε το καθεστώς διαχειριστή πριν διαγράψετε αυτόν τον χρήστη.", - "createRoleRequired": "Το όνομα και το εμφανιζόμενο όνομα είναι υποχρεωτικά", - "createRoleSuccess": "Ο ρόλος \"{{name}}\" δημιουργήθηκε", - "createRoleFailed": "Αποτυχία δημιουργίας ρόλου", - "apiKeyNameRequired": "Το όνομα του κλειδιού είναι υποχρεωτικό", - "apiKeyUserRequired": "Το ID χρήστη είναι υποχρεωτικό", - "apiKeyCreatedSuccess": "Το κλειδί API \"{{name}}\" δημιουργήθηκε", - "apiKeyCreateFailed": "Αποτυχία δημιουργίας κλειδιού API", - "exportSuccess": "Η βάση δεδομένων εξήχθη με επιτυχία", - "exportFailed": "Αποτυχία εξαγωγής της βάσης δεδομένων", - "importSelectFile": "Επιλέξτε αρχείο πρώτα", - "importCompleted": "Η εισαγωγή ολοκληρώθηκε: {{total}} στοιχεία εισήχθησαν, {{skipped}} παραλείφθηκαν", - "importFailed": "Αποτυχία εισαγωγής: {{error}}", - "importError": "Αποτυχία εισαγωγής της βάσης δεδομένων", - "sectionHostDefaults": "Προεπιλογές Host", "rolePermissions": { "count_one": "{{count}} άδεια", - "count_other": "{{count}} άδειες", - "editAction": "Επεξεργασία δικαιωμάτων", - "loadError": "Αποτυχία φόρτωσης του καταλόγου δικαιωμάτων", - "saved": "Τα δικαιώματα του ρόλου αποθηκεύτηκαν", - "saveError": "Αποτυχία αποθήκευσης των δικαιωμάτων του ρόλου", - "save": "Αποθήκευση", - "saving": "Αποθήκευση...", - "pluginDisabled": "Το πρόσθετο είναι απενεργοποιημένο", "groups": { "hosts": "Hosts", "credentials": "Διαπιστευτήρια", "admin": "Διαχείριση" } - }, - "notificationPrivateEndpoints": "Επιτρεπόμενοι ιδιωτικοί hosts ειδοποιήσεων", - "notificationPrivateEndpointsDesc": "Ακριβείς ιδιωτικοί hosts που μπορούν να επικοινωνήσουν οι κανάλια ειδοποιήσεων. Χωρίστε τους με κόμματα.", - "updateNotificationEndpointsFailed": "Αποτυχία ενημέρωσης της λίστας επιτρεπόμενων τελικών σημείων ειδοποιήσεων", - "secondFactorsSectionTitle": "Δεύτεροι παράγοντες", - "secondFactorsNone": "Κανένας δεύτερος παράγοντας δεν έχει εγγραφεί", - "secondFactorUnavailable": "Μη διαθέσιμος", - "resetSecondFactors": "Επαναφορά δεύτερων παραγόντων", - "resetSecondFactorsConfirm": "Αφαίρεση κάθε δεύτερου παράγοντα για τον {{username}}; Μπορούν να συνδεθούν με τον κωδικό πρόσβασης ή το SSO και να εγγραφούν ξανά.", - "secondFactorsResetSuccess": "Οι δεύτεροι παράγοντες επαναφέρθηκαν", - "secondFactorsResetFailed": "Αποτυχία επαναφοράς των δεύτερων παραγόντων", - "passwordLoginForced": "Η σύνδεση με κωδικό είναι απενεργοποιημένη, αλλά δεν έχει ενεργοποιηθεί καμία άλλη μέθοδος σύνδεσης, οπότε παραμένει ενεργή για το παρόν. Κανείς δεν θα μείνει εκτός.", - "sslNotRenewed": "Τίποτα δεν ανανεώνει αυτό το πιστοποιητικό. Λήγει στις {{date}}. Ενεργοποιήστε την αυτόματη ανανέωση στην ενότητα ACME Certificates ή ανεβάστε ένα νέο πριν από τότε.", - "sslSelfSigned": "Αυτουπογεγραμμένο πιστοποιητικό που δημιουργήθηκε από το Termix. Οι περιηγητές θα προειδοποιούν γι' αυτό.", - "sslRenewedBy": "Ανανεώθηκε αυτόματα από το {{plugin}}", - "sslIssuer": "Εκδόθηκε από τον {{issuer}}", - "sslNames": "Καλύπτει τα {{names}}", - "sslManualTitle": "Ανέβασμα πιστοποιητικού", - "updateExternalAutoProvisionFailed": "Αποτυχία ενημέρωσης της ρύθμισης αυτόματης δημιουργίας", - "hostTags": "Προκαθορισμένες ετικέτες hosts", - "hostTagsDesc": "Ετικέτες που βλέπει κάθε χρήστης ως προτάσεις στον επεξεργαστή host. Πατήστε Space ή Enter για να προσθέσετε μία. Η αφαίρεση ετικέτας εδώ δεν την αφαιρεί από τους hosts.", - "hostTagsError": "Αδυναμία φόρτωσης ή αποθήκευσης των προτάσεων ετικετών host.", - "revokeAllSessionsConfirm": "Αποσύνδεση του {{username}} παντού;", - "revokeSessionConfirm": "Αποσύνδεση αυτής της συνεδρίας;", - "revokeSession": "Αποσύνδεση", - "deleteRoleConfirm": "Διαγραφή του ρόλου {{name}};", - "revokeKeyConfirm": "Ακύρωση του API key {{name}};", - "revokeKey": "Ακύρωση" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Πού", - "who": "Ποιος", - "hostLabel": "Host", - "hostPlaceholder": "192.168.1.1 ή example.com", - "portLabel": "Θύρα", - "usernameLabel": "Όνομα χρήστη", - "usernamePlaceholder": "όνομα χρήστη", - "authLabel": "Επαλήθευση", - "passwordLabel": "Κωδικός", - "passwordPlaceholder": "κωδικός", - "privateKeyLabel": "Ιδιωτικό κλειδί", - "privateKeyPlaceholder": "Επικόλληση ιδιωτικού κλειδιού...", - "credentialLabel": "Στοιχείο ταυτότητας", - "credentialPlaceholder": "Επιλογή αποθηκευμένου στοιχείου ταυτότητας", - "protocolLabel": "Πρωτόκολλο", - "domainLabel": "Domain", - "domainPlaceholder": "προαιρετικό", - "connectToAction": "Σύνδεση στο {{name}}", - "sshProtocol": "SSH", - "noTarget": "Τίποτα από τα εγκατεστημένα δεν μπορεί να συνδεθεί σε αυτόν τον τύπο host" + "usernameLabel": "Όνομα χρήστη" }, "keybindings": { - "description": "Σύνδεση πλήκτρων με ενέργειες στον terminal και την εφαρμογή, ή αλλαγή των ενσωματωμένων συντομεύσεων.", - "defaultsHeading": "Ενσωματωμένες συντομεύσεις", - "fixedHeading": "Συντομεύσεις εφαρμογής", - "fixed": { - "splitRight": "Διαίρεση δεξιά", - "splitDown": "Διαίρεση κάτω", - "zoomPane": "Μεγέθυνση του ενεργού πλαισίου", - "navigatePane": "Μετακίνηση μεταξύ πλαισίων", - "nextTab": "Επόμενη καρτέλα", - "previousTab": "Προηγούμενη καρτέλα", - "jumpTab": "Μετάβαση σε καρτέλα", - "previousView": "Επιστροφή στην προηγούμενη προβολή της πλαϊνής μπάρας", - "fullscreen": "Εναλλαγή πλήρους οθόνης" - }, - "customHeading": "Προσαρμοσμένες συντομεύσεις", - "addBinding": "Προσθήκη συντόμευσης", - "addBindingTitle": "Προσθήκη συντόμευσης", - "editBindingTitle": "Επεξεργασία συντόμευσης", - "loading": "Φόρτωση...", - "noCustomBindings": "Δεν υπάρχουν ακόμη προσαρμοσμένες συντομεύσεις", - "defaultBadge": "Προεπιλογή", - "customizedBadge": "Προσαρμοσμένο", - "customize": "Προσαρμογή", - "resetToDefault": "Επαναφορά στις προεπιλογές", - "resetAllToDefaults": "Επαναφορά όλων στις προεπιλογές", - "cancel": "Ακύρωση", - "saveBinding": "Αποθήκευση συντόμευσης", - "saveError": "Αποτυχία αποθήκευσης συντομεύσεων πληκτρολογίου", - "pressKeysToRecord": "Συνδυασμός πλήκτρων", - "pressKeysPlaceholder": "Κάντε κλικ και πατήστε πλήκτρα", - "recording": "Πατήστε πλήκτρα...", - "comboRequiredError": "Πατήστε πρώτα έναν συνδυασμό πλήκτρων", - "conflictWarning": "Αυτός ο συνδυασμός είναι ήδη δεσμευμένος στο {{combo}}. Η αποθήκευση θα ενεργοποιεί και τα δύο.", - "actionLabel": "Ενέργεια", "actionNextTab": "Μετάβαση στην επόμενη καρτέλα", "actionPreviousTab": "Μετάβαση στην προηγούμενη καρτέλα", "actionOpenCommandPalette": "Άνοιγμα γρήγορης αναζήτησης", - "actionReconnectSession": "Επανασύνδεση της τρέχουσας συνεδρίας", - "unavailableAction": "{{type}} (μη διαθέσιμο)", - "actionRequiredError": "Επιλέξτε πρώτα μια ενέργεια", - "deleteConfirm": "Διαγραφή αυτού του συνδυασμού πλήκτρων;", - "resetAllConfirm": "Επαναφορά όλων των συνδυασμών πλήκτρων στις προεπιλογές;" + "actionReconnectSession": "Επανασύνδεση της τρέχουσας συνεδρίας" }, "userProfile": { - "storageModeLocal": "Περιηγητής", - "storageModeCloud": "Βάση δεδομένων", - "storageModeDescription": "Ο περιηγητής αποθηκεύει τις ρυθμίσεις μόνο σε αυτόν τον περιηγητή. Η βάση δεδομένων συγχρονίζει με τον διακομιστή και φορτώνει σε οποιαδήποτε συσκευή.", - "resetToDefaults": "Επαναφορά στις προεπιλογές", - "resetToDefaultsSuccess": "Οι ρυθμίσεις επαναφέρθηκαν στις προεπιλογές.", - "storageModeSwitch": "Αποθήκευση προτιμήσεων", - "sectionAccount": "Λογαριασμός", - "desktopProfileTitle": "Μόνο αυτή η συσκευή", - "desktopProfileDescription": "Αυτό το προφίλ υπάρχει σε αυτή τη συσκευή και συνδέεται αυτόνομα. Συνδέστε το με έναν διακομιστή Termix για να χρησιμοποιείτε τους ίδιους διακομιστές και ρυθμίσεις σε κάθε συσκευή.", - "sectionInterface": "Διεπαφή", - "interfacePresetDesc": "Πόσα στοιχεία εμφανίζει το Termix. Όλα τα χαρακτηριστικά παραμένουν διαθέσιμα.", "preset_simple": "Απλό", "preset_simple_desc": "Μόνο τα απαραίτητα.", "preset_balanced": "Ισορροπημένο", "preset_balanced_desc": "Η τυπική διάταξη.", "preset_advanced": "Για προχωρημένους", "preset_advanced_desc": "Όλα ενεργά, πυκνή διάταξη.", - "presetClearOverrides": "Επαναφορά όλων", - "presetOverridesTitle": "Προσαρμοσμένα", - "presetRevertArea": "Επαναφορά", - "presetConfirmTitle": "Μετάβαση στο {{preset}};", - "presetConfirmDesc": "Αυτό επαναφέρει την πλαϊνή μπάρα, την πλοήγηση, τη διάταξη του πίνακα ελέγχου, τη γραμμή εργαλείων του τερματικού και την προβολή του διαχειριστή αρχείων. Οι διακομιστές, τα διαπιστευτήρια και η αρχική σελίδα δεν επηρεάζονται.", - "presetConfirmApply": "Εφαρμογή προεπιλογής", - "runSetupAgainDesc": "Διαδρομή ξανά από τη διαδικασία πρώτης εκκίνησης.", - "runSetupAgainButton": "Εκτέλεση ρύθμισης", "uiArea_chrome": "Στοιχεία διεπαφής εφαρμογής", "uiArea_hostList": "Λίστα διακομιστών", "uiArea_credentialList": "Λίστα διαπιστευτηρίων", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Τερματικό", "uiArea_fileManager": "Διαχειριστής αρχείων", "uiArea_hostEditor": "Επεξεργαστής διακομιστή", - "sectionAppearance": "Εμφάνιση", - "sectionSecurity": "Ασφάλεια", - "sectionApiKeys": "Κλειδιά API", - "sectionData": "Δεδομένα", - "usernameLabel": "Όνομα χρήστη", - "roleLabel": "Ρόλος", - "roleAdministrator": "Διαχειριστής", - "authMethodLabel": "Μέθοδος ελέγχου ταυτότητας", - "authMethodLocal": "Τοπικός", - "twoFaLabel": "2FA", - "twoFaOn": "Ενεργό", - "twoFaOff": "Ανενεργό", - "versionLabel": "Έκδοση", - "cliTitle": "Termix CLI", - "cliDescription": "Ανοίξτε τερματικά, εκτελέστε εντολές και μετακινήστε αρχεία από το δικό σας shell.", - "cliLearnMore": "Μάθετε περισσότερα", - "deleteAccount": "Διαγραφή Λογαριασμού", - "deleteAccountDescription": "Διαγράψτε οριστικά τον λογαριασμό σας", - "deleteButton": "Διαγραφή", - "deleteAccountPermanent": "Αυτή η ενέργεια είναι μόνιμη και δεν μπορεί να αναιρεθεί.", - "deleteAccountWarning": "Όλες οι συνεδρίες, οι hosts, τα διαπιστευτήρια και οι ρυθμίσεις θα διαγραφούν οριστικά.", - "confirmPasswordDeletePlaceholder": "Εισάγετε τον κωδικό πρόσβασής σας για επιβεβαίωση", "languageLabel": "Γλώσσα", "themeLabel": "Θέμα", "fontSizeLabel": "Μέγεθος Γραμματοσειράς", "interfaceFontLabel": "Γραμματοσειρά Διεπαφής", "interfaceFontDescription": "Αλλάζει τη γραμματοσειρά της διεπαφής της εφαρμογής. Τα προφίλ τερματικού διατηρούν τις δικές τους ρυθμίσεις γραμματοσειράς.", "accentColorLabel": "Χρώμα Έμφασης", - "keyboardShortcuts": "Συντομεύσεις Πληκτρολογίου", - "keyboardShortcutsDescription": "Προσαρμόστε τις συντομεύσεις αντιγραφής, επικόλλησης και εντολών τερματικού", - "manageShortcuts": "Διαχείριση", - "commandPalette": "Παλέτα Εντολών", - "commandPaletteDesc": "Ενεργοποίηση συντόμευσης πληκτρολογίου", - "reopenTabsOnLogin": "Επαναάνοιγμα Γραμμίδων κατά την Είσοδο", - "reopenTabsOnLoginDesc": "Ανέκτηστε τις ανοιχτές γραμμίδες σας όταν συνδεθείτε ή ανανεώσετε τη σελίδα, ακόμη και από άλλη συσκευή", - "confirmTabClose": "Επιβεβαίωση Κλεισίματος Γραμμίδας", - "confirmTabCloseDesc": "Ρωτήστε πριν κλείσετε γραμμίδες τερματικού", - "showTabNumbers": "Εμφάνιση Αριθμών Γραμμίδων", - "showTabNumbersDesc": "Εμφάνιση ενός αριθμού σε κάθε γραμμίδα για να βοηθά στην διάκρισή τους", - "settingsAppRail": "Ράγα Εφαρμογών", - "sidebarSettingsMoved": "Οι ρυθμίσεις εμφάνισης της πλαϊνής μπάρας hosts μετακινήθηκαν στον πίνακα Προσαρμογής πλαϊνής μπάρας, ο οποίος ανοίγει από τη γραμμή εργαλείων των Hosts.", - "showHostTags": "Εμφάνιση Ετικετών Host", - "showHostTagsDesc": "Εμφάνιση ετικετών στη λίστα hosts", - "statusColors": "Πραγματικά Χρώματα Κατάστασης", - "statusColorsDesc": "Χρήση πράσινου/κόκκινου για κατάσταση online/offline αντί για το χρώμα έμφασης", - "pinAppRail": "Καρφίωμα Ράγας Εφαρμογών", - "pinAppRailDesc": "Διατήρηση της αριστερής ράγας εφαρμογών πάντα αναπτυγμένη αντί να αναπτύσσεται με hover", - "expandAppRailOnHover": "Ανάπτυξη Ράγας Εφαρμογών με Hover", - "expandAppRailOnHoverDesc": "Επιτρέψτε στην αριστερή ράγα εφαρμογών να αναπτύσσεται όταν ο δείκτης περνά από πάνω της", - "appRailHoverPushesContent": "Μετακίνηση περιεχομένου κατά την επέκταση", - "appRailHoverPushesContentDesc": "Δημιουργία χώρου για την επεκταμένη γραμμή αντί να ανοίγει πάνω από τη σελίδα. Οι ανοιχτές συνεδρίες, όπως το απομακρυσμένο γραφείο, αλλάζουν μέγεθος κάθε φορά", - "showPinAppRailButton": "Εμφάνιση Κουμπιού Καρφίωματος Ράγας Εφαρμογών", - "showPinAppRailButtonDesc": "Εμφάνιση κουμπιού στη ράγα εφαρμογών για να την κρατά ανοιχτή. Ανενεργό από προεπιλογή.", - "settingsNavigation": "Πλοήγηση", - "navigationTabsDesc": "Επιλέξτε ποιες γραμμίδες εμφανίζονται στη ράγα εφαρμογών", - "settingsUpdates": "Ενημερώσεις", - "disableUpdateChecks": "Απενεργοποίηση Ελέγχων Ενημέρωσης", - "disableUpdateChecksDesc": "Διακοπή ελέγχου για ενημερώσεις", - "changePassword": "Αλλαγή Κωδικού Πρόσβασης", - "currentPasswordLabel": "Τρέχων Κωδικός Πρόσβασης", - "currentPasswordPlaceholder": "Τρέχων κωδικός πρόσβασης", - "newPasswordLabel": "Νέος Κωδικός Πρόσβασης", - "newPasswordPlaceholder": "Νέος κωδικός πρόσβασης", - "confirmPasswordLabel": "Επιβεβαίωση Νέου Κωδικού Πρόσβασης", - "confirmPasswordPlaceholder": "Επιβεβαίωση νέου κωδικού πρόσβασης", - "updatePassword": "Ενημέρωση Κωδικού Πρόσβασης", - "createApiKeyTitle": "Δημιουργία API Key", - "createApiKeyDescription": "Δημιουργήστε ένα νέο API key για προγραμματιστική πρόσβαση.", - "apiKeyNameLabel": "Όνομα", - "apiKeyNamePlaceholder": "π.χ. CI Pipeline", - "expiryDateLabel": "Ημερομηνία Λήξης", - "optional": "προαιρετικό", - "cancel": "Ακύρωση", - "createKey": "Δημιουργία Κλειδιού", - "apiKeyCreatedWarning": "Το κλειδί δημιουργήθηκε - αντιγράψτε το τώρα, δεν θα εμφανιστεί ξανά.", - "copyApiKey": "Αντιγραφή κλειδιού API", - "copiedToClipboard": "Αντιγράφηκε στο πρόχειρο", "apiKeyCount_one": "{{count}} κλειδί", - "apiKeyCount_other": "{{count}} κλειδιά", - "newKey": "Νέο Κλειδί", - "noApiKeys": "Δεν υπάρχουν ακόμη κλειδιά API.", - "apiKeyActive": "Ενεργό", - "apiKeyUsageHint": "Περιλάβετε το κλειδί σας στο", - "apiKeyUsageHintHeader": "κεφάλαιο.", - "apiKeyPermissionsHint": "Τα κλειδιά κληρονομούν τα δικαιώματα του χρήστη που τα δημιούργησε.", - "exportData": "Εξαγωγή των Δεδομένων μου", - "exportDataDesc": "Κατεβάστε ένα αντίγραφο ασφαλείας των hosts, των διαπιστευτηρίων και των ρυθμίσεών σας για μεταφορά σε άλλη συσκευή", - "export": "Εξαγωγή", - "exporting": "Εξαγωγή...", - "importData": "Εισαγωγή των Δεδομένων μου", - "importDataDesc": "Αντικαταστήστε τους hosts, τα διαπιστευτήρια και τις ρυθμίσεις σας από ένα αρχείο αντίγραφου ασφαλείας .sqlite", - "importDataSelected": "Επιλεγμένο: {{name}}", - "selectFile": "Επιλογή Αρχείου", - "changeFile": "Αλλαγή", - "import": "Εισαγωγή", - "importing": "Εισαγωγή...", - "exportSuccess": "Τα δεδομένα εξήχθησαν επιτυχώς", - "exportFailed": "Η εξαγωγή δεδομένων απέτυχε", - "importSelectFile": "Παρακαλώ επιλέξτε αρχείο πρώτα", - "importCompleted": "Η εισαγωγή ολοκληρώθηκε: {{total}} στοιχεία εισήχθησαν, {{skipped}} παραλείφθηκαν", - "importFailed": "Η εισαγωγή απέτυχε: {{error}}", - "roleUser": "Χρήστης", - "authMethodDual": "Διπλή Επαλήθευση", - "authMethodExternal": "Εξωτερική", - "done": "Τέλος", - "apiKeyNameRequired": "Το όνομα κλειδιού είναι υποχρεωτικό", - "apiKeyCreated": "Το κλειδί API \"{{name}}\" δημιουργήθηκε", - "apiKeyCreateFailed": "Αποτυχία δημιουργίας κλειδιού API", - "apiKeyUser": "Χρήστης", - "apiKeyExpires": "Λήγει", - "apiKeyRevoked": "Το κλειδί API \"{{name}}\" ανακαλέστηκε", - "apiKeyRevokeFailed": "Αποτυχία ανάκλησης κλειδιού API", - "passwordFieldsRequired": "Απαιτούνται η τρέχουσα και η νέα κωδικός πρόσβασης", - "passwordMismatch": "Οι κωδικοί πρόσβασης δεν ταιριάζουν", - "passwordTooShort": "Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον 6 χαρακτήρες", - "passwordUpdated": "Ο κωδικός πρόσβασης ενημερώθηκε επιτυχώς", - "passwordUpdateFailed": "Αποτυχία ενημέρωσης κωδικού πρόσβασης", - "deletePasswordRequired": "Απαιτείται κωδικός πρόσβασης για διαγραφή του λογαριασμού σας", - "deleteFailed": "Αποτυχία διαγραφής λογαριασμού", - "deleting": "Διαγραφή...", "colorPickerTooltip": "Άνοιγμα επιλογέα χρώματος", "themeSystem": "Σύστημα", "themeLight": "Φωτεινό", @@ -1755,18 +1122,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Συνδεδεμένος στο {{server}}", - "linkedProfileDescription": "Αυτή η συσκευή χρησιμοποιεί τον λογαριασμό σας στον διακομιστή και διατηρεί αντίγραφο των δεδομένων σας, ώστε να λειτουργεί ακόμα και εκτός σύνδεσης.", - "manageSync": "Διαχείριση συγχρονισμού", - "setUpSync": "Σύνδεση με διακομιστή", - "settingsTabsAndShortcuts": "Καρτέλες και Συντομεύσεις", - "onBetaTitle": "Χρησιμοποιείτε έκδοση beta", - "onBetaDescription": "Ευχαριστούμε που δοκιμάζετε. Πείτε μας τι σπάει.", - "tryBetaTitle": "Δοκιμάστε νέες λειτουργίες νωρίτερα", - "tryBetaDescription": "Γίνετε μέλος του προγράμματος beta στις Ενημερώσεις.", - "sendBetaFeedback": "Αποστολή ανατροφοδότησης beta", - "openUpdates": "Ενημερώσεις" + "themeGruvbox": "Gruvbox" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "Το {{name}} απαιτείται από το {{list}}. Απενεργοποιήστε ή απεγκαταστήστε πρώτα αυτά.", "missingDependencies": "Το {{name}} χρειάζεται το {{list}}, το οποίο δεν είναι εγκατεστημένο.", "consentChanged": "Αυτό που ζητάει αυτό το πρόσθετο άλλαξε από τότε που το κοιτάξατε. Ελέγξτε ξανά τη λίστα.", - "upload": "Αδυναμία ανάγνωσης του {{name}}: {{error}}", - "developerMode": "Αδυναμία αλλαγής της λειτουργίας προγραμματιστή: {{error}}" + "upload": "Αδυναμία ανάγνωσης του {{name}}: {{error}}" }, "data": { "title": "Αποθηκευμένα δεδομένα", @@ -2145,13 +1500,7 @@ "browsePlugins": "Περιήγηση προσθέτων", "loading": "Φόρτωση", "developer": { - "title": "Λειτουργία προγραμματιστή προσθέτων", - "hint": "Επιτρέπει στους διαχειριστές να εγκαταστήσουν προσθέματα από αρχείο .tmxplug στην καρτέλα Προσθέτων, χωρίς τους ελέγχους του μητρώου. Χρησιμοποιήστε το για να δημιουργήσετε και να δοκιμάσετε τα δικά σας προσθέματα.", - "enableTitle": "Ενεργοποίηση λειτουργίας προγραμματιστή;", - "enableBody": "Οι διαχειριστές θα μπορούν να εγκαταστήσουν προσθέματα από αρχεία που δεν έχει ελέγξει το Termix. Ένα πρόσθετο μπορεί να κάνει οτιδήποτε επιτρέπουν οι δυνατότητές του, οπότε ενεργοποιήστε το μόνο κατά την ανάπτυξη ή δοκιμή προσθέτων.", - "enable": "Ενεργοποίηση", - "installFromFile": "Εγκατάσταση από αρχείο", - "signedOnly": "Το TERMIX_REQUIRE_SIGNED_PLUGINS είναι ορισμένο, οπότε η εγκατάσταση από αρχείο παραμένει μπλοκαρισμένη." + "installFromFile": "Εγκατάσταση από αρχείο" }, "count": { "downloads_one": "{{formatted}} λήψη", @@ -2189,71 +1538,7 @@ "secretSet": "Ορισμένο", "secretNotSet": "Μη ορισμένο", "secretReplace": "Αντικατάσταση", - "pluginSettingsSaved": "Οι ρυθμίσεις αποθηκεύτηκαν", - "pluginSettingsInvalid": "Ορισμένες ρυθμίσεις δεν μπόρεσαν να αποθηκευτούν. Ελέγξτε τα πεδία που έχουν επισημανθεί.", - "pluginSettingsSaveFailed": "Αποτυχία αποθήκευσης ρυθμίσεων", - "pluginSettingsLoadFailed": "Αποτυχία φόρτωσης ρυθμίσεων", - "featureUnavailable": "Το {{name}} δεν είναι διαθέσιμο αυτή τη στιγμή. Αυτές οι ρυθμίσεις αποθηκεύονται αλλά δεν θα εφαρμοστούν.", - "account": "Λογαριασμός", - "security": "Ασφάλεια", - "apiKeys": "Κλειδιά API", - "data": "Δεδομένα και συγχρονισμός", - "interface": "Διεπαφή", - "appearance": "Εμφάνιση", - "keybindings": "Συντομεύσεις πλήκτρων", - "adminGeneral": "Γενικά", - "adminUsers": "Χρήστες", - "adminSessions": "Συνεδρίες", - "adminRoles": "Ρόλοι", - "adminHostDefaults": "Προεπιλογές υπολογιστή", - "adminBranding": "Εμπορική σήμανση", - "adminDatabase": "Βάση δεδομένων", - "adminSsl": "SSL", - "adminApiKeys": "Κλειδιά API", - "adminAuditLog": "Καταγραφή ελέγχου", - "bandYou": "Ο λογαριασμός σας", - "bandApp": "Αυτή η εφαρμογή", - "bandPlugins": "Πρόσθετα", - "bandInstance": "Αυτός ο διακομιστής", - "searchPlaceholder": "Αναζήτηση ρυθμίσεων", - "noResults": "Δεν βρέθηκαν αντίστοιχες ρυθμίσεις.", - "pages": "Σελίδες", - "instanceSettings": "Ρυθμίσεις διακομιστή", - "nothingHere": "Δεν υπάρχει κάτι να ρυθμιστεί εδώ.", - "searchPage": "Αναζήτηση σε αυτή τη σελίδα", - "noPageMatches": "Τίποτα σε αυτή τη σελίδα δεν ταιριάζει.", - "updates": { - "title": "Ενημερώσεις", - "betaProgram": "Πρόγραμμα Beta", - "betaIntro": "Τα betas είναι πρώιμες εκδόσεις της επόμενης έκδοσης του Termix. Κυκλοφορούν τις Τρίτες και Παρασκευές όταν υπάρχει κάτι νέο για δοκιμή. Μπορεί να περιέχουν σφάλματα και η ανατροφοδότησή σας είναι αυτό που βελτιώνει την σταθερή έκδοση.", - "termixBetas": "Betas του Termix", - "termixBetasHint": "Ειδοποίησέ με για νέα betas, όχι μόνο για σταθερές εκδόσεις.", - "runningBetaBuild": "Τρέχετε μια beta έκδοση. Για να αποχωρήσετε, μεταβείτε ξανά σε μια σταθερή εικόνα ή εγκαταστάτη.", - "howToInstall": "Πώς να λάβετε το beta", - "desktopInstall": "Λάβετε τον beta εγκαταστάτη και εγκαταστήστε τον πάνω από αυτόν.", - "downloadBeta": "Λήψη {{version}}", - "dockerInstall": "Αλλάξτε την εικόνα σας στη beta ετικέτα και επανεκκινήστε το container:", - "copy": "Αντιγραφή", - "copied": "Αντιγράφηκε", - "copyFailed": "Αδυναμία αντιγραφής", - "learnMore": "Μάθετε περισσότερα για τα betas", - "feedback": "Ανατροφοδότηση", - "feedbackHint": "Βρήκατε σφάλμα ή έχετε μια ιδέα; Πηγαίνει απευθείας στους προγραμματιστές με τη έκδοσή σας συμπληρωμένη.", - "sendFeedback": "Αποστολή ανατροφοδότησης beta", - "releases": "Εκδόσεις", - "thisVersion": "Αυτή η έκδοση", - "newestStable": "Νεότερη σταθερή", - "newestBeta": "Νεότερο beta", - "noRelease": "Κανένα αυτή τη στιγμή", - "pluginBetas": "Betas προσθέτων", - "pluginBetasIntro": "Κάθε πρόσθετο μπορεί να χρησιμοποιεί betas από μόνο του. Για να δοκιμάσετε ένα, ανοίξτε το και πατήστε Δοκιμή beta.", - "openPlugins": "Άνοιγμα Προσθέτων", - "waitingForStable": "Επιστροφή στη σταθερή. Παραμένει στην {{version}} μέχρι να υπάρξει νεότερη σταθερή έκδοση.", - "backToStable": "Επιστροφή στη σταθερή", - "allPluginsBeta": "Χρήση betas για όλα τα πρόσθετα", - "allPluginsStable": "Όλα τα πρόσθετα επιστρέφουν στη σταθερή", - "saveFailed": "Αδυναμία αποθήκευσης της αλλαγής" - } + "featureUnavailable": "Το {{name}} δεν είναι διαθέσιμο αυτή τη στιγμή. Αυτές οι ρυθμίσεις αποθηκεύονται αλλά δεν θα εφαρμοστούν." }, "managerCard": { "refresh": "Ανανέωση", @@ -2263,83 +1548,13 @@ "filter": "Φίλτρο..." }, "sync": { - "server": "Διακομιστής Termix", - "account": "Λογαριασμός", - "status": "Κατάσταση", - "never": "ποτέ", - "justNow": "μόλις τώρα", "minutesAgo_one": "{{count}} λεπτό πριν", "minutesAgo_other": "{{count}} λεπτά πριν", "hoursAgo_one": "{{count}} ώρα πριν", "hoursAgo_other": "{{count}} ώρες πριν", - "actionFailed": "Αυτό δεν έπιασε. Δοκιμάστε ξανά.", - "unlinkedTitle": "Μόνο αυτή η συσκευή", - "unlinkedBody": "Το Termix λειτουργεί από μόνο του σε αυτή τη συσκευή. Συνδέστε το με τον διακομιστή Termix για να κρατάτε τα πάντα συγχρονισμένα.", - "unlinkedPointHosts": "Οι hosts, τα διαπιστευτήρια, τα snippets και οι ρυθμίσεις σας σας ακολουθούν σε κάθε συσκευή.", - "unlinkedPointOffline": "Τα πάντα λειτουργούν ακόμα και όταν ο διακομιστής δεν είναι προσβάσιμος, και συγχρονίζονται αργότερα.", - "unlinkedPointAccount": "Συνδεόμαστε με τον λογαριασμό του διακομιστή σας, και οι hosts που μοιράστηκαν μαζί σας εμφανίζονται επίσης εδώ.", - "linkButton": "Σύνδεση με διακομιστή", - "state": { - "syncing": "Συγχρονισμός", - "offline": "Ο διακομιστής δεν είναι προσβάσιμος", - "error": "Ο συγχρονισμός σταμάτησε", - "signedOut": "Αποσυνδεδεμένος", - "synced": "Συγχρονίστηκε {{time}}" - }, "pending_one": "{{count}} αλλαγή σε αναμονή για συγχρονισμό", "pending_other": "{{count}} αλλαγές σε αναμονή για συγχρονισμό", - "signInAgain": "Σύνδεση ξανά", - "syncNow": "Συγχρονισμός τώρα", - "unlink": "Αποσύνδεση", - "unlinked": "Αυτή η συσκευή δεν είναι πλέον συνδεδεμένη", - "unlinkTitle": "Αποσύνδεση αυτής της συσκευής;", - "unlinkDescription": "Διακόπτει τη συγχρονισμό και αποσυνδέεται από τον διακομιστή. Οι διακομιστές που μοιράστηκαν μαζί σας από άλλους αφαιρούνται από αυτή τη συσκευή σε κάθε περίπτωση.", - "unlinkKeepTitle": "Διατήρηση των δεδομένων μου εδώ", - "unlinkKeepBody": "Οι διακομιστές, τα διαπιστευτήρια και οι ρυθμίσεις σας παραμένουν σε αυτή τη συσκευή και συνεχίζουν να λειτουργούν ανεξάρτητα.", - "unlinkRemoveTitle": "Αφαίρεση συγχρονισμένων δεδομένων", - "unlinkRemoveBody": "Ό,τι προήλθε από τον διακομιστή αφαιρείται από αυτή τη συσκευή. Μένουν μόνο οι διακομιστές που διατηρήθηκαν σε αυτή τη συσκευή.", - "conflictsTitle": "Συγκρούσεις", - "conflictsDescription": "Αυτά άλλαξαν εδώ και στον διακομιστή ταυτόχρονα. Η έκδοση του διακομιστή χρησιμοποιείται. Διατηρήστε τη δική σας για να την στείλετε στον διακομιστή αντί για αυτή.", - "keepMine": "Διατήρηση της δικής μου", - "keepServer": "Διατήρηση του διακομιστή", - "errorsTitle": "Δεν συγχρονίστηκαν", - "errorsDescription": "Ο διακομιστής δεν δέχτηκε αυτές τις αλλαγές. Παραμένουν σε αυτή τη συσκευή.", - "errorPermission": "Ο λογαριασμός σας στον διακομιστή δεν επιτρέπεται να κάνει αυτή την αλλαγή.", - "retry": "Δοκιμή ξανά", - "whatSyncs": "Τι συγχρονίζεται", - "whatSyncsDescription": "Απενεργοποιήστε ό,τι θέλετε να διατηρήσετε μόνο σε αυτή τη συσκευή.", - "coreGroup": "Termix", - "notOnServer": "Ο διακομιστής δεν το έχει αυτό", - "notOnDevice": "Δεν υπάρχει ακόμη σε αυτή τη συσκευή", - "localOnlyHint": "Μπορείτε επίσης να διατηρήσετε μεμονωμένους διακομιστές ή φακέλους σε αυτή τη συσκευή από τις ρυθμίσεις τους.", - "originTitle": "Πού ξεκινούν οι συνδέσεις", - "originDescription": "Συνδεθείτε στους διακομιστές από αυτή τη συσκευή ή μέσω του διακομιστή. Μπορείτε να το αλλάξετε ανά διακομιστή.", - "originLocal": "Αυτή η συσκευή", - "originRemote": "Ο διακομιστής", - "entities": { - "hosts": "Διακομιστές", - "sshCredentials": "Διαπιστευτήρια", - "sshFolders": "Φάκελοι", - "userPreferences": "Προτιμήσεις", - "pluginUserSettings": "Ρυθμίσεις πρόσθετων", - "sharedHosts": "Διακομιστές που μοιράστηκαν μαζί σας", - "sharedCredentials": "Διαπιστευτήρια που μοιράστηκαν μαζί σας", - "vaultProfiles": "Προφίλ Vault", - "snippetFolders": "Φάκελοι αποσπασμάτων", - "snippets": "Αποσπάσματα", - "dashboardServiceLinks": "Σύνδεσμοι υπηρεσιών", - "homepageItems": "Στοιχεία αρχικής σελίδας", - "networkTopology": "Χάρτης δικτύου", - "workspaces": "Χώροι εργασίας", - "hostDefaults": "Προεπιλογές διακομιστών", - "hostDefaultsAdmin": "Προεπιλογές διακομιστών διακομιστή", - "aiProviders": "Πάροχοι AI", - "homepageLayouts": "Διατάξεις αρχικής σελίδας", - "accountProfile": "Προφίλ λογαριασμού" - }, "proxy": { - "title": "Αντίστροφος διαμεσολαβητής", - "description": "Απαιτείται μόνο όταν κάτι όπως το Cloudflare Access ή μια σελίδα εισόδου βρίσκεται μπροστά από τον διακομιστή σας.", "headersTitle": "Επιπλέον κεφαλίδες", "headersHint": "Αποστέλλονται με κάθε αίτημα στον διακομιστή, για παράδειγμα ένα token υπηρεσίας Cloudflare Access.", "headerName": "Όνομα κεφαλίδας", @@ -2352,8 +1567,7 @@ "username": "Όνομα χρήστη", "password": "Κωδικός πρόσβασης", "allowInvalidCertificate": "Εμπιστοσύνη σε αυτουπογεγραμμένο πιστοποιητικό", - "allowInvalidCertificateHint": "Μόνο για τον δικό σας διακομιστή, όταν το πιστοποιητικό του δεν προέρχεται από γνωστή αρχή.", - "saved": "Αποθηκεύτηκε" + "allowInvalidCertificateHint": "Μόνο για τον δικό σας διακομιστή, όταν το πιστοποιητικό του δεν προέρχεται από γνωστή αρχή." }, "problems": { "invalidUrl": "Αυτό δεν μοιάζει με διεύθυνση ιστού.", @@ -2391,6 +1605,27 @@ "linking": "Σύνδεση και εκτέλεση του πρώτου sync...", "linked": "Συνδεδεμένο. Τα δεδομένα σας συγχρονίζονται τώρα.", "signedInAgain": "Συνδεθήκατε. Ο sync εκτελείται ξανά." + }, + "entities": { + "hosts": "Διακομιστές", + "sshCredentials": "Διαπιστευτήρια", + "sshFolders": "Φάκελοι", + "userPreferences": "Προτιμήσεις", + "pluginUserSettings": "Ρυθμίσεις πρόσθετων", + "sharedHosts": "Διακομιστές που μοιράστηκαν μαζί σας", + "sharedCredentials": "Διαπιστευτήρια που μοιράστηκαν μαζί σας", + "vaultProfiles": "Προφίλ Vault", + "snippetFolders": "Φάκελοι αποσπασμάτων", + "snippets": "Αποσπάσματα", + "dashboardServiceLinks": "Σύνδεσμοι υπηρεσιών", + "homepageItems": "Στοιχεία αρχικής σελίδας", + "networkTopology": "Χάρτης δικτύου", + "workspaces": "Χώροι εργασίας", + "hostDefaults": "Προεπιλογές διακομιστών", + "hostDefaultsAdmin": "Προεπιλογές διακομιστών διακομιστή", + "aiProviders": "Πάροχοι AI", + "homepageLayouts": "Διατάξεις αρχικής σελίδας", + "accountProfile": "Προφίλ λογαριασμού" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "Αυτός ο host ορίζει τη δική του τιμή. Κάντε κλικ για να χρησιμοποιήσετε ξανά την προεπιλογή από {{source}}", "clearTitle": "Ορισμένο σε αυτό το επίπεδο. Κάντε κλικ για να το καθαρίσετε και να χρησιμοποιήσετε το {{source}} αντίθετα", "inheritedTitle": "Ακολουθεί την προεπιλογή από {{source}}", - "titleAdmin": "Προεπιλογές hosts διακομιστή", - "titleUser": "Οι προεπιλογές hosts μου", - "titleFolder": "Προεπιλογές φακέλου: {{name}}", - "descriptionAdmin": "Προεπιλογές για κάθε host σε αυτόν τον διακομιστή. Οι δικές του προεπιλογές ενός χρήστη, οι προεπιλογές ενός φακέλου ή ο ίδιος ο host μπορούν ακόμα να ορίσουν διαφορετική τιμή. Αλλάξτε ένα πεδίο για να το ορίσετε εδώ, ή καθαρίστε το για να το αφήσετε μη ορισμένο.", - "descriptionUser": "Προεπιλογές για όλους τους hosts σας, πάνω από αυτές του διακομιστή. Ένας φάκελος ή ο ίδιος ο host μπορούν ακόμα να ορίσουν διαφορετική τιμή. Αλλάξτε ένα πεδίο για να το ορίσετε εδώ, ή καθαρίστε το για να το αφήσετε μη ορισμένο.", - "descriptionFolder": "Προεπιλογές για τους hosts σε αυτόν τον φάκελο και τους υποφακέλους του, πάνω από τις δικές σας. Ένας host μπορεί ακόμα να ορίσει διαφορετική τιμή. Αλλάξτε ένα πεδίο για να το ορίσετε εδώ, ή καθαρίστε το για να το αφήσετε μη ορισμένο.", - "save": "Αποθήκευση προεπιλογών", "saved_one": "Οι προεπιλογίες αποθηκεύτηκαν. {{count}} host ενημερώθηκε.", "saved_other": "Οι προεπιλογίες αποθηκεύτηκαν. {{count}} hosts ενημερώθηκαν.", - "savedInBackground": "Οι προεπιλογίες αποθηκεύτηκαν. Οι hosts ενημερώνονται στο παρασκήνιο.", "appliedToHosts_one": "{{count}} host ενημερώθηκε με τις νέες προεπιλογίες.", "appliedToHosts_other": "{{count}} hosts ενημερώθηκαν με τις νέες προεπιλογίες.", - "saveFailed": "Αδυναμία αποθήκευσης των προεπιλογιών", - "loadFailed": "Αδυναμία φόρτωσης των προεπιλογιών", - "confirmTitle": "Αποθήκευση προεπιλογών;", "confirmChanges_one": "{{count}} host ακολουθεί αυτές τις προεπιλογίες και θα αλλάξει.", "confirmChanges_other": "{{count}} hosts ακολουθούν αυτές τις προεπιλογίες και θα αλλάξουν.", - "confirmNoChanges": "Κανένας υπάρχων host δεν αλλάζει. Οι νέοι hosts θα ξεκινήσουν με αυτές τις προεπιλογίες.", - "menuMyDefaults": "Οι προεπιλογές hosts μου", - "folderDefaultsAction": "Προεπιλογές φακέλου", - "adminSectionDescription": "Ορίστε τις προεπιλογίες που ακολουθεί κάθε host σε αυτόν τον διακομιστή, για κάθε ρύθμιση που έχει ένας host, συμπεριλαμβανομένων των plugins. Οι χρήστες και οι φάκελοι μπορούν να ορίσουν τις δικές τους από πάνω, και οποιοσδήποτε host μπορεί ακόμα να χρησιμοποιήσει τη δική του τιμή.", - "editServerDefaults": "Επεξεργασία προεπιλογών διακομιστή", - "resetMenu": "Επαναφορά", - "resetAll": "Όλα στις προεπιλογές", - "resetCore": "Σύνδεση και SSH στις προεπιλογές", "resetDone_one": "Ο {{count}} υπολογιστής ακολουθεί πλέον τις προεπιλογές του.", "resetDone_other": "Οι {{count}} υπολογιστές ακολουθούν πλέον τις προεπιλογές τους." }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "Αποθηκεύτηκε. Πληκτρολογήστε για να το αντικαταστήσετε." }, - "sharing": { - "revokeConfirm": "Αφαίρεση πρόσβασης για τον {{name}};", - "revoke": "Αφαίρεση πρόσβασης" - }, "manage": { - "searchSettings": "Αναζήτηση ρυθμίσεων", - "noMatchingSettings": "Καμία ρύθμιση δεν ταιριάζει.", - "sections": "Ενότητες", - "sectionNeedsAttention": "Κάτι εδώ χρειάζεται προσοχή", "needsAttention_one": "Ένα πράγμα χρειάζεται προσοχή.", "needsAttention_other": "{{count}} πράγματα χρειάζονται προσοχή.", - "bandHost": "Υπολογιστής", - "bandFeatures": "Πρωτόκολλα και πρόσθετα", - "bandCredential": "Στοιχείο ταυτότητας", - "sshConnection": "Σύνδεση SSH", - "errorAddressRequired": "Απαιτείται μια διεύθυνση.", - "errorPortRange": "Χρησιμοποιήστε μια θύρα μεταξύ 1 και 65535.", - "defaults": "Προεπιλογές", - "searchHosts": "Αναζήτηση υπολογιστών", - "searchCredentials": "Αναζήτηση στοιχείων ταυτότητας", - "searchDefaults": "Αναζήτηση προεπιλογών", - "addCredential": "Προσθήκη στοιχείου ταυτότητας", - "nothingMatches": "Τίποτα δεν ταιριάζει", - "nothingYet": "Δεν υπάρχει τίποτα εδώ ακόμα", - "emptyHostsHint": "Προσθέστε έναν υπολογιστή και θα εμφανιστεί εδώ, σε όποιο φάκελο του δώσετε.", - "emptyCredentialsHint": "Τα στοιχεία ταυτότητας που αποθηκεύετε μπορούν να επαναχρησιμοποιηθούν από οποιονδήποτε υπολογιστή.", - "collapse": "Σύμπτυξη", - "expand": "Ανάπτυξη", - "cannotBeUndone": "Αυτό δεν μπορεί να αναιρεθεί.", - "hostNotFound": "Δεν βρέθηκε αυτός ο υπολογιστής. Δοκιμάστε να ανανεώσετε τη λίστα.", "hostCount_one": "{{count}} υπολογιστής", "hostCount_other": "{{count}} υπολογιστές", "credentialCount_one": "{{count}} στοιχείο ταυτότητας", - "credentialCount_other": "{{count}} στοιχεία ταυτότητας", - "newHost": "Νέος υπολογιστής", - "newCredential": "Νέο στοιχείο ταυτότητας", - "advanced": "Για προχωρημένους", - "pickHost": "Επιλέξτε έναν υπολογιστή για επεξεργασία", - "pickCredential": "Επιλέξτε ένα στοιχείο ταυτότητας για επεξεργασία", - "pickDefaults": "Επιλέξτε ένα επίπεδο προεπιλογών για επεξεργασία", - "pickHint": "Όλα όσον αφορά μια σύνδεση βρίσκονται εδώ, ομαδοποιημένα ώστε να τα βρίσκετε εύκολα." + "credentialCount_other": "{{count}} στοιχεία ταυτότητας" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/es_ES.json b/src/ui/locales/translated/es_ES.json index f7795bfcb..11f6467b0 100644 --- a/src/ui/locales/translated/es_ES.json +++ b/src/ui/locales/translated/es_ES.json @@ -141,7 +141,6 @@ "continue": "Continuar", "error": "Error", "unsavedChanges": "Cambios sin guardar", - "more": "Más", "loading": "Cargando...", "host": "Host", "selectHost": "Selecciona un host...", @@ -154,7 +153,6 @@ "cancel": "Cancelar", "username": "Nombre de usuario", "login": "Iniciar sesión", - "logout": "Cerrar sesión", "register": "Registrarse", "password": "Contraseña", "confirmPassword": "Confirmar contraseña", @@ -165,8 +163,6 @@ "rename": "Renombrar", "edit": "Editar", "confirm": "Confirmar", - "next": "Siguiente", - "previous": "Anterior", "refresh": "Actualizar", "language": "Idioma", "backendReconnected": "Conexión con el servidor restaurada", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Lee sobre cada uno" }, "desktopUpdates": { - "title": "Aplicación de escritorio", - "mode": "Actualizaciones", - "modeHint": "Cómo obtiene esta aplicación nuevas versiones.", - "manualModeHint": "Esta copia no puede actualizarse automáticamente, por lo que Termix solo te avisará cuando haya una nueva versión disponible.", "modeAutomatic": "Automática", "modePrompt": "Preguntar primero", "modeNever": "Nunca", @@ -247,15 +239,6 @@ "onboardingTitle": "Actualizaciones de la aplicación", "onboardingBody": "La aplicación de escritorio ahora puede actualizarse automáticamente. Elige cómo quieres recibir las nuevas versiones. Puedes cambiar esto más tarde en Configuración, Actualizaciones.", "onboardingManual": "Esta copia de la aplicación se instaló de una forma que no permite la actualización automática, por lo que Termix te avisará cuando haya una nueva versión con un enlace para descargarla.", - "status": "Versión {{version}}", - "statusIdle": "Aún no se ha comprobado", - "statusChecking": "Buscando actualizaciones", - "statusAvailable": "La versión {{version}} está disponible", - "statusDownloading": "Descargando {{version}} ({{progress}}%)", - "statusReady": "La versión {{version}} está lista. Reinicia para instalarla.", - "statusUpToDate": "Tienes la última versión", - "statusError": "No se ha podido buscar actualizaciones. Inténtalo de nuevo más tarde.", - "checkNow": "Comprobar ahora", "download": "Descargar", "restart": "Reiniciar ahora", "later": "Más tarde", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Cerrar", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Copiar contraseña", - "copySudoPassword": "Copiar contraseña de sudo", - "passwordCopied": "Contraseña copiada al portapapeles", - "failedToCopyPassword": "Error al copiar la contraseña", - "refreshTab": "Actualizar conexión", - "renameTab": "Renombrar pestaña", "dashboard": "Panel", "quickConnect": "Conexión rápida", - "openAsTabHint": "Ctrl+clic o clic central para abrir como pestaña", - "openAsTab": "Abrir como pestaña", - "openInRightDock": "Abrir en el panel derecho", - "closeRightDock": "Cerrar el panel derecho", - "toggleRightDock": "Alternar panel derecho", "hosts": "Hosts", "credentials": "Credenciales", "connections": "Conexiones", - "keepSideMenuOpen": "Mantener menú abierto", - "collapseSideMenu": "Contraer menú", - "roleAdministrator": "Administrador", - "roleUser": "Usuario", "sync": "Sincronizar", "reconnectDisconnectedTerminals": "Reconectar todos los terminales desconectados", "reconnectingTerminals_one": "Reconectando {{count}} terminal", @@ -300,31 +268,12 @@ "reconnectTerminalsFailed_other": "No se ha podido iniciar la reconexión de {{count}} terminales", "fullscreenUnsupported": "Este navegador no admite la pantalla completa", "fullscreenFailed": "No se ha podido cambiar a pantalla completa", - "resetSidebarWidth": "Restablecer ancho", - "collapseSidebar": "Contraer barra lateral", - "openSidebar": "Abrir barra lateral", "confirmCloseHost": "¿Cerrar {{host}}?", - "enterFullscreen": "Entrar en pantalla completa (Ctrl+Shift+F)", - "exitFullscreen": "Salir de pantalla completa (Ctrl+Shift+F)", - "group": { - "objects": "Tus objetos", - "tools": "Herramientas", - "system": "Sistema" - }, - "searchEverything": "Buscar hosts, pestañas y acciones", - "search": "Buscar", "hiddenCount_one": "{{count}} oculto", "hiddenCount_many": "{{count}} ocultos", "hiddenCount_other": "{{count}} ocultos", - "showInRail": "Mostrar en la barra lateral", - "moveUp": "Mover arriba", - "moveDown": "Mover abajo", - "resetRailOrder": "Restablecer orden", - "hideFromRail": "Ocultar de la barra lateral", - "openSettings": "Abrir configuración", "settings": "Configuración", "manage": "Gestionar", - "mobileNavigation": "Navegación", "plugins": "Complementos" }, "hosts": { @@ -930,35 +879,14 @@ "importSummary": "Importación completada: {{imported}} importados, {{updated}} actualizados, {{failed}} fallidos", "importHostsFailed": "No se han podido importar los hosts" }, - "commandPalette": { - "searchPlaceholder": "Buscar hosts, comandos o ajustes...", - "quickActions": "Acciones rápidas", - "navigation": "Navegación", - "orShortcut": "o", - "addNewHost": "Añadir nuevo host", - "adminSettings": "Configuración de administrador", - "addCredential": "Añadir credencial", - "recentActivity": "Actividad reciente", - "serversAndHosts": "Servidores y hosts", - "noHostsFound": "No se han encontrado hosts que coincidan con «{{search}}»", - "links": "Enlaces", - "navigate": "Navegar", - "select": "Seleccionar", - "pluginActions": "Más acciones", - "noTargetTab": "No hay ninguna pestaña de terminal abierta", - "documentation": "Documentación" - }, "splitScreen": { "title": "Pantalla dividida", "defaultLabel": "División {{number}}", "splitRight": "Dividir a la derecha", "splitDown": "Dividir hacia abajo", - "addToSplit": "Añadir a {{split}}", "paneEmptyItem": "Panel {{index}}: vacío", "paneItem": "Panel {{index}}: {{label}}", "paneNumber": "Panel {{index}}", - "newPaneRight": "Nuevo panel a la derecha", - "newPaneBelow": "Nuevo panel debajo", "emptyTitle": "Panel vacío", "emptyHint": "Elige algo que mostrar aquí. Mientras este panel esté seleccionado, todo lo que abras desde la barra lateral también se abrirá aquí.", "openTabs": "Pestañas abiertas", @@ -975,7 +903,6 @@ "clearPane": "Vaciar este panel", "zoom": "Ampliar panel", "unzoom": "Restaurar diseño", - "unsplit": "Quitar división", "layouts": "Diseños", "applyLayout": "Cambiar diseño", "maxPanes_one": "Una división puede contener hasta {{count}} panel", @@ -985,8 +912,6 @@ "dropHere": "Soltar para mostrar aquí", "paneActions": "Acciones del panel", "dividerHint": "Arrastra para cambiar el tamaño. Haz doble clic para igualar.", - "openInSplit": "Abrir en división", - "openInNewSplit": "Nueva división con la pestaña actual", "shortcuts": "Atajos", "shortcutNavigate": "Moverse entre paneles", "presets": { @@ -1000,23 +925,6 @@ "grid6": "Cuadrícula de seis" } }, - "connections": { - "noConnections": "Sin conexiones", - "noConnectionsDesc": "Abre una terminal, un gestor de archivos o un escritorio remoto para ver las conexiones aquí", - "connectedFor": "Conectado durante {{duration}}", - "connected": "Conectado", - "disconnected": "Desconectado", - "reconnect": "Reconectar", - "sectionOpen": "Abierto", - "sectionBackground": "En segundo plano", - "backgroundDesc": "Las sesiones se mantienen durante {{minutes}} minutos después de la desconexión y se pueden reconectar.", - "expiresIn": "Expira en {{duration}}", - "search": "Buscar conexiones...", - "noSearchResults": "No hay conexiones que coincidan con tu búsqueda", - "rename": "Renombrar sesión", - "forgetConfirm": "¿Terminar la sesión en segundo plano de {{name}}?", - "forget": "Terminar sesión" - }, "sshAuth": { "totpRequired": "Se requiere autenticación de dos factores", "totpCodeLabel": "Código de verificación", @@ -1154,65 +1062,14 @@ "placeholders": { "keyPassword": "contraseña de la clave", "pastePrivateKey": "Pegue su clave privada aquí...", - "enterPassword": "Introduzca su contraseña", - "apiKeyName": "p. ej., Pipeline de CI", - "credentialName": "p. ej., Clave SSH de producción", - "optionalDetails": "Detalles opcionales...", - "sshUsername": "p. ej., root o deploy", - "hostAddress": "10.0.0.1 o example.com", - "hostName": "p. ej., Servidor web de producción" + "enterPassword": "Introduzca su contraseña" }, "dashboard": { - "title": "Panel de control", - "github": "GitHub", - "reportBug": "Informar de un error", - "discord": "Discord", - "docs": "Documentación", - "donate": "Donar", - "serverOverview": "Resumen del servidor", - "version": "Versión", "updateAvailable": "Actualización disponible", - "beta": "Beta", - "uptime": "Tiempo de actividad", - "database": "Base de datos", - "healthy": "Correcto", - "error": "Error", - "totalHosts": "Total de hosts", - "totalCredentials": "Total de credenciales", - "recentActivity": "Actividad reciente", - "reset": "Restablecer", - "noRecentActivity": "No hay actividad reciente", - "quickActions": "Acciones rápidas", - "addHost": "Añadir host", - "addCredential": "Añadir credencial", - "adminSettings": "Configuración de administrador", - "userProfile": "Perfil de usuario", - "serverStats": "Estadísticas del servidor", - "customizeLayout": "Personalizar panel de control", - "justNow": "ahora mismo" + "beta": "Beta" }, "dashboardTab": { "stable": "ESTABLE", - "registerNewServer": "Registrar un nuevo servidor", - "storeSshKeysOrPasswords": "Almacenar claves SSH o contraseñas", - "manageUsersAndRoles": "Gestionar usuarios y roles", - "manageYourAccount": "Gestionar tu cuenta", - "hostStatus": "Estado del host", - "noHostsConfigured": "No hay hosts configurados", - "checking": "VERIFICANDO", - "commandPalette": "Paleta de comandos", - "done": "Hecho", - "clear": "Limpiar", - "dragToResizeColumns": "Arrastra para cambiar el tamaño de las columnas", - "hostsAvailable": "Hosts disponibles", - "removeSection": "Eliminar sección", - "addSection": "Añadir una sección", - "allSectionsShown": "Todo ya está en el panel de control.", - "fromPlugins": "De complementos", - "dropHere": "Suelta una sección aquí", - "dragToReorder": "Arrastra las secciones para reordenarlas", - "clearActivityConfirm": "¿Quieres borrar tu actividad reciente?", - "resetConfirm": "¿Quieres restablecer el panel de control a su diseño predeterminado?", "onlineCount_one": "{{count}} en línea", "onlineCount_many": "{{count}} en línea", "onlineCount_other": "{{count}} en línea", @@ -1221,425 +1078,48 @@ "hostCount_other": "{{count}} hosts" }, "admin": { - "sectionGeneral": "General", - "sectionUsers": "Usuarios", - "sectionSessions": "Sesiones", - "sectionRoles": "Roles", - "sectionDatabase": "Base de datos", - "sectionApiKeys": "Claves API", - "sectionAuditLog": "Registro de auditoría", - "sectionSsl": "Certificado HTTPS", - "sectionBranding": "Marca blanca", - "brandingAppName": "Nombre de la aplicación", - "brandingAppNameDesc": "Se muestra en la pantalla de inicio de sesión y en la pestaña del navegador. Déjalo vacío para usar «Termix».", - "brandingTagline": "Eslogan", - "brandingTaglineDesc": "Se muestra debajo del nombre de la aplicación en la pantalla de inicio de sesión. Déjalo vacío para usar el eslogan predeterminado.", - "brandingLogo": "Logotipo", - "brandingLogoDesc": "PNG, JPEG o WEBP, hasta 750 KB. Sustituye al icono predeterminado en la pantalla de inicio de sesión y en la pestaña del navegador.", - "brandingLogoUpload": "Subir logotipo", - "brandingLogoReset": "Restablecer al valor predeterminado", - "brandingLogoInvalid": "Imagen no válida. Usa un archivo PNG, JPEG o WEBP de hasta 750 KB.", - "brandingSaved": "Configuración de marca guardada", - "brandingSaveFailed": "Error al guardar la configuración de marca", - "sslDescription": "El certificado que Termix sirve a través de HTTPS. Sube el tuyo propio aquí o obtén y renueva uno de Let's Encrypt en la sección de certificados ACME.", - "sslDocsLink": "Ver documentación de SSL", - "sslCertStatus": "Estado del certificado", - "sslCertStatusNone": "Sin certificado", - "sslCertStatusValid": "Válido", - "sslCertStatusExpiring": "Caduca pronto", - "sslCertStatusExpired": "Caducado", - "sslCertExpiresAt": "Caduca el {{date}}", - "sslInfoNote": "Tras emitir o subir un certificado, Termix activará automáticamente HTTPS en SSL_PORT (predeterminado 8443) además del puerto HTTP existente. Asegúrate de que ese puerto esté publicado/mapeado en este contenedor para que sea accesible.", - "sslManualCert": "Certificado (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Clave privada (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Pega tu certificado y clave privada existentes, incluida la cadena completa si lo requiere tu CA.", - "sslManualUpload": "Subir e instalar certificado", - "sslManualUploadLoading": "Subiendo certificado...", - "sslManualUploadSuccess": "Certificado subido e instalado correctamente", - "sslManualUploadFailed": "Error al subir el certificado", - "sslManualRequiresFields": "Se requieren el certificado y la clave privada", - "auditLogTotal": "{{total}} entradas en total", - "auditLogEmpty": "No se han encontrado entradas en el registro de auditoría", - "auditLogSuccess": "Éxito", - "auditLogFailed": "Error", - "auditLogClearFilters": "Limpiar filtros", - "auditLogPage": "Página {{page}} de {{totalPages}} ({{total}} en total)", - "auditLogIp": "IP", - "auditLogResourceId": "ID del recurso", - "auditLogFilterUser": "Usuario", - "auditLogFilterAction": "Acción", - "auditLogFilterResourceType": "Tipo de recurso", - "auditLogFilterStatus": "Estado", - "auditLogFilterFrom": "Desde", - "auditLogFilterTo": "Hasta", - "auditLogFilterAll": "Todos", - "allowRegistration": "Permitir registro de usuarios", - "allowRegistrationDesc": "Permitir que los nuevos usuarios se registren ellos mismos con un nombre de usuario y una contraseña", - "allowPasswordLogin": "Permitir inicio de sesión con contraseña", - "allowPasswordLoginDesc": "Inicio de sesión con nombre de usuario y contraseña", - "externalAutoProvision": "Crear cuentas externas automáticamente", - "externalAutoProvisionDesc": "Crear una cuenta la primera vez que alguien inicie sesión a través de un método externo como SSO o LDAP. Si está desactivado, solo las personas que ya tengan una cuenta podrán iniciar sesión de esta manera", - "secondFactorAfterExternalLogin": "Solicitar un segundo factor después de inicios de sesión externos (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Si está desactivado, solo se solicitará un segundo factor registrado después de inicios de sesión con contraseña y otros métodos locales, como antes. Si está activado, se solicitará después de cada método de inicio de sesión, incluidos SSO y LDAP.", - "allowPasswordReset": "Permitir restablecimiento de contraseña", - "allowPasswordResetDesc": "Código de restablecimiento a través de los registros de Docker", - "auditForwardingTitle": "Reenviar a SIEM", - "auditForwardingDesc": "Enviar una copia de cada entrada de auditoría a un recopilador externo en formato NDJSON. Los registros locales seguirán siendo la fuente de verdad.", - "auditForwardingEnvNotice": "Una variable de entorno también configura el reenvío; la URL guardada aquí tiene prioridad.", - "auditForwardingToken": "Token Bearer (opcional)", - "auditForwardingTokenStored": "Token Bearer (guardado)", - "auditForwardingSaved": "Configuración de reenvío de auditoría guardada", - "auditForwardingSaveError": "Error al guardar la configuración de reenvío de auditoría", - "sessionTimeout": "Tiempo de espera de sesión", - "hours": "horas", - "sessionTimeoutRange": "Mín. 1 h, máx. 720 h", - "monitoringDefaults": "Valores predeterminados de supervisión", - "statusCheck": "Comprobación de estado", - "sec": "seg", - "logLevel": "Nivel de registro", "usersCount_one": "{{count}} usuario", "usersCount_many": "{{count}} usuarios", - "usersCount_other": "{{count}} usuario", - "searchUsers": "Buscar usuarios...", - "noUsers": "No hay usuarios", - "noUsersMatch": "Ningún usuario coincide con tu búsqueda", - "pageOf": "Página {{page}} de {{total}}", - "createUser": "Crear", - "newRole": "Nuevo rol", - "roleName": "Nombre", - "roleDisplayName": "Nombre para mostrar", - "roleDescription": "Descripción", "rolesCount_one": "{{count}} rol", "rolesCount_many": "{{count}} roles", - "rolesCount_other": "{{count}} rol", - "createRole": "Crear", - "creating": "Creando...", - "exportDatabase": "Exportar base de datos", - "exportDatabaseDesc": "Descargar una copia de seguridad portátil en SQLite de todos los hosts, credenciales y configuraciones", - "export": "Exportar", - "exporting": "Exportando...", - "importDatabase": "Importar base de datos", - "importDatabaseDesc": "Restaurar desde una copia de seguridad portátil .sqlite en cualquier backend de base de datos", - "importDatabaseSelected": "Seleccionado: {{name}}", - "selectFile": "Seleccionar archivo", - "changeFile": "Cambiar", - "import": "Importar", - "importing": "Importando...", "apiKeysCount_one": "{{count}} clave", "apiKeysCount_many": "{{count}} claves", - "apiKeysCount_other": "{{count}} clave", - "apiKeysDocsLink": "Ver documentación", - "apiKeysCliHint": "Usa una clave API con la CLI de Termix para administrar servidores desde tu terminal.", - "apiKeysCliLink": "Ver documentación de la CLI", - "newApiKey": "Nueva clave API", - "apiKeyCreatedWarning": "Clave creada: cópiala ahora, no se volverá a mostrar.", - "apiKeyName": "Nombre", - "apiKeyUser": "Usuario", - "apiKeySelectUser": "Selecciona un usuario...", - "apiKeyExpiresAt": "Caduca el", - "createKey": "Crear clave", - "apiKeyNoExpiry": "Sin caducidad", - "revokedBadge": "REVOCADA", - "authTypeDual": "Autenticación dual", - "authTypeExternal": "Externa", - "authTypeLocal": "Local", - "adminStatusAdministrator": "Administrador", - "adminStatusRegularUser": "Usuario normal", - "adminBadge": "ADMIN", - "systemBadge": "SIST", - "customBadge": "PERSONALIZADO", - "youBadge": "TÚ", "sessionsActive_one": "{{count}} activa", "sessionsActive_many": "{{count}} activas", - "sessionsActive_other": "{{count}} activas", - "sessionActive": "Activa: {{time}}", - "sessionExpires": "Cad: {{time}}", - "revokeAll": "Todas", - "revokeAllSessionsSuccess": "Se han revocado todas las sesiones del usuario", - "revokeAllSessionsFailed": "Error al revocar las sesiones", - "revokeSessionFailed": "Error al revocar la sesión", - "addRole": "Añadir rol", - "noCustomRoles": "No hay roles personalizados definidos", - "removeRoleFailed": "Error al eliminar el rol", - "assignRoleFailed": "Error al asignar el rol", - "userAdminAccess": "Administrador", - "userAdminAccessDesc": "Acceso completo a todos los ajustes de administración", - "userRoles": "Roles", - "revokeAllUserSessions": "Revocar todas las sesiones", - "revokeAllUserSessionsDesc": "Forzar el inicio de sesión en todos los dispositivos", - "revoke": "Revocar", - "deleteUserWarning": "La eliminación de este usuario es permanente.", - "deleteUser": "Eliminar a {{username}}", - "deleting": "Eliminando...", - "deleteUserFailed": "Error al eliminar el usuario", - "deleteUserSuccess": "Usuario «{{username}}» eliminado", - "deleteRoleSuccess": "Rol «{{name}}» eliminado", - "revokeKeySuccess": "Clave «{{name}}» revocada", - "revokeKeyFailed": "Error al revocar la clave", - "copiedToClipboard": "Copiado al portapapeles", - "done": "Hecho", - "createUserTitle": "Crear usuario", - "createUserDesc": "Crea una nueva cuenta local.", - "createUserUsername": "Nombre de usuario", - "createUserPassword": "Contraseña", - "createUserPasswordHint": "Mínimo 6 caracteres.", - "createUserEnterUsername": "Introduce el nombre de usuario", - "createUserSubmit": "Crear usuario", - "editUserTitle": "Gestionar usuario: {{username}}", - "editUserDesc": "Edita roles, estado de administrador, sesiones y ajustes de la cuenta.", - "editUserUsername": "Nombre de usuario", - "editUserAuthType": "Tipo de autenticación", - "editUserAdminStatus": "Estado de administrador", - "editUserUserId": "ID de usuario", - "linkAccountTitle": "Vincular cuentas", - "linkAccountDesc": "Fusiona la cuenta externa {{username}} con una cuenta local existente.", - "linkAccountDescLocal": "Vincula la cuenta local {{username}} con una cuenta externa existente.", - "linkAccountWarningTitle": "Esto hará lo siguiente:", - "linkAccountEffect1": "Eliminar la cuenta exclusiva externa", - "linkAccountEffect2": "Añadir su inicio de sesión externo a la cuenta de destino", - "linkAccountEffect3": "Permitir el inicio de sesión tanto con credenciales externas como con contraseña", - "linkAccountTargetUsername": "Nombre de usuario de la cuenta local", - "linkAccountTargetPlaceholder": "Introduce el nombre de usuario de la cuenta local a la que vincular", - "linkAccountExternalUsername": "Nombre de usuario de la cuenta externa", - "linkAccountExternalPlaceholder": "Introduce el nombre de usuario de la cuenta exclusiva externa que deseas fusionar", - "linkAccountExternalNotFound": "No se ha encontrado ninguna cuenta exclusiva externa con ese nombre de usuario", - "linkAccounts": "Vincular cuentas", - "linkAccountSuccess": "Cuentas vinculadas correctamente", - "linkAccountFailed": "Error al vincular las cuentas", - "linkAccountInProgress": "Vinculando...", - "unlinkAccountTitle": "Desvincular inicio de sesión externo", - "unlinkAccountDesc": "Eliminar el inicio de sesión externo de {{username}}. Solo podrán iniciar sesión con su contraseña.", - "unlinkAccountWarning": "Esto eliminará el inicio de sesión externo de esta cuenta. El usuario debe tener una contraseña establecida para poder seguir iniciando sesión.", - "unlinkAccount": "Desvincular inicio de sesión externo", - "unlinkAccountInProgress": "Desvinculando...", - "unlinkAccountSuccess": "Inicio de sesión externo desvinculado", - "unlinkAccountFailed": "Error al desvincular el inicio de sesión externo", - "updateRegistrationFailed": "Error al actualizar la configuración de registro", - "updatePasswordLoginFailed": "Error al actualizar la configuración de inicio de sesión con contraseña", - "updateSecondFactorAfterExternalLoginFailed": "Error al actualizar la configuración del segundo factor", - "updatePasswordResetFailed": "Error al actualizar la configuración de restablecimiento de contraseña", - "sessionTimeoutRange2": "El tiempo de espera de la sesión debe estar entre 1 y 720 horas", - "sessionTimeoutSaved": "Tiempo de espera de la sesión guardado", - "sessionTimeoutSaveFailed": "Error al guardar el tiempo de espera de la sesión", - "monitoringIntervalInvalid": "Valores de intervalo no válidos", - "monitoringSaved": "Configuración de monitorización guardada", - "monitoringSaveFailed": "Error al guardar la configuración de monitorización", - "logLevelUpdateFailed": "Error al actualizar el nivel de registro", - "createUserRequired": "El nombre de usuario y la contraseña son obligatorios", - "createUserPasswordTooShort": "La contraseña debe tener al menos 6 caracteres", - "createUserSuccess": "Usuario «{{username}}» creado", - "createUserFailed": "Error al crear el usuario", - "updateAdminStatusFailed": "Error al actualizar el estado de administrador", - "allSessionsRevoked": "Todas las sesiones han sido revocadas", - "revokeSessionsFailed": "Error al revocar las sesiones", - "manageUserData": "Gestionar datos del usuario", - "backToUsers": "Volver a usuarios", - "manageTabAccount": "Cuenta", - "manageTabHosts": "Hosts", - "manageTabCredentials": "Credenciales", - "manageTabSessions": "Sesiones", - "manageTabDanger": "Peligro", - "manageEditorBack": "Volver a los datos de {{username}}", - "dataLockedBadge": "BLOQUEADO", - "dataLockedNotice": "Los datos de {{username}} permanecen bloqueados hasta que inicie sesión de nuevo. Sus hosts, credenciales y fragmentos no podrán verse ni editarse hasta entonces.", - "resetPasswordTitle": "Restablecer contraseña", - "resetPasswordExternalOnly": "Este usuario inicia sesión a través de un proveedor externo y no tiene contraseña.", - "resetPasswordPlaceholder": "Nueva contraseña", - "resetPasswordBtn": "Restablecer", - "resetPasswordWorking": "Restableciendo...", - "resetPasswordSuccess": "Contraseña restablecida", - "resetPasswordSuccessWiped": "Contraseña restablecida. Los datos cifrados del usuario han sido eliminados.", - "resetPasswordFailed": "Error al restablecer la contraseña", - "resetPasswordConfirmWipe": "{{username}} no ha iniciado sesión desde la actualización de cifrado, por lo que sus datos no se pueden recuperar. Si restableces la contraseña ahora, se eliminarán sus hosts, credenciales y fragmentos. ¿Continuar?", - "manageApiKeys": "Claves API", - "apiKeyNamePlaceholder": "Nombre de la clave", - "apiKeyCopyNotice": "Copia esta clave ahora, no se volverá a mostrar.", - "noApiKeysForUser": "Sin claves API", - "apiKeyDeleteFailed": "Error al eliminar la clave API", - "exportUserData": "Exportación de datos", - "exportUserDataDesc": "Descarga los hosts, credenciales y datos del explorador de archivos de este usuario en formato JSON. Los secretos se descifran.", - "exportUserDataSuccess": "Datos de usuario exportados", - "exportUserDataFailed": "Error al exportar los datos del usuario", "hostsCount_one": "{{count}} host", "hostsCount_many": "{{count}} hosts", "hostsCount_other": "{{count}} host", - "addHostForUser": "Añadir host", - "noHostsForUser": "Este usuario no tiene hosts", - "connectToHost": "Conectar", - "deleteHostConfirm": "¿Eliminar el host «{{name}}» perteneciente a {{username}}?", - "hostDeletedSuccess": "Host eliminado", - "hostDeleteFailed": "Error al eliminar el host", "credentialsCount_one": "{{count}} credencial", "credentialsCount_many": "{{count}} credenciales", "credentialsCount_other": "{{count}} credencial", - "addCredentialForUser": "Añadir credencial", - "noCredentialsForUser": "Este usuario no tiene credenciales", - "deleteCredentialConfirm": "¿Eliminar la credencial «{{name}}» perteneciente a {{username}}?", - "credentialDeletedSuccess": "Credencial eliminada", - "credentialDeleteFailed": "Error al eliminar la credencial", - "noSessionsForUser": "No hay sesiones activas", - "deleteSuccessorLabel": "Transferir hosts y credenciales a", - "deleteSuccessorMe": "Yo (el administrador que elimina)", - "deleteSuccessorNone": "Nadie, eliminarlos", - "deleteSuccessorDesc": "Todo lo que este usuario compartió seguirá funcionando bajo el nuevo propietario; elegir nadie eliminará sus hosts, credenciales y compartidos.", - "deleteUserDangerDesc": "Eliminar permanentemente a {{username}} y todos sus datos (hosts, credenciales, fragmentos, historial). Esta acción no se puede deshacer.", - "deleteUserConfirm": "¿Eliminar permanentemente a {{username}} y todos sus datos?", - "deleteUserAdminBlocked": "Retira el estado de administrador antes de eliminar a este usuario.", - "createRoleRequired": "El nombre y el nombre para mostrar son obligatorios", - "createRoleSuccess": "Rol «{{name}}» creado", - "createRoleFailed": "Error al crear el rol", - "apiKeyNameRequired": "El nombre de la clave es obligatorio", - "apiKeyUserRequired": "El ID de usuario es obligatorio", - "apiKeyCreatedSuccess": "Clave API «{{name}}» creada", - "apiKeyCreateFailed": "Error al crear la clave API", - "exportSuccess": "Base de datos exportada correctamente", - "exportFailed": "Error al exportar la base de datos", - "importSelectFile": "Selecciona un archivo primero", - "importCompleted": "Importación completada: {{total}} elementos importados, {{skipped}} omitidos", - "importFailed": "Error al importar: {{error}}", - "importError": "Error al importar la base de datos", - "sectionHostDefaults": "Valores predeterminados de host", "rolePermissions": { "count_one": "{{count}} permiso", "count_many": "{{count}} permisos", - "count_other": "{{count}} permiso", - "editAction": "Editar permisos", - "loadError": "Error al cargar el catálogo de permisos", - "saved": "Permisos del rol guardados", - "saveError": "Error al guardar los permisos del rol", - "save": "Guardar", - "saving": "Guardando...", - "pluginDisabled": "Complemento deshabilitado", "groups": { "hosts": "Hosts", "credentials": "Credenciales", "admin": "Administración" } - }, - "notificationPrivateEndpoints": "Hosts privados de notificación permitidos", - "notificationPrivateEndpointsDesc": "Hosts privados exactos que los canales de notificación pueden contactar. Sepáralos con comas.", - "updateNotificationEndpointsFailed": "Error al actualizar la lista de permitidos de puntos finales de notificación", - "secondFactorsSectionTitle": "Segundos factores", - "secondFactorsNone": "No hay segundos factores registrados", - "secondFactorUnavailable": "No disponible", - "resetSecondFactors": "Restablecer segundos factores", - "resetSecondFactorsConfirm": "¿Eliminar todos los segundos factores de {{username}}? Podrán iniciar sesión con su contraseña o SSO y registrarse de nuevo.", - "secondFactorsResetSuccess": "Segundos factores restablecidos", - "secondFactorsResetFailed": "Error al restablecer los segundos factores", - "passwordLoginForced": "El inicio de sesión con contraseña está desactivado, pero no hay ningún otro método de inicio de sesión habilitado, por lo que se mantiene activado por ahora. Nadie queda bloqueado.", - "sslNotRenewed": "Nada renueva este certificado. Expira el {{date}}. Activa la renovación automática en la sección de certificados ACME o sube uno nuevo antes de esa fecha.", - "sslSelfSigned": "Certificado autofirmado generado por Termix. Los navegadores mostrarán una advertencia.", - "sslRenewedBy": "Renovado automáticamente por {{plugin}}", - "sslIssuer": "Emitido por {{issuer}}", - "sslNames": "Cubre {{names}}", - "sslManualTitle": "Subir un certificado", - "updateExternalAutoProvisionFailed": "Error al actualizar la configuración de creación automática", - "hostTags": "Etiquetas de host predefinidas", - "hostTagsDesc": "Etiquetas que todos los usuarios ven como sugerencias en el editor de hosts. Pulsa Espacio o Intro para añadir una. Eliminar una etiqueta aquí no la elimina de los hosts.", - "hostTagsError": "No se han podido cargar o guardar las sugerencias de etiquetas de host.", - "revokeAllSessionsConfirm": "¿Cerrar la sesión de {{username}} en todos los dispositivos?", - "revokeSessionConfirm": "¿Cerrar esta sesión?", - "revokeSession": "Cerrar sesión", - "deleteRoleConfirm": "¿Eliminar el rol {{name}}?", - "revokeKeyConfirm": "¿Revocar la clave API {{name}}?", - "revokeKey": "Revocar" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Dónde", - "who": "Quién", - "hostLabel": "Host", - "hostPlaceholder": "192.168.1.1 o example.com", - "portLabel": "Puerto", - "usernameLabel": "Nombre de usuario", - "usernamePlaceholder": "nombre de usuario", - "authLabel": "Autenticación", - "passwordLabel": "Contraseña", - "passwordPlaceholder": "contraseña", - "privateKeyLabel": "Clave privada", - "privateKeyPlaceholder": "Pegar clave privada...", - "credentialLabel": "Credencial", - "credentialPlaceholder": "Seleccionar una credencial guardada", - "protocolLabel": "Protocolo", - "domainLabel": "Dominio", - "domainPlaceholder": "opcional", - "connectToAction": "Conectar a {{name}}", - "sshProtocol": "SSH", - "noTarget": "Ningún componente instalado puede conectarse a este tipo de host" + "usernameLabel": "Nombre de usuario" }, "keybindings": { - "description": "Asigna teclas a acciones en el terminal y la aplicación, o cambia los atajos integrados.", - "defaultsHeading": "Atajos integrados", - "fixedHeading": "Atajos de la aplicación", - "fixed": { - "splitRight": "Dividir a la derecha", - "splitDown": "Dividir hacia abajo", - "zoomPane": "Ampliar el panel enfocado", - "navigatePane": "Moverse entre paneles", - "nextTab": "Siguiente pestaña", - "previousTab": "Pestaña anterior", - "jumpTab": "Ir a la pestaña", - "previousView": "Volver a la vista anterior de la barra lateral", - "fullscreen": "Alternar pantalla completa" - }, - "customHeading": "Atajos personalizados", - "addBinding": "Añadir atajo", - "addBindingTitle": "Añadir atajo", - "editBindingTitle": "Editar atajo", - "loading": "Cargando...", - "noCustomBindings": "Aún no hay atajos personalizados", - "defaultBadge": "Predeterminado", - "customizedBadge": "Personalizado", - "customize": "Personalizar", - "resetToDefault": "Restablecer valores predeterminados", - "resetAllToDefaults": "Restablecer todo a los valores predeterminados", - "cancel": "Cancelar", - "saveBinding": "Guardar atajo", - "saveError": "No se han podido guardar los atajos de teclado", - "pressKeysToRecord": "Combinación de teclas", - "pressKeysPlaceholder": "Haz clic y pulsa las teclas", - "recording": "Pulsa las teclas...", - "comboRequiredError": "Pulsa primero una combinación de teclas", - "conflictWarning": "Esta combinación ya está asignada a {{combo}}. Al guardar, se activarán ambas.", - "actionLabel": "Acción", "actionNextTab": "Cambiar a la siguiente pestaña", "actionPreviousTab": "Cambiar a la pestaña anterior", "actionOpenCommandPalette": "Abrir búsqueda rápida", - "actionReconnectSession": "Reconectar la sesión actual", - "unavailableAction": "{{type}} (no disponible)", - "actionRequiredError": "Selecciona primero una acción", - "deleteConfirm": "¿Eliminar esta combinación de teclas?", - "resetAllConfirm": "¿Restablecer todas las combinaciones de teclas a sus valores predeterminados?" + "actionReconnectSession": "Reconectar la sesión actual" }, "userProfile": { - "storageModeLocal": "Navegador", - "storageModeCloud": "Base de datos", - "storageModeDescription": "El navegador guarda la configuración solo en este navegador. La base de datos sincroniza con el servidor y carga la configuración en cualquier dispositivo.", - "resetToDefaults": "Restablecer valores predeterminados", - "resetToDefaultsSuccess": "Configuración restablecida a los valores predeterminados.", - "storageModeSwitch": "Almacenamiento de preferencias", - "sectionAccount": "Cuenta", - "desktopProfileTitle": "Solo este dispositivo", - "desktopProfileDescription": "Este perfil se guarda en este dispositivo e inicia sesión de forma independiente. Vínculalo a un servidor de Termix para usar los mismos hosts y configuraciones en todos los dispositivos.", - "sectionInterface": "Interfaz", - "interfacePresetDesc": "Cuántos detalles muestra Termix. Todas las funciones siguen estando disponibles.", "preset_simple": "Simple", "preset_simple_desc": "Solo lo esencial.", "preset_balanced": "Equilibrado", "preset_balanced_desc": "El diseño estándar.", "preset_advanced": "Avanzado", "preset_advanced_desc": "Todo activado, muy compacto.", - "presetClearOverrides": "Restablecer todo", - "presetOverridesTitle": "Personalizado", - "presetRevertArea": "Revertir", - "presetConfirmTitle": "¿Cambiar a {{preset}}?", - "presetConfirmDesc": "Esto restablece la barra lateral, la navegación, el diseño del panel de control, la barra de herramientas del terminal y la vista del administrador de archivos. Tus hosts, credenciales y página de inicio no se ven afectados.", - "presetConfirmApply": "Aplicar preset", - "runSetupAgainDesc": "Vuelve a realizar la configuración inicial.", - "runSetupAgainButton": "Ejecutar configuración", "uiArea_chrome": "Marco de la aplicación", "uiArea_hostList": "Lista de hosts", "uiArea_credentialList": "Lista de credenciales", @@ -1648,127 +1128,14 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Administrador de archivos", "uiArea_hostEditor": "Editor de hosts", - "sectionAppearance": "Apariencia", - "sectionSecurity": "Seguridad", - "sectionApiKeys": "Claves API", - "sectionData": "Datos", - "usernameLabel": "Nombre de usuario", - "roleLabel": "Rol", - "roleAdministrator": "Administrador", - "authMethodLabel": "Método de autenticación", - "authMethodLocal": "Local", - "twoFaLabel": "2FA", - "twoFaOn": "Activado", - "twoFaOff": "Desactivado", - "versionLabel": "Versión", - "cliTitle": "Termix CLI", - "cliDescription": "Abre terminales, ejecuta comandos y mueve archivos desde tu propia shell.", - "cliLearnMore": "Más información", - "deleteAccount": "Eliminar cuenta", - "deleteAccountDescription": "Elimina tu cuenta de forma permanente", - "deleteButton": "Eliminar", - "deleteAccountPermanent": "Esta acción es permanente y no se puede deshacer.", - "deleteAccountWarning": "Todas las sesiones, hosts, credenciales y configuraciones se eliminarán de forma permanente.", - "confirmPasswordDeletePlaceholder": "Introduce tu contraseña para confirmar", "languageLabel": "Idioma", "themeLabel": "Tema", "fontSizeLabel": "Tamaño de fuente", "interfaceFontLabel": "Fuente de la interfaz", "interfaceFontDescription": "Cambia la fuente de la interfaz de la aplicación. Los perfiles de terminal mantienen sus propias configuraciones de fuente.", "accentColorLabel": "Color de acento", - "keyboardShortcuts": "Atajos de teclado", - "keyboardShortcutsDescription": "Personaliza los atajos de copiar, pegar y comandos del terminal", - "manageShortcuts": "Gestionar", - "commandPalette": "Paleta de comandos", - "commandPaletteDesc": "Activar atajo de teclado", - "reopenTabsOnLogin": "Reabrir pestañas al iniciar sesión", - "reopenTabsOnLoginDesc": "Restaura tus pestañas abiertas cuando inicies sesión o actualices la página, incluso desde otro dispositivo", - "confirmTabClose": "Confirmar cierre de pestaña", - "confirmTabCloseDesc": "Preguntar antes de cerrar pestañas del terminal", - "showTabNumbers": "Mostrar números de pestaña", - "showTabNumbersDesc": "Muestra un número en cada pestaña para ayudar a distinguirlas", - "settingsAppRail": "Barra lateral de aplicaciones", - "sidebarSettingsMoved": "La configuración de visualización de la barra lateral de hosts se ha movido al panel Personalizar barra lateral, que se abre desde la barra de herramientas de Hosts.", - "showHostTags": "Mostrar etiquetas de host", - "showHostTagsDesc": "Muestra etiquetas en la lista de hosts", - "statusColors": "Colores de estado reales", - "statusColorsDesc": "Usa verde/rojo para el estado en línea/fuera de línea en lugar del color de acento", - "pinAppRail": "Fijar barra lateral de aplicaciones", - "pinAppRailDesc": "Mantén la barra lateral de aplicaciones izquierda siempre expandida en lugar de expandirla al pasar el cursor", - "expandAppRailOnHover": "Expandir barra lateral al pasar el cursor", - "expandAppRailOnHoverDesc": "Permite que la barra lateral de aplicaciones izquierda se expanda cuando el cursor pasa sobre ella", - "appRailHoverPushesContent": "Desplazar el contenido al expandirse", - "appRailHoverPushesContentDesc": "Dejar espacio para la barra expandida en lugar de superponerla sobre la página. Las sesiones abiertas, como el escritorio remoto, se redimensionarán cada vez.", - "showPinAppRailButton": "Mostrar botón para fijar barra lateral", - "showPinAppRailButtonDesc": "Muestra un botón en la barra lateral para fijarla abierta. Desactivado por defecto.", - "settingsNavigation": "Navegación", - "navigationTabsDesc": "Elige qué pestañas aparecen en la barra lateral de aplicaciones", - "settingsUpdates": "Actualizaciones", - "disableUpdateChecks": "Desactivar comprobación de actualizaciones", - "disableUpdateChecksDesc": "Deja de comprobar si hay actualizaciones", - "changePassword": "Cambiar contraseña", - "currentPasswordLabel": "Contraseña actual", - "currentPasswordPlaceholder": "Contraseña actual", - "newPasswordLabel": "Nueva contraseña", - "newPasswordPlaceholder": "Nueva contraseña", - "confirmPasswordLabel": "Confirmar nueva contraseña", - "confirmPasswordPlaceholder": "Confirmar nueva contraseña", - "updatePassword": "Actualizar contraseña", - "createApiKeyTitle": "Crear clave API", - "createApiKeyDescription": "Genera una nueva clave API para acceso programático.", - "apiKeyNameLabel": "Nombre", - "apiKeyNamePlaceholder": "p. ej. Pipeline CI", - "expiryDateLabel": "Fecha de expiración", - "optional": "opcional", - "cancel": "Cancelar", - "createKey": "Crear clave", - "apiKeyCreatedWarning": "Clave creada: cópiala ahora, no se volverá a mostrar.", - "copyApiKey": "Copiar clave API", - "copiedToClipboard": "Copiado al portapapeles", "apiKeyCount_one": "{{count}} clave", "apiKeyCount_many": "{{count}} claves", - "apiKeyCount_other": "{{count}} clave", - "newKey": "Nueva clave", - "noApiKeys": "Aún no hay claves API.", - "apiKeyActive": "Activa", - "apiKeyUsageHint": "Incluye tu clave en el", - "apiKeyUsageHintHeader": "encabezado.", - "apiKeyPermissionsHint": "Las claves heredan los permisos del usuario que las crea.", - "exportData": "Exportar mis datos", - "exportDataDesc": "Descarga una copia de seguridad de tus hosts, credenciales y configuración para transferirlos a otro dispositivo", - "export": "Exportar", - "exporting": "Exportando...", - "importData": "Importar mis datos", - "importDataDesc": "Restaura tus hosts, credenciales y configuración desde un archivo de copia de seguridad .sqlite", - "importDataSelected": "Seleccionado: {{name}}", - "selectFile": "Seleccionar archivo", - "changeFile": "Cambiar", - "import": "Importar", - "importing": "Importando...", - "exportSuccess": "Datos exportados correctamente", - "exportFailed": "Error al exportar los datos", - "importSelectFile": "Selecciona un archivo primero", - "importCompleted": "Importación completada: {{total}} elementos importados, {{skipped}} omitidos", - "importFailed": "Error al importar: {{error}}", - "roleUser": "Usuario", - "authMethodDual": "Autenticación dual", - "authMethodExternal": "Externa", - "done": "Listo", - "apiKeyNameRequired": "El nombre de la clave es obligatorio", - "apiKeyCreated": "Clave API «{{name}}» creada", - "apiKeyCreateFailed": "Error al crear la clave API", - "apiKeyUser": "Usuario", - "apiKeyExpires": "Expira", - "apiKeyRevoked": "Clave API «{{name}}» revocada", - "apiKeyRevokeFailed": "Error al revocar la clave API", - "passwordFieldsRequired": "Se requieren la contraseña actual y la nueva", - "passwordMismatch": "Las contraseñas no coinciden", - "passwordTooShort": "La contraseña debe tener al menos 6 caracteres", - "passwordUpdated": "Contraseña actualizada correctamente", - "passwordUpdateFailed": "Error al actualizar la contraseña", - "deletePasswordRequired": "Se requiere la contraseña para eliminar tu cuenta", - "deleteFailed": "Error al eliminar la cuenta", - "deleting": "Eliminando...", "colorPickerTooltip": "Abrir selector de color", "themeSystem": "Sistema", "themeLight": "Claro", @@ -1779,18 +1146,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Conectado a {{server}}", - "linkedProfileDescription": "Este dispositivo usa tu cuenta en el servidor y mantiene una copia de tus datos, por lo que sigue funcionando sin conexión.", - "manageSync": "Gestionar sincronización", - "setUpSync": "Vincular a un servidor", - "settingsTabsAndShortcuts": "Pestañas y accesos directos", - "onBetaTitle": "Estás en una versión beta", - "onBetaDescription": "Gracias por probar. Dinos qué falla.", - "tryBetaTitle": "Prueba nuevas funciones antes que nadie", - "tryBetaDescription": "Únete al programa beta en Actualizaciones.", - "sendBetaFeedback": "Enviar comentarios sobre la beta", - "openUpdates": "Actualizaciones" + "themeGruvbox": "Gruvbox" } } }, @@ -2055,8 +1411,7 @@ "hasDependents": "{{name}} es necesario para {{list}}. Desactívalos o desinstálalos primero.", "missingDependencies": "{{name}} necesita {{list}}, que no está instalado.", "consentChanged": "Lo que solicita este complemento ha cambiado desde que lo revisaste. Comprueba la lista de nuevo.", - "upload": "No se pudo leer {{name}}: {{error}}", - "developerMode": "No se pudo cambiar el modo de desarrollador: {{error}}" + "upload": "No se pudo leer {{name}}: {{error}}" }, "data": { "title": "Datos almacenados", @@ -2188,13 +1543,7 @@ "browsePlugins": "Explorar complementos", "loading": "Cargando", "developer": { - "title": "Modo de desarrollador de complementos", - "hint": "Permite a los administradores instalar complementos desde un archivo .tmxplug en la pestaña Complementos, sin las comprobaciones del registro. Úsalo para crear y probar tus propios complementos.", - "enableTitle": "¿Activar el modo de desarrollador?", - "enableBody": "Los administradores podrán instalar complementos desde archivos que Termix no ha verificado. Un complemento puede hacer cualquier cosa que sus capacidades permitan, así que actívalo solo mientras creas o pruebas complementos.", - "enable": "Activar", - "installFromFile": "Instalar desde archivo", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS está activado, por lo que la instalación desde archivo sigue bloqueada." + "installFromFile": "Instalar desde archivo" }, "count": { "downloads_one": "{{formatted}} descarga", @@ -2233,71 +1582,7 @@ "secretSet": "Establecido", "secretNotSet": "No establecido", "secretReplace": "Reemplazar", - "pluginSettingsSaved": "Ajustes guardados", - "pluginSettingsInvalid": "No se pudieron guardar algunos ajustes. Comprueba los campos resaltados.", - "pluginSettingsSaveFailed": "Error al guardar los ajustes", - "pluginSettingsLoadFailed": "Error al cargar los ajustes", - "featureUnavailable": "{{name}} no está disponible ahora mismo. Estos ajustes se guardan, pero no tendrán efecto.", - "account": "Cuenta", - "security": "Seguridad", - "apiKeys": "Claves API", - "data": "Datos y sincronización", - "interface": "Interfaz", - "appearance": "Apariencia", - "keybindings": "Atajos de teclado", - "adminGeneral": "General", - "adminUsers": "Usuarios", - "adminSessions": "Sesiones", - "adminRoles": "Roles", - "adminHostDefaults": "Valores predeterminados del host", - "adminBranding": "Marca", - "adminDatabase": "Base de datos", - "adminSsl": "SSL", - "adminApiKeys": "Claves API", - "adminAuditLog": "Registro de auditoría", - "bandYou": "Tu cuenta", - "bandApp": "Esta aplicación", - "bandPlugins": "Complementos", - "bandInstance": "Este servidor", - "searchPlaceholder": "Buscar ajustes", - "noResults": "No hay ajustes que coincidan.", - "pages": "Páginas", - "instanceSettings": "Ajustes del servidor", - "nothingHere": "No hay nada que configurar aquí.", - "searchPage": "Buscar en esta página", - "noPageMatches": "Nada en esta página coincide.", - "updates": { - "title": "Actualizaciones", - "betaProgram": "Programa beta", - "betaIntro": "Las versiones beta son compilaciones tempranas de la próxima versión de Termix. Se publican los martes y viernes cuando hay novedades para probar. Pueden tener errores, y tus comentarios son lo que hace que la versión estable sea mejor.", - "termixBetas": "Versiones beta de Termix", - "termixBetasHint": "Avísame de las nuevas versiones beta, no solo de las estables.", - "runningBetaBuild": "Estás ejecutando una versión beta. Para salir, vuelve a cambiar a una imagen o instalador estable.", - "howToInstall": "Cómo obtener la versión beta", - "desktopInstall": "Descarga el instalador beta e instálalo sobre este.", - "downloadBeta": "Descargar {{version}}", - "dockerInstall": "Cambia tu imagen a la etiqueta beta y reinicia el contenedor:", - "copy": "Copiar", - "copied": "Copiado", - "copyFailed": "No se ha podido copiar", - "learnMore": "Más información sobre las versiones beta", - "feedback": "Comentarios", - "feedbackHint": "¿Has encontrado un error o tienes una idea? Se enviará directamente a los desarrolladores con tu versión rellenada.", - "sendFeedback": "Enviar comentarios sobre la versión beta", - "releases": "Versiones", - "thisVersion": "Esta versión", - "newestStable": "Última versión estable", - "newestBeta": "Última versión beta", - "noRelease": "Ninguna por ahora", - "pluginBetas": "Versiones beta de complementos", - "pluginBetasIntro": "Cada complemento puede usar versiones beta por su cuenta. Para probar una, ábrelo y pulsa Probar versión beta.", - "openPlugins": "Abrir complementos", - "waitingForStable": "De vuelta a la versión estable. Se mantendrá en {{version}} hasta que haya una versión estable más reciente.", - "backToStable": "Volver a la versión estable", - "allPluginsBeta": "Usar versiones beta para todos los complementos", - "allPluginsStable": "Todos los complementos de vuelta a la versión estable", - "saveFailed": "No se ha podido guardar el cambio" - } + "featureUnavailable": "{{name}} no está disponible ahora mismo. Estos ajustes se guardan, pero no tendrán efecto." }, "managerCard": { "refresh": "Actualizar", @@ -2307,86 +1592,16 @@ "filter": "Filtrar..." }, "sync": { - "server": "Servidor de Termix", - "account": "Cuenta", - "status": "Estado", - "never": "nunca", - "justNow": "ahora mismo", "minutesAgo_one": "hace {{count}} minuto", "minutesAgo_many": "hace {{count}} minutos", "minutesAgo_other": "hace {{count}} minutos", "hoursAgo_one": "hace {{count}} hora", "hoursAgo_many": "hace {{count}} horas", "hoursAgo_other": "hace {{count}} horas", - "actionFailed": "Eso no ha funcionado. Inténtalo de nuevo.", - "unlinkedTitle": "Solo este dispositivo", - "unlinkedBody": "Termix funciona de forma independiente en este dispositivo. Vínculalo a tu servidor de Termix para mantener todo sincronizado.", - "unlinkedPointHosts": "Tus hosts, credenciales, fragmentos y configuración te seguirán a cada dispositivo.", - "unlinkedPointOffline": "Todo sigue funcionando cuando no se puede acceder al servidor y se sincroniza más tarde.", - "unlinkedPointAccount": "Inicias sesión con tu cuenta del servidor, y los hosts que otras personas hayan compartido contigo también aparecerán aquí.", - "linkButton": "Vincular a un servidor", - "state": { - "syncing": "Sincronizando", - "offline": "Servidor no accesible", - "error": "Sincronización detenida", - "signedOut": "Sesión cerrada", - "synced": "Sincronizado {{time}}" - }, "pending_one": "{{count}} cambio pendiente de sincronizar", "pending_many": "{{count}} cambios pendientes de sincronizar", "pending_other": "{{count}} cambios pendientes de sincronizar", - "signInAgain": "Iniciar sesión de nuevo", - "syncNow": "Sincronizar ahora", - "unlink": "Desvincular", - "unlinked": "Este dispositivo ya no está vinculado", - "unlinkTitle": "¿Desvincular este dispositivo?", - "unlinkDescription": "Se detiene la sincronización y se cierra la sesión del servidor. Los hosts compartidos contigo por otros se eliminan de este dispositivo en cualquier caso.", - "unlinkKeepTitle": "Conservar mis datos aquí", - "unlinkKeepBody": "Tus hosts, credenciales y configuraciones permanecen en este dispositivo y siguen funcionando de forma independiente.", - "unlinkRemoveTitle": "Eliminar datos sincronizados", - "unlinkRemoveBody": "Todo lo que provenga del servidor se elimina de este dispositivo. Solo se conservan los hosts que se mantengan en este dispositivo.", - "conflictsTitle": "Conflictos", - "conflictsDescription": "Estos elementos se modificaron aquí y en el servidor al mismo tiempo. Se está utilizando la versión del servidor. Conserva la tuya para enviarla al servidor en su lugar.", - "keepMine": "Conservar la mía", - "keepServer": "Conservar la del servidor", - "errorsTitle": "No sincronizado", - "errorsDescription": "El servidor no aceptó estos cambios. Permanecen en este dispositivo.", - "errorPermission": "Tu cuenta en el servidor no tiene permiso para realizar este cambio.", - "retry": "Intentar de nuevo", - "whatSyncs": "Qué se sincroniza", - "whatSyncsDescription": "Desactiva cualquier elemento que quieras conservar solo en este dispositivo.", - "coreGroup": "Termix", - "notOnServer": "El servidor no tiene esto", - "notOnDevice": "Aún no está en este dispositivo", - "localOnlyHint": "También puedes conservar hosts o carpetas individuales en este dispositivo desde sus configuraciones.", - "originTitle": "Origen de las conexiones", - "originDescription": "Conéctate a los hosts desde este dispositivo o a través del servidor. Puedes cambiar esto para cada host.", - "originLocal": "Este dispositivo", - "originRemote": "El servidor", - "entities": { - "hosts": "Hosts", - "sshCredentials": "Credenciales", - "sshFolders": "Carpetas", - "userPreferences": "Preferencias", - "pluginUserSettings": "Configuración de complementos", - "sharedHosts": "Hosts compartidos contigo", - "sharedCredentials": "Credenciales compartidas contigo", - "vaultProfiles": "Perfiles de Vault", - "snippetFolders": "Carpetas de fragmentos", - "snippets": "Fragmentos", - "dashboardServiceLinks": "Enlaces de servicios", - "homepageItems": "Elementos de la página de inicio", - "networkTopology": "Mapa de red", - "workspaces": "Espacios de trabajo", - "hostDefaults": "Valores predeterminados de host", - "hostDefaultsAdmin": "Valores predeterminados de host del servidor", - "aiProviders": "Proveedores de IA", - "homepageLayouts": "Diseños de la página de inicio", - "accountProfile": "Perfil de la cuenta" - }, "proxy": { - "title": "Proxy inverso", - "description": "Solo necesario cuando algo como Cloudflare Access o una página de inicio de sesión se sitúa delante de tu servidor.", "headersTitle": "Encabezados adicionales", "headersHint": "Se envían con cada solicitud al servidor, por ejemplo, un token de servicio de Cloudflare Access.", "headerName": "Nombre del encabezado", @@ -2399,8 +1614,7 @@ "username": "Nombre de usuario", "password": "Contraseña", "allowInvalidCertificate": "Confiar en un certificado autofirmado", - "allowInvalidCertificateHint": "Solo para tu propio servidor, cuando su certificado no proviene de una autoridad conocida.", - "saved": "Guardado" + "allowInvalidCertificateHint": "Solo para tu propio servidor, cuando su certificado no proviene de una autoridad conocida." }, "problems": { "invalidUrl": "Eso no parece una dirección web.", @@ -2440,6 +1654,27 @@ "linking": "Vinculando y ejecutando la primera sincronización...", "linked": "Vinculado. Tus datos se están sincronizando ahora.", "signedInAgain": "Sesión iniciada. La sincronización se está ejecutando de nuevo." + }, + "entities": { + "hosts": "Hosts", + "sshCredentials": "Credenciales", + "sshFolders": "Carpetas", + "userPreferences": "Preferencias", + "pluginUserSettings": "Configuración de complementos", + "sharedHosts": "Hosts compartidos contigo", + "sharedCredentials": "Credenciales compartidas contigo", + "vaultProfiles": "Perfiles de Vault", + "snippetFolders": "Carpetas de fragmentos", + "snippets": "Fragmentos", + "dashboardServiceLinks": "Enlaces de servicios", + "homepageItems": "Elementos de la página de inicio", + "networkTopology": "Mapa de red", + "workspaces": "Espacios de trabajo", + "hostDefaults": "Valores predeterminados de host", + "hostDefaultsAdmin": "Valores predeterminados de host del servidor", + "aiProviders": "Proveedores de IA", + "homepageLayouts": "Diseños de la página de inicio", + "accountProfile": "Perfil de la cuenta" } }, "hostDefaults": { @@ -2456,34 +1691,15 @@ "resetTitle": "Este host establece su propio valor. Haz clic para usar de nuevo el valor predeterminado de {{source}}", "clearTitle": "Establecido en este nivel. Haz clic para borrarlo y usar {{source}} en su lugar", "inheritedTitle": "Sigue el valor predeterminado de {{source}}", - "titleAdmin": "Valores predeterminados de hosts del servidor", - "titleUser": "Mis valores predeterminados de hosts", - "titleFolder": "Valores predeterminados de la carpeta: {{name}}", - "descriptionAdmin": "Valores predeterminados para cada host de este servidor. Los propios valores predeterminados de un usuario, los de una carpeta o el propio host aún pueden establecer un valor diferente. Cambia un campo para establecerlo aquí o borra el campo para dejarlo sin establecer.", - "descriptionUser": "Valores predeterminados para todos tus hosts, por encima de los del servidor. Una carpeta o el propio host aún pueden establecer un valor diferente. Cambia un campo para establecerlo aquí o borra el campo para dejarlo sin establecer.", - "descriptionFolder": "Valores predeterminados para los hosts de esta carpeta y sus subcarpetas, por encima de los tuyos. Un host aún puede establecer un valor diferente. Cambia un campo para establecerlo aquí o borra el campo para dejarlo sin establecer.", - "save": "Guardar valores predeterminados", "saved_one": "Valores predeterminados guardados. Se ha actualizado {{count}} host.", "saved_many": "Valores predeterminados guardados. Se han actualizado {{count}} hosts.", "saved_other": "Valores predeterminados guardados. Se han actualizado {{count}} hosts.", - "savedInBackground": "Valores predeterminados guardados. Los hosts se están actualizando en segundo plano.", "appliedToHosts_one": "{{count}} host se ha actualizado con los nuevos valores predeterminados.", "appliedToHosts_many": "{{count}} hosts se han actualizado con los nuevos valores predeterminados.", "appliedToHosts_other": "{{count}} hosts se han actualizado con los nuevos valores predeterminados.", - "saveFailed": "No se han podido guardar los valores predeterminados", - "loadFailed": "No se han podido cargar los valores predeterminados", - "confirmTitle": "¿Guardar valores predeterminados?", "confirmChanges_one": "{{count}} host sigue estos valores predeterminados y cambiará.", "confirmChanges_many": "{{count}} hosts siguen estos valores predeterminados y cambiarán.", "confirmChanges_other": "{{count}} hosts siguen estos valores predeterminados y cambiarán.", - "confirmNoChanges": "Ningún host existente cambiará. Los nuevos hosts comenzarán con estos valores predeterminados.", - "menuMyDefaults": "Mis valores predeterminados de hosts", - "folderDefaultsAction": "Valores predeterminados de la carpeta", - "adminSectionDescription": "Establece los valores predeterminados que sigue cada host de este servidor, para cada configuración que tenga un host, incluidas las de cada complemento. Los usuarios y las carpetas pueden establecer los suyos por encima, y cualquier host aún puede usar su propio valor.", - "editServerDefaults": "Editar valores predeterminados del servidor", - "resetMenu": "Restablecer", - "resetAll": "Restablecer todo a los valores predeterminados", - "resetCore": "Restablecer conexión y SSH a los valores predeterminados", "resetDone_one": "{{count}} host ahora sigue sus valores predeterminados.", "resetDone_many": "{{count}} hosts ahora siguen sus valores predeterminados.", "resetDone_other": "{{count}} hosts ahora siguen sus valores predeterminados." @@ -2498,50 +1714,16 @@ "fields": { "secretSaved": "Guardado. Escribe para reemplazarlo." }, - "sharing": { - "revokeConfirm": "¿Eliminar el acceso de {{name}}?", - "revoke": "Eliminar acceso" - }, "manage": { - "searchSettings": "Buscar en la configuración", - "noMatchingSettings": "No hay coincidencias en la configuración.", - "sections": "Secciones", - "sectionNeedsAttention": "Algo aquí necesita atención", "needsAttention_one": "Una cosa necesita atención.", "needsAttention_many": "{{count}} cosas necesitan atención.", "needsAttention_other": "{{count}} cosas necesitan atención.", - "bandHost": "Host", - "bandFeatures": "Protocolos y complementos", - "bandCredential": "Credencial", - "sshConnection": "Conexión SSH", - "errorAddressRequired": "Se requiere una dirección.", - "errorPortRange": "Usa un puerto entre 1 y 65535.", - "defaults": "Predeterminados", - "searchHosts": "Buscar hosts", - "searchCredentials": "Buscar credenciales", - "searchDefaults": "Buscar predeterminados", - "addCredential": "Añadir credencial", - "nothingMatches": "No hay coincidencias", - "nothingYet": "Aún no hay nada aquí", - "emptyHostsHint": "Añade un host y aparecerá aquí, en la carpeta que le asignes.", - "emptyCredentialsHint": "Las credenciales que guardes pueden reutilizarse en cualquier host.", - "collapse": "Contraer", - "expand": "Expandir", - "cannotBeUndone": "Esto no se puede deshacer.", - "hostNotFound": "No se ha podido encontrar ese host. Intenta actualizar la lista.", "hostCount_one": "{{count}} host", "hostCount_many": "{{count}} hosts", "hostCount_other": "{{count}} hosts", "credentialCount_one": "{{count}} credencial", "credentialCount_many": "{{count}} credenciales", - "credentialCount_other": "{{count}} credenciales", - "newHost": "Nuevo host", - "newCredential": "Nueva credencial", - "advanced": "Avanzado", - "pickHost": "Selecciona un host para editar", - "pickCredential": "Selecciona una credencial para editar", - "pickDefaults": "Selecciona un nivel de valores predeterminados para editar", - "pickHint": "Todo lo relacionado con una conexión está aquí, agrupado para que lo encuentres fácilmente." + "credentialCount_other": "{{count}} credenciales" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/et_EE.json b/src/ui/locales/translated/et_EE.json index f3e281976..92523a416 100644 --- a/src/ui/locales/translated/et_EE.json +++ b/src/ui/locales/translated/et_EE.json @@ -141,7 +141,6 @@ "continue": "Jätka", "error": "Viga", "unsavedChanges": "Salvestamata muudatused", - "more": "Rohkem", "loading": "Laadimine...", "host": "Host", "selectHost": "Valige host...", @@ -154,7 +153,6 @@ "cancel": "Tühista", "username": "Kasutajanimi", "login": "Logi sisse", - "logout": "Logi välja", "register": "Registreeri", "password": "Parool", "confirmPassword": "Kinnita parool", @@ -165,8 +163,6 @@ "rename": "Nimeta ümber", "edit": "Muuda", "confirm": "Kinnita", - "next": "Järgmine", - "previous": "Eelmine", "refresh": "Värskenda", "language": "Keel", "backendReconnected": "Serveriühendus taastatud", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Loe igaühe kohta" }, "desktopUpdates": { - "title": "Töölaukra rakendus", - "mode": "Uuendused", - "modeHint": "Kuidas see rakendus uusi versioone saab.", - "manualModeHint": "See koopia ei saa ennast uuendada, seega teatab Termix sulle ainult siis, kui uus versioon on välja antud.", "modeAutomatic": "Automaatne", "modePrompt": "Küsi esmalt", "modeNever": "Mitte kunagi", @@ -247,15 +239,6 @@ "onboardingTitle": "Rakenduse uuendused", "onboardingBody": "Töölauarakendus saab nüüd ennast uuendada. Vali, kuidas soovid uusi versioone saada. Seda saad hiljem muuta Sätetes, Uuendused.", "onboardingManual": "See rakenduse koopia on paigaldatud viisil, mis ei võimalda eneseuuendamist, seega teatab Termix sulle uue versiooni saadavusest koos allalaadimise lingiga.", - "status": "Versioon {{version}}", - "statusIdle": "Pole veel kontrollitud", - "statusChecking": "Uuenduste otsimine", - "statusAvailable": "Versioon {{version}} on saadaval", - "statusDownloading": "Laadin alla versiooni {{version}} ({{progress}}%)", - "statusReady": "Versioon {{version}} on valmis. Taaskäivita, et see paigaldada.", - "statusUpToDate": "Sul on uusim versioon", - "statusError": "Uuenduste kontrollimine ei õnnestunud. Proovi hiljem uuesti.", - "checkNow": "Kontrolli nüüd", "download": "Laadi alla", "restart": "Taaskäivita nüüd", "later": "Hiljem", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Sulge", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopeeri parool", - "copySudoPassword": "Kopeeri sudo parool", - "passwordCopied": "Parool kopeeritud lõikelauale", - "failedToCopyPassword": "Parooli kopeerimine ebaõnnestus", - "refreshTab": "Värskenda ühendust", - "renameTab": "Nimeta vaheleht ümber", "dashboard": "Juhtpaneel", "quickConnect": "Kiire ühendus", - "openAsTabHint": "Klõpsa Ctrl+klõps või keskmise nupuga, et avada vahelehena", - "openAsTab": "Ava vahelehena", - "openInRightDock": "Ava paremas dokis", - "closeRightDock": "Sulge parem dokk", - "toggleRightDock": "Lülita parem dokk", "hosts": "Hostid", "credentials": "Tunnused", "connections": "Ühendused", - "keepSideMenuOpen": "Hoia menüü avatuna", - "collapseSideMenu": "Ahenda menüü", - "roleAdministrator": "Administraator", - "roleUser": "Kasutaja", "sync": "Sünkrooni", "reconnectDisconnectedTerminals": "Ühenda kõik katkenud terminalid uuesti", "reconnectingTerminals_one": "Ühendan {{count}} terminali uuesti", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "{{count}} terminali uuesti ühendamine ei õnnestunud", "fullscreenUnsupported": "See brauser ei toeta täisekraanirežiimi", "fullscreenFailed": "Täisekraanirežiimi lülitamine ei õnnestunud", - "resetSidebarWidth": "Laiuse lähtestamine", - "collapseSidebar": "Ahenda külgriba", - "openSidebar": "Ava külgriba", "confirmCloseHost": "Kas sulgeda {{host}}?", - "enterFullscreen": "Mine täisekraanile (Ctrl+Shift+F)", - "exitFullscreen": "Välju täisekraanist (Ctrl+Shift+F)", - "group": { - "objects": "Sinu", - "tools": "Tööriistad", - "system": "Süsteem" - }, - "searchEverything": "Otsi peremeesmärke, kaarte ja tegevusi", - "search": "Otsi", "hiddenCount_one": "{{count}} peidetud", "hiddenCount_other": "{{count}} peidetud", - "showInRail": "Kuva külgribal", - "moveUp": "Liiguta üles", - "moveDown": "Liiguta alla", - "resetRailOrder": "Järjestuse lähtestamine", - "hideFromRail": "Peida külgribalt", - "openSettings": "Ava seaded", "settings": "Seaded", "manage": "Halda", - "mobileNavigation": "Navigatsioon", "plugins": "Pistikprogrammid" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "Importimine lõpetatud: {{imported}} imporditud, {{updated}} uuendatud, {{failed}} ebaõnnestunud", "importHostsFailed": "Hostide importimine ebaõnnestus" }, - "commandPalette": { - "searchPlaceholder": "Otsi hoste, käske või seadeid...", - "quickActions": "Kiired toimingud", - "navigation": "Navigatsioon", - "orShortcut": "või", - "addNewHost": "Lisa uus host", - "adminSettings": "Haldaja seaded", - "addCredential": "Lisa sisselogimisandmed", - "recentActivity": "Viimane tegevus", - "serversAndHosts": "Serverid ja hostid", - "noHostsFound": "Otsingule \"{{search}}\" ei leitud ühtegi hosti", - "links": "Lingid", - "navigate": "Navigeerimine", - "select": "Vali", - "pluginActions": "Rohkem toiminguid", - "noTargetTab": "Ühtegi terminali vahelehte pole avatud", - "documentation": "Dokumentatsioon" - }, "splitScreen": { "title": "Jagatud ekraan", "defaultLabel": "Jagamine {{number}}", "splitRight": "Jaga paremale", "splitDown": "Jaga alla", - "addToSplit": "Lisa jagamisse {{split}}", "paneEmptyItem": "Aken {{index}}: tühi", "paneItem": "Aken {{index}}: {{label}}", "paneNumber": "Aken {{index}}", - "newPaneRight": "Uus aken paremal", - "newPaneBelow": "Uus aken all", "emptyTitle": "Tühi aken", "emptyHint": "Vali siin kuvamiseks midagi. Kui see aken on valitud, avanevad kõrvapaneelist avatud elemendid siin.", "openTabs": "Avatud vahelehed", @@ -962,7 +890,6 @@ "clearPane": "Tühjenda see aken", "zoom": "Suurenda akent", "unzoom": "Taasta paigutus", - "unsplit": "Tühista jagamine", "layouts": "Paigutused", "applyLayout": "Muuda paigutust", "maxPanes_one": "Jagatud vaates võib olla kuni {{count}} paneel", @@ -971,8 +898,6 @@ "dropHere": "Lohista siia kuvamiseks", "paneActions": "Akna toimingud", "dividerHint": "Lohista suuruse muutmiseks. Topeltklõps võrdseks tegemiseks.", - "openInSplit": "Ava jagatud ekraanil", - "openInNewSplit": "Uus jagamine praeguse vahelehiga", "shortcuts": "Kiirklahvid", "shortcutNavigate": "Liigu akende vahel", "presets": { @@ -986,23 +911,6 @@ "grid6": "Kuus ruudustikus" } }, - "connections": { - "noConnections": "Ühendusi pole", - "noConnectionsDesc": "Ava terminal, failihaldur või kauglaud, et näha ühendusi siin", - "connectedFor": "Ühendatud {{duration}}", - "connected": "Ühendatud", - "disconnected": "Ühendus katkenud", - "reconnect": "Ühenda uuesti", - "sectionOpen": "Avatud", - "sectionBackground": "Taustal", - "backgroundDesc": "Seansid püsivad {{minutes}} minutit pärast ühenduse katkemist ja neile saab uuesti ühenduda.", - "expiresIn": "Aegub {{duration}} pärast", - "search": "Otsi ühendusi...", - "noSearchResults": "Ühtegi ühendust ei leitud", - "rename": "Nimeta seanss ümber", - "forgetConfirm": "Kas lõpetada taustaseanss hostile {{name}}?", - "forget": "Lõpeta seanss" - }, "sshAuth": { "totpRequired": "Nõutav kaheastmeline autentimine", "totpCodeLabel": "Kinnituskood", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "võtmega seotud salasõna", "pastePrivateKey": "Kleepi oma privaatvõti siia...", - "enterPassword": "Sisesta oma salasõna", - "apiKeyName": "nt CI Pipeline", - "credentialName": "nt Tootmise SSH võti", - "optionalDetails": "Valikulised üksikasjad...", - "sshUsername": "nt root või deploy", - "hostAddress": "10.0.0.1 või example.com", - "hostName": "nt Tootmise veebiserver" + "enterPassword": "Sisesta oma salasõna" }, "dashboard": { - "title": "Juhtpaneel", - "github": "GitHub", - "reportBug": "Teata veast", - "discord": "Discord", - "docs": "Dokumentatsioon", - "donate": "Anneta", - "serverOverview": "Serveri ülevaade", - "version": "Versioon", "updateAvailable": "Uuendus saadaval", - "beta": "Beeta", - "uptime": "Tööaeg", - "database": "Andmebaas", - "healthy": "Töökorras", - "error": "Viga", - "totalHosts": "Hoste kokku", - "totalCredentials": "Tunnusteid kokku", - "recentActivity": "Viimane tegevus", - "reset": "Lähtesta", - "noRecentActivity": "Viimastel hetkedel tegevust ei olnud", - "quickActions": "Kiired toimingud", - "addHost": "Lisa host", - "addCredential": "Lisa tunnus", - "adminSettings": "Administraatori seaded", - "userProfile": "Kasutaja profiil", - "serverStats": "Serveri statistika", - "customizeLayout": "Juhtpaneeli kohandamine", - "justNow": "just nüüd" + "beta": "Beeta" }, "dashboardTab": { "stable": "STABIILNE", - "registerNewServer": "Registreeri uus server", - "storeSshKeysOrPasswords": "Salvesta SSH võtmed või salasõnad", - "manageUsersAndRoles": "Halda kasutajaid ja rolle", - "manageYourAccount": "Halda oma kontot", - "hostStatus": "Hosti olek", - "noHostsConfigured": "Hoste pole konfigureeritud", - "checking": "KONTROLLITAV", - "commandPalette": "Käskude palett", - "done": "Valmis", - "clear": "Tühjenda", - "dragToResizeColumns": "Veergude suuruse muutmiseks lohista", - "hostsAvailable": "Saadaval olevad hostid", - "removeSection": "Eemalda sektsioon", - "addSection": "Lisa sektsioon", - "allSectionsShown": "Kõik on juba töölaual.", - "fromPlugins": "Pärast pistikprogramme", - "dropHere": "Lohista sektsioon siia", - "dragToReorder": "Sektsioonide järjekorra muutmiseks lohista neid", - "clearActivityConfirm": "Kas tühjendada hiljutine tegevus?", - "resetConfirm": "Kas taastada töölaud vaikepaigutusele?", "onlineCount_one": "{{count}} online", "onlineCount_other": "{{count}} online", "hostCount_one": "{{count}} host", "hostCount_other": "{{count}} hosti" }, "admin": { - "sectionGeneral": "Üldine", - "sectionUsers": "Kasutajad", - "sectionSessions": "Sessioonid", - "sectionRoles": "Rollid", - "sectionDatabase": "Andmebaas", - "sectionApiKeys": "API-klahvid", - "sectionAuditLog": "Auditilogi", - "sectionSsl": "HTTPS-sertifikaat", - "sectionBranding": "Valge silt", - "brandingAppName": "Rakenduse nimi", - "brandingAppNameDesc": "Kuvatakse sisselogimise ekraanil ja brauseri vahekaardil. Jäta tühjaks, kui soovid kasutada \"Termix\".", - "brandingTagline": "Pealkiri", - "brandingTaglineDesc": "Kuvatakse sisselogimise ekraanil rakenduse nime all. Jäta tühjaks, kui soovid kasutada vaikepealkirja.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG või WEBP, kuni 750 KB. Asendab vaikeikooni sisselogimise ekraanil ja brauseri vahekaardil.", - "brandingLogoUpload": "Laadi logo üles", - "brandingLogoReset": "Taasta vaikeversioon", - "brandingLogoInvalid": "Kehtetu pilt. Kasuta PNG, JPEG või WEBP faili, mis ei ületa 750 KB.", - "brandingSaved": "Brändimise seaded salvestatud", - "brandingSaveFailed": "Brändimise seadete salvestamine ebaõnnestus", - "sslDescription": "Sertifikaat, mida Termix HTTPS-i kaudu teenindab. Laadi siia oma sertifikaat või hanki ja uuenda sertifikaat Let's Encryptist ACME sertifikaatide sektsioonis.", - "sslDocsLink": "Vaata SSL-dokumentatsiooni", - "sslCertStatus": "Sertifikaadi olek", - "sslCertStatusNone": "Sertifikaati pole", - "sslCertStatusValid": "Kehtiv", - "sslCertStatusExpiring": "Aegub peagi", - "sslCertStatusExpired": "Aegunud", - "sslCertExpiresAt": "Aegub {{date}}", - "sslInfoNote": "Pärast sertifikaadi väljastamist või üleslaadimist lubab Termix HTTPS-i automaatselt SSL_PORT-i (vaikeväärtus 8443) lisaks olemasolevale HTTP-pordile. Veendu, et see port on konteinerist välja viidud/mahendatud, et see oleks ligipääsetav.", - "sslManualCert": "Sertifikaat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Privaatne võti (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Kleepi oma olemasolev sertifikaat ja privaatne võti, sealhulgas täielik ahel, kui seda nõuab sinu sertifitseerimisasutus.", - "sslManualUpload": "Laadi sertifikaat üles ja paigalda", - "sslManualUploadLoading": "Sertifikaadi üleslaadimine...", - "sslManualUploadSuccess": "Sertifikaat laaditi üles ja paigaldati edukalt", - "sslManualUploadFailed": "Sertifikaadi üleslaadimine ebaõnnestus", - "sslManualRequiresFields": "Sertifikaat ja privaatne võti on kohustuslikud", - "auditLogTotal": "Kokku {{total}} kirjet", - "auditLogEmpty": "Auditilogi kirjeid ei leitud", - "auditLogSuccess": "Edukas", - "auditLogFailed": "Ebaõnnestunud", - "auditLogClearFilters": "Tühjenda filtrid", - "auditLogPage": "Lehekülg {{page}} / {{totalPages}} (kokku {{total}})", - "auditLogIp": "IP", - "auditLogResourceId": "Resursi ID", - "auditLogFilterUser": "Kasutaja", - "auditLogFilterAction": "Tegevus", - "auditLogFilterResourceType": "Ressursi tüüp", - "auditLogFilterStatus": "Olek", - "auditLogFilterFrom": "Alates", - "auditLogFilterTo": "Kuni", - "auditLogFilterAll": "Kõik", - "allowRegistration": "Luba kasutajate registreerimine", - "allowRegistrationDesc": "Luba uutel kasutajatel endal kasutajanime ja parooliga registreeruda", - "allowPasswordLogin": "Luba parooliga sisselogimine", - "allowPasswordLoginDesc": "Sisselogimine kasutajanime ja parooliga", - "externalAutoProvision": "Loo välised kontod automaatselt", - "externalAutoProvisionDesc": "Loo konto esmakordsel sisselogimisel välise sisselogimismeetodi (nagu SSO või LDAP) kaudu. Kui see on välja lülitatud, saavad nii sisse logida ainult need, kellel on juba konto olemas.", - "secondFactorAfterExternalLogin": "Küsi teist autentimisetappi pärast väliseid sisselogimisi (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Kui välja lülitatud, küsitakse registreeritud teist autentimisetappi ainult parooli ja muude kohalike sisselogimiste järel, nagu varemgi. Kui sisse lülitatud, küsitakse seda iga sisselogimismeetodi järel, sealhulgas SSO ja LDAP puhul.", - "allowPasswordReset": "Luba parooli lähtestamine", - "allowPasswordResetDesc": "Lähtestuskood Dockeri logide kaudu", - "auditForwardingTitle": "Edasta SIEM-ile", - "auditForwardingDesc": "Saada iga auditikirje koopia välisele kogujale NDJSON-vormingus. Kohalikud logid jäävad tõekspaaneks.", - "auditForwardingEnvNotice": "Edastamist saab seadistada ka keskkonnamuutuja abil; siin salvestatud URL on prioriteetsem.", - "auditForwardingToken": "Bearer-token (valikuline)", - "auditForwardingTokenStored": "Bearer-token (salvestatud)", - "auditForwardingSaved": "Auditiedastuse seaded salvestatud", - "auditForwardingSaveError": "Auditiedastuse seadete salvestamine ebaõnnestus", - "sessionTimeout": "Sessiooni aegumine", - "hours": "tundi", - "sessionTimeoutRange": "Min 1h, max 720h", - "monitoringDefaults": "Jälgimise vaikeväärtused", - "statusCheck": "Oleku kontroll", - "sec": "sek", - "logLevel": "Logitase", "usersCount_one": "{{count}} kasutaja", - "usersCount_other": "{{count}} kasutajat", - "searchUsers": "Otsi kasutajaid...", - "noUsers": "Kasutajaid pole", - "noUsersMatch": "Ükski kasutaja ei vasta teie otsingule", - "pageOf": "Lehekülg {{page}} / {{total}}", - "createUser": "Loo", - "newRole": "Uus roll", - "roleName": "Nimi", - "roleDisplayName": "Kuvanimi", - "roleDescription": "Kirjeldus", "rolesCount_one": "{{count}} roll", - "rolesCount_other": "{{count}} rolli", - "createRole": "Loo", - "creating": "Loomine...", - "exportDatabase": "Ekspordi andmebaas", - "exportDatabaseDesc": "Laadi alla kaasaskantav SQLite-varundus kõigist hostidest, autentimisandmetest ja seadetest", - "export": "Ekspordi", - "exporting": "Ekspordimine...", - "importDatabase": "Impordi andmebaas", - "importDatabaseDesc": "Taasta kaasaskantavast .sqlite-varundusest mis tahes andmebaasitaustal", - "importDatabaseSelected": "Valitud: {{name}}", - "selectFile": "Vali fail", - "changeFile": "Muuda", - "import": "Impordi", - "importing": "Importimine...", "apiKeysCount_one": "{{count}} võti", - "apiKeysCount_other": "{{count}} võtit", - "apiKeysDocsLink": "Vaata dokumentatsiooni", - "apiKeysCliHint": "Kasuta API-võtit Termix CLI-ga, et hallata servereid oma terminalist.", - "apiKeysCliLink": "Vaata CLI dokumentatsiooni", - "newApiKey": "Uus API-võti", - "apiKeyCreatedWarning": "Võti loodud – kopeeri see kohe, seda enam ei näidata.", - "apiKeyName": "Nimi", - "apiKeyUser": "Kasutaja", - "apiKeySelectUser": "Vali kasutaja...", - "apiKeyExpiresAt": "Aegumine", - "createKey": "Loo võti", - "apiKeyNoExpiry": "Ei aegu", - "revokedBadge": "TÜHISTATUD", - "authTypeDual": "Kaheastmeline autentimine", - "authTypeExternal": "Väline", - "authTypeLocal": "Kohalik", - "adminStatusAdministrator": "Haldur", - "adminStatusRegularUser": "Tavaline kasutaja", - "adminBadge": "HALDUR", - "systemBadge": "SÜSTEEM", - "customBadge": "KOHANDATUD", - "youBadge": "SINA", "sessionsActive_one": "{{count}} aktiivne", - "sessionsActive_other": "{{count}} aktiivset", - "sessionActive": "Aktiivne: {{time}}", - "sessionExpires": "Aegumine: {{time}}", - "revokeAll": "Kõik", - "revokeAllSessionsSuccess": "Kõik kasutaja sessioonid tühistatud", - "revokeAllSessionsFailed": "Sessioonide tühistamine ebaõnnestus", - "revokeSessionFailed": "Sessiooni tühistamine ebaõnnestus", - "addRole": "Lisa roll", - "noCustomRoles": "Kohandatud rolle pole määratletud", - "removeRoleFailed": "Rolli eemaldamine ebaõnnestus", - "assignRoleFailed": "Rolli määramine ebaõnnestus", - "userAdminAccess": "Haldur", - "userAdminAccessDesc": "Täielik juurdepääs kõigile haldusseadistustele", - "userRoles": "Rollid", - "revokeAllUserSessions": "Tühista kõik sessioonid", - "revokeAllUserSessionsDesc": "Süvita sisselogimine kõigil seadmetel", - "revoke": "Tühista", - "deleteUserWarning": "Selle kasutaja kustutamine on pöördumatu.", - "deleteUser": "Kustuta {{username}}", - "deleting": "Kustutamine...", - "deleteUserFailed": "Kasutaja kustutamine ebaõnnestus", - "deleteUserSuccess": "Kasutaja \"{{username}}\" kustutatud", - "deleteRoleSuccess": "Roll \"{{name}}\" kustutatud", - "revokeKeySuccess": "Võti \"{{name}}\" tühistatud", - "revokeKeyFailed": "Võtmega tühistamine ebaõnnestus", - "copiedToClipboard": "Kopeeritud lõikelauale", - "done": "Valmis", - "createUserTitle": "Loo kasutaja", - "createUserDesc": "Loo uus kohalik konto.", - "createUserUsername": "Kasutajanimi", - "createUserPassword": "Parool", - "createUserPasswordHint": "Vähemalt 6 tähemärki.", - "createUserEnterUsername": "Sisesta kasutajanimi", - "createUserSubmit": "Loo kasutaja", - "editUserTitle": "Kasutaja haldamine: {{username}}", - "editUserDesc": "Muuda rolle, haldusstaatust, sessioone ja konto seadeid.", - "editUserUsername": "Kasutajanimi", - "editUserAuthType": "Autentimistüüp", - "editUserAdminStatus": "Haldusstaatus", - "editUserUserId": "Kasutaja ID", - "linkAccountTitle": "Kontode sidumine", - "linkAccountDesc": "Liida väline konto {{username}} olemasoleva kohaliku kontoga.", - "linkAccountDescLocal": "Seo kohalik konto {{username}} olemasoleva ainult välise kontoga.", - "linkAccountWarningTitle": "See toimub:", - "linkAccountEffect1": "Väline konto kustutatakse", - "linkAccountEffect2": "Väline sisselogimine lisatakse sihtkontole", - "linkAccountEffect3": "Lubatakse nii väline kui ka parooliga sisselogimine", - "linkAccountTargetUsername": "Kohaliku konto kasutajanimi", - "linkAccountTargetPlaceholder": "Sisestage kohaliku konto kasutajanimi, millega seostada", - "linkAccountExternalUsername": "Välise konto kasutajanimi", - "linkAccountExternalPlaceholder": "Sisestage ainult välise konto kasutajanimi, mis ühendada", - "linkAccountExternalNotFound": "Selle kasutajanimega ainult välist kontot ei leitud", - "linkAccounts": "Kontode seostamine", - "linkAccountSuccess": "Kontod seostati edukalt", - "linkAccountFailed": "Kontode seostamine ebaõnnestus", - "linkAccountInProgress": "Seostamine...", - "unlinkAccountTitle": "Välise sisselogimise lahutamine", - "unlinkAccountDesc": "Eemalda väline sisselogimine kasutajalt {{username}}. Seejärel saab ta sisse logida ainult parooliga.", - "unlinkAccountWarning": "See eemaldab sellelt kontolt välise sisselogimise. Kasutajal peab olema parool määratud, et ta saaks jätkuvalt sisse logida.", - "unlinkAccount": "Välise sisselogimise lahutamine", - "unlinkAccountInProgress": "Lahutamine...", - "unlinkAccountSuccess": "Väline sisselogimine lahutati", - "unlinkAccountFailed": "Välise sisselogimise lahutamine ebaõnnestus", - "updateRegistrationFailed": "Registreerimise seadistuse uuendamine ebaõnnestus", - "updatePasswordLoginFailed": "Parooliga sisselogimise seadistuse uuendamine ebaõnnestus", - "updateSecondFactorAfterExternalLoginFailed": "Teise teguri seadistuse uuendamine ebaõnnestus", - "updatePasswordResetFailed": "Parooli lähtestamise seadistuse uuendamine ebaõnnestus", - "sessionTimeoutRange2": "Seansi aegumisaeg peab olema vahemikus 1–720 tundi", - "sessionTimeoutSaved": "Seansi aegumisaeg salvestati", - "sessionTimeoutSaveFailed": "Seansi aegumise aja salvestamine ebaõnnestus", - "monitoringIntervalInvalid": "Kehtivad vaatlusintervallid", - "monitoringSaved": "Jälgimise seadistused salvestati", - "monitoringSaveFailed": "Jälgimise seadistuste salvestamine ebaõnnestus", - "logLevelUpdateFailed": "Logitase uuendamine ebaõnnestus", - "createUserRequired": "Kasutajanimi ja parool on kohustuslikud", - "createUserPasswordTooShort": "Parool peab olema vähemalt 6 tähemärki pikk", - "createUserSuccess": "Kasutaja \"{{username}}\" loodi", - "createUserFailed": "Kasutaja loomine ebaõnnestus", - "updateAdminStatusFailed": "Administraatori staatuse uuendamine ebaõnnestus", - "allSessionsRevoked": "Kõik seansid tühistati", - "revokeSessionsFailed": "Seanside tühistamine ebaõnnestus", - "manageUserData": "Kasutaja andmete haldamine", - "backToUsers": "Tagasi kasutajate juurde", - "manageTabAccount": "Konto", - "manageTabHosts": "Pered", - "manageTabCredentials": "Logimisandmed", - "manageTabSessions": "Seansid", - "manageTabDanger": "Ohtlik", - "manageEditorBack": "Tagasi {{username}} andmete juurde", - "dataLockedBadge": "LUKUS", - "dataLockedNotice": "{{username}} andmed jäävad lukku, kuni ta järgmine kord sisse logib. Kuni selle ajani ei saa tema peresid, logimisandmeid ega koodilõike vaadata ega muuta.", - "resetPasswordTitle": "Parooli lähtestamine", - "resetPasswordExternalOnly": "See kasutaja logib sisse välise pakkujaga ja tal puudub parool.", - "resetPasswordPlaceholder": "Uus parool", - "resetPasswordBtn": "Lähtesta", - "resetPasswordWorking": "Lähtestamine...", - "resetPasswordSuccess": "Parool lähtestati", - "resetPasswordSuccessWiped": "Parool lähtestati. Kasutaja krüpteeritud andmed kustutati.", - "resetPasswordFailed": "Parooli lähtestamine ebaõnnestus", - "resetPasswordConfirmWipe": "{{username}} ei ole krüpteerimise uuendusest saati sisse loginud, seega ei saa tema andmeid taastada. Lähtestamine nühi kustutab tema pered, logimisandmed ja koodilõiked. Kas jätkata?", - "manageApiKeys": "API-klahvid", - "apiKeyNamePlaceholder": "Klahvi nimi", - "apiKeyCopyNotice": "Kopeerige see klahv kohe, seda ei näidata enam kunagi.", - "noApiKeysForUser": "Ühtegi API- võtit pole", - "apiKeyDeleteFailed": "API-võtme kustutamine ebaõnnestus", - "exportUserData": "Andmete eksport", - "exportUserDataDesc": "Laadi alla selle kasutaja hostid, sisselogimisandmed ja failihalduri andmed JSON-vormingus. Saladused dekrüpteeritakse.", - "exportUserDataSuccess": "Kasutaja andmed eksporditud", - "exportUserDataFailed": "Kasutaja andmete eksportimine ebaõnnestus", "hostsCount_one": "{{count}} host", "hostsCount_other": "{{count}} hosti", - "addHostForUser": "Lisa host", - "noHostsForUser": "Sellel kasutajal pole hoste", - "connectToHost": "Ühendu", - "deleteHostConfirm": "Kustutada host \"{{name}}\", mis kuulub kasutajale {{username}}?", - "hostDeletedSuccess": "Host kustutatud", - "hostDeleteFailed": "Hosti kustutamine ebaõnnestus", "credentialsCount_one": "{{count}} sisselogimisandme komplekt", "credentialsCount_other": "{{count}} sisselogimisandme komplekti", - "addCredentialForUser": "Lisa sisselogimisandmed", - "noCredentialsForUser": "Sellel kasutajal pole sisselogimisandmeid", - "deleteCredentialConfirm": "Kustutada sisselogimisandmed \"{{name}}\", mis kuuluvad kasutajale {{username}}?", - "credentialDeletedSuccess": "Sisselogimisandmed kustutatud", - "credentialDeleteFailed": "Sisselogimisandmete kustutamine ebaõnnestus", - "noSessionsForUser": "Aktiivseid seansse pole", - "deleteSuccessorLabel": "Anna hostid ja sisselogimisandmed üle kasutajale", - "deleteSuccessorMe": "Minu (kustutav haldur)", - "deleteSuccessorNone": "Keegi ei saa, kustuta need", - "deleteSuccessorDesc": "Kõik, mida see kasutaja jagas, töötab uue omaniku all; kui valite kedagi, eemaldatakse nende hostid, sisselogimisandmed ja jagamised.", - "deleteUserDangerDesc": "Kustuta {{username}} ja kõik tema andmed (hostid, sisselogimisandmed, koodilõigud, ajalugu) püsivalt. Seda ei saa tagasi pöörata.", - "deleteUserConfirm": "Kustutada {{username}} ja kõik tema andmed püsivalt?", - "deleteUserAdminBlocked": "Eemalda halduri staatus enne selle kasutaja kustutamist.", - "createRoleRequired": "Nimi ja kuvanimi on kohustuslikud", - "createRoleSuccess": "Roll \"{{name}}\" loodud", - "createRoleFailed": "Rolli loomine ebaõnnestus", - "apiKeyNameRequired": "Võtme nimi on kohustuslik", - "apiKeyUserRequired": "Kasutaja ID on kohustuslik", - "apiKeyCreatedSuccess": "API-võti \"{{name}}\" loodud", - "apiKeyCreateFailed": "API-võtme loomine ebaõnnestus", - "exportSuccess": "Andmebaas edukalt eksporditud", - "exportFailed": "Andmebaasi eksportimine ebaõnnestus", - "importSelectFile": "Palun vali esmalt fail", - "importCompleted": "Import lõpetatud: {{total}} elementi imporditud, {{skipped}} jäetud vahele", - "importFailed": "Import ebaõnnestus: {{error}}", - "importError": "Andmebaasi importimine ebaõnnestus", - "sectionHostDefaults": "Hostide vaikimisi seaded", "rolePermissions": { "count_one": "{{count}} luba", - "count_other": "{{count}} luba", - "editAction": "Muuda õigusi", - "loadError": "Õiguste kataloogi laadimine ebaõnnestus", - "saved": "Rolli õigused salvestatud", - "saveError": "Rolli õiguste salvestamine ebaõnnestus", - "save": "Salvesta", - "saving": "Salvestamine...", - "pluginDisabled": "Pistikprogramm keelatud", "groups": { "hosts": "Hostid", "credentials": "Sisselogimisandmed", "admin": "Haldus" } - }, - "notificationPrivateEndpoints": "Lubatud privaatne teavituste hostid", - "notificationPrivateEndpointsDesc": "Täpsed privaatne hostid, mida teavituskanalid võivad kontaktida. Eralda need komadega.", - "updateNotificationEndpointsFailed": "Teavituste lõpp-punktide lubade nimekirja uuendamine ebaõnnestus", - "secondFactorsSectionTitle": "Teised tegurid", - "secondFactorsNone": "Teisi tegureid pole registreeritud", - "secondFactorUnavailable": "Saadaval pole", - "resetSecondFactors": "Lähtesta teised tegurid", - "resetSecondFactorsConfirm": "Eemaldada kõik teised tegurid kasutajale {{username}}? Nad saavad sisse logida oma parooli või SSO abil ja uuesti registreeruda.", - "secondFactorsResetSuccess": "Teise astme autentimine lähtestatud", - "secondFactorsResetFailed": "Teise astme autentimise lähtestamine ebaõnnestus", - "passwordLoginForced": "Parooliga sisselogimine on väljalülitatud, kuid ühtegi muud sisselogimise meetodit pole lubatud, seega jääb see hetkel sisse lülitatuks. Keegi ei jää lukku.", - "sslNotRenewed": "Ühtegi teenust ei uuenda seda sertifikaati. See aegub {{date}}. Lülita automaatne uuendamine sisse ACME sertifikaatide jaotisest või lae enne seda aega üles uus sertifikaat.", - "sslSelfSigned": "Termixi poolt loodud isesertifitseeritud sertifikaat. Brauserid hoiatavad selle eest.", - "sslRenewedBy": "Automaatselt uuendatud pluginaga {{plugin}}", - "sslIssuer": "Välja andnud {{issuer}}", - "sslNames": "Kattev {{names}}", - "sslManualTitle": "Sertifikaadi üleslaadimine", - "updateExternalAutoProvisionFailed": "Automaatse loomise seadistuse uuendamine ebaõnnestus", - "hostTags": "Eelnevalt määratletud peremeesarvuti sildid", - "hostTagsDesc": "Sildid, mida iga kasutaja näeb ettepanekutena peremeesarvuti redaktoril. Vajuta tühikut või Enterit, et lisada üks. Sildi eemaldamine siit ei eemalda seda peremeesarvutitest.", - "hostTagsError": "Peremeesarvuti siltide ettepanekute laadimine või salvestamine ei õnnestunud.", - "revokeAllSessionsConfirm": "Kasutaja {{username}} väljalogimine kõikjalt?", - "revokeSessionConfirm": "Kas selle sessiooni väljalogimine?", - "revokeSession": "Väljalogi", - "deleteRoleConfirm": "Kas rolli {{name}} kustutamine?", - "revokeKeyConfirm": "Kas API võtit {{name}} keelatakse?", - "revokeKey": "Keela" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Kus", - "who": "Kes", - "hostLabel": "Peremeesarvuti", - "hostPlaceholder": "192.168.1.1 või example.com", - "portLabel": "Port", - "usernameLabel": "Kasutajanimi", - "usernamePlaceholder": "kasutajanimi", - "authLabel": "Autentimine", - "passwordLabel": "Parool", - "passwordPlaceholder": "parool", - "privateKeyLabel": "Privaatvõti", - "privateKeyPlaceholder": "Kleebi privaatsvõti...", - "credentialLabel": "Logimisandmed", - "credentialPlaceholder": "Vali salvestatud logimisandmed", - "protocolLabel": "Protokoll", - "domainLabel": "Domeen", - "domainPlaceholder": "valikuline", - "connectToAction": "Ühendu {{name}}-ga", - "sshProtocol": "SSH", - "noTarget": "Ühtegi paigaldatud teenust ei saa selle peremeesarvuti tüübiga ühenduda" + "usernameLabel": "Kasutajanimi" }, "keybindings": { - "description": "Seosta klahvid tegevustega terminaalil ja rakenduses või muuda sisseehitatud otseteid.", - "defaultsHeading": "Sisseehitatud otseteed", - "fixedHeading": "Rakenduse otseteed", - "fixed": { - "splitRight": "Jaga paremale", - "splitDown": "Jaga alla", - "zoomPane": "Suurenda fookuses olevat akent", - "navigatePane": "Liigu akende vahel", - "nextTab": "Järgmine vaheleht", - "previousTab": "Eelmine vaheleht", - "jumpTab": "Hüppa vahelehele", - "previousView": "Tagasi eelmisele külgriba vaatele", - "fullscreen": "Kogu ekraani režiimi lülitamine" - }, - "customHeading": "Kohandatud otseteed", - "addBinding": "Lisa otsetee", - "addBindingTitle": "Lisa otsetee", - "editBindingTitle": "Muuda otseteed", - "loading": "Laadimine...", - "noCustomBindings": "Kohandatud otseteid pole veel", - "defaultBadge": "Vaikimisi", - "customizedBadge": "Kohandatud", - "customize": "Kohanda", - "resetToDefault": "Taasta vaikeväärtused", - "resetAllToDefaults": "Taasta kõik vaikeväärtused", - "cancel": "Tühista", - "saveBinding": "Salvesta otsetee", - "saveError": "Klaviatuuri otseteide salvestamine ebaõnnestus", - "pressKeysToRecord": "Klahvikombinatsioon", - "pressKeysPlaceholder": "Klõpsa ja vajuta klahve", - "recording": "Vajuta klahve...", - "comboRequiredError": "Vajuta esmalt klahvikombinatsiooni", - "conflictWarning": "See kombinatsioon on juba seotud {{combo}}-ga. Salvestamine käivitab mõlemad.", - "actionLabel": "Tegevus", "actionNextTab": "Lülitu järgmisele vahelehele", "actionPreviousTab": "Lülitu eelmisele vahelehele", "actionOpenCommandPalette": "Ava kiire otsing", - "actionReconnectSession": "Ühenda praegune sessioon uuesti", - "unavailableAction": "{{type}} (pole saadaval)", - "actionRequiredError": "Vali esmalt tegevus", - "deleteConfirm": "Kas kustutada see klahviseade?", - "resetAllConfirm": "Kas taastada kõik klahviseaded vaikeväärtustele?" + "actionReconnectSession": "Ühenda praegune sessioon uuesti" }, "userProfile": { - "storageModeLocal": "Brauser", - "storageModeCloud": "Andmebaas", - "storageModeDescription": "Brauser salvestab seaded ainult sellesse brauserisse. Andmebaas sünkroonib serveriga ja laadub igal seadmel.", - "resetToDefaults": "Taasta vaikeväärtused", - "resetToDefaultsSuccess": "Seaded on taastatud vaikeväärtustele.", - "storageModeSwitch": "Eelistuste salvestamine", - "sectionAccount": "Konto", - "desktopProfileTitle": "Ainult see seade", - "desktopProfileDescription": "See profiil asub ainult sellel seadmel ja teeb sisselogimise iseseisvalt. Lingi see Termix serveriga, et kasutada samu hoste ja seadeid igal seadmel.", - "sectionInterface": "Liides", - "interfacePresetDesc": "Kui palju detaile Termix kuvab. Kõik funktsioonid jäävad saadavaks.", "preset_simple": "Lihtne", "preset_simple_desc": "Ainult vajalikud elemendid.", "preset_balanced": "Tasakaalustatud", "preset_balanced_desc": "Standardne paigutus.", "preset_advanced": "Täpsem", "preset_advanced_desc": "Kõik sisse lülitatud, tihedalt paigutatud.", - "presetClearOverrides": "Taasta kõik", - "presetOverridesTitle": "Kohandatud", - "presetRevertArea": "Taasta", - "presetConfirmTitle": "Kas lülituda {{preset}}-le?", - "presetConfirmDesc": "See taastab külgriba, navigatsiooni, juhtpaneeli paigutuse, terminali tööriistariba ja failihalduri vaate. Sinu hoste, usaldusandmeid ja avalehte ei muudeta.", - "presetConfirmApply": "Rakenda eelne", - "runSetupAgainDesc": "Käivita esmakordne seadistus uuesti.", - "runSetupAgainButton": "Käivita seadistus", "uiArea_chrome": "Rakenduse raam", "uiArea_hostList": "Hostide loend", "uiArea_credentialList": "Usaldusandmete loend", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Failihaldur", "uiArea_hostEditor": "Hosti redaktor", - "sectionAppearance": "Välimus", - "sectionSecurity": "Turvalisus", - "sectionApiKeys": "API võtmed", - "sectionData": "Andmed", - "usernameLabel": "Kasutajanimi", - "roleLabel": "Roll", - "roleAdministrator": "Haldur", - "authMethodLabel": "Autentimismeetod", - "authMethodLocal": "Kohalik", - "twoFaLabel": "2FA", - "twoFaOn": "Sees", - "twoFaOff": "Väljas", - "versionLabel": "Versioon", - "cliTitle": "Termix CLI", - "cliDescription": "Ava termineid, käivita käske ja liiguta faile oma enda käsurealt.", - "cliLearnMore": "Lisateave", - "deleteAccount": "Kustuta konto", - "deleteAccountDescription": "Kustuta oma konto püsivalt", - "deleteButton": "Kustuta", - "deleteAccountPermanent": "See tegevus on püsiv ja seda ei saa tagasi pöörata.", - "deleteAccountWarning": "Kõik sessioonid, hostid, usaldusandmed ja seaded kustutatakse püsivalt.", - "confirmPasswordDeletePlaceholder": "Kinnitamiseks sisesta oma parool", "languageLabel": "Keel", "themeLabel": "Teema", "fontSizeLabel": "Fondi suurus", "interfaceFontLabel": "Liidese font", "interfaceFontDescription": "Muudab rakenduse liidese fondi. Terminaali profiilid säilitavad omaenda fondi seaded.", "accentColorLabel": "Aktsentvärv", - "keyboardShortcuts": "Klaviatuuri otseteed", - "keyboardShortcutsDescription": "Kohanda terminaali kopeerimise, kleebimise ja käsu otseteesid", - "manageShortcuts": "Halda", - "commandPalette": "Käsu palett", - "commandPaletteDesc": "Luba klaviatuuri otsetee", - "reopenTabsOnLogin": "Ava sisselogimisel uuesti vahekaardid", - "reopenTabsOnLoginDesc": "Taasta oma avatud vahekaardid sisselogimisel või lehe värskendamisel, isegi teiselt seadmelt", - "confirmTabClose": "Kinnita vahekaardi sulgemine", - "confirmTabCloseDesc": "Küsi kinnitust enne terminaali vahekaartide sulgemist", - "showTabNumbers": "Kuva vahekaartide numbrid", - "showTabNumbersDesc": "Kuva iga vahekaardi peal number, et neid lihtsamini eristada", - "settingsAppRail": "Rakenduse rööp", - "sidebarSettingsMoved": "Hostide külgriba kuvamise seaded on liigutatud kohandamise paneelile, mis avatakse hostide tööriistaribalt.", - "showHostTags": "Kuva hostide sildid", - "showHostTagsDesc": "Kuva sildid hostide nimekirjas", - "statusColors": "Tegelikud olekuvärvid", - "statusColorsDesc": "Kasuta online/offline oleku jaoks rohelist/punast värvi aktsentvärvi asemel", - "pinAppRail": "Kinnita rakenduse rööp", - "pinAppRailDesc": "Hoia vasakut külgriba rakenduse rööpi alati lahtina, mitte ainult hiire kohal hõljutades", - "expandAppRailOnHover": "Laienda rakenduse rööpi hiire kohal hõljutades", - "expandAppRailOnHoverDesc": "Luba vasaku külgriba rakenduse rööbi laienemine, kui hiirekursor selle kohale liigub", - "appRailHoverPushesContent": "Lükka sisu, kui see laieneb", - "appRailHoverPushesContentDesc": "Tee ruumi laienenud ribale selle asemel, et see avaneks lehe peale. Avatud sessioonid, nagu kauglaud, muudavad oma suurust iga kord", - "showPinAppRailButton": "Kuva rakenduse rööbi kinnitamise nupp", - "showPinAppRailButtonDesc": "Kuva rakenduse rööbis nupp selle avatuks kinnitamiseks. Vaikimisi väljas.", - "settingsNavigation": "Navigatsioon", - "navigationTabsDesc": "Vali, millised vahekaardid kuvatakse rakenduse rööpis", - "settingsUpdates": "Uuendused", - "disableUpdateChecks": "Keela uuenduste kontrollimine", - "disableUpdateChecksDesc": "Peata uuenduste otsimine", - "changePassword": "Muuda parooli", - "currentPasswordLabel": "Praegune parool", - "currentPasswordPlaceholder": "Praegune parool", - "newPasswordLabel": "Uus parool", - "newPasswordPlaceholder": "Uus parool", - "confirmPasswordLabel": "Kinnita uus parool", - "confirmPasswordPlaceholder": "Kinnita uus parool", - "updatePassword": "Uuenda parooli", - "createApiKeyTitle": "Loo API-klapi", - "createApiKeyDescription": "Genereeri uus API-klapi programmeeritud juurdepääsu jaoks.", - "apiKeyNameLabel": "Nimi", - "apiKeyNamePlaceholder": "nt CI Pipeline", - "expiryDateLabel": "Aegumiskuupäev", - "optional": "valikuline", - "cancel": "Tühista", - "createKey": "Loo võti", - "apiKeyCreatedWarning": "Võti loodud – kopeeri see kohe, seda ei kuvata enam.", - "copyApiKey": "Kopeeri API-võti", - "copiedToClipboard": "Kopeeritud lõikelauale", "apiKeyCount_one": "{{count}} võti", - "apiKeyCount_other": "{{count}} võtit", - "newKey": "Uus võti", - "noApiKeys": "API-võtmeid pole veel.", - "apiKeyActive": "Aktiivne", - "apiKeyUsageHint": "Lisa oma võti päise", - "apiKeyUsageHintHeader": "välja.", - "apiKeyPermissionsHint": "Võtjad pärides loovaja kasutaja õigused.", - "exportData": "Ekspordi minu andmed", - "exportDataDesc": "Laadi alla varukoopia oma hostidest, sisselogimisandmetest ja seadetest, et need teise seadmesse üle viia", - "export": "Ekspordi", - "exporting": "Eksporditakse...", - "importData": "Impordi minu andmed", - "importDataDesc": "Taasta oma hostid, sisselogimisandmed ja seaded .sqlite-varukoopiafailist", - "importDataSelected": "Valitud: {{name}}", - "selectFile": "Vali fail", - "changeFile": "Muuda", - "import": "Impordi", - "importing": "Imporditakse...", - "exportSuccess": "Andmed eksporditi edukalt", - "exportFailed": "Andmete eksport ebaõnnestus", - "importSelectFile": "Palun vali esmalt fail", - "importCompleted": "Import lõpetatud: {{total}} elementi imporditud, {{skipped}} jäetud vahele", - "importFailed": "Import ebaõnnestus: {{error}}", - "roleUser": "Kasutaja", - "authMethodDual": "Kaheastmeline autentimine", - "authMethodExternal": "Väline", - "done": "Valmis", - "apiKeyNameRequired": "Võtme nimi on kohustuslik", - "apiKeyCreated": "API-võti \"{{name}}\" loodud", - "apiKeyCreateFailed": "API-võtme loomine ebaõnnestus", - "apiKeyUser": "Kasutaja", - "apiKeyExpires": "Aegub", - "apiKeyRevoked": "API-võti \"{{name}}\" tühistatud", - "apiKeyRevokeFailed": "API-võtme tühistamine ebaõnnestus", - "passwordFieldsRequired": "Nii praegune kui ka uus parool on kohustuslikud", - "passwordMismatch": "Paroolid ei kattu", - "passwordTooShort": "Parool peab olema vähemalt 6 tähemärki pikk", - "passwordUpdated": "Parool uuendati edukalt", - "passwordUpdateFailed": "Parooli uuendamine ebaõnnestus", - "deletePasswordRequired": "Konto kustutamiseks on parool kohustuslik", - "deleteFailed": "Konto kustutamine ebaõnnestus", - "deleting": "Kustutamine...", "colorPickerTooltip": "Ava värvivalija", "themeSystem": "Süsteem", "themeLight": "Hele", @@ -1755,18 +1122,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Sisse logitud {{server}}", - "linkedProfileDescription": "See seade kasutab sinu kontoandmeid serveris ja hoiab sinu andmete koopiat, nii et see töötab ka võrguta.", - "manageSync": "Sünkroonimise haldamine", - "setUpSync": "Seose loomine serveriga", - "settingsTabsAndShortcuts": "Vahekaardid ja otseteed", - "onBetaTitle": "Sa kasutad beetaversiooni", - "onBetaDescription": "Tänu testimise eest. Anna teada, kui midagi ei tööta.", - "tryBetaTitle": "Proovi uusi funktsioone varakult", - "tryBetaDescription": "Liitu beetaversiooni programmiga jaotises Uuendused.", - "sendBetaFeedback": "Saada beetaversiooni tagasiside", - "openUpdates": "Uuendused" + "themeGruvbox": "Gruvbox" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "{{name}} on vajalik {{list}} jaoks. Lülita need välja või eemalda need enne.", "missingDependencies": "{{name}} vajab {{list}}, mida ei ole paigaldatud.", "consentChanged": "Mida see pistikprogramm küsib, on muutunud alates viimasest vaatamisest. Vaata nimekirja uuesti.", - "upload": "{{name}} lugemine ebaõnnestus: {{error}}", - "developerMode": "Arendajarežiimi muutmine ebaõnnestus: {{error}}" + "upload": "{{name}} lugemine ebaõnnestus: {{error}}" }, "data": { "title": "Salvestatud andmed", @@ -2145,13 +1500,7 @@ "browsePlugins": "Sirvi pistikmooduleid", "loading": "Laadimine", "developer": { - "title": "Pistikmooduli arendaja režiim", - "hint": "Võimaldab administraatoritel paigaldada pistikmooduleid .tmxplug-failist Pistikmoodulite vahelehelt, ilma registri kontrollideta. Kasutage seda oma pistikmoodulite loomiseks ja testimiseks.", - "enableTitle": "Kas lülitada arendaja režiim sisse?", - "enableBody": "Administraatorid saavad paigaldada pistikmooduleid failidest, mida Termix ei ole kontrollinud. Pistikmoodul võib teha kõike, mida selle võimed lubavad, seega lülitage see sisse ainult pistikmoodulite loomise või testimise ajal.", - "enable": "Lülita sisse", - "installFromFile": "Paigalda failist", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS on määratud, seega on failist paigaldamine blokeeritud." + "installFromFile": "Paigalda failist" }, "count": { "downloads_one": "{{formatted}} allalaadimine", @@ -2189,71 +1538,7 @@ "secretSet": "Määratud", "secretNotSet": "Pole määratud", "secretReplace": "Asenda", - "pluginSettingsSaved": "Seaded salvestatud", - "pluginSettingsInvalid": "Mõnda seadet ei õnnestunud salvestada. Kontrolli esiletõstetud välju.", - "pluginSettingsSaveFailed": "Seadete salvestamine ebaõnnestus", - "pluginSettingsLoadFailed": "Seadete laadimine ebaõnnestus", - "featureUnavailable": "{{name}} ei ole praegu saadaval. Need seaded on salvestatud, kuid ei astu jõustuma.", - "account": "Konto", - "security": "Turvalisus", - "apiKeys": "API-võtmed", - "data": "Andmed ja sünkroonimine", - "interface": "Liides", - "appearance": "Välimus", - "keybindings": "Klahvikombinatsioonid", - "adminGeneral": "Üldine", - "adminUsers": "Kasutajad", - "adminSessions": "Seansid", - "adminRoles": "Rollid", - "adminHostDefaults": "Hosti vaikimisi seaded", - "adminBranding": "Bränding", - "adminDatabase": "Andmebaas", - "adminSsl": "SSL", - "adminApiKeys": "API-võtmed", - "adminAuditLog": "Auditilogi", - "bandYou": "Sinu konto", - "bandApp": "See rakendus", - "bandPlugins": "Pluginad", - "bandInstance": "See server", - "searchPlaceholder": "Otsi seadetest", - "noResults": "Ühtegi seadet ei leitud.", - "pages": "Lehed", - "instanceSettings": "Serveri seaded", - "nothingHere": "Siin pole midagi seadistada.", - "searchPage": "Otsi sellelt lehelt", - "noPageMatches": "Sellel lehel ei leitud sobivaid tulemusi.", - "updates": { - "title": "Uuendused", - "betaProgram": "Beetaversioonide programm", - "betaIntro": "Beetaversioonid on järgmise Termixi versiooni varajased eelvaated. Need ilmuvad teisipäeviti ja reedeti, kui on midagi uut proovida. Nendes võib olla vigu ja teie tagasiside aitab stabiilset versiooni paremaks muuta.", - "termixBetas": "Termixi beetaversioonid", - "termixBetasHint": "Teavita mind uutest beetaversioonidest, mitte ainult stabiilsetest versioonidest.", - "runningBetaBuild": "Kasutate beetaversiooni. Sellest loobumiseks lülitage tagasi stabiilsele pildile või installijale.", - "howToInstall": "Kuidas beetaversiooni saada", - "desktopInstall": "Laadige alla beetaversiooni installija ja installige see olemasoleva peale.", - "downloadBeta": "Laadi alla versioon {{version}}", - "dockerInstall": "Muutke oma pilt beetaversiooni sildiga ja taaskäivitage konteiner:", - "copy": "Kopeeri", - "copied": "Kopeeritud", - "copyFailed": "Kopeerimine ei õnnestunud", - "learnMore": "Lisateave beetaversioonide kohta", - "feedback": "Tagasiside", - "feedbackHint": "Leidsite vea või on teil mõte? See saadetakse otse arendajatele koos teie versiooniga täidetud.", - "sendFeedback": "Saada beetaversiooni tagasiside", - "releases": "Versioonid", - "thisVersion": "See versioon", - "newestStable": "Uusim stabiilne versioon", - "newestBeta": "Uusim beetaversioon", - "noRelease": "Praegu pole ühtegi", - "pluginBetas": "Pistikprogrammide beetaversioonid", - "pluginBetasIntro": "Iga pistikprogramm võib kasutada beetaversioone iseseisvalt. Ühe proovimiseks avage see ja vajutage Proovi beetaversiooni.", - "openPlugins": "Ava pistikprogrammid", - "waitingForStable": "Tagasi stabiilsel versioonil. Püsib versioonil {{version}}, kuni ilmub uuem stabiilne versioon.", - "backToStable": "Tagasi stabiilsele versioonile", - "allPluginsBeta": "Kasuta beetaversioone kõigi pistikprogrammide jaoks", - "allPluginsStable": "Kõik pistikprogrammid tagasi stabiilsele versioonile", - "saveFailed": "Muudatuse salvestamine ei õnnestunud" - } + "featureUnavailable": "{{name}} ei ole praegu saadaval. Need seaded on salvestatud, kuid ei astu jõustuma." }, "managerCard": { "refresh": "Värskenda", @@ -2263,83 +1548,13 @@ "filter": "Filtreeri..." }, "sync": { - "server": "Termixi server", - "account": "Konto", - "status": "Olek", - "never": "mitte kunagi", - "justNow": "just nüüd", "minutesAgo_one": "{{count}} minut tagasi", "minutesAgo_other": "{{count}} minutit tagasi", "hoursAgo_one": "{{count}} tund tagasi", "hoursAgo_other": "{{count}} tundi tagasi", - "actionFailed": "See ei õnnestunud. Proovige uuesti.", - "unlinkedTitle": "Ainult sellel seadmel", - "unlinkedBody": "Termix töötab sellel seadmel iseseisvalt. Ühendage see oma Termixi serveriga, et hoida kõik sünkroonis.", - "unlinkedPointHosts": "Teie hostid, sisselogimisandmed, koodilõigud ja seaded liiguvad teiega kaasa igale seadmele.", - "unlinkedPointOffline": "Kõik töötab endiselt, kui serverit ei saa saavutada, ja sünkroonitakse hiljem.", - "unlinkedPointAccount": "Te sisselogite oma serveri kontoga ja siin kuvatakse ka teiega jagatud hostid.", - "linkButton": "Ühenda serveriga", - "state": { - "syncing": "Sünkroonimine", - "offline": "Serverit ei saa saavutada", - "error": "Sünkroonimine peatunud", - "signedOut": "Sisselogimine lõpetatud", - "synced": "Sünkroonitud {{time}}" - }, "pending_one": "{{count}} muudatus ootab sünkroonimist", "pending_other": "{{count}} muudatust ootavad sünkroonimist", - "signInAgain": "Logi uuesti sisse", - "syncNow": "Sünkrooni nüüd", - "unlink": "Ühenduse katkestamine", - "unlinked": "See seade ei ole enam ühendatud", - "unlinkTitle": "Eemaldada seadme sidumine?", - "unlinkDescription": "Sünkroonimine peatub ja sa logid serverist välja. Teiste poolt sinuga jagatud hostid eemaldatakse sellelt seadmelt igal juhul.", - "unlinkKeepTitle": "Hoia mu andmed siin", - "unlinkKeepBody": "Sinu hostid, sisselogimisandmed ja seaded jäävad sellele seadmele ning töötavad edasi iseseisvalt.", - "unlinkRemoveTitle": "Eemalda sünkroonitud andmed", - "unlinkRemoveBody": "Kõik serverist pärit andmed eemaldatakse sellelt seadmelt. Ainult sellel seadmel hoitavad hostid jäävad alles.", - "conflictsTitle": "Konfliktid", - "conflictsDescription": "Need on muudetud nii siin kui ka serveril samaaegselt. Kasutusel on serveri versioon. Hoiab oma versiooni, et saata see serverile.", - "keepMine": "Hoia minu versioon", - "keepServer": "Hoia serveri versioon", - "errorsTitle": "Pole sünkroonitud", - "errorsDescription": "Server ei aktsepteerinud neid muudatusi. Need jäävad sellele seadmele.", - "errorPermission": "Sinu kontol serveril pole õigust seda muudatust teha.", - "retry": "Proovi uuesti", - "whatSyncs": "Mis sünkroonitakse", - "whatSyncsDescription": "Lülita välja kõik, mida soovid hoida ainult sellel seadmel.", - "coreGroup": "Termix", - "notOnServer": "Serveril seda pole", - "notOnDevice": "Sellel seadmel veel pole", - "localOnlyHint": "Sa saad hoida üksikuid hoste või kaustu ainult sellel seadmel nende seadete kaudu.", - "originTitle": "Kust ühendused algavad", - "originDescription": "Ühendu hostidega sellelt seadmelt või läbi serveri. Seda saab iga hosti jaoks eraldi muuta.", - "originLocal": "See seade", - "originRemote": "Server", - "entities": { - "hosts": "Hostid", - "sshCredentials": "Sisselogimisandmed", - "sshFolders": "Kaustad", - "userPreferences": "Eelistused", - "pluginUserSettings": "Pistikprogrammide seaded", - "sharedHosts": "Sinuga jagatud hostid", - "sharedCredentials": "Sinuga jagatud sisselogimisandmed", - "vaultProfiles": "Vaulti profiilid", - "snippetFolders": "Koodilõikude kaustad", - "snippets": "Koodilõigud", - "dashboardServiceLinks": "Teenuste lingid", - "homepageItems": "Avalehe elemendid", - "networkTopology": "Võrgukaart", - "workspaces": "Tööruumid", - "hostDefaults": "Hostide vaikimisi väärtused", - "hostDefaultsAdmin": "Serveri hostide vaikimisi väärtused", - "aiProviders": "AI pakkujad", - "homepageLayouts": "Avalehe paigutused", - "accountProfile": "Konto profiil" - }, "proxy": { - "title": "Pöördproksü", - "description": "Vajalik ainult siis, kui sinu serveri ees on näiteks Cloudflare Access või sisselogimisleht.", "headersTitle": "Lisapealised", "headersHint": "Saadetakse koos igaga serveri poole suunatud päringuga, näiteks Cloudflare Accessi teenuse token.", "headerName": "Pealise nimi", @@ -2352,8 +1567,7 @@ "username": "Kasutajanimi", "password": "Parool", "allowInvalidCertificate": "Usalda iseallkirjastatud sertifikaat", - "allowInvalidCertificateHint": "Ainult oma serveri jaoks, kui selle sertifikaat ei ole tuntud sertifitseerimisasutuselt.", - "saved": "Salvestatud" + "allowInvalidCertificateHint": "Ainult oma serveri jaoks, kui selle sertifikaat ei ole tuntud sertifitseerimisasutuselt." }, "problems": { "invalidUrl": "See ei tundu olevat veebiaadress.", @@ -2391,6 +1605,27 @@ "linking": "Seose loomine ja esimese sünkroonimise käivitamine...", "linked": "Seotud. Sinu andmeid sünkroonitakse.", "signedInAgain": "Sisse loginud. Sünkroonimine käivitati uuesti." + }, + "entities": { + "hosts": "Hostid", + "sshCredentials": "Sisselogimisandmed", + "sshFolders": "Kaustad", + "userPreferences": "Eelistused", + "pluginUserSettings": "Pistikprogrammide seaded", + "sharedHosts": "Sinuga jagatud hostid", + "sharedCredentials": "Sinuga jagatud sisselogimisandmed", + "vaultProfiles": "Vaulti profiilid", + "snippetFolders": "Koodilõikude kaustad", + "snippets": "Koodilõigud", + "dashboardServiceLinks": "Teenuste lingid", + "homepageItems": "Avalehe elemendid", + "networkTopology": "Võrgukaart", + "workspaces": "Tööruumid", + "hostDefaults": "Hostide vaikimisi väärtused", + "hostDefaultsAdmin": "Serveri hostide vaikimisi väärtused", + "aiProviders": "AI pakkujad", + "homepageLayouts": "Avalehe paigutused", + "accountProfile": "Konto profiil" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "See peremäärab oma väärtuse. Klõpsa, et kasutada uuesti {{source}} vaikimisi väärtust", "clearTitle": "Määratud sellel tasandil. Klõpsa, et tühistada ja kasutada selle asemel {{source}}", "inheritedTitle": "Järgib {{source}} vaikimisi väärtust", - "titleAdmin": "Serveri perede vaikimisi väärtused", - "titleUser": "Mu perede vaikimisi väärtused", - "titleFolder": "Kausta vaikimisi väärtused: {{name}}", - "descriptionAdmin": "Vaikimisi väärtused igale sellel serveril asuvale peremehele. Kasutaja enda, kausta või peremehe enda määratud väärtus võib siiski olla teine. Muuda välja, et määrata see siin, või tühistage, et jätta see määramata.", - "descriptionUser": "Vaikimisi väärtused kõigile sinu peremeestele, serveri omade asemel. Kaust või peremees ise võib siiski määrata teise väärtuse. Muuda välja, et määrata see siin, või tühistage, et jätta see määramata.", - "descriptionFolder": "Vaikimisi väärtused selle kausta ja selle alamkaustade peremeestele, sinu enda omade asemel. Peremees ise võib siiski määrata teise väärtuse. Muuda välja, et määrata see siin, või tühistage, et jätta see määramata.", - "save": "Salvesta vaikimisi väärtused", "saved_one": "Vaikimisi väärtused salvestatud. {{count}} peremeest uuendati.", "saved_other": "Vaikimisi väärtused salvestatud. {{count}} peremeest uuendati.", - "savedInBackground": "Vaikimisi väärtused salvestatud. Peremehi uuendatakse taustal.", "appliedToHosts_one": "{{count}} peremees uuendati uute vaikimisi väärtustega.", "appliedToHosts_other": "{{count}} peremeest uuendati uute vaikimisi väärtustega.", - "saveFailed": "Vaikimisi väärtusi ei õnnestunud salvestada", - "loadFailed": "Vaikimisi väärtusi ei õnnestunud laadida", - "confirmTitle": "Salvestada vaikimisi väärtused?", "confirmChanges_one": "{{count}} peremees järgib neid vaikimisi väärtusi ja muutub.", "confirmChanges_other": "{{count}} peremeest järgivad neid vaikimisi väärtusi ja muutuvad.", - "confirmNoChanges": "Ühtegi olemasolevat peremeest ei muutu. Uued peremeed alustavad nendega vaikimisi väärtustega.", - "menuMyDefaults": "Mu perede vaikimisi väärtused", - "folderDefaultsAction": "Kausta vaikimisi väärtused", - "adminSectionDescription": "Määra vaikimisi väärtused, mida iga sellel serveril asuv peremees järgib, igale peremehe seadistusele, sealhulgas iga pluginale. Kasutajad ja kaustad saavad määrata oma väärtused peale ja iga peremees võib ikka kasutada oma väärtust.", - "editServerDefaults": "Muuda serveri vaikimisi väärtusi", - "resetMenu": "Lähtesta", - "resetAll": "Taasta kõik vaikimisi väärtused", - "resetCore": "Taasta ühenduse ja SSH vaikimisi väärtused", "resetDone_one": "{{count}} peremeesmasin kasutab nüüd oma vaikimisi seadeid.", "resetDone_other": "{{count}} peremeesmasinat kasutavad nüüd oma vaikimisi seadeid." }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "Salvestatud. Tüüpi, et asendada." }, - "sharing": { - "revokeConfirm": "Kas eemaldada {{name}} juurdepääs?", - "revoke": "Eemalda juurdepääs" - }, "manage": { - "searchSettings": "Otsi seadeid", - "noMatchingSettings": "Ühtegi seadet ei leitud.", - "sections": "Osalused", - "sectionNeedsAttention": "Siin on midagi, mis vajab tähelepanu", "needsAttention_one": "Üks asi vajab tähelepanu.", "needsAttention_other": "{{count}} asja vajavad tähelepanu.", - "bandHost": "Peremeesmasin", - "bandFeatures": "Protokollid ja pluginad", - "bandCredential": "Tunnusandmed", - "sshConnection": "SSH-ühendus", - "errorAddressRequired": "Aadress on kohustuslik.", - "errorPortRange": "Kasuta porti vahemikus 1–65535.", - "defaults": "Vaikimisi väärtused", - "searchHosts": "Otsi peremeesmasinaid", - "searchCredentials": "Otsi tunnuseid", - "searchDefaults": "Otsi vaikimisi väärtusi", - "addCredential": "Lisa tunnusandmed", - "nothingMatches": "Ühtegi sobivat tulemust ei leitud", - "nothingYet": "Siin pole veel midagi", - "emptyHostsHint": "Lisa peremeesmasin ja see ilmub siia, sinna kausta, kuhu sa selle paned.", - "emptyCredentialsHint": "Salvestatud tunnuseid saavad kasutada kõik peremeesmasinad.", - "collapse": "Ahenda", - "expand": "Laienda", - "cannotBeUndone": "Seda ei saa tagasi võtta.", - "hostNotFound": "Seda peremeesmasinat ei leitud. Proovi loendit värskendada.", "hostCount_one": "{{count}} peremeesmasin", "hostCount_other": "{{count}} peremeesmasinat", "credentialCount_one": "{{count}} tunnus", - "credentialCount_other": "{{count}} tunnust", - "newHost": "Uus peremeesmasin", - "newCredential": "Uued tunnused", - "advanced": "Täpsemad seaded", - "pickHost": "Vali redigeerimiseks peremeesmasin", - "pickCredential": "Vali redigeerimiseks tunnus", - "pickDefaults": "Vali redigeerimiseks vaikimisi väärtuste tase", - "pickHint": "Kõik ühenduse seaded asuvad siin, gruppidesse jaotatult, et neid oleks lihtne leida." + "credentialCount_other": "{{count}} tunnust" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/fi_FI.json b/src/ui/locales/translated/fi_FI.json index 4a542f656..3a469016a 100644 --- a/src/ui/locales/translated/fi_FI.json +++ b/src/ui/locales/translated/fi_FI.json @@ -141,7 +141,6 @@ "continue": "Jatka", "error": "Virhe", "unsavedChanges": "Tallentamattomat muutokset", - "more": "Lisää", "loading": "Ladataan...", "host": "Isäntä", "selectHost": "Valitse isäntä...", @@ -154,7 +153,6 @@ "cancel": "Peruuta", "username": "Käyttäjänimi", "login": "Kirjaudu sisään", - "logout": "Kirjaudu ulos", "register": "Rekisteröidy", "password": "Salasana", "confirmPassword": "Vahvista salasana", @@ -165,8 +163,6 @@ "rename": "Nimeä uudelleen", "edit": "Muokkaa", "confirm": "Vahvista", - "next": "Seuraava", - "previous": "Edellinen", "refresh": "Päivitä", "language": "Kieli", "backendReconnected": "Palvelinyhteys palautettu", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Lue lisää jokaisesta" }, "desktopUpdates": { - "title": "Työpöytäsovellus", - "mode": "Päivitykset", - "modeHint": "Kuinka tämä sovellus hankkii uusia versioita.", - "manualModeHint": "Tätä kopiota ei voi päivittää automaattisesti, joten Termix ilmoittaa vain, kun uusi versio on saatavilla.", "modeAutomatic": "Automaattinen", "modePrompt": "Kysy ensin", "modeNever": "Ei koskaan", @@ -247,15 +239,6 @@ "onboardingTitle": "Sovelluspäivitykset", "onboardingBody": "Työpöytäsovellus voi nyt päivittää itsensä. Valitse, miten haluat uusien versioiden tulevan. Voit muuttaa tätä myöhemmin Asetukset > Päivitykset -kohdasta.", "onboardingManual": "Tämä sovelluksen kopio on asennettu tavalla, joka ei tue automaattista päivitystä, joten Termix ilmoittaa, kun uusi versio on saatavilla, ja antaa linkin sen lataamiseen.", - "status": "Versio {{version}}", - "statusIdle": "Ei vielä tarkistettu", - "statusChecking": "Tarkistetaan päivityksiä", - "statusAvailable": "Versio {{version}} on saatavilla", - "statusDownloading": "Ladataan versiota {{version}} ({{progress}} %)", - "statusReady": "Versio {{version}} on valmis. Käynnistä uudelleen asentaaksesi sen.", - "statusUpToDate": "Sinulla on uusin versio", - "statusError": "Päivitysten tarkistus epäonnistui. Yritä myöhemmin uudelleen.", - "checkNow": "Tarkista nyt", "download": "Lataa", "restart": "Käynnistä uudelleen nyt", "later": "Myöhemmin", @@ -269,26 +252,11 @@ "terminal": "Pääte", "close": "Sulje", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopioi salasana", - "copySudoPassword": "Kopioi sudo-salasana", - "passwordCopied": "Salasana kopioitu leikepöydälle", - "failedToCopyPassword": "Salasanan kopiointi epäonnistui", - "refreshTab": "Päivitä yhteys", - "renameTab": "Nimeä välilehti uudelleen", "dashboard": "Kojelauta", "quickConnect": "Pikayhteys", - "openAsTabHint": "Ctrl+klikkaus tai keskinäppäinklikkaus avataksesi välilehtenä", - "openAsTab": "Avaa välilehtenä", - "openInRightDock": "Avaa oikeassa kiinnityksessä", - "closeRightDock": "Sulje oikea kiinnitys", - "toggleRightDock": "Vaihda oikea kiinnitys", "hosts": "Isännät", "credentials": "Tunnukset", "connections": "Yhteydet", - "keepSideMenuOpen": "Pidä valikko auki", - "collapseSideMenu": "Piilota valikko", - "roleAdministrator": "Ylläpitäjä", - "roleUser": "Käyttäjä", "sync": "Synkronoi", "reconnectDisconnectedTerminals": "Yhdistä kaikki katkenneet terminaaliyhteydet", "reconnectingTerminals_one": "Yhdistetään {{count}} terminaali", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "{{count}} terminaalin uudelleenyhdistämistä ei voitu aloittaa", "fullscreenUnsupported": "Tämä selain ei tue koko näytön tilaa", "fullscreenFailed": "Koko näytön tilan vaihtaminen epäonnistui", - "resetSidebarWidth": "Palauta leveys", - "collapseSidebar": "Piilota sivupalkki", - "openSidebar": "Avaa sivupalkki", "confirmCloseHost": "Suljetaanko {{host}}?", - "enterFullscreen": "Siirry koko näytön tilaan (Ctrl+Shift+F)", - "exitFullscreen": "Poistu koko näytön tilasta (Ctrl+Shift+F)", - "group": { - "objects": "Omat", - "tools": "Työkalut", - "system": "Järjestelmä" - }, - "searchEverything": "Hae isäntiä, välilehtiä ja toimintoja", - "search": "Hae", "hiddenCount_one": "{{count}} piilotettu", "hiddenCount_other": "{{count}} piilotettua", - "showInRail": "Näytä sivupalkissa", - "moveUp": "Siirrä ylös", - "moveDown": "Siirrä alas", - "resetRailOrder": "Palauta järjestys", - "hideFromRail": "Piilota sivupalkista", - "openSettings": "Avaa asetukset", "settings": "Asetukset", "manage": "Hallinnoi", - "mobileNavigation": "Navigointi", "plugins": "Liitännäiset" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "Tuonti valmis: {{imported}} tuotu, {{updated}} päivitetty, {{failed}} epäonnistui", "importHostsFailed": "Isäntäkoneiden tuonti epäonnistui" }, - "commandPalette": { - "searchPlaceholder": "Hae isäntäkoneita, komentoja tai asetuksia...", - "quickActions": "Pikatoiminnot", - "navigation": "Navigointi", - "orShortcut": "tai", - "addNewHost": "Lisää uusi isäntä", - "adminSettings": "Ylläpitäjän asetukset", - "addCredential": "Lisää tunnistetiedot", - "recentActivity": "Viimeisin toiminta", - "serversAndHosts": "Palvelimet ja isännät", - "noHostsFound": "Ei isäntiä, jotka vastaavat hakua \"{{search}}\"", - "links": "Linkit", - "navigate": "Siirry", - "select": "Valitse", - "pluginActions": "Lisätoiminnot", - "noTargetTab": "Päätevälilehteä ei ole auki", - "documentation": "Dokumentaatio" - }, "splitScreen": { "title": "Jaettu näyttö", "defaultLabel": "Jako {{number}}", "splitRight": "Jaa oikealle", "splitDown": "Jaa alaspäin", - "addToSplit": "Lisää kohteeseen {{split}}", "paneEmptyItem": "Paneeli {{index}}: tyhjä", "paneItem": "Paneeli {{index}}: {{label}}", "paneNumber": "Paneeli {{index}}", - "newPaneRight": "Uusi paneeli oikealle", - "newPaneBelow": "Uusi paneeli alapuolelle", "emptyTitle": "Tyhjä paneeli", "emptyHint": "Valitse jotain näytettäväksi tähän. Kun tämä paneeli on valittuna, sivupalkista avaamasi kohteet avautuvat myös tähän.", "openTabs": "Avoinna olevat välilehdet", @@ -962,7 +890,6 @@ "clearPane": "Tyhjennä tämä paneeli", "zoom": "Suurenna paneelia", "unzoom": "Palauta asettelu", - "unsplit": "Poista jako", "layouts": "Asettelut", "applyLayout": "Vaihda asettelua", "maxPanes_one": "Jaettu näkymä voi sisältää enintään {{count}} paneelin", @@ -971,8 +898,6 @@ "dropHere": "Pudota näytettäväksi tähän", "paneActions": "Paneelin toiminnot", "dividerHint": "Vedä koon muuttamiseksi. Kaksoisnapsauta tasaamaan.", - "openInSplit": "Avaa jaossa", - "openInNewSplit": "Uusi jako nykyisellä välilehdellä", "shortcuts": "Pikanäppäimet", "shortcutNavigate": "Siirry paneelien välillä", "presets": { @@ -986,23 +911,6 @@ "grid6": "Kuuden ruudukko" } }, - "connections": { - "noConnections": "Ei yhteyksiä", - "noConnectionsDesc": "Avaa pääte, tiedostonhallinta tai etätyöpöytä nähdäksesi yhteydet tässä", - "connectedFor": "Yhteydessä {{duration}}", - "connected": "Yhteydessä", - "disconnected": "Yhteys katkennut", - "reconnect": "Uudelleenyhdistä", - "sectionOpen": "Avoinna", - "sectionBackground": "Taustalla", - "backgroundDesc": "Istunnot säilyvät {{minutes}} minuuttia yhteyden katkeamisen jälkeen, ja niihin voidaan muodostaa yhteys uudelleen.", - "expiresIn": "Vanhenee {{duration}} kuluttua", - "search": "Hae yhteyksiä...", - "noSearchResults": "Yhteyksiä ei löytynyt hakuehdoilla", - "rename": "Nimeä istunto uudelleen", - "forgetConfirm": "Päätetäänkö taustalla oleva istunto kohteelle {{name}}?", - "forget": "Päätä istunto" - }, "sshAuth": { "totpRequired": "Kaksivaiheinen tunnistautuminen vaaditaan", "totpCodeLabel": "Vahvistuskoodi", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "avaimen salasana", "pastePrivateKey": "Liitä yksityinen avain tähän...", - "enterPassword": "Syötä salasanasi", - "apiKeyName": "esim. CI Pipeline", - "credentialName": "esim. Tuotannon SSH-avain", - "optionalDetails": "Valinnaiset tiedot...", - "sshUsername": "esim. root tai deploy", - "hostAddress": "10.0.0.1 tai example.com", - "hostName": "esim. Tuotannon web-palvelin" + "enterPassword": "Syötä salasanasi" }, "dashboard": { - "title": "Kojelauta", - "github": "GitHub", - "reportBug": "Ilmoita virheestä", - "discord": "Discord", - "docs": "Dokumentaatio", - "donate": "Lahjoita", - "serverOverview": "Palvelimen yleiskatsaus", - "version": "Versio", "updateAvailable": "Päivitys saatavilla", - "beta": "Beta", - "uptime": "Käyttöaika", - "database": "Tietokanta", - "healthy": "Kunnossa", - "error": "Virhe", - "totalHosts": "Palvelimia yhteensä", - "totalCredentials": "Tunnuksia yhteensä", - "recentActivity": "Viimeisin toiminta", - "reset": "Nollaa", - "noRecentActivity": "Ei viimeaikaista toimintaa", - "quickActions": "Pikatoiminnot", - "addHost": "Lisää palvelin", - "addCredential": "Lisää tunnus", - "adminSettings": "Järjestelmänvalvojan asetukset", - "userProfile": "Käyttäjäprofiili", - "serverStats": "Palvelimen tilastot", - "customizeLayout": "Mukauta kojelautaa", - "justNow": "juuri nyt" + "beta": "Beta" }, "dashboardTab": { "stable": "VAKAA", - "registerNewServer": "Rekisteröi uusi palvelin", - "storeSshKeysOrPasswords": "Tallenna SSH-avaimia tai salasanoja", - "manageUsersAndRoles": "Hallinnoi käyttäjiä ja rooleja", - "manageYourAccount": "Hallinnoi tiliäsi", - "hostStatus": "Palvelimen tila", - "noHostsConfigured": "Palvelimia ei ole määritetty", - "checking": "TARKISTETAAN", - "commandPalette": "Komentovalikko", - "done": "Valmis", - "clear": "Tyhjennä", - "dragToResizeColumns": "Vedä sarakkeiden kokoa muuttaaksesi", - "hostsAvailable": "Saatavilla olevat isäntäpalvelimet", - "removeSection": "Poista osio", - "addSection": "Lisää osio", - "allSectionsShown": "Kaikki on jo kojelaudalla.", - "fromPlugins": "Liitännäisistä", - "dropHere": "Pudota osio tähän", - "dragToReorder": "Vedä osioita uudelleenjärjestääksesi niitä", - "clearActivityConfirm": "Haluatko tyhjentää viimeisimmän toimintasi?", - "resetConfirm": "Haluatko palauttaa kojelaudan oletusasetteluun?", "onlineCount_one": "{{count}} paikalla", "onlineCount_other": "{{count}} paikalla", "hostCount_one": "{{count}} isäntäpalvelin", "hostCount_other": "{{count}} isäntäpalvelinta" }, "admin": { - "sectionGeneral": "Yleiset", - "sectionUsers": "Käyttäjät", - "sectionSessions": "Istunnot", - "sectionRoles": "Roolit", - "sectionDatabase": "Tietokanta", - "sectionApiKeys": "API-avaimet", - "sectionAuditLog": "Tarkastusloki", - "sectionSsl": "HTTPS-varmenne", - "sectionBranding": "Valkoinen leima", - "brandingAppName": "Sovelluksen nimi", - "brandingAppNameDesc": "Näytetään kirjautumisnäytöllä ja selaimen välilehdellä. Jätä tyhjäksi käyttääksesi nimeä \"Termix\".", - "brandingTagline": "Tagline", - "brandingTaglineDesc": "Näytetään sovelluksen nimen alla kirjautumisnäytöllä. Jätä tyhjäksi käyttääksesi oletus-taglinea.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG tai WEBP, enintään 750 kt. Korvaa oletuskuvakkeen kirjautumisnäytöllä ja selaimen välilehdellä.", - "brandingLogoUpload": "Lataa logo", - "brandingLogoReset": "Palauta oletus", - "brandingLogoInvalid": "Virheellinen kuva. Käytä PNG-, JPEG- tai WEBP-tiedostoa, jonka koko on enintään 750 kt.", - "brandingSaved": "Brändäysasetukset tallennettu", - "brandingSaveFailed": "Brändäysasetusten tallennus epäonnistui", - "sslDescription": "Varmenne, jonka Termix tarjoaa HTTPS-yhteydellä. Lataa oma varmennes tähän tai hanki ja uusi se Let's Encryptistä ACME-varmenteet-osiossa.", - "sslDocsLink": "Näytä SSL-dokumentaatio", - "sslCertStatus": "Varmenneen tila", - "sslCertStatusNone": "Ei varmenne", - "sslCertStatusValid": "Voimassa", - "sslCertStatusExpiring": "Vanhenee pian", - "sslCertStatusExpired": "Vanhentunut", - "sslCertExpiresAt": "Vanhenee {{date}}", - "sslInfoNote": "Varmenneen myöntämisen tai lataamisen jälkeen Termix ottaa HTTPS:n käyttöön SSL_PORT-portissa (oletus 8443) olemassa olevan HTTP-portin lisäksi. Varmista, että tämä portti on julkaistu/määritetty tähän konttiin, jotta se on saavutettavissa.", - "sslManualCert": "Varmenne (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Yksityinen avain (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Liitä olemassa oleva varmennes ja yksityinen avain mukaan lukien koko ketju, jos varmenneen myöntäjä vaatii sen.", - "sslManualUpload": "Lataa ja asenna varmenne", - "sslManualUploadLoading": "Varmennetta ladattava...", - "sslManualUploadSuccess": "Varmenne ladattu ja asennettu onnistuneesti", - "sslManualUploadFailed": "Varmenneen lataus epäonnistui", - "sslManualRequiresFields": "Varmenne ja yksityinen avain ovat pakollisia", - "auditLogTotal": "{{total}} merkintää yhteensä", - "auditLogEmpty": "Tarkastuslokimerkintöjä ei löytynyt", - "auditLogSuccess": "Onnistui", - "auditLogFailed": "Epäonnistui", - "auditLogClearFilters": "Tyhjennä suodattimet", - "auditLogPage": "Sivu {{page}} / {{totalPages}} ({{total}} yhteensä)", - "auditLogIp": "IP", - "auditLogResourceId": "Resurssin ID", - "auditLogFilterUser": "Käyttäjä", - "auditLogFilterAction": "Toiminto", - "auditLogFilterResourceType": "Resurssityyppi", - "auditLogFilterStatus": "Tila", - "auditLogFilterFrom": "Alkaen", - "auditLogFilterTo": "Päättyen", - "auditLogFilterAll": "Kaikki", - "allowRegistration": "Salli käyttäjien rekisteröityminen", - "allowRegistrationDesc": "Anna uusien käyttäjien rekisteröityä itse käyttäjänimellä ja salasanalla", - "allowPasswordLogin": "Salli kirjautuminen salasanalla", - "allowPasswordLoginDesc": "Kirjautuminen käyttäjänimellä ja salasanalla", - "externalAutoProvision": "Luo ulkoiset tilit automaattisesti", - "externalAutoProvisionDesc": "Luo tili ensimmäisen kerran, kun joku kirjautuu sisään ulkoisen kirjautumistavan, kuten SSO:n tai LDAP:n, kautta. Kun tämä on pois päältä, vain jo tilin omistavat käyttäjät voivat kirjautua sisään tällä tavalla.", - "secondFactorAfterExternalLogin": "Pyydä toista todennustekijää ulkoisen kirjautumisen jälkeen (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Kun tämä on pois päältä, rekisteröityä toista todennustekijää pyydetään vain salasanan ja muiden paikallisten kirjautumistapojen jälkeen kuten ennenkin. Kun tämä on päällä, sitä pyydetään jokaisen kirjautumistavan jälkeen, mukaan lukien SSO ja LDAP.", - "allowPasswordReset": "Salli salasanan nollaus", - "allowPasswordResetDesc": "Nollauskoodi Docker-lokeista", - "auditForwardingTitle": "Reititä SIEM-järjestelmään", - "auditForwardingDesc": "Lähetä kopio jokaisesta tarkastuslokimerkinnästä ulkoiseen kerääjään NDJSON-muodossa. Paikalliset lokit pysyvät ainoana luotettavana lähteenä.", - "auditForwardingEnvNotice": "Ympäristömuuttuja voi myös määrittää reitityksen; täällä tallennettu URL-osoite on etusijalla.", - "auditForwardingToken": "Bearer-token (valinnainen)", - "auditForwardingTokenStored": "Bearer-token (tallennettu)", - "auditForwardingSaved": "Tarkastuslokien reitityksen asetukset tallennettu", - "auditForwardingSaveError": "Tarkastuslokien reitityksen asetusten tallennus epäonnistui", - "sessionTimeout": "Istunnon aikakatkaisu", - "hours": "tuntia", - "sessionTimeoutRange": "Väh. 1 t, enin. 720 t", - "monitoringDefaults": "Valvontan oletusasetukset", - "statusCheck": "Tilantarkistus", - "sec": "s", - "logLevel": "Lokitason asetus", "usersCount_one": "{{count}} käyttäjä", - "usersCount_other": "{{count}} käyttäjää", - "searchUsers": "Hae käyttäjiä...", - "noUsers": "Ei käyttäjiä", - "noUsersMatch": "Hakuehdoillasi ei löytynyt käyttäjiä", - "pageOf": "Sivu {{page}} / {{total}}", - "createUser": "Luo", - "newRole": "Uusi rooli", - "roleName": "Nimi", - "roleDisplayName": "Näyttönimi", - "roleDescription": "Kuvaus", "rolesCount_one": "{{count}} rooli", - "rolesCount_other": "{{count}} roolia", - "createRole": "Luo", - "creating": "Luodaan...", - "exportDatabase": "Vie tietokanta", - "exportDatabaseDesc": "Lataa kannettava SQLite-varmuuskopiokaikkiin isäntiin, tunnuksiin ja asetuksiin", - "export": "Vie", - "exporting": "Viedään...", - "importDatabase": "Tuo tietokanta", - "importDatabaseDesc": "Palauta kannettavasta .sqlite-varmuuskopiosta mihin tahansa tietokantataustajärjestelmään", - "importDatabaseSelected": "Valittu: {{name}}", - "selectFile": "Valitse tiedosto", - "changeFile": "Vaihda", - "import": "Tuo", - "importing": "Tuodaan...", "apiKeysCount_one": "{{count}} avain", - "apiKeysCount_other": "{{count}} avainta", - "apiKeysDocsLink": "Näytä dokumentaatio", - "apiKeysCliHint": "Käytä API-avainta Termix CLI:n kanssa hallitaksesin palvelimia terminaalista.", - "apiKeysCliLink": "Näytä CLI-dokumentaatio", - "newApiKey": "Uusi API-avain", - "apiKeyCreatedWarning": "Avain luotu – kopioi se nyt, sillä sitä ei näytetä enää uudelleen.", - "apiKeyName": "Nimi", - "apiKeyUser": "Käyttäjä", - "apiKeySelectUser": "Valitse käyttäjä...", - "apiKeyExpiresAt": "Vanhenee", - "createKey": "Luo avain", - "apiKeyNoExpiry": "Ei vanhenemisaikaa", - "revokedBadge": "PERUTTU", - "authTypeDual": "Kaksivaiheinen tunnistautuminen", - "authTypeExternal": "Ulkoinen", - "authTypeLocal": "Paikallinen", - "adminStatusAdministrator": "Ylläpitäjä", - "adminStatusRegularUser": "Normaali käyttäjä", - "adminBadge": "YLLÄPITÄJÄ", - "systemBadge": "JÄRJ.", - "customBadge": "MUKAUTETTU", - "youBadge": "SINÄ", "sessionsActive_one": "{{count}} aktiivinen", - "sessionsActive_other": "{{count}} aktiivista", - "sessionActive": "Aktiivinen: {{time}}", - "sessionExpires": "Vanhenee: {{time}}", - "revokeAll": "Kaikki", - "revokeAllSessionsSuccess": "Kaikki käyttäjän istunnot on peruttu", - "revokeAllSessionsFailed": "Istuntojen peruuttaminen epäonnistui", - "revokeSessionFailed": "Istunnon peruuttaminen epäonnistui", - "addRole": "Lisää rooli", - "noCustomRoles": "Mukautettuja rooleja ei ole määritelty", - "removeRoleFailed": "Roolin poistaminen epäonnistui", - "assignRoleFailed": "Roolin myöntäminen epäonnistui", - "userAdminAccess": "Ylläpitäjä", - "userAdminAccessDesc": "Täysi pääsy kaikkiin ylläpitoasetuksiin", - "userRoles": "Roolit", - "revokeAllUserSessions": "Peru kaikki istunnot", - "revokeAllUserSessionsDesc": "Pakota uudelleenkirjautuminen kaikilla laitteilla", - "revoke": "Peruuta", - "deleteUserWarning": "Käyttäjän poisto on pysyvä toimenpide.", - "deleteUser": "Poista {{username}}", - "deleting": "Poistetaan...", - "deleteUserFailed": "Käyttäjän poistaminen epäonnistui", - "deleteUserSuccess": "Käyttäjä \"{{username}}\" poistettu", - "deleteRoleSuccess": "Rooli \"{{name}}\" poistettu", - "revokeKeySuccess": "Avain \"{{name}}\" peruttu", - "revokeKeyFailed": "Avaimen peruuttaminen epäonnistui", - "copiedToClipboard": "Kopioitu leikepöydälle", - "done": "Valmis", - "createUserTitle": "Luo käyttäjä", - "createUserDesc": "Luo uusi paikallinen tili.", - "createUserUsername": "Käyttäjätunnus", - "createUserPassword": "Salasana", - "createUserPasswordHint": "Vähintään 6 merkkiä.", - "createUserEnterUsername": "Syötä käyttäjätunnus", - "createUserSubmit": "Luo käyttäjä", - "editUserTitle": "Hallinnoi käyttäjää: {{username}}", - "editUserDesc": "Muokkaa rooleja, ylläpitäjäoikeuksia, istuntoja ja tiliasetuksia.", - "editUserUsername": "Käyttäjätunnus", - "editUserAuthType": "Tunnistautumistyyppi", - "editUserAdminStatus": "Ylläpitäjäoikeus", - "editUserUserId": "Käyttäjä-ID", - "linkAccountTitle": "Linkitä tilejä", - "linkAccountDesc": "Yhdistä ulkoinen tili {{username}} olemassa olevaan paikalliseen tiliin.", - "linkAccountDescLocal": "Linkitä paikallinen tili {{username}} olemassa olevaan pelkästään ulkoiseen tiliin.", - "linkAccountWarningTitle": "Tämä toiminto:", - "linkAccountEffect1": "Poistaa ulkoisen tilin", - "linkAccountEffect2": "Lisää ulkoisen kirjautumistavan kohdetiliin", - "linkAccountEffect3": "Mahdollistaa kirjautumisen sekä ulkoisella tilillä että salasanalla", - "linkAccountTargetUsername": "Paikallisen tilin käyttäjänimi", - "linkAccountTargetPlaceholder": "Syötä yhdistettävän paikallisen tilin käyttäjänimi", - "linkAccountExternalUsername": "Ulkoisen tilin käyttäjänimi", - "linkAccountExternalPlaceholder": "Syötä yhdistettävän ulkoisen tilin käyttäjänimi", - "linkAccountExternalNotFound": "Ulkoista tilia ei löydy kyseisellä käyttäjänimellä", - "linkAccounts": "Yhdistä tilit", - "linkAccountSuccess": "Tilit yhdistetty onnistuneesti", - "linkAccountFailed": "Tilien yhdistäminen epäonnistui", - "linkAccountInProgress": "Yhdistetään...", - "unlinkAccountTitle": "Irrota ulkoinen kirjautumistapa", - "unlinkAccountDesc": "Poista ulkoinen kirjautumistapa käyttäjältä {{username}}. Käyttäjä voi kirjautua jatkossa vain salasanalla.", - "unlinkAccountWarning": "Tämä poistaa ulkoisen kirjautumistavan tältä tililtä. Käyttäjän on määritettävä salasana, jotta hän voi kirjautua sisään.", - "unlinkAccount": "Irrota ulkoinen kirjautumistapa", - "unlinkAccountInProgress": "Irrotetaan...", - "unlinkAccountSuccess": "Ulkoinen kirjautumistapa irrotettu", - "unlinkAccountFailed": "Ulkoisen kirjautumistavan irrottaminen epäonnistui", - "updateRegistrationFailed": "Rekisteröintiasetuksen päivittäminen epäonnistui", - "updatePasswordLoginFailed": "Salasanakirjautumisasetuksen päivittäminen epäonnistui", - "updateSecondFactorAfterExternalLoginFailed": "Toisen todennustavan asetuksen päivittäminen epäonnistui", - "updatePasswordResetFailed": "Salasanan palautusasetuksen päivittäminen epäonnistui", - "sessionTimeoutRange2": "Istunnon aikakatkaisun on oltava välillä 1–720 tuntia", - "sessionTimeoutSaved": "Istunnon aikakatkaisu tallennettu", - "sessionTimeoutSaveFailed": "Istunnon aikakatkaisun tallentaminen epäonnistui", - "monitoringIntervalInvalid": "Virheelliset väliarvot", - "monitoringSaved": "Valvontasetukset tallennettu", - "monitoringSaveFailed": "Valvontasetusten tallentaminen epäonnistui", - "logLevelUpdateFailed": "Lokitasoasetuksen päivittäminen epäonnistui", - "createUserRequired": "Käyttäjänimi ja salasana ovat pakollisia", - "createUserPasswordTooShort": "Salasanan on oltava vähintään 6 merkkiä", - "createUserSuccess": "Käyttäjä \"{{username}}\" luotu", - "createUserFailed": "Käyttäjän luominen epäonnistui", - "updateAdminStatusFailed": "Ylläpitäjän tilan päivittäminen epäonnistui", - "allSessionsRevoked": "Kaikki istunnot kumottu", - "revokeSessionsFailed": "Istuntojen kumoaminen epäonnistui", - "manageUserData": "Hallinnoi käyttäjän tietoa", - "backToUsers": "Takaisin käyttäjiin", - "manageTabAccount": "Tili", - "manageTabHosts": "Isäntäpalvelimet", - "manageTabCredentials": "Kirjautumistiedot", - "manageTabSessions": "Istunnot", - "manageTabDanger": "Vaarallinen alue", - "manageEditorBack": "Takaisin käyttäjän {{username}} tietoihin", - "dataLockedBadge": "LUKITTU", - "dataLockedNotice": "Käyttäjän {{username}} tiedot pysyvät lukittuna seuraavaan kirjautumiseen asti. Isäntäpalvelimia, kirjautumistietoja ja koodinpätkiä ei voi tarkastella tai muokata ennen sitä.", - "resetPasswordTitle": "Palauta salasana", - "resetPasswordExternalOnly": "Tämä käyttäjä kirjautuu ulkoisen palveluntarjoajan kautta eikä hänellä ole salasanaa.", - "resetPasswordPlaceholder": "Uusi salasana", - "resetPasswordBtn": "Palauta", - "resetPasswordWorking": "Palautetaan...", - "resetPasswordSuccess": "Salasana palautettu", - "resetPasswordSuccessWiped": "Salasana palautettu. Käyttäjän salattu data on poistettu.", - "resetPasswordFailed": "Salasanan palauttaminen epäonnistui", - "resetPasswordConfirmWipe": "Käyttäjä {{username}} ei ole kirjautunut sisään salauksen päivityksen jälkeen, joten hänen dataansa ei voi palauttaa. Palauttaminen nyt poistaa hänen isäntäpalvelimensa, kirjautumistietonsa ja koodinpätkänsä. Haluatko jatkaa?", - "manageApiKeys": "API-avaimet", - "apiKeyNamePlaceholder": "Avaimen nimi", - "apiKeyCopyNotice": "Kopioi tämä avain nyt, sillä sitä ei näytetä enää uudelleen.", - "noApiKeysForUser": "Ei API-avaimia", - "apiKeyDeleteFailed": "API-avaimen poistaminen epäonnistui", - "exportUserData": "Tietojen vienti", - "exportUserDataDesc": "Lataa tämän käyttäjän isäntien, kirjautumistietojen ja tiedostonhallinnan tiedot JSON-muodossa. Salasanat avataan.", - "exportUserDataSuccess": "Käyttäjän tiedot viety", - "exportUserDataFailed": "Käyttäjän tietojen vienti epäonnistui", "hostsCount_one": "{{count}} isäntä", "hostsCount_other": "{{count}} isäntää", - "addHostForUser": "Lisää isäntä", - "noHostsForUser": "Tällä käyttäjällä ei ole isäntiä", - "connectToHost": "Yhdistä", - "deleteHostConfirm": "Poistetaanko isäntä \"{{name}}\", joka kuuluu käyttäjälle {{username}}?", - "hostDeletedSuccess": "Isäntä poistettu", - "hostDeleteFailed": "Isännän poistaminen epäonnistui", "credentialsCount_one": "{{count}} tunnistetieto", "credentialsCount_other": "{{count}} tunnistetietoa", - "addCredentialForUser": "Lisää kirjautumistiedot", - "noCredentialsForUser": "Tällä käyttäjällä ei ole kirjautumistietoja", - "deleteCredentialConfirm": "Poistetaanko kirjautumistiedot \"{{name}}\", jotka kuuluvat käyttäjälle {{username}}?", - "credentialDeletedSuccess": "Kirjautumistiedot poistettu", - "credentialDeleteFailed": "Kirjautumistietojen poistaminen epäonnistui", - "noSessionsForUser": "Ei aktiivisia istuntoja", - "deleteSuccessorLabel": "Siirrä isännät ja kirjautumistiedot", - "deleteSuccessorMe": "Minulle (poistava ylläpitäjä)", - "deleteSuccessorNone": "Kellekään, poista ne", - "deleteSuccessorDesc": "Kaikki tämän käyttäjän jakamat resurssit toimivat edelleen uuden omistajan alla; jos valitset kenenkään, isännät, kirjautumistiedot ja jaot poistetaan.", - "deleteUserDangerDesc": "Poista {{username}} ja kaikki hänen tietonsa (isännät, kirjautumistiedot, koodinpätkät, historia) pysyvästi. Tätä ei voi peruuttaa.", - "deleteUserConfirm": "Poistetaanko {{username}} ja kaikki hänen tietonsa pysyvästi?", - "deleteUserAdminBlocked": "Poista ylläpitäjän oikeudet ennen käyttäjän poistamista.", - "createRoleRequired": "Nimi ja näyttönimi ovat pakollisia", - "createRoleSuccess": "Rooli \"{{name}}\" luotu", - "createRoleFailed": "Roolin luominen epäonnistui", - "apiKeyNameRequired": "Avaimen nimi on pakollinen", - "apiKeyUserRequired": "Käyttäjä-ID on pakollinen", - "apiKeyCreatedSuccess": "API-avain \"{{name}}\" luotu", - "apiKeyCreateFailed": "API-avaimen luominen epäonnistui", - "exportSuccess": "Tietokanta viety onnistuneesti", - "exportFailed": "Tietokannan vienti epäonnistui", - "importSelectFile": "Valitse ensin tiedosto", - "importCompleted": "Tuonti valmis: {{total}} kohdetta tuotu, {{skipped}} ohitettu", - "importFailed": "Tuonti epäonnistui: {{error}}", - "importError": "Tietokannan tuonti epäonnistui", - "sectionHostDefaults": "Isäntien oletusarvot", "rolePermissions": { "count_one": "{{count}} oikeus", - "count_other": "{{count}} oikeutta", - "editAction": "Muokkaa oikeuksia", - "loadError": "Oikeuskatalogin lataaminen epäonnistui", - "saved": "Roolin oikeudet tallennettu", - "saveError": "Roolin oikeuksien tallennus epäonnistui", - "save": "Tallenna", - "saving": "Tallennetaan...", - "pluginDisabled": "Liitännäinen poistettu käytöstä", "groups": { "hosts": "Isännät", "credentials": "Kirjautumistiedot", "admin": "Ylläpito" } - }, - "notificationPrivateEndpoints": "Sallitut yksityiset ilmoitusisännät", - "notificationPrivateEndpointsDesc": "Tarkat yksityiset isännät, joita ilmoituskanavat saavat ottaa yhteyttä. Erottele ne pilkuilla.", - "updateNotificationEndpointsFailed": "Ilmoitusosoitteiden sallilistan päivitys epäonnistui", - "secondFactorsSectionTitle": "Toiset tekijät", - "secondFactorsNone": "Ei rekisteröityjä toisia tekijöitä", - "secondFactorUnavailable": "Ei saatavilla", - "resetSecondFactors": "Nollaa toiset tekijät", - "resetSecondFactorsConfirm": "Poistetaanko kaikki toiset tekijät käyttäjältä {{username}}? He voivat kirjautua sisään salasanalla tai SSO:lla ja rekisteröidä uudet tekijät.", - "secondFactorsResetSuccess": "Toissijaiset tekijät nollattu", - "secondFactorsResetFailed": "Toissijaisten tekijöiden nollaaminen epäonnistui", - "passwordLoginForced": "Salasanakirjautuminen on poistettu käytöstä, mutta muita kirjautumistapoja ei ole otettu käyttöön, joten se pysyy toistaiseksi päällä. Kukaan ei jää lukkoon.", - "sslNotRenewed": "Mitään ei uusi tätä sertifikaattia. Se vanhenee {{date}}. Ota automaattinen uusiminen käyttöön ACME-sertifikaattien osiosta tai lataa uusi sertifikaatti ennen sitä.", - "sslSelfSigned": "Termixin luoma itseallekirjoitettu sertifikaatti. Selaimet varoittavat siitä.", - "sslRenewedBy": "Uusi automaattisesti {{plugin}}:n toimesta", - "sslIssuer": "Myöntäjä: {{issuer}}", - "sslNames": "Kattaa {{names}}", - "sslManualTitle": "Lataa sertifikaatti", - "updateExternalAutoProvisionFailed": "Automaattisen luomisen asetuksen päivittäminen epäonnistui", - "hostTags": "Ennalta määritellyt isäntätagit", - "hostTagsDesc": "Tagit, joita jokainen käyttäjä näkee ehdotuksina isäntämuokkaimessa. Paina välilyöntiä tai Enteriä lisätäksesi tagin. Tagin poistaminen täältä ei poista sitä isännistä.", - "hostTagsError": "Isäntätageiden ehdotuksia ei voitu ladata tai tallentaa.", - "revokeAllSessionsConfirm": "Kirjaako {{username}} ulos kaikkialta?", - "revokeSessionConfirm": "Kirjaako tämän istunnon ulos?", - "revokeSession": "Kirjaudu ulos", - "deleteRoleConfirm": "Poista rooli {{name}}?", - "revokeKeyConfirm": "Peruuta API-avain {{name}}?", - "revokeKey": "Peruuta" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Mihin", - "who": "Kuka", - "hostLabel": "Isäntä", - "hostPlaceholder": "192.168.1.1 tai example.com", - "portLabel": "Portti", - "usernameLabel": "Käyttäjänimi", - "usernamePlaceholder": "käyttäjänimi", - "authLabel": "Todennus", - "passwordLabel": "Salasana", - "passwordPlaceholder": "salasana", - "privateKeyLabel": "Yksityinen avain", - "privateKeyPlaceholder": "Liitä yksityinen avain...", - "credentialLabel": "Oikeustiedot", - "credentialPlaceholder": "Valitse tallennettu oikeustieto", - "protocolLabel": "Protokolla", - "domainLabel": "Domain", - "domainPlaceholder": "valinnainen", - "connectToAction": "Yhdistä kohteeseen {{name}}", - "sshProtocol": "SSH", - "noTarget": "Mitään asennettua ei voi yhdistää tähän isäntätyyppiin" + "usernameLabel": "Käyttäjänimi" }, "keybindings": { - "description": "Määritä näppäimet toiminnille terminaali- ja sovellusnäkymässä tai muuta sisäänrakennettuja pikanäppäimiä.", - "defaultsHeading": "Sisäänrakennetut pikanäppäimet", - "fixedHeading": "Sovelluksen pikanäppäimet", - "fixed": { - "splitRight": "Jaa oikealle", - "splitDown": "Jaa alaspäin", - "zoomPane": "Zoomaa kohdistettu paneeli", - "navigatePane": "Siirry paneelien välillä", - "nextTab": "Seuraava välilehti", - "previousTab": "Edellinen välilehti", - "jumpTab": "Hyppää välilehdelle", - "previousView": "Takaisin edelliseen sivupalkkinäkymään", - "fullscreen": "Koko näytön tilan vaihto" - }, - "customHeading": "Mukautetut pikanäppäimet", - "addBinding": "Lisää pikanäppäin", - "addBindingTitle": "Lisää pikanäppäin", - "editBindingTitle": "Muokkaa pikanäppäintä", - "loading": "Ladataan...", - "noCustomBindings": "Ei vielä mukautettuja pikanäppäimiä", - "defaultBadge": "Oletus", - "customizedBadge": "Mukautettu", - "customize": "Mukauta", - "resetToDefault": "Palauta oletusasetukset", - "resetAllToDefaults": "Palauta kaikki oletusasetukset", - "cancel": "Peruuta", - "saveBinding": "Tallenna pikanäppäin", - "saveError": "Pikanäppäinten tallennus epäonnistui", - "pressKeysToRecord": "Näppäinyhdistelmä", - "pressKeysPlaceholder": "Napsauta ja paina näppäimiä", - "recording": "Paina näppäimiä...", - "comboRequiredError": "Paina ensin näppäinyhdistelmää", - "conflictWarning": "Tämä yhdistelmä on jo määritetty toiminnolle {{combo}}. Tallentaminen saa molemmat toimimaan.", - "actionLabel": "Toiminto", "actionNextTab": "Vaihda seuraavaan välilehteen", "actionPreviousTab": "Vaihda edelliseen välilehteen", "actionOpenCommandPalette": "Avaa pikahaku", - "actionReconnectSession": "Yhdistä nykyinen istunto uudelleen", - "unavailableAction": "{{type}} (ei saatavilla)", - "actionRequiredError": "Valitse ensin toiminto", - "deleteConfirm": "Haluatko poistaa tämän näppäinsidoksen?", - "resetAllConfirm": "Haluatko palauttaa kaikki näppäinsidokset oletusasetuksiin?" + "actionReconnectSession": "Yhdistä nykyinen istunto uudelleen" }, "userProfile": { - "storageModeLocal": "Selain", - "storageModeCloud": "Tietokanta", - "storageModeDescription": "Selain tallentaa asetukset vain tähän selaimeen. Tietokanta synkronoi asetukset palvelimelle ja lataa ne mihin tahansa laitteeseen.", - "resetToDefaults": "Palauta oletusasetukset", - "resetToDefaultsSuccess": "Asetukset palautettu oletusasetuksiin.", - "storageModeSwitch": "Asetusten tallennustapa", - "sectionAccount": "Tili", - "desktopProfileTitle": "Vain tämä laite", - "desktopProfileDescription": "Tämä profiili on tällä laitteella ja kirjautuu sisään itsenäisesti. Linkitä se Termix-palvelimeen käyttääksesi samoja isäntiä ja asetuksia kaikilla laitteilla.", - "sectionInterface": "Käyttöliittymä", - "interfacePresetDesc": "Kuinka paljon yksityiskohtia Termix näyttää. Kaikki ominaisuudet pysyvät käytettävissä.", "preset_simple": "Yksinkertainen", "preset_simple_desc": "Vain välttämättömät.", "preset_balanced": "Tasapainoinen", "preset_balanced_desc": "Vakioasettelu.", "preset_advanced": "Edistynyt", "preset_advanced_desc": "Kaikki päällä, tiiviisti pakattu.", - "presetClearOverrides": "Palauta kaikki", - "presetOverridesTitle": "Mukautettu", - "presetRevertArea": "Palauta", - "presetConfirmTitle": "Haluatko vaihtaa aseteeseen {{preset}}?", - "presetConfirmDesc": "Tämä palauttaa sivupalkin, navigoinnin, kojelaudan asettelyn, terminaalin työkalurivin ja tiedostonhallinnan näkymän. Isäntiä, tunnuksia ja etusivua ei muuteta.", - "presetConfirmApply": "Käytä asetetta", - "runSetupAgainDesc": "Käy läpi ensimmäisen käynnistyksen asennus uudelleen.", - "runSetupAgainButton": "Suorita asennus", "uiArea_chrome": "Sovelluksen kehys", "uiArea_hostList": "Isäntäluettelo", "uiArea_credentialList": "Tunnusluettelo", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Terminaali", "uiArea_fileManager": "Tiedostonhallinta", "uiArea_hostEditor": "Isäntämuokkain", - "sectionAppearance": "Ulkoasu", - "sectionSecurity": "Turvallisuus", - "sectionApiKeys": "API-avaimet", - "sectionData": "Tiedot", - "usernameLabel": "Käyttäjänimi", - "roleLabel": "Rooli", - "roleAdministrator": "Ylläpitäjä", - "authMethodLabel": "Todennustapa", - "authMethodLocal": "Paikallinen", - "twoFaLabel": "2FA", - "twoFaOn": "Päällä", - "twoFaOff": "Pois päältä", - "versionLabel": "Versio", - "cliTitle": "Termix CLI", - "cliDescription": "Avaa terminaaleja, suorita komentoja ja siirrä tiedostoja omasta shellistäsi.", - "cliLearnMore": "Lue lisää", - "deleteAccount": "Poista tili", - "deleteAccountDescription": "Poista tilisi pysyvästi", - "deleteButton": "Poista", - "deleteAccountPermanent": "Tämä toiminto on pysyvä eikä sitä voi peruuttaa.", - "deleteAccountWarning": "Kaikki istunnot, isäntäpalvelimet, tunnistetiedot ja asetukset poistetaan pysyvästi.", - "confirmPasswordDeletePlaceholder": "Syötä salasanasi vahvistaaksesi", "languageLabel": "Kieli", "themeLabel": "Teema", "fontSizeLabel": "Fonttikoko", "interfaceFontLabel": "Käyttöliittymän fontti", "interfaceFontDescription": "Vaihtaa sovelluksen käyttöliittymän fonttia. Terminaaliprofiilit säilyttävät omat fonttiasetuksensa.", "accentColorLabel": "Korostusväri", - "keyboardShortcuts": "Pikanäppäimet", - "keyboardShortcutsDescription": "Mukauta terminaalin kopioi-, liitä- ja komennon pikanäppäimiä", - "manageShortcuts": "Hallitse", - "commandPalette": "Komentopalkki", - "commandPaletteDesc": "Ota pikanäppäin käyttöön", - "reopenTabsOnLogin": "Avaa välilehdet uudelleen kirjautumisen yhteydessä", - "reopenTabsOnLoginDesc": "Palauta avoimet välilehdet kirjautumisen tai sivun päivityksen yhteydessä, jopa toiselta laitteelta", - "confirmTabClose": "Vahvista välilehden sulkeminen", - "confirmTabCloseDesc": "Kysy vahvistus ennen terminaalin välilehtien sulkemista", - "showTabNumbers": "Näytä välilehtien numerot", - "showTabNumbersDesc": "Näytä numero jokaisella välilehdellä niiden erottamiseksi toisistaan", - "settingsAppRail": "Sovellusraide", - "sidebarSettingsMoved": "Isäntäpalvelinten sivupaneelin näyttöasetukset on siirretty Mukauta sivupaneeli -kohtaan, joka avautuu Isännät-työkaluriviltä.", - "showHostTags": "Näytä isäntäpalvelinten tunnisteet", - "showHostTagsDesc": "Näytä tunnisteet isäntäpalvelinten listassa", - "statusColors": "Todelliset tilan värit", - "statusColorsDesc": "Käytä vihreää/punaista online/offline-tilan sijaan korostusvärin sijaan", - "pinAppRail": "Kiinnitä sovellusraide", - "pinAppRailDesc": "Pidä vasen sovellusraide aina laajennettuna sen sijaan, että se laajenee hiiren vierityksellä", - "expandAppRailOnHover": "Laajenna sovellusraide hiiren vierityksellä", - "expandAppRailOnHoverDesc": "Salli vasemman sovellusraiteen laajentuminen, kun osoitin liikkuu sen päällä", - "appRailHoverPushesContent": "Työnnä sisältöä, kun se laajenee", - "appRailHoverPushesContentDesc": "Varaa tilaa laajennetulle palkille sen sijaan, että se avautuisi sivun päälle. Avoinna olevat istunnot, kuten etätyöpöytä, muuttavat kokoaan joka kerta", - "showPinAppRailButton": "Näytä sovellusraiteen kiinnitys-painike", - "showPinAppRailButtonDesc": "Näytä painike sovellusraiteessa sen kiinnittämiseksi auki. Oletuksena pois päältä.", - "settingsNavigation": "Navigointi", - "navigationTabsDesc": "Valitse, mitkä välilehdet näkyvät sovellusraiteessa", - "settingsUpdates": "Päivitykset", - "disableUpdateChecks": "Poista päivitysten tarkistus käytöstä", - "disableUpdateChecksDesc": "Lopeta päivitysten tarkistus", - "changePassword": "Vaihda salasana", - "currentPasswordLabel": "Nykyinen salasana", - "currentPasswordPlaceholder": "Nykyinen salasana", - "newPasswordLabel": "Uusi salasana", - "newPasswordPlaceholder": "Uusi salasana", - "confirmPasswordLabel": "Vahvista uusi salasana", - "confirmPasswordPlaceholder": "Vahvista uusi salasana", - "updatePassword": "Päivitä salasana", - "createApiKeyTitle": "Luo API-avain", - "createApiKeyDescription": "Luo uusi API-avain ohjelmalliseen käyttöön.", - "apiKeyNameLabel": "Nimi", - "apiKeyNamePlaceholder": "esim. CI Pipeline", - "expiryDateLabel": "Vanheneva", - "optional": "valinnainen", - "cancel": "Peruuta", - "createKey": "Luo avain", - "apiKeyCreatedWarning": "Avain luotu – kopioi se nyt, sillä sitä ei näytetä uudelleen.", - "copyApiKey": "Kopioi API-avain", - "copiedToClipboard": "Kopioitu leikepöydälle", "apiKeyCount_one": "{{count}} avain", - "apiKeyCount_other": "{{count}} avainta", - "newKey": "Uusi avain", - "noApiKeys": "Ei vielä API-avaimia.", - "apiKeyActive": "Aktiivinen", - "apiKeyUsageHint": "Sisällytä avain", - "apiKeyUsageHintHeader": "otsikkoon.", - "apiKeyPermissionsHint": "Avaimet perivät luoneen käyttäjän oikeudet.", - "exportData": "Vie tietoni", - "exportDataDesc": "Lataa varmuuskopio palvelimistasi, tunnuksistasi ja asetuksistasi siirtääksesi ne toiseen laitteeseen", - "export": "Vie", - "exporting": "Viedään...", - "importData": "Tuo tietoni", - "importDataDesc": "Palauta palvelimesi, tunnuksesi ja asetuksesi .sqlite-varmuuskopiosta", - "importDataSelected": "Valittu: {{name}}", - "selectFile": "Valitse tiedosto", - "changeFile": "Vaihda", - "import": "Tuo", - "importing": "Tuodaan...", - "exportSuccess": "Tiedot viety onnistuneesti", - "exportFailed": "Tietojen vienti epäonnistui", - "importSelectFile": "Valitse ensin tiedosto", - "importCompleted": "Tuonti valmis: {{total}} kohdetta tuotu, {{skipped}} ohitettu", - "importFailed": "Tuonti epäonnistui: {{error}}", - "roleUser": "Käyttäjä", - "authMethodDual": "Kaksivaiheinen tunnistautuminen", - "authMethodExternal": "Ulkoinen", - "done": "Valmis", - "apiKeyNameRequired": "Avaimen nimi on pakollinen", - "apiKeyCreated": "API-avain \"{{name}}\" luotu", - "apiKeyCreateFailed": "API-avaimen luonti epäonnistui", - "apiKeyUser": "Käyttäjä", - "apiKeyExpires": "Vanhenee", - "apiKeyRevoked": "API-avain \"{{name}}\" kumottu", - "apiKeyRevokeFailed": "API-avaimen kumoaminen epäonnistui", - "passwordFieldsRequired": "Nykyinen ja uusi salasana ovat pakollisia", - "passwordMismatch": "Salasanat eivät täsmää", - "passwordTooShort": "Salasanan on oltava vähintään 6 merkkiä", - "passwordUpdated": "Salasana päivitetty onnistuneesti", - "passwordUpdateFailed": "Salasanan päivitys epäonnistui", - "deletePasswordRequired": "Salasana vaaditaan tilin poistamiseen", - "deleteFailed": "Tilin poisto epäonnistui", - "deleting": "Poistetaan...", "colorPickerTooltip": "Avaa värivalitsin", "themeSystem": "Järjestelmä", "themeLight": "Vaalea", @@ -1755,18 +1122,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Kirjautuneena palvelimeen {{server}}", - "linkedProfileDescription": "Tämä laite käyttää tilisi palvelimella ja pitää kopion tiedoistasi, joten se toimii myös ilman verkkoyhteyttä.", - "manageSync": "Synkronoinnin hallinta", - "setUpSync": "Linkitä palvelimeen", - "settingsTabsAndShortcuts": "Välilehdet ja pikanäppäimet", - "onBetaTitle": "Käytät beta-versiota", - "onBetaDescription": "Kiitos testauksesta. Kerro meille, mikä rikkoutuu.", - "tryBetaTitle": "Kokeile uusia ominaisuuksia etukäteen", - "tryBetaDescription": "Liity beta-ohjelmaan Päivitykset-asetuksista.", - "sendBetaFeedback": "Lähetä palautetta beta-versiosta", - "openUpdates": "Päivitykset" + "themeGruvbox": "Gruvbox" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "{{name}} on tarpeen lisäosille {{list}}. Kytke ne pois päältä tai poista ne ensin.", "missingDependencies": "{{name}} tarvitsee {{list}}:ää, jota ei ole asennettu.", "consentChanged": "Tämän lisäosan pyytämät oikeudet ovat muuttuneet siitä lähtien, kun tarkastelit niitä. Tarkista lista uudelleen.", - "upload": "{{name}}:ää ei voitu lukea: {{error}}", - "developerMode": "Kehittäjätilaa ei voitu muuttaa: {{error}}" + "upload": "{{name}}:ää ei voitu lukea: {{error}}" }, "data": { "title": "Tallennetut tiedot", @@ -2145,13 +1500,7 @@ "browsePlugins": "Selaa lisäosia", "loading": "Ladataan", "developer": { - "title": "Lisäosan kehittäjän tila", - "hint": "Mahdollistaa ylläpitäjille lisäosien asentamisen .tmxplug-tiedostosta Lisäosat-välilehdeltä ilman rekisterin tarkistuksia. Käytä tätä omien lisäosiesi rakentamiseen ja testaamiseen.", - "enableTitle": "Kytke kehittäjän tila päälle?", - "enableBody": "Ylläpitäjät voivat asentaa lisäosia tiedostoista, joita Termix ei ole tarkistanut. Lisäosa voi tehdä mitä sen ominaisuudet sallivat, joten kytke tämä päälle vain lisäosien rakennuksen tai testauksen aikana.", - "enable": "Kytke päälle", - "installFromFile": "Asenna tiedostosta", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS on määritetty, joten asennus tiedostosta pysyy estettynä." + "installFromFile": "Asenna tiedostosta" }, "count": { "downloads_one": "{{formatted}} lataus", @@ -2189,71 +1538,7 @@ "secretSet": "Asetettu", "secretNotSet": "Ei asetettu", "secretReplace": "Korvaa", - "pluginSettingsSaved": "Asetukset tallennettu", - "pluginSettingsInvalid": "Joitakin asetuksia ei voitu tallentaa. Tarkista korostetut kentät.", - "pluginSettingsSaveFailed": "Asetusten tallennus epäonnistui", - "pluginSettingsLoadFailed": "Asetusten lataus epäonnistui", - "featureUnavailable": "{{name}} ei ole tällä hetkellä käytettävissä. Nämä asetukset tallennetaan, mutta ne eivät tule voimaan.", - "account": "Tili", - "security": "Turvallisuus", - "apiKeys": "API-avaimet", - "data": "Tiedot ja synkronointi", - "interface": "Käyttöliittymä", - "appearance": "Ulkoasu", - "keybindings": "Pikanäppäimet", - "adminGeneral": "Yleiset", - "adminUsers": "Käyttäjät", - "adminSessions": "Istunnot", - "adminRoles": "Roolit", - "adminHostDefaults": "Isäntien oletusarvot", - "adminBranding": "Brändäys", - "adminDatabase": "Tietokanta", - "adminSsl": "SSL", - "adminApiKeys": "API-avaimet", - "adminAuditLog": "Tarkastusloki", - "bandYou": "Tilisi", - "bandApp": "Tämä sovellus", - "bandPlugins": "Lisäosat", - "bandInstance": "Tämä palvelin", - "searchPlaceholder": "Hae asetuksia", - "noResults": "Asetuksia ei löytynyt.", - "pages": "Sivut", - "instanceSettings": "Palvelimen asetukset", - "nothingHere": "Täällä ei ole mitään asetettavaa.", - "searchPage": "Hae tältä sivulta", - "noPageMatches": "Tällä sivulla ei ole vastaavia tuloksia.", - "updates": { - "title": "Päivitykset", - "betaProgram": "Beta-ohjelma", - "betaIntro": "Beta-versiot ovat seuraavan Termix-version ennakkorakennelmia. Ne julkaistaan tiistaisin ja perjantaisin, kun on jotain uutta kokeiltavaa. Niissä voi olla vikoja, ja palautesi auttaa parantamaan vakaita julkaisuja.", - "termixBetas": "Termixin beta-versiot", - "termixBetasHint": "Ilmoita uusista beta-versioista, ei vain vakaista julkaisuista.", - "runningBetaBuild": "Käytät beta-rakennelmaa. Poistuaksesi siirry takaisin vakaaseen kuvaan tai asennuspakettiin.", - "howToInstall": "Miten saat beta-version", - "desktopInstall": "Lataa beta-asennuspaketti ja asenna se tämän päälle.", - "downloadBeta": "Lataa versio {{version}}", - "dockerInstall": "Vaihda kuvakkeen tagi betaan ja käynnistä kontti uudelleen:", - "copy": "Kopioi", - "copied": "Kopioitu", - "copyFailed": "Kopiointi epäonnistui", - "learnMore": "Lue lisää beta-versioista", - "feedback": "Palaute", - "feedbackHint": "Löysitkö virheen tai sinulla on ideoita? Viesti menee suoraan kehittäjille, ja versiotietosi täytetään automaattisesti.", - "sendFeedback": "Lähetä beta-palautetta", - "releases": "Julkaisut", - "thisVersion": "Tämä versio", - "newestStable": "Uusin vakaa versio", - "newestBeta": "Uusin beta-versio", - "noRelease": "Ei tällä hetkellä", - "pluginBetas": "Liitännäisten beta-versiot", - "pluginBetasIntro": "Jokainen liitännäinen voi käyttää omia beta-versioitaan. Kokeillaaksesi avaa liitännäinen ja paina Kokeile beta-versiota.", - "openPlugins": "Avaa liitännäiset", - "waitingForStable": "Takaisin vakaaseen versioon. Pysyy versiossa {{version}}, kunnes uusi vakaa julkaisu on saatavilla.", - "backToStable": "Takaisin vakaaseen versioon", - "allPluginsBeta": "Käytä beta-versioita kaikille liitännäisille", - "allPluginsStable": "Kaikki liitännäiset takaisin vakaaseen versioon", - "saveFailed": "Muutoksen tallennus epäonnistui" - } + "featureUnavailable": "{{name}} ei ole tällä hetkellä käytettävissä. Nämä asetukset tallennetaan, mutta ne eivät tule voimaan." }, "managerCard": { "refresh": "Päivitä", @@ -2263,83 +1548,13 @@ "filter": "Suodata..." }, "sync": { - "server": "Termix-palvelin", - "account": "Tili", - "status": "Tila", - "never": "ei koskaan", - "justNow": "juuri nyt", "minutesAgo_one": "{{count}} minuutti sitten", "minutesAgo_other": "{{count}} minuuttia sitten", "hoursAgo_one": "{{count}} tunti sitten", "hoursAgo_other": "{{count}} tuntia sitten", - "actionFailed": "Tuo ei toiminut. Yritä uudelleen.", - "unlinkedTitle": "Vain tämä laite", - "unlinkedBody": "Termix toimii itsenäisesti tällä laitteella. Linkitä se Termix-palvelimeesi pitääksesi kaiken synkronoituna.", - "unlinkedPointHosts": "Isäntäkonnesi, tunnistetietosi, koodinpätkäsi ja asetukset seuraavat sinua jokaisella laitteella.", - "unlinkedPointOffline": "Kaikki toimii edelleen, kun palvelimeen ei saada yhteyttä, ja synkronoi myöhemmin.", - "unlinkedPointAccount": "Kirjaudut sisään palvelintillilläsi, ja sinulle jaetut isäntäkonnet näkyvät myös täällä.", - "linkButton": "Linkitä palvelimeen", - "state": { - "syncing": "Synkronoidaan", - "offline": "Palvelimeen ei saada yhteyttä", - "error": "Synkronointi pysähtyi", - "signedOut": "Kirjauduttu ulos", - "synced": "Synkronoitu {{time}}" - }, "pending_one": "{{count}} muutos odottaa synkronointia", "pending_other": "{{count}} muutosta odottaa synkronointia", - "signInAgain": "Kirjaudu sisään uudelleen", - "syncNow": "Synkronoi nyt", - "unlink": "Irrota linkki", - "unlinked": "Tätä laitetta ei enää ole linkitetty", - "unlinkTitle": "Irroteta tämä laite?", - "unlinkDescription": "Synkronointi pysäytetään ja kirjautuminen palvelimelle lopetetaan. Muiden jakamat isäntäpalvelimet poistetaan tältä laitteesta joka tapauksessa.", - "unlinkKeepTitle": "Pidä tietoni täällä", - "unlinkKeepBody": "Isäntäpalvelimesi, tunnusasi ja asetukset pysyvät tällä laitteella ja toimivat itsenäisesti.", - "unlinkRemoveTitle": "Poista synkronoidut tiedot", - "unlinkRemoveBody": "Kaikki palvelimelta saatu data poistetaan tältä laitteelta. Vain tälle laitteelle säilytetyt isäntäpalvelimet pysyvät.", - "conflictsTitle": "Ristiriidat", - "conflictsDescription": "Nämä muutettiin sekä täällä että palvelimella samanaikaisesti. Palvelimen versio on käytössä. Pidä omasi lähettääksesi sen palvelimelle sen sijaan.", - "keepMine": "Pidä oma", - "keepServer": "Pidä palvelimen", - "errorsTitle": "Ei synkronoitu", - "errorsDescription": "Palvelin ei hyväksynyt näitä muutoksia. Ne pysyvät tällä laitteella.", - "errorPermission": "Tilisi palvelimella ei saa tehdä tätä muutosta.", - "retry": "Yritä uudelleen", - "whatSyncs": "Mitä synkronoidaan", - "whatSyncsDescription": "Kytke pois päältä kaikki, mitä haluat säilyttää vain tällä laitteella.", - "coreGroup": "Termix", - "notOnServer": "Palvelimella ei ole tätä", - "notOnDevice": "Ei vielä tällä laitteella", - "localOnlyHint": "Voit myös säilyttää yksittäisiä isäntäpalvelimia tai kansioita tällä laitteella niiden asetuksista.", - "originTitle": "Missä yhteydet alkavat", - "originDescription": "Yhdistä isäntäpalvelimiin tältä laitteelta tai palvelimen kautta. Voit muuttaa tätä isäntäpalvelimen kerrallaan.", - "originLocal": "Tämä laite", - "originRemote": "Palvelin", - "entities": { - "hosts": "Isäntäpalvelimet", - "sshCredentials": "Tunnukset", - "sshFolders": "Kansiot", - "userPreferences": "Asetukset", - "pluginUserSettings": "Liitännäisasetykset", - "sharedHosts": "Sinulle jaetut isäntäpalvelimet", - "sharedCredentials": "Sinulle jaetut tunnukset", - "vaultProfiles": "Vault-profiilit", - "snippetFolders": "Koodinpätkien kansiot", - "snippets": "Koodinpätkät", - "dashboardServiceLinks": "Palvelulinkit", - "homepageItems": "Kotisivun kohteet", - "networkTopology": "Verkkokartta", - "workspaces": "Työtilat", - "hostDefaults": "Isäntäpalvelimen oletukset", - "hostDefaultsAdmin": "Palvelimen isäntäpalvelimen oletukset", - "aiProviders": "Te keinotekoinen älykkyyden tarjoajat", - "homepageLayouts": "Kotisivun asettelut", - "accountProfile": "Tilin profiili" - }, "proxy": { - "title": "Käänteisproxy", - "description": "Tarvitaan vain, kun esimerkiksi Cloudflare Access tai kirjautumissivu on palvelimesi edessä.", "headersTitle": "Lisäotsakkeet", "headersHint": "Lähetetään jokaisen palvelimelle lähetetyn pyynnön mukana, esimerkiksi Cloudflare Access -palvelun tunnus.", "headerName": "Otsikon nimi", @@ -2352,8 +1567,7 @@ "username": "Käyttäjänimi", "password": "Salasana", "allowInvalidCertificate": "Luota itse allekirjoitettuun sertifikaattiin", - "allowInvalidCertificateHint": "Vain omaa palvelinta varten, kun sen sertifikaatti ei ole tunnetulta viranomaiselta.", - "saved": "Tallennettu" + "allowInvalidCertificateHint": "Vain omaa palvelinta varten, kun sen sertifikaatti ei ole tunnetulta viranomaiselta." }, "problems": { "invalidUrl": "Tuo ei näytä verkkosoitteelta.", @@ -2391,6 +1605,27 @@ "linking": "Linkitetään ja suoritetaan ensimmäinen synkronointi...", "linked": "Linkitetty. Dataasi synkronoidaan nyt.", "signedInAgain": "Kirjauduttu sisään. Synkronointi jatkuu." + }, + "entities": { + "hosts": "Isäntäpalvelimet", + "sshCredentials": "Tunnukset", + "sshFolders": "Kansiot", + "userPreferences": "Asetukset", + "pluginUserSettings": "Liitännäisasetykset", + "sharedHosts": "Sinulle jaetut isäntäpalvelimet", + "sharedCredentials": "Sinulle jaetut tunnukset", + "vaultProfiles": "Vault-profiilit", + "snippetFolders": "Koodinpätkien kansiot", + "snippets": "Koodinpätkät", + "dashboardServiceLinks": "Palvelulinkit", + "homepageItems": "Kotisivun kohteet", + "networkTopology": "Verkkokartta", + "workspaces": "Työtilat", + "hostDefaults": "Isäntäpalvelimen oletukset", + "hostDefaultsAdmin": "Palvelimen isäntäpalvelimen oletukset", + "aiProviders": "Te keinotekoinen älykkyyden tarjoajat", + "homepageLayouts": "Kotisivun asettelut", + "accountProfile": "Tilin profiili" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "Tämä isäntä käyttää omaa arvoaan. Napsauta käyttääksesi {{source}}-lähteen oletusta uudelleen", "clearTitle": "Asetettu tällä tasolla. Napsauta tyhjennääksesi ja käyttääksesi {{source}}-lähdettä sen sijaan", "inheritedTitle": "Noudattaa {{source}}-lähteen oletusta", - "titleAdmin": "Palvelimen isäntäoletukset", - "titleUser": "Omat isäntäoletukset", - "titleFolder": "Kansion oletukset: {{name}}", - "descriptionAdmin": "Oletukset kaikille tämän palvelimen isännille. Käyttäjän omat oletukset, kansion oletukset tai isäntä itse voivat silti asettaa eri arvon. Muuta kenttää asettaaksesi se tähän, tai tyhjennä se jättääksesi sen asettamatta.", - "descriptionUser": "Oletukset kaikille isännillesi palvelimen oletusten päälle. Kansio tai isäntä itse voi silti asettaa eri arvon. Muuta kenttää asettaaksesi se tähän, tai tyhjennä se jättääksesi sen asettamatta.", - "descriptionFolder": "Oletukset tämän kansion ja sen alikansioiden isännille omien oletustesi päälle. Isäntä voi silti asettaa eri arvon. Muuta kenttää asettaaksesi se tähän, tai tyhjennä se jättääksesi sen asettamatta.", - "save": "Tallenna oletukset", "saved_one": "Oletukset tallennettu. {{count}} isäntä päivitetty.", "saved_other": "Oletukset tallennettu. {{count}} isäntää päivitetty.", - "savedInBackground": "Oletukset tallennettu. Isäntiä päivitetään taustalla.", "appliedToHosts_one": "{{count}} isäntä päivitetty uusilla oletuksilla.", "appliedToHosts_other": "{{count}} isäntää päivitetty uusilla oletuksilla.", - "saveFailed": "Oletuksia ei voitu tallentaa", - "loadFailed": "Oletuksia ei voitu ladata", - "confirmTitle": "Tallennetaanko oletukset?", "confirmChanges_one": "{{count}} isäntä noudattaa näitä oletuksia ja muuttuu.", "confirmChanges_other": "{{count}} isäntää noudattaa näitä oletuksia ja muuttuu.", - "confirmNoChanges": "Olemassa olevia isäntiä ei muuteta. Uudet isännät aloittavat näillä oletuksilla.", - "menuMyDefaults": "Omat isäntäoletukset", - "folderDefaultsAction": "Kansion oletukset", - "adminSectionDescription": "Aseta oletukset, joita kaikki tämän palvelimen isännät noudattavat, jokaiselle isännän asetukselle, mukaan lukien jokaisen lisäosan. Käyttäjät ja kansiot voivat asettaa omansa päälle, ja mikä tahansa isäntä voi silti käyttää omaa arvoaan.", - "editServerDefaults": "Muokkaa palvelimen oletuksia", - "resetMenu": "Nollaa", - "resetAll": "Palauta kaikki oletusarvoihin", - "resetCore": "Palauta yhteys ja SSH oletusarvoihin", "resetDone_one": "{{count}} isäntä käyttää nyt oletusarvojaan.", "resetDone_other": "{{count}} isäntää käyttää nyt oletusarvojaan." }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "Tallennettu. Kirjoita korvataksesi sen." }, - "sharing": { - "revokeConfirm": "Poistetaanko {{name}}:n pääsy?", - "revoke": "Poista pääsy" - }, "manage": { - "searchSettings": "Hae asetuksia", - "noMatchingSettings": "Asetuksia ei löytynyt.", - "sections": "Osiot", - "sectionNeedsAttention": "Tässä on jotain, joka tarvitsee huomiota", "needsAttention_one": "Yksi asia tarvitsee huomiota.", "needsAttention_other": "{{count}} asiaa tarvitsee huomiota.", - "bandHost": "Isäntä", - "bandFeatures": "Protokollat ja lisäosat", - "bandCredential": "Kirjautumistiedot", - "sshConnection": "SSH-yhteys", - "errorAddressRequired": "Osoite on pakollinen.", - "errorPortRange": "Käytä porttia välillä 1–65535.", - "defaults": "Oletusarvot", - "searchHosts": "Hae isäntiä", - "searchCredentials": "Hae kirjautumistietoja", - "searchDefaults": "Hae oletusarvoja", - "addCredential": "Lisää kirjautumistiedot", - "nothingMatches": "Mitään ei löytynyt", - "nothingYet": "Täällä ei vielä ole mitään", - "emptyHostsHint": "Lisää isäntä, ja se näkyy tässä sinun antamassasi kansiossa.", - "emptyCredentialsHint": "Tallentamiasi kirjautumistietoja voivat käyttää kaikki isännät.", - "collapse": "Kutista", - "expand": "Laajenna", - "cannotBeUndone": "Tätä ei voi peruuttaa.", - "hostNotFound": "Isäntää ei löytynyt. Kokeile päivittää lista.", "hostCount_one": "{{count}} isäntä", "hostCount_other": "{{count}} isäntää", "credentialCount_one": "{{count}} kirjautumistieto", - "credentialCount_other": "{{count}} kirjautumistietoa", - "newHost": "Uusi isäntä", - "newCredential": "Uudet kirjautumistiedot", - "advanced": "Edistynyt", - "pickHost": "Valitse muokattava isäntä", - "pickCredential": "Valitse muokattavat kirjautumistiedot", - "pickDefaults": "Valitse muokattava oletustaso", - "pickHint": "Kaikki yhteysasetukset löytyvät täältä ryhmiteltynä, jotta ne on helppo löytää." + "credentialCount_other": "{{count}} kirjautumistietoa" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/fr_FR.json b/src/ui/locales/translated/fr_FR.json index 612ff050b..525ef801c 100644 --- a/src/ui/locales/translated/fr_FR.json +++ b/src/ui/locales/translated/fr_FR.json @@ -141,7 +141,6 @@ "continue": "Continuer", "error": "Erreur", "unsavedChanges": "Modifications non enregistrées", - "more": "Plus", "loading": "Chargement...", "host": "Hôte", "selectHost": "Sélectionner un hôte...", @@ -154,7 +153,6 @@ "cancel": "Annuler", "username": "Nom d'utilisateur", "login": "Connexion", - "logout": "Déconnexion", "register": "S'inscrire", "password": "Mot de passe", "confirmPassword": "Confirmer le mot de passe", @@ -165,8 +163,6 @@ "rename": "Renommer", "edit": "Modifier", "confirm": "Confirmer", - "next": "Suivant", - "previous": "Précédent", "refresh": "Actualiser", "language": "Langue", "backendReconnected": "Connexion au serveur rétablie", @@ -234,10 +230,6 @@ "pluginsDocsLink": "En savoir plus sur chacun" }, "desktopUpdates": { - "title": "Application de bureau", - "mode": "Mises à jour", - "modeHint": "Comment cette application reçoit les nouvelles versions.", - "manualModeHint": "Cette copie ne peut pas se mettre à jour automatiquement, donc Termix vous informe simplement lorsqu'une nouvelle version est disponible.", "modeAutomatic": "Automatique", "modePrompt": "Demander d'abord", "modeNever": "Jamais", @@ -247,15 +239,6 @@ "onboardingTitle": "Mises à jour de l'application", "onboardingBody": "L'application de bureau peut désormais se mettre à jour automatiquement. Choisissez comment vous souhaitez recevoir les nouvelles versions. Vous pourrez modifier ce paramètre plus tard dans Paramètres, Mises à jour.", "onboardingManual": "Cette copie de l'application a été installée d'une manière qui ne permet pas les mises à jour automatiques, donc Termix vous informera lorsqu'une nouvelle version sera disponible avec un lien pour la télécharger.", - "status": "Version {{version}}", - "statusIdle": "Pas encore vérifié", - "statusChecking": "Recherche de mises à jour", - "statusAvailable": "La version {{version}} est disponible", - "statusDownloading": "Téléchargement de {{version}} ({{progress}}%)", - "statusReady": "La version {{version}} est prête. Redémarrez pour l'installer.", - "statusUpToDate": "Vous avez la dernière version", - "statusError": "Impossible de vérifier les mises à jour. Réessayez plus tard.", - "checkNow": "Vérifier maintenant", "download": "Télécharger", "restart": "Redémarrer maintenant", "later": "Plus tard", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Fermer", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Copier le mot de passe", - "copySudoPassword": "Copier le mot de passe Sudo", - "passwordCopied": "Mot de passe copié dans le presse-papiers", - "failedToCopyPassword": "Échec de la copie du mot de passe", - "refreshTab": "Actualiser la connexion", - "renameTab": "Renommer l'onglet", "dashboard": "Tableau de bord", "quickConnect": "Connexion rapide", - "openAsTabHint": "Ctrl+clic ou clic molette pour ouvrir dans un onglet", - "openAsTab": "Ouvrir dans un onglet", - "openInRightDock": "Ouvrir dans le dock droit", - "closeRightDock": "Fermer le dock droit", - "toggleRightDock": "Basculer le dock droit", "hosts": "Hôtes", "credentials": "Identifiants", "connections": "Connexions", - "keepSideMenuOpen": "Garder le menu ouvert", - "collapseSideMenu": "Réduire le menu", - "roleAdministrator": "Administrateur", - "roleUser": "Utilisateur", "sync": "Synchroniser", "reconnectDisconnectedTerminals": "Reconnecter tous les terminaux déconnectés", "reconnectingTerminals_one": "Reconnexion du terminal {{count}}", @@ -300,31 +268,12 @@ "reconnectTerminalsFailed_other": "Impossible de lancer la reconnexion des {{count}} terminaux", "fullscreenUnsupported": "Le mode plein écran n'est pas pris en charge par ce navigateur", "fullscreenFailed": "Impossible d'activer le mode plein écran", - "resetSidebarWidth": "Réinitialiser la largeur", - "collapseSidebar": "Réduire la barre latérale", - "openSidebar": "Ouvrir la barre latérale", "confirmCloseHost": "Fermer {{host}} ?", - "enterFullscreen": "Activer le plein écran (Ctrl+Maj+F)", - "exitFullscreen": "Quitter le plein écran (Ctrl+Maj+F)", - "group": { - "objects": "Les vôtres", - "tools": "Outils", - "system": "Système" - }, - "searchEverything": "Rechercher des hôtes, des onglets et des actions", - "search": "Rechercher", "hiddenCount_one": "{{count}} masqué", "hiddenCount_many": "{{count}} masqués", "hiddenCount_other": "{{count}} masqués", - "showInRail": "Afficher dans la barre latérale", - "moveUp": "Déplacer vers le haut", - "moveDown": "Déplacer vers le bas", - "resetRailOrder": "Réinitialiser l'ordre", - "hideFromRail": "Masquer de la barre latérale", - "openSettings": "Ouvrir les paramètres", "settings": "Paramètres", "manage": "Gérer", - "mobileNavigation": "Navigation", "plugins": "Extensions" }, "hosts": { @@ -930,35 +879,14 @@ "importSummary": "Importation terminée : {{imported}} importés, {{updated}} mis à jour, {{failed}} échoués", "importHostsFailed": "Échec de l'importation des hôtes" }, - "commandPalette": { - "searchPlaceholder": "Rechercher des hôtes, commandes ou paramètres...", - "quickActions": "Actions rapides", - "navigation": "Navigation", - "orShortcut": "ou", - "addNewHost": "Ajouter un hôte", - "adminSettings": "Paramètres administrateur", - "addCredential": "Ajouter un identifiant", - "recentActivity": "Activité récente", - "serversAndHosts": "Serveurs et hôtes", - "noHostsFound": "Aucun hôte ne correspond à « {{search}} »", - "links": "Liens", - "navigate": "Navigation", - "select": "Sélectionner", - "pluginActions": "Plus d’actions", - "noTargetTab": "Aucun onglet terminal n’est ouvert", - "documentation": "Documentation" - }, "splitScreen": { "title": "Écran partagé", "defaultLabel": "Partage {{number}}", "splitRight": "Diviser à droite", "splitDown": "Diviser en bas", - "addToSplit": "Ajouter à {{split}}", "paneEmptyItem": "Panneau {{index}} : vide", "paneItem": "Panneau {{index}} : {{label}}", "paneNumber": "Panneau {{index}}", - "newPaneRight": "Nouveau panneau à droite", - "newPaneBelow": "Nouveau panneau en bas", "emptyTitle": "Panneau vide", "emptyHint": "Choisissez ce qu’afficher ici. Tant que ce panneau est sélectionné, tout ce que vous ouvrez depuis la barre latérale s’ouvre également ici.", "openTabs": "Onglets ouverts", @@ -975,7 +903,6 @@ "clearPane": "Vider ce panneau", "zoom": "Agrandir le panneau", "unzoom": "Restaurer la mise en page", - "unsplit": "Supprimer le partage", "layouts": "Mises en page", "applyLayout": "Modifier la mise en page", "maxPanes_one": "Une division peut contenir jusqu'à {{count}} volet", @@ -985,8 +912,6 @@ "dropHere": "Déposer pour afficher ici", "paneActions": "Actions du panneau", "dividerHint": "Glissez pour redimensionner. Double-cliquez pour équilibrer.", - "openInSplit": "Ouvrir dans un partage", - "openInNewSplit": "Nouveau partage avec l’onglet actuel", "shortcuts": "Raccourcis", "shortcutNavigate": "Naviguer entre les panneaux", "presets": { @@ -1000,23 +925,6 @@ "grid6": "Grille de six" } }, - "connections": { - "noConnections": "Aucune connexion", - "noConnectionsDesc": "Ouvrez un terminal, un gestionnaire de fichiers ou un bureau à distance pour voir les connexions ici", - "connectedFor": "Connecté depuis {{duration}}", - "connected": "Connecté", - "disconnected": "Déconnecté", - "reconnect": "Reconnecter", - "sectionOpen": "Ouvert", - "sectionBackground": "Arrière-plan", - "backgroundDesc": "Les sessions persistent pendant {{minutes}} minutes après la déconnexion et peuvent être reconnectées.", - "expiresIn": "Expire dans {{duration}}", - "search": "Rechercher des connexions...", - "noSearchResults": "Aucune connexion ne correspond à votre recherche", - "rename": "Renommer la session", - "forgetConfirm": "Terminer la session en arrière-plan pour {{name}} ?", - "forget": "Terminer la session" - }, "sshAuth": { "totpRequired": "Authentification à deux facteurs requise", "totpCodeLabel": "Code de vérification", @@ -1154,65 +1062,14 @@ "placeholders": { "keyPassword": "mot de passe de la clé", "pastePrivateKey": "Collez votre clé privée ici...", - "enterPassword": "Entrez votre mot de passe", - "apiKeyName": "ex. Pipeline CI", - "credentialName": "ex. Clé SSH de production", - "optionalDetails": "Détails facultatifs...", - "sshUsername": "ex. root ou deploy", - "hostAddress": "10.0.0.1 ou example.com", - "hostName": "ex. Serveur Web Production" + "enterPassword": "Entrez votre mot de passe" }, "dashboard": { - "title": "Tableau de bord", - "github": "GitHub", - "reportBug": "Signaler un bug", - "discord": "Discord", - "docs": "Documentation", - "donate": "Faire un don", - "serverOverview": "Aperçu du serveur", - "version": "Version", "updateAvailable": "Mise à jour disponible", - "beta": "Bêta", - "uptime": "Temps de fonctionnement", - "database": "Base de données", - "healthy": "Sain", - "error": "Erreur", - "totalHosts": "Total des hôtes", - "totalCredentials": "Total des identifiants", - "recentActivity": "Activité récente", - "reset": "Réinitialiser", - "noRecentActivity": "Aucune activité récente", - "quickActions": "Actions rapides", - "addHost": "Ajouter un hôte", - "addCredential": "Ajouter un identifiant", - "adminSettings": "Paramètres administrateur", - "userProfile": "Profil utilisateur", - "serverStats": "Statistiques du serveur", - "customizeLayout": "Personnaliser le tableau de bord", - "justNow": "à l'instant" + "beta": "Bêta" }, "dashboardTab": { "stable": "STABLE", - "registerNewServer": "Enregistrer un nouveau serveur", - "storeSshKeysOrPasswords": "Stocker des clés SSH ou des mots de passe", - "manageUsersAndRoles": "Gérer les utilisateurs et les rôles", - "manageYourAccount": "Gérer votre compte", - "hostStatus": "État de l'hôte", - "noHostsConfigured": "Aucun hôte configuré", - "checking": "VÉRIFICATION", - "commandPalette": "Palette de commandes", - "done": "Terminé", - "clear": "Effacer", - "dragToResizeColumns": "Glisser pour redimensionner les colonnes", - "hostsAvailable": "Hôtes disponibles", - "removeSection": "Supprimer la section", - "addSection": "Ajouter une section", - "allSectionsShown": "Tout est déjà affiché sur le tableau de bord.", - "fromPlugins": "Depuis les plugins", - "dropHere": "Déposez une section ici", - "dragToReorder": "Glissez les sections pour les réorganiser", - "clearActivityConfirm": "Effacer votre activité récente ?", - "resetConfirm": "Réinitialiser le tableau de bord à sa mise en page par défaut ?", "onlineCount_one": "{{count}} en ligne", "onlineCount_many": "{{count}} en ligne", "onlineCount_other": "{{count}} en ligne", @@ -1221,425 +1078,48 @@ "hostCount_other": "{{count}} hôtes" }, "admin": { - "sectionGeneral": "Général", - "sectionUsers": "Utilisateurs", - "sectionSessions": "Sessions", - "sectionRoles": "Rôles", - "sectionDatabase": "Base de données", - "sectionApiKeys": "Clés API", - "sectionAuditLog": "Journal d'audit", - "sectionSsl": "Certificat HTTPS", - "sectionBranding": "Marque blanche", - "brandingAppName": "Nom de l'application", - "brandingAppNameDesc": "Affiché sur l'écran de connexion et l'onglet du navigateur. Laissez vide pour utiliser « Termix ».", - "brandingTagline": "Slogan", - "brandingTaglineDesc": "Affiché sous le nom de l'application sur l'écran de connexion. Laissez vide pour utiliser le slogan par défaut.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG ou WEBP, jusqu'à 750 Ko. Remplace l'icône par défaut sur l'écran de connexion et l'onglet du navigateur.", - "brandingLogoUpload": "Téléverser le logo", - "brandingLogoReset": "Rétablir les valeurs par défaut", - "brandingLogoInvalid": "Image invalide. Utilisez un fichier PNG, JPEG ou WEBP de moins de 750 Ko.", - "brandingSaved": "Paramètres de marque blanche enregistrés", - "brandingSaveFailed": "Échec de l'enregistrement des paramètres de marque blanche", - "sslDescription": "Le certificat que Termix sert via HTTPS. Téléversez le vôtre ici, ou en obtenez et renouvelez un depuis Let's Encrypt dans la section Certificats ACME.", - "sslDocsLink": "Voir la documentation SSL", - "sslCertStatus": "État du certificat", - "sslCertStatusNone": "Aucun certificat", - "sslCertStatusValid": "Valide", - "sslCertStatusExpiring": "Expire bientôt", - "sslCertStatusExpired": "Expiré", - "sslCertExpiresAt": "Expire le {{date}}", - "sslInfoNote": "Après l'émission ou le téléversement d'un certificat, Termix activera automatiquement HTTPS sur SSL_PORT (par défaut 8443) en plus du port HTTP existant. Assurez-vous que ce port est publié/mappé vers ce conteneur pour qu'il soit accessible.", - "sslManualCert": "Certificat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Clé privée (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Collez votre certificat et clé privée existants, y compris la chaîne complète si requis par votre autorité de certification.", - "sslManualUpload": "Téléverser et installer le certificat", - "sslManualUploadLoading": "Téléversement du certificat...", - "sslManualUploadSuccess": "Certificat téléversé et installé avec succès", - "sslManualUploadFailed": "Échec du téléversement du certificat", - "sslManualRequiresFields": "Le certificat et la clé privée sont requis", - "auditLogTotal": "{{total}} entrées au total", - "auditLogEmpty": "Aucune entrée de journal d'audit trouvée", - "auditLogSuccess": "Succès", - "auditLogFailed": "Échec", - "auditLogClearFilters": "Effacer les filtres", - "auditLogPage": "Page {{page}} sur {{totalPages}} ({{total}} au total)", - "auditLogIp": "IP", - "auditLogResourceId": "ID de ressource", - "auditLogFilterUser": "Utilisateur", - "auditLogFilterAction": "Action", - "auditLogFilterResourceType": "Type de ressource", - "auditLogFilterStatus": "Statut", - "auditLogFilterFrom": "De", - "auditLogFilterTo": "À", - "auditLogFilterAll": "Tout", - "allowRegistration": "Autoriser l'inscription des utilisateurs", - "allowRegistrationDesc": "Permettre aux nouveaux utilisateurs de s'inscrire eux-mêmes avec un nom d'utilisateur et un mot de passe", - "allowPasswordLogin": "Autoriser la connexion par mot de passe", - "allowPasswordLoginDesc": "Connexion par nom d'utilisateur et mot de passe", - "externalAutoProvision": "Créer automatiquement les comptes externes", - "externalAutoProvisionDesc": "Créer un compte lors de la première connexion via une méthode externe telle que SSO ou LDAP. Désactivé, seules les personnes disposant déjà d'un compte peuvent se connecter de cette manière", - "secondFactorAfterExternalLogin": "Demander un deuxième facteur après les connexions externes (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Désactivé, un deuxième facteur inscrit n'est demandé qu'après les connexions par mot de passe et autres connexions locales, comme auparavant. Activé, il est demandé après chaque méthode de connexion, y compris SSO et LDAP.", - "allowPasswordReset": "Autoriser la réinitialisation du mot de passe", - "allowPasswordResetDesc": "Code de réinitialisation via les journaux Docker", - "auditForwardingTitle": "Transmettre au SIEM", - "auditForwardingDesc": "Envoyer une copie de chaque entrée d'audit à un collecteur externe au format NDJSON. Les journaux locaux restent la source de vérité.", - "auditForwardingEnvNotice": "Une variable d'environnement configure également la transmission ; l'URL enregistrée ici a la priorité.", - "auditForwardingToken": "Jeton Bearer (facultatif)", - "auditForwardingTokenStored": "Jeton Bearer (stocké)", - "auditForwardingSaved": "Paramètres de transmission d'audit enregistrés", - "auditForwardingSaveError": "Échec de l'enregistrement des paramètres de transmission d'audit", - "sessionTimeout": "Expiration de session", - "hours": "heures", - "sessionTimeoutRange": "Min 1h, max 720h", - "monitoringDefaults": "Paramètres par défaut de surveillance", - "statusCheck": "Vérification d'état", - "sec": "sec", - "logLevel": "Niveau de journalisation", "usersCount_one": "{{count}} utilisateur", "usersCount_many": "{{count}} utilisateurs", - "usersCount_other": "{{count}} utilisateurs", - "searchUsers": "Rechercher des utilisateurs...", - "noUsers": "Aucun utilisateur", - "noUsersMatch": "Aucun utilisateur ne correspond à votre recherche", - "pageOf": "Page {{page}} sur {{total}}", - "createUser": "Créer", - "newRole": "Nouveau rôle", - "roleName": "Nom", - "roleDisplayName": "Nom affiché", - "roleDescription": "Description", "rolesCount_one": "{{count}} rôle", "rolesCount_many": "{{count}} rôles", - "rolesCount_other": "{{count}} rôles", - "createRole": "Créer", - "creating": "Création...", - "exportDatabase": "Exporter la base de données", - "exportDatabaseDesc": "Télécharger une sauvegarde SQLite portable de tous les hôtes, identifiants et paramètres", - "export": "Exporter", - "exporting": "Exportation...", - "importDatabase": "Importer la base de données", - "importDatabaseDesc": "Restaurer à partir d'une sauvegarde .sqlite portable sur n'importe quel backend de base de données", - "importDatabaseSelected": "Sélectionné : {{name}}", - "selectFile": "Sélectionner un fichier", - "changeFile": "Modifier", - "import": "Importer", - "importing": "Importation...", "apiKeysCount_one": "{{count}} clé", "apiKeysCount_many": "{{count}} clés", - "apiKeysCount_other": "{{count}} clés", - "apiKeysDocsLink": "Voir la documentation", - "apiKeysCliHint": "Utilisez une clé API avec le CLI Termix pour gérer les serveurs depuis votre terminal.", - "apiKeysCliLink": "Voir la documentation du CLI", - "newApiKey": "Nouvelle clé API", - "apiKeyCreatedWarning": "Clé créée — copiez-la maintenant, elle ne sera plus affichée.", - "apiKeyName": "Nom", - "apiKeyUser": "Utilisateur", - "apiKeySelectUser": "Sélectionner un utilisateur...", - "apiKeyExpiresAt": "Expire le", - "createKey": "Créer une clé", - "apiKeyNoExpiry": "Sans expiration", - "revokedBadge": "RÉVOQUÉE", - "authTypeDual": "Auth. double", - "authTypeExternal": "Externe", - "authTypeLocal": "Local", - "adminStatusAdministrator": "Administrateur", - "adminStatusRegularUser": "Utilisateur standard", - "adminBadge": "ADMIN", - "systemBadge": "SYS", - "customBadge": "PERSONNALISÉ", - "youBadge": "VOUS", "sessionsActive_one": "{{count}} actif", "sessionsActive_many": "{{count}} actifs", - "sessionsActive_other": "{{count}} actifs", - "sessionActive": "Actif : {{time}}", - "sessionExpires": "Exp. : {{time}}", - "revokeAll": "Tout", - "revokeAllSessionsSuccess": "Toutes les sessions de l'utilisateur ont été révoquées", - "revokeAllSessionsFailed": "Échec de la révocation des sessions", - "revokeSessionFailed": "Échec de la révocation de la session", - "addRole": "Ajouter un rôle", - "noCustomRoles": "Aucun rôle personnalisé défini", - "removeRoleFailed": "Échec de la suppression du rôle", - "assignRoleFailed": "Échec de l'attribution du rôle", - "userAdminAccess": "Administrateur", - "userAdminAccessDesc": "Accès complet à tous les paramètres d'administration", - "userRoles": "Rôles", - "revokeAllUserSessions": "Révoquer toutes les sessions", - "revokeAllUserSessionsDesc": "Forcer la réauthentification sur tous les appareils", - "revoke": "Révoquer", - "deleteUserWarning": "La suppression de cet utilisateur est définitive.", - "deleteUser": "Supprimer {{username}}", - "deleting": "Suppression en cours...", - "deleteUserFailed": "Échec de la suppression de l'utilisateur", - "deleteUserSuccess": "Utilisateur « {{username}} » supprimé", - "deleteRoleSuccess": "Rôle « {{name}} » supprimé", - "revokeKeySuccess": "Clé « {{name}} » révoquée", - "revokeKeyFailed": "Échec de la révocation de la clé", - "copiedToClipboard": "Copié dans le presse-papiers", - "done": "Terminé", - "createUserTitle": "Créer un utilisateur", - "createUserDesc": "Créer un nouveau compte local.", - "createUserUsername": "Nom d'utilisateur", - "createUserPassword": "Mot de passe", - "createUserPasswordHint": "Minimum 6 caractères.", - "createUserEnterUsername": "Saisir le nom d'utilisateur", - "createUserSubmit": "Créer l'utilisateur", - "editUserTitle": "Gérer l'utilisateur : {{username}}", - "editUserDesc": "Modifier les rôles, le statut administrateur, les sessions et les paramètres du compte.", - "editUserUsername": "Nom d'utilisateur", - "editUserAuthType": "Type d'authentification", - "editUserAdminStatus": "Statut administrateur", - "editUserUserId": "ID utilisateur", - "linkAccountTitle": "Lier des comptes", - "linkAccountDesc": "Fusionner le compte externe {{username}} avec un compte local existant.", - "linkAccountDescLocal": "Lier le compte local {{username}} à un compte externe existant.", - "linkAccountWarningTitle": "Cela va :", - "linkAccountEffect1": "Supprimer le compte externe uniquement", - "linkAccountEffect2": "Ajouter sa connexion externe au compte cible", - "linkAccountEffect3": "Autoriser la connexion externe et par mot de passe", - "linkAccountTargetUsername": "Nom d'utilisateur du compte local", - "linkAccountTargetPlaceholder": "Entrez le nom d'utilisateur du compte local à lier", - "linkAccountExternalUsername": "Nom d'utilisateur du compte externe", - "linkAccountExternalPlaceholder": "Entrez le nom d'utilisateur du compte externe uniquement à fusionner", - "linkAccountExternalNotFound": "Aucun compte externe uniquement trouvé avec ce nom d'utilisateur", - "linkAccounts": "Lier les comptes", - "linkAccountSuccess": "Comptes liés avec succès", - "linkAccountFailed": "Échec de la liaison des comptes", - "linkAccountInProgress": "Liaison en cours...", - "unlinkAccountTitle": "Dissocier la connexion externe", - "unlinkAccountDesc": "Supprimer la connexion externe de {{username}}. L'utilisateur ne pourra se connecter qu'avec son mot de passe.", - "unlinkAccountWarning": "Cela supprimera la connexion externe de ce compte. L'utilisateur doit avoir un mot de passe défini pour continuer à se connecter.", - "unlinkAccount": "Dissocier la connexion externe", - "unlinkAccountInProgress": "Dissociation en cours...", - "unlinkAccountSuccess": "Connexion externe dissociée", - "unlinkAccountFailed": "Échec de la dissociation de la connexion externe", - "updateRegistrationFailed": "Échec de la mise à jour du paramètre d'inscription", - "updatePasswordLoginFailed": "Échec de la mise à jour du paramètre de connexion par mot de passe", - "updateSecondFactorAfterExternalLoginFailed": "Échec de la mise à jour du paramètre du deuxième facteur", - "updatePasswordResetFailed": "Échec de la mise à jour du paramètre de réinitialisation du mot de passe", - "sessionTimeoutRange2": "Le délai d'expiration de session doit être compris entre 1 et 720 heures", - "sessionTimeoutSaved": "Délai d'expiration de session enregistré", - "sessionTimeoutSaveFailed": "Échec de l'enregistrement du délai d'expiration de session", - "monitoringIntervalInvalid": "Valeurs d'intervalle invalides", - "monitoringSaved": "Paramètres de surveillance enregistrés", - "monitoringSaveFailed": "Échec de l'enregistrement des paramètres de surveillance", - "logLevelUpdateFailed": "Échec de la mise à jour du niveau de journalisation", - "createUserRequired": "Le nom d'utilisateur et le mot de passe sont requis", - "createUserPasswordTooShort": "Le mot de passe doit contenir au moins 6 caractères", - "createUserSuccess": "Utilisateur « {{username}} » créé", - "createUserFailed": "Échec de la création de l'utilisateur", - "updateAdminStatusFailed": "Échec de la mise à jour du statut administrateur", - "allSessionsRevoked": "Toutes les sessions ont été révoquées", - "revokeSessionsFailed": "Échec de la révocation des sessions", - "manageUserData": "Gérer les données utilisateur", - "backToUsers": "Retour aux utilisateurs", - "manageTabAccount": "Compte", - "manageTabHosts": "Hôtes", - "manageTabCredentials": "Identifiants", - "manageTabSessions": "Sessions", - "manageTabDanger": "Danger", - "manageEditorBack": "Retour aux données de {{username}}", - "dataLockedBadge": "VERROUILLÉ", - "dataLockedNotice": "Les données de {{username}} restent verrouillées jusqu'à sa prochaine connexion. Ses hôtes, identifiants et extraits de code ne peuvent pas être consultés ou modifiés jusqu'à ce moment-là.", - "resetPasswordTitle": "Réinitialiser le mot de passe", - "resetPasswordExternalOnly": "Cet utilisateur se connecte via un fournisseur externe et n'a pas de mot de passe.", - "resetPasswordPlaceholder": "Nouveau mot de passe", - "resetPasswordBtn": "Réinitialiser", - "resetPasswordWorking": "Réinitialisation en cours...", - "resetPasswordSuccess": "Mot de passe réinitialisé", - "resetPasswordSuccessWiped": "Mot de passe réinitialisé. Les données chiffrées de l'utilisateur ont été effacées.", - "resetPasswordFailed": "Échec de la réinitialisation du mot de passe", - "resetPasswordConfirmWipe": "{{username}} ne s'est pas connecté depuis la mise à niveau du chiffrement, ses données ne peuvent donc pas être récupérées. La réinitialisation supprimera ses hôtes, identifiants et extraits de code. Continuer ?", - "manageApiKeys": "Clés API", - "apiKeyNamePlaceholder": "Nom de la clé", - "apiKeyCopyNotice": "Copiez cette clé maintenant, elle ne sera plus affichée.", - "noApiKeysForUser": "Aucune clé API", - "apiKeyDeleteFailed": "Échec de la suppression de la clé API", - "exportUserData": "Exportation des données", - "exportUserDataDesc": "Téléchargez les hôtes, les identifiants et les données du gestionnaire de fichiers de cet utilisateur au format JSON. Les secrets sont déchiffrés.", - "exportUserDataSuccess": "Données utilisateur exportées", - "exportUserDataFailed": "Échec de l'exportation des données utilisateur", "hostsCount_one": "{{count}} hôte", "hostsCount_many": "{{count}} hôtes", "hostsCount_other": "{{count}} hôtes", - "addHostForUser": "Ajouter un hôte", - "noHostsForUser": "Cet utilisateur n'a aucun hôte", - "connectToHost": "Se connecter", - "deleteHostConfirm": "Supprimer l'hôte « {{name}} » appartenant à {{username}} ?", - "hostDeletedSuccess": "Hôte supprimé", - "hostDeleteFailed": "Échec de la suppression de l'hôte", "credentialsCount_one": "{{count}} identifiant", "credentialsCount_many": "{{count}} identifiants", "credentialsCount_other": "{{count}} identifiants", - "addCredentialForUser": "Ajouter un identifiant", - "noCredentialsForUser": "Cet utilisateur n'a aucun identifiant", - "deleteCredentialConfirm": "Supprimer l'identifiant « {{name}} » appartenant à {{username}} ?", - "credentialDeletedSuccess": "Identifiant supprimé", - "credentialDeleteFailed": "Échec de la suppression de l'identifiant", - "noSessionsForUser": "Aucune session active", - "deleteSuccessorLabel": "Transférer les hôtes et les identifiants à", - "deleteSuccessorMe": "Moi (l'administrateur qui supprime)", - "deleteSuccessorNone": "Personne, les supprimer", - "deleteSuccessorDesc": "Tout ce que cet utilisateur a partagé continuera de fonctionner sous le nouveau propriétaire ; choisir « Personne » supprimera ses hôtes, ses identifiants et ses partages.", - "deleteUserDangerDesc": "Supprimer définitivement {{username}} et toutes ses données (hôtes, identifiants, extraits, historique). Cette action est irréversible.", - "deleteUserConfirm": "Supprimer définitivement {{username}} et toutes ses données ?", - "deleteUserAdminBlocked": "Retirez le statut d'administrateur avant de supprimer cet utilisateur.", - "createRoleRequired": "Le nom et le nom d'affichage sont requis", - "createRoleSuccess": "Rôle « {{name}} » créé", - "createRoleFailed": "Échec de la création du rôle", - "apiKeyNameRequired": "Le nom de la clé est requis", - "apiKeyUserRequired": "L'ID utilisateur est requis", - "apiKeyCreatedSuccess": "Clé API « {{name}} » créée", - "apiKeyCreateFailed": "Échec de la création de la clé API", - "exportSuccess": "Base de données exportée avec succès", - "exportFailed": "Échec de l'exportation de la base de données", - "importSelectFile": "Veuillez d'abord sélectionner un fichier", - "importCompleted": "Importation terminée : {{total}} éléments importés, {{skipped}} ignorés", - "importFailed": "Échec de l'importation : {{error}}", - "importError": "Échec de l'importation de la base de données", - "sectionHostDefaults": "Paramètres par défaut des hôtes", "rolePermissions": { "count_one": "{{count}} autorisation", "count_many": "{{count}} autorisations", - "count_other": "{{count}} autorisations", - "editAction": "Modifier les autorisations", - "loadError": "Échec du chargement du catalogue des autorisations", - "saved": "Autorisations du rôle enregistrées", - "saveError": "Échec de l'enregistrement des autorisations du rôle", - "save": "Enregistrer", - "saving": "Enregistrement...", - "pluginDisabled": "Extension désactivée", "groups": { "hosts": "Hôtes", "credentials": "Identifiants", "admin": "Administration" } - }, - "notificationPrivateEndpoints": "Hôtes de notification privés autorisés", - "notificationPrivateEndpointsDesc": "Hôtes privés exacts que les canaux de notification peuvent contacter. Séparez-les par des virgules.", - "updateNotificationEndpointsFailed": "Échec de la mise à jour de la liste d'autorisation des points de terminaison de notification", - "secondFactorsSectionTitle": "Facteurs secondaires", - "secondFactorsNone": "Aucun facteur secondaire inscrit", - "secondFactorUnavailable": "Indisponible", - "resetSecondFactors": "Réinitialiser les facteurs secondaires", - "resetSecondFactorsConfirm": "Supprimer tous les facteurs secondaires pour {{username}} ? Il pourra se connecter avec son mot de passe ou SSO et s'inscrire à nouveau.", - "secondFactorsResetSuccess": "Facteurs secondaires réinitialisés", - "secondFactorsResetFailed": "Échec de la réinitialisation des facteurs secondaires", - "passwordLoginForced": "La connexion par mot de passe est désactivée, mais aucune autre méthode de connexion n'est activée, elle reste donc active pour l'instant. Personne ne se retrouve verrouillé.", - "sslNotRenewed": "Rien ne renouvelle ce certificat. Il expire le {{date}}. Activez le renouvellement automatique dans la section Certificats ACME, ou téléchargez-en un nouveau avant cette date.", - "sslSelfSigned": "Certificat autosigné généré par Termix. Les navigateurs afficheront un avertissement.", - "sslRenewedBy": "Renouvelé automatiquement par {{plugin}}", - "sslIssuer": "Émis par {{issuer}}", - "sslNames": "Couvre {{names}}", - "sslManualTitle": "Télécharger un certificat", - "updateExternalAutoProvisionFailed": "Échec de la mise à jour du paramètre de création automatique", - "hostTags": "Étiquettes d'hôte prédéfinies", - "hostTagsDesc": "Étiquettes que chaque utilisateur voit comme suggestions dans l'éditeur d'hôte. Appuyez sur Espace ou Entrée pour en ajouter une. Supprimer une étiquette ici ne la supprime pas des hôtes.", - "hostTagsError": "Impossible de charger ou d'enregistrer les suggestions d'étiquettes d'hôte.", - "revokeAllSessionsConfirm": "Déconnecter {{username}} partout ?", - "revokeSessionConfirm": "Déconnecter cette session ?", - "revokeSession": "Se déconnecter", - "deleteRoleConfirm": "Supprimer le rôle {{name}} ?", - "revokeKeyConfirm": "Révoquer la clé API {{name}} ?", - "revokeKey": "Révoquer" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Où", - "who": "Qui", - "hostLabel": "Hôte", - "hostPlaceholder": "192.168.1.1 ou example.com", - "portLabel": "Port", - "usernameLabel": "Nom d'utilisateur", - "usernamePlaceholder": "nom d'utilisateur", - "authLabel": "Auth", - "passwordLabel": "Mot de passe", - "passwordPlaceholder": "mot de passe", - "privateKeyLabel": "Clé privée", - "privateKeyPlaceholder": "Coller la clé privée...", - "credentialLabel": "Identifiant", - "credentialPlaceholder": "Sélectionner un identifiant enregistré", - "protocolLabel": "Protocole", - "domainLabel": "Domaine", - "domainPlaceholder": "facultatif", - "connectToAction": "Se connecter à {{name}}", - "sshProtocol": "SSH", - "noTarget": "Rien d'installé ne peut se connecter à ce type d'hôte" + "usernameLabel": "Nom d'utilisateur" }, "keybindings": { - "description": "Associer des touches à des actions dans le terminal et l'application, ou modifier les raccourcis intégrés.", - "defaultsHeading": "Raccourcis intégrés", - "fixedHeading": "Raccourcis de l'application", - "fixed": { - "splitRight": "Diviser à droite", - "splitDown": "Diviser vers le bas", - "zoomPane": "Agrandir le volet actif", - "navigatePane": "Naviguer entre les volets", - "nextTab": "Onglet suivant", - "previousTab": "Onglet précédent", - "jumpTab": "Aller à l'onglet", - "previousView": "Retour à la vue précédente de la barre latérale", - "fullscreen": "Basculer en plein écran" - }, - "customHeading": "Raccourcis personnalisés", - "addBinding": "Ajouter un raccourci", - "addBindingTitle": "Ajouter un raccourci", - "editBindingTitle": "Modifier le raccourci", - "loading": "Chargement...", - "noCustomBindings": "Aucun raccourci personnalisé pour l'instant", - "defaultBadge": "Par défaut", - "customizedBadge": "Personnalisé", - "customize": "Personnaliser", - "resetToDefault": "Réinitialiser par défaut", - "resetAllToDefaults": "Tout réinitialiser par défaut", - "cancel": "Annuler", - "saveBinding": "Enregistrer le raccourci", - "saveError": "Échec de l'enregistrement des raccourcis clavier", - "pressKeysToRecord": "Combinaison de touches", - "pressKeysPlaceholder": "Cliquez et appuyez sur les touches", - "recording": "Appuyez sur les touches...", - "comboRequiredError": "Appuyez d'abord sur une combinaison de touches", - "conflictWarning": "Cette combinaison est déjà associée à {{combo}}. L'enregistrement fera déclencher les deux.", - "actionLabel": "Action", "actionNextTab": "Passer à l'onglet suivant", "actionPreviousTab": "Passer à l'onglet précédent", "actionOpenCommandPalette": "Ouvrir la recherche rapide", - "actionReconnectSession": "Reconnecter la session actuelle", - "unavailableAction": "{{type}} (non disponible)", - "actionRequiredError": "Choisissez d'abord une action", - "deleteConfirm": "Supprimer ce raccourci clavier ?", - "resetAllConfirm": "Réinitialiser tous les raccourcis clavier à leurs valeurs par défaut ?" + "actionReconnectSession": "Reconnecter la session actuelle" }, "userProfile": { - "storageModeLocal": "Navigateur", - "storageModeCloud": "Base de données", - "storageModeDescription": "Le navigateur stocke les paramètres uniquement dans ce navigateur. La base de données synchronise avec le serveur et charge sur n'importe quel appareil.", - "resetToDefaults": "Réinitialiser par défaut", - "resetToDefaultsSuccess": "Paramètres réinitialisés par défaut.", - "storageModeSwitch": "Stockage des préférences", - "sectionAccount": "Compte", - "desktopProfileTitle": "Cet appareil uniquement", - "desktopProfileDescription": "Ce profil réside sur cet appareil et se connecte de manière autonome. Liez-le à un serveur Termix pour utiliser les mêmes hôtes et paramètres sur tous les appareils.", - "sectionInterface": "Interface", - "interfacePresetDesc": "Le niveau de détail affiché par Termix. Toutes les fonctionnalités restent disponibles.", "preset_simple": "Simple", "preset_simple_desc": "L'essentiel uniquement.", "preset_balanced": "Équilibré", "preset_balanced_desc": "La mise en page standard.", "preset_advanced": "Avancé", "preset_advanced_desc": "Tout activé, densément agencé.", - "presetClearOverrides": "Tout réinitialiser", - "presetOverridesTitle": "Personnalisé", - "presetRevertArea": "Rétablir", - "presetConfirmTitle": "Passer à {{preset}} ?", - "presetConfirmDesc": "Cela réinitialise votre barre latérale, navigation, mise en page du tableau de bord, barre d'outils du terminal et vue du gestionnaire de fichiers. Vos hôtes, identifiants et page d'accueil ne sont pas modifiés.", - "presetConfirmApply": "Appliquer le preset", - "runSetupAgainDesc": "Parcourez à nouveau la configuration initiale.", - "runSetupAgainButton": "Exécuter la configuration", "uiArea_chrome": "Interface de l'application", "uiArea_hostList": "Liste des hôtes", "uiArea_credentialList": "Liste des identifiants", @@ -1648,127 +1128,14 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Gestionnaire de fichiers", "uiArea_hostEditor": "Éditeur d'hôte", - "sectionAppearance": "Apparence", - "sectionSecurity": "Sécurité", - "sectionApiKeys": "Clés API", - "sectionData": "Données", - "usernameLabel": "Nom d'utilisateur", - "roleLabel": "Rôle", - "roleAdministrator": "Administrateur", - "authMethodLabel": "Méthode d'authentification", - "authMethodLocal": "Local", - "twoFaLabel": "2FA", - "twoFaOn": "Activé", - "twoFaOff": "Désactivé", - "versionLabel": "Version", - "cliTitle": "Termix CLI", - "cliDescription": "Ouvrez des terminaux, exécutez des commandes et déplacez des fichiers depuis votre propre shell.", - "cliLearnMore": "En savoir plus", - "deleteAccount": "Supprimer le compte", - "deleteAccountDescription": "Supprimer définitivement votre compte", - "deleteButton": "Supprimer", - "deleteAccountPermanent": "Cette action est permanente et ne peut pas être annulée.", - "deleteAccountWarning": "Toutes les sessions, hôtes, identifiants et paramètres seront supprimés définitivement.", - "confirmPasswordDeletePlaceholder": "Entrez votre mot de passe pour confirmer", "languageLabel": "Langue", "themeLabel": "Thème", "fontSizeLabel": "Taille de la police", "interfaceFontLabel": "Police de l'interface", "interfaceFontDescription": "Modifie la police de l'interface de l'application. Les profils de terminal conservent leurs propres paramètres de police.", "accentColorLabel": "Couleur d'accentuation", - "keyboardShortcuts": "Raccourcis clavier", - "keyboardShortcutsDescription": "Personnaliser les raccourcis de copie, collage et commandes du terminal", - "manageShortcuts": "Gérer", - "commandPalette": "Palette de commandes", - "commandPaletteDesc": "Activer le raccourci clavier", - "reopenTabsOnLogin": "Réouvrir les onglets à la connexion", - "reopenTabsOnLoginDesc": "Restaurez vos onglets ouverts lorsque vous vous connectez ou actualisez la page, même depuis un autre appareil", - "confirmTabClose": "Confirmer la fermeture de l'onglet", - "confirmTabCloseDesc": "Demander confirmation avant de fermer les onglets du terminal", - "showTabNumbers": "Afficher les numéros d'onglets", - "showTabNumbersDesc": "Affiche un numéro sur chaque onglet pour aider à les distinguer", - "settingsAppRail": "Barre d'applications", - "sidebarSettingsMoved": "Les paramètres d'affichage de la barre latérale des hôtes ont été déplacés vers le panneau Personnaliser la barre latérale, accessible depuis la barre d'outils des Hôtes.", - "showHostTags": "Afficher les étiquettes des hôtes", - "showHostTagsDesc": "Afficher les étiquettes dans la liste des hôtes", - "statusColors": "Couleurs de statut réelles", - "statusColorsDesc": "Utiliser le vert/rouge pour le statut en ligne/hors ligne au lieu de la couleur d'accentuation", - "pinAppRail": "Épingler la barre d'applications", - "pinAppRailDesc": "Garder la barre d'applications de la barre latérale gauche toujours déployée au lieu de la déployer au survol", - "expandAppRailOnHover": "Déployer la barre d'applications au survol", - "expandAppRailOnHoverDesc": "Permettre à la barre d'applications de la barre latérale gauche de se déployer lorsque le pointeur passe dessus", - "appRailHoverPushesContent": "Déplacer le contenu lors de l'expansion", - "appRailHoverPushesContentDesc": "Faire de la place pour la barre latérale élargie au lieu de l'afficher par-dessus la page. Les sessions ouvertes, comme le bureau à distance, sont redimensionnées à chaque fois.", - "showPinAppRailButton": "Afficher le bouton d'épinglage de la barre d'applications", - "showPinAppRailButtonDesc": "Affiche un bouton dans la barre d'applications pour l'épingler ouverte. Désactivé par défaut.", - "settingsNavigation": "Navigation", - "navigationTabsDesc": "Choisissez quels onglets apparaissent dans la barre d'applications", - "settingsUpdates": "Mises à jour", - "disableUpdateChecks": "Désactiver les vérifications de mise à jour", - "disableUpdateChecksDesc": "Arrêter de vérifier les mises à jour", - "changePassword": "Changer le mot de passe", - "currentPasswordLabel": "Mot de passe actuel", - "currentPasswordPlaceholder": "Mot de passe actuel", - "newPasswordLabel": "Nouveau mot de passe", - "newPasswordPlaceholder": "Nouveau mot de passe", - "confirmPasswordLabel": "Confirmer le nouveau mot de passe", - "confirmPasswordPlaceholder": "Confirmer le nouveau mot de passe", - "updatePassword": "Mettre à jour le mot de passe", - "createApiKeyTitle": "Créer une clé API", - "createApiKeyDescription": "Générer une nouvelle clé API pour l'accès programmatique.", - "apiKeyNameLabel": "Nom", - "apiKeyNamePlaceholder": "ex. Pipeline CI", - "expiryDateLabel": "Date d'expiration", - "optional": "facultatif", - "cancel": "Annuler", - "createKey": "Créer une clé", - "apiKeyCreatedWarning": "Clé créée — copiez-la maintenant, elle ne sera plus affichée.", - "copyApiKey": "Copier la clé API", - "copiedToClipboard": "Copié dans le presse-papiers", "apiKeyCount_one": "{{count}} clé", "apiKeyCount_many": "{{count}} clés", - "apiKeyCount_other": "{{count}} clés", - "newKey": "Nouvelle clé", - "noApiKeys": "Aucune clé API pour le moment.", - "apiKeyActive": "Active", - "apiKeyUsageHint": "Incluez votre clé dans l'en-tête", - "apiKeyUsageHintHeader": ".", - "apiKeyPermissionsHint": "Les clés héritent des permissions de l'utilisateur qui les a créées.", - "exportData": "Exporter mes données", - "exportDataDesc": "Téléchargez une sauvegarde de vos hôtes, identifiants et paramètres pour les transférer sur un autre appareil", - "export": "Exporter", - "exporting": "Exportation en cours...", - "importData": "Importer mes données", - "importDataDesc": "Restaurez vos hôtes, identifiants et paramètres à partir d'un fichier de sauvegarde .sqlite", - "importDataSelected": "Sélectionné : {{name}}", - "selectFile": "Sélectionner un fichier", - "changeFile": "Modifier", - "import": "Importer", - "importing": "Importation en cours...", - "exportSuccess": "Données exportées avec succès", - "exportFailed": "Échec de l'exportation des données", - "importSelectFile": "Veuillez d'abord sélectionner un fichier", - "importCompleted": "Importation terminée : {{total}} éléments importés, {{skipped}} ignorés", - "importFailed": "Échec de l'importation : {{error}}", - "roleUser": "Utilisateur", - "authMethodDual": "Authentification double", - "authMethodExternal": "Externe", - "done": "Terminé", - "apiKeyNameRequired": "Le nom de la clé est requis", - "apiKeyCreated": "Clé API « {{name}} » créée", - "apiKeyCreateFailed": "Échec de la création de la clé API", - "apiKeyUser": "Utilisateur", - "apiKeyExpires": "Expire le", - "apiKeyRevoked": "Clé API « {{name}} » révoquée", - "apiKeyRevokeFailed": "Échec de la révocation de la clé API", - "passwordFieldsRequired": "Les mots de passe actuel et nouveau sont requis", - "passwordMismatch": "Les mots de passe ne correspondent pas", - "passwordTooShort": "Le mot de passe doit contenir au moins 6 caractères", - "passwordUpdated": "Mot de passe mis à jour avec succès", - "passwordUpdateFailed": "Échec de la mise à jour du mot de passe", - "deletePasswordRequired": "Le mot de passe est requis pour supprimer votre compte", - "deleteFailed": "Échec de la suppression du compte", - "deleting": "Suppression en cours...", "colorPickerTooltip": "Ouvrir le sélecteur de couleurs", "themeSystem": "Système", "themeLight": "Clair", @@ -1779,18 +1146,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Connecté à {{server}}", - "linkedProfileDescription": "Cet appareil utilise votre compte sur le serveur et conserve une copie de vos données, ce qui lui permet de fonctionner hors ligne.", - "manageSync": "Gérer la synchronisation", - "setUpSync": "Lier à un serveur", - "settingsTabsAndShortcuts": "Onglets et raccourcis", - "onBetaTitle": "Vous utilisez une version bêta", - "onBetaDescription": "Merci de tester. Dites-nous ce qui ne fonctionne pas.", - "tryBetaTitle": "Testez les nouvelles fonctionnalités en avant-première", - "tryBetaDescription": "Rejoignez le programme bêta dans Mises à jour.", - "sendBetaFeedback": "Envoyer un retour sur la bêta", - "openUpdates": "Mises à jour" + "themeGruvbox": "Gruvbox" } } }, @@ -2055,8 +1411,7 @@ "hasDependents": "{{name}} est requis par {{list}}. Désactivez-les ou désinstallez-les d'abord.", "missingDependencies": "{{name}} nécessite {{list}}, qui n'est pas installé.", "consentChanged": "Les permissions demandées par ce plugin ont changé depuis votre dernière consultation. Vérifiez à nouveau la liste.", - "upload": "Impossible de lire {{name}} : {{error}}", - "developerMode": "Impossible de modifier le mode développeur : {{error}}" + "upload": "Impossible de lire {{name}} : {{error}}" }, "data": { "title": "Données stockées", @@ -2188,13 +1543,7 @@ "browsePlugins": "Parcourir les plugins", "loading": "Chargement", "developer": { - "title": "Mode développeur de plugins", - "hint": "Permet aux administrateurs d'installer des plugins à partir d'un fichier .tmxplug dans l'onglet Plugins, sans les vérifications du registre. Utilisez-le pour créer et tester vos propres plugins.", - "enableTitle": "Activer le mode développeur ?", - "enableBody": "Les administrateurs pourront installer des plugins à partir de fichiers non vérifiés par Termix. Un plugin peut faire tout ce que ses capacités lui permettent, alors activez cette option uniquement pendant le développement ou les tests de plugins.", - "enable": "Activer", - "installFromFile": "Installer depuis un fichier", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS est défini, l'installation depuis un fichier reste donc bloquée." + "installFromFile": "Installer depuis un fichier" }, "count": { "downloads_one": "{{formatted}} téléchargement", @@ -2233,71 +1582,7 @@ "secretSet": "Défini", "secretNotSet": "Non défini", "secretReplace": "Remplacer", - "pluginSettingsSaved": "Paramètres enregistrés", - "pluginSettingsInvalid": "Certains paramètres n'ont pas pu être enregistrés. Vérifiez les champs mis en surbrillance.", - "pluginSettingsSaveFailed": "Échec de l'enregistrement des paramètres", - "pluginSettingsLoadFailed": "Échec du chargement des paramètres", - "featureUnavailable": "{{name}} n'est pas disponible pour le moment. Ces paramètres sont enregistrés mais ne prendront pas effet.", - "account": "Compte", - "security": "Sécurité", - "apiKeys": "Clés API", - "data": "Données et synchronisation", - "interface": "Interface", - "appearance": "Apparence", - "keybindings": "Raccourcis clavier", - "adminGeneral": "Général", - "adminUsers": "Utilisateurs", - "adminSessions": "Sessions", - "adminRoles": "Rôles", - "adminHostDefaults": "Paramètres par défaut des hôtes", - "adminBranding": "Marque", - "adminDatabase": "Base de données", - "adminSsl": "SSL", - "adminApiKeys": "Clés API", - "adminAuditLog": "Journal d'audit", - "bandYou": "Votre compte", - "bandApp": "Cette application", - "bandPlugins": "Plugins", - "bandInstance": "Ce serveur", - "searchPlaceholder": "Rechercher dans les paramètres", - "noResults": "Aucun paramètre ne correspond.", - "pages": "Pages", - "instanceSettings": "Paramètres du serveur", - "nothingHere": "Rien à configurer ici.", - "searchPage": "Rechercher sur cette page", - "noPageMatches": "Rien sur cette page ne correspond.", - "updates": { - "title": "Mises à jour", - "betaProgram": "Programme bêta", - "betaIntro": "Les versions bêta sont des builds précoces de la prochaine version de Termix. Elles sont publiées les mardis et vendredis lorsqu'il y a des nouveautés à tester. Elles peuvent contenir des bugs, et vos retours permettent d'améliorer la version stable.", - "termixBetas": "Versions bêta de Termix", - "termixBetasHint": "Informez-moi des nouvelles versions bêta, pas seulement des versions stables.", - "runningBetaBuild": "Vous utilisez une version bêta. Pour quitter, revenez à une image ou un installateur stable.", - "howToInstall": "Comment obtenir la version bêta", - "desktopInstall": "Téléchargez l'installateur bêta et installez-le par-dessus celui-ci.", - "downloadBeta": "Télécharger {{version}}", - "dockerInstall": "Changez votre image pour la balise bêta et redémarrez le conteneur :", - "copy": "Copier", - "copied": "Copié", - "copyFailed": "Impossible de copier", - "learnMore": "En savoir plus sur les versions bêta", - "feedback": "Retour d'information", - "feedbackHint": "Vous avez trouvé un bug ou une idée ? Elle sera transmise directement aux développeurs avec votre version renseignée.", - "sendFeedback": "Envoyer un retour sur la version bêta", - "releases": "Versions", - "thisVersion": "Cette version", - "newestStable": "Dernière version stable", - "newestBeta": "Dernière version bêta", - "noRelease": "Aucune pour le moment", - "pluginBetas": "Versions bêta des plugins", - "pluginBetasIntro": "Chaque plugin peut utiliser ses propres versions bêta. Pour en essayer un, ouvrez-le et appuyez sur Essayer la bêta.", - "openPlugins": "Ouvrir les plugins", - "waitingForStable": "Retour à la version stable. Reste sur {{version}} jusqu'à ce qu'une version stable plus récente soit disponible.", - "backToStable": "Retour à la version stable", - "allPluginsBeta": "Utiliser les versions bêta pour tous les plugins", - "allPluginsStable": "Tous les plugins revenus à la version stable", - "saveFailed": "Impossible de sauvegarder la modification" - } + "featureUnavailable": "{{name}} n'est pas disponible pour le moment. Ces paramètres sont enregistrés mais ne prendront pas effet." }, "managerCard": { "refresh": "Actualiser", @@ -2307,86 +1592,16 @@ "filter": "Filtrer..." }, "sync": { - "server": "Serveur Termix", - "account": "Compte", - "status": "État", - "never": "jamais", - "justNow": "à l'instant", "minutesAgo_one": "il y a {{count}} minute", "minutesAgo_many": "il y a {{count}} minutes", "minutesAgo_other": "il y a {{count}} minutes", "hoursAgo_one": "il y a {{count}} heure", "hoursAgo_many": "il y a {{count}} heures", "hoursAgo_other": "il y a {{count}} heures", - "actionFailed": "Cela n'a pas fonctionné. Réessayez.", - "unlinkedTitle": "Cet appareil uniquement", - "unlinkedBody": "Termix fonctionne de manière autonome sur cet appareil. Liez-le à votre serveur Termix pour garder tout en synchronisation.", - "unlinkedPointHosts": "Vos hôtes, identifiants, extraits et paramètres vous suivent sur chaque appareil.", - "unlinkedPointOffline": "Tout fonctionne toujours lorsque le serveur n'est pas accessible, et se met à jour plus tard.", - "unlinkedPointAccount": "Vous vous connectez avec votre compte serveur, et les hôtes que d'autres personnes ont partagés avec vous apparaissent également ici.", - "linkButton": "Lier à un serveur", - "state": { - "syncing": "Synchronisation", - "offline": "Serveur inaccessible", - "error": "Synchronisation arrêtée", - "signedOut": "Déconnecté", - "synced": "Synchronisé {{time}}" - }, "pending_one": "{{count}} modification en attente de synchronisation", "pending_many": "{{count}} modifications en attente de synchronisation", "pending_other": "{{count}} modifications en attente de synchronisation", - "signInAgain": "Se reconnecter", - "syncNow": "Synchroniser maintenant", - "unlink": "Dissocier", - "unlinked": "Cet appareil n'est plus lié", - "unlinkTitle": "Dissocier cet appareil ?", - "unlinkDescription": "Cela arrête la synchronisation et vous déconnecte du serveur. Les hôtes partagés avec vous par d'autres utilisateurs sont supprimés de cet appareil dans tous les cas.", - "unlinkKeepTitle": "Conserver mes données ici", - "unlinkKeepBody": "Vos hôtes, identifiants et paramètres restent sur cet appareil et continuent de fonctionner de manière autonome.", - "unlinkRemoveTitle": "Supprimer les données synchronisées", - "unlinkRemoveBody": "Tout ce qui provenait du serveur est supprimé de cet appareil. Seuls les hôtes conservés localement sur cet appareil restent.", - "conflictsTitle": "Conflits", - "conflictsDescription": "Ces éléments ont été modifiés ici et sur le serveur en même temps. La version du serveur est actuellement utilisée. Conservez la vôtre pour l'envoyer au serveur à la place.", - "keepMine": "Conserver la mienne", - "keepServer": "Conserver celle du serveur", - "errorsTitle": "Non synchronisé", - "errorsDescription": "Le serveur n'a pas accepté ces modifications. Elles restent sur cet appareil.", - "errorPermission": "Votre compte sur le serveur n'a pas l'autorisation d'effectuer cette modification.", - "retry": "Réessayer", - "whatSyncs": "Ce qui est synchronisé", - "whatSyncsDescription": "Désactivez tout ce que vous souhaitez conserver uniquement sur cet appareil.", - "coreGroup": "Termix", - "notOnServer": "Le serveur ne dispose pas de cela", - "notOnDevice": "Pas encore sur cet appareil", - "localOnlyHint": "Vous pouvez également conserver des hôtes ou des dossiers individuels sur cet appareil via leurs paramètres.", - "originTitle": "Origine des connexions", - "originDescription": "Connectez-vous aux hôtes depuis cet appareil ou via le serveur. Vous pouvez modifier cela pour chaque hôte.", - "originLocal": "Cet appareil", - "originRemote": "Le serveur", - "entities": { - "hosts": "Hôtes", - "sshCredentials": "Identifiants", - "sshFolders": "Dossiers", - "userPreferences": "Préférences", - "pluginUserSettings": "Paramètres des plugins", - "sharedHosts": "Hôtes partagés avec vous", - "sharedCredentials": "Identifiants partagés avec vous", - "vaultProfiles": "Profils Vault", - "snippetFolders": "Dossiers de snippets", - "snippets": "Snippets", - "dashboardServiceLinks": "Liens de service", - "homepageItems": "Éléments de la page d'accueil", - "networkTopology": "Carte réseau", - "workspaces": "Espaces de travail", - "hostDefaults": "Paramètres par défaut des hôtes", - "hostDefaultsAdmin": "Paramètres par défaut des hôtes du serveur", - "aiProviders": "Fournisseurs d'IA", - "homepageLayouts": "Mises en page de la page d'accueil", - "accountProfile": "Profil du compte" - }, "proxy": { - "title": "Proxy inverse", - "description": "Uniquement nécessaire lorsque quelque chose comme Cloudflare Access ou une page de connexion se trouve devant votre serveur.", "headersTitle": "En-têtes supplémentaires", "headersHint": "Envoyés avec chaque requête au serveur, par exemple un jeton de service Cloudflare Access.", "headerName": "Nom de l'en-tête", @@ -2399,8 +1614,7 @@ "username": "Nom d'utilisateur", "password": "Mot de passe", "allowInvalidCertificate": "Faire confiance à un certificat autosigné", - "allowInvalidCertificateHint": "Uniquement pour votre propre serveur, lorsque son certificat ne provient pas d'une autorité de confiance reconnue.", - "saved": "Enregistré" + "allowInvalidCertificateHint": "Uniquement pour votre propre serveur, lorsque son certificat ne provient pas d'une autorité de confiance reconnue." }, "problems": { "invalidUrl": "Cela ne ressemble pas à une adresse web.", @@ -2440,6 +1654,27 @@ "linking": "Association et première synchronisation en cours...", "linked": "Associé. Vos données sont en cours de synchronisation.", "signedInAgain": "Connecté. La synchronisation est de nouveau en cours." + }, + "entities": { + "hosts": "Hôtes", + "sshCredentials": "Identifiants", + "sshFolders": "Dossiers", + "userPreferences": "Préférences", + "pluginUserSettings": "Paramètres des plugins", + "sharedHosts": "Hôtes partagés avec vous", + "sharedCredentials": "Identifiants partagés avec vous", + "vaultProfiles": "Profils Vault", + "snippetFolders": "Dossiers de snippets", + "snippets": "Snippets", + "dashboardServiceLinks": "Liens de service", + "homepageItems": "Éléments de la page d'accueil", + "networkTopology": "Carte réseau", + "workspaces": "Espaces de travail", + "hostDefaults": "Paramètres par défaut des hôtes", + "hostDefaultsAdmin": "Paramètres par défaut des hôtes du serveur", + "aiProviders": "Fournisseurs d'IA", + "homepageLayouts": "Mises en page de la page d'accueil", + "accountProfile": "Profil du compte" } }, "hostDefaults": { @@ -2456,34 +1691,15 @@ "resetTitle": "Cet hôte définit sa propre valeur. Cliquez pour utiliser à nouveau la valeur par défaut de {{source}}", "clearTitle": "Défini à ce niveau. Cliquez pour l'effacer et utiliser {{source}} à la place", "inheritedTitle": "Suit la valeur par défaut de {{source}}", - "titleAdmin": "Valeurs par défaut des hôtes du serveur", - "titleUser": "Mes valeurs par défaut des hôtes", - "titleFolder": "Valeurs par défaut du dossier : {{name}}", - "descriptionAdmin": "Valeurs par défaut pour chaque hôte de ce serveur. Les valeurs par défaut d'un utilisateur, d'un dossier ou de l'hôte lui-même peuvent toujours définir une valeur différente. Modifiez un champ pour le définir ici, ou effacez-le pour le laisser non défini.", - "descriptionUser": "Valeurs par défaut pour tous vos hôtes, outrepassant celles du serveur. Un dossier ou l'hôte lui-même peut toujours définir une valeur différente. Modifiez un champ pour le définir ici, ou effacez-le pour le laisser non défini.", - "descriptionFolder": "Valeurs par défaut pour les hôtes de ce dossier et de ses sous-dossiers, outrepassant les vôtres. Un hôte peut toujours définir une valeur différente. Modifiez un champ pour le définir ici, ou effacez-le pour le laisser non défini.", - "save": "Enregistrer les valeurs par défaut", "saved_one": "Valeurs par défaut enregistrées. {{count}} hôte a été mis à jour.", "saved_many": "Valeurs par défaut enregistrées. {{count}} hôtes ont été mis à jour.", "saved_other": "Valeurs par défaut enregistrées. {{count}} hôtes ont été mis à jour.", - "savedInBackground": "Valeurs par défaut enregistrées. Les hôtes sont mis à jour en arrière-plan.", "appliedToHosts_one": "{{count}} hôte a été mis à jour avec les nouvelles valeurs par défaut.", "appliedToHosts_many": "{{count}} hôtes ont été mis à jour avec les nouvelles valeurs par défaut.", "appliedToHosts_other": "{{count}} hôtes ont été mis à jour avec les nouvelles valeurs par défaut.", - "saveFailed": "Impossible d'enregistrer les valeurs par défaut", - "loadFailed": "Impossible de charger les valeurs par défaut", - "confirmTitle": "Enregistrer les valeurs par défaut ?", "confirmChanges_one": "{{count}} hôte suit ces valeurs par défaut et sera modifié.", "confirmChanges_many": "{{count}} hôtes suivent ces valeurs par défaut et seront modifiés.", "confirmChanges_other": "{{count}} hôtes suivent ces valeurs par défaut et seront modifiés.", - "confirmNoChanges": "Aucun hôte existant n'est modifié. Les nouveaux hôtes commenceront avec ces valeurs par défaut.", - "menuMyDefaults": "Mes valeurs par défaut des hôtes", - "folderDefaultsAction": "Valeurs par défaut du dossier", - "adminSectionDescription": "Définissez les valeurs par défaut que chaque hôte de ce serveur suit, pour chaque paramètre d'un hôte, y compris ceux de chaque plugin. Les utilisateurs et les dossiers peuvent définir les leurs par-dessus, et tout hôte peut toujours utiliser sa propre valeur.", - "editServerDefaults": "Modifier les valeurs par défaut du serveur", - "resetMenu": "Réinitialiser", - "resetAll": "Tout réinitialiser", - "resetCore": "Réinitialiser la connexion et SSH", "resetDone_one": "{{count}} hôte utilise désormais ses valeurs par défaut.", "resetDone_many": "{{count}} hôtes utilisent désormais leurs valeurs par défaut.", "resetDone_other": "{{count}} hôtes utilisent désormais leurs valeurs par défaut." @@ -2498,50 +1714,16 @@ "fields": { "secretSaved": "Enregistré. Tapez pour le remplacer." }, - "sharing": { - "revokeConfirm": "Supprimer l'accès pour {{name}} ?", - "revoke": "Supprimer l'accès" - }, "manage": { - "searchSettings": "Rechercher dans les paramètres", - "noMatchingSettings": "Aucun paramètre ne correspond.", - "sections": "Sections", - "sectionNeedsAttention": "Quelque chose ici nécessite une attention particulière", "needsAttention_one": "Un élément nécessite une attention particulière.", "needsAttention_many": "{{count}} éléments nécessitent une attention particulière.", "needsAttention_other": "{{count}} éléments nécessitent une attention particulière.", - "bandHost": "Hôte", - "bandFeatures": "Protocoles et plugins", - "bandCredential": "Identifiant", - "sshConnection": "Connexion SSH", - "errorAddressRequired": "Une adresse est requise.", - "errorPortRange": "Utilisez un port compris entre 1 et 65535.", - "defaults": "Valeurs par défaut", - "searchHosts": "Rechercher des hôtes", - "searchCredentials": "Rechercher des identifiants", - "searchDefaults": "Rechercher des valeurs par défaut", - "addCredential": "Ajouter un identifiant", - "nothingMatches": "Aucun résultat", - "nothingYet": "Rien ici pour le moment", - "emptyHostsHint": "Ajoutez un hôte et il apparaîtra ici, dans le dossier que vous lui assignez.", - "emptyCredentialsHint": "Les identifiants que vous enregistrez peuvent être réutilisés par n'importe quel hôte.", - "collapse": "Réduire", - "expand": "Développer", - "cannotBeUndone": "Cette action est irréversible.", - "hostNotFound": "Cet hôte est introuvable. Essayez de rafraîchir la liste.", "hostCount_one": "{{count}} hôte", "hostCount_many": "{{count}} hôtes", "hostCount_other": "{{count}} hôtes", "credentialCount_one": "{{count}} identifiant", "credentialCount_many": "{{count}} identifiants", - "credentialCount_other": "{{count}} identifiants", - "newHost": "Nouvel hôte", - "newCredential": "Nouvel identifiant", - "advanced": "Avancé", - "pickHost": "Sélectionnez un hôte à modifier", - "pickCredential": "Sélectionnez un identifiant à modifier", - "pickDefaults": "Sélectionnez un niveau de valeurs par défaut à modifier", - "pickHint": "Tout ce qui concerne une connexion se trouve ici, organisé pour faciliter la recherche." + "credentialCount_other": "{{count}} identifiants" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/he_IL.json b/src/ui/locales/translated/he_IL.json index 183695f87..f8acbacfb 100644 --- a/src/ui/locales/translated/he_IL.json +++ b/src/ui/locales/translated/he_IL.json @@ -141,7 +141,6 @@ "continue": "המשך", "error": "שגיאה", "unsavedChanges": "שינויים שלא נשמרו", - "more": "עוד", "loading": "טוען...", "host": "מארח", "selectHost": "בחר מארח...", @@ -154,7 +153,6 @@ "cancel": "ביטול", "username": "שם משתמש", "login": "התחברות", - "logout": "התנתקות", "register": "הרשמה", "password": "סיסמה", "confirmPassword": "אישור סיסמה", @@ -165,8 +163,6 @@ "rename": "שנה שם", "edit": "עריכה", "confirm": "אישור", - "next": "הבא", - "previous": "הקודם", "refresh": "רענן", "language": "שפה", "backendReconnected": "חיבור לשרת שוחזר", @@ -234,10 +230,6 @@ "pluginsDocsLink": "קרא על כל אחד מהם" }, "desktopUpdates": { - "title": "אפליקציית שולחן עבודה", - "mode": "עדכונים", - "modeHint": "כך האפליקציה מקבלת גרסאות חדשות.", - "manualModeHint": "עותק זה אינו יכול לעדכן את עצמו, לכן Termix רק מודיע לך כאשר גרסה חדשה זמינה.", "modeAutomatic": "אוטומטי", "modePrompt": "שאל קודם", "modeNever": "לעולם לא", @@ -247,15 +239,6 @@ "onboardingTitle": "עדכוני אפליקציה", "onboardingBody": "אפליקציית שולחן העבודה יכולה כעת לעדכן את עצמה. בחר כיצד תרצה שגרסאות חדשות יגיעו. ניתן לשנות זאת מאוחר יותר בהגדרות, עדכונים.", "onboardingManual": "עותק זה של האפליקציה הותקן בדרך שאינה מאפשרת עדכון עצמי, לכן Termix יודיע לך כאשר גרסה חדשה זמינה עם קישור להורדה.", - "status": "גרסה {{version}}", - "statusIdle": "טרם נבדק", - "statusChecking": "בודק אם יש עדכונים", - "statusAvailable": "גרסה {{version}} זמינה", - "statusDownloading": "מוריד את {{version}} ({{progress}}%)", - "statusReady": "גרסה {{version}} מוכנה. הפעל מחדש כדי להתקין.", - "statusUpToDate": "יש לך את הגרסה העדכנית ביותר", - "statusError": "לא ניתן לבדוק אם יש עדכונים. נסה שוב מאוחר יותר.", - "checkNow": "בדוק עכשיו", "download": "הורד", "restart": "הפעל מחדש עכשיו", "later": "מאוחר יותר", @@ -269,26 +252,11 @@ "terminal": "טרמינל", "close": "סגור", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "העתק סיסמה", - "copySudoPassword": "העתק סיסמת Sudo", - "passwordCopied": "הסיסמה הועתקה ללוח", - "failedToCopyPassword": "העתקת הסיסמה נכשלה", - "refreshTab": "רענן חיבור", - "renameTab": "שנה שם לשונית", "dashboard": "לוח בקרה", "quickConnect": "חיבור מהיר", - "openAsTabHint": "Ctrl+קליק או קליק אמצעי לפתיחה כלשונית", - "openAsTab": "פתח כלשונית", - "openInRightDock": "פתח בדוק הימני", - "closeRightDock": "סגור דוק ימני", - "toggleRightDock": "החלף דוק ימני", "hosts": "מארחים", "credentials": "אישורי גישה", "connections": "חיבורים", - "keepSideMenuOpen": "שמור תפריט פתוח", - "collapseSideMenu": "כווץ תפריט", - "roleAdministrator": "מנהל מערכת", - "roleUser": "משתמש", "sync": "סנכרון", "reconnectDisconnectedTerminals": "חבר מחדש את כל המסופים המנותקים", "reconnectingTerminals_one": "מחבר מחדש מסוף אחד", @@ -300,31 +268,12 @@ "reconnectTerminalsFailed_other": "לא ניתן להתחיל לחבר מחדש {{count}} מסופים", "fullscreenUnsupported": "מצב מסך מלא אינו נתמך בדפדפן זה", "fullscreenFailed": "לא ניתן להחליף למצב מסך מלא", - "resetSidebarWidth": "אפס רוחב", - "collapseSidebar": "כווץ סרגל צד", - "openSidebar": "פתח סרגל צד", "confirmCloseHost": "לסגור את {{host}}?", - "enterFullscreen": "עבור למצב מסך מלא (Ctrl+Shift+F)", - "exitFullscreen": "צא ממצב מסך מלא (Ctrl+Shift+F)", - "group": { - "objects": "שלך", - "tools": "כלים", - "system": "מערכת" - }, - "searchEverything": "חפש מארחים, לשוניות ופעולות", - "search": "חיפוש", "hiddenCount_one": "{{count}} מוסתר", "hiddenCount_two": "{{count}} מוסתרים", "hiddenCount_other": "{{count}} מוסתרים", - "showInRail": "הצג בסרגל הצד", - "moveUp": "הזז למעלה", - "moveDown": "הזז למטה", - "resetRailOrder": "אפס סדר", - "hideFromRail": "הסתר מסרגל הצד", - "openSettings": "פתח הגדרות", "settings": "הגדרות", "manage": "נהל", - "mobileNavigation": "ניווט", "plugins": "תוספים" }, "hosts": { @@ -930,35 +879,14 @@ "importSummary": "ייבוא הושלם: {{imported}} יובאו, {{updated}} עודכנו, {{failed}} נכשלו", "importHostsFailed": "ייבוא המארחים נכשל" }, - "commandPalette": { - "searchPlaceholder": "חפש מארחים, פקודות או הגדרות...", - "quickActions": "פעולות מהירות", - "navigation": "ניווט", - "orShortcut": "או", - "addNewHost": "הוסף מארח חדש", - "adminSettings": "הגדרות מנהל", - "addCredential": "הוסף אישור", - "recentActivity": "פעילות אחרונה", - "serversAndHosts": "שרתים ומארחים", - "noHostsFound": "לא נמצאו מארחים התואמים ל-\"{{search}}\"", - "links": "קישורים", - "navigate": "ניווט", - "select": "בחר", - "pluginActions": "פעולות נוספות", - "noTargetTab": "אין לשונית מסוף פתוחה", - "documentation": "תיעוד" - }, "splitScreen": { "title": "מסך מפוצל", "defaultLabel": "פיצול {{number}}", "splitRight": "פצל ימינה", "splitDown": "פצל למטה", - "addToSplit": "הוסף ל-{{split}}", "paneEmptyItem": "חלון {{index}}: ריק", "paneItem": "חלון {{index}}: {{label}}", "paneNumber": "חלון {{index}}", - "newPaneRight": "חלון חדש מימין", - "newPaneBelow": "חלון חדש למטה", "emptyTitle": "חלון ריק", "emptyHint": "בחר משהו להצגה כאן. כל עוד חלון זה נבחר, כל פריט שתפתח מהסרגל הצדדי ייפתח גם כאן.", "openTabs": "לשוניות פתוחות", @@ -975,7 +903,6 @@ "clearPane": "רוקן חלון זה", "zoom": "הגדל חלון", "unzoom": "שחזר פריסה", - "unsplit": "בטל פיצול", "layouts": "פריסות", "applyLayout": "שנה פריסה", "maxPanes_one": "חלוקה יכולה להכיל עד {{count}} חלון", @@ -985,8 +912,6 @@ "dropHere": "שחרר להצגה כאן", "paneActions": "פעולות חלון", "dividerHint": "גרור לשינוי גודל. לחץ פעמיים לאיזון.", - "openInSplit": "פתח בפיצול", - "openInNewSplit": "פיצול חדש עם הלשונית הנוכחית", "shortcuts": "קיצורי מקלדת", "shortcutNavigate": "עבור בין חלונות", "presets": { @@ -1000,23 +925,6 @@ "grid6": "רשת של שישה" } }, - "connections": { - "noConnections": "אין חיבורים", - "noConnectionsDesc": "פתח מסוף, מנהל קבצים או שולחן עבודה מרוחק כדי לראות חיבורים כאן", - "connectedFor": "מחובר למשך {{duration}}", - "connected": "מחובר", - "disconnected": "נתק", - "reconnect": "חבר מחדש", - "sectionOpen": "פתוח", - "sectionBackground": "רקע", - "backgroundDesc": "הפעלות נשמרות למשך {{minutes}} דקות לאחר ניתוק וניתן לחבר אותן מחדש.", - "expiresIn": "פג תוקף בעוד {{duration}}", - "search": "חיפוש חיבורים...", - "noSearchResults": "לא נמצאו חיבורים התואמים את החיפוש שלך", - "rename": "שנה שם הפעלה", - "forgetConfirm": "לסגור את הפעלת הרקע עבור {{name}}?", - "forget": "סגור הפעלה" - }, "sshAuth": { "totpRequired": "נדרש אימות דו-שלבי", "totpCodeLabel": "קוד אימות", @@ -1154,65 +1062,14 @@ "placeholders": { "keyPassword": "סיסמת מפתח", "pastePrivateKey": "הדבק כאן את המפתח הפרטי שלך...", - "enterPassword": "הזן את הסיסמה שלך", - "apiKeyName": "למשל, צינור CI", - "credentialName": "למשל, מפתח SSH לייצור", - "optionalDetails": "פרטים נוספים (אופציונלי)...", - "sshUsername": "למשל, root או deploy", - "hostAddress": "10.0.0.1 או example.com", - "hostName": "למשל, שרת אינטרנט לייצור" + "enterPassword": "הזן את הסיסמה שלך" }, "dashboard": { - "title": "לוח בקרה", - "github": "GitHub", - "reportBug": "דווח על באג", - "discord": "Discord", - "docs": "תיעוד", - "donate": "תרומה", - "serverOverview": "סקירת שרת", - "version": "גרסה", "updateAvailable": "עדכון זמין", - "beta": "בטא", - "uptime": "זמן פעולה", - "database": "מסד נתונים", - "healthy": "בריא", - "error": "שגיאה", - "totalHosts": "סה״כ מארחים", - "totalCredentials": "סה״כ אישורים", - "recentActivity": "פעילות אחרונה", - "reset": "אפס", - "noRecentActivity": "אין פעילות אחרונה", - "quickActions": "פעולות מהירות", - "addHost": "הוסף מארח", - "addCredential": "הוסף אישור", - "adminSettings": "הגדרות מנהל", - "userProfile": "פרופיל משתמש", - "serverStats": "סטטיסטיקות שרת", - "customizeLayout": "התאם אישית את לוח הבקרה", - "justNow": "עכשיו" + "beta": "בטא" }, "dashboardTab": { "stable": "יציב", - "registerNewServer": "רשום שרת חדש", - "storeSshKeysOrPasswords": "אחסן מפתחות SSH או סיסמאות", - "manageUsersAndRoles": "נהל משתמשים ותפקידים", - "manageYourAccount": "נהל את החשבון שלך", - "hostStatus": "סטטוס מארח", - "noHostsConfigured": "לא הוגדרו מארחים", - "checking": "בודק", - "commandPalette": "פלטת פקודות", - "done": "בוצע", - "clear": "נקה", - "dragToResizeColumns": "גרור כדי לשנות את גודל העמודות", - "hostsAvailable": "מארחים זמינים", - "removeSection": "הסר קטע", - "addSection": "הוסף קטע", - "allSectionsShown": "הכל כבר מוצג בלוח הבקרה.", - "fromPlugins": "מתוספים", - "dropHere": "שחרר קטע כאן", - "dragToReorder": "גרור קטעים כדי לסדר אותם מחדש", - "clearActivityConfirm": "לנקות את הפעילות האחרונה שלך?", - "resetConfirm": "לאפס את לוח הבקרה לפריסה המוגדרת כברירת מחדל?", "onlineCount_one": "{{count}} מחובר", "onlineCount_two": "{{count}} מחוברים", "onlineCount_other": "{{count}} מחוברים", @@ -1221,425 +1078,48 @@ "hostCount_other": "{{count}} מארחים" }, "admin": { - "sectionGeneral": "כללי", - "sectionUsers": "משתמשים", - "sectionSessions": "התחברויות", - "sectionRoles": "תפקידים", - "sectionDatabase": "מסד נתונים", - "sectionApiKeys": "מפתחות API", - "sectionAuditLog": "יומן ביקורת", - "sectionSsl": "תעודת HTTPS", - "sectionBranding": "מותג לבן", - "brandingAppName": "שם האפליקציה", - "brandingAppNameDesc": "מוצג במסך ההתחברות ובכרטיסיית הדפדפן. השאר ריק כדי להשתמש ב-\"Termix\".", - "brandingTagline": "שורת תגית", - "brandingTaglineDesc": "מוצג מתחת לשם האפליקציה במסך ההתחברות. השאר ריק כדי להשתמש בשורת התגית המוגדרת כברירת מחדל.", - "brandingLogo": "לוגו", - "brandingLogoDesc": "PNG, JPEG או WEBP, עד 750 ק\"ב. מחליף את הסמל המוגדר כברירת מחדל במסך ההתחברות ובכרטיסיית הדפדפן.", - "brandingLogoUpload": "העלה לוגו", - "brandingLogoReset": "אפס לברירת מחדל", - "brandingLogoInvalid": "תמונה לא תקינה. השתמש בקובץ PNG, JPEG או WEBP עד 750 ק\"ב.", - "brandingSaved": "הגדרות המותג נשמרו", - "brandingSaveFailed": "השמרת הגדרות המותג נכשלה", - "sslDescription": "התעודה ש- Termix מספק דרך HTTPS. העלה את שלך כאן, או קבל וחידש אחת מ- Let's Encrypt בקטע תעודות ACME.", - "sslDocsLink": "צפה בתיעוד SSL", - "sslCertStatus": "סטטוס תעודה", - "sslCertStatusNone": "אין תעודה", - "sslCertStatusValid": "תקף", - "sslCertStatusExpiring": "פג תוקף בקרוב", - "sslCertStatusExpired": "פג תוקף", - "sslCertExpiresAt": "פג תוקף ב-{{date}}", - "sslInfoNote": "לאחר הנפקת או העלאת תעודה, Termix יאפשר באופן אוטומטי HTTPS ב- SSL_PORT (ברירת מחדל 8443) בנוסף ל- HTTP הקיים. ודא שהפורט הזה מפורסם/ממופה למיכל הזה כדי שיהיה ניתן להגיע אליו.", - "sslManualCert": "תעודה (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "מפתח פרטי (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "הדבק את התעודה והמפתח הפרטי הקיימים שלך, כולל שרשרת מלאה אם נדרש על ידי רשות האישור שלך.", - "sslManualUpload": "העלה והתקן תעודה", - "sslManualUploadLoading": "מעלה תעודה...", - "sslManualUploadSuccess": "התעודה הועלתה והותקנה בהצלחה", - "sslManualUploadFailed": "העלאת התעודה נכשלה", - "sslManualRequiresFields": "נדרשות תעודה ומפתח פרטי", - "auditLogTotal": "{{total}} סה\"כ ערכים", - "auditLogEmpty": "לא נמצאו ערכי יומן ביקורת", - "auditLogSuccess": "הצלחה", - "auditLogFailed": "נכשל", - "auditLogClearFilters": "נקה מסננים", - "auditLogPage": "עמוד {{page}} מתוך {{totalPages}} ({{total}} סה\"כ)", - "auditLogIp": "IP", - "auditLogResourceId": "מזהה משאב", - "auditLogFilterUser": "משתמש", - "auditLogFilterAction": "פעולה", - "auditLogFilterResourceType": "סוג משאב", - "auditLogFilterStatus": "סטטוס", - "auditLogFilterFrom": "מ", - "auditLogFilterTo": "עד", - "auditLogFilterAll": "הכל", - "allowRegistration": "אפשר הרשמת משתמשים", - "allowRegistrationDesc": "אפשר למשתמשים חדשים להירשם בעצמם עם שם משתמש וסיסמה", - "allowPasswordLogin": "אפשר התחברות עם סיסמה", - "allowPasswordLoginDesc": "התחברות עם שם משתמש וסיסמה", - "externalAutoProvision": "צור חשבונות חיצוניים אוטומטית", - "externalAutoProvisionDesc": "צור חשבון בפעם הראשונה שמישהו נכנס דרך התחברות חיצונית כמו SSO או LDAP. כשכבוי, רק אנשים שכבר יש להם חשבון יכולים להיכנס כך", - "secondFactorAfterExternalLogin": "בקש גורם שני אחרי התחברויות חיצוניות (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "כשכבוי, גורם שני רשום נדרש רק אחרי התחברות עם סיסמה והתחברויות מקומיות אחרות, כמו קודם. כשדלוק, הוא נדרש אחרי כל שיטת התחברות, כולל SSO ו-LDAP.", - "allowPasswordReset": "אפשר איפוס סיסמה", - "allowPasswordResetDesc": "קוד איפוס דרך יומני Docker", - "auditForwardingTitle": "העבר ל-SIEM", - "auditForwardingDesc": "שלח עותק של כל רשומת ביקורת לאוסף חיצוני כ-NDJSON. היומנים המקומיים נשארים המקור האמין.", - "auditForwardingEnvNotice": "משתנה סביבה גם הוא מציין העברה; ה-URL שנשמר כאן מקבל עדיפות.", - "auditForwardingToken": "אסימון Bearer (אופציונלי)", - "auditForwardingTokenStored": "אסימון Bearer (נשמר)", - "auditForwardingSaved": "הגדרות העברת ביקורת נשמרו", - "auditForwardingSaveError": "שגיאה בשמירת הגדרות העברת ביקורת", - "sessionTimeout": "פגות סשן", - "hours": "שעות", - "sessionTimeoutRange": "מינימום 1 שעה, מקסימום 720 שעות", - "monitoringDefaults": "הגדרות ברירת מחדל למעקב", - "statusCheck": "בדיקת סטטוס", - "sec": "שניות", - "logLevel": "רמת יומן", "usersCount_one": "{{count}} משתמש", "usersCount_two": "{{count}} משתמשים", - "usersCount_other": "{{count}} משתמשים", - "searchUsers": "חפש משתמשים...", - "noUsers": "אין משתמשים", - "noUsersMatch": "אין משתמשים התואמים את החיפוש שלך", - "pageOf": "עמוד {{page}} מתוך {{total}}", - "createUser": "צור", - "newRole": "תפקיד חדש", - "roleName": "שם", - "roleDisplayName": "שם לתצוגה", - "roleDescription": "תיאור", "rolesCount_one": "{{count}} תפקיד", "rolesCount_two": "{{count}} תפקידים", - "rolesCount_other": "{{count}} תפקידים", - "createRole": "צור", - "creating": "יוצר...", - "exportDatabase": "ייצא מסד נתונים", - "exportDatabaseDesc": "הורד גיבוי SQLite נייד של כל המארחים, האישורים וההגדרות", - "export": "ייצא", - "exporting": "מייצא...", - "importDatabase": "יבא מסד נתונים", - "importDatabaseDesc": "שחזר מגיבוי .sqlite נייד בכל מאגר נתונים", - "importDatabaseSelected": "נבחר: {{name}}", - "selectFile": "בחר קובץ", - "changeFile": "שנה", - "import": "יבא", - "importing": "מייבא...", "apiKeysCount_one": "{{count}} מפתח", "apiKeysCount_two": "{{count}} מפתחות", - "apiKeysCount_other": "{{count}} מפתחות", - "apiKeysDocsLink": "צפה בתיעוד", - "apiKeysCliHint": "השתמש במפתח API עם ממשק השורת הפקודה של Termix כדי לנהל שרתים מהטרמינל שלך.", - "apiKeysCliLink": "צפה בתיעוד שורת הפקודה", - "newApiKey": "מפתח API חדש", - "apiKeyCreatedWarning": "המפתח נוצר – העתק אותו עכשיו, הוא לא יוצג שוב.", - "apiKeyName": "שם", - "apiKeyUser": "משתמש", - "apiKeySelectUser": "בחר משתמש...", - "apiKeyExpiresAt": "תפוגה", - "createKey": "צור מפתח", - "apiKeyNoExpiry": "ללא תפוגה", - "revokedBadge": "בוטל", - "authTypeDual": "אימות כפול", - "authTypeExternal": "חיצוני", - "authTypeLocal": "מקומי", - "adminStatusAdministrator": "מנהל מערכת", - "adminStatusRegularUser": "משתמש רגיל", - "adminBadge": "מנהל", - "systemBadge": "מערכת", - "customBadge": "מותאם אישית", - "youBadge": "אתה", "sessionsActive_one": "{{count}} פעיל", "sessionsActive_two": "{{count}} פעילים", - "sessionsActive_other": "{{count}} פעילים", - "sessionActive": "פעיל: {{time}}", - "sessionExpires": "תפוגה: {{time}}", - "revokeAll": "הכל", - "revokeAllSessionsSuccess": "כל הפעילויות של המשתמש בוטלו", - "revokeAllSessionsFailed": "הביטול של הפעילויות נכשל", - "revokeSessionFailed": "הביטול של הפעילות נכשל", - "addRole": "הוסף תפקיד", - "noCustomRoles": "לא הוגדרו תפקידים מותאמים אישית", - "removeRoleFailed": "הסרת התפקיד נכשלה", - "assignRoleFailed": "הקצאת התפקיד נכשלה", - "userAdminAccess": "מנהל מערכת", - "userAdminAccessDesc": "גישה מלאה לכל הגדרות הניהול", - "userRoles": "תפקידים", - "revokeAllUserSessions": "בטל את כל הפעילויות", - "revokeAllUserSessionsDesc": "כפה התחברות מחדש בכל המכשירים", - "revoke": "בטל", - "deleteUserWarning": "מחיקת משתמש זה היא בלתי הפיכה.", - "deleteUser": "מחק את {{username}}", - "deleting": "ממחק...", - "deleteUserFailed": "מחיקת המשתמש נכשלה", - "deleteUserSuccess": "המשתמש \"{{username}}\" נמחק", - "deleteRoleSuccess": "התפקיד \"{{name}}\" נמחק", - "revokeKeySuccess": "המפתח \"{{name}}\" בוטל", - "revokeKeyFailed": "ביטול המפתח נכשל", - "copiedToClipboard": "הועתק ללוח", - "done": "בוצע", - "createUserTitle": "צור משתמש", - "createUserDesc": "צור חשבון מקומי חדש.", - "createUserUsername": "שם משתמש", - "createUserPassword": "סיסמה", - "createUserPasswordHint": "מינימום 6 תווים.", - "createUserEnterUsername": "הזן שם משתמש", - "createUserSubmit": "צור משתמש", - "editUserTitle": "ניהול משתמש: {{username}}", - "editUserDesc": "ערוך תפקידים, סטטוס ניהול, פעילויות והגדרות חשבון.", - "editUserUsername": "שם משתמש", - "editUserAuthType": "סוג אימות", - "editUserAdminStatus": "סטטוס ניהול", - "editUserUserId": "מזהה משתמש", - "linkAccountTitle": "קישור חשבונות", - "linkAccountDesc": "מזג את החשבון החיצוני {{username}} עם חשבון מקומי קיים.", - "linkAccountDescLocal": "קשר חשבון מקומי {{username}} עם חשבון חיצוני קיים.", - "linkAccountWarningTitle": "זה יבצע את הפעולות הבאות:", - "linkAccountEffect1": "מחיקת החשבון החיצוני בלבד", - "linkAccountEffect2": "הוספת ההתחברות החיצונית שלו לחשבון היעד", - "linkAccountEffect3": "אפשרות להתחברות הן עם חשבון חיצוני והן עם סיסמה", - "linkAccountTargetUsername": "שם משתמש של חשבון מקומי", - "linkAccountTargetPlaceholder": "הזן את שם המשתמש של החשבון המקומי שאליו תרצה לקשר", - "linkAccountExternalUsername": "שם משתמש של חשבון חיצוני", - "linkAccountExternalPlaceholder": "הזן את שם המשתמש של החשבון החיצוני בלבד שתרצה לאחד", - "linkAccountExternalNotFound": "לא נמצא חשבון חיצוני בלבד עם שם משתמש זה", - "linkAccounts": "קישור חשבונות", - "linkAccountSuccess": "החשבונות נקשרו בהצלחה", - "linkAccountFailed": "קישור החשבונות נכשל", - "linkAccountInProgress": "מקשר...", - "unlinkAccountTitle": "ניתוק התחברות חיצונית", - "unlinkAccountDesc": "הסר את ההתחברות החיצונית מ-{{username}}. המשתמש יוכל להתחבר רק באמצעות הסיסמה שלו.", - "unlinkAccountWarning": "פעולה זו תסיר את ההתחברות החיצונית מהחשבון הזה. למשתמש חייבת להיות סיסמה מוגדרת כדי להמשיך להתחבר.", - "unlinkAccount": "ניתוק התחברות חיצונית", - "unlinkAccountInProgress": "מנתק...", - "unlinkAccountSuccess": "ההתחברות החיצונית נותקה", - "unlinkAccountFailed": "ניתוק ההתחברות החיצונית נכשל", - "updateRegistrationFailed": "עדכון הגדרת ההרשמה נכשל", - "updatePasswordLoginFailed": "עדכון הגדרת התחברות עם סיסמה נכשל", - "updateSecondFactorAfterExternalLoginFailed": "עדכון הגדרת הגורם השני נכשל", - "updatePasswordResetFailed": "עדכון הגדרת איפוס סיסמה נכשל", - "sessionTimeoutRange2": "זמן תפוגת הפעילות חייב להיות בין 1 ל-720 שעות", - "sessionTimeoutSaved": "זמן תפוגת הפעילות נשמר", - "sessionTimeoutSaveFailed": "שמירת זמן תפוגת הפעילות נכשלה", - "monitoringIntervalInvalid": "ערכי מרווח לא תקינים", - "monitoringSaved": "הגדרות ניטור נשמרו", - "monitoringSaveFailed": "שמירת הגדרות הניטור נכשלה", - "logLevelUpdateFailed": "עדכון רמת הלוג נכשלה", - "createUserRequired": "שם משתמש וסיסמה הם שדות חובה", - "createUserPasswordTooShort": "הסיסמה חייבת להכיל לפחות 6 תווים", - "createUserSuccess": "המשתמש \"{{username}}\" נוצר", - "createUserFailed": "יצירת המשתמש נכשלה", - "updateAdminStatusFailed": "עדכון סטטוס המנהל נכשל", - "allSessionsRevoked": "כל הפעילויות בוטלו", - "revokeSessionsFailed": "ביטול הפעילויות נכשל", - "manageUserData": "ניהול נתוני משתמש", - "backToUsers": "חזרה למשתמשים", - "manageTabAccount": "חשבון", - "manageTabHosts": "מארחים", - "manageTabCredentials": "פרטי התחברות", - "manageTabSessions": "פעילויות", - "manageTabDanger": "סכנה", - "manageEditorBack": "חזרה לנתונים של {{username}}", - "dataLockedBadge": "נעול", - "dataLockedNotice": "הנתונים של {{username}} נשארים נעולים עד ההתחברות הבאה שלו. לא ניתן לצפות או לערוך את המארחים, פרטי ההתחברות והקטעים שלו עד אז.", - "resetPasswordTitle": "איפוס סיסמה", - "resetPasswordExternalOnly": "משתמש זה מתחבר דרך ספק חיצוני ואין לו סיסמה.", - "resetPasswordPlaceholder": "סיסמה חדשה", - "resetPasswordBtn": "איפוס", - "resetPasswordWorking": "מאפס...", - "resetPasswordSuccess": "הסיסמה אופסה", - "resetPasswordSuccessWiped": "הסיסמה אופסה. הנתונים המוצפנים של המשתמש נמחקו.", - "resetPasswordFailed": "איפוס הסיסמה נכשל", - "resetPasswordConfirmWipe": "{{username}} לא התחבר מאז שדרוג ההצפנה, ולכן הנתונים שלו לא ניתן לשחזר. איפוס כעת ימחק את המארחים, פרטי ההתחברות והקטעים שלו. להמשיך?", - "manageApiKeys": "מפתחות API", - "apiKeyNamePlaceholder": "שם מפתח", - "apiKeyCopyNotice": "העתק את המפתח הזה עכשיו, הוא לא יוצג שוב.", - "noApiKeysForUser": "אין מפתחות API", - "apiKeyDeleteFailed": "המחיקה של מפתח API נכשלה", - "exportUserData": "ייצוא נתונים", - "exportUserDataDesc": "הורד את מארחי המשתמש, האישורים ונתוני מנהל הקבצים שלו כ-JSON. סודות מוצפנים מוצפנים.", - "exportUserDataSuccess": "נתוני המשתמש יוצאו", - "exportUserDataFailed": "ייצוא נתוני המשתמש נכשל", "hostsCount_one": "{{count}} מארח", "hostsCount_two": "{{count}} מארחים", "hostsCount_other": "{{count}} מארחים", - "addHostForUser": "הוסף מארח", - "noHostsForUser": "למשתמש זה אין מארחים", - "connectToHost": "חבר", - "deleteHostConfirm": "למחוק את המארח \"{{name}}\" השייך ל-{{username}}?", - "hostDeletedSuccess": "המארח נמחק", - "hostDeleteFailed": "מחיקת המארח נכשלה", "credentialsCount_one": "{{count}} פרטי התחברות", "credentialsCount_two": "{{count}} פרטי התחברות", "credentialsCount_other": "{{count}} פרטי התחברות", - "addCredentialForUser": "הוסף אישור", - "noCredentialsForUser": "למשתמש זה אין אישורים", - "deleteCredentialConfirm": "למחוק את האישור \"{{name}}\" השייך ל-{{username}}?", - "credentialDeletedSuccess": "האישור נמחק", - "credentialDeleteFailed": "מחיקת האישור נכשלה", - "noSessionsForUser": "אין סשנים פעילים", - "deleteSuccessorLabel": "העבר את המארחים והאישורים ל-", - "deleteSuccessorMe": "לי (המנהל שמבצע את המחיקה)", - "deleteSuccessorNone": "לאף אחד, מחק אותם", - "deleteSuccessorDesc": "הכל שהמשתמש הזה שיתף ימשיך לעבוד תחת הבעלים החדש; בחירת 'לאף אחד' תמחק את המארחים, האישורים והשיתופים שלו.", - "deleteUserDangerDesc": "מחק לצמיתות את {{username}} ואת כל הנתונים שלו (מארחים, אישורים, קטעי קוד, היסטוריה). פעולה זו אינה ניתנת לביטול.", - "deleteUserConfirm": "למחוק לצמיתות את {{username}} ואת כל הנתונים שלו?", - "deleteUserAdminBlocked": "הסר את סטטוס המנהל לפני מחיקת המשתמש הזה.", - "createRoleRequired": "שם ושם תצוגה הם שדות חובה", - "createRoleSuccess": "התפקיד \"{{name}}\" נוצר", - "createRoleFailed": "יצירת התפקיד נכשלה", - "apiKeyNameRequired": "שם המפתח הוא שדה חובה", - "apiKeyUserRequired": "מזהה המשתמש הוא שדה חובה", - "apiKeyCreatedSuccess": "מפתח API \"{{name}}\" נוצר", - "apiKeyCreateFailed": "יצירת מפתח API נכשלה", - "exportSuccess": "הבסיס הנתונים יוצא בהצלחה", - "exportFailed": "ייצוא הבסיס הנתונים נכשל", - "importSelectFile": "אנא בחר קובץ תחילה", - "importCompleted": "הייבוא הושלם: {{total}} פריטים יובאו, {{skipped}} הושמטו", - "importFailed": "הייבוא נכשל: {{error}}", - "importError": "ייבוא הבסיס הנתונים נכשל", - "sectionHostDefaults": "ברירות מחדל למארחים", "rolePermissions": { "count_one": "{{count}} הרשאה", "count_two": "{{count}} הרשאות", - "count_other": "{{count}} הרשאות", - "editAction": "ערוך הרשאות", - "loadError": "טעינת קטלוג ההרשאות נכשלה", - "saved": "הרשאות התפקיד נשמרו", - "saveError": "שמירת הרשאות התפקיד נכשלה", - "save": "שמור", - "saving": "שומר...", - "pluginDisabled": "התוסף מושבת", "groups": { "hosts": "מארחים", "credentials": "אישורים", "admin": "ניהול" } - }, - "notificationPrivateEndpoints": "מארחי התראות פרטיים מורשים", - "notificationPrivateEndpointsDesc": "מארחים פרטיים מדויקים שערוצי התראות יכולים ליצור איתם קשר. הפרד ביניהם בפסיקים.", - "updateNotificationEndpointsFailed": "עדכון רשימת המארחים המורשים להתראות נכשל", - "secondFactorsSectionTitle": "גורמים שניים", - "secondFactorsNone": "לא נרשמו גורמים שניים", - "secondFactorUnavailable": "לא זמין", - "resetSecondFactors": "אפס גורמים שניים", - "resetSecondFactorsConfirm": "למחוק כל גורם שני עבור {{username}}? הם יכולים להתחבר עם הסיסמה או SSO ולהירשם מחדש.", - "secondFactorsResetSuccess": "גורמי האימות השנייט אופסרו", - "secondFactorsResetFailed": "האפסון גורמי האימות השנייט נכשל", - "passwordLoginForced": "התחברות באמצעות סיסמה כבויה, אך אין שיטת התחברות אחרת פעילה, ולכן היא נשארת דלוקה כרגע. אף אחד לא ננעל.", - "sslNotRenewed": "אין מה שמתחדש עבור תעודה זו. היא תפוג ב-{{date}}. הפעל חידוש אוטומטי בחלק של תעודות ACME, או העלה תעודה חדשה לפני כן.", - "sslSelfSigned": "תעודה חתומה עצמית שנוצרה על ידי Termix. דפדפנים יזהירו לגביה.", - "sslRenewedBy": "תואם באופן אוטומטי על ידי {{plugin}}", - "sslIssuer": "נפד על ידי {{issuer}}", - "sslNames": "מכסה את {{names}}", - "sslManualTitle": "העלה תעודה", - "updateExternalAutoProvisionFailed": "עדכון הגדרת היצירה האוטומטית נכשל", - "hostTags": "תגיות מוגדרות מראש למארחים", - "hostTagsDesc": "תגיות שכל משתמש רואה כהצעות בעורך המארח. לחץ על רווח או Enter כדי להוסיף אחת. הסרת תגיה כאן לא תסיר אותה מהמארחים.", - "hostTagsError": "לא ניתן היה לטעון או לשמור הצעות לתגיות מארח.", - "revokeAllSessionsConfirm": "להתנתק מ-{{username}} בכל המקומות?", - "revokeSessionConfirm": "להתנתק מההפעלה הזו?", - "revokeSession": "התנתק", - "deleteRoleConfirm": "למחוק את התפקיד {{name}}?", - "revokeKeyConfirm": "לבטל את מפתח ה-API {{name}}?", - "revokeKey": "בטל" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "איפה", - "who": "מי", - "hostLabel": "מארח", - "hostPlaceholder": "192.168.1.1 או example.com", - "portLabel": "פורט", - "usernameLabel": "שם משתמש", - "usernamePlaceholder": "שם משתמש", - "authLabel": "אימות", - "passwordLabel": "סיסמה", - "passwordPlaceholder": "סיסמה", - "privateKeyLabel": "מפתח פרטי", - "privateKeyPlaceholder": "הדבק מפתח פרטי...", - "credentialLabel": "אישור", - "credentialPlaceholder": "בחר אישור שמור", - "protocolLabel": "פרוטוקול", - "domainLabel": "דומיין", - "domainPlaceholder": "אופציונלי", - "connectToAction": "התחבר ל-{{name}}", - "sshProtocol": "SSH", - "noTarget": "אין מה שמוגדר יכול להתחבר לסוג המארח הזה" + "usernameLabel": "שם משתמש" }, "keybindings": { - "description": "קשר מקשים לפעולות בטרמינל ובאפליקציה, או שנה את הקיצורים המובנים.", - "defaultsHeading": "קיצורים מובנים", - "fixedHeading": "קיצורי אפליקציה", - "fixed": { - "splitRight": "חלק ימינה", - "splitDown": "חלק למטה", - "zoomPane": "הגדל את החלון הממוקד", - "navigatePane": "עבור בין חלונות", - "nextTab": "לשונית הבאה", - "previousTab": "לשונית קודמת", - "jumpTab": "קפוץ ללשונית", - "previousView": "חזור לתצוגת הצד הקודמת", - "fullscreen": "הפעל/כבה מסך מלא" - }, - "customHeading": "קיצורים מותאמים אישית", - "addBinding": "הוסף קיצור", - "addBindingTitle": "הוסף קיצור", - "editBindingTitle": "ערוך קיצור", - "loading": "טוען...", - "noCustomBindings": "אין עדיין קיצורים מותאמים אישית", - "defaultBadge": "ברירת מחדל", - "customizedBadge": "מותאם אישית", - "customize": "התאם אישית", - "resetToDefault": "אפס לברירת מחדל", - "resetAllToDefaults": "אפס הכל לברירות מחדל", - "cancel": "ביטול", - "saveBinding": "שמור קיצור דרך", - "saveError": "השמירה של קיצורי המקלדת נכשלה", - "pressKeysToRecord": "שילוב מקשים", - "pressKeysPlaceholder": "לחץ והקש מקשים", - "recording": "לחץ מקשים...", - "comboRequiredError": "לחץ שילוב מקשים תחילה", - "conflictWarning": "שילוב זה כבר משוייך ל-{{combo}}. שמירה תגרום לשניהם להופעל.", - "actionLabel": "פעולה", "actionNextTab": "עבור ללשונית הבאה", "actionPreviousTab": "עבור ללשונית הקודמת", "actionOpenCommandPalette": "פתח חיפוש מהיר", - "actionReconnectSession": "חבר מחדש את הפעולה הנוכחית", - "unavailableAction": "{{type}} (לא זמין)", - "actionRequiredError": "בחר פעולה תחילה", - "deleteConfirm": "למחוק את קיצור המקשים הזה?", - "resetAllConfirm": "לאפס כל קיצור מקשים לברירת המחדל שלו?" + "actionReconnectSession": "חבר מחדש את הפעולה הנוכחית" }, "userProfile": { - "storageModeLocal": "דפדפן", - "storageModeCloud": "מסד נתונים", - "storageModeDescription": "הדפדפן שומר הגדרות בדפדפן זה בלבד. מסד הנתונים מסנכרן עם השרת וטוען בכל מכשיר.", - "resetToDefaults": "אפס לברירות מחדל", - "resetToDefaultsSuccess": "הגדרות אופסו לברירות מחדל.", - "storageModeSwitch": "אחסון העדפות", - "sectionAccount": "חשבון", - "desktopProfileTitle": "מכשיר זה בלבד", - "desktopProfileDescription": "פרופיל זה נמצא במכשיר זה ומתחבר באופן עצמאי. חבר אותו לשרת Termix כדי להשתמש באותם מארחים והגדרות בכל מכשיר.", - "sectionInterface": "ממשק", - "interfacePresetDesc": "כמה פרטים Termix מציג. כל התכונות נשארות זמינות.", "preset_simple": "פשוט", "preset_simple_desc": "רק את החיוני.", "preset_balanced": "מאוזן", "preset_balanced_desc": "הפריסה הסטנדרטית.", "preset_advanced": "מתקדם", "preset_advanced_desc": "הכל דלוק, צפוף.", - "presetClearOverrides": "אפס הכל", - "presetOverridesTitle": "מותאם אישית", - "presetRevertArea": "בטל שינוי", - "presetConfirmTitle": "להחליף ל-{{preset}}?", - "presetConfirmDesc": "פעולה זו מאפסת את סרגל הצד, הניווט, פריסת הלוח, סרגל הכלים של המסוף ותצוגת מנהל הקבצים. המארחים, האישורים ודף הבית שלך לא ייפגעו.", - "presetConfirmApply": "החל הגדרה מראש", - "runSetupAgainDesc": "עבור שוב דרך תהליך ההגדרה הראשוני.", - "runSetupAgainButton": "הרץ הגדרה", "uiArea_chrome": "מסגרת האפליקציה", "uiArea_hostList": "רשימת מארחים", "uiArea_credentialList": "רשימת אישורים", @@ -1648,127 +1128,14 @@ "uiArea_terminal": "מסוף", "uiArea_fileManager": "מנהל קבצים", "uiArea_hostEditor": "עורך מארחים", - "sectionAppearance": "מראה", - "sectionSecurity": "אבטחה", - "sectionApiKeys": "מפתחות API", - "sectionData": "נתונים", - "usernameLabel": "שם משתמש", - "roleLabel": "תפקיד", - "roleAdministrator": "מנהל מערכת", - "authMethodLabel": "שיטת אימות", - "authMethodLocal": "מקומי", - "twoFaLabel": "אימות דו-שלבי", - "twoFaOn": "מופעל", - "twoFaOff": "כבוי", - "versionLabel": "גרסה", - "cliTitle": "שורת פקודה של Termix", - "cliDescription": "פתח מסופים, הרץ פקודות והעבר קבצים ישירות מהמסוף שלך.", - "cliLearnMore": "מידע נוסף", - "deleteAccount": "מחק חשבון", - "deleteAccountDescription": "מחק את החשבון שלך לצמיתות", - "deleteButton": "מחק", - "deleteAccountPermanent": "פעולה זו היא לצמיתות ולא ניתן לבטל אותה.", - "deleteAccountWarning": "כל הפעילויות, המארחים, האישורים וההגדרות יימחקו לצמיתות.", - "confirmPasswordDeletePlaceholder": "הזן את הסיסמה שלך לאישור", "languageLabel": "שפה", "themeLabel": "ערכת נושא", "fontSizeLabel": "גודל גופן", "interfaceFontLabel": "גופן ממשק", "interfaceFontDescription": "משנה את גופן ממשק היישום. פרופילי מסוף שומרים על הגדרות הגופן שלהם.", "accentColorLabel": "צבע הדגשה", - "keyboardShortcuts": "קיצורי מקלדת", - "keyboardShortcutsDescription": "התאם אישית את קיצורי ההעתקה, הדבקה ופקודות במסוף", - "manageShortcuts": "ניהול", - "commandPalette": "פלטת פקודות", - "commandPaletteDesc": "הפעל קיצור מקלדת", - "reopenTabsOnLogin": "פתח מחדש לשוניות בהתחברות", - "reopenTabsOnLoginDesc": "שחזר את הלשוניות הפתוחות שלך בעת התחברות או רענון הדף, גם ממכשיר אחר", - "confirmTabClose": "אשר סגירת לשונית", - "confirmTabCloseDesc": "בקש אישור לפני סגירת לשוניות מסוף", - "showTabNumbers": "הצג מספרי לשוניות", - "showTabNumbersDesc": "הצג מספר על כל לשונית כדי לעזור להבדיל ביניהן", - "settingsAppRail": "רצועת יישומים", - "sidebarSettingsMoved": "הגדרות תצוגת סרגל הצד של מארחים עברו ללוח התאמה אישית של סרגל הצד, שנפתח מסרגל הכלים של מארחים.", - "showHostTags": "הצג תגיות מארח", - "showHostTagsDesc": "הצג תגיות ברשימת המארחים", - "statusColors": "צבעי סטטוס אמיתיים", - "statusColorsDesc": "השתמש בירוק/אדום לסטטוס מחובר/מנותק במקום בצבע ההדגשה", - "pinAppRail": "עגן רצועת יישומים", - "pinAppRailDesc": "שמור על רצועת היישומים בצד שמאל תמיד מורחבת במקום להרחיב רק בעת מעבר עכבר", - "expandAppRailOnHover": "הרחב רצועת יישומים בעת מעבר עכבר", - "expandAppRailOnHoverDesc": "אפשר להרחיב את רצועת היישומים בצד שמאל כאשר הסמן עובר מעליה", - "appRailHoverPushesContent": "דחוף תוכן בעת הרחבה", - "appRailHoverPushesContentDesc": "השאר מקום לסרגל המורחב במקום לפתוח אותו מעל הדף. סשנים פתוחים, כמו שולחן עבודה מרוחק, משנים גודל בכל פעם", - "showPinAppRailButton": "הצג כפתור עיגון רצועת יישומים", - "showPinAppRailButtonDesc": "הצג כפתור ברצועת היישומים כדי לעגן אותה פתוחה. כבוי כברירת מחדל.", - "settingsNavigation": "ניווט", - "navigationTabsDesc": "בחר אילו לשוניות יופיעו ברצועת היישומים", - "settingsUpdates": "עדכונים", - "disableUpdateChecks": "בטל בדיקות עדכון", - "disableUpdateChecksDesc": "הפסק לבדוק אם יש עדכונים", - "changePassword": "שנה סיסמה", - "currentPasswordLabel": "סיסמה נוכחית", - "currentPasswordPlaceholder": "סיסמה נוכחית", - "newPasswordLabel": "סיסמה חדשה", - "newPasswordPlaceholder": "סיסמה חדשה", - "confirmPasswordLabel": "אשר סיסמה חדשה", - "confirmPasswordPlaceholder": "אשר סיסמה חדשה", - "updatePassword": "עדכן סיסמה", - "createApiKeyTitle": "צור מפתח API", - "createApiKeyDescription": "צור מפתח API חדש לגישה תוכניתית.", - "apiKeyNameLabel": "שם", - "apiKeyNamePlaceholder": "למשל: צינור CI", - "expiryDateLabel": "תאריך תפוגה", - "optional": "אופציונלי", - "cancel": "ביטול", - "createKey": "צור מפתח", - "apiKeyCreatedWarning": "המפתח נוצר – העתק אותו עכשיו, הוא לא יוצג שוב.", - "copyApiKey": "העתק מפתח API", - "copiedToClipboard": "הועתק ללוח", "apiKeyCount_one": "{{count}} מפתח", "apiKeyCount_two": "{{count}} מפתחות", - "apiKeyCount_other": "{{count}} מפתחות", - "newKey": "מפתח חדש", - "noApiKeys": "אין עדיין מפתחות API.", - "apiKeyActive": "פעיל", - "apiKeyUsageHint": "הכלל את המפתח שלך ב-", - "apiKeyUsageHintHeader": "כותרת.", - "apiKeyPermissionsHint": "למפתחות יש את הרשאות המשתמש שייצר אותם.", - "exportData": "ייצוא הנתונים שלי", - "exportDataDesc": "הורד גיבוי של המארחים, האישורים וההגדרות שלך כדי להעביר אותם למכשיר אחר", - "export": "ייצוא", - "exporting": "מייצא...", - "importData": "ייבוא הנתונים שלי", - "importDataDesc": "שחזר את המארחים, האישורים וההגדרות שלך מקובץ גיבוי מסוג .sqlite", - "importDataSelected": "נבחר: {{name}}", - "selectFile": "בחר קובץ", - "changeFile": "שינוי", - "import": "ייבוא", - "importing": "מייבא...", - "exportSuccess": "הנתונים יוצאו בהצלחה", - "exportFailed": "ייצוא הנתונים נכשל", - "importSelectFile": "אנא בחר קובץ תחילה", - "importCompleted": "הייבוא הושלם: {{total}} פריטים יובאו, {{skipped}} הושמטו", - "importFailed": "הייבוא נכשל: {{error}}", - "roleUser": "משתמש", - "authMethodDual": "אימות כפול", - "authMethodExternal": "חיצוני", - "done": "בוצע", - "apiKeyNameRequired": "שם המפתח הוא שדה חובה", - "apiKeyCreated": "מפתח API \"{{name}}\" נוצר", - "apiKeyCreateFailed": "יצירת מפתח API נכשלה", - "apiKeyUser": "משתמש", - "apiKeyExpires": "תפוגה", - "apiKeyRevoked": "מפתח API \"{{name}}\" בוטל", - "apiKeyRevokeFailed": "ביטול מפתח API נכשל", - "passwordFieldsRequired": "נדרשים הסיסמה הנוכחית והסיסמה החדשה", - "passwordMismatch": "הסיסמאות אינן תואמות", - "passwordTooShort": "הסיסמה חייבת להכיל לפחות 6 תווים", - "passwordUpdated": "הסיסמה עודכנה בהצלחה", - "passwordUpdateFailed": "עדכון הסיסמה נכשל", - "deletePasswordRequired": "נדרשת סיסמה למחיקת החשבון שלך", - "deleteFailed": "מחיקת החשבון נכשלה", - "deleting": "ממחק...", "colorPickerTooltip": "פתח בוחר צבעים", "themeSystem": "מערכת", "themeLight": "בהיר", @@ -1779,18 +1146,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "מחובר ל-{{server}}", - "linkedProfileDescription": "מכשיר זה משתמש בחשבון שלך בשרת ושומר עותק של הנתונים שלך, כך שהוא ממשיך לעבוד גם במצב לא מקוון.", - "manageSync": "ניהול סנכרון", - "setUpSync": "קישור לשרת", - "settingsTabsAndShortcuts": "לשוניות וקיצורי מקלדת", - "onBetaTitle": "אתה בגרסת בטא", - "onBetaDescription": "תודה שאתה מבצע בדיקות. דווח לנו על תקלות.", - "tryBetaTitle": "נסה תכונות חדשות מוקדם", - "tryBetaDescription": "הצטרף לתוכנית הבטא בהעדכונים.", - "sendBetaFeedback": "שלח משוב על הבטא", - "openUpdates": "העדכונים" + "themeGruvbox": "Gruvbox" } } }, @@ -2055,8 +1411,7 @@ "hasDependents": "{{name}} נדרש על ידי {{list}}. כבה אותם או הסר אותם קודם.", "missingDependencies": "{{name}} זקוק ל-{{list}}, שלא מותקן.", "consentChanged": "מה שהתוסף הזה מבקש השתנה מאז שביצעת בדיקה. בדוק את הרשימה שוב.", - "upload": "לא ניתן לקרוא את {{name}}: {{error}}", - "developerMode": "לא ניתן לשנות מצב מפתח: {{error}}" + "upload": "לא ניתן לקרוא את {{name}}: {{error}}" }, "data": { "title": "נתונים מאוחסנים", @@ -2188,13 +1543,7 @@ "browsePlugins": "דפדף בתוספים", "loading": "טוען", "developer": { - "title": "מצב מפתח תוספים", - "hint": "מאפשר למנהלים להתקין תוספים מקובץ .tmxplug בלשונית תוספים, ללא בדיקות הרשם. השתמש בזה כדי לבנות ולבדוק את התוספים שלך.", - "enableTitle": "להפעיל מצב מפתח?", - "enableBody": "מנהלים יוכלו להתקין תוספים מקבצים ש-Termix לא בדק. תוסף יכול לעשות כל מה שהיכולות שלו מאפשרות, אז הפעל את זה רק כשאתה בונה או בודק תוספים.", - "enable": "הפעל", - "installFromFile": "התקן מקובץ", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS מוגדר, אז התקנה מקובץ נשארת חסומה." + "installFromFile": "התקן מקובץ" }, "count": { "downloads_one": "{{formatted}} הורדה", @@ -2233,71 +1582,7 @@ "secretSet": "הוגדר", "secretNotSet": "לא הוגדר", "secretReplace": "החלף", - "pluginSettingsSaved": "ההגדרות נשמרו", - "pluginSettingsInvalid": "לא ניתן היה לשמור חלק מההגדרות. בדוק את השדות המודגשים.", - "pluginSettingsSaveFailed": "שמירת ההגדרות נכשלה", - "pluginSettingsLoadFailed": "טעינת ההגדרות נכשלה", - "featureUnavailable": "{{name}} לא זמין כרגע. ההגדרות האלה נשמרות אך לא ייכנסו לתוקף.", - "account": "חשבון", - "security": "אבטחה", - "apiKeys": "מפתחות API", - "data": "נתונים וסנכרון", - "interface": "ממשק", - "appearance": "מראה", - "keybindings": "קיצורי מקלדת", - "adminGeneral": "כללי", - "adminUsers": "משתמשים", - "adminSessions": "הפעלות", - "adminRoles": "תפקידים", - "adminHostDefaults": "ברירות מחדל למארחים", - "adminBranding": "מותג", - "adminDatabase": "מסד נתונים", - "adminSsl": "SSL", - "adminApiKeys": "מפתחות API", - "adminAuditLog": "יומן ביקורת", - "bandYou": "החשבון שלך", - "bandApp": "האפליקציה הזו", - "bandPlugins": "תוספים", - "bandInstance": "השרת הזה", - "searchPlaceholder": "חפש בהגדרות", - "noResults": "אין הגדרות תואמות.", - "pages": "עמודים", - "instanceSettings": "הגדרות שרת", - "nothingHere": "אין כאן מה להגדיר.", - "searchPage": "חפש בעמוד הזה", - "noPageMatches": "אין התאמות בדף זה.", - "updates": { - "title": "עדכונים", - "betaProgram": "תוכנית בטא", - "betaIntro": "גרסאות בטא הן גרסאות מוקדמות של הגרסה הבאה של Termix. הן מתפרסמות בימי שלישי ושישי כאשר יש חדש לנסות. ייתכן שיש בהן באגים, והמשוב שלך הוא מה שהופך את הגרסה היציבה לטובה יותר.", - "termixBetas": "גרסאות בטא של Termix", - "termixBetasHint": "הודע לי על גרסאות בטא חדשות, לא רק על גרסאות יציבות.", - "runningBetaBuild": "אתה מפעיל גרסת בטא. כדי לצאת, חזור לדמות או להתקנה יציבה.", - "howToInstall": "איך להשיג את גרסת הבטא", - "desktopInstall": "הורד את מתקין הבטא והתקן אותו מעל זה הנוכחי.", - "downloadBeta": "הורד את {{version}}", - "dockerInstall": "שנה את הדמות שלך לתגית הבטא והפעל מחדש את המיכל:", - "copy": "העתק", - "copied": "הועתק", - "copyFailed": "לא ניתן להעתיק", - "learnMore": "למד עוד על גרסאות בטא", - "feedback": "משוב", - "feedbackHint": "מצאת באג או יש לך רעיון? זה מגיע ישירות למפתחים עם הגרסה שלך ממולאת.", - "sendFeedback": "שלח משוב על גרסת הבטא", - "releases": "גרסאות", - "thisVersion": "גרסה זו", - "newestStable": "הגרסה היציבה העדכנית ביותר", - "newestBeta": "גרסת הבטא העדכנית ביותר", - "noRelease": "אף אחת כרגע", - "pluginBetas": "גרסאות בטא של תוספים", - "pluginBetasIntro": "כל תוסף יכול להשתמש בגרסאות בטא באופן עצמאי. כדי לנסות אחד, פתח אותו ולחץ על נסה בטא.", - "openPlugins": "פתח תוספים", - "waitingForStable": "חזרתי לגרסה יציבה. נשאר על {{version}} עד שגרסה יציבה חדשה יותר תתפרסם.", - "backToStable": "חזור לגרסה יציבה", - "allPluginsBeta": "השתמש בגרסאות בטא לכל התוספים", - "allPluginsStable": "כל התוספים חזרו לגרסה יציבה", - "saveFailed": "לא ניתן לשמור את השינוי" - } + "featureUnavailable": "{{name}} לא זמין כרגע. ההגדרות האלה נשמרות אך לא ייכנסו לתוקף." }, "managerCard": { "refresh": "רענן", @@ -2307,86 +1592,16 @@ "filter": "סנן..." }, "sync": { - "server": "שרת Termix", - "account": "חשבון", - "status": "סטטוס", - "never": "לעולם לא", - "justNow": "עכשיו", "minutesAgo_one": "לפני {{count}} דקה", "minutesAgo_two": "לפני {{count}} דקות", "minutesAgo_other": "לפני {{count}} דקות", "hoursAgo_one": "לפני {{count}} שעה", "hoursAgo_two": "לפני {{count}} שעות", "hoursAgo_other": "לפני {{count}} שעות", - "actionFailed": "זה לא עבד. נסה שוב.", - "unlinkedTitle": "מכשיר זה בלבד", - "unlinkedBody": "Termix עובד באופן עצמאי במכשיר זה. חבר אותו לשרת Termix שלך כדי לשמור על הכל מסונכרן.", - "unlinkedPointHosts": "המארחים, האישורים, הקטעים וההגדרות שלך עוקבים אחריך לכל מכשיר.", - "unlinkedPointOffline": "הכל עדיין עובד כאשר השרת אינו נגיש, ומתעדכן מאוחר יותר.", - "unlinkedPointAccount": "אתה נכנס עם חשבון השרת שלך, והמארחים שאנשים שיתפו איתך מופיעים כאן גם כן.", - "linkButton": "חבר לשרת", - "state": { - "syncing": "מתבצע סנכרון", - "offline": "השרת אינו נגיש", - "error": "הסנכרון הופסק", - "signedOut": "יצאת", - "synced": "סונכרן {{time}}" - }, "pending_one": "שינוי אחד ממתין לסנכרון", "pending_two": "{{count}} שינויים ממתינים לסנכרון", "pending_other": "{{count}} שינויים ממתינים לסנכרון", - "signInAgain": "התחבר שוב", - "syncNow": "סנכרן עכשיו", - "unlink": "נתק", - "unlinked": "מכשיר זה אינו מחובר עוד", - "unlinkTitle": "להנתק את המכשיר הזה?", - "unlinkDescription": "פעולה זו עוצרת את הסנכרון ומנתקת אותך מהשרת. מארחים ששיתפו איתך אחרים יוסרו מהמכשיר הזה בכל מקרה.", - "unlinkKeepTitle": "לשמור את הנתונים שלי כאן", - "unlinkKeepBody": "המארחים, פרטי ההתחברות וההגדרות שלך יישארו במכשיר הזה וימשיכו לעבוד באופן עצמאי.", - "unlinkRemoveTitle": "להסיר נתונים מסונכרנים", - "unlinkRemoveBody": "הכל מהשרת יוסר מהמכשיר הזה. רק מארחים שנשמרו במכשיר הזה יישארו.", - "conflictsTitle": "סכסוכים", - "conflictsDescription": "אלה שונו כאן ובשרת בו זמנית. גרסת השרת בשימוש. שמור את שלך כדי לשלוח אותה לשרת במקום.", - "keepMine": "לשמור את שלי", - "keepServer": "לשמור את השרת", - "errorsTitle": "לא מסונכרן", - "errorsDescription": "השרת לא קיבל את השינויים האלה. הם נשארים במכשיר הזה.", - "errorPermission": "לחשבון שלך בשרת אין הרשאה לבצע שינוי זה.", - "retry": "לנסות שוב", - "whatSyncs": "מה מסונכרן", - "whatSyncsDescription": "כבה כל דבר שתרצה לשמור רק במכשיר הזה.", - "coreGroup": "Termix", - "notOnServer": "לשרת אין את זה", - "notOnDevice": "עדיין לא במכשיר הזה", - "localOnlyHint": "אתה גם יכול לשמור מארחים בודדים או תיקיות במכשיר הזה מההגדרות שלהם.", - "originTitle": "מאיפה החיבורים מתחילים", - "originDescription": "התחבר למארחים מהמכשיר הזה, או דרך השרת. אתה יכול לשנות את זה לכל מארח.", - "originLocal": "המכשיר הזה", - "originRemote": "השרת", - "entities": { - "hosts": "מארחים", - "sshCredentials": "פרטי התחברות", - "sshFolders": "תיקיות", - "userPreferences": "העדפות", - "pluginUserSettings": "הגדרות תוספים", - "sharedHosts": "מארחים ששיתפו איתך", - "sharedCredentials": "פרטי התחברות ששיתפו איתך", - "vaultProfiles": "פרופילי Vault", - "snippetFolders": "תיקיות קטעי קוד", - "snippets": "קטעי קוד", - "dashboardServiceLinks": "קישורי שירותים", - "homepageItems": "פריטי דף הבית", - "networkTopology": "מפת רשת", - "workspaces": "מרחבי עבודה", - "hostDefaults": "הגדרות ברירת מחדל למארחים", - "hostDefaultsAdmin": "הגדרות ברירת מחדל למארחים בשרת", - "aiProviders": "ספקי AI", - "homepageLayouts": "פריסות דף הבית", - "accountProfile": "פרופיל חשבון" - }, "proxy": { - "title": "פרוקסי הפוך", - "description": "נדרש רק כשהמשהו כמו Cloudflare Access או דף התחברות עומד לפני השרת שלך.", "headersTitle": "כותרות נוספות", "headersHint": "נשלח עם כל בקשה לשרת, למשל אסימון שירות של Cloudflare Access.", "headerName": "שם כותרת", @@ -2399,8 +1614,7 @@ "username": "שם משתמש", "password": "סיסמה", "allowInvalidCertificate": "לסמוך על תעודה עצמית", - "allowInvalidCertificateHint": "רק לשרת שלך, כשהתעודה שלו לא מגיעה מרשות מוכרת.", - "saved": "נשמר" + "allowInvalidCertificateHint": "רק לשרת שלך, כשהתעודה שלו לא מגיעה מרשות מוכרת." }, "problems": { "invalidUrl": "זה לא נראה כמו כתובת אינטרנט.", @@ -2440,6 +1654,27 @@ "linking": "מקשר ומבצע את הסנכרון הראשון...", "linked": "מקושר. הנתונים שלך מסונכרנים כעת.", "signedInAgain": "התחבר. הסנכרון פועל שוב." + }, + "entities": { + "hosts": "מארחים", + "sshCredentials": "פרטי התחברות", + "sshFolders": "תיקיות", + "userPreferences": "העדפות", + "pluginUserSettings": "הגדרות תוספים", + "sharedHosts": "מארחים ששיתפו איתך", + "sharedCredentials": "פרטי התחברות ששיתפו איתך", + "vaultProfiles": "פרופילי Vault", + "snippetFolders": "תיקיות קטעי קוד", + "snippets": "קטעי קוד", + "dashboardServiceLinks": "קישורי שירותים", + "homepageItems": "פריטי דף הבית", + "networkTopology": "מפת רשת", + "workspaces": "מרחבי עבודה", + "hostDefaults": "הגדרות ברירת מחדל למארחים", + "hostDefaultsAdmin": "הגדרות ברירת מחדל למארחים בשרת", + "aiProviders": "ספקי AI", + "homepageLayouts": "פריסות דף הבית", + "accountProfile": "פרופיל חשבון" } }, "hostDefaults": { @@ -2456,34 +1691,15 @@ "resetTitle": "מארח זה מגדיר ערך משלו. לחץ כדי להשתמש שוב בברירת המחדל מ-{{source}}", "clearTitle": "הוגדר ברמה זו. לחץ כדי לנקות ולהשתמש ב-{{source}} במקום", "inheritedTitle": "עוקב אחר ברירת המחדל מ-{{source}}", - "titleAdmin": "ברירות מחדל של מארחים בשרת", - "titleUser": "ברירות המחדל שלי למארחים", - "titleFolder": "ברירות מחדל של תיקייה: {{name}}", - "descriptionAdmin": "ברירות מחדל לכל מארח בשרת הזה. ברירות המחדל של משתמש, תיקייה או המארח עצמו עדיין יכולות להגדיר ערך שונה. שנה שדה כדי להגדיר אותו כאן, או נקה אותו כדי להשאיר אותו ללא הגדרה.", - "descriptionUser": "ברירות מחדל לכל המארחים שלך, מעל אלו של השרת. תיקייה או המארח עצמו עדיין יכולים להגדיר ערך שונה. שנה שדה כדי להגדיר אותו כאן, או נקה אותו כדי להשאיר אותו ללא הגדרה.", - "descriptionFolder": "ברירות מחדל למארחים בתיקייה זו ובתיקיות המשנה שלה, מעל שלך. מארח עדיין יכול להגדיר ערך שונה. שנה שדה כדי להגדיר אותו כאן, או נקה אותו כדי להשאיר אותו ללא הגדרה.", - "save": "שמור ברירות מחדל", "saved_one": "ברירות המחדל נשמרו. מארח אחד עודכן.", "saved_two": "ברירות המחדל נשמרו. שני מארחים עודכנו.", "saved_other": "ברירות המחדל נשמרו. {{count}} מארחים עודכנו.", - "savedInBackground": "ברירות המחדל נשמרו. המארחים מתעדכנים ברקע.", "appliedToHosts_one": "מארח אחד עודכן עם ברירות המחדל החדשות.", "appliedToHosts_two": "שני מארחים עודכנו עם ברירות המחדל החדשות.", "appliedToHosts_other": "{{count}} מארחים עודכנו עם ברירות המחדל החדשות.", - "saveFailed": "לא ניתן לשמור את ברירות המחדל", - "loadFailed": "לא ניתן לטעון את ברירות המחדל", - "confirmTitle": "לשמור ברירות מחדל?", "confirmChanges_one": "מארח אחד עוקב אחר ברירות המחדל האלו וישתנה.", "confirmChanges_two": "שני מארחים עוקבים אחר ברירות המחדל האלו וישתנו.", "confirmChanges_other": "{{count}} מארחים עוקבים אחר ברירות המחדל האלו וישתנו.", - "confirmNoChanges": "אין שינויים במארחים קיימים. מארחים חדשים יתחילו עם ברירות המחדל האלו.", - "menuMyDefaults": "ברירות המחדל שלי למארחים", - "folderDefaultsAction": "ברירות מחדל של תיקייה", - "adminSectionDescription": "הגדר את ברירות המחדל שכל מארח בשרת הזה עוקב אחריהן, לכל הגדרה של מארח, כולל כל תוסף. משתמשים ותיקיות יכולים להגדיר משלהם מעל, וכל מארח עדיין יכול להשתמש בערך משלו.", - "editServerDefaults": "ערוך ברירות מחדל של שרת", - "resetMenu": "אפס", - "resetAll": "הכל לערכי ברירת מחדל", - "resetCore": "חיבור ו-SSH לערכי ברירת מחדל", "resetDone_one": "מארח אחד עכשיו עוקב אחר ערכי ברירת המחדל שלו.", "resetDone_two": "שני מארחים עכשיו עוקבים אחר ערכי ברירת המחדל שלהם.", "resetDone_other": "{{count}} מארחים עכשיו עוקבים אחר ערכי ברירת המחדל שלהם." @@ -2498,50 +1714,16 @@ "fields": { "secretSaved": "נשמר. הקלד כדי להחליף אותו." }, - "sharing": { - "revokeConfirm": "להסיר גישה עבור {{name}}?", - "revoke": "הסר גישה" - }, "manage": { - "searchSettings": "חפש הגדרות", - "noMatchingSettings": "אין הגדרות תואמות.", - "sections": "קטעים", - "sectionNeedsAttention": "משהו כאן דורש תשומת לב", "needsAttention_one": "דבר אחד דורש תשומת לב.", "needsAttention_two": "שני דברים דורשים תשומת לב.", "needsAttention_other": "{{count}} דברים דורשים תשומת לב.", - "bandHost": "מארח", - "bandFeatures": "פרוטוקולים ותוספים", - "bandCredential": "אישור", - "sshConnection": "חיבור SSH", - "errorAddressRequired": "נדרשת כתובת.", - "errorPortRange": "השתמש בפורט בין 1 ל-65535.", - "defaults": "ברירות מחדל", - "searchHosts": "חפש מארחים", - "searchCredentials": "חפש אישורים", - "searchDefaults": "חפש ברירות מחדל", - "addCredential": "הוסף אישור", - "nothingMatches": "אין תוצאות תואמות", - "nothingYet": "אין כאן כלום עדיין", - "emptyHostsHint": "הוסף מארח והוא יופיע כאן, בכל תיקייה שתקצה לו.", - "emptyCredentialsHint": "אישורים שאתה שומר יכולים להיות ממוחזרים על ידי כל מארח.", - "collapse": "כווץ", - "expand": "הרחב", - "cannotBeUndone": "פעולה זו אינה ניתנת לביטול.", - "hostNotFound": "לא ניתן למצוא את המארח הזה. נסה לרענן את הרשימה.", "hostCount_one": "{{count}} מארח", "hostCount_two": "{{count}} מארחים", "hostCount_other": "{{count}} מארחים", "credentialCount_one": "{{count}} אישור", "credentialCount_two": "{{count}} אישורים", - "credentialCount_other": "{{count}} אישורים", - "newHost": "מארח חדש", - "newCredential": "אישור חדש", - "advanced": "מתקדם", - "pickHost": "בחר מארח לעריכה", - "pickCredential": "בחר אישור לעריכה", - "pickDefaults": "בחר רמת ברירות מחדל לעריכה", - "pickHint": "הכל על חיבור נמצא כאן, מקובץ כך שתוכל למצוא אותו." + "credentialCount_other": "{{count}} אישורים" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/hi_IN.json b/src/ui/locales/translated/hi_IN.json index 00e84c406..f283f0f0f 100644 --- a/src/ui/locales/translated/hi_IN.json +++ b/src/ui/locales/translated/hi_IN.json @@ -141,7 +141,6 @@ "continue": "जारी रखें", "error": "त्रुटि", "unsavedChanges": "बिना सेव किए बदलाव", - "more": "और", "loading": "लोड हो रहा है...", "host": "होस्ट", "selectHost": "एक होस्ट चुनें...", @@ -154,7 +153,6 @@ "cancel": "रद्द करें", "username": "यूज़रनेम", "login": "लॉगिन", - "logout": "लॉगआउट", "register": "रजिस्टर", "password": "पासवर्ड", "confirmPassword": "पासवर्ड की पुष्टि करें", @@ -165,8 +163,6 @@ "rename": "नाम बदलें", "edit": "संपादित करें", "confirm": "पुष्टि करें", - "next": "अगला", - "previous": "पिछला", "refresh": "रिफ़्रेश करें", "language": "भाषा", "backendReconnected": "सर्वर कनेक्शन बहाल हो गया", @@ -234,10 +230,6 @@ "pluginsDocsLink": "प्रत्येक के बारे में पढ़ें" }, "desktopUpdates": { - "title": "डेस्कटॉप ऐप", - "mode": "अपडेट", - "modeHint": "यह ऐप नई संस्करण कैसे प्राप्त करता है।", - "manualModeHint": "यह कॉपी स्वयं अपडेट नहीं कर सकती, इसलिए Termix आपको केवल तभी बताता है जब कोई नया संस्करण उपलब्ध हो।", "modeAutomatic": "स्वचालित", "modePrompt": "पहले पूछें", "modeNever": "कभी नहीं", @@ -247,15 +239,6 @@ "onboardingTitle": "ऐप अपडेट", "onboardingBody": "डेस्कटॉप ऐप अब स्वयं को अपडेट कर सकता है। चुनें कि आप नई संस्करण कैसे प्राप्त करना चाहते हैं। आप इसे बाद में सेटिंग्स, अपडेट में बदल सकते हैं।", "onboardingManual": "इस ऐप की कॉपी ऐसे इंस्टॉल की गई थी कि यह स्वयं को अपडेट नहीं कर सकती, इसलिए Termix आपको एक नया संस्करण उपलब्ध होने पर डाउनलोड करने के लिए लिंक के साथ बताएगा।", - "status": "संस्करण {{version}}", - "statusIdle": "अभी तक जांच नहीं की गई", - "statusChecking": "अपडेट की जांच हो रही है", - "statusAvailable": "संस्करण {{version}} उपलब्ध है", - "statusDownloading": "{{version}} डाउनलोड हो रहा है ({{progress}}%)", - "statusReady": "संस्करण {{version}} तैयार है। इसे इंस्टॉल करने के लिए पुनरारंभ करें।", - "statusUpToDate": "आपके पास नवीनतम संस्करण है", - "statusError": "अपडेट की जांच नहीं हो सकी। कृपया बाद में पुनः प्रयास करें।", - "checkNow": "अभी जांचें", "download": "डाउनलोड", "restart": "अभी पुनरारंभ करें", "later": "बाद में", @@ -269,26 +252,11 @@ "terminal": "टर्मिनल", "close": "बंद करें", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "पासवर्ड कॉपी करें", - "copySudoPassword": "सूडो पासवर्ड कॉपी करें", - "passwordCopied": "पासवर्ड क्लिपबोर्ड पर कॉपी किया गया", - "failedToCopyPassword": "पासवर्ड कॉपी करने में विफल", - "refreshTab": "कनेक्शन रीफ़्रेश करें", - "renameTab": "टैब का नाम बदलें", "dashboard": "डैशबोर्ड", "quickConnect": "क्विक कनेक्ट", - "openAsTabHint": "टैब के रूप में खोलने के लिए Ctrl+क्लिक या मध्य क्लिक करें", - "openAsTab": "टैब के रूप में खोलें", - "openInRightDock": "दाएं डॉक में खोलें", - "closeRightDock": "दाएं डॉक बंद करें", - "toggleRightDock": "दाएं डॉक टॉगल करें", "hosts": "होस्ट", "credentials": "प्रमाणपत्र", "connections": "कनेक्शन", - "keepSideMenuOpen": "मेनू खुला रखें", - "collapseSideMenu": "मेनू संक्षिप्त करें", - "roleAdministrator": "प्रशासक", - "roleUser": "उपयोगकर्ता", "sync": "सिंक", "reconnectDisconnectedTerminals": "सभी डिस्कनेक्टेड टर्मिनल पुनः कनेक्ट करें", "reconnectingTerminals_one": "{{count}} टर्मिनल पुनः कनेक्ट हो रहा है", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "{{count}} टर्मिनल पुनः कनेक्ट शुरू नहीं कर पाए", "fullscreenUnsupported": "इस ब्राउज़र द्वारा फुलस्क्रीन का समर्थन नहीं किया जाता है", "fullscreenFailed": "फुलस्क्रीन टॉगल नहीं कर पाए", - "resetSidebarWidth": "चौड़ाई रीसेट करें", - "collapseSidebar": "साइडबार संक्षिप्त करें", - "openSidebar": "साइडबार खोलें", "confirmCloseHost": "{{host}} बंद करें?", - "enterFullscreen": "फुलस्क्रीन में प्रवेश करें (Ctrl+Shift+F)", - "exitFullscreen": "फुलस्क्रीन से बाहर निकलें (Ctrl+Shift+F)", - "group": { - "objects": "आपके", - "tools": "उपकरण", - "system": "सिस्टम" - }, - "searchEverything": "होस्ट, टैब और एक्शन खोजें", - "search": "खोजें", "hiddenCount_one": "{{count}} छिपा हुआ", "hiddenCount_other": "{{count}} छिपे हुए", - "showInRail": "साइडबार में दिखाएं", - "moveUp": "ऊपर ले जाएं", - "moveDown": "नीचे ले जाएं", - "resetRailOrder": "क्रम रीसेट करें", - "hideFromRail": "साइडबार से छिपाएं", - "openSettings": "सेटिंग्स खोलें", "settings": "सेटिंग्स", "manage": "प्रबंधित करें", - "mobileNavigation": "नेविगेशन", "plugins": "प्लगइन" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "आयात पूरा: {{imported}} आयातित, {{updated}} अपडेट किए गए, {{failed}} विफल", "importHostsFailed": "होस्ट आयात करने में विफल" }, - "commandPalette": { - "searchPlaceholder": "होस्ट, कमांड, या सेटिंग्स खोजें...", - "quickActions": "त्वरित क्रियाएँ", - "navigation": "नेविगेशन", - "orShortcut": "या", - "addNewHost": "नया होस्ट जोड़ें", - "adminSettings": "एडमिन सेटिंग्स", - "addCredential": "क्रेडेंशियल जोड़ें", - "recentActivity": "हालिया गतिविधि", - "serversAndHosts": "सर्वर और होस्ट", - "noHostsFound": "\"{{search}}\" से मेल खाने वाला कोई होस्ट नहीं मिला", - "links": "लिंक", - "navigate": "नेविगेट करें", - "select": "चुनें", - "pluginActions": "अन्य क्रियाएं", - "noTargetTab": "कोई टर्मिनल टैब खुला नहीं है", - "documentation": "प्रलेखन" - }, "splitScreen": { "title": "स्प्लिट स्क्रीन", "defaultLabel": "स्प्लिट {{number}}", "splitRight": "दाईं ओर विभाजित करें", "splitDown": "नीचे विभाजित करें", - "addToSplit": "{{split}} में जोड़ें", "paneEmptyItem": "पैन {{index}}: खाली", "paneItem": "पैन {{index}}: {{label}}", "paneNumber": "पैन {{index}}", - "newPaneRight": "दाईं ओर नया पैन", - "newPaneBelow": "नीचे नया पैन", "emptyTitle": "खाली पैन", "emptyHint": "यहाँ दिखाने के लिए कुछ चुनें। जब यह पैन चयनित है, साइडबार से जो भी खोलेंगे वह यहाँ भी खुलेगा।", "openTabs": "खुले टैब", @@ -962,7 +890,6 @@ "clearPane": "इस पैन को खाली करें", "zoom": "पैन ज़ूम करें", "unzoom": "लेआउट पुनर्स्थापित करें", - "unsplit": "विभाजन हटाएं", "layouts": "लेआउट", "applyLayout": "लेआउट बदलें", "maxPanes_one": "एक स्प्लिट में अधिकतम {{count}} पैन हो सकता है", @@ -971,8 +898,6 @@ "dropHere": "यहाँ दिखाने के लिए छोड़ें", "paneActions": "पैन क्रियाएं", "dividerHint": "आकार बदलने के लिए खींचें। समान करने के लिए डबल-क्लिक करें।", - "openInSplit": "स्प्लिट में खोलें", - "openInNewSplit": "वर्तमान टैब के साथ नया स्प्लिट", "shortcuts": "शॉर्टकट", "shortcutNavigate": "पैन के बीच जाएं", "presets": { @@ -986,23 +911,6 @@ "grid6": "छह का ग्रिड" } }, - "connections": { - "noConnections": "कोई कनेक्शन नहीं", - "noConnectionsDesc": "यहाँ कनेक्शन देखने के लिए टर्मिनल, फ़ाइल मैनेजर या रिमोट डेस्कटॉप खोलें", - "connectedFor": "Connected for {{duration}}", - "connected": "Connected", - "disconnected": "Disconnected", - "reconnect": "Reconnect", - "sectionOpen": "Open", - "sectionBackground": "Background", - "backgroundDesc": "Sessions persist for {{minutes}} minutes after disconnect and can be reconnected.", - "expiresIn": "Expires in {{duration}}", - "search": "Search connections...", - "noSearchResults": "No connections match your search", - "rename": "Rename session", - "forgetConfirm": "End the background session for {{name}}?", - "forget": "End session" - }, "sshAuth": { "totpRequired": "Two-Factor Authentication Required", "totpCodeLabel": "Verification Code", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "की पासवर्ड", "pastePrivateKey": "अपनी प्राइवेट की यहाँ पेस्ट करें...", - "enterPassword": "अपना पासवर्ड दर्ज करें", - "apiKeyName": "उदा., CI Pipeline", - "credentialName": "उदा. Production SSH Key", - "optionalDetails": "वैकल्पिक विवरण...", - "sshUsername": "उदा. root या deploy", - "hostAddress": "10.0.0.1 या example.com", - "hostName": "उदा. Web Server Production" + "enterPassword": "अपना पासवर्ड दर्ज करें" }, "dashboard": { - "title": "डैशबोर्ड", - "github": "GitHub", - "reportBug": "बग की रिपोर्ट करें", - "discord": "Discord", - "docs": "दस्तावेज़", - "donate": "दान करें", - "serverOverview": "सर्वर अवलोकन", - "version": "संस्करण", "updateAvailable": "अपडेट उपलब्ध", - "beta": "बीटा", - "uptime": "अपटाइम", - "database": "डेटाबेस", - "healthy": "स्वस्थ", - "error": "त्रुटि", - "totalHosts": "कुल होस्ट", - "totalCredentials": "कुल क्रेडेंशियल", - "recentActivity": "हाल की गतिविधि", - "reset": "रीसेट", - "noRecentActivity": "कोई हाल की गतिविधि नहीं", - "quickActions": "त्वरित क्रियाएँ", - "addHost": "होस्ट जोड़ें", - "addCredential": "क्रेडेंशियल जोड़ें", - "adminSettings": "प्रशासनिक सेटिंग्स", - "userProfile": "उपयोगकर्ता प्रोफ़ाइल", - "serverStats": "सर्वर सांख्यिकी", - "customizeLayout": "डैशबोर्ड अनुकूलित करें", - "justNow": "बस अभी" + "beta": "बीटा" }, "dashboardTab": { "stable": "स्थिर", - "registerNewServer": "एक नया सर्वर पंजीकृत करें", - "storeSshKeysOrPasswords": "SSH की या पासवर्ड संग्रहीत करें", - "manageUsersAndRoles": "उपयोगकर्ताओं और भूमिकाओं का प्रबंधन करें", - "manageYourAccount": "अपने खाते का प्रबंधन करें", - "hostStatus": "होस्ट स्थिति", - "noHostsConfigured": "कोई होस्ट कॉन्फ़िगर नहीं", - "checking": "जाँच रहे हैं", - "commandPalette": "कमांड पैलेट", - "done": "पूर्ण", - "clear": "साफ़ करें", - "dragToResizeColumns": "कॉलम का आकार बदलने के लिए खींचें", - "hostsAvailable": "उपलब्ध होस्ट", - "removeSection": "सेक्शन हटाएं", - "addSection": "एक सेक्शन जोड़ें", - "allSectionsShown": "सब कुछ पहले से ही डैशबोर्ड पर है।", - "fromPlugins": "प्लगइन्स से", - "dropHere": "यहाँ एक सेक्शन छोड़ें", - "dragToReorder": "सेक्शन को पुनः व्यवस्थित करने के लिए खींचें", - "clearActivityConfirm": "अपनी हालिया गतिविधि साफ़ करें?", - "resetConfirm": "डैशबोर्ड को उसके डिफ़ॉल्ट लेआउट पर रीसेट करें?", "onlineCount_one": "{{count}} ऑनलाइन", "onlineCount_other": "{{count}} ऑनलाइन", "hostCount_one": "{{count}} होस्ट", "hostCount_other": "{{count}} होस्ट" }, "admin": { - "sectionGeneral": "सामान्य", - "sectionUsers": "उपयोगकर्ता", - "sectionSessions": "सत्र", - "sectionRoles": "भूमिकाएँ", - "sectionDatabase": "डेटाबेस", - "sectionApiKeys": "API कुंजियाँ", - "sectionAuditLog": "ऑडिट लॉग", - "sectionSsl": "HTTPS प्रमाणपत्र", - "sectionBranding": "व्हाइट लेबल", - "brandingAppName": "एप्लिकेशन का नाम", - "brandingAppNameDesc": "लॉगिन स्क्रीन और ब्राउज़र टैब पर दिखाया जाता है। \"Termix\" का उपयोग करने के लिए खाली छोड़ दें।", - "brandingTagline": "टैगलाइन", - "brandingTaglineDesc": "लॉगिन स्क्रीन पर एप्लिकेशन नाम के नीचे दिखाया जाता है। डिफ़ॉल्ट टैगलाइन का उपयोग करने के लिए खाली छोड़ दें।", - "brandingLogo": "लोगो", - "brandingLogoDesc": "PNG, JPEG या WEBP, अधिकतम 750 KB। लॉगिन स्क्रीन और ब्राउज़र टैब पर डिफ़ॉल्ट आइकन को बदल देता है।", - "brandingLogoUpload": "लोगो अपलोड करें", - "brandingLogoReset": "डिफ़ॉल्ट पर रीसेट करें", - "brandingLogoInvalid": "अमान्य छवि। 750 KB तक की PNG, JPEG या WEBP फ़ाइल का उपयोग करें।", - "brandingSaved": "ब्रांडिंग सेटिंग्स सहेजी गईं", - "brandingSaveFailed": "ब्रांडिंग सेटिंग्स सहेजने में विफल", - "sslDescription": "वह प्रमाणपत्र जिसे Termix HTTPS के माध्यम से सर्व करता है। यहाँ अपना अपलोड करें, या ACME प्रमाणपत्र सेक्शन में Let's Encrypt से एक प्राप्त और नवीकृत करें।", - "sslDocsLink": "SSL दस्तावेज़ देखें", - "sslCertStatus": "प्रमाणपत्र स्थिति", - "sslCertStatusNone": "कोई प्रमाणपत्र नहीं", - "sslCertStatusValid": "मान्य", - "sslCertStatusExpiring": "जल्द समाप्त हो रहा है", - "sslCertStatusExpired": "समाप्त हो चुका", - "sslCertExpiresAt": "{{date}} को समाप्त होता है", - "sslInfoNote": "प्रमाणपत्र जारी करने या अपलोड करने के बाद, Termix मौजूदा HTTP पोर्ट के अतिरिक्त SSL_PORT (डिफ़ॉल्ट 8443) पर HTTPS को स्वचालित रूप से सक्षम कर देगा। सुनिश्चित करें कि यह पोर्ट इस कंटेनर के लिए प्रकाशित/मैप किया गया है ताकि यह पहुँच योग्य हो।", - "sslManualCert": "प्रमाणपत्र (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "निजी कुंजी (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "अपना मौजूदा प्रमाणपत्र और निजी कुंजी पेस्ट करें, यदि आपके CA द्वारा आवश्यक हो तो पूर्ण चेन सहित।", - "sslManualUpload": "प्रमाणपत्र अपलोड और इंस्टॉल करें", - "sslManualUploadLoading": "प्रमाणपत्र अपलोड हो रहा है...", - "sslManualUploadSuccess": "प्रमाणपत्र सफलतापूर्वक अपलोड और इंस्टॉल हो गया", - "sslManualUploadFailed": "प्रमाणपत्र अपलोड विफल", - "sslManualRequiresFields": "प्रमाणपत्र और निजी कुंजी आवश्यक हैं", - "auditLogTotal": "{{total}} कुल प्रविष्टियाँ", - "auditLogEmpty": "कोई ऑडिट लॉग प्रविष्टियाँ नहीं मिलीं", - "auditLogSuccess": "सफल", - "auditLogFailed": "विफल", - "auditLogClearFilters": "फ़िल्टर साफ़ करें", - "auditLogPage": "पृष्ठ {{page}} / {{totalPages}} ({{total}} कुल)", - "auditLogIp": "IP", - "auditLogResourceId": "संसाधन ID", - "auditLogFilterUser": "उपयोगकर्ता", - "auditLogFilterAction": "कार्रवाई", - "auditLogFilterResourceType": "संसाधन प्रकार", - "auditLogFilterStatus": "स्थिति", - "auditLogFilterFrom": "से", - "auditLogFilterTo": "तक", - "auditLogFilterAll": "सभी", - "allowRegistration": "उपयोगकर्ता पंजीकरण की अनुमति दें", - "allowRegistrationDesc": "नए उपयोगकर्ताओं को उपयोगकर्ता नाम और पासवर्ड के साथ स्वयं पंजीकृत होने दें", - "allowPasswordLogin": "पासवर्ड लॉगिन की अनुमति दें", - "allowPasswordLoginDesc": "उपयोगकर्ता नाम/पासवर्ड लॉगिन", - "externalAutoProvision": "बाहरी खातों को स्वचालित रूप से बनाएं", - "externalAutoProvisionDesc": "जब कोई पहली बार SSO या LDAP जैसे बाहरी लॉगिन के माध्यम से साइन इन करता है, तो एक खाता बनाएं। जब बंद हो, तो केवल वे लोग उस तरीके से साइन इन कर सकते हैं जिनके पास पहले से ही खाता है", - "secondFactorAfterExternalLogin": "बाहरी लॉगिन (SSO, GitHub, Google, LDAP) के बाद दूसरे कारक के लिए पूछें", - "secondFactorAfterExternalLoginDesc": "बंद होने पर, एनरोल किया गया दूसरा कारक केवल पासवर्ड और अन्य स्थानीय लॉगिन के बाद पूछा जाता है, जैसा कि पहले था। चालू होने पर, इसे हर लॉगिन विधि के बाद पूछा जाता है, जिसमें SSO और LDAP शामिल हैं।", - "allowPasswordReset": "पासवर्ड रीसेट की अनुमति दें", - "allowPasswordResetDesc": "Docker लॉग के माध्यम से रीसेट कोड", - "auditForwardingTitle": "SIEM को फॉरवर्ड करें", - "auditForwardingDesc": "हर ऑडिट एंट्री की एक कॉपी को NDJSON के रूप में एक बाहरी कलेक्टर को भेजें। स्थानीय लॉग सत्य का स्रोत बने रहते हैं।", - "auditForwardingEnvNotice": "एक पर्यावरण चर भी फॉरवर्डिंग कॉन्फ़िगर करता है; यहाँ सहेजा गया URL प्राथमिकता रखता है।", - "auditForwardingToken": "बियरर टोकन (वैकल्पिक)", - "auditForwardingTokenStored": "बियरर टोकन (सहेजा गया)", - "auditForwardingSaved": "ऑडिट फॉरवर्डिंग सेटिंग्स सहेजी गईं", - "auditForwardingSaveError": "ऑडिट फॉरवर्डिंग सेटिंग्स सहेजने में विफल", - "sessionTimeout": "सत्र टाइमआउट", - "hours": "घंटे", - "sessionTimeoutRange": "न्यूनतम 1 घंटा, अधिकतम 720 घंटे", - "monitoringDefaults": "मॉनिटरिंग डिफ़ॉल्ट", - "statusCheck": "स्थिति जाँच", - "sec": "सेकंड", - "logLevel": "लॉग स्तर", "usersCount_one": "{{count}} उपयोगकर्ता", - "usersCount_other": "{{count}} उपयोगकर्ता", - "searchUsers": "उपयोगकर्ता खोजें...", - "noUsers": "कोई उपयोगकर्ता नहीं", - "noUsersMatch": "कोई उपयोगकर्ता आपकी खोज से मेल नहीं खाता", - "pageOf": "पेज {{page}} of {{total}}", - "createUser": "बनाएं", - "newRole": "नया भूमिका", - "roleName": "नाम", - "roleDisplayName": "प्रदर्शन नाम", - "roleDescription": "विवरण", "rolesCount_one": "{{count}} भूमिका", - "rolesCount_other": "{{count}} भूमिकाएं", - "createRole": "बनाएं", - "creating": "बना रहे हैं...", - "exportDatabase": "डेटाबेस निर्यात करें", - "exportDatabaseDesc": "सभी होस्ट, क्रेडेंशियल और सेटिंग्स का पोर्टेबल SQLite बैकअप डाउनलोड करें", - "export": "निर्यात", - "exporting": "निर्यात कर रहे हैं...", - "importDatabase": "डेटाबेस आयात करें", - "importDatabaseDesc": "किसी भी डेटाबेस बैकएंड पर पोर्टेबल .sqlite बैकअप से पुनर्स्थापित करें", - "importDatabaseSelected": "चयनित: {{name}}", - "selectFile": "फ़ाइल चुनें", - "changeFile": "बदलें", - "import": "आयात", - "importing": "आयात कर रहे हैं...", "apiKeysCount_one": "{{count}} कुंजी", - "apiKeysCount_other": "{{count}} कुंजियां", - "apiKeysDocsLink": "दस्तावेज़ देखें", - "apiKeysCliHint": "अपने टर्मिनल से सर्वर प्रबंधित करने के लिए Termix CLI के साथ एक API कुंजी का उपयोग करें।", - "apiKeysCliLink": "CLI दस्तावेज़ देखें", - "newApiKey": "नई API कुंजी", - "apiKeyCreatedWarning": "की बनाया गया - इसे अभी कॉपी करें, यह फिर से नहीं दिखाया जाएगा।", - "apiKeyName": "नाम", - "apiKeyUser": "उपयोगकर्ता", - "apiKeySelectUser": "एक उपयोगकर्ता चुनें...", - "apiKeyExpiresAt": "समाप्ति तिथि", - "createKey": "की बनाएं", - "apiKeyNoExpiry": "कोई समाप्ति नहीं", - "revokedBadge": "रद्द किया गया", - "authTypeDual": "डुअल प्रमाणीकरण", - "authTypeExternal": "बाहरी", - "authTypeLocal": "स्थानीय", - "adminStatusAdministrator": "प्रशासक", - "adminStatusRegularUser": "नियमित उपयोगकर्ता", - "adminBadge": "प्रशासक", - "systemBadge": "सिस्टम", - "customBadge": "कस्टम", - "youBadge": "आप", "sessionsActive_one": "{{count}} सक्रिय", - "sessionsActive_other": "{{count}} सक्रिय", - "sessionActive": "सक्रिय: {{time}}", - "sessionExpires": "समाप्ति: {{time}}", - "revokeAll": "सभी", - "revokeAllSessionsSuccess": "उपयोगकर्ता के सभी सत्र रद्द किए गए", - "revokeAllSessionsFailed": "सत्र रद्द करने में विफल", - "revokeSessionFailed": "सत्र रद्द करने में विफल", - "addRole": "भूमिका जोड़ें", - "noCustomRoles": "कोई कस्टम भूमिका परिभाषित नहीं है", - "removeRoleFailed": "भूमिका हटाने में विफल", - "assignRoleFailed": "भूमिका सौंपने में विफल", - "userAdminAccess": "प्रशासक", - "userAdminAccessDesc": "सभी प्रशासनिक सेटिंग्स तक पूर्ण पहुंच", - "userRoles": "भूमिकाएं", - "revokeAllUserSessions": "सभी सत्र रद्द करें", - "revokeAllUserSessionsDesc": "सभी डिवाइस पर पुनः लॉगिन ज़बरदस्ती करें", - "revoke": "रद्द करें", - "deleteUserWarning": "इस उपयोगकर्ता को हटाना स्थायी है।", - "deleteUser": "{{username}} को हटाएं", - "deleting": "हटाया जा रहा है...", - "deleteUserFailed": "उपयोगकर्ता हटाने में विफल", - "deleteUserSuccess": "उपयोगकर्ता \"{{username}}\" हटाया गया", - "deleteRoleSuccess": "भूमिका \"{{name}}\" हटाई गई", - "revokeKeySuccess": "की \"{{name}}\" रद्द की गई", - "revokeKeyFailed": "की रद्द करने में विफल", - "copiedToClipboard": "क्लिपबोर्ड पर कॉपी किया गया", - "done": "हो गया", - "createUserTitle": "उपयोगकर्ता बनाएं", - "createUserDesc": "एक नया स्थानीय खाता बनाएं।", - "createUserUsername": "उपयोगकर्ता नाम", - "createUserPassword": "पासवर्ड", - "createUserPasswordHint": "न्यूनतम 6 अक्षर।", - "createUserEnterUsername": "उपयोगकर्ता नाम दर्ज करें", - "createUserSubmit": "उपयोगकर्ता बनाएं", - "editUserTitle": "उपयोगकर्ता प्रबंधित करें: {{username}}", - "editUserDesc": "भूमिकाएं, प्रशासक स्थिति, सत्र और खाता सेटिंग्स संपादित करें।", - "editUserUsername": "उपयोगकर्ता नाम", - "editUserAuthType": "प्रमाणीकरण प्रकार", - "editUserAdminStatus": "प्रशासक स्थिति", - "editUserUserId": "उपयोगकर्ता ID", - "linkAccountTitle": "खातों को लिंक करें", - "linkAccountDesc": "बाहरी खाते {{username}} को मौजूदा स्थानीय खाते के साथ मिलाएं।", - "linkAccountDescLocal": "स्थानीय खाते {{username}} को मौजूदा बाहरी-केवल खाते के साथ लिंक करें।", - "linkAccountWarningTitle": "इससे यह होगा:", - "linkAccountEffect1": "केवल बाहरी खाता हटा दिया जाएगा", - "linkAccountEffect2": "लक्ष्य खाते में इसका बाहरी साइन-इन जोड़ा जाएगा", - "linkAccountEffect3": "बाहरी और पासवर्ड दोनों से साइन-इन की अनुमति होगी", - "linkAccountTargetUsername": "स्थानीय खाते का उपयोगकर्ता नाम", - "linkAccountTargetPlaceholder": "जिस स्थानीय खाते से लिंक करना है, उसका उपयोगकर्ता नाम दर्ज करें", - "linkAccountExternalUsername": "बाहरी खाते का उपयोगकर्ता नाम", - "linkAccountExternalPlaceholder": "जिस केवल-बाहरी खाते को विलीन करना है, उसका उपयोगकर्ता नाम दर्ज करें", - "linkAccountExternalNotFound": "उस उपयोगकर्ता नाम के साथ कोई केवल-बाहरी खाता नहीं मिला", - "linkAccounts": "खातों को लिंक करें", - "linkAccountSuccess": "खाते सफलतापूर्वक लिंक हो गए", - "linkAccountFailed": "खातों को लिंक करने में विफल", - "linkAccountInProgress": "लिंक हो रहा है...", - "unlinkAccountTitle": "बाहरी साइन-इन अनलिंक करें", - "unlinkAccountDesc": "{{username}} से बाहरी साइन-इन हटाएं। वे केवल अपने पासवर्ड से लॉग इन कर सकेंगे।", - "unlinkAccountWarning": "इससे इस खाते से बाहरी साइन-इन हटा दिया जाएगा। लॉग इन करना जारी रखने के लिए उपयोगकर्ता के पास पासवर्ड सेट होना आवश्यक है।", - "unlinkAccount": "बाहरी साइन-इन अनलिंक करें", - "unlinkAccountInProgress": "अनलिंक हो रहा है...", - "unlinkAccountSuccess": "बाहरी साइन-इन अनलिंक हो गया", - "unlinkAccountFailed": "बाहरी साइन-इन अनलिंक करने में विफल", - "updateRegistrationFailed": "पंजीकरण सेटिंग अपडेट करने में विफल", - "updatePasswordLoginFailed": "पासवर्ड लॉगिन सेटिंग अपडेट करने में विफल", - "updateSecondFactorAfterExternalLoginFailed": "द्वितीयक कारक सेटिंग अपडेट करने में विफल", - "updatePasswordResetFailed": "पासवर्ड रीसेट सेटिंग अपडेट करने में विफल", - "sessionTimeoutRange2": "सत्र टाइमआउट 1 से 720 घंटों के बीच होना चाहिए", - "sessionTimeoutSaved": "सत्र टाइमआउट सहेजा गया", - "sessionTimeoutSaveFailed": "सत्र टाइमआउट सहेजने में विफल", - "monitoringIntervalInvalid": "अमान्य अंतराल मान", - "monitoringSaved": "मॉनिटरिंग सेटिंग्स सहेजी गईं", - "monitoringSaveFailed": "मॉनिटरिंग सेटिंग्स सहेजने में विफल", - "logLevelUpdateFailed": "लॉग स्तर अपडेट करने में विफल", - "createUserRequired": "उपयोगकर्ता नाम और पासवर्ड आवश्यक हैं", - "createUserPasswordTooShort": "पासवर्ड कम से कम 6 अक्षरों का होना चाहिए", - "createUserSuccess": "उपयोगकर्ता \"{{username}}\" बनाया गया", - "createUserFailed": "उपयोगकर्ता बनाने में विफल", - "updateAdminStatusFailed": "एडमिन स्थिति अपडेट करने में विफल", - "allSessionsRevoked": "सभी सत्र रद्द कर दिए गए", - "revokeSessionsFailed": "सत्र रद्द करने में विफल", - "manageUserData": "उपयोगकर्ता डेटा प्रबंधित करें", - "backToUsers": "उपयोगकर्ताओं पर वापस जाएं", - "manageTabAccount": "खाता", - "manageTabHosts": "होस्ट", - "manageTabCredentials": "प्रमाणपत्र", - "manageTabSessions": "सत्र", - "manageTabDanger": "खतरनाक", - "manageEditorBack": "{{username}} के डेटा पर वापस जाएं", - "dataLockedBadge": "लॉक किया गया", - "dataLockedNotice": "{{username}} का डेटा तब तक लॉक रहेगा जब तक वे अगली बार लॉग इन नहीं करते। तब तक उनके होस्ट, प्रमाणपत्र और स्निपेट देखे या संपादित नहीं किए जा सकते।", - "resetPasswordTitle": "पासवर्ड रीसेट करें", - "resetPasswordExternalOnly": "यह उपयोगकर्ता बाहरी प्रदाता के माध्यम से साइन इन करता है और इसका कोई पासवर्ड नहीं है।", - "resetPasswordPlaceholder": "नया पासवर्ड", - "resetPasswordBtn": "रीसेट करें", - "resetPasswordWorking": "रीसेट हो रहा है...", - "resetPasswordSuccess": "पासवर्ड रीसेट हो गया", - "resetPasswordSuccessWiped": "पासवर्ड रीसेट हो गया। उपयोगकर्ता का एन्क्रिप्टेड डेटा मिटा दिया गया।", - "resetPasswordFailed": "पासवर्ड रीसेट करने में विफल", - "resetPasswordConfirmWipe": "{{username}} ने एन्क्रिप्शन अपग्रेड के बाद से लॉग इन नहीं किया है, इसलिए उनका डेटा पुनर्प्राप्त नहीं किया जा सकता। अभी रीसेट करने से उनके होस्ट, प्रमाणपत्र और स्निपेट हटा दिए जाएंगे। जारी रखें?", - "manageApiKeys": "API कुंजियाँ", - "apiKeyNamePlaceholder": "कुंजी का नाम", - "apiKeyCopyNotice": "इस कुंजी को अभी कॉपी करें, यह फिर से नहीं दिखाई देगी।", - "noApiKeysForUser": "कोई API कुंजी नहीं", - "apiKeyDeleteFailed": "API कुंजी हटाने में विफल", - "exportUserData": "डेटा निर्यात", - "exportUserDataDesc": "इस उपयोगकर्ता के होस्ट, क्रेडेंशियल और फ़ाइल मैनेजर डेटा को JSON के रूप में डाउनलोड करें। गुप्त जानकारी को डिक्रिप्ट किया गया है।", - "exportUserDataSuccess": "उपयोगकर्ता डेटा निर्यात किया गया", - "exportUserDataFailed": "उपयोगकर्ता डेटा निर्यात करने में विफल", "hostsCount_one": "{{count}} होस्ट", "hostsCount_other": "{{count}} होस्ट", - "addHostForUser": "होस्ट जोड़ें", - "noHostsForUser": "इस उपयोगकर्ता के पास कोई होस्ट नहीं है", - "connectToHost": "कनेक्ट करें", - "deleteHostConfirm": "{{username}} के होस्ट \"{{name}}\" को हटाएं?", - "hostDeletedSuccess": "होस्ट हटाया गया", - "hostDeleteFailed": "होस्ट हटाने में विफल", "credentialsCount_one": "{{count}} क्रेडेंशियल", "credentialsCount_other": "{{count}} क्रेडेंशियल", - "addCredentialForUser": "क्रेडेंशियल जोड़ें", - "noCredentialsForUser": "इस उपयोगकर्ता के पास कोई क्रेडेंशियल नहीं है", - "deleteCredentialConfirm": "{{username}} के क्रेडेंशियल \"{{name}}\" को हटाएं?", - "credentialDeletedSuccess": "क्रेडेंशियल हटाया गया", - "credentialDeleteFailed": "क्रेडेंशियल हटाने में विफल", - "noSessionsForUser": "कोई सक्रिय सत्र नहीं", - "deleteSuccessorLabel": "होस्ट और क्रेडेंशियल को हस्तांतरित करें", - "deleteSuccessorMe": "मुझे (हटा रहे प्रशासक को)", - "deleteSuccessorNone": "किसी को नहीं, उन्हें हटा दें", - "deleteSuccessorDesc": "इस उपयोगकर्ता द्वारा साझा की गई हर चीज़ नए मालिक के तहत काम करती रहेगी; किसी को नहीं चुनने पर उनके होस्ट, क्रेडेंशियल और साझाकरण हटा दिए जाएंगे।", - "deleteUserDangerDesc": "{{username}} और उनके सभी डेटा (होस्ट, क्रेडेंशियल, स्निपेट, इतिहास) को स्थायी रूप से हटाएं। इसे पूर्ववत नहीं किया जा सकता।", - "deleteUserConfirm": "{{username}} और उनके सभी डेटा को स्थायी रूप से हटाएं?", - "deleteUserAdminBlocked": "इस उपयोगकर्ता को हटाने से पहले प्रशासक स्थिति हटाएं।", - "createRoleRequired": "नाम और प्रदर्शन नाम आवश्यक हैं", - "createRoleSuccess": "भूमिका \"{{name}}\" बनाई गई", - "createRoleFailed": "भूमिका बनाने में विफल", - "apiKeyNameRequired": "कुंजी का नाम आवश्यक है", - "apiKeyUserRequired": "उपयोगकर्ता ID आवश्यक है", - "apiKeyCreatedSuccess": "API कुंजी \"{{name}}\" बनाई गई", - "apiKeyCreateFailed": "API कुंजी बनाने में विफल", - "exportSuccess": "डेटाबेस सफलतापूर्वक निर्यात किया गया", - "exportFailed": "डेटाबेस निर्यात विफल", - "importSelectFile": "कृपया पहले एक फ़ाइल चुनें", - "importCompleted": "आयात पूर्ण: {{total}} आइटम आयात किए गए, {{skipped}} छोड़े गए", - "importFailed": "आयात विफल: {{error}}", - "importError": "डेटाबेस आयात विफल", - "sectionHostDefaults": "होस्ट डिफ़ॉल्ट", "rolePermissions": { "count_one": "{{count}} अनुमति", - "count_other": "{{count}} अनुमतियां", - "editAction": "अनुमतियाँ संपादित करें", - "loadError": "अनुमति कैटलॉग लोड करने में विफल", - "saved": "भूमिका अनुमतियाँ सहेजी गईं", - "saveError": "भूमिका अनुमतियाँ सहेजने में विफल", - "save": "सहेजें", - "saving": "सहेजा जा रहा है...", - "pluginDisabled": "प्लगइन अक्षम", "groups": { "hosts": "होस्ट", "credentials": "क्रेडेंशियल", "admin": "प्रशासन" } - }, - "notificationPrivateEndpoints": "अनुमत निजी सूचना होस्ट", - "notificationPrivateEndpointsDesc": "सटीक निजी होस्ट जिनसे सूचना चैनल संपर्क कर सकते हैं। उन्हें कॉमा से अलग करें।", - "updateNotificationEndpointsFailed": "सूचना एंडपॉइंट अनुमति सूची अपडेट करने में विफल", - "secondFactorsSectionTitle": "द्वितीयक कारक", - "secondFactorsNone": "कोई द्वितीयक कारक पंजीकृत नहीं", - "secondFactorUnavailable": "अनुपलब्ध", - "resetSecondFactors": "द्वितीयक कारक रीसेट करें", - "resetSecondFactorsConfirm": "{{username}} के सभी द्वितीयक कारक हटाएं? वे अपने पासवर्ड या SSO के साथ साइन इन कर सकते हैं और फिर से पंजीकरण कर सकते हैं।", - "secondFactorsResetSuccess": "द्वितीयक कारक रीसेट हो गए", - "secondFactorsResetFailed": "द्वितीयक कारक रीसेट करने में विफल", - "passwordLoginForced": "पासवर्ड लॉगिन बंद है, लेकिन कोई अन्य लॉगिन विधि सक्षम नहीं है, इसलिए यह अभी के लिए चालू रहता है। कोई भी लॉकआउट नहीं होता।", - "sslNotRenewed": "इस प्रमाणपत्र का नवीकरण कुछ भी नहीं करता है। इसकी समाप्ति {{date}} को होगी। ACME प्रमाणपत्र अनुभाग में स्वचालित नवीकरण चालू करें, या उससे पहले एक नया अपलोड करें।", - "sslSelfSigned": "Termix द्वारा बनाया गया स्व-हस्ताक्षरित प्रमाणपत्र। ब्राउज़र इसके बारे में चेतावनी देंगे।", - "sslRenewedBy": "{{plugin}} द्वारा स्वचालित रूप से नवीकृत", - "sslIssuer": "{{issuer}} द्वारा जारी", - "sslNames": "{{names}} को कवर करता है", - "sslManualTitle": "प्रमाणपत्र अपलोड करें", - "updateExternalAutoProvisionFailed": "स्वतः-निर्माण सेटिंग अपडेट करने में विफल", - "hostTags": "पूर्वनिर्धारित होस्ट टैग", - "hostTagsDesc": "टैग जो हर उपयोगकर्ता को होस्ट एडिटर में सुझाव के रूप में दिखाई देते हैं। एक जोड़ने के लिए Space या Enter दबाएं। यहाँ से टैग हटाना उसे होस्ट से नहीं हटाता।", - "hostTagsError": "होस्ट टैग सुझाव लोड या सहेजने में असमर्थ।", - "revokeAllSessionsConfirm": "{{username}} को हर जगह से साइन आउट करें?", - "revokeSessionConfirm": "इस सत्र से साइन आउट करें?", - "revokeSession": "साइन आउट", - "deleteRoleConfirm": "{{name}} भूमिका हटाएं?", - "revokeKeyConfirm": "API कुंजी {{name}} रद्द करें?", - "revokeKey": "रद्द करें" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "कहाँ", - "who": "कौन", - "hostLabel": "होस्ट", - "hostPlaceholder": "192.168.1.1 या example.com", - "portLabel": "पोर्ट", - "usernameLabel": "उपयोगकर्ता नाम", - "usernamePlaceholder": "उपयोगकर्ता नाम", - "authLabel": "प्रमाणीकरण", - "passwordLabel": "पासवर्ड", - "passwordPlaceholder": "पासवर्ड", - "privateKeyLabel": "निजी कुंजी", - "privateKeyPlaceholder": "निजी कुंजी पेस्ट करें...", - "credentialLabel": "प्रमाणपत्र", - "credentialPlaceholder": "एक सहेजा गया प्रमाणपत्र चुनें", - "protocolLabel": "प्रोटोकॉल", - "domainLabel": "डोमेन", - "domainPlaceholder": "वैकल्पिक", - "connectToAction": "{{name}} से कनेक्ट करें", - "sshProtocol": "SSH", - "noTarget": "इस होस्ट प्रकार से कनेक्ट करने के लिए कुछ भी इंस्टॉल नहीं है" + "usernameLabel": "उपयोगकर्ता नाम" }, "keybindings": { - "description": "टर्मिनल और ऐप में कार्यों के लिए कुंजियाँ बाइंड करें, या बिल्ट-इन शॉर्टकट बदलें।", - "defaultsHeading": "बिल्ट-इन शॉर्टकट", - "fixedHeading": "ऐप शॉर्टकट", - "fixed": { - "splitRight": "दाईं ओर विभाजित करें", - "splitDown": "नीचे विभाजित करें", - "zoomPane": "फोकस किए गए पैन को ज़ूम करें", - "navigatePane": "पैन के बीच स्थानांतरित करें", - "nextTab": "अगला टैब", - "previousTab": "पिछला टैब", - "jumpTab": "टैब पर जाएं", - "previousView": "पिछले साइडबार दृश्य पर वापस जाएं", - "fullscreen": "फुलस्क्रीन टॉगल करें" - }, - "customHeading": "कस्टम शॉर्टकट", - "addBinding": "शॉर्टकट जोड़ें", - "addBindingTitle": "शॉर्टकट जोड़ें", - "editBindingTitle": "शॉर्टकट संपादित करें", - "loading": "लोड हो रहा है...", - "noCustomBindings": "अभी तक कोई कस्टम शॉर्टकट नहीं", - "defaultBadge": "डिफ़ॉल्ट", - "customizedBadge": "कस्टमाइज़्ड", - "customize": "कस्टमाइज़ करें", - "resetToDefault": "डिफ़ॉल्ट पर रीसेट करें", - "resetAllToDefaults": "सभी को डिफ़ॉल्ट पर रीसेट करें", - "cancel": "रद्द करें", - "saveBinding": "शॉर्टकट सेव करें", - "saveError": "कीबोर्ड शॉर्टकट सेव करने में विफल", - "pressKeysToRecord": "की संयोजन", - "pressKeysPlaceholder": "क्लिक करें और कुंजियाँ दबाएँ", - "recording": "कुंजियाँ दबाएँ...", - "comboRequiredError": "सबसे पहले एक की संयोजन दबाएँ", - "conflictWarning": "यह संयोजन पहले से ही {{combo}} से जुड़ा है। सेव करने पर दोनों सक्रिय होंगे।", - "actionLabel": "कार्य", "actionNextTab": "अगले टैब पर जाएँ", "actionPreviousTab": "पिछले टैब पर जाएँ", "actionOpenCommandPalette": "क्विक सर्च खोलें", - "actionReconnectSession": "वर्तमान सत्र को पुनः कनेक्ट करें", - "unavailableAction": "{{type}} (उपलब्ध नहीं)", - "actionRequiredError": "सबसे पहले एक कार्य चुनें", - "deleteConfirm": "इस कीबाइंडिंग को हटाएँ?", - "resetAllConfirm": "हर कीबाइंडिंग को उसके डिफ़ॉल्ट पर रीसेट करें?" + "actionReconnectSession": "वर्तमान सत्र को पुनः कनेक्ट करें" }, "userProfile": { - "storageModeLocal": "ब्राउज़र", - "storageModeCloud": "डेटाबेस", - "storageModeDescription": "ब्राउज़र सेटिंग्स को केवल इस ब्राउज़र में स्टोर करता है। डेटाबेस सर्वर के साथ सिंक करता है और किसी भी डिवाइस पर लोड होता है।", - "resetToDefaults": "डिफ़ॉल्ट पर रीसेट करें", - "resetToDefaultsSuccess": "सेटिंग्स डिफ़ॉल्ट पर रीसेट हो गईं।", - "storageModeSwitch": "प्राथमिकता स्टोरेज", - "sectionAccount": "खाता", - "desktopProfileTitle": "केवल इस डिवाइस पर", - "desktopProfileDescription": "यह प्रोफ़ाइल इस डिवाइस पर रहती है और स्वयं साइन इन करती है। हर डिवाइस पर एक ही होस्ट और सेटिंग्स का उपयोग करने के लिए इसे Termix सर्वर से लिंक करें।", - "sectionInterface": "इंटरफ़ेस", - "interfacePresetDesc": "Termix कितनी विस्तार से दिखाता है। हर फ़ीचर उपलब्ध रहता है।", "preset_simple": "सरल", "preset_simple_desc": "केवल आवश्यक चीज़ें।", "preset_balanced": "संतुलित", "preset_balanced_desc": "मानक लेआउट।", "preset_advanced": "उन्नत", "preset_advanced_desc": "सब कुछ चालू, घने पैक।", - "presetClearOverrides": "सभी रीसेट करें", - "presetOverridesTitle": "कस्टमाइज़्ड", - "presetRevertArea": "वापस करें", - "presetConfirmTitle": "{{preset}} पर स्विच करें?", - "presetConfirmDesc": "यह आपके साइडबार, नेविगेशन, डैशबोर्ड लेआउट, टर्मिनल टूलबार और फ़ाइल मैनेजर व्यू को रीसेट करता है। आपके होस्ट, क्रेडेंशियल्स और होमपेज को छुआ नहीं जाता।", - "presetConfirmApply": "प्रीसेट लागू करें", - "runSetupAgainDesc": "फ़र्स्ट-रन सेटअप से फिर से गुज़रें।", - "runSetupAgainButton": "सेटअप चलाएँ", "uiArea_chrome": "ऐप क्रोम", "uiArea_hostList": "होस्ट सूची", "uiArea_credentialList": "क्रेडेंशियल सूची", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "टर्मिनल", "uiArea_fileManager": "फ़ाइल मैनेजर", "uiArea_hostEditor": "होस्ट एडिटर", - "sectionAppearance": "दिखावट", - "sectionSecurity": "सुरक्षा", - "sectionApiKeys": "API कुंजियाँ", - "sectionData": "डेटा", - "usernameLabel": "उपयोगकर्ता नाम", - "roleLabel": "भूमिका", - "roleAdministrator": "प्रशासक", - "authMethodLabel": "प्रमाणीकरण विधि", - "authMethodLocal": "स्थानीय", - "twoFaLabel": "2FA", - "twoFaOn": "चालू", - "twoFaOff": "बंद", - "versionLabel": "संस्करण", - "cliTitle": "Termix CLI", - "cliDescription": "अपने शेल से टर्मिनल खोलें, कमांड चलाएं और फ़ाइलें स्थानांतरित करें।", - "cliLearnMore": "और जानें", - "deleteAccount": "खाता हटाएं", - "deleteAccountDescription": "अपना खाता स्थायी रूप से हटाएं", - "deleteButton": "हटाएं", - "deleteAccountPermanent": "यह क्रिया स्थायी है और इसे पूर्ववत नहीं किया जा सकता।", - "deleteAccountWarning": "सभी सत्र, होस्ट, क्रेडेंशियल और सेटिंग्स स्थायी रूप से हटा दिए जाएंगे।", - "confirmPasswordDeletePlaceholder": "पुष्टि करने के लिए अपना पासवर्ड दर्ज करें", "languageLabel": "भाषा", "themeLabel": "थीम", "fontSizeLabel": "फ़ॉन्ट आकार", "interfaceFontLabel": "इंटरफ़ेस फ़ॉन्ट", "interfaceFontDescription": "एप्लिकेशन इंटरफ़ेस फ़ॉन्ट बदलता है। टर्मिनल प्रोफ़ाइलें अपनी स्वयं की फ़ॉन्ट सेटिंग्स बनाए रखती हैं।", "accentColorLabel": "एक्सेंट रंग", - "keyboardShortcuts": "कीबोर्ड शॉर्टकट", - "keyboardShortcutsDescription": "टर्मिनल कॉपी, पेस्ट और कमांड शॉर्टकट को अनुकूलित करें", - "manageShortcuts": "प्रबंधित करें", - "commandPalette": "कमांड पैलेट", - "commandPaletteDesc": "कीबोर्ड शॉर्टकट सक्षम करें", - "reopenTabsOnLogin": "लॉगिन पर टैब पुनः खोलें", - "reopenTabsOnLoginDesc": "जब आप लॉगिन करें या पेज रिफ़्रेश करें तो अपने खुले टैब बहाल करें, भले ही आप किसी अन्य डिवाइस से हों", - "confirmTabClose": "टैब बंद करने की पुष्टि करें", - "confirmTabCloseDesc": "टर्मिनल टैब बंद करने से पहले पूछें", - "showTabNumbers": "टैब संख्याएं दिखाएं", - "showTabNumbersDesc": "प्रत्येक टैब पर एक संख्या प्रदर्शित करें ताकि उन्हें अलग-अलग पहचाना जा सके", - "settingsAppRail": "ऐप रेल", - "sidebarSettingsMoved": "होस्ट साइडबार प्रदर्शन सेटिंग्स अब कस्टमाइज़ साइडबार पैनल में चली गई हैं, जिसे होस्ट टूलबार से खोला जा सकता है।", - "showHostTags": "होस्ट टैग दिखाएं", - "showHostTagsDesc": "होस्ट सूची में टैग प्रदर्शित करें", - "statusColors": "वास्तविक स्थिति रंग", - "statusColorsDesc": "एक्सेंट रंग के बजाय ऑनलाइन/ऑफ़लाइन स्थिति के लिए हरा/लाल रंग का उपयोग करें", - "pinAppRail": "ऐप रेल पिन करें", - "pinAppRailDesc": "होवर करने पर विस्तार करने के बजाय बाएं साइडबार ऐप रेल को हमेशा विस्तारित रखें", - "expandAppRailOnHover": "होवर पर ऐप रेल विस्तारित करें", - "expandAppRailOnHoverDesc": "सूचक के ऊपर जाने पर बाएं साइडबार ऐप रेल को विस्तारित होने की अनुमति दें", - "appRailHoverPushesContent": "विस्तारित होने पर सामग्री को धकेलें", - "appRailHoverPushesContentDesc": "पेज के ऊपर इसे खोलने के बजाय विस्तारित रेल के लिए जगह बनाएं। रिमोट डेस्कटॉप जैसे खुले सत्र हर बार आकार बदलते हैं", - "showPinAppRailButton": "ऐप रेल पिन बटन दिखाएं", - "showPinAppRailButtonDesc": "ऐप रेल में इसे खुला रखने के लिए एक बटन दिखाएं। डिफ़ॉल्ट रूप से बंद।", - "settingsNavigation": "नेविगेशन", - "navigationTabsDesc": "चुनें कि ऐप रेल में कौन से टैब दिखाई दें", - "settingsUpdates": "अपडेट", - "disableUpdateChecks": "अपडेट जांच बंद करें", - "disableUpdateChecksDesc": "अपडेट की जांच करना बंद करें", - "changePassword": "पासवर्ड बदलें", - "currentPasswordLabel": "वर्तमान पासवर्ड", - "currentPasswordPlaceholder": "वर्तमान पासवर्ड", - "newPasswordLabel": "नया पासवर्ड", - "newPasswordPlaceholder": "नया पासवर्ड", - "confirmPasswordLabel": "नए पासवर्ड की पुष्टि करें", - "confirmPasswordPlaceholder": "नए पासवर्ड की पुष्टि करें", - "updatePassword": "पासवर्ड अपडेट करें", - "createApiKeyTitle": "API कुंजी बनाएं", - "createApiKeyDescription": "प्रोग्रामेटिक एक्सेस के लिए एक नई API कुंजी जनरेट करें।", - "apiKeyNameLabel": "नाम", - "apiKeyNamePlaceholder": "उदा. CI पाइपलाइन", - "expiryDateLabel": "समाप्ति तिथि", - "optional": "वैकल्पिक", - "cancel": "रद्द करें", - "createKey": "की बनाएं", - "apiKeyCreatedWarning": "की बनाया गया - इसे अभी कॉपी करें, यह फिर से नहीं दिखाया जाएगा।", - "copyApiKey": "API की कॉपी करें", - "copiedToClipboard": "क्लिपबोर्ड पर कॉपी किया गया", "apiKeyCount_one": "{{count}} कुंजी", - "apiKeyCount_other": "{{count}} कुंजियां", - "newKey": "नया की", - "noApiKeys": "अभी तक कोई API की नहीं है।", - "apiKeyActive": "सक्रिय", - "apiKeyUsageHint": "अपनी की को इसमें शामिल करें", - "apiKeyUsageHintHeader": "हेडर।", - "apiKeyPermissionsHint": "की उन अनुमतियों को विरासत में पाती हैं जो बनाने वाले उपयोगकर्ता की होती हैं।", - "exportData": "मेरे डेटा को निर्यात करें", - "exportDataDesc": "अपने होस्ट, क्रेडेंशियल और सेटिंग्स की बैकअप डाउनलोड करें ताकि उन्हें किसी अन्य डिवाइस पर स्थानांतरित किया जा सके", - "export": "निर्यात करें", - "exporting": "निर्यात हो रहा है...", - "importData": "मेरे डेटा को आयात करें", - "importDataDesc": ".sqlite बैकअप फ़ाइल से अपने होस्ट, क्रेडेंशियल और सेटिंग्स को पुनर्स्थापित करें", - "importDataSelected": "चयनित: {{name}}", - "selectFile": "फ़ाइल चुनें", - "changeFile": "बदलें", - "import": "आयात करें", - "importing": "आयात हो रहा है...", - "exportSuccess": "डेटा सफलतापूर्वक निर्यात किया गया", - "exportFailed": "डेटा निर्यात विफल रहा", - "importSelectFile": "कृपया पहले एक फ़ाइल चुनें", - "importCompleted": "आयात पूर्ण: {{total}} आइटम आयात किए गए, {{skipped}} छोड़े गए", - "importFailed": "आयात विफल: {{error}}", - "roleUser": "उपयोगकर्ता", - "authMethodDual": "डुअल ऑथ", - "authMethodExternal": "बाहरी", - "done": "पूर्ण", - "apiKeyNameRequired": "की का नाम आवश्यक है", - "apiKeyCreated": "API की \"{{name}}\" बनाई गई", - "apiKeyCreateFailed": "API की बनाने में विफल", - "apiKeyUser": "उपयोगकर्ता", - "apiKeyExpires": "समाप्त होता है", - "apiKeyRevoked": "API की \"{{name}}\" रद्द की गई", - "apiKeyRevokeFailed": "API की रद्द करने में विफल", - "passwordFieldsRequired": "वर्तमान और नई दोनों पासवर्ड आवश्यक हैं", - "passwordMismatch": "पासवर्ड मेल नहीं खाते", - "passwordTooShort": "पासवर्ड कम से कम 6 अक्षरों का होना चाहिए", - "passwordUpdated": "पासवर्ड सफलतापूर्वक अपडेट किया गया", - "passwordUpdateFailed": "पासवर्ड अपडेट करने में विफल", - "deletePasswordRequired": "अपना खाता हटाने के लिए पासवर्ड आवश्यक है", - "deleteFailed": "खाता हटाने में विफल", - "deleting": "हटाया जा रहा है...", "colorPickerTooltip": "रंग चयन खोलें", "themeSystem": "सिस्टम", "themeLight": "लाइट", @@ -1755,18 +1122,7 @@ "themeSolarized": "सोलराइज्ड", "themeTokyoNight": "टोक्यो नाइट", "themeOneDark": "वन डार्क", - "themeGruvbox": "ग्रुवबॉक्स", - "linkedProfileTitle": "सिंग इन किया गया {{server}} पर", - "linkedProfileDescription": "यह डिवाइस आपके सर्वर पर आपके खाते का उपयोग करता है और आपके डेटा की एक प्रति रखता है, इसलिए यह ऑफ़लाइन भी काम करता है।", - "manageSync": "सिंक प्रबंधित करें", - "setUpSync": "एक सर्वर से लिंक करें", - "settingsTabsAndShortcuts": "टैब और शॉर्टकट", - "onBetaTitle": "आप बीटा पर हैं", - "onBetaDescription": "टेस्ट करने के लिए धन्यवाद। बताएं कि क्या टूट गया।", - "tryBetaTitle": "नई सुविधाओं को जल्दी आज़माएं", - "tryBetaDescription": "अपडेट में बीटा प्रोग्राम में शामिल हों।", - "sendBetaFeedback": "बीटा फीडबैक भेजें", - "openUpdates": "अपडेट" + "themeGruvbox": "ग्रुवबॉक्स" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "{{name}} की {{list}} को आवश्यकता है। पहले उन्हें बंद करें या अनइंस्टॉल करें।", "missingDependencies": "{{name}} को {{list}} की आवश्यकता है, जो इंस्टॉल नहीं है।", "consentChanged": "आपने देखा था तब से इस प्लगइन द्वारा मांगी गई चीज़ें बदल गई हैं। सूची फिर से जांचें।", - "upload": "{{name}} पढ़ा नहीं जा सका: {{error}}", - "developerMode": "डेवलपर मोड बदला नहीं जा सका: {{error}}" + "upload": "{{name}} पढ़ा नहीं जा सका: {{error}}" }, "data": { "title": "स्टोर किया गया डेटा", @@ -2145,13 +1500,7 @@ "browsePlugins": "प्लगइन ब्राउज़ करें", "loading": "लोड हो रहा है", "developer": { - "title": "प्लगइन डेवलपर मोड", - "hint": "एडमिन को रजिस्ट्री जाँच के बिना प्लगइन टैब से .tmxplug फ़ाइल से प्लगइन इंस्टॉल करने की अनुमति देता है। अपने प्लगइन बनाने और परीक्षण करने के लिए इसका उपयोग करें।", - "enableTitle": "डेवलपर मोड चालू करें?", - "enableBody": "एडमिन Termix द्वारा जाँच नहीं की गई फ़ाइलों से प्लगइन इंस्टॉल कर सकेंगे। एक प्लगइन अपनी क्षमताओं की अनुमति के अनुसार कुछ भी कर सकता है, इसलिए केवल तभी इसे चालू करें जब आप प्लगइन बना रहे हों या परीक्षण कर रहे हों।", - "enable": "चालू करें", - "installFromFile": "फ़ाइल से इंस्टॉल करें", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS सेट है, इसलिए फ़ाइल से इंस्टॉल करना ब्लॉक रहता है।" + "installFromFile": "फ़ाइल से इंस्टॉल करें" }, "count": { "downloads_one": "{{formatted}} डाउनलोड", @@ -2189,71 +1538,7 @@ "secretSet": "सेट", "secretNotSet": "सेट नहीं", "secretReplace": "बदलें", - "pluginSettingsSaved": "सेटिंग्स सेव हो गईं", - "pluginSettingsInvalid": "कुछ सेटिंग्स सेव नहीं हो सकीं। हाइलाइट किए गए फ़ील्ड जांचें।", - "pluginSettingsSaveFailed": "सेटिंग्स सेव करने में विफल", - "pluginSettingsLoadFailed": "सेटिंग्स लोड करने में विफल", - "featureUnavailable": "{{name}} अभी अनुपलब्ध है। ये सेटिंग्स सेव हैं लेकिन असर नहीं करेंगी।", - "account": "खाता", - "security": "सुरक्षा", - "apiKeys": "API की", - "data": "डेटा और सिंक", - "interface": "इंटरफ़ेस", - "appearance": "दिखावट", - "keybindings": "कीबाइंडिंग", - "adminGeneral": "सामान्य", - "adminUsers": "उपयोगकर्ता", - "adminSessions": "सत्र", - "adminRoles": "भूमिकाएं", - "adminHostDefaults": "होस्ट डिफ़ॉल्ट", - "adminBranding": "ब्रांडिंग", - "adminDatabase": "डेटाबेस", - "adminSsl": "SSL", - "adminApiKeys": "API की", - "adminAuditLog": "ऑडिट लॉग", - "bandYou": "आपका खाता", - "bandApp": "यह ऐप", - "bandPlugins": "प्लगइन", - "bandInstance": "यह सर्वर", - "searchPlaceholder": "सेटिंग्स खोजें", - "noResults": "कोई सेटिंग्स मेल नहीं खातीं।", - "pages": "पेज", - "instanceSettings": "सर्वर सेटिंग्स", - "nothingHere": "यहाँ सेट करने के लिए कुछ नहीं है।", - "searchPage": "इस पेज पर खोजें", - "noPageMatches": "इस पेज पर कुछ भी मेल नहीं खाता।", - "updates": { - "title": "अपडेट", - "betaProgram": "बीटा प्रोग्राम", - "betaIntro": "बीटा अगले Termix संस्करण की प्रारंभिक बिल्ड हैं। जब कुछ नया आज़माने के लिए होता है, तो वे मंगलवार और शुक्रवार को आती हैं। इनमें बग हो सकते हैं, और आपकी प्रतिक्रिया ही स्टेबल रिलीज को बेहतर बनाती है।", - "termixBetas": "Termix बीटा", - "termixBetasHint": "मुझे केवल स्टेबल रिलीज नहीं, बल्कि नई बीटा के बारे में भी बताएं।", - "runningBetaBuild": "आप एक बीटा बिल्ड चला रहे हैं। बाहर निकलने के लिए, वापस एक स्टेबल इमेज या इंस्टॉलर पर स्विच करें।", - "howToInstall": "बीटा कैसे प्राप्त करें", - "desktopInstall": "बीटा इंस्टॉलर डाउनलोड करें और इसे इस पर इंस्टॉल करें।", - "downloadBeta": "{{version}} डाउनलोड करें", - "dockerInstall": "अपनी इमेज को बीटा टैग में बदलें और कंटेनर को पुनः आरंभ करें:", - "copy": "कॉपी करें", - "copied": "कॉपी किया गया", - "copyFailed": "कॉपी नहीं कर सका", - "learnMore": "बीटा के बारे में और जानें", - "feedback": "प्रतिक्रिया", - "feedbackHint": "कोई बग मिला या कोई विचार है? यह सीधे डेवलपर्स तक जाएगा, जिसमें आपका संस्करण भरा हुआ होगा।", - "sendFeedback": "बीटा प्रतिक्रिया भेजें", - "releases": "रिलीज", - "thisVersion": "यह संस्करण", - "newestStable": "नवीनतम स्टेबल", - "newestBeta": "नवीनतम बीटा", - "noRelease": "अभी कोई नहीं", - "pluginBetas": "प्लगइन बीटा", - "pluginBetasIntro": "हर प्लगइन अपने आप बीटा का उपयोग कर सकता है। एक को आज़माने के लिए, उसे खोलें और 'Try beta' दबाएं।", - "openPlugins": "प्लगइन खोलें", - "waitingForStable": "वापस स्टेबल पर। जब तक एक नई स्टेबल रिलीज नहीं आती, तब तक {{version}} पर ही रहेगा।", - "backToStable": "वापस स्टेबल पर जाएं", - "allPluginsBeta": "सभी प्लगइन के लिए बीटा का उपयोग करें", - "allPluginsStable": "सभी प्लगइन वापस स्टेबल पर", - "saveFailed": "बदलाव सहेजा नहीं जा सका" - } + "featureUnavailable": "{{name}} अभी अनुपलब्ध है। ये सेटिंग्स सेव हैं लेकिन असर नहीं करेंगी।" }, "managerCard": { "refresh": "रिफ्रेश करें", @@ -2263,83 +1548,13 @@ "filter": "फ़िल्टर करें..." }, "sync": { - "server": "Termix सर्वर", - "account": "खाता", - "status": "स्थिति", - "never": "कभी नहीं", - "justNow": "बस अभी", "minutesAgo_one": "{{count}} मिनट पहले", "minutesAgo_other": "{{count}} मिनट पहले", "hoursAgo_one": "{{count}} घंटा पहले", "hoursAgo_other": "{{count}} घंटे पहले", - "actionFailed": "यह काम नहीं किया। पुनः प्रयास करें।", - "unlinkedTitle": "केवल इस डिवाइस पर", - "unlinkedBody": "Termix इस डिवाइस पर अपने आप काम करता है। सब कुछ सिंक रखने के लिए इसे अपने Termix सर्वर से लिंक करें।", - "unlinkedPointHosts": "आपके होस्ट, क्रेडेंशियल, स्निपेट और सेटिंग्स आपके साथ हर डिवाइस पर चलते हैं।", - "unlinkedPointOffline": "जब सर्वर तक पहुंच नहीं पाई जाती, तब भी सब कुछ काम करता है, और बाद में सिंक हो जाता है।", - "unlinkedPointAccount": "आप अपने सर्वर खाते से साइन इन करते हैं, और जो होस्ट लोग आपके साथ शेयर करते हैं, वे भी यहाँ दिखते हैं।", - "linkButton": "सर्वर से लिंक करें", - "state": { - "syncing": "सिंक हो रहा है", - "offline": "सर्वर तक पहुंच नहीं पाया जा रहा", - "error": "सिंक रुक गया", - "signedOut": "साइन आउट", - "synced": "{{time}} को सिंक हुआ" - }, "pending_one": "{{count}} बदलाव सिंक होने की प्रतीक्षा कर रहा है", "pending_other": "{{count}} बदलाव सिंक होने की प्रतीक्षा कर रहे हैं", - "signInAgain": "फिर से साइन इन करें", - "syncNow": "अभी सिंक करें", - "unlink": "अनलिंक करें", - "unlinked": "यह डिवाइस अब लिंक नहीं है", - "unlinkTitle": "इस डिवाइस को अनलिंक करें?", - "unlinkDescription": "इससे सिंकिंग बंद हो जाएगी और सर्वर से साइन आउट हो जाएगा। अन्य लोगों द्वारा आपके साथ साझा किए गए होस्ट किसी भी स्थिति में इस डिवाइस से हटा दिए जाएंगे।", - "unlinkKeepTitle": "मेरा डेटा यहाँ रखें", - "unlinkKeepBody": "आपके होस्ट, क्रेडेंशियल्स और सेटिंग्स इस डिवाइस पर रहेंगे और स्वतंत्र रूप से काम करते रहेंगे।", - "unlinkRemoveTitle": "सिंक किया गया डेटा हटाएं", - "unlinkRemoveBody": "सर्वर से आया हुआ सब कुछ इस डिवाइस से हटा दिया जाएगा। केवल वे होस्ट रहेंगे जो इस डिवाइस पर ही रखे गए हैं।", - "conflictsTitle": "संघर्ष", - "conflictsDescription": "ये यहाँ और सर्वर पर एक ही समय में बदले गए थे। सर्वर संस्करण का उपयोग किया जा रहा है। सर्वर को भेजने के लिए अपना संस्करण रखें।", - "keepMine": "मेरा रखें", - "keepServer": "सर्वर रखें", - "errorsTitle": "सिंक नहीं हुआ", - "errorsDescription": "सर्वर ने ये परिवर्तन स्वीकार नहीं किए। ये इस डिवाइस पर ही रहेंगे।", - "errorPermission": "सर्वर पर आपके खाते को इस परिवर्तन को करने की अनुमति नहीं है।", - "retry": "पुनः प्रयास करें", - "whatSyncs": "क्या सिंक होता है", - "whatSyncsDescription": "जो भी आप केवल इस डिवाइस पर रखना चाहते हैं, उसे बंद कर दें।", - "coreGroup": "Termix", - "notOnServer": "सर्वर पर यह उपलब्ध नहीं है", - "notOnDevice": "इस डिवाइस पर अभी तक नहीं", - "localOnlyHint": "आप उनके सेटिंग्स से एकल होस्ट या फोल्डर्स को भी इस डिवाइस पर ही रख सकते हैं।", - "originTitle": "कनेक्शन कहाँ से शुरू होते हैं", - "originDescription": "इस डिवाइस से होस्ट से कनेक्ट करें, या सर्वर के माध्यम से। आप इसे प्रति होस्ट बदल सकते हैं।", - "originLocal": "यह डिवाइस", - "originRemote": "सर्वर", - "entities": { - "hosts": "होस्ट", - "sshCredentials": "क्रेडेंशियल्स", - "sshFolders": "फोल्डर्स", - "userPreferences": "प्राथमिकताएँ", - "pluginUserSettings": "प्लगइन सेटिंग्स", - "sharedHosts": "आपके साथ साझा किए गए होस्ट", - "sharedCredentials": "आपके साथ साझा किए गए क्रेडेंशियल्स", - "vaultProfiles": "Vault प्रोफ़ाइलें", - "snippetFolders": "स्निपेट फोल्डर्स", - "snippets": "स्निपेट्स", - "dashboardServiceLinks": "सर्विस लिंक्स", - "homepageItems": "होमपेज आइटम", - "networkTopology": "नेटवर्क मैप", - "workspaces": "वर्कस्पेस", - "hostDefaults": "होस्ट डिफ़ॉल्ट्स", - "hostDefaultsAdmin": "सर्वर होस्ट डिफ़ॉल्ट्स", - "aiProviders": "AI प्रदाता", - "homepageLayouts": "होमपेज लेआउट", - "accountProfile": "खाता प्रोफ़ाइल" - }, "proxy": { - "title": "रिवर्स प्रॉक्सी", - "description": "केवल तभी आवश्यक जब Cloudflare Access या लॉगिन पेज जैसी कोई चीज़ आपके सर्वर के सामने हो।", "headersTitle": "अतिरिक्त हेडर्स", "headersHint": "सर्वर के साथ हर अनुरोध के साथ भेजा जाता है, उदाहरण के लिए Cloudflare Access सर्विस टोकन।", "headerName": "हेडर नाम", @@ -2352,8 +1567,7 @@ "username": "यूज़रनेम", "password": "पासवर्ड", "allowInvalidCertificate": "सेल्फ-साइनड सर्टिफिकेट पर भरोसा करें", - "allowInvalidCertificateHint": "केवल आपके अपने सर्वर के लिए, जब उसका सर्टिफिकेट किसी ज्ञात प्राधिकरण से न हो।", - "saved": "सहेजा गया" + "allowInvalidCertificateHint": "केवल आपके अपने सर्वर के लिए, जब उसका सर्टिफिकेट किसी ज्ञात प्राधिकरण से न हो।" }, "problems": { "invalidUrl": "यह वेब पते जैसा नहीं लगता।", @@ -2391,6 +1605,27 @@ "linking": "लिंक किया जा रहा है और पहला सिंक चलाया जा रहा है...", "linked": "लिंक हो गया। आपका डेटा अब सिंक हो रहा है।", "signedInAgain": "साइन इन हो गया। सिंक फिर से चल रहा है।" + }, + "entities": { + "hosts": "होस्ट", + "sshCredentials": "क्रेडेंशियल्स", + "sshFolders": "फोल्डर्स", + "userPreferences": "प्राथमिकताएँ", + "pluginUserSettings": "प्लगइन सेटिंग्स", + "sharedHosts": "आपके साथ साझा किए गए होस्ट", + "sharedCredentials": "आपके साथ साझा किए गए क्रेडेंशियल्स", + "vaultProfiles": "Vault प्रोफ़ाइलें", + "snippetFolders": "स्निपेट फोल्डर्स", + "snippets": "स्निपेट्स", + "dashboardServiceLinks": "सर्विस लिंक्स", + "homepageItems": "होमपेज आइटम", + "networkTopology": "नेटवर्क मैप", + "workspaces": "वर्कस्पेस", + "hostDefaults": "होस्ट डिफ़ॉल्ट्स", + "hostDefaultsAdmin": "सर्वर होस्ट डिफ़ॉल्ट्स", + "aiProviders": "AI प्रदाता", + "homepageLayouts": "होमपेज लेआउट", + "accountProfile": "खाता प्रोफ़ाइल" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "यह होस्ट अपना मान सेट करता है। {{source}} से डिफ़ॉल्ट का उपयोग फिर से करने के लिए क्लिक करें", "clearTitle": "इस स्तर पर सेट किया गया। इसे साफ़ करने और इसके बजाय {{source}} का उपयोग करने के लिए क्लिक करें", "inheritedTitle": "{{source}} से डिफ़ॉल्ट का पालन करता है", - "titleAdmin": "सर्वर होस्ट डिफ़ॉल्ट", - "titleUser": "मेरी होस्ट डिफ़ॉल्ट", - "titleFolder": "फ़ोल्डर डिफ़ॉल्ट: {{name}}", - "descriptionAdmin": "इस सर्वर पर हर होस्ट के लिए डिफ़ॉल्ट। उपयोगकर्ता की अपनी डिफ़ॉल्ट, फ़ोल्डर की डिफ़ॉल्ट या होस्ट स्वयं अलग मान सेट कर सकता है। इसे यहाँ सेट करने के लिए एक फ़ील्ड बदलें, या इसे असेट छोड़ने के लिए साफ़ करें।", - "descriptionUser": "सर्वर की तुलना में आपके सभी होस्ट के लिए डिफ़ॉल्ट। एक फ़ोल्डर या होस्ट स्वयं अलग मान सेट कर सकता है। इसे यहाँ सेट करने के लिए एक फ़ील्ड बदलें, या इसे असेट छोड़ने के लिए साफ़ करें।", - "descriptionFolder": "इस फ़ोल्डर और इसके उपफ़ोल्डर में होस्ट के लिए डिफ़ॉल्ट, आपके अपने से ऊपर। एक होस्ट अलग मान सेट कर सकता है। इसे यहाँ सेट करने के लिए एक फ़ील्ड बदलें, या इसे असेट छोड़ने के लिए साफ़ करें।", - "save": "डिफ़ॉल्ट सेव करें", "saved_one": "डिफ़ॉल्ट सेव हो गए। {{count}} होस्ट अपडेट किया गया।", "saved_other": "डिफ़ॉल्ट सेव हो गए। {{count}} होस्ट अपडेट किए गए।", - "savedInBackground": "डिफ़ॉल्ट सेव हो गए। होस्ट बैकग्राउंड में अपडेट हो रहे हैं।", "appliedToHosts_one": "{{count}} होस्ट नई डिफ़ॉल्ट के साथ अपडेट किया गया।", "appliedToHosts_other": "{{count}} होस्ट नई डिफ़ॉल्ट के साथ अपडेट किए गए।", - "saveFailed": "डिफ़ॉल्ट सेव नहीं हो सके", - "loadFailed": "डिफ़ॉल्ट लोड नहीं हो सके", - "confirmTitle": "डिफ़ॉल्ट सेव करें?", "confirmChanges_one": "{{count}} होस्ट इन डिफ़ॉल्ट का पालन करता है और बदल जाएगा।", "confirmChanges_other": "{{count}} होस्ट इन डिफ़ॉल्ट का पालन करते हैं और बदल जाएंगे।", - "confirmNoChanges": "कोई मौजूदा होस्ट नहीं बदला। नए होस्ट इन डिफ़ॉल्ट के साथ शुरू होंगे।", - "menuMyDefaults": "मेरी होस्ट डिफ़ॉल्ट", - "folderDefaultsAction": "फ़ोल्डर डिफ़ॉल्ट", - "adminSectionDescription": "इस सर्वर पर हर होस्ट द्वारा पालन की जाने वाली डिफ़ॉल्ट सेट करें, होस्ट की हर सेटिंग के लिए, प्रत्येक प्लगइन की भी। उपयोगकर्ता और फ़ोल्डर ऊपर से अपनी सेट कर सकते हैं, और कोई भी होस्ट अभी भी अपना मान उपयोग कर सकता है।", - "editServerDefaults": "सर्वर डिफ़ॉल्ट संपादित करें", - "resetMenu": "रीसेट करें", - "resetAll": "सभी को डिफ़ॉल्ट पर रीसेट करें", - "resetCore": "कनेक्शन और SSH को डिफ़ॉल्ट पर रीसेट करें", "resetDone_one": "{{count}} होस्ट अब अपने डिफ़ॉल्ट का पालन करता है।", "resetDone_other": "{{count}} होस्ट अब अपने डिफ़ॉल्ट का पालन करते हैं।" }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "सहेजा गया। इसे बदलने के लिए टाइप करें।" }, - "sharing": { - "revokeConfirm": "{{name}} के लिए एक्सेस हटाएं?", - "revoke": "एक्सेस हटाएं" - }, "manage": { - "searchSettings": "सेटिंग्स खोजें", - "noMatchingSettings": "कोई सेटिंग्स मेल नहीं खातीं।", - "sections": "खंड", - "sectionNeedsAttention": "यहाँ कुछ ध्यान देने योग्य है", "needsAttention_one": "एक चीज़ का ध्यान देने की आवश्यकता है।", "needsAttention_other": "{{count}} चीज़ों का ध्यान देने की आवश्यकता है।", - "bandHost": "होस्ट", - "bandFeatures": "प्रोटोकॉल और प्लगइन", - "bandCredential": "क्रेडेंशियल", - "sshConnection": "SSH कनेक्शन", - "errorAddressRequired": "एक पता आवश्यक है।", - "errorPortRange": "1 और 65535 के बीच एक पोर्ट का उपयोग करें।", - "defaults": "डिफ़ॉल्ट", - "searchHosts": "होस्ट खोजें", - "searchCredentials": "क्रेडेंशियल खोजें", - "searchDefaults": "डिफ़ॉल्ट खोजें", - "addCredential": "क्रेडेंशियल जोड़ें", - "nothingMatches": "कुछ भी मेल नहीं खाता", - "nothingYet": "अभी तक यहाँ कुछ नहीं है", - "emptyHostsHint": "एक होस्ट जोड़ें और यह आपके द्वारा दिए गए किसी भी फ़ोल्डर में यहाँ दिखाई देगा।", - "emptyCredentialsHint": "आपके द्वारा सहेजे गए क्रेडेंशियल किसी भी होस्ट द्वारा पुनः उपयोग किए जा सकते हैं।", - "collapse": "संक्षिप्त करें", - "expand": "विस्तारित करें", - "cannotBeUndone": "इसे पूर्ववत नहीं किया जा सकता।", - "hostNotFound": "वह होस्ट नहीं मिला। सूची को रिफ़्रेश करने का प्रयास करें।", "hostCount_one": "{{count}} होस्ट", "hostCount_other": "{{count}} होस्ट", "credentialCount_one": "{{count}} क्रेडेंशियल", - "credentialCount_other": "{{count}} क्रेडेंशियल", - "newHost": "नया होस्ट", - "newCredential": "नया क्रेडेंशियल", - "advanced": "उन्नत", - "pickHost": "संपादित करने के लिए एक होस्ट चुनें", - "pickCredential": "संपादित करने के लिए एक क्रेडेंशियल चुनें", - "pickDefaults": "संपादित करने के लिए डिफ़ॉल्ट का एक स्तर चुनें", - "pickHint": "कनेक्शन के बारे में सब कुछ यहाँ मौजूद है, ताकि आप इसे आसानी से ढूंढ सकें, समूहों में व्यवस्थित है।" + "credentialCount_other": "{{count}} क्रेडेंशियल" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/hr_HR.json b/src/ui/locales/translated/hr_HR.json index 8cf87cf03..6ca635995 100644 --- a/src/ui/locales/translated/hr_HR.json +++ b/src/ui/locales/translated/hr_HR.json @@ -141,7 +141,6 @@ "continue": "Nastavi", "error": "Greška", "unsavedChanges": "Nespremljene promjene", - "more": "Više", "loading": "Učitavanje...", "host": "Poslužitelj", "selectHost": "Odaberi poslužitelj...", @@ -154,7 +153,6 @@ "cancel": "Otkaži", "username": "Korisničko ime", "login": "Prijava", - "logout": "Odjava", "register": "Registracija", "password": "Lozinka", "confirmPassword": "Potvrdi lozinku", @@ -165,8 +163,6 @@ "rename": "Preimenuj", "edit": "Uredi", "confirm": "Potvrdi", - "next": "Dalje", - "previous": "Prethodno", "refresh": "Osvježi", "language": "Jezik", "backendReconnected": "Veza s poslužiteljem obnovljena", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Pročitajte o svakom od njih" }, "desktopUpdates": { - "title": "Desktop aplikacija", - "mode": "Ažuriranja", - "modeHint": "Kako ova aplikacija dobiva nove verzije.", - "manualModeHint": "Ova kopija se ne može sama ažurirati, pa vas Termix samo obavještava kada je nova verzija dostupna.", "modeAutomatic": "Automatski", "modePrompt": "Pitaj prvo", "modeNever": "Nikada", @@ -247,15 +239,6 @@ "onboardingTitle": "Ažuriranja aplikacije", "onboardingBody": "Desktop aplikacija se sada može sama ažurirati. Odaberite kako želite da nove verzije stignu. Ovo možete kasnije promijeniti u Postavkama, Ažuriranja.", "onboardingManual": "Ova kopija aplikacije instalirana je na način koji ne dopušta samostalno ažuriranje, pa će vas Termix obavijestiti kada je nova verzija dostupna s poveznicom za preuzimanje.", - "status": "Verzija {{version}}", - "statusIdle": "Još nije provjereno", - "statusChecking": "Provjera ažuriranja", - "statusAvailable": "Verzija {{version}} je dostupna", - "statusDownloading": "Preuzimanje {{version}} ({{progress}}%)", - "statusReady": "Verzija {{version}} je spremna. Ponovno pokrenite za instalaciju.", - "statusUpToDate": "Imate najnoviju verziju", - "statusError": "Nije moguće provjeriti ažuriranja. Pokušajte ponovno kasnije.", - "checkNow": "Provjeri sada", "download": "Preuzmi", "restart": "Ponovno pokreni sada", "later": "Kasnije", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Zatvori", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopiraj lozinku", - "copySudoPassword": "Kopiraj sudo lozinku", - "passwordCopied": "Lozinka kopirana u međuspremnik", - "failedToCopyPassword": "Kopiranje lozinke nije uspjelo", - "refreshTab": "Osvježi vezu", - "renameTab": "Preimenuj karticu", "dashboard": "Nadzorna ploča", "quickConnect": "Brzo povezivanje", - "openAsTabHint": "Ctrl+klik ili srednji klik za otvaranje kao kartice", - "openAsTab": "Otvori kao karticu", - "openInRightDock": "Otvori u desnoj traci", - "closeRightDock": "Zatvori desnu traku", - "toggleRightDock": "Prebaci desnu traku", "hosts": "Domaćini", "credentials": "Povjerenja", "connections": "Veze", - "keepSideMenuOpen": "Ostavi izbornik otvorenim", - "collapseSideMenu": "Sakrij izbornik", - "roleAdministrator": "Administrator", - "roleUser": "Korisnik", "sync": "Sinkronizacija", "reconnectDisconnectedTerminals": "Ponovno poveži sve prekinute terminale", "reconnectingTerminals_one": "Ponovno povezivanje {{count}} terminala", @@ -300,31 +268,12 @@ "reconnectTerminalsFailed_other": "Nije moguće pokrenuti ponovno povezivanje {{count}} terminala", "fullscreenUnsupported": "Puni zaslon nije podržan u ovom pregledniku", "fullscreenFailed": "Nije moguće prebaciti puni zaslon", - "resetSidebarWidth": "Poništi širinu", - "collapseSidebar": "Sakrij bočnu traku", - "openSidebar": "Otvori bočnu traku", "confirmCloseHost": "Zatvoriti {{host}}?", - "enterFullscreen": "Uđi u puni zaslon (Ctrl+Shift+F)", - "exitFullscreen": "Izađi iz punog zaslona (Ctrl+Shift+F)", - "group": { - "objects": "Moji", - "tools": "Alati", - "system": "Sustav" - }, - "searchEverything": "Pretraži hostove, kartice i radnje", - "search": "Pretraži", "hiddenCount_one": "{{count}} skriveno", "hiddenCount_few": "{{count}} skrivena", "hiddenCount_other": "{{count}} skrivenih", - "showInRail": "Prikaži u bočnoj traci", - "moveUp": "Pomakni gore", - "moveDown": "Pomakni dolje", - "resetRailOrder": "Poništi redoslijed", - "hideFromRail": "Sakrij iz bočne trake", - "openSettings": "Otvori postavke", "settings": "Postavke", "manage": "Upravljaj", - "mobileNavigation": "Navigacija", "plugins": "Dodaci" }, "hosts": { @@ -930,35 +879,14 @@ "importSummary": "Uvoz završen: {{imported}} uvezeno, {{updated}} ažurirano, {{failed}} neuspješno", "importHostsFailed": "Neuspjelo uvoz hostova" }, - "commandPalette": { - "searchPlaceholder": "Pretraži hostove, naredbe ili postavke...", - "quickActions": "Brze radnje", - "navigation": "Navigacija", - "orShortcut": "ili", - "addNewHost": "Dodaj novi host", - "adminSettings": "Postavke administratora", - "addCredential": "Dodaj vjerodajnice", - "recentActivity": "Nedavna aktivnost", - "serversAndHosts": "Poslužitelji i hostovi", - "noHostsFound": "Nema hostova koji odgovaraju „{{search}}“", - "links": "Veze", - "navigate": "Navigacija", - "select": "Odaberi", - "pluginActions": "Više radnji", - "noTargetTab": "Nema otvorenih kartica terminala", - "documentation": "Dokumentacija" - }, "splitScreen": { "title": "Podijeljeni zaslon", "defaultLabel": "Podjela {{number}}", "splitRight": "Podijeli desno", "splitDown": "Podijeli dolje", - "addToSplit": "Dodaj u {{split}}", "paneEmptyItem": "Panel {{index}}: prazan", "paneItem": "Panel {{index}}: {{label}}", "paneNumber": "Panel {{index}}", - "newPaneRight": "Novi panel desno", - "newPaneBelow": "Novi panel ispod", "emptyTitle": "Prazan panel", "emptyHint": "Odaberite što prikazati ovdje. Dok je ovaj panel odabran, sve što otvorite iz bočne trake otvorit će se i ovdje.", "openTabs": "Otvorene kartice", @@ -975,7 +903,6 @@ "clearPane": "Isprazni ovaj panel", "zoom": "Povećaj panel", "unzoom": "Vrati raspored", - "unsplit": "Ukloni podjelu", "layouts": "Rasporedi", "applyLayout": "Promijeni raspored", "maxPanes_one": "Podjela može sadržavati najviše {{count}} panel", @@ -985,8 +912,6 @@ "dropHere": "Spusti za prikaz ovdje", "paneActions": "Radnje s panelom", "dividerHint": "Povucite za promjenu veličine. Dvostruki klik za izjednačavanje.", - "openInSplit": "Otvori u podjeli", - "openInNewSplit": "Nova podjela s trenutnom karticom", "shortcuts": "Prečaci", "shortcutNavigate": "Pomicanje između panela", "presets": { @@ -1000,23 +925,6 @@ "grid6": "Mreža od šest" } }, - "connections": { - "noConnections": "Nema veza", - "noConnectionsDesc": "Otvorite terminal, upravitelj datoteka ili udaljeni zaslon da biste vidjeli veze ovdje", - "connectedFor": "Povezano {{duration}}", - "connected": "Povezano", - "disconnected": "Odspojeno", - "reconnect": "Ponovno povezivanje", - "sectionOpen": "Otvoreno", - "sectionBackground": "Pozadina", - "backgroundDesc": "Sesije ostaju aktivne {{minutes}} minuta nakon odspajanja i mogu se ponovno povezati.", - "expiresIn": "Istječe za {{duration}}", - "search": "Pretraži veze...", - "noSearchResults": "Nema veza koje odgovaraju pretrazi", - "rename": "Preimenuj sesiju", - "forgetConfirm": "Završiti pozadinsku sesiju za {{name}}?", - "forget": "Završi sesiju" - }, "sshAuth": { "totpRequired": "Potrebna je dvofaktorska autentifikacija", "totpCodeLabel": "Kod za provjeru", @@ -1154,65 +1062,14 @@ "placeholders": { "keyPassword": "lozinka ključa", "pastePrivateKey": "Ovdje zalijepite svoj privatni ključ...", - "enterPassword": "Unesite svoju lozinku", - "apiKeyName": "npr. CI Pipeline", - "credentialName": "npr. SSH ključ za produkciju", - "optionalDetails": "Opcionalni detalji...", - "sshUsername": "npr. root ili deploy", - "hostAddress": "10.0.0.1 ili example.com", - "hostName": "npr. Web poslužitelj za produkciju" + "enterPassword": "Unesite svoju lozinku" }, "dashboard": { - "title": "Nadzorna ploča", - "github": "GitHub", - "reportBug": "Prijavi grešku", - "discord": "Discord", - "docs": "Dokumentacija", - "donate": "Doniraj", - "serverOverview": "Pregled poslužitelja", - "version": "Verzija", "updateAvailable": "Dostupno ažuriranje", - "beta": "Beta", - "uptime": "Vrijeme rada", - "database": "Baza podataka", - "healthy": "Ispravno", - "error": "Greška", - "totalHosts": "Ukupno domaćina", - "totalCredentials": "Ukupno vjerodajnica", - "recentActivity": "Nedavna aktivnost", - "reset": "Resetiraj", - "noRecentActivity": "Nema nedavne aktivnosti", - "quickActions": "Brze radnje", - "addHost": "Dodaj domaćina", - "addCredential": "Dodaj vjerodajnice", - "adminSettings": "Postavke administratora", - "userProfile": "Korisnički profil", - "serverStats": "Statistika poslužitelja", - "customizeLayout": "Prilagodi nadzornu ploču", - "justNow": "upravo sada" + "beta": "Beta" }, "dashboardTab": { "stable": "STABILNO", - "registerNewServer": "Registriraj novi poslužitelj", - "storeSshKeysOrPasswords": "Spremi SSH ključeve ili lozinke", - "manageUsersAndRoles": "Upravljaj korisnicima i ulogama", - "manageYourAccount": "Upravljaj svojim računom", - "hostStatus": "Status domaćina", - "noHostsConfigured": "Nema konfiguriranih domaćina", - "checking": "PROVJERA", - "commandPalette": "Paleta naredbi", - "done": "Gotovo", - "clear": "Očisti", - "dragToResizeColumns": "Povucite za promjenu veličine stupaca", - "hostsAvailable": "Dostupni hostovi", - "removeSection": "Ukloni odjeljak", - "addSection": "Dodaj odjeljak", - "allSectionsShown": "Sve je već na nadzornoj ploči.", - "fromPlugins": "Iz dodataka", - "dropHere": "Spustite odjeljak ovdje", - "dragToReorder": "Povucite odjeljke za promjenu redoslijeda", - "clearActivityConfirm": "Očistiti nedavnu aktivnost?", - "resetConfirm": "Vratiti nadzornu ploču na zadani raspored?", "onlineCount_one": "{{count}} online", "onlineCount_few": "{{count}} online", "onlineCount_other": "{{count}} online", @@ -1221,425 +1078,48 @@ "hostCount_other": "{{count}} hostova" }, "admin": { - "sectionGeneral": "Općenito", - "sectionUsers": "Korisnici", - "sectionSessions": "Sesije", - "sectionRoles": "Uloge", - "sectionDatabase": "Baza podataka", - "sectionApiKeys": "API ključevi", - "sectionAuditLog": "Dnevnik revizije", - "sectionSsl": "HTTPS certifikat", - "sectionBranding": "White Label", - "brandingAppName": "Naziv aplikacije", - "brandingAppNameDesc": "Prikazuje se na prijavnom zaslonu i kartici preglednika. Ostavite prazno za korištenje \"Termix\".", - "brandingTagline": "Podnaslov", - "brandingTaglineDesc": "Prikazuje se ispod naziva aplikacije na prijavnom zaslonu. Ostavite prazno za korištenje zadanog podnaslova.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG ili WEBP, do 750 KB. Zamjenjuje zadani ikonu na prijavnom zaslonu i kartici preglednika.", - "brandingLogoUpload": "Otpremi logo", - "brandingLogoReset": "Vrati na zadano", - "brandingLogoInvalid": "Nevažeća slika. Koristite PNG, JPEG ili WEBP datoteku do 750 KB.", - "brandingSaved": "Postavke brendiranja su spremljene", - "brandingSaveFailed": "Neuspjelo spremanje postavki brendiranja", - "sslDescription": "Certifikat koji Termix koristi za HTTPS. Ovdje otpremite vlastiti certifikat ili ga izdajte i obnovite putem Let's Encrypta u odjeljku ACME Certifikati.", - "sslDocsLink": "Pogledajte SSL dokumentaciju", - "sslCertStatus": "Status certifikata", - "sslCertStatusNone": "Nema certifikata", - "sslCertStatusValid": "Važeći", - "sslCertStatusExpiring": "Ističe uskoro", - "sslCertStatusExpired": "Istekao", - "sslCertExpiresAt": "Ističe {{date}}", - "sslInfoNote": "Nakon izdavanja ili otpremanja certifikata, Termix će automatski omogućiti HTTPS na SSL_PORT (zadano 8443) uz postojeći HTTP port. Provjerite je li taj port objavljen/mapiran na ovaj kontejner kako bi bio dostupan.", - "sslManualCert": "Certifikat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Privatni ključ (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Zalijepite postojeći certifikat i privatni ključ, uključujući cijeli lanac ako to zahtijeva vaš CA.", - "sslManualUpload": "Otpremi i instaliraj certifikat", - "sslManualUploadLoading": "Otpremanje certifikata...", - "sslManualUploadSuccess": "Certifikat je uspješno otpremljen i instaliran", - "sslManualUploadFailed": "Neuspjelo otpremanje certifikata", - "sslManualRequiresFields": "Certifikat i privatni ključ su obavezni", - "auditLogTotal": "{{total}} ukupno zapisa", - "auditLogEmpty": "Nema pronađenih zapisa u dnevniku revizije", - "auditLogSuccess": "Uspjeh", - "auditLogFailed": "Neuspjeh", - "auditLogClearFilters": "Očisti filtre", - "auditLogPage": "Stranica {{page}} od {{totalPages}} ({{total}} ukupno)", - "auditLogIp": "IP", - "auditLogResourceId": "ID resursa", - "auditLogFilterUser": "Korisnik", - "auditLogFilterAction": "Akcija", - "auditLogFilterResourceType": "Vrsta resursa", - "auditLogFilterStatus": "Status", - "auditLogFilterFrom": "Od", - "auditLogFilterTo": "Do", - "auditLogFilterAll": "Sve", - "allowRegistration": "Dopusti registraciju korisnika", - "allowRegistrationDesc": "Omogući novim korisnicima samostalnu registraciju s korisničkim imenom i lozinkom", - "allowPasswordLogin": "Dopusti prijavu lozinkom", - "allowPasswordLoginDesc": "Prijava korisničkim imenom i lozinkom", - "externalAutoProvision": "Automatsko stvaranje vanjskih računa", - "externalAutoProvisionDesc": "Stvori račun prvi put kada se netko prijavi putem vanjske prijave poput SSO-a ili LDAP-a. Kada je isključeno, samo osobe koje već imaju račun mogu se prijaviti na taj način", - "secondFactorAfterExternalLogin": "Zatraži drugi faktor nakon vanjskih prijava (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Kada je isključeno, drugi faktor se traži samo nakon prijave lozinkom i drugih lokalnih prijava, kao i prije. Kada je uključeno, traži se nakon svake metode prijave, uključujući SSO i LDAP.", - "allowPasswordReset": "Dopusti resetiranje lozinke", - "allowPasswordResetDesc": "Kod za resetiranje putem Docker zapisa", - "auditForwardingTitle": "Proslijeđivanje na SIEM", - "auditForwardingDesc": "Pošalji kopiju svakog zapisa revizije vanjskom prikupljaču u NDJSON formatu. Lokalni zapisi ostaju izvor istine.", - "auditForwardingEnvNotice": "Promjenjiva okruženja također konfigurira proslijeđivanje; URL spremljen ovdje ima prioritet.", - "auditForwardingToken": "Bearer token (opcionalno)", - "auditForwardingTokenStored": "Bearer token (spremljen)", - "auditForwardingSaved": "Postavke proslijeđivanja revizije su spremljene", - "auditForwardingSaveError": "Neuspjelo spremanje postavki proslijeđivanja revizije", - "sessionTimeout": "Istek sesije", - "hours": "sati", - "sessionTimeoutRange": "Min 1h, max 720h", - "monitoringDefaults": "Zadane postavke nadzora", - "statusCheck": "Provjera statusa", - "sec": "sek", - "logLevel": "Razina zapisa", "usersCount_one": "{{count}} korisnik", "usersCount_few": "{{count}} korisnika", - "usersCount_other": "{{count}} korisnika", - "searchUsers": "Pretraži korisnike...", - "noUsers": "Nema korisnika", - "noUsersMatch": "Nema korisnika koji odgovaraju vašoj pretrazi", - "pageOf": "Stranica {{page}} od {{total}}", - "createUser": "Stvori", - "newRole": "Nova uloga", - "roleName": "Naziv", - "roleDisplayName": "Prikazani naziv", - "roleDescription": "Opis", "rolesCount_one": "{{count}} uloga", "rolesCount_few": "{{count}} uloga", - "rolesCount_other": "{{count}} uloga", - "createRole": "Stvori", - "creating": "Stvaranje...", - "exportDatabase": "Izvoz baze podataka", - "exportDatabaseDesc": "Preuzmi prenosivi SQLite sigurnosni kopiju svih hostova, vjerodajnica i postavki", - "export": "Izvoz", - "exporting": "Izvoz...", - "importDatabase": "Uvoz baze podataka", - "importDatabaseDesc": "Vrati iz prenosive .sqlite sigurnosne kopije na bilo kojem backendu baze podataka", - "importDatabaseSelected": "Odabrano: {{name}}", - "selectFile": "Odaberi datoteku", - "changeFile": "Promijeni", - "import": "Uvoz", - "importing": "Uvoz...", "apiKeysCount_one": "{{count}} ključ", "apiKeysCount_few": "{{count}} ključeva", - "apiKeysCount_other": "{{count}} ključeva", - "apiKeysDocsLink": "Pogledaj dokumentaciju", - "apiKeysCliHint": "Koristi API ključ s Termix CLI za upravljanje poslužiteljima iz terminala.", - "apiKeysCliLink": "Pogledaj dokumentaciju CLI", - "newApiKey": "Novi API ključ", - "apiKeyCreatedWarning": "Ključ je stvoren - kopirajte ga sada, više se neće prikazivati.", - "apiKeyName": "Naziv", - "apiKeyUser": "Korisnik", - "apiKeySelectUser": "Odaberite korisnika...", - "apiKeyExpiresAt": "Ističe", - "createKey": "Stvori ključ", - "apiKeyNoExpiry": "Bez isteka", - "revokedBadge": "OPŽIVOT", - "authTypeDual": "Dvostruka autentifikacija", - "authTypeExternal": "Vanjska", - "authTypeLocal": "Lokalna", - "adminStatusAdministrator": "Administrator", - "adminStatusRegularUser": "Redoviti korisnik", - "adminBadge": "ADMIN", - "systemBadge": "SIS", - "customBadge": "PRILAGOĐENO", - "youBadge": "VI", "sessionsActive_one": "{{count}} aktivno", "sessionsActive_few": "{{count}} aktivna", - "sessionsActive_other": "{{count}} aktivnih", - "sessionActive": "Aktivno: {{time}}", - "sessionExpires": "Ist.: {{time}}", - "revokeAll": "Sve", - "revokeAllSessionsSuccess": "Sve sesije za korisnika su opozvane", - "revokeAllSessionsFailed": "Neuspješno opozivanje sesija", - "revokeSessionFailed": "Neuspješno opozivanje sesije", - "addRole": "Dodaj ulogu", - "noCustomRoles": "Nema definiranih prilagođenih uloga", - "removeRoleFailed": "Neuspješno uklanjanje uloge", - "assignRoleFailed": "Neuspješno dodjeljivanje uloge", - "userAdminAccess": "Administrator", - "userAdminAccessDesc": "Potpuni pristup svim administratorskim postavkama", - "userRoles": "Uloge", - "revokeAllUserSessions": "Opozovi sve sesije", - "revokeAllUserSessionsDesc": "Prisilno ponovno prijavljivanje na svim uređajima", - "revoke": "Opozovi", - "deleteUserWarning": "Brisanje ovog korisnika je trajno.", - "deleteUser": "Izbriši {{username}}", - "deleting": "Brisanje...", - "deleteUserFailed": "Neuspješno brisanje korisnika", - "deleteUserSuccess": "Korisnik \"{{username}}\" je obrisan", - "deleteRoleSuccess": "Uloga \"{{name}}\" je obrisana", - "revokeKeySuccess": "Ključ \"{{name}}\" je opozvan", - "revokeKeyFailed": "Neuspješno opozivanje ključa", - "copiedToClipboard": "Kopirano u međuspremnik", - "done": "Gotovo", - "createUserTitle": "Stvori korisnika", - "createUserDesc": "Stvorite novi lokalni račun.", - "createUserUsername": "Korisničko ime", - "createUserPassword": "Lozinka", - "createUserPasswordHint": "Minimalno 6 znakova.", - "createUserEnterUsername": "Unesite korisničko ime", - "createUserSubmit": "Stvori korisnika", - "editUserTitle": "Upravljanje korisnikom: {{username}}", - "editUserDesc": "Uredite uloge, administratorski status, sesije i postavke računa.", - "editUserUsername": "Korisničko ime", - "editUserAuthType": "Vrsta autentifikacije", - "editUserAdminStatus": "Administratorski status", - "editUserUserId": "ID korisnika", - "linkAccountTitle": "Poveži račune", - "linkAccountDesc": "Spojite vanjski račun {{username}} s postojećim lokalnim računom.", - "linkAccountDescLocal": "Povežite lokalni račun {{username}} s postojećim isključivo vanjskim računom.", - "linkAccountWarningTitle": "Ovo će:", - "linkAccountEffect1": "Izbrisati račun koji postoji samo u vanjskoj usluzi", - "linkAccountEffect2": "Dodati vanjsku prijavu na odredišni račun", - "linkAccountEffect3": "Omogućiti prijavu putem vanjske usluge i lozinke", - "linkAccountTargetUsername": "Korisničko ime lokalnog računa", - "linkAccountTargetPlaceholder": "Unesite korisničko ime lokalnog računa za povezivanje", - "linkAccountExternalUsername": "Korisničko ime vanjskog računa", - "linkAccountExternalPlaceholder": "Unesite korisničko ime računa koji postoji samo u vanjskoj usluzi za spajanje", - "linkAccountExternalNotFound": "Nije pronađen račun koji postoji samo u vanjskoj usluzi s tim korisničkim imenom", - "linkAccounts": "Poveži račune", - "linkAccountSuccess": "Računi su uspješno povezani", - "linkAccountFailed": "Povezivanje računa nije uspjelo", - "linkAccountInProgress": "Povezivanje...", - "unlinkAccountTitle": "Odspoji vanjsku prijavu", - "unlinkAccountDesc": "Ukloni vanjsku prijavu s računa {{username}}. Korisnik će se moći prijaviti samo pomoću lozinke.", - "unlinkAccountWarning": "Ovo će ukloniti vanjsku prijavu s ovog računa. Korisnik mora imati postavljenu lozinku kako bi se i dalje mogao prijaviti.", - "unlinkAccount": "Odspoji vanjsku prijavu", - "unlinkAccountInProgress": "Odspajanje...", - "unlinkAccountSuccess": "Vanjska prijava je odspojena", - "unlinkAccountFailed": "Odspajanje vanjske prijave nije uspjelo", - "updateRegistrationFailed": "Ažuriranje postavki registracije nije uspjelo", - "updatePasswordLoginFailed": "Ažuriranje postavki prijave lozinkom nije uspjelo", - "updateSecondFactorAfterExternalLoginFailed": "Ažuriranje postavki drugog faktora nije uspjelo", - "updatePasswordResetFailed": "Ažuriranje postavki poništavanja lozinke nije uspjelo", - "sessionTimeoutRange2": "Vrijeme isteka sesije mora biti između 1 i 720 sati", - "sessionTimeoutSaved": "Vrijeme isteka sesije je spremljeno", - "sessionTimeoutSaveFailed": "Spremanje vremena isteka sesije nije uspjelo", - "monitoringIntervalInvalid": "Neispravne vrijednosti intervala", - "monitoringSaved": "Postavke praćenja su spremljene", - "monitoringSaveFailed": "Spremanje postavki praćenja nije uspjelo", - "logLevelUpdateFailed": "Ažuriranje razine dnevnika nije uspjelo", - "createUserRequired": "Korisničko ime i lozinka su obavezni", - "createUserPasswordTooShort": "Lozinka mora imati najmanje 6 znakova", - "createUserSuccess": "Korisnik „{{username}}“ je stvoren", - "createUserFailed": "Stvaranje korisnika nije uspjelo", - "updateAdminStatusFailed": "Ažuriranje administratorskog statusa nije uspjelo", - "allSessionsRevoked": "Sve sesije su opozvane", - "revokeSessionsFailed": "Opoziv sesija nije uspio", - "manageUserData": "Upravljaj korisničkim podacima", - "backToUsers": "Natrag na korisnike", - "manageTabAccount": "Račun", - "manageTabHosts": "Poslužitelji", - "manageTabCredentials": "Prijavni podaci", - "manageTabSessions": "Sesije", - "manageTabDanger": "Opasno", - "manageEditorBack": "Natrag na podatke korisnika {{username}}", - "dataLockedBadge": "ZAKLJUČANO", - "dataLockedNotice": "Podaci korisnika {{username}} ostaju zaključani do sljedeće prijave. Njegovi poslužitelji, prijavni podaci i isječke nije moguće pregledavati niti uređivati do tada.", - "resetPasswordTitle": "Poništi lozinku", - "resetPasswordExternalOnly": "Ovaj korisnik se prijavljuje putem vanjskog pružatelja usluga i nema lozinku.", - "resetPasswordPlaceholder": "Nova lozinka", - "resetPasswordBtn": "Poništi", - "resetPasswordWorking": "Poništavanje...", - "resetPasswordSuccess": "Lozinka je poništena", - "resetPasswordSuccessWiped": "Lozinka je poništena. Šifrirani podaci korisnika su obrisani.", - "resetPasswordFailed": "Poništavanje lozinke nije uspjelo", - "resetPasswordConfirmWipe": "Korisnik {{username}} se nije prijavio od nadogradnje šifriranja, pa se njegovi podaci ne mogu oporaviti. Poništavanje sada će obrisati njegove poslužitelje, prijavne podatke i isječke. Nastaviti?", - "manageApiKeys": "API ključevi", - "apiKeyNamePlaceholder": "Naziv ključa", - "apiKeyCopyNotice": "Kopirajte ovaj ključ sada, više se neće prikazivati.", - "noApiKeysForUser": "Nema API ključeva", - "apiKeyDeleteFailed": "Brisanje API ključa nije uspjelo", - "exportUserData": "Izvoz podataka", - "exportUserDataDesc": "Preuzmite hostove, vjerodajnice i podatke upravitelja datoteka ovog korisnika kao JSON. Tajne su dešifrirane.", - "exportUserDataSuccess": "Podaci korisnika izvezeni", - "exportUserDataFailed": "Izvoz podataka korisnika nije uspio", "hostsCount_one": "{{count}} host", "hostsCount_few": "{{count}} hostova", "hostsCount_other": "{{count}} hostova", - "addHostForUser": "Dodaj host", - "noHostsForUser": "Ovaj korisnik nema hostova", - "connectToHost": "Poveži se", - "deleteHostConfirm": "Izbrisati host „{{name}}“ koji pripada korisniku {{username}}?", - "hostDeletedSuccess": "Host izbrisan", - "hostDeleteFailed": "Brisanje hosta nije uspjelo", "credentialsCount_one": "{{count}} vjerodajnica", "credentialsCount_few": "{{count}} vjerodajnica", "credentialsCount_other": "{{count}} vjerodajnica", - "addCredentialForUser": "Dodaj vjerodajnice", - "noCredentialsForUser": "Ovaj korisnik nema vjerodajnica", - "deleteCredentialConfirm": "Izbrisati vjerodajnice „{{name}}“ koje pripadaju korisniku {{username}}?", - "credentialDeletedSuccess": "Vjerodajnice izbrisane", - "credentialDeleteFailed": "Brisanje vjerodajnica nije uspjelo", - "noSessionsForUser": "Nema aktivnih sesija", - "deleteSuccessorLabel": "Prenesi hostove i vjerodajnice na", - "deleteSuccessorMe": "Mene (administratora koji briše)", - "deleteSuccessorNone": "Nitko, izbriši ih", - "deleteSuccessorDesc": "Sve što je ovaj korisnik dijelio nastaviti će raditi pod novim vlasnikom; odabirom „nitko“ uklonit će se njihovi hostovi, vjerodajnice i dijeljenja.", - "deleteUserDangerDesc": "Trajno izbriši korisnika {{username}} i sve njegove podatke (hostove, vjerodajnice, isječke, povijest). Ovo se ne može poništiti.", - "deleteUserConfirm": "Trajno izbrisati korisnika {{username}} i sve njegove podatke?", - "deleteUserAdminBlocked": "Ukloni administratorski status prije brisanja ovog korisnika.", - "createRoleRequired": "Ime i prikazano ime su obavezni", - "createRoleSuccess": "Uloga „{{name}}“ je stvorena", - "createRoleFailed": "Stvaranje uloge nije uspjelo", - "apiKeyNameRequired": "Ime ključa je obavezno", - "apiKeyUserRequired": "ID korisnika je obavezan", - "apiKeyCreatedSuccess": "API ključ „{{name}}“ je stvoren", - "apiKeyCreateFailed": "Stvaranje API ključa nije uspjelo", - "exportSuccess": "Baza podataka uspješno izvezena", - "exportFailed": "Izvoz baze podataka nije uspio", - "importSelectFile": "Prvo odaberite datoteku", - "importCompleted": "Uvoz završen: {{total}} stavki uvezeno, {{skipped}} preskočeno", - "importFailed": "Uvoz nije uspio: {{error}}", - "importError": "Uvoz baze podataka nije uspio", - "sectionHostDefaults": "Zadane postavke hostova", "rolePermissions": { "count_one": "{{count}} dozvola", "count_few": "{{count}} dozvola", - "count_other": "{{count}} dozvola", - "editAction": "Uredi dopuštenja", - "loadError": "Učitavanje kataloga dopuštenja nije uspjelo", - "saved": "Dopuštenja uloge su spremljena", - "saveError": "Spremanje dopuštenja uloge nije uspjelo", - "save": "Spremi", - "saving": "Spremanje...", - "pluginDisabled": "Priključak onemogućen", "groups": { "hosts": "Hostovi", "credentials": "Vjerodajnice", "admin": "Administracija" } - }, - "notificationPrivateEndpoints": "Dopušteni privatni hostovi za obavijesti", - "notificationPrivateEndpointsDesc": "Točni privatni hostovi s kojima kanali za obavijesti mogu stupiti u kontakt. Odvojite ih zarezima.", - "updateNotificationEndpointsFailed": "Ažuriranje liste dopuštenih krajnjih točaka za obavijesti nije uspjelo", - "secondFactorsSectionTitle": "Drugi faktori", - "secondFactorsNone": "Nema registriranih drugih faktora", - "secondFactorUnavailable": "Nedostupno", - "resetSecondFactors": "Resetiraj druge faktore", - "resetSecondFactorsConfirm": "Ukloniti sve druge faktore za korisnika {{username}}? Mogu se prijaviti lozinkom ili putem SSO-a i ponovno registrirati.", - "secondFactorsResetSuccess": "Drugi faktori su poništeni", - "secondFactorsResetFailed": "Poništavanje drugih faktora nije uspjelo", - "passwordLoginForced": "Prijava lozinkom je isključena, ali nijedna druga metoda prijave nije omogućena, pa ostaje uključena za sada. Nitko neće ostati zaključan.", - "sslNotRenewed": "Ništa ne obnavlja ovaj certifikat. Istječe {{date}}. Uključite automatsko obnovu u odjeljku ACME Certificates ili učitajte novi certifikat prije tog datuma.", - "sslSelfSigned": "Samopotpisani certifikat koji je izradio Termix. Preglednici će upozoriti na njega.", - "sslRenewedBy": "Automatski obnovljeno pomoću {{plugin}}", - "sslIssuer": "Izdano od strane {{issuer}}", - "sslNames": "Pokriva {{names}}", - "sslManualTitle": "Učitaj certifikat", - "updateExternalAutoProvisionFailed": "Ažuriranje postavke automatskog stvaranja nije uspjelo", - "hostTags": "Unaprijed definirane oznake domaćina", - "hostTagsDesc": "Oznake koje svaki korisnik vidi kao prijedloge u uređivaču domaćina. Pritisnite Razmak ili Enter za dodavanje. Uklanjanje oznake ovdje ne uklanja je s domaćina.", - "hostTagsError": "Nije moguće učitati ili spremiti prijedloge oznaka domaćina.", - "revokeAllSessionsConfirm": "Odjaviti {{username}} posvuda?", - "revokeSessionConfirm": "Odjaviti ovu sesiju?", - "revokeSession": "Odjava", - "deleteRoleConfirm": "Izbrisati ulogu {{name}}?", - "revokeKeyConfirm": "Ponistiti API ključ {{name}}?", - "revokeKey": "Poništi" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Gdje", - "who": "Tko", - "hostLabel": "Domaćin", - "hostPlaceholder": "192.168.1.1 ili example.com", - "portLabel": "Port", - "usernameLabel": "Korisničko ime", - "usernamePlaceholder": "korisničko_ime", - "authLabel": "Autentifikacija", - "passwordLabel": "Lozinka", - "passwordPlaceholder": "lozinka", - "privateKeyLabel": "Privatni ključ", - "privateKeyPlaceholder": "Zalijepite privatni ključ...", - "credentialLabel": "Vjerodajnica", - "credentialPlaceholder": "Odaberite spremljenu vjerodajnicu", - "protocolLabel": "Protokol", - "domainLabel": "Domena", - "domainPlaceholder": "opcionalno", - "connectToAction": "Poveži se s {{name}}", - "sshProtocol": "SSH", - "noTarget": "Ništa instalirano ne može se povezati s ovim tipom domaćina" + "usernameLabel": "Korisničko ime" }, "keybindings": { - "description": "Povežite tipke s akcijama u terminalu i aplikaciji ili promijenite ugrađene prečace.", - "defaultsHeading": "Ugrađeni prečaci", - "fixedHeading": "Prečaci aplikacije", - "fixed": { - "splitRight": "Podijeli desno", - "splitDown": "Podijeli dolje", - "zoomPane": "Povećaj fokusirani panel", - "navigatePane": "Pomiži se između panela", - "nextTab": "Sljedeća kartica", - "previousTab": "Prethodna kartica", - "jumpTab": "Skoči na karticu", - "previousView": "Natrag na prethodni prikaz bočne trake", - "fullscreen": "Uključi/isključi cijeli ekran" - }, - "customHeading": "Prilagođeni prečaci", - "addBinding": "Dodaj prečac", - "addBindingTitle": "Dodaj prečac", - "editBindingTitle": "Uredi prečac", - "loading": "Učitavanje...", - "noCustomBindings": "Još nema prilagođenih prečaca", - "defaultBadge": "Zadano", - "customizedBadge": "Prilagođeno", - "customize": "Prilagodi", - "resetToDefault": "Vrati na zadano", - "resetAllToDefaults": "Vrati sve na zadano", - "cancel": "Odustani", - "saveBinding": "Spremi prečacu", - "saveError": "Neuspješno spremanje tipkovničkih prečaca", - "pressKeysToRecord": "Kombinacija tipki", - "pressKeysPlaceholder": "Kliknite i pritisnite tipke", - "recording": "Pritisnite tipke...", - "comboRequiredError": "Prvo pritisnite kombinaciju tipki", - "conflictWarning": "Ova kombinacija je već dodijeljena za {{combo}}. Spremanje će aktivirati obje.", - "actionLabel": "Akcija", "actionNextTab": "Prebaci na sljedeću karticu", "actionPreviousTab": "Prebaci na prethodnu karticu", "actionOpenCommandPalette": "Otvori brzu pretragu", - "actionReconnectSession": "Ponovno poveži trenutnu sesiju", - "unavailableAction": "{{type}} (nije dostupno)", - "actionRequiredError": "Prvo odaberite akciju", - "deleteConfirm": "Izbrisati ovu tipkovničku prečacu?", - "resetAllConfirm": "Vratiti sve tipkovničke prečace na zadane vrijednosti?" + "actionReconnectSession": "Ponovno poveži trenutnu sesiju" }, "userProfile": { - "storageModeLocal": "Preglednik", - "storageModeCloud": "Baza podataka", - "storageModeDescription": "Preglednik sprema postavke samo u ovom pregledniku. Baza podataka sinkronizira s poslužiteljem i učitava se na bilo kojem uređaju.", - "resetToDefaults": "Vrati na zadane postavke", - "resetToDefaultsSuccess": "Postavke vraćene na zadane vrijednosti.", - "storageModeSwitch": "Spremište postavki", - "sectionAccount": "Račun", - "desktopProfileTitle": "Samo na ovom uređaju", - "desktopProfileDescription": "Ovaj profil postoji samo na ovom uređaju i samostalno se prijavljuje. Povežite ga s Termix poslužiteljem kako biste koristili iste hostove i postavke na svakom uređaju.", - "sectionInterface": "Sučelje", - "interfacePresetDesc": "Koliko detalja Termix prikazuje. Sve značajke ostaju dostupne.", "preset_simple": "Jednostavno", "preset_simple_desc": "Samo osnovno.", "preset_balanced": "Uravnoteženo", "preset_balanced_desc": "Standardni raspored.", "preset_advanced": "Napredno", "preset_advanced_desc": "Sve uključeno, gusto pakirano.", - "presetClearOverrides": "Vrati sve", - "presetOverridesTitle": "Prilagođeno", - "presetRevertArea": "Poništi", - "presetConfirmTitle": "Prebaciti na {{preset}}?", - "presetConfirmDesc": "Ovo vraća bočnu traku, navigaciju, raspored nadzorne ploče, alatnu traku terminala i prikaz upravitelja datoteka. Vaši hostovi, vjerodajnice i početna stranica ostaju nepromijenjeni.", - "presetConfirmApply": "Primijeni predložak", - "runSetupAgainDesc": "Ponovno prođite kroz početnu postavku.", - "runSetupAgainButton": "Pokreni postavu", "uiArea_chrome": "Okvir aplikacije", "uiArea_hostList": "Popis hostova", "uiArea_credentialList": "Popis vjerodajnica", @@ -1648,127 +1128,14 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Upravitelj datoteka", "uiArea_hostEditor": "Uređivač hostova", - "sectionAppearance": "Izgled", - "sectionSecurity": "Sigurnost", - "sectionApiKeys": "API ključevi", - "sectionData": "Podaci", - "usernameLabel": "Korisničko ime", - "roleLabel": "Uloga", - "roleAdministrator": "Administrator", - "authMethodLabel": "Metoda autentifikacije", - "authMethodLocal": "Lokalno", - "twoFaLabel": "2FA", - "twoFaOn": "Uključeno", - "twoFaOff": "Isključeno", - "versionLabel": "Verzija", - "cliTitle": "Termix CLI", - "cliDescription": "Otvorite terminale, pokrećite naredbe i pomičite datoteke iz vlastitog shella.", - "cliLearnMore": "Saznajte više", - "deleteAccount": "Izbriši račun", - "deleteAccountDescription": "Trajno izbrišite svoj račun", - "deleteButton": "Izbriši", - "deleteAccountPermanent": "Ova radnja je trajna i ne može se poništiti.", - "deleteAccountWarning": "Sve sesije, hostovi, vjerodajnice i postavke bit će trajno izbrisane.", - "confirmPasswordDeletePlaceholder": "Unesite lozinku za potvrdu", "languageLabel": "Jezik", "themeLabel": "Tema", "fontSizeLabel": "Veličina fonta", "interfaceFontLabel": "Font sučelja", "interfaceFontDescription": "Mijenja font sučelja aplikacije. Profilni terminali zadržavaju vlastite postavke fonta.", "accentColorLabel": "Naglašena boja", - "keyboardShortcuts": "Prečaci na tipkovnici", - "keyboardShortcutsDescription": "Prilagodite prečace za kopiranje, lijepljenje i naredbe u terminalu", - "manageShortcuts": "Upravljaj", - "commandPalette": "Paleta naredbi", - "commandPaletteDesc": "Omogući prečac na tipkovnici", - "reopenTabsOnLogin": "Ponovno otvori kartice pri prijavi", - "reopenTabsOnLoginDesc": "Vratite otvorene kartice pri prijavi ili osvježavanju stranice, čak i s drugog uređaja", - "confirmTabClose": "Potvrdi zatvaranje kartice", - "confirmTabCloseDesc": "Pitaj prije zatvaranja terminalnih kartica", - "showTabNumbers": "Prikaži brojeve kartica", - "showTabNumbersDesc": "Prikaži broj na svakoj kartici kako bi se lakše razlikovale", - "settingsAppRail": "Traka aplikacija", - "sidebarSettingsMoved": "Postavke prikaza bočne trake hostova premještene su u panel Prilagodi bočnu traku, koji se otvara iz alatne trake Hostovi.", - "showHostTags": "Prikaži oznake hostova", - "showHostTagsDesc": "Prikaži oznake u popisu hostova", - "statusColors": "Stvarne boje statusa", - "statusColorsDesc": "Koristi zelenu/crvenu boju za status online/offline umjesto naglašene boje", - "pinAppRail": "Prikvači traku aplikacija", - "pinAppRailDesc": "Zadrži lijevu bočnu traku aplikacija uvijek proširenu umjesto proširivanja pri prelasku mišem", - "expandAppRailOnHover": "Proširi traku aplikacija pri prelasku mišem", - "expandAppRailOnHoverDesc": "Dopusti proširivanje lijeve bočne trake aplikacija kada se pokazivač miša nalazi iznad nje", - "appRailHoverPushesContent": "Pomakni sadržaj pri proširenju", - "appRailHoverPushesContentDesc": "Oslobodi prostor za proširenu traku umjesto da se otvara preko stranice. Otvorene sesije, poput udaljenog radnog stola, svaki put se prilagođavaju veličini.", - "showPinAppRailButton": "Prikaži gumb za prikvačivanje trake aplikacija", - "showPinAppRailButtonDesc": "Prikaži gumb u traci aplikacija za njezino prikvačivanje. Isključeno prema zadanim postavkama.", - "settingsNavigation": "Navigacija", - "navigationTabsDesc": "Odaberite koje se kartice prikazuju u traci aplikacija", - "settingsUpdates": "Ažuriranja", - "disableUpdateChecks": "Onemogući provjeru ažuriranja", - "disableUpdateChecksDesc": "Prestani provjeravati postoje li ažuriranja", - "changePassword": "Promijeni lozinku", - "currentPasswordLabel": "Trenutna lozinka", - "currentPasswordPlaceholder": "Trenutna lozinka", - "newPasswordLabel": "Nova lozinka", - "newPasswordPlaceholder": "Nova lozinka", - "confirmPasswordLabel": "Potvrdi novu lozinku", - "confirmPasswordPlaceholder": "Potvrdi novu lozinku", - "updatePassword": "Ažuriraj lozinku", - "createApiKeyTitle": "Izradi API ključ", - "createApiKeyDescription": "Generirajte novi API ključ za programski pristup.", - "apiKeyNameLabel": "Naziv", - "apiKeyNamePlaceholder": "npr. CI Pipeline", - "expiryDateLabel": "Datum isteka", - "optional": "opcionalno", - "cancel": "Otkaži", - "createKey": "Izradi ključ", - "apiKeyCreatedWarning": "Ključ je izrađen – kopirajte ga sada, više se neće prikazivati.", - "copyApiKey": "Kopiraj API ključ", - "copiedToClipboard": "Kopirano u međuspremnik", "apiKeyCount_one": "{{count}} ključ", "apiKeyCount_few": "{{count}} ključeva", - "apiKeyCount_other": "{{count}} ključeva", - "newKey": "Novi ključ", - "noApiKeys": "Još nema API ključeva.", - "apiKeyActive": "Aktivan", - "apiKeyUsageHint": "Uključite svoj ključ u zaglavlje", - "apiKeyUsageHintHeader": "zaglavlja.", - "apiKeyPermissionsHint": "Ključevi nasljeđuju dopuštenja korisnika koji ih je izradio.", - "exportData": "Izvezi moje podatke", - "exportDataDesc": "Preuzmite sigurnosnu kopiju svojih hostova, vjerodajnica i postavki za prijenos na drugi uređaj", - "export": "Izvoz", - "exporting": "Izvoz...", - "importData": "Uvezi moje podatke", - "importDataDesc": "Vratite svoje hostove, vjerodajnice i postavke iz .sqlite sigurnosne datoteke", - "importDataSelected": "Odabrano: {{name}}", - "selectFile": "Odaberi datoteku", - "changeFile": "Promijeni", - "import": "Uvoz", - "importing": "Uvoz...", - "exportSuccess": "Podaci su uspješno izvezeni", - "exportFailed": "Izvoz podataka nije uspio", - "importSelectFile": "Prvo odaberite datoteku", - "importCompleted": "Uvoz je završen: {{total}} stavki uvezeno, {{skipped}} preskočeno", - "importFailed": "Uvoz nije uspio: {{error}}", - "roleUser": "Korisnik", - "authMethodDual": "Dvostruka autentifikacija", - "authMethodExternal": "Vanjska", - "done": "Gotovo", - "apiKeyNameRequired": "Naziv ključa je obavezan", - "apiKeyCreated": "API ključ „{{name}}“ je izrađen", - "apiKeyCreateFailed": "Izrada API ključa nije uspjela", - "apiKeyUser": "Korisnik", - "apiKeyExpires": "Ističe", - "apiKeyRevoked": "API ključ „{{name}}“ je opozvan", - "apiKeyRevokeFailed": "Opoziv API ključa nije uspio", - "passwordFieldsRequired": "Trenutna i nova lozinka su obavezne", - "passwordMismatch": "Lozinke se ne podudaraju", - "passwordTooShort": "Lozinka mora imati najmanje 6 znakova", - "passwordUpdated": "Lozinka je uspješno ažurirana", - "passwordUpdateFailed": "Ažuriranje lozinke nije uspjelo", - "deletePasswordRequired": "Lozinka je potrebna za brisanje računa", - "deleteFailed": "Brisanje računa nije uspjelo", - "deleting": "Brisanje...", "colorPickerTooltip": "Otvori odabir boja", "themeSystem": "Sustav", "themeLight": "Svijetla", @@ -1779,18 +1146,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Prijavljeni ste na {{server}}", - "linkedProfileDescription": "Ova uređaj koristi vaš račun na poslužitelju i čuva kopiju vaših podataka, pa i dalje radi bez interneta.", - "manageSync": "Upravljanje sinkronizacijom", - "setUpSync": "Poveži s poslužiteljem", - "settingsTabsAndShortcuts": "Kartice i prečaci", - "onBetaTitle": "Koristite beta verziju", - "onBetaDescription": "Hvala vam na testiranju. Javite nam što ne radi kako treba.", - "tryBetaTitle": "Isprobajte nove značajke unaprijed", - "tryBetaDescription": "Pridružite se beta programu u Ažuriranjima.", - "sendBetaFeedback": "Pošaljite povratne informacije o beta verziji", - "openUpdates": "Ažuriranja" + "themeGruvbox": "Gruvbox" } } }, @@ -2055,8 +1411,7 @@ "hasDependents": "{{name}} potreban je za {{list}}. Prvo isključite ili deinstalirajte te dodatke.", "missingDependencies": "{{name}} treba {{list}}, koji nije instaliran.", "consentChanged": "Što ovaj dodatak traži promijenilo se od kada ste ga zadnji put pregledali. Provjerite popis ponovno.", - "upload": "Nije moguće pročitati {{name}}: {{error}}", - "developerMode": "Nije moguće promijeniti developerski način rada: {{error}}" + "upload": "Nije moguće pročitati {{name}}: {{error}}" }, "data": { "title": "Pohranjeni podaci", @@ -2188,13 +1543,7 @@ "browsePlugins": "Pregledaj dodatke", "loading": "Učitavanje", "developer": { - "title": "Način za razvojne programere dodataka", - "hint": "Omogućuje administratorima instaliranje dodataka iz .tmxplug datoteke u kartici Dodaci, bez provjera registra. Koristite ga za izradu i testiranje vlastitih dodataka.", - "enableTitle": "Uključiti način za razvojne programere?", - "enableBody": "Administratori će moći instalirati dodatke iz datoteka koje Termix nije provjerio. Dodatak može učiniti sve što njegove mogućnosti dopuštaju, stoga ovo uključite samo tijekom izrade ili testiranja dodataka.", - "enable": "Uključi", - "installFromFile": "Instaliraj iz datoteke", - "signedOnly": "Postavljena je varijabla TERMIX_REQUIRE_SIGNED_PLUGINS, stoga je instaliranje iz datoteke i dalje blokirano." + "installFromFile": "Instaliraj iz datoteke" }, "count": { "downloads_one": "{{formatted}} preuzimanje", @@ -2233,71 +1582,7 @@ "secretSet": "Postavljeno", "secretNotSet": "Nije postavljeno", "secretReplace": "Zamijeni", - "pluginSettingsSaved": "Postavke su spremljene", - "pluginSettingsInvalid": "Neke postavke nisu mogle biti spremljene. Provjerite istaknuta polja.", - "pluginSettingsSaveFailed": "Spremanje postavki nije uspjelo", - "pluginSettingsLoadFailed": "Učitavanje postavki nije uspjelo", - "featureUnavailable": "{{name}} trenutno nije dostupan. Ove postavke su spremljene, ali neće imati učinka.", - "account": "Račun", - "security": "Sigurnost", - "apiKeys": "API ključevi", - "data": "Podaci i sinkronizacija", - "interface": "Sučelje", - "appearance": "Izgled", - "keybindings": "Prečace", - "adminGeneral": "Općenito", - "adminUsers": "Korisnici", - "adminSessions": "Sesije", - "adminRoles": "Uloge", - "adminHostDefaults": "Zadane postavke za hostove", - "adminBranding": "Brendiranje", - "adminDatabase": "Baza podataka", - "adminSsl": "SSL", - "adminApiKeys": "API ključevi", - "adminAuditLog": "Dnevnik revizije", - "bandYou": "Vaš račun", - "bandApp": "Ova aplikacija", - "bandPlugins": "Dopunci", - "bandInstance": "Ovaj poslužitelj", - "searchPlaceholder": "Pretraži postavke", - "noResults": "Nema podudarnih postavki.", - "pages": "Stranice", - "instanceSettings": "Postavke poslužitelja", - "nothingHere": "Ovdje nema ništa za postaviti.", - "searchPage": "Pretraži ovu stranicu", - "noPageMatches": "Ništa na ovoj stranici se ne podudara.", - "updates": { - "title": "Ažuriranja", - "betaProgram": "Beta program", - "betaIntro": "Bete su rane verzije iduće Termix inačice. Objavljuju se utorkom i petkom kada ima novosti za probu. Mogu sadržavati greške, a vaša povratna informacija čini stabilnu inačicu boljom.", - "termixBetas": "Termix bete", - "termixBetasHint": "Obavijesti me o novim betama, ne samo o stabilnim inačicama.", - "runningBetaBuild": "Pokrećete beta verziju. Da biste izašli, prebacite se natrag na stabilnu sliku ili instalacijski program.", - "howToInstall": "Kako dobiti beta verziju", - "desktopInstall": "Preuzmite beta instalacijski program i instalirajte ga preko ovog.", - "downloadBeta": "Preuzmi {{version}}", - "dockerInstall": "Promijenite svoju sliku na beta oznaku i ponovno pokrenite kontejner:", - "copy": "Kopiraj", - "copied": "Kopirano", - "copyFailed": "Kopiranje nije uspjelo", - "learnMore": "Saznajte više o betama", - "feedback": "Povratne informacije", - "feedbackHint": "Pronašli ste grešku ili imate ideju? Službeno ide izravno razvojačima s vašom verzijom već upisano.", - "sendFeedback": "Pošalji povratne informacije za betu", - "releases": "Iznašci", - "thisVersion": "Ova inačica", - "newestStable": "Najnovija stabilna", - "newestBeta": "Najnovija beta", - "noRelease": "Trenutno nema", - "pluginBetas": "Beta verzije dodataka", - "pluginBetasIntro": "Svaki dodatak može koristiti beta verzije zasebno. Da biste probali jedan, otvorite ga i pritisnite Probaj betu.", - "openPlugins": "Otvori dodatke", - "waitingForStable": "Natrag na stabilnu. Ostaje na {{version}} dok se ne pojavi novija stabilna inačica.", - "backToStable": "Natrag na stabilnu", - "allPluginsBeta": "Koristi beta verzije za sve dodatke", - "allPluginsStable": "Svi dodatci natrag na stabilne", - "saveFailed": "Promjena se nije mogla spremiti" - } + "featureUnavailable": "{{name}} trenutno nije dostupan. Ove postavke su spremljene, ali neće imati učinka." }, "managerCard": { "refresh": "Osvježi", @@ -2307,86 +1592,16 @@ "filter": "Filtriraj..." }, "sync": { - "server": "Termix poslužitelj", - "account": "Račun", - "status": "Status", - "never": "nikada", - "justNow": "upravo sada", "minutesAgo_one": "prije {{count}} minute", "minutesAgo_few": "prije {{count}} minute", "minutesAgo_other": "prije {{count}} minuta", "hoursAgo_one": "prije {{count}} sat", "hoursAgo_few": "prije {{count}} sata", "hoursAgo_other": "prije {{count}} sati", - "actionFailed": "To nije uspjelo. Pokušajte ponovo.", - "unlinkedTitle": "Samo ovaj uređaj", - "unlinkedBody": "Termix radi samostalno na ovom uređaju. Povežite ga sa svojim Termix poslužiteljem kako biste sve održavali usklađenim.", - "unlinkedPointHosts": "Vaši hostovi, vjerodajnice, isječke i postavke prate vas na svaki uređaj.", - "unlinkedPointOffline": "Sve i dalje radi kada poslužitelj nije dostupan, a kasnije se usklađuje.", - "unlinkedPointAccount": "Prijavite se s računom poslužitelja, a hostovi koje su vam drugi ljudi podijelili također se pojavljuju ovdje.", - "linkButton": "Poveži s poslužiteljem", - "state": { - "syncing": "Usklađivanje", - "offline": "Poslužitelj nije dostupan", - "error": "Usklađivanje zaustavljeno", - "signedOut": "Odjavljen", - "synced": "Usklađeno {{time}}" - }, "pending_one": "{{count}} promjena čeka usklađivanje", "pending_few": "{{count}} promjene čekaju usklađivanje", "pending_other": "{{count}} promjena čeka usklađivanje", - "signInAgain": "Prijavi se ponovo", - "syncNow": "Uskladi sada", - "unlink": "Odspoji", - "unlinked": "Ovaj uređaj više nije povezan", - "unlinkTitle": "Odspojiti ovaj uređaj?", - "unlinkDescription": "Time se zaustavlja sinkronizacija i odjava s poslužitelja. Poslužitelji koje su vam drugi dijelili uklonit će se s ovog uređaja u svakom slučaju.", - "unlinkKeepTitle": "Zadrži moje podatke ovdje", - "unlinkKeepBody": "Vaši poslužitelji, vjerodajnice i postavke ostat će na ovom uređaju i nastavit će raditi samostalno.", - "unlinkRemoveTitle": "Ukloni sinkronizirane podatke", - "unlinkRemoveBody": "Sve što je došlo s poslužitelja uklonit će se s ovog uređaja. Ostaju samo poslužitelji koji su zadržani na ovom uređaju.", - "conflictsTitle": "Sukobi", - "conflictsDescription": "Ovo je izmijenjeno i ovdje i na poslužitelju istovremeno. Trenutno se koristi verzija s poslužitelja. Zadržite svoju verziju ako želite da se ona pošalje na poslužitelj.", - "keepMine": "Zadrži moju", - "keepServer": "Zadrži poslužiteljsku", - "errorsTitle": "Nije sinkronizirano", - "errorsDescription": "Poslužitelj nije prihvatio ove promjene. One ostaju na ovom uređaju.", - "errorPermission": "Vaš račun na poslužitelju nema dopuštenje za ovu promjenu.", - "retry": "Pokušaj ponovo", - "whatSyncs": "Što se sinkronizira", - "whatSyncsDescription": "Isključite sve što želite zadržati samo na ovom uređaju.", - "coreGroup": "Termix", - "notOnServer": "Poslužitelj ovo nema", - "notOnDevice": "Još nije na ovom uređaju", - "localOnlyHint": "Možete zadržati i pojedinačne poslužitelje ili mape samo na ovom uređaju putem njihovih postavki.", - "originTitle": "Početak veze", - "originDescription": "Povežite se s poslužiteljima s ovog uređaja ili putem poslužitelja. Ovo možete promijeniti za svaki poslužitelj zasebno.", - "originLocal": "Ovaj uređaj", - "originRemote": "Poslužitelj", - "entities": { - "hosts": "Poslužitelji", - "sshCredentials": "Vjerodajnice", - "sshFolders": "Mape", - "userPreferences": "Postavke", - "pluginUserSettings": "Postavke dodataka", - "sharedHosts": "Poslužitelji dijeljeni s vama", - "sharedCredentials": "Vjerodajnice dijeljene s vama", - "vaultProfiles": "Vault profili", - "snippetFolders": "Mape isječaka", - "snippets": "Isječci", - "dashboardServiceLinks": "Veze usluga", - "homepageItems": "Stavke početne stranice", - "networkTopology": "Mrežna mapa", - "workspaces": "Radne površine", - "hostDefaults": "Zadane postavke poslužitelja", - "hostDefaultsAdmin": "Zadane postavke poslužitelja na serveru", - "aiProviders": "AI pružatelji", - "homepageLayouts": "Rasporedi početne stranice", - "accountProfile": "Profil računa" - }, "proxy": { - "title": "Obrnuti proxy", - "description": "Potrebno samo kada se ispred vašeg poslužitelja nalazi nešto poput Cloudflare Accessa ili stranice za prijavu.", "headersTitle": "Dodatne zaglavlja", "headersHint": "Šalju se s svakim zahtjevom poslužitelju, na primjer token usluge Cloudflare Access.", "headerName": "Naziv zaglavlja", @@ -2399,8 +1614,7 @@ "username": "Korisničko ime", "password": "Lozinka", "allowInvalidCertificate": "Povjeri samopotpisanom certifikatu", - "allowInvalidCertificateHint": "Samo za vlastiti poslužitelj, kada njegov certifikat nije izdan od poznatog izdavača.", - "saved": "Spremljeno" + "allowInvalidCertificateHint": "Samo za vlastiti poslužitelj, kada njegov certifikat nije izdan od poznatog izdavača." }, "problems": { "invalidUrl": "To ne izgleda kao web adresa.", @@ -2440,6 +1654,27 @@ "linking": "Povezivanje i pokretanje prvog sinkroniziranja...", "linked": "Povezano. Vaši se podaci sada sinkroniziraju.", "signedInAgain": "Prijavljeno. Sinkronizacija se ponovno pokreće." + }, + "entities": { + "hosts": "Poslužitelji", + "sshCredentials": "Vjerodajnice", + "sshFolders": "Mape", + "userPreferences": "Postavke", + "pluginUserSettings": "Postavke dodataka", + "sharedHosts": "Poslužitelji dijeljeni s vama", + "sharedCredentials": "Vjerodajnice dijeljene s vama", + "vaultProfiles": "Vault profili", + "snippetFolders": "Mape isječaka", + "snippets": "Isječci", + "dashboardServiceLinks": "Veze usluga", + "homepageItems": "Stavke početne stranice", + "networkTopology": "Mrežna mapa", + "workspaces": "Radne površine", + "hostDefaults": "Zadane postavke poslužitelja", + "hostDefaultsAdmin": "Zadane postavke poslužitelja na serveru", + "aiProviders": "AI pružatelji", + "homepageLayouts": "Rasporedi početne stranice", + "accountProfile": "Profil računa" } }, "hostDefaults": { @@ -2456,34 +1691,15 @@ "resetTitle": "Ovaj host postavlja vlastitu vrijednost. Kliknite za ponovno korištenje zadane vrijednosti iz {{source}}", "clearTitle": "Postavljeno na ovoj razini. Kliknite za brisanje i korištenje {{source}} umjesto toga", "inheritedTitle": "Prati zadanu vrijednost iz {{source}}", - "titleAdmin": "Zadane postavke hostova poslužitelja", - "titleUser": "Moje zadane postavke hostova", - "titleFolder": "Zadane postavke mape: {{name}}", - "descriptionAdmin": "Zadane postavke za svaki host na ovom poslužitelju. Korisnikove vlastite postavke, postavke mape ili sam host i dalje mogu postaviti drugu vrijednost. Promijenite polje za postavljanje ovdje ili ga obrišite da ostane nepostavljeno.", - "descriptionUser": "Zadane postavke za sve vaše hostove, iznad onih poslužitelja. Mapa ili sam host i dalje mogu postaviti drugu vrijednost. Promijenite polje za postavljanje ovdje ili ga obrišite da ostane nepostavljeno.", - "descriptionFolder": "Zadane postavke za hostove u ovoj mapi i podmapama, iznad vaših vlastitih. Host i dalje može postaviti drugu vrijednost. Promijenite polje za postavljanje ovdje ili ga obrišite da ostane nepostavljeno.", - "save": "Spremi zadane postavke", "saved_one": "Zadane postavke spremljene. {{count}} host je ažuriran.", "saved_few": "Zadane postavke spremljene. {{count}} hostova je ažurirano.", "saved_other": "Zadane postavke spremljene. {{count}} hostova je ažurirano.", - "savedInBackground": "Zadane postavke spremljene. Hostovi se ažuriraju u pozadini.", "appliedToHosts_one": "{{count}} host je ažuriran novim zadanim postavkama.", "appliedToHosts_few": "{{count}} hostova je ažurirano novim zadanim postavkama.", "appliedToHosts_other": "{{count}} hostova je ažurirano novim zadanim postavkama.", - "saveFailed": "Nije moguće spremiti zadane postavke", - "loadFailed": "Nije moguće učitati zadane postavke", - "confirmTitle": "Spremiti zadane postavke?", "confirmChanges_one": "{{count}} host prati ove zadane postavke i promijenit će se.", "confirmChanges_few": "{{count}} hostova prati ove zadane postavke i promijenit će se.", "confirmChanges_other": "{{count}} hostova prati ove zadane postavke i promijenit će se.", - "confirmNoChanges": "Nema promjena postojećih hostova. Novi hostovi započet će s ovim zadanim postavkama.", - "menuMyDefaults": "Moje zadane postavke hostova", - "folderDefaultsAction": "Zadane postavke mape", - "adminSectionDescription": "Postavite zadane postavke koje slijedi svaki host na ovom poslužitelju, za svaku postavku koju host ima, uključujući svaki dodatak. Korisnici i mape mogu postaviti svoje iznad toga, a bilo koji host i dalje može koristiti vlastitu vrijednost.", - "editServerDefaults": "Uredi zadane postavke poslužitelja", - "resetMenu": "Poništi", - "resetAll": "Sve na zadane vrijednosti", - "resetCore": "Povezivanje i SSH na zadane vrijednosti", "resetDone_one": "{{count}} poslužitelj sada koristi zadane vrijednosti.", "resetDone_few": "{{count}} poslužitelja sada koriste zadane vrijednosti.", "resetDone_other": "{{count}} poslužitelja sada koristi zadane vrijednosti." @@ -2498,50 +1714,16 @@ "fields": { "secretSaved": "Spremljeno. Upišite za zamjenu." }, - "sharing": { - "revokeConfirm": "Ukloniti pristup za {{name}}?", - "revoke": "Ukloni pristup" - }, "manage": { - "searchSettings": "Pretraži postavke", - "noMatchingSettings": "Nema podudarnih postavki.", - "sections": "Odjeljci", - "sectionNeedsAttention": "Ovdje nešto zahtijeva pažnju", "needsAttention_one": "Jedna stvar zahtijeva pažnju.", "needsAttention_few": "{{count}} stvari zahtijevaju pažnju.", "needsAttention_other": "{{count}} stvari zahtijeva pažnju.", - "bandHost": "Poslužitelj", - "bandFeatures": "Protokoli i dodaci", - "bandCredential": "Vjerodajnica", - "sshConnection": "SSH veza", - "errorAddressRequired": "Adresa je obavezna.", - "errorPortRange": "Koristite port između 1 i 65535.", - "defaults": "Zadane vrijednosti", - "searchHosts": "Pretraži poslužitelje", - "searchCredentials": "Pretraži vjerodajnice", - "searchDefaults": "Pretraži zadane vrijednosti", - "addCredential": "Dodaj vjerodajnicu", - "nothingMatches": "Ništa se ne podudara", - "nothingYet": "Ovdje još nema ništa", - "emptyHostsHint": "Dodajte poslužitelj i pojavit će se ovdje, u bilo kojem odjeljku koji mu dodijelite.", - "emptyCredentialsHint": "Spremljene vjerodajnice mogu ponovno koristiti svi poslužitelji.", - "collapse": "Sažmi", - "expand": "Proširi", - "cannotBeUndone": "Ovo se ne može poništiti.", - "hostNotFound": "Poslužitelj nije pronađen. Pokušajte osvježiti popis.", "hostCount_one": "{{count}} poslužitelj", "hostCount_few": "{{count}} poslužitelja", "hostCount_other": "{{count}} poslužitelja", "credentialCount_one": "{{count}} vjerodajnica", "credentialCount_few": "{{count}} vjerodajnice", - "credentialCount_other": "{{count}} vjerodajnica", - "newHost": "Novi poslužitelj", - "newCredential": "Nova vjerodajnica", - "advanced": "Napredno", - "pickHost": "Odaberite poslužitelj za uređivanje", - "pickCredential": "Odaberite vjerodajnicu za uređivanje", - "pickDefaults": "Odaberite razinu zadanih vrijednosti za uređivanje", - "pickHint": "Sve o vezi nalazi se ovdje, grupirano radi lakšeg pronalaženja." + "credentialCount_other": "{{count}} vjerodajnica" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/hu_HU.json b/src/ui/locales/translated/hu_HU.json index 523f49767..ebeaa9bd3 100644 --- a/src/ui/locales/translated/hu_HU.json +++ b/src/ui/locales/translated/hu_HU.json @@ -141,7 +141,6 @@ "continue": "Folytatás", "error": "Hiba", "unsavedChanges": "Nem mentett módosítások", - "more": "Továbbiak", "loading": "Betöltés...", "host": "Host", "selectHost": "Válasszon egy hostot...", @@ -154,7 +153,6 @@ "cancel": "Mégse", "username": "Felhasználónév", "login": "Bejelentkezés", - "logout": "Kijelentkezés", "register": "Regisztráció", "password": "Jelszó", "confirmPassword": "Jelszó megerősítése", @@ -165,8 +163,6 @@ "rename": "Átnevezés", "edit": "Szerkesztés", "confirm": "Megerősítés", - "next": "Következő", - "previous": "Előző", "refresh": "Frissítés", "language": "Nyelv", "backendReconnected": "A szerverkapcsolat helyreállt", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Olvasson el többet mindegyikről" }, "desktopUpdates": { - "title": "Asztali alkalmazás", - "mode": "Frissítések", - "modeHint": "Hogyan kap új verziókat ez az alkalmazás.", - "manualModeHint": "Ez a példány nem tud önmagát frissíteni, így a Termix csak akkor értesít, ha megjelenik egy új verzió.", "modeAutomatic": "Automatikus", "modePrompt": "Először kérdezzen", "modeNever": "Soha", @@ -247,15 +239,6 @@ "onboardingTitle": "Alkalmazásfrissítések", "onboardingBody": "Az asztali alkalmazás mostantól képes önmagát frissíteni. Válassza ki, hogyan szeretné, hogy az új verziók érkezzenek. Ezt később módosíthatja a Beállítások > Frissítések menüpontban.", "onboardingManual": "Az alkalmazás ezt a példányát úgy telepítették, hogy nem tud önmagát frissíteni, így a Termix értesítést küld, ha új verzió jelenik meg, és letöltési linket is mellékel.", - "status": "Verzió: {{version}}", - "statusIdle": "Még nem ellenőrizve", - "statusChecking": "Frissítések keresése", - "statusAvailable": "A(z) {{version}} verzió elérhető", - "statusDownloading": "A(z) {{version}} letöltése ({{progress}}%)", - "statusReady": "A(z) {{version}} verzió készen áll. Indítsa újra a telepítéshez.", - "statusUpToDate": "A legújabb verziót használja", - "statusError": "Nem sikerült ellenőrizni a frissítéseket. Próbálja újra később.", - "checkNow": "Ellenőrzés most", "download": "Letöltés", "restart": "Újraindítás most", "later": "Később", @@ -269,26 +252,11 @@ "terminal": "Terminál", "close": "Bezárás", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Jelszó másolása", - "copySudoPassword": "Sudo jelszó másolása", - "passwordCopied": "Jelszó vágólapra másolva", - "failedToCopyPassword": "Jelszó másolása sikertelen", - "refreshTab": "Kapcsolat frissítése", - "renameTab": "Fül átnevezése", "dashboard": "Vezérlőpult", "quickConnect": "Gyors csatlakozás", - "openAsTabHint": "Ctrl+kattintás vagy középső kattintás a fülként nyitáshoz", - "openAsTab": "Nyitás fülként", - "openInRightDock": "Nyitás a jobb oldalsávban", - "closeRightDock": "Jobb oldalsáv bezárása", - "toggleRightDock": "Jobb oldalsáv be/ki", "hosts": "Hosztok", "credentials": "Hitelek", "connections": "Kapcsolatok", - "keepSideMenuOpen": "Menü nyitva tartása", - "collapseSideMenu": "Menü összecsukása", - "roleAdministrator": "Rendszergazda", - "roleUser": "Felhasználó", "sync": "Szinkronizálás", "reconnectDisconnectedTerminals": "Minden levált terminál újracsatlakoztatása", "reconnectingTerminals_one": "{{count}} terminál újracsatlakoztatása", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "Nem sikerült elindítani {{count}} terminál újracsatlakoztatását", "fullscreenUnsupported": "A teljes képernyős mód nem támogatott ebben a böngészőben", "fullscreenFailed": "Nem sikerült váltani a teljes képernyős módot", - "resetSidebarWidth": "Szélesség visszaállítása", - "collapseSidebar": "Oldalsáv összecsukása", - "openSidebar": "Oldalsáv megnyitása", "confirmCloseHost": "{{host}} bezárása?", - "enterFullscreen": "Teljes képernyő (Ctrl+Shift+F)", - "exitFullscreen": "Kilépés a teljes képernyőből (Ctrl+Shift+F)", - "group": { - "objects": "Saját", - "tools": "Eszközök", - "system": "Rendszer" - }, - "searchEverything": "Keresés gazdagépek, lapok és műveletek között", - "search": "Keresés", "hiddenCount_one": "{{count}} rejtett", "hiddenCount_other": "{{count}} rejtett", - "showInRail": "Megjelenítés az oldalsávban", - "moveUp": "Mozgatás felfelé", - "moveDown": "Mozgatás lefelé", - "resetRailOrder": "Sorrend visszaállítása", - "hideFromRail": "Elrejtés az oldalsávból", - "openSettings": "Beállítások megnyitása", "settings": "Beállítások", "manage": "Kezelés", - "mobileNavigation": "Navigáció", "plugins": "Bővítmények" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "Importálás kész: {{imported}} importálva, {{updated}} frissítve, {{failed}} sikertelen", "importHostsFailed": "Nem sikerült importálni a hosztokat" }, - "commandPalette": { - "searchPlaceholder": "Hosztok, parancsok vagy beállítások keresése...", - "quickActions": "Gyors műveletek", - "navigation": "Navigáció", - "orShortcut": "vagy", - "addNewHost": "Új gazdagép hozzáadása", - "adminSettings": "Admin beállítások", - "addCredential": "Hitelesítő adat hozzáadása", - "recentActivity": "Legutóbbi tevékenység", - "serversAndHosts": "Szerverek és gazdagépek", - "noHostsFound": "Nincs találat a(z) \"{{search}}\" kifejezésre", - "links": "Hivatkozások", - "navigate": "Navigáció", - "select": "Kiválasztás", - "pluginActions": "További műveletek", - "noTargetTab": "Nincs megnyitva terminál-fül", - "documentation": "Dokumentáció" - }, "splitScreen": { "title": "Osztott képernyő", "defaultLabel": "Felosztás {{number}}", "splitRight": "Jobbra osztás", "splitDown": "Lejjebb osztás", - "addToSplit": "Hozzáadás a(z) {{split}} elemhez", "paneEmptyItem": "{{index}}. panel: üres", "paneItem": "{{index}}. panel: {{label}}", "paneNumber": "{{index}}. panel", - "newPaneRight": "Új panel jobbra", - "newPaneBelow": "Új panel lent", "emptyTitle": "Üres panel", "emptyHint": "Válasszon valamit a megjelenítéshez. Amíg ez a panel van kijelölve, az oldalsávból megnyitott elemek itt jelennek meg.", "openTabs": "Megnyitott fülök", @@ -962,7 +890,6 @@ "clearPane": "Panel ürítése", "zoom": "Panel nagyítása", "unzoom": "Elrendezés visszaállítása", - "unsplit": "Felosztás megszüntetése", "layouts": "Elrendezések", "applyLayout": "Elrendezés módosítása", "maxPanes_one": "Egy felosztás legfeljebb {{count}} ablakot tartalmazhat", @@ -971,8 +898,6 @@ "dropHere": "Húzza ide a megjelenítéshez", "paneActions": "Panel műveletek", "dividerHint": "Húzza az átméretezéshez. Kattintson duplán az egyenlő méretűre állításhoz.", - "openInSplit": "Megnyitás felosztásban", - "openInNewSplit": "Új felosztás az aktuális füllel", "shortcuts": "Gyorsbillentyűk", "shortcutNavigate": "Panel közötti váltás", "presets": { @@ -986,23 +911,6 @@ "grid6": "Hatos rács" } }, - "connections": { - "noConnections": "Nincs kapcsolat", - "noConnectionsDesc": "Nyisson meg egy terminált, fájlkezelőt vagy távoli asztalt a kapcsolatok megjelenítéséhez", - "connectedFor": "Csatlakozva {{duration}} ideje", - "connected": "Csatlakozva", - "disconnected": "Leválasztva", - "reconnect": "Újracsatlakozás", - "sectionOpen": "Nyitott", - "sectionBackground": "Háttér", - "backgroundDesc": "A munkamenetek a leválasztást követően {{minutes}} percig fennmaradnak, és újra csatlakoztathatók.", - "expiresIn": "Lejár {{duration}} múlva", - "search": "Kapcsolatok keresése...", - "noSearchResults": "Nincs a keresésnek megfelelő kapcsolat", - "rename": "Munkamenet átnevezése", - "forgetConfirm": "Megszakítja a(z) {{name}} háttér-munkamenetét?", - "forget": "Munkamenet vége" - }, "sshAuth": { "totpRequired": "Kétfaktoros hitelesítés szükséges", "totpCodeLabel": "Ellenőrző kód", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "kulcs jelszava", "pastePrivateKey": "Illessze be a privát kulcsát ide...", - "enterPassword": "Adja meg a jelszavát", - "apiKeyName": "pl. CI Pipeline", - "credentialName": "pl. Éles SSH kulcs", - "optionalDetails": "Opcionális részletek...", - "sshUsername": "pl. root vagy deploy", - "hostAddress": "10.0.0.1 vagy example.com", - "hostName": "pl. Éles webes szerver" + "enterPassword": "Adja meg a jelszavát" }, "dashboard": { - "title": "Vezérlőpult", - "github": "GitHub", - "reportBug": "Hiba bejelentése", - "discord": "Discord", - "docs": "Dokumentáció", - "donate": "Támogatás", - "serverOverview": "Szerver áttekintés", - "version": "Verzió", "updateAvailable": "Frissítés elérhető", - "beta": "Béta", - "uptime": "Üzemidő", - "database": "Adatbázis", - "healthy": "Jó állapot", - "error": "Hiba", - "totalHosts": "Összes gazdagép", - "totalCredentials": "Összes hitelesítő adat", - "recentActivity": "Legutóbbi tevékenység", - "reset": "Visszaállítás", - "noRecentActivity": "Nincs legutóbbi tevékenység", - "quickActions": "Gyors műveletek", - "addHost": "Gazdagép hozzáadása", - "addCredential": "Hitelesítő adat hozzáadása", - "adminSettings": "Rendszergazdai beállítások", - "userProfile": "Felhasználói profil", - "serverStats": "Szerver statisztikák", - "customizeLayout": "Vezérlőpult testreszabása", - "justNow": "épp most" + "beta": "Béta" }, "dashboardTab": { "stable": "STABIL", - "registerNewServer": "Új szerver regisztrálása", - "storeSshKeysOrPasswords": "SSH-kulcsok vagy jelszavak tárolása", - "manageUsersAndRoles": "Felhasználók és szerepkörök kezelése", - "manageYourAccount": "Fiókja kezelése", - "hostStatus": "Gazdagép állapota", - "noHostsConfigured": "Nincs konfigurált gazdagép", - "checking": "ELLLENŐRZÉS", - "commandPalette": "Parancspaletta", - "done": "Kész", - "clear": "Törlés", - "dragToResizeColumns": "Húzza az oszlopok átméretezéséhez", - "hostsAvailable": "Elérhető gazdagépek", - "removeSection": "Szekció eltávolítása", - "addSection": "Szekció hozzáadása", - "allSectionsShown": "Minden már szerepel a vezérlőpulton.", - "fromPlugins": "Bővítményekből", - "dropHere": "Húzzon ide egy szekciót", - "dragToReorder": "Húzza a szekciókat az átrendezéshez", - "clearActivityConfirm": "Törli a legutóbbi tevékenységeit?", - "resetConfirm": "Visszaállítja a vezérlőpultot az alapértelmezett elrendezésre?", "onlineCount_one": "{{count}} online", "onlineCount_other": "{{count}} online", "hostCount_one": "{{count}} gazdagép", "hostCount_other": "{{count}} gazdagép" }, "admin": { - "sectionGeneral": "Általános", - "sectionUsers": "Felhasználók", - "sectionSessions": "Munkamenetek", - "sectionRoles": "Szerepkörök", - "sectionDatabase": "Adatbázis", - "sectionApiKeys": "API-kulcsok", - "sectionAuditLog": "Ellenőrzési napló", - "sectionSsl": "HTTPS-tanúsítvány", - "sectionBranding": "Saját márkázás", - "brandingAppName": "Alkalmazás neve", - "brandingAppNameDesc": "A bejelentkezési képernyőn és a böngészőfülön jelenik meg. Hagyja üresen a „Termix” használatához.", - "brandingTagline": "Mottó", - "brandingTaglineDesc": "Az alkalmazásnév alatt jelenik meg a bejelentkezési képernyőn. Hagyja üresen az alapértelmezett mottó használatához.", - "brandingLogo": "Logó", - "brandingLogoDesc": "PNG, JPEG vagy WEBP, legfeljebb 750 KB. Kicseréli az alapértelmezett ikont a bejelentkezési képernyőn és a böngészőfülön.", - "brandingLogoUpload": "Logó feltöltése", - "brandingLogoReset": "Visszaállítás alapértelmezettre", - "brandingLogoInvalid": "Érvénytelen kép. Használjon legfeljebb 750 KB méretű PNG, JPEG vagy WEBP fájlt.", - "brandingSaved": "A márkázási beállítások mentve", - "brandingSaveFailed": "A márkázási beállítások mentése sikertelen", - "sslDescription": "A Termix által HTTPS-en keresztül kiszolgált tanúsítvány. Töltse fel sajátját ide, vagy szerezzen és újítson meg egyet a Let's Encrypt-től az ACME-tanúsítványok szakaszban.", - "sslDocsLink": "SSL-dokumentáció megtekintése", - "sslCertStatus": "Tanúsítvány állapota", - "sslCertStatusNone": "Nincs tanúsítvány", - "sslCertStatusValid": "Érvényes", - "sslCertStatusExpiring": "Hamarosan lejár", - "sslCertStatusExpired": "Lejárt", - "sslCertExpiresAt": "Lejárat: {{date}}", - "sslInfoNote": "A tanúsítvány kibocsátása vagy feltöltése után a Termix automatikusan engedélyezi az HTTPS-t az SSL_PORT-on (alapértelmezetten 8443), a meglévő HTTP-port mellett. Győződjön meg arról, hogy ez a port ki van publikálva/térképezve erre a tárolóra, hogy elérhető legyen.", - "sslManualCert": "Tanúsítvány (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Privát kulcs (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Illessze be meglévő tanúsítványát és privát kulcsát, beleértve a teljes láncot, ha a tanúsítványkiadója ezt megköveteli.", - "sslManualUpload": "Tanúsítvány feltöltése és telepítése", - "sslManualUploadLoading": "Tanúsítvány feltöltése...", - "sslManualUploadSuccess": "A tanúsítvány sikeresen feltöltve és telepítve", - "sslManualUploadFailed": "A tanúsítvány feltöltése sikertelen", - "sslManualRequiresFields": "A tanúsítvány és a privát kulcs megadása kötelező", - "auditLogTotal": "{{total}} összes bejegyzés", - "auditLogEmpty": "Nem találhatók ellenőrzési naplóbejegyzések", - "auditLogSuccess": "Sikeres", - "auditLogFailed": "Sikertelen", - "auditLogClearFilters": "Szűrők törlése", - "auditLogPage": "{{page}}. oldal / {{totalPages}} (összesen: {{total}})", - "auditLogIp": "IP", - "auditLogResourceId": "Erőforrás-azonosító", - "auditLogFilterUser": "Felhasználó", - "auditLogFilterAction": "Művelet", - "auditLogFilterResourceType": "Erőforrás típusa", - "auditLogFilterStatus": "Státusz", - "auditLogFilterFrom": "Tól", - "auditLogFilterTo": "Ig", - "auditLogFilterAll": "Összes", - "allowRegistration": "Felhasználóregisztráció engedélyezése", - "allowRegistrationDesc": "Új felhasználók önálló regisztrációja felhasználónévvel és jelszóval", - "allowPasswordLogin": "Jelszavas bejelentkezés engedélyezése", - "allowPasswordLoginDesc": "Felhasználónév/jelszó alapú bejelentkezés", - "externalAutoProvision": "Külső fiókok automatikus létrehozása", - "externalAutoProvisionDesc": "Fiók létrehozása első bejelentkezéskor külső szolgáltatáson (pl. SSO vagy LDAP) keresztül. Ha ki van kapcsolva, csak azok jelentkezhetnek be így, akiknek már van fiókja.", - "secondFactorAfterExternalLogin": "Második hitelesítési tényező kérése külső bejelentkezések után (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Ha ki van kapcsolva, a regisztrált második hitelesítési tényezőt csak jelszavas és egyéb helyi bejelentkezések után kérdezi, mint eddig. Ha be van kapcsolva, minden bejelentkezési módszer után kérdezi, beleértve az SSO-t és az LDAP-ot is.", - "allowPasswordReset": "Jelszóvisszaállítás engedélyezése", - "allowPasswordResetDesc": "Visszaállítási kód a Docker naplóin keresztül", - "auditForwardingTitle": "SIEM-re továbbítás", - "auditForwardingDesc": "Minden ellenőrzési bejegyzés másolatának küldése egy külső gyűjtőnek NDJSON formátumban. A helyi naplók maradnak az igazság forrása.", - "auditForwardingEnvNotice": "Egy környezeti változó is konfigurálja a továbbítást; az itt mentett URL élvez elsőbbséget.", - "auditForwardingToken": "Bearer token (opcionális)", - "auditForwardingTokenStored": "Bearer token (mentve)", - "auditForwardingSaved": "Ellenőrzési továbbítási beállítások mentve", - "auditForwardingSaveError": "Az ellenőrzési továbbítási beállítások mentése sikertelen", - "sessionTimeout": "Munkamenet időtúllépés", - "hours": "óra", - "sessionTimeoutRange": "Min. 1 óra, max. 720 óra", - "monitoringDefaults": "Monitorozás alapértelmezései", - "statusCheck": "Státuszellenőrzés", - "sec": "mp", - "logLevel": "Naplózási szint", "usersCount_one": "{{count}} felhasználó", - "usersCount_other": "{{count}} felhasználó", - "searchUsers": "Felhasználók keresése...", - "noUsers": "Nincsenek felhasználók", - "noUsersMatch": "Nincs a keresésnek megfelelő felhasználó", - "pageOf": "{{page}}. oldal a {{total}}-ból", - "createUser": "Létrehozás", - "newRole": "Új szerepkör", - "roleName": "Név", - "roleDisplayName": "Megjelenítési név", - "roleDescription": "Leírás", "rolesCount_one": "{{count}} szerepkör", - "rolesCount_other": "{{count}} szerepkör", - "createRole": "Létrehozás", - "creating": "Létrehozás...", - "exportDatabase": "Adatbázis exportálása", - "exportDatabaseDesc": "Az összes host, hitelesítési adat és beállítás hordozható SQLite mentésének letöltése", - "export": "Exportálás", - "exporting": "Exportálás...", - "importDatabase": "Adatbázis importálása", - "importDatabaseDesc": "Visszaállítás egy hordozható .sqlite mentésből bármilyen adatbázis-háttérről", - "importDatabaseSelected": "Kijelölve: {{name}}", - "selectFile": "Fájl kiválasztása", - "changeFile": "Váltás", - "import": "Importálás", - "importing": "Importálás...", "apiKeysCount_one": "{{count}} kulcs", - "apiKeysCount_other": "{{count}} kulcs", - "apiKeysDocsLink": "Dokumentáció megtekintése", - "apiKeysCliHint": "Használj API-kulcsot a Termix CLI-vel a szerverek kezeléséhez a terminálból.", - "apiKeysCliLink": "CLI dokumentáció megtekintése", - "newApiKey": "Új API-kulcs", - "apiKeyCreatedWarning": "Kulcs létrehozva – másolja le most, mert nem jelenik meg újra.", - "apiKeyName": "Név", - "apiKeyUser": "Felhasználó", - "apiKeySelectUser": "Válasszon felhasználót...", - "apiKeyExpiresAt": "Lejárat", - "createKey": "Kulcs létrehozása", - "apiKeyNoExpiry": "Nincs lejárati idő", - "revokedBadge": "VONATLANÍTVA", - "authTypeDual": "Kétlépcsős hitelesítés", - "authTypeExternal": "Külső", - "authTypeLocal": "Helyi", - "adminStatusAdministrator": "Rendszergazda", - "adminStatusRegularUser": "Normál felhasználó", - "adminBadge": "RENDSZERGAZDA", - "systemBadge": "RENDSZER", - "customBadge": "EGYEDI", - "youBadge": "ÖN", "sessionsActive_one": "{{count}} aktív", - "sessionsActive_other": "{{count}} aktív", - "sessionActive": "Aktív: {{time}}", - "sessionExpires": "Lejárat: {{time}}", - "revokeAll": "Összes", - "revokeAllSessionsSuccess": "A felhasználó összes munkamenete vonattalanítva", - "revokeAllSessionsFailed": "A munkamenetek vonattalanítása sikertelen", - "revokeSessionFailed": "A munkamenet vonattalanítása sikertelen", - "addRole": "Szerepkör hozzáadása", - "noCustomRoles": "Nincs definiált egyedi szerepkör", - "removeRoleFailed": "A szerepkör eltávolítása sikertelen", - "assignRoleFailed": "A szerepkör hozzárendelése sikertelen", - "userAdminAccess": "Rendszergazda", - "userAdminAccessDesc": "Teljes hozzáférés az összes rendszergazdai beállításhoz", - "userRoles": "Szerepkörök", - "revokeAllUserSessions": "Összes munkamenet vonattalanítása", - "revokeAllUserSessionsDesc": "Újrajelentkezés kényszerítése minden eszközön", - "revoke": "Vonattalanítás", - "deleteUserWarning": "A felhasználó törlése végleges.", - "deleteUser": "{{username}} törlése", - "deleting": "Törlés...", - "deleteUserFailed": "A felhasználó törlése sikertelen", - "deleteUserSuccess": "A(z) \"{{username}}\" felhasználó törölve", - "deleteRoleSuccess": "A(z) \"{{name}}\" szerepkör törölve", - "revokeKeySuccess": "A(z) \"{{name}}\" kulcs vonattalanítva", - "revokeKeyFailed": "A kulcs vonattalanítása sikertelen", - "copiedToClipboard": "Vágólapra másolva", - "done": "Kész", - "createUserTitle": "Felhasználó létrehozása", - "createUserDesc": "Helyi fiók létrehozása.", - "createUserUsername": "Felhasználónév", - "createUserPassword": "Jelszó", - "createUserPasswordHint": "Minimum 6 karakter.", - "createUserEnterUsername": "Adja meg a felhasználónevet", - "createUserSubmit": "Felhasználó létrehozása", - "editUserTitle": "Felhasználó kezelése: {{username}}", - "editUserDesc": "Szerepkörök, rendszergazdai státusz, munkamenetek és fiókbeállítások szerkesztése.", - "editUserUsername": "Felhasználónév", - "editUserAuthType": "Hitelesítési típus", - "editUserAdminStatus": "Rendszergazdai státusz", - "editUserUserId": "Felhasználóazonosító", - "linkAccountTitle": "Fiókok összekapcsolása", - "linkAccountDesc": "A(z) {{username}} külső fiók egyesítése egy meglévő helyi fiókkal.", - "linkAccountDescLocal": "A(z) {{username}} helyi fiók összekapcsolása egy meglévő, kizárólag külső fiókkal.", - "linkAccountWarningTitle": "Ez a következőket fogja tenni:", - "linkAccountEffect1": "Törli a kizárólag külső fiókot", - "linkAccountEffect2": "Hozzáadja a külső bejelentkezést a célfiókhoz", - "linkAccountEffect3": "Lehetővé teszi a külső és a jelszavas bejelentkezést is", - "linkAccountTargetUsername": "Helyi fiók felhasználóneve", - "linkAccountTargetPlaceholder": "Adja meg a csatolandó helyi fiók felhasználónevét", - "linkAccountExternalUsername": "Külső fiók felhasználóneve", - "linkAccountExternalPlaceholder": "Adja meg a kizárólag külső fiók felhasználónevét, amelyet össze kell vonni", - "linkAccountExternalNotFound": "Nem található kizárólag külső fiók ezzel a felhasználónévvel", - "linkAccounts": "Fiókok összekapcsolása", - "linkAccountSuccess": "A fiókok sikeresen összekapcsolva", - "linkAccountFailed": "A fiókok összekapcsolása sikertelen", - "linkAccountInProgress": "Összekapcsolás...", - "unlinkAccountTitle": "Külső bejelentkezés leválasztása", - "unlinkAccountDesc": "A külső bejelentkezés eltávolítása a(z) {{username}} felhasználótól. A felhasználó ezentúl csak jelszavával tud bejelentkezni.", - "unlinkAccountWarning": "Ez eltávolítja a külső bejelentkezést erről a fiókról. A felhasználónak rendelkeznie kell jelszóval a további bejelentkezésekhez.", - "unlinkAccount": "Külső bejelentkezés leválasztása", - "unlinkAccountInProgress": "Leválasztás...", - "unlinkAccountSuccess": "A külső bejelentkezés leválasztva", - "unlinkAccountFailed": "A külső bejelentkezés leválasztása sikertelen", - "updateRegistrationFailed": "A regisztrációs beállítás frissítése sikertelen", - "updatePasswordLoginFailed": "A jelszavas bejelentkezés beállításának frissítése sikertelen", - "updateSecondFactorAfterExternalLoginFailed": "A második hitelesítési tényező beállításának frissítése sikertelen", - "updatePasswordResetFailed": "A jelszó-visszaállítás beállításának frissítése sikertelen", - "sessionTimeoutRange2": "A munkamenet időtúllépésének 1 és 720 óra között kell lennie", - "sessionTimeoutSaved": "A munkamenet időtúllépése mentve", - "sessionTimeoutSaveFailed": "A munkamenet időtúllépésének mentése sikertelen", - "monitoringIntervalInvalid": "Érvénytelen intervallumértékek", - "monitoringSaved": "A monitorozási beállítások mentve", - "monitoringSaveFailed": "A monitorozási beállítások mentése sikertelen", - "logLevelUpdateFailed": "A naplózási szint frissítése sikertelen", - "createUserRequired": "A felhasználónév és a jelszó megadása kötelező", - "createUserPasswordTooShort": "A jelszónak legalább 6 karakter hosszúnak kell lennie", - "createUserSuccess": "A(z) \"{{username}}\" felhasználó létrehozva", - "createUserFailed": "A felhasználó létrehozása sikertelen", - "updateAdminStatusFailed": "Az adminisztrátori státusz frissítése sikertelen", - "allSessionsRevoked": "Összes munkamenet visszavonva", - "revokeSessionsFailed": "A munkamenetek visszavonása sikertelen", - "manageUserData": "Felhasználói adatok kezelése", - "backToUsers": "Vissza a felhasználókhoz", - "manageTabAccount": "Fiók", - "manageTabHosts": "Hostok", - "manageTabCredentials": "Hitelesítő adatok", - "manageTabSessions": "Munkamenetek", - "manageTabDanger": "Veszélyes", - "manageEditorBack": "Vissza a(z) {{username}} adataihoz", - "dataLockedBadge": "ZÁROLVA", - "dataLockedNotice": "A(z) {{username}} adatai addig zárolva maradnak, amíg a felhasználó legközelebb be nem jelentkezik. Addig a hostjai, hitelesítő adatai és kódrészletei nem tekinthetők meg és nem szerkeszthetők.", - "resetPasswordTitle": "Jelszó visszaállítása", - "resetPasswordExternalOnly": "Ez a felhasználó egy külső szolgáltatón keresztül jelentkezik be, és nincs jelszava.", - "resetPasswordPlaceholder": "Új jelszó", - "resetPasswordBtn": "Visszaállítás", - "resetPasswordWorking": "Visszaállítás...", - "resetPasswordSuccess": "Jelszó visszaállítva", - "resetPasswordSuccessWiped": "Jelszó visszaállítva. A felhasználó titkosított adatai törlődtek.", - "resetPasswordFailed": "A jelszó visszaállítása sikertelen", - "resetPasswordConfirmWipe": "A(z) {{username}} nem jelentkezett be a titkosítási frissítés óta, így az adatai nem állíthatók helyre. A mostani visszaállítás törli a hostjait, hitelesítő adatait és kódrészleteit. Folytatja?", - "manageApiKeys": "API-kulcsok", - "apiKeyNamePlaceholder": "Kulcs neve", - "apiKeyCopyNotice": "Másolja le ezt a kulcsot most, mert többé nem lesz megjelenítve.", - "noApiKeysForUser": "Nincs API-kulcs", - "apiKeyDeleteFailed": "Az API-kulcs törlése sikertelen", - "exportUserData": "Adatexportálás", - "exportUserDataDesc": "Töltsd le a felhasználó hostjait, hitelesítő adatait és fájlkezelő adatait JSON formátumban. A titkosított adatok visszafejtésre kerülnek.", - "exportUserDataSuccess": "A felhasználó adatai exportálva", - "exportUserDataFailed": "A felhasználó adatainak exportálása sikertelen", "hostsCount_one": "{{count}} host", "hostsCount_other": "{{count}} host", - "addHostForUser": "Host hozzáadása", - "noHostsForUser": "Ennek a felhasználónak nincsenek hostjai", - "connectToHost": "Csatlakozás", - "deleteHostConfirm": "Törli a(z) {{username}} tulajdonában lévő „{{name}}” hostot?", - "hostDeletedSuccess": "Host törölve", - "hostDeleteFailed": "A host törlése sikertelen", "credentialsCount_one": "{{count}} hitelesítő adat", "credentialsCount_other": "{{count}} hitelesítő adat", - "addCredentialForUser": "Hitelesítő adat hozzáadása", - "noCredentialsForUser": "Ennek a felhasználónak nincsenek hitelesítő adatai", - "deleteCredentialConfirm": "Törli a(z) {{username}} tulajdonában lévő „{{name}}” hitelesítő adatot?", - "credentialDeletedSuccess": "Hitelesítő adat törölve", - "credentialDeleteFailed": "A hitelesítő adat törlése sikertelen", - "noSessionsForUser": "Nincs aktív munkamenet", - "deleteSuccessorLabel": "Hostok és hitelesítő adatok átadása:", - "deleteSuccessorMe": "Engem (a törlő adminisztrátort)", - "deleteSuccessorNone": "Senkit, törölje őket", - "deleteSuccessorDesc": "A felhasználó által megosztott minden adat továbbra is működik az új tulajdonosnál; ha senkit nem választasz, a hostok, hitelesítő adatok és megosztások törlődnek.", - "deleteUserDangerDesc": "A(z) {{username}} felhasználó és minden adata (hostok, hitelesítő adatok, kódrészletek, előzmények) végleges törlése. Ez nem vonható vissza.", - "deleteUserConfirm": "Véglegesen törli a(z) {{username}} felhasználót és minden adatát?", - "deleteUserAdminBlocked": "Az adminisztrátori státusz eltávolítása szükséges a felhasználó törlése előtt.", - "createRoleRequired": "A név és a megjelenítési név megadása kötelező", - "createRoleSuccess": "A(z) „{{name}}” szerepkör létrehozva", - "createRoleFailed": "A szerepkör létrehozása sikertelen", - "apiKeyNameRequired": "A kulcsnév megadása kötelező", - "apiKeyUserRequired": "A felhasználóazonosító megadása kötelező", - "apiKeyCreatedSuccess": "A(z) „{{name}}” API-kulcs létrehozva", - "apiKeyCreateFailed": "Az API-kulcs létrehozása sikertelen", - "exportSuccess": "Az adatbázis exportálása sikeres", - "exportFailed": "Az adatbázis exportálása sikertelen", - "importSelectFile": "Kérlek, először válassz egy fájlt", - "importCompleted": "Az importálás befejeződött: {{total}} elem importálva, {{skipped}} kihagyva", - "importFailed": "Az importálás sikertelen: {{error}}", - "importError": "Az adatbázis importálása sikertelen", - "sectionHostDefaults": "Host alapértelmezések", "rolePermissions": { "count_one": "{{count}} jogosultság", - "count_other": "{{count}} jogosultság", - "editAction": "Jogosultságok szerkesztése", - "loadError": "A jogosultságkatalógus betöltése sikertelen", - "saved": "A szerepkör jogosultságai mentve", - "saveError": "A szerepkör jogosultságainak mentése sikertelen", - "save": "Mentés", - "saving": "Mentés...", - "pluginDisabled": "Bővítmény letiltva", "groups": { "hosts": "Hostok", "credentials": "Hitelesítő adatok", "admin": "Adminisztráció" } - }, - "notificationPrivateEndpoints": "Megengedett privát értesítési hostok", - "notificationPrivateEndpointsDesc": "Azok a pontos privát hostok, amelyeket az értesítési csatornák elérhetnek. Vesszővel válaszd el őket.", - "updateNotificationEndpointsFailed": "Az értesítési végpontok engedélylistájának frissítése sikertelen", - "secondFactorsSectionTitle": "Másodlagos hitelesítési módszerek", - "secondFactorsNone": "Nincs regisztrált másodlagos hitelesítési módszer", - "secondFactorUnavailable": "Nem elérhető", - "resetSecondFactors": "Másodlagos hitelesítési módszerek visszaállítása", - "resetSecondFactorsConfirm": "Eltávolítja a(z) {{username}} összes másodlagos hitelesítési módszerét? A jelszavával vagy SSO-val tud bejelentkezni, és újra regisztrálhatja őket.", - "secondFactorsResetSuccess": "Másodlagos hitelesítők visszaállítva", - "secondFactorsResetFailed": "A másodlagos hitelesítők visszaállítása sikertelen", - "passwordLoginForced": "A jelszavas bejelentkezés kikapcsolva, de mivel nincs más bejelentkezési módszer engedélyezve, ideiglenesen bekapcsolva marad. Így senki sem zárja ki magát.", - "sslNotRenewed": "Ezt a tanúsítványt semmi nem újítja meg automatikusan. Lejárati dátuma: {{date}}. Kapcsold be az automatikus megújítást az ACME-tanúsítványok szakaszban, vagy tölts fel egy újat addig.", - "sslSelfSigned": "Termix által létrehozott önállóan aláírt tanúsítvány. A böngészők figyelmeztetést fognak megjeleníteni róla.", - "sslRenewedBy": "Automatikusan megújítva a(z) {{plugin}} által", - "sslIssuer": "Kibocsátó: {{issuer}}", - "sslNames": "Érvényes a következő nevekhez: {{names}}", - "sslManualTitle": "Tanúsítvány feltöltése", - "updateExternalAutoProvisionFailed": "Az automatikus létrehozási beállítás frissítése sikertelen", - "hostTags": "Előre definiált gazdagépgombok", - "hostTagsDesc": "Címkék, amelyeket minden felhasználó javaslatként lát a gazdagép szerkesztőjében. Nyomj Szóközt vagy Entert egy új hozzáadásához. Egy címke eltávolítása innen nem törli a gazdagépekről.", - "hostTagsError": "A gazdagép-címke-javaslatok betöltése vagy mentése sikertelen.", - "revokeAllSessionsConfirm": "Kijelentkeztetjük {{username}} felhasználót mindenhol?", - "revokeSessionConfirm": "Kijelentkeztetjük ezt a munkamenetet?", - "revokeSession": "Kijelentkezés", - "deleteRoleConfirm": "Töröljük a(z) {{name}} szerepkört?", - "revokeKeyConfirm": "Megvonjuk a(z) {{name}} API-kulcsot?", - "revokeKey": "Megvonás" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Hova", - "who": "Ki", - "hostLabel": "Gazdagép", - "hostPlaceholder": "192.168.1.1 vagy example.com", - "portLabel": "Port", - "usernameLabel": "Felhasználónév", - "usernamePlaceholder": "felhasználónév", - "authLabel": "Hitelesítés", - "passwordLabel": "Jelszó", - "passwordPlaceholder": "jelszó", - "privateKeyLabel": "Privát kulcs", - "privateKeyPlaceholder": "Illeszd be a privát kulcsot...", - "credentialLabel": "Hitelesítő adat", - "credentialPlaceholder": "Válassz egy mentett hitelesítő adatot", - "protocolLabel": "Protokoll", - "domainLabel": "Domain", - "domainPlaceholder": "opcionális", - "connectToAction": "Csatlakozás a(z) {{name}}-hez", - "sshProtocol": "SSH", - "noTarget": "Nincs telepítve olyan, ami csatlakozhatna ehhez a gazdagéptípushoz" + "usernameLabel": "Felhasználónév" }, "keybindings": { - "description": "Billentyűkombinációk rendelése a terminálban és az alkalmazásban végzett műveletekhez, vagy a beépített gyorsbillentyűk módosítása.", - "defaultsHeading": "Beépített gyorsbillentyűk", - "fixedHeading": "Alkalmazás gyorsbillentyűi", - "fixed": { - "splitRight": "Megosztás jobbra", - "splitDown": "Megosztás lefelé", - "zoomPane": "A fókuszban lévő panel nagyítása", - "navigatePane": "Váltás a panelek között", - "nextTab": "Következő lap", - "previousTab": "Előző lap", - "jumpTab": "Ugrás lapra", - "previousView": "Vissza az előző oldalsáv-nézethez", - "fullscreen": "Teljes képernyő be/ki" - }, - "customHeading": "Egyéni gyorsbillentyűk", - "addBinding": "Gyorsbillentyű hozzáadása", - "addBindingTitle": "Gyorsbillentyű hozzáadása", - "editBindingTitle": "Gyorsbillentyű szerkesztése", - "loading": "Betöltés...", - "noCustomBindings": "Még nincsenek egyéni gyorsbillentyűk", - "defaultBadge": "Alapértelmezett", - "customizedBadge": "Egyéni", - "customize": "Testreszabás", - "resetToDefault": "Alapértelmezettre visszaállítás", - "resetAllToDefaults": "Összes alapértelmezettre visszaállítása", - "cancel": "Mégse", - "saveBinding": "Gyorsbillentyű mentése", - "saveError": "A gyorsbillentyűk mentése sikertelen", - "pressKeysToRecord": "Billentyűkombináció", - "pressKeysPlaceholder": "Kattints ide, majd nyomd meg a billentyűket", - "recording": "Nyomd meg a billentyűket...", - "comboRequiredError": "Először adj meg egy billentyűkombinációt", - "conflictWarning": "Ez a kombináció már a(z) {{combo}} parancshoz van rendelve. A mentés mindkettő kiváltását eredményezi.", - "actionLabel": "Művelet", "actionNextTab": "Váltás a következő fülre", "actionPreviousTab": "Váltás az előző fülre", "actionOpenCommandPalette": "Gyorskeresés megnyitása", - "actionReconnectSession": "Jelenlegi munkamenet újracsatlakoztatása", - "unavailableAction": "{{type}} (nem elérhető)", - "actionRequiredError": "Először válassz egy műveletet", - "deleteConfirm": "Törli ezt a billentyűkombinációt?", - "resetAllConfirm": "Visszaállítja az összes billentyűkombinációt az alapértelmezettre?" + "actionReconnectSession": "Jelenlegi munkamenet újracsatlakoztatása" }, "userProfile": { - "storageModeLocal": "Böngésző", - "storageModeCloud": "Adatbázis", - "storageModeDescription": "A böngésző csak ebben a böngészőben tárolja a beállításokat. Az adatbázis szinkronizál a szerverrel, és bármilyen eszközön betölti azokat.", - "resetToDefaults": "Alapértelmezettre visszaállítás", - "resetToDefaultsSuccess": "A beállítások visszaállítva az alapértelmezett értékekre.", - "storageModeSwitch": "Beállítások tárolása", - "sectionAccount": "Fiók", - "desktopProfileTitle": "Csak ezen az eszközön", - "desktopProfileDescription": "Ez a profil ezen az eszközön él, és önállóan jelentkez be. Csatlakoztasd egy Termix-szerverhez, hogy ugyanazokat a hosztokat és beállításokat használd minden eszközön.", - "sectionInterface": "Felület", - "interfacePresetDesc": "Hány részletet jelenít meg a Termix. Minden funkció továbbra is elérhető marad.", "preset_simple": "Egyszerű", "preset_simple_desc": "Csak a legfontosabbak.", "preset_balanced": "Kiegyensúlyozott", "preset_balanced_desc": "A szabványos elrendezés.", "preset_advanced": "Haladó", "preset_advanced_desc": "Minden bekapcsolva, sűrűn elrendezve.", - "presetClearOverrides": "Összes visszaállítása", - "presetOverridesTitle": "Testreszabott", - "presetRevertArea": "Visszavonás", - "presetConfirmTitle": "Váltás a(z) {{preset}} beállításra?", - "presetConfirmDesc": "Ez visszaállítja az oldalsávot, a navigációt, a vezérlőpult elrendezését, a terminál eszközsorát és a fájlkezelő nézetét. A hosztjaid, hitelesítő adataid és a kezdőoldalad érintetlenek maradnak.", - "presetConfirmApply": "Beállítás alkalmazása", - "runSetupAgainDesc": "Ismételd meg az első indítási beállítást.", - "runSetupAgainButton": "Beállítás futtatása", "uiArea_chrome": "Alkalmazsáv", "uiArea_hostList": "Hosztlista", "uiArea_credentialList": "Hitelesítő adatok listája", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Terminál", "uiArea_fileManager": "Fájlkezelő", "uiArea_hostEditor": "Hoszt szerkesztő", - "sectionAppearance": "Megjelenés", - "sectionSecurity": "Biztonság", - "sectionApiKeys": "API-kulcsok", - "sectionData": "Adatok", - "usernameLabel": "Felhasználónév", - "roleLabel": "Szerepkör", - "roleAdministrator": "Rendszergazda", - "authMethodLabel": "Hitelesítési módszer", - "authMethodLocal": "Helyi", - "twoFaLabel": "2FA", - "twoFaOn": "Be", - "twoFaOff": "Ki", - "versionLabel": "Verzió", - "cliTitle": "Termix CLI", - "cliDescription": "Terminálok megnyitása, parancsok futtatása és fájlok mozgatása a saját shelljéből.", - "cliLearnMore": "További információ", - "deleteAccount": "Fiók törlése", - "deleteAccountDescription": "Fiókja végleges törlése", - "deleteButton": "Törlés", - "deleteAccountPermanent": "Ez a művelet végleges, és nem vonható vissza.", - "deleteAccountWarning": "Az összes munkamenet, host, hitelesítő adat és beállítás véglegesen törlődik.", - "confirmPasswordDeletePlaceholder": "Adja meg a jelszavát a megerősítéshez", "languageLabel": "Nyelv", "themeLabel": "Téma", "fontSizeLabel": "Betűméret", "interfaceFontLabel": "Felület betűtípusa", "interfaceFontDescription": "Az alkalmazás felületének betűtípusát módosítja. A terminálprofilok megtartják a saját betűtípus-beállításaikat.", "accentColorLabel": "Kiemelő szín", - "keyboardShortcuts": "Gyorsbillentyűk", - "keyboardShortcutsDescription": "A terminál másolás, beillesztés és parancs gyorsbillentyűinek testreszabása", - "manageShortcuts": "Kezelés", - "commandPalette": "Parancspaletta", - "commandPaletteDesc": "Gyorsbillentyű engedélyezése", - "reopenTabsOnLogin": "Lapok újranyitása bejelentkezéskor", - "reopenTabsOnLoginDesc": "A megnyitott lapok visszaállítása bejelentkezéskor vagy az oldal frissítésekor, még másik eszközről is", - "confirmTabClose": "Lap bezárásának megerősítése", - "confirmTabCloseDesc": "Kérdezzen rá a terminállapok bezárása előtt", - "showTabNumbers": "Lapszámok megjelenítése", - "showTabNumbersDesc": "Szám megjelenítése minden lapon a könnyebb azonosítás érdekében", - "settingsAppRail": "Alkalmazásvázlat", - "sidebarSettingsMoved": "A host oldalsáv megjelenítési beállításai átkerültek a Testreszabás oldalsáv panelre, amely a Hostok eszköztárból nyitható meg.", - "showHostTags": "Host címkék megjelenítése", - "showHostTagsDesc": "Címkék megjelenítése a host listában", - "statusColors": "Valós állapot színek", - "statusColorsDesc": "Zöld/piros szín használata az online/offline állapot jelzésére a kiemelő szín helyett", - "pinAppRail": "Alkalmazásvázlat rögzítése", - "pinAppRailDesc": "A bal oldali alkalmazásvázlat állandóan kibontott állapotban marad, nem csak rámutatáskor", - "expandAppRailOnHover": "Alkalmazásvázlat kibontása rámutatáskor", - "expandAppRailOnHoverDesc": "A bal oldali alkalmazásvázlat kibontásának engedélyezése, amikor a mutató rákerül", - "appRailHoverPushesContent": "Tartalom eltolása kibontáskor", - "appRailHoverPushesContentDesc": "Helyet biztosít a kibontott sávnak, ahelyett, hogy a lap fölé nyitná. A nyitott munkamenetek (például távoli asztal) minden alkalommal átméreteződnek.", - "showPinAppRailButton": "Alkalmazásvázlat rögzítés gomb megjelenítése", - "showPinAppRailButtonDesc": "Gomb megjelenítése az alkalmazásvázlatban a rögzítéshez. Alapértelmezetten ki van kapcsolva.", - "settingsNavigation": "Navigáció", - "navigationTabsDesc": "Válassza ki, mely lapok jelenjenek meg az alkalmazásvázlatban", - "settingsUpdates": "Frissítések", - "disableUpdateChecks": "Frissítésellenőrzés letiltása", - "disableUpdateChecksDesc": "Frissítések keresésének leállítása", - "changePassword": "Jelszó módosítása", - "currentPasswordLabel": "Jelenlegi jelszó", - "currentPasswordPlaceholder": "Jelenlegi jelszó", - "newPasswordLabel": "Új jelszó", - "newPasswordPlaceholder": "Új jelszó", - "confirmPasswordLabel": "Új jelszó megerősítése", - "confirmPasswordPlaceholder": "Új jelszó megerősítése", - "updatePassword": "Jelszó frissítése", - "createApiKeyTitle": "API kulcs létrehozása", - "createApiKeyDescription": "Új API kulcs generálása programozott hozzáféréshez.", - "apiKeyNameLabel": "Név", - "apiKeyNamePlaceholder": "pl. CI Pipeline", - "expiryDateLabel": "Lejárat dátuma", - "optional": "opcionális", - "cancel": "Mégse", - "createKey": "Kulcs létrehozása", - "apiKeyCreatedWarning": "Kulcs létrehozva – másolja le most, mert nem lesz újra megjelenítve.", - "copyApiKey": "API-kulcs másolása", - "copiedToClipboard": "Vágólapra másolva", "apiKeyCount_one": "{{count}} kulcs", - "apiKeyCount_other": "{{count}} kulcs", - "newKey": "Új kulcs", - "noApiKeys": "Még nincsenek API-kulcsok.", - "apiKeyActive": "Aktív", - "apiKeyUsageHint": "Tartsa be a kulcsot a", - "apiKeyUsageHintHeader": "fejlécbe.", - "apiKeyPermissionsHint": "A kulcsok öröklik a létrehozó felhasználó jogosultságait.", - "exportData": "Adataim exportálása", - "exportDataDesc": "Töltse le a hostok, hitelesítő adatok és beállítások mentését, hogy áthelyezze őket egy másik eszközre", - "export": "Exportálás", - "exporting": "Exportálás...", - "importData": "Adataim importálása", - "importDataDesc": "Helyreállítja a hostokat, hitelesítő adatokat és beállításokat egy .sqlite mentésfájlból", - "importDataSelected": "Kijelölve: {{name}}", - "selectFile": "Fájl kiválasztása", - "changeFile": "Váltás", - "import": "Importálás", - "importing": "Importálás...", - "exportSuccess": "Az adatok sikeresen exportálva", - "exportFailed": "Az adatok exportálása sikertelen", - "importSelectFile": "Kérjük, először válasszon ki egy fájlt", - "importCompleted": "Importálás befejezve: {{total}} elem importálva, {{skipped}} kihagyva", - "importFailed": "Importálás sikertelen: {{error}}", - "roleUser": "Felhasználó", - "authMethodDual": "Kétlépcsős hitelesítés", - "authMethodExternal": "Külső", - "done": "Kész", - "apiKeyNameRequired": "A kulcs neve kötelező", - "apiKeyCreated": "A(z) \"{{name}}\" API-kulcs létrehozva", - "apiKeyCreateFailed": "Az API-kulcs létrehozása sikertelen", - "apiKeyUser": "Felhasználó", - "apiKeyExpires": "Lejár", - "apiKeyRevoked": "A(z) \"{{name}}\" API-kulcs visszavonva", - "apiKeyRevokeFailed": "Az API-kulcs visszavonása sikertelen", - "passwordFieldsRequired": "A jelenlegi és az új jelszó megadása kötelező", - "passwordMismatch": "A jelszavak nem egyeznek", - "passwordTooShort": "A jelszónak legalább 6 karakter hosszúnak kell lennie", - "passwordUpdated": "A jelszó sikeresen frissítve", - "passwordUpdateFailed": "A jelszó frissítése sikertelen", - "deletePasswordRequired": "A fiók törléséhez meg kell adnia a jelszavát", - "deleteFailed": "A fiók törlése sikertelen", - "deleting": "Törlés...", "colorPickerTooltip": "Színválasztó megnyitása", "themeSystem": "Rendszer", "themeLight": "Világos", @@ -1755,18 +1122,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Bejelentkezve a(z) {{server}} rendszerhez", - "linkedProfileDescription": "Ez az eszköz a szerveren lévő fiókodat használja, és a adataid másolatát is tárolja, így offline is működik.", - "manageSync": "Szinkronizálás kezelése", - "setUpSync": "Csatlakoztatás egy szerverhez", - "settingsTabsAndShortcuts": "Lapok és gyorsbillentyűk", - "onBetaTitle": "Béta verziót használsz", - "onBetaDescription": "Köszönjük a tesztelést. Jelezd, ha valami nem működik.", - "tryBetaTitle": "Próbáld ki az új funkciókat korán", - "tryBetaDescription": "Csatlakozz a béta programhoz a Frissítések menüpontban.", - "sendBetaFeedback": "Béta visszajelzés küldése", - "openUpdates": "Frissítések" + "themeGruvbox": "Gruvbox" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "A(z) {{name}} bővítményre szükség van a(z) {{list}} működéséhez. Először kapcsolja ki vagy távolítsa el azokat.", "missingDependencies": "A(z) {{name}} bővítménynek szüksége van a(z) {{list}} bővítményre, amely nincs telepítve.", "consentChanged": "Mióta megnézte, megváltozott, amit ez a bővítmény kér. Ellenőrizze újra a listát.", - "upload": "Nem sikerült beolvasni a(z) {{name}} fájlt: {{error}}", - "developerMode": "Nem sikerült módosítani a fejlesztői módot: {{error}}" + "upload": "Nem sikerült beolvasni a(z) {{name}} fájlt: {{error}}" }, "data": { "title": "Tárolt adatok", @@ -2145,13 +1500,7 @@ "browsePlugins": "Bővítmények böngészése", "loading": "Betöltés", "developer": { - "title": "Bővítmény-fejlesztői mód", - "hint": "Lehetővé teszi az adminisztrátorok számára, hogy .tmxplug fájlból telepítsenek bővítményeket a Bővítmények fülön, a nyilvántartási ellenőrzések nélkül. Használja saját bővítményei fejlesztéséhez és teszteléséhez.", - "enableTitle": "Beállítja a fejlesztői módot?", - "enableBody": "Az adminisztrátorok olyan fájlokból is telepíthetnek bővítményeket, amelyeket a Termix nem ellenőrzött. Egy bővítmény bármit megtehet, amit a képességei engednek, ezért csak akkor kapcsolja be, ha bővítményeket fejleszt vagy tesztel.", - "enable": "Bekapcsolás", - "installFromFile": "Telepítés fájlból", - "signedOnly": "A TERMIX_REQUIRE_SIGNED_PLUGINS be van állítva, ezért a fájlból való telepítés továbbra is letiltva." + "installFromFile": "Telepítés fájlból" }, "count": { "downloads_one": "{{formatted}} letöltés", @@ -2189,71 +1538,7 @@ "secretSet": "Beállítva", "secretNotSet": "Nincs beállítva", "secretReplace": "Csere", - "pluginSettingsSaved": "Beállítások mentve", - "pluginSettingsInvalid": "Néhány beállítás nem menthető el. Ellenőrizze a kiemelt mezőket.", - "pluginSettingsSaveFailed": "A beállítások mentése sikertelen", - "pluginSettingsLoadFailed": "A beállítások betöltése sikertelen", - "featureUnavailable": "A(z) {{name}} jelenleg nem elérhető. Ezek a beállítások mentésre kerültek, de nem lépnek életbe.", - "account": "Fiók", - "security": "Biztonság", - "apiKeys": "API-kulcsok", - "data": "Adatok és szinkronizálás", - "interface": "Felület", - "appearance": "Megjelenés", - "keybindings": "Billentyűkombinációk", - "adminGeneral": "Általános", - "adminUsers": "Felhasználók", - "adminSessions": "Munkamenetek", - "adminRoles": "Szerepkörök", - "adminHostDefaults": "Host alapértelmezések", - "adminBranding": "Márkázás", - "adminDatabase": "Adatbázis", - "adminSsl": "SSL", - "adminApiKeys": "API-kulcsok", - "adminAuditLog": "Ellenőrzési napló", - "bandYou": "Ön fiókja", - "bandApp": "Ez az alkalmazás", - "bandPlugins": "Bővítmények", - "bandInstance": "Ez a szerver", - "searchPlaceholder": "Beállítások keresése", - "noResults": "Nincs találat.", - "pages": "Oldalak", - "instanceSettings": "Szerverbeállítások", - "nothingHere": "Itt nincs mit beállítani.", - "searchPage": "Keresés ezen az oldalon", - "noPageMatches": "Nincs találat ezen az oldalon.", - "updates": { - "title": "Frissítések", - "betaProgram": "Béta program", - "betaIntro": "A béta verziók a következő Termix kiadás korai változatai. Keddente és pénteken jelennek meg, ha van valami új, amit kipróbálhatsz. Tartalmazhatnak hibákat, és a visszajelzéseid teszik jobbá a stabil kiadást.", - "termixBetas": "Termix béták", - "termixBetasHint": "Tájékoztass az új bétákról, ne csak a stabil kiadásokról.", - "runningBetaBuild": "Béta verziót használsz. A kilépéshez váltson vissza egy stabil képre vagy telepítőre.", - "howToInstall": "Hogyan szerezd meg a bétát", - "desktopInstall": "Töltsd le a béta telepítőt, és telepítsd a jelenlegi helyére.", - "downloadBeta": "{{version}} letöltése", - "dockerInstall": "Váltson a béta címkére a képnél, és indítsa újra a konténert:", - "copy": "Másolás", - "copied": "Másolva", - "copyFailed": "Nem sikerült másolni", - "learnMore": "Tudj meg többet a bétákról", - "feedback": "Visszajelzés", - "feedbackHint": "Hibát találtál, vagy van egy ötleted? Közvetlenül a fejlesztőkhöz jut el, a verziószámod kitöltve.", - "sendFeedback": "Béta visszajelzés küldése", - "releases": "Kiadások", - "thisVersion": "Jelenlegi verzió", - "newestStable": "Legújabb stabil", - "newestBeta": "Legújabb béta", - "noRelease": "Jelenleg nincs", - "pluginBetas": "Bővítmény béták", - "pluginBetasIntro": "Minden bővítmény önállóan használhat bétákat. Ha kipróbálnád, nyisd meg, és nyomd meg a Béta kipróbálása gombot.", - "openPlugins": "Bővítmények megnyitása", - "waitingForStable": "Vissza a stabil verzióhoz. A {{version}} verzió marad, amíg nem jelenik meg újabb stabil kiadás.", - "backToStable": "Vissza a stabilhoz", - "allPluginsBeta": "Béták használata minden bővítményhez", - "allPluginsStable": "Minden bővítmény visszaállítása stabilra", - "saveFailed": "Nem sikerült menteni a változtatást" - } + "featureUnavailable": "A(z) {{name}} jelenleg nem elérhető. Ezek a beállítások mentésre kerültek, de nem lépnek életbe." }, "managerCard": { "refresh": "Frissítés", @@ -2263,83 +1548,13 @@ "filter": "Szűrés..." }, "sync": { - "server": "Termix szerver", - "account": "Fiók", - "status": "Állapot", - "never": "soha", - "justNow": "épp most", "minutesAgo_one": "{{count}} perce", "minutesAgo_other": "{{count}} perce", "hoursAgo_one": "{{count}} órája", "hoursAgo_other": "{{count}} órája", - "actionFailed": "Ez nem működött. Próbáld újra.", - "unlinkedTitle": "Csak ezen az eszközön", - "unlinkedBody": "A Termix önállóan működik ezen az eszközön. Kapcsold össze a Termix szervereddel, hogy minden szinkronban maradjon.", - "unlinkedPointHosts": "A hosztjaid, hitelesítő adataid, kódrészleteid és beállításaid követnek minden eszközre.", - "unlinkedPointOffline": "Minden továbbra is működik, ha a szerver nem érhető el, és később felzárkózik.", - "unlinkedPointAccount": "A szerver fiókoddal jelentkezel be, és a veled megosztott hosztok is megjelennek itt.", - "linkButton": "Összekötés egy szerverrel", - "state": { - "syncing": "Szinkronizálás", - "offline": "A szerver nem érhető el", - "error": "A szinkron leállt", - "signedOut": "Kijelentkezve", - "synced": "Szinkronizálva {{time}}" - }, "pending_one": "{{count}} változás vár a szinkronizálásra", "pending_other": "{{count}} változás vár a szinkronizálásra", - "signInAgain": "Jelentkezz be újra", - "syncNow": "Szinkronizálás most", - "unlink": "Leválasztás", - "unlinked": "Ez az eszköz már nincs összekötve", - "unlinkTitle": "Ezt az eszközt leválasztja?", - "unlinkDescription": "A szinkronizálás leáll, és kijelentkezik a szerverről. A mások által megosztott gazdagépek mindenképpen eltávolításra kerülnek erről az eszközről.", - "unlinkKeepTitle": "Adatok megtartása itt", - "unlinkKeepBody": "A gazdagépek, hitelesítő adatok és beállítások itt maradnak az eszközön, és önállóan működnek tovább.", - "unlinkRemoveTitle": "Szinkronizált adatok eltávolítása", - "unlinkRemoveBody": "A szerverről származó összes adat eltávolításra kerül erről az eszközről. Csak azok a gazdagépek maradnak, amelyeket kifejezetten itt tartott meg.", - "conflictsTitle": "Ütközések", - "conflictsDescription": "Ezeket egyszerre módosították itt és a szerveren is. Jelenleg a szerveri verzió van használatban. A saját verzió megtartásával azt küldheti a szervernek.", - "keepMine": "Saját verzió megtartása", - "keepServer": "Szerveri verzió megtartása", - "errorsTitle": "Nem szinkronizált", - "errorsDescription": "A szerver nem fogadta el ezeket a módosításokat. Ezek itt maradnak az eszközön.", - "errorPermission": "A szerveri fiókja nem jogosult erre a módosításra.", - "retry": "Újrapróbálkozás", - "whatSyncs": "Mi szinkronizálódik", - "whatSyncsDescription": "Kapcsolja ki azokat az elemeket, amelyeket csak ezen az eszközön szeretne megtartani.", - "coreGroup": "Termix", - "notOnServer": "A szerveren ez nem elérhető", - "notOnDevice": "Még nincs ezen az eszközön", - "localOnlyHint": "Egyes gazdagépeket vagy mappákat a beállításaikon keresztül is megtarthat itt az eszközön.", - "originTitle": "A kapcsolatok eredete", - "originDescription": "Csatlakozhat a gazdagépekhez erről az eszközről, vagy a szerveren keresztül. Ezt gazdagépenként módosíthatja.", - "originLocal": "Ez az eszköz", - "originRemote": "A szerver", - "entities": { - "hosts": "Gazdagépek", - "sshCredentials": "Hitelesítő adatok", - "sshFolders": "Mappák", - "userPreferences": "Beállítások", - "pluginUserSettings": "Bővítménybeállítások", - "sharedHosts": "Önnel megosztott gazdagépek", - "sharedCredentials": "Önnel megosztott hitelesítő adatok", - "vaultProfiles": "Vault-profilok", - "snippetFolders": "Kódrészlet-mappák", - "snippets": "Kódrészletek", - "dashboardServiceLinks": "Szolgáltatás-hivatkozások", - "homepageItems": "Főoldal-elemek", - "networkTopology": "Hálózati térkép", - "workspaces": "Munkaterületek", - "hostDefaults": "Gazdagép alapértelmezései", - "hostDefaultsAdmin": "Szerveri gazdagép-alapértelmezések", - "aiProviders": "AI-szolgáltatók", - "homepageLayouts": "Főoldal-elrendezések", - "accountProfile": "Fiókprofil" - }, "proxy": { - "title": "Fordított proxy", - "description": "Csak akkor szükséges, ha a szervere előtt valami, például a Cloudflare Access vagy egy bejelentkezési oldal áll.", "headersTitle": "További fejlécek", "headersHint": "Minden kérésnél elküldésre kerül a szerver felé, például egy Cloudflare Access szolgáltatási token.", "headerName": "Fejléc neve", @@ -2352,8 +1567,7 @@ "username": "Felhasználónév", "password": "Jelszó", "allowInvalidCertificate": "Önaláírt tanúsítvány megbízása", - "allowInvalidCertificateHint": "Csak saját szerver esetén, ha annak tanúsítványa nem ismert hatóságtól származik.", - "saved": "Mentve" + "allowInvalidCertificateHint": "Csak saját szerver esetén, ha annak tanúsítványa nem ismert hatóságtól származik." }, "problems": { "invalidUrl": "Ez nem úgy néz ki, mint egy webcím.", @@ -2391,6 +1605,27 @@ "linking": "Összekötés és az első szinkronizálás futtatása...", "linked": "Összekötve. Az adataid szinkronizálódnak.", "signedInAgain": "Bejelentkezve. A szinkronizálás újra fut." + }, + "entities": { + "hosts": "Gazdagépek", + "sshCredentials": "Hitelesítő adatok", + "sshFolders": "Mappák", + "userPreferences": "Beállítások", + "pluginUserSettings": "Bővítménybeállítások", + "sharedHosts": "Önnel megosztott gazdagépek", + "sharedCredentials": "Önnel megosztott hitelesítő adatok", + "vaultProfiles": "Vault-profilok", + "snippetFolders": "Kódrészlet-mappák", + "snippets": "Kódrészletek", + "dashboardServiceLinks": "Szolgáltatás-hivatkozások", + "homepageItems": "Főoldal-elemek", + "networkTopology": "Hálózati térkép", + "workspaces": "Munkaterületek", + "hostDefaults": "Gazdagép alapértelmezései", + "hostDefaultsAdmin": "Szerveri gazdagép-alapértelmezések", + "aiProviders": "AI-szolgáltatók", + "homepageLayouts": "Főoldal-elrendezések", + "accountProfile": "Fiókprofil" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "Ez a gazdagép saját értéket használ. Kattintson ide, hogy újra a(z) {{source}} alapértelmezett értékét használja", "clearTitle": "Ezen a szinten van beállítva. Kattintson ide az eltávolításához, és használja helyette a(z) {{source}} értékét", "inheritedTitle": "A(z) {{source}} alapértelmezett értékét követi", - "titleAdmin": "Szerver hoszt alapértelmezései", - "titleUser": "Saját hoszt alapértelmezéseim", - "titleFolder": "Mappa alapértelmezései: {{name}}", - "descriptionAdmin": "Alapértelmezett beállítások a szerver összes hosztjához. Egy felhasználó saját alapértelmezései, egy mappa alapértelmezései vagy maga a hoszt még mindig megadhatnak eltérő értéket. Módosítson egy mezőt az itt történő beállításhoz, vagy törölje, hogy ne legyen beállítva.", - "descriptionUser": "Alapértelmezett beállítások az Ön összes hosztjához, a szerver beállításai felülírásával. Egy mappa vagy maga a hoszt még mindig megadhatnak eltérő értéket. Módosítson egy mezőt az itt történő beállításhoz, vagy törölje, hogy ne legyen beállítva.", - "descriptionFolder": "Alapértelmezett beállítások ebben a mappában és almappáiban lévő hosztokhoz, a saját beállításai felülírásával. Egy hoszt még mindig megadhat eltérő értéket. Módosítson egy mezőt az itt történő beállításhoz, vagy törölje, hogy ne legyen beállítva.", - "save": "Alapértelmezések mentése", "saved_one": "Alapértelmezések mentve. {{count}} hoszt frissítve.", "saved_other": "Alapértelmezések mentve. {{count}} hoszt frissítve.", - "savedInBackground": "Alapértelmezések mentve. A hosztok frissítése a háttérben történik.", "appliedToHosts_one": "{{count}} gazda frissült az új alapértelmezett értékekkel.", "appliedToHosts_other": "{{count}} gazda frissült az új alapértelmezett értékekkel.", - "saveFailed": "Nem sikerült menteni az alapértelmezett értékeket", - "loadFailed": "Nem sikerült betölteni az alapértelmezett értékeket", - "confirmTitle": "Menti az alapértelmezett értékeket?", "confirmChanges_one": "{{count}} gazda követi ezeket az alapértelmezett értékeket, és megváltozik.", "confirmChanges_other": "{{count}} gazda követi ezeket az alapértelmezett értékeket, és megváltozik.", - "confirmNoChanges": "Nincs meglévő gazda, amely megváltozna. Az új gazdák ezekkel az alapértelmezett értékekkel indulnak.", - "menuMyDefaults": "Saját gazda-alapértelmezések", - "folderDefaultsAction": "Mappa alapértelmezései", - "adminSectionDescription": "Állítsa be azokat az alapértelmezett értékeket, amelyeket minden gazda követ ezen a szerveren, minden olyan beállításhoz, amellyel egy gazda rendelkezik, beleértve a bővítményekét is. A felhasználók és a mappák felülírhatják ezeket, és bármely gazda továbbra is használhatja a saját értékét.", - "editServerDefaults": "Szerver alapértelmezéseinek szerkesztése", - "resetMenu": "Visszaállítás", - "resetAll": "Minden visszaállítása az alapértelmezettre", - "resetCore": "Csatlakozás és SSH visszaállítása az alapértelmezettre", "resetDone_one": "{{count}} gép mostantól az alapértelmezett beállításokat követi.", "resetDone_other": "{{count}} gép mostantól az alapértelmezett beállításokat követi." }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "Mentve. Írjon be új értéket a helyettesítéshez." }, - "sharing": { - "revokeConfirm": "Elveszi a hozzáférést {{name}} számára?", - "revoke": "Hozzáférés visszavonása" - }, "manage": { - "searchSettings": "Beállítások keresése", - "noMatchingSettings": "Nincs egyező beállítás.", - "sections": "Szekciók", - "sectionNeedsAttention": "Valaminek itt a figyelmét kell felhívni", "needsAttention_one": "Egy dolog igényel figyelmet.", "needsAttention_other": "{{count}} dolog igényel figyelmet.", - "bandHost": "Gép", - "bandFeatures": "Protokollok és bővítmények", - "bandCredential": "Hitelesítő adat", - "sshConnection": "SSH-csatlakozás", - "errorAddressRequired": "Meg kell adni egy címet.", - "errorPortRange": "Használjon 1 és 65535 közötti portot.", - "defaults": "Alapértelmezett beállítások", - "searchHosts": "Gépek keresése", - "searchCredentials": "Hitelesítő adatok keresése", - "searchDefaults": "Alapértelmezett beállítások keresése", - "addCredential": "Hitelesítő adat hozzáadása", - "nothingMatches": "Nincs egyezés", - "nothingYet": "Itt még nincs semmi", - "emptyHostsHint": "Adjon hozzá egy gépet, és az itt jelenik meg, abban a mappában, ahová teszi.", - "emptyCredentialsHint": "A mentett hitelesítő adatokat bármely gép újra felhasználhatja.", - "collapse": "Összecsukás", - "expand": "Kibontás", - "cannotBeUndone": "Ez nem vonható vissza.", - "hostNotFound": "Nem található a gép. Próbálja meg frissíteni a listát.", "hostCount_one": "{{count}} gép", "hostCount_other": "{{count}} gép", "credentialCount_one": "{{count}} hitelesítő adat", - "credentialCount_other": "{{count}} hitelesítő adat", - "newHost": "Új gép", - "newCredential": "Új hitelesítő adat", - "advanced": "Haladó", - "pickHost": "Válasszon egy szerkesztendő gépet", - "pickCredential": "Válasszon egy szerkesztendő hitelesítő adatot", - "pickDefaults": "Válasszon egy szerkesztendő alapértelmezett szintet", - "pickHint": "A csatlakozással kapcsolatos minden itt található, csoportosítva a könnyebb megtalálhatóság érdekében." + "credentialCount_other": "{{count}} hitelesítő adat" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/id_ID.json b/src/ui/locales/translated/id_ID.json index 25f0b279e..a7746ec13 100644 --- a/src/ui/locales/translated/id_ID.json +++ b/src/ui/locales/translated/id_ID.json @@ -141,7 +141,6 @@ "continue": "Lanjutkan", "error": "Kesalahan", "unsavedChanges": "Perubahan belum disimpan", - "more": "Lainnya", "loading": "Memuat...", "host": "Host", "selectHost": "Pilih host...", @@ -154,7 +153,6 @@ "cancel": "Batal", "username": "Nama pengguna", "login": "Masuk", - "logout": "Keluar", "register": "Daftar", "password": "Kata sandi", "confirmPassword": "Konfirmasi Kata Sandi", @@ -165,8 +163,6 @@ "rename": "Ubah nama", "edit": "Sunting", "confirm": "Konfirmasi", - "next": "Selanjutnya", - "previous": "Sebelumnya", "refresh": "Muat ulang", "language": "Bahasa", "backendReconnected": "Sambungan server dipulihkan", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Baca tentang masing-masing" }, "desktopUpdates": { - "title": "Aplikasi desktop", - "mode": "Pembaruan", - "modeHint": "Bagaimana aplikasi ini mendapatkan versi baru.", - "manualModeHint": "Salinan ini tidak dapat memperbarui dirinya sendiri, jadi Termix hanya memberi tahu Anda ketika versi baru tersedia.", "modeAutomatic": "Otomatis", "modePrompt": "Tanya dulu", "modeNever": "Tidak pernah", @@ -247,15 +239,6 @@ "onboardingTitle": "Pembaruan aplikasi", "onboardingBody": "Aplikasi desktop sekarang dapat memperbarui dirinya sendiri. Pilih bagaimana Anda ingin versi baru tiba. Anda dapat mengubah ini nanti di Pengaturan, Pembaruan.", "onboardingManual": "Salinan aplikasi ini diinstal dengan cara yang tidak dapat memperbarui dirinya sendiri, jadi Termix akan memberi tahu Anda ketika versi baru tersedia dengan tautan untuk mengunduhnya.", - "status": "Versi {{version}}", - "statusIdle": "Belum diperiksa", - "statusChecking": "Memeriksa pembaruan", - "statusAvailable": "Versi {{version}} tersedia", - "statusDownloading": "Mengunduh {{version}} ({{progress}}%)", - "statusReady": "Versi {{version}} siap. Mulai ulang untuk menginstalnya.", - "statusUpToDate": "Anda memiliki versi terbaru", - "statusError": "Tidak dapat memeriksa pembaruan. Coba lagi nanti.", - "checkNow": "Periksa sekarang", "download": "Unduh", "restart": "Mulai ulang sekarang", "later": "Nanti", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Tutup", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Salin Kata Sandi", - "copySudoPassword": "Salin Kata Sandi Sudo", - "passwordCopied": "Kata sandi disalin ke papan klip", - "failedToCopyPassword": "Gagal menyalin kata sandi", - "refreshTab": "Segarkan koneksi", - "renameTab": "Ubah nama tab", "dashboard": "Dasbor", "quickConnect": "Koneksi Cepat", - "openAsTabHint": "Ctrl+klik atau klik tengah untuk membuka sebagai tab", - "openAsTab": "Buka sebagai tab", - "openInRightDock": "Buka di dok kanan", - "closeRightDock": "Tutup dok kanan", - "toggleRightDock": "Alihkan dok kanan", "hosts": "Host", "credentials": "Kredensial", "connections": "Koneksi", - "keepSideMenuOpen": "Tetap Buka Menu", - "collapseSideMenu": "Ciutkan Menu", - "roleAdministrator": "Administrator", - "roleUser": "Pengguna", "sync": "Sinkronisasi", "reconnectDisconnectedTerminals": "Hubungkan ulang semua terminal yang terputus", "reconnectingTerminals_other": "Menghubungkan ulang {{count}} terminal", @@ -296,29 +264,10 @@ "reconnectTerminalsFailed_other": "Gagal memulai penghubungan ulang {{count}} terminal", "fullscreenUnsupported": "Layar penuh tidak didukung oleh browser ini", "fullscreenFailed": "Gagal mengubah mode layar penuh", - "resetSidebarWidth": "Atur ulang lebar", - "collapseSidebar": "Ciutkan sidebar", - "openSidebar": "Buka sidebar", "confirmCloseHost": "Tutup {{host}}?", - "enterFullscreen": "Masuk layar penuh (Ctrl+Shift+F)", - "exitFullscreen": "Keluar layar penuh (Ctrl+Shift+F)", - "group": { - "objects": "Milik Anda", - "tools": "Alat", - "system": "Sistem" - }, - "searchEverything": "Cari host, tab, dan tindakan", - "search": "Cari", "hiddenCount_other": "{{count}} disembunyikan", - "showInRail": "Tampilkan di sidebar", - "moveUp": "Pindah ke atas", - "moveDown": "Pindah ke bawah", - "resetRailOrder": "Atur ulang urutan", - "hideFromRail": "Sembunyikan dari sidebar", - "openSettings": "Buka pengaturan", "settings": "Pengaturan", "manage": "Kelola", - "mobileNavigation": "Navigasi", "plugins": "Plugin" }, "hosts": { @@ -904,35 +853,14 @@ "importSummary": "Impor selesai: {{imported}} diimpor, {{updated}} diperbarui, {{failed}} gagal", "importHostsFailed": "Gagal mengimpor host" }, - "commandPalette": { - "searchPlaceholder": "Cari host, perintah, atau pengaturan...", - "quickActions": "Tindakan Cepat", - "navigation": "Navigasi", - "orShortcut": "atau", - "addNewHost": "Tambah Host Baru", - "adminSettings": "Pengaturan Admin", - "addCredential": "Tambah Kredensial", - "recentActivity": "Aktivitas Terbaru", - "serversAndHosts": "Server & Host", - "noHostsFound": "Tidak ada host yang cocok dengan \"{{search}}\"", - "links": "Tautan", - "navigate": "Navigasi", - "select": "Pilih", - "pluginActions": "Tindakan lainnya", - "noTargetTab": "Tidak ada tab terminal yang terbuka", - "documentation": "Dokumentasi" - }, "splitScreen": { "title": "Layar terbagi", "defaultLabel": "Bagian {{number}}", "splitRight": "Bagi ke kanan", "splitDown": "Bagi ke bawah", - "addToSplit": "Tambah ke {{split}}", "paneEmptyItem": "Panel {{index}}: kosong", "paneItem": "Panel {{index}}: {{label}}", "paneNumber": "Panel {{index}}", - "newPaneRight": "Panel baru di sebelah kanan", - "newPaneBelow": "Panel baru di bawah", "emptyTitle": "Panel kosong", "emptyHint": "Pilih sesuatu untuk ditampilkan di sini. Saat panel ini dipilih, apa pun yang Anda buka dari sidebar juga akan terbuka di sini.", "openTabs": "Buka tab", @@ -949,7 +877,6 @@ "clearPane": "Kosongkan panel ini", "zoom": "Perbesar panel", "unzoom": "Pulihkan tata letak", - "unsplit": "Hapus pembagian", "layouts": "Tata letak", "applyLayout": "Ubah tata letak", "maxPanes_other": "Pembagian layar dapat menampung hingga {{count}} panel", @@ -957,8 +884,6 @@ "dropHere": "Lepaskan untuk menampilkan di sini", "paneActions": "Tindakan panel", "dividerHint": "Seret untuk mengubah ukuran. Klik dua kali untuk meratakan.", - "openInSplit": "Buka di pembagian", - "openInNewSplit": "Pembagian baru dengan tab saat ini", "shortcuts": "Pintasan", "shortcutNavigate": "Pindah antar panel", "presets": { @@ -972,23 +897,6 @@ "grid6": "Grid enam" } }, - "connections": { - "noConnections": "Tidak ada koneksi", - "noConnectionsDesc": "Buka terminal, file manager, atau remote desktop untuk melihat koneksi di sini", - "connectedFor": "Terhubung selama {{duration}}", - "connected": "Terhubung", - "disconnected": "Terputus", - "reconnect": "Hubungkan Ulang", - "sectionOpen": "Terbuka", - "sectionBackground": "Latar Belakang", - "backgroundDesc": "Sesi tetap aktif selama {{minutes}} menit setelah terputus dan dapat dihubungkan kembali.", - "expiresIn": "Kadaluarsa dalam {{duration}}", - "search": "Cari koneksi...", - "noSearchResults": "Tidak ada koneksi yang cocok dengan pencarian Anda", - "rename": "Ubah nama sesi", - "forgetConfirm": "Akhiri sesi latar belakang untuk {{name}}?", - "forget": "Akhiri sesi" - }, "sshAuth": { "totpRequired": "Autentikasi Dua Faktor Diperlukan", "totpCodeLabel": "Kode Verifikasi", @@ -1126,474 +1034,46 @@ "placeholders": { "keyPassword": "kata sandi kunci", "pastePrivateKey": "Tempelkan kunci pribadi Anda di sini...", - "enterPassword": "Masukkan kata sandi Anda", - "apiKeyName": "mis., CI Pipeline", - "credentialName": "mis. Kunci SSH Produksi", - "optionalDetails": "Detail opsional...", - "sshUsername": "mis. root atau deploy", - "hostAddress": "10.0.0.1 atau example.com", - "hostName": "mis. Server Web Produksi" + "enterPassword": "Masukkan kata sandi Anda" }, "dashboard": { - "title": "Dasbor", - "github": "GitHub", - "reportBug": "Laporkan bug", - "discord": "Discord", - "docs": "Dokumentasi", - "donate": "Donasi", - "serverOverview": "Ikhtisar Server", - "version": "Versi", "updateAvailable": "Pembaruan Tersedia", - "beta": "Beta", - "uptime": "Waktu Aktif", - "database": "Database", - "healthy": "Sehat", - "error": "Kesalahan", - "totalHosts": "Total Host", - "totalCredentials": "Total Kredensial", - "recentActivity": "Aktivitas Terbaru", - "reset": "Reset", - "noRecentActivity": "Tidak ada aktivitas terbaru", - "quickActions": "Tindakan Cepat", - "addHost": "Tambah Host", - "addCredential": "Tambah Kredensial", - "adminSettings": "Pengaturan Admin", - "userProfile": "Profil Pengguna", - "serverStats": "Statistik Server", - "customizeLayout": "Sesuaikan Dasbor", - "justNow": "baru saja" + "beta": "Beta" }, "dashboardTab": { "stable": "STABIL", - "registerNewServer": "Daftarkan server baru", - "storeSshKeysOrPasswords": "Simpan kunci SSH atau kata sandi", - "manageUsersAndRoles": "Kelola pengguna dan peran", - "manageYourAccount": "Kelola akun Anda", - "hostStatus": "Status Host", - "noHostsConfigured": "Tidak ada host yang dikonfigurasi", - "checking": "MEMERIKSA", - "commandPalette": "Palet Perintah", - "done": "Selesai", - "clear": "Hapus", - "dragToResizeColumns": "Seret untuk mengubah ukuran kolom", - "hostsAvailable": "Host Tersedia", - "removeSection": "Hapus bagian", - "addSection": "Tambahkan bagian", - "allSectionsShown": "Semua sudah ada di dasbor.", - "fromPlugins": "Dari plugin", - "dropHere": "Letakkan bagian di sini", - "dragToReorder": "Seret bagian untuk mengubah urutannya", - "clearActivityConfirm": "Hapus aktivitas terbaru Anda?", - "resetConfirm": "Atur ulang dasbor ke tata letak default?", "onlineCount_other": "{{count}} online", "hostCount_other": "{{count}} host" }, "admin": { - "sectionGeneral": "Umum", - "sectionUsers": "Pengguna", - "sectionSessions": "Sesi", - "sectionRoles": "Peran", - "sectionDatabase": "Basis Data", - "sectionApiKeys": "Kunci API", - "sectionAuditLog": "Log Audit", - "sectionSsl": "Sertifikat HTTPS", - "sectionBranding": "White Label", - "brandingAppName": "Nama Aplikasi", - "brandingAppNameDesc": "Ditampilkan di layar login dan tab browser. Kosongkan untuk menggunakan \"Termix\".", - "brandingTagline": "Tagline", - "brandingTaglineDesc": "Ditampilkan di bawah nama aplikasi pada layar login. Kosongkan untuk menggunakan tagline default.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG, atau WEBP, hingga 750 KB. Mengganti ikon default di layar login dan tab browser.", - "brandingLogoUpload": "Unggah logo", - "brandingLogoReset": "Kembalikan ke default", - "brandingLogoInvalid": "Gambar tidak valid. Gunakan file PNG, JPEG, atau WEBP hingga 750 KB.", - "brandingSaved": "Pengaturan branding disimpan", - "brandingSaveFailed": "Gagal menyimpan pengaturan branding", - "sslDescription": "Sertifikat yang digunakan Termix untuk HTTPS. Unggah sertifikat Anda sendiri di sini, atau dapatkan dan perbarui dari Let's Encrypt di bagian Sertifikat ACME.", - "sslDocsLink": "Lihat dokumentasi SSL", - "sslCertStatus": "Status Sertifikat", - "sslCertStatusNone": "Tidak ada sertifikat", - "sslCertStatusValid": "Valid", - "sslCertStatusExpiring": "Akan kedaluwarsa", - "sslCertStatusExpired": "Kedaluwarsa", - "sslCertExpiresAt": "Kedaluwarsa {{date}}", - "sslInfoNote": "Setelah menerbitkan atau mengunggah sertifikat, Termix akan secara otomatis mengaktifkan HTTPS pada SSL_PORT (default 8443) selain port HTTP yang sudah ada. Pastikan port tersebut dipublikasikan/dipetakan ke kontainer ini agar dapat diakses.", - "sslManualCert": "Sertifikat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Kunci Privat (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Tempelkan sertifikat dan kunci privat Anda yang sudah ada, termasuk rantai lengkap jika diperlukan oleh CA Anda.", - "sslManualUpload": "Unggah & Pasang Sertifikat", - "sslManualUploadLoading": "Mengunggah sertifikat...", - "sslManualUploadSuccess": "Sertifikat berhasil diunggah dan dipasang", - "sslManualUploadFailed": "Pengunggahan sertifikat gagal", - "sslManualRequiresFields": "Sertifikat dan kunci privat wajib diisi", - "auditLogTotal": "{{total}} total entri", - "auditLogEmpty": "Tidak ada entri log audit ditemukan", - "auditLogSuccess": "Berhasil", - "auditLogFailed": "Gagal", - "auditLogClearFilters": "Hapus Filter", - "auditLogPage": "Halaman {{page}} dari {{totalPages}} ({{total}} total)", - "auditLogIp": "IP", - "auditLogResourceId": "ID Sumber Daya", - "auditLogFilterUser": "Pengguna", - "auditLogFilterAction": "Tindakan", - "auditLogFilterResourceType": "Jenis Sumber Daya", - "auditLogFilterStatus": "Status", - "auditLogFilterFrom": "Dari", - "auditLogFilterTo": "Ke", - "auditLogFilterAll": "Semua", - "allowRegistration": "Izinkan Pendaftaran Pengguna", - "allowRegistrationDesc": "Biarkan pengguna baru mendaftar sendiri dengan nama pengguna dan kata sandi", - "allowPasswordLogin": "Izinkan Masuk dengan Kata Sandi", - "allowPasswordLoginDesc": "Masuk dengan nama pengguna/kata sandi", - "externalAutoProvision": "Buat akun eksternal secara otomatis", - "externalAutoProvisionDesc": "Buat akun saat seseorang masuk pertama kali melalui login eksternal seperti SSO atau LDAP. Jika dimatikan, hanya orang yang sudah memiliki akun yang dapat masuk dengan cara tersebut", - "secondFactorAfterExternalLogin": "Minta faktor kedua setelah login eksternal (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Jika dimatikan, faktor kedua yang terdaftar hanya diminta setelah login kata sandi dan login lokal lainnya, seperti sebelumnya. Jika dihidupkan, faktor kedua diminta setelah setiap metode login, termasuk SSO dan LDAP.", - "allowPasswordReset": "Izinkan Pengaturan Ulang Kata Sandi", - "allowPasswordResetDesc": "Kode pengaturan ulang melalui log Docker", - "auditForwardingTitle": "Teruskan ke SIEM", - "auditForwardingDesc": "Kirim salinan setiap entri audit ke pengumpul eksternal sebagai NDJSON. Log lokal tetap menjadi sumber kebenaran.", - "auditForwardingEnvNotice": "Variabel lingkungan juga mengonfigurasi penerusan; URL yang disimpan di sini memiliki prioritas lebih tinggi.", - "auditForwardingToken": "Token Bearer (opsional)", - "auditForwardingTokenStored": "Token Bearer (tersimpan)", - "auditForwardingSaved": "Pengaturan penerusan audit disimpan", - "auditForwardingSaveError": "Gagal menyimpan pengaturan penerusan audit", - "sessionTimeout": "Batas Waktu Sesi", - "hours": "jam", - "sessionTimeoutRange": "Min 1j, maks 720j", - "monitoringDefaults": "Pengaturan Default Pemantauan", - "statusCheck": "Pemeriksaan Status", - "sec": "det", - "logLevel": "Tingkat Log", - "usersCount_other": "{{count}} pengguna", - "searchUsers": "Cari pengguna...", - "noUsers": "Tidak ada pengguna", - "noUsersMatch": "Tidak ada pengguna yang cocok dengan pencarian Anda", - "pageOf": "Halaman {{page}} dari {{total}}", - "createUser": "Buat", - "newRole": "Peran Baru", - "roleName": "Nama", - "roleDisplayName": "Nama Tampilan", - "roleDescription": "Deskripsi", - "rolesCount_other": "{{count}} peran", - "createRole": "Buat", - "creating": "Membuat...", - "exportDatabase": "Ekspor Basis Data", - "exportDatabaseDesc": "Unduh cadangan SQLite portabel dari semua host, kredensial, dan pengaturan", - "export": "Ekspor", - "exporting": "Mengekspor...", - "importDatabase": "Impor Basis Data", - "importDatabaseDesc": "Pulihkan dari cadangan .sqlite portabel di backend basis data apa pun", - "importDatabaseSelected": "Dipilih: {{name}}", - "selectFile": "Pilih File", - "changeFile": "Ubah", - "import": "Impor", - "importing": "Mengimpor...", - "apiKeysCount_other": "{{count}} kunci", - "apiKeysDocsLink": "Lihat dokumentasi", - "apiKeysCliHint": "Gunakan kunci API dengan CLI Termix untuk mengelola server dari terminal Anda.", - "apiKeysCliLink": "Lihat dokumentasi CLI", - "newApiKey": "Kunci API Baru", - "apiKeyCreatedWarning": "Kunci dibuat - salin sekarang, tidak akan ditampilkan lagi.", - "apiKeyName": "Nama", - "apiKeyUser": "Pengguna", - "apiKeySelectUser": "Pilih pengguna...", - "apiKeyExpiresAt": "Kadaluarsa Pada", - "createKey": "Buat Kunci", - "apiKeyNoExpiry": "Tidak ada kadaluarsa", - "revokedBadge": "DICABUT", - "authTypeDual": "Autentikasi Ganda", - "authTypeExternal": "Eksternal", - "authTypeLocal": "Lokal", - "adminStatusAdministrator": "Administrator", - "adminStatusRegularUser": "Pengguna Biasa", - "adminBadge": "ADMIN", - "systemBadge": "SISTEM", - "customBadge": "KUSTOM", - "youBadge": "ANDA", - "sessionsActive_other": "{{count}} aktif", - "sessionActive": "Aktif: {{time}}", - "sessionExpires": "Kadaluarsa: {{time}}", - "revokeAll": "Semua", - "revokeAllSessionsSuccess": "Semua sesi untuk pengguna dicabut", - "revokeAllSessionsFailed": "Gagal mencabut sesi", - "revokeSessionFailed": "Gagal mencabut sesi", - "addRole": "Tambahkan peran", - "noCustomRoles": "Tidak ada peran kustom yang ditentukan", - "removeRoleFailed": "Gagal menghapus peran", - "assignRoleFailed": "Gagal menetapkan peran", - "userAdminAccess": "Administrator", - "userAdminAccessDesc": "Akses penuh ke semua pengaturan admin", - "userRoles": "Peran", - "revokeAllUserSessions": "Cabut Semua Sesi", - "revokeAllUserSessionsDesc": "Paksa login ulang di semua perangkat", - "revoke": "Cabut", - "deleteUserWarning": "Menghapus pengguna ini bersifat permanen.", - "deleteUser": "Hapus {{username}}", - "deleting": "Menghapus...", - "deleteUserFailed": "Gagal menghapus pengguna", - "deleteUserSuccess": "Pengguna \"{{username}}\" dihapus", - "deleteRoleSuccess": "Peran \"{{name}}\" dihapus", - "revokeKeySuccess": "Kunci \"{{name}}\" dicabut", - "revokeKeyFailed": "Gagal mencabut kunci", - "copiedToClipboard": "Disalin ke papan klip", - "done": "Selesai", - "createUserTitle": "Buat Pengguna", - "createUserDesc": "Buat akun lokal baru.", - "createUserUsername": "Nama Pengguna", - "createUserPassword": "Kata Sandi", - "createUserPasswordHint": "Minimal 6 karakter.", - "createUserEnterUsername": "Masukkan nama pengguna", - "createUserSubmit": "Buat Pengguna", - "editUserTitle": "Kelola Pengguna: {{username}}", - "editUserDesc": "Edit peran, status admin, sesi, dan pengaturan akun.", - "editUserUsername": "Nama Pengguna", - "editUserAuthType": "Jenis Autentikasi", - "editUserAdminStatus": "Status Admin", - "editUserUserId": "ID Pengguna", - "linkAccountTitle": "Hubungkan Akun", - "linkAccountDesc": "Gabungkan akun eksternal {{username}} dengan akun lokal yang sudah ada.", - "linkAccountDescLocal": "Hubungkan akun lokal {{username}} dengan akun eksternal yang sudah ada.", - "linkAccountWarningTitle": "Ini akan:", - "linkAccountEffect1": "Menghapus akun eksternal saja", - "linkAccountEffect2": "Menambahkan masuk eksternal ke akun target", - "linkAccountEffect3": "Mengizinkan masuk eksternal dan kata sandi", - "linkAccountTargetUsername": "Nama Pengguna Akun Lokal", - "linkAccountTargetPlaceholder": "Masukkan nama pengguna akun lokal untuk dihubungkan", - "linkAccountExternalUsername": "Nama Pengguna Akun Eksternal", - "linkAccountExternalPlaceholder": "Masukkan nama pengguna akun eksternal saja untuk digabungkan", - "linkAccountExternalNotFound": "Tidak ditemukan akun eksternal saja dengan nama pengguna tersebut", - "linkAccounts": "Hubungkan Akun", - "linkAccountSuccess": "Akun berhasil dihubungkan", - "linkAccountFailed": "Gagal menghubungkan akun", - "linkAccountInProgress": "Menghubungkan...", - "unlinkAccountTitle": "Putuskan Masuk Eksternal", - "unlinkAccountDesc": "Hapus masuk eksternal dari {{username}}. Mereka hanya akan dapat masuk dengan kata sandi mereka.", - "unlinkAccountWarning": "Ini akan menghapus masuk eksternal dari akun ini. Pengguna harus memiliki kata sandi yang diatur untuk tetap dapat masuk.", - "unlinkAccount": "Putuskan Masuk Eksternal", - "unlinkAccountInProgress": "Memutuskan...", - "unlinkAccountSuccess": "Masuk eksternal diputuskan", - "unlinkAccountFailed": "Gagal memutuskan masuk eksternal", - "updateRegistrationFailed": "Gagal memperbarui pengaturan pendaftaran", - "updatePasswordLoginFailed": "Gagal memperbarui pengaturan masuk kata sandi", - "updateSecondFactorAfterExternalLoginFailed": "Gagal memperbarui pengaturan faktor kedua", - "updatePasswordResetFailed": "Gagal memperbarui pengaturan reset kata sandi", - "sessionTimeoutRange2": "Batas waktu sesi harus antara 1 dan 720 jam", - "sessionTimeoutSaved": "Batas waktu sesi disimpan", - "sessionTimeoutSaveFailed": "Gagal menyimpan batas waktu sesi", - "monitoringIntervalInvalid": "Nilai interval tidak valid", - "monitoringSaved": "Pengaturan pemantauan disimpan", - "monitoringSaveFailed": "Gagal menyimpan pengaturan pemantauan", - "logLevelUpdateFailed": "Gagal memperbarui tingkat log", - "createUserRequired": "Nama pengguna dan kata sandi wajib diisi", - "createUserPasswordTooShort": "Kata sandi harus minimal 6 karakter", - "createUserSuccess": "Pengguna \"{{username}}\" dibuat", - "createUserFailed": "Gagal membuat pengguna", - "updateAdminStatusFailed": "Gagal memperbarui status admin", - "allSessionsRevoked": "Semua sesi dicabut", - "revokeSessionsFailed": "Gagal mencabut sesi", - "manageUserData": "Kelola data pengguna", - "backToUsers": "Kembali ke pengguna", - "manageTabAccount": "Akun", - "manageTabHosts": "Host", - "manageTabCredentials": "Kredensial", - "manageTabSessions": "Sesi", - "manageTabDanger": "Bahaya", - "manageEditorBack": "Kembali ke data {{username}}", - "dataLockedBadge": "TERKUNCI", - "dataLockedNotice": "Data {{username}} tetap terkunci hingga mereka masuk berikutnya. Host, kredensial, dan snippet mereka tidak dapat dilihat atau diedit hingga saat itu.", - "resetPasswordTitle": "Reset Kata Sandi", - "resetPasswordExternalOnly": "Pengguna ini masuk melalui penyedia eksternal dan tidak memiliki kata sandi.", - "resetPasswordPlaceholder": "Kata sandi baru", - "resetPasswordBtn": "Reset", - "resetPasswordWorking": "Merest...", - "resetPasswordSuccess": "Kata sandi direset", - "resetPasswordSuccessWiped": "Kata sandi direset. Data terenkripsi pengguna dihapus.", - "resetPasswordFailed": "Gagal mereset kata sandi", - "resetPasswordConfirmWipe": "{{username}} belum masuk sejak peningkatan enkripsi, sehingga data mereka tidak dapat dipulihkan. Mereset sekarang akan menghapus host, kredensial, dan snippet mereka. Lanjutkan?", - "manageApiKeys": "Kunci API", - "apiKeyNamePlaceholder": "Nama kunci", - "apiKeyCopyNotice": "Salin kunci ini sekarang, karena tidak akan ditampilkan lagi.", - "noApiKeysForUser": "Tidak ada kunci API", - "apiKeyDeleteFailed": "Gagal menghapus kunci API", - "exportUserData": "Ekspor Data", - "exportUserDataDesc": "Unduh host, kredensial, dan data file manager pengguna ini sebagai JSON. Rahasia sudah didekripsi.", - "exportUserDataSuccess": "Data pengguna berhasil diekspor", - "exportUserDataFailed": "Gagal mengekspor data pengguna", "hostsCount_other": "{{count}} host", - "addHostForUser": "Tambah Host", - "noHostsForUser": "Pengguna ini tidak memiliki host", - "connectToHost": "Sambungkan", - "deleteHostConfirm": "Hapus host \"{{name}}\" milik {{username}}?", - "hostDeletedSuccess": "Host berhasil dihapus", - "hostDeleteFailed": "Gagal menghapus host", "credentialsCount_other": "{{count}} kredensial", - "addCredentialForUser": "Tambah Kredensial", - "noCredentialsForUser": "Pengguna ini tidak memiliki kredensial", - "deleteCredentialConfirm": "Hapus kredensial \"{{name}}\" milik {{username}}?", - "credentialDeletedSuccess": "Kredensial berhasil dihapus", - "credentialDeleteFailed": "Gagal menghapus kredensial", - "noSessionsForUser": "Tidak ada sesi aktif", - "deleteSuccessorLabel": "Serahkan host dan kredensial kepada", - "deleteSuccessorMe": "Saya (admin yang menghapus)", - "deleteSuccessorNone": "Tidak ada, hapus saja", - "deleteSuccessorDesc": "Semua yang dibagikan pengguna ini akan tetap berfungsi di bawah pemilik baru; memilih tidak ada akan menghapus host, kredensial, dan berbagi mereka.", - "deleteUserDangerDesc": "Hapus {{username}} dan semua datanya (host, kredensial, snippet, riwayat) secara permanen. Tindakan ini tidak dapat dibatalkan.", - "deleteUserConfirm": "Hapus {{username}} dan semua datanya secara permanen?", - "deleteUserAdminBlocked": "Hapus status admin sebelum menghapus pengguna ini.", - "createRoleRequired": "Nama dan nama tampilan wajib diisi", - "createRoleSuccess": "Peran \"{{name}}\" berhasil dibuat", - "createRoleFailed": "Gagal membuat peran", - "apiKeyNameRequired": "Nama kunci wajib diisi", - "apiKeyUserRequired": "ID pengguna wajib diisi", - "apiKeyCreatedSuccess": "Kunci API \"{{name}}\" berhasil dibuat", - "apiKeyCreateFailed": "Gagal membuat kunci API", - "exportSuccess": "Database berhasil diekspor", - "exportFailed": "Ekspor database gagal", - "importSelectFile": "Silakan pilih file terlebih dahulu", - "importCompleted": "Impor selesai: {{total}} item diimpor, {{skipped}} dilewati", - "importFailed": "Impor gagal: {{error}}", - "importError": "Impor database gagal", - "sectionHostDefaults": "Pengaturan Default Host", "rolePermissions": { - "count_other": "{{count}} izin", - "editAction": "Edit izin", - "loadError": "Gagal memuat katalog izin", - "saved": "Izin peran berhasil disimpan", - "saveError": "Gagal menyimpan izin peran", - "save": "Simpan", - "saving": "Menyimpan...", - "pluginDisabled": "Plugin dinonaktifkan", "groups": { "hosts": "Host", "credentials": "Kredensial", "admin": "Administrasi" } - }, - "notificationPrivateEndpoints": "Host notifikasi pribadi yang diizinkan", - "notificationPrivateEndpointsDesc": "Host pribadi persis yang dapat dihubungi oleh saluran notifikasi. Pisahkan dengan koma.", - "updateNotificationEndpointsFailed": "Gagal memperbarui daftar izin endpoint notifikasi", - "secondFactorsSectionTitle": "Faktor kedua", - "secondFactorsNone": "Tidak ada faktor kedua yang terdaftar", - "secondFactorUnavailable": "Tidak tersedia", - "resetSecondFactors": "Atur ulang faktor kedua", - "resetSecondFactorsConfirm": "Hapus semua faktor kedua untuk {{username}}? Mereka dapat masuk dengan kata sandi atau SSO dan mendaftar ulang.", - "secondFactorsResetSuccess": "Faktor kedua telah direset", - "secondFactorsResetFailed": "Gagal mereset faktor kedua", - "passwordLoginForced": "Login dengan kata sandi dimatikan, tetapi tidak ada metode login lain yang diaktifkan, jadi tetap menyala untuk saat ini. Tidak ada yang terkunci keluar.", - "sslNotRenewed": "Tidak ada yang memperbarui sertifikat ini. Sertifikat ini kedaluwarsa pada {{date}}. Aktifkan perpanjangan otomatis di bagian Sertifikat ACME, atau unggah yang baru sebelum waktu itu.", - "sslSelfSigned": "Sertifikat tanda tangan sendiri yang dibuat oleh Termix. Browser akan memperingatkan tentang hal ini.", - "sslRenewedBy": "Diperbarui secara otomatis oleh {{plugin}}", - "sslIssuer": "Diterbitkan oleh {{issuer}}", - "sslNames": "Meliputi {{names}}", - "sslManualTitle": "Unggah sertifikat", - "updateExternalAutoProvisionFailed": "Gagal memperbarui pengaturan pembuatan otomatis", - "hostTags": "Tag host yang telah ditentukan", - "hostTagsDesc": "Tag yang dilihat setiap pengguna sebagai saran di editor host. Tekan Spasi atau Enter untuk menambahkan satu. Menghapus tag di sini tidak menghapusnya dari host.", - "hostTagsError": "Tidak dapat memuat atau menyimpan saran tag host.", - "revokeAllSessionsConfirm": "Keluar {{username}} dari semua tempat?", - "revokeSessionConfirm": "Keluar dari sesi ini?", - "revokeSession": "Keluar", - "deleteRoleConfirm": "Hapus peran {{name}}?", - "revokeKeyConfirm": "Cabut kunci API {{name}}?", - "revokeKey": "Cabut" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Di mana", - "who": "Siapa", - "hostLabel": "Host", - "hostPlaceholder": "192.168.1.1 atau example.com", - "portLabel": "Port", - "usernameLabel": "Nama pengguna", - "usernamePlaceholder": "nama pengguna", - "authLabel": "Autentikasi", - "passwordLabel": "Kata sandi", - "passwordPlaceholder": "kata sandi", - "privateKeyLabel": "Kunci Pribadi", - "privateKeyPlaceholder": "Tempel kunci pribadi...", - "credentialLabel": "Kredensial", - "credentialPlaceholder": "Pilih kredensial yang disimpan", - "protocolLabel": "Protokol", - "domainLabel": "Domain", - "domainPlaceholder": "opsional", - "connectToAction": "Sambungkan ke {{name}}", - "sshProtocol": "SSH", - "noTarget": "Tidak ada yang terinstal yang dapat terhubung ke jenis host ini" + "usernameLabel": "Nama pengguna" }, "keybindings": { - "description": "Ikatkan kunci ke tindakan di terminal dan aplikasi, atau ubah pintasan bawaan.", - "defaultsHeading": "Pintasan Bawaan", - "fixedHeading": "Pintasan Aplikasi", - "fixed": { - "splitRight": "Bagi ke kanan", - "splitDown": "Bagi ke bawah", - "zoomPane": "Perbesar panel yang difokuskan", - "navigatePane": "Pindah antar panel", - "nextTab": "Tab berikutnya", - "previousTab": "Tab sebelumnya", - "jumpTab": "Lompat ke tab", - "previousView": "Kembali ke tampilan sidebar sebelumnya", - "fullscreen": "Alihkan layar penuh" - }, - "customHeading": "Pintasan Kustom", - "addBinding": "Tambahkan Pintasan", - "addBindingTitle": "Tambahkan Pintasan", - "editBindingTitle": "Edit Pintasan", - "loading": "Memuat...", - "noCustomBindings": "Belum ada pintasan kustom", - "defaultBadge": "Bawaan", - "customizedBadge": "Dikustomisasi", - "customize": "Kustomisasi", - "resetToDefault": "Kembalikan ke bawaan", - "resetAllToDefaults": "Kembalikan semua ke bawaan", - "cancel": "Batal", - "saveBinding": "Simpan Pintasan", - "saveError": "Gagal menyimpan pintasan keyboard", - "pressKeysToRecord": "Kombinasi tombol", - "pressKeysPlaceholder": "Klik dan tekan tombol", - "recording": "Tekan tombol...", - "comboRequiredError": "Tekan kombinasi tombol terlebih dahulu", - "conflictWarning": "Kombinasi ini sudah terikat ke {{combo}}. Menyimpannya akan memicu keduanya.", - "actionLabel": "Aksi", "actionNextTab": "Beralih ke tab berikutnya", "actionPreviousTab": "Beralih ke tab sebelumnya", "actionOpenCommandPalette": "Buka pencarian cepat", - "actionReconnectSession": "Sambungkan ulang sesi saat ini", - "unavailableAction": "{{type}} (tidak tersedia)", - "actionRequiredError": "Pilih aksi terlebih dahulu", - "deleteConfirm": "Hapus pengikatan tombol ini?", - "resetAllConfirm": "Kembalikan setiap pengikatan tombol ke bawaan?" + "actionReconnectSession": "Sambungkan ulang sesi saat ini" }, "userProfile": { - "storageModeLocal": "Browser", - "storageModeCloud": "Basis data", - "storageModeDescription": "Browser menyimpan pengaturan hanya di browser ini. Basis data menyinkronkan ke server dan memuat di perangkat apa pun.", - "resetToDefaults": "Kembalikan ke Bawaan", - "resetToDefaultsSuccess": "Pengaturan dikembalikan ke bawaan.", - "storageModeSwitch": "Penyimpanan Preferensi", - "sectionAccount": "Akun", - "desktopProfileTitle": "Perangkat ini saja", - "desktopProfileDescription": "Profil ini ada di perangkat ini dan masuk secara mandiri. Hubungkan ke server Termix untuk menggunakan host dan pengaturan yang sama di setiap perangkat.", - "sectionInterface": "Antarmuka", - "interfacePresetDesc": "Seberapa banyak detail yang ditampilkan Termix. Setiap fitur tetap tersedia.", "preset_simple": "Sederhana", "preset_simple_desc": "Hanya yang penting.", "preset_balanced": "Seimbang", "preset_balanced_desc": "Tata letak standar.", "preset_advanced": "Lanjutan", "preset_advanced_desc": "Semua aktif, padat.", - "presetClearOverrides": "Kembalikan semua", - "presetOverridesTitle": "Disesuaikan", - "presetRevertArea": "Kembalikan", - "presetConfirmTitle": "Beralih ke {{preset}}?", - "presetConfirmDesc": "Ini akan mengembalikan sidebar, navigasi, tata letak dasbor, toolbar terminal, dan tampilan file manager Anda. Host, kredensial, dan beranda Anda tidak akan tersentuh.", - "presetConfirmApply": "Terapkan preset", - "runSetupAgainDesc": "Lakukan pengaturan awal lagi.", - "runSetupAgainButton": "Jalankan pengaturan", "uiArea_chrome": "Chrome aplikasi", "uiArea_hostList": "Daftar host", "uiArea_credentialList": "Daftar kredensial", @@ -1602,125 +1082,12 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "File manager", "uiArea_hostEditor": "Editor host", - "sectionAppearance": "Tampilan", - "sectionSecurity": "Keamanan", - "sectionApiKeys": "Kunci API", - "sectionData": "Data", - "usernameLabel": "Nama pengguna", - "roleLabel": "Peran", - "roleAdministrator": "Administrator", - "authMethodLabel": "Metode Autentikasi", - "authMethodLocal": "Lokal", - "twoFaLabel": "2FA", - "twoFaOn": "Aktif", - "twoFaOff": "Nonaktif", - "versionLabel": "Versi", - "cliTitle": "Termix CLI", - "cliDescription": "Buka terminal, jalankan perintah, dan pindahkan file dari shell Anda sendiri.", - "cliLearnMore": "Pelajari Lebih Lanjut", - "deleteAccount": "Hapus Akun", - "deleteAccountDescription": "Hapus akun Anda secara permanen", - "deleteButton": "Hapus", - "deleteAccountPermanent": "Tindakan ini bersifat permanen dan tidak dapat dibatalkan.", - "deleteAccountWarning": "Semua sesi, host, kredensial, dan pengaturan akan dihapus secara permanen.", - "confirmPasswordDeletePlaceholder": "Masukkan kata sandi Anda untuk konfirmasi", "languageLabel": "Bahasa", "themeLabel": "Tema", "fontSizeLabel": "Ukuran Font", "interfaceFontLabel": "Font Antarmuka", "interfaceFontDescription": "Mengubah font antarmuka aplikasi. Profil terminal tetap menggunakan pengaturan font masing-masing.", "accentColorLabel": "Warna Aksen", - "keyboardShortcuts": "Pintasan Keyboard", - "keyboardShortcutsDescription": "Sesuaikan pintasan salin, tempel, dan perintah terminal", - "manageShortcuts": "Kelola", - "commandPalette": "Palet Perintah", - "commandPaletteDesc": "Aktifkan pintasan keyboard", - "reopenTabsOnLogin": "Buka Ulang Tab saat Masuk", - "reopenTabsOnLoginDesc": "Pulihkan tab yang terbuka saat Anda masuk atau menyegarkan halaman, bahkan dari perangkat lain", - "confirmTabClose": "Konfirmasi Penutupan Tab", - "confirmTabCloseDesc": "Tanya sebelum menutup tab terminal", - "showTabNumbers": "Tampilkan Nomor Tab", - "showTabNumbersDesc": "Tampilkan nomor pada setiap tab untuk memudahkan pembedaan", - "settingsAppRail": "Rel Aplikasi", - "sidebarSettingsMoved": "Pengaturan tampilan sidebar host telah dipindahkan ke panel Sesuaikan Sidebar, yang dibuka dari toolbar Host.", - "showHostTags": "Tampilkan Tag Host", - "showHostTagsDesc": "Tampilkan tag dalam daftar host", - "statusColors": "Warna Status Nyata", - "statusColorsDesc": "Gunakan hijau/merah untuk status online/offline alih-alih warna aksen", - "pinAppRail": "Sematkan Rel Aplikasi", - "pinAppRailDesc": "Jaga agar rel aplikasi di sidebar kiri tetap terbuka, bukan hanya saat kursor diarahkan", - "expandAppRailOnHover": "Perluas Rel Aplikasi saat Kursor Diarahkan", - "expandAppRailOnHoverDesc": "Izinkan rel aplikasi di sidebar kiri untuk diperluas saat kursor diarahkan", - "appRailHoverPushesContent": "Geser konten saat diperluas", - "appRailHoverPushesContentDesc": "Buat ruang untuk rel yang diperluas alih-alih menampilkannya di atas halaman. Sesi terbuka, seperti desktop jarak jauh, akan menyesuaikan ukuran setiap kali", - "showPinAppRailButton": "Tampilkan Tombol Sematkan Rel Aplikasi", - "showPinAppRailButtonDesc": "Tampilkan tombol di rel aplikasi untuk menyematkannya agar tetap terbuka. Nonaktif secara default.", - "settingsNavigation": "Navigasi", - "navigationTabsDesc": "Pilih tab mana yang muncul di rel aplikasi", - "settingsUpdates": "Pembaruan", - "disableUpdateChecks": "Nonaktifkan Pengecekan Pembaruan", - "disableUpdateChecksDesc": "Berhenti mengecek pembaruan", - "changePassword": "Ubah Kata Sandi", - "currentPasswordLabel": "Kata Sandi Saat Ini", - "currentPasswordPlaceholder": "Kata sandi saat ini", - "newPasswordLabel": "Kata Sandi Baru", - "newPasswordPlaceholder": "Kata sandi baru", - "confirmPasswordLabel": "Konfirmasi Kata Sandi Baru", - "confirmPasswordPlaceholder": "Konfirmasi kata sandi baru", - "updatePassword": "Perbarui Kata Sandi", - "createApiKeyTitle": "Buat Kunci API", - "createApiKeyDescription": "Buat kunci API baru untuk akses pemrograman.", - "apiKeyNameLabel": "Nama", - "apiKeyNamePlaceholder": "mis. CI Pipeline", - "expiryDateLabel": "Tanggal Kedaluwarsa", - "optional": "opsional", - "cancel": "Batal", - "createKey": "Buat Kunci", - "apiKeyCreatedWarning": "Kunci dibuat - salin sekarang, tidak akan ditampilkan lagi.", - "copyApiKey": "Salin kunci API", - "copiedToClipboard": "Disalin ke papan klip", - "apiKeyCount_other": "{{count}} kunci", - "newKey": "Kunci Baru", - "noApiKeys": "Belum ada kunci API.", - "apiKeyActive": "Aktif", - "apiKeyUsageHint": "Sertakan kunci Anda di", - "apiKeyUsageHintHeader": "header.", - "apiKeyPermissionsHint": "Kunci mewarisi izin dari pengguna yang membuatnya.", - "exportData": "Ekspor Data Saya", - "exportDataDesc": "Unduh cadangan host, kredensial, dan pengaturan Anda untuk dipindahkan ke perangkat lain", - "export": "Ekspor", - "exporting": "Mengekspor...", - "importData": "Impor Data Saya", - "importDataDesc": "Pulihkan host, kredensial, dan pengaturan Anda dari file cadangan .sqlite", - "importDataSelected": "Dipilih: {{name}}", - "selectFile": "Pilih File", - "changeFile": "Ubah", - "import": "Impor", - "importing": "Mengimpor...", - "exportSuccess": "Data berhasil diekspor", - "exportFailed": "Ekspor data gagal", - "importSelectFile": "Silakan pilih file terlebih dahulu", - "importCompleted": "Impor selesai: {{total}} item diimpor, {{skipped}} dilewati", - "importFailed": "Impor gagal: {{error}}", - "roleUser": "Pengguna", - "authMethodDual": "Otentikasi Ganda", - "authMethodExternal": "Eksternal", - "done": "Selesai", - "apiKeyNameRequired": "Nama kunci wajib diisi", - "apiKeyCreated": "Kunci API \"{{name}}\" berhasil dibuat", - "apiKeyCreateFailed": "Gagal membuat kunci API", - "apiKeyUser": "Pengguna", - "apiKeyExpires": "Kedaluwarsa", - "apiKeyRevoked": "Kunci API \"{{name}}\" dicabut", - "apiKeyRevokeFailed": "Gagal mencabut kunci API", - "passwordFieldsRequired": "Kata sandi saat ini dan baru wajib diisi", - "passwordMismatch": "Kata sandi tidak cocok", - "passwordTooShort": "Kata sandi minimal 6 karakter", - "passwordUpdated": "Kata sandi berhasil diperbarui", - "passwordUpdateFailed": "Gagal memperbarui kata sandi", - "deletePasswordRequired": "Kata sandi diperlukan untuk menghapus akun Anda", - "deleteFailed": "Gagal menghapus akun", - "deleting": "Menghapus...", "colorPickerTooltip": "Buka pemilih warna", "themeSystem": "Sistem", "themeLight": "Terang", @@ -1731,18 +1098,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Masuk ke {{server}}", - "linkedProfileDescription": "Perangkat ini menggunakan akun Anda di server dan menyimpan salinan data Anda, sehingga tetap berfungsi secara offline.", - "manageSync": "Kelola sinkronisasi", - "setUpSync": "Hubungkan ke server", - "settingsTabsAndShortcuts": "Tab dan Pintasan", - "onBetaTitle": "Anda menggunakan versi beta", - "onBetaDescription": "Terima kasih telah menguji. Beritahu kami jika ada yang rusak.", - "tryBetaTitle": "Coba fitur baru lebih awal", - "tryBetaDescription": "Bergabung dengan program beta di Pembaruan.", - "sendBetaFeedback": "Kirim umpan balik beta", - "openUpdates": "Pembaruan" + "themeGruvbox": "Gruvbox" } } }, @@ -1983,8 +1339,7 @@ "hasDependents": "{{name}} dibutuhkan oleh {{list}}. Matikan atau hapus instalasi mereka terlebih dahulu.", "missingDependencies": "{{name}} membutuhkan {{list}}, yang belum terinstal.", "consentChanged": "Apa yang diminta plugin ini telah berubah sejak Anda terakhir melihat. Periksa daftar lagi.", - "upload": "Tidak dapat membaca {{name}}: {{error}}", - "developerMode": "Tidak dapat mengubah mode pengembang: {{error}}" + "upload": "Tidak dapat membaca {{name}}: {{error}}" }, "data": { "title": "Data yang disimpan", @@ -2102,13 +1457,7 @@ "browsePlugins": "Jelajahi plugin", "loading": "Memuat", "developer": { - "title": "Mode pengembang plugin", - "hint": "Memungkinkan admin memasang plugin dari file .tmxplug di tab Plugin, tanpa pemeriksaan registri. Gunakan ini untuk membangun dan menguji plugin Anda sendiri.", - "enableTitle": "Aktifkan mode pengembang?", - "enableBody": "Admin akan dapat memasang plugin dari file yang belum diperiksa oleh Termix. Plugin dapat melakukan apa saja sesuai kemampuannya, jadi hanya aktifkan ini saat Anda membangun atau menguji plugin.", - "enable": "Aktifkan", - "installFromFile": "Pasang dari file", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS diatur, sehingga pemasangan dari file tetap diblokir." + "installFromFile": "Pasang dari file" }, "count": { "downloads_other": "{{formatted}} unduhan", @@ -2145,71 +1494,7 @@ "secretSet": "Disetel", "secretNotSet": "Belum disetel", "secretReplace": "Ganti", - "pluginSettingsSaved": "Pengaturan disimpan", - "pluginSettingsInvalid": "Beberapa pengaturan tidak dapat disimpan. Periksa bidang yang disorot.", - "pluginSettingsSaveFailed": "Gagal menyimpan pengaturan", - "pluginSettingsLoadFailed": "Gagal memuat pengaturan", - "featureUnavailable": "{{name}} saat ini tidak tersedia. Pengaturan ini disimpan tetapi tidak akan berlaku.", - "account": "Akun", - "security": "Keamanan", - "apiKeys": "Kunci API", - "data": "Data dan sinkronisasi", - "interface": "Antarmuka", - "appearance": "Tampilan", - "keybindings": "Pintasan keyboard", - "adminGeneral": "Umum", - "adminUsers": "Pengguna", - "adminSessions": "Sesi", - "adminRoles": "Peran", - "adminHostDefaults": "Pengaturan bawaan host", - "adminBranding": "Branding", - "adminDatabase": "Basis data", - "adminSsl": "SSL", - "adminApiKeys": "Kunci API", - "adminAuditLog": "Log audit", - "bandYou": "Akun Anda", - "bandApp": "Aplikasi ini", - "bandPlugins": "Plugin", - "bandInstance": "Server ini", - "searchPlaceholder": "Cari pengaturan", - "noResults": "Tidak ada pengaturan yang cocok.", - "pages": "Halaman", - "instanceSettings": "Pengaturan server", - "nothingHere": "Tidak ada yang perlu disetel di sini.", - "searchPage": "Cari di halaman ini", - "noPageMatches": "Tidak ada yang cocok di halaman ini.", - "updates": { - "title": "Pembaruan", - "betaProgram": "Program beta", - "betaIntro": "Beta adalah versi awal dari versi Termix berikutnya. Beta dirilis pada hari Selasa dan Jumat ketika ada fitur baru untuk dicoba. Beta mungkin mengandung bug, dan umpan balik Anda membantu membuat versi stabil lebih baik.", - "termixBetas": "Beta Termix", - "termixBetasHint": "Beritahu saya tentang beta baru, bukan hanya rilis stabil.", - "runningBetaBuild": "Anda menjalankan versi beta. Untuk keluar, beralih kembali ke gambar atau installer stabil.", - "howToInstall": "Cara mendapatkan beta", - "desktopInstall": "Unduh installer beta dan instal di atas versi ini.", - "downloadBeta": "Unduh {{version}}", - "dockerInstall": "Ubah gambar Anda ke tag beta dan restart kontainer:", - "copy": "Salin", - "copied": "Disalin", - "copyFailed": "Gagal menyalin", - "learnMore": "Pelajari lebih lanjut tentang beta", - "feedback": "Umpan balik", - "feedbackHint": "Menemukan bug atau punya ide? Pesan akan langsung dikirim ke pengembang dengan versi Anda terisi otomatis.", - "sendFeedback": "Kirim umpan balik beta", - "releases": "Rilis", - "thisVersion": "Versi ini", - "newestStable": "Stabil terbaru", - "newestBeta": "Beta terbaru", - "noRelease": "Tidak ada saat ini", - "pluginBetas": "Beta plugin", - "pluginBetasIntro": "Setiap plugin dapat menggunakan beta secara mandiri. Untuk mencobanya, buka plugin dan tekan Coba beta.", - "openPlugins": "Buka Plugin", - "waitingForStable": "Kembali ke stabil. Tetap di {{version}} hingga rilis stabil lebih baru.", - "backToStable": "Kembali ke stabil", - "allPluginsBeta": "Gunakan beta untuk semua plugin", - "allPluginsStable": "Semua plugin kembali ke stabil", - "saveFailed": "Gagal menyimpan perubahan" - } + "featureUnavailable": "{{name}} saat ini tidak tersedia. Pengaturan ini disimpan tetapi tidak akan berlaku." }, "managerCard": { "refresh": "Segarkan", @@ -2219,80 +1504,10 @@ "filter": "Filter..." }, "sync": { - "server": "Server Termix", - "account": "Akun", - "status": "Status", - "never": "tidak pernah", - "justNow": "baru saja", "minutesAgo_other": "{{count}} menit yang lalu", "hoursAgo_other": "{{count}} jam yang lalu", - "actionFailed": "Itu tidak berhasil. Coba lagi.", - "unlinkedTitle": "Hanya perangkat ini", - "unlinkedBody": "Termix bekerja secara mandiri di perangkat ini. Hubungkan ke server Termix Anda agar semua tetap sinkron.", - "unlinkedPointHosts": "Host, kredensial, snippet, dan pengaturan Anda mengikuti Anda ke setiap perangkat.", - "unlinkedPointOffline": "Semua tetap berfungsi saat server tidak dapat dijangkau, dan akan tersinkronisasi nanti.", - "unlinkedPointAccount": "Anda masuk dengan akun server Anda, dan host yang dibagikan orang lain juga muncul di sini.", - "linkButton": "Hubungkan ke server", - "state": { - "syncing": "Menyinkronkan", - "offline": "Server tidak dapat dijangkau", - "error": "Sinkronisasi berhenti", - "signedOut": "Keluar", - "synced": "Tersinkronisasi {{time}}" - }, "pending_other": "{{count}} perubahan menunggu sinkronisasi", - "signInAgain": "Masuk lagi", - "syncNow": "Sinkronkan sekarang", - "unlink": "Putuskan hubungan", - "unlinked": "Perangkat ini tidak lagi terhubung", - "unlinkTitle": "Putuskan tautan perangkat ini?", - "unlinkDescription": "Sinkronisasi akan berhenti dan Anda akan keluar dari server. Host yang dibagikan kepada Anda oleh orang lain akan dihapus dari perangkat ini dalam semua kasus.", - "unlinkKeepTitle": "Simpan data saya di sini", - "unlinkKeepBody": "Host, kredensial, dan pengaturan Anda tetap ada di perangkat ini dan terus berfungsi secara mandiri.", - "unlinkRemoveTitle": "Hapus data yang disinkronkan", - "unlinkRemoveBody": "Semua data yang berasal dari server akan dihapus dari perangkat ini. Hanya host yang disimpan di perangkat ini yang akan tetap ada.", - "conflictsTitle": "Konflik", - "conflictsDescription": "Item ini diubah di sini dan di server secara bersamaan. Versi server sedang digunakan. Simpan versi Anda untuk mengirimkannya ke server sebagai gantinya.", - "keepMine": "Simpan milik saya", - "keepServer": "Simpan milik server", - "errorsTitle": "Tidak disinkronkan", - "errorsDescription": "Server tidak menerima perubahan ini. Perubahan tersebut tetap ada di perangkat ini.", - "errorPermission": "Akun Anda di server tidak diizinkan untuk melakukan perubahan ini.", - "retry": "Coba lagi", - "whatSyncs": "Apa yang disinkronkan", - "whatSyncsDescription": "Matikan apa pun yang ingin Anda simpan hanya di perangkat ini.", - "coreGroup": "Termix", - "notOnServer": "Server tidak memiliki ini", - "notOnDevice": "Belum ada di perangkat ini", - "localOnlyHint": "Anda juga dapat menyimpan host atau folder tertentu hanya di perangkat ini melalui pengaturan mereka.", - "originTitle": "Asal koneksi", - "originDescription": "Hubungkan ke host dari perangkat ini, atau melalui server. Anda dapat mengubah ini per host.", - "originLocal": "Perangkat ini", - "originRemote": "Server", - "entities": { - "hosts": "Host", - "sshCredentials": "Kredensial", - "sshFolders": "Folder", - "userPreferences": "Preferensi", - "pluginUserSettings": "Pengaturan plugin", - "sharedHosts": "Host yang dibagikan kepada Anda", - "sharedCredentials": "Kredensial yang dibagikan kepada Anda", - "vaultProfiles": "Profil Vault", - "snippetFolders": "Folder snippet", - "snippets": "Snippet", - "dashboardServiceLinks": "Tautan layanan", - "homepageItems": "Item beranda", - "networkTopology": "Peta jaringan", - "workspaces": "Ruang kerja", - "hostDefaults": "Pengaturan default host", - "hostDefaultsAdmin": "Pengaturan default host server", - "aiProviders": "Penyedia AI", - "homepageLayouts": "Tata letak beranda", - "accountProfile": "Profil akun" - }, "proxy": { - "title": "Proxy terbalik", - "description": "Hanya diperlukan ketika ada sesuatu seperti Cloudflare Access atau halaman login yang berada di depan server Anda.", "headersTitle": "Header tambahan", "headersHint": "Dikirim dengan setiap permintaan ke server, misalnya token layanan Cloudflare Access.", "headerName": "Nama header", @@ -2305,8 +1520,7 @@ "username": "Nama pengguna", "password": "Kata sandi", "allowInvalidCertificate": "Percayai sertifikat yang ditandatangani sendiri", - "allowInvalidCertificateHint": "Hanya untuk server Anda sendiri, ketika sertifikatnya tidak berasal dari otoritas yang dikenal.", - "saved": "Tersimpan" + "allowInvalidCertificateHint": "Hanya untuk server Anda sendiri, ketika sertifikatnya tidak berasal dari otoritas yang dikenal." }, "problems": { "invalidUrl": "Itu tidak terlihat seperti alamat web.", @@ -2342,6 +1556,27 @@ "linking": "Menghubungkan dan menjalankan sinkronisasi pertama...", "linked": "Terhubung. Data Anda sedang disinkronkan.", "signedInAgain": "Berhasil masuk. Sinkronisasi berjalan kembali." + }, + "entities": { + "hosts": "Host", + "sshCredentials": "Kredensial", + "sshFolders": "Folder", + "userPreferences": "Preferensi", + "pluginUserSettings": "Pengaturan plugin", + "sharedHosts": "Host yang dibagikan kepada Anda", + "sharedCredentials": "Kredensial yang dibagikan kepada Anda", + "vaultProfiles": "Profil Vault", + "snippetFolders": "Folder snippet", + "snippets": "Snippet", + "dashboardServiceLinks": "Tautan layanan", + "homepageItems": "Item beranda", + "networkTopology": "Peta jaringan", + "workspaces": "Ruang kerja", + "hostDefaults": "Pengaturan default host", + "hostDefaultsAdmin": "Pengaturan default host server", + "aiProviders": "Penyedia AI", + "homepageLayouts": "Tata letak beranda", + "accountProfile": "Profil akun" } }, "hostDefaults": { @@ -2358,28 +1593,9 @@ "resetTitle": "Host ini mengatur nilai sendiri. Klik untuk menggunakan default dari {{source}} lagi", "clearTitle": "Diatur di tingkat ini. Klik untuk menghapusnya dan menggunakan {{source}} sebagai gantinya", "inheritedTitle": "Mengikuti default dari {{source}}", - "titleAdmin": "Pengaturan default host server", - "titleUser": "Pengaturan default host saya", - "titleFolder": "Pengaturan default folder: {{name}}", - "descriptionAdmin": "Pengaturan default untuk setiap host di server ini. Pengaturan default pengguna sendiri, folder, atau host itu sendiri masih dapat mengatur nilai yang berbeda. Ubah bidang untuk mengaturnya di sini, atau kosongkan untuk meninggalkannya tidak diatur.", - "descriptionUser": "Pengaturan default untuk semua host Anda, di atas pengaturan server. Folder atau host itu sendiri masih dapat mengatur nilai yang berbeda. Ubah bidang untuk mengaturnya di sini, atau kosongkan untuk meninggalkannya tidak diatur.", - "descriptionFolder": "Pengaturan default untuk host di folder ini dan subfoldernya, di atas pengaturan Anda sendiri. Host masih dapat mengatur nilai yang berbeda. Ubah bidang untuk mengaturnya di sini, atau kosongkan untuk meninggalkannya tidak diatur.", - "save": "Simpan pengaturan default", "saved_other": "Pengaturan default disimpan. {{count}} host diperbarui.", - "savedInBackground": "Pengaturan default disimpan. Host sedang diperbarui di latar belakang.", "appliedToHosts_other": "{{count}} host diperbarui dengan pengaturan default baru.", - "saveFailed": "Tidak dapat menyimpan pengaturan default", - "loadFailed": "Tidak dapat memuat pengaturan default", - "confirmTitle": "Simpan pengaturan default?", "confirmChanges_other": "{{count}} host mengikuti pengaturan default ini dan akan berubah.", - "confirmNoChanges": "Tidak ada perubahan pada host yang ada. Host baru akan dimulai dengan pengaturan default ini.", - "menuMyDefaults": "Pengaturan default host saya", - "folderDefaultsAction": "Pengaturan default folder", - "adminSectionDescription": "Atur default yang diikuti setiap host di server ini, untuk setiap pengaturan yang dimiliki host, termasuk setiap plugin. Pengguna dan folder dapat mengatur pengaturan mereka sendiri di atasnya, dan setiap host masih dapat menggunakan nilai sendiri.", - "editServerDefaults": "Edit pengaturan default server", - "resetMenu": "Reset", - "resetAll": "Semua ke pengaturan default", - "resetCore": "Koneksi dan SSH ke pengaturan default", "resetDone_other": "{{count}} host sekarang mengikuti pengaturan defaultnya." }, "panel": { @@ -2392,44 +1608,10 @@ "fields": { "secretSaved": "Tersimpan. Ketik untuk menggantinya." }, - "sharing": { - "revokeConfirm": "Hapus akses untuk {{name}}?", - "revoke": "Hapus akses" - }, "manage": { - "searchSettings": "Cari pengaturan", - "noMatchingSettings": "Tidak ada pengaturan yang cocok.", - "sections": "Bagian", - "sectionNeedsAttention": "Ada sesuatu di sini yang perlu perhatian", "needsAttention_other": "{{count}} hal perlu perhatian.", - "bandHost": "Host", - "bandFeatures": "Protokol dan plugin", - "bandCredential": "Kredensial", - "sshConnection": "Koneksi SSH", - "errorAddressRequired": "Alamat wajib diisi.", - "errorPortRange": "Gunakan port antara 1 dan 65535.", - "defaults": "Default", - "searchHosts": "Cari host", - "searchCredentials": "Cari kredensial", - "searchDefaults": "Cari default", - "addCredential": "Tambah kredensial", - "nothingMatches": "Tidak ada yang cocok", - "nothingYet": "Belum ada apa-apa di sini", - "emptyHostsHint": "Tambah host dan akan muncul di sini, di folder mana pun yang Anda berikan.", - "emptyCredentialsHint": "Kredensial yang Anda simpan dapat digunakan kembali oleh host mana pun.", - "collapse": "Ciutkan", - "expand": "Bentangkan", - "cannotBeUndone": "Ini tidak dapat dibatalkan.", - "hostNotFound": "Tidak dapat menemukan host tersebut. Coba muat ulang daftar.", "hostCount_other": "{{count}} host", - "credentialCount_other": "{{count}} kredensial", - "newHost": "Host baru", - "newCredential": "Kredensial baru", - "advanced": "Lanjutan", - "pickHost": "Pilih host untuk diedit", - "pickCredential": "Pilih kredensial untuk diedit", - "pickDefaults": "Pilih tingkat default untuk diedit", - "pickHint": "Semua hal tentang koneksi ada di sini, dikelompokkan agar mudah ditemukan." + "credentialCount_other": "{{count}} kredensial" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/it_IT.json b/src/ui/locales/translated/it_IT.json index c250f3faf..46fb84f1a 100644 --- a/src/ui/locales/translated/it_IT.json +++ b/src/ui/locales/translated/it_IT.json @@ -141,7 +141,6 @@ "continue": "Continua", "error": "Errore", "unsavedChanges": "Modifiche non salvate", - "more": "Altro", "loading": "Caricamento...", "host": "Host", "selectHost": "Seleziona un host...", @@ -154,7 +153,6 @@ "cancel": "Annulla", "username": "Nome utente", "login": "Accedi", - "logout": "Esci", "register": "Registrati", "password": "Password", "confirmPassword": "Conferma password", @@ -165,8 +163,6 @@ "rename": "Rinomina", "edit": "Modifica", "confirm": "Conferma", - "next": "Avanti", - "previous": "Precedente", "refresh": "Aggiorna", "language": "Lingua", "backendReconnected": "Connessione al server ripristinata", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Leggi la descrizione di ciascuno" }, "desktopUpdates": { - "title": "App desktop", - "mode": "Aggiornamenti", - "modeHint": "Come questa app riceve le nuove versioni.", - "manualModeHint": "Questa copia non può aggiornarsi automaticamente, quindi Termix ti avvisa solo quando è disponibile una nuova versione.", "modeAutomatic": "Automatico", "modePrompt": "Chiedi prima", "modeNever": "Mai", @@ -247,15 +239,6 @@ "onboardingTitle": "Aggiornamenti dell'app", "onboardingBody": "L'app desktop può ora aggiornarsi automaticamente. Scegli come desideri ricevere le nuove versioni. Puoi modificare questa impostazione in seguito in Impostazioni, Aggiornamenti.", "onboardingManual": "Questa copia dell'app è stata installata in un modo che non supporta l'aggiornamento automatico, quindi Termix ti avviserà quando è disponibile una nuova versione con un link per scaricarla.", - "status": "Versione {{version}}", - "statusIdle": "Non ancora controllato", - "statusChecking": "Verifica aggiornamenti in corso", - "statusAvailable": "È disponibile la versione {{version}}", - "statusDownloading": "Download di {{version}} in corso ({{progress}}%)", - "statusReady": "La versione {{version}} è pronta. Riavvia per installarla.", - "statusUpToDate": "Hai l'ultima versione", - "statusError": "Impossibile verificare la presenza di aggiornamenti. Riprova più tardi.", - "checkNow": "Verifica ora", "download": "Scarica", "restart": "Riavvia ora", "later": "Più tardi", @@ -269,26 +252,11 @@ "terminal": "Terminale", "close": "Chiudi", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Copia password", - "copySudoPassword": "Copia password sudo", - "passwordCopied": "Password copiata negli appunti", - "failedToCopyPassword": "Impossibile copiare la password", - "refreshTab": "Aggiorna connessione", - "renameTab": "Rinomina scheda", "dashboard": "Dashboard", "quickConnect": "Connessione rapida", - "openAsTabHint": "Ctrl+click o click centrale per aprire come scheda", - "openAsTab": "Apri come scheda", - "openInRightDock": "Apri nel pannello destro", - "closeRightDock": "Chiudi pannello destro", - "toggleRightDock": "Mostra/nascondi pannello destro", "hosts": "Host", "credentials": "Credenziali", "connections": "Connessioni", - "keepSideMenuOpen": "Tieni il menu aperto", - "collapseSideMenu": "Comprimi menu", - "roleAdministrator": "Amministratore", - "roleUser": "Utente", "sync": "Sincronizza", "reconnectDisconnectedTerminals": "Riconnetti tutti i terminali disconnessi", "reconnectingTerminals_one": "Riconnessione di {{count}} terminale", @@ -300,31 +268,12 @@ "reconnectTerminalsFailed_other": "Impossibile avviare la riconnessione di {{count}} terminali", "fullscreenUnsupported": "La modalità a schermo intero non è supportata da questo browser", "fullscreenFailed": "Impossibile attivare/disattivare la modalità a schermo intero", - "resetSidebarWidth": "Reimposta larghezza", - "collapseSidebar": "Comprimi barra laterale", - "openSidebar": "Apri barra laterale", "confirmCloseHost": "Chiudere {{host}}?", - "enterFullscreen": "Entra in modalità a schermo intero (Ctrl+Shift+F)", - "exitFullscreen": "Esci dalla modalità a schermo intero (Ctrl+Shift+F)", - "group": { - "objects": "I tuoi", - "tools": "Strumenti", - "system": "Sistema" - }, - "searchEverything": "Cerca host, schede e azioni", - "search": "Cerca", "hiddenCount_one": "{{count}} nascosto", "hiddenCount_many": "{{count}} nascosti", "hiddenCount_other": "{{count}} nascosti", - "showInRail": "Mostra nella barra laterale", - "moveUp": "Sposta su", - "moveDown": "Sposta giù", - "resetRailOrder": "Reimposta ordine", - "hideFromRail": "Nascondi dalla barra laterale", - "openSettings": "Apri impostazioni", "settings": "Impostazioni", "manage": "Gestisci", - "mobileNavigation": "Navigazione", "plugins": "Plugin" }, "hosts": { @@ -930,35 +879,14 @@ "importSummary": "Importazione completata: {{imported}} importati, {{updated}} aggiornati, {{failed}} falliti", "importHostsFailed": "Impossibile importare gli host" }, - "commandPalette": { - "searchPlaceholder": "Cerca host, comandi o impostazioni...", - "quickActions": "Azioni rapide", - "navigation": "Navigazione", - "orShortcut": "oppure", - "addNewHost": "Aggiungi nuovo host", - "adminSettings": "Impostazioni amministratore", - "addCredential": "Aggiungi credenziale", - "recentActivity": "Attività recenti", - "serversAndHosts": "Server e host", - "noHostsFound": "Nessun host trovato corrispondente a \"{{search}}\"", - "links": "Link", - "navigate": "Naviga", - "select": "Seleziona", - "pluginActions": "Altre azioni", - "noTargetTab": "Nessuna scheda del terminale è aperta", - "documentation": "Documentazione" - }, "splitScreen": { "title": "Schermo diviso", "defaultLabel": "Divisione {{number}}", "splitRight": "Dividi a destra", "splitDown": "Dividi in basso", - "addToSplit": "Aggiungi a {{split}}", "paneEmptyItem": "Pannello {{index}}: vuoto", "paneItem": "Pannello {{index}}: {{label}}", "paneNumber": "Pannello {{index}}", - "newPaneRight": "Nuovo pannello a destra", - "newPaneBelow": "Nuovo pannello in basso", "emptyTitle": "Pannello vuoto", "emptyHint": "Scegli cosa mostrare qui. Mentre questo pannello è selezionato, tutto ciò che apri dalla barra laterale si aprirà anche qui.", "openTabs": "Schede aperte", @@ -975,7 +903,6 @@ "clearPane": "Svuota questo pannello", "zoom": "Ingrandisci pannello", "unzoom": "Ripristina layout", - "unsplit": "Unisci", "layouts": "Layout", "applyLayout": "Cambia layout", "maxPanes_one": "Una divisione può contenere fino a {{count}} pannello", @@ -985,8 +912,6 @@ "dropHere": "Rilascia per mostrare qui", "paneActions": "Azioni pannello", "dividerHint": "Trascina per ridimensionare. Doppio clic per equalizzare.", - "openInSplit": "Apri in divisione", - "openInNewSplit": "Nuova divisione con la scheda corrente", "shortcuts": "Scorciatoie", "shortcutNavigate": "Sposta tra i pannelli", "presets": { @@ -1000,23 +925,6 @@ "grid6": "Griglia di sei" } }, - "connections": { - "noConnections": "Nessuna connessione", - "noConnectionsDesc": "Apri un terminale, un file manager o un desktop remoto per vedere le connessioni qui", - "connectedFor": "Connesso per {{duration}}", - "connected": "Connesso", - "disconnected": "Disconnesso", - "reconnect": "Riconnetti", - "sectionOpen": "Aperto", - "sectionBackground": "In background", - "backgroundDesc": "Le sessioni rimangono attive per {{minutes}} minuti dopo la disconnessione e possono essere riconnesse.", - "expiresIn": "Scade tra {{duration}}", - "search": "Cerca connessioni...", - "noSearchResults": "Nessuna connessione corrisponde alla ricerca", - "rename": "Rinomina sessione", - "forgetConfirm": "Terminare la sessione in background per {{name}}?", - "forget": "Termina sessione" - }, "sshAuth": { "totpRequired": "Autenticazione a due fattori richiesta", "totpCodeLabel": "Codice di verifica", @@ -1154,65 +1062,14 @@ "placeholders": { "keyPassword": "password della chiave", "pastePrivateKey": "Incolla qui la tua chiave privata...", - "enterPassword": "Inserisci la tua password", - "apiKeyName": "es. Pipeline CI", - "credentialName": "es. Chiave SSH di Produzione", - "optionalDetails": "Dettagli opzionali...", - "sshUsername": "es. root o deploy", - "hostAddress": "10.0.0.1 o example.com", - "hostName": "es. Server Web di Produzione" + "enterPassword": "Inserisci la tua password" }, "dashboard": { - "title": "Dashboard", - "github": "GitHub", - "reportBug": "Segnala un bug", - "discord": "Discord", - "docs": "Documentazione", - "donate": "Dona", - "serverOverview": "Panoramica del server", - "version": "Versione", "updateAvailable": "Aggiornamento disponibile", - "beta": "Beta", - "uptime": "Tempo di attività", - "database": "Database", - "healthy": "Sano", - "error": "Errore", - "totalHosts": "Host totali", - "totalCredentials": "Credenziali totali", - "recentActivity": "Attività recenti", - "reset": "Reimposta", - "noRecentActivity": "Nessuna attività recente", - "quickActions": "Azioni rapide", - "addHost": "Aggiungi host", - "addCredential": "Aggiungi credenziale", - "adminSettings": "Impostazioni amministratore", - "userProfile": "Profilo utente", - "serverStats": "Statistiche del server", - "customizeLayout": "Personalizza dashboard", - "justNow": "proprio ora" + "beta": "Beta" }, "dashboardTab": { "stable": "STABILE", - "registerNewServer": "Registra un nuovo server", - "storeSshKeysOrPasswords": "Salva chiavi SSH o password", - "manageUsersAndRoles": "Gestisci utenti e ruoli", - "manageYourAccount": "Gestisci il tuo account", - "hostStatus": "Stato host", - "noHostsConfigured": "Nessun host configurato", - "checking": "VERIFICA IN CORSO", - "commandPalette": "Palette comandi", - "done": "Fatto", - "clear": "Cancella", - "dragToResizeColumns": "Trascina per ridimensionare le colonne", - "hostsAvailable": "Host disponibili", - "removeSection": "Rimuovi sezione", - "addSection": "Aggiungi una sezione", - "allSectionsShown": "Tutto è già presente nella dashboard.", - "fromPlugins": "Dai plugin", - "dropHere": "Rilascia una sezione qui", - "dragToReorder": "Trascina le sezioni per riordinarle", - "clearActivityConfirm": "Cancellare l'attività recente?", - "resetConfirm": "Ripristinare la dashboard al layout predefinito?", "onlineCount_one": "{{count}} online", "onlineCount_many": "{{count}} online", "onlineCount_other": "{{count}} online", @@ -1221,425 +1078,48 @@ "hostCount_other": "{{count}} host" }, "admin": { - "sectionGeneral": "Generale", - "sectionUsers": "Utenti", - "sectionSessions": "Sessioni", - "sectionRoles": "Ruoli", - "sectionDatabase": "Database", - "sectionApiKeys": "Chiavi API", - "sectionAuditLog": "Registro di controllo", - "sectionSsl": "Certificato HTTPS", - "sectionBranding": "White Label", - "brandingAppName": "Nome dell'applicazione", - "brandingAppNameDesc": "Visualizzato nella schermata di accesso e nella scheda del browser. Lascia vuoto per usare \"Termix\".", - "brandingTagline": "Slogan", - "brandingTaglineDesc": "Visualizzato sotto il nome dell'applicazione nella schermata di accesso. Lascia vuoto per usare lo slogan predefinito.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG o WEBP, fino a 750 KB. Sostituisce l'icona predefinita nella schermata di accesso e nella scheda del browser.", - "brandingLogoUpload": "Carica logo", - "brandingLogoReset": "Ripristina predefinito", - "brandingLogoInvalid": "Immagine non valida. Usa un file PNG, JPEG o WEBP di massimo 750 KB.", - "brandingSaved": "Impostazioni di branding salvate", - "brandingSaveFailed": "Impossibile salvare le impostazioni di branding", - "sslDescription": "Il certificato che Termix serve tramite HTTPS. Carica il tuo qui oppure ottienine e rinnovanene uno da Let's Encrypt nella sezione Certificati ACME.", - "sslDocsLink": "Visualizza documentazione SSL", - "sslCertStatus": "Stato del certificato", - "sslCertStatusNone": "Nessun certificato", - "sslCertStatusValid": "Valido", - "sslCertStatusExpiring": "Scade presto", - "sslCertStatusExpired": "Scaduto", - "sslCertExpiresAt": "Scade il {{date}}", - "sslInfoNote": "Dopo l'emissione o il caricamento di un certificato, Termix abiliterà automaticamente HTTPS sulla porta SSL_PORT (predefinita 8443) oltre alla porta HTTP esistente. Assicurati che questa porta sia pubblicata/mappata per questo container in modo che sia raggiungibile.", - "sslManualCert": "Certificato (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Chiave privata (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Incolla il tuo certificato esistente e la chiave privata, inclusa la catena completa se richiesta dalla tua CA.", - "sslManualUpload": "Carica e installa certificato", - "sslManualUploadLoading": "Caricamento certificato...", - "sslManualUploadSuccess": "Certificato caricato e installato con successo", - "sslManualUploadFailed": "Caricamento certificato fallito", - "sslManualRequiresFields": "Certificato e chiave privata sono obbligatori", - "auditLogTotal": "{{total}} voci totali", - "auditLogEmpty": "Nessuna voce nel registro di controllo trovata", - "auditLogSuccess": "Successo", - "auditLogFailed": "Fallito", - "auditLogClearFilters": "Cancella filtri", - "auditLogPage": "Pagina {{page}} di {{totalPages}} ({{total}} totali)", - "auditLogIp": "IP", - "auditLogResourceId": "ID risorsa", - "auditLogFilterUser": "Utente", - "auditLogFilterAction": "Azione", - "auditLogFilterResourceType": "Tipo di risorsa", - "auditLogFilterStatus": "Stato", - "auditLogFilterFrom": "Da", - "auditLogFilterTo": "A", - "auditLogFilterAll": "Tutti", - "allowRegistration": "Consenti registrazione utenti", - "allowRegistrationDesc": "Consenti ai nuovi utenti di registrarsi autonomamente con nome utente e password", - "allowPasswordLogin": "Consenti accesso con password", - "allowPasswordLoginDesc": "Accesso con nome utente e password", - "externalAutoProvision": "Crea automaticamente account esterni", - "externalAutoProvisionDesc": "Crea un account la prima volta che qualcuno accede tramite un metodo esterno come SSO o LDAP. Se disattivato, solo gli utenti con un account esistente possono accedere in questo modo", - "secondFactorAfterExternalLogin": "Richiedi un secondo fattore dopo l'accesso esterno (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Se disattivato, il secondo fattore registrato viene richiesto solo dopo l'accesso con password e altri metodi locali, come prima. Se attivato, viene richiesto dopo ogni metodo di accesso, inclusi SSO e LDAP.", - "allowPasswordReset": "Consenti reset password", - "allowPasswordResetDesc": "Codice di reset tramite log Docker", - "auditForwardingTitle": "Invia a SIEM", - "auditForwardingDesc": "Invia una copia di ogni voce di audit a un raccoglitore esterno in formato NDJSON. I log locali rimangono la fonte di verità.", - "auditForwardingEnvNotice": "Una variabile d'ambiente configura anche l'inoltro; l'URL salvato qui ha la precedenza.", - "auditForwardingToken": "Token Bearer (opzionale)", - "auditForwardingTokenStored": "Token Bearer (salvato)", - "auditForwardingSaved": "Impostazioni di inoltro audit salvate", - "auditForwardingSaveError": "Impossibile salvare le impostazioni di inoltro audit", - "sessionTimeout": "Timeout sessione", - "hours": "ore", - "sessionTimeoutRange": "Min 1h, max 720h", - "monitoringDefaults": "Valori predefiniti monitoraggio", - "statusCheck": "Verifica stato", - "sec": "sec", - "logLevel": "Livello log", "usersCount_one": "{{count}} utente", "usersCount_many": "{{count}} utenti", - "usersCount_other": "{{count}} utenti", - "searchUsers": "Cerca utenti...", - "noUsers": "Nessun utente", - "noUsersMatch": "Nessun utente corrisponde alla tua ricerca", - "pageOf": "Pagina {{page}} di {{total}}", - "createUser": "Crea", - "newRole": "Nuovo ruolo", - "roleName": "Nome", - "roleDisplayName": "Nome visualizzato", - "roleDescription": "Descrizione", "rolesCount_one": "{{count}} ruolo", "rolesCount_many": "{{count}} ruoli", - "rolesCount_other": "{{count}} ruoli", - "createRole": "Crea", - "creating": "Creazione in corso...", - "exportDatabase": "Esporta database", - "exportDatabaseDesc": "Scarica un backup SQLite portatile di tutti gli host, le credenziali e le impostazioni", - "export": "Esporta", - "exporting": "Esportazione in corso...", - "importDatabase": "Importa database", - "importDatabaseDesc": "Ripristina da un backup .sqlite portatile su qualsiasi backend database", - "importDatabaseSelected": "Selezionato: {{name}}", - "selectFile": "Seleziona file", - "changeFile": "Modifica", - "import": "Importa", - "importing": "Importazione in corso...", "apiKeysCount_one": "{{count}} chiave", "apiKeysCount_many": "{{count}} chiavi", - "apiKeysCount_other": "{{count}} chiavi", - "apiKeysDocsLink": "Visualizza documentazione", - "apiKeysCliHint": "Usa una chiave API con il CLI di Termix per gestire i server dal terminale.", - "apiKeysCliLink": "Visualizza documentazione CLI", - "newApiKey": "Nuova chiave API", - "apiKeyCreatedWarning": "Chiave creata - copiala ora, non verrà più mostrata.", - "apiKeyName": "Nome", - "apiKeyUser": "Utente", - "apiKeySelectUser": "Seleziona un utente...", - "apiKeyExpiresAt": "Scade il", - "createKey": "Crea chiave", - "apiKeyNoExpiry": "Nessuna scadenza", - "revokedBadge": "REVOCATA", - "authTypeDual": "Autenticazione doppia", - "authTypeExternal": "Esterna", - "authTypeLocal": "Locale", - "adminStatusAdministrator": "Amministratore", - "adminStatusRegularUser": "Utente normale", - "adminBadge": "AMMIN", - "systemBadge": "SIST", - "customBadge": "PERSONALIZZATO", - "youBadge": "TU", "sessionsActive_one": "{{count}} attiva", "sessionsActive_many": "{{count}} attive", - "sessionsActive_other": "{{count}} attive", - "sessionActive": "Attivo: {{time}}", - "sessionExpires": "Scad: {{time}}", - "revokeAll": "Tutti", - "revokeAllSessionsSuccess": "Tutte le sessioni per l'utente sono state revocate", - "revokeAllSessionsFailed": "Impossibile revocare le sessioni", - "revokeSessionFailed": "Impossibile revocare la sessione", - "addRole": "Aggiungi ruolo", - "noCustomRoles": "Nessun ruolo personalizzato definito", - "removeRoleFailed": "Impossibile rimuovere il ruolo", - "assignRoleFailed": "Impossibile assegnare il ruolo", - "userAdminAccess": "Amministratore", - "userAdminAccessDesc": "Accesso completo a tutte le impostazioni di amministrazione", - "userRoles": "Ruoli", - "revokeAllUserSessions": "Revoca tutte le sessioni", - "revokeAllUserSessionsDesc": "Forza il re-login su tutti i dispositivi", - "revoke": "Revoca", - "deleteUserWarning": "L'eliminazione di questo utente è permanente.", - "deleteUser": "Elimina {{username}}", - "deleting": "Eliminazione in corso...", - "deleteUserFailed": "Impossibile eliminare l'utente", - "deleteUserSuccess": "Utente \"{{username}}\" eliminato", - "deleteRoleSuccess": "Ruolo \"{{name}}\" eliminato", - "revokeKeySuccess": "Chiave \"{{name}}\" revocata", - "revokeKeyFailed": "Impossibile revocare la chiave", - "copiedToClipboard": "Copiato negli appunti", - "done": "Fatto", - "createUserTitle": "Crea utente", - "createUserDesc": "Crea un nuovo account locale.", - "createUserUsername": "Nome utente", - "createUserPassword": "Password", - "createUserPasswordHint": "Minimo 6 caratteri.", - "createUserEnterUsername": "Inserisci nome utente", - "createUserSubmit": "Crea utente", - "editUserTitle": "Gestisci utente: {{username}}", - "editUserDesc": "Modifica ruoli, stato di amministratore, sessioni e impostazioni dell'account.", - "editUserUsername": "Nome utente", - "editUserAuthType": "Tipo di autenticazione", - "editUserAdminStatus": "Stato amministratore", - "editUserUserId": "ID utente", - "linkAccountTitle": "Collega account", - "linkAccountDesc": "Unisci l'account esterno {{username}} con un account locale esistente.", - "linkAccountDescLocal": "Collega un account locale {{username}} con un account esistente solo esterno.", - "linkAccountWarningTitle": "Questo causerà:", - "linkAccountEffect1": "Eliminare l'account esterno", - "linkAccountEffect2": "Aggiungere il suo accesso esterno all'account di destinazione", - "linkAccountEffect3": "Consentire l'accesso sia esterno che tramite password", - "linkAccountTargetUsername": "Nome utente account locale", - "linkAccountTargetPlaceholder": "Inserisci il nome utente dell'account locale a cui collegarlo", - "linkAccountExternalUsername": "Nome utente account esterno", - "linkAccountExternalPlaceholder": "Inserisci il nome utente dell'account esterno da unire", - "linkAccountExternalNotFound": "Nessun account esterno trovato con questo nome utente", - "linkAccounts": "Collega account", - "linkAccountSuccess": "Account collegati con successo", - "linkAccountFailed": "Impossibile collegare gli account", - "linkAccountInProgress": "Collegamento in corso...", - "unlinkAccountTitle": "Scollega accesso esterno", - "unlinkAccountDesc": "Rimuovi l'accesso esterno da {{username}}. L'utente potrà accedere solo con la password.", - "unlinkAccountWarning": "Questo rimuoverà l'accesso esterno da questo account. L'utente deve avere una password impostata per continuare ad accedere.", - "unlinkAccount": "Scollega accesso esterno", - "unlinkAccountInProgress": "Scollegamento in corso...", - "unlinkAccountSuccess": "Accesso esterno scollegato", - "unlinkAccountFailed": "Impossibile scollegare l'accesso esterno", - "updateRegistrationFailed": "Impossibile aggiornare l'impostazione di registrazione", - "updatePasswordLoginFailed": "Impossibile aggiornare l'impostazione di accesso con password", - "updateSecondFactorAfterExternalLoginFailed": "Impossibile aggiornare l'impostazione del secondo fattore", - "updatePasswordResetFailed": "Impossibile aggiornare l'impostazione di reset della password", - "sessionTimeoutRange2": "Il timeout della sessione deve essere compreso tra 1 e 720 ore", - "sessionTimeoutSaved": "Timeout della sessione salvato", - "sessionTimeoutSaveFailed": "Impossibile salvare il timeout della sessione", - "monitoringIntervalInvalid": "Valori di intervallo non validi", - "monitoringSaved": "Impostazioni di monitoraggio salvate", - "monitoringSaveFailed": "Impossibile salvare le impostazioni di monitoraggio", - "logLevelUpdateFailed": "Impossibile aggiornare il livello di log", - "createUserRequired": "Nome utente e password sono obbligatori", - "createUserPasswordTooShort": "La password deve contenere almeno 6 caratteri", - "createUserSuccess": "Utente \"{{username}}\" creato", - "createUserFailed": "Impossibile creare l'utente", - "updateAdminStatusFailed": "Impossibile aggiornare lo stato di amministratore", - "allSessionsRevoked": "Tutte le sessioni revocate", - "revokeSessionsFailed": "Impossibile revocare le sessioni", - "manageUserData": "Gestisci dati utente", - "backToUsers": "Torna agli utenti", - "manageTabAccount": "Account", - "manageTabHosts": "Host", - "manageTabCredentials": "Credenziali", - "manageTabSessions": "Sessioni", - "manageTabDanger": "Pericolo", - "manageEditorBack": "Torna ai dati di {{username}}", - "dataLockedBadge": "BLOCCATO", - "dataLockedNotice": "I dati di {{username}} rimangono bloccati fino al suo prossimo accesso. I suoi host, credenziali e snippet non possono essere visualizzati o modificati fino ad allora.", - "resetPasswordTitle": "Reimposta password", - "resetPasswordExternalOnly": "Questo utente accede tramite un provider esterno e non ha una password.", - "resetPasswordPlaceholder": "Nuova password", - "resetPasswordBtn": "Reimposta", - "resetPasswordWorking": "Reimpostazione in corso...", - "resetPasswordSuccess": "Password reimpostata", - "resetPasswordSuccessWiped": "Password reimpostata. I dati crittografati dell'utente sono stati cancellati.", - "resetPasswordFailed": "Impossibile reimpostare la password", - "resetPasswordConfirmWipe": "{{username}} non ha effettuato accesso dall'aggiornamento della crittografia, quindi i suoi dati non possono essere recuperati. Reimpostare ora eliminerà i suoi host, credenziali e snippet. Continuare?", - "manageApiKeys": "Chiavi API", - "apiKeyNamePlaceholder": "Nome chiave", - "apiKeyCopyNotice": "Copia questa chiave ora, non verrà più mostrata.", - "noApiKeysForUser": "Nessuna chiave API", - "apiKeyDeleteFailed": "Impossibile eliminare la chiave API", - "exportUserData": "Esportazione dati", - "exportUserDataDesc": "Scarica gli host, le credenziali e i dati del file manager di questo utente in formato JSON. I segreti vengono decrittografati.", - "exportUserDataSuccess": "Dati utente esportati", - "exportUserDataFailed": "Impossibile esportare i dati utente", "hostsCount_one": "{{count}} host", "hostsCount_many": "{{count}} host", "hostsCount_other": "{{count}} host", - "addHostForUser": "Aggiungi host", - "noHostsForUser": "Questo utente non ha host", - "connectToHost": "Connetti", - "deleteHostConfirm": "Eliminare l'host \"{{name}}\" appartenente a {{username}}?", - "hostDeletedSuccess": "Host eliminato", - "hostDeleteFailed": "Impossibile eliminare l'host", "credentialsCount_one": "{{count}} credenziale", "credentialsCount_many": "{{count}} credenziali", "credentialsCount_other": "{{count}} credenziali", - "addCredentialForUser": "Aggiungi credenziale", - "noCredentialsForUser": "Questo utente non ha credenziali", - "deleteCredentialConfirm": "Eliminare la credenziale \"{{name}}\" appartenente a {{username}}?", - "credentialDeletedSuccess": "Credenziale eliminata", - "credentialDeleteFailed": "Impossibile eliminare la credenziale", - "noSessionsForUser": "Nessuna sessione attiva", - "deleteSuccessorLabel": "Trasferisci host e credenziali a", - "deleteSuccessorMe": "Me (l'amministratore che elimina)", - "deleteSuccessorNone": "Nessuno, eliminale", - "deleteSuccessorDesc": "Tutto ciò che questo utente ha condiviso continuerà a funzionare sotto il nuovo proprietario; scegliendo nessuno verranno eliminati i suoi host, le credenziali e le condivisioni.", - "deleteUserDangerDesc": "Elimina definitivamente {{username}} e tutti i suoi dati (host, credenziali, snippet, cronologia). Questa operazione non può essere annullata.", - "deleteUserConfirm": "Eliminare definitivamente {{username}} e tutti i suoi dati?", - "deleteUserAdminBlocked": "Rimuovi lo stato di amministratore prima di eliminare questo utente.", - "createRoleRequired": "Nome e nome visualizzato sono obbligatori", - "createRoleSuccess": "Ruolo \"{{name}}\" creato", - "createRoleFailed": "Impossibile creare il ruolo", - "apiKeyNameRequired": "Il nome della chiave è obbligatorio", - "apiKeyUserRequired": "L'ID utente è obbligatorio", - "apiKeyCreatedSuccess": "Chiave API \"{{name}}\" creata", - "apiKeyCreateFailed": "Impossibile creare la chiave API", - "exportSuccess": "Database esportato con successo", - "exportFailed": "Esportazione del database non riuscita", - "importSelectFile": "Seleziona prima un file", - "importCompleted": "Importazione completata: {{total}} elementi importati, {{skipped}} ignorati", - "importFailed": "Importazione non riuscita: {{error}}", - "importError": "Importazione del database non riuscita", - "sectionHostDefaults": "Valori predefiniti host", "rolePermissions": { "count_one": "{{count}} autorizzazione", "count_many": "{{count}} autorizzazioni", - "count_other": "{{count}} autorizzazioni", - "editAction": "Modifica autorizzazioni", - "loadError": "Impossibile caricare il catalogo delle autorizzazioni", - "saved": "Autorizzazioni del ruolo salvate", - "saveError": "Impossibile salvare le autorizzazioni del ruolo", - "save": "Salva", - "saving": "Salvataggio in corso...", - "pluginDisabled": "Plugin disabilitato", "groups": { "hosts": "Host", "credentials": "Credenziali", "admin": "Amministrazione" } - }, - "notificationPrivateEndpoints": "Host privati notifiche consentiti", - "notificationPrivateEndpointsDesc": "Host privati esatti che i canali di notifica possono contattare. Separali con le virgole.", - "updateNotificationEndpointsFailed": "Impossibile aggiornare la lista consentita degli endpoint di notifica", - "secondFactorsSectionTitle": "Secondi fattori", - "secondFactorsNone": "Nessun secondo fattore registrato", - "secondFactorUnavailable": "Non disponibile", - "resetSecondFactors": "Reimposta secondi fattori", - "resetSecondFactorsConfirm": "Rimuovere ogni secondo fattore per {{username}}? Potranno accedere con la password o SSO e registrarsi di nuovo.", - "secondFactorsResetSuccess": "Fattori secondari reimpostati", - "secondFactorsResetFailed": "Impossibile reimpostare i fattori secondari", - "passwordLoginForced": "L'accesso con password è disattivato, ma nessun altro metodo di accesso è abilitato, quindi rimane attivo per ora. Nessuno verrà bloccato.", - "sslNotRenewed": "Nessun elemento rinnova questo certificato. Scade il {{date}}. Attiva il rinnovo automatico nella sezione Certificati ACME o carica un nuovo certificato prima di quella data.", - "sslSelfSigned": "Certificato autofirmato creato da Termix. I browser mostreranno un avviso.", - "sslRenewedBy": "Rinnovato automaticamente da {{plugin}}", - "sslIssuer": "Emesso da {{issuer}}", - "sslNames": "Copre {{names}}", - "sslManualTitle": "Carica un certificato", - "updateExternalAutoProvisionFailed": "Impossibile aggiornare l'impostazione di creazione automatica", - "hostTags": "Tag host predefiniti", - "hostTagsDesc": "Tag visualizzati come suggerimenti nell'editor host da tutti gli utenti. Premi Spazio o Invio per aggiungerne uno. Rimuovere un tag qui non lo rimuove dagli host.", - "hostTagsError": "Impossibile caricare o salvare i suggerimenti per i tag host.", - "revokeAllSessionsConfirm": "Disconnettere {{username}} da tutti i dispositivi?", - "revokeSessionConfirm": "Disconnettere questa sessione?", - "revokeSession": "Disconnetti", - "deleteRoleConfirm": "Eliminare il ruolo {{name}}?", - "revokeKeyConfirm": "Revocare la chiave API {{name}}?", - "revokeKey": "Revoca" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Dove", - "who": "Chi", - "hostLabel": "Host", - "hostPlaceholder": "192.168.1.1 o example.com", - "portLabel": "Porta", - "usernameLabel": "Nome utente", - "usernamePlaceholder": "nome utente", - "authLabel": "Autenticazione", - "passwordLabel": "Password", - "passwordPlaceholder": "password", - "privateKeyLabel": "Chiave privata", - "privateKeyPlaceholder": "Incolla chiave privata...", - "credentialLabel": "Credenziale", - "credentialPlaceholder": "Seleziona una credenziale salvata", - "protocolLabel": "Protocollo", - "domainLabel": "Dominio", - "domainPlaceholder": "opzionale", - "connectToAction": "Connetti a {{name}}", - "sshProtocol": "SSH", - "noTarget": "Nessun componente installato può connettersi a questo tipo di host" + "usernameLabel": "Nome utente" }, "keybindings": { - "description": "Associa tasti ad azioni nel terminale e nell'app, oppure modifica le scorciatoie predefinite.", - "defaultsHeading": "Scorciatoie predefinite", - "fixedHeading": "Scorciatoie app", - "fixed": { - "splitRight": "Dividi a destra", - "splitDown": "Dividi in basso", - "zoomPane": "Ingrandisci il pannello attivo", - "navigatePane": "Sposta tra i pannelli", - "nextTab": "Scheda successiva", - "previousTab": "Scheda precedente", - "jumpTab": "Vai alla scheda", - "previousView": "Torna alla vista precedente della barra laterale", - "fullscreen": "Attiva/disattiva schermo intero" - }, - "customHeading": "Scorciatoie personalizzate", - "addBinding": "Aggiungi scorciatoia", - "addBindingTitle": "Aggiungi scorciatoia", - "editBindingTitle": "Modifica scorciatoia", - "loading": "Caricamento...", - "noCustomBindings": "Nessuna scorciatoia personalizzata ancora", - "defaultBadge": "Predefinito", - "customizedBadge": "Personalizzato", - "customize": "Personalizza", - "resetToDefault": "Ripristina predefiniti", - "resetAllToDefaults": "Ripristina tutto ai predefiniti", - "cancel": "Annulla", - "saveBinding": "Salva scorciatoia", - "saveError": "Impossibile salvare le scorciatoie da tastiera", - "pressKeysToRecord": "Combinazione di tasti", - "pressKeysPlaceholder": "Clicca e premi i tasti", - "recording": "Premi i tasti...", - "comboRequiredError": "Premi prima una combinazione di tasti", - "conflictWarning": "Questa combinazione è già associata a {{combo}}. Salvandola, entrambe le azioni verranno eseguite.", - "actionLabel": "Azione", "actionNextTab": "Passa alla scheda successiva", "actionPreviousTab": "Passa alla scheda precedente", "actionOpenCommandPalette": "Apri ricerca rapida", - "actionReconnectSession": "Riconnetti la sessione corrente", - "unavailableAction": "{{type}} (non disponibile)", - "actionRequiredError": "Scegli prima un'azione", - "deleteConfirm": "Eliminare questa combinazione di tasti?", - "resetAllConfirm": "Ripristinare tutte le combinazioni di tasti ai valori predefiniti?" + "actionReconnectSession": "Riconnetti la sessione corrente" }, "userProfile": { - "storageModeLocal": "Browser", - "storageModeCloud": "Database", - "storageModeDescription": "Il browser salva le impostazioni solo in questo browser. Il database le sincronizza con il server e le carica su qualsiasi dispositivo.", - "resetToDefaults": "Ripristina predefiniti", - "resetToDefaultsSuccess": "Impostazioni ripristinate ai valori predefiniti.", - "storageModeSwitch": "Archiviazione preferenze", - "sectionAccount": "Account", - "desktopProfileTitle": "Solo su questo dispositivo", - "desktopProfileDescription": "Questo profilo risiede su questo dispositivo e effettua l'accesso in modo indipendente. Collegalo a un server Termix per utilizzare gli stessi host e le stesse impostazioni su ogni dispositivo.", - "sectionInterface": "Interfaccia", - "interfacePresetDesc": "Quanto dettaglio mostra Termix. Tutte le funzionalità rimangono disponibili.", "preset_simple": "Semplice", "preset_simple_desc": "Solo l'essenziale.", "preset_balanced": "Bilanciato", "preset_balanced_desc": "Il layout standard.", "preset_advanced": "Avanzato", "preset_advanced_desc": "Tutto attivo, compatto.", - "presetClearOverrides": "Ripristina tutto", - "presetOverridesTitle": "Personalizzati", - "presetRevertArea": "Annulla", - "presetConfirmTitle": "Passare a {{preset}}?", - "presetConfirmDesc": "Questo ripristina la barra laterale, la navigazione, il layout della dashboard, la barra degli strumenti del terminale e la visualizzazione del file manager. I tuoi host, le credenziali e la homepage non vengono modificati.", - "presetConfirmApply": "Applica preset", - "runSetupAgainDesc": "Ripeti la procedura di configurazione iniziale.", - "runSetupAgainButton": "Esegui configurazione", "uiArea_chrome": "Elementi dell'app", "uiArea_hostList": "Elenco host", "uiArea_credentialList": "Elenco credenziali", @@ -1648,127 +1128,14 @@ "uiArea_terminal": "Terminale", "uiArea_fileManager": "File manager", "uiArea_hostEditor": "Editor host", - "sectionAppearance": "Aspetto", - "sectionSecurity": "Sicurezza", - "sectionApiKeys": "Chiavi API", - "sectionData": "Dati", - "usernameLabel": "Nome utente", - "roleLabel": "Ruolo", - "roleAdministrator": "Amministratore", - "authMethodLabel": "Metodo di autenticazione", - "authMethodLocal": "Locale", - "twoFaLabel": "2FA", - "twoFaOn": "Attivo", - "twoFaOff": "Disattivato", - "versionLabel": "Versione", - "cliTitle": "Termix CLI", - "cliDescription": "Apri terminali, esegui comandi e sposta file dalla tua shell.", - "cliLearnMore": "Scopri di più", - "deleteAccount": "Elimina account", - "deleteAccountDescription": "Elimina definitivamente il tuo account", - "deleteButton": "Elimina", - "deleteAccountPermanent": "Questa azione è permanente e non può essere annullata.", - "deleteAccountWarning": "Tutte le sessioni, gli host, le credenziali e le impostazioni verranno eliminati permanentemente.", - "confirmPasswordDeletePlaceholder": "Inserisci la tua password per confermare", "languageLabel": "Lingua", "themeLabel": "Tema", "fontSizeLabel": "Dimensione carattere", "interfaceFontLabel": "Carattere interfaccia", "interfaceFontDescription": "Modifica il carattere dell'interfaccia dell'applicazione. I profili del terminale mantengono le proprie impostazioni del carattere.", "accentColorLabel": "Colore di accento", - "keyboardShortcuts": "Scorciatoie da tastiera", - "keyboardShortcutsDescription": "Personalizza le scorciatoie per copia, incolla e comandi nel terminale", - "manageShortcuts": "Gestisci", - "commandPalette": "Palette comandi", - "commandPaletteDesc": "Abilita scorciatoia da tastiera", - "reopenTabsOnLogin": "Riapri schede all'accesso", - "reopenTabsOnLoginDesc": "Ripristina le schede aperte quando accedi o aggiorni la pagina, anche da un altro dispositivo", - "confirmTabClose": "Conferma chiusura scheda", - "confirmTabCloseDesc": "Chiedi conferma prima di chiudere le schede del terminale", - "showTabNumbers": "Mostra numeri delle schede", - "showTabNumbersDesc": "Visualizza un numero su ogni scheda per distinguerle più facilmente", - "settingsAppRail": "Barra app", - "sidebarSettingsMoved": "Le impostazioni di visualizzazione della barra laterale degli host sono state spostate nel pannello Personalizza barra laterale, accessibile dalla barra degli strumenti degli Host.", - "showHostTags": "Mostra tag host", - "showHostTagsDesc": "Visualizza i tag nell'elenco degli host", - "statusColors": "Colori di stato reali", - "statusColorsDesc": "Usa verde/rosso per lo stato online/offline invece del colore di accento", - "pinAppRail": "Fissa barra app", - "pinAppRailDesc": "Mantieni la barra app laterale sinistra sempre espansa invece di espanderla al passaggio del mouse", - "expandAppRailOnHover": "Espandi barra app al passaggio del mouse", - "expandAppRailOnHoverDesc": "Consenti alla barra app laterale sinistra di espandersi quando il puntatore vi passa sopra", - "appRailHoverPushesContent": "Sposta il contenuto quando si espande", - "appRailHoverPushesContentDesc": "Fai spazio alla barra laterale espansa invece di sovrapporla alla pagina. Le sessioni aperte, come il desktop remoto, verranno ridimensionate ogni volta.", - "showPinAppRailButton": "Mostra pulsante per fissare barra app", - "showPinAppRailButtonDesc": "Mostra un pulsante nella barra app per fissarla aperta. Disattivato di default.", - "settingsNavigation": "Navigazione", - "navigationTabsDesc": "Scegli quali schede visualizzare nella barra app", - "settingsUpdates": "Aggiornamenti", - "disableUpdateChecks": "Disabilita controlli aggiornamenti", - "disableUpdateChecksDesc": "Interrompi la ricerca di aggiornamenti", - "changePassword": "Cambia password", - "currentPasswordLabel": "Password attuale", - "currentPasswordPlaceholder": "Password attuale", - "newPasswordLabel": "Nuova password", - "newPasswordPlaceholder": "Nuova password", - "confirmPasswordLabel": "Conferma nuova password", - "confirmPasswordPlaceholder": "Conferma nuova password", - "updatePassword": "Aggiorna password", - "createApiKeyTitle": "Crea chiave API", - "createApiKeyDescription": "Genera una nuova chiave API per l'accesso programmatico.", - "apiKeyNameLabel": "Nome", - "apiKeyNamePlaceholder": "es. Pipeline CI", - "expiryDateLabel": "Data di scadenza", - "optional": "opzionale", - "cancel": "Annulla", - "createKey": "Crea chiave", - "apiKeyCreatedWarning": "Chiave creata: copiala ora, non verrà più mostrata.", - "copyApiKey": "Copia chiave API", - "copiedToClipboard": "Copiato negli appunti", "apiKeyCount_one": "{{count}} chiave", "apiKeyCount_many": "{{count}} chiavi", - "apiKeyCount_other": "{{count}} chiavi", - "newKey": "Nuova chiave", - "noApiKeys": "Nessuna chiave API ancora.", - "apiKeyActive": "Attiva", - "apiKeyUsageHint": "Includi la tua chiave nell'", - "apiKeyUsageHintHeader": "header.", - "apiKeyPermissionsHint": "Le chiavi ereditano i permessi dell'utente che le crea.", - "exportData": "Esporta i miei dati", - "exportDataDesc": "Scarica un backup dei tuoi host, credenziali e impostazioni per trasferirli su un altro dispositivo", - "export": "Esporta", - "exporting": "Esportazione in corso...", - "importData": "Importa i miei dati", - "importDataDesc": "Ripristina i tuoi host, credenziali e impostazioni da un file di backup .sqlite", - "importDataSelected": "Selezionato: {{name}}", - "selectFile": "Seleziona file", - "changeFile": "Cambia", - "import": "Importa", - "importing": "Importazione in corso...", - "exportSuccess": "Dati esportati con successo", - "exportFailed": "Esportazione dati non riuscita", - "importSelectFile": "Seleziona prima un file", - "importCompleted": "Importazione completata: {{total}} elementi importati, {{skipped}} ignorati", - "importFailed": "Importazione non riuscita: {{error}}", - "roleUser": "Utente", - "authMethodDual": "Autenticazione doppia", - "authMethodExternal": "Esterna", - "done": "Fatto", - "apiKeyNameRequired": "Il nome della chiave è obbligatorio", - "apiKeyCreated": "Chiave API \"{{name}}\" creata", - "apiKeyCreateFailed": "Creazione chiave API non riuscita", - "apiKeyUser": "Utente", - "apiKeyExpires": "Scade", - "apiKeyRevoked": "Chiave API \"{{name}}\" revocata", - "apiKeyRevokeFailed": "Revoca chiave API non riuscita", - "passwordFieldsRequired": "La password attuale e quella nuova sono obbligatorie", - "passwordMismatch": "Le password non corrispondono", - "passwordTooShort": "La password deve contenere almeno 6 caratteri", - "passwordUpdated": "Password aggiornata con successo", - "passwordUpdateFailed": "Aggiornamento password non riuscito", - "deletePasswordRequired": "La password è richiesta per eliminare il tuo account", - "deleteFailed": "Eliminazione account non riuscita", - "deleting": "Eliminazione in corso...", "colorPickerTooltip": "Apri selettore colore", "themeSystem": "Sistema", "themeLight": "Chiaro", @@ -1779,18 +1146,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Connesso a {{server}}", - "linkedProfileDescription": "Questo dispositivo utilizza il tuo account sul server e mantiene una copia dei tuoi dati, quindi funziona anche offline.", - "manageSync": "Gestisci sincronizzazione", - "setUpSync": "Collega a un server", - "settingsTabsAndShortcuts": "Schede e scorciatoie", - "onBetaTitle": "Sei in versione beta", - "onBetaDescription": "Grazie per il test. Dicci cosa non funziona.", - "tryBetaTitle": "Prova le nuove funzionalità in anticipo", - "tryBetaDescription": "Unisciti al programma beta in Aggiornamenti.", - "sendBetaFeedback": "Invia feedback sulla beta", - "openUpdates": "Aggiornamenti" + "themeGruvbox": "Gruvbox" } } }, @@ -2055,8 +1411,7 @@ "hasDependents": "{{name}} è necessario per {{list}}. Disattivali o disinstallali prima.", "missingDependencies": "{{name}} ha bisogno di {{list}}, che non è installato.", "consentChanged": "Le richieste di questo plugin sono cambiate dall'ultima volta che le hai controllate. Controlla di nuovo l'elenco.", - "upload": "Impossibile leggere {{name}}: {{error}}", - "developerMode": "Impossibile modificare la modalità sviluppatore: {{error}}" + "upload": "Impossibile leggere {{name}}: {{error}}" }, "data": { "title": "Dati memorizzati", @@ -2188,13 +1543,7 @@ "browsePlugins": "Sfoglia plugin", "loading": "Caricamento", "developer": { - "title": "Modalità sviluppatore plugin", - "hint": "Consente agli amministratori di installare plugin da un file .tmxplug nella scheda Plugin, senza i controlli del registro. Usalo per creare e testare i tuoi plugin.", - "enableTitle": "Attivare la modalità sviluppatore?", - "enableBody": "Gli amministratori potranno installare plugin da file non verificati da Termix. Un plugin può fare tutto ciò che le sue funzionalità consentono, quindi attiva questa opzione solo mentre stai creando o testando plugin.", - "enable": "Attiva", - "installFromFile": "Installa da file", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS è impostato, quindi l'installazione da file rimane bloccata." + "installFromFile": "Installa da file" }, "count": { "downloads_one": "{{formatted}} download", @@ -2233,71 +1582,7 @@ "secretSet": "Impostato", "secretNotSet": "Non impostato", "secretReplace": "Sostituisci", - "pluginSettingsSaved": "Impostazioni salvate", - "pluginSettingsInvalid": "Alcune impostazioni non sono state salvate. Controlla i campi evidenziati.", - "pluginSettingsSaveFailed": "Salvataggio impostazioni non riuscito", - "pluginSettingsLoadFailed": "Caricamento impostazioni non riuscito", - "featureUnavailable": "{{name}} non è disponibile al momento. Queste impostazioni vengono salvate ma non avranno effetto.", - "account": "Account", - "security": "Sicurezza", - "apiKeys": "Chiavi API", - "data": "Dati e sincronizzazione", - "interface": "Interfaccia", - "appearance": "Aspetto", - "keybindings": "Scorciatoie da tastiera", - "adminGeneral": "Generali", - "adminUsers": "Utenti", - "adminSessions": "Sessioni", - "adminRoles": "Ruoli", - "adminHostDefaults": "Impostazioni predefinite host", - "adminBranding": "Branding", - "adminDatabase": "Database", - "adminSsl": "SSL", - "adminApiKeys": "Chiavi API", - "adminAuditLog": "Registro audit", - "bandYou": "Il tuo account", - "bandApp": "Questa app", - "bandPlugins": "Plugin", - "bandInstance": "Questo server", - "searchPlaceholder": "Cerca impostazioni", - "noResults": "Nessuna impostazione corrisponde.", - "pages": "Pagine", - "instanceSettings": "Impostazioni server", - "nothingHere": "Niente da impostare qui.", - "searchPage": "Cerca in questa pagina", - "noPageMatches": "Nessuna corrispondenza in questa pagina.", - "updates": { - "title": "Aggiornamenti", - "betaProgram": "Programma beta", - "betaIntro": "Le versioni beta sono build anticipate della prossima versione di Termix. Vengono rilasciate martedì e venerdì quando c'è qualcosa di nuovo da provare. Possono contenere bug e il tuo feedback è ciò che rende migliore la versione stabile.", - "termixBetas": "Versioni beta di Termix", - "termixBetasHint": "Avvisami delle nuove beta, non solo delle versioni stabili.", - "runningBetaBuild": "Stai utilizzando una build beta. Per uscire, torna a un'immagine o un installer stabile.", - "howToInstall": "Come ottenere la beta", - "desktopInstall": "Scarica l'installer beta e installalo sopra questo.", - "downloadBeta": "Scarica {{version}}", - "dockerInstall": "Cambia la tua immagine con il tag beta e riavvia il container:", - "copy": "Copia", - "copied": "Copiato", - "copyFailed": "Impossibile copiare", - "learnMore": "Scopri di più sulle beta", - "feedback": "Feedback", - "feedbackHint": "Hai trovato un bug o hai un'idea? Verrà inviata direttamente agli sviluppatori con la tua versione già inserita.", - "sendFeedback": "Invia feedback sulla beta", - "releases": "Rilasci", - "thisVersion": "Questa versione", - "newestStable": "Ultima stabile", - "newestBeta": "Ultima beta", - "noRelease": "Nessuna al momento", - "pluginBetas": "Plugin beta", - "pluginBetasIntro": "Ogni plugin può utilizzare le beta in modo indipendente. Per provarne uno, aprilo e premi Prova beta.", - "openPlugins": "Apri Plugin", - "waitingForStable": "Tornato alla versione stabile. Rimane su {{version}} finché non viene rilasciata una versione stabile più recente.", - "backToStable": "Torna alla versione stabile", - "allPluginsBeta": "Usa le beta per tutti i plugin", - "allPluginsStable": "Tutti i plugin tornati alla versione stabile", - "saveFailed": "Impossibile salvare la modifica" - } + "featureUnavailable": "{{name}} non è disponibile al momento. Queste impostazioni vengono salvate ma non avranno effetto." }, "managerCard": { "refresh": "Aggiorna", @@ -2307,86 +1592,16 @@ "filter": "Filtra..." }, "sync": { - "server": "Server Termix", - "account": "Account", - "status": "Stato", - "never": "mai", - "justNow": "proprio ora", "minutesAgo_one": "{{count}} minuto fa", "minutesAgo_many": "{{count}} minuti fa", "minutesAgo_other": "{{count}} minuti fa", "hoursAgo_one": "{{count}} ora fa", "hoursAgo_many": "{{count}} ore fa", "hoursAgo_other": "{{count}} ore fa", - "actionFailed": "Non ha funzionato. Riprova.", - "unlinkedTitle": "Solo su questo dispositivo", - "unlinkedBody": "Termix funziona in modo indipendente su questo dispositivo. Collegalo al tuo server Termix per mantenere tutto sincronizzato.", - "unlinkedPointHosts": "I tuoi host, credenziali, snippet e impostazioni ti seguono su ogni dispositivo.", - "unlinkedPointOffline": "Tutto continua a funzionare quando il server non è raggiungibile e si sincronizzerà in seguito.", - "unlinkedPointAccount": "Effettui l'accesso con il tuo account server e gli host condivisi con te da altre persone appariranno anche qui.", - "linkButton": "Collega a un server", - "state": { - "syncing": "Sincronizzazione in corso", - "offline": "Server non raggiungibile", - "error": "Sincronizzazione interrotta", - "signedOut": "Disconnesso", - "synced": "Sincronizzato {{time}}" - }, "pending_one": "{{count}} modifica in attesa di sincronizzazione", "pending_many": "{{count}} modifiche in attesa di sincronizzazione", "pending_other": "{{count}} modifiche in attesa di sincronizzazione", - "signInAgain": "Accedi di nuovo", - "syncNow": "Sincronizza ora", - "unlink": "Scollega", - "unlinked": "Questo dispositivo non è più collegato", - "unlinkTitle": "Scollegare questo dispositivo?", - "unlinkDescription": "L'operazione interrompe la sincronizzazione e disconnette dal server. Gli host condivisi con te da altri verranno rimossi da questo dispositivo in ogni caso.", - "unlinkKeepTitle": "Conserva i miei dati qui", - "unlinkKeepBody": "I tuoi host, le credenziali e le impostazioni rimangono su questo dispositivo e continuano a funzionare in modo indipendente.", - "unlinkRemoveTitle": "Rimuovi i dati sincronizzati", - "unlinkRemoveBody": "Tutto ciò che proviene dal server viene rimosso da questo dispositivo. Rimangono solo gli host conservati localmente.", - "conflictsTitle": "Conflitti", - "conflictsDescription": "Questi elementi sono stati modificati sia qui che sul server contemporaneamente. È in uso la versione del server. Mantieni la tua per inviarla al server al suo posto.", - "keepMine": "Mantieni la mia versione", - "keepServer": "Mantieni quella del server", - "errorsTitle": "Non sincronizzati", - "errorsDescription": "Il server non ha accettato queste modifiche. Rimangono su questo dispositivo.", - "errorPermission": "Il tuo account sul server non ha il permesso di apportare questa modifica.", - "retry": "Riprova", - "whatSyncs": "Cosa viene sincronizzato", - "whatSyncsDescription": "Disabilita tutto ciò che desideri mantenere solo su questo dispositivo.", - "coreGroup": "Termix", - "notOnServer": "Il server non dispone di questo elemento", - "notOnDevice": "Non ancora su questo dispositivo", - "localOnlyHint": "Puoi anche mantenere singoli host o cartelle su questo dispositivo dalle loro impostazioni.", - "originTitle": "Origine delle connessioni", - "originDescription": "Connettiti agli host da questo dispositivo o tramite il server. Puoi modificare questa impostazione per ogni host.", - "originLocal": "Questo dispositivo", - "originRemote": "Il server", - "entities": { - "hosts": "Host", - "sshCredentials": "Credenziali", - "sshFolders": "Cartelle", - "userPreferences": "Preferenze", - "pluginUserSettings": "Impostazioni plugin", - "sharedHosts": "Host condivisi con te", - "sharedCredentials": "Credenziali condivise con te", - "vaultProfiles": "Profili Vault", - "snippetFolders": "Cartelle snippet", - "snippets": "Snippet", - "dashboardServiceLinks": "Link ai servizi", - "homepageItems": "Elementi homepage", - "networkTopology": "Mappa di rete", - "workspaces": "Spazi di lavoro", - "hostDefaults": "Valori predefiniti host", - "hostDefaultsAdmin": "Valori predefiniti host del server", - "aiProviders": "Provider AI", - "homepageLayouts": "Layout homepage", - "accountProfile": "Profilo account" - }, "proxy": { - "title": "Proxy inverso", - "description": "Necessario solo quando qualcosa come Cloudflare Access o una pagina di accesso si trova davanti al tuo server.", "headersTitle": "Intestazioni aggiuntive", "headersHint": "Inviati con ogni richiesta al server, ad esempio un token di servizio Cloudflare Access.", "headerName": "Nome intestazione", @@ -2399,8 +1614,7 @@ "username": "Nome utente", "password": "Password", "allowInvalidCertificate": "Fidati di un certificato autofirmato", - "allowInvalidCertificateHint": "Solo per il tuo server, quando il suo certificato non proviene da un'autorità nota.", - "saved": "Salvato" + "allowInvalidCertificateHint": "Solo per il tuo server, quando il suo certificato non proviene da un'autorità nota." }, "problems": { "invalidUrl": "Questo non sembra un indirizzo web valido.", @@ -2440,6 +1654,27 @@ "linking": "Collegamento ed esecuzione della prima sincronizzazione...", "linked": "Collegato. I tuoi dati sono ora in sincronizzazione.", "signedInAgain": "Accesso effettuato. La sincronizzazione è ripresa." + }, + "entities": { + "hosts": "Host", + "sshCredentials": "Credenziali", + "sshFolders": "Cartelle", + "userPreferences": "Preferenze", + "pluginUserSettings": "Impostazioni plugin", + "sharedHosts": "Host condivisi con te", + "sharedCredentials": "Credenziali condivise con te", + "vaultProfiles": "Profili Vault", + "snippetFolders": "Cartelle snippet", + "snippets": "Snippet", + "dashboardServiceLinks": "Link ai servizi", + "homepageItems": "Elementi homepage", + "networkTopology": "Mappa di rete", + "workspaces": "Spazi di lavoro", + "hostDefaults": "Valori predefiniti host", + "hostDefaultsAdmin": "Valori predefiniti host del server", + "aiProviders": "Provider AI", + "homepageLayouts": "Layout homepage", + "accountProfile": "Profilo account" } }, "hostDefaults": { @@ -2456,34 +1691,15 @@ "resetTitle": "Questo host imposta il proprio valore. Clicca per usare di nuovo il valore predefinito da {{source}}", "clearTitle": "Impostato a questo livello. Clicca per cancellarlo e usare {{source}} invece", "inheritedTitle": "Segue il valore predefinito da {{source}}", - "titleAdmin": "Valori predefiniti host del server", - "titleUser": "I miei valori predefiniti host", - "titleFolder": "Valori predefiniti cartella: {{name}}", - "descriptionAdmin": "Valori predefiniti per ogni host su questo server. I valori predefiniti personali di un utente, quelli di una cartella o l'host stesso possono comunque impostare un valore diverso. Modifica un campo per impostarlo qui, oppure cancellalo per lasciarlo non impostato.", - "descriptionUser": "Valori predefiniti per tutti i tuoi host, sovrascrivendo quelli del server. Una cartella o l'host stesso possono comunque impostare un valore diverso. Modifica un campo per impostarlo qui, oppure cancellalo per lasciarlo non impostato.", - "descriptionFolder": "Valori predefiniti per gli host in questa cartella e nelle sue sottocartelle, sovrascrivendo i tuoi personali. Un host può comunque impostare un valore diverso. Modifica un campo per impostarlo qui, oppure cancellalo per lasciarlo non impostato.", - "save": "Salva valori predefiniti", "saved_one": "Valori predefiniti salvati. {{count}} host è stato aggiornato.", "saved_many": "Valori predefiniti salvati. {{count}} host sono stati aggiornati.", "saved_other": "Valori predefiniti salvati. {{count}} host sono stati aggiornati.", - "savedInBackground": "Valori predefiniti salvati. Gli host stanno venendo aggiornati in background.", "appliedToHosts_one": "{{count}} host è stato aggiornato con i nuovi valori predefiniti.", "appliedToHosts_many": "{{count}} host sono stati aggiornati con i nuovi valori predefiniti.", "appliedToHosts_other": "{{count}} host sono stati aggiornati con i nuovi valori predefiniti.", - "saveFailed": "Impossibile salvare i valori predefiniti", - "loadFailed": "Impossibile caricare i valori predefiniti", - "confirmTitle": "Salvare i valori predefiniti?", "confirmChanges_one": "{{count}} host segue questi valori predefiniti e verrà modificato.", "confirmChanges_many": "{{count}} host seguono questi valori predefiniti e verranno modificati.", "confirmChanges_other": "{{count}} host seguono questi valori predefiniti e verranno modificati.", - "confirmNoChanges": "Nessuna modifica agli host esistenti. I nuovi host partiranno con questi valori predefiniti.", - "menuMyDefaults": "I miei valori predefiniti host", - "folderDefaultsAction": "Valori predefiniti cartella", - "adminSectionDescription": "Imposta i valori predefiniti che ogni host su questo server segue, per ogni impostazione che un host ha, inclusi quelli di ogni plugin. Utenti e cartelle possono impostare i propri sopra, e qualsiasi host può comunque usare il proprio valore.", - "editServerDefaults": "Modifica valori predefiniti del server", - "resetMenu": "Reimposta", - "resetAll": "Ripristina tutto ai valori predefiniti", - "resetCore": "Ripristina connessione e SSH ai valori predefiniti", "resetDone_one": "{{count}} host ora segue i propri valori predefiniti.", "resetDone_many": "{{count}} host ora seguono i propri valori predefiniti.", "resetDone_other": "{{count}} host ora seguono i propri valori predefiniti." @@ -2498,50 +1714,16 @@ "fields": { "secretSaved": "Salvato. Digita per sostituirlo." }, - "sharing": { - "revokeConfirm": "Rimuovere l'accesso per {{name}}?", - "revoke": "Rimuovi accesso" - }, "manage": { - "searchSettings": "Cerca impostazioni", - "noMatchingSettings": "Nessuna impostazione corrisponde.", - "sections": "Sezioni", - "sectionNeedsAttention": "Qualcosa qui richiede attenzione", "needsAttention_one": "Una cosa richiede attenzione.", "needsAttention_many": "{{count}} cose richiedono attenzione.", "needsAttention_other": "{{count}} cose richiedono attenzione.", - "bandHost": "Host", - "bandFeatures": "Protocolli e plugin", - "bandCredential": "Credenziale", - "sshConnection": "Connessione SSH", - "errorAddressRequired": "È richiesto un indirizzo.", - "errorPortRange": "Usa una porta compresa tra 1 e 65535.", - "defaults": "Valori predefiniti", - "searchHosts": "Cerca host", - "searchCredentials": "Cerca credenziali", - "searchDefaults": "Cerca valori predefiniti", - "addCredential": "Aggiungi credenziale", - "nothingMatches": "Nessuna corrispondenza", - "nothingYet": "Niente qui per ora", - "emptyHostsHint": "Aggiungi un host e apparirà qui, nella cartella che gli assegnerai.", - "emptyCredentialsHint": "Le credenziali salvate possono essere riutilizzate da qualsiasi host.", - "collapse": "Comprimi", - "expand": "Espandi", - "cannotBeUndone": "Questa azione non può essere annullata.", - "hostNotFound": "Impossibile trovare quell'host. Prova ad aggiornare l'elenco.", "hostCount_one": "{{count}} host", "hostCount_many": "{{count}} host", "hostCount_other": "{{count}} host", "credentialCount_one": "{{count}} credenziale", "credentialCount_many": "{{count}} credenziali", - "credentialCount_other": "{{count}} credenziali", - "newHost": "Nuovo host", - "newCredential": "Nuova credenziale", - "advanced": "Avanzate", - "pickHost": "Scegli un host da modificare", - "pickCredential": "Scegli una credenziale da modificare", - "pickDefaults": "Scegli un livello di valori predefiniti da modificare", - "pickHint": "Tutto ciò che riguarda una connessione si trova qui, raggruppato per facilitarne la ricerca." + "credentialCount_other": "{{count}} credenziali" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/ja_JP.json b/src/ui/locales/translated/ja_JP.json index 91527fbf7..bbf3346a1 100644 --- a/src/ui/locales/translated/ja_JP.json +++ b/src/ui/locales/translated/ja_JP.json @@ -141,7 +141,6 @@ "continue": "続行", "error": "エラー", "unsavedChanges": "保存されていない変更", - "more": "もっと見る", "loading": "読み込み中...", "host": "ホスト", "selectHost": "ホストを選択...", @@ -154,7 +153,6 @@ "cancel": "キャンセル", "username": "ユーザー名", "login": "ログイン", - "logout": "ログアウト", "register": "登録", "password": "パスワード", "confirmPassword": "パスワード(確認)", @@ -165,8 +163,6 @@ "rename": "名前を変更", "edit": "編集", "confirm": "確認", - "next": "次へ", - "previous": "前へ", "refresh": "更新", "language": "言語", "backendReconnected": "サーバー接続が回復しました", @@ -234,10 +230,6 @@ "pluginsDocsLink": "各プラグインについて読む" }, "desktopUpdates": { - "title": "デスクトップアプリ", - "mode": "アップデート", - "modeHint": "このアプリが新しいバージョンを取得する方法です。", - "manualModeHint": "このコピーは自動更新できないため、Termix は新しいバージョンがリリースされたときのみお知らせします。", "modeAutomatic": "自動", "modePrompt": "確認してから", "modeNever": "しない", @@ -247,15 +239,6 @@ "onboardingTitle": "アプリのアップデート", "onboardingBody": "デスクトップアプリが自動で更新できるようになりました。新しいバージョンの入手方法を選んでください。後で「設定」>「アップデート」から変更できます。", "onboardingManual": "このアプリのコピーは自動更新できない方法でインストールされたため、Termix は新しいバージョンがリリースされたときにダウンロードリンク付きでお知らせします。", - "status": "バージョン {{version}}", - "statusIdle": "まだ確認していません", - "statusChecking": "アップデートを確認中", - "statusAvailable": "バージョン {{version}} が利用可能です", - "statusDownloading": "{{version}} をダウンロード中 ({{progress}}%)", - "statusReady": "バージョン {{version}} の準備ができました。インストールするには再起動してください。", - "statusUpToDate": "最新バージョンです", - "statusError": "アップデートの確認に失敗しました。後でもう一度お試しください。", - "checkNow": "今すぐ確認", "download": "ダウンロード", "restart": "今すぐ再起動", "later": "後で", @@ -269,26 +252,11 @@ "terminal": "ターミナル", "close": "閉じる", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "パスワードをコピー", - "copySudoPassword": "Sudo パスワードをコピー", - "passwordCopied": "パスワードがクリップボードにコピーされました", - "failedToCopyPassword": "パスワードのコピーに失敗しました", - "refreshTab": "接続を更新", - "renameTab": "タブの名前を変更", "dashboard": "ダッシュボード", "quickConnect": "クイック接続", - "openAsTabHint": "Ctrl+クリックまたは中クリックでタブとして開く", - "openAsTab": "タブとして開く", - "openInRightDock": "右ドックで開く", - "closeRightDock": "右ドックを閉じる", - "toggleRightDock": "右ドックの切り替え", "hosts": "ホスト", "credentials": "認証情報", "connections": "接続", - "keepSideMenuOpen": "メニューを開いたままにする", - "collapseSideMenu": "メニューを折りたたむ", - "roleAdministrator": "管理者", - "roleUser": "ユーザー", "sync": "同期", "reconnectDisconnectedTerminals": "切断されたすべてのターミナルを再接続", "reconnectingTerminals_other": "{{count}} 個のターミナルを再接続中", @@ -296,29 +264,10 @@ "reconnectTerminalsFailed_other": "{{count}} 個のターミナルの再接続を開始できませんでした", "fullscreenUnsupported": "このブラウザはフルスクリーンに対応していません", "fullscreenFailed": "フルスクリーンの切り替えに失敗しました", - "resetSidebarWidth": "幅をリセット", - "collapseSidebar": "サイドバーを折りたたむ", - "openSidebar": "サイドバーを開く", "confirmCloseHost": "{{host}} を閉じますか?", - "enterFullscreen": "フルスクリーンに入る (Ctrl+Shift+F)", - "exitFullscreen": "フルスクリーンを終了する (Ctrl+Shift+F)", - "group": { - "objects": "自分のアイテム", - "tools": "ツール", - "system": "システム" - }, - "searchEverything": "ホスト、タブ、アクションを検索", - "search": "検索", "hiddenCount_other": "{{count}} 件非表示", - "showInRail": "サイドバーに表示", - "moveUp": "上に移動", - "moveDown": "下に移動", - "resetRailOrder": "順序をリセット", - "hideFromRail": "サイドバーから非表示", - "openSettings": "設定を開く", "settings": "設定", "manage": "管理", - "mobileNavigation": "ナビゲーション", "plugins": "プラグイン" }, "hosts": { @@ -904,35 +853,14 @@ "importSummary": "インポート完了: {{imported}} 個インポート、{{updated}} 個更新、{{failed}} 個失敗", "importHostsFailed": "ホストのインポートに失敗しました" }, - "commandPalette": { - "searchPlaceholder": "ホスト、コマンド、または設定を検索...", - "quickActions": "クイックアクション", - "navigation": "ナビゲーション", - "orShortcut": "または", - "addNewHost": "新しいホストを追加", - "adminSettings": "管理者設定", - "addCredential": "認証情報を追加", - "recentActivity": "最近のアクティビティ", - "serversAndHosts": "サーバーとホスト", - "noHostsFound": "「{{search}}」に一致するホストが見つかりません", - "links": "リンク", - "navigate": "ナビゲーション", - "select": "選択", - "pluginActions": "その他のアクション", - "noTargetTab": "ターミナルタブが開いていません", - "documentation": "ドキュメント" - }, "splitScreen": { "title": "分割画面", "defaultLabel": "分割 {{number}}", "splitRight": "右に分割", "splitDown": "下に分割", - "addToSplit": "{{split}} に追加", "paneEmptyItem": "ペイン {{index}}: 空", "paneItem": "ペイン {{index}}: {{label}}", "paneNumber": "ペイン {{index}}", - "newPaneRight": "右に新しいペイン", - "newPaneBelow": "下に新しいペイン", "emptyTitle": "空のペイン", "emptyHint": "ここに表示するものを選択してください。このペインが選択されている間、サイドバーから開いたものはすべてここに表示されます。", "openTabs": "開いているタブ", @@ -949,7 +877,6 @@ "clearPane": "このペインを空にする", "zoom": "ペインを拡大", "unzoom": "レイアウトを復元", - "unsplit": "分割を解除", "layouts": "レイアウト", "applyLayout": "レイアウトを変更", "maxPanes_other": "スプリットには最大 {{count}} 個のパネルを表示できます", @@ -957,8 +884,6 @@ "dropHere": "ここに表示するにはドロップ", "paneActions": "ペインのアクション", "dividerHint": "ドラッグしてサイズを変更。ダブルクリックで均等化。", - "openInSplit": "分割で開く", - "openInNewSplit": "現在のタブで新しい分割", "shortcuts": "ショートカット", "shortcutNavigate": "ペイン間を移動", "presets": { @@ -972,23 +897,6 @@ "grid6": "6つのグリッド" } }, - "connections": { - "noConnections": "接続がありません", - "noConnectionsDesc": "ターミナル、ファイルマネージャー、またはリモートデスクトップを開くと、ここに接続が表示されます", - "connectedFor": "接続中: {{duration}}", - "connected": "接続済み", - "disconnected": "切断済み", - "reconnect": "再接続", - "sectionOpen": "オープン", - "sectionBackground": "バックグラウンド", - "backgroundDesc": "セッションは切断後 {{minutes}} 分間保持され、再接続できます。", - "expiresIn": "{{duration}} で期限切れ", - "search": "接続を検索...", - "noSearchResults": "検索条件に一致する接続がありません", - "rename": "セッション名を変更", - "forgetConfirm": "{{name}} のバックグラウンドセッションを終了しますか?", - "forget": "セッションを終了" - }, "sshAuth": { "totpRequired": "二段階認証が必要です", "totpCodeLabel": "認証コード", @@ -1126,474 +1034,46 @@ "placeholders": { "keyPassword": "キーのパスワード", "pastePrivateKey": "ここに秘密鍵を貼り付けてください...", - "enterPassword": "パスワードを入力してください", - "apiKeyName": "例: CI Pipeline", - "credentialName": "例: 本番環境用SSHキー", - "optionalDetails": "任意の詳細...", - "sshUsername": "例: root または deploy", - "hostAddress": "10.0.0.1 または example.com", - "hostName": "例: Web Server Production" + "enterPassword": "パスワードを入力してください" }, "dashboard": { - "title": "ダッシュボード", - "github": "GitHub", - "reportBug": "バグを報告", - "discord": "Discord", - "docs": "ドキュメント", - "donate": "寄付", - "serverOverview": "サーバー概要", - "version": "バージョン", "updateAvailable": "アップデート利用可能", - "beta": "ベータ", - "uptime": "稼働時間", - "database": "データベース", - "healthy": "正常", - "error": "エラー", - "totalHosts": "ホスト合計", - "totalCredentials": "認証情報合計", - "recentActivity": "最近のアクティビティ", - "reset": "リセット", - "noRecentActivity": "最近のアクティビティはありません", - "quickActions": "クイックアクション", - "addHost": "ホストを追加", - "addCredential": "認証情報を追加", - "adminSettings": "管理者設定", - "userProfile": "ユーザープロフィール", - "serverStats": "サーバー統計", - "customizeLayout": "ダッシュボードのカスタマイズ", - "justNow": "たった今" + "beta": "ベータ" }, "dashboardTab": { "stable": "安定版", - "registerNewServer": "新しいサーバーを登録", - "storeSshKeysOrPasswords": "SSHキーまたはパスワードを保存", - "manageUsersAndRoles": "ユーザーとロールを管理", - "manageYourAccount": "アカウントを管理", - "hostStatus": "ホストのステータス", - "noHostsConfigured": "設定されたホストはありません", - "checking": "確認中", - "commandPalette": "コマンドパレット", - "done": "完了", - "clear": "クリア", - "dragToResizeColumns": "ドラッグして列の幅を変更", - "hostsAvailable": "利用可能なホスト", - "removeSection": "セクションを削除", - "addSection": "セクションを追加", - "allSectionsShown": "すべてのセクションがダッシュボードに表示されています。", - "fromPlugins": "プラグインから", - "dropHere": "ここにセクションをドロップ", - "dragToReorder": "セクションをドラッグして順序を変更", - "clearActivityConfirm": "最近のアクティビティをクリアしますか?", - "resetConfirm": "ダッシュボードをデフォルトのレイアウトにリセットしますか?", "onlineCount_other": "{{count}} 台オンライン", "hostCount_other": "{{count}} 台のホスト" }, "admin": { - "sectionGeneral": "一般", - "sectionUsers": "ユーザー", - "sectionSessions": "セッション", - "sectionRoles": "ロール", - "sectionDatabase": "データベース", - "sectionApiKeys": "API キー", - "sectionAuditLog": "監査ログ", - "sectionSsl": "HTTPS 証明書", - "sectionBranding": "ホワイトラベル", - "brandingAppName": "アプリケーション名", - "brandingAppNameDesc": "ログイン画面とブラウザのタブに表示されます。空欄のままにすると「Termix」が使用されます。", - "brandingTagline": "キャッチフレーズ", - "brandingTaglineDesc": "ログイン画面のアプリケーション名の下に表示されます。空欄のままにするとデフォルトのキャッチフレーズが使用されます。", - "brandingLogo": "ロゴ", - "brandingLogoDesc": "PNG、JPEG、または WEBP 形式、最大 750 KB。ログイン画面とブラウザのタブのデフォルトアイコンを置き換えます。", - "brandingLogoUpload": "ロゴをアップロード", - "brandingLogoReset": "デフォルトに戻す", - "brandingLogoInvalid": "無効な画像です。750 KB 以下の PNG、JPEG、または WEBP ファイルを使用してください。", - "brandingSaved": "ブランディング設定が保存されました", - "brandingSaveFailed": "ブランディング設定の保存に失敗しました", - "sslDescription": "Termix が HTTPS で提供する証明書です。ここで独自の証明書をアップロードするか、ACME 証明書セクションから Let's Encrypt で取得・更新してください。", - "sslDocsLink": "SSL ドキュメントを表示", - "sslCertStatus": "証明書ステータス", - "sslCertStatusNone": "証明書なし", - "sslCertStatusValid": "有効", - "sslCertStatusExpiring": "まもなく期限切れ", - "sslCertStatusExpired": "期限切れ", - "sslCertExpiresAt": "{{date}} に期限切れ", - "sslInfoNote": "証明書の発行またはアップロード後、Termix は既存の HTTP ポートに加えて、SSL_PORT(デフォルト 8443)で HTTPS を自動的に有効にします。そのポートがこのコンテナに公開/マッピングされており、アクセス可能であることを確認してください。", - "sslManualCert": "証明書 (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "秘密鍵 (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "既存の証明書と秘密鍵を貼り付けてください。CA が必要とする場合は、完全なチェーンを含めてください。", - "sslManualUpload": "証明書をアップロードしてインストール", - "sslManualUploadLoading": "証明書をアップロード中...", - "sslManualUploadSuccess": "証明書のアップロードとインストールが完了しました", - "sslManualUploadFailed": "証明書のアップロードに失敗しました", - "sslManualRequiresFields": "証明書と秘密鍵は必須です", - "auditLogTotal": "合計 {{total}} 件のエントリ", - "auditLogEmpty": "監査ログのエントリが見つかりません", - "auditLogSuccess": "成功", - "auditLogFailed": "失敗", - "auditLogClearFilters": "フィルターをクリア", - "auditLogPage": "{{totalPages}} ページ中 {{page}} ページ(合計 {{total}} 件)", - "auditLogIp": "IP", - "auditLogResourceId": "リソース ID", - "auditLogFilterUser": "ユーザー", - "auditLogFilterAction": "アクション", - "auditLogFilterResourceType": "リソースタイプ", - "auditLogFilterStatus": "ステータス", - "auditLogFilterFrom": "開始日", - "auditLogFilterTo": "終了日", - "auditLogFilterAll": "すべて", - "allowRegistration": "ユーザー登録を許可する", - "allowRegistrationDesc": "ユーザー名とパスワードで新規ユーザーが自分で登録できるようにします", - "allowPasswordLogin": "パスワード認証でのログインを許可する", - "allowPasswordLoginDesc": "ユーザー名/パスワードによるログイン", - "externalAutoProvision": "外部アカウントの自動作成", - "externalAutoProvisionDesc": "SSO や LDAP などの外部ログインで初めてサインインした際にアカウントを作成します。オフにすると、既存のアカウントを持つ人のみがこの方法でサインインできます", - "secondFactorAfterExternalLogin": "外部ログイン(SSO、GitHub、Google、LDAP)後に二段階認証を要求する", - "secondFactorAfterExternalLoginDesc": "オフの場合、登録済みの二段階認証はパスワードやその他のローカルログイン時のみ要求されます(従来通り)。オンにすると、SSO や LDAP を含むすべてのログイン方法で要求されます", - "allowPasswordReset": "パスワードリセットを許可する", - "allowPasswordResetDesc": "Docker ログ経由のリセットコード", - "auditForwardingTitle": "SIEM への転送", - "auditForwardingDesc": "すべての監査ログエントリのコピーを NDJSON 形式で外部コレクターに送信します。ローカルログは信頼の源として保持されます", - "auditForwardingEnvNotice": "環境変数でも転送を構成できますが、ここで保存した URL が優先されます", - "auditForwardingToken": "ベアラートークン(オプション)", - "auditForwardingTokenStored": "ベアラートークン(保存済み)", - "auditForwardingSaved": "監査ログ転送の設定が保存されました", - "auditForwardingSaveError": "監査ログ転送の設定の保存に失敗しました", - "sessionTimeout": "セッションタイムアウト", - "hours": "時間", - "sessionTimeoutRange": "最小 1 時間、最大 720 時間", - "monitoringDefaults": "モニタリングのデフォルト設定", - "statusCheck": "ステータスチェック", - "sec": "秒", - "logLevel": "ログレベル", - "usersCount_other": "{{count}} 人のユーザー", - "searchUsers": "ユーザーを検索...", - "noUsers": "ユーザーがいません", - "noUsersMatch": "検索条件に一致するユーザーが見つかりません", - "pageOf": "{{total}} ページ中 {{page}} ページ目", - "createUser": "作成", - "newRole": "新しいロール", - "roleName": "名前", - "roleDisplayName": "表示名", - "roleDescription": "説明", - "rolesCount_other": "{{count}} 個のロール", - "createRole": "作成", - "creating": "作成中...", - "exportDatabase": "データベースのエクスポート", - "exportDatabaseDesc": "すべてのホスト、認証情報、設定のポータブルな SQLite バックアップをダウンロードします", - "export": "エクスポート", - "exporting": "エクスポート中...", - "importDatabase": "データベースのインポート", - "importDatabaseDesc": "任意のデータベースバックエンドからポータブルな .sqlite バックアップを復元します", - "importDatabaseSelected": "選択済み: {{name}}", - "selectFile": "ファイルを選択", - "changeFile": "変更", - "import": "インポート", - "importing": "インポート中...", - "apiKeysCount_other": "{{count}} 個のキー", - "apiKeysDocsLink": "ドキュメントを表示", - "apiKeysCliHint": "Termix CLI で API キーを使用して、ターミナルからサーバーを管理します。", - "apiKeysCliLink": "CLI ドキュメントを表示", - "newApiKey": "新しい API キー", - "apiKeyCreatedWarning": "キーが作成されました。今すぐコピーしてください。二度と表示されません。", - "apiKeyName": "名前", - "apiKeyUser": "ユーザー", - "apiKeySelectUser": "ユーザーを選択...", - "apiKeyExpiresAt": "有効期限", - "createKey": "キーを作成", - "apiKeyNoExpiry": "期限なし", - "revokedBadge": "取り消し済み", - "authTypeDual": "デュアル認証", - "authTypeExternal": "外部", - "authTypeLocal": "ローカル", - "adminStatusAdministrator": "管理者", - "adminStatusRegularUser": "一般ユーザー", - "adminBadge": "管理者", - "systemBadge": "システム", - "customBadge": "カスタム", - "youBadge": "自分", - "sessionsActive_other": "{{count}} 件アクティブ", - "sessionActive": "アクティブ: {{time}}", - "sessionExpires": "有効期限: {{time}}", - "revokeAll": "すべて", - "revokeAllSessionsSuccess": "ユーザーのすべてのセッションが取り消されました", - "revokeAllSessionsFailed": "セッションの取り消しに失敗しました", - "revokeSessionFailed": "セッションの取り消しに失敗しました", - "addRole": "ロールを追加", - "noCustomRoles": "カスタムロールが定義されていません", - "removeRoleFailed": "ロールの削除に失敗しました", - "assignRoleFailed": "ロールの割り当てに失敗しました", - "userAdminAccess": "管理者", - "userAdminAccessDesc": "すべての管理者設定への完全なアクセス権", - "userRoles": "ロール", - "revokeAllUserSessions": "すべてのセッションを取り消す", - "revokeAllUserSessionsDesc": "すべてのデバイスで再ログインを強制します", - "revoke": "取り消す", - "deleteUserWarning": "このユーザーを削除すると、元に戻せません。", - "deleteUser": "{{username}} を削除", - "deleting": "削除中...", - "deleteUserFailed": "ユーザーの削除に失敗しました", - "deleteUserSuccess": "ユーザー「{{username}}」を削除しました", - "deleteRoleSuccess": "ロール「{{name}}」を削除しました", - "revokeKeySuccess": "キー「{{name}}」を取り消しました", - "revokeKeyFailed": "キーの取り消しに失敗しました", - "copiedToClipboard": "クリップボードにコピーしました", - "done": "完了", - "createUserTitle": "ユーザーを作成", - "createUserDesc": "新しいローカルアカウントを作成します。", - "createUserUsername": "ユーザー名", - "createUserPassword": "パスワード", - "createUserPasswordHint": "6文字以上。", - "createUserEnterUsername": "ユーザー名を入力", - "createUserSubmit": "ユーザーを作成", - "editUserTitle": "ユーザーの管理: {{username}}", - "editUserDesc": "ロール、管理者ステータス、セッション、アカウント設定を編集します。", - "editUserUsername": "ユーザー名", - "editUserAuthType": "認証タイプ", - "editUserAdminStatus": "管理者ステータス", - "editUserUserId": "ユーザーID", - "linkAccountTitle": "アカウントをリンク", - "linkAccountDesc": "外部アカウント {{username}} を既存のローカルアカウントと統合します。", - "linkAccountDescLocal": "ローカルアカウント {{username}} を既存の外部専用アカウントとリンクします。", - "linkAccountWarningTitle": "この操作により:", - "linkAccountEffect1": "外部アカウントのみで構成されたアカウントを削除します", - "linkAccountEffect2": "対象アカウントに外部サインインを追加します", - "linkAccountEffect3": "外部サインインとパスワードサインインの両方を有効にします", - "linkAccountTargetUsername": "ローカルアカウントのユーザー名", - "linkAccountTargetPlaceholder": "リンクするローカルアカウントのユーザー名を入力してください", - "linkAccountExternalUsername": "外部アカウントのユーザー名", - "linkAccountExternalPlaceholder": "マージする外部アカウントのみのユーザー名を入力してください", - "linkAccountExternalNotFound": "そのユーザー名を持つ外部アカウントのみが見つかりません", - "linkAccounts": "アカウントをリンク", - "linkAccountSuccess": "アカウントが正常にリンクされました", - "linkAccountFailed": "アカウントのリンクに失敗しました", - "linkAccountInProgress": "リンク中...", - "unlinkAccountTitle": "外部サインインのリンク解除", - "unlinkAccountDesc": "{{username}} から外部サインインを削除します。パスワードでのログインのみ可能になります。", - "unlinkAccountWarning": "この操作により、このアカウントから外部サインインが削除されます。ログインを継続するには、ユーザーがパスワードを設定している必要があります。", - "unlinkAccount": "外部サインインのリンク解除", - "unlinkAccountInProgress": "リンク解除中...", - "unlinkAccountSuccess": "外部サインインのリンクが解除されました", - "unlinkAccountFailed": "外部サインインのリンク解除に失敗しました", - "updateRegistrationFailed": "登録設定の更新に失敗しました", - "updatePasswordLoginFailed": "パスワードログイン設定の更新に失敗しました", - "updateSecondFactorAfterExternalLoginFailed": "二段階認証設定の更新に失敗しました", - "updatePasswordResetFailed": "パスワードリセット設定の更新に失敗しました", - "sessionTimeoutRange2": "セッションタイムアウトは1時間以上720時間以下に設定してください", - "sessionTimeoutSaved": "セッションタイムアウトが保存されました", - "sessionTimeoutSaveFailed": "セッションタイムアウトの保存に失敗しました", - "monitoringIntervalInvalid": "無効な間隔値です", - "monitoringSaved": "監視設定が保存されました", - "monitoringSaveFailed": "監視設定の保存に失敗しました", - "logLevelUpdateFailed": "ログレベルの更新に失敗しました", - "createUserRequired": "ユーザー名とパスワードは必須です", - "createUserPasswordTooShort": "パスワードは6文字以上にする必要があります", - "createUserSuccess": "ユーザー「{{username}}」が作成されました", - "createUserFailed": "ユーザーの作成に失敗しました", - "updateAdminStatusFailed": "管理者ステータスの更新に失敗しました", - "allSessionsRevoked": "すべてのセッションが無効化されました", - "revokeSessionsFailed": "セッションの無効化に失敗しました", - "manageUserData": "ユーザーデータの管理", - "backToUsers": "ユーザー一覧に戻る", - "manageTabAccount": "アカウント", - "manageTabHosts": "ホスト", - "manageTabCredentials": "認証情報", - "manageTabSessions": "セッション", - "manageTabDanger": "危険な操作", - "manageEditorBack": "{{username}} のデータに戻る", - "dataLockedBadge": "ロック済み", - "dataLockedNotice": "{{username}} のデータは、次回ログインするまでロックされたままになります。それまで、ホスト、認証情報、スニペットの閲覧や編集はできません。", - "resetPasswordTitle": "パスワードのリセット", - "resetPasswordExternalOnly": "このユーザーは外部プロバイダー経由でサインインしており、パスワードは設定されていません。", - "resetPasswordPlaceholder": "新しいパスワード", - "resetPasswordBtn": "リセット", - "resetPasswordWorking": "リセット中...", - "resetPasswordSuccess": "パスワードがリセットされました", - "resetPasswordSuccessWiped": "パスワードがリセットされました。ユーザーの暗号化データは消去されました。", - "resetPasswordFailed": "パスワードのリセットに失敗しました", - "resetPasswordConfirmWipe": "{{username}} は暗号化アップグレード以降ログインしていないため、データは復元できません。今すぐリセットすると、ホスト、認証情報、スニペットが削除されます。続行しますか?", - "manageApiKeys": "API キー", - "apiKeyNamePlaceholder": "キー名", - "apiKeyCopyNotice": "このキーは今すぐコピーしてください。二度と表示されません。", - "noApiKeysForUser": "API キーがありません", - "apiKeyDeleteFailed": "API キーの削除に失敗しました", - "exportUserData": "データのエクスポート", - "exportUserDataDesc": "このユーザーのホスト、認証情報、ファイルマネージャーのデータを JSON としてダウンロードします。シークレットは復号されます。", - "exportUserDataSuccess": "ユーザーデータをエクスポートしました", - "exportUserDataFailed": "ユーザーデータのエクスポートに失敗しました", "hostsCount_other": "{{count}} 台のホスト", - "addHostForUser": "ホストを追加", - "noHostsForUser": "このユーザーにはホストがありません", - "connectToHost": "接続", - "deleteHostConfirm": "{{username}} が所有するホスト「{{name}}」を削除しますか?", - "hostDeletedSuccess": "ホストを削除しました", - "hostDeleteFailed": "ホストの削除に失敗しました", "credentialsCount_other": "{{count}} 個の認証情報", - "addCredentialForUser": "認証情報を追加", - "noCredentialsForUser": "このユーザーには認証情報がありません", - "deleteCredentialConfirm": "{{username}} が所有する認証情報「{{name}}」を削除しますか?", - "credentialDeletedSuccess": "認証情報を削除しました", - "credentialDeleteFailed": "認証情報の削除に失敗しました", - "noSessionsForUser": "アクティブなセッションはありません", - "deleteSuccessorLabel": "ホストと認証情報の引き継ぎ先", - "deleteSuccessorMe": "私(削除を実行する管理者)", - "deleteSuccessorNone": "引き継ぎ先なし(削除する)", - "deleteSuccessorDesc": "このユーザーが共有していたデータは、新しい所有者の下で引き続き機能します。「引き継ぎ先なし」を選択すると、ホスト、認証情報、共有データがすべて削除されます。", - "deleteUserDangerDesc": "{{username}} とそのすべてのデータ(ホスト、認証情報、スニペット、履歴)を完全に削除します。この操作は元に戻せません。", - "deleteUserConfirm": "{{username}} とそのすべてのデータを完全に削除しますか?", - "deleteUserAdminBlocked": "このユーザーを削除する前に、管理者権限を剥奪してください。", - "createRoleRequired": "名前と表示名は必須です", - "createRoleSuccess": "ロール「{{name}}」を作成しました", - "createRoleFailed": "ロールの作成に失敗しました", - "apiKeyNameRequired": "キー名は必須です", - "apiKeyUserRequired": "ユーザー ID は必須です", - "apiKeyCreatedSuccess": "API キー「{{name}}」を作成しました", - "apiKeyCreateFailed": "API キーの作成に失敗しました", - "exportSuccess": "データベースのエクスポートに成功しました", - "exportFailed": "データベースのエクスポートに失敗しました", - "importSelectFile": "まずファイルを選択してください", - "importCompleted": "インポートが完了しました:{{total}} 件をインポート、{{skipped}} 件をスキップ", - "importFailed": "インポートに失敗しました:{{error}}", - "importError": "データベースのインポートに失敗しました", - "sectionHostDefaults": "ホストのデフォルト設定", "rolePermissions": { - "count_other": "{{count}} 個の権限", - "editAction": "権限を編集", - "loadError": "権限カタログの読み込みに失敗しました", - "saved": "ロールの権限を保存しました", - "saveError": "ロールの権限の保存に失敗しました", - "save": "保存", - "saving": "保存中...", - "pluginDisabled": "プラグインが無効です", "groups": { "hosts": "ホスト", "credentials": "認証情報", "admin": "管理" } - }, - "notificationPrivateEndpoints": "許可されたプライベート通知ホスト", - "notificationPrivateEndpointsDesc": "通知チャンネルが接続できるプライベートホストを正確に指定します。カンマで区切ってください。", - "updateNotificationEndpointsFailed": "通知エンドポイントの許可リストの更新に失敗しました", - "secondFactorsSectionTitle": "二段階認証", - "secondFactorsNone": "登録された二段階認証はありません", - "secondFactorUnavailable": "利用不可", - "resetSecondFactors": "二段階認証をリセット", - "resetSecondFactorsConfirm": "{{username}} のすべての二段階認証を削除しますか?パスワードまたは SSO でサインインし、再度登録することができます。", - "secondFactorsResetSuccess": "二段階認証がリセットされました", - "secondFactorsResetFailed": "二段階認証のリセットに失敗しました", - "passwordLoginForced": "パスワード認証は無効化されていますが、他の認証方法が有効でないため、当面は有効のままになります。これで誰もロックアウトされません。", - "sslNotRenewed": "この証明書の更新は行われません。有効期限は {{date}} です。ACME 証明書セクションで自動更新を有効にするか、それまでに新しい証明書をアップロードしてください。", - "sslSelfSigned": "Termix によって作成された自己署名証明書です。ブラウザで警告が表示されます。", - "sslRenewedBy": "{{plugin}} によって自動更新されました", - "sslIssuer": "発行者: {{issuer}}", - "sslNames": "対象: {{names}}", - "sslManualTitle": "証明書をアップロード", - "updateExternalAutoProvisionFailed": "自動作成設定の更新に失敗しました", - "hostTags": "事前定義されたホストタグ", - "hostTagsDesc": "すべてのユーザーがホストエディタで提案として表示するタグです。スペースキーまたは Enter キーを押して追加します。ここでタグを削除しても、ホストからタグが削除されるわけではありません。", - "hostTagsError": "ホストタグの提案を読み込むか保存できませんでした。", - "revokeAllSessionsConfirm": "{{username}} をすべてのデバイスからサインアウトしますか?", - "revokeSessionConfirm": "このセッションをサインアウトしますか?", - "revokeSession": "サインアウト", - "deleteRoleConfirm": "{{name}} ロールを削除しますか?", - "revokeKeyConfirm": "API キー {{name}} を失効させますか?", - "revokeKey": "失効" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "接続先", - "who": "ユーザー", - "hostLabel": "ホスト", - "hostPlaceholder": "192.168.1.1 または example.com", - "portLabel": "ポート", - "usernameLabel": "ユーザー名", - "usernamePlaceholder": "ユーザー名", - "authLabel": "認証", - "passwordLabel": "パスワード", - "passwordPlaceholder": "パスワード", - "privateKeyLabel": "秘密鍵", - "privateKeyPlaceholder": "秘密鍵を貼り付け...", - "credentialLabel": "認証情報", - "credentialPlaceholder": "保存された認証情報を選択", - "protocolLabel": "プロトコル", - "domainLabel": "ドメイン", - "domainPlaceholder": "任意", - "connectToAction": "{{name}} に接続", - "sshProtocol": "SSH", - "noTarget": "このホストタイプに接続できるものがインストールされていません" + "usernameLabel": "ユーザー名" }, "keybindings": { - "description": "ターミナルやアプリ内のアクションにキーを割り当てるか、組み込みのショートカットを変更します。", - "defaultsHeading": "組み込みショートカット", - "fixedHeading": "アプリのショートカット", - "fixed": { - "splitRight": "右に分割", - "splitDown": "下に分割", - "zoomPane": "フォーカスされたペインを拡大", - "navigatePane": "ペイン間を移動", - "nextTab": "次のタブ", - "previousTab": "前のタブ", - "jumpTab": "タブにジャンプ", - "previousView": "前のサイドバービューに戻る", - "fullscreen": "フルスクリーンを切り替え" - }, - "customHeading": "カスタムショートカット", - "addBinding": "ショートカットを追加", - "addBindingTitle": "ショートカットを追加", - "editBindingTitle": "ショートカットを編集", - "loading": "読み込み中...", - "noCustomBindings": "カスタムショートカットはまだありません", - "defaultBadge": "デフォルト", - "customizedBadge": "カスタマイズ済み", - "customize": "カスタマイズ", - "resetToDefault": "デフォルトに戻す", - "resetAllToDefaults": "すべてデフォルトに戻す", - "cancel": "キャンセル", - "saveBinding": "ショートカットを保存", - "saveError": "キーボードショートカットの保存に失敗しました", - "pressKeysToRecord": "キーの組み合わせ", - "pressKeysPlaceholder": "クリックしてキーを押してください", - "recording": "キーを押してください...", - "comboRequiredError": "まずキーの組み合わせを押してください", - "conflictWarning": "この組み合わせは既に {{combo}} に割り当てられています。保存すると、両方のアクションが実行されます。", - "actionLabel": "アクション", "actionNextTab": "次のタブに切り替え", "actionPreviousTab": "前のタブに切り替え", "actionOpenCommandPalette": "クイック検索を開く", - "actionReconnectSession": "現在のセッションを再接続", - "unavailableAction": "{{type}}(利用不可)", - "actionRequiredError": "まずアクションを選択してください", - "deleteConfirm": "このキーバインディングを削除しますか?", - "resetAllConfirm": "すべてのキーバインディングをデフォルトに戻しますか?" + "actionReconnectSession": "現在のセッションを再接続" }, "userProfile": { - "storageModeLocal": "ブラウザ", - "storageModeCloud": "データベース", - "storageModeDescription": "ブラウザは設定をこのブラウザにのみ保存します。データベースはサーバーと同期し、どのデバイスからでも読み込めます。", - "resetToDefaults": "デフォルトに戻す", - "resetToDefaultsSuccess": "設定がデフォルトに戻されました。", - "storageModeSwitch": "設定の保存先", - "sectionAccount": "アカウント", - "desktopProfileTitle": "このデバイスのみ", - "desktopProfileDescription": "このプロファイルはこのデバイス上に存在し、個別にサインインします。すべてのデバイスで同じホストと設定を使用するには、Termix サーバーにリンクしてください。", - "sectionInterface": "インターフェース", - "interfacePresetDesc": "Termix が表示する詳細レベルです。すべての機能は引き続き利用可能です。", "preset_simple": "シンプル", "preset_simple_desc": "必要なものだけを表示します。", "preset_balanced": "バランス", "preset_balanced_desc": "標準的なレイアウトです。", "preset_advanced": "詳細", "preset_advanced_desc": "すべてを表示し、コンパクトに配置します。", - "presetClearOverrides": "すべてリセット", - "presetOverridesTitle": "カスタマイズ済み", - "presetRevertArea": "元に戻す", - "presetConfirmTitle": "{{preset}} に切り替えますか?", - "presetConfirmDesc": "サイドバー、ナビゲーション、ダッシュボードのレイアウト、ターミナルツールバー、ファイルマネージャーの表示がリセットされます。ホスト、認証情報、ホームページは変更されません。", - "presetConfirmApply": "プリセットを適用", - "runSetupAgainDesc": "初回セットアップをもう一度実行します。", - "runSetupAgainButton": "セットアップを実行", "uiArea_chrome": "アプリのフレーム", "uiArea_hostList": "ホスト一覧", "uiArea_credentialList": "認証情報一覧", @@ -1602,125 +1082,12 @@ "uiArea_terminal": "ターミナル", "uiArea_fileManager": "ファイルマネージャー", "uiArea_hostEditor": "ホストエディタ", - "sectionAppearance": "外観", - "sectionSecurity": "セキュリティ", - "sectionApiKeys": "API キー", - "sectionData": "データ", - "usernameLabel": "ユーザー名", - "roleLabel": "役割", - "roleAdministrator": "管理者", - "authMethodLabel": "認証方法", - "authMethodLocal": "ローカル", - "twoFaLabel": "2FA", - "twoFaOn": "オン", - "twoFaOff": "オフ", - "versionLabel": "バージョン", - "cliTitle": "Termix CLI", - "cliDescription": "独自のシェルからターミナルを開き、コマンドを実行し、ファイルを移動します。", - "cliLearnMore": "詳細を見る", - "deleteAccount": "アカウントを削除", - "deleteAccountDescription": "アカウントを永久に削除します", - "deleteButton": "削除", - "deleteAccountPermanent": "この操作は永久に元に戻せません。", - "deleteAccountWarning": "すべてのセッション、ホスト、認証情報、設定が永久に削除されます。", - "confirmPasswordDeletePlaceholder": "確認のためにパスワードを入力してください", "languageLabel": "言語", "themeLabel": "テーマ", "fontSizeLabel": "フォントサイズ", "interfaceFontLabel": "インターフェースフォント", "interfaceFontDescription": "アプリケーションのインターフェースフォントを変更します。ターミナルプロファイルは独自のフォント設定を保持します。", "accentColorLabel": "アクセントカラー", - "keyboardShortcuts": "キーボードショートカット", - "keyboardShortcutsDescription": "ターミナルのコピー、貼り付け、コマンドのショートカットをカスタマイズします", - "manageShortcuts": "管理", - "commandPalette": "コマンドパレット", - "commandPaletteDesc": "キーボードショートカットを有効にする", - "reopenTabsOnLogin": "ログイン時にタブを再開", - "reopenTabsOnLoginDesc": "ログイン時やページの再読み込み時、さらには別のデバイスからでも、開いていたタブを復元します", - "confirmTabClose": "タブの閉じる確認", - "confirmTabCloseDesc": "ターミナルタブを閉じる前に確認します", - "showTabNumbers": "タブ番号を表示", - "showTabNumbersDesc": "各タブに番号を表示して、区別しやすくします", - "settingsAppRail": "アプリレール", - "sidebarSettingsMoved": "ホストサイドバーの表示設定は、ホストツールバーから開く「サイドバーのカスタマイズ」パネルに移動しました。", - "showHostTags": "ホストタグを表示", - "showHostTagsDesc": "ホストリストにタグを表示します", - "statusColors": "実際のステータスカラー", - "statusColorsDesc": "アクセントカラーの代わりに、オンライン/オフラインのステータスに緑/赤を使用します", - "pinAppRail": "アプリレールを固定", - "pinAppRailDesc": "ホバー時に展開する代わりに、左サイドバーのアプリレールを常に展開した状態に保ちます", - "expandAppRailOnHover": "ホバー時にアプリレールを展開", - "expandAppRailOnHoverDesc": "ポインタが左サイドバーのアプリレール上に移動したときに展開できるようにします", - "appRailHoverPushesContent": "展開時にコンテンツを押し出す", - "appRailHoverPushesContentDesc": "ページの上に重ねるのではなく、展開されたレール分のスペースを確保します。リモートデスクトップなどの開いているセッションは、毎回サイズが調整されます", - "showPinAppRailButton": "アプリレール固定ボタンを表示", - "showPinAppRailButtonDesc": "アプリレールを開いたまま固定するためのボタンをアプリレールに表示します。デフォルトではオフです。", - "settingsNavigation": "ナビゲーション", - "navigationTabsDesc": "アプリレールに表示するタブを選択します", - "settingsUpdates": "アップデート", - "disableUpdateChecks": "アップデートチェックを無効化", - "disableUpdateChecksDesc": "アップデートのチェックを停止します", - "changePassword": "パスワードを変更", - "currentPasswordLabel": "現在のパスワード", - "currentPasswordPlaceholder": "現在のパスワード", - "newPasswordLabel": "新しいパスワード", - "newPasswordPlaceholder": "新しいパスワード", - "confirmPasswordLabel": "新しいパスワードの確認", - "confirmPasswordPlaceholder": "新しいパスワードの確認", - "updatePassword": "パスワードを更新", - "createApiKeyTitle": "APIキーを作成", - "createApiKeyDescription": "プログラムによるアクセス用の新しいAPIキーを生成します。", - "apiKeyNameLabel": "名前", - "apiKeyNamePlaceholder": "例: CI パイプライン", - "expiryDateLabel": "有効期限", - "optional": "任意", - "cancel": "キャンセル", - "createKey": "キーを作成", - "apiKeyCreatedWarning": "キーが作成されました。今すぐコピーしてください。再度表示されることはありません。", - "copyApiKey": "API キーをコピー", - "copiedToClipboard": "クリップボードにコピーしました", - "apiKeyCount_other": "{{count}} 個のキー", - "newKey": "新しいキー", - "noApiKeys": "API キーはまだありません。", - "apiKeyActive": "有効", - "apiKeyUsageHint": "リクエストヘッダーに", - "apiKeyUsageHintHeader": "キーを含めてください。", - "apiKeyPermissionsHint": "キーは作成したユーザーの権限を継承します。", - "exportData": "データをエクスポート", - "exportDataDesc": "ホスト、認証情報、設定のバックアップをダウンロードし、他のデバイスに移行します", - "export": "エクスポート", - "exporting": "エクスポート中...", - "importData": "データをインポート", - "importDataDesc": ".sqlite バックアップファイルからホスト、認証情報、設定を復元します", - "importDataSelected": "選択済み: {{name}}", - "selectFile": "ファイルを選択", - "changeFile": "変更", - "import": "インポート", - "importing": "インポート中...", - "exportSuccess": "データのエクスポートに成功しました", - "exportFailed": "データのエクスポートに失敗しました", - "importSelectFile": "まずファイルを選択してください", - "importCompleted": "インポートが完了しました: {{total}} 項目をインポート、{{skipped}} 項目をスキップ", - "importFailed": "インポートに失敗しました: {{error}}", - "roleUser": "ユーザー", - "authMethodDual": "二段階認証", - "authMethodExternal": "外部認証", - "done": "完了", - "apiKeyNameRequired": "キー名は必須です", - "apiKeyCreated": "API キー「{{name}}」を作成しました", - "apiKeyCreateFailed": "API キーの作成に失敗しました", - "apiKeyUser": "ユーザー", - "apiKeyExpires": "有効期限", - "apiKeyRevoked": "API キー「{{name}}」を無効化しました", - "apiKeyRevokeFailed": "API キーの無効化に失敗しました", - "passwordFieldsRequired": "現在のパスワードと新しいパスワードの両方が必要です", - "passwordMismatch": "パスワードが一致しません", - "passwordTooShort": "パスワードは6文字以上にする必要があります", - "passwordUpdated": "パスワードの更新に成功しました", - "passwordUpdateFailed": "パスワードの更新に失敗しました", - "deletePasswordRequired": "アカウントを削除するにはパスワードが必要です", - "deleteFailed": "アカウントの削除に失敗しました", - "deleting": "削除中...", "colorPickerTooltip": "カラーピッカーを開く", "themeSystem": "システム", "themeLight": "ライト", @@ -1731,18 +1098,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "{{server}} にサインイン済み", - "linkedProfileDescription": "このデバイスはサーバー上のアカウントを使用し、データのローカルコピーを保持するため、オフラインでも動作します。", - "manageSync": "同期の管理", - "setUpSync": "サーバーにリンク", - "settingsTabsAndShortcuts": "タブとショートカット", - "onBetaTitle": "ベータ版を使用しています", - "onBetaDescription": "テストありがとうございます。不具合があればお知らせください。", - "tryBetaTitle": "新機能をいち早く試す", - "tryBetaDescription": "「更新」でベータプログラムに参加します。", - "sendBetaFeedback": "ベータ版のフィードバックを送信", - "openUpdates": "更新" + "themeGruvbox": "Gruvbox" } } }, @@ -1983,8 +1339,7 @@ "hasDependents": "{{name}} は {{list}} によって必要とされています。まずそれらを無効にしたりアンインストールしてください。", "missingDependencies": "{{name}} には {{list}} が必要ですが、インストールされていません。", "consentChanged": "確認してからこのプラグインの要求内容が変更されました。リストをもう一度確認してください。", - "upload": "{{name}} を読み取れませんでした:{{error}}", - "developerMode": "開発者モードを変更できませんでした:{{error}}" + "upload": "{{name}} を読み取れませんでした:{{error}}" }, "data": { "title": "保存されたデータ", @@ -2102,13 +1457,7 @@ "browsePlugins": "プラグインを閲覧", "loading": "読み込み中", "developer": { - "title": "プラグイン開発者モード", - "hint": "管理者がレジストリのチェックを行わずに、プラグインタブから .tmxplug ファイルでプラグインをインストールできるようにします。独自のプラグインの構築とテストに使用してください。", - "enableTitle": "開発者モードを有効にしますか?", - "enableBody": "管理者は、Termix がチェックしていないファイルからプラグインをインストールできるようになります。プラグインは許可された機能に基づいて何らかの動作を行う可能性があるため、プラグインの構築またはテスト中のみこのモードを有効にしてください。", - "enable": "有効にする", - "installFromFile": "ファイルからインストール", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS が設定されているため、ファイルからのインストールはブロックされたままです。" + "installFromFile": "ファイルからインストール" }, "count": { "downloads_other": "{{formatted}} 回のダウンロード", @@ -2145,71 +1494,7 @@ "secretSet": "設定済み", "secretNotSet": "未設定", "secretReplace": "置換", - "pluginSettingsSaved": "設定が保存されました", - "pluginSettingsInvalid": "一部の設定を保存できませんでした。ハイライトされたフィールドを確認してください。", - "pluginSettingsSaveFailed": "設定の保存に失敗しました", - "pluginSettingsLoadFailed": "設定の読み込みに失敗しました", - "featureUnavailable": "{{name}} は現在利用できません。これらの設定は保存されますが、反映されません。", - "account": "アカウント", - "security": "セキュリティ", - "apiKeys": "API キー", - "data": "データと同期", - "interface": "インターフェース", - "appearance": "外観", - "keybindings": "キーバインド", - "adminGeneral": "全般", - "adminUsers": "ユーザー", - "adminSessions": "セッション", - "adminRoles": "ロール", - "adminHostDefaults": "ホストのデフォルト", - "adminBranding": "ブランディング", - "adminDatabase": "データベース", - "adminSsl": "SSL", - "adminApiKeys": "API キー", - "adminAuditLog": "監査ログ", - "bandYou": "あなたのアカウント", - "bandApp": "このアプリ", - "bandPlugins": "プラグイン", - "bandInstance": "このサーバー", - "searchPlaceholder": "設定を検索", - "noResults": "一致する設定がありません。", - "pages": "ページ", - "instanceSettings": "サーバー設定", - "nothingHere": "ここには設定する項目がありません。", - "searchPage": "このページを検索", - "noPageMatches": "このページに一致する項目はありません。", - "updates": { - "title": "アップデート", - "betaProgram": "ベータプログラム", - "betaIntro": "ベータ版は、次の Termix バージョンの早期ビルドです。新しい試せる機能がある場合、火曜日と金曜日にリリースされます。バグが含まれている可能性がありますが、あなたのフィードバックは安定版の改善に役立ちます。", - "termixBetas": "Termix ベータ版", - "termixBetasHint": "安定版だけでなく、新しいベータ版の情報も通知する。", - "runningBetaBuild": "現在ベータ版ビルドを実行しています。終了するには、安定版のイメージまたはインストーラーに戻してください。", - "howToInstall": "ベータ版の入手方法", - "desktopInstall": "ベータ版インストーラーをダウンロードし、現在のバージョンの上書きインストールを行ってください。", - "downloadBeta": "{{version}} をダウンロード", - "dockerInstall": "イメージをベータタグに変更し、コンテナを再起動してください:", - "copy": "コピー", - "copied": "コピーしました", - "copyFailed": "コピーできませんでした", - "learnMore": "ベータ版について詳しく見る", - "feedback": "フィードバック", - "feedbackHint": "バグを発見したり、アイデアがあったりしませんか?バージョン情報を含めて直接開発者に送信されます。", - "sendFeedback": "ベータ版のフィードバックを送信", - "releases": "リリース", - "thisVersion": "現在のバージョン", - "newestStable": "最新の安定版", - "newestBeta": "最新のベータ版", - "noRelease": "現在はありません", - "pluginBetas": "プラグインのベータ版", - "pluginBetasIntro": "各プラグインは個別にベータ版を使用できます。試すには、プラグインを開いて「ベータ版を試す」を押してください。", - "openPlugins": "プラグインを開く", - "waitingForStable": "安定版に戻りました。新しい安定版がリリースされるまで、{{version}} のままになります。", - "backToStable": "安定版に戻る", - "allPluginsBeta": "すべてのプラグインでベータ版を使用する", - "allPluginsStable": "すべてのプラグインを安定版に戻す", - "saveFailed": "変更を保存できませんでした" - } + "featureUnavailable": "{{name}} は現在利用できません。これらの設定は保存されますが、反映されません。" }, "managerCard": { "refresh": "更新", @@ -2219,80 +1504,10 @@ "filter": "フィルター..." }, "sync": { - "server": "Termix サーバー", - "account": "アカウント", - "status": "ステータス", - "never": "なし", - "justNow": "たった今", "minutesAgo_other": "{{count}} 分前", "hoursAgo_other": "{{count}} 時間前", - "actionFailed": "操作に失敗しました。もう一度お試しください。", - "unlinkedTitle": "このデバイスのみ", - "unlinkedBody": "Termix はこのデバイス上で単独で動作します。すべてを同期させるには、Termix サーバーにリンクしてください。", - "unlinkedPointHosts": "ホスト、認証情報、スニペット、設定は、すべてのデバイスに追従します。", - "unlinkedPointOffline": "サーバーに接続できない場合でも動作し、後で同期されます。", - "unlinkedPointAccount": "サーバーアカウントでサインインし、他のユーザーから共有されたホストもここに表示されます。", - "linkButton": "サーバーにリンク", - "state": { - "syncing": "同期中", - "offline": "サーバーに接続できません", - "error": "同期が停止しました", - "signedOut": "サインアウト済み", - "synced": "{{time}} に同期済み" - }, "pending_other": "{{count}} 件の変更が同期待ちです", - "signInAgain": "再度サインイン", - "syncNow": "今すぐ同期", - "unlink": "リンク解除", - "unlinked": "このデバイスはリンク解除されました", - "unlinkTitle": "このデバイスのリンクを解除しますか?", - "unlinkDescription": "同期が停止し、サーバーからサインアウトされます。他のユーザーから共有されたホストは、いずれにせよこのデバイスから削除されます。", - "unlinkKeepTitle": "データをこのデバイスに保持", - "unlinkKeepBody": "ホスト、認証情報、設定はこのデバイスに残り、個別に動作し続けます。", - "unlinkRemoveTitle": "同期されたデータを削除", - "unlinkRemoveBody": "サーバー由来のすべてのデータがこのデバイスから削除されます。このデバイスにのみ保持されたホストは残ります。", - "conflictsTitle": "競合", - "conflictsDescription": "これらは、このデバイスとサーバーで同時に変更されました。現在サーバーのバージョンが使用されています。代わりに自分のバージョンを送信するには、こちらを選択してください。", - "keepMine": "自分のデータを保持", - "keepServer": "サーバーのデータを保持", - "errorsTitle": "同期されていない", - "errorsDescription": "サーバーはこれらの変更を受け付けませんでした。これらはこのデバイスに残ります。", - "errorPermission": "サーバー上のあなたのアカウントには、この変更を行う権限がありません。", - "retry": "再試行", - "whatSyncs": "同期対象", - "whatSyncsDescription": "このデバイスにのみ保持したい項目はオフにしてください。", - "coreGroup": "Termix", - "notOnServer": "サーバーにはありません", - "notOnDevice": "このデバイスにはまだありません", - "localOnlyHint": "設定から、個々のホストやフォルダをこのデバイスにのみ保持することもできます。", - "originTitle": "接続の開始場所", - "originDescription": "このデバイスからホストに接続するか、サーバー経由で接続するかを選択します。ホストごとに設定を変更できます。", - "originLocal": "このデバイス", - "originRemote": "サーバー", - "entities": { - "hosts": "ホスト", - "sshCredentials": "認証情報", - "sshFolders": "フォルダ", - "userPreferences": "環境設定", - "pluginUserSettings": "プラグイン設定", - "sharedHosts": "あなたと共有されたホスト", - "sharedCredentials": "あなたと共有された認証情報", - "vaultProfiles": "Vault プロファイル", - "snippetFolders": "スニペットフォルダ", - "snippets": "スニペット", - "dashboardServiceLinks": "サービスリンク", - "homepageItems": "ホームページ項目", - "networkTopology": "ネットワークマップ", - "workspaces": "ワークスペース", - "hostDefaults": "ホストのデフォルト設定", - "hostDefaultsAdmin": "サーバーのホストデフォルト設定", - "aiProviders": "AI プロバイダー", - "homepageLayouts": "ホームページレイアウト", - "accountProfile": "アカウントプロフィール" - }, "proxy": { - "title": "リバースプロキシ", - "description": "Cloudflare Access やログインページなどがサーバーの前にある場合にのみ必要です。", "headersTitle": "追加ヘッダー", "headersHint": "サーバーへのすべてのリクエストに送信されます。例えば、Cloudflare Access のサービストークンなどです。", "headerName": "ヘッダー名", @@ -2305,8 +1520,7 @@ "username": "ユーザー名", "password": "パスワード", "allowInvalidCertificate": "自己署名証明書を信頼する", - "allowInvalidCertificateHint": "サーバーの証明書が既知の認証局から発行されていない場合のみ、自分のサーバーに対して使用してください。", - "saved": "保存済み" + "allowInvalidCertificateHint": "サーバーの証明書が既知の認証局から発行されていない場合のみ、自分のサーバーに対して使用してください。" }, "problems": { "invalidUrl": "これはWebアドレスのように見えません。", @@ -2342,6 +1556,27 @@ "linking": "リンクして最初の同期を実行しています...", "linked": "リンクしました。データが同期されています。", "signedInAgain": "サインインしました。同期が再開されました。" + }, + "entities": { + "hosts": "ホスト", + "sshCredentials": "認証情報", + "sshFolders": "フォルダ", + "userPreferences": "環境設定", + "pluginUserSettings": "プラグイン設定", + "sharedHosts": "あなたと共有されたホスト", + "sharedCredentials": "あなたと共有された認証情報", + "vaultProfiles": "Vault プロファイル", + "snippetFolders": "スニペットフォルダ", + "snippets": "スニペット", + "dashboardServiceLinks": "サービスリンク", + "homepageItems": "ホームページ項目", + "networkTopology": "ネットワークマップ", + "workspaces": "ワークスペース", + "hostDefaults": "ホストのデフォルト設定", + "hostDefaultsAdmin": "サーバーのホストデフォルト設定", + "aiProviders": "AI プロバイダー", + "homepageLayouts": "ホームページレイアウト", + "accountProfile": "アカウントプロフィール" } }, "hostDefaults": { @@ -2358,28 +1593,9 @@ "resetTitle": "このホストは独自の値を設定しています。クリックして {{source}} のデフォルトを再度使用します", "clearTitle": "このレベルで設定されています。クリックしてクリアし、代わりに {{source}} を使用します", "inheritedTitle": "{{source}} のデフォルトに従います", - "titleAdmin": "サーバーのホストデフォルト", - "titleUser": "マイホストデフォルト", - "titleFolder": "フォルダデフォルト: {{name}}", - "descriptionAdmin": "このサーバー上のすべてのホストのデフォルト。ユーザー独自のデフォルト、フォルダのデフォルト、またはホスト自体で異なる値を設定できます。フィールドを変更してここで設定するか、クリアして未設定のままにします。", - "descriptionUser": "サーバーのデフォルトを上回る、すべてのホストのデフォルト。フォルダやホスト自体で異なる値を設定できます。フィールドを変更してここで設定するか、クリアして未設定のままにします。", - "descriptionFolder": "自分のデフォルトを上回る、このフォルダとそのサブフォルダ内のホストのデフォルト。ホストで異なる値を設定できます。フィールドを変更してここで設定するか、クリアして未設定のままにします。", - "save": "デフォルトを保存", "saved_other": "デフォルトが保存されました。{{count}} 個のホストが更新されました。", - "savedInBackground": "デフォルトが保存されました。バックグラウンドでホストが更新されています。", "appliedToHosts_other": "新しいデフォルトで {{count}} 個のホストが更新されました。", - "saveFailed": "デフォルトを保存できませんでした", - "loadFailed": "デフォルトを読み込めませんでした", - "confirmTitle": "デフォルトを保存しますか?", "confirmChanges_other": "{{count}} 個のホストがこれらのデフォルトに従い、変更されます。", - "confirmNoChanges": "既存のホストの変更はありません。新しいホストはこれらのデフォルトから開始されます。", - "menuMyDefaults": "マイホストデフォルト", - "folderDefaultsAction": "フォルダデフォルト", - "adminSectionDescription": "このサーバー上のすべてのホストが従うデフォルトを設定します。これは、各プラグインを含むホストが持つすべての設定に適用されます。ユーザーとフォルダは上書きして独自の値を設定でき、どのホストも独自の値を使用できます。", - "editServerDefaults": "サーバーデフォルトを編集", - "resetMenu": "リセット", - "resetAll": "すべてをデフォルトに戻す", - "resetCore": "接続と SSH をデフォルトに戻す", "resetDone_other": "{{count}} 台のホストがデフォルト設定に従うようになりました。" }, "panel": { @@ -2392,44 +1608,10 @@ "fields": { "secretSaved": "保存しました。入力して置き換えてください。" }, - "sharing": { - "revokeConfirm": "{{name}} のアクセス権を削除しますか?", - "revoke": "アクセス権を削除" - }, "manage": { - "searchSettings": "設定を検索", - "noMatchingSettings": "一致する設定がありません。", - "sections": "セクション", - "sectionNeedsAttention": "ここに注意が必要な項目があります", "needsAttention_other": "{{count}} 件の項目が注意を必要としています。", - "bandHost": "ホスト", - "bandFeatures": "プロトコルとプラグイン", - "bandCredential": "認証情報", - "sshConnection": "SSH 接続", - "errorAddressRequired": "アドレスが必要です。", - "errorPortRange": "1 から 65535 の間のポートを使用してください。", - "defaults": "デフォルト", - "searchHosts": "ホストを検索", - "searchCredentials": "認証情報を検索", - "searchDefaults": "デフォルトを検索", - "addCredential": "認証情報を追加", - "nothingMatches": "一致するものはありません", - "nothingYet": "まだ何もありません", - "emptyHostsHint": "ホストを追加すると、指定したフォルダ内にここに表示されます。", - "emptyCredentialsHint": "保存した認証情報は、どのホストでも再利用できます。", - "collapse": "折りたたむ", - "expand": "展開", - "cannotBeUndone": "この操作は元に戻せません。", - "hostNotFound": "そのホストが見つかりませんでした。リストを更新してみてください。", "hostCount_other": "{{count}} 台のホスト", - "credentialCount_other": "{{count}} 件の認証情報", - "newHost": "新しいホスト", - "newCredential": "新しい認証情報", - "advanced": "詳細", - "pickHost": "編集するホストを選択", - "pickCredential": "編集する認証情報を選択", - "pickDefaults": "編集するデフォルトのレベルを選択", - "pickHint": "接続に関するすべての設定は、見つけやすいようグループ化されてここにあります。" + "credentialCount_other": "{{count}} 件の認証情報" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/ko_KR.json b/src/ui/locales/translated/ko_KR.json index 9a9fb4013..06c447c90 100644 --- a/src/ui/locales/translated/ko_KR.json +++ b/src/ui/locales/translated/ko_KR.json @@ -141,7 +141,6 @@ "continue": "계속", "error": "오류", "unsavedChanges": "저장되지 않은 변경 사항", - "more": "더 보기", "loading": "로딩 중...", "host": "호스트", "selectHost": "호스트 선택...", @@ -154,7 +153,6 @@ "cancel": "취소", "username": "사용자 이름", "login": "로그인", - "logout": "로그아웃", "register": "회원가입", "password": "비밀번호", "confirmPassword": "비밀번호 확인", @@ -165,8 +163,6 @@ "rename": "이름 바꾸기", "edit": "편집", "confirm": "확인", - "next": "다음", - "previous": "이전", "refresh": "새로고침", "language": "언어", "backendReconnected": "서버 연결 복원됨", @@ -234,10 +230,6 @@ "pluginsDocsLink": "각 항목에 대해 읽기" }, "desktopUpdates": { - "title": "데스크톱 앱", - "mode": "업데이트", - "modeHint": "이 앱이 새 버전을 받는 방법입니다.", - "manualModeHint": "이 복사본은 자체 업데이트가 불가능하므로, Termix는 새 버전이 출시되었을 때만 알려드립니다.", "modeAutomatic": "자동", "modePrompt": "먼저 묻기", "modeNever": "사용 안 함", @@ -247,15 +239,6 @@ "onboardingTitle": "앱 업데이트", "onboardingBody": "이제 데스크톱 앱이 자체 업데이트를 지원합니다. 새 버전이 도착하는 방식을 선택하세요. 나중에 설정 > 업데이트에서 변경할 수 있습니다.", "onboardingManual": "이 앱 복사본은 자체 업데이트가 불가능한 방식으로 설치되었으므로, Termix는 새 버전이 출시되면 다운로드 링크와 함께 알려드립니다.", - "status": "버전 {{version}}", - "statusIdle": "아직 확인하지 않음", - "statusChecking": "업데이트 확인 중", - "statusAvailable": "버전 {{version}} 사용 가능", - "statusDownloading": "{{version}} 다운로드 중 ({{progress}}%)", - "statusReady": "버전 {{version}} 준비 완료. 설치하려면 재시작하세요.", - "statusUpToDate": "최신 버전을 사용 중입니다", - "statusError": "업데이트를 확인할 수 없습니다. 나중에 다시 시도하세요.", - "checkNow": "지금 확인", "download": "다운로드", "restart": "지금 재시작", "later": "나중에", @@ -269,26 +252,11 @@ "terminal": "터미널", "close": "닫기", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "비밀번호 복사", - "copySudoPassword": "Sudo 비밀번호 복사", - "passwordCopied": "비밀번호가 클립보드에 복사되었습니다", - "failedToCopyPassword": "비밀번호 복사에 실패했습니다", - "refreshTab": "연결 새로고침", - "renameTab": "탭 이름 변경", "dashboard": "대시보드", "quickConnect": "빠른 연결", - "openAsTabHint": "탭으로 열려면 Ctrl+클릭 또는 마우스 가운데 버튼을 클릭하세요", - "openAsTab": "탭으로 열기", - "openInRightDock": "오른쪽 도크에서 열기", - "closeRightDock": "오른쪽 도크 닫기", - "toggleRightDock": "오른쪽 도크 전환", "hosts": "호스트", "credentials": "자격 증명", "connections": "연결", - "keepSideMenuOpen": "메뉴 유지", - "collapseSideMenu": "메뉴 접기", - "roleAdministrator": "관리자", - "roleUser": "사용자", "sync": "동기화", "reconnectDisconnectedTerminals": "모든 연결 끊긴 터미널 재연결", "reconnectingTerminals_other": "{{count}}개 터미널 재연결 중", @@ -296,29 +264,10 @@ "reconnectTerminalsFailed_other": "{{count}}개 터미널 재연결을 시작할 수 없습니다", "fullscreenUnsupported": "이 브라우저는 전체 화면을 지원하지 않습니다", "fullscreenFailed": "전체 화면 전환에 실패했습니다", - "resetSidebarWidth": "너비 초기화", - "collapseSidebar": "사이드바 접기", - "openSidebar": "사이드바 열기", "confirmCloseHost": "{{host}}를(을) 닫으시겠습니까?", - "enterFullscreen": "전체 화면 진입 (Ctrl+Shift+F)", - "exitFullscreen": "전체 화면 종료 (Ctrl+Shift+F)", - "group": { - "objects": "내 항목", - "tools": "도구", - "system": "시스템" - }, - "searchEverything": "호스트, 탭 및 작업 검색", - "search": "검색", "hiddenCount_other": "{{count}}개 숨김", - "showInRail": "사이드바에 표시", - "moveUp": "위로 이동", - "moveDown": "아래로 이동", - "resetRailOrder": "순서 초기화", - "hideFromRail": "사이드바에서 숨기기", - "openSettings": "설정 열기", "settings": "설정", "manage": "관리", - "mobileNavigation": "네비게이션", "plugins": "플러그인" }, "hosts": { @@ -904,35 +853,14 @@ "importSummary": "가져오기 완료: {{imported}}개 가져옴, {{updated}}개 업데이트, {{failed}}개 실패", "importHostsFailed": "호스트 가져오기 실패" }, - "commandPalette": { - "searchPlaceholder": "호스트, 명령어 또는 설정 검색...", - "quickActions": "빠른 작업", - "navigation": "탐색", - "orShortcut": "또는", - "addNewHost": "새 호스트 추가", - "adminSettings": "관리자 설정", - "addCredential": "자격 증명 추가", - "recentActivity": "최근 활동", - "serversAndHosts": "서버 및 호스트", - "noHostsFound": "\"{{search}}\"와(과) 일치하는 호스트가 없습니다", - "links": "링크", - "navigate": "탐색", - "select": "선택", - "pluginActions": "더 많은 작업", - "noTargetTab": "열린 터미널 탭이 없습니다", - "documentation": "문서" - }, "splitScreen": { "title": "분할 화면", "defaultLabel": "분할 {{number}}", "splitRight": "오른쪽으로 분할", "splitDown": "아래쪽으로 분할", - "addToSplit": "{{split}}에 추가", "paneEmptyItem": "패널 {{index}}: 비어 있음", "paneItem": "패널 {{index}}: {{label}}", "paneNumber": "패널 {{index}}", - "newPaneRight": "오른쪽에 새 패널", - "newPaneBelow": "아래에 새 패널", "emptyTitle": "빈 패널", "emptyHint": "여기에 표시할 항목을 선택하세요. 이 패널이 선택된 상태에서 사이드바에서 항목을 열면 여기에도 함께 열립니다.", "openTabs": "열린 탭", @@ -949,7 +877,6 @@ "clearPane": "이 패널 비우기", "zoom": "패널 확대", "unzoom": "레이아웃 복원", - "unsplit": "분할 해제", "layouts": "레이아웃", "applyLayout": "레이아웃 변경", "maxPanes_other": "분할 화면에는 최대 {{count}}개 패널을 표시할 수 있습니다", @@ -957,8 +884,6 @@ "dropHere": "여기에 표시하려면 놓기", "paneActions": "패널 작업", "dividerHint": "크기 조절하려면 드래그하세요. 균등하게 나누려면 더블클릭하세요.", - "openInSplit": "분할 화면에서 열기", - "openInNewSplit": "현재 탭과 함께 새 분할 화면 만들기", "shortcuts": "단축키", "shortcutNavigate": "패널 간 이동", "presets": { @@ -972,23 +897,6 @@ "grid6": "6개 그리드" } }, - "connections": { - "noConnections": "연결 없음", - "noConnectionsDesc": "터미널, 파일 관리자 또는 원격 데스크톱을 열면 여기에 연결이 표시됩니다", - "connectedFor": "{{duration}} 동안 연결됨", - "connected": "연결됨", - "disconnected": "연결 끊김", - "reconnect": "재연결", - "sectionOpen": "열기", - "sectionBackground": "백그라운드", - "backgroundDesc": "세션은 연결이 끊긴 후 {{minutes}}분 동안 유지되며 재연결할 수 있습니다.", - "expiresIn": "{{duration}} 후 만료", - "search": "연결 검색...", - "noSearchResults": "검색 결과와 일치하는 연결이 없습니다", - "rename": "세션 이름 변경", - "forgetConfirm": "{{name}}의 백그라운드 세션을 종료하시겠습니까?", - "forget": "세션 종료" - }, "sshAuth": { "totpRequired": "이중 인증 필요", "totpCodeLabel": "인증 코드", @@ -1126,474 +1034,46 @@ "placeholders": { "keyPassword": "키 비밀번호", "pastePrivateKey": "개인 키를 여기에 붙여넣으세요...", - "enterPassword": "비밀번호를 입력하세요", - "apiKeyName": "예: CI 파이프라인", - "credentialName": "예: 프로덕션 SSH 키", - "optionalDetails": "선택 사항 세부 정보...", - "sshUsername": "예: root 또는 deploy", - "hostAddress": "10.0.0.1 또는 example.com", - "hostName": "예: 웹 서버 프로덕션" + "enterPassword": "비밀번호를 입력하세요" }, "dashboard": { - "title": "대시보드", - "github": "GitHub", - "reportBug": "버그 신고", - "discord": "Discord", - "docs": "문서", - "donate": "후원하기", - "serverOverview": "서버 개요", - "version": "버전", "updateAvailable": "업데이트 가능", - "beta": "베타", - "uptime": "가동 시간", - "database": "데이터베이스", - "healthy": "정상", - "error": "오류", - "totalHosts": "총 호스트 수", - "totalCredentials": "총 자격 증명 수", - "recentActivity": "최근 활동", - "reset": "재설정", - "noRecentActivity": "최근 활동 없음", - "quickActions": "빠른 작업", - "addHost": "호스트 추가", - "addCredential": "자격 증명 추가", - "adminSettings": "관리자 설정", - "userProfile": "사용자 프로필", - "serverStats": "서버 통계", - "customizeLayout": "대시보드 사용자 정의", - "justNow": "방금" + "beta": "베타" }, "dashboardTab": { "stable": "안정 버전", - "registerNewServer": "새 서버 등록", - "storeSshKeysOrPasswords": "SSH 키 또는 비밀번호 저장", - "manageUsersAndRoles": "사용자 및 역할 관리", - "manageYourAccount": "계정 관리", - "hostStatus": "호스트 상태", - "noHostsConfigured": "구성된 호스트 없음", - "checking": "확인 중", - "commandPalette": "명령어 팔레트", - "done": "완료", - "clear": "지우기", - "dragToResizeColumns": "드래그하여 열 너비 조정", - "hostsAvailable": "사용 가능한 호스트", - "removeSection": "섹션 제거", - "addSection": "섹션 추가", - "allSectionsShown": "모든 항목이 이미 대시보드에 표시됩니다.", - "fromPlugins": "플러그인에서", - "dropHere": "여기에 섹션을 드롭하세요", - "dragToReorder": "섹션을 드래그하여 순서 변경", - "clearActivityConfirm": "최근 활동을 지우시겠습니까?", - "resetConfirm": "대시보드를 기본 레이아웃으로 초기화하시겠습니까?", "onlineCount_other": "{{count}}개 온라인", "hostCount_other": "{{count}}개 호스트" }, "admin": { - "sectionGeneral": "일반", - "sectionUsers": "사용자", - "sectionSessions": "세션", - "sectionRoles": "역할", - "sectionDatabase": "데이터베이스", - "sectionApiKeys": "API 키", - "sectionAuditLog": "감사 로그", - "sectionSsl": "HTTPS 인증서", - "sectionBranding": "화이트 라벨", - "brandingAppName": "애플리케이션 이름", - "brandingAppNameDesc": "로그인 화면과 브라우저 탭에 표시됩니다. \"Termix\"를 사용하려면 비워두세요.", - "brandingTagline": "슬로건", - "brandingTaglineDesc": "로그인 화면의 애플리케이션 이름 아래에 표시됩니다. 기본 슬로건을 사용하려면 비워두세요.", - "brandingLogo": "로고", - "brandingLogoDesc": "PNG, JPEG 또는 WEBP 형식, 최대 750KB. 로그인 화면과 브라우저 탭의 기본 아이콘을 대체합니다.", - "brandingLogoUpload": "로고 업로드", - "brandingLogoReset": "기본값으로 초기화", - "brandingLogoInvalid": "잘못된 이미지입니다. 최대 750KB의 PNG, JPEG 또는 WEBP 파일을 사용하세요.", - "brandingSaved": "브랜딩 설정이 저장되었습니다", - "brandingSaveFailed": "브랜딩 설정 저장에 실패했습니다", - "sslDescription": "Termix가 HTTPS로 제공하는 인증서입니다. 여기서 직접 업로드하거나 ACME 인증서 섹션에서 Let's Encrypt를 통해 발급 및 갱신할 수 있습니다.", - "sslDocsLink": "SSL 문서 보기", - "sslCertStatus": "인증서 상태", - "sslCertStatusNone": "인증서 없음", - "sslCertStatusValid": "유효함", - "sslCertStatusExpiring": "만료 임박", - "sslCertStatusExpired": "만료됨", - "sslCertExpiresAt": "{{date}}에 만료", - "sslInfoNote": "인증서를 발급하거나 업로드한 후, Termix는 기존 HTTP 포트 외에도 SSL_PORT(기본값 8443)에서 HTTPS를 자동으로 활성화합니다. 해당 포트가 이 컨테이너에 게시/매핑되어 접근 가능하도록 확인하세요.", - "sslManualCert": "인증서 (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "개인 키 (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "기존 인증서와 개인 키를 붙여넣으세요. CA에서 요구하는 경우 전체 체인도 포함하세요.", - "sslManualUpload": "인증서 업로드 및 설치", - "sslManualUploadLoading": "인증서 업로드 중...", - "sslManualUploadSuccess": "인증서가 성공적으로 업로드 및 설치되었습니다", - "sslManualUploadFailed": "인증서 업로드에 실패했습니다", - "sslManualRequiresFields": "인증서와 개인 키가 필요합니다", - "auditLogTotal": "총 {{total}}개 항목", - "auditLogEmpty": "감사 로그 항목을 찾을 수 없습니다", - "auditLogSuccess": "성공", - "auditLogFailed": "실패", - "auditLogClearFilters": "필터 지우기", - "auditLogPage": "{{totalPages}} 중 {{page}}페이지 (총 {{total}}개)", - "auditLogIp": "IP", - "auditLogResourceId": "리소스 ID", - "auditLogFilterUser": "사용자", - "auditLogFilterAction": "동작", - "auditLogFilterResourceType": "리소스 유형", - "auditLogFilterStatus": "상태", - "auditLogFilterFrom": "시작일", - "auditLogFilterTo": "종료일", - "auditLogFilterAll": "전체", - "allowRegistration": "사용자 등록 허용", - "allowRegistrationDesc": "새 사용자가 사용자 이름과 비밀번호로 직접 등록할 수 있도록 합니다", - "allowPasswordLogin": "비밀번호 로그인 허용", - "allowPasswordLoginDesc": "사용자 이름/비밀번호 로그인", - "externalAutoProvision": "외부 계정 자동 생성", - "externalAutoProvisionDesc": "SSO 또는 LDAP과 같은 외부 로그인을 통해 처음 로그인할 때 계정을 생성합니다. 이 기능이 꺼져 있으면 이미 계정이 있는 사람만 해당 방식으로 로그인할 수 있습니다", - "secondFactorAfterExternalLogin": "외부 로그인(SSO, GitHub, Google, LDAP) 후 2차 인증 요청", - "secondFactorAfterExternalLoginDesc": "꺼짐: 등록한 2차 인증은 비밀번호 및 기타 로컬 로그인 후에만 요청됩니다(이전과 동일함). 켜짐: SSO 및 LDAP을 포함한 모든 로그인 방식 후에 요청됩니다", - "allowPasswordReset": "비밀번호 재설정 허용", - "allowPasswordResetDesc": "Docker 로그를 통한 재설정 코드", - "auditForwardingTitle": "SIEM로 포워딩", - "auditForwardingDesc": "모든 감사 로그 항목의 복사본을 NDJSON 형식으로 외부 수집기로 전송합니다. 로컬 로그는 여전히 기준이 됩니다", - "auditForwardingEnvNotice": "환경 변수로도 포워딩을 구성할 수 있으며, 여기에 저장된 URL이 우선합니다", - "auditForwardingToken": "Bearer 토큰(선택사항)", - "auditForwardingTokenStored": "Bearer 토큰(저장됨)", - "auditForwardingSaved": "감사 포워딩 설정이 저장되었습니다", - "auditForwardingSaveError": "감사 포워딩 설정 저장에 실패했습니다", - "sessionTimeout": "세션 시간 초과", - "hours": "시간", - "sessionTimeoutRange": "최소 1시간, 최대 720시간", - "monitoringDefaults": "모니터링 기본값", - "statusCheck": "상태 확인", - "sec": "초", - "logLevel": "로그 수준", - "usersCount_other": "{{count}}명 사용자", - "searchUsers": "사용자 검색...", - "noUsers": "사용자 없음", - "noUsersMatch": "검색 조건에 맞는 사용자가 없습니다", - "pageOf": "{{total}} 중 {{page}}페이지", - "createUser": "생성", - "newRole": "새 역할", - "roleName": "이름", - "roleDisplayName": "표시 이름", - "roleDescription": "설명", - "rolesCount_other": "{{count}}개 역할", - "createRole": "생성", - "creating": "생성 중...", - "exportDatabase": "데이터베이스 내보내기", - "exportDatabaseDesc": "모든 호스트, 자격 증명 및 설정의 휴대용 SQLite 백업을 다운로드합니다", - "export": "내보내기", - "exporting": "내보내는 중...", - "importDatabase": "데이터베이스 가져오기", - "importDatabaseDesc": "모든 데이터베이스 백엔드에서 휴대용 .sqlite 백업으로 복원합니다", - "importDatabaseSelected": "선택됨: {{name}}", - "selectFile": "파일 선택", - "changeFile": "변경", - "import": "가져오기", - "importing": "가져오는 중...", - "apiKeysCount_other": "{{count}}개 키", - "apiKeysDocsLink": "문서 보기", - "apiKeysCliHint": "Termix CLI와 함께 API 키를 사용하여 터미널에서 서버를 관리합니다", - "apiKeysCliLink": "CLI 문서 보기", - "newApiKey": "새 API 키", - "apiKeyCreatedWarning": "키가 생성되었습니다. 다시 표시되지 않으므로 지금 복사하세요.", - "apiKeyName": "이름", - "apiKeyUser": "사용자", - "apiKeySelectUser": "사용자 선택...", - "apiKeyExpiresAt": "만료일", - "createKey": "키 생성", - "apiKeyNoExpiry": "만료 없음", - "revokedBadge": "취소됨", - "authTypeDual": "이중 인증", - "authTypeExternal": "외부", - "authTypeLocal": "로컬", - "adminStatusAdministrator": "관리자", - "adminStatusRegularUser": "일반 사용자", - "adminBadge": "관리자", - "systemBadge": "시스템", - "customBadge": "사용자 정의", - "youBadge": "나", - "sessionsActive_other": "{{count}}개 활성", - "sessionActive": "활성: {{time}}", - "sessionExpires": "만료: {{time}}", - "revokeAll": "전체", - "revokeAllSessionsSuccess": "사용자의 모든 세션이 취소되었습니다.", - "revokeAllSessionsFailed": "세션 취소에 실패했습니다.", - "revokeSessionFailed": "세션 취소에 실패했습니다.", - "addRole": "역할 추가", - "noCustomRoles": "사용자 정의 역할이 정의되지 않았습니다.", - "removeRoleFailed": "역할 제거에 실패했습니다.", - "assignRoleFailed": "역할 할당에 실패했습니다.", - "userAdminAccess": "관리자", - "userAdminAccessDesc": "모든 관리자 설정에 대한 전체 액세스 권한", - "userRoles": "역할", - "revokeAllUserSessions": "모든 세션 취소", - "revokeAllUserSessionsDesc": "모든 기기에서 다시 로그인하도록 강제", - "revoke": "취소", - "deleteUserWarning": "이 사용자를 삭제하면 되돌릴 수 없습니다.", - "deleteUser": "{{username}} 삭제", - "deleting": "삭제 중...", - "deleteUserFailed": "사용자 삭제에 실패했습니다.", - "deleteUserSuccess": "사용자 \"{{username}}\"이(가) 삭제되었습니다.", - "deleteRoleSuccess": "역할 \"{{name}}\"이(가) 삭제되었습니다.", - "revokeKeySuccess": "키 \"{{name}}\"이(가) 취소되었습니다.", - "revokeKeyFailed": "키 취소에 실패했습니다.", - "copiedToClipboard": "클립보드에 복사됨", - "done": "완료", - "createUserTitle": "사용자 생성", - "createUserDesc": "새 로컬 계정을 만듭니다.", - "createUserUsername": "사용자 이름", - "createUserPassword": "비밀번호", - "createUserPasswordHint": "최소 6자 이상이어야 합니다.", - "createUserEnterUsername": "사용자 이름 입력", - "createUserSubmit": "사용자 생성", - "editUserTitle": "사용자 관리: {{username}}", - "editUserDesc": "역할, 관리자 상태, 세션 및 계정 설정을 편집합니다.", - "editUserUsername": "사용자 이름", - "editUserAuthType": "인증 유형", - "editUserAdminStatus": "관리자 상태", - "editUserUserId": "사용자 ID", - "linkAccountTitle": "계정 연결", - "linkAccountDesc": "외부 계정 {{username}}을(를) 기존 로컬 계정과 병합합니다.", - "linkAccountDescLocal": "로컬 계정 {{username}}을(를) 기존 외부 전용 계정과 연결합니다.", - "linkAccountWarningTitle": "다음 작업이 수행됩니다:", - "linkAccountEffect1": "외부 전용 계정 삭제", - "linkAccountEffect2": "대상 계정에 외부 로그인 추가", - "linkAccountEffect3": "외부 로그인 및 비밀번호 로그인 모두 허용", - "linkAccountTargetUsername": "로컬 계정 사용자 이름", - "linkAccountTargetPlaceholder": "연결할 로컬 계정 사용자 이름을 입력하세요", - "linkAccountExternalUsername": "외부 계정 사용자 이름", - "linkAccountExternalPlaceholder": "병합할 외부 전용 계정 사용자 이름을 입력하세요", - "linkAccountExternalNotFound": "해당 사용자 이름으로 외부 전용 계정을 찾을 수 없습니다", - "linkAccounts": "계정 연결", - "linkAccountSuccess": "계정이 성공적으로 연결되었습니다", - "linkAccountFailed": "계정 연결에 실패했습니다", - "linkAccountInProgress": "연결 중...", - "unlinkAccountTitle": "외부 로그인 연결 해제", - "unlinkAccountDesc": "{{username}}에서 외부 로그인을 제거합니다. 이제 비밀번호로만 로그인할 수 있습니다.", - "unlinkAccountWarning": "이 작업은 이 계정에서 외부 로그인을 제거합니다. 사용자가 계속 로그인하려면 비밀번호가 설정되어 있어야 합니다.", - "unlinkAccount": "외부 로그인 연결 해제", - "unlinkAccountInProgress": "연결 해제 중...", - "unlinkAccountSuccess": "외부 로그인 연결이 해제되었습니다", - "unlinkAccountFailed": "외부 로그인 연결 해제를 실패했습니다", - "updateRegistrationFailed": "등록 설정 업데이트에 실패했습니다", - "updatePasswordLoginFailed": "비밀번호 로그인 설정 업데이트에 실패했습니다", - "updateSecondFactorAfterExternalLoginFailed": "2차 인증 설정 업데이트에 실패했습니다", - "updatePasswordResetFailed": "비밀번호 재설정 설정 업데이트에 실패했습니다", - "sessionTimeoutRange2": "세션 시간 초과 값은 1시간에서 720시간 사이여야 합니다", - "sessionTimeoutSaved": "세션 시간 초과가 저장되었습니다", - "sessionTimeoutSaveFailed": "세션 시간 초과 저장에 실패했습니다", - "monitoringIntervalInvalid": "잘못된 간격 값입니다", - "monitoringSaved": "모니터링 설정이 저장되었습니다", - "monitoringSaveFailed": "모니터링 설정 저장에 실패했습니다", - "logLevelUpdateFailed": "로그 레벨 업데이트에 실패했습니다", - "createUserRequired": "사용자 이름과 비밀번호는 필수입니다", - "createUserPasswordTooShort": "비밀번호는 최소 6자 이상이어야 합니다", - "createUserSuccess": "\"{{username}}\" 사용자가 생성되었습니다", - "createUserFailed": "사용자 생성에 실패했습니다", - "updateAdminStatusFailed": "관리자 상태 업데이트에 실패했습니다", - "allSessionsRevoked": "모든 세션이 취소되었습니다", - "revokeSessionsFailed": "세션 취소에 실패했습니다", - "manageUserData": "사용자 데이터 관리", - "backToUsers": "사용자 목록으로 돌아가기", - "manageTabAccount": "계정", - "manageTabHosts": "호스트", - "manageTabCredentials": "자격 증명", - "manageTabSessions": "세션", - "manageTabDanger": "위험", - "manageEditorBack": "{{username}}의 데이터로 돌아가기", - "dataLockedBadge": "잠김", - "dataLockedNotice": "{{username}}의 데이터는 다음 로그인 시까지 잠겨 있습니다. 그 전까지는 호스트, 자격 증명 및 스니펫을 보거나 수정할 수 없습니다.", - "resetPasswordTitle": "비밀번호 재설정", - "resetPasswordExternalOnly": "이 사용자는 외부 제공자를 통해 로그인하며 비밀번호가 없습니다.", - "resetPasswordPlaceholder": "새 비밀번호", - "resetPasswordBtn": "재설정", - "resetPasswordWorking": "재설정 중...", - "resetPasswordSuccess": "비밀번호가 재설정되었습니다", - "resetPasswordSuccessWiped": "비밀번호가 재설정되었습니다. 사용자의 암호화된 데이터가 삭제되었습니다.", - "resetPasswordFailed": "비밀번호 재설정에 실패했습니다", - "resetPasswordConfirmWipe": "{{username}}은(는) 암호화 업그레이드 이후로 로그인하지 않았으므로 데이터를 복구할 수 없습니다. 지금 재설정하면 호스트, 자격 증명 및 스니펫이 삭제됩니다. 계속하시겠습니까?", - "manageApiKeys": "API 키", - "apiKeyNamePlaceholder": "키 이름", - "apiKeyCopyNotice": "이 키는 다시 표시되지 않으므로 지금 복사하세요.", - "noApiKeysForUser": "API 키 없음", - "apiKeyDeleteFailed": "API 키 삭제 실패", - "exportUserData": "데이터 내보내기", - "exportUserDataDesc": "이 사용자의 호스트, 자격 증명 및 파일 관리자 데이터를 JSON 형식으로 다운로드합니다. 비밀 키는 복호화됩니다.", - "exportUserDataSuccess": "사용자 데이터가 내보내졌습니다", - "exportUserDataFailed": "사용자 데이터 내보내기 실패", "hostsCount_other": "{{count}}개 호스트", - "addHostForUser": "호스트 추가", - "noHostsForUser": "이 사용자에게 호스트가 없습니다", - "connectToHost": "연결", - "deleteHostConfirm": "{{username}}의 호스트 \"{{name}}\"을(를) 삭제하시겠습니까?", - "hostDeletedSuccess": "호스트가 삭제되었습니다", - "hostDeleteFailed": "호스트 삭제 실패", "credentialsCount_other": "{{count}}개 자격 증명", - "addCredentialForUser": "자격 증명 추가", - "noCredentialsForUser": "이 사용자에게 자격 증명이 없습니다", - "deleteCredentialConfirm": "{{username}}의 자격 증명 \"{{name}}\"을(를) 삭제하시겠습니까?", - "credentialDeletedSuccess": "자격 증명이 삭제되었습니다", - "credentialDeleteFailed": "자격 증명 삭제 실패", - "noSessionsForUser": "활성 세션 없음", - "deleteSuccessorLabel": "호스트 및 자격 증명 인수자", - "deleteSuccessorMe": "나 (삭제하는 관리자)", - "deleteSuccessorNone": "없음, 삭제하기", - "deleteSuccessorDesc": "이 사용자가 공유한 모든 항목은 새 소유자 아래에서 계속 작동합니다. '없음'을 선택하면 해당 호스트, 자격 증명 및 공유 항목이 삭제됩니다.", - "deleteUserDangerDesc": "{{username}} 및 모든 데이터(호스트, 자격 증명, 스니펫, 기록)를 영구적으로 삭제합니다. 이 작업은 되돌릴 수 없습니다.", - "deleteUserConfirm": "{{username}} 및 모든 데이터를 영구적으로 삭제하시겠습니까?", - "deleteUserAdminBlocked": "이 사용자를 삭제하기 전에 관리자 권한을 제거하세요.", - "createRoleRequired": "이름과 표시 이름은 필수입니다", - "createRoleSuccess": "역할 \"{{name}}\"이(가) 생성되었습니다", - "createRoleFailed": "역할 생성 실패", - "apiKeyNameRequired": "키 이름은 필수입니다", - "apiKeyUserRequired": "사용자 ID는 필수입니다", - "apiKeyCreatedSuccess": "API 키 \"{{name}}\"이(가) 생성되었습니다", - "apiKeyCreateFailed": "API 키 생성 실패", - "exportSuccess": "데이터베이스가 성공적으로 내보내졌습니다", - "exportFailed": "데이터베이스 내보내기 실패", - "importSelectFile": "먼저 파일을 선택하세요", - "importCompleted": "가져오기 완료: {{total}}개 항목 가져오기, {{skipped}}개 건너뛰기", - "importFailed": "가져오기 실패: {{error}}", - "importError": "데이터베이스 가져오기 실패", - "sectionHostDefaults": "호스트 기본값", "rolePermissions": { - "count_other": "{{count}}개 권한", - "editAction": "권한 편집", - "loadError": "권한 카탈로그 로드 실패", - "saved": "역할 권한이 저장되었습니다", - "saveError": "역할 권한 저장 실패", - "save": "저장", - "saving": "저장 중...", - "pluginDisabled": "플러그인 비활성화됨", "groups": { "hosts": "호스트", "credentials": "자격 증명", "admin": "관리" } - }, - "notificationPrivateEndpoints": "허용된 사설 알림 호스트", - "notificationPrivateEndpointsDesc": "알림 채널이 연결할 수 있는 정확한 사설 호스트입니다. 쉼표로 구분하세요.", - "updateNotificationEndpointsFailed": "알림 엔드포인트 허용 목록 업데이트 실패", - "secondFactorsSectionTitle": "2차 인증 요소", - "secondFactorsNone": "등록된 2차 인증 요소 없음", - "secondFactorUnavailable": "사용 불가", - "resetSecondFactors": "2차 인증 요소 초기화", - "resetSecondFactorsConfirm": "{{username}}의 모든 2차 인증 요소를 제거하시겠습니까? 비밀번호 또는 SSO로 로그인하고 다시 등록할 수 있습니다.", - "secondFactorsResetSuccess": "2차 인증 요소가 초기화되었습니다", - "secondFactorsResetFailed": "2차 인증 요소 초기화에 실패했습니다", - "passwordLoginForced": "비밀번호 로그인이 꺼져 있지만, 다른 로그인 방법이 활성화되지 않아 현재는 켜져 있습니다. 이로 인해 누구도 잠겨 있지 않습니다.", - "sslNotRenewed": "이 인증서를 갱신하는 것이 없습니다. 만료일은 {{date}}입니다. ACME 인증서 섹션에서 자동 갱신을 켜거나, 그 전에 새 인증서를 업로드하세요.", - "sslSelfSigned": "Termix에서 만든 자체 서명 인증서입니다. 브라우저에서 경고가 표시됩니다.", - "sslRenewedBy": "{{plugin}}에서 자동으로 갱신됨", - "sslIssuer": "{{issuer}}에서 발급", - "sslNames": "{{names}} 포함", - "sslManualTitle": "인증서 업로드", - "updateExternalAutoProvisionFailed": "자동 생성 설정 업데이트에 실패했습니다", - "hostTags": "사전 정의된 호스트 태그", - "hostTagsDesc": "모든 사용자가 호스트 편집기에서 제안으로 보는 태그입니다. 추가하려면 스페이스바나 엔터키를 누르세요. 여기서 태그를 제거해도 호스트에서 제거되지는 않습니다.", - "hostTagsError": "호스트 태그 제안을 로드하거나 저장할 수 없습니다.", - "revokeAllSessionsConfirm": "{{username}}의 모든 기기에서 로그아웃하시겠습니까?", - "revokeSessionConfirm": "이 세션에서 로그아웃하시겠습니까?", - "revokeSession": "로그아웃", - "deleteRoleConfirm": "{{name}} 역할을 삭제하시겠습니까?", - "revokeKeyConfirm": "API 키 {{name}}을(를) 무효화하시겠습니까?", - "revokeKey": "무효화" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "위치", - "who": "사용자", - "hostLabel": "호스트", - "hostPlaceholder": "192.168.1.1 또는 example.com", - "portLabel": "포트", - "usernameLabel": "사용자 이름", - "usernamePlaceholder": "사용자 이름", - "authLabel": "인증", - "passwordLabel": "비밀번호", - "passwordPlaceholder": "비밀번호", - "privateKeyLabel": "개인 키", - "privateKeyPlaceholder": "개인 키를 붙여넣으세요...", - "credentialLabel": "자격 증명", - "credentialPlaceholder": "저장된 자격 증명 선택", - "protocolLabel": "프로토콜", - "domainLabel": "도메인", - "domainPlaceholder": "선택 사항", - "connectToAction": "{{name}}(으)로 연결", - "sshProtocol": "SSH", - "noTarget": "이 호스트 유형에 연결할 수 있는 것이 설치되어 있지 않습니다" + "usernameLabel": "사용자 이름" }, "keybindings": { - "description": "터미널과 앱에서 키를 작업에 바インド하거나, 기본 제공 단축키를 변경하세요.", - "defaultsHeading": "기본 제공 단축키", - "fixedHeading": "앱 단축키", - "fixed": { - "splitRight": "오른쪽으로 분할", - "splitDown": "아래쪽으로 분할", - "zoomPane": "포커스된 패널 확대", - "navigatePane": "패널 간 이동", - "nextTab": "다음 탭", - "previousTab": "이전 탭", - "jumpTab": "탭으로 이동", - "previousView": "이전 사이드바 뷰로 돌아가기", - "fullscreen": "전체 화면 전환" - }, - "customHeading": "사용자 정의 단축키", - "addBinding": "단축키 추가", - "addBindingTitle": "단축키 추가", - "editBindingTitle": "단축키 편집", - "loading": "로드 중...", - "noCustomBindings": "아직 사용자 정의 단축키가 없습니다", - "defaultBadge": "기본값", - "customizedBadge": "사용자 정의됨", - "customize": "사용자 정의", - "resetToDefault": "기본값으로 재설정", - "resetAllToDefaults": "모두 기본값으로 재설정", - "cancel": "취소", - "saveBinding": "단축키 저장", - "saveError": "키보드 단축키 저장에 실패했습니다", - "pressKeysToRecord": "키 조합", - "pressKeysPlaceholder": "클릭 후 키를 누르세요", - "recording": "키를 누르세요...", - "comboRequiredError": "먼저 키 조합을 입력하세요", - "conflictWarning": "이 조합은 이미 {{combo}}에 할당되어 있습니다. 저장하면 두 명령이 모두 실행됩니다.", - "actionLabel": "동작", "actionNextTab": "다음 탭으로 전환", "actionPreviousTab": "이전 탭으로 전환", "actionOpenCommandPalette": "빠른 검색 열기", - "actionReconnectSession": "현재 세션 재연결", - "unavailableAction": "{{type}} (사용 불가)", - "actionRequiredError": "먼저 동작을 선택하세요", - "deleteConfirm": "이 키 바인딩을 삭제하시겠습니까?", - "resetAllConfirm": "모든 키 바인딩을 기본값으로 재설정하시겠습니까?" + "actionReconnectSession": "현재 세션 재연결" }, "userProfile": { - "storageModeLocal": "브라우저", - "storageModeCloud": "데이터베이스", - "storageModeDescription": "브라우저는 설정을 현재 브라우저에만 저장합니다. 데이터베이스는 서버와 동기화되어 모든 기기에서 사용할 수 있습니다.", - "resetToDefaults": "기본값으로 재설정", - "resetToDefaultsSuccess": "설정이 기본값으로 재설정되었습니다.", - "storageModeSwitch": "환경설정 저장소", - "sectionAccount": "계정", - "desktopProfileTitle": "이 기기 전용", - "desktopProfileDescription": "이 프로필은 이 기기에만 저장되어 독립적으로 로그인합니다. 모든 기기에서 동일한 호스트와 설정을 사용하려면 Termix 서버에 연결하세요.", - "sectionInterface": "인터페이스", - "interfacePresetDesc": "Termix에서 표시할 정보의 양입니다. 모든 기능은 계속 사용할 수 있습니다.", "preset_simple": "간단함", "preset_simple_desc": "필수 기능만 표시합니다.", "preset_balanced": "균형", "preset_balanced_desc": "표준 레이아웃입니다.", "preset_advanced": "고급", "preset_advanced_desc": "모든 기능을 켜고 빽빽하게 표시합니다.", - "presetClearOverrides": "모두 재설정", - "presetOverridesTitle": "사용자 정의됨", - "presetRevertArea": "되돌리기", - "presetConfirmTitle": "{{preset}}(으)로 전환하시겠습니까?", - "presetConfirmDesc": "사이드바, 탐색, 대시보드 레이아웃, 터미널 도구 모음 및 파일 관리자 뷰가 재설정됩니다. 호스트, 자격 증명 및 홈페이지는 변경되지 않습니다.", - "presetConfirmApply": "프리셋 적용", - "runSetupAgainDesc": "초기 설정을 다시 진행합니다.", - "runSetupAgainButton": "설정 실행", "uiArea_chrome": "앱 프레임", "uiArea_hostList": "호스트 목록", "uiArea_credentialList": "자격 증명 목록", @@ -1602,125 +1082,12 @@ "uiArea_terminal": "터미널", "uiArea_fileManager": "파일 관리자", "uiArea_hostEditor": "호스트 편집기", - "sectionAppearance": "외관", - "sectionSecurity": "보안", - "sectionApiKeys": "API 키", - "sectionData": "데이터", - "usernameLabel": "사용자 이름", - "roleLabel": "역할", - "roleAdministrator": "관리자", - "authMethodLabel": "인증 방법", - "authMethodLocal": "로컬", - "twoFaLabel": "2FA", - "twoFaOn": "켜짐", - "twoFaOff": "꺼짐", - "versionLabel": "버전", - "cliTitle": "Termix CLI", - "cliDescription": "자신의 셸에서 터미널을 열고 명령어를 실행하며 파일을 이동하세요.", - "cliLearnMore": "자세히 보기", - "deleteAccount": "계정 삭제", - "deleteAccountDescription": "계정을 영구적으로 삭제합니다", - "deleteButton": "삭제", - "deleteAccountPermanent": "이 작업은 영구적이며 되돌릴 수 없습니다.", - "deleteAccountWarning": "모든 세션, 호스트, 자격 증명 및 설정이 영구적으로 삭제됩니다.", - "confirmPasswordDeletePlaceholder": "확인하려면 비밀번호를 입력하세요", "languageLabel": "언어", "themeLabel": "테마", "fontSizeLabel": "글꼴 크기", "interfaceFontLabel": "인터페이스 글꼴", "interfaceFontDescription": "애플리케이션 인터페이스 글꼴을 변경합니다. 터미널 프로필은 자체 글꼴 설정을 유지합니다.", "accentColorLabel": "강조 색상", - "keyboardShortcuts": "키보드 단축키", - "keyboardShortcutsDescription": "터미널 복사, 붙여넣기 및 명령어 단축키 사용자 정의", - "manageShortcuts": "관리", - "commandPalette": "명령어 팔레트", - "commandPaletteDesc": "키보드 단축키 활성화", - "reopenTabsOnLogin": "로그인 시 탭 다시 열기", - "reopenTabsOnLoginDesc": "다른 기기에서도 로그인하거나 페이지를 새로 고칠 때 열린 탭을 복원합니다", - "confirmTabClose": "탭 닫기 확인", - "confirmTabCloseDesc": "터미널 탭을 닫기 전에 확인합니다", - "showTabNumbers": "탭 번호 표시", - "showTabNumbersDesc": "각 탭에 번호를 표시하여 구별하기 쉽게 합니다", - "settingsAppRail": "앱 레일", - "sidebarSettingsMoved": "호스트 사이드바 표시 설정은 호스트 도구 모음에서 여는 사이드바 사용자 정의 패널로 이동했습니다.", - "showHostTags": "호스트 태그 표시", - "showHostTagsDesc": "호스트 목록에 태그 표시", - "statusColors": "실제 상태 색상", - "statusColorsDesc": "강조 색상 대신 온라인/오프라인 상태에 녹색/빨간색 사용", - "pinAppRail": "앱 레일 고정", - "pinAppRailDesc": "마우스를 올리면 확장되는 대신 왼쪽 사이드바 앱 레일을 항상 확장된 상태로 유지합니다", - "expandAppRailOnHover": "마우스 오버 시 앱 레일 확장", - "expandAppRailOnHoverDesc": "포인터가 왼쪽 사이드바 앱 레일 위에 있을 때 확장되도록 허용합니다", - "appRailHoverPushesContent": "확장 시 콘텐츠 밀기", - "appRailHoverPushesContentDesc": "페이지 위에 레일을 열지 않고 확장된 레일 공간을 확보합니다. 원격 데스크톱과 같은 열린 세션은 매번 크기가 조정됩니다", - "showPinAppRailButton": "앱 레일 고정 버튼 표시", - "showPinAppRailButtonDesc": "앱 레일을 열려 있도록 고정하는 버튼을 앱 레일에 표시합니다. 기본적으로 꺼져 있습니다.", - "settingsNavigation": "네비게이션", - "navigationTabsDesc": "앱 레일에 표시할 탭 선택", - "settingsUpdates": "업데이트", - "disableUpdateChecks": "업데이트 확인 비활성화", - "disableUpdateChecksDesc": "업데이트 확인 중지", - "changePassword": "비밀번호 변경", - "currentPasswordLabel": "현재 비밀번호", - "currentPasswordPlaceholder": "현재 비밀번호", - "newPasswordLabel": "새 비밀번호", - "newPasswordPlaceholder": "새 비밀번호", - "confirmPasswordLabel": "새 비밀번호 확인", - "confirmPasswordPlaceholder": "새 비밀번호 확인", - "updatePassword": "비밀번호 업데이트", - "createApiKeyTitle": "API 키 생성", - "createApiKeyDescription": "프로그래밍 방식으로 액세스할 새 API 키를 생성합니다.", - "apiKeyNameLabel": "이름", - "apiKeyNamePlaceholder": "예: CI 파이프라인", - "expiryDateLabel": "만료일", - "optional": "선택 사항", - "cancel": "취소", - "createKey": "키 생성", - "apiKeyCreatedWarning": "키가 생성되었습니다. 다시 표시되지 않으므로 지금 복사하세요.", - "copyApiKey": "API 키 복사", - "copiedToClipboard": "클립보드에 복사됨", - "apiKeyCount_other": "{{count}}개 키", - "newKey": "새 키", - "noApiKeys": "아직 API 키가 없습니다.", - "apiKeyActive": "활성", - "apiKeyUsageHint": "요청 헤더에 키를 포함하세요.", - "apiKeyUsageHintHeader": "헤더.", - "apiKeyPermissionsHint": "키는 생성한 사용자의 권한을 상속받습니다.", - "exportData": "내 데이터 내보내기", - "exportDataDesc": "호스트, 자격 증명 및 설정의 백업을 다운로드하여 다른 장치로 이전하세요", - "export": "내보내기", - "exporting": "내보내는 중...", - "importData": "내 데이터 가져오기", - "importDataDesc": ".sqlite 백업 파일에서 호스트, 자격 증명 및 설정을 복원하세요", - "importDataSelected": "선택됨: {{name}}", - "selectFile": "파일 선택", - "changeFile": "변경", - "import": "가져오기", - "importing": "가져오는 중...", - "exportSuccess": "데이터가 성공적으로 내보내졌습니다", - "exportFailed": "데이터 내보내기에 실패했습니다", - "importSelectFile": "먼저 파일을 선택하세요", - "importCompleted": "가져오기 완료: {{total}}개 항목 가져오기, {{skipped}}개 건너뛰기", - "importFailed": "가져오기 실패: {{error}}", - "roleUser": "사용자", - "authMethodDual": "이중 인증", - "authMethodExternal": "외부", - "done": "완료", - "apiKeyNameRequired": "키 이름은 필수입니다", - "apiKeyCreated": "API 키 \"{{name}}\"이(가) 생성되었습니다", - "apiKeyCreateFailed": "API 키 생성에 실패했습니다", - "apiKeyUser": "사용자", - "apiKeyExpires": "만료", - "apiKeyRevoked": "API 키 \"{{name}}\"이(가) 취소되었습니다", - "apiKeyRevokeFailed": "API 키 취소에 실패했습니다", - "passwordFieldsRequired": "현재 비밀번호와 새 비밀번호가 모두 필요합니다", - "passwordMismatch": "비밀번호가 일치하지 않습니다", - "passwordTooShort": "비밀번호는 최소 6자 이상이어야 합니다", - "passwordUpdated": "비밀번호가 성공적으로 업데이트되었습니다", - "passwordUpdateFailed": "비밀번호 업데이트에 실패했습니다", - "deletePasswordRequired": "계정을 삭제하려면 비밀번호가 필요합니다", - "deleteFailed": "계정 삭제에 실패했습니다", - "deleting": "삭제하는 중...", "colorPickerTooltip": "색상 선택기 열기", "themeSystem": "시스템", "themeLight": "라이트", @@ -1731,18 +1098,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "{{server}}에 로그인됨", - "linkedProfileDescription": "이 장치는 서버의 계정을 사용하며 데이터의 사본을 유지하므로 오프라인에서도 작동합니다.", - "manageSync": "동기화 관리", - "setUpSync": "서버에 연결", - "settingsTabsAndShortcuts": "탭 및 단축키", - "onBetaTitle": "베타 버전 사용 중", - "onBetaDescription": "테스트해 주셔서 감사합니다. 문제가 발생하면 알려주세요.", - "tryBetaTitle": "새로운 기능 미리 체험", - "tryBetaDescription": "업데이트에서 베타 프로그램에 참여하세요.", - "sendBetaFeedback": "베타 피드백 보내기", - "openUpdates": "업데이트" + "themeGruvbox": "Gruvbox" } } }, @@ -1983,8 +1339,7 @@ "hasDependents": "{{name}}은(는) {{list}}에서 필요합니다. 먼저 해당 플러그인을 끄거나 제거하세요.", "missingDependencies": "{{name}}은(는) 설치되지 않은 {{list}}가 필요합니다.", "consentChanged": "확인한 이후 이 플러그인이 요청하는 권한이 변경되었습니다. 목록을 다시 확인하세요.", - "upload": "{{name}}을(를) 읽지 못했습니다: {{error}}", - "developerMode": "개발자 모드를 변경하지 못했습니다: {{error}}" + "upload": "{{name}}을(를) 읽지 못했습니다: {{error}}" }, "data": { "title": "저장된 데이터", @@ -2102,13 +1457,7 @@ "browsePlugins": "플러그인 둘러보기", "loading": "로딩 중", "developer": { - "title": "플러그인 개발자 모드", - "hint": "관리자가 레지스트리 확인 없이 플러그인 탭에서 .tmxplug 파일을 통해 플러그인을 설치할 수 있게 합니다. 자체 플러그인을 빌드하고 테스트하는 데 사용하세요.", - "enableTitle": "개발자 모드를 활성화하시겠습니까?", - "enableBody": "관리자가 Termix에서 확인하지 않은 파일에서 플러그인을 설치할 수 있게 됩니다. 플러그인은 허용된 기능 내에서 모든 작업을 수행할 수 있으므로, 플러그인 빌드 또는 테스트 중에만 이 모드를 활성화하세요.", - "enable": "활성화", - "installFromFile": "파일에서 설치", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS가 설정되어 있어 파일에서 설치가 차단됩니다." + "installFromFile": "파일에서 설치" }, "count": { "downloads_other": "{{formatted}}회 다운로드", @@ -2145,71 +1494,7 @@ "secretSet": "설정됨", "secretNotSet": "설정 안 됨", "secretReplace": "교체", - "pluginSettingsSaved": "설정이 저장되었습니다", - "pluginSettingsInvalid": "일부 설정을 저장할 수 없습니다. 하이라이트된 필드를 확인하세요.", - "pluginSettingsSaveFailed": "설정 저장에 실패했습니다", - "pluginSettingsLoadFailed": "설정 로드 실패", - "featureUnavailable": "{{name}}은(는) 현재 사용할 수 없습니다. 이 설정은 저장되지만 적용되지 않습니다.", - "account": "계정", - "security": "보안", - "apiKeys": "API 키", - "data": "데이터 및 동기화", - "interface": "인터페이스", - "appearance": "모양", - "keybindings": "키 바인딩", - "adminGeneral": "일반", - "adminUsers": "사용자", - "adminSessions": "세션", - "adminRoles": "역할", - "adminHostDefaults": "호스트 기본값", - "adminBranding": "브랜딩", - "adminDatabase": "데이터베이스", - "adminSsl": "SSL", - "adminApiKeys": "API 키", - "adminAuditLog": "감사 로그", - "bandYou": "내 계정", - "bandApp": "이 앱", - "bandPlugins": "플러그인", - "bandInstance": "이 서버", - "searchPlaceholder": "설정 검색", - "noResults": "일치하는 설정이 없습니다.", - "pages": "페이지", - "instanceSettings": "서버 설정", - "nothingHere": "여기에 설정할 내용이 없습니다.", - "searchPage": "이 페이지 검색", - "noPageMatches": "이 페이지에서 일치하는 항목이 없습니다.", - "updates": { - "title": "업데이트", - "betaProgram": "베타 프로그램", - "betaIntro": "베타는 다음 Termix 버전의 초기 빌드입니다. 새로운 기능이 있을 때 화요일과 금요일에 출시됩니다. 버그가 있을 수 있으며, 귀하의 피드백은 안정 버전 출시를 더 좋게 만듭니다.", - "termixBetas": "Termix 베타", - "termixBetasHint": "안정 버전뿐만 아니라 새로운 베타에 대해 알려주세요.", - "runningBetaBuild": "베타 빌드를 실행 중입니다. 종료하려면 안정 이미지 또는 설치 프로그램으로 다시 전환하세요.", - "howToInstall": "베타 받기 방법", - "desktopInstall": "베타 설치 프로그램을 다운로드하고 현재 버전 위에 설치하세요.", - "downloadBeta": "{{version}} 다운로드", - "dockerInstall": "이미지를 베타 태그로 변경하고 컨테이너를 다시 시작하세요:", - "copy": "복사", - "copied": "복사됨", - "copyFailed": "복사할 수 없습니다", - "learnMore": "베타에 대해 자세히 알아보기", - "feedback": "피드백", - "feedbackHint": "버그를 발견했거나 아이디어가 있으신가요? 버전 정보가 자동으로 채워져 개발자에게 직접 전달됩니다.", - "sendFeedback": "베타 피드백 보내기", - "releases": "릴리스", - "thisVersion": "현재 버전", - "newestStable": "최신 안정 버전", - "newestBeta": "최신 베타", - "noRelease": "현재 없음", - "pluginBetas": "플러그인 베타", - "pluginBetasIntro": "각 플러그인은 자체적으로 베타를 사용할 수 있습니다. 하나를 시도하려면 플러그인을 열고 '베타 시도'를 누르세요.", - "openPlugins": "플러그인 열기", - "waitingForStable": "안정 버전으로 돌아왔습니다. 안정 릴리스가 더 새롭해질 때까지 {{version}}을 유지합니다.", - "backToStable": "안정 버전으로 돌아가기", - "allPluginsBeta": "모든 플러그인에 베타 사용", - "allPluginsStable": "모든 플러그인을 안정 버전으로 되돌리기", - "saveFailed": "변경 사항을 저장할 수 없습니다" - } + "featureUnavailable": "{{name}}은(는) 현재 사용할 수 없습니다. 이 설정은 저장되지만 적용되지 않습니다." }, "managerCard": { "refresh": "새로고침", @@ -2219,80 +1504,10 @@ "filter": "필터..." }, "sync": { - "server": "Termix 서버", - "account": "계정", - "status": "상태", - "never": "없음", - "justNow": "방금", "minutesAgo_other": "{{count}}분 전", "hoursAgo_other": "{{count}}시간 전", - "actionFailed": "작업이 실패했습니다. 다시 시도하세요.", - "unlinkedTitle": "이 기기에서만 사용", - "unlinkedBody": "Termix는 이 기기에서 독립적으로 작동합니다. 모든 내용을 동기화하려면 Termix 서버에 연결하세요.", - "unlinkedPointHosts": "호스트, 자격 증명, 스니펫 및 설정은 모든 기기를 따라갑니다.", - "unlinkedPointOffline": "서버에 연결할 수 없을 때도 모든 기능이 작동하며, 나중에 동기화됩니다.", - "unlinkedPointAccount": "서버 계정으로 로그인하며, 다른 사용자가 공유한 호스트도 여기에 표시됩니다.", - "linkButton": "서버에 연결", - "state": { - "syncing": "동기화 중", - "offline": "서버에 연결할 수 없음", - "error": "동기화 중지됨", - "signedOut": "로그아웃됨", - "synced": "{{time}}에 동기화됨" - }, "pending_other": "동기화 대기 중인 변경 사항 {{count}}개", - "signInAgain": "다시 로그인", - "syncNow": "지금 동기화", - "unlink": "연결 끊기", - "unlinked": "이 기기는 더 이상 연결되지 않았습니다", - "unlinkTitle": "이 기기를 연결 해제하시겠습니까?", - "unlinkDescription": "동기가 중지되고 서버에서 로그아웃됩니다. 다른 사용자가 공유한 호스트는 이 기기에서 제거됩니다.", - "unlinkKeepTitle": "내 데이터 유지", - "unlinkKeepBody": "호스트, 자격 증명 및 설정이 이 기기에 남아 독립적으로 작동합니다.", - "unlinkRemoveTitle": "동기화된 데이터 제거", - "unlinkRemoveBody": "서버에서 온 모든 데이터가 이 기기에서 제거됩니다. 이 기기에서만 유지된 호스트만 남습니다.", - "conflictsTitle": "갈등", - "conflictsDescription": "이 항목들은 여기와 서버에서 동시에 변경되었습니다. 서버 버전이 사용 중입니다. 대신 서버에 보내려면 내 버전을 유지하세요.", - "keepMine": "내 버전 유지", - "keepServer": "서버 버전 유지", - "errorsTitle": "동기화 안됨", - "errorsDescription": "서버가 이 변경 사항을 수락하지 않았습니다. 이 기기에서 유지됩니다.", - "errorPermission": "서버의 계정에서 이 변경 사항을 수행할 수 없습니다.", - "retry": "다시 시도", - "whatSyncs": "동기화 대상", - "whatSyncsDescription": "이 기기에서만 유지하려는 항목은 끄세요.", - "coreGroup": "Termix", - "notOnServer": "서버에 없음", - "notOnDevice": "이 기기에는 아직 없음", - "localOnlyHint": "설정에서 개별 호스트나 폴더를 이 기기에서만 유지할 수도 있습니다.", - "originTitle": "연결 시작 위치", - "originDescription": "이 기기에서 호스트에 연결하거나 서버를 통해 연결하세요. 호스트별로 변경할 수 있습니다.", - "originLocal": "이 기기", - "originRemote": "서버", - "entities": { - "hosts": "호스트", - "sshCredentials": "자격 증명", - "sshFolders": "폴더", - "userPreferences": "환경 설정", - "pluginUserSettings": "플러그인 설정", - "sharedHosts": "나와 공유된 호스트", - "sharedCredentials": "나와 공유된 자격 증명", - "vaultProfiles": "Vault 프로필", - "snippetFolders": "스니펫 폴더", - "snippets": "스니펫", - "dashboardServiceLinks": "서비스 링크", - "homepageItems": "홈페이지 항목", - "networkTopology": "네트워크 맵", - "workspaces": "작업 공간", - "hostDefaults": "호스트 기본값", - "hostDefaultsAdmin": "서버 호스트 기본값", - "aiProviders": "AI 제공자", - "homepageLayouts": "홈페이지 레이아웃", - "accountProfile": "계정 프로필" - }, "proxy": { - "title": "리버스 프록시", - "description": "Cloudflare Access나 로그인 페이지가 서버 앞에 있을 때만 필요합니다.", "headersTitle": "추가 헤더", "headersHint": "서버로 보내는 모든 요청에 포함됩니다. 예를 들어 Cloudflare Access 서비스 토큰입니다.", "headerName": "헤더 이름", @@ -2305,8 +1520,7 @@ "username": "사용자 이름", "password": "비밀번호", "allowInvalidCertificate": "자체 서명된 인증서 신뢰", - "allowInvalidCertificateHint": "인증서가 알려진 기관에서 발급되지 않은 경우에만 자신의 서버에 대해 사용하세요.", - "saved": "저장됨" + "allowInvalidCertificateHint": "인증서가 알려진 기관에서 발급되지 않은 경우에만 자신의 서버에 대해 사용하세요." }, "problems": { "invalidUrl": "웹 주소처럼 보이지 않습니다.", @@ -2342,6 +1556,27 @@ "linking": "연결 중이며 첫 번째 동기화를 실행하는 중입니다...", "linked": "연결 완료. 데이터가 동기화되고 있습니다.", "signedInAgain": "로그인 완료. 동기화가 다시 실행되고 있습니다." + }, + "entities": { + "hosts": "호스트", + "sshCredentials": "자격 증명", + "sshFolders": "폴더", + "userPreferences": "환경 설정", + "pluginUserSettings": "플러그인 설정", + "sharedHosts": "나와 공유된 호스트", + "sharedCredentials": "나와 공유된 자격 증명", + "vaultProfiles": "Vault 프로필", + "snippetFolders": "스니펫 폴더", + "snippets": "스니펫", + "dashboardServiceLinks": "서비스 링크", + "homepageItems": "홈페이지 항목", + "networkTopology": "네트워크 맵", + "workspaces": "작업 공간", + "hostDefaults": "호스트 기본값", + "hostDefaultsAdmin": "서버 호스트 기본값", + "aiProviders": "AI 제공자", + "homepageLayouts": "홈페이지 레이아웃", + "accountProfile": "계정 프로필" } }, "hostDefaults": { @@ -2358,28 +1593,9 @@ "resetTitle": "이 호스트는 자체 값을 설정합니다. 클릭하여 {{source}}의 기본값을 다시 사용하세요", "clearTitle": "이 수준에서 설정됨. 클릭하여 지우고 대신 {{source}}를 사용하세요", "inheritedTitle": "{{source}}의 기본값을 따릅니다", - "titleAdmin": "서버 호스트 기본값", - "titleUser": "내 호스트 기본값", - "titleFolder": "폴더 기본값: {{name}}", - "descriptionAdmin": "이 서버의 모든 호스트에 대한 기본값입니다. 사용자의 기본값, 폴더의 기본값 또는 호스트 자체에서 다른 값을 설정할 수 있습니다. 필드를 변경하여 여기서 설정하거나, 지워두면 설정되지 않은 상태로 남습니다.", - "descriptionUser": "서버 기본값을 덮어쓰는 모든 호스트에 대한 기본값입니다. 폴더나 호스트 자체에서 다른 값을 설정할 수 있습니다. 필드를 변경하여 여기서 설정하거나, 지워두면 설정되지 않은 상태로 남습니다.", - "descriptionFolder": "이 폴더와 하위 폴더의 호스트에 대한 기본값으로, 사용자 기본값을 덮어씁니다. 호스트에서 다른 값을 설정할 수 있습니다. 필드를 변경하여 여기서 설정하거나, 지워두면 설정되지 않은 상태로 남습니다.", - "save": "기본값 저장", "saved_other": "기본값이 저장되었습니다. {{count}}개의 호스트가 업데이트되었습니다.", - "savedInBackground": "기본값이 저장되었습니다. 호스트가 백그라운드에서 업데이트되고 있습니다.", "appliedToHosts_other": "새 기본값으로 {{count}}개의 호스트가 업데이트되었습니다.", - "saveFailed": "기본값을 저장할 수 없습니다", - "loadFailed": "기본값을 로드할 수 없습니다", - "confirmTitle": "기본값을 저장하시겠습니까?", "confirmChanges_other": "{{count}}개의 호스트가 이 기본값을 따르며 변경됩니다.", - "confirmNoChanges": "기존 호스트 변경 사항이 없습니다. 새 호스트는 이 기본값으로 시작합니다.", - "menuMyDefaults": "내 호스트 기본값", - "folderDefaultsAction": "폴더 기본값", - "adminSectionDescription": "이 서버의 모든 호스트가 따르는 기본값을 설정합니다. 호스트가 가진 모든 설정, 각 플러그인의 설정도 포함됩니다. 사용자와 폴더는 위에 자체 값을 설정할 수 있으며, 모든 호스트는 여전히 자체 값을 사용할 수 있습니다.", - "editServerDefaults": "서버 기본값 편집", - "resetMenu": "초기화", - "resetAll": "모든 항목을 기본값으로", - "resetCore": "연결 및 SSH를 기본값으로", "resetDone_other": "{{count}}개 호스트가 이제 기본값을 따릅니다." }, "panel": { @@ -2392,44 +1608,10 @@ "fields": { "secretSaved": "저장되었습니다. 입력하여 교체하세요." }, - "sharing": { - "revokeConfirm": "{{name}}의 접근 권한을 제거하시겠습니까?", - "revoke": "접근 권한 제거" - }, "manage": { - "searchSettings": "설정 검색", - "noMatchingSettings": "일치하는 설정이 없습니다.", - "sections": "섹션", - "sectionNeedsAttention": "여기서 주의가 필요한 항목이 있습니다", "needsAttention_other": "{{count}}개 항목이 주의가 필요합니다.", - "bandHost": "호스트", - "bandFeatures": "프로토콜 및 플러그인", - "bandCredential": "자격 증명", - "sshConnection": "SSH 연결", - "errorAddressRequired": "주소가 필요합니다.", - "errorPortRange": "1에서 65535 사이의 포트를 사용하세요.", - "defaults": "기본값", - "searchHosts": "호스트 검색", - "searchCredentials": "자격 증명 검색", - "searchDefaults": "기본값 검색", - "addCredential": "자격 증명 추가", - "nothingMatches": "일치하는 항목이 없습니다", - "nothingYet": "아직 항목이 없습니다", - "emptyHostsHint": "호스트를 추가하면 지정한 폴더에 여기에 표시됩니다.", - "emptyCredentialsHint": "저장한 자격 증명은 모든 호스트에서 재사용할 수 있습니다.", - "collapse": "접기", - "expand": "펼치기", - "cannotBeUndone": "이 작업은 되돌릴 수 없습니다.", - "hostNotFound": "해당 호스트를 찾을 수 없습니다. 목록을 새로 고쳐보세요.", "hostCount_other": "{{count}}개 호스트", - "credentialCount_other": "{{count}}개 자격 증명", - "newHost": "새 호스트", - "newCredential": "새 자격 증명", - "advanced": "고급", - "pickHost": "편집할 호스트를 선택하세요", - "pickCredential": "편집할 자격 증명을 선택하세요", - "pickDefaults": "편집할 기본값 수준을 선택하세요", - "pickHint": "연결과 관련된 모든 설정은 여기에서 그룹화되어 있습니다." + "credentialCount_other": "{{count}}개 자격 증명" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/lt_LT.json b/src/ui/locales/translated/lt_LT.json index 945a8616a..07d337e37 100644 --- a/src/ui/locales/translated/lt_LT.json +++ b/src/ui/locales/translated/lt_LT.json @@ -141,7 +141,6 @@ "continue": "Tęsti", "error": "Klaida", "unsavedChanges": "Neišsaugoti pakeitimai", - "more": "Daugiau", "loading": "Įkeliama...", "host": "Serveris", "selectHost": "Pasirinkite serverį...", @@ -154,7 +153,6 @@ "cancel": "Atšaukti", "username": "Vartotojo vardas", "login": "Prisijungti", - "logout": "Atsijungti", "register": "Registruotis", "password": "Slaptažodis", "confirmPassword": "Patvirtinkite slaptažodį", @@ -165,8 +163,6 @@ "rename": "Pervadinti", "edit": "Redaguoti", "confirm": "Patvirtinti", - "next": "Toliau", - "previous": "Ankstesnis", "refresh": "Atnaujinti", "language": "Kalba", "backendReconnected": "Serverio ryšys atstatytas", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Skaityti apie kiekvieną" }, "desktopUpdates": { - "title": "Darbalaukio programėlė", - "mode": "Atnaujinimai", - "modeHint": "Kaip ši programėlė gauna naujas versijas.", - "manualModeHint": "Ši kopija negali atnaujinti pati, todėl Termix tik praneša, kai išleidžiama nauja versija.", "modeAutomatic": "Automatiškai", "modePrompt": "Paklausti pirmiausia", "modeNever": "Niekada", @@ -247,15 +239,6 @@ "onboardingTitle": "Programėlės atnaujinimai", "onboardingBody": "Dabar darbalaukio programėlė gali atnaujinti pati. Pasirinkite, kaip norite gauti naujas versijas. Vėliau tai galite pakeisti skiltyje Nustatymai, Atnaujinimai.", "onboardingManual": "Ši programėlės kopija buvo įdiegta taip, kad negali atnaujinti pati, todėl Termix praneš, kai bus išleista nauja versija, ir pateiks nuorodą ją atsisiųsti.", - "status": "Versija {{version}}", - "statusIdle": "Dar nepatikrinta", - "statusChecking": "Ieškoma atnaujinimų", - "statusAvailable": "Prieinama versija {{version}}", - "statusDownloading": "Atsisiunčiama versija {{version}} ({{progress}}%)", - "statusReady": "Versija {{version}} paruošta. Paleiskite iš naujo, kad ją įdiegtumėte.", - "statusUpToDate": "Turite naujausią versiją", - "statusError": "Nepavyko patikrinti atnaujinimų. Bandykite vėliau.", - "checkNow": "Patikrinti dabar", "download": "Atsisiųsti", "restart": "Paleisti iš naujo dabar", "later": "Vėliau", @@ -269,26 +252,11 @@ "terminal": "Terminalas", "close": "Uždaryti", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopijuoti slaptažodį", - "copySudoPassword": "Kopijuoti sudo slaptažodį", - "passwordCopied": "Slaptažodis nukopijuotas į iškarpinę", - "failedToCopyPassword": "Nepavyko nukopijuoti slaptažodžio", - "refreshTab": "Atnaujinti ryšį", - "renameTab": "Pervadinti skirtuką", "dashboard": "Valdymo skydelis", "quickConnect": "Greitasis prisijungimas", - "openAsTabHint": "Paspauskite Ctrl+pelės mygtuką arba vidurinį pelės mygtuką, kad atidarytumėte kaip skirtuką", - "openAsTab": "Atidaryti kaip skirtuką", - "openInRightDock": "Atidaryti dešinėje juostoje", - "closeRightDock": "Uždaryti dešinę juostą", - "toggleRightDock": "Perjungti dešinę juostą", "hosts": "Hostai", "credentials": "Pryminiai duomenys", "connections": "Ryšiai", - "keepSideMenuOpen": "Palikti meniu atidarytą", - "collapseSideMenu": "Sutraukti meniu", - "roleAdministrator": "Administratorius", - "roleUser": "Naudotojas", "sync": "Sinchronizuoti", "reconnectDisconnectedTerminals": "Perjungti visus atjungtus terminalus", "reconnectingTerminals_one": "Perjungiamas {{count}} terminalas", @@ -302,32 +270,13 @@ "reconnectTerminalsFailed_other": "Nepavyko pradėti perjungti {{count}} terminalų", "fullscreenUnsupported": "Šis naršyklė nepalaiko viso ekrano režimo", "fullscreenFailed": "Nepavyko perjungti viso ekrano režimo", - "resetSidebarWidth": "Atstatyti plotį", - "collapseSidebar": "Sutraukti šoninę juostą", - "openSidebar": "Atidaryti šoninę juostą", "confirmCloseHost": "Uždaryti „{{host}}“?", - "enterFullscreen": "Perjungti į visą ekraną (Ctrl+Shift+F)", - "exitFullscreen": "Išeiti iš viso ekrano (Ctrl+Shift+F)", - "group": { - "objects": "Mano", - "tools": "Įrankiai", - "system": "Sistema" - }, - "searchEverything": "Ieškoti serverių, skirtukų ir veiksmų", - "search": "Ieškoti", "hiddenCount_one": "{{count}} paslėpta", "hiddenCount_few": "{{count}} paslėpta", "hiddenCount_many": "{{count}} paslėpta", "hiddenCount_other": "{{count}} paslėpta", - "showInRail": "Rodyti šoninėje juostoje", - "moveUp": "Perkelti aukštyn", - "moveDown": "Perkelti žemyn", - "resetRailOrder": "Atstatyti tvarką", - "hideFromRail": "Paslėpti iš šoninės juostos", - "openSettings": "Atidaryti nustatymus", "settings": "Nustatymai", "manage": "Tvarkyti", - "mobileNavigation": "Navigacija", "plugins": "Priedai" }, "hosts": { @@ -943,35 +892,14 @@ "importSummary": "Importas baigtas: {{imported}} importuota, {{updated}} atnaujinta, {{failed}} nepavyko", "importHostsFailed": "Nepavyko importuoti serverių" }, - "commandPalette": { - "searchPlaceholder": "Ieškoti serverių, komandų arba nustatymų...", - "quickActions": "Greitosios veiksmos", - "navigation": "Navigacija", - "orShortcut": "arba", - "addNewHost": "Pridėti naują serverį", - "adminSettings": "Administratoriaus nustatymai", - "addCredential": "Pridėti prisijungimo duomenis", - "recentActivity": "Naujausia veikla", - "serversAndHosts": "Serveriai ir įrenginiai", - "noHostsFound": "Nerasta jokių serverių, atitinkančių „{{search}}“", - "links": "Nuorodos", - "navigate": "Naršyti", - "select": "Pasirinkti", - "pluginActions": "Daugiau veiksmų", - "noTargetTab": "Nėra atidarytų terminalo skirtukų", - "documentation": "Dokumentacija" - }, "splitScreen": { "title": "Padalintas ekranas", "defaultLabel": "Padalijimas {{number}}", "splitRight": "Padalinti į dešinę", "splitDown": "Padalinti į apačią", - "addToSplit": "Pridėti prie „{{split}}“", "paneEmptyItem": "Langas {{index}}: tuščias", "paneItem": "Langas {{index}}: {{label}}", "paneNumber": "Langas {{index}}", - "newPaneRight": "Naujas langas dešinėje", - "newPaneBelow": "Naujas langas apačioje", "emptyTitle": "Tuščias langas", "emptyHint": "Pasirinkite, ką čia rodyti. Kol šis langas pasirinktas, viskas, ką atidarote iš šoninės juostos, taip pat atsidaro čia.", "openTabs": "Atidaryti skirtukai", @@ -988,7 +916,6 @@ "clearPane": "Išvalyti šį langą", "zoom": "Padidinti langą", "unzoom": "Atkurti išdėstymą", - "unsplit": "Jungti langus", "layouts": "Išdėstymai", "applyLayout": "Keisti išdėstymą", "maxPanes_one": "Padalijimas gali turėti ne daugiau kaip {{count}} langelį", @@ -999,8 +926,6 @@ "dropHere": "Nuleisti, kad rodytų čia", "paneActions": "Lango veiksmai", "dividerHint": "Vilkite, kad pakeistumėte dydį. Dukart spustelėkite, kad suvienodintumėte.", - "openInSplit": "Atidaryti padalijime", - "openInNewSplit": "Naujas padalijimas su dabartiniu skirtuku", "shortcuts": "Spartieji klavišai", "shortcutNavigate": "Perjungti tarp langų", "presets": { @@ -1014,23 +939,6 @@ "grid6": "Šešių tinklelis" } }, - "connections": { - "noConnections": "Nėra ryšių", - "noConnectionsDesc": "Atidarykite terminalą, failų tvarkyklę arba nuotolinį darbalaukį, kad čia matytumėte ryšius", - "connectedFor": "Prisijungta {{duration}}", - "connected": "Prisijungta", - "disconnected": "Atsijungta", - "reconnect": "Prijungti iš naujo", - "sectionOpen": "Atidaryti", - "sectionBackground": "Fonas", - "backgroundDesc": "Sesijos išlieka {{minutes}} min. po atsijungimo ir galima jas atkurti.", - "expiresIn": "Galioja dar {{duration}}", - "search": "Ieškoti ryšių...", - "noSearchResults": "Jokie ryšiai neatitinka jūsų paieškos", - "rename": "Pervadinti sesiją", - "forgetConfirm": "Baigti foninę sesiją „{{name}}“?", - "forget": "Baigti sesiją" - }, "sshAuth": { "totpRequired": "Reikalinga dviejų faktorių autentifikacija", "totpCodeLabel": "Patvirtinimo kodas", @@ -1168,65 +1076,14 @@ "placeholders": { "keyPassword": "rakto slaptažodis", "pastePrivateKey": "Įklijuokite savo privačią raktą čia...", - "enterPassword": "Įveskite savo slaptažodį", - "apiKeyName": "pvz., CI Pipeline", - "credentialName": "pvz., Production SSH Key", - "optionalDetails": "Pasirenkami duomenys...", - "sshUsername": "pvz., root arba deploy", - "hostAddress": "10.0.0.1 arba example.com", - "hostName": "pvz., Web Server Production" + "enterPassword": "Įveskite savo slaptažodį" }, "dashboard": { - "title": "Valdymo skydelis", - "github": "GitHub", - "reportBug": "Pranešti apie klaidą", - "discord": "Discord", - "docs": "Dokumentacija", - "donate": "Paaukoti", - "serverOverview": "Serverio apžvalga", - "version": "Versija", "updateAvailable": "Yra naujinimas", - "beta": "Beta", - "uptime": "Veikimo laikas", - "database": "Duomenų bazė", - "healthy": "Veikia", - "error": "Klaida", - "totalHosts": "Iš viso serverių", - "totalCredentials": "Iš viso prisijungimo duomenų", - "recentActivity": "Neseniai veikla", - "reset": "Atstatyti", - "noRecentActivity": "Neseniai veiklos nebuvo", - "quickActions": "Greitosios veiksmai", - "addHost": "Pridėti serverį", - "addCredential": "Pridėti prisijungimo duomenis", - "adminSettings": "Administratoriaus nustatymai", - "userProfile": "Vartotojo profilis", - "serverStats": "Serverio statistika", - "customizeLayout": "Derinti valdymo skydelį", - "justNow": "bent jau dabar" + "beta": "Beta" }, "dashboardTab": { "stable": "STABILUS", - "registerNewServer": "Registruoti naują serverį", - "storeSshKeysOrPasswords": "Saugoti SSH raktus arba slaptažodžius", - "manageUsersAndRoles": "Tvarkyti vartotojus ir vaidmenis", - "manageYourAccount": "Tvarkyti savo paskyrą", - "hostStatus": "Serverio būsena", - "noHostsConfigured": "Serverių nesukonfigūruota", - "checking": "TIKRINAMA", - "commandPalette": "Komandų paletė", - "done": "Atlikta", - "clear": "Išvalyti", - "dragToResizeColumns": "Tempkite, kad pakeistumėte stulpelių plotį", - "hostsAvailable": "Prieinami serveriai", - "removeSection": "Pašalinti skyrių", - "addSection": "Pridėti skyrių", - "allSectionsShown": "Viskas jau yra skydelio.", - "fromPlugins": "Iš įskiepių", - "dropHere": "Nukreipkite skyrių čia", - "dragToReorder": "Tempkite skyrius, kad pakeistumėte jų tvarką", - "clearActivityConfirm": "Išvalyti neseniai atliktus veiksmus?", - "resetConfirm": "Atstatyti skydelį į numatytąjį išdėstymą?", "onlineCount_one": "{{count}} prisijungęs", "onlineCount_few": "{{count}} prisijungę", "onlineCount_many": "{{count}} prisijungusių", @@ -1237,432 +1094,55 @@ "hostCount_other": "{{count}} serveriai" }, "admin": { - "sectionGeneral": "Bendra", - "sectionUsers": "Naudotojai", - "sectionSessions": "Sesijos", - "sectionRoles": "Vaidmenys", - "sectionDatabase": "Duomenų bazė", - "sectionApiKeys": "API raktai", - "sectionAuditLog": "Audito žurnalas", - "sectionSsl": "HTTPS sertifikatas", - "sectionBranding": "Baltasis etiketavimas", - "brandingAppName": "Programos pavadinimas", - "brandingAppNameDesc": "Rodomas prisijungimo ekrane ir naršyklės skirtuke. Palikite tuščią, kad būtų naudojamas „Termix“.", - "brandingTagline": "Sloganai", - "brandingTaglineDesc": "Rodomas po programos pavadinimu prisijungimo ekrane. Palikite tuščią, kad būtų naudojamas numatytasis sloganas.", - "brandingLogo": "Logotipas", - "brandingLogoDesc": "PNG, JPEG arba WEBP, iki 750 KB. Pakeičia numatytąją piktogramą prisijungimo ekrane ir naršyklės skirtuke.", - "brandingLogoUpload": "Įkelti logotipą", - "brandingLogoReset": "Atstatyti numatytąjį", - "brandingLogoInvalid": "Neteisingas paveikslėlis. Naudokite PNG, JPEG arba WEBP failą, ne didesnį kaip 750 KB.", - "brandingSaved": "Baltasis etiketavimas išsaugotas", - "brandingSaveFailed": "Nepavyko išsaugoti baltojo etiketavimo nustatymų", - "sslDescription": "Sertifikatas, kurį Termix teikia per HTTPS. Įkelkite savo sertifikatą čia arba gaukite ir atnaujinkite jį iš „Let's Encrypt“ ACME sertifikatų skyriuje.", - "sslDocsLink": "Peržiūrėti SSL dokumentaciją", - "sslCertStatus": "Sertifikato būsena", - "sslCertStatusNone": "Nėra sertifikato", - "sslCertStatusValid": "Galiojantis", - "sslCertStatusExpiring": "Netrukus baigs galioti", - "sslCertStatusExpired": "Pasibaigęs", - "sslCertExpiresAt": "Baigs galioti {{date}}", - "sslInfoNote": "Išdavus arba įkėlus sertifikatą, Termix automatiškai įgalins HTTPS SSL_PORT (numatyta 8443) be esamos HTTP prievado. Įsitikinkite, kad ši prievadas yra paskelbtas/suderintas su šiuo konteineriu, kad būtų pasiekiamas.", - "sslManualCert": "Sertifikatas (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Privatus raktas (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Įklijuokite esamą sertifikatą ir privatų raktą, įskaitant pilną grandinę, jei to reikalauja jūsų CA.", - "sslManualUpload": "Įkelti ir įdiegti sertifikatą", - "sslManualUploadLoading": "Įkeliamas sertifikatas...", - "sslManualUploadSuccess": "Sertifikatas sėkmingai įkeltas ir įdiegtas", - "sslManualUploadFailed": "Nepavyko įkelti sertifikato", - "sslManualRequiresFields": "Reikalingas sertifikatas ir privatus raktas", - "auditLogTotal": "{{total}} iš viso įrašų", - "auditLogEmpty": "Nerasta jokių audito žurnalo įrašų", - "auditLogSuccess": "Sėkminga", - "auditLogFailed": "Nepavyko", - "auditLogClearFilters": "Išvalyti filtrus", - "auditLogPage": "Puslapis {{page}} iš {{totalPages}} ({{total}} iš viso)", - "auditLogIp": "IP", - "auditLogResourceId": "Ištekliaus ID", - "auditLogFilterUser": "Vartotojas", - "auditLogFilterAction": "Veiksmas", - "auditLogFilterResourceType": "Ištekliaus tipas", - "auditLogFilterStatus": "Būsena", - "auditLogFilterFrom": "Nuo", - "auditLogFilterTo": "Iki", - "auditLogFilterAll": "Visi", - "allowRegistration": "Leisti vartotojų registraciją", - "allowRegistrationDesc": "Leisti naujiems vartotojams savarankiškai registruotis naudojant vartotojo vardą ir slaptažodį", - "allowPasswordLogin": "Leisti prisijungimą slaptažodžiu", - "allowPasswordLoginDesc": "Prisijungimas naudojant vartotojo vardą ir slaptažodį", - "externalAutoProvision": "Automatiškai kurti išorines paskyras", - "externalAutoProvisionDesc": "Sukurti paskyrą pirmą kartą, kai kas nors prisijungia per išorinę prisijungimo sistemą, pvz., SSO arba LDAP. Jei išjungta, taip gali prisijungti tik tie, kurie jau turi paskyrą", - "secondFactorAfterExternalLogin": "Reikalauti antrojo patvirtinimo veiksnio po išorinio prisijungimo (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Jei išjungta, apie antrąjį patvirtinimo veiksnį klausiama tik po prisijungimo slaptažodžiu ir kitų vietinių prisijungimų, kaip ir anksčiau. Jei įjungta, klausiama po kiekvieno prisijungimo būdo, įskaitant SSO ir LDAP.", - "allowPasswordReset": "Leisti slaptažodžio atkūrimą", - "allowPasswordResetDesc": "Atkūrimo kodas per Docker žurnalus", - "auditForwardingTitle": "Siųsti į SIEM", - "auditForwardingDesc": "Siųsti kiekvienos audito įrašo kopiją į išorinį rinktuvą NDJSON formatu. Vietiniai žurnalai lieka pagrindiniu duomenų šaltiniu.", - "auditForwardingEnvNotice": "Siuntimą taip pat galima konfigūruoti aplinkos kintamuoju; čia išsaugotas URL turi prioritetą.", - "auditForwardingToken": "Bearer žetonas (nebūtina)", - "auditForwardingTokenStored": "Bearer žetonas (išsaugotas)", - "auditForwardingSaved": "Audito siuntimo nustatymai išsaugoti", - "auditForwardingSaveError": "Nepavyko išsaugoti audito siuntimo nustatymų", - "sessionTimeout": "Sesijos laikas", - "hours": "valandos", - "sessionTimeoutRange": "Min 1 val., maks 720 val.", - "monitoringDefaults": "Stebėjimo numatytieji nustatymai", - "statusCheck": "Būsenos tikrinimas", - "sec": "sek.", - "logLevel": "Žurnalo lygis", "usersCount_one": "{{count}} vartotojas", "usersCount_few": "{{count}} vartotojai", "usersCount_many": "{{count}} vartotojo", - "usersCount_other": "{{count}} vartotojo", - "searchUsers": "Ieškoti vartotojų...", - "noUsers": "Nėra vartotojų", - "noUsersMatch": "Nėra vartotojų, atitinkančių jūsų paiešką", - "pageOf": "Puslapis {{page}} iš {{total}}", - "createUser": "Sukurti", - "newRole": "Naujas vaidmuo", - "roleName": "Pavadinimas", - "roleDisplayName": "Rodomas pavadinimas", - "roleDescription": "Aprašymas", "rolesCount_one": "{{count}} vaidmuo", "rolesCount_few": "{{count}} vaidmenys", "rolesCount_many": "{{count}} vaidmens", - "rolesCount_other": "{{count}} vaidmens", - "createRole": "Sukurti", - "creating": "Kuriamas...", - "exportDatabase": "Eksportuoti duomenų bazę", - "exportDatabaseDesc": "Atsisiųsti nešiojamą SQLite atsarginę kopiją su visais serveriais, prisijungimo duomenimis ir nustatymais", - "export": "Eksportuoti", - "exporting": "Eksportuojama...", - "importDatabase": "Importuoti duomenų bazę", - "importDatabaseDesc": "Atkurti iš nešiojamos .sqlite atsarginės kopijos bet kurioje duomenų bazės platformoje", - "importDatabaseSelected": "Pasirinkta: {{name}}", - "selectFile": "Pasirinkti failą", - "changeFile": "Keisti", - "import": "Importuoti", - "importing": "Importuojama...", "apiKeysCount_one": "{{count}} raktas", "apiKeysCount_few": "{{count}} raktai", "apiKeysCount_many": "{{count}} rakto", - "apiKeysCount_other": "{{count}} rakto", - "apiKeysDocsLink": "Peržiūrėti dokumentaciją", - "apiKeysCliHint": "Naudokite API raktą su Termix CLI, kad valdytumėte serverius iš savo terminalo.", - "apiKeysCliLink": "Peržiūrėti CLI dokumentaciją", - "newApiKey": "Naujas API raktas", - "apiKeyCreatedWarning": "Raktas sukurtas – nukopijuokite jį dabar, jis nebebus rodomas.", - "apiKeyName": "Pavadinimas", - "apiKeyUser": "Naudotojas", - "apiKeySelectUser": "Pasirinkite naudotoją...", - "apiKeyExpiresAt": "Galioja iki", - "createKey": "Sukurti raktą", - "apiKeyNoExpiry": "Nėra galiojimo pabaigos", - "revokedBadge": "ATŠAUKTAS", - "authTypeDual": "Dviguba autentifikacija", - "authTypeExternal": "Išorinė", - "authTypeLocal": "Vietinė", - "adminStatusAdministrator": "Administratorius", - "adminStatusRegularUser": "Įprastas naudotojas", - "adminBadge": "ADMIN", - "systemBadge": "SIST", - "customBadge": "Pritaikytas", - "youBadge": "JŪS", "sessionsActive_one": "{{count}} aktyvi", "sessionsActive_few": "{{count}} aktyvios", "sessionsActive_many": "{{count}} aktyvių", - "sessionsActive_other": "{{count}} aktyvių", - "sessionActive": "Aktyvus: {{time}}", - "sessionExpires": "Galioja: {{time}}", - "revokeAll": "Visi", - "revokeAllSessionsSuccess": "Visi naudotojo seansai atšaukti", - "revokeAllSessionsFailed": "Nepavyko atšaukti seansų", - "revokeSessionFailed": "Nepavyko atšaukti seanso", - "addRole": "Pridėti rolę", - "noCustomRoles": "Nėra apibrėžtų pritaikytų rolių", - "removeRoleFailed": "Nepavyko pašalinti rolės", - "assignRoleFailed": "Nepavyko priskirti rolės", - "userAdminAccess": "Administratorius", - "userAdminAccessDesc": "Pilnas prieigas prie visų administravimo nustatymų", - "userRoles": "Rolės", - "revokeAllUserSessions": "Atšaukti visus seansus", - "revokeAllUserSessionsDesc": "Priverstinai atsijungti visuose įrenginiuose", - "revoke": "Atšaukti", - "deleteUserWarning": "Naudotojo šalinimas yra negrįžtamas.", - "deleteUser": "Šalinti {{username}}", - "deleting": "Šalinama...", - "deleteUserFailed": "Nepavyko šalinti naudotojo", - "deleteUserSuccess": "Naudotojas „{{username}}“ pašalintas", - "deleteRoleSuccess": "Rolė „{{name}}“ pašalinta", - "revokeKeySuccess": "Raktas „{{name}}“ atšauktas", - "revokeKeyFailed": "Nepavyko atšaukti rakto", - "copiedToClipboard": "Nukopijuota į iškarpinę", - "done": "Atlikta", - "createUserTitle": "Sukurti naudotoją", - "createUserDesc": "Sukurti naują vietinę paskyrą.", - "createUserUsername": "Naudotojo vardas", - "createUserPassword": "Slaptažodis", - "createUserPasswordHint": "Mažiausiai 6 simboliai.", - "createUserEnterUsername": "Įveskite naudotojo vardą", - "createUserSubmit": "Sukurti naudotoją", - "editUserTitle": "Tvarkyti naudotoją: {{username}}", - "editUserDesc": "Redaguokite roles, administratoriaus statusą, seansus ir paskyros nustatymus.", - "editUserUsername": "Naudotojo vardas", - "editUserAuthType": "Autentifikacijos tipas", - "editUserAdminStatus": "Administratoriaus statusas", - "editUserUserId": "Naudotojo ID", - "linkAccountTitle": "Susieti paskyras", - "linkAccountDesc": "Sujungti išorinę paskyrą {{username}} su esama vietine paskyra.", - "linkAccountDescLocal": "Susieti vietinę paskyrą {{username}} su esama tik išorine paskyra.", - "linkAccountWarningTitle": "Tai padarys:", - "linkAccountEffect1": "Ištrinti išorinį paskyrą", - "linkAccountEffect2": "Pridėti jos išorinę prisijungimo prieigą prie tikslinės paskyros", - "linkAccountEffect3": "Leisti prisijungti tiek išorine, tiek slaptažodžio prieiga", - "linkAccountTargetUsername": "Vietinės paskyros vartotojo vardas", - "linkAccountTargetPlaceholder": "Įveskite vietinės paskyros vartotojo vardą, prie kurio norite susieti", - "linkAccountExternalUsername": "Išorinės paskyros vartotojo vardas", - "linkAccountExternalPlaceholder": "Įveskite tik išorinę paskyrą turinčio vartotojo vardą, kurį norite sujungti", - "linkAccountExternalNotFound": "Nerasta tik išorinės paskyros su šiuo vartotojo vardu", - "linkAccounts": "Susieti paskyras", - "linkAccountSuccess": "Paskyros sėkmingai susietos", - "linkAccountFailed": "Nepavyko susieti paskyrų", - "linkAccountInProgress": "Vijama...", - "unlinkAccountTitle": "Atsijungti išorinę prisijungimo prieigą", - "unlinkAccountDesc": "Pašalinti išorinę prisijungimo prieigą nuo {{username}}. Vartotojas galės prisijungti tik naudodamas slaptažodį.", - "unlinkAccountWarning": "Tai pašalins išorinę prisijungimo prieigą iš šios paskyros. Vartotojas turi turėti nustatytą slaptažodį, kad galėtų toliau prisijungti.", - "unlinkAccount": "Atsijungti išorinę prisijungimo prieigą", - "unlinkAccountInProgress": "Atsijungiama...", - "unlinkAccountSuccess": "Išorinė prisijungimo prieiga atsijungta", - "unlinkAccountFailed": "Nepavyko atsijungti išorinės prisijungimo prieigos", - "updateRegistrationFailed": "Nepavyko atnaujinti registracijos nustatymų", - "updatePasswordLoginFailed": "Nepavyko atnaujinti prisijungimo slaptažodžiu nustatymų", - "updateSecondFactorAfterExternalLoginFailed": "Nepavyko atnaujinti antrojo veiksnio nustatymų", - "updatePasswordResetFailed": "Nepavyko atnaujinti slaptažodžio atstatymo nustatymų", - "sessionTimeoutRange2": "Sesijos baigties laikas turi būti nuo 1 iki 720 valandų", - "sessionTimeoutSaved": "Sesijos baigties laikas išsaugotas", - "sessionTimeoutSaveFailed": "Nepavyko išsaugoti sesijos baigties laiko", - "monitoringIntervalInvalid": "Neteisingos intervalo reikšmės", - "monitoringSaved": "Stebėjimo nustatymai išsaugoti", - "monitoringSaveFailed": "Nepavyko išsaugoti stebėjimo nustatymų", - "logLevelUpdateFailed": "Nepavyko atnaujinti žurnalo lygio", - "createUserRequired": "Vartotojo vardas ir slaptažodis yra privalomi", - "createUserPasswordTooShort": "Slaptažodis turi būti ne trumpesnis kaip 6 simboliai", - "createUserSuccess": "Vartotojas „{{username}}“ sukurtas", - "createUserFailed": "Nepavyko sukurti vartotojo", - "updateAdminStatusFailed": "Nepavyko atnaujinti administratoriaus statuso", - "allSessionsRevoked": "Visos sesijos atšauktos", - "revokeSessionsFailed": "Nepavyko atšaukti sesijų", - "manageUserData": "Tvarkyti vartotojo duomenis", - "backToUsers": "Atgal prie vartotojų", - "manageTabAccount": "Paskyra", - "manageTabHosts": "Serveriai", - "manageTabCredentials": "Prijungimo duomenys", - "manageTabSessions": "Sesijos", - "manageTabDanger": "Pavojus", - "manageEditorBack": "Atgal prie {{username}} duomenų", - "dataLockedBadge": "UŽRAKINTA", - "dataLockedNotice": "{{username}} duomenys lieka užrakinti, kol vartotojas kitą kartą prisijungs. Kol kas jo serveriai, prijungimo duomenys ir komandos negali būti peržiūrimi ar redaguojami.", - "resetPasswordTitle": "Atstatyti slaptažodį", - "resetPasswordExternalOnly": "Šis vartotojas prisijungia per išorinį tiekėją ir neturi slaptažodžio.", - "resetPasswordPlaceholder": "Naujas slaptažodis", - "resetPasswordBtn": "Atstatyti", - "resetPasswordWorking": "Atstatoma...", - "resetPasswordSuccess": "Slaptažodis atstatytas", - "resetPasswordSuccessWiped": "Slaptažodis atstatytas. Vartotojo šifruoti duomenys buvo ištrinti.", - "resetPasswordFailed": "Nepavyko atstatyti slaptažodžio", - "resetPasswordConfirmWipe": "{{username}} neprisijungė nuo šifravimo atnaujinimo, todėl jo duomenų negalima atkurti. Dabar atstatant bus ištrinti jo serveriai, prijungimo duomenys ir komandos. Tęsti?", - "manageApiKeys": "API raktai", - "apiKeyNamePlaceholder": "Rakto pavadinimas", - "apiKeyCopyNotice": "Nukopijuokite šį raktą dabar, jis nebebus rodomas.", - "noApiKeysForUser": "Nėra API raktų", - "apiKeyDeleteFailed": "Nepavyko ištrinti API rakto", - "exportUserData": "Duomenų eksportas", - "exportUserDataDesc": "Atsisiųskite šio vartotojo serverius, prisijungimo duomenis ir failų tvarkytuvės duomenis kaip JSON. Slaptažodžiai yra iššifruoti.", - "exportUserDataSuccess": "Vartotojo duomenys eksportuoti", - "exportUserDataFailed": "Nepavyko eksportuoti vartotojo duomenų", "hostsCount_one": "{{count}} serveris", "hostsCount_few": "{{count}} serveriai", "hostsCount_many": "{{count}} serverio", "hostsCount_other": "{{count}} serverio", - "addHostForUser": "Pridėti serverį", - "noHostsForUser": "Šis vartotojas neturi serverių", - "connectToHost": "Prisijungti", - "deleteHostConfirm": "Ištrinti serverį „{{name}}“, priklausantį {{username}}?", - "hostDeletedSuccess": "Serveris ištrintas", - "hostDeleteFailed": "Nepavyko ištrinti serverio", "credentialsCount_one": "{{count}} prisijungimo duomenų rinkinys", "credentialsCount_few": "{{count}} prisijungimo duomenų rinkiniai", "credentialsCount_many": "{{count}} prisijungimo duomenų rinkinio", "credentialsCount_other": "{{count}} prisijungimo duomenų rinkinio", - "addCredentialForUser": "Pridėti prisijungimo duomenis", - "noCredentialsForUser": "Šis vartotojas neturi prisijungimo duomenų", - "deleteCredentialConfirm": "Ištrinti prisijungimo duomenis „{{name}}“, priklausantį {{username}}?", - "credentialDeletedSuccess": "Prisijungimo duomenys ištrinti", - "credentialDeleteFailed": "Nepavyko ištrinti prisijungimo duomenų", - "noSessionsForUser": "Nėra aktyvių sesijų", - "deleteSuccessorLabel": "Perduoti serverius ir prisijungimo duomenis", - "deleteSuccessorMe": "Man (ištrinančiam administratoriui)", - "deleteSuccessorNone": "Niekam, ištrinti juos", - "deleteSuccessorDesc": "Viskas, ką šis vartotojas bendrino, veiks naujam savininkui; pasirinkus „niekam“, bus ištrinti jų serveriai, prisijungimo duomenys ir bendrinimai.", - "deleteUserDangerDesc": "Visam laikui ištrinti {{username}} ir visus jų duomenis (serverius, prisijungimo duomenis, komandas, istoriją). To negalima atšaukti.", - "deleteUserConfirm": "Visam laikui ištrinti {{username}} ir visus jų duomenis?", - "deleteUserAdminBlocked": "Prieš ištrindami šį vartotoją, pašalinkite administratoriaus teises.", - "createRoleRequired": "Būtina nurodyti pavadinimą ir rodomą vardą", - "createRoleSuccess": "Sukurta rolė „{{name}}“", - "createRoleFailed": "Nepavyko sukurti rolės", - "apiKeyNameRequired": "Būtina nurodyti rakto pavadinimą", - "apiKeyUserRequired": "Būtina nurodyti vartotojo ID", - "apiKeyCreatedSuccess": "Sukurtas API raktas „{{name}}“", - "apiKeyCreateFailed": "Nepavyko sukurti API rakto", - "exportSuccess": "Duomenų bazė sėkmingai eksportuota", - "exportFailed": "Duomenų bazės eksportas nepavyko", - "importSelectFile": "Pirmiausia pasirinkite failą", - "importCompleted": "Importas baigtas: importuota {{total}} elementų, praleista {{skipped}}", - "importFailed": "Importas nepavyko: {{error}}", - "importError": "Duomenų bazės importas nepavyko", - "sectionHostDefaults": "Serverio numatytieji nustatymai", "rolePermissions": { "count_one": "{{count}} leidimas", "count_few": "{{count}} leidimai", "count_many": "{{count}} leidimo", - "count_other": "{{count}} leidimo", - "editAction": "Redaguoti leidimus", - "loadError": "Nepavyko įkelti leidimų katalogo", - "saved": "Rolės leidimai išsaugoti", - "saveError": "Nepavyko išsaugoti rolės leidimų", - "save": "Išsaugoti", - "saving": "Išsaugoma...", - "pluginDisabled": "Priedas išjungtas", "groups": { "hosts": "Serveriai", "credentials": "Prisijungimo duomenys", "admin": "Administravimas" } - }, - "notificationPrivateEndpoints": "Leidžiami privačių pranešimų serveriai", - "notificationPrivateEndpointsDesc": "Tikslūs privatūs serveriai, kuriuos gali kontaktuoti pranešimų kanalai. Atskirkite juos kableliais.", - "updateNotificationEndpointsFailed": "Nepavyko atnaujinti pranešimų galinių taškų leidimų sąrašo", - "secondFactorsSectionTitle": "Antrieji veiksniai", - "secondFactorsNone": "Nėra užregistruotų antrųjų veiksnių", - "secondFactorUnavailable": "Nepasiekiamas", - "resetSecondFactors": "Atstatyti antruosius veiksnius", - "resetSecondFactorsConfirm": "Pašalinti visus antruosius veiksnius vartotojui {{username}}? Jie gali prisijungti naudodami slaptažodį arba SSO ir vėl užregistruoti.", - "secondFactorsResetSuccess": "Antriniai autentifikavimo veiksniai sėkmingai atstatyti", - "secondFactorsResetFailed": "Nepavyko atstatyti antrinių autentifikavimo veiksnių", - "passwordLoginForced": "Prisijungimas slaptažodžiu išjungtas, tačiau joks kitas prisijungimo būdas nėra įjungtas, todėl jis laikinai lieka įjungtas. Niekas nebus užrakintas.", - "sslNotRenewed": "Šio sertifikato niekas atnaujina. Jis galioja iki {{date}}. Įjunkite automatinį atnaujinimą ACME sertifikatų skiltyje arba įkelkite naują sertifikatą iki tos datos.", - "sslSelfSigned": "Savasis sertifikatas, sukurtas Termix. Naršyklės apie jį įspės.", - "sslRenewedBy": "Automatiškai atnaujinta naudojant {{plugin}}", - "sslIssuer": "Išduota {{issuer}}", - "sslNames": "Apima {{names}}", - "sslManualTitle": "Įkelti sertifikatą", - "updateExternalAutoProvisionFailed": "Nepavyko atnaujinti automatinio kūrimo nustatymą", - "hostTags": "Iš anksto apibrėžti serverių žymės", - "hostTagsDesc": "Žymės, kurias visi vartotojai mato kaip pasiūlymus serverio redaktoriuje. Paspauskite Tarpo arba Enter klavišą, kad pridėtumėte žymę. Pašalinus žymę čia, ji nėra pašalinama iš serverių.", - "hostTagsError": "Nepavyko įkelti arba išsaugoti serverių žymių pasiūlymų.", - "revokeAllSessionsConfirm": "Atsijungti vartotojui {{username}} visur?", - "revokeSessionConfirm": "Atsijungti iš šios sesijos?", - "revokeSession": "Atsijungti", - "deleteRoleConfirm": "Ištrinti rolę {{name}}?", - "revokeKeyConfirm": "Anuliuoti API raktą {{name}}?", - "revokeKey": "Anuliuoti" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Kur", - "who": "Kas", - "hostLabel": "Serveris", - "hostPlaceholder": "192.168.1.1 arba example.com", - "portLabel": "Prievadas", - "usernameLabel": "Vartotojo vardas", - "usernamePlaceholder": "vartotojo vardas", - "authLabel": "Autentifikacija", - "passwordLabel": "Slaptažodis", - "passwordPlaceholder": "slaptažodis", - "privateKeyLabel": "Privatus raktas", - "privateKeyPlaceholder": "Įklijuokite privatų raktą...", - "credentialLabel": "Prijungimo duomenys", - "credentialPlaceholder": "Pasirinkite išsaugotus prisijungimo duomenis", - "protocolLabel": "Protokolas", - "domainLabel": "Domenas", - "domainPlaceholder": "nebūtina", - "connectToAction": "Prisijungti prie {{name}}", - "sshProtocol": "SSH", - "noTarget": "Nėra įdiegta jokių komponentų, kurie galėtų prisijungti prie šio serverio tipo" + "usernameLabel": "Vartotojo vardas" }, "keybindings": { - "description": "Prijunkite klavišus prie veiksmų terminale ir programoje arba pakeiskite numatytąsias spartiąsias klavišų kombinacijas.", - "defaultsHeading": "Numatytosios spartiosios klavišų kombinacijos", - "fixedHeading": "Programos spartiosios klavišų kombinacijos", - "fixed": { - "splitRight": "Padalinti į dešinę", - "splitDown": "Padalinti žemyn", - "zoomPane": "Padidinti fokusuotą langelį", - "navigatePane": "Perjungti tarp langelių", - "nextTab": "Kitas skirtukas", - "previousTab": "Ankstesnis skirtukas", - "jumpTab": "Eiti į skirtuką", - "previousView": "Grįžti į ankstesnį šoninės juostos rodinį", - "fullscreen": "Perjungti visą ekraną" - }, - "customHeading": "Vartotojo spartiosios klavišų kombinacijos", - "addBinding": "Pridėti spartiąją klavišų kombinaciją", - "addBindingTitle": "Pridėti spartiąją klavišų kombinaciją", - "editBindingTitle": "Redaguoti spartiąją klavišų kombinaciją", - "loading": "Įkeliamas...", - "noCustomBindings": "Dar nėra vartotojo spartiosios klavišų kombinacijos", - "defaultBadge": "Numatyta", - "customizedBadge": "Pritaikyta", - "customize": "Pritaikyti", - "resetToDefault": "Atstatyti numatytuosius", - "resetAllToDefaults": "Atstatyti visus numatytuosius", - "cancel": "Atšaukti", - "saveBinding": "Išsaugoti sparčiąją klavišų kombinaciją", - "saveError": "Nepavyko išsaugoti klaviatūros sparčiųjų klavišų", - "pressKeysToRecord": "Klavišų kombinacija", - "pressKeysPlaceholder": "Spustelėkite ir paspauskite klavišus", - "recording": "Paspauskite klavišus...", - "comboRequiredError": "Pirmiausia paspauskite klavišų kombinaciją", - "conflictWarning": "Ši kombinacija jau priskirta {{combo}}. Išsaugojus veiks abu.", - "actionLabel": "Veiksmas", "actionNextTab": "Perjungti į kitą skirtuką", "actionPreviousTab": "Perjungti į ankstesnį skirtuką", "actionOpenCommandPalette": "Atidaryti greitąją paiešką", - "actionReconnectSession": "Perjungti dabartinę sesiją", - "unavailableAction": "{{type}} (nepasiekama)", - "actionRequiredError": "Pirmiausia pasirinkite veiksmą", - "deleteConfirm": "Ištrinti šią klavišų kombinaciją?", - "resetAllConfirm": "Atstatyti visas klavišų kombinacijas į numatytąsias?" + "actionReconnectSession": "Perjungti dabartinę sesiją" }, "userProfile": { - "storageModeLocal": "Naršyklė", - "storageModeCloud": "Duomenų bazė", - "storageModeDescription": "Naršyklė saugo nustatymus tik šioje naršyklėje. Duomenų bazė sinchronizuoja su serveriu ir įkelia bet kuriame įrenginyje.", - "resetToDefaults": "Atstatyti numatytuosius", - "resetToDefaultsSuccess": "Nustatymai atstatyti į numatytuosius.", - "storageModeSwitch": "Pirmenybių saugojimas", - "sectionAccount": "Paskyra", - "desktopProfileTitle": "Tik šis įrenginys", - "desktopProfileDescription": "Šis profilis egzistuoja tik šiame įrenginyje ir prisijungia savarankiškai. Susiekite jį su Termix serveriu, kad naudotumėte tuos pačius serverius ir nustatymus visuose įrenginiuose.", - "sectionInterface": "Sąsaja", - "interfacePresetDesc": "Kiek detalių rodo Termix. Visos funkcijos lieka pasiekiamos.", "preset_simple": "Paprasta", "preset_simple_desc": "Tik pagrindinės funkcijos.", "preset_balanced": "Subalansuota", "preset_balanced_desc": "Standartinė išdėstymo schema.", "preset_advanced": "Išplėstinė", "preset_advanced_desc": "Viskas įjungta, tankiai išdėstyta.", - "presetClearOverrides": "Atstatyti visus", - "presetOverridesTitle": "Pritaikyta", - "presetRevertArea": "Grąžinti", - "presetConfirmTitle": "Perjungti į {{preset}}?", - "presetConfirmDesc": "Tai atstatys šoninę juostą, naršymą, valdymo skydelio išdėstymą, terminalo įrankių juostą ir failų tvarkytuvo rodinį. Jūsų serveriai, prisijungimo duomenys ir pagrindinis puslapis neliesiami.", - "presetConfirmApply": "Taikyti šabloną", - "runSetupAgainDesc": "Vėl eiti per pirmojo paleidimo nustatymus.", - "runSetupAgainButton": "Vykdyti nustatymus", "uiArea_chrome": "Programos rėmeliai", "uiArea_hostList": "Serverių sąrašas", "uiArea_credentialList": "Prisijungimo duomenų sąrašas", @@ -1671,128 +1151,15 @@ "uiArea_terminal": "Terminalas", "uiArea_fileManager": "Failų tvarkytuvė", "uiArea_hostEditor": "Serverio redaktorius", - "sectionAppearance": "Išvaizda", - "sectionSecurity": "Saugumas", - "sectionApiKeys": "API raktai", - "sectionData": "Duomenys", - "usernameLabel": "Vartotojo vardas", - "roleLabel": "Vaidmuo", - "roleAdministrator": "Administratorius", - "authMethodLabel": "Autentifikavimo metodas", - "authMethodLocal": "Vietinis", - "twoFaLabel": "2FA", - "twoFaOn": "Įjungta", - "twoFaOff": "Išjungta", - "versionLabel": "Versija", - "cliTitle": "Termix CLI", - "cliDescription": "Atidarykite terminalus, vykdykite komandas ir perkelkite failus naudodami savo komandų eilutę.", - "cliLearnMore": "Sužinoti daugiau", - "deleteAccount": "Ištrinti paskyrą", - "deleteAccountDescription": "Visam laikui ištrinti paskyrą", - "deleteButton": "Ištrinti", - "deleteAccountPermanent": "Šis veiksmas yra negrįžtamas.", - "deleteAccountWarning": "Visos sesijos, serveriai, prisijungimo duomenys ir nustatymai bus visam laikui ištrinti.", - "confirmPasswordDeletePlaceholder": "Įveskite slaptažodį, kad patvirtintumėte", "languageLabel": "Kalba", "themeLabel": "Tema", "fontSizeLabel": "Šrifto dydis", "interfaceFontLabel": "Sąsajos šriftas", "interfaceFontDescription": "Keičia programos sąsajos šriftą. Terminalo profiliai išlaiko savo šrifto nustatymus.", "accentColorLabel": "Akcento spalva", - "keyboardShortcuts": "Klaviatūros trumpiniai", - "keyboardShortcutsDescription": "Pritaikykite terminalo kopijavimo, įklijavimo ir komandų trumpinius", - "manageShortcuts": "Tvarkyti", - "commandPalette": "Komandų paletė", - "commandPaletteDesc": "Įjungti klaviatūros trumpinį", - "reopenTabsOnLogin": "Atidaryti skirtukus prisijungus", - "reopenTabsOnLoginDesc": "Atkurkite atidarytus skirtukus prisijungę arba atnaujinę puslapį, net ir naudodami kitą įrenginį", - "confirmTabClose": "Patvirtinti skirtuko uždarymą", - "confirmTabCloseDesc": "Klausti prieš uždarydami terminalo skirtukus", - "showTabNumbers": "Rodyti skirtukų numerius", - "showTabNumbersDesc": "Rodyti numerį kiekviename skirtuke, kad būtų lengviau juos atskirti", - "settingsAppRail": "Programų juosta", - "sidebarSettingsMoved": "Serverių šoninės juostos rodymo nustatymai perkelti į šoninės juostos pritaikymo skydelį, atidaromą iš serverių įrankių juostos.", - "showHostTags": "Rodyti serverių žymas", - "showHostTagsDesc": "Rodyti žymas serverių sąraše", - "statusColors": "Tikros būsenos spalvos", - "statusColorsDesc": "Naudoti žalią/raudoną spalvą prisijungusio/neprisijungusio būsenai vietoj akcento spalvos", - "pinAppRail": "Pritvirtinti programų juostą", - "pinAppRailDesc": "Visada išlaikyti kairę programų juostą išplėstą, vietoj to, kad ji išsiplėstų užvedus pelę", - "expandAppRailOnHover": "Išplėsti programų juostą užvedus pelę", - "expandAppRailOnHoverDesc": "Leisti kairiajai programų juostai išsiplėsti, kai pelės žymeklis užvedamas ant jos", - "appRailHoverPushesContent": "Stumti turinį išsiplėtimo metu", - "appRailHoverPushesContentDesc": "Sukurti vietos išsiplėtusiai juostai vietoj to, kad ji būtų rodoma virš puslapio. Atidarytos sesijos, pvz., nuotolinis darbalaukis, kiekvieną kartą keičia dydį", - "showPinAppRailButton": "Rodyti programų juostos pritvirtinimo mygtuką", - "showPinAppRailButtonDesc": "Rodyti mygtuką programų juostoje, kad būtų galima ją pritvirtinti. Numatyta išjungta.", - "settingsNavigation": "Navigacija", - "navigationTabsDesc": "Pasirinkite, kurie skirtukai rodomi programų juostoje", - "settingsUpdates": "Atnaujinimai", - "disableUpdateChecks": "Išjungti atnaujinimų tikrinimą", - "disableUpdateChecksDesc": "Nustoti tikrinti atnaujinimus", - "changePassword": "Keisti slaptažodį", - "currentPasswordLabel": "Dabartinis slaptažodis", - "currentPasswordPlaceholder": "Dabartinis slaptažodis", - "newPasswordLabel": "Naujas slaptažodis", - "newPasswordPlaceholder": "Naujas slaptažodis", - "confirmPasswordLabel": "Patvirtinti naują slaptažodį", - "confirmPasswordPlaceholder": "Patvirtinti naują slaptažodį", - "updatePassword": "Atnaujinti slaptažodį", - "createApiKeyTitle": "Sukurti API raktą", - "createApiKeyDescription": "Sugeneruokite naują API raktą programiniam prisijungimui.", - "apiKeyNameLabel": "Pavadinimas", - "apiKeyNamePlaceholder": "pvz., CI Pipeline", - "expiryDateLabel": "Galiojimo pabaigos data", - "optional": "nebūtina", - "cancel": "Atšaukti", - "createKey": "Sukurti raktą", - "apiKeyCreatedWarning": "Raktas sukurtas – nukopijuokite jį dabar, jis nebebus rodomas.", - "copyApiKey": "Kopijuoti API raktą", - "copiedToClipboard": "Nukopijuota į iškarpinę", "apiKeyCount_one": "{{count}} raktas", "apiKeyCount_few": "{{count}} raktai", "apiKeyCount_many": "{{count}} rakto", - "apiKeyCount_other": "{{count}} rakto", - "newKey": "Naujas raktas", - "noApiKeys": "Dar nėra API raktų.", - "apiKeyActive": "Aktyvus", - "apiKeyUsageHint": "Įtraukite savo raktą į", - "apiKeyUsageHintHeader": "antraštę.", - "apiKeyPermissionsHint": "Raktai paveldi sukūrusio vartotojo teises.", - "exportData": "Eksportuoti mano duomenis", - "exportDataDesc": "Atsisiųskite savo serverių, prisijungimo duomenų ir nustatymų atsarginę kopiją, kad perneštumėte į kitą įrenginį", - "export": "Eksportuoti", - "exporting": "Eksportuojama...", - "importData": "Importuoti mano duomenis", - "importDataDesc": "Atkurkite savo serverius, prisijungimo duomenis ir nustatymus iš .sqlite atsarginės kopijos failo", - "importDataSelected": "Pasirinkta: {{name}}", - "selectFile": "Pasirinkti failą", - "changeFile": "Keisti", - "import": "Importuoti", - "importing": "Importuojama...", - "exportSuccess": "Duomenys sėkmingai eksportuoti", - "exportFailed": "Duomenų eksportas nepavyko", - "importSelectFile": "Pirmiausia pasirinkite failą", - "importCompleted": "Importas baigtas: {{total}} elementų importuota, {{skipped}} praleista", - "importFailed": "Importas nepavyko: {{error}}", - "roleUser": "Vartotojas", - "authMethodDual": "Dviguba autentifikacija", - "authMethodExternal": "Išorinė", - "done": "Atlikta", - "apiKeyNameRequired": "Rakto pavadinimas yra privalomas", - "apiKeyCreated": "API raktas „{{name}}“ sukurtas", - "apiKeyCreateFailed": "Nepavyko sukurti API rakto", - "apiKeyUser": "Vartotojas", - "apiKeyExpires": "Galioja iki", - "apiKeyRevoked": "API raktas „{{name}}“ atšauktas", - "apiKeyRevokeFailed": "Nepavyko atšaukti API rakto", - "passwordFieldsRequired": "Reikalingi dabartinis ir naujas slaptažodžiai", - "passwordMismatch": "Slaptažodžiai nesutampa", - "passwordTooShort": "Slaptažodis turi būti ne trumpesnis kaip 6 simboliai", - "passwordUpdated": "Slaptažodis sėkmingai atnaujintas", - "passwordUpdateFailed": "Nepavyko atnaujinti slaptažodžio", - "deletePasswordRequired": "Norint ištrinti paskyrą, reikalingas slaptažodis", - "deleteFailed": "Nepavyko ištrinti paskyros", - "deleting": "Trinama...", "colorPickerTooltip": "Atidaryti spalvų parinkiklį", "themeSystem": "Sistemos", "themeLight": "Šviesus", @@ -1803,18 +1170,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Prisijungta prie {{server}}", - "linkedProfileDescription": "Šis įrenginys naudoja jūsų paskyrą serveryje ir išsaugo duomenų kopiją, todėl veikia ir be interneto ryšio.", - "manageSync": "Valdyti sinchronizavimą", - "setUpSync": "Susieti su serveriu", - "settingsTabsAndShortcuts": "Skirtukai ir sparčiojo prisijungimo klavišai", - "onBetaTitle": "Naudojate beta versiją", - "onBetaDescription": "Ačiū, kad testuojate. Praneškite, kas neveikia.", - "tryBetaTitle": "Išbandykite naujas funkcijas anksčiau", - "tryBetaDescription": "Junkitės prie beta programos skiltyje „Atnaujinimai“.", - "sendBetaFeedback": "Siųsti beta atsiliepimą", - "openUpdates": "Atnaujinimai" + "themeGruvbox": "Gruvbox" } } }, @@ -2091,8 +1447,7 @@ "hasDependents": "„{{name}}“ reikia „{{list}}“. Pirmiausia išjunkite arba pašalinkite juos.", "missingDependencies": "„{{name}}“ reikia „{{list}}“, kuris nėra įdiegtas.", "consentChanged": "Ką šis priedas prašo, pasikeitė nuo tada, kai jį peržiūrėjote. Patikrinkite sąrašą dar kartą.", - "upload": "Nepavyko perskaityti „{{name}}“: {{error}}", - "developerMode": "Nepavyko pakeisti kūrėjo režimo: {{error}}" + "upload": "Nepavyko perskaityti „{{name}}“: {{error}}" }, "data": { "title": "Saugomi duomenys", @@ -2231,13 +1586,7 @@ "browsePlugins": "Naršyti priedus", "loading": "Įkeliama", "developer": { - "title": "Priedų kūrėjo režimas", - "hint": "Leidžia administratoriams įdiegti priedus iš .tmxplug failo Priedų skirtuke, apeinant registro patikrinimus. Naudokite tai savo priedams kurti ir testuoti.", - "enableTitle": "Įjungti kūrėjo režimą?", - "enableBody": "Administratoriai galės įdiegti priedus iš failų, kurių Termix nėra tikrinusi. Priedas gali daryti viską, ką leidžia jo galimybės, todėl įjunkite tai tik kuriant ar testuojant priedus.", - "enable": "Įjungti", - "installFromFile": "Įdiegti iš failo", - "signedOnly": "Nustatytas TERMIX_REQUIRE_SIGNED_PLUGINS, todėl įdiegimas iš failo lieka blokuotas." + "installFromFile": "Įdiegti iš failo" }, "count": { "downloads_one": "{{formatted}} atsisiuntimas", @@ -2277,71 +1626,7 @@ "secretSet": "Nustatyta", "secretNotSet": "Nenustatyta", "secretReplace": "Pakeisti", - "pluginSettingsSaved": "Nustatymai išsaugoti", - "pluginSettingsInvalid": "Kai kurių nustatymų nepavyko išsaugoti. Patikrinkite paryškintus laukus.", - "pluginSettingsSaveFailed": "Nepavyko išsaugoti nustatymų", - "pluginSettingsLoadFailed": "Nepavyko įkelti nustatymų", - "featureUnavailable": "{{name}} šiuo metu nepasiekiamas. Šie nustatymai išsaugoti, tačiau nenaudos įtakos.", - "account": "Paskyra", - "security": "Saugumas", - "apiKeys": "API raktai", - "data": "Duomenys ir sinchronizavimas", - "interface": "Sąsaja", - "appearance": "Išvaizda", - "keybindings": "Klaviatūros trumpiniai", - "adminGeneral": "Bendra", - "adminUsers": "Vartotojai", - "adminSessions": "Sesijos", - "adminRoles": "Vaidmenys", - "adminHostDefaults": "Serverio numatytieji nustatymai", - "adminBranding": "Prekės ženklas", - "adminDatabase": "Duomenų bazė", - "adminSsl": "SSL", - "adminApiKeys": "API raktai", - "adminAuditLog": "Audito žurnalas", - "bandYou": "Jūsų paskyra", - "bandApp": "Ši programa", - "bandPlugins": "Priedai", - "bandInstance": "Šis serveris", - "searchPlaceholder": "Ieškoti nustatymų", - "noResults": "Nėra atitinkančių nustatymų.", - "pages": "Puslapiai", - "instanceSettings": "Serverio nustatymai", - "nothingHere": "Čia nėra ką nustatyti.", - "searchPage": "Ieškoti šiame puslapyje", - "noPageMatches": "Šioje puslapyje niekas neatitinka.", - "updates": { - "title": "Atnaujinimai", - "betaProgram": "Beta programa", - "betaIntro": "Beta versijos yra ankstyvosios kitos Termix versijos kopijos. Jos išleidžiamos antradieniais ir penktadieniais, kai yra ką naujo išbandyti. Jose gali būti klaidų, o jūsų atsiliepimai padeda pagerinti stabilias versijas.", - "termixBetas": "Termix beta versijos", - "termixBetasHint": "Praneškite apie naujas beta versijas, ne tik apie stabilias.", - "runningBetaBuild": "Naudojate beta versiją. Norėdami ją palikti, grįžkite prie stabilaus atvaizdo ar diegimo programos.", - "howToInstall": "Kaip gauti beta versiją", - "desktopInstall": "Atsisiųskite beta diegimo programą ir įdiekite ją ant esamos.", - "downloadBeta": "Atsisiųsti {{version}}", - "dockerInstall": "Pakeiskite savo atvaizdą į beta žymą ir paleiskite konteinerį iš naujo:", - "copy": "Kopijuoti", - "copied": "Nukopijuota", - "copyFailed": "Nepavyko nukopijuoti", - "learnMore": "Sužinoti daugiau apie beta versijas", - "feedback": "Atsiliepimai", - "feedbackHint": "Rado klaidą ar turite idėją? Ji tiesiogiai nukreipiama kūrėjams su jūsų versijos informacija.", - "sendFeedback": "Siųsti beta atsiliepimą", - "releases": "Versijos", - "thisVersion": "Ši versija", - "newestStable": "Naujausia stabili", - "newestBeta": "Naujausia beta", - "noRelease": "Šiuo metu nėra", - "pluginBetas": "Priedų beta versijos", - "pluginBetasIntro": "Kiekvienas priedas gali naudoti beta versijas atskirai. Norėdami išbandyti, atidarykite jį ir spauskite „Išbandyti beta“.", - "openPlugins": "Atidaryti priedus", - "waitingForStable": "Grįžta prie stabilios versijos. Liksite {{version}} versijoje, kol nebus naujesnė stabili versija.", - "backToStable": "Grįžti prie stabilios", - "allPluginsBeta": "Naudoti beta versijas visiems priedams", - "allPluginsStable": "Visi priedai grįžta prie stabilios versijos", - "saveFailed": "Nepavyko išsaugoti pakeitimo" - } + "featureUnavailable": "{{name}} šiuo metu nepasiekiamas. Šie nustatymai išsaugoti, tačiau nenaudos įtakos." }, "managerCard": { "refresh": "Atnaujinti", @@ -2351,11 +1636,6 @@ "filter": "Filtruoti..." }, "sync": { - "server": "Termix serveris", - "account": "Paskyra", - "status": "Būsena", - "never": "niekada", - "justNow": "būtent dabar", "minutesAgo_one": "prieš {{count}} minutę", "minutesAgo_few": "prieš {{count}} minutes", "minutesAgo_many": "prieš {{count}} minučių", @@ -2364,76 +1644,11 @@ "hoursAgo_few": "prieš {{count}} valandas", "hoursAgo_many": "prieš {{count}} valandų", "hoursAgo_other": "prieš {{count}} valandą", - "actionFailed": "Tai nepavyko. Bandykite dar kartą.", - "unlinkedTitle": "Tik šis įrenginys", - "unlinkedBody": "Termix veikia savarankiškai šiame įrenginyje. Susiekite jį su savo Termix serveriu, kad viskas būtų sinchronizuota.", - "unlinkedPointHosts": "Jūsų hostai, prisijungimo duomenys, komandos ir nustatymai jus seka į kiekvieną įrenginį.", - "unlinkedPointOffline": "Viskas veikia ir tada, kai serveris nepasiekiamas, o vėliau sinchronizuojasi.", - "unlinkedPointAccount": "Prisijungiate naudodami savo serverio paskyrą, o čia taip pat atsiras hostai, kuriuos su jumis pasidalino kiti žmonės.", - "linkButton": "Susieti su serveriu", - "state": { - "syncing": "Sinchronizuojama", - "offline": "Serveris nepasiekiamas", - "error": "Sinchronizavimas sustabdytas", - "signedOut": "Atsijungta", - "synced": "Sinchronizuota {{time}}" - }, "pending_one": "{{count}} pakeitimas laukia sinchronizavimo", "pending_few": "{{count}} pakeitimai laukia sinchronizavimo", "pending_many": "{{count}} pakeitimų laukia sinchronizavimo", "pending_other": "{{count}} pakeitimas laukia sinchronizavimo", - "signInAgain": "Prisijungti dar kartą", - "syncNow": "Sinchronizuoti dabar", - "unlink": "Atsieti", - "unlinked": "Šis įrenginys nebe susietas", - "unlinkTitle": "Atskirti šį įrenginį?", - "unlinkDescription": "Sustabdomas sinchronizavimas ir atjungiamas nuo serverio. Kitiems jūsų dalinami serverio įrenginiai bet kuriuo atveju bus pašalinti iš šio įrenginio.", - "unlinkKeepTitle": "Palikti mano duomenis čia", - "unlinkKeepBody": "Jūsų serveriai, prisijungimo duomenys ir nustatymai lieka šiame įrenginyje ir veikia nepriklausomai.", - "unlinkRemoveTitle": "Pašalinti sinchronizuotus duomenis", - "unlinkRemoveBody": "Viskas, kas atėjo iš serverio, bus pašalinta iš šio įrenginio. Liks tik tie serveriai, kurie buvo išsaugoti tik šiame įrenginyje.", - "conflictsTitle": "Konfliktai", - "conflictsDescription": "Šie elementai buvo pakeisti ir čia, ir serveryje tuo pačiu metu. Naudojama serverio versija. Pasirinkite „Palikti mano“, jei norite išsiųsti savo versiją į serverį.", - "keepMine": "Palikti mano", - "keepServer": "Palikti serverio", - "errorsTitle": "Nesinchronizuota", - "errorsDescription": "Serveris nepriėmė šių pakeitimų. Jie lieka šiame įrenginyje.", - "errorPermission": "Jūsų serverio paskyra neturi leidimo atlikti šį pakeitimą.", - "retry": "Bandyti dar kartą", - "whatSyncs": "Kas sinchronizuojama", - "whatSyncsDescription": "Išjunkite viską, ką norite laikyti tik šiame įrenginyje.", - "coreGroup": "Termix", - "notOnServer": "Serverio to neturi", - "notOnDevice": "Dar nėra šiame įrenginyje", - "localOnlyHint": "Galite taip pat išlaikyti atskirus serverius ar aplankus tik šiame įrenginyje per jų nustatymus.", - "originTitle": "Kur prasideda ryšiai", - "originDescription": "Jungtis prie serverių iš šio įrenginio arba per serverį. Tai galima pakeisti kiekvienam serveriui atskirai.", - "originLocal": "Šis įrenginys", - "originRemote": "Serveris", - "entities": { - "hosts": "Serveriai", - "sshCredentials": "Prisijungimo duomenys", - "sshFolders": "Aplankai", - "userPreferences": "Nuostatos", - "pluginUserSettings": "Priedų nustatymai", - "sharedHosts": "Su jumis dalinami serveriai", - "sharedCredentials": "Su jumis dalinami prisijungimo duomenys", - "vaultProfiles": "Vault profiliai", - "snippetFolders": "Kodų fragmentų aplankai", - "snippets": "Kodų fragmentai", - "dashboardServiceLinks": "Paslaugų nuorodos", - "homepageItems": "Pradinio puslapio elementai", - "networkTopology": "Tinklo schema", - "workspaces": "Darbo aplinkos", - "hostDefaults": "Serverio numatytieji nustatymai", - "hostDefaultsAdmin": "Serverio serverių numatytieji nustatymai", - "aiProviders": "AI tiekėjai", - "homepageLayouts": "Pradinio puslapio išdėstymai", - "accountProfile": "Paskyros profilis" - }, "proxy": { - "title": "Atvirkštinis šliuzas", - "description": "Reikalinga tik tada, kai prieš jūsų serverį yra kažkas panašaus į Cloudflare Access ar prisijungimo puslapį.", "headersTitle": "Papildomos antraštės", "headersHint": "Siunčiamos su kiekvienu užklausimu į serverį, pavyzdžiui, Cloudflare Access paslaugos žetonu.", "headerName": "Antraštės pavadinimas", @@ -2446,8 +1661,7 @@ "username": "Vartotojo vardas", "password": "Slaptažodis", "allowInvalidCertificate": "Pasitikėti savarankiškai pasirašytu sertifikatu", - "allowInvalidCertificateHint": "Tik jūsų pačių serveriui, kai jo sertifikatas nėra iš žinomo centro.", - "saved": "Išsaugota" + "allowInvalidCertificateHint": "Tik jūsų pačių serveriui, kai jo sertifikatas nėra iš žinomo centro." }, "problems": { "invalidUrl": "Tai neatrodo kaip tinklo adresas.", @@ -2489,6 +1703,27 @@ "linking": "Susiejama ir vykdomas pirmasis sinchronizavimas...", "linked": "Susieta. Jūsų duomenys dabar sinchronizuojami.", "signedInAgain": "Prisijungta. Sinchronizavimas vėl vykdomas." + }, + "entities": { + "hosts": "Serveriai", + "sshCredentials": "Prisijungimo duomenys", + "sshFolders": "Aplankai", + "userPreferences": "Nuostatos", + "pluginUserSettings": "Priedų nustatymai", + "sharedHosts": "Su jumis dalinami serveriai", + "sharedCredentials": "Su jumis dalinami prisijungimo duomenys", + "vaultProfiles": "Vault profiliai", + "snippetFolders": "Kodų fragmentų aplankai", + "snippets": "Kodų fragmentai", + "dashboardServiceLinks": "Paslaugų nuorodos", + "homepageItems": "Pradinio puslapio elementai", + "networkTopology": "Tinklo schema", + "workspaces": "Darbo aplinkos", + "hostDefaults": "Serverio numatytieji nustatymai", + "hostDefaultsAdmin": "Serverio serverių numatytieji nustatymai", + "aiProviders": "AI tiekėjai", + "homepageLayouts": "Pradinio puslapio išdėstymai", + "accountProfile": "Paskyros profilis" } }, "hostDefaults": { @@ -2505,37 +1740,18 @@ "resetTitle": "Šis serveris naudoja savo reikšmę. Spustelėkite, kad vėl naudotumėte numatytąją reikšmę iš {{source}}", "clearTitle": "Nustatyta šiame lygyje. Spustelėkite, kad išvalytumėte ir naudotumėte {{source}}", "inheritedTitle": "Paveldama numatytąją reikšmę iš {{source}}", - "titleAdmin": "Serverio hostų numatytieji nustatymai", - "titleUser": "Mano hostų numatytieji nustatymai", - "titleFolder": "Aplanko numatytieji nustatymai: {{name}}", - "descriptionAdmin": "Numatytieji nustatymai visiems šio serverio hostams. Vartotojo asmeniniai nustatymai, aplanko nustatymai arba pats hostas vis tiek gali nustatyti kitą reikšmę. Pakeiskite laukelį, kad nustatytumėte jį čia, arba išvalykite, kad paliktumėte nenustatytą.", - "descriptionUser": "Numatytieji nustatymai visiems jūsų hostams, pakeičiantys serverio nustatymus. Aplankas arba pats hostas vis tiek gali nustatyti kitą reikšmę. Pakeiskite laukelį, kad nustatytumėte jį čia, arba išvalykite, kad paliktumėte nenustatytą.", - "descriptionFolder": "Numatytieji nustatymai hostams šiame aplanke ir jo poaplankiuose, pakeičiantys jūsų asmeninius nustatymus. Hostas vis tiek gali nustatyti kitą reikšmę. Pakeiskite laukelį, kad nustatytumėte jį čia, arba išvalykite, kad paliktumėte nenustatytą.", - "save": "Išsaugoti numatytuosius nustatymus", "saved_one": "Numatytieji nustatymai išsaugoti. Atnaujintas {{count}} hostas.", "saved_few": "Numatytieji nustatymai išsaugoti. Atnaujinta {{count}} hostų.", "saved_many": "Numatytieji nustatymai išsaugoti. Atnaujinta {{count}} hostų.", "saved_other": "Numatytieji nustatymai išsaugoti. Atnaujinta {{count}} hostų.", - "savedInBackground": "Numatytieji nustatymai išsaugoti. Hostai atnaujinami fone.", "appliedToHosts_one": "{{count}} serveris buvo atnaujintas su naujais numatytiesiais nustatymais.", "appliedToHosts_few": "{{count}} serveriai buvo atnaujinti su naujais numatytiesiais nustatymais.", "appliedToHosts_many": "{{count}} serverių buvo atnaujinta su naujais numatytiesiais nustatymais.", "appliedToHosts_other": "{{count}} serverio/serverių buvo atnaujinta su naujais numatytiesiais nustatymais.", - "saveFailed": "Nepavyko išsaugoti numatytųjų nustatymų", - "loadFailed": "Nepavyko įkelti numatytųjų nustatymų", - "confirmTitle": "Išsaugoti numatytuosius nustatymus?", "confirmChanges_one": "{{count}} serveris naudoja šiuos numatytuosius nustatymus ir bus pakeistas.", "confirmChanges_few": "{{count}} serveriai naudoja šiuos numatytuosius nustatymus ir bus pakeisti.", "confirmChanges_many": "{{count}} serverių naudoja šiuos numatytuosius nustatymus ir bus pakeisti.", "confirmChanges_other": "{{count}} serverio/serverių naudoja šiuos numatytuosius nustatymus ir bus pakeisti.", - "confirmNoChanges": "Esamų serverių pakeitimų nėra. Nauji serveriai pradės naudoti šiuos numatytuosius nustatymus.", - "menuMyDefaults": "Mano serverio numatytieji nustatymai", - "folderDefaultsAction": "Aplanko numatytieji nustatymai", - "adminSectionDescription": "Nustatykite numatytuosius nustatymus, kuriuos laikysis kiekvienas šio serverio serveris, visiems serverio nustatymams, įskaitant kiekvieno įskiepio. Vartotojai ir aplankai gali nustatyti savo viršuje, o bet kuris serveris vis tiek gali naudoti savo reikšmę.", - "editServerDefaults": "Redaguoti serverio numatytuosius nustatymus", - "resetMenu": "Atstatyti", - "resetAll": "Viską atstatyti į numatytuosius", - "resetCore": "Jungtį ir SSH atstatyti į numatytuosius", "resetDone_one": "{{count}} serveris dabar naudoja savo numatytuosius nustatymus.", "resetDone_few": "{{count}} serveriai dabar naudoja savo numatytuosius nustatymus.", "resetDone_many": "{{count}} serverių dabar naudoja savo numatytuosius nustatymus.", @@ -2551,38 +1767,11 @@ "fields": { "secretSaved": "Išsaugota. Įveskite, kad pakeistumėte." }, - "sharing": { - "revokeConfirm": "Pašalinti prieigą vartotojui {{name}}?", - "revoke": "Pašalinti prieigą" - }, "manage": { - "searchSettings": "Ieškoti nustatymų", - "noMatchingSettings": "Nėra atitinkančių nustatymų.", - "sections": "Skyriai", - "sectionNeedsAttention": "Čia kažkas reikalauja dėmesio", "needsAttention_one": "Vienas dalykas reikalauja dėmesio.", "needsAttention_few": "{{count}} dalykai reikalauja dėmesio.", "needsAttention_many": "{{count}} dalykų reikalauja dėmesio.", "needsAttention_other": "{{count}} dalyko/dalykų reikalauja dėmesio.", - "bandHost": "Serveris", - "bandFeatures": "Protokoliai ir priedai", - "bandCredential": "Pristatymo duomenys", - "sshConnection": "SSH jungtis", - "errorAddressRequired": "Adresas yra privalomas.", - "errorPortRange": "Naudokite portą nuo 1 iki 65535.", - "defaults": "Numatytieji", - "searchHosts": "Ieškoti serverių", - "searchCredentials": "Ieškoti pristatymo duomenų", - "searchDefaults": "Ieškoti numatytųjų", - "addCredential": "Pridėti pristatymo duomenis", - "nothingMatches": "Nėra atitikmenų", - "nothingYet": "Čia dar nieko nėra", - "emptyHostsHint": "Pridėkite serverį ir jis atsiras čia, tame aplanke, kurį jam nurodysite.", - "emptyCredentialsHint": "Išsaugotus pristatymo duomenis gali naudoti bet kuris serveris.", - "collapse": "Sutraukti", - "expand": "Išskleisti", - "cannotBeUndone": "To negalima atšaukti.", - "hostNotFound": "To serverio nerasta. Pabandykite atnaujinti sąrašą.", "hostCount_one": "{{count}} serveris", "hostCount_few": "{{count}} serveriai", "hostCount_many": "{{count}} serverių", @@ -2590,14 +1779,7 @@ "credentialCount_one": "{{count}} pristatymo duomenų rinkinys", "credentialCount_few": "{{count}} pristatymo duomenų rinkiniai", "credentialCount_many": "{{count}} pristatymo duomenų rinkinių", - "credentialCount_other": "{{count}} pristatymo duomenų rinkinio/rinkinių", - "newHost": "Naujas serveris", - "newCredential": "Nauji pristatymo duomenys", - "advanced": "Išplėstiniai", - "pickHost": "Pasirinkite serverį, kurį norite redaguoti", - "pickCredential": "Pasirinkite pristatymo duomenis, kuriuos norite redaguoti", - "pickDefaults": "Pasirinkite numatytųjų lygmenį, kurį norite redaguoti", - "pickHint": "Visa informacija apie jungtį yra čia, sugrupuota, kad lengviau rastumėte." + "credentialCount_other": "{{count}} pristatymo duomenų rinkinio/rinkinių" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/lv_LV.json b/src/ui/locales/translated/lv_LV.json index 757c0dc06..df20b17d1 100644 --- a/src/ui/locales/translated/lv_LV.json +++ b/src/ui/locales/translated/lv_LV.json @@ -141,7 +141,6 @@ "continue": "Turpināt", "error": "Kļūda", "unsavedChanges": "Nesaglabātas izmaiņas", - "more": "Vairāk", "loading": "Ielādē...", "host": "Resursdators", "selectHost": "Izvēlieties resursdatoru...", @@ -154,7 +153,6 @@ "cancel": "Atcelt", "username": "Lietotājvārds", "login": "Pieteikties", - "logout": "Izrakstīties", "register": "Reģistrēties", "password": "Parole", "confirmPassword": "Apstiprināt paroli", @@ -165,8 +163,6 @@ "rename": "Pārsaukt", "edit": "Rediģēt", "confirm": "Apstiprināt", - "next": "Tālāk", - "previous": "Iepriekšējais", "refresh": "Atsvaidzināt", "language": "Valoda", "backendReconnected": "Servera savienojums atjaunots", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Lasiet par katru no tiem" }, "desktopUpdates": { - "title": "Darbvirsmas lietotne", - "mode": "Atjauninājumi", - "modeHint": "Kā šī lietotne saņem jaunās versijas.", - "manualModeHint": "Šo kopiju nevar atjaunināt pati, tāpēc Termix tikai paziņo, kad ir iznākusi jauna versija.", "modeAutomatic": "Automātiski", "modePrompt": "Vispirms vaicāt", "modeNever": "Nekad", @@ -247,15 +239,6 @@ "onboardingTitle": "Lietotnes atjauninājumi", "onboardingBody": "Tagad darbvirsmas lietotne var atjaunināt pati. Izvēlieties, kā vēlaties saņemt jaunās versijas. To varat mainīt vēlāk Iestatījumos, sadaļā Atjauninājumi.", "onboardingManual": "Šī lietotnes kopija tika instalēta tā, ka to nevar atjaunināt pati, tāpēc Termix paziņos, kad ir iznākusi jauna versija, ar saiti tās lejupielādei.", - "status": "Versija {{version}}", - "statusIdle": "Vēl nav pārbaudīts", - "statusChecking": "Pārbauda atjauninājumus", - "statusAvailable": "Ir pieejama versija {{version}}", - "statusDownloading": "Lejupielādē {{version}} ({{progress}}%)", - "statusReady": "Versija {{version}} ir gatava. Restartējiet, lai to instalētu.", - "statusUpToDate": "Jums ir jaunākā versija", - "statusError": "Neizdevās pārbaudīt atjauninājumus. Mēģiniet vēlreiz vēlāk.", - "checkNow": "Pārbaudīt tagad", "download": "Lejupielādēt", "restart": "Restartēt tagad", "later": "Vēlāk", @@ -269,26 +252,11 @@ "terminal": "Terminālis", "close": "Aizvērt", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopēt paroli", - "copySudoPassword": "Kopēt sudo paroli", - "passwordCopied": "Parole nokopēta starpliktuvē", - "failedToCopyPassword": "Neizdevās kopēt paroli", - "refreshTab": "Atsvaidzināt savienojumu", - "renameTab": "Pārsaukt cilni", "dashboard": "Informācijas panelis", "quickConnect": "Ātrā pieslēgšanās", - "openAsTabHint": "Nospiediet Ctrl+klikšķis vai vidējais klikšķis, lai atvērtu kā cilni", - "openAsTab": "Atvērt kā cilni", - "openInRightDock": "Atvērt labajā dokā", - "closeRightDock": "Aizvērt labo doku", - "toggleRightDock": "Pārslēgt labo doku", "hosts": "Hosti", "credentials": "Piekļuves dati", "connections": "Savienojumi", - "keepSideMenuOpen": "Atstāt izvēlni atvērtu", - "collapseSideMenu": "Sakļaut izvēlni", - "roleAdministrator": "Administrators", - "roleUser": "Lietotājs", "sync": "Sinhronizēt", "reconnectDisconnectedTerminals": "Atkārtoti savienot visus atvienotos termināļus", "reconnectingTerminals_zero": "Atkārtoti savieno {{count}} termināļus", @@ -300,31 +268,12 @@ "reconnectTerminalsFailed_other": "Neizdevās sākt atkārtotu {{count}} termināļu savienošanu", "fullscreenUnsupported": "Šis pārlūks neatbalsta pilnekrāna režīmu", "fullscreenFailed": "Neizdevās pārslēgt pilnekrāna režīmu", - "resetSidebarWidth": "Atiestatīt platumu", - "collapseSidebar": "Sakļaut sānjoslu", - "openSidebar": "Atvērt sānjoslu", "confirmCloseHost": "Aizvērt {{host}}?", - "enterFullscreen": "Ieiet pilnekrāna režīmā (Ctrl+Shift+F)", - "exitFullscreen": "Iziet no pilnekrāna režīma (Ctrl+Shift+F)", - "group": { - "objects": "Jūsu", - "tools": "Rīki", - "system": "Sistēma" - }, - "searchEverything": "Meklēt resursdatorus, cilnes un darbības", - "search": "Meklēt", "hiddenCount_zero": "0 slēpti", "hiddenCount_one": "{{count}} slēpts", "hiddenCount_other": "{{count}} slēpti", - "showInRail": "Rādīt sānjoslā", - "moveUp": "Pārvietot uz augšu", - "moveDown": "Pārvietot uz leju", - "resetRailOrder": "Atiestatīt secību", - "hideFromRail": "Paslēpt no sānjoslas", - "openSettings": "Atvērt iestatījumus", "settings": "Iestatījumi", "manage": "Pārvaldīt", - "mobileNavigation": "Navigācija", "plugins": "Spraudņi" }, "hosts": { @@ -930,35 +879,14 @@ "importSummary": "Imports pabeigts: {{imported}} importēti, {{updated}} atjaunināti, {{failed}} neizdevās", "importHostsFailed": "Neizdevās importēt hostus" }, - "commandPalette": { - "searchPlaceholder": "Meklēt hostus, komandas vai iestatījumus...", - "quickActions": "Ātrās darbības", - "navigation": "Navigācija", - "orShortcut": "vai", - "addNewHost": "Pievienot jaunu mezglu", - "adminSettings": "Administratora iestatījumi", - "addCredential": "Pievienot pieteikšanās datus", - "recentActivity": "Nesenā aktivitāte", - "serversAndHosts": "Serveri un mezgli", - "noHostsFound": "Nav atrasts neviens mezgls, kas atbilstu „{{search}}”", - "links": "Saites", - "navigate": "Navigācija", - "select": "Izvēlēties", - "pluginActions": "Citas darbības", - "noTargetTab": "Nav atvērta neviņa termināļa cilne", - "documentation": "Dokumentācija" - }, "splitScreen": { "title": "Sadālīts ekrāns", "defaultLabel": "Sadale {{number}}", "splitRight": "Sadalīt pa labi", "splitDown": "Sadalīt uz leju", - "addToSplit": "Pievienot sadaļai {{split}}", "paneEmptyItem": "Logs {{index}}: tukšs", "paneItem": "Logs {{index}}: {{label}}", "paneNumber": "Logs {{index}}", - "newPaneRight": "Jauns logs pa labi", - "newPaneBelow": "Jauns logs zemāk", "emptyTitle": "Tukšs logs", "emptyHint": "Izvēlieties, ko šeit parādīt. Kamēr šis logs ir izvēlēts, viss, ko atverat no sānjoslas, tiek atvērts arī šeit.", "openTabs": "Atvērtās cilnes", @@ -975,7 +903,6 @@ "clearPane": "Iztukšot šo logu", "zoom": "Palielināt logu", "unzoom": "Atjaunot izkārtojumu", - "unsplit": "Apvienot", "layouts": "Izkārtojumi", "applyLayout": "Mainīt izkārtojumu", "maxPanes_zero": "Sadalījumā var būt līdz 0 paneļiem", @@ -985,8 +912,6 @@ "dropHere": "Nolaidīt, lai rādītu šeit", "paneActions": "Loga darbības", "dividerHint": "Velciet, lai mainītu izmēru. Noklikšķiniet divreiz, lai izlīdzinātu.", - "openInSplit": "Atvērt sadalījumā", - "openInNewSplit": "Jauns sadalījums ar pašreizējo cilni", "shortcuts": "Saīsinājumi", "shortcutNavigate": "Pārvietoties starp logiem", "presets": { @@ -1000,23 +925,6 @@ "grid6": "Režģis ar sešiem" } }, - "connections": { - "noConnections": "Nav savienojumu", - "noConnectionsDesc": "Atveriet termināli, failu pārvaldnieku vai attāldesktopu, lai šeit redzētu savienojumus", - "connectedFor": "Savienots kopš {{duration}}", - "connected": "Savienots", - "disconnected": "Atvienots", - "reconnect": "Atkārtoti savienot", - "sectionOpen": "Atvērts", - "sectionBackground": "Fona režīms", - "backgroundDesc": "Sesijas saglabājas {{minutes}} minūtes pēc atvienošanās un tās var atkārtoti savienot.", - "expiresIn": "Beidzas pēc {{duration}}", - "search": "Meklēt savienojumus...", - "noSearchResults": "Nav savienojumu, kas atbilstu jūsu meklējumam", - "rename": "Pārsaukt sesiju", - "forgetConfirm": "Vai beigt fona sesiju priekš {{name}}?", - "forget": "Beigt sesiju" - }, "sshAuth": { "totpRequired": "Nepieciešama divu faktoru autentifikācija", "totpCodeLabel": "Verifikācijas kods", @@ -1154,65 +1062,14 @@ "placeholders": { "keyPassword": "atslēgas parole", "pastePrivateKey": "Ielīmējiet savu privāto atslēgu šeit...", - "enterPassword": "Ievadiet savu paroli", - "apiKeyName": "piem., CI Pipeline", - "credentialName": "piem., Production SSH Key", - "optionalDetails": "Papildu detaļas...", - "sshUsername": "piem., root vai deploy", - "hostAddress": "10.0.0.1 vai example.com", - "hostName": "piem., Web Server Production" + "enterPassword": "Ievadiet savu paroli" }, "dashboard": { - "title": "Panelis", - "github": "GitHub", - "reportBug": "Ziņot par kļūdu", - "discord": "Discord", - "docs": "Dokumentācija", - "donate": "Ziedot", - "serverOverview": "Servera pārskats", - "version": "Versija", "updateAvailable": "Pieejams atjauninājums", - "beta": "Beta", - "uptime": "Darbības laiks", - "database": "Datubāze", - "healthy": "Darbojas", - "error": "Kļūda", - "totalHosts": "Kopā hostu", - "totalCredentials": "Kopā akreditācijas datu", - "recentActivity": "Nesenā aktivitāte", - "reset": "Atiestatīt", - "noRecentActivity": "Nav nesenās aktivitātes", - "quickActions": "Ātrās darbības", - "addHost": "Pievienot hostu", - "addCredential": "Pievienot akreditācijas datus", - "adminSettings": "Administratora iestatījumi", - "userProfile": "Lietotāja profils", - "serverStats": "Servera statistika", - "customizeLayout": "Pielāgot paneli", - "justNow": "tikko" + "beta": "Beta" }, "dashboardTab": { "stable": "STABILA", - "registerNewServer": "Reģistrēt jaunu serveri", - "storeSshKeysOrPasswords": "Glabāt SSH atslēgas vai paroles", - "manageUsersAndRoles": "Pārvaldīt lietotājus un lomas", - "manageYourAccount": "Pārvaldīt savu kontu", - "hostStatus": "Hosta statuss", - "noHostsConfigured": "Nav konfigurētu hostu", - "checking": "PĀRBAUDA", - "commandPalette": "Komandu palete", - "done": "Gatavs", - "clear": "Notīrīt", - "dragToResizeColumns": "Velciet, lai mainītu kolonnu platumu", - "hostsAvailable": "Pieejamie mezgli", - "removeSection": "Noņemt sadaļu", - "addSection": "Pievienot sadaļu", - "allSectionsShown": "Viss jau atrodas informācijas panelī.", - "fromPlugins": "No spraudņiem", - "dropHere": "Ielieciet sadaļu šeit", - "dragToReorder": "Velciet sadaļas, lai pārkārtotu tās", - "clearActivityConfirm": "Vai notīrīt jūsu nesenā darbība?", - "resetConfirm": "Vai atiestatīt informācijas paneli uz noklusējuma izkārtojumu?", "onlineCount_zero": "{{count}} tiešsaistē", "onlineCount_one": "{{count}} tiešsaistē", "onlineCount_other": "{{count}} tiešsaistē", @@ -1221,425 +1078,48 @@ "hostCount_other": "{{count}} mezgli" }, "admin": { - "sectionGeneral": "Vispārīgi", - "sectionUsers": "Lietotāji", - "sectionSessions": "Sesijas", - "sectionRoles": "Lomas", - "sectionDatabase": "Datubāze", - "sectionApiKeys": "API atslēgas", - "sectionAuditLog": "Audita žurnāls", - "sectionSsl": "HTTPS sertifikāts", - "sectionBranding": "Baltā etiķete", - "brandingAppName": "Lietotnes nosaukums", - "brandingAppNameDesc": "Rādīts pieteikšanās ekrānā un pārlūkprogrammas cilnē. Atstājiet tukšu, lai izmantotu \"Termix\".", - "brandingTagline": "Uzraksts", - "brandingTaglineDesc": "Rādīts zem lietotnes nosaukuma pieteikšanās ekrānā. Atstājiet tukšu, lai izmantotu noklusējuma uzrakstu.", - "brandingLogo": "Logotips", - "brandingLogoDesc": "PNG, JPEG vai WEBP, līdz 750 KB. Nomaina noklusējuma ikonu pieteikšanās ekrānā un pārlūkprogrammas cilnē.", - "brandingLogoUpload": "Augšupielādēt logotipu", - "brandingLogoReset": "Atiestatīt uz noklusējumu", - "brandingLogoInvalid": "Nederīga attēla fails. Izmantojiet PNG, JPEG vai WEBP failu līdz 750 KB.", - "brandingSaved": "Zīmola iestatījumi saglabāti", - "brandingSaveFailed": "Neizdevās saglabāt zīmola iestatījumus", - "sslDescription": "Sertifikāts, ko Termix izmanto HTTPS. Šeit varat augšupielādēt savu, vai iegūt un atjaunot no Let's Encrypt ACME sertifikātu sadaļā.", - "sslDocsLink": "Apskatīt SSL dokumentāciju", - "sslCertStatus": "Sertifikāta statuss", - "sslCertStatusNone": "Nav sertifikāta", - "sslCertStatusValid": "Derīgs", - "sslCertStatusExpiring": "Drīz beidzas", - "sslCertStatusExpired": "Beidzies", - "sslCertExpiresAt": "Beidzas {{date}}", - "sslInfoNote": "Pēc sertifikāta izdošanas vai augšupielādes Termix automātiski aktivizēs HTTPS uz SSL_PORT (noklusējums 8443) papildus esošajam HTTP portam. Pārliecinieties, ka šis ports ir publicēts/atspoguļots šim konteineram, lai tas būtu sasniedzams.", - "sslManualCert": "Sertifikāts (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Privātā atslēga (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Ielīmējiet savu esošo sertifikātu un privāto atslēgu, ieskaitot pilnu ķēdi, ja to prasa jūsu CA.", - "sslManualUpload": "Augšupielādēt un instalēt sertifikātu", - "sslManualUploadLoading": "Augšupielādē sertifikātu...", - "sslManualUploadSuccess": "Sertifikāts veiksmīgi augšupielādēts un instalēts", - "sslManualUploadFailed": "Sertifikāta augšupielāde neizdevās", - "sslManualRequiresFields": "Sertifikāts un privātā atslēga ir obligāti", - "auditLogTotal": "{{total}} kopā ieraksti", - "auditLogEmpty": "Nav atrasts neviens audita žurnāla ieraksts", - "auditLogSuccess": "Veiksmīgi", - "auditLogFailed": "Neizdevās", - "auditLogClearFilters": "Notīrīt filtrus", - "auditLogPage": "Lapa {{page}} no {{totalPages}} ({{total}} kopā)", - "auditLogIp": "IP", - "auditLogResourceId": "Resursa ID", - "auditLogFilterUser": "Lietotājs", - "auditLogFilterAction": "Darbība", - "auditLogFilterResourceType": "Resursa tips", - "auditLogFilterStatus": "Statuss", - "auditLogFilterFrom": "No", - "auditLogFilterTo": "Līdz", - "auditLogFilterAll": "Visi", - "allowRegistration": "Atļaut lietotāju reģistrāciju", - "allowRegistrationDesc": "Ļaut jauniem lietotājiem pašiem reģistrēties, izmantojot lietotājvārdu un paroli", - "allowPasswordLogin": "Atļaut pieteikšanos ar paroli", - "allowPasswordLoginDesc": "Pieteikšanās ar lietotājvārdu un paroli", - "externalAutoProvision": "Automātiski izveidot ārējos kontus", - "externalAutoProvisionDesc": "Izveidot kontu pirmo reizi, kad kāds pieteicas, izmantojot ārēju pieteikšanās metodi, piemēram, SSO vai LDAP. Ja ir izslēgts, šādi var pieteikt tikai tie, kuriem konts jau pastāv", - "secondFactorAfterExternalLogin": "Pēc ārējas pieteikšanās (SSO, GitHub, Google, LDAP) prasīt otro autentifikācijas faktoru", - "secondFactorAfterExternalLoginDesc": "Ja ir izslēgts, reģistrēts otrais faktors tiek prasīts tikai pēc pieteikšanās ar paroli un citām lokālām metodēm, kā iepriekš. Ja ir ieslēgts, tas tiek prasīts pēc katras pieteikšanās metodes, tostarp SSO un LDAP", - "allowPasswordReset": "Atļaut paroles atiestatīšanu", - "allowPasswordResetDesc": "Atiestatīšanas kods caur Docker žurnāliem", - "auditForwardingTitle": "Pārsūtīt uz SIEM", - "auditForwardingDesc": "Sūtīt katras revīzijas ieraksta kopiju ārējā savācējā NDJSON formātā. Vietējie žurnāli paliek galīgais avots", - "auditForwardingEnvNotice": "Pārsūtīšanu var konfigurēt arī ar vides mainīgo; šeit saglabātā URL ir prioritāra", - "auditForwardingToken": "Bearer žetons (neobligāts)", - "auditForwardingTokenStored": "Bearer žetons (saglabāts)", - "auditForwardingSaved": "Revīzijas pārsūtīšanas iestatījumi saglabāti", - "auditForwardingSaveError": "Neizdevās saglabāt revīzijas pārsūtīšanas iestatījumus", - "sessionTimeout": "Sesijas time out", - "hours": "stundas", - "sessionTimeoutRange": "Min 1h, maks 720h", - "monitoringDefaults": "Pārskatīšanas noklusējuma iestatījumi", - "statusCheck": "Statusa pārbaude", - "sec": "sek", - "logLevel": "Žurnāla līmenis", "usersCount_zero": "0 lietotāji", "usersCount_one": "{{count}} lietotājs", - "usersCount_other": "{{count}} lietotāji", - "searchUsers": "Meklēt lietotājus...", - "noUsers": "Nav lietotāju", - "noUsersMatch": "Nav lietotāju, kas atbilstu meklējumam", - "pageOf": "Lapa {{page}} no {{total}}", - "createUser": "Izveidot", - "newRole": "Jauna loma", - "roleName": "Nosaukums", - "roleDisplayName": "Attāmajā nosaukums", - "roleDescription": "Apraksts", "rolesCount_zero": "0 lomas", "rolesCount_one": "{{count}} loma", - "rolesCount_other": "{{count}} lomas", - "createRole": "Izveidot", - "creating": "Izveido...", - "exportDatabase": "Eksportēt datubāzi", - "exportDatabaseDesc": "Lejupielādēt pārnēsājamu SQLite rezerves kopiju ar visiem hostiem, akreditācijas datiem un iestatījumiem", - "export": "Eksportēt", - "exporting": "Eksportē...", - "importDatabase": "Importēt datubāzi", - "importDatabaseDesc": "Atjaunot no pārnēsājamas .sqlite rezerves kopijas jebkurā datubāzes backendā", - "importDatabaseSelected": "Atlasīts: {{name}}", - "selectFile": "Izvēlēties failu", - "changeFile": "Mainīt", - "import": "Importēt", - "importing": "Importē...", "apiKeysCount_zero": "0 atslēgas", "apiKeysCount_one": "{{count}} atslēga", - "apiKeysCount_other": "{{count}} atslēgas", - "apiKeysDocsLink": "Apskatīt dokumentāciju", - "apiKeysCliHint": "Izmantojiet API atslēgu kopā ar Termix CLI, lai pārvaldītu serverus no termināļa.", - "apiKeysCliLink": "Apskatīt CLI dokumentāciju", - "newApiKey": "Jauna API atslēga", - "apiKeyCreatedWarning": "Atslēga izveidota — nokopējiet to tagad, tā vairs netiks rādīta.", - "apiKeyName": "Nosaukums", - "apiKeyUser": "Lietotājs", - "apiKeySelectUser": "Izvēlieties lietotāju...", - "apiKeyExpiresAt": "Beidzas", - "createKey": "Izveidot atslēgu", - "apiKeyNoExpiry": "Nav derīguma termiņa", - "revokedBadge": "ATSAUKTA", - "authTypeDual": "Divu faktoru autentifikācija", - "authTypeExternal": "Ārēja", - "authTypeLocal": "Vietējā", - "adminStatusAdministrator": "Administrators", - "adminStatusRegularUser": "Parasts lietotājs", - "adminBadge": "ADMIN", - "systemBadge": "SIST", - "customBadge": "PĒC PASŪTĪJUMA", - "youBadge": "JŪS", "sessionsActive_zero": "0 aktīvas", "sessionsActive_one": "{{count}} aktīva", - "sessionsActive_other": "{{count}} aktīvas", - "sessionActive": "Aktīvs: {{time}}", - "sessionExpires": "Beidzas: {{time}}", - "revokeAll": "Visi", - "revokeAllSessionsSuccess": "Visas lietotāja sesijas atsauktas", - "revokeAllSessionsFailed": "Neizdevās atsaukt sesijas", - "revokeSessionFailed": "Neizdevās atsaukt sesiju", - "addRole": "Pievienot lomu", - "noCustomRoles": "Nav definētas pielāgotas lomas", - "removeRoleFailed": "Neizdevās noņemt lomu", - "assignRoleFailed": "Neizdevās piešķirt lomu", - "userAdminAccess": "Administrators", - "userAdminAccessDesc": "Pilnīga piekļuve visiem administratora iestatījumiem", - "userRoles": "Lomas", - "revokeAllUserSessions": "Atsaukt visas sesijas", - "revokeAllUserSessionsDesc": "Piespiedīti pieteikties visās ierīcēs", - "revoke": "Atsaukt", - "deleteUserWarning": "Šī lietotāja dzēšana ir neatgriezeniska.", - "deleteUser": "Dzēst {{username}}", - "deleting": "Dzēš...", - "deleteUserFailed": "Neizdevās dzēst lietotāju", - "deleteUserSuccess": "Lietotājs \"{{username}}\" izdzēsts", - "deleteRoleSuccess": "Loma \"{{name}}\" izdzēsta", - "revokeKeySuccess": "Atslēga \"{{name}}\" atsaukta", - "revokeKeyFailed": "Neizdevās atsaukt atslēgu", - "copiedToClipboard": "Nokopēts starpliktuvē", - "done": "Gatavs", - "createUserTitle": "Izveidot lietotāju", - "createUserDesc": "Izveidojiet jaunu vietējo kontu.", - "createUserUsername": "Lietotājvārds", - "createUserPassword": "Parole", - "createUserPasswordHint": "Vismaz 6 rakstzīmes.", - "createUserEnterUsername": "Ievadiet lietotājvārdu", - "createUserSubmit": "Izveidot lietotāju", - "editUserTitle": "Pārvaldīt lietotāju: {{username}}", - "editUserDesc": "Rediģēt lomas, administratora statusu, sesijas un konta iestatījumus.", - "editUserUsername": "Lietotājvārds", - "editUserAuthType": "Autentifikācijas veids", - "editUserAdminStatus": "Administratora statuss", - "editUserUserId": "Lietotāja ID", - "linkAccountTitle": "Saites konti", - "linkAccountDesc": "Apvienojiet ārējo kontu {{username}} ar esošo vietējo kontu.", - "linkAccountDescLocal": "Saites vietējo kontu {{username}} ar esošo tikai ārējo kontu.", - "linkAccountWarningTitle": "Tas izdarīs šādu:", - "linkAccountEffect1": "Dzēst kontu, kas ir tikai ārējā autentifikācijā", - "linkAccountEffect2": "Pievienot tā ārējo pieteikšanos mērķa kontam", - "linkAccountEffect3": "Ļaut pieteikties gan ar ārējo autentifikāciju, gan ar paroli", - "linkAccountTargetUsername": "Vietējā konta lietotājvārds", - "linkAccountTargetPlaceholder": "Ievadiet vietējā konta lietotājvārdu, kam piesaistīt", - "linkAccountExternalUsername": "Ārējā konta lietotājvārds", - "linkAccountExternalPlaceholder": "Ievadiet tikai ārējā konta lietotājvārdu, ko apvienot", - "linkAccountExternalNotFound": "Ar šo lietotājvārdu netika atrasts neviens konts, kas ir tikai ārējā autentifikācijā", - "linkAccounts": "Piesaistīt kontus", - "linkAccountSuccess": "Konti veiksmīgi piesaistīti", - "linkAccountFailed": "Neizdevās piesaistīt kontus", - "linkAccountInProgress": "Piesaista...", - "unlinkAccountTitle": "Atsaistīt ārējo pieteikšanos", - "unlinkAccountDesc": "Noņemt ārējo pieteikšanos no {{username}}. Viņi varēs pieteikties tikai ar paroli.", - "unlinkAccountWarning": "Tas noņems ārējo pieteikšanos no šī konta. Lietotājam ir jābūt iestatītai parolei, lai turpinātu pieteikties.", - "unlinkAccount": "Atsaistīt ārējo pieteikšanos", - "unlinkAccountInProgress": "Atsaista...", - "unlinkAccountSuccess": "Ārējā pieteikšanās atsaukta", - "unlinkAccountFailed": "Neizdevās atsaukt ārējo pieteikšanos", - "updateRegistrationFailed": "Neizdevās atjaunināt reģistrācijas iestatījumu", - "updatePasswordLoginFailed": "Neizdevās atjaunināt paroles pieteikšanās iestatījumu", - "updateSecondFactorAfterExternalLoginFailed": "Neizdevās atjaunināt otrā faktora iestatījumu", - "updatePasswordResetFailed": "Neizdevās atjaunināt paroles atiestatīšanas iestatījumu", - "sessionTimeoutRange2": "Sesijas derīguma termiņam ir jābūt no 1 līdz 720 stundām", - "sessionTimeoutSaved": "Sesijas derīguma termiņš saglabāts", - "sessionTimeoutSaveFailed": "Neizdevās saglabāt sesijas derīguma termiņu", - "monitoringIntervalInvalid": "Nederīgas intervāla vērtības", - "monitoringSaved": "Pārraudzības iestatījumi saglabāti", - "monitoringSaveFailed": "Neizdevās saglabāt pārraudzības iestatījumus", - "logLevelUpdateFailed": "Neizdevās atjaunināt žurnāla līmeni", - "createUserRequired": "Lietotājvārds un parole ir obligāti", - "createUserPasswordTooShort": "Parolei ir jābūt vismaz 6 rakstzīmes garai", - "createUserSuccess": "Lietotājs \"{{username}}\" izveidots", - "createUserFailed": "Neizdevās izveidot lietotāju", - "updateAdminStatusFailed": "Neizdevās atjaunināt administratora statusu", - "allSessionsRevoked": "Visas sesijas atsauktas", - "revokeSessionsFailed": "Neizdevās atsaukt sesijas", - "manageUserData": "Pārvaldīt lietotāja datus", - "backToUsers": "Atpakaļ pie lietotājiem", - "manageTabAccount": "Konts", - "manageTabHosts": "Resursdatori", - "manageTabCredentials": "Piekļuves dati", - "manageTabSessions": "Sesijas", - "manageTabDanger": "Bīstamība", - "manageEditorBack": "Atpakaļ pie {{username}} datiem", - "dataLockedBadge": "SLĒGTS", - "dataLockedNotice": "{{username}} dati paliek slēgti līdz nākamajai pieteikšanās reizei. Līdz tam nav iespējams skatīt vai rediģēt viņa resursdatorus, piekļuves datus un fragmentus.", - "resetPasswordTitle": "Atiestatīt paroli", - "resetPasswordExternalOnly": "Šis lietotājs pieteicas caur ārējo pakalpojumu un nav paroles.", - "resetPasswordPlaceholder": "Jaunā parole", - "resetPasswordBtn": "Atiestatīt", - "resetPasswordWorking": "Atiestata...", - "resetPasswordSuccess": "Parole atiestatīta", - "resetPasswordSuccessWiped": "Parole atiestatīta. Lietotāja šifrētie dati tika dzēsti.", - "resetPasswordFailed": "Neizdevās atiestatīt paroli", - "resetPasswordConfirmWipe": "{{username}} nav pieteicies kopš šifrēšanas atjauninājuma, tāpēc viņa datus nevar atgūt. Atiestatot tagad, tiks dzēsti viņa resursdatori, piekļuves dati un fragmenti. Turpināt?", - "manageApiKeys": "API atslēgas", - "apiKeyNamePlaceholder": "Atslēgas nosaukums", - "apiKeyCopyNotice": "Nokopējiet šo atslēgu tagad, tā vairs netiks rādīta.", - "noApiKeysForUser": "Nav API atslēgu", - "apiKeyDeleteFailed": "Neizdevās dzēst API atslēgu", - "exportUserData": "Datu eksports", - "exportUserDataDesc": "Lejupielādējiet šī lietotāja hostus, pieteikšanās datus un failu pārvaldnieka datus kā JSON. Noslēpumi tiek atšifrēti.", - "exportUserDataSuccess": "Lietotāja dati eksportēti", - "exportUserDataFailed": "Neizdevās eksportēt lietotāja datus", "hostsCount_zero": "0 mezgli", "hostsCount_one": "{{count}} mezgls", "hostsCount_other": "{{count}} mezgli", - "addHostForUser": "Pievienot hostu", - "noHostsForUser": "Šim lietotājam nav hostu", - "connectToHost": "Savienot", - "deleteHostConfirm": "Dzēst hostu \"{{name}}\", kas pieder {{username}}?", - "hostDeletedSuccess": "Hosts izdzēsts", - "hostDeleteFailed": "Neizdevās dzēst hostu", "credentialsCount_zero": "0 akreditācijas dati", "credentialsCount_one": "{{count}} akreditācijas dati", "credentialsCount_other": "{{count}} akreditācijas dati", - "addCredentialForUser": "Pievienot pieteikšanās datus", - "noCredentialsForUser": "Šim lietotājam nav pieteikšanās datu", - "deleteCredentialConfirm": "Dzēst pieteikšanās datus \"{{name}}\", kas pieder {{username}}?", - "credentialDeletedSuccess": "Pieteikšanās dati izdzēsti", - "credentialDeleteFailed": "Neizdevās dzēst pieteikšanās datus", - "noSessionsForUser": "Nav aktīvu sesiju", - "deleteSuccessorLabel": "Pārdot hostus un pieteikšanās datus", - "deleteSuccessorMe": "Man (dzēšamajam administratoram)", - "deleteSuccessorNone": "Nevienam, izdzēst tos", - "deleteSuccessorDesc": "Viss, ko šis lietotājs ir kopīgojis, turpinās darboties jaunā īpašnieka pārziņā; izvēloties nevienu, tiks dzēsti viņa hosti, pieteikšanās dati un kopīgojumi.", - "deleteUserDangerDesc": "Neatgriezeniski dzēst {{username}} un visus viņa datus (hostus, pieteikšanās datus, fragmentus, vēsturi). Šo darbību nevar atsaukt.", - "deleteUserConfirm": "Neatgriezeniski dzēst {{username}} un visus viņa datus?", - "deleteUserAdminBlocked": "Pirms šī lietotāja dzēšanas noņemiet administratora statusu.", - "createRoleRequired": "Vārds un attēlojamais vārds ir obligāti", - "createRoleSuccess": "Loma \"{{name}}\" izveidota", - "createRoleFailed": "Neizdevās izveidot lomu", - "apiKeyNameRequired": "Atslēgas nosaukums ir obligāts", - "apiKeyUserRequired": "Lietotāja ID ir obligāts", - "apiKeyCreatedSuccess": "API atslēga \"{{name}}\" izveidota", - "apiKeyCreateFailed": "Neizdevās izveidot API atslēgu", - "exportSuccess": "Datubāze veiksmīgi eksportēta", - "exportFailed": "Datubāzes eksports neizdevās", - "importSelectFile": "Lūdzu, vispirms izvēlieties failu", - "importCompleted": "Imports pabeigts: {{total}} elementi importēti, {{skipped}} izlaisti", - "importFailed": "Imports neizdevās: {{error}}", - "importError": "Datubāzes imports neizdevās", - "sectionHostDefaults": "Hostu noklusējuma iestatījumi", "rolePermissions": { "count_zero": "0 atļaujas", "count_one": "{{count}} atļauja", - "count_other": "{{count}} atļaujas", - "editAction": "Rediģēt atļaujas", - "loadError": "Neizdevās ielādēt atļauju katalogu", - "saved": "Lomas atļaujas saglabātas", - "saveError": "Neizdevās saglabāt lomas atļaujas", - "save": "Saglabāt", - "saving": "Saglabā...", - "pluginDisabled": "Spraudnis atspējots", "groups": { "hosts": "Hosti", "credentials": "Pieteikšanās dati", "admin": "Administrācija" } - }, - "notificationPrivateEndpoints": "Atļautie privātie paziņojumu hosti", - "notificationPrivateEndpointsDesc": "Precīzi privātie hosti, kurus paziņojumu kanāli var sazināties. Atdaliet tos ar komatiem.", - "updateNotificationEndpointsFailed": "Neizdevās atjaunināt paziņojumu galapunktu atļauju sarakstu", - "secondFactorsSectionTitle": "Otrie faktori", - "secondFactorsNone": "Nav reģistrēti otrie faktori", - "secondFactorUnavailable": "Nav pieejams", - "resetSecondFactors": "Atiestatīt otros faktorus", - "resetSecondFactorsConfirm": "Noņemt visus otros faktorus lietotājam {{username}}? Viņš varēs pieteikties ar paroli vai SSO un reģistrēties vēlreiz.", - "secondFactorsResetSuccess": "Otrā faktora autentifikācija ir atiestatīta", - "secondFactorsResetFailed": "Neizdevās atiestatīt otrā faktora autentifikāciju", - "passwordLoginForced": "Paroles pieteikšanās ir izslēgta, taču nav iespējots cits pieteikšanās veids, tāpēc tā pagaidām paliek ieslēgta. Neviens netiks atstāts bez piekļuves.", - "sslNotRenewed": "Šo sertifikatu nekas neatjaunina. Tā derīguma termiņš beidzas {{date}}. Ieslēdziet automātisko atjaunošanu ACME sertifikātu sadaļā vai pirms tam augšupielādējiet jaunu sertifikātu.", - "sslSelfSigned": "Pašparakstīts sertifikāts, ko izveidoja Termix. Pārlūkprogrammas par to brīdinās.", - "sslRenewedBy": "Automātiski atjaunots ar {{plugin}}", - "sslIssuer": "Izsniedzis {{issuer}}", - "sslNames": "Aptver {{names}}", - "sslManualTitle": "Augšupielādēt sertifikātu", - "updateExternalAutoProvisionFailed": "Neizdevās atjaunināt automātiskās izveides iestatījumu", - "hostTags": "Iepriekš noteiktās serveru atslēgvārdi", - "hostTagsDesc": "Atslēgvārdi, kurus visi lietotāji redz kā priekšlikumus serveru redaktora. Nospiediet atstarpi vai Enter, lai pievienotu vienu. Atslēgvārda noņemšana šeit to neatceļ no serveriem.", - "hostTagsError": "Neizdevās ielādēt vai saglabāt serveru atslēgvārdu priekšlikumus.", - "revokeAllSessionsConfirm": "Izrakstīt {{username}} no visām ierīcēm?", - "revokeSessionConfirm": "Izrakstīt šo sesiju?", - "revokeSession": "Izrakstīties", - "deleteRoleConfirm": "Dzēst lomu {{name}}?", - "revokeKeyConfirm": "Atcelt API atslēgas {{name}} derīgumu?", - "revokeKey": "Atcelt derīgumu" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Kur", - "who": "Kas", - "hostLabel": "Serveris", - "hostPlaceholder": "192.168.1.1 vai example.com", - "portLabel": "Ports", - "usernameLabel": "Lietotājvārds", - "usernamePlaceholder": "lietotājvārds", - "authLabel": "Autentifikācija", - "passwordLabel": "Parole", - "passwordPlaceholder": "parole", - "privateKeyLabel": "Privātā atslēga", - "privateKeyPlaceholder": "Ielīmējiet privāto atslēgu...", - "credentialLabel": "Akreditatīvi", - "credentialPlaceholder": "Izvēlieties saglabātus akreditatīvus", - "protocolLabel": "Protokols", - "domainLabel": "Domēns", - "domainPlaceholder": "neobligāti", - "connectToAction": "Savienoties ar {{name}}", - "sshProtocol": "SSH", - "noTarget": "Nav instalēta neviena programma, kas varētu izveidot savienojumu ar šāda veida serveri" + "usernameLabel": "Lietotājvārds" }, "keybindings": { - "description": "Piešķiriet taustiņus darbībām terminālī un lietotnē vai mainiet iebūvētās saīsinājuma kombinācijas.", - "defaultsHeading": "Iebūvētie saīsinājumi", - "fixedHeading": "Lietotnes saīsinājumi", - "fixed": { - "splitRight": "Sadalīt pa labi", - "splitDown": "Sadalīt uz leju", - "zoomPane": "Palielināt fokusēto paneli", - "navigatePane": "Pārvietoties starp paneļiem", - "nextTab": "Nākamais cilne", - "previousTab": "Iepriekšējā cilne", - "jumpTab": "Pāriet uz cilni", - "previousView": "Atpakaļ uz iepriekšējo sānjoslas skatu", - "fullscreen": "Pārslēgt pilnekrāna režīmu" - }, - "customHeading": "Pielāgotie saīsinājumi", - "addBinding": "Pievienot saīsinājumu", - "addBindingTitle": "Pievienot saīsinājumu", - "editBindingTitle": "Rediģēt saīsinājumu", - "loading": "Ielādē...", - "noCustomBindings": "Vēl nav pielāgotu saīsinājumu", - "defaultBadge": "Noklusējums", - "customizedBadge": "Pielāgots", - "customize": "Pielāgot", - "resetToDefault": "Atjaunot noklusējuma", - "resetAllToDefaults": "Atjaunot visus uz noklusējuma", - "cancel": "Atcelt", - "saveBinding": "Saglabāt saīsinājumu", - "saveError": "Neizdevās saglabāt tastatūras saīsinājumus", - "pressKeysToRecord": "Taustiņu kombinācija", - "pressKeysPlaceholder": "Noklikšķiniet un nospiediet taustiņus", - "recording": "Nospiediet taustiņus...", - "comboRequiredError": "Vispirms nospiediet taustiņu kombināciju", - "conflictWarning": "Šī kombinācija jau ir pievienota {{combo}}. Saglabājot, tiks aktivizēti abi.", - "actionLabel": "Darbība", "actionNextTab": "Pārslēgties uz nākamo cilni", "actionPreviousTab": "Pārslēgties uz iepriekšējo cilni", "actionOpenCommandPalette": "Atvērt ātro meklēšanu", - "actionReconnectSession": "Atkārtoti savienot pašreizējo sesiju", - "unavailableAction": "{{type}} (nav pieejams)", - "actionRequiredError": "Vispirms izvēlieties darbību", - "deleteConfirm": "Dzēst šo taustiņu saistījumu?", - "resetAllConfirm": "Atjaunot visus taustiņu saistījumus uz noklusējuma?" + "actionReconnectSession": "Atkārtoti savienot pašreizējo sesiju" }, "userProfile": { - "storageModeLocal": "Pārlūks", - "storageModeCloud": "Datubāze", - "storageModeDescription": "Pārlūks glabā iestatījumus tikai šajā pārlūkā. Datubāze sinhronizē ar serveri un ielādē jebkurā ierīcē.", - "resetToDefaults": "Atjaunot noklusējuma", - "resetToDefaultsSuccess": "Iestatījumi atjaunoti uz noklusējuma.", - "storageModeSwitch": "Iepriekšējo uzstādījumu glabāšana", - "sectionAccount": "Konts", - "desktopProfileTitle": "Tikai šī ierīce", - "desktopProfileDescription": "Šis profils atrodas tikai šajā ierīcē un pats pieteicas. Savienojiet to ar Termix serveri, lai izmantotu tos pašus hostus un iestatījumus visās ierīcēs.", - "sectionInterface": "Saskarne", - "interfacePresetDesc": "Cik daudz detaļu Termix rāda. Katra funkcija paliek pieejama.", "preset_simple": "Vienkāršs", "preset_simple_desc": "Tikai pamatlietas.", "preset_balanced": "Balansēts", "preset_balanced_desc": "Standarta izkārtojums.", "preset_advanced": "Papildu", "preset_advanced_desc": "Viss ieslēgts, blīvi iepakots.", - "presetClearOverrides": "Atjaunot visus", - "presetOverridesTitle": "Pielāgots", - "presetRevertArea": "Atgriezties", - "presetConfirmTitle": "Pārslēgties uz {{preset}}?", - "presetConfirmDesc": "Tas atjaunos jūsu sānu joslu, navigāciju, panela izkārtojumu, termināla rīkjoslu un failu pārvaldnieka skatu. Jūsu hosti, akreditācijas dati un sākumlapa netiek skarti.", - "presetConfirmApply": "Piemērot priekšiestatījumu", - "runSetupAgainDesc": "Atkārtoti iziet pirmo palaišanas uzstādījumu.", - "runSetupAgainButton": "Palaidt uzstādījumu", "uiArea_chrome": "Programmas rāmji", "uiArea_hostList": "Hostu saraksts", "uiArea_credentialList": "Akreditācijas datu saraksts", @@ -1648,127 +1128,14 @@ "uiArea_terminal": "Terminālis", "uiArea_fileManager": "Failu pārvaldnieks", "uiArea_hostEditor": "Hostu redaktors", - "sectionAppearance": "Izskats", - "sectionSecurity": "Drošība", - "sectionApiKeys": "API atslēgas", - "sectionData": "Dati", - "usernameLabel": "Lietotājvārds", - "roleLabel": "Loma", - "roleAdministrator": "Administrators", - "authMethodLabel": "Autentifikācijas metode", - "authMethodLocal": "Lokāls", - "twoFaLabel": "2FA", - "twoFaOn": "Ieslēgts", - "twoFaOff": "Izslēgts", - "versionLabel": "Versija", - "cliTitle": "Termix CLI", - "cliDescription": "Atveriet termināļus, izpildiet komandas un pārvietojiet failus no sava apvalka.", - "cliLearnMore": "Uzzināt vairāk", - "deleteAccount": "Dzēst kontu", - "deleteAccountDescription": "Neatgriezeniski dzēst savu kontu", - "deleteButton": "Dzēst", - "deleteAccountPermanent": "Šī darbība ir neatgriezeniska.", - "deleteAccountWarning": "Visas sesijas, mezgli, akreditācijas dati un iestatījumi tiks neatgriezeniski dzēsti.", - "confirmPasswordDeletePlaceholder": "Ievadiet savu paroli, lai apstiprinātu", "languageLabel": "Valoda", "themeLabel": "Tēma", "fontSizeLabel": "Fonta izmērs", "interfaceFontLabel": "Saskarnes fonts", "interfaceFontDescription": "Maina lietotnes saskarnes fontu. Termināļa profili saglabā savus fonta iestatījumus.", "accentColorLabel": "Akcenta krāsa", - "keyboardShortcuts": "Tastatūras saīsinājumi", - "keyboardShortcutsDescription": "Pielāgojiet termināļa kopēšanas, ielīmēšanas un komandu saīsinājumus", - "manageShortcuts": "Pārvaldīt", - "commandPalette": "Komandu palete", - "commandPaletteDesc": "Iespējot tastatūras saīsinājumu", - "reopenTabsOnLogin": "Atkārtoti atvērt cilnes pēc pieteikšanās", - "reopenTabsOnLoginDesc": "Atjaunojiet savas atvērtās cilnes, kad pieteikties vai atsvaidzināt lapu, pat no cita ierīces", - "confirmTabClose": "Apstiprināt cilnes aizvēršanu", - "confirmTabCloseDesc": "Jautājiet pirms termināļa cilņu aizvēršanas", - "showTabNumbers": "Rādīt cilņu numurus", - "showTabNumbersDesc": "Parādiet katras cilnes numuru, lai palīdzētu tās atšķirt", - "settingsAppRail": "Lietotņu sliede", - "sidebarSettingsMoved": "Mezglu sānjoslas attēlošanas iestatījumi ir pārvietoti uz pielāgošanas sānjoslas paneli, ko var atvērt no Mezglu rīkjoslas.", - "showHostTags": "Rādīt mezglu birkas", - "showHostTagsDesc": "Parādīt birkas mezglu sarakstā", - "statusColors": "Reālas statusa krāsas", - "statusColorsDesc": "Izmantojiet zaļu/sarkano tiešsaistes/nepieejamības statusa norādei, nevis akcenta krāsu", - "pinAppRail": "Piespraust lietotņu slīdi", - "pinAppRailDesc": "Turiet kreiso sānjoslas lietotņu slīdi vienmēr izvērstu, nevis izvērstu, kad uz to norāda kursors", - "expandAppRailOnHover": "Izvērst lietotņu slīdi, kad uz to norāda kursors", - "expandAppRailOnHoverDesc": "Ļaujiet kreisajai sānjoslas lietotņu slīdij izvērsties, kad kursors pārvietojas pār to", - "appRailHoverPushesContent": "Pārvietot saturu, kad tas izplešas", - "appRailHoverPushesContentDesc": "Izveidot vietu izplestajai joslai, nevis atvērt to pār lapu. Atvērtās sesijas, piemēram, attālinātais darbvirsma, katru reizi maina izmēru", - "showPinAppRailButton": "Rādīt pogu, lai piesprāustu lietotņu slīdi", - "showPinAppRailButtonDesc": "Rādīt pogu lietotņu slīdē, lai to piesprāustu atvērtu. Noklusējuma stāvoklī ir izslēgts.", - "settingsNavigation": "Navigācija", - "navigationTabsDesc": "Izvēlieties, kuras cilnes parādās lietotņu slīdē", - "settingsUpdates": "Atjauninājumi", - "disableUpdateChecks": "Atspējot atjauninājumu pārbaudi", - "disableUpdateChecksDesc": "Pārtraukt atjauninājumu pārbaudi", - "changePassword": "Mainīt paroli", - "currentPasswordLabel": "Pašreizējā parole", - "currentPasswordPlaceholder": "Pašreizējā parole", - "newPasswordLabel": "Jaunā parole", - "newPasswordPlaceholder": "Jaunā parole", - "confirmPasswordLabel": "Apstiprināt jauno paroli", - "confirmPasswordPlaceholder": "Apstiprināt jauno paroli", - "updatePassword": "Atjaunināt paroli", - "createApiKeyTitle": "Izveidot API atslēgu", - "createApiKeyDescription": "Ģenerējiet jaunu API atslēgu programmatūras piekļuvei.", - "apiKeyNameLabel": "Nosaukums", - "apiKeyNamePlaceholder": "piem., CI Pipeline", - "expiryDateLabel": "Derīguma termiņa beigas", - "optional": "neobligāts", - "cancel": "Atcelt", - "createKey": "Izveidot atslēgu", - "apiKeyCreatedWarning": "Atslēga izveidota – nokopējiet to tagad, tā vairs netiks rādīta.", - "copyApiKey": "Kopēt API atslēgu", - "copiedToClipboard": "Nokopēts starpliktuvē", "apiKeyCount_zero": "0 atslēgas", "apiKeyCount_one": "{{count}} atslēga", - "apiKeyCount_other": "{{count}} atslēgas", - "newKey": "Jauna atslēga", - "noApiKeys": "Vēl nav API atslēgu.", - "apiKeyActive": "Aktīvs", - "apiKeyUsageHint": "Iekļaujiet savu atslēgu", - "apiKeyUsageHintHeader": "virsrakstā.", - "apiKeyPermissionsHint": "Atslēgas manto izveidotāja lietotāja atļaujas.", - "exportData": "Eksportēt manus datus", - "exportDataDesc": "Lejupielādējiet savu hostu, pieteikšanās datu un iestatījumu dublējumu, lai pārnestu uz citu ierīci", - "export": "Eksportēt", - "exporting": "Eksportē...", - "importData": "Importēt manus datus", - "importDataDesc": "Atjaunojiet savus hostus, pieteikšanās datus un iestatījumus no .sqlite dublējuma faila", - "importDataSelected": "Atlasīts: {{name}}", - "selectFile": "Izvēlieties failu", - "changeFile": "Mainīt", - "import": "Importēt", - "importing": "Importē...", - "exportSuccess": "Dati veiksmīgi eksportēti", - "exportFailed": "Datų eksportēšana neizdevās", - "importSelectFile": "Lūdzu, vispirms izvēlieties failu", - "importCompleted": "Importēšana pabeigta: importēti {{total}} elementi, izlaisti {{skipped}}", - "importFailed": "Importēšana neizdevās: {{error}}", - "roleUser": "Lietotājs", - "authMethodDual": "Divu faktoru autentifikācija", - "authMethodExternal": "Ārējs", - "done": "Gatavs", - "apiKeyNameRequired": "Atslēgas nosaukums ir obligāts", - "apiKeyCreated": "API atslēga \"{{name}}\" izveidota", - "apiKeyCreateFailed": "API atslēgas izveide neizdevās", - "apiKeyUser": "Lietotājs", - "apiKeyExpires": "Beidzas", - "apiKeyRevoked": "API atslēga \"{{name}}\" atsaukta", - "apiKeyRevokeFailed": "API atslēgas atsaukšana neizdevās", - "passwordFieldsRequired": "Ir jānorāda gan pašreizējā, gan jaunā parole", - "passwordMismatch": "Paroles nesakrīt", - "passwordTooShort": "Parolei ir jābūt vismaz 6 simbolu garai", - "passwordUpdated": "Parole veiksmīgi atjaunināta", - "passwordUpdateFailed": "Paroles atjaunināšana neizdevās", - "deletePasswordRequired": "Lai dzēstu savu kontu, ir jānorāda parole", - "deleteFailed": "Konta dzēšana neizdevās", - "deleting": "Dzēš...", "colorPickerTooltip": "Atvērt krāsu izvēlni", "themeSystem": "Sistēmas", "themeLight": "Gaišs", @@ -1779,18 +1146,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Pieteicies pie {{server}}", - "linkedProfileDescription": "Šī ierīce izmanto jūsu kontu serverī un saglabā jūsu datu kopiju, tāpēc tā joprojām strādā bezsaistē.", - "manageSync": "Pārvaldīt sinhronizāciju", - "setUpSync": "Sasaistīt ar serveri", - "settingsTabsAndShortcuts": "Cilnes un saīsinājumi", - "onBetaTitle": "Jūs izmantojat beta versiju", - "onBetaDescription": "Paldies, ka testējat. Pastāstiet mums, kas nestrādā.", - "tryBetaTitle": "Izmēģiniet jaunās funkcijas agrāk", - "tryBetaDescription": "Pievienojieties beta programmai sadaļā Atjauninājumi.", - "sendBetaFeedback": "Nosūtīt beta atsauksmes", - "openUpdates": "Atjauninājumi" + "themeGruvbox": "Gruvbox" } } }, @@ -2055,8 +1411,7 @@ "hasDependents": "{{name}} ir nepieciešams {{list}}. Vispirms izslēdziet vai atinstalējiet tos.", "missingDependencies": "{{name}} ir nepieciešams {{list}}, kas nav instalēts.", "consentChanged": "Kas šis spraudnis pieprasa, ir mainījies kopš pēdējās reizes, kad to apskatījāt. Pārbaudiet sarakstu vēlreiz.", - "upload": "Neizdevās izlasīt {{name}}: {{error}}", - "developerMode": "Neizdevās mainīt izstrādātāja režīmu: {{error}}" + "upload": "Neizdevās izlasīt {{name}}: {{error}}" }, "data": { "title": "Glabātie dati", @@ -2188,13 +1543,7 @@ "browsePlugins": "Pārlūkot spraudņus", "loading": "Ielādē", "developer": { - "title": "Spraudņu izstrādātāja režīms", - "hint": "Ļauj administratoriem uzstādīt spraudņus no .tmxplug faila Spraudņu cilnē, izlaižot reģistra pārbaudes. Izmantojiet to, lai izveidotu un testētu savus spraudņus.", - "enableTitle": "Ieslēgt izstrādātāja režīmu?", - "enableBody": "Administratori varēs uzstādīt spraudņus no failiem, kurus Termix nav pārbaudījis. Spraudnis var veikt jebkuras darbības, ko atļauj tā iespējas, tāpēc ieslēdziet to tikai tad, kad izveidojat vai testējat spraudņus.", - "enable": "Ieslēgt", - "installFromFile": "Uzstādīt no faila", - "signedOnly": "Ir iestatīts TERMIX_REQUIRE_SIGNED_PLUGINS, tāpēc uzstādīšana no faila paliek bloķēta." + "installFromFile": "Uzstādīt no faila" }, "count": { "downloads_zero": "Nav lejupielāžu.", @@ -2233,71 +1582,7 @@ "secretSet": "Iestatīts", "secretNotSet": "Nav iestatīts", "secretReplace": "Aizstāt", - "pluginSettingsSaved": "Iestatījumi saglabāti", - "pluginSettingsInvalid": "Dažus iestatījumus neizdevās saglabāt. Pārbaudiet izceltos laukus.", - "pluginSettingsSaveFailed": "Neizdevās saglabāt iestatījumus", - "pluginSettingsLoadFailed": "Neizdevās ielādēt iestatījumus", - "featureUnavailable": "{{name}} pašlaik nav pieejams. Šie iestatījumi ir saglabāti, bet neattieksies.", - "account": "Konts", - "security": "Drošība", - "apiKeys": "API atslēgas", - "data": "Dati un sinhronizācija", - "interface": "Saskarne", - "appearance": "Izskata", - "keybindings": "Atmiņas taustiņu saīsinājumi", - "adminGeneral": "Vispārīgi", - "adminUsers": "Lietotāji", - "adminSessions": "Sesijas", - "adminRoles": "Lomas", - "adminHostDefaults": "Resursdatora noklusējumi", - "adminBranding": "Zīmols", - "adminDatabase": "Datubāze", - "adminSsl": "SSL", - "adminApiKeys": "API atslēgas", - "adminAuditLog": "Audita žurnāls", - "bandYou": "Jūsu konts", - "bandApp": "Šī lietotne", - "bandPlugins": "Spraudņi", - "bandInstance": "Šis serveris", - "searchPlaceholder": "Meklēt iestatījumus", - "noResults": "Nav atrasti atbilstoši iestatījumi.", - "pages": "Lapas", - "instanceSettings": "Servera iestatījumi", - "nothingHere": "Šeit nav ko iestatīt.", - "searchPage": "Meklēt šajā lapā", - "noPageMatches": "Šajā lapā nekas neatbilst.", - "updates": { - "title": "Atjauninājumi", - "betaProgram": "Beta programma", - "betaIntro": "Beta versijas ir nākamās Termix versijas agrīnās izlases. Tās tiek izlaistas otrdienās un piektdienās, ja ir kaut kas jauns, ko izmēģināt. Tajās var būt kļūdas, un jūsu atsauksmes palīdz padarīt stabilo versiju labāku.", - "termixBetas": "Termix beta versijas", - "termixBetasHint": "Paziņo par jaunām beta versijām, ne tikai par stabilajām izlasēm.", - "runningBetaBuild": "Jūs izmantojat beta versiju. Lai to atstātu, pārslēdzieties atpakaļ uz stabilu attēlu vai instalētāju.", - "howToInstall": "Kā iegūt beta versiju", - "desktopInstall": "Lejupielādējiet beta instalētāju un instalējiet to virs pašreizējā.", - "downloadBeta": "Lejupielādēt {{version}}", - "dockerInstall": "Nomainiet savu attēlu uz beta tagu un restartējiet konteineri:", - "copy": "Kopēt", - "copied": "Kopēts", - "copyFailed": "Neizdevās kopēt", - "learnMore": "Uzzināt vairāk par beta versijām", - "feedback": "Atsauksmes", - "feedbackHint": "Atradāt kļūdu vai ir ideja? Tā tieši nonāk izstrādātāju rokās, jau aizpildīta ar jūsu versiju.", - "sendFeedback": "Nosūtīt beta atsauksmi", - "releases": "Izlases", - "thisVersion": "Šī versija", - "newestStable": "Jaunākā stabilā", - "newestBeta": "Jaunākā beta", - "noRelease": "Pašlaik nav", - "pluginBetas": "Spraudņu beta versijas", - "pluginBetasIntro": "Katrs spraudnis var izmantot beta versijas neatkarīgi. Lai to izmēģinātu, atveriet to un nospiediet \"Izmēģināt beta\".", - "openPlugins": "Atvērt spraudņus", - "waitingForStable": "Atgriezies stabilajā. Paliek pie {{version}}, līdz stabilā izlase ir jaunāka.", - "backToStable": "Atgriezties stabilajā", - "allPluginsBeta": "Izmantot beta versijas visiem spraudņiem", - "allPluginsStable": "Visi spraudņi atgriezti stabilajā", - "saveFailed": "Neizdevās saglabāt izmaiņas" - } + "featureUnavailable": "{{name}} pašlaik nav pieejams. Šie iestatījumi ir saglabāti, bet neattieksies." }, "managerCard": { "refresh": "Atsvaidzināt", @@ -2307,86 +1592,16 @@ "filter": "Filtrēt..." }, "sync": { - "server": "Termix serveris", - "account": "Konts", - "status": "Statuss", - "never": "nekad", - "justNow": "tikko", "minutesAgo_zero": "pirms {{count}} minūtēm", "minutesAgo_one": "pirms {{count}} minūtes", "minutesAgo_other": "pirms {{count}} minūtēm", "hoursAgo_zero": "pirms {{count}} stundām", "hoursAgo_one": "pirms {{count}} stundas", "hoursAgo_other": "pirms {{count}} stundām", - "actionFailed": "Tas nestrādāja. Mēģiniet vēlreiz.", - "unlinkedTitle": "Tikai šī ierīce", - "unlinkedBody": "Termix šajā ierīcē strādā neatkarīgi. Savienojiet to ar savu Termix serveri, lai viss būtu sinhronizēts.", - "unlinkedPointHosts": "Jūsu resursi, pieteikšanās dati, fragmenti un iestatījumi seko līdzi uz katru ierīci.", - "unlinkedPointOffline": "Viss joprojām strādā, kad serveri nevar sasniegt, un vēlāk sinhronizējas.", - "unlinkedPointAccount": "Jūs pieteikties ar sava servera kontu, un resursi, ko ar jums ir dalījušies citi, parādās arī šeit.", - "linkButton": "Savienot ar serveri", - "state": { - "syncing": "Sinhronizē", - "offline": "Serveri nevar sasniegt", - "error": "Sinhronizācija apturēta", - "signedOut": "Izrakstījies", - "synced": "Sinhronizēts {{time}}" - }, "pending_zero": "gaida sinhronizāciju {{count}} izmaiņas", "pending_one": "gaida sinhronizāciju {{count}} izmaiņa", "pending_other": "gaida sinhronizāciju {{count}} izmaiņas", - "signInAgain": "Pieteikties vēlreiz", - "syncNow": "Sinhronizēt tagad", - "unlink": "Atsaistīt", - "unlinked": "Šī ierīce vairs nav saistīta", - "unlinkTitle": "Atvienot šo ierīci?", - "unlinkDescription": "Tā aptur sinhronizāciju un izrakstās no servera. Citu lietotāju ar jums kopīgotie mezgli no šīs ierīces tiek noņemti jebkurā gadījumā.", - "unlinkKeepTitle": "Atstāt manus datus šeit", - "unlinkKeepBody": "Jūsu mezgli, pieteikšanās dati un iestatījumi paliek šajā ierīcē un turpina darboties neatkarīgi.", - "unlinkRemoveTitle": "Noņemt sinhronizētos datus", - "unlinkRemoveBody": "No šīs ierīces tiek noņemti visi dati, kas nāca no servera. Paliek tikai tie mezgli, kas saglabāti tikai šajā ierīcē.", - "conflictsTitle": "Konflikti", - "conflictsDescription": "Šie tika mainīti gan šeit, gan serverī vienlaicīgi. Ir lietota servera versija. Saglabājiet savu, lai to nosūtītu serverī vietā.", - "keepMine": "Saglabāt manu", - "keepServer": "Saglabāt servera", - "errorsTitle": "Nav sinhronizēts", - "errorsDescription": "Serveris nepieņēma šīs izmaiņas. Tās paliek šajā ierīcē.", - "errorPermission": "Jūsu kontam serverī nav atļauts veikt šo izmaiņu.", - "retry": "Mēģināt vēlreiz", - "whatSyncs": "Ko sinhronizēt", - "whatSyncsDescription": "Izslēdziet to, ko vēlaties saglabāt tikai šajā ierīcē.", - "coreGroup": "Termix", - "notOnServer": "Serverī šī nav", - "notOnDevice": "Šajā ierīcē vēl nav", - "localOnlyHint": "Jūs varat arī saglabāt atsevišķus mezglus vai mapes tikai šajā ierīcē to iestatījumos.", - "originTitle": "Kur sākas savienojumi", - "originDescription": "Savienojieties ar mezgliem no šīs ierīces vai caur serveri. To varat mainīt katram mezglam atsevišķi.", - "originLocal": "Šī ierīce", - "originRemote": "Serveris", - "entities": { - "hosts": "Mezgli", - "sshCredentials": "Pieteikšanās dati", - "sshFolders": "Mapes", - "userPreferences": "Iepriekšējas izvēles", - "pluginUserSettings": "Spraudņu iestatījumi", - "sharedHosts": "Ar jums kopīgotie mezgli", - "sharedCredentials": "Ar jums kopīgotie pieteikšanās dati", - "vaultProfiles": "Vault profili", - "snippetFolders": "Kodu fragmentu mapes", - "snippets": "Kodu fragmenti", - "dashboardServiceLinks": "Pakalpojumu saites", - "homepageItems": "Sākumlapas elementi", - "networkTopology": "Tīkla karte", - "workspaces": "Darbvietas", - "hostDefaults": "Mezglu noklusējuma vērtības", - "hostDefaultsAdmin": "Servera mezglu noklusējuma vērtības", - "aiProviders": "AI pakalpojumu sniedzēji", - "homepageLayouts": "Sākumlapas izkārtojumi", - "accountProfile": "Konta profils" - }, "proxy": { - "title": "Apgrieztā starpniekserveris", - "description": "Nepieciešams tikai tad, ja pirms servera ir kaut kas līdzīgs Cloudflare Access vai pieteikšanās lapai.", "headersTitle": "Papildu virsraksti", "headersHint": "Nosūtīti kopā ar katru pieprasījumu serverim, piemēram, Cloudflare Access pakalpojuma marķieri.", "headerName": "Virsraksta nosaukums", @@ -2399,8 +1614,7 @@ "username": "Lietotājvārds", "password": "Parole", "allowInvalidCertificate": "Uzticēties pašparakstītam sertifikātam", - "allowInvalidCertificateHint": "Tikai jūsu pašu serverim, ja tā sertifikāts nav no zināmas autoritātes.", - "saved": "Saglabāts" + "allowInvalidCertificateHint": "Tikai jūsu pašu serverim, ja tā sertifikāts nav no zināmas autoritātes." }, "problems": { "invalidUrl": "Šis neizskatās kā tīmekļa adrese.", @@ -2440,6 +1654,27 @@ "linking": "Notiek saites izveide un pirmā sinhronizācija...", "linked": "Saite izveidota. Jūsu dati tagad tiek sinhronizēti.", "signedInAgain": "Pieteicies. Sinhronizācija turpinās." + }, + "entities": { + "hosts": "Mezgli", + "sshCredentials": "Pieteikšanās dati", + "sshFolders": "Mapes", + "userPreferences": "Iepriekšējas izvēles", + "pluginUserSettings": "Spraudņu iestatījumi", + "sharedHosts": "Ar jums kopīgotie mezgli", + "sharedCredentials": "Ar jums kopīgotie pieteikšanās dati", + "vaultProfiles": "Vault profili", + "snippetFolders": "Kodu fragmentu mapes", + "snippets": "Kodu fragmenti", + "dashboardServiceLinks": "Pakalpojumu saites", + "homepageItems": "Sākumlapas elementi", + "networkTopology": "Tīkla karte", + "workspaces": "Darbvietas", + "hostDefaults": "Mezglu noklusējuma vērtības", + "hostDefaultsAdmin": "Servera mezglu noklusējuma vērtības", + "aiProviders": "AI pakalpojumu sniedzēji", + "homepageLayouts": "Sākumlapas izkārtojumi", + "accountProfile": "Konta profils" } }, "hostDefaults": { @@ -2456,34 +1691,15 @@ "resetTitle": "Šis resursdators izmanto savu vērtību. Noklikšķiniet, lai atkal izmantotu noklusējumu no {{source}}", "clearTitle": "Iestatīts šajā līmenī. Noklikšķiniet, lai to izdzēstu un izmantotu {{source}}", "inheritedTitle": "Pārmanto no {{source}}", - "titleAdmin": "Servera hosta noklusējuma iestatījumi", - "titleUser": "Mani hosta noklusējuma iestatījumi", - "titleFolder": "Mapes noklusējuma iestatījumi: {{name}}", - "descriptionAdmin": "Noklusējuma iestatījumi visiem hostiem šajā serverī. Lietotāja paša, mapes vai paša hosta iestatījumi var joprojām noteikt citu vērtību. Lai iestatītu vērtību šeit, mainiet lauku, vai izdzēsiet to, lai atstātu neiestatītu.", - "descriptionUser": "Noklusējuma iestatījumi visiem jūsu hostiem, pārslēdzot servera iestatījumus. Mape vai pats hosts var joprojām noteikt citu vērtību. Lai iestatītu vērtību šeit, mainiet lauku, vai izdzēsiet to, lai atstātu neiestatītu.", - "descriptionFolder": "Noklusējuma iestatījumi hostiem šajā mapē un tās apakšmapēs, pārslēdzot jūsu personīgos iestatījumus. Pats hosts var joprojām noteikt citu vērtību. Lai iestatītu vērtību šeit, mainiet lauku, vai izdzēsiet to, lai atstātu neiestatītu.", - "save": "Saglabāt noklusējuma iestatījumus", "saved_zero": "Noklusējuma iestatījumi saglabāti. Hosti netika atjaunināti.", "saved_one": "Noklusējuma iestatījumi saglabāti. Atjaunināts 1 hosts.", "saved_other": "Noklusējuma iestatījumi saglabāti. Atjaunināti {{count}} hosti.", - "savedInBackground": "Noklusējuma iestatījumi saglabāti. Hosti tiek atjaunināti fona režīmā.", "appliedToHosts_zero": "0 mezgli tika atjaunināti ar jaunajiem noklusējuma iestatījumiem.", "appliedToHosts_one": "{{count}} mezgls tika atjaunināts ar jaunajiem noklusējuma iestatījumiem.", "appliedToHosts_other": "{{count}} mezgli tika atjaunināti ar jaunajiem noklusējuma iestatījumiem.", - "saveFailed": "Neizdevās saglabāt noklusējuma parametrus", - "loadFailed": "Neizdevās ielādēt noklusējuma parametrus", - "confirmTitle": "Saglabāt noklusējuma parametrus?", "confirmChanges_zero": "0 resursdatori izmanto šos noklusējuma parametrus un tiks mainīti.", "confirmChanges_one": "{{count}} resursdators izmanto šos noklusējuma parametrus un tiks mainīts.", "confirmChanges_other": "{{count}} resursdatori izmanto šos noklusējuma parametrus un tiks mainīti.", - "confirmNoChanges": "Eksistējošie resursdatori netiks mainīti. Jaunie resursdatori sāks ar šiem noklusējuma parametriem.", - "menuMyDefaults": "Mani resursdatora noklusējuma parametri", - "folderDefaultsAction": "Mapes noklusējuma parametri", - "adminSectionDescription": "Iestatiet noklusējuma parametrus, kuriem seko katrs resursdators šajā serverī, katram resursdatora iestatījumam, ieskaitot katras spraudņa iestatījumus. Lietotāji un mapes var iestatīt savus parametrus virs šiem, un jebkurš resursdators joprojām var izmantot savus parametrus.", - "editServerDefaults": "Rediģēt servera noklusējuma parametrus", - "resetMenu": "Atiestatīt", - "resetAll": "Atiestatīt visu uz noklusējuma vērtībām", - "resetCore": "Atiestatīt savienojumu un SSH uz noklusējuma vērtībām", "resetDone_zero": "0", "resetDone_one": "{{count}} resursdators tagad izmanto savas noklusējuma vērtības.", "resetDone_other": "{{count}} resursdatori tagad izmanto savas noklusējuma vērtības." @@ -2498,50 +1714,16 @@ "fields": { "secretSaved": "Saglabāts. Ierakstiet, lai to aizvietotu." }, - "sharing": { - "revokeConfirm": "Vai noņemt piekļuvi lietotājam {{name}}?", - "revoke": "Noņemt piekļuvi" - }, "manage": { - "searchSettings": "Meklēt iestatījumus", - "noMatchingSettings": "Nav atbilstošu iestatījumu.", - "sections": "Sadaļas", - "sectionNeedsAttention": "Šeit kaut kas prasa uzmanību", "needsAttention_zero": "0", "needsAttention_one": "Viena lieta prasa uzmanību.", "needsAttention_other": "{{count}} lietas prasa uzmanību.", - "bandHost": "Resursdators", - "bandFeatures": "Protokoli un spraudņi", - "bandCredential": "Akreditācijas dati", - "sshConnection": "SSH savienojums", - "errorAddressRequired": "Adrese ir obligāta.", - "errorPortRange": "Izmantojiet portu no 1 līdz 65535.", - "defaults": "Noklusējuma vērtības", - "searchHosts": "Meklēt resursdatorus", - "searchCredentials": "Meklēt akreditācijas datus", - "searchDefaults": "Meklēt noklusējuma vērtības", - "addCredential": "Pievienot akreditācijas datus", - "nothingMatches": "Nav atbilstošu rezultātu", - "nothingYet": "Šeit vēl nav nekas", - "emptyHostsHint": "Pievienojiet resursdatoru, un tas parādīsies šeit, jūsu izvēlētajā mapē.", - "emptyCredentialsHint": "Saglabātos akreditācijas datus var izmantot jebkurš resursdators.", - "collapse": "Sakļaut", - "expand": "Izvērst", - "cannotBeUndone": "Šo darbību nevar atsaukt.", - "hostNotFound": "Nevarēja atrast šo resursdatoru. Mēģiniet atsvaidzināt sarakstu.", "hostCount_zero": "0", "hostCount_one": "{{count}} resursdators", "hostCount_other": "{{count}} resursdatori", "credentialCount_zero": "0", "credentialCount_one": "{{count}} akreditācijas dati", - "credentialCount_other": "{{count}} akreditācijas dati", - "newHost": "Jauns resursdators", - "newCredential": "Jauni akreditācijas dati", - "advanced": "Papildu", - "pickHost": "Izvēlieties resursdatoru rediģēšanai", - "pickCredential": "Izvēlieties akreditācijas datus rediģēšanai", - "pickDefaults": "Izvēlieties noklusējuma vērtību līmeni rediģēšanai", - "pickHint": "Visa informācija par savienojumu atrodas šeit, grupēta, lai to būtu viegli atrast." + "credentialCount_other": "{{count}} akreditācijas dati" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/ms_MY.json b/src/ui/locales/translated/ms_MY.json index 334533fdd..99be6b340 100644 --- a/src/ui/locales/translated/ms_MY.json +++ b/src/ui/locales/translated/ms_MY.json @@ -141,7 +141,6 @@ "continue": "Teruskan", "error": "Ralat", "unsavedChanges": "Perubahan tidak disimpan", - "more": "Lagi", "loading": "Memuatkan...", "host": "Hos", "selectHost": "Pilih hos...", @@ -154,7 +153,6 @@ "cancel": "Batal", "username": "Nama pengguna", "login": "Log masuk", - "logout": "Log keluar", "register": "Daftar", "password": "Kata laluan", "confirmPassword": "Sahkan Kata Laluan", @@ -165,8 +163,6 @@ "rename": "Namakan Semula", "edit": "Sunting", "confirm": "Sahkan", - "next": "Seterusnya", - "previous": "Sebelumnya", "refresh": "Muat semula", "language": "Bahasa", "backendReconnected": "Sambungan pelayan dipulihkan", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Baca tentang setiap satu" }, "desktopUpdates": { - "title": "Aplikasi desktop", - "mode": "Kemas kini", - "modeHint": "Bagaimana aplikasi ini mendapatkan versi baharu.", - "manualModeHint": "Salinan ini tidak boleh dikemas kini secara automatik, jadi Termix hanya akan memberitahu anda apabila versi baharu dikeluarkan.", "modeAutomatic": "Automatik", "modePrompt": "Tanya dahulu", "modeNever": "Tidak pernah", @@ -247,15 +239,6 @@ "onboardingTitle": "Kemas kini aplikasi", "onboardingBody": "Aplikasi desktop kini boleh dikemas kini secara automatik. Pilih bagaimana anda mahu versi baharu tiba. Anda boleh mengubah ini kemudian dalam Tetapan, Kemas kini.", "onboardingManual": "Salinan aplikasi ini dipasang dengan cara yang tidak boleh dikemas kini secara automatik, jadi Termix akan memberitahu anda apabila versi baharu dikeluarkan dengan pautan untuk memuat turunnya.", - "status": "Versi {{version}}", - "statusIdle": "Belum disemak", - "statusChecking": "Menyemak kemas kini", - "statusAvailable": "Versi {{version}} tersedia", - "statusDownloading": "Memuat turun {{version}} ({{progress}}%)", - "statusReady": "Versi {{version}} sedia. Mula semula untuk memasangnya.", - "statusUpToDate": "Anda mempunyai versi terkini", - "statusError": "Tidak dapat menyemak kemas kini. Cuba lagi nanti.", - "checkNow": "Semak sekarang", "download": "Muat turun", "restart": "Mula semula sekarang", "later": "Nanti", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Tutup", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Salin Kata Laluan", - "copySudoPassword": "Salin Kata Laluan Sudo", - "passwordCopied": "Kata laluan disalin ke papan klip", - "failedToCopyPassword": "Gagal menyalin kata laluan", - "refreshTab": "Muat semula sambungan", - "renameTab": "Namakan semula tab", "dashboard": "Papan Pemuka", "quickConnect": "Sambung Pantas", - "openAsTabHint": "Ctrl+klik atau klik tengah untuk membuka sebagai tab", - "openAsTab": "Buka sebagai tab", - "openInRightDock": "Buka di dok kanan", - "closeRightDock": "Tutup dok kanan", - "toggleRightDock": "Togol dok kanan", "hosts": "Hos", "credentials": "Kelayakan", "connections": "Sambungan", - "keepSideMenuOpen": "Biarkan Menu Terbuka", - "collapseSideMenu": "Runtuhkan Menu", - "roleAdministrator": "Pentadbir", - "roleUser": "Pengguna", "sync": "Serentak", "reconnectDisconnectedTerminals": "Sambung semula semua terminal yang terputus", "reconnectingTerminals_other": "Menyambung semula {{count}} terminal", @@ -296,29 +264,10 @@ "reconnectTerminalsFailed_other": "Tidak dapat memulakan penyambungan semula {{count}} terminal", "fullscreenUnsupported": "Skrin penuh tidak disokong oleh pelayar ini", "fullscreenFailed": "Tidak dapat togol skrin penuh", - "resetSidebarWidth": "Set semula lebar", - "collapseSidebar": "Runtuhkan bar sisi", - "openSidebar": "Buka bar sisi", "confirmCloseHost": "Tutup {{host}}?", - "enterFullscreen": "Masuk skrin penuh (Ctrl+Shift+F)", - "exitFullscreen": "Keluar skrin penuh (Ctrl+Shift+F)", - "group": { - "objects": "Milik Anda", - "tools": "Alat", - "system": "Sistem" - }, - "searchEverything": "Cari hos, tab dan tindakan", - "search": "Cari", "hiddenCount_other": "{{count}} tersembunyi", - "showInRail": "Paparkan dalam bar sisi", - "moveUp": "Gerakkan ke atas", - "moveDown": "Gerakkan ke bawah", - "resetRailOrder": "Set semula susunan", - "hideFromRail": "Sembunyikan dari bar sisi", - "openSettings": "Buka tetapan", "settings": "Tetapan", "manage": "Urus", - "mobileNavigation": "Navigasi", "plugins": "Plugin" }, "hosts": { @@ -904,35 +853,14 @@ "importSummary": "Import selesai: {{imported}} diimport, {{updated}} dikemas kini, {{failed}} gagal", "importHostsFailed": "Gagal mengimport hos" }, - "commandPalette": { - "searchPlaceholder": "Cari hos, arahan, atau tetapan...", - "quickActions": "Tindakan Pantas", - "navigation": "Navigasi", - "orShortcut": "atau", - "addNewHost": "Tambah Host Baru", - "adminSettings": "Tetapan Pentadbir", - "addCredential": "Tambah Kredensial", - "recentActivity": "Aktiviti Terkini", - "serversAndHosts": "Pelayan & Host", - "noHostsFound": "Tiada host ditemui yang sepadan dengan \"{{search}}\"", - "links": "Pautan", - "navigate": "Navigasi", - "select": "Pilih", - "pluginActions": "Tindakan lain", - "noTargetTab": "Tiada tab terminal dibuka", - "documentation": "Dokumentasi" - }, "splitScreen": { "title": "Skrin terbahagi", "defaultLabel": "Bahagi {{number}}", "splitRight": "Bahagi ke kanan", "splitDown": "Bahagi ke bawah", - "addToSplit": "Tambah ke {{split}}", "paneEmptyItem": "Panel {{index}}: kosong", "paneItem": "Panel {{index}}: {{label}}", "paneNumber": "Panel {{index}}", - "newPaneRight": "Panel baru di sebelah kanan", - "newPaneBelow": "Panel baru di bawah", "emptyTitle": "Panel kosong", "emptyHint": "Pilih sesuatu untuk dipaparkan di sini. Apabila panel ini dipilih, apa sahaja yang anda buka dari bar sisi juga akan dibuka di sini.", "openTabs": "Buka tab", @@ -949,7 +877,6 @@ "clearPane": "Kosongkan panel ini", "zoom": "Zum panel", "unzoom": "Pulihkan susun atur", - "unsplit": "Nyahbahagi", "layouts": "Susun atur", "applyLayout": "Tukar susun atur", "maxPanes_other": "Pembahagian boleh memuat sehingga {{count}} panel", @@ -957,8 +884,6 @@ "dropHere": "Lepaskan untuk paparkan di sini", "paneActions": "Tindakan panel", "dividerHint": "Seret untuk saiz semula. Klik dua kali untuk sama rata.", - "openInSplit": "Buka dalam bahagi", - "openInNewSplit": "Bahagi baru dengan tab semasa", "shortcuts": "Pintasan", "shortcutNavigate": "Pindah antara panel", "presets": { @@ -972,23 +897,6 @@ "grid6": "Grid enam" } }, - "connections": { - "noConnections": "Tiada sambungan", - "noConnectionsDesc": "Buka terminal, pengurus fail, atau desktop jauh untuk melihat sambungan di sini", - "connectedFor": "Sambung selama {{duration}}", - "connected": "Bersambung", - "disconnected": "Putus sambungan", - "reconnect": "Sambung semula", - "sectionOpen": "Buka", - "sectionBackground": "Latar belakang", - "backgroundDesc": "Sesi kekal selama {{minutes}} minit selepas putus sambungan dan boleh disambung semula.", - "expiresIn": "Tamat tempoh dalam {{duration}}", - "search": "Cari sambungan...", - "noSearchResults": "Tiada sambungan sepadan dengan carian anda", - "rename": "Namakan semula sesi", - "forgetConfirm": "Akhirkan sesi latar belakang untuk {{name}}?", - "forget": "Akhirkan sesi" - }, "sshAuth": { "totpRequired": "Pengesahan Dua Faktor Diperlukan", "totpCodeLabel": "Kod Pengesahan", @@ -1126,474 +1034,46 @@ "placeholders": { "keyPassword": "kata laluan kunci", "pastePrivateKey": "Tampal kunci peribadi anda di sini...", - "enterPassword": "Masukkan kata laluan anda", - "apiKeyName": "cth., CI Pipeline", - "credentialName": "cth. Kunci SSH Pengeluaran", - "optionalDetails": "Butiran pilihan...", - "sshUsername": "cth. root atau deploy", - "hostAddress": "10.0.0.1 atau example.com", - "hostName": "cth. Pelayan Web Pengeluaran" + "enterPassword": "Masukkan kata laluan anda" }, "dashboard": { - "title": "Papan Pemuka", - "github": "GitHub", - "reportBug": "Laporkan pepijat", - "discord": "Discord", - "docs": "Dokumen", - "donate": "Derma", - "serverOverview": "Gambaran Keseluruhan Pelayan", - "version": "Versi", "updateAvailable": "Kemas Kini Tersedia", - "beta": "Beta", - "uptime": "Masa Aktif", - "database": "Pangkalan Data", - "healthy": "Sihat", - "error": "Ralat", - "totalHosts": "Jumlah Hosten", - "totalCredentials": "Jumlah Kelayakan", - "recentActivity": "Aktiviti Terkini", - "reset": "Set Semula", - "noRecentActivity": "Tiada aktiviti terkini", - "quickActions": "Tindakan Pantas", - "addHost": "Tambah Hosten", - "addCredential": "Tambah Kelayakan", - "adminSettings": "Tetapan Pentadbir", - "userProfile": "Profil Pengguna", - "serverStats": "Statistik Pelayan", - "customizeLayout": "Sesuaikan Papan Pemuka", - "justNow": "baru sahaja" + "beta": "Beta" }, "dashboardTab": { "stable": "STABIL", - "registerNewServer": "Daftar pelayan baharu", - "storeSshKeysOrPasswords": "Simpan kunci SSH atau kata laluan", - "manageUsersAndRoles": "Urus pengguna dan peranan", - "manageYourAccount": "Urus akaun anda", - "hostStatus": "Status Hosten", - "noHostsConfigured": "Tiada hosten dikonfigurasi", - "checking": "SEMANGKA SEMAK", - "commandPalette": "Palet Arahan", - "done": "Selesai", - "clear": "Kosongkan", - "dragToResizeColumns": "Seret untuk saiz semula lajur", - "hostsAvailable": "Hos Tersedia", - "removeSection": "Buang bahagian", - "addSection": "Tambah bahagian", - "allSectionsShown": "Semua sudah ada di papan pemuka.", - "fromPlugins": "Dari plugin", - "dropHere": "Letakkan bahagian di sini", - "dragToReorder": "Seret bahagian untuk menyusun semula", - "clearActivityConfirm": "Kosongkan aktiviti terkini anda?", - "resetConfirm": "Set semula papan pemuka kepada susun atur asal?", "onlineCount_other": "{{count}} dalam talian", "hostCount_other": "{{count}} hos" }, "admin": { - "sectionGeneral": "Umum", - "sectionUsers": "Pengguna", - "sectionSessions": "Sesi", - "sectionRoles": "Peranan", - "sectionDatabase": "Pangkalan Data", - "sectionApiKeys": "Kunci API", - "sectionAuditLog": "Log Audit", - "sectionSsl": "Sijil HTTPS", - "sectionBranding": "Label Putih", - "brandingAppName": "Nama Aplikasi", - "brandingAppNameDesc": "Dipaparkan pada skrin log masuk dan tab pelayar. Biarkan kosong untuk menggunakan \"Termix\".", - "brandingTagline": "Tagline", - "brandingTaglineDesc": "Dipaparkan di bawah nama aplikasi pada skrin log masuk. Biarkan kosong untuk menggunakan tagline asal.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG atau WEBP, sehingga 750 KB. Menggantikan ikon asal pada skrin log masuk dan tab pelayar.", - "brandingLogoUpload": "Muat naik logo", - "brandingLogoReset": "Set semula kepada asal", - "brandingLogoInvalid": "Imej tidak sah. Gunakan fail PNG, JPEG atau WEBP sehingga 750 KB.", - "brandingSaved": "Tetapan jenama disimpan", - "brandingSaveFailed": "Gagal menyimpan tetapan jenama", - "sslDescription": "Sijil yang digunakan oleh Termix untuk HTTPS. Muat naik sijil anda sendiri di sini, atau dapatkan dan perbaharui sijil dari Let's Encrypt dalam bahagian Sijil ACME.", - "sslDocsLink": "Lihat dokumen SSL", - "sslCertStatus": "Status Sijil", - "sslCertStatusNone": "Tiada sijil", - "sslCertStatusValid": "Sah", - "sslCertStatusExpiring": "Akan tamat tempoh", - "sslCertStatusExpired": "Tamat tempoh", - "sslCertExpiresAt": "Tamat tempoh {{date}}", - "sslInfoNote": "Selepas mengeluarkan atau memuat naik sijil, Termix akan mengaktifkan HTTPS secara automatik pada SSL_PORT (lalai 8443) selain port HTTP sedia ada. Pastikan port tersebut diterbitkan/dipetakan ke dalam bekas ini supaya ia boleh dicapai.", - "sslManualCert": "Sijil (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Kunci Peribadi (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Tampal sijil dan kunci peribadi anda yang sedia ada, termasuk rantaian penuh jika diperlukan oleh CA anda.", - "sslManualUpload": "Muat Naik & Pasang Sijil", - "sslManualUploadLoading": "Memuat naik sijil...", - "sslManualUploadSuccess": "Sijil berjaya dimuat naik dan dipasang", - "sslManualUploadFailed": "Muat naik sijil gagal", - "sslManualRequiresFields": "Sijil dan kunci peribadi diperlukan", - "auditLogTotal": "{{total}} jumlah entri", - "auditLogEmpty": "Tiada entri log audit ditemui", - "auditLogSuccess": "Berjaya", - "auditLogFailed": "Gagal", - "auditLogClearFilters": "Kosongkan Penapis", - "auditLogPage": "Halaman {{page}} daripada {{totalPages}} ({{total}} jumlah)", - "auditLogIp": "IP", - "auditLogResourceId": "ID Sumber", - "auditLogFilterUser": "Pengguna", - "auditLogFilterAction": "Tindakan", - "auditLogFilterResourceType": "Jenis Sumber", - "auditLogFilterStatus": "Status", - "auditLogFilterFrom": "Dari", - "auditLogFilterTo": "Ke", - "auditLogFilterAll": "Semua", - "allowRegistration": "Benarkan Pendaftaran Pengguna", - "allowRegistrationDesc": "Benarkan pengguna baharu mendaftar sendiri dengan nama pengguna dan kata laluan", - "allowPasswordLogin": "Benarkan Log Masuk Kata Laluan", - "allowPasswordLoginDesc": "Log masuk nama pengguna/kata laluan", - "externalAutoProvision": "Cipta akaun luar secara automatik", - "externalAutoProvisionDesc": "Cipta akaun pada kali pertama seseorang log masuk melalui log masuk luar seperti SSO atau LDAP. Apabila dimatikan, hanya orang yang sudah mempunyai akaun boleh log masuk dengan cara itu", - "secondFactorAfterExternalLogin": "Minta faktor kedua selepas log masuk luar (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Apabila dimatikan, faktor kedua yang didaftarkan hanya diminta selepas log masuk kata laluan dan log masuk tempatan lain, sama seperti sebelum ini. Apabila dihidupkan, ia diminta selepas setiap kaedah log masuk, termasuk SSO dan LDAP.", - "allowPasswordReset": "Benarkan Tetapan Semula Kata Laluan", - "allowPasswordResetDesc": "Kod tetapan semula melalui log Docker", - "auditForwardingTitle": "Hala ke SIEM", - "auditForwardingDesc": "Hantar salinan setiap entri audit kepada pengumpul luar sebagai NDJSON. Log tempatan kekal sebagai sumber kebenaran.", - "auditForwardingEnvNotice": "Pembolehubah persekitaran juga mengkonfigurasi penghalaan; URL yang disimpan di sini mempunyai keutamaan.", - "auditForwardingToken": "Token bearer (pilihan)", - "auditForwardingTokenStored": "Token bearer (disimpan)", - "auditForwardingSaved": "Tetapan penghalaan audit disimpan", - "auditForwardingSaveError": "Gagal menyimpan tetapan penghalaan audit", - "sessionTimeout": "Had Masa Sesi", - "hours": "jam", - "sessionTimeoutRange": "Min 1j, maks 720j", - "monitoringDefaults": "Lalai Pemantauan", - "statusCheck": "Semakan Status", - "sec": "saat", - "logLevel": "Aras Log", - "usersCount_other": "{{count}} pengguna", - "searchUsers": "Cari pengguna...", - "noUsers": "Tiada pengguna", - "noUsersMatch": "Tiada pengguna sepadan dengan carian anda", - "pageOf": "Halaman {{page}} daripada {{total}}", - "createUser": "Cipta", - "newRole": "Peranan Baharu", - "roleName": "Nama", - "roleDisplayName": "Nama Paparan", - "roleDescription": "Keterangan", - "rolesCount_other": "{{count}} peranan", - "createRole": "Cipta", - "creating": "Sedang mencipta...", - "exportDatabase": "Eksport Pangkalan Data", - "exportDatabaseDesc": "Muat turun sandaran SQLite mudah alih bagi semua hos, kelayakan, dan tetapan", - "export": "Eksport", - "exporting": "Sedang mengeksport...", - "importDatabase": "Import Pangkalan Data", - "importDatabaseDesc": "Pulihkan daripada sandaran .sqlite mudah alih pada mana-mana backend pangkalan data", - "importDatabaseSelected": "Dipilih: {{name}}", - "selectFile": "Pilih Fail", - "changeFile": "Tukar", - "import": "Import", - "importing": "Sedang mengimport...", - "apiKeysCount_other": "{{count}} kunci", - "apiKeysDocsLink": "Lihat dokumentasi", - "apiKeysCliHint": "Gunakan kunci API dengan CLI Termix untuk mengurus pelayan dari terminal anda.", - "apiKeysCliLink": "Lihat dokumentasi CLI", - "newApiKey": "Kunci API Baharu", - "apiKeyCreatedWarning": "Kunci dicipta - salin sekarang, ia tidak akan dipaparkan lagi.", - "apiKeyName": "Nama", - "apiKeyUser": "Pengguna", - "apiKeySelectUser": "Pilih pengguna...", - "apiKeyExpiresAt": "Tamat Tempoh Pada", - "createKey": "Cipta Kunci", - "apiKeyNoExpiry": "Tiada tamat tempoh", - "revokedBadge": "DICABUT", - "authTypeDual": "Pengesahan Dua", - "authTypeExternal": "Luaran", - "authTypeLocal": "Tempatan", - "adminStatusAdministrator": "Pentadbir", - "adminStatusRegularUser": "Pengguna Biasa", - "adminBadge": "PENTADBIR", - "systemBadge": "SISTEM", - "customBadge": "KHAS", - "youBadge": "ANDA", - "sessionsActive_other": "{{count}} aktif", - "sessionActive": "Aktif: {{time}}", - "sessionExpires": "Tamat: {{time}}", - "revokeAll": "Semua", - "revokeAllSessionsSuccess": "Semua sesi untuk pengguna telah dicabut", - "revokeAllSessionsFailed": "Gagal mencabut sesi", - "revokeSessionFailed": "Gagal mencabut sesi", - "addRole": "Tambah peranan", - "noCustomRoles": "Tiada peranan khas ditakrifkan", - "removeRoleFailed": "Gagal membuang peranan", - "assignRoleFailed": "Gagal menetapkan peranan", - "userAdminAccess": "Pentadbir", - "userAdminAccessDesc": "Akses penuh ke semua tetapan pentadbir", - "userRoles": "Peranan", - "revokeAllUserSessions": "Cabut Semua Sesi", - "revokeAllUserSessionsDesc": "Paksa log masuk semula pada semua peranti", - "revoke": "Cabut", - "deleteUserWarning": "Memadam pengguna ini adalah kekal.", - "deleteUser": "Padam {{username}}", - "deleting": "Memadam...", - "deleteUserFailed": "Gagal memadam pengguna", - "deleteUserSuccess": "Pengguna \"{{username}}\" dipadam", - "deleteRoleSuccess": "Peranan \"{{name}}\" dipadam", - "revokeKeySuccess": "Kunci \"{{name}}\" dicabut", - "revokeKeyFailed": "Gagal mencabut kunci", - "copiedToClipboard": "Disalin ke papan klip", - "done": "Selesai", - "createUserTitle": "Cipta Pengguna", - "createUserDesc": "Cipta akaun tempatan baharu.", - "createUserUsername": "Nama Pengguna", - "createUserPassword": "Kata Laluan", - "createUserPasswordHint": "Minimum 6 aksara.", - "createUserEnterUsername": "Masukkan nama pengguna", - "createUserSubmit": "Cipta Pengguna", - "editUserTitle": "Urus Pengguna: {{username}}", - "editUserDesc": "Sunting peranan, status pentadbir, sesi, dan tetapan akaun.", - "editUserUsername": "Nama Pengguna", - "editUserAuthType": "Jenis Pengesahan", - "editUserAdminStatus": "Status Pentadbir", - "editUserUserId": "ID Pengguna", - "linkAccountTitle": "Paut Akaun", - "linkAccountDesc": "Gabungkan akaun luaran {{username}} dengan akaun tempatan yang sedia ada.", - "linkAccountDescLocal": "Paut akaun tempatan {{username}} dengan akaun luaran sahaja yang sedia ada.", - "linkAccountWarningTitle": "Ini akan:", - "linkAccountEffect1": "Memadam akaun luaran sahaja", - "linkAccountEffect2": "Menambah log masuk luarannya ke akaun sasaran", - "linkAccountEffect3": "Membolehkan log masuk luaran dan kata laluan", - "linkAccountTargetUsername": "Nama Pengguna Akaun Tempatan", - "linkAccountTargetPlaceholder": "Masukkan nama pengguna akaun tempatan untuk dipautkan", - "linkAccountExternalUsername": "Nama Pengguna Akaun Luaran", - "linkAccountExternalPlaceholder": "Masukkan nama pengguna akaun luaran sahaja untuk digabungkan", - "linkAccountExternalNotFound": "Tiada akaun luaran sahaja ditemui dengan nama pengguna tersebut", - "linkAccounts": "Paut Akaun", - "linkAccountSuccess": "Akaun berjaya dipautkan", - "linkAccountFailed": "Gagal memautkan akaun", - "linkAccountInProgress": "Memautkan...", - "unlinkAccountTitle": "Nyahpaut Log Masuk Luaran", - "unlinkAccountDesc": "Alih keluar log masuk luaran daripada {{username}}. Mereka hanya akan dapat log masuk menggunakan kata laluan.", - "unlinkAccountWarning": "Ini akan mengalih keluar log masuk luaran daripada akaun ini. Pengguna mesti mempunyai kata laluan yang ditetapkan untuk terus log masuk.", - "unlinkAccount": "Nyahpaut Log Masuk Luaran", - "unlinkAccountInProgress": "Menyahpautkan...", - "unlinkAccountSuccess": "Log masuk luaran telah dinyahpaut", - "unlinkAccountFailed": "Gagal menyahpaut log masuk luaran", - "updateRegistrationFailed": "Gagal mengemas kini tetapan pendaftaran", - "updatePasswordLoginFailed": "Gagal mengemas kini tetapan log masuk kata laluan", - "updateSecondFactorAfterExternalLoginFailed": "Gagal mengemas kini tetapan faktor kedua", - "updatePasswordResetFailed": "Gagal mengemas kini tetapan set semula kata laluan", - "sessionTimeoutRange2": "Tempoh tamat sesi mestilah antara 1 hingga 720 jam", - "sessionTimeoutSaved": "Tempoh tamat sesi disimpan", - "sessionTimeoutSaveFailed": "Gagal menyimpan tempoh tamat sesi", - "monitoringIntervalInvalid": "Nilai selang tidak sah", - "monitoringSaved": "Tetapan pemantauan disimpan", - "monitoringSaveFailed": "Gagal menyimpan tetapan pemantauan", - "logLevelUpdateFailed": "Gagal mengemas kini tahap log", - "createUserRequired": "Nama pengguna dan kata laluan diperlukan", - "createUserPasswordTooShort": "Kata laluan mestilah sekurang-kurangnya 6 aksara", - "createUserSuccess": "Pengguna \"{{username}}\" telah dicipta", - "createUserFailed": "Gagal mencipta pengguna", - "updateAdminStatusFailed": "Gagal mengemas kini status pentadbir", - "allSessionsRevoked": "Semua sesi telah ditarik balik", - "revokeSessionsFailed": "Gagal menarik balik sesi", - "manageUserData": "Urus data pengguna", - "backToUsers": "Kembali ke pengguna", - "manageTabAccount": "Akaun", - "manageTabHosts": "Hos", - "manageTabCredentials": "Kelayakan", - "manageTabSessions": "Sesi", - "manageTabDanger": "Bahaya", - "manageEditorBack": "Kembali ke data {{username}}", - "dataLockedBadge": "DIKUNCI", - "dataLockedNotice": "Data {{username}} kekal dikunci sehingga mereka log masuk seterusnya. Hos, kelayakan dan petikan mereka tidak dapat dilihat atau disunting sehingga masa itu.", - "resetPasswordTitle": "Set Semula Kata Laluan", - "resetPasswordExternalOnly": "Pengguna ini log masuk melalui penyedia luaran dan tiada kata laluan.", - "resetPasswordPlaceholder": "Kata laluan baharu", - "resetPasswordBtn": "Set Semula", - "resetPasswordWorking": "Menetapkan semula...", - "resetPasswordSuccess": "Kata laluan telah ditetapkan semula", - "resetPasswordSuccessWiped": "Kata laluan telah ditetapkan semula. Data terenkripsi pengguna telah dipadam.", - "resetPasswordFailed": "Gagal menetapkan semula kata laluan", - "resetPasswordConfirmWipe": "{{username}} tidak log masuk sejak peningkatan enkripsi, jadi data mereka tidak dapat dipulihkan. Menetapkan semula sekarang akan memadam hos, kelayakan dan petikan mereka. Teruskan?", - "manageApiKeys": "Kunci API", - "apiKeyNamePlaceholder": "Nama kunci", - "apiKeyCopyNotice": "Salin kunci ini sekarang, ia tidak akan dipaparkan lagi.", - "noApiKeysForUser": "Tiada kunci API", - "apiKeyDeleteFailed": "Gagal memadam kunci API", - "exportUserData": "Eksport Data", - "exportUserDataDesc": "Muat turun hos, kelayakan dan data pengurus fail pengguna ini sebagai JSON. Rahsia telah dinyahsulit.", - "exportUserDataSuccess": "Data pengguna telah dieksport", - "exportUserDataFailed": "Gagal mengeksport data pengguna", "hostsCount_other": "{{count}} hos", - "addHostForUser": "Tambah Hos", - "noHostsForUser": "Pengguna ini tiada hos", - "connectToHost": "Sambung", - "deleteHostConfirm": "Padam hos \"{{name}}\" yang dimiliki oleh {{username}}?", - "hostDeletedSuccess": "Hos dipadam", - "hostDeleteFailed": "Gagal memadam hos", "credentialsCount_other": "{{count}} kelayakan", - "addCredentialForUser": "Tambah Kelayakan", - "noCredentialsForUser": "Pengguna ini tiada kelayakan", - "deleteCredentialConfirm": "Padam kelayakan \"{{name}}\" yang dimiliki oleh {{username}}?", - "credentialDeletedSuccess": "Kelayakan dipadam", - "credentialDeleteFailed": "Gagal memadam kelayakan", - "noSessionsForUser": "Tiada sesi aktif", - "deleteSuccessorLabel": "Serahkan hos dan kelayakan kepada", - "deleteSuccessorMe": "Saya (pentadbir yang memadam)", - "deleteSuccessorNone": "Tiada siapa, padamkannya", - "deleteSuccessorDesc": "Semua perkongsian pengguna ini akan kekal berfungsi di bawah pemilik baharu; memilih tiada siapa akan memadam hos, kelayakan dan perkongsian mereka.", - "deleteUserDangerDesc": "Padam {{username}} dan semua data mereka (hos, kelayakan, petikan, sejarah) secara kekal. Tindakan ini tidak boleh dibatalkan.", - "deleteUserConfirm": "Padam {{username}} dan semua data mereka secara kekal?", - "deleteUserAdminBlocked": "Buang status pentadbir sebelum memadam pengguna ini.", - "createRoleRequired": "Nama dan nama paparan diperlukan", - "createRoleSuccess": "Peranan \"{{name}}\" dicipta", - "createRoleFailed": "Gagal mencipta peranan", - "apiKeyNameRequired": "Nama kunci diperlukan", - "apiKeyUserRequired": "ID pengguna diperlukan", - "apiKeyCreatedSuccess": "Kunci API \"{{name}}\" dicipta", - "apiKeyCreateFailed": "Gagal mencipta kunci API", - "exportSuccess": "Pangkalan data berjaya dieksport", - "exportFailed": "Eksport pangkalan data gagal", - "importSelectFile": "Sila pilih fail terlebih dahulu", - "importCompleted": "Import selesai: {{total}} item diimport, {{skipped}} dilangkau", - "importFailed": "Import gagal: {{error}}", - "importError": "Import pangkalan data gagal", - "sectionHostDefaults": "Tetapan Lalai Hos", "rolePermissions": { - "count_other": "{{count}} kebenaran", - "editAction": "Sunting kebenaran", - "loadError": "Gagal memuatkan katalog kebenaran", - "saved": "Kebenaran peranan disimpan", - "saveError": "Gagal menyimpan kebenaran peranan", - "save": "Simpan", - "saving": "Menyimpan...", - "pluginDisabled": "Plugin dilumpuhkan", "groups": { "hosts": "Hos", "credentials": "Kelayakan", "admin": "Pentadbiran" } - }, - "notificationPrivateEndpoints": "Hos pemberitahuan peribadi yang dibenarkan", - "notificationPrivateEndpointsDesc": "Hos peribadi tepat yang boleh dihubungi oleh saluran pemberitahuan. Pisahkan dengan koma.", - "updateNotificationEndpointsFailed": "Gagal mengemas kini senarai kebenaran hujung pemberitahuan", - "secondFactorsSectionTitle": "Faktor kedua", - "secondFactorsNone": "Tiada faktor kedua didaftarkan", - "secondFactorUnavailable": "Tidak tersedia", - "resetSecondFactors": "Tetap semula faktor kedua", - "resetSecondFactorsConfirm": "Buang setiap faktor kedua untuk {{username}}? Mereka boleh log masuk dengan kata laluan atau SSO dan mendaftar semula.", - "secondFactorsResetSuccess": "Faktor kedua telah diset semula", - "secondFactorsResetFailed": "Gagal untuk menetapkan semula faktor kedua", - "passwordLoginForced": "Log masuk kata laluan dimatikan, tetapi tiada kaedah log masuk lain diaktifkan, jadi ia kekal hidup buat masa ini. Tiada sesiapa yang dikunci keluar.", - "sslNotRenewed": "Tiada yang memperbaharui sijil ini. Ia tamat tempoh pada {{date}}. Aktifkan pembaharuan automatik dalam bahagian Sijil ACME, atau muat naik sijil baharu sebelum tarikh tersebut.", - "sslSelfSigned": "Sijil tandatangan sendiri yang dibuat oleh Termix. Pelayar akan memberi amaran mengenainya.", - "sslRenewedBy": "Diperbaharui secara automatik oleh {{plugin}}", - "sslIssuer": "Diterbitkan oleh {{issuer}}", - "sslNames": "Meliputi {{names}}", - "sslManualTitle": "Muat naik sijil", - "updateExternalAutoProvisionFailed": "Gagal untuk mengemas kini tetapan cipta automatik", - "hostTags": "Tag hos yang ditakrifkan sebelumnya", - "hostTagsDesc": "Tag yang dilihat oleh setiap pengguna sebagai cadangan dalam penyunting hos. Tekan Space atau Enter untuk menambah satu. Menghapuskan tag di sini tidak menghapusnya daripada hos.", - "hostTagsError": "Tidak dapat memuat atau menyimpan cadangan tag hos.", - "revokeAllSessionsConfirm": "Log keluar {{username}} di semua tempat?", - "revokeSessionConfirm": "Log keluar sesi ini?", - "revokeSession": "Log keluar", - "deleteRoleConfirm": "Padam peranan {{name}}?", - "revokeKeyConfirm": "Batalkan kunci API {{name}}?", - "revokeKey": "Batalkan" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Di mana", - "who": "Siapa", - "hostLabel": "Hos", - "hostPlaceholder": "192.168.1.1 atau example.com", - "portLabel": "Port", - "usernameLabel": "Nama pengguna", - "usernamePlaceholder": "nama pengguna", - "authLabel": "Pengesahan", - "passwordLabel": "Kata laluan", - "passwordPlaceholder": "kata laluan", - "privateKeyLabel": "Kunci Peribadi", - "privateKeyPlaceholder": "Tampal kunci peribadi...", - "credentialLabel": "Kelayakan", - "credentialPlaceholder": "Pilih kelayakan yang disimpan", - "protocolLabel": "Protokol", - "domainLabel": "Domain", - "domainPlaceholder": "pilihan", - "connectToAction": "Sambung ke {{name}}", - "sshProtocol": "SSH", - "noTarget": "Tiada yang dipasang boleh menyambung ke jenis hos ini" + "usernameLabel": "Nama pengguna" }, "keybindings": { - "description": "Ikat kekunci kepada tindakan dalam terminal dan aplikasi, atau ubah pintasan terbina dalam.", - "defaultsHeading": "Pintasan Terbina Dalam", - "fixedHeading": "Pintasan Aplikasi", - "fixed": { - "splitRight": "Bahagi ke kanan", - "splitDown": "Bahagi ke bawah", - "zoomPane": "Zum panel yang difokuskan", - "navigatePane": "Pindah antara panel", - "nextTab": "Tab seterusnya", - "previousTab": "Tab sebelumnya", - "jumpTab": "Lompat ke tab", - "previousView": "Kembali ke pandangan bar sisi sebelumnya", - "fullscreen": "Togol skrin penuh" - }, - "customHeading": "Pintasan Tersuai", - "addBinding": "Tambah Pintasan", - "addBindingTitle": "Tambah Pintasan", - "editBindingTitle": "Sunting Pintasan", - "loading": "Memuatkan...", - "noCustomBindings": "Belum ada pintasan tersuai", - "defaultBadge": "Lalai", - "customizedBadge": "Ditersuai", - "customize": "Tersuai", - "resetToDefault": "Set semula ke lalai", - "resetAllToDefaults": "Set semula semua ke lalai", - "cancel": "Batal", - "saveBinding": "Simpan Pintasan", - "saveError": "Gagal menyimpan pintasan papan kekunci", - "pressKeysToRecord": "Gabungan kekunci", - "pressKeysPlaceholder": "Klik dan tekan kekunci", - "recording": "Tekan kekunci...", - "comboRequiredError": "Tekan gabungan kekunci terlebih dahulu", - "conflictWarning": "Gabungan ini telah dikaitkan dengan {{combo}}. Menyimpan akan menyebabkan kedua-duanya bertindak.", - "actionLabel": "Tindakan", "actionNextTab": "Tukar ke tab seterusnya", "actionPreviousTab": "Tukar ke tab sebelumnya", "actionOpenCommandPalette": "Buka carian pantas", - "actionReconnectSession": "Sambung semula sesi semasa", - "unavailableAction": "{{type}} (tidak tersedia)", - "actionRequiredError": "Pilih tindakan terlebih dahulu", - "deleteConfirm": "Padam pengikatan kekunci ini?", - "resetAllConfirm": "Set semula setiap pengikatan kekunci ke lalai?" + "actionReconnectSession": "Sambung semula sesi semasa" }, "userProfile": { - "storageModeLocal": "Pelayar", - "storageModeCloud": "Pangkalan data", - "storageModeDescription": "Pelayar menyimpan tetapan hanya dalam pelayar ini. Pangkalan data menyegerakkan dengan pelayan dan dimuatkan pada mana-mana peranti.", - "resetToDefaults": "Set Semula ke Lalai", - "resetToDefaultsSuccess": "Tetapan telah diset semula ke lalai.", - "storageModeSwitch": "Penyimpanan Keutamaan", - "sectionAccount": "Akaun", - "desktopProfileTitle": "Peranti ini sahaja", - "desktopProfileDescription": "Profil ini wujud pada peranti ini dan log masuk secara bebas. Pautkannya ke pelayan Termix untuk menggunakan hos dan tetapan yang sama pada setiap peranti.", - "sectionInterface": "Antara muka", - "interfacePresetDesc": "Berapa banyak butiran yang dipaparkan oleh Termix. Setiap ciri kekal tersedia.", "preset_simple": "Ringkas", "preset_simple_desc": "Hanya perkara asas.", "preset_balanced": "Seimbang", "preset_balanced_desc": "Susun atur standard.", "preset_advanced": "Lanjutan", "preset_advanced_desc": "Semua dihidupkan, padat.", - "presetClearOverrides": "Set semula semua", - "presetOverridesTitle": "Disesuaikan", - "presetRevertArea": "Pulihkan", - "presetConfirmTitle": "Tukar ke {{preset}}?", - "presetConfirmDesc": "Ini akan menetapkan semula bar sisi, navigasi, susun atur papan pemuka, bar alat terminal dan pandangan pengurus fail anda. Hos, kelayakan dan halaman utama anda tidak terjejas.", - "presetConfirmApply": "Terapkan pratetap", - "runSetupAgainDesc": "Lalui persediaan pertama kali sekali lagi.", - "runSetupAgainButton": "Jalankan persediaan", "uiArea_chrome": "Chrome aplikasi", "uiArea_hostList": "Senarai hos", "uiArea_credentialList": "Senarai kelayakan", @@ -1602,125 +1082,12 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Pengurus fail", "uiArea_hostEditor": "Penyunting hos", - "sectionAppearance": "Penampilan", - "sectionSecurity": "Keselamatan", - "sectionApiKeys": "Kunci API", - "sectionData": "Data", - "usernameLabel": "Nama pengguna", - "roleLabel": "Peranan", - "roleAdministrator": "Pentadbir", - "authMethodLabel": "Kaedah Pengesahan", - "authMethodLocal": "Tempatan", - "twoFaLabel": "2FA", - "twoFaOn": "Hidup", - "twoFaOff": "Mati", - "versionLabel": "Versi", - "cliTitle": "Termix CLI", - "cliDescription": "Buka terminal, jalankan arahan dan alih fail dari shell anda sendiri.", - "cliLearnMore": "Ketahui Lebih Lanjut", - "deleteAccount": "Padam Akaun", - "deleteAccountDescription": "Padam akaun anda secara kekal", - "deleteButton": "Padam", - "deleteAccountPermanent": "Tindakan ini adalah kekal dan tidak boleh dibatalkan.", - "deleteAccountWarning": "Semua sesi, hos, kelayakan, dan tetapan akan dipadam secara kekal.", - "confirmPasswordDeletePlaceholder": "Masukkan kata laluan anda untuk mengesahkan", "languageLabel": "Bahasa", "themeLabel": "Tema", "fontSizeLabel": "Saiz Fon", "interfaceFontLabel": "Fon Antara Muka", "interfaceFontDescription": "Menukar fon antara muka aplikasi. Profil terminal mengekalkan tetapan fon mereka sendiri.", "accentColorLabel": "Warna Aksen", - "keyboardShortcuts": "Pintasan Papan Kekunci", - "keyboardShortcutsDescription": "Sesuaikan pintasan salin, tampal, dan arahan terminal", - "manageShortcuts": "Urus", - "commandPalette": "Palet Arahan", - "commandPaletteDesc": "Dayakan pintasan papan kekunci", - "reopenTabsOnLogin": "Buka Semula Tab Semasa Log Masuk", - "reopenTabsOnLoginDesc": "Pulihkan tab terbuka anda apabila anda log masuk atau menyegarkan halaman, walaupun dari peranti lain", - "confirmTabClose": "Sahkan Tutup Tab", - "confirmTabCloseDesc": "Tanya sebelum menutup tab terminal", - "showTabNumbers": "Paparkan Nombor Tab", - "showTabNumbersDesc": "Paparkan nombor pada setiap tab untuk membantu membezakan mereka", - "settingsAppRail": "Landasan Aplikasi", - "sidebarSettingsMoved": "Tetapan paparan bar sisi hos telah dipindahkan ke panel Sesuaikan Bar Sisi, dibuka dari bar alat Hos.", - "showHostTags": "Paparkan Tag Hos", - "showHostTagsDesc": "Paparkan tag dalam senarai hos", - "statusColors": "Warna Status Sebenar", - "statusColorsDesc": "Gunakan hijau/merah untuk status dalam talian/luar talian sebagai ganti warna aksen", - "pinAppRail": "Pin Landasan Aplikasi", - "pinAppRailDesc": "Kekalkan landasan aplikasi bar sisi kiri sentiasa dikembangkan sebagai ganti mengembangkan semasa melayan", - "expandAppRailOnHover": "Kembangkan Landasan Aplikasi Semasa Melayan", - "expandAppRailOnHoverDesc": "Benarkan landasan aplikasi bar sisi kiri untuk dikembangkan apabila penunjuk bergerak di atasnya", - "appRailHoverPushesContent": "Tolak kandungan apabila ia kembang", - "appRailHoverPushesContentDesc": "Buat ruang untuk rel yang kembang bukannya membukanya di atas halaman. Sesi yang dibuka, seperti desktop jauh, akan saiz semula setiap kali", - "showPinAppRailButton": "Paparkan Butang Pin Landasan Aplikasi", - "showPinAppRailButtonDesc": "Paparkan butang dalam landasan aplikasi untuk meminyainya terbuka. Dimatikan secara lalai.", - "settingsNavigation": "Navigasi", - "navigationTabsDesc": "Pilih tab mana yang muncul dalam landasan aplikasi", - "settingsUpdates": "Kemas Kini", - "disableUpdateChecks": "Lumpuhkan Semakan Kemas Kini", - "disableUpdateChecksDesc": "Berhenti menyemak kemas kini", - "changePassword": "Tukar Kata Laluan", - "currentPasswordLabel": "Kata Laluan Semasa", - "currentPasswordPlaceholder": "Kata laluan semasa", - "newPasswordLabel": "Kata Laluan Baharu", - "newPasswordPlaceholder": "Kata laluan baharu", - "confirmPasswordLabel": "Sahkan Kata Laluan Baharu", - "confirmPasswordPlaceholder": "Sahkan kata laluan baharu", - "updatePassword": "Kemas Kini Kata Laluan", - "createApiKeyTitle": "Cipta Kunci API", - "createApiKeyDescription": "Jana kunci API baharu untuk akses pengaturcaraan.", - "apiKeyNameLabel": "Nama", - "apiKeyNamePlaceholder": "cth. Saluran CI", - "expiryDateLabel": "Tarikh Luput", - "optional": "pilihan", - "cancel": "Batal", - "createKey": "Cipta Kunci", - "apiKeyCreatedWarning": "Kunci dicipta - salin sekarang, ia tidak akan dipaparkan lagi.", - "copyApiKey": "Salin kunci API", - "copiedToClipboard": "Disalin ke papan klip", - "apiKeyCount_other": "{{count}} kunci", - "newKey": "Kunci Baharu", - "noApiKeys": "Tiada kunci API lagi.", - "apiKeyActive": "Aktif", - "apiKeyUsageHint": "Sertakan kunci anda dalam", - "apiKeyUsageHintHeader": "palam.", - "apiKeyPermissionsHint": "Kunci mewarisi kebenaran pengguna yang menciptanya.", - "exportData": "Eksport Data Saya", - "exportDataDesc": "Muat turun sandaran hos, kelayakan, dan tetapan anda untuk dipindahkan ke peranti lain", - "export": "Eksport", - "exporting": "Mengeksport...", - "importData": "Import Data Saya", - "importDataDesc": "Pulihkan hos, kelayakan, dan tetapan anda daripada fail sandaran .sqlite", - "importDataSelected": "Dipilih: {{name}}", - "selectFile": "Pilih Fail", - "changeFile": "Tukar", - "import": "Import", - "importing": "Mengimport...", - "exportSuccess": "Data berjaya dieksport", - "exportFailed": "Eksport data gagal", - "importSelectFile": "Sila pilih fail terlebih dahulu", - "importCompleted": "Import selesai: {{total}} item diimport, {{skipped}} dilangkau", - "importFailed": "Import gagal: {{error}}", - "roleUser": "Pengguna", - "authMethodDual": "Pengesahan Dua", - "authMethodExternal": "Luaran", - "done": "Selesai", - "apiKeyNameRequired": "Nama kunci diperlukan", - "apiKeyCreated": "Kunci API \"{{name}}\" dicipta", - "apiKeyCreateFailed": "Gagal mencipta kunci API", - "apiKeyUser": "Pengguna", - "apiKeyExpires": "Luput", - "apiKeyRevoked": "Kunci API \"{{name}}\" ditarik balik", - "apiKeyRevokeFailed": "Gagal menarik balik kunci API", - "passwordFieldsRequired": "Kata laluan semasa dan baharu diperlukan", - "passwordMismatch": "Kata laluan tidak sepadan", - "passwordTooShort": "Kata laluan mestilah sekurang-kurangnya 6 aksara", - "passwordUpdated": "Kata laluan berjaya dikemas kini", - "passwordUpdateFailed": "Gagal mengemas kini kata laluan", - "deletePasswordRequired": "Kata laluan diperlukan untuk memadam akaun anda", - "deleteFailed": "Gagal memadam akaun", - "deleting": "Memadam...", "colorPickerTooltip": "Buka pemilih warna", "themeSystem": "Sistem", "themeLight": "Terang", @@ -1731,18 +1098,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Log masuk ke {{server}}", - "linkedProfileDescription": "Peranti ini menggunakan akaun anda pada pelayan dan menyimpan salinan data anda, jadi ia masih berfungsi secara luar talian.", - "manageSync": "Urus serentak", - "setUpSync": "Paut ke pelayan", - "settingsTabsAndShortcuts": "Tab dan Pintasan", - "onBetaTitle": "Anda menggunakan versi beta", - "onBetaDescription": "Terima kasih kerana menguji. Beritahu kami jika terdapat sebarang kerosakan.", - "tryBetaTitle": "Cuba ciri baharu lebih awal", - "tryBetaDescription": "Sertai program beta dalam Kemas Kini.", - "sendBetaFeedback": "Hantar maklum balas beta", - "openUpdates": "Kemas Kini" + "themeGruvbox": "Gruvbox" } } }, @@ -1983,8 +1339,7 @@ "hasDependents": "{{name}} diperlukan oleh {{list}}. Matikan atau nyahpasang mereka dahulu.", "missingDependencies": "{{name}} memerlukan {{list}}, yang tidak dipasang.", "consentChanged": "Apa yang diminta oleh plugin ini telah berubah sejak anda melihatnya. Semak senarai sekali lagi.", - "upload": "Tidak dapat membaca {{name}}: {{error}}", - "developerMode": "Tidak dapat mengubah mod pembangun: {{error}}" + "upload": "Tidak dapat membaca {{name}}: {{error}}" }, "data": { "title": "Data yang disimpan", @@ -2102,13 +1457,7 @@ "browsePlugins": "Layari plugin", "loading": "Memuatkan", "developer": { - "title": "Mod pembangun plugin", - "hint": "Membolehkan pentadbir memasang plugin daripada fail .tmxplug dalam tab Plugin, tanpa semakan daftar. Gunakan untuk membina dan menguji plugin anda sendiri.", - "enableTitle": "Hidupkan mod pembangun?", - "enableBody": "Pentadbir akan dapat memasang plugin daripada fail yang tidak disemak oleh Termix. Plugin boleh melakukan apa sahaja yang dibenarkan oleh keupayaannya, jadi hanya hidupkan ini semasa membina atau menguji plugin.", - "enable": "Hidupkan", - "installFromFile": "Pasang daripada fail", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS ditetapkan, jadi pemasangan daripada fail kekal disekat." + "installFromFile": "Pasang daripada fail" }, "count": { "downloads_other": "{{formatted}} muat turun", @@ -2145,71 +1494,7 @@ "secretSet": "Tetapkan", "secretNotSet": "Tidak ditetapkan", "secretReplace": "Ganti", - "pluginSettingsSaved": "Tetapan disimpan", - "pluginSettingsInvalid": "Sebilangan tetapan tidak dapat disimpan. Semak medan yang disorot.", - "pluginSettingsSaveFailed": "Gagal menyimpan tetapan", - "pluginSettingsLoadFailed": "Gagal memuatkan tetapan", - "featureUnavailable": "{{name}} tidak tersedia sekarang. Tetapan ini disimpan tetapi tidak akan berkuat kuasa.", - "account": "Akaun", - "security": "Keselamatan", - "apiKeys": "Kunci API", - "data": "Data dan selaras", - "interface": "Antara muka", - "appearance": "Rupa", - "keybindings": "Pintasan kekunci", - "adminGeneral": "Umum", - "adminUsers": "Pengguna", - "adminSessions": "Sesi", - "adminRoles": "Peranan", - "adminHostDefaults": "Lalai hos", - "adminBranding": "Pembuatan jenama", - "adminDatabase": "Pangkalan data", - "adminSsl": "SSL", - "adminApiKeys": "Kunci API", - "adminAuditLog": "Log audit", - "bandYou": "Akaun anda", - "bandApp": "Aplikasi ini", - "bandPlugins": "Plugin", - "bandInstance": "Pelayan ini", - "searchPlaceholder": "Cari tetapan", - "noResults": "Tiada tetapan sepadan.", - "pages": "Halaman", - "instanceSettings": "Tetapan pelayan", - "nothingHere": "Tiada apa-apa untuk ditetapkan di sini.", - "searchPage": "Cari halaman ini", - "noPageMatches": "Tiada sebarang padanan pada halaman ini.", - "updates": { - "title": "Kemas Kini", - "betaProgram": "Program Beta", - "betaIntro": "Beta adalah binaan awal untuk versi Termix seterusnya. Ia dikeluarkan pada hari Selasa dan Jumaat apabila terdapat ciri baharu untuk dicuba. Ia mungkin mengandungi pepijat, dan maklum balas anda membantu menjadikan versi stabil lebih baik.", - "termixBetas": "Beta Termix", - "termixBetasHint": "Beritahu saya tentang beta baharu, bukan hanya pelepasan stabil.", - "runningBetaBuild": "Anda sedang menjalankan binaan beta. Untuk keluar, tukar kembali ke imej atau pemasangan stabil.", - "howToInstall": "Cara mendapatkan beta", - "desktopInstall": "Muat turun pemasangan beta dan pasang di atas pemasangan ini.", - "downloadBeta": "Muat turun {{version}}", - "dockerInstall": "Tukar imej anda ke tag beta dan mulakan semula bekas:", - "copy": "Salin", - "copied": "Disalin", - "copyFailed": "Gagal menyalin", - "learnMore": "Ketahui lebih lanjut tentang beta", - "feedback": "Maklum Balas", - "feedbackHint": "Menjumpai pepijat atau mempunyai idea? Ia dihantar terus kepada pembangun dengan versi anda diisi.", - "sendFeedback": "Hantar maklum balas beta", - "releases": "Pelepasan", - "thisVersion": "Versi ini", - "newestStable": "Stabil terkini", - "newestBeta": "Beta terkini", - "noRelease": "Tiada buat masa ini", - "pluginBetas": "Beta Plugin", - "pluginBetasIntro": "Setiap plugin boleh menggunakan beta secara berasingan. Untuk mencubanya, buka plugin tersebut dan tekan Cuba beta.", - "openPlugins": "Buka Plugin", - "waitingForStable": "Kembali ke stabil. Kekal pada {{version}} sehingga pelepasan stabil yang lebih baharu tersedia.", - "backToStable": "Kembali ke stabil", - "allPluginsBeta": "Gunakan beta untuk semua plugin", - "allPluginsStable": "Semua plugin kembali ke stabil", - "saveFailed": "Gagal menyimpan perubahan" - } + "featureUnavailable": "{{name}} tidak tersedia sekarang. Tetapan ini disimpan tetapi tidak akan berkuat kuasa." }, "managerCard": { "refresh": "Segarkan", @@ -2219,80 +1504,10 @@ "filter": "Tapis..." }, "sync": { - "server": "Pelayan Termix", - "account": "Akaun", - "status": "Status", - "never": "tidak pernah", - "justNow": "baru sahaja", "minutesAgo_other": "{{count}} minit lalu", "hoursAgo_other": "{{count}} jam lalu", - "actionFailed": "Tindakan itu gagal. Cuba lagi.", - "unlinkedTitle": "Peranti ini sahaja", - "unlinkedBody": "Termix berfungsi secara bebas pada peranti ini. Pautkan ia ke pelayan Termix anda untuk memastikan segala-galanya selaras.", - "unlinkedPointHosts": "Hos, kelayakan, petikan dan tetapan anda akan mengikuti anda ke setiap peranti.", - "unlinkedPointOffline": "Segala-galanya masih berfungsi apabila pelayan tidak dapat dicapai, dan akan disegerakkan kemudian.", - "unlinkedPointAccount": "Anda log masuk dengan akaun pelayan anda, dan hos yang dikongsi oleh orang lain juga akan muncul di sini.", - "linkButton": "Pautkan ke pelayan", - "state": { - "syncing": "Menyegerakkan", - "offline": "Pelayan tidak dapat dicapai", - "error": "Penyegerakan dihentikan", - "signedOut": "Telah log keluar", - "synced": "Disegerakkan {{time}}" - }, "pending_other": "{{count}} perubahan menunggu untuk disegerakkan", - "signInAgain": "Log masuk semula", - "syncNow": "Segerakkan sekarang", - "unlink": "Putuskan pautan", - "unlinked": "Peranti ini tidak lagi dipautkan", - "unlinkTitle": "Putuskan pautan peranti ini?", - "unlinkDescription": "Ia menghentikan penyegerakan dan log keluar dari pelayan. Hosten yang dikongsi dengan anda oleh orang lain akan dialih keluar dari peranti ini sama ada.", - "unlinkKeepTitle": "Simpan data saya di sini", - "unlinkKeepBody": "Hosten, kelayakan dan tetapan anda kekal pada peranti ini dan terus berfungsi secara bebas.", - "unlinkRemoveTitle": "Alih keluar data disegerakkan", - "unlinkRemoveBody": "Segala yang berasal dari pelayan dialih keluar dari peranti ini. Hanya hos yang disimpan pada peranti ini kekal.", - "conflictsTitle": "Pertembungan", - "conflictsDescription": "Ini diubah di sini dan pada pelayan pada masa yang sama. Versi pelayan sedang digunakan. Simpan milik anda untuk menghantarnya ke pelayan sebagai gantinya.", - "keepMine": "Simpan milik saya", - "keepServer": "Simpan pelayan", - "errorsTitle": "Tidak disegerakkan", - "errorsDescription": "Pelayan tidak menerima perubahan ini. Ia kekal pada peranti ini.", - "errorPermission": "Akaun anda pada pelayan tidak dibenarkan membuat perubahan ini.", - "retry": "Cuba lagi", - "whatSyncs": "Apa yang disegerakkan", - "whatSyncsDescription": "Matikan apa sahaja yang anda mahu simpan pada peranti ini sahaja.", - "coreGroup": "Termix", - "notOnServer": "Pelayan tidak mempunyai ini", - "notOnDevice": "Belum pada peranti ini", - "localOnlyHint": "Anda juga boleh menyimpan hos atau folder tunggal pada peranti ini dari tetapan mereka.", - "originTitle": "Di mana sambungan bermula", - "originDescription": "Sambung ke hos dari peranti ini, atau melalui pelayan. Anda boleh mengubah ini setiap hos.", - "originLocal": "Peranti ini", - "originRemote": "Pelayan", - "entities": { - "hosts": "Hosten", - "sshCredentials": "Kelayakan", - "sshFolders": "Folder", - "userPreferences": "Keutamaan", - "pluginUserSettings": "Tetapan plugin", - "sharedHosts": "Hosten yang dikongsi dengan anda", - "sharedCredentials": "Kelayakan yang dikongsi dengan anda", - "vaultProfiles": "Profil Vault", - "snippetFolders": "Folder snippet", - "snippets": "Snippet", - "dashboardServiceLinks": "Pautan perkhidmatan", - "homepageItems": "Item halaman utama", - "networkTopology": "Peta rangkaian", - "workspaces": "Ruang kerja", - "hostDefaults": "Lalai hos", - "hostDefaultsAdmin": "Lalai hos pelayan", - "aiProviders": "Pembekal AI", - "homepageLayouts": "Susun atur halaman utama", - "accountProfile": "Profil akaun" - }, "proxy": { - "title": "Proksi songsang", - "description": "Hanya diperlukan apabila sesuatu seperti Cloudflare Access atau halaman log masuk berada di hadapan pelayan anda.", "headersTitle": "Header tambahan", "headersHint": "Dihantar dengan setiap permintaan ke pelayan, contohnya token perkhidmatan Cloudflare Access.", "headerName": "Nama header", @@ -2305,8 +1520,7 @@ "username": "Nama pengguna", "password": "Kata laluan", "allowInvalidCertificate": "Percayai sijil tandatangan sendiri", - "allowInvalidCertificateHint": "Hanya untuk pelayan anda sendiri, apabila sijilnya bukan daripada pihak berkuasa yang dikenali.", - "saved": "Disimpan" + "allowInvalidCertificateHint": "Hanya untuk pelayan anda sendiri, apabila sijilnya bukan daripada pihak berkuasa yang dikenali." }, "problems": { "invalidUrl": "Itu tidak kelihatan seperti alamat web.", @@ -2340,6 +1554,27 @@ "linking": "Menyambungkan dan menjalankan penyegerakan pertama...", "linked": "Disambungkan. Data anda sedang disegerakkan sekarang.", "signedInAgain": "Telah log masuk. Penyegerakan sedang berjalan semula." + }, + "entities": { + "hosts": "Hosten", + "sshCredentials": "Kelayakan", + "sshFolders": "Folder", + "userPreferences": "Keutamaan", + "pluginUserSettings": "Tetapan plugin", + "sharedHosts": "Hosten yang dikongsi dengan anda", + "sharedCredentials": "Kelayakan yang dikongsi dengan anda", + "vaultProfiles": "Profil Vault", + "snippetFolders": "Folder snippet", + "snippets": "Snippet", + "dashboardServiceLinks": "Pautan perkhidmatan", + "homepageItems": "Item halaman utama", + "networkTopology": "Peta rangkaian", + "workspaces": "Ruang kerja", + "hostDefaults": "Lalai hos", + "hostDefaultsAdmin": "Lalai hos pelayan", + "aiProviders": "Pembekal AI", + "homepageLayouts": "Susun atur halaman utama", + "accountProfile": "Profil akaun" } }, "hostDefaults": { @@ -2356,28 +1591,9 @@ "resetTitle": "Host ini menetapkan nilainya sendiri. Klik untuk menggunakan tetapan lalai dari {{source}} semula", "clearTitle": "Ditetapkan pada tahap ini. Klik untuk membersihkannya dan menggunakan {{source}} sebagai gantinya", "inheritedTitle": "Mengikuti tetapan lalai dari {{source}}", - "titleAdmin": "Tetapan lalai host pelayan", - "titleUser": "Tetapan lalai host saya", - "titleFolder": "Tetapan lalai folder: {{name}}", - "descriptionAdmin": "Tetapan lalai untuk setiap host pada pelayan ini. Tetapan lalai pengguna sendiri, tetapan lalai folder atau host itu sendiri masih boleh menetapkan nilai yang berbeza. Ubah medan untuk menetapkannya di sini, atau kosongkan untuk meninggalkannya tidak ditetapkan.", - "descriptionUser": "Tetapan lalai untuk semua host anda, melebihi pelayan. Folder atau host itu sendiri masih boleh menetapkan nilai yang berbeza. Ubah medan untuk menetapkannya di sini, atau kosongkan untuk meninggalkannya tidak ditetapkan.", - "descriptionFolder": "Tetapan lalai untuk host dalam folder ini dan subfoldernya, melebihi tetapan anda sendiri. Host masih boleh menetapkan nilai yang berbeza. Ubah medan untuk menetapkannya di sini, atau kosongkan untuk meninggalkannya tidak ditetapkan.", - "save": "Simpan tetapan lalai", "saved_other": "Tetapan lalai disimpan. {{count}} host telah dikemaskini.", - "savedInBackground": "Tetapan lalai disimpan. Host sedang dikemaskini di latar belakang.", "appliedToHosts_other": "{{count}} host telah dikemaskini dengan tetapan lalai baru.", - "saveFailed": "Tidak dapat menyimpan tetapan lalai", - "loadFailed": "Tidak dapat memuatkan tetapan lalai", - "confirmTitle": "Simpan tetapan lalai?", "confirmChanges_other": "{{count}} host mengikuti tetapan lalai ini dan akan berubah.", - "confirmNoChanges": "Tiada host sedia ada berubah. Host baru akan bermula dengan tetapan lalai ini.", - "menuMyDefaults": "Tetapan lalai host saya", - "folderDefaultsAction": "Tetapan lalai folder", - "adminSectionDescription": "Tetapkan tetapan lalai yang diikuti oleh setiap host pada pelayan ini, untuk setiap tetapan yang dimiliki host, termasuk setiap plugin. Pengguna dan folder boleh menetapkan mereka sendiri di atasnya, dan mana-mana host masih boleh menggunakan nilainya sendiri.", - "editServerDefaults": "Sunting tetapan lalai pelayan", - "resetMenu": "Set Semula", - "resetAll": "Semua kepada lalai", - "resetCore": "Sambungan dan SSH kepada lalai", "resetDone_other": "{{count}} hos kini mengikuti tetapan lalainya." }, "panel": { @@ -2390,44 +1606,10 @@ "fields": { "secretSaved": "Disimpan. Taip untuk menggantikannya." }, - "sharing": { - "revokeConfirm": "Buang akses untuk {{name}}?", - "revoke": "Buang akses" - }, "manage": { - "searchSettings": "Cari tetapan", - "noMatchingSettings": "Tiada tetapan sepadan.", - "sections": "Bahagian", - "sectionNeedsAttention": "Sesuatu di sini memerlukan perhatian", "needsAttention_other": "{{count}} perkara memerlukan perhatian.", - "bandHost": "Hos", - "bandFeatures": "Protokol dan plugin", - "bandCredential": "Kelayakan", - "sshConnection": "Sambungan SSH", - "errorAddressRequired": "Alamat diperlukan.", - "errorPortRange": "Gunakan port antara 1 dan 65535.", - "defaults": "Lalai", - "searchHosts": "Cari hos", - "searchCredentials": "Cari kelayakan", - "searchDefaults": "Cari lalai", - "addCredential": "Tambah kelayakan", - "nothingMatches": "Tiada padanan", - "nothingYet": "Tiada apa-apa di sini lagi", - "emptyHostsHint": "Tambah hos dan ia akan muncul di sini, dalam mana-mana folder yang anda berikan.", - "emptyCredentialsHint": "Kelayakan yang anda simpan boleh digunakan semula oleh mana-mana hos.", - "collapse": "Runtuhkan", - "expand": "Kembangkan", - "cannotBeUndone": "Ini tidak boleh dibatalkan.", - "hostNotFound": "Tidak dapat mencari hos tersebut. Cuba segar semula senarai.", "hostCount_other": "{{count}} hos", - "credentialCount_other": "{{count}} kelayakan", - "newHost": "Hos baharu", - "newCredential": "Kelayakan baharu", - "advanced": "Tingkat lanjut", - "pickHost": "Pilih hos untuk disunting", - "pickCredential": "Pilih kelayakan untuk disunting", - "pickDefaults": "Pilih tahap lalai untuk disunting", - "pickHint": "Segala-galanya tentang sambungan berada di sini, dikumpulkan supaya anda boleh menemukannya." + "credentialCount_other": "{{count}} kelayakan" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/nl_NL.json b/src/ui/locales/translated/nl_NL.json index 46331595b..2076c0265 100644 --- a/src/ui/locales/translated/nl_NL.json +++ b/src/ui/locales/translated/nl_NL.json @@ -141,7 +141,6 @@ "continue": "Doorgaan", "error": "Fout", "unsavedChanges": "Niet-opgeslagen wijzigingen", - "more": "Meer", "loading": "Laden...", "host": "Host", "selectHost": "Selecteer een host...", @@ -154,7 +153,6 @@ "cancel": "Annuleren", "username": "Gebruikersnaam", "login": "Inloggen", - "logout": "Uitloggen", "register": "Registreren", "password": "Wachtwoord", "confirmPassword": "Wachtwoord bevestigen", @@ -165,8 +163,6 @@ "rename": "Hernoemen", "edit": "Bewerken", "confirm": "Bevestigen", - "next": "Volgende", - "previous": "Vorige", "refresh": "Vernieuwen", "language": "Taal", "backendReconnected": "Serververbinding hersteld", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Lees meer over elk plugin" }, "desktopUpdates": { - "title": "Bureaublad-app", - "mode": "Updates", - "modeHint": "Hoe deze app nieuwe versies krijgt.", - "manualModeHint": "Deze kopie kan zichzelf niet updaten, dus Termix geeft je alleen een seintje als er een nieuwe versie is.", "modeAutomatic": "Automatisch", "modePrompt": "Eerst vragen", "modeNever": "Nooit", @@ -247,15 +239,6 @@ "onboardingTitle": "App-updates", "onboardingBody": "De bureaublad-app kan zichzelf nu updaten. Kies hoe je nieuwe versies wilt ontvangen. Je kunt dit later wijzigen in Instellingen, Updates.", "onboardingManual": "Deze kopie van de app is op een manier geïnstalleerd die geen automatische updates ondersteunt. Termix geeft je daarom een seintje als er een nieuwe versie is, met een link om hem te downloaden.", - "status": "Versie {{version}}", - "statusIdle": "Nog niet gecontroleerd", - "statusChecking": "Controleren op updates", - "statusAvailable": "Versie {{version}} is beschikbaar", - "statusDownloading": "Downloaden van {{version}} ({{progress}}%)", - "statusReady": "Versie {{version}} is klaar. Herstart om te installeren.", - "statusUpToDate": "Je hebt de nieuwste versie", - "statusError": "Kan niet controleren op updates. Probeer het later opnieuw.", - "checkNow": "Nu controleren", "download": "Downloaden", "restart": "Nu herstarten", "later": "Later", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Sluiten", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Wachtwoord kopiëren", - "copySudoPassword": "Sudo-wachtwoord kopiëren", - "passwordCopied": "Wachtwoord gekopieerd naar klembord", - "failedToCopyPassword": "Wachtwoord kopiëren mislukt", - "refreshTab": "Verbinding vernieuwen", - "renameTab": "Tabblad hernoemen", "dashboard": "Dashboard", "quickConnect": "Snel verbinden", - "openAsTabHint": "Ctrl+klik of middelste muisknop om als tabblad te openen", - "openAsTab": "Openen als tabblad", - "openInRightDock": "Openen in rechterdock", - "closeRightDock": "Rechterdock sluiten", - "toggleRightDock": "Rechterdock wisselen", "hosts": "Hosts", "credentials": "Aanmeldgegevens", "connections": "Verbindingen", - "keepSideMenuOpen": "Menu openhouden", - "collapseSideMenu": "Menu inklappen", - "roleAdministrator": "Beheerder", - "roleUser": "Gebruiker", "sync": "Synchroniseren", "reconnectDisconnectedTerminals": "Alle verbroken terminals opnieuw verbinden", "reconnectingTerminals_one": "{{count}} terminal opnieuw verbinden", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "Kon opnieuw verbinden van {{count}} terminals niet starten", "fullscreenUnsupported": "Volledig scherm wordt niet ondersteund door deze browser", "fullscreenFailed": "Kon volledig scherm niet wisselen", - "resetSidebarWidth": "Breedte resetten", - "collapseSidebar": "Zijbalk inklappen", - "openSidebar": "Zijbalk openen", "confirmCloseHost": "{{host}} sluiten?", - "enterFullscreen": "Volledig scherm (Ctrl+Shift+F)", - "exitFullscreen": "Volledig scherm verlaten (Ctrl+Shift+F)", - "group": { - "objects": "Jouw", - "tools": "Tools", - "system": "Systeem" - }, - "searchEverything": "Zoek hosts, tabbladen en acties", - "search": "Zoeken", "hiddenCount_one": "{{count}} verborgen", "hiddenCount_other": "{{count}} verborgen", - "showInRail": "Tonen in zijbalk", - "moveUp": "Omhoog verplaatsen", - "moveDown": "Omlaag verplaatsen", - "resetRailOrder": "Volgorde resetten", - "hideFromRail": "Verbergen uit zijbalk", - "openSettings": "Instellingen openen", "settings": "Instellingen", "manage": "Beheren", - "mobileNavigation": "Navigatie", "plugins": "Plugins" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "Importeren voltooid: {{imported}} geïmporteerd, {{updated}} bijgewerkt, {{failed}} mislukt", "importHostsFailed": "Kan hosts niet importeren" }, - "commandPalette": { - "searchPlaceholder": "Zoek hosts, commando's of instellingen...", - "quickActions": "Snelle acties", - "navigation": "Navigatie", - "orShortcut": "of", - "addNewHost": "Nieuwe host toevoegen", - "adminSettings": "Beheerdersinstellingen", - "addCredential": "Inloggegevens toevoegen", - "recentActivity": "Recente activiteit", - "serversAndHosts": "Servers & hosts", - "noHostsFound": "Geen hosts gevonden die overeenkomen met \"{{search}}\"", - "links": "Links", - "navigate": "Navigeren", - "select": "Selecteren", - "pluginActions": "Meer acties", - "noTargetTab": "Er is geen terminaltabblad open", - "documentation": "Documentatie" - }, "splitScreen": { "title": "Gesplitst scherm", "defaultLabel": "Splitsing {{number}}", "splitRight": "Naar rechts splitsen", "splitDown": "Naar beneden splitsen", - "addToSplit": "Toevoegen aan {{split}}", "paneEmptyItem": "Venster {{index}}: leeg", "paneItem": "Venster {{index}}: {{label}}", "paneNumber": "Venster {{index}}", - "newPaneRight": "Nieuw venster aan de rechterkant", - "newPaneBelow": "Nieuw venster eronder", "emptyTitle": "Leeg venster", "emptyHint": "Kies iets om hier weer te geven. Zolang dit venster geselecteerd is, wordt alles wat je vanuit de zijbalk opent, hier geopend.", "openTabs": "Open tabbladen", @@ -962,7 +890,6 @@ "clearPane": "Dit venster leegmaken", "zoom": "Venster vergroten", "unzoom": "Indeling herstellen", - "unsplit": "Splitsing opheffen", "layouts": "Indelingen", "applyLayout": "Indeling wijzigen", "maxPanes_one": "Een splitsing kan maximaal {{count}} paneel bevatten", @@ -971,8 +898,6 @@ "dropHere": "Loslaten om hier weer te geven", "paneActions": "Vensteracties", "dividerHint": "Slepen om te herschalen. Dubbelklik om gelijk te verdelen.", - "openInSplit": "Openen in splitsing", - "openInNewSplit": "Nieuwe splitsing met het huidige tabblad", "shortcuts": "Sneltoetsen", "shortcutNavigate": "Tussen vensters wisselen", "presets": { @@ -986,23 +911,6 @@ "grid6": "Raster van zes" } }, - "connections": { - "noConnections": "Geen verbindingen", - "noConnectionsDesc": "Open een terminal, bestandsbeheer of remote desktop om verbindingen hier te zien", - "connectedFor": "Verbonden gedurende {{duration}}", - "connected": "Verbonden", - "disconnected": "Verbroken", - "reconnect": "Opnieuw verbinden", - "sectionOpen": "Open", - "sectionBackground": "Achtergrond", - "backgroundDesc": "Sessies blijven {{minutes}} minuten na het verbreken bestaan en kunnen opnieuw worden verbonden.", - "expiresIn": "Verloopt over {{duration}}", - "search": "Verbindingen zoeken...", - "noSearchResults": "Geen verbindingen gevonden die overeenkomen met uw zoekopdracht", - "rename": "Sessie hernoemen", - "forgetConfirm": "De achtergrondsessie voor {{name}} beëindigen?", - "forget": "Sessie beëindigen" - }, "sshAuth": { "totpRequired": "Tweefactorauthenticatie vereist", "totpCodeLabel": "Verificatiecode", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "sleutelwachtwoord", "pastePrivateKey": "Plak uw privésleutel hier...", - "enterPassword": "Voer uw wachtwoord in", - "apiKeyName": "bijv. CI-pipeline", - "credentialName": "bijv. Productie-SSH-sleutel", - "optionalDetails": "Optionele details...", - "sshUsername": "bijv. root of deploy", - "hostAddress": "10.0.0.1 of example.com", - "hostName": "bijv. Productiewebsite" + "enterPassword": "Voer uw wachtwoord in" }, "dashboard": { - "title": "Dashboard", - "github": "GitHub", - "reportBug": "Bug melden", - "discord": "Discord", - "docs": "Documentatie", - "donate": "Doneren", - "serverOverview": "Serveroverzicht", - "version": "Versie", "updateAvailable": "Update beschikbaar", - "beta": "Beta", - "uptime": "Uptime", - "database": "Database", - "healthy": "Gezond", - "error": "Fout", - "totalHosts": "Totaal aantal hosts", - "totalCredentials": "Totaal aantal referenties", - "recentActivity": "Recente activiteit", - "reset": "Resetten", - "noRecentActivity": "Geen recente activiteit", - "quickActions": "Snelle acties", - "addHost": "Host toevoegen", - "addCredential": "Referentie toevoegen", - "adminSettings": "Beheerdersinstellingen", - "userProfile": "Gebruikersprofiel", - "serverStats": "Serverstatistieken", - "customizeLayout": "Dashboard aanpassen", - "justNow": "zojuist" + "beta": "Beta" }, "dashboardTab": { "stable": "STABIEL", - "registerNewServer": "Een nieuwe server registreren", - "storeSshKeysOrPasswords": "SSH-sleutels of wachtwoorden opslaan", - "manageUsersAndRoles": "Gebruikers en rollen beheren", - "manageYourAccount": "Uw account beheren", - "hostStatus": "Hoststatus", - "noHostsConfigured": "Geen hosts geconfigureerd", - "checking": "CONTROLEREN", - "commandPalette": "Commandopallet", - "done": "Klaar", - "clear": "Wissen", - "dragToResizeColumns": "Sleep om kolommen te herschalen", - "hostsAvailable": "Beschikbare hosts", - "removeSection": "Sectie verwijderen", - "addSection": "Sectie toevoegen", - "allSectionsShown": "Alles staat al op het dashboard.", - "fromPlugins": "Van plugins", - "dropHere": "Sleep hier een sectie naartoe", - "dragToReorder": "Sleep secties om de volgorde te wijzigen", - "clearActivityConfirm": "Recente activiteit wissen?", - "resetConfirm": "Dashboard terugzetten naar de standaardindeling?", "onlineCount_one": "{{count}} online", "onlineCount_other": "{{count}} online", "hostCount_one": "{{count}} host", "hostCount_other": "{{count}} hosts" }, "admin": { - "sectionGeneral": "Algemeen", - "sectionUsers": "Gebruikers", - "sectionSessions": "Sessies", - "sectionRoles": "Rollen", - "sectionDatabase": "Database", - "sectionApiKeys": "API-sleutels", - "sectionAuditLog": "Auditlogboek", - "sectionSsl": "HTTPS-certificaat", - "sectionBranding": "White Label", - "brandingAppName": "Applicatienaam", - "brandingAppNameDesc": "Wordt weergegeven op het inlogscherm en in de browsertab. Laat leeg om \"Termix\" te gebruiken.", - "brandingTagline": "Slogan", - "brandingTaglineDesc": "Wordt weergegeven onder de applicatienaam op het inlogscherm. Laat leeg om de standaardslogan te gebruiken.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG of WEBP, maximaal 750 KB. Vervangt het standaardpictogram op het inlogscherm en in de browsertab.", - "brandingLogoUpload": "Logo uploaden", - "brandingLogoReset": "Terugzetten naar standaard", - "brandingLogoInvalid": "Ongeldige afbeelding. Gebruik een PNG-, JPEG- of WEBP-bestand van maximaal 750 KB.", - "brandingSaved": "Branding-instellingen opgeslagen", - "brandingSaveFailed": "Het opslaan van de branding-instellingen is mislukt", - "sslDescription": "Het certificaat dat Termix via HTTPS serveert. Upload hier uw eigen certificaat, of verkrijg en vernieuw er een van Let's Encrypt in de sectie ACME-certificaten.", - "sslDocsLink": "SSL-documentatie bekijken", - "sslCertStatus": "Certificaatstatus", - "sslCertStatusNone": "Geen certificaat", - "sslCertStatusValid": "Geldig", - "sslCertStatusExpiring": "Binnenkort verlopen", - "sslCertStatusExpired": "Verlopen", - "sslCertExpiresAt": "Verloopt op {{date}}", - "sslInfoNote": "Na het uitgeven of uploaden van een certificaat schakelt Termix automatisch HTTPS in op SSL_PORT (standaard 8443) naast de bestaande HTTP-poort. Zorg ervoor dat deze poort is gepubliceerd/gemapped naar deze container zodat deze bereikbaar is.", - "sslManualCert": "Certificaat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Privésleutel (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Plak uw bestaande certificaat en privésleutel, inclusief de volledige keten indien vereist door uw CA.", - "sslManualUpload": "Certificaat uploaden en installeren", - "sslManualUploadLoading": "Certificaat wordt geüpload...", - "sslManualUploadSuccess": "Certificaat is succesvol geüpload en geïnstalleerd", - "sslManualUploadFailed": "Uploaden van certificaat is mislukt", - "sslManualRequiresFields": "Certificaat en privésleutel zijn verplicht", - "auditLogTotal": "{{total}} totaal aantal items", - "auditLogEmpty": "Geen auditlogboekitems gevonden", - "auditLogSuccess": "Geslaagd", - "auditLogFailed": "Mislukt", - "auditLogClearFilters": "Filters wissen", - "auditLogPage": "Pagina {{page}} van {{totalPages}} ({{total}} totaal)", - "auditLogIp": "IP", - "auditLogResourceId": "Bron-ID", - "auditLogFilterUser": "Gebruiker", - "auditLogFilterAction": "Actie", - "auditLogFilterResourceType": "Bronstype", - "auditLogFilterStatus": "Status", - "auditLogFilterFrom": "Vanaf", - "auditLogFilterTo": "Tot", - "auditLogFilterAll": "Alles", - "allowRegistration": "Gebruikersregistratie toestaan", - "allowRegistrationDesc": "Laat nieuwe gebruikers zich zelf registreren met een gebruikersnaam en wachtwoord", - "allowPasswordLogin": "Inloggen met wachtwoord toestaan", - "allowPasswordLoginDesc": "Inloggen met gebruikersnaam/wachtwoord", - "externalAutoProvision": "Externe accounts automatisch aanmaken", - "externalAutoProvisionDesc": "Maak een account aan bij de eerste inlog via een externe methode zoals SSO of LDAP. Als dit uit staat, kunnen alleen mensen met een bestaand account zich op deze manier aanmelden", - "secondFactorAfterExternalLogin": "Vraag om een tweede factor na extern inloggen (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Bij 'Uit' wordt een ingeschreven tweede factor alleen gevraagd na inloggen met wachtwoord en andere lokale methoden, zoals voorheen. Bij 'Aan' wordt het gevraagd na elke inlogmethode, inclusief SSO en LDAP.", - "allowPasswordReset": "Wachtwoordreset toestaan", - "allowPasswordResetDesc": "Resetcode via Docker-logs", - "auditForwardingTitle": "Doorsturen naar SIEM", - "auditForwardingDesc": "Stuur een kopie van elke auditlogboekvermelding naar een externe verzamelaar als NDJSON. Lokale logs blijven de bron van waarheid.", - "auditForwardingEnvNotice": "Een omgevingsvariabele configureert ook doorsturen; de hier opgeslagen URL heeft voorrang.", - "auditForwardingToken": "Bearertoken (optioneel)", - "auditForwardingTokenStored": "Bearertoken (opgeslagen)", - "auditForwardingSaved": "Auditdoorstuurinstellingen opgeslagen", - "auditForwardingSaveError": "Auditdoorstuurinstellingen konden niet worden opgeslagen", - "sessionTimeout": "Sessietijdslimiet", - "hours": "uur", - "sessionTimeoutRange": "Min 1u, max 720u", - "monitoringDefaults": "Standaardwaarden monitoring", - "statusCheck": "Statuscontrole", - "sec": "sec", - "logLevel": "Logniveau", "usersCount_one": "{{count}} gebruiker", - "usersCount_other": "{{count}} gebruikers", - "searchUsers": "Zoek gebruikers...", - "noUsers": "Geen gebruikers", - "noUsersMatch": "Geen gebruikers komen overeen met uw zoekopdracht", - "pageOf": "Pagina {{page}} van {{total}}", - "createUser": "Aanmaken", - "newRole": "Nieuwe rol", - "roleName": "Naam", - "roleDisplayName": "Weergavenaam", - "roleDescription": "Beschrijving", "rolesCount_one": "{{count}} rol", - "rolesCount_other": "{{count}} rollen", - "createRole": "Aanmaken", - "creating": "Aanmaken...", - "exportDatabase": "Database exporteren", - "exportDatabaseDesc": "Download een draagbaar SQLite-backup van alle hosts, referenties en instellingen", - "export": "Exporteren", - "exporting": "Exporteren...", - "importDatabase": "Database importeren", - "importDatabaseDesc": "Herstel vanuit een draagbaar .sqlite-backup op elke database-backend", - "importDatabaseSelected": "Geselecteerd: {{name}}", - "selectFile": "Selecteer bestand", - "changeFile": "Wijzigen", - "import": "Importeren", - "importing": "Importeren...", "apiKeysCount_one": "{{count}} sleutel", - "apiKeysCount_other": "{{count}} sleutels", - "apiKeysDocsLink": "Documentatie bekijken", - "apiKeysCliHint": "Gebruik een API-sleutel met de Termix CLI om servers te beheren vanuit uw terminal.", - "apiKeysCliLink": "CLI-documentatie bekijken", - "newApiKey": "Nieuwe API-sleutel", - "apiKeyCreatedWarning": "Sleutel aangemaakt - kopieer deze nu, hij wordt niet meer getoond.", - "apiKeyName": "Naam", - "apiKeyUser": "Gebruiker", - "apiKeySelectUser": "Selecteer een gebruiker...", - "apiKeyExpiresAt": "Vervalt op", - "createKey": "Sleutel aanmaken", - "apiKeyNoExpiry": "Geen vervaldatum", - "revokedBadge": "INGETROKKEN", - "authTypeDual": "Dubbele authenticatie", - "authTypeExternal": "Extern", - "authTypeLocal": "Lokaal", - "adminStatusAdministrator": "Beheerder", - "adminStatusRegularUser": "Standaardgebruiker", - "adminBadge": "BEHEERDER", - "systemBadge": "SYS", - "customBadge": "AANGEPAST", - "youBadge": "JOU", "sessionsActive_one": "{{count}} actief", - "sessionsActive_other": "{{count}} actief", - "sessionActive": "Actief: {{time}}", - "sessionExpires": "Verv.: {{time}}", - "revokeAll": "Alles", - "revokeAllSessionsSuccess": "Alle sessies voor gebruiker ingetrokken", - "revokeAllSessionsFailed": "Sessies intrekken mislukt", - "revokeSessionFailed": "Sessie intrekken mislukt", - "addRole": "Rol toevoegen", - "noCustomRoles": "Geen aangepaste rollen gedefinieerd", - "removeRoleFailed": "Rol verwijderen mislukt", - "assignRoleFailed": "Rol toewijzen mislukt", - "userAdminAccess": "Beheerder", - "userAdminAccessDesc": "Volledige toegang tot alle beheerinstellingen", - "userRoles": "Rollen", - "revokeAllUserSessions": "Alle sessies intrekken", - "revokeAllUserSessionsDesc": "Forceer opnieuw inloggen op alle apparaten", - "revoke": "Intrekken", - "deleteUserWarning": "Het verwijderen van deze gebruiker is permanent.", - "deleteUser": "{{username}} verwijderen", - "deleting": "Bezig met verwijderen...", - "deleteUserFailed": "Gebruiker verwijderen mislukt", - "deleteUserSuccess": "Gebruiker \"{{username}}\" verwijderd", - "deleteRoleSuccess": "Rol \"{{name}}\" verwijderd", - "revokeKeySuccess": "Sleutel \"{{name}}\" ingetrokken", - "revokeKeyFailed": "Sleutel intrekken mislukt", - "copiedToClipboard": "Gekopieerd naar klembord", - "done": "Klaar", - "createUserTitle": "Gebruiker aanmaken", - "createUserDesc": "Maak een nieuw lokaal account aan.", - "createUserUsername": "Gebruikersnaam", - "createUserPassword": "Wachtwoord", - "createUserPasswordHint": "Minimaal 6 tekens.", - "createUserEnterUsername": "Voer gebruikersnaam in", - "createUserSubmit": "Gebruiker aanmaken", - "editUserTitle": "Gebruiker beheren: {{username}}", - "editUserDesc": "Bewerk rollen, beheerdersstatus, sessies en accountinstellingen.", - "editUserUsername": "Gebruikersnaam", - "editUserAuthType": "Authenticatietype", - "editUserAdminStatus": "Beheerdersstatus", - "editUserUserId": "Gebruikers-ID", - "linkAccountTitle": "Accounts koppelen", - "linkAccountDesc": "Voeg het externe account {{username}} samen met een bestaand lokaal account.", - "linkAccountDescLocal": "Koppel een lokaal account {{username}} aan een bestaand account dat alleen extern is.", - "linkAccountWarningTitle": "Dit zal:", - "linkAccountEffect1": "Het account dat alleen extern is, verwijderen", - "linkAccountEffect2": "De externe aanmelding toevoegen aan het doelaccount", - "linkAccountEffect3": "Zowel externe als wachtwoord-aanmelding toestaan", - "linkAccountTargetUsername": "Gebruikersnaam lokaal account", - "linkAccountTargetPlaceholder": "Voer de gebruikersnaam van het lokale account in om te koppelen", - "linkAccountExternalUsername": "Gebruikersnaam extern account", - "linkAccountExternalPlaceholder": "Voer de gebruikersnaam in van het alleen-externe account om te samenvoegen", - "linkAccountExternalNotFound": "Geen alleen-extern account gevonden met die gebruikersnaam", - "linkAccounts": "Accounts koppelen", - "linkAccountSuccess": "Accounts succesvol gekoppeld", - "linkAccountFailed": "Accounts koppelen mislukt", - "linkAccountInProgress": "Koppelen...", - "unlinkAccountTitle": "Externe aanmelding ontkoppelen", - "unlinkAccountDesc": "Externe aanmelding verwijderen van {{username}}. Ze kunnen zich dan alleen nog aanmelden met hun wachtwoord.", - "unlinkAccountWarning": "Dit verwijdert de externe aanmelding van dit account. De gebruiker moet een wachtwoord hebben ingesteld om zich aan te kunnen melden.", - "unlinkAccount": "Externe aanmelding ontkoppelen", - "unlinkAccountInProgress": "Ontkoppelen...", - "unlinkAccountSuccess": "Externe aanmelding ontkoppeld", - "unlinkAccountFailed": "Externe aanmelding ontkoppelen mislukt", - "updateRegistrationFailed": "Registratie-instelling bijwerken mislukt", - "updatePasswordLoginFailed": "Wachtwoord-aanmeldingsinstelling bijwerken mislukt", - "updateSecondFactorAfterExternalLoginFailed": "Instelling voor tweede factor bijwerken mislukt", - "updatePasswordResetFailed": "Wachtwoordherstelinstelling bijwerken mislukt", - "sessionTimeoutRange2": "Sessietime-out moet tussen 1 en 720 uur liggen", - "sessionTimeoutSaved": "Sessietime-out opgeslagen", - "sessionTimeoutSaveFailed": "Sessietime-out opslaan mislukt", - "monitoringIntervalInvalid": "Ongeldige intervalwaarden", - "monitoringSaved": "Monitoring-instellingen opgeslagen", - "monitoringSaveFailed": "Monitoring-instellingen opslaan mislukt", - "logLevelUpdateFailed": "Logniveau bijwerken mislukt", - "createUserRequired": "Gebruikersnaam en wachtwoord zijn verplicht", - "createUserPasswordTooShort": "Wachtwoord moet minimaal 6 tekens lang zijn", - "createUserSuccess": "Gebruiker \"{{username}}\" aangemaakt", - "createUserFailed": "Gebruiker aanmaken mislukt", - "updateAdminStatusFailed": "Beheerdersstatus bijwerken mislukt", - "allSessionsRevoked": "Alle sessies ingetrokken", - "revokeSessionsFailed": "Sessies intrekken mislukt", - "manageUserData": "Gebruikersgegevens beheren", - "backToUsers": "Terug naar gebruikers", - "manageTabAccount": "Account", - "manageTabHosts": "Hosts", - "manageTabCredentials": "Aanmeldgegevens", - "manageTabSessions": "Sessies", - "manageTabDanger": "Gevaar", - "manageEditorBack": "Terug naar gegevens van {{username}}", - "dataLockedBadge": "VERGRENDELD", - "dataLockedNotice": "De gegevens van {{username}} blijven vergrendeld tot ze zich de volgende keer aanmelden. Hun hosts, aanmeldgegevens en snippets kunnen tot die tijd niet worden bekeken of bewerkt.", - "resetPasswordTitle": "Wachtwoord herstellen", - "resetPasswordExternalOnly": "Deze gebruiker meldt zich aan via een externe provider en heeft geen wachtwoord.", - "resetPasswordPlaceholder": "Nieuw wachtwoord", - "resetPasswordBtn": "Herstellen", - "resetPasswordWorking": "Herstellen...", - "resetPasswordSuccess": "Wachtwoord hersteld", - "resetPasswordSuccessWiped": "Wachtwoord hersteld. De versleutelde gegevens van de gebruiker zijn gewist.", - "resetPasswordFailed": "Wachtwoord herstellen mislukt", - "resetPasswordConfirmWipe": "{{username}} heeft zich niet aangemeld sinds de versleutelingsupgrade, dus hun gegevens kunnen niet worden hersteld. Nu herstellen verwijdert hun hosts, aanmeldgegevens en snippets. Doorgaan?", - "manageApiKeys": "API-sleutels", - "apiKeyNamePlaceholder": "Sleutelnaam", - "apiKeyCopyNotice": "Kopieer deze sleutel nu, deze wordt niet meer getoond.", - "noApiKeysForUser": "Geen API-sleutels", - "apiKeyDeleteFailed": "Verwijderen van API-sleutel mislukt", - "exportUserData": "Gegevensexport", - "exportUserDataDesc": "Download de hosts, referenties en bestandsbeheer-gegevens van deze gebruiker als JSON. Geheimen worden gedecrypteerd.", - "exportUserDataSuccess": "Gebruikersgegevens geëxporteerd", - "exportUserDataFailed": "Exporteren van gebruikersgegevens mislukt", "hostsCount_one": "{{count}} host", "hostsCount_other": "{{count}} hosts", - "addHostForUser": "Host toevoegen", - "noHostsForUser": "Deze gebruiker heeft geen hosts", - "connectToHost": "Verbinden", - "deleteHostConfirm": "Host \"{{name}}\" van {{username}} verwijderen?", - "hostDeletedSuccess": "Host verwijderd", - "hostDeleteFailed": "Verwijderen van host mislukt", "credentialsCount_one": "{{count}} referentie", "credentialsCount_other": "{{count}} referenties", - "addCredentialForUser": "Referentie toevoegen", - "noCredentialsForUser": "Deze gebruiker heeft geen referenties", - "deleteCredentialConfirm": "Referentie \"{{name}}\" van {{username}} verwijderen?", - "credentialDeletedSuccess": "Referentie verwijderd", - "credentialDeleteFailed": "Verwijderen van referentie mislukt", - "noSessionsForUser": "Geen actieve sessies", - "deleteSuccessorLabel": "Overdracht van hosts en referenties aan", - "deleteSuccessorMe": "Mij (de verwijderende beheerder)", - "deleteSuccessorNone": "Niemand, verwijder ze", - "deleteSuccessorDesc": "Alles wat deze gebruiker heeft gedeeld blijft werken onder de nieuwe eigenaar; als je niemand kiest, worden hun hosts, referenties en gedeelde items verwijderd.", - "deleteUserDangerDesc": "Verwijder {{username}} en al hun gegevens (hosts, referenties, snippets, geschiedenis) permanent. Dit kan niet ongedaan worden gemaakt.", - "deleteUserConfirm": "Verwijder {{username}} en al hun gegevens permanent?", - "deleteUserAdminBlocked": "Verwijder de beheerdersstatus voordat je deze gebruiker verwijdert.", - "createRoleRequired": "Naam en weergavenaam zijn verplicht", - "createRoleSuccess": "Rol \"{{name}}\" aangemaakt", - "createRoleFailed": "Aanmaken van rol mislukt", - "apiKeyNameRequired": "Sleutelnaam is verplicht", - "apiKeyUserRequired": "Gebruikers-ID is verplicht", - "apiKeyCreatedSuccess": "API-sleutel \"{{name}}\" aangemaakt", - "apiKeyCreateFailed": "Aanmaken van API-sleutel mislukt", - "exportSuccess": "Database succesvol geëxporteerd", - "exportFailed": "Exporteren van database mislukt", - "importSelectFile": "Selecteer eerst een bestand", - "importCompleted": "Import voltooid: {{total}} items geïmporteerd, {{skipped}} overgeslagen", - "importFailed": "Import mislukt: {{error}}", - "importError": "Importeren van database mislukt", - "sectionHostDefaults": "Standaardwaarden voor hosts", "rolePermissions": { "count_one": "{{count}} machtiging", - "count_other": "{{count}} machtigingen", - "editAction": "Machtigingen bewerken", - "loadError": "Laden van het machtigingenoverzicht mislukt", - "saved": "Rolmachtigingen opgeslagen", - "saveError": "Opslaan van rolmachtigingen mislukt", - "save": "Opslaan", - "saving": "Opslaan...", - "pluginDisabled": "Plug-in uitgeschakeld", "groups": { "hosts": "Hosts", "credentials": "Referenties", "admin": "Beheer" } - }, - "notificationPrivateEndpoints": "Toegestane privé-meldingshosts", - "notificationPrivateEndpointsDesc": "Exacte privé-hosts die meldingskanalen mogen contacteren. Scheid ze met komma's.", - "updateNotificationEndpointsFailed": "Bijwerken van de whitelist voor meldingsendpoints mislukt", - "secondFactorsSectionTitle": "Twee factoren", - "secondFactorsNone": "Geen tweede factoren geregistreerd", - "secondFactorUnavailable": "Niet beschikbaar", - "resetSecondFactors": "Tweede factoren resetten", - "resetSecondFactorsConfirm": "Alle tweede factoren voor {{username}} verwijderen? Ze kunnen zich aanmelden met hun wachtwoord of SSO en zich opnieuw registreren.", - "secondFactorsResetSuccess": "Tweeënfactorenauthenticatie is gereset", - "secondFactorsResetFailed": "Het resetten van de tweeënfactorenauthenticatie is mislukt", - "passwordLoginForced": "Inloggen met wachtwoord is uitgeschakeld, maar er is geen andere inlogmethode ingeschakeld, dus blijft het voor nu aan. Niemand wordt buitengesloten.", - "sslNotRenewed": "Er wordt niets dit certificaat vernieuwd. Het verloopt op {{date}}. Schakel automatische vernieuwing in bij ACME-certificaten, of upload een nieuw certificaat vóór die datum.", - "sslSelfSigned": "Zelfondertekend certificaat gemaakt door Termix. Browsers zullen hierover waarschuwen.", - "sslRenewedBy": "Automatisch vernieuwd door {{plugin}}", - "sslIssuer": "Uitgegeven door {{issuer}}", - "sslNames": "Geldig voor {{names}}", - "sslManualTitle": "Certificaat uploaden", - "updateExternalAutoProvisionFailed": "Het bijwerken van de instelling voor automatisch aanmaken is mislukt", - "hostTags": "Vooraf gedefinieerde hostlabels", - "hostTagsDesc": "Labels die elke gebruiker ziet als suggesties in de hosteditor. Druk op Spatie of Enter om er een toe te voegen. Het verwijderen van een label hier verwijdert het niet van hosts.", - "hostTagsError": "Kon de suggesties voor hostlabels niet laden of opslaan.", - "revokeAllSessionsConfirm": "Overal uitloggen als {{username}}?", - "revokeSessionConfirm": "Uitloggen van deze sessie?", - "revokeSession": "Uitloggen", - "deleteRoleConfirm": "De rol {{name}} verwijderen?", - "revokeKeyConfirm": "De API-sleutel {{name}} intrekken?", - "revokeKey": "Intrekken" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Waar", - "who": "Wie", - "hostLabel": "Host", - "hostPlaceholder": "192.168.1.1 of example.com", - "portLabel": "Poort", - "usernameLabel": "Gebruikersnaam", - "usernamePlaceholder": "gebruikersnaam", - "authLabel": "Authenticatie", - "passwordLabel": "Wachtwoord", - "passwordPlaceholder": "wachtwoord", - "privateKeyLabel": "Privésleutel", - "privateKeyPlaceholder": "Plak privésleutel...", - "credentialLabel": "Inloggegevens", - "credentialPlaceholder": "Selecteer opgeslagen inloggegevens", - "protocolLabel": "Protocol", - "domainLabel": "Domein", - "domainPlaceholder": "optioneel", - "connectToAction": "Verbinden met {{name}}", - "sshProtocol": "SSH", - "noTarget": "Er is niets geïnstalleerd dat kan verbinden met dit type host" + "usernameLabel": "Gebruikersnaam" }, "keybindings": { - "description": "Koppel toetsen aan acties in de terminal en de app, of wijzig de ingebouwde sneltoetsen.", - "defaultsHeading": "Ingebouwde sneltoetsen", - "fixedHeading": "Appsneltoetsen", - "fixed": { - "splitRight": "Splitsen naar rechts", - "splitDown": "Splitsen naar beneden", - "zoomPane": "Het actieve paneel vergroten", - "navigatePane": "Verplaatsen tussen panelen", - "nextTab": "Volgende tabblad", - "previousTab": "Vorige tabblad", - "jumpTab": "Naar tabblad springen", - "previousView": "Terug naar het vorige zijbalkweergave", - "fullscreen": "Volledig scherm in-/uitschakelen" - }, - "customHeading": "Aangepaste sneltoetsen", - "addBinding": "Sneltoets toevoegen", - "addBindingTitle": "Sneltoets toevoegen", - "editBindingTitle": "Sneltoets bewerken", - "loading": "Laden...", - "noCustomBindings": "Nog geen aangepaste sneltoetsen", - "defaultBadge": "Standaard", - "customizedBadge": "Aangepast", - "customize": "Aanpassen", - "resetToDefault": "Standaardwaarden herstellen", - "resetAllToDefaults": "Alles herstellen naar standaardwaarden", - "cancel": "Annuleren", - "saveBinding": "Sneltoets opslaan", - "saveError": "Sneltoetsen konden niet worden opgeslagen", - "pressKeysToRecord": "Toetsencombinatie", - "pressKeysPlaceholder": "Klik en druk op toetsen", - "recording": "Druk op toetsen...", - "comboRequiredError": "Druk eerst op een toetsencombinatie", - "conflictWarning": "Deze combinatie is al gekoppeld aan {{combo}}. Als je dit opslaat, worden beide acties uitgevoerd.", - "actionLabel": "Actie", "actionNextTab": "Naar volgende tabblad", "actionPreviousTab": "Naar vorige tabblad", "actionOpenCommandPalette": "Snelle zoekopdracht openen", - "actionReconnectSession": "Huidige sessie opnieuw verbinden", - "unavailableAction": "{{type}} (niet beschikbaar)", - "actionRequiredError": "Kies eerst een actie", - "deleteConfirm": "Deze sneltoets verwijderen?", - "resetAllConfirm": "Alle sneltoetsen herstellen naar de standaardwaarden?" + "actionReconnectSession": "Huidige sessie opnieuw verbinden" }, "userProfile": { - "storageModeLocal": "Browser", - "storageModeCloud": "Database", - "storageModeDescription": "De browser slaat instellingen alleen op in deze browser. De database synchroniseert met de server en laadt op elk apparaat.", - "resetToDefaults": "Herstellen naar standaardwaarden", - "resetToDefaultsSuccess": "Instellingen hersteld naar standaardwaarden.", - "storageModeSwitch": "Opslag van voorkeuren", - "sectionAccount": "Account", - "desktopProfileTitle": "Alleen dit apparaat", - "desktopProfileDescription": "Dit profiel is lokaal op dit apparaat en meldt zich zelf aan. Koppel het aan een Termix-server om dezelfde hosts en instellingen op elk apparaat te gebruiken.", - "sectionInterface": "Interface", - "interfacePresetDesc": "Hoeveel details Termix toont. Alle functies blijven beschikbaar.", "preset_simple": "Eenvoudig", "preset_simple_desc": "Alleen de basis.", "preset_balanced": "Gebalanceerd", "preset_balanced_desc": "De standaardindeling.", "preset_advanced": "Geavanceerd", "preset_advanced_desc": "Alles ingeschakeld, compact weergegeven.", - "presetClearOverrides": "Alles herstellen", - "presetOverridesTitle": "Aangepast", - "presetRevertArea": "Herstellen", - "presetConfirmTitle": "Overschakelen naar {{preset}}?", - "presetConfirmDesc": "Dit herstelt je zijbalk, navigatie, dashboardindeling, terminalwerkbalk en bestandsbeheerweergave. Je hosts, referenties en startpagina blijven ongewijzigd.", - "presetConfirmApply": "Voorinstelling toepassen", - "runSetupAgainDesc": "Ga opnieuw door de eerste-instelling.", - "runSetupAgainButton": "Installatie uitvoeren", "uiArea_chrome": "App-omlijsting", "uiArea_hostList": "Hostlijst", "uiArea_credentialList": "Referentielijst", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Bestandsbeheer", "uiArea_hostEditor": "Hostbewerker", - "sectionAppearance": "Uiterlijk", - "sectionSecurity": "Beveiliging", - "sectionApiKeys": "API-sleutels", - "sectionData": "Gegevens", - "usernameLabel": "Gebruikersnaam", - "roleLabel": "Rol", - "roleAdministrator": "Beheerder", - "authMethodLabel": "Authenticatiemethode", - "authMethodLocal": "Lokaal", - "twoFaLabel": "2FA", - "twoFaOn": "Aan", - "twoFaOff": "Uit", - "versionLabel": "Versie", - "cliTitle": "Termix CLI", - "cliDescription": "Open terminals, voer opdrachten uit en verplaats bestanden vanuit je eigen shell.", - "cliLearnMore": "Meer informatie", - "deleteAccount": "Account verwijderen", - "deleteAccountDescription": "Verwijder je account permanent", - "deleteButton": "Verwijderen", - "deleteAccountPermanent": "Deze actie is permanent en kan niet ongedaan worden gemaakt.", - "deleteAccountWarning": "Alle sessies, hosts, referenties en instellingen worden permanent verwijderd.", - "confirmPasswordDeletePlaceholder": "Voer je wachtwoord in om te bevestigen", "languageLabel": "Taal", "themeLabel": "Thema", "fontSizeLabel": "Lettergrootte", "interfaceFontLabel": "Interfacelettertype", "interfaceFontDescription": "Wijzigt het lettertype van de applicatie-interface. Terminalprofielen behouden hun eigen lettertype-instellingen.", "accentColorLabel": "Accentkleur", - "keyboardShortcuts": "Sneltoetsen", - "keyboardShortcutsDescription": "Pas sneltoetsen voor kopiëren, plakken en opdrachten in de terminal aan", - "manageShortcuts": "Beheren", - "commandPalette": "Opdrachtenpalet", - "commandPaletteDesc": "Sneltoets inschakelen", - "reopenTabsOnLogin": "Tabbladen opnieuw openen bij inloggen", - "reopenTabsOnLoginDesc": "Stel je open tabbladen weer in wanneer je inlogt of de pagina vernieuwt, zelfs vanaf een ander apparaat", - "confirmTabClose": "Bevestig sluiten tabblad", - "confirmTabCloseDesc": "Vraag om bevestiging voordat terminaltabbladen worden gesloten", - "showTabNumbers": "Tabbladnummers tonen", - "showTabNumbersDesc": "Toon een nummer op elk tabblad om ze beter van elkaar te onderscheiden", - "settingsAppRail": "App Rail", - "sidebarSettingsMoved": "De weergave-instellingen voor de hosts-sidebar zijn verplaatst naar het paneel Sidebar aanpassen, geopend vanuit de hosts-werkbalk.", - "showHostTags": "Hostlabels tonen", - "showHostTagsDesc": "Toon labels in de hostlijst", - "statusColors": "Echte statuskleuren", - "statusColorsDesc": "Gebruik groen/rood voor online/offline status in plaats van de accentkleur", - "pinAppRail": "App Rail vastzetten", - "pinAppRailDesc": "Houd de linker sidebar-app rail altijd uitgeklapt in plaats van alleen bij hover", - "expandAppRailOnHover": "App Rail uitklappen bij hover", - "expandAppRailOnHoverDesc": "Sta toe dat de linker sidebar-app rail uitklapt wanneer de aanwijzer erover beweegt", - "appRailHoverPushesContent": "Inhoud verplaatsen bij uitklappen", - "appRailHoverPushesContentDesc": "Maak ruimte voor de uitgeklapte zijbalk in plaats van deze over de pagina te tonen. Actieve sessies, zoals remote desktop, worden telkens opnieuw geschaald.", - "showPinAppRailButton": "Knop 'App Rail vastzetten' tonen", - "showPinAppRailButtonDesc": "Toon een knop in de app rail om deze open te houden. Standaard uitgeschakeld.", - "settingsNavigation": "Navigatie", - "navigationTabsDesc": "Kies welke tabbladen in de app rail worden weergegeven", - "settingsUpdates": "Updates", - "disableUpdateChecks": "Updatecontroles uitschakelen", - "disableUpdateChecksDesc": "Stop met controleren op updates", - "changePassword": "Wachtwoord wijzigen", - "currentPasswordLabel": "Huidig wachtwoord", - "currentPasswordPlaceholder": "Huidig wachtwoord", - "newPasswordLabel": "Nieuw wachtwoord", - "newPasswordPlaceholder": "Nieuw wachtwoord", - "confirmPasswordLabel": "Bevestig nieuw wachtwoord", - "confirmPasswordPlaceholder": "Bevestig nieuw wachtwoord", - "updatePassword": "Wachtwoord bijwerken", - "createApiKeyTitle": "API-sleutel maken", - "createApiKeyDescription": "Genereer een nieuwe API-sleutel voor programmatische toegang.", - "apiKeyNameLabel": "Naam", - "apiKeyNamePlaceholder": "bijv. CI-pijplijn", - "expiryDateLabel": "Vervaldatum", - "optional": "optioneel", - "cancel": "Annuleren", - "createKey": "Sleutel aanmaken", - "apiKeyCreatedWarning": "Sleutel aangemaakt - kopieer deze nu, deze wordt niet meer getoond.", - "copyApiKey": "API-sleutel kopiëren", - "copiedToClipboard": "Gekopieerd naar klembord", "apiKeyCount_one": "{{count}} sleutel", - "apiKeyCount_other": "{{count}} sleutels", - "newKey": "Nieuwe sleutel", - "noApiKeys": "Nog geen API-sleutels.", - "apiKeyActive": "Actief", - "apiKeyUsageHint": "Voeg je sleutel toe aan de", - "apiKeyUsageHintHeader": "header.", - "apiKeyPermissionsHint": "Sleutels erven de machtigingen van de aanmaakgebruiker over.", - "exportData": "Mijn gegevens exporteren", - "exportDataDesc": "Download een back-up van je hosts, referenties en instellingen om naar een ander apparaat over te zetten", - "export": "Exporteren", - "exporting": "Bezig met exporteren...", - "importData": "Mijn gegevens importeren", - "importDataDesc": "Stel je hosts, referenties en instellingen terug uit een .sqlite-back-upbestand", - "importDataSelected": "Geselecteerd: {{name}}", - "selectFile": "Bestand selecteren", - "changeFile": "Wijzigen", - "import": "Importeren", - "importing": "Bezig met importeren...", - "exportSuccess": "Gegevens succesvol geëxporteerd", - "exportFailed": "Exporteren van gegevens mislukt", - "importSelectFile": "Selecteer eerst een bestand", - "importCompleted": "Importeren voltooid: {{total}} items geïmporteerd, {{skipped}} overgeslagen", - "importFailed": "Importeren mislukt: {{error}}", - "roleUser": "Gebruiker", - "authMethodDual": "Dubbele authenticatie", - "authMethodExternal": "Extern", - "done": "Klaar", - "apiKeyNameRequired": "Sleutelnaam is verplicht", - "apiKeyCreated": "API-sleutel \"{{name}}\" aangemaakt", - "apiKeyCreateFailed": "Aanmaken van API-sleutel mislukt", - "apiKeyUser": "Gebruiker", - "apiKeyExpires": "Vervalt", - "apiKeyRevoked": "API-sleutel \"{{name}}\" ingetrokken", - "apiKeyRevokeFailed": "Intrekken van API-sleutel mislukt", - "passwordFieldsRequired": "Huidige en nieuwe wachtwoorden zijn verplicht", - "passwordMismatch": "Wachtwoorden komen niet overeen", - "passwordTooShort": "Wachtwoord moet minimaal 6 tekens lang zijn", - "passwordUpdated": "Wachtwoord succesvol bijgewerkt", - "passwordUpdateFailed": "Bijwerken van wachtwoord mislukt", - "deletePasswordRequired": "Wachtwoord is vereist om je account te verwijderen", - "deleteFailed": "Verwijderen van account mislukt", - "deleting": "Bezig met verwijderen...", "colorPickerTooltip": "Kleurkiezer openen", "themeSystem": "Systeem", "themeLight": "Licht", @@ -1755,18 +1122,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Aangemeld bij {{server}}", - "linkedProfileDescription": "Dit apparaat gebruikt je account op de server en bewaart een kopie van je gegevens, zodat het ook offline werkt.", - "manageSync": "Synchronisatie beheren", - "setUpSync": "Koppelen aan een server", - "settingsTabsAndShortcuts": "Tabbladen en sneltoetsen", - "onBetaTitle": "Je gebruikt een bètaversie", - "onBetaDescription": "Bedankt voor het testen. Laat ons weten wat er misgaat.", - "tryBetaTitle": "Probeer nieuwe functies als eerste", - "tryBetaDescription": "Sluit je aan bij het bètaprogramma in Updates.", - "sendBetaFeedback": "Bèta-feedback versturen", - "openUpdates": "Updates" + "themeGruvbox": "Gruvbox" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "{{name}} is nodig voor {{list}}. Schakel die eerst uit of verwijder ze.", "missingDependencies": "{{name}} heeft {{list}} nodig, wat niet is geïnstalleerd.", "consentChanged": "Wat deze plugin vraagt, is veranderd sinds je het laatste keer bekeek. Controleer de lijst opnieuw.", - "upload": "{{name}} kon niet worden gelezen: {{error}}", - "developerMode": "Ontwikkelaarsmodus kon niet worden gewijzigd: {{error}}" + "upload": "{{name}} kon niet worden gelezen: {{error}}" }, "data": { "title": "Opgeslagen gegevens", @@ -2145,13 +1500,7 @@ "browsePlugins": "Bladeren door plugins", "loading": "Laden", "developer": { - "title": "Ontwikkelaarsmodus voor plugins", - "hint": "Hiermee kunnen beheerders plugins installeren vanuit een .tmxplug-bestand in het tabblad Plugins, zonder de controles van het register. Gebruik dit om je eigen plugins te bouwen en te testen.", - "enableTitle": "Ontwikkelaarsmodus inschakelen?", - "enableBody": "Beheerders kunnen dan plugins installeren vanuit bestanden die Termix niet heeft gecontroleerd. Een plugin kan alles doen wat zijn mogelijkheden toelaten, dus schakel dit alleen in terwijl je plugins bouwt of test.", - "enable": "Inschakelen", - "installFromFile": "Installeren vanuit bestand", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS is ingesteld, dus installeren vanuit een bestand blijft geblokkeerd." + "installFromFile": "Installeren vanuit bestand" }, "count": { "downloads_one": "{{formatted}} download", @@ -2189,71 +1538,7 @@ "secretSet": "Ingesteld", "secretNotSet": "Niet ingesteld", "secretReplace": "Vervangen", - "pluginSettingsSaved": "Instellingen opgeslagen", - "pluginSettingsInvalid": "Sommige instellingen konden niet worden opgeslagen. Controleer de gemarkeerde velden.", - "pluginSettingsSaveFailed": "Instellingen opslagen mislukt", - "pluginSettingsLoadFailed": "Instellingen laden mislukt", - "featureUnavailable": "{{name}} is momenteel niet beschikbaar. Deze instellingen worden opgeslagen, maar hebben geen effect.", - "account": "Account", - "security": "Beveiliging", - "apiKeys": "API-sleutels", - "data": "Gegevens en synchronisatie", - "interface": "Interface", - "appearance": "Uiterlijk", - "keybindings": "Sneltoetsen", - "adminGeneral": "Algemeen", - "adminUsers": "Gebruikers", - "adminSessions": "Sessies", - "adminRoles": "Rollen", - "adminHostDefaults": "Standaardwaarden voor hosts", - "adminBranding": "Branding", - "adminDatabase": "Database", - "adminSsl": "SSL", - "adminApiKeys": "API-sleutels", - "adminAuditLog": "Auditlogboek", - "bandYou": "Jouw account", - "bandApp": "Deze app", - "bandPlugins": "Plugins", - "bandInstance": "Deze server", - "searchPlaceholder": "Zoek instellingen", - "noResults": "Geen overeenkomende instellingen.", - "pages": "Pagina's", - "instanceSettings": "Serverinstellingen", - "nothingHere": "Hier is niets in te stellen.", - "searchPage": "Zoek op deze pagina", - "noPageMatches": "Niets op deze pagina komt overeen.", - "updates": { - "title": "Updates", - "betaProgram": "Bètaprogramma", - "betaIntro": "Bèta's zijn vroege builds van de volgende Termix-versie. Ze verschijnen op dinsdag en vrijdag als er iets nieuws te proberen is. Ze kunnen bugs bevatten, en jouw feedback zorgt ervoor dat de stabiele release beter wordt.", - "termixBetas": "Termix-bèta's", - "termixBetasHint": "Houd mij op de hoogte van nieuwe bèta's, niet alleen van stabiele releases.", - "runningBetaBuild": "Je gebruikt een bètabuild. Om te stoppen, schakel je terug naar een stabiel image of installatieprogramma.", - "howToInstall": "Hoe krijg ik de bèta?", - "desktopInstall": "Download de bèta-installer en installeer deze over de huidige versie.", - "downloadBeta": "Download {{version}}", - "dockerInstall": "Wijzig je image naar de bètatag en herstart de container:", - "copy": "Kopiëren", - "copied": "Gekopieerd", - "copyFailed": "Kon niet kopiëren", - "learnMore": "Meer informatie over bèta's", - "feedback": "Feedback", - "feedbackHint": "Een bug gevonden of een idee? Het gaat direct naar de ontwikkelaars, met je versie al ingevuld.", - "sendFeedback": "Bèta-feedback versturen", - "releases": "Releases", - "thisVersion": "Deze versie", - "newestStable": "Nieuwste stabiele versie", - "newestBeta": "Nieuwste bèta", - "noRelease": "Momenteel geen", - "pluginBetas": "Pluginbèta's", - "pluginBetasIntro": "Elke plugin kan apart bèta's gebruiken. Om er een te proberen, open je de plugin en druk je op Bèta proberen.", - "openPlugins": "Plugins openen", - "waitingForStable": "Terug op stabiel. Blijft op {{version}} tot een stabiele release nieuwer is.", - "backToStable": "Terug naar stabiel", - "allPluginsBeta": "Bèta's gebruiken voor alle plugins", - "allPluginsStable": "Alle plugins terug naar stabiel", - "saveFailed": "Kon de wijziging niet opslaan" - } + "featureUnavailable": "{{name}} is momenteel niet beschikbaar. Deze instellingen worden opgeslagen, maar hebben geen effect." }, "managerCard": { "refresh": "Vernieuwen", @@ -2263,83 +1548,13 @@ "filter": "Filteren..." }, "sync": { - "server": "Termix-server", - "account": "Account", - "status": "Status", - "never": "nooit", - "justNow": "zojuist", "minutesAgo_one": "{{count}} minuut geleden", "minutesAgo_other": "{{count}} minuten geleden", "hoursAgo_one": "{{count}} uur geleden", "hoursAgo_other": "{{count}} uur geleden", - "actionFailed": "Dat is niet gelukt. Probeer het opnieuw.", - "unlinkedTitle": "Alleen op dit apparaat", - "unlinkedBody": "Termix werkt op dit apparaat zelfstandig. Koppel het aan je Termix-server om alles op elkaar afgestemd te houden.", - "unlinkedPointHosts": "Je hosts, referenties, snippets en instellingen volgen je naar elk apparaat.", - "unlinkedPointOffline": "Alles werkt nog steeds als de server niet bereikbaar is, en wordt later bijgewerkt.", - "unlinkedPointAccount": "Je meldt je aan met je serveraccount, en hosts die mensen met je hebben gedeeld, verschijnen hier ook.", - "linkButton": "Koppelen aan een server", - "state": { - "syncing": "Synchroniseren", - "offline": "Server niet bereikbaar", - "error": "Synchronisatie gestopt", - "signedOut": "Afmelding voltooid", - "synced": "Gesynchroniseerd {{time}}" - }, "pending_one": "{{count}} wijziging wacht op synchronisatie", "pending_other": "{{count}} wijzigingen wachten op synchronisatie", - "signInAgain": "Opnieuw aanmelden", - "syncNow": "Nu synchroniseren", - "unlink": "Ontkoppelen", - "unlinked": "Dit apparaat is niet langer gekoppeld", - "unlinkTitle": "Dit apparaat ontkoppelen?", - "unlinkDescription": "Het synchroniseren stopt en je wordt afgemeld bij de server. Hosts die door anderen met jou zijn gedeeld, worden in ieder geval van dit apparaat verwijderd.", - "unlinkKeepTitle": "Mijn gegevens hier bewaren", - "unlinkKeepBody": "Je hosts, referenties en instellingen blijven op dit apparaat en blijven zelfstandig werken.", - "unlinkRemoveTitle": "Gesynchroniseerde gegevens verwijderen", - "unlinkRemoveBody": "Alles wat van de server kwam, wordt van dit apparaat verwijderd. Alleen hosts die lokaal op dit apparaat zijn bewaard, blijven achter.", - "conflictsTitle": "Conflicten", - "conflictsDescription": "Deze zijn hier en op de server tegelijkertijd gewijzigd. De versie van de server wordt gebruikt. Bewaar jouw versie om deze in plaats daarvan naar de server te sturen.", - "keepMine": "De mijne bewaren", - "keepServer": "Serverversie bewaren", - "errorsTitle": "Niet gesynchroniseerd", - "errorsDescription": "De server heeft deze wijzigingen niet geaccepteerd. Ze blijven op dit apparaat.", - "errorPermission": "Je account op de server mag deze wijziging niet aanbrengen.", - "retry": "Opnieuw proberen", - "whatSyncs": "Wat wordt gesynchroniseerd", - "whatSyncsDescription": "Schakel uit wat je alleen op dit apparaat wilt bewaren.", - "coreGroup": "Termix", - "notOnServer": "De server heeft dit niet", - "notOnDevice": "Nog niet op dit apparaat", - "localOnlyHint": "Je kunt ook individuele hosts of mappen lokaal op dit apparaat bewaren via hun instellingen.", - "originTitle": "Waar verbindingen starten", - "originDescription": "Verbind met hosts vanaf dit apparaat, of via de server. Je kunt dit per host wijzigen.", - "originLocal": "Dit apparaat", - "originRemote": "De server", - "entities": { - "hosts": "Hosts", - "sshCredentials": "Referenties", - "sshFolders": "Mappen", - "userPreferences": "Voorkeuren", - "pluginUserSettings": "Plugin-instellingen", - "sharedHosts": "Met jou gedeelde hosts", - "sharedCredentials": "Met jou gedeelde referenties", - "vaultProfiles": "Vault-profielen", - "snippetFolders": "Snippetmappen", - "snippets": "Snippets", - "dashboardServiceLinks": "Servicelinks", - "homepageItems": "Startpagina-items", - "networkTopology": "Netwerkkaart", - "workspaces": "Werkruimten", - "hostDefaults": "Hoststandaarden", - "hostDefaultsAdmin": "Serverhoststandaarden", - "aiProviders": "AI-aanbieders", - "homepageLayouts": "Startpaginalayouts", - "accountProfile": "Accountprofiel" - }, "proxy": { - "title": "Reverse proxy", - "description": "Alleen nodig als er iets zoals Cloudflare Access of een inlogpagina voor je server staat.", "headersTitle": "Extra headers", "headersHint": "Verzonden met elke aanvraag naar de server, bijvoorbeeld een Cloudflare Access servicetoken.", "headerName": "Headernaam", @@ -2352,8 +1567,7 @@ "username": "Gebruikersnaam", "password": "Wachtwoord", "allowInvalidCertificate": "Een zelfondertekend certificaat vertrouwen", - "allowInvalidCertificateHint": "Alleen voor je eigen server, wanneer het certificaat niet van een bekende autoriteit is.", - "saved": "Opgeslagen" + "allowInvalidCertificateHint": "Alleen voor je eigen server, wanneer het certificaat niet van een bekende autoriteit is." }, "problems": { "invalidUrl": "Dit lijkt niet op een webadres.", @@ -2391,6 +1605,27 @@ "linking": "Koppelen en eerste synchronisatie uitvoeren...", "linked": "Gekoppeld. Uw gegevens worden nu gesynchroniseerd.", "signedInAgain": "Ingelogd. Synchronisatie loopt weer." + }, + "entities": { + "hosts": "Hosts", + "sshCredentials": "Referenties", + "sshFolders": "Mappen", + "userPreferences": "Voorkeuren", + "pluginUserSettings": "Plugin-instellingen", + "sharedHosts": "Met jou gedeelde hosts", + "sharedCredentials": "Met jou gedeelde referenties", + "vaultProfiles": "Vault-profielen", + "snippetFolders": "Snippetmappen", + "snippets": "Snippets", + "dashboardServiceLinks": "Servicelinks", + "homepageItems": "Startpagina-items", + "networkTopology": "Netwerkkaart", + "workspaces": "Werkruimten", + "hostDefaults": "Hoststandaarden", + "hostDefaultsAdmin": "Serverhoststandaarden", + "aiProviders": "AI-aanbieders", + "homepageLayouts": "Startpaginalayouts", + "accountProfile": "Accountprofiel" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "Deze host stelt zijn eigen waarde in. Klik om opnieuw de standaardwaarde van {{source}} te gebruiken", "clearTitle": "Ingesteld op dit niveau. Klik om dit te wissen en in plaats daarvan {{source}} te gebruiken", "inheritedTitle": "Volgt de standaardwaarde van {{source}}", - "titleAdmin": "Serverstandaarden voor hosts", - "titleUser": "Mijn hoststandaarden", - "titleFolder": "Mapstandaarden: {{name}}", - "descriptionAdmin": "Standaardwaarden voor elke host op deze server. De eigen standaardwaarden van een gebruiker, de standaardwaarden van een map of de host zelf kunnen nog steeds een andere waarde instellen. Wijzig een veld om het hier in te stellen, of wis het om het niet ingesteld te laten.", - "descriptionUser": "Standaardwaarden voor al uw hosts, bovenop die van de server. Een map of de host zelf kunnen nog steeds een andere waarde instellen. Wijzig een veld om het hier in te stellen, of wis het om het niet ingesteld te laten.", - "descriptionFolder": "Standaardwaarden voor de hosts in deze map en de submappen, bovenop uw eigen. Een host kan nog steeds een andere waarde instellen. Wijzig een veld om het hier in te stellen, of wis het om het niet ingesteld te laten.", - "save": "Standaardwaarden opslaan", "saved_one": "Standaardwaarden opgeslagen. {{count}} host is bijgewerkt.", "saved_other": "Standaardwaarden opgeslagen. {{count}} hosts zijn bijgewerkt.", - "savedInBackground": "Standaardwaarden opgeslagen. Hosts worden op de achtergrond bijgewerkt.", "appliedToHosts_one": "{{count}} host is bijgewerkt met de nieuwe standaardwaarden.", "appliedToHosts_other": "{{count}} hosts zijn bijgewerkt met de nieuwe standaardwaarden.", - "saveFailed": "Kon de standaardwaarden niet opslaan", - "loadFailed": "Kon de standaardwaarden niet laden", - "confirmTitle": "Standaardwaarden opslaan?", "confirmChanges_one": "{{count}} host volgt deze standaardwaarden en zal wijzigen.", "confirmChanges_other": "{{count}} hosts volgen deze standaardwaarden en zullen wijzigen.", - "confirmNoChanges": "Geen bestaande hosts wijzigen. Nieuwe hosts starten met deze standaardwaarden.", - "menuMyDefaults": "Mijn hoststandaarden", - "folderDefaultsAction": "Mapstandaarden", - "adminSectionDescription": "Stel de standaardwaarden in die elke host op deze server volgt, voor elke instelling die een host heeft, inclusief die van elke plugin. Gebruikers en mappen kunnen daarbovenop hun eigen instellen, en elke host kan nog steeds zijn eigen waarde gebruiken.", - "editServerDefaults": "Serverstandaarden bewerken", - "resetMenu": "Resetten", - "resetAll": "Alles naar standaardwaarden", - "resetCore": "Verbinding en SSH naar standaardwaarden", "resetDone_one": "{{count}} host volgt nu zijn standaardwaarden.", "resetDone_other": "{{count}} hosts volgen nu hun standaardwaarden." }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "Opgeslagen. Typ om het te vervangen." }, - "sharing": { - "revokeConfirm": "Toegang voor {{name}} verwijderen?", - "revoke": "Toegang verwijderen" - }, "manage": { - "searchSettings": "Instellingen zoeken", - "noMatchingSettings": "Geen instellingen gevonden.", - "sections": "Secties", - "sectionNeedsAttention": "Er is hier aandacht nodig", "needsAttention_one": "Er is één ding dat aandacht nodig heeft.", "needsAttention_other": "{{count}} dingen hebben aandacht nodig.", - "bandHost": "Host", - "bandFeatures": "Protocollen en plugins", - "bandCredential": "Inloggegevens", - "sshConnection": "SSH-verbinding", - "errorAddressRequired": "Een adres is vereist.", - "errorPortRange": "Gebruik een poort tussen 1 en 65535.", - "defaults": "Standaardwaarden", - "searchHosts": "Hosts zoeken", - "searchCredentials": "Inloggegevens zoeken", - "searchDefaults": "Standaardwaarden zoeken", - "addCredential": "Inloggegevens toevoegen", - "nothingMatches": "Niets gevonden", - "nothingYet": "Nog niets hier", - "emptyHostsHint": "Voeg een host toe en deze verschijnt hier, in welke map je hem ook geeft.", - "emptyCredentialsHint": "Opgeslagen inloggegevens kunnen door elke host worden hergebruikt.", - "collapse": "Samenvouwen", - "expand": "Uitvouwen", - "cannotBeUndone": "Dit kan niet ongedaan worden gemaakt.", - "hostNotFound": "Deze host is niet gevonden. Probeer de lijst te vernieuwen.", "hostCount_one": "{{count}} host", "hostCount_other": "{{count}} hosts", "credentialCount_one": "{{count}} inloggegevens", - "credentialCount_other": "{{count}} inloggegevens", - "newHost": "Nieuwe host", - "newCredential": "Nieuwe inloggegevens", - "advanced": "Geavanceerd", - "pickHost": "Kies een host om te bewerken", - "pickCredential": "Kies inloggegevens om te bewerken", - "pickDefaults": "Kies een niveau van standaardwaarden om te bewerken", - "pickHint": "Alles over een verbinding vind je hier, gegroepeerd zodat je het makkelijk kunt vinden." + "credentialCount_other": "{{count}} inloggegevens" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/no_NO.json b/src/ui/locales/translated/no_NO.json index d5f52ebdb..055aa78c8 100644 --- a/src/ui/locales/translated/no_NO.json +++ b/src/ui/locales/translated/no_NO.json @@ -141,7 +141,6 @@ "continue": "Fortsett", "error": "Feil", "unsavedChanges": "Ulagrede endringer", - "more": "Mer", "loading": "Laster inn...", "host": "Vert", "selectHost": "Velg en vert...", @@ -154,7 +153,6 @@ "cancel": "Avbryt", "username": "Brukernavn", "login": "Logg inn", - "logout": "Logg ut", "register": "Registrer", "password": "Passord", "confirmPassword": "Bekreft passord", @@ -165,8 +163,6 @@ "rename": "Gi nytt navn", "edit": "Rediger", "confirm": "Bekreft", - "next": "Neste", - "previous": "Forrige", "refresh": "Oppdater", "language": "Språk", "backendReconnected": "Tilkobling til serveren gjenopprettet", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Les om hver enkelt" }, "desktopUpdates": { - "title": "Skrivebordsapp", - "mode": "Oppdateringer", - "modeHint": "Hvordan denne appen får nye versjoner.", - "manualModeHint": "Denne kopien kan ikke oppdatere seg selv, så Termix varsler deg bare når en ny versjon er tilgjengelig.", "modeAutomatic": "Automatisk", "modePrompt": "Spør først", "modeNever": "Aldri", @@ -247,15 +239,6 @@ "onboardingTitle": "Appoppdateringer", "onboardingBody": "Skrivebordsappen kan nå oppdatere seg selv. Velg hvordan du vil at nye versjoner skal ankomme. Du kan endre dette senere i Innstillinger, Oppdateringer.", "onboardingManual": "Denne kopien av appen ble installert på en måte som ikke tillater selvoppdatering, så Termix vil varsle deg når en ny versjon er tilgjengelig med en lenke for nedlasting.", - "status": "Versjon {{version}}", - "statusIdle": "Ikke sjekket ennå", - "statusChecking": "Sjekker etter oppdateringer", - "statusAvailable": "Versjon {{version}} er tilgjengelig", - "statusDownloading": "Laster ned {{version}} ({{progress}} %)", - "statusReady": "Versjon {{version}} er klar. Start på nytt for å installere den.", - "statusUpToDate": "Du har den nyeste versjonen", - "statusError": "Kunne ikke sjekke etter oppdateringer. Prøv igjen senere.", - "checkNow": "Sjekk nå", "download": "Last ned", "restart": "Start på nytt nå", "later": "Senere", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Lukk", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopier passord", - "copySudoPassword": "Kopier sudo-passord", - "passwordCopied": "Passord kopiert til utklippstavlen", - "failedToCopyPassword": "Kunne ikke kopiere passord", - "refreshTab": "Oppdater tilkobling", - "renameTab": "Gi fanen nytt navn", "dashboard": "Dashbord", "quickConnect": "Rask tilkobling", - "openAsTabHint": "Ctrl+klikk eller mellomklikk for å åpne som en fane", - "openAsTab": "Åpne som fane", - "openInRightDock": "Åpne i høyre dokk", - "closeRightDock": "Lukk høyre dokk", - "toggleRightDock": "Veksle høyre dokk", "hosts": "Verter", "credentials": "Innloggingsdetaljer", "connections": "Tilkoblinger", - "keepSideMenuOpen": "Hold menyen åpen", - "collapseSideMenu": "Skjul menyen", - "roleAdministrator": "Administrator", - "roleUser": "Bruker", "sync": "Synkroniser", "reconnectDisconnectedTerminals": "Koble til alle frakoblede terminaler på nytt", "reconnectingTerminals_one": "Kobler til {{count}} terminal på nytt", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "Kunne ikke starte gjenkobling av {{count}} terminaler", "fullscreenUnsupported": "Hele skjermen støttes ikke av denne nettleseren", "fullscreenFailed": "Kunne ikke bytte til hele skjermen", - "resetSidebarWidth": "Tilbakestill bredde", - "collapseSidebar": "Skjul sidefeltet", - "openSidebar": "Åpne sidefeltet", "confirmCloseHost": "Lukk {{host}}?", - "enterFullscreen": "Gå til hele skjermen (Ctrl+Shift+F)", - "exitFullscreen": "Avslutt hele skjermen (Ctrl+Shift+F)", - "group": { - "objects": "Dine", - "tools": "Verktøy", - "system": "System" - }, - "searchEverything": "Søk etter vertsmaskiner, faner og handlinger", - "search": "Søk", "hiddenCount_one": "{{count}} skjult", "hiddenCount_other": "{{count}} skjulte", - "showInRail": "Vis i sidefeltet", - "moveUp": "Flytt opp", - "moveDown": "Flytt ned", - "resetRailOrder": "Tilbakestill rekkefølge", - "hideFromRail": "Skjul fra sidefeltet", - "openSettings": "Åpne innstillinger", "settings": "Innstillinger", "manage": "Administrer", - "mobileNavigation": "Navigasjon", "plugins": "Programtillegg" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "Import fullført: {{imported}} importert, {{updated}} oppdatert, {{failed}} mislyktes", "importHostsFailed": "Kunne ikke importere vertene" }, - "commandPalette": { - "searchPlaceholder": "Søk etter vertene, kommandoer eller innstillinger...", - "quickActions": "Hurtighandlinger", - "navigation": "Navigasjon", - "orShortcut": "eller", - "addNewHost": "Legg til ny vert", - "adminSettings": "Admin-innstillinger", - "addCredential": "Legg til legitimasjon", - "recentActivity": "Siste aktivitet", - "serversAndHosts": "Servere og verter", - "noHostsFound": "Fant ingen verter som samsvarer med \"{{search}}\"", - "links": "Lenker", - "navigate": "Naviger", - "select": "Velg", - "pluginActions": "Flere handlinger", - "noTargetTab": "Ingen terminalfane er åpen", - "documentation": "Dokumentasjon" - }, "splitScreen": { "title": "Delt skjerm", "defaultLabel": "Del {{number}}", "splitRight": "Del til høyre", "splitDown": "Del nedover", - "addToSplit": "Legg til i {{split}}", "paneEmptyItem": "Vindu {{index}}: tomt", "paneItem": "Vindu {{index}}: {{label}}", "paneNumber": "Vindu {{index}}", - "newPaneRight": "Nytt vindu til høyre", - "newPaneBelow": "Nytt vindu nedenfor", "emptyTitle": "Tomt vindu", "emptyHint": "Velg noe som skal vises her. Mens dette vinduet er valgt, åpnes alt du åpner fra sidefeltet også her.", "openTabs": "Åpne faner", @@ -962,7 +890,6 @@ "clearPane": "Tøm dette vinduet", "zoom": "Zoom vindu", "unzoom": "Gjenopprett oppsett", - "unsplit": "Fjern deling", "layouts": "Oppsett", "applyLayout": "Endre oppsett", "maxPanes_one": "En deling kan inneholde opptil {{count}} panel", @@ -971,8 +898,6 @@ "dropHere": "Slipp for å vise her", "paneActions": "Vinduhandlinger", "dividerHint": "Dra for å endre størrelse. Dobbeltklikk for å jevne ut.", - "openInSplit": "Åpne i delt skjerm", - "openInNewSplit": "Ny delt skjerm med gjeldende fane", "shortcuts": "Snarveier", "shortcutNavigate": "Flytt mellom vinduer", "presets": { @@ -986,23 +911,6 @@ "grid6": "Rutenett med seks" } }, - "connections": { - "noConnections": "Ingen tilkoblinger", - "noConnectionsDesc": "Åpne en terminal, filbehandler eller fjernskrivbord for å se tilkoblinger her", - "connectedFor": "Tilkoblet i {{duration}}", - "connected": "Tilkoblet", - "disconnected": "Frakoblet", - "reconnect": "Koble til på nytt", - "sectionOpen": "Åpne", - "sectionBackground": "Bakgrunn", - "backgroundDesc": "Øker vedvarer i {{minutes}} minutter etter frakobling og kan kobles til på nytt.", - "expiresIn": "Utløper om {{duration}}", - "search": "Søk i tilkoblinger...", - "noSearchResults": "Ingen tilkoblinger matcher søket ditt", - "rename": "Gi økten nytt navn", - "forgetConfirm": "Vil du avslutte bakgrunnsøkten for {{name}}?", - "forget": "Avslutt økt" - }, "sshAuth": { "totpRequired": "To-faktor-autentisering kreves", "totpCodeLabel": "Verifiseringskode", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "nøkkel-passord", "pastePrivateKey": "Lim inn din private nøkkel her...", - "enterPassword": "Skriv inn passordet ditt", - "apiKeyName": "f.eks. CI Pipeline", - "credentialName": "f.eks. Produksjon SSH-nøkkel", - "optionalDetails": "Valgfrie detaljer...", - "sshUsername": "f.eks. root eller deploy", - "hostAddress": "10.0.0.1 eller example.com", - "hostName": "f.eks. Web Server Produksjon" + "enterPassword": "Skriv inn passordet ditt" }, "dashboard": { - "title": "Dashbord", - "github": "GitHub", - "reportBug": "Rapporter en feil", - "discord": "Discord", - "docs": "Dokumentasjon", - "donate": "Doner", - "serverOverview": "Serveroversikt", - "version": "Versjon", "updateAvailable": "Oppdatering tilgjengelig", - "beta": "Beta", - "uptime": "Oppetid", - "database": "Database", - "healthy": "Frisk", - "error": "Feil", - "totalHosts": "Totalt antall vertsmaskiner", - "totalCredentials": "Totalt antall legitimasjon", - "recentActivity": "Nylig aktivitet", - "reset": "Tilbakestill", - "noRecentActivity": "Ingen nylig aktivitet", - "quickActions": "Hurtigaksjoner", - "addHost": "Legg til vertsmaskin", - "addCredential": "Legg til legitimasjon", - "adminSettings": "Administratorinnstillinger", - "userProfile": "Brukerprofil", - "serverStats": "Serverstatistikk", - "customizeLayout": "Tilpass dashbord", - "justNow": "akkurat nå" + "beta": "Beta" }, "dashboardTab": { "stable": "STABIL", - "registerNewServer": "Registrer en ny server", - "storeSshKeysOrPasswords": "Lagre SSH-nøkler eller passord", - "manageUsersAndRoles": "Administrer brukere og roller", - "manageYourAccount": "Administrer kontoen din", - "hostStatus": "Vertsmaskinstatus", - "noHostsConfigured": "Ingen vertsmaskiner konfigurert", - "checking": "SJEKKER", - "commandPalette": "Kommandopalette", - "done": "Ferdig", - "clear": "Tøm", - "dragToResizeColumns": "Dra for å endre kolonnens bredde", - "hostsAvailable": "Tilgjengelige vertsmaskiner", - "removeSection": "Fjern seksjon", - "addSection": "Legg til en seksjon", - "allSectionsShown": "Alt er allerede på dashbordet.", - "fromPlugins": "Fra plugins", - "dropHere": "Slipp en seksjon her", - "dragToReorder": "Dra seksjoner for å endre rekkefølgen", - "clearActivityConfirm": "Vil du tømme nylig aktivitet?", - "resetConfirm": "Vil du tilbakestille dashbordet til standardoppsettet?", "onlineCount_one": "{{count}} online", "onlineCount_other": "{{count}} online", "hostCount_one": "{{count}} vertsmaskin", "hostCount_other": "{{count}} vertsmaskiner" }, "admin": { - "sectionGeneral": "Generelt", - "sectionUsers": "Brukere", - "sectionSessions": "Økter", - "sectionRoles": "Roller", - "sectionDatabase": "Database", - "sectionApiKeys": "API-nøkler", - "sectionAuditLog": "Revisjonslogg", - "sectionSsl": "HTTPS-sertifikat", - "sectionBranding": "White Label", - "brandingAppName": "Programnavn", - "brandingAppNameDesc": "Vises på innloggingsskjermen og i nettleserfanen. La stå tomt for å bruke «Termix».", - "brandingTagline": "Underoverskrift", - "brandingTaglineDesc": "Vises under programnavnet på innloggingsskjermen. La stå tomt for å bruke standard underoverskrift.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG eller WEBP, opptil 750 KB. Erstattet standardikonet på innloggingsskjermen og i nettleserfanen.", - "brandingLogoUpload": "Last opp logo", - "brandingLogoReset": "Tilbakestill til standard", - "brandingLogoInvalid": "Ugyldig bilde. Bruk en PNG-, JPEG- eller WEBP-fil på opptil 750 KB.", - "brandingSaved": "White label-innstillingene er lagret", - "brandingSaveFailed": "Kunne ikke lagre white label-innstillingene", - "sslDescription": "Sertifikatet Termix bruker for HTTPS. Last opp ditt eget her, eller hent og forny ett fra Let's Encrypt i delen ACME-sertifikater.", - "sslDocsLink": "Se SSL-dokumentasjon", - "sslCertStatus": "Sertifikatstatus", - "sslCertStatusNone": "Ingen sertifikat", - "sslCertStatusValid": "Gyldig", - "sslCertStatusExpiring": "Utløper snart", - "sslCertStatusExpired": "Utløpt", - "sslCertExpiresAt": "Utløper {{date}}", - "sslInfoNote": "Etter utstedelse eller opplasting av et sertifikat, vil Termix automatisk aktivere HTTPS på SSL_PORT (standard 8443) i tillegg til den eksisterende HTTP-porten. Sørg for at denne porten er publisert/kartlagt til denne containeren slik at den er tilgjengelig.", - "sslManualCert": "Sertifikat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Privat nøkkel (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Lim inn ditt eksisterende sertifikat og private nøkkel, inkludert full kjede hvis det kreves av din CA.", - "sslManualUpload": "Last opp og installer sertifikat", - "sslManualUploadLoading": "Laster opp sertifikat...", - "sslManualUploadSuccess": "Sertifikatet er lastet opp og installert", - "sslManualUploadFailed": "Opplasting av sertifikat mislyktes", - "sslManualRequiresFields": "Sertifikat og privat nøkkel er påkrevd", - "auditLogTotal": "{{total}} totale oppføringer", - "auditLogEmpty": "Ingen revisjonsloggføring funnet", - "auditLogSuccess": "Vellykket", - "auditLogFailed": "Mislyktes", - "auditLogClearFilters": "Tøm filtre", - "auditLogPage": "Side {{page}} av {{totalPages}} ({{total}} totalt)", - "auditLogIp": "IP", - "auditLogResourceId": "Ressurs-ID", - "auditLogFilterUser": "Bruker", - "auditLogFilterAction": "Handling", - "auditLogFilterResourceType": "Resurstype", - "auditLogFilterStatus": "Status", - "auditLogFilterFrom": "Fra", - "auditLogFilterTo": "Til", - "auditLogFilterAll": "Alle", - "allowRegistration": "Tillat brukerregistrering", - "allowRegistrationDesc": "La nye brukere registrere seg selv med brukernavn og passord", - "allowPasswordLogin": "Tillat innlogging med passord", - "allowPasswordLoginDesc": "Innlogging med brukernavn og passord", - "externalAutoProvision": "Opprett eksterne kontoer automatisk", - "externalAutoProvisionDesc": "Opprett en konto første gang noen logger inn via ekstern innlogging som SSO eller LDAP. Når dette er avskrudd, kan bare personer som allerede har en konto logge inn på denne måten", - "secondFactorAfterExternalLogin": "Be om en annen faktor etter ekstern innlogging (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Når avskrudd, blir en registrert annen faktor bare bedt om etter passord og annen lokal innlogging, som før. Når påskrudd, blir den bedt om etter alle innloggingsmetoder, inkludert SSO og LDAP.", - "allowPasswordReset": "Tillat tilbakestilling av passord", - "allowPasswordResetDesc": "Tilbakestillingskode via Docker-logger", - "auditForwardingTitle": "Videresend til SIEM", - "auditForwardingDesc": "Send en kopi av hver revisjonsoppføring til en ekstern samler som NDJSON. Lokale logger forblir den autoritative kilden.", - "auditForwardingEnvNotice": "En miljøvariabel konfigurerer også videresending; URL-en som er lagret her har forrang.", - "auditForwardingToken": "Bearer-token (valgfritt)", - "auditForwardingTokenStored": "Bearer-token (lagret)", - "auditForwardingSaved": "Innstillinger for revisjonsvideresending lagret", - "auditForwardingSaveError": "Kunne ikke lagre innstillinger for revisjonsvideresending", - "sessionTimeout": "Øktstidsavbrudd", - "hours": "timer", - "sessionTimeoutRange": "Min 1t, maks 720t", - "monitoringDefaults": "Standardverdier for overvåking", - "statusCheck": "Statussjekk", - "sec": "sek", - "logLevel": "Loggnivå", "usersCount_one": "{{count}} bruker", - "usersCount_other": "{{count}} brukere", - "searchUsers": "Søk etter brukere...", - "noUsers": "Ingen brukere", - "noUsersMatch": "Ingen brukere samsvarer med søket ditt", - "pageOf": "Side {{page}} av {{total}}", - "createUser": "Opprett", - "newRole": "Ny rolle", - "roleName": "Navn", - "roleDisplayName": "Visningsnavn", - "roleDescription": "Beskrivelse", "rolesCount_one": "{{count}} rolle", - "rolesCount_other": "{{count}} roller", - "createRole": "Opprett", - "creating": "Oppretter...", - "exportDatabase": "Eksporter database", - "exportDatabaseDesc": "Last ned en bærbar SQLite-sikkerhetskopi av alle vertsmaskiner, legitimasjon og innstillinger", - "export": "Eksporter", - "exporting": "Eksporterer...", - "importDatabase": "Importer database", - "importDatabaseDesc": "Gjenopprett fra en bærbar .sqlite-sikkerhetskopi på ethvert databasebaksystem", - "importDatabaseSelected": "Valgt: {{name}}", - "selectFile": "Velg fil", - "changeFile": "Endre", - "import": "Importer", - "importing": "Importerer...", "apiKeysCount_one": "{{count}} nøkkel", - "apiKeysCount_other": "{{count}} nøkler", - "apiKeysDocsLink": "Vis dokumentasjon", - "apiKeysCliHint": "Bruk en API-nøkkel med Termix CLI for å administrere servere fra terminalen din.", - "apiKeysCliLink": "Vis CLI-dokumentasjon", - "newApiKey": "Ny API-nøkkel", - "apiKeyCreatedWarning": "Nøkkel opprettet – kopier den nå, den vises ikke igjen.", - "apiKeyName": "Navn", - "apiKeyUser": "Bruker", - "apiKeySelectUser": "Velg en bruker...", - "apiKeyExpiresAt": "Utløper", - "createKey": "Opprett nøkkel", - "apiKeyNoExpiry": "Ingen utløp", - "revokedBadge": "OPPHØRT", - "authTypeDual": "Dobbelt autentisering", - "authTypeExternal": "Ekstern", - "authTypeLocal": "Lokal", - "adminStatusAdministrator": "Administrator", - "adminStatusRegularUser": "Vanlig bruker", - "adminBadge": "ADMIN", - "systemBadge": "SYS", - "customBadge": "TILPASSET", - "youBadge": "DU", "sessionsActive_one": "{{count}} aktiv", - "sessionsActive_other": "{{count}} aktive", - "sessionActive": "Aktiv: {{time}}", - "sessionExpires": "Utløp: {{time}}", - "revokeAll": "Alle", - "revokeAllSessionsSuccess": "Alle øker for brukeren er opphøyd", - "revokeAllSessionsFailed": "Kunne ikke opphøye økene", - "revokeSessionFailed": "Kunne ikke opphøye økten", - "addRole": "Legg til rolle", - "noCustomRoles": "Ingen tilpassede roller er definert", - "removeRoleFailed": "Kunne ikke fjerne rollen", - "assignRoleFailed": "Kunne ikke tildele rollen", - "userAdminAccess": "Administrator", - "userAdminAccessDesc": "Full tilgang til alle administrasjonsinnstillinger", - "userRoles": "Roller", - "revokeAllUserSessions": "Opphøv alle øker", - "revokeAllUserSessionsDesc": "Tving pålogging på nytt på alle enheter", - "revoke": "Opphøv", - "deleteUserWarning": "Sletting av denne brukeren er permanent.", - "deleteUser": "Slett {{username}}", - "deleting": "Sletter...", - "deleteUserFailed": "Kunne ikke slette brukeren", - "deleteUserSuccess": "Brukeren «{{username}}» er slettet", - "deleteRoleSuccess": "Rollen «{{name}}» er slettet", - "revokeKeySuccess": "Nøkkelen «{{name}}» er opphøyd", - "revokeKeyFailed": "Kunne ikke opphøye nøkkelen", - "copiedToClipboard": "Kopiert til utklippstavlen", - "done": "Ferdig", - "createUserTitle": "Opprett bruker", - "createUserDesc": "Opprett en ny lokal konto.", - "createUserUsername": "Brukernavn", - "createUserPassword": "Passord", - "createUserPasswordHint": "Minimum 6 tegn.", - "createUserEnterUsername": "Skriv inn brukernavn", - "createUserSubmit": "Opprett bruker", - "editUserTitle": "Administrer bruker: {{username}}", - "editUserDesc": "Rediger roller, administratorstatus, øker og kontoinnstillinger.", - "editUserUsername": "Brukernavn", - "editUserAuthType": "Autentiseringstype", - "editUserAdminStatus": "Administratorstatus", - "editUserUserId": "Bruker-ID", - "linkAccountTitle": "Koble sammen kontoer", - "linkAccountDesc": "Slå sammen den eksterne kontoen {{username}} med en eksisterende lokal konto.", - "linkAccountDescLocal": "Koble en lokal konto {{username}} til en eksisterende konto som kun er ekstern.", - "linkAccountWarningTitle": "Dette vil:", - "linkAccountEffect1": "Slette kontoen som kun bruker ekstern pålogging", - "linkAccountEffect2": "Legge til ekstern pålogging til målkontoen", - "linkAccountEffect3": "Tillate både ekstern og passordbasert pålogging", - "linkAccountTargetUsername": "Brukernavn for lokal konto", - "linkAccountTargetPlaceholder": "Skriv inn brukernavnet for den lokale kontoen du vil koble til", - "linkAccountExternalUsername": "Brukernavn for ekstern konto", - "linkAccountExternalPlaceholder": "Skriv inn brukernavnet for den eksterne kontoen du vil slå sammen", - "linkAccountExternalNotFound": "Fant ingen ekstern konto med det brukernavnet", - "linkAccounts": "Koble sammen kontoer", - "linkAccountSuccess": "Kontoene er koblet sammen", - "linkAccountFailed": "Kunne ikke koble sammen kontoene", - "linkAccountInProgress": "Kobler sammen...", - "unlinkAccountTitle": "Fjern ekstern pålogging", - "unlinkAccountDesc": "Fjern ekstern pålogging fra {{username}}. De vil kun kunne logge inn med passord.", - "unlinkAccountWarning": "Dette fjerner ekstern pålogging fra kontoen. Brukeren må ha et passord angitt for å kunne logge inn.", - "unlinkAccount": "Fjern ekstern pålogging", - "unlinkAccountInProgress": "Fjerner...", - "unlinkAccountSuccess": "Ekstern pålogging er fjernet", - "unlinkAccountFailed": "Kunne ikke fjerne ekstern pålogging", - "updateRegistrationFailed": "Kunne ikke oppdatere innstillingen for registrering", - "updatePasswordLoginFailed": "Kunne ikke oppdatere innstillingen for passordbasert pålogging", - "updateSecondFactorAfterExternalLoginFailed": "Kunne ikke oppdatere innstillingen for andre faktor", - "updatePasswordResetFailed": "Kunne ikke oppdatere innstillingen for tilbakestilling av passord", - "sessionTimeoutRange2": "Øktstiden må være mellom 1 og 720 timer", - "sessionTimeoutSaved": "Øktstiden er lagret", - "sessionTimeoutSaveFailed": "Kunne ikke lagre øktstiden", - "monitoringIntervalInvalid": "Ugyldige intervallverdier", - "monitoringSaved": "Overvåkningsinnstillinger er lagret", - "monitoringSaveFailed": "Kunne ikke lagre overvåkningsinnstillinger", - "logLevelUpdateFailed": "Kunne ikke oppdatere loggnivå", - "createUserRequired": "Brukernavn og passord er påkrevd", - "createUserPasswordTooShort": "Passordet må være minst 6 tegn", - "createUserSuccess": "Brukeren «{{username}}» er opprettet", - "createUserFailed": "Kunne ikke opprette bruker", - "updateAdminStatusFailed": "Kunne ikke oppdatere admin-status", - "allSessionsRevoked": "Alle økter er inndratt", - "revokeSessionsFailed": "Kunne ikke inndra økter", - "manageUserData": "Administrer brukerdata", - "backToUsers": "Tilbake til brukere", - "manageTabAccount": "Konto", - "manageTabHosts": "Verte", - "manageTabCredentials": "Innloggingsdetaljer", - "manageTabSessions": "Økter", - "manageTabDanger": "Fare", - "manageEditorBack": "Tilbake til {{username}} sine data", - "dataLockedBadge": "LÅST", - "dataLockedNotice": "{{username}} sine data forblir låst til de logger inn neste gang. Deres verte, innloggingsdetaljer og kommandofragmenter kan ikke vises eller redigeres før da.", - "resetPasswordTitle": "Tilbakestill passord", - "resetPasswordExternalOnly": "Denne brukeren logger inn via en ekstern leverandør og har ikke noe passord.", - "resetPasswordPlaceholder": "Nytt passord", - "resetPasswordBtn": "Tilbakestill", - "resetPasswordWorking": "Tilbakestiller...", - "resetPasswordSuccess": "Passordet er tilbakestilt", - "resetPasswordSuccessWiped": "Passordet er tilbakestilt. Brukerens krypterte data er slettet.", - "resetPasswordFailed": "Kunne ikke tilbakestille passord", - "resetPasswordConfirmWipe": "{{username}} har ikke logget inn siden oppgraderingen av krypteringen, så dataene deres kan ikke gjenopprettes. Tilbakestilling nå vil slette deres verte, innloggingsdetaljer og kommandofragmenter. Vil du fortsette?", - "manageApiKeys": "API-nøkler", - "apiKeyNamePlaceholder": "Navn på nøkkel", - "apiKeyCopyNotice": "Kopier denne nøkkelen nå, den vises ikke igjen.", - "noApiKeysForUser": "Ingen API-nøkler", - "apiKeyDeleteFailed": "Kunne ikke slette API-nøkkel", - "exportUserData": "Dataeksport", - "exportUserDataDesc": "Last ned denne brukerens vertsmaskiner, påloggingsdetaljer og filbehandlerdata som JSON. Hemmeligheter er dekryptert.", - "exportUserDataSuccess": "Brukerdata eksportert", - "exportUserDataFailed": "Kunne ikke eksportere brukerdata", "hostsCount_one": "{{count}} vert", "hostsCount_other": "{{count}} vert", - "addHostForUser": "Legg til vertsmaskin", - "noHostsForUser": "Denne brukeren har ingen vertsmaskiner", - "connectToHost": "Koble til", - "deleteHostConfirm": "Slett vertsmaskinen «{{name}}» som tilhører {{username}}?", - "hostDeletedSuccess": "Vertsmaskin slettet", - "hostDeleteFailed": "Kunne ikke slette vertsmaskin", "credentialsCount_one": "{{count}} legitimasjon", "credentialsCount_other": "{{count}} legitimasjoner", - "addCredentialForUser": "Legg til påloggingsdetaljer", - "noCredentialsForUser": "Denne brukeren har ingen påloggingsdetaljer", - "deleteCredentialConfirm": "Slett påloggingsdetaljene «{{name}}» som tilhører {{username}}?", - "credentialDeletedSuccess": "Påloggingsdetaljer slettet", - "credentialDeleteFailed": "Kunne ikke slette påloggingsdetaljer", - "noSessionsForUser": "Ingen aktive økter", - "deleteSuccessorLabel": "Overfør vertsmaskiner og påloggingsdetaljer til", - "deleteSuccessorMe": "Meg (den slettende administratoren)", - "deleteSuccessorNone": "Ingen, slett dem", - "deleteSuccessorDesc": "Alt denne brukeren delte fungerer videre under den nye eieren; velger du ingen, fjernes deres vertsmaskiner, påloggingsdetaljer og delinger.", - "deleteUserDangerDesc": "Slett {{username}} og all deres data (vertsmaskiner, påloggingsdetaljer, kommandoutdrag, historikk) permanent. Dette kan ikke angres.", - "deleteUserConfirm": "Slett {{username}} og all deres data permanent?", - "deleteUserAdminBlocked": "Fjern administratorstatus før du sletter denne brukeren.", - "createRoleRequired": "Navn og visningsnavn er påkrevd", - "createRoleSuccess": "Rollen «{{name}}» er opprettet", - "createRoleFailed": "Kunne ikke opprette rolle", - "apiKeyNameRequired": "Nøkkelnavn er påkrevd", - "apiKeyUserRequired": "Bruker-ID er påkrevd", - "apiKeyCreatedSuccess": "API-nøkkelen «{{name}}» er opprettet", - "apiKeyCreateFailed": "Kunne ikke opprette API-nøkkel", - "exportSuccess": "Database eksportert", - "exportFailed": "Databaseeksport mislyktes", - "importSelectFile": "Velg en fil først", - "importCompleted": "Import fullført: {{total}} elementer importert, {{skipped}} hoppet over", - "importFailed": "Import mislyktes: {{error}}", - "importError": "Databaseimport mislyktes", - "sectionHostDefaults": "Standardverdier for vertsmaskiner", "rolePermissions": { "count_one": "{{count}} tillatelse", - "count_other": "{{count}} tillatelser", - "editAction": "Rediger tillatelser", - "loadError": "Kunne ikke laste inn tillatelseskatalogen", - "saved": "Rolle-tillatelser lagret", - "saveError": "Kunne ikke lagre rolle-tillatelser", - "save": "Lagre", - "saving": "Lagrer...", - "pluginDisabled": "Programtillegg deaktivert", "groups": { "hosts": "Vertsmaskiner", "credentials": "Påloggingsdetaljer", "admin": "Administrasjon" } - }, - "notificationPrivateEndpoints": "Tillatte private varselsvertsmaskiner", - "notificationPrivateEndpointsDesc": "Nøyaktige private vertsmaskiner som varselkanaler kan kontakte. Skill dem med kommaer.", - "updateNotificationEndpointsFailed": "Kunne ikke oppdatere tillatelser for varslingsendepunkter", - "secondFactorsSectionTitle": "Andre faktorer", - "secondFactorsNone": "Ingen andre faktorer registrert", - "secondFactorUnavailable": "Utilgjengelig", - "resetSecondFactors": "Tilbakestill andre faktorer", - "resetSecondFactorsConfirm": "Fjern alle andre faktorer for {{username}}? De kan logge inn med passord eller SSO og registrere seg på nytt.", - "secondFactorsResetSuccess": "Andre faktorer tilbakestilt", - "secondFactorsResetFailed": "Kunne ikke tilbakestille andre faktorer", - "passwordLoginForced": "Passordlogging er slått av, men ingen andre påloggingsmetoder er aktivert, så det holdes på for nå. Ingen blir låst ute.", - "sslNotRenewed": "Ingenting fornyer dette sertifikatet. Det utløper {{date}}. Slå på automatisk fornyelse i delen ACME-sertifikater, eller last opp et nytt sertifikat før da.", - "sslSelfSigned": "Selvsignert sertifikat laget av Termix. Nettlesere vil advare om dette.", - "sslRenewedBy": "Fornyet automatisk av {{plugin}}", - "sslIssuer": "Utgitt av {{issuer}}", - "sslNames": "Dekker {{names}}", - "sslManualTitle": "Last opp et sertifikat", - "updateExternalAutoProvisionFailed": "Kunne ikke oppdatere innstillingen for automatisk opprettelse", - "hostTags": "Forhåndsdefinerte vertsmerker", - "hostTagsDesc": "Merker alle brukere ser som forslag i vertredigeren. Trykk Mellomrom eller Enter for å legge til ett. Hvis du fjerner et merker her, fjernes det ikke fra verter.", - "hostTagsError": "Kunne ikke laste eller lagre forslag til vertsmerker.", - "revokeAllSessionsConfirm": "Logg {{username}} ut overalt?", - "revokeSessionConfirm": "Logg ut denne økten?", - "revokeSession": "Logg ut", - "deleteRoleConfirm": "Slett rollen {{name}}?", - "revokeKeyConfirm": "Opphev API-nøkkelen {{name}}?", - "revokeKey": "Opphev" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Hvor", - "who": "Hvem", - "hostLabel": "Vert", - "hostPlaceholder": "192.168.1.1 eller eksempel.no", - "portLabel": "Port", - "usernameLabel": "Brukernavn", - "usernamePlaceholder": "brukernavn", - "authLabel": "Autentisering", - "passwordLabel": "Passord", - "passwordPlaceholder": "passord", - "privateKeyLabel": "Privat nøkkel", - "privateKeyPlaceholder": "Lim inn privat nøkkel...", - "credentialLabel": "Legitimasjon", - "credentialPlaceholder": "Velg en lagret legitimasjon", - "protocolLabel": "Protokoll", - "domainLabel": "Domene", - "domainPlaceholder": "valgfritt", - "connectToAction": "Koble til {{name}}", - "sshProtocol": "SSH", - "noTarget": "Ingenten installert kan koble til denne vertstypen" + "usernameLabel": "Brukernavn" }, "keybindings": { - "description": "Tilknytt tastaturkombinasjoner til handlinger i terminalen og appen, eller endre de innebygde snarveiene.", - "defaultsHeading": "Innebygde snarveier", - "fixedHeading": "App-snarveier", - "fixed": { - "splitRight": "Del til høyre", - "splitDown": "Del nedover", - "zoomPane": "Zoom inn på fokusert panel", - "navigatePane": "Flytt mellom paneler", - "nextTab": "Neste fane", - "previousTab": "Forrige fane", - "jumpTab": "Hopp til fane", - "previousView": "Tilbake til forrige sidepanelvisning", - "fullscreen": "Veksle til fullskjerm" - }, - "customHeading": "Tilpassede snarveier", - "addBinding": "Legg til snarvei", - "addBindingTitle": "Legg til snarvei", - "editBindingTitle": "Rediger snarvei", - "loading": "Laster...", - "noCustomBindings": "Ingen tilpassede snarveier ennå", - "defaultBadge": "Standard", - "customizedBadge": "Tilpasset", - "customize": "Tilpass", - "resetToDefault": "Tilbakestill til standard", - "resetAllToDefaults": "Tilbakestill alle til standard", - "cancel": "Avbryt", - "saveBinding": "Lagre snarvei", - "saveError": "Kunne ikke lagre tastatursnarveier", - "pressKeysToRecord": "Tastekombinasjon", - "pressKeysPlaceholder": "Klikk og trykk på taster", - "recording": "Trykk på taster...", - "comboRequiredError": "Trykk på en tastekombinasjon først", - "conflictWarning": "Denne kombinasjonen er allerede tildelt {{combo}}. Hvis du lagrer, vil begge utløses.", - "actionLabel": "Handling", "actionNextTab": "Bytt til neste fane", "actionPreviousTab": "Bytt til forrige fane", "actionOpenCommandPalette": "Åpne hurtigsøk", - "actionReconnectSession": "Koble til gjeldende økt på nytt", - "unavailableAction": "{{type}} (ikke tilgjengelig)", - "actionRequiredError": "Velg en handling først", - "deleteConfirm": "Slette denne tastatursnarveien?", - "resetAllConfirm": "Tilbakestille alle tastatursnarveier til standard?" + "actionReconnectSession": "Koble til gjeldende økt på nytt" }, "userProfile": { - "storageModeLocal": "Nettleser", - "storageModeCloud": "Database", - "storageModeDescription": "Nettleser lagrer innstillinger kun i denne nettleseren. Database synkroniserer med serveren og lastes på enhver enhet.", - "resetToDefaults": "Tilbakestill til standard", - "resetToDefaultsSuccess": "Innstillinger tilbakestilt til standard.", - "storageModeSwitch": "Lagring av preferanser", - "sectionAccount": "Konto", - "desktopProfileTitle": "Kun denne enheten", - "desktopProfileDescription": "Denne profilen finnes kun på denne enheten og logger seg på selvstendig. Koble den til en Termix-server for å bruke de samme vertene og innstillingene på alle enheter.", - "sectionInterface": "Grensesnitt", - "interfacePresetDesc": "Hvor mye detaljer Termix viser. Alle funksjoner forblir tilgjengelige.", "preset_simple": "Enkel", "preset_simple_desc": "Kun det viktigste.", "preset_balanced": "Balansert", "preset_balanced_desc": "Standardoppsettet.", "preset_advanced": "Avansert", "preset_advanced_desc": "Alt på, tett pakket.", - "presetClearOverrides": "Tilbakestill alle", - "presetOverridesTitle": "Tilpasset", - "presetRevertArea": "Angre", - "presetConfirmTitle": "Bytte til {{preset}}?", - "presetConfirmDesc": "Dette tilbakestiller sidefeltet, navigasjonen, dashbordoppsettet, terminalverktøylinjen og filbehandleren. Vertene, legitimasjonen og startsiden din berøres ikke.", - "presetConfirmApply": "Bruk forinnstilling", - "runSetupAgainDesc": "Gå gjennom oppsettet for første gang på nytt.", - "runSetupAgainButton": "Kjør oppsett", "uiArea_chrome": "Programvindu", "uiArea_hostList": "Vertliste", "uiArea_credentialList": "Legitimasjonsliste", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Filbehandler", "uiArea_hostEditor": "Vertrediger", - "sectionAppearance": "Utseende", - "sectionSecurity": "Sikkerhet", - "sectionApiKeys": "API-nøkler", - "sectionData": "Data", - "usernameLabel": "Brukernavn", - "roleLabel": "Rolle", - "roleAdministrator": "Administrator", - "authMethodLabel": "Autentiseringsmetode", - "authMethodLocal": "Lokal", - "twoFaLabel": "2FA", - "twoFaOn": "På", - "twoFaOff": "Av", - "versionLabel": "Versjon", - "cliTitle": "Termix CLI", - "cliDescription": "Åpne terminaler, kjør kommandoer og flytt filer fra din egen shell.", - "cliLearnMore": "Les mer", - "deleteAccount": "Slett konto", - "deleteAccountDescription": "Slett kontoen din permanent", - "deleteButton": "Slett", - "deleteAccountPermanent": "Denne handlingen er permanent og kan ikke angres.", - "deleteAccountWarning": "Alle økter, vertsmaskiner, legitimasjon og innstillinger vil bli slettet permanent.", - "confirmPasswordDeletePlaceholder": "Skriv inn passordet ditt for å bekrefte", "languageLabel": "Språk", "themeLabel": "Tema", "fontSizeLabel": "Skriftstørrelse", "interfaceFontLabel": "Grensesnittskrifttype", "interfaceFontDescription": "Endrer skrifttypen i programgrensesnittet. Terminalprofiler beholder sine egne skrifttypeinnstillinger.", "accentColorLabel": "Accentfarge", - "keyboardShortcuts": "Tastatursnarveier", - "keyboardShortcutsDescription": "Tilpass snarveier for kopiering, liming og kommandoer i terminalen", - "manageShortcuts": "Administrer", - "commandPalette": "Kommandopalette", - "commandPaletteDesc": "Aktiver tastatursnarvei", - "reopenTabsOnLogin": "Gjenåpne faner ved pålogging", - "reopenTabsOnLoginDesc": "Gjenopprett åpne faner når du logger inn eller oppdaterer siden, selv fra en annen enhet", - "confirmTabClose": "Bekreft lukking av fane", - "confirmTabCloseDesc": "Spør før terminalfaner lukkes", - "showTabNumbers": "Vis fanenumre", - "showTabNumbersDesc": "Vis et nummer på hver fane for å gjøre det lettere å skille dem fra hverandre", - "settingsAppRail": "Programlinje", - "sidebarSettingsMoved": "Innstillinger for visning av vertsliste i sidefeltet er flyttet til panelet «Tilpass sidefelt», som åpnes fra verktøylinjen for verter.", - "showHostTags": "Vis vertsmaskinemerker", - "showHostTagsDesc": "Vis merker i vertslisten", - "statusColors": "Reelle statusfarger", - "statusColorsDesc": "Bruk grønn/rød for tilkoblet/frakoblet status i stedet for accentfargen", - "pinAppRail": "Fest programlinje", - "pinAppRailDesc": "Hold venstre sidefelt alltid utvidet i stedet for å utvide det ved sveiping", - "expandAppRailOnHover": "Utvid programlinje ved sveiping", - "expandAppRailOnHoverDesc": "Tillat at venstre sidefelt utvides når pekeren beveger seg over det", - "appRailHoverPushesContent": "Skyv innholdet når det utvides", - "appRailHoverPushesContentDesc": "Gi plass til det utvidede feltet i stedet for å åpne det over siden. Åpne økter, som fjernskrivebord, endrer størrelse hver gang", - "showPinAppRailButton": "Vis knapp for å feste programlinje", - "showPinAppRailButtonDesc": "Vis en knapp i programlinjen for å feste den åpen. Av som standard.", - "settingsNavigation": "Navigasjon", - "navigationTabsDesc": "Velg hvilke faner som skal vises i programlinjen", - "settingsUpdates": "Oppdateringer", - "disableUpdateChecks": "Deaktiver oppdateringssjekker", - "disableUpdateChecksDesc": "Slutt å sjekke etter oppdateringer", - "changePassword": "Endre passord", - "currentPasswordLabel": "Nåværende passord", - "currentPasswordPlaceholder": "Nåværende passord", - "newPasswordLabel": "Nytt passord", - "newPasswordPlaceholder": "Nytt passord", - "confirmPasswordLabel": "Bekreft nytt passord", - "confirmPasswordPlaceholder": "Bekreft nytt passord", - "updatePassword": "Oppdater passord", - "createApiKeyTitle": "Opprett API-nøkkel", - "createApiKeyDescription": "Generer en ny API-nøkkel for programmatisk tilgang.", - "apiKeyNameLabel": "Navn", - "apiKeyNamePlaceholder": "f.eks. CI-rørledning", - "expiryDateLabel": "Utløpsdato", - "optional": "valgfritt", - "cancel": "Avbryt", - "createKey": "Opprett nøkkel", - "apiKeyCreatedWarning": "Nøkkel opprettet – kopier den nå, den vises ikke igjen.", - "copyApiKey": "Kopier API-nøkkel", - "copiedToClipboard": "Kopiert til utklippstavlen", "apiKeyCount_one": "{{count}} nøkkel", - "apiKeyCount_other": "{{count}} nøkler", - "newKey": "Ny nøkkel", - "noApiKeys": "Ingen API-nøkler ennå.", - "apiKeyActive": "Aktiv", - "apiKeyUsageHint": "Legg nøkkelen din i", - "apiKeyUsageHintHeader": "overskriften.", - "apiKeyPermissionsHint": "Nøkler arver tillatelsene til brukeren som opprettet dem.", - "exportData": "Eksporter mine data", - "exportDataDesc": "Last ned en sikkerhetskopi av vertene, legitimasjonene og innstillingene dine for å overføre til en annen enhet", - "export": "Eksporter", - "exporting": "Eksporterer...", - "importData": "Importer mine data", - "importDataDesc": "Gjenopprett vertene, legitimasjonene og innstillingene dine fra en .sqlite-sikkerhetskopi", - "importDataSelected": "Valgt: {{name}}", - "selectFile": "Velg fil", - "changeFile": "Endre", - "import": "Importer", - "importing": "Importerer...", - "exportSuccess": "Dataene ble eksportert", - "exportFailed": "Eksport av data mislyktes", - "importSelectFile": "Velg en fil først", - "importCompleted": "Import fullført: {{total}} elementer importert, {{skipped}} hoppet over", - "importFailed": "Import mislyktes: {{error}}", - "roleUser": "Bruker", - "authMethodDual": "Dobbelt autentisering", - "authMethodExternal": "Ekstern", - "done": "Ferdig", - "apiKeyNameRequired": "Nøkkelnavn er påkrevd", - "apiKeyCreated": "API-nøkkelen «{{name}}» ble opprettet", - "apiKeyCreateFailed": "Kunne ikke opprette API-nøkkel", - "apiKeyUser": "Bruker", - "apiKeyExpires": "Utløper", - "apiKeyRevoked": "API-nøkkelen «{{name}}» ble opphevet", - "apiKeyRevokeFailed": "Kunne ikke oppheve API-nøkkelen", - "passwordFieldsRequired": "Nåværende og nytt passord er påkrevd", - "passwordMismatch": "Passordene stemmer ikke overens", - "passwordTooShort": "Passordet må være minst 6 tegn", - "passwordUpdated": "Passordet ble oppdatert", - "passwordUpdateFailed": "Kunne ikke oppdatere passordet", - "deletePasswordRequired": "Passord er påkrevd for å slette kontoen din", - "deleteFailed": "Kunne ikke slette kontoen", - "deleting": "Sletter...", "colorPickerTooltip": "Åpne fargevelger", "themeSystem": "System", "themeLight": "Lys", @@ -1755,18 +1122,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Logget inn på {{server}}", - "linkedProfileDescription": "Denne enheten bruker kontoen din på serveren og holder en kopi av dataene dine, slik at den fortsatt fungerer uten nett.", - "manageSync": "Administrer synkronisering", - "setUpSync": "Koble til en server", - "settingsTabsAndShortcuts": "Faner og snarveier", - "onBetaTitle": "Du bruker en betaversjon", - "onBetaDescription": "Takk for at du tester. Fortell oss hva som går galt.", - "tryBetaTitle": "Prøv nye funksjoner tidlig", - "tryBetaDescription": "Bli med i betaprogrammet under Oppdateringer.", - "sendBetaFeedback": "Send tilbakemelding om beta", - "openUpdates": "Oppdateringer" + "themeGruvbox": "Gruvbox" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "{{name}} er nødvendig for {{list}}. Slå av disse eller avinstaller dem først.", "missingDependencies": "{{name}} trenger {{list}}, som ikke er installert.", "consentChanged": "Hva denne pluginen ber om har endret seg siden du så på det. Sjekk listen igjen.", - "upload": "Kunne ikke lese {{name}}: {{error}}", - "developerMode": "Kunne ikke endre utviklermodus: {{error}}" + "upload": "Kunne ikke lese {{name}}: {{error}}" }, "data": { "title": "Lagret data", @@ -2145,13 +1500,7 @@ "browsePlugins": "Bla gjennom plugins", "loading": "Laster inn", "developer": { - "title": "Plugin-utviklermodus", - "hint": "Gjør det mulig for administratorer å installere plugins fra en .tmxplug-fil i Plugins-fanen, uten sjekk mot registret. Bruk dette for å bygge og teste dine egne plugins.", - "enableTitle": "Vil du slå på utviklermodus?", - "enableBody": "Administratorer vil kunne installere plugins fra filer som Termix ikke har sjekket. En plugin kan gjøre hva som helst innenfor sine tillatelser, så slå kun dette på når du bygger eller tester plugins.", - "enable": "Slå på", - "installFromFile": "Installer fra fil", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS er satt, så installasjon fra fil er fortsatt blokkert." + "installFromFile": "Installer fra fil" }, "count": { "downloads_one": "{{formatted}} nedlasting", @@ -2189,71 +1538,7 @@ "secretSet": "Angitt", "secretNotSet": "Ikke angitt", "secretReplace": "Erstatt", - "pluginSettingsSaved": "Innstillinger lagret", - "pluginSettingsInvalid": "Noen innstillinger kunne ikke lagres. Sjekk de markerte feltene.", - "pluginSettingsSaveFailed": "Kunne ikke lagre innstillinger", - "pluginSettingsLoadFailed": "Kunne ikke laste innstillinger", - "featureUnavailable": "{{name}} er utilgjengelig akkurat nå. Disse innstillingene er lagret, men vil ikke tre i kraft.", - "account": "Konto", - "security": "Sikkerhet", - "apiKeys": "API-nøkler", - "data": "Data og synkronisering", - "interface": "Grensesnitt", - "appearance": "Utseende", - "keybindings": "Tastatursnarveier", - "adminGeneral": "Generelt", - "adminUsers": "Brukere", - "adminSessions": "Økter", - "adminRoles": "Roller", - "adminHostDefaults": "Standardverdier for vert", - "adminBranding": "Merkevare", - "adminDatabase": "Database", - "adminSsl": "SSL", - "adminApiKeys": "API-nøkler", - "adminAuditLog": "Revisjonslogg", - "bandYou": "Din konto", - "bandApp": "Denne appen", - "bandPlugins": "Plugin-er", - "bandInstance": "Denne serveren", - "searchPlaceholder": "Søk i innstillinger", - "noResults": "Ingen innstillinger matcher.", - "pages": "Sider", - "instanceSettings": "Serverinnstillinger", - "nothingHere": "Ingenting å stille her.", - "searchPage": "Søk på denne siden", - "noPageMatches": "Ingenting på denne siden matcher.", - "updates": { - "title": "Oppdateringer", - "betaProgram": "Beta-program", - "betaIntro": "Beta-versjoner er tidlige utgaver av neste Termix-versjon. De kommer ut på tirsdager og fredager når det er noe nytt å prøve. De kan inneholde feil, og din tilbakemelding er det som gjør den stabile utgivelsen bedre.", - "termixBetas": "Termix beta", - "termixBetasHint": "Fortell meg om nye beta-versjoner, ikke bare stabile utgivelser.", - "runningBetaBuild": "Du kjører en beta-versjon. For å slutte, bytt tilbake til et stabilt bilde eller installeringsprogram.", - "howToInstall": "Slik får du beta-versjonen", - "desktopInstall": "Last ned beta-installeringsprogrammet og installer det over dette.", - "downloadBeta": "Last ned {{version}}", - "dockerInstall": "Endre bildet ditt til beta-taggen og start containeren på nytt:", - "copy": "Kopier", - "copied": "Kopiert", - "copyFailed": "Kunne ikke kopiere", - "learnMore": "Les mer om beta-versjoner", - "feedback": "Tilbakemelding", - "feedbackHint": "Fant du en feil eller har du en idé? Den sendes direkte til utviklerne med din versjon fylt ut.", - "sendFeedback": "Send beta-tilbakemelding", - "releases": "Utgivelser", - "thisVersion": "Denne versjonen", - "newestStable": "Nyeste stabile", - "newestBeta": "Nyeste beta", - "noRelease": "Ingen akkurat nå", - "pluginBetas": "Plugin-beta", - "pluginBetasIntro": "Hver plugin kan bruke beta-versjoner på egen hånd. For å prøve en, åpne den og trykk Prøv beta.", - "openPlugins": "Åpne plugins", - "waitingForStable": "Tilbake på stabil. Holder seg på {{version}} til en stabil utgivelse er nyere.", - "backToStable": "Tilbake til stabil", - "allPluginsBeta": "Bruk beta for alle plugins", - "allPluginsStable": "Alle plugins tilbake til stabil", - "saveFailed": "Kunne ikke lagre endringen" - } + "featureUnavailable": "{{name}} er utilgjengelig akkurat nå. Disse innstillingene er lagret, men vil ikke tre i kraft." }, "managerCard": { "refresh": "Oppdater", @@ -2263,83 +1548,13 @@ "filter": "Filtrer..." }, "sync": { - "server": "Termix-server", - "account": "Konto", - "status": "Status", - "never": "aldri", - "justNow": "akkurat nå", "minutesAgo_one": "{{count}} minutt siden", "minutesAgo_other": "{{count}} minutter siden", "hoursAgo_one": "{{count}} time siden", "hoursAgo_other": "{{count}} timer siden", - "actionFailed": "Det fungerte ikke. Prøv igjen.", - "unlinkedTitle": "Kun denne enheten", - "unlinkedBody": "Termix fungerer selvstendig på denne enheten. Koble den til Termix-serveren din for å holde alt synkronisert.", - "unlinkedPointHosts": "Vertene, legitimasjonene, snuttene og innstillingene dine følger deg til hver enhet.", - "unlinkedPointOffline": "Alt fungerer fortsatt når serveren ikke kan nås, og henter inn senere.", - "unlinkedPointAccount": "Du logger inn med serverkontoen din, og vertene andre har delt med deg vises også her.", - "linkButton": "Koble til en server", - "state": { - "syncing": "Synkroniserer", - "offline": "Serveren kan ikke nås", - "error": "Synkronisering stoppet", - "signedOut": "Logget ut", - "synced": "Synkronisert {{time}}" - }, "pending_one": "{{count}} endring venter på synkronisering", "pending_other": "{{count}} endringer venter på synkronisering", - "signInAgain": "Logg inn igjen", - "syncNow": "Synkroniser nå", - "unlink": "Fjern kobling", - "unlinked": "Denne enheten er ikke lenger koblet", - "unlinkTitle": "Koble fra denne enheten?", - "unlinkDescription": "Synkronisering stoppes, og du logges ut av serveren. Vertsdatamaskiner som andre har delt med deg, fjernes fra denne enheten uansett.", - "unlinkKeepTitle": "Behold dataene mine her", - "unlinkKeepBody": "Vertsdatamaskinene, legitimasjonen og innstillingene dine blir værende på denne enheten og fungerer uavhengig.", - "unlinkRemoveTitle": "Fjern synkroniserte data", - "unlinkRemoveBody": "Alt som kom fra serveren, fjernes fra denne enheten. Kun vertsdatamaskiner som beholdes lokalt, blir værende.", - "conflictsTitle": "Konflikter", - "conflictsDescription": "Disse ble endret både her og på serveren samtidig. Serverversjonen er i bruk. Behold din for å sende den til serveren i stedet.", - "keepMine": "Behold min", - "keepServer": "Behold serverens", - "errorsTitle": "Ikke synkronisert", - "errorsDescription": "Serveren aksepterte ikke disse endringene. De blir værende på denne enheten.", - "errorPermission": "Kontoen din på serveren har ikke tillatelse til å gjøre denne endringen.", - "retry": "Prøv igjen", - "whatSyncs": "Hva som synkroniseres", - "whatSyncsDescription": "Slå av alt du vil beholde kun på denne enheten.", - "coreGroup": "Termix", - "notOnServer": "Serveren har ikke dette", - "notOnDevice": "Ikke på denne enheten ennå", - "localOnlyHint": "Du kan også beholde enkelte vertsdatamaskiner eller mapper lokalt på denne enheten fra innstillingene deres.", - "originTitle": "Hvor tilkoblinger starter", - "originDescription": "Koble til vertsdatamaskiner fra denne enheten, eller gjennom serveren. Du kan endre dette for hver vertsdatamaskin.", - "originLocal": "Denne enheten", - "originRemote": "Serveren", - "entities": { - "hosts": "Vertsdatamaskiner", - "sshCredentials": "Legitimasjon", - "sshFolders": "Mapper", - "userPreferences": "Preferanser", - "pluginUserSettings": "Tilleggsinnstillinger", - "sharedHosts": "Vertsdatamaskiner delt med deg", - "sharedCredentials": "Legitimasjon delt med deg", - "vaultProfiles": "Vault-profiler", - "snippetFolders": "Snippetsmapper", - "snippets": "Snippets", - "dashboardServiceLinks": "Tjenestelenker", - "homepageItems": "Elementer på startsiden", - "networkTopology": "Nettverkskart", - "workspaces": "Arbeidsområder", - "hostDefaults": "Standardverdier for vertsdatamaskiner", - "hostDefaultsAdmin": "Standardverdier for serververtsdatamaskiner", - "aiProviders": "AI-leverandører", - "homepageLayouts": "Layouter for startsiden", - "accountProfile": "Kontoprofil" - }, "proxy": { - "title": "Omvendt proxy", - "description": "Kun nødvendig når noe som Cloudflare Access eller en påloggingside sitter foran serveren din.", "headersTitle": "Ekstra overskrifter", "headersHint": "Sendes med hver forespørsel til serveren, for eksempel en Cloudflare Access-tjenestetoken.", "headerName": "Overskriftsnavn", @@ -2352,8 +1567,7 @@ "username": "Brukernavn", "password": "Passord", "allowInvalidCertificate": "Stol på et selvsignert sertifikat", - "allowInvalidCertificateHint": "Kun for din egen server, når sertifikatet ikke er fra en kjent autoritet.", - "saved": "Lagret" + "allowInvalidCertificateHint": "Kun for din egen server, når sertifikatet ikke er fra en kjent autoritet." }, "problems": { "invalidUrl": "Det ser ikke ut som en nettadresse.", @@ -2391,6 +1605,27 @@ "linking": "Kobler og kjører første synkronisering...", "linked": "Koblet. Dataene dine synkroniseres nå.", "signedInAgain": "Logget inn. Synkroniseringen kjører igjen." + }, + "entities": { + "hosts": "Vertsdatamaskiner", + "sshCredentials": "Legitimasjon", + "sshFolders": "Mapper", + "userPreferences": "Preferanser", + "pluginUserSettings": "Tilleggsinnstillinger", + "sharedHosts": "Vertsdatamaskiner delt med deg", + "sharedCredentials": "Legitimasjon delt med deg", + "vaultProfiles": "Vault-profiler", + "snippetFolders": "Snippetsmapper", + "snippets": "Snippets", + "dashboardServiceLinks": "Tjenestelenker", + "homepageItems": "Elementer på startsiden", + "networkTopology": "Nettverkskart", + "workspaces": "Arbeidsområder", + "hostDefaults": "Standardverdier for vertsdatamaskiner", + "hostDefaultsAdmin": "Standardverdier for serververtsdatamaskiner", + "aiProviders": "AI-leverandører", + "homepageLayouts": "Layouter for startsiden", + "accountProfile": "Kontoprofil" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "Denne verten angir sin egen verdi. Klikk for å bruke standarden fra {{source}} igjen", "clearTitle": "Angitt på dette nivået. Klikk for å tømme den og bruke {{source}} i stedet", "inheritedTitle": "Følger standarden fra {{source}}", - "titleAdmin": "Serverens vertstandarder", - "titleUser": "Mine vertstandarder", - "titleFolder": "Mappestandarder: {{name}}", - "descriptionAdmin": "Standarder for hver vert på denne serveren. En brukers egne standarder, en mappes standarder eller verten selv kan fortsatt angi en annen verdi. Endre et felt for å angi det her, eller tøm det for å la det være uangitt.", - "descriptionUser": "Standarder for alle dine vertser, over serverens. En mappe eller verten selv kan fortsatt angi en annen verdi. Endre et felt for å angi det her, eller tøm det for å la det være uangitt.", - "descriptionFolder": "Standarder for vertene i denne mappen og dens undermapper, over dine egne. En vert kan fortsatt angi en annen verdi. Endre et felt for å angi det her, eller tøm det for å la det være uangitt.", - "save": "Lagre standarder", "saved_one": "Standarder lagret. {{count}} vert ble oppdatert.", "saved_other": "Standarder lagret. {{count}} vertser ble oppdatert.", - "savedInBackground": "Standarder lagret. Vertser oppdateres i bakgrunnen.", "appliedToHosts_one": "{{count}} vert ble oppdatert med de nye standardene.", "appliedToHosts_other": "{{count}} vertser ble oppdatert med de nye standardene.", - "saveFailed": "Kunne ikke lagre standardene", - "loadFailed": "Kunne ikke laste inn standardene", - "confirmTitle": "Lagre standarder?", "confirmChanges_one": "{{count}} vert følger disse standardene og vil endres.", "confirmChanges_other": "{{count}} vertser følger disse standardene og vil endres.", - "confirmNoChanges": "Ingen eksisterende vert endres. Nye vertser starter med disse standardene.", - "menuMyDefaults": "Mine vertstandarder", - "folderDefaultsAction": "Mappestandarder", - "adminSectionDescription": "Angi standardene hver vert på denne serveren følger, for hver innstilling en vert har, inkludert hver plugins. Brukere og mapper kan angi sine egne ovenpå, og enhver vert kan fortsatt bruke sin egen verdi.", - "editServerDefaults": "Rediger serverstandarder", - "resetMenu": "Tilbakestill", - "resetAll": "Alt til standardverdier", - "resetCore": "Tilkobling og SSH til standardverdier", "resetDone_one": "{{count}} vert følger nå sine standardverdier.", "resetDone_other": "{{count}} verter følger nå sine standardverdier." }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "Lagret. Skriv for å erstatte den." }, - "sharing": { - "revokeConfirm": "Fjerne tilgang for {{name}}?", - "revoke": "Fjern tilgang" - }, "manage": { - "searchSettings": "Søk i innstillinger", - "noMatchingSettings": "Ingen innstillinger matcher.", - "sections": "Seksjoner", - "sectionNeedsAttention": "Noe her trenger oppmerksomhet", "needsAttention_one": "Én ting trenger oppmerksomhet.", "needsAttention_other": "{{count}} ting trenger oppmerksomhet.", - "bandHost": "Vert", - "bandFeatures": "Protokoller og plugins", - "bandCredential": "Legitimasjon", - "sshConnection": "SSH-tilkobling", - "errorAddressRequired": "En adresse er påkrevd.", - "errorPortRange": "Bruk en port mellom 1 og 65535.", - "defaults": "Standardverdier", - "searchHosts": "Søk i verter", - "searchCredentials": "Søk i legitimasjoner", - "searchDefaults": "Søk i standardverdier", - "addCredential": "Legg til legitimasjon", - "nothingMatches": "Ingenting matcher", - "nothingYet": "Ingenting her ennå", - "emptyHostsHint": "Legg til en vert, og den vises her, i hvilken som helst mappe du gir den.", - "emptyCredentialsHint": "Legitimasjoner du lagrer kan gjenbrukes av enhver vert.", - "collapse": "Skjul", - "expand": "Vis", - "cannotBeUndone": "Dette kan ikke angres.", - "hostNotFound": "Fant ikke den verten. Prøv å oppdatere listen.", "hostCount_one": "{{count}} vert", "hostCount_other": "{{count}} verter", "credentialCount_one": "{{count}} legitimasjon", - "credentialCount_other": "{{count}} legitimasjoner", - "newHost": "Ny vert", - "newCredential": "Ny legitimasjon", - "advanced": "Avansert", - "pickHost": "Velg en vert å redigere", - "pickCredential": "Velg en legitimasjon å redigere", - "pickDefaults": "Velg et nivå av standardverdier å redigere", - "pickHint": "Alt om en tilkobling finnes her, gruppert slik at du kan finne det." + "credentialCount_other": "{{count}} legitimasjoner" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/pl_PL.json b/src/ui/locales/translated/pl_PL.json index dcb9876cc..5cc76a90d 100644 --- a/src/ui/locales/translated/pl_PL.json +++ b/src/ui/locales/translated/pl_PL.json @@ -141,7 +141,6 @@ "continue": "Kontynuuj", "error": "Błąd", "unsavedChanges": "Niezapisane zmiany", - "more": "Więcej", "loading": "Ładowanie...", "host": "Host", "selectHost": "Wybierz hosta...", @@ -154,7 +153,6 @@ "cancel": "Anuluj", "username": "Nazwa użytkownika", "login": "Logowanie", - "logout": "Wyloguj", "register": "Rejestracja", "password": "Hasło", "confirmPassword": "Potwierdź hasło", @@ -165,8 +163,6 @@ "rename": "Zmień nazwę", "edit": "Edytuj", "confirm": "Potwierdź", - "next": "Dalej", - "previous": "Wstecz", "refresh": "Odśwież", "language": "Język", "backendReconnected": "Połączenie z serwerem przywrócone", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Przeczytaj o każdej z nich" }, "desktopUpdates": { - "title": "Aplikacja desktopowa", - "mode": "Aktualizacje", - "modeHint": "Jak aplikacja pobiera nowe wersje.", - "manualModeHint": "Ta kopia nie może się aktualizować samodzielnie, więc Termix tylko informuje Cię o dostępności nowej wersji.", "modeAutomatic": "Automatycznie", "modePrompt": "Pytaj najpierw", "modeNever": "Nigdy", @@ -247,15 +239,6 @@ "onboardingTitle": "Aktualizacje aplikacji", "onboardingBody": "Aplikacja desktopowa może teraz aktualizować się samodzielnie. Wybierz, jak chcesz otrzymywać nowe wersje. Możesz to później zmienić w Ustawieniach, Aktualizacje.", "onboardingManual": "Ta kopia aplikacji została zainstalowana w sposób, który nie pozwala na samodzielną aktualizację, więc Termix poinformuje Cię o dostępności nowej wersji, udostępniając link do pobrania.", - "status": "Wersja {{version}}", - "statusIdle": "Nie sprawdzono jeszcze", - "statusChecking": "Sprawdzanie aktualizacji", - "statusAvailable": "Dostępna jest wersja {{version}}", - "statusDownloading": "Pobieranie {{version}} ({{progress}}%)", - "statusReady": "Wersja {{version}} jest gotowa. Uruchom ponownie, aby zainstalować.", - "statusUpToDate": "Masz najnowszą wersję", - "statusError": "Nie udało się sprawdzić aktualizacji. Spróbuj ponownie później.", - "checkNow": "Sprawdź teraz", "download": "Pobierz", "restart": "Uruchom ponownie teraz", "later": "Później", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Zamknij", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopiuj hasło", - "copySudoPassword": "Kopiuj hasło sudo", - "passwordCopied": "Hasło skopiowane do schowka", - "failedToCopyPassword": "Nie udało się skopiować hasła", - "refreshTab": "Odśwież połączenie", - "renameTab": "Zmień nazwę karty", "dashboard": "Panel", "quickConnect": "Szybkie połączenie", - "openAsTabHint": "Ctrl+kliknięcie lub kliknięcie środkowym przyciskiem, aby otworzyć jako kartę", - "openAsTab": "Otwórz jako kartę", - "openInRightDock": "Otwórz w prawym doku", - "closeRightDock": "Zamknij prawy dok", - "toggleRightDock": "Przełącz prawy dok", "hosts": "Hosty", "credentials": "Poświadczenia", "connections": "Połączenia", - "keepSideMenuOpen": "Zostaw menu otwarte", - "collapseSideMenu": "Zwiń menu", - "roleAdministrator": "Administrator", - "roleUser": "Użytkownik", "sync": "Synchronizacja", "reconnectDisconnectedTerminals": "Połącz ponownie wszystkie rozłączone terminale", "reconnectingTerminals_one": "Ponowne łączenie {{count}} terminala", @@ -302,32 +270,13 @@ "reconnectTerminalsFailed_other": "Nie udało się rozpocząć ponownego łączenia {{count}} terminali", "fullscreenUnsupported": "Pełny ekran nie jest obsługiwany przez tę przeglądarkę", "fullscreenFailed": "Nie udało się przełączyć trybu pełnego ekranu", - "resetSidebarWidth": "Resetuj szerokość", - "collapseSidebar": "Zwiń pasek boczny", - "openSidebar": "Otwórz pasek boczny", "confirmCloseHost": "Zamknąć {{host}}?", - "enterFullscreen": "Tryb pełnego ekranu (Ctrl+Shift+F)", - "exitFullscreen": "Wyjdź z trybu pełnego ekranu (Ctrl+Shift+F)", - "group": { - "objects": "Twoje", - "tools": "Narzędzia", - "system": "System" - }, - "searchEverything": "Szukaj hostów, kart i akcji", - "search": "Szukaj", "hiddenCount_one": "{{count}} ukryty", "hiddenCount_few": "{{count}} ukryte", "hiddenCount_many": "{{count}} ukrytych", "hiddenCount_other": "{{count}} ukrytych", - "showInRail": "Pokaż na pasku bocznym", - "moveUp": "Przenieś wyżej", - "moveDown": "Przenieś niżej", - "resetRailOrder": "Resetuj kolejność", - "hideFromRail": "Ukryj z paska bocznego", - "openSettings": "Otwórz ustawienia", "settings": "Ustawienia", "manage": "Zarządzaj", - "mobileNavigation": "Nawigacja", "plugins": "Wtyczki" }, "hosts": { @@ -943,35 +892,14 @@ "importSummary": "Import zakończony: {{imported}} zaimportowano, {{updated}} zaktualizowano, {{failed}} nieudanych", "importHostsFailed": "Nie udało się zaimportować hostów" }, - "commandPalette": { - "searchPlaceholder": "Szukaj hostów, poleceń lub ustawień...", - "quickActions": "Szybkie akcje", - "navigation": "Nawigacja", - "orShortcut": "lub", - "addNewHost": "Dodaj nowy host", - "adminSettings": "Ustawienia administratora", - "addCredential": "Dodaj dane logowania", - "recentActivity": "Ostatnia aktywność", - "serversAndHosts": "Serwery i hosty", - "noHostsFound": "Nie znaleziono hostów pasujących do „{{search}}”", - "links": "Linki", - "navigate": "Nawigacja", - "select": "Wybierz", - "pluginActions": "Więcej akcji", - "noTargetTab": "Żadna karta terminala nie jest otwarta", - "documentation": "Dokumentacja" - }, "splitScreen": { "title": "Podzielony ekran", "defaultLabel": "Podział {{number}}", "splitRight": "Podziel w prawo", "splitDown": "Podziel w dół", - "addToSplit": "Dodaj do {{split}}", "paneEmptyItem": "Panel {{index}}: pusty", "paneItem": "Panel {{index}}: {{label}}", "paneNumber": "Panel {{index}}", - "newPaneRight": "Nowy panel po prawej", - "newPaneBelow": "Nowy panel poniżej", "emptyTitle": "Pusty panel", "emptyHint": "Wybierz, co ma się wyświetlać tutaj. Gdy ten panel jest zaznaczony, wszystko otwierane z paska bocznego otwiera się również tutaj.", "openTabs": "Otwórz karty", @@ -988,7 +916,6 @@ "clearPane": "Opróżnij ten panel", "zoom": "Powiększ panel", "unzoom": "Przywróć układ", - "unsplit": "Usuń podział", "layouts": "Układy", "applyLayout": "Zmień układ", "maxPanes_one": "Podział może zawierać maksymalnie {{count}} panel", @@ -999,8 +926,6 @@ "dropHere": "Upuść, aby wyświetlić tutaj", "paneActions": "Akcje panelu", "dividerHint": "Przeciągnij, aby zmienić rozmiar. Kliknij dwukrotnie, aby wyrównać.", - "openInSplit": "Otwórz w podziale", - "openInNewSplit": "Nowy podział z aktualną kartą", "shortcuts": "Skróty", "shortcutNavigate": "Przechodzenie między panelami", "presets": { @@ -1014,23 +939,6 @@ "grid6": "Siatka 2x3" } }, - "connections": { - "noConnections": "Brak połączeń", - "noConnectionsDesc": "Otwórz terminal, menedżer plików lub zdalny pulpit, aby zobaczyć połączenia tutaj", - "connectedFor": "Połączono od {{duration}}", - "connected": "Połączono", - "disconnected": "Rozłączono", - "reconnect": "Połącz ponownie", - "sectionOpen": "Otwarte", - "sectionBackground": "W tle", - "backgroundDesc": "Sesje są utrzymywane przez {{minutes}} minut po rozłączeniu i można się do nich ponownie połączyć.", - "expiresIn": "Wygaśnie za {{duration}}", - "search": "Szukaj połączeń...", - "noSearchResults": "Brak połączeń pasujących do wyszukiwania", - "rename": "Zmień nazwę sesji", - "forgetConfirm": "Zakończyć sesję w tle dla {{name}}?", - "forget": "Zakończ sesję" - }, "sshAuth": { "totpRequired": "Wymagane uwierzytelnianie dwuskładnikowe", "totpCodeLabel": "Kod weryfikacyjny", @@ -1168,65 +1076,14 @@ "placeholders": { "keyPassword": "hasło klucza", "pastePrivateKey": "Wklej tutaj swój klucz prywatny...", - "enterPassword": "Wprowadź swoje hasło", - "apiKeyName": "np. CI Pipeline", - "credentialName": "np. Klucz SSH produkcyjny", - "optionalDetails": "Opcjonalne szczegóły...", - "sshUsername": "np. root lub deploy", - "hostAddress": "10.0.0.1 lub example.com", - "hostName": "np. Serwer WWW produkcyjny" + "enterPassword": "Wprowadź swoje hasło" }, "dashboard": { - "title": "Panel główny", - "github": "GitHub", - "reportBug": "Zgłoś błąd", - "discord": "Discord", - "docs": "Dokumentacja", - "donate": "Wspomóż", - "serverOverview": "Przegląd serwera", - "version": "Wersja", "updateAvailable": "Dostępna aktualizacja", - "beta": "Beta", - "uptime": "Czas działania", - "database": "Baza danych", - "healthy": "Zdrowy", - "error": "Błąd", - "totalHosts": "Łączna liczba hostów", - "totalCredentials": "Łączna liczba poświadczeń", - "recentActivity": "Ostatnia aktywność", - "reset": "Resetuj", - "noRecentActivity": "Brak ostatniej aktywności", - "quickActions": "Szybkie akcje", - "addHost": "Dodaj hosta", - "addCredential": "Dodaj poświadczenie", - "adminSettings": "Ustawienia administratora", - "userProfile": "Profil użytkownika", - "serverStats": "Statystyki serwera", - "customizeLayout": "Dostosuj panel główny", - "justNow": "właśnie teraz" + "beta": "Beta" }, "dashboardTab": { "stable": "STABILNA", - "registerNewServer": "Zarejestruj nowy serwer", - "storeSshKeysOrPasswords": "Przechowuj klucze SSH lub hasła", - "manageUsersAndRoles": "Zarządzaj użytkownikami i rolami", - "manageYourAccount": "Zarządzaj swoim kontem", - "hostStatus": "Status hosta", - "noHostsConfigured": "Brak skonfigurowanych hostów", - "checking": "SPRAWDZANIE", - "commandPalette": "Paleta poleceń", - "done": "Gotowe", - "clear": "Wyczyść", - "dragToResizeColumns": "Przeciągnij, aby zmienić rozmiar kolumn", - "hostsAvailable": "Dostępne hosty", - "removeSection": "Usuń sekcję", - "addSection": "Dodaj sekcję", - "allSectionsShown": "Wszystko jest już na pulpicie.", - "fromPlugins": "Z wtyczek", - "dropHere": "Upuść sekcję tutaj", - "dragToReorder": "Przeciągnij sekcje, aby zmienić ich kolejność", - "clearActivityConfirm": "Wyczyścić ostatnią aktywność?", - "resetConfirm": "Zresetować układ pulpitu do ustawień domyślnych?", "onlineCount_one": "{{count}} online", "onlineCount_few": "{{count}} online", "onlineCount_many": "{{count}} online", @@ -1237,432 +1094,55 @@ "hostCount_other": "{{count}} hosta" }, "admin": { - "sectionGeneral": "Ogólne", - "sectionUsers": "Użytkownicy", - "sectionSessions": "Sesje", - "sectionRoles": "Role", - "sectionDatabase": "Baza danych", - "sectionApiKeys": "Klucze API", - "sectionAuditLog": "Dziennik audytu", - "sectionSsl": "Certyfikat HTTPS", - "sectionBranding": "White Label", - "brandingAppName": "Nazwa aplikacji", - "brandingAppNameDesc": "Wyświetlana na ekranie logowania i w karcie przeglądarki. Pozostaw puste, aby użyć „Termix”.", - "brandingTagline": "Hasło reklamowe", - "brandingTaglineDesc": "Wyświetlane pod nazwą aplikacji na ekranie logowania. Pozostaw puste, aby użyć domyślnego hasła.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG lub WEBP, do 750 KB. Zastępuje domyślną ikonę na ekranie logowania i w karcie przeglądarki.", - "brandingLogoUpload": "Prześlij logo", - "brandingLogoReset": "Przywróć domyślne", - "brandingLogoInvalid": "Nieprawidłowy obraz. Użyj pliku PNG, JPEG lub WEBP o rozmiarze do 750 KB.", - "brandingSaved": "Ustawienia brandingu zostały zapisane", - "brandingSaveFailed": "Nie udało się zapisać ustawień brandingu", - "sslDescription": "Certyfikat, którego Termix używa w połączeniach HTTPS. Prześlij własny certyfikat tutaj lub uzyskaj i odnawiaj go z Let's Encrypt w sekcji Certyfikaty ACME.", - "sslDocsLink": "Zobacz dokumentację SSL", - "sslCertStatus": "Status certyfikatu", - "sslCertStatusNone": "Brak certyfikatu", - "sslCertStatusValid": "Ważny", - "sslCertStatusExpiring": "Wkrótce wygasa", - "sslCertStatusExpired": "Wygasł", - "sslCertExpiresAt": "Wygasa {{date}}", - "sslInfoNote": "Po wydaniu lub przesłaniu certyfikatu Termix automatycznie włączy HTTPS na porcie SSL_PORT (domyślnie 8443) oprócz istniejącego portu HTTP. Upewnij się, że ten port jest opublikowany/przypisany do tego kontenera, aby był dostępny.", - "sslManualCert": "Certyfikat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Klucz prywatny (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Wklej swój istniejący certyfikat i klucz prywatny, w tym pełny łańcuch certyfikatów, jeśli wymaga tego Twój urząd certyfikacji.", - "sslManualUpload": "Prześlij i zainstaluj certyfikat", - "sslManualUploadLoading": "Przesyłanie certyfikatu...", - "sslManualUploadSuccess": "Certyfikat został przesłany i zainstalowany pomyślnie", - "sslManualUploadFailed": "Przesyłanie certyfikatu nie powiodło się", - "sslManualRequiresFields": "Certyfikat i klucz prywatny są wymagane", - "auditLogTotal": "{{total}} wpisów łącznie", - "auditLogEmpty": "Nie znaleziono wpisów w dzienniku audytu", - "auditLogSuccess": "Sukces", - "auditLogFailed": "Niepowodzenie", - "auditLogClearFilters": "Wyczyść filtry", - "auditLogPage": "Strona {{page}} z {{totalPages}} (łącznie {{total}})", - "auditLogIp": "IP", - "auditLogResourceId": "ID zasobu", - "auditLogFilterUser": "Użytkownik", - "auditLogFilterAction": "Akcja", - "auditLogFilterResourceType": "Typ zasobu", - "auditLogFilterStatus": "Status", - "auditLogFilterFrom": "Od", - "auditLogFilterTo": "Do", - "auditLogFilterAll": "Wszystkie", - "allowRegistration": "Zezwól na rejestrację użytkowników", - "allowRegistrationDesc": "Pozwól nowym użytkownikom na samodzielną rejestrację za pomocą nazwy użytkownika i hasła", - "allowPasswordLogin": "Zezwól na logowanie hasłem", - "allowPasswordLoginDesc": "Logowanie za pomocą nazwy użytkownika i hasła", - "externalAutoProvision": "Automatyczne tworzenie kont zewnętrznych", - "externalAutoProvisionDesc": "Twórz konto przy pierwszym logowaniu przez zewnętrzny system, taki jak SSO lub LDAP. Gdy ta opcja jest wyłączona, logować się w ten sposób mogą tylko osoby, które już posiadają konto", - "secondFactorAfterExternalLogin": "Wymagaj drugiego czynnika uwierzytelniającego po logowaniu zewnętrznym (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Gdy wyłączone, drugi czynnik uwierzytelniający jest wymagany tylko po logowaniu hasłem i innych lokalnych metodach logowania, tak jak wcześniej. Gdy włączone, jest wymagany po każdej metodzie logowania, w tym SSO i LDAP", - "allowPasswordReset": "Zezwól na resetowanie hasła", - "allowPasswordResetDesc": "Kod resetowania przez logi Docker", - "auditForwardingTitle": "Przekieruj do SIEM", - "auditForwardingDesc": "Wysyłaj kopię każdego wpisu dziennika audytu do zewnętrznego kolektora w formacie NDJSON. Lokalne logi pozostają źródłem prawdy", - "auditForwardingEnvNotice": "Zmienna środowiskowa również konfiguruje przekierowanie; URL zapisany tutaj ma pierwszeństwo", - "auditForwardingToken": "Token Bearer (opcjonalnie)", - "auditForwardingTokenStored": "Token Bearer (zapisany)", - "auditForwardingSaved": "Ustawienia przekierowania audytu zostały zapisane", - "auditForwardingSaveError": "Nie udało się zapisać ustawień przekierowania audytu", - "sessionTimeout": "Limit czasu sesji", - "hours": "godzin", - "sessionTimeoutRange": "Min 1h, max 720h", - "monitoringDefaults": "Domyślne ustawienia monitorowania", - "statusCheck": "Sprawdzenie statusu", - "sec": "sek", - "logLevel": "Poziom logowania", "usersCount_one": "{{count}} użytkownik", "usersCount_few": "{{count}} użytkowników", "usersCount_many": "{{count}} użytkowników", - "usersCount_other": "{{count}} użytkownika", - "searchUsers": "Szukaj użytkowników...", - "noUsers": "Brak użytkowników", - "noUsersMatch": "Żaden użytkownik nie pasuje do wyszukiwania", - "pageOf": "Strona {{page}} z {{total}}", - "createUser": "Utwórz", - "newRole": "Nowa rola", - "roleName": "Nazwa", - "roleDisplayName": "Nazwa wyświetlana", - "roleDescription": "Opis", "rolesCount_one": "{{count}} rola", "rolesCount_few": "{{count}} role", "rolesCount_many": "{{count}} ról", - "rolesCount_other": "{{count}} roli", - "createRole": "Utwórz", - "creating": "Tworzenie...", - "exportDatabase": "Eksportuj bazę danych", - "exportDatabaseDesc": "Pobierz przenośną kopię zapasową SQLite wszystkich hostów, poświadczeń i ustawień", - "export": "Eksportuj", - "exporting": "Eksportowanie...", - "importDatabase": "Importuj bazę danych", - "importDatabaseDesc": "Przywróć z przenośnej kopii zapasowej .sqlite na dowolnym backendzie bazy danych", - "importDatabaseSelected": "Wybrano: {{name}}", - "selectFile": "Wybierz plik", - "changeFile": "Zmień", - "import": "Importuj", - "importing": "Importowanie...", "apiKeysCount_one": "{{count}} klucz", "apiKeysCount_few": "{{count}} klucze", "apiKeysCount_many": "{{count}} kluczy", - "apiKeysCount_other": "{{count}} klucza", - "apiKeysDocsLink": "Zobacz dokumentację", - "apiKeysCliHint": "Użyj klucza API z CLI Termix, aby zarządzać serwerami z terminala", - "apiKeysCliLink": "Zobacz dokumentację CLI", - "newApiKey": "Nowy klucz API", - "apiKeyCreatedWarning": "Klucz utworzony — skopiuj go teraz, nie zostanie wyświetlony ponownie.", - "apiKeyName": "Nazwa", - "apiKeyUser": "Użytkownik", - "apiKeySelectUser": "Wybierz użytkownika...", - "apiKeyExpiresAt": "Data wygaśnięcia", - "createKey": "Utwórz klucz", - "apiKeyNoExpiry": "Bez wygaśnięcia", - "revokedBadge": "UNIEWAŻNIONY", - "authTypeDual": "Uwierzytelnianie podwójne", - "authTypeExternal": "Zewnętrzne", - "authTypeLocal": "Lokalne", - "adminStatusAdministrator": "Administrator", - "adminStatusRegularUser": "Zwykły użytkownik", - "adminBadge": "ADMIN", - "systemBadge": "SYS", - "customBadge": "WŁASNY", - "youBadge": "TY", "sessionsActive_one": "{{count}} aktywna", "sessionsActive_few": "{{count}} aktywne", "sessionsActive_many": "{{count}} aktywnych", - "sessionsActive_other": "{{count}} aktywnych", - "sessionActive": "Aktywny: {{time}}", - "sessionExpires": "Wygasa: {{time}}", - "revokeAll": "Wszystkie", - "revokeAllSessionsSuccess": "Wszystkie sesje użytkownika zostały unieważnione", - "revokeAllSessionsFailed": "Nie udało się unieważnić sesji", - "revokeSessionFailed": "Nie udało się unieważnić sesji", - "addRole": "Dodaj rolę", - "noCustomRoles": "Nie zdefiniowano żadnych własnych ról", - "removeRoleFailed": "Nie udało się usunąć roli", - "assignRoleFailed": "Nie udało się przypisać roli", - "userAdminAccess": "Administrator", - "userAdminAccessDesc": "Pełny dostęp do wszystkich ustawień administracyjnych", - "userRoles": "Role", - "revokeAllUserSessions": "Unieważnij wszystkie sesje", - "revokeAllUserSessionsDesc": "Wymuś ponowne logowanie na wszystkich urządzeniach", - "revoke": "Unieważnij", - "deleteUserWarning": "Usunięcie tego użytkownika jest nieodwracalne.", - "deleteUser": "Usuń {{username}}", - "deleting": "Usuwanie...", - "deleteUserFailed": "Nie udało się usunąć użytkownika", - "deleteUserSuccess": "Użytkownik „{{username}}” został usunięty", - "deleteRoleSuccess": "Rola „{{name}}” została usunięta", - "revokeKeySuccess": "Klucz „{{name}}” został unieważniony", - "revokeKeyFailed": "Nie udało się unieważnić klucza", - "copiedToClipboard": "Skopiowano do schowka", - "done": "Gotowe", - "createUserTitle": "Utwórz użytkownika", - "createUserDesc": "Utwórz nowe konto lokalne.", - "createUserUsername": "Nazwa użytkownika", - "createUserPassword": "Hasło", - "createUserPasswordHint": "Minimum 6 znaków.", - "createUserEnterUsername": "Wpisz nazwę użytkownika", - "createUserSubmit": "Utwórz użytkownika", - "editUserTitle": "Zarządzaj użytkownikiem: {{username}}", - "editUserDesc": "Edytuj role, status administratora, sesje i ustawienia konta.", - "editUserUsername": "Nazwa użytkownika", - "editUserAuthType": "Typ uwierzytelniania", - "editUserAdminStatus": "Status administratora", - "editUserUserId": "ID użytkownika", - "linkAccountTitle": "Połącz konta", - "linkAccountDesc": "Połącz zewnętrzne konto {{username}} z istniejącym kontem lokalnym.", - "linkAccountDescLocal": "Połącz lokalne konto {{username}} z istniejącym kontem wyłącznie zewnętrznym.", - "linkAccountWarningTitle": "To spowoduje:", - "linkAccountEffect1": "Usunięcie konta wyłącznie z logowaniem zewnętrznym", - "linkAccountEffect2": "Dodanie zewnętrznego logowania do docelowego konta", - "linkAccountEffect3": "Zezwolenie na logowanie zarówno zewnętrznym, jak i hasłem", - "linkAccountTargetUsername": "Nazwa użytkownika lokalnego konta", - "linkAccountTargetPlaceholder": "Wpisz nazwę użytkownika lokalnego konta, z którym chcesz połączyć", - "linkAccountExternalUsername": "Nazwa użytkownika konta zewnętrznego", - "linkAccountExternalPlaceholder": "Wpisz nazwę użytkownika konta wyłącznie z logowaniem zewnętrznym, które ma zostać scalone", - "linkAccountExternalNotFound": "Nie znaleziono konta wyłącznie z logowaniem zewnętrznym o tej nazwie użytkownika", - "linkAccounts": "Połącz konta", - "linkAccountSuccess": "Konta połączone pomyślnie", - "linkAccountFailed": "Nie udało się połączyć kont", - "linkAccountInProgress": "Łączenie...", - "unlinkAccountTitle": "Odłącz zewnętrzne logowanie", - "unlinkAccountDesc": "Usuń zewnętrzne logowanie z {{username}}. Użytkownik będzie mógł logować się tylko za pomocą hasła.", - "unlinkAccountWarning": "Spowoduje to usunięcie zewnętrznego logowania z tego konta. Użytkownik musi mieć ustawione hasło, aby móc się dalej logować.", - "unlinkAccount": "Odłącz zewnętrzne logowanie", - "unlinkAccountInProgress": "Odłączanie...", - "unlinkAccountSuccess": "Zewnętrzne logowanie odłączone", - "unlinkAccountFailed": "Nie udało się odłączyć zewnętrznego logowania", - "updateRegistrationFailed": "Nie udało się zaktualizować ustawienia rejestracji", - "updatePasswordLoginFailed": "Nie udało się zaktualizować ustawienia logowania hasłem", - "updateSecondFactorAfterExternalLoginFailed": "Nie udało się zaktualizować ustawienia drugiego czynnika uwierzytelniającego", - "updatePasswordResetFailed": "Nie udało się zaktualizować ustawienia resetowania hasła", - "sessionTimeoutRange2": "Czas wygaśnięcia sesji musi wynosić od 1 do 720 godzin", - "sessionTimeoutSaved": "Czas wygaśnięcia sesji zapisany", - "sessionTimeoutSaveFailed": "Nie udało się zapisać czasu wygaśnięcia sesji", - "monitoringIntervalInvalid": "Nieprawidłowe wartości interwału", - "monitoringSaved": "Ustawienia monitorowania zapisane", - "monitoringSaveFailed": "Nie udało się zapisać ustawień monitorowania", - "logLevelUpdateFailed": "Nie udało się zaktualizować poziomu logowania", - "createUserRequired": "Nazwa użytkownika i hasło są wymagane", - "createUserPasswordTooShort": "Hasło musi mieć co najmniej 6 znaków", - "createUserSuccess": "Użytkownik „{{username}}” został utworzony", - "createUserFailed": "Nie udało się utworzyć użytkownika", - "updateAdminStatusFailed": "Nie udało się zaktualizować statusu administratora", - "allSessionsRevoked": "Wszystkie sesje zostały unieważnione", - "revokeSessionsFailed": "Nie udało się unieważnić sesji", - "manageUserData": "Zarządzaj danymi użytkownika", - "backToUsers": "Wróć do użytkowników", - "manageTabAccount": "Konto", - "manageTabHosts": "Hosty", - "manageTabCredentials": "Dane logowania", - "manageTabSessions": "Sesje", - "manageTabDanger": "Niebezpieczne", - "manageEditorBack": "Wróć do danych {{username}}", - "dataLockedBadge": "ZABLOKOWANE", - "dataLockedNotice": "Dane {{username}} pozostaną zablokowane do momentu następnego logowania. Do tego czasu nie można wyświetlać ani edytować jego hostów, danych logowania ani fragmentów kodu.", - "resetPasswordTitle": "Resetuj hasło", - "resetPasswordExternalOnly": "Ten użytkownik loguje się przez zewnętrznego dostawcę i nie ma ustawionego hasła.", - "resetPasswordPlaceholder": "Nowe hasło", - "resetPasswordBtn": "Resetuj", - "resetPasswordWorking": "Resetowanie...", - "resetPasswordSuccess": "Hasło zresetowane", - "resetPasswordSuccessWiped": "Hasło zresetowane. Zaszyfrowane dane użytkownika zostały usunięte.", - "resetPasswordFailed": "Nie udało się zresetować hasła", - "resetPasswordConfirmWipe": "{{username}} nie zalogował się od aktualizacji szyfrowania, więc jego danych nie można odzyskać. Resetowanie teraz spowoduje usunięcie jego hostów, danych logowania oraz fragmentów kodu. Kontynuować?", - "manageApiKeys": "Klucze API", - "apiKeyNamePlaceholder": "Nazwa klucza", - "apiKeyCopyNotice": "Skopiuj ten klucz teraz, nie zostanie on wyświetlony ponownie.", - "noApiKeysForUser": "Brak kluczy API", - "apiKeyDeleteFailed": "Nie udało się usunąć klucza API", - "exportUserData": "Eksport danych", - "exportUserDataDesc": "Pobierz hosty, poświadczenia i dane menedżera plików tego użytkownika w formacie JSON. Tajne dane zostaną odszyfrowane.", - "exportUserDataSuccess": "Dane użytkownika wyeksportowane", - "exportUserDataFailed": "Nie udało się wyeksportować danych użytkownika", "hostsCount_one": "{{count}} host", "hostsCount_few": "{{count}} hosty", "hostsCount_many": "{{count}} hostów", "hostsCount_other": "{{count}} hosta", - "addHostForUser": "Dodaj hosta", - "noHostsForUser": "Ten użytkownik nie ma hostów", - "connectToHost": "Połącz", - "deleteHostConfirm": "Usunąć hosta „{{name}}” należącego do {{username}}?", - "hostDeletedSuccess": "Host usunięty", - "hostDeleteFailed": "Nie udało się usunąć hosta", "credentialsCount_one": "{{count}} dane logowania", "credentialsCount_few": "{{count}} dane logowania", "credentialsCount_many": "{{count}} danych logowania", "credentialsCount_other": "{{count}} danych logowania", - "addCredentialForUser": "Dodaj poświadczenia", - "noCredentialsForUser": "Ten użytkownik nie ma poświadczeń", - "deleteCredentialConfirm": "Usunąć poświadczenia „{{name}}” należące do {{username}}?", - "credentialDeletedSuccess": "Poświadczenia usunięte", - "credentialDeleteFailed": "Nie udało się usunąć poświadczeń", - "noSessionsForUser": "Brak aktywnych sesji", - "deleteSuccessorLabel": "Przekaz hosty i poświadczenia użytkownikowi", - "deleteSuccessorMe": "Mnie (administratorem usuwającym)", - "deleteSuccessorNone": "Nikt, usuń je", - "deleteSuccessorDesc": "Wszystko, co udostępnił ten użytkownik, będzie działać pod nowym właścicielem; wybór „nikt” spowoduje usunięcie ich hostów, poświadczeń i udostępnień.", - "deleteUserDangerDesc": "Trwale usuń {{username}} oraz wszystkie jego dane (hosty, poświadczenia, fragmenty kodu, historię). Tej operacji nie można cofnąć.", - "deleteUserConfirm": "Trwale usunąć {{username}} oraz wszystkie jego dane?", - "deleteUserAdminBlocked": "Usuń status administratora przed usunięciem tego użytkownika.", - "createRoleRequired": "Nazwa i nazwa wyświetlana są wymagane", - "createRoleSuccess": "Rola „{{name}}” została utworzona", - "createRoleFailed": "Nie udało się utworzyć roli", - "apiKeyNameRequired": "Nazwa klucza jest wymagana", - "apiKeyUserRequired": "Identyfikator użytkownika jest wymagany", - "apiKeyCreatedSuccess": "Klucz API „{{name}}” został utworzony", - "apiKeyCreateFailed": "Nie udało się utworzyć klucza API", - "exportSuccess": "Baza danych została pomyślnie wyeksportowana", - "exportFailed": "Eksport bazy danych nie powiódł się", - "importSelectFile": "Najpierw wybierz plik", - "importCompleted": "Import zakończony: zaimportowano {{total}} elementów, pominięto {{skipped}}", - "importFailed": "Import nie powiódł się: {{error}}", - "importError": "Import bazy danych nie powiódł się", - "sectionHostDefaults": "Domyślne ustawienia hosta", "rolePermissions": { "count_one": "{{count}} uprawnienie", "count_few": "{{count}} uprawnienia", "count_many": "{{count}} uprawnień", - "count_other": "{{count}} uprawnienia", - "editAction": "Edytuj uprawnienia", - "loadError": "Nie udało się załadować katalogu uprawnień", - "saved": "Uprawnienia roli zostały zapisane", - "saveError": "Nie udało się zapisać uprawnień roli", - "save": "Zapisz", - "saving": "Zapisywanie...", - "pluginDisabled": "Wtyczka wyłączona", "groups": { "hosts": "Hosty", "credentials": "Poświadczenia", "admin": "Administracja" } - }, - "notificationPrivateEndpoints": "Dozwolone prywatne hosty powiadomień", - "notificationPrivateEndpointsDesc": "Dokładne prywatne hosty, z którymi mogą łączyć się kanały powiadomień. Oddziel je przecinkami.", - "updateNotificationEndpointsFailed": "Nie udało się zaktualizować listy dozwolonych punktów końcowych powiadomień", - "secondFactorsSectionTitle": "Drugie czynniki uwierzytelniające", - "secondFactorsNone": "Brak zarejestrowanych drugich czynników", - "secondFactorUnavailable": "Niedostępne", - "resetSecondFactors": "Resetuj drugie czynniki", - "resetSecondFactorsConfirm": "Usunąć wszystkie drugie czynniki dla {{username}}? Będzie mógł się zalogować za pomocą hasła lub SSO i ponownie je zarejestrować.", - "secondFactorsResetSuccess": "Czynniki uwierzytelniające zostały zresetowane", - "secondFactorsResetFailed": "Nie udało się zresetować czynników uwierzytelniających", - "passwordLoginForced": "Logowanie hasłem jest wyłączone, ale nie włączono żadnej innej metody logowania, więc pozostaje ono włączone. Nikt nie zostanie zablokowany.", - "sslNotRenewed": "Nic nie odnawia tego certyfikatu. Wygasa {{date}}. Włącz automatyczne odnawianie w sekcji Certyfikaty ACME lub prześlij nowy certyfikat przed tą datą.", - "sslSelfSigned": "Certyfikat samopodpisany wygenerowany przez Termix. Przeglądarki będą wyświetlać ostrzeżenia.", - "sslRenewedBy": "Automatycznie odnowione przez {{plugin}}", - "sslIssuer": "Wydane przez {{issuer}}", - "sslNames": "Obejmuje {{names}}", - "sslManualTitle": "Prześlij certyfikat", - "updateExternalAutoProvisionFailed": "Nie udało się zaktualizować ustawienia automatycznego tworzenia", - "hostTags": "Wstępnie zdefiniowane tagi hostów", - "hostTagsDesc": "Tagi widoczne dla każdego użytkownika jako sugestie w edytorze hosta. Naciśnij Spację lub Enter, aby dodać tag. Usunięcie tagu tutaj nie usuwa go z hostów.", - "hostTagsError": "Nie udało się załadować lub zapisać sugestii tagów hostów.", - "revokeAllSessionsConfirm": "Wylogować użytkownika {{username}} ze wszystkich miejsc?", - "revokeSessionConfirm": "Wylogować tę sesję?", - "revokeSession": "Wyloguj", - "deleteRoleConfirm": "Usunąć rolę {{name}}?", - "revokeKeyConfirm": "Unieważnić klucz API {{name}}?", - "revokeKey": "Unieważnij" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Gdzie", - "who": "Kto", - "hostLabel": "Host", - "hostPlaceholder": "192.168.1.1 lub example.com", - "portLabel": "Port", - "usernameLabel": "Nazwa użytkownika", - "usernamePlaceholder": "nazwa_użytkownika", - "authLabel": "Uwierzytelnianie", - "passwordLabel": "Hasło", - "passwordPlaceholder": "hasło", - "privateKeyLabel": "Klucz prywatny", - "privateKeyPlaceholder": "Wklej klucz prywatny...", - "credentialLabel": "Dane logowania", - "credentialPlaceholder": "Wybierz zapisane dane logowania", - "protocolLabel": "Protokół", - "domainLabel": "Domena", - "domainPlaceholder": "opcjonalne", - "connectToAction": "Połącz z {{name}}", - "sshProtocol": "SSH", - "noTarget": "Żadna zainstalowana aplikacja nie może połączyć się z tym typem hosta" + "usernameLabel": "Nazwa użytkownika" }, "keybindings": { - "description": "Przypisz klawisze do akcji w terminalu i aplikacji lub zmień domyślne skróty.", - "defaultsHeading": "Domyślne skróty", - "fixedHeading": "Skróty aplikacji", - "fixed": { - "splitRight": "Podziel w prawo", - "splitDown": "Podziel w dół", - "zoomPane": "Powiększ aktywny panel", - "navigatePane": "Przechodź między panelami", - "nextTab": "Następna karta", - "previousTab": "Poprzednia karta", - "jumpTab": "Przejdź do karty", - "previousView": "Wróć do poprzedniego widoku paska bocznego", - "fullscreen": "Przełącz tryb pełnoekranowy" - }, - "customHeading": "Niestandardowe skróty", - "addBinding": "Dodaj skrót", - "addBindingTitle": "Dodaj skrót", - "editBindingTitle": "Edytuj skrót", - "loading": "Ładowanie...", - "noCustomBindings": "Brak niestandardowych skrótów", - "defaultBadge": "Domyślne", - "customizedBadge": "Niestandardowe", - "customize": "Dostosuj", - "resetToDefault": "Przywróć domyślne", - "resetAllToDefaults": "Przywróć wszystkie domyślne", - "cancel": "Anuluj", - "saveBinding": "Zapisz skrót", - "saveError": "Nie udało się zapisać skrótów klawiszowych", - "pressKeysToRecord": "Kombinacja klawiszy", - "pressKeysPlaceholder": "Kliknij i naciśnij klawisze", - "recording": "Naciśnij klawisze...", - "comboRequiredError": "Najpierw naciśnij kombinację klawiszy", - "conflictWarning": "Ta kombinacja jest już przypisana do {{combo}}. Zapisanie spowoduje uruchomienie obu akcji.", - "actionLabel": "Akcja", "actionNextTab": "Przełącz na następną kartę", "actionPreviousTab": "Przełącz na poprzednią kartę", "actionOpenCommandPalette": "Otwórz szybkie wyszukiwanie", - "actionReconnectSession": "Ponownie połącz bieżącą sesję", - "unavailableAction": "{{type}} (niedostępne)", - "actionRequiredError": "Najpierw wybierz akcję", - "deleteConfirm": "Usunąć to przypisanie klawisza?", - "resetAllConfirm": "Przywrócić wszystkie przypisania klawiszy do domyślnych?" + "actionReconnectSession": "Ponownie połącz bieżącą sesję" }, "userProfile": { - "storageModeLocal": "Przeglądarka", - "storageModeCloud": "Baza danych", - "storageModeDescription": "Przeglądarka przechowuje ustawienia tylko w tej przeglądarce. Baza danych synchronizuje je z serwerem i ładuje na każdym urządzeniu.", - "resetToDefaults": "Przywróć ustawienia domyślne", - "resetToDefaultsSuccess": "Ustawienia zostały przywrócone do domyślnych.", - "storageModeSwitch": "Przechowywanie preferencji", - "sectionAccount": "Konto", - "desktopProfileTitle": "Tylko to urządzenie", - "desktopProfileDescription": "Ten profil istnieje na tym urządzeniu i loguje się samodzielnie. Połącz go z serwerem Termix, aby korzystać z tych samych hostów i ustawień na każdym urządzeniu.", - "sectionInterface": "Interfejs", - "interfacePresetDesc": "Jak wiele szczegółów wyświetla Termix. Każda funkcja pozostaje dostępna.", "preset_simple": "Prosty", "preset_simple_desc": "Tylko podstawowe elementy.", "preset_balanced": "Zbalansowany", "preset_balanced_desc": "Standardowy układ.", "preset_advanced": "Zaawansowany", "preset_advanced_desc": "Wszystko włączone, gęsto upakowane.", - "presetClearOverrides": "Przywróć wszystkie", - "presetOverridesTitle": "Dostosowane", - "presetRevertArea": "Cofnij", - "presetConfirmTitle": "Przełączyć na {{preset}}?", - "presetConfirmDesc": "Spowoduje to przywrócenie paska bocznego, nawigacji, układu pulpitu, paska narzędzi terminala i widoku menedżera plików. Twoje hosty, poświadczenia i strona główna nie zostaną zmienione.", - "presetConfirmApply": "Zastosuj predefiniowany", - "runSetupAgainDesc": "Przejdź ponownie przez konfigurację początkową.", - "runSetupAgainButton": "Uruchom konfigurację", "uiArea_chrome": "Ramka aplikacji", "uiArea_hostList": "Lista hostów", "uiArea_credentialList": "Lista poświadczeń", @@ -1671,128 +1151,15 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Menedżer plików", "uiArea_hostEditor": "Edytor hosta", - "sectionAppearance": "Wygląd", - "sectionSecurity": "Bezpieczeństwo", - "sectionApiKeys": "Klucze API", - "sectionData": "Dane", - "usernameLabel": "Nazwa użytkownika", - "roleLabel": "Rola", - "roleAdministrator": "Administrator", - "authMethodLabel": "Metoda uwierzytelniania", - "authMethodLocal": "Lokalny", - "twoFaLabel": "2FA", - "twoFaOn": "Włączony", - "twoFaOff": "Wyłączony", - "versionLabel": "Wersja", - "cliTitle": "Termix CLI", - "cliDescription": "Otwieraj terminale, uruchamiaj polecenia i przenoszenie plików z własnego powłoki.", - "cliLearnMore": "Dowiedz się więcej", - "deleteAccount": "Usuń konto", - "deleteAccountDescription": "Trwale usuń swoje konto", - "deleteButton": "Usuń", - "deleteAccountPermanent": "Ta operacja jest trwała i nie może zostać cofnięta.", - "deleteAccountWarning": "Wszystkie sesje, hosty, dane logowania i ustawienia zostaną trwale usunięte.", - "confirmPasswordDeletePlaceholder": "Wprowadź hasło, aby potwierdzić", "languageLabel": "Język", "themeLabel": "Motyw", "fontSizeLabel": "Rozmiar czcionki", "interfaceFontLabel": "Czcionka interfejsu", "interfaceFontDescription": "Zmienia czcionkę interfejsu aplikacji. Profile terminalu zachowują własne ustawienia czcionki.", "accentColorLabel": "Kolor akcentu", - "keyboardShortcuts": "Skróty klawiszowe", - "keyboardShortcutsDescription": "Dostosuj skróty kopiowania, wklejania i poleceń w terminalu", - "manageShortcuts": "Zarządzaj", - "commandPalette": "Paleta poleceń", - "commandPaletteDesc": "Włącz skrót klawiszowy", - "reopenTabsOnLogin": "Ponowne otwieranie kart po zalogowaniu", - "reopenTabsOnLoginDesc": "Przywróć otwarte karty po zalogowaniu lub odświeżeniu strony, nawet z innego urządzenia", - "confirmTabClose": "Potwierdźanie zamykania kart", - "confirmTabCloseDesc": "Pytaj przed zamknięciem kart terminala", - "showTabNumbers": "Pokaż numery kart", - "showTabNumbersDesc": "Wyświetlaj numer na każdej karcie, aby ułatwić ich rozróżnianie", - "settingsAppRail": "Pasek aplikacji", - "sidebarSettingsMoved": "Ustawienia wyświetlania paska bocznego hostów zostały przeniesione do panelu Dostosuj pasek boczny, dostępnego z paska narzędzi Hosty.", - "showHostTags": "Pokaż tagi hostów", - "showHostTagsDesc": "Wyświetlaj tagi w liście hostów", - "statusColors": "Rzeczywiste kolory statusu", - "statusColorsDesc": "Używaj koloru zielonego/czerwonego dla statusu online/offline zamiast koloru akcentu", - "pinAppRail": "Przypnij pasek aplikacji", - "pinAppRailDesc": "Zawsze rozwiń lewy pasek aplikacji zamiast rozwijać go po najechaniu kursorem", - "expandAppRailOnHover": "Rozwijaj pasek aplikacji po najechaniu", - "expandAppRailOnHoverDesc": "Zezwalaj na rozwinięcie lewego paska aplikacji po najechaniu na niego kursorem", - "appRailHoverPushesContent": "Przesuń zawartość przy rozwinięciu", - "appRailHoverPushesContentDesc": "Zostaw miejsce dla rozwiniętego paska bocznego zamiast nakładać go na stronę. Otwarte sesje, takie jak zdalny pulpit, będą zmieniać rozmiar za każdym razem", - "showPinAppRailButton": "Pokaż przycisk przypinania paska aplikacji", - "showPinAppRailButtonDesc": "Wyświetlaj przycisk przypinania paska aplikacji. Domyślnie wyłączone.", - "settingsNavigation": "Nawigacja", - "navigationTabsDesc": "Wybierz, które karty mają się pojawiać w pasku aplikacji", - "settingsUpdates": "Aktualizacje", - "disableUpdateChecks": "Wyłącz sprawdzanie aktualizacji", - "disableUpdateChecksDesc": "Przestań sprawdzać dostępność aktualizacji", - "changePassword": "Zmień hasło", - "currentPasswordLabel": "Obecne hasło", - "currentPasswordPlaceholder": "Obecne hasło", - "newPasswordLabel": "Nowe hasło", - "newPasswordPlaceholder": "Nowe hasło", - "confirmPasswordLabel": "Potwierdź nowe hasło", - "confirmPasswordPlaceholder": "Potwierdź nowe hasło", - "updatePassword": "Zaktualizuj hasło", - "createApiKeyTitle": "Utwórz klucz API", - "createApiKeyDescription": "Wygeneruj nowy klucz API do dostępu programowego.", - "apiKeyNameLabel": "Nazwa", - "apiKeyNamePlaceholder": "np. CI Pipeline", - "expiryDateLabel": "Data wygaśnięcia", - "optional": "opcjonalne", - "cancel": "Anuluj", - "createKey": "Utwórz klucz", - "apiKeyCreatedWarning": "Klucz utworzony — skopiuj go teraz, nie będzie już wyświetlany.", - "copyApiKey": "Kopiuj klucz API", - "copiedToClipboard": "Skopiowano do schowka", "apiKeyCount_one": "{{count}} klucz", "apiKeyCount_few": "{{count}} klucze", "apiKeyCount_many": "{{count}} kluczy", - "apiKeyCount_other": "{{count}} klucza", - "newKey": "Nowy klucz", - "noApiKeys": "Brak kluczy API.", - "apiKeyActive": "Aktywny", - "apiKeyUsageHint": "Dołącz swój klucz do nagłówka", - "apiKeyUsageHintHeader": "nagłówka.", - "apiKeyPermissionsHint": "Klucze dziedziczą uprawnienia użytkownika, który je utworzył.", - "exportData": "Eksportuj moje dane", - "exportDataDesc": "Pobierz kopię zapasową swoich hostów, danych logowania i ustawień, aby przenieść je na inne urządzenie", - "export": "Eksportuj", - "exporting": "Eksportowanie...", - "importData": "Importuj moje dane", - "importDataDesc": "Przywróć swoje hosty, dane logowania i ustawienia z pliku kopii zapasowej .sqlite", - "importDataSelected": "Wybrano: {{name}}", - "selectFile": "Wybierz plik", - "changeFile": "Zmień", - "import": "Importuj", - "importing": "Importowanie...", - "exportSuccess": "Dane zostały pomyślnie wyeksportowane", - "exportFailed": "Eksport danych nie powiódł się", - "importSelectFile": "Najpierw wybierz plik", - "importCompleted": "Import zakończony: zaimportowano {{total}} elementów, pominięto {{skipped}}", - "importFailed": "Import nie powiódł się: {{error}}", - "roleUser": "Użytkownik", - "authMethodDual": "Uwierzytelnianie dwuskładnikowe", - "authMethodExternal": "Zewnętrzne", - "done": "Gotowe", - "apiKeyNameRequired": "Nazwa klucza jest wymagana", - "apiKeyCreated": "Utworzono klucz API „{{name}}”", - "apiKeyCreateFailed": "Nie udało się utworzyć klucza API", - "apiKeyUser": "Użytkownik", - "apiKeyExpires": "Wygaśnięcie", - "apiKeyRevoked": "Unieważniono klucz API „{{name}}”", - "apiKeyRevokeFailed": "Nie udało się unieważnić klucza API", - "passwordFieldsRequired": "Obecne i nowe hasło są wymagane", - "passwordMismatch": "Hasła nie są zgodne", - "passwordTooShort": "Hasło musi mieć co najmniej 6 znaków", - "passwordUpdated": "Hasło zostało pomyślnie zaktualizowane", - "passwordUpdateFailed": "Nie udało się zaktualizować hasła", - "deletePasswordRequired": "Hasło jest wymagane do usunięcia konta", - "deleteFailed": "Nie udało się usunąć konta", - "deleting": "Usuwanie...", "colorPickerTooltip": "Otwórz wybór koloru", "themeSystem": "Systemowy", "themeLight": "Jasny", @@ -1803,18 +1170,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Zalogowano do {{server}}", - "linkedProfileDescription": "To urządzenie korzysta z Twojego konta na serwerze i przechowuje kopię Twoich danych, dzięki czemu działa również offline.", - "manageSync": "Zarządzaj synchronizacją", - "setUpSync": "Połącz z serwerem", - "settingsTabsAndShortcuts": "Karty i skróty", - "onBetaTitle": "Używasz wersji beta", - "onBetaDescription": "Dziękujemy za testowanie. Daj nam znać, co nie działa.", - "tryBetaTitle": "Wypróbuj nowe funkcje wcześniej", - "tryBetaDescription": "Dołącz do programu beta w sekcji Aktualizacje.", - "sendBetaFeedback": "Wyślij opinię o wersji beta", - "openUpdates": "Aktualizacje" + "themeGruvbox": "Gruvbox" } } }, @@ -2091,8 +1447,7 @@ "hasDependents": "{{name}} jest wymagane przez {{list}}. Najpierw wyłącz lub odinstaluj te elementy.", "missingDependencies": "{{name}} wymaga {{list}}, które nie jest zainstalowane.", "consentChanged": "To, czego ta wtyczka wymaga, zmieniło się od czasu ostatniego sprawdzenia. Sprawdź listę ponownie.", - "upload": "Nie udało się odczytać {{name}}: {{error}}", - "developerMode": "Nie udało się zmienić trybu deweloperskiego: {{error}}" + "upload": "Nie udało się odczytać {{name}}: {{error}}" }, "data": { "title": "Przechowywane dane", @@ -2231,13 +1586,7 @@ "browsePlugins": "Przeglądaj wtyczki", "loading": "Ładowanie", "developer": { - "title": "Tryb dewelopera wtyczek", - "hint": "Pozwala administratorom instalować wtyczki z pliku .tmxplug w zakładce Wtyczki, pomijając sprawdzanie rejestru. Używaj go do tworzenia i testowania własnych wtyczek.", - "enableTitle": "Włączyć tryb dewelopera?", - "enableBody": "Administratorzy będą mogli instalować wtyczki z plików, których Termix nie sprawdził. Wtyczka może robić wszystko, na co pozwalają jej możliwości, więc włączaj tę opcję tylko podczas tworzenia lub testowania wtyczek.", - "enable": "Włącz", - "installFromFile": "Instaluj z pliku", - "signedOnly": "Ustawiono TERMIX_REQUIRE_SIGNED_PLUGINS, więc instalacja z pliku pozostaje zablokowana." + "installFromFile": "Instaluj z pliku" }, "count": { "downloads_one": "{{formatted}} pobranie", @@ -2277,71 +1626,7 @@ "secretSet": "Ustawione", "secretNotSet": "Nie ustawione", "secretReplace": "Zastąp", - "pluginSettingsSaved": "Ustawienia zapisane", - "pluginSettingsInvalid": "Nie udało się zapisać niektórych ustawień. Sprawdź podświetlone pola.", - "pluginSettingsSaveFailed": "Nie udało się zapisać ustawień", - "pluginSettingsLoadFailed": "Nie udało się załadować ustawień", - "featureUnavailable": "{{name}} jest obecnie niedostępne. Te ustawienia są zapisane, ale nie będą miały wpływu.", - "account": "Konto", - "security": "Bezpieczeństwo", - "apiKeys": "Klucze API", - "data": "Dane i synchronizacja", - "interface": "Interfejs", - "appearance": "Wygląd", - "keybindings": "Skróty klawiszowe", - "adminGeneral": "Ogólne", - "adminUsers": "Użytkownicy", - "adminSessions": "Sesje", - "adminRoles": "Role", - "adminHostDefaults": "Domyślne ustawienia hosta", - "adminBranding": "Branding", - "adminDatabase": "Baza danych", - "adminSsl": "SSL", - "adminApiKeys": "Klucze API", - "adminAuditLog": "Dziennik audytu", - "bandYou": "Twoje konto", - "bandApp": "Ta aplikacja", - "bandPlugins": "Wtyczki", - "bandInstance": "Ten serwer", - "searchPlaceholder": "Szukaj ustawień", - "noResults": "Brak pasujących ustawień.", - "pages": "Strony", - "instanceSettings": "Ustawienia serwera", - "nothingHere": "Nie ma tu nic do ustawienia.", - "searchPage": "Szukaj na tej stronie", - "noPageMatches": "Brak wyników na tej stronie.", - "updates": { - "title": "Aktualizacje", - "betaProgram": "Program beta", - "betaIntro": "Wersje beta to wczesne kompilacje następnej wersji Termix. Pojawiają się we wtorki i piątki, gdy jest coś nowego do przetestowania. Mogą zawierać błędy, a Twoja opinia pomaga ulepszyć stabilną wersję.", - "termixBetas": "Wersje beta Termix", - "termixBetasHint": "Powiadamiaj mnie o nowych wersjach beta, nie tylko o stabilnych.", - "runningBetaBuild": "Używasz wersji beta. Aby z niej wyjść, przełącz się z powrotem na stabilny obraz lub instalator.", - "howToInstall": "Jak uzyskać wersję beta", - "desktopInstall": "Pobierz instalator wersji beta i zainstaluj go nad obecnym.", - "downloadBeta": "Pobierz {{version}}", - "dockerInstall": "Zmień obraz na tag beta i uruchom kontener ponownie:", - "copy": "Kopiuj", - "copied": "Skopiowano", - "copyFailed": "Nie udało się skopiować", - "learnMore": "Dowiedz się więcej o wersjach beta", - "feedback": "Opinia", - "feedbackHint": "Znalazłeś błąd lub masz pomysł? Trafia bezpośrednio do deweloperów z wypełnioną wersją.", - "sendFeedback": "Wyślij opinię o wersji beta", - "releases": "Wydania", - "thisVersion": "Ta wersja", - "newestStable": "Najnowsza stabilna", - "newestBeta": "Najnowsza beta", - "noRelease": "Obecnie brak", - "pluginBetas": "Wersje beta wtyczek", - "pluginBetasIntro": "Każda wtyczka może używać wersji beta samodzielnie. Aby przetestować, otwórz ją i naciśnij Przetestuj wersję beta.", - "openPlugins": "Otwórz wtyczki", - "waitingForStable": "Powrót do stabilnej. Pozostaje na {{version}}, dopóki nie pojawi się nowsza wersja stabilna.", - "backToStable": "Powrót do stabilnej", - "allPluginsBeta": "Używaj wersji beta dla wszystkich wtyczek", - "allPluginsStable": "Wszystkie wtyczki z powrotem do stabilnych", - "saveFailed": "Nie udało się zapisać zmiany" - } + "featureUnavailable": "{{name}} jest obecnie niedostępne. Te ustawienia są zapisane, ale nie będą miały wpływu." }, "managerCard": { "refresh": "Odśwież", @@ -2351,11 +1636,6 @@ "filter": "Filtruj..." }, "sync": { - "server": "Serwer Termix", - "account": "Konto", - "status": "Status", - "never": "nigdy", - "justNow": "właśnie teraz", "minutesAgo_one": "{{count}} minutę temu", "minutesAgo_few": "{{count}} minuty temu", "minutesAgo_many": "{{count}} minut temu", @@ -2364,76 +1644,11 @@ "hoursAgo_few": "{{count}} godziny temu", "hoursAgo_many": "{{count}} godzin temu", "hoursAgo_other": "{{count}} godzin temu", - "actionFailed": "To nie zadziałało. Spróbuj ponownie.", - "unlinkedTitle": "Tylko to urządzenie", - "unlinkedBody": "Termix działa samodzielnie na tym urządzeniu. Połącz go z serwerem Termix, aby utrzymać wszystko w synchronizacji.", - "unlinkedPointHosts": "Twoje hosty, dane logowania, fragmenty i ustawienia podążają za Tobą na każdym urządzeniu.", - "unlinkedPointOffline": "Wszystko nadal działa, gdy serwer jest nieosiągalny, i nadąża później.", - "unlinkedPointAccount": "Logujesz się za pomocą konta serwera, a hosty udostępnione przez innych użytkowników pojawiają się tutaj również.", - "linkButton": "Połącz z serwerem", - "state": { - "syncing": "Synchronizowanie", - "offline": "Serwer nieosiągalny", - "error": "Synchronizacja zatrzymana", - "signedOut": "Wylogowano", - "synced": "Zsynchronizowano {{time}}" - }, "pending_one": "{{count}} zmiana oczekuje na synchronizację", "pending_few": "{{count}} zmiany oczekują na synchronizację", "pending_many": "{{count}} zmian oczekuje na synchronizację", "pending_other": "{{count}} zmian oczekuje na synchronizację", - "signInAgain": "Zaloguj się ponownie", - "syncNow": "Synchronizuj teraz", - "unlink": "Rozłącz", - "unlinked": "To urządzenie nie jest już połączone", - "unlinkTitle": "Odłączyć to urządzenie?", - "unlinkDescription": "Zatrzymuje synchronizację i wylogowuje z serwera. Hosty udostępnione przez innych użytkowników są w każdym razie usuwane z tego urządzenia.", - "unlinkKeepTitle": "Zachowaj moje dane tutaj", - "unlinkKeepBody": "Twoje hosty, dane logowania i ustawienia pozostaną na tym urządzeniu i będą działać samodzielnie.", - "unlinkRemoveTitle": "Usuń zsynchronizowane dane", - "unlinkRemoveBody": "Wszystko, co pochodziło z serwera, zostanie usunięte z tego urządzenia. Pozostaną tylko hosty przechowywane lokalnie.", - "conflictsTitle": "Konflikty", - "conflictsDescription": "Te elementy zostały zmienione jednocześnie tutaj i na serwerze. W użyciu jest wersja z serwera. Wybierz „Zachowaj moją”, aby wysłać swoją wersję na serwer.", - "keepMine": "Zachowaj moją", - "keepServer": "Zachowaj z serwera", - "errorsTitle": "Nie zsynchronizowano", - "errorsDescription": "Serwer nie zaakceptował tych zmian. Pozostaną one na tym urządzeniu.", - "errorPermission": "Twoje konto na serwerze nie ma uprawnień do wprowadzenia tej zmiany.", - "retry": "Spróbuj ponownie", - "whatSyncs": "Co jest synchronizowane", - "whatSyncsDescription": "Wyłącz wszystko, co chcesz zachować tylko na tym urządzeniu.", - "coreGroup": "Termix", - "notOnServer": "Serwer nie ma tego", - "notOnDevice": "Jeszcze nie na tym urządzeniu", - "localOnlyHint": "Możesz też zachować pojedyncze hosty lub foldery tylko na tym urządzeniu w ich ustawieniach.", - "originTitle": "Początek połączeń", - "originDescription": "Łącz się z hostami z tego urządzenia lub przez serwer. Możesz to zmienić dla każdego hosta.", - "originLocal": "To urządzenie", - "originRemote": "Serwer", - "entities": { - "hosts": "Hosty", - "sshCredentials": "Dane logowania", - "sshFolders": "Foldery", - "userPreferences": "Preferencje", - "pluginUserSettings": "Ustawienia wtyczek", - "sharedHosts": "Hosty udostępnione Tobie", - "sharedCredentials": "Dane logowania udostępnione Tobie", - "vaultProfiles": "Profile Vault", - "snippetFolders": "Foldery fragmentów", - "snippets": "Fragmenty", - "dashboardServiceLinks": "Linki do usług", - "homepageItems": "Elementy strony głównej", - "networkTopology": "Mapa sieci", - "workspaces": "Przestrzeze robocze", - "hostDefaults": "Domyślne ustawienia hostów", - "hostDefaultsAdmin": "Domyślne ustawienia hostów serwera", - "aiProviders": "Dostawcy AI", - "homepageLayouts": "Układy strony głównej", - "accountProfile": "Profil konta" - }, "proxy": { - "title": "Proxy odwrotne", - "description": "Wymagane tylko, gdy przed serwerem znajduje się coś takiego jak Cloudflare Access lub strona logowania.", "headersTitle": "Dodatkowe nagłówki", "headersHint": "Wysyłane z każdym żądaniem do serwera, na przykład token usługi Cloudflare Access.", "headerName": "Nazwa nagłówka", @@ -2446,8 +1661,7 @@ "username": "Nazwa użytkownika", "password": "Hasło", "allowInvalidCertificate": "Ufaj certyfikatowi samopodpisanemu", - "allowInvalidCertificateHint": "Tylko dla własnego serwera, gdy jego certyfikat nie pochodzi od zaufanej instytucji.", - "saved": "Zapisano" + "allowInvalidCertificateHint": "Tylko dla własnego serwera, gdy jego certyfikat nie pochodzi od zaufanej instytucji." }, "problems": { "invalidUrl": "To nie wygląda na adres internetowy.", @@ -2489,6 +1703,27 @@ "linking": "Łączenie i uruchamianie pierwszej synchronizacji...", "linked": "Połączono. Dane są teraz synchronizowane.", "signedInAgain": "Zalogowano. Synchronizacja została wznowiona." + }, + "entities": { + "hosts": "Hosty", + "sshCredentials": "Dane logowania", + "sshFolders": "Foldery", + "userPreferences": "Preferencje", + "pluginUserSettings": "Ustawienia wtyczek", + "sharedHosts": "Hosty udostępnione Tobie", + "sharedCredentials": "Dane logowania udostępnione Tobie", + "vaultProfiles": "Profile Vault", + "snippetFolders": "Foldery fragmentów", + "snippets": "Fragmenty", + "dashboardServiceLinks": "Linki do usług", + "homepageItems": "Elementy strony głównej", + "networkTopology": "Mapa sieci", + "workspaces": "Przestrzeze robocze", + "hostDefaults": "Domyślne ustawienia hostów", + "hostDefaultsAdmin": "Domyślne ustawienia hostów serwera", + "aiProviders": "Dostawcy AI", + "homepageLayouts": "Układy strony głównej", + "accountProfile": "Profil konta" } }, "hostDefaults": { @@ -2505,37 +1740,18 @@ "resetTitle": "Ten host ma własną wartość. Kliknij, aby ponownie użyć wartości domyślnej z {{source}}", "clearTitle": "Ustawione na tym poziomie. Kliknij, aby wyczyścić i użyć {{source}}", "inheritedTitle": "Kontynuuje domyślną wartość z {{source}}", - "titleAdmin": "Domyślne ustawienia hostów serwera", - "titleUser": "Moje domyślne ustawienia hostów", - "titleFolder": "Domyślne ustawienia folderu: {{name}}", - "descriptionAdmin": "Domyślne wartości dla każdego hosta na tym serwerze. Własne ustawienia użytkownika, ustawienia folderu lub sam host mogą nadal nadpisać tę wartość. Zmień pole, aby ustawić wartość tutaj, lub wyczyść je, aby pozostawić nieustawione.", - "descriptionUser": "Domyślne wartości dla wszystkich Twoich hostów, nadpisujące ustawienia serwera. Folder lub sam host mogą nadal nadpisać tę wartość. Zmień pole, aby ustawić wartość tutaj, lub wyczyść je, aby pozostawić nieustawione.", - "descriptionFolder": "Domyślne wartości dla hostów w tym folderze i jego podfolderach, nadpisujące Twoje własne ustawienia. Sam host może nadal nadpisać tę wartość. Zmień pole, aby ustawić wartość tutaj, lub wyczyść je, aby pozostawić nieustawione.", - "save": "Zapisz domyślne ustawienia", "saved_one": "Domyślne ustawienia zapisane. Zaktualizowano {{count}} hosta.", "saved_few": "Domyślne ustawienia zapisane. Zaktualizowano {{count}} hostów.", "saved_many": "Domyślne ustawienia zapisane. Zaktualizowano {{count}} hostów.", "saved_other": "Domyślne ustawienia zapisane. Zaktualizowano {{count}} hostów.", - "savedInBackground": "Domyślne ustawienia zapisane. Hosty są aktualizowane w tle.", "appliedToHosts_one": "{{count}} host został zaktualizowany o nowe domyślne wartości.", "appliedToHosts_few": "{{count}} hosty zostały zaktualizowane o nowe domyślne wartości.", "appliedToHosts_many": "{{count}} hostów zostało zaktualizowanych o nowe domyślne wartości.", "appliedToHosts_other": "{{count}} hostów zostało zaktualizowanych o nowe domyślne wartości.", - "saveFailed": "Nie udało się zapisać wartości domyślnych", - "loadFailed": "Nie udało się załadować wartości domyślnych", - "confirmTitle": "Zapisać wartości domyślne?", "confirmChanges_one": "{{count}} host stosuje te wartości domyślne i ulegnie zmianie.", "confirmChanges_few": "{{count}} hosty stosują te wartości domyślne i ulegną zmianie.", "confirmChanges_many": "{{count}} hostów stosuje te wartości domyślne i ulegną zmianie.", "confirmChanges_other": "{{count}} hostów stosuje te wartości domyślne i ulegną zmianie.", - "confirmNoChanges": "Żadne istniejące hosty nie ulegną zmianie. Nowe hosty będą startować z tymi wartościami domyślnymi.", - "menuMyDefaults": "Moje domyślne wartości hosta", - "folderDefaultsAction": "Domyślne wartości folderu", - "adminSectionDescription": "Ustaw wartości domyślne, których będzie stosować się każdy host na tym serwerze, dla każdej opcji hosta, w tym dla każdego wtyczki. Użytkownicy i foldery mogą ustawić własne wartości na wierzchu, a każdy host nadal może używać swojej własnej wartości.", - "editServerDefaults": "Edytuj domyślne wartości serwera", - "resetMenu": "Resetuj", - "resetAll": "Przywróć wszystkie ustawienia domyślne", - "resetCore": "Przywróć ustawienia połączenia i SSH do domyślnych", "resetDone_one": "{{count}} host teraz używa ustawień domyślnych.", "resetDone_few": "{{count}} hosty teraz używają ustawień domyślnych.", "resetDone_many": "{{count}} hostów teraz używa ustawień domyślnych.", @@ -2551,38 +1767,11 @@ "fields": { "secretSaved": "Zapisano. Wpisz nową wartość, aby ją zmienić." }, - "sharing": { - "revokeConfirm": "Usunąć dostęp dla {{name}}?", - "revoke": "Usuń dostęp" - }, "manage": { - "searchSettings": "Wyszukaj ustawienia", - "noMatchingSettings": "Brak pasujących ustawień.", - "sections": "Sekcje", - "sectionNeedsAttention": "Coś tutaj wymaga uwagi", "needsAttention_one": "Jedna rzecz wymaga uwagi.", "needsAttention_few": "{{count}} rzeczy wymagają uwagi.", "needsAttention_many": "{{count}} rzeczy wymaga uwagi.", "needsAttention_other": "{{count}} rzecz/rzeczy wymaga/wymagają uwagi.", - "bandHost": "Host", - "bandFeatures": "Protokoły i wtyczki", - "bandCredential": "Dane logowania", - "sshConnection": "Połączenie SSH", - "errorAddressRequired": "Adres jest wymagany.", - "errorPortRange": "Użyj portu z zakresu od 1 do 65535.", - "defaults": "Ustawienia domyślne", - "searchHosts": "Wyszukaj hosty", - "searchCredentials": "Wyszukaj dane logowania", - "searchDefaults": "Wyszukaj ustawienia domyślne", - "addCredential": "Dodaj dane logowania", - "nothingMatches": "Brak wyników", - "nothingYet": "Tutaj jeszcze nic nie ma", - "emptyHostsHint": "Dodaj hosta, a pojawi się on tutaj, w folderze, który mu przypiszesz.", - "emptyCredentialsHint": "Zapisane dane logowania mogą być ponownie używane przez dowolny host.", - "collapse": "Zwiń", - "expand": "Rozwiń", - "cannotBeUndone": "Tej operacji nie można cofnąć.", - "hostNotFound": "Nie udało się znaleźć tego hosta. Spróbuj odświeżyć listę.", "hostCount_one": "{{count}} host", "hostCount_few": "{{count}} hosty", "hostCount_many": "{{count}} hostów", @@ -2590,14 +1779,7 @@ "credentialCount_one": "{{count}} zestaw danych logowania", "credentialCount_few": "{{count}} zestawy danych logowania", "credentialCount_many": "{{count}} zestawów danych logowania", - "credentialCount_other": "{{count}} zestawu/zestawów danych logowania", - "newHost": "Nowy host", - "newCredential": "Nowe dane logowania", - "advanced": "Zaawansowane", - "pickHost": "Wybierz hosta do edycji", - "pickCredential": "Wybierz dane logowania do edycji", - "pickDefaults": "Wybierz poziom ustawień domyślnych do edycji", - "pickHint": "Wszystko dotyczące połączenia znajduje się tutaj, pogrupowane dla łatwego znalezienia." + "credentialCount_other": "{{count}} zestawu/zestawów danych logowania" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/pt_BR.json b/src/ui/locales/translated/pt_BR.json index 12f767abf..3dd6005c2 100644 --- a/src/ui/locales/translated/pt_BR.json +++ b/src/ui/locales/translated/pt_BR.json @@ -141,7 +141,6 @@ "continue": "Continuar", "error": "Erro", "unsavedChanges": "Alterações não salvas", - "more": "Mais", "loading": "Carregando...", "host": "Host", "selectHost": "Selecione um host...", @@ -154,7 +153,6 @@ "cancel": "Cancelar", "username": "Nome de usuário", "login": "Entrar", - "logout": "Sair", "register": "Registrar", "password": "Senha", "confirmPassword": "Confirmar Senha", @@ -165,8 +163,6 @@ "rename": "Renomear", "edit": "Editar", "confirm": "Confirmar", - "next": "Próximo", - "previous": "Anterior", "refresh": "Atualizar", "language": "Idioma", "backendReconnected": "Conexão com o servidor restaurada", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Leia sobre cada um" }, "desktopUpdates": { - "title": "App para desktop", - "mode": "Atualizações", - "modeHint": "Como este app recebe novas versões.", - "manualModeHint": "Esta cópia não pode se atualizar sozinha, então o Termix apenas avisa quando uma nova versão é lançada.", "modeAutomatic": "Automático", "modePrompt": "Perguntar primeiro", "modeNever": "Nunca", @@ -247,15 +239,6 @@ "onboardingTitle": "Atualizações do app", "onboardingBody": "O app para desktop agora pode se atualizar sozinho. Escolha como deseja receber novas versões. Você pode alterar isso depois em Configurações, Atualizações.", "onboardingManual": "Esta cópia do app foi instalada de uma forma que não permite autoatualização, então o Termix avisará quando uma nova versão estiver disponível com um link para baixá-la.", - "status": "Versão {{version}}", - "statusIdle": "Ainda não verificado", - "statusChecking": "Verificando atualizações", - "statusAvailable": "A versão {{version}} está disponível", - "statusDownloading": "Baixando {{version}} ({{progress}}%)", - "statusReady": "A versão {{version}} está pronta. Reinicie para instalá-la.", - "statusUpToDate": "Você tem a versão mais recente", - "statusError": "Não foi possível verificar atualizações. Tente novamente mais tarde.", - "checkNow": "Verificar agora", "download": "Baixar", "restart": "Reiniciar agora", "later": "Depois", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Fechar", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Copiar senha", - "copySudoPassword": "Copiar senha do sudo", - "passwordCopied": "Senha copiada para a área de transferência", - "failedToCopyPassword": "Falha ao copiar a senha", - "refreshTab": "Atualizar conexão", - "renameTab": "Renomear aba", "dashboard": "Painel", "quickConnect": "Conexão rápida", - "openAsTabHint": "Ctrl+clique ou clique do meio para abrir como uma aba", - "openAsTab": "Abrir como aba", - "openInRightDock": "Abrir no painel direito", - "closeRightDock": "Fechar painel direito", - "toggleRightDock": "Alternar painel direito", "hosts": "Hosts", "credentials": "Credenciais", "connections": "Conexões", - "keepSideMenuOpen": "Manter menu aberto", - "collapseSideMenu": "Recolher menu", - "roleAdministrator": "Administrador", - "roleUser": "Usuário", "sync": "Sincronizar", "reconnectDisconnectedTerminals": "Reconectar todos os terminais desconectados", "reconnectingTerminals_one": "Reconectando {{count}} terminal", @@ -300,31 +268,12 @@ "reconnectTerminalsFailed_other": "Não foi possível iniciar a reconexão de {{count}} terminais", "fullscreenUnsupported": "Tela cheia não é suportada por este navegador", "fullscreenFailed": "Não foi possível alternar para tela cheia", - "resetSidebarWidth": "Redefinir largura", - "collapseSidebar": "Recolher barra lateral", - "openSidebar": "Abrir barra lateral", "confirmCloseHost": "Fechar {{host}}?", - "enterFullscreen": "Entrar em tela cheia (Ctrl+Shift+F)", - "exitFullscreen": "Sair da tela cheia (Ctrl+Shift+F)", - "group": { - "objects": "Seus", - "tools": "Ferramentas", - "system": "Sistema" - }, - "searchEverything": "Pesquisar hosts, abas e ações", - "search": "Pesquisar", "hiddenCount_one": "{{count}} oculto", "hiddenCount_many": "{{count}} ocultos", "hiddenCount_other": "{{count}} ocultos", - "showInRail": "Mostrar na barra lateral", - "moveUp": "Mover para cima", - "moveDown": "Mover para baixo", - "resetRailOrder": "Redefinir ordem", - "hideFromRail": "Ocultar da barra lateral", - "openSettings": "Abrir configurações", "settings": "Configurações", "manage": "Gerenciar", - "mobileNavigation": "Navegação", "plugins": "Plugins" }, "hosts": { @@ -930,35 +879,14 @@ "importSummary": "Importação concluída: {{imported}} importados, {{updated}} atualizados, {{failed}} com falha", "importHostsFailed": "Falha ao importar hosts" }, - "commandPalette": { - "searchPlaceholder": "Pesquisar hosts, comandos ou configurações...", - "quickActions": "Ações Rápidas", - "navigation": "Navegação", - "orShortcut": "ou", - "addNewHost": "Adicionar novo host", - "adminSettings": "Configurações de administrador", - "addCredential": "Adicionar credencial", - "recentActivity": "Atividade recente", - "serversAndHosts": "Servidores e hosts", - "noHostsFound": "Nenhum host encontrado para \"{{search}}\"", - "links": "Links", - "navigate": "Navegar", - "select": "Selecionar", - "pluginActions": "Mais ações", - "noTargetTab": "Nenhuma aba de terminal está aberta", - "documentation": "Documentação" - }, "splitScreen": { "title": "Tela dividida", "defaultLabel": "Divisão {{number}}", "splitRight": "Dividir à direita", "splitDown": "Dividir abaixo", - "addToSplit": "Adicionar a {{split}}", "paneEmptyItem": "Painel {{index}}: vazio", "paneItem": "Painel {{index}}: {{label}}", "paneNumber": "Painel {{index}}", - "newPaneRight": "Novo painel à direita", - "newPaneBelow": "Novo painel abaixo", "emptyTitle": "Painel vazio", "emptyHint": "Escolha algo para exibir aqui. Enquanto este painel estiver selecionado, tudo o que você abrir na barra lateral também será aberto aqui.", "openTabs": "Abas abertas", @@ -975,7 +903,6 @@ "clearPane": "Esvaziar este painel", "zoom": "Ampliar painel", "unzoom": "Restaurar layout", - "unsplit": "Remover divisão", "layouts": "Layouts", "applyLayout": "Alterar layout", "maxPanes_one": "Uma divisão pode conter até {{count}} painel", @@ -985,8 +912,6 @@ "dropHere": "Soltar para exibir aqui", "paneActions": "Ações do painel", "dividerHint": "Arraste para redimensionar. Clique duas vezes para equalizar.", - "openInSplit": "Abrir em divisão", - "openInNewSplit": "Nova divisão com a aba atual", "shortcuts": "Atalhos", "shortcutNavigate": "Mover entre painéis", "presets": { @@ -1000,23 +925,6 @@ "grid6": "Grade de seis" } }, - "connections": { - "noConnections": "Nenhuma conexão", - "noConnectionsDesc": "Abra um terminal, gerenciador de arquivos ou área de trabalho remota para ver as conexões aqui", - "connectedFor": "Conectado por {{duration}}", - "connected": "Conectado", - "disconnected": "Desconectado", - "reconnect": "Reconectar", - "sectionOpen": "Aberto", - "sectionBackground": "Em segundo plano", - "backgroundDesc": "As sessões persistem por {{minutes}} minutos após a desconexão e podem ser reconectadas.", - "expiresIn": "Expira em {{duration}}", - "search": "Pesquisar conexões...", - "noSearchResults": "Nenhuma conexão corresponde à sua pesquisa", - "rename": "Renomear sessão", - "forgetConfirm": "Encerrar a sessão em segundo plano de {{name}}?", - "forget": "Encerrar sessão" - }, "sshAuth": { "totpRequired": "Autenticação de Dois Fatores Obrigatória", "totpCodeLabel": "Código de Verificação", @@ -1154,65 +1062,14 @@ "placeholders": { "keyPassword": "senha da chave", "pastePrivateKey": "Cole sua chave privada aqui...", - "enterPassword": "Digite sua senha", - "apiKeyName": "ex.: Pipeline de CI", - "credentialName": "ex.: Chave SSH de Produção", - "optionalDetails": "Detalhes opcionais...", - "sshUsername": "ex.: root ou deploy", - "hostAddress": "10.0.0.1 ou example.com", - "hostName": "ex.: Servidor Web de Produção" + "enterPassword": "Digite sua senha" }, "dashboard": { - "title": "Painel", - "github": "GitHub", - "reportBug": "Reportar um bug", - "discord": "Discord", - "docs": "Documentação", - "donate": "Doar", - "serverOverview": "Visão Geral do Servidor", - "version": "Versão", "updateAvailable": "Atualização Disponível", - "beta": "Beta", - "uptime": "Tempo Ativo", - "database": "Banco de Dados", - "healthy": "Saudável", - "error": "Erro", - "totalHosts": "Total de Hosts", - "totalCredentials": "Total de Credenciais", - "recentActivity": "Atividade Recente", - "reset": "Redefinir", - "noRecentActivity": "Nenhuma atividade recente", - "quickActions": "Ações Rápidas", - "addHost": "Adicionar Host", - "addCredential": "Adicionar Credencial", - "adminSettings": "Configurações de Administrador", - "userProfile": "Perfil do Usuário", - "serverStats": "Estatísticas do Servidor", - "customizeLayout": "Personalizar Painel", - "justNow": "agora mesmo" + "beta": "Beta" }, "dashboardTab": { "stable": "ESTÁVEL", - "registerNewServer": "Registrar um novo servidor", - "storeSshKeysOrPasswords": "Armazenar chaves SSH ou senhas", - "manageUsersAndRoles": "Gerenciar usuários e funções", - "manageYourAccount": "Gerenciar sua conta", - "hostStatus": "Status do Host", - "noHostsConfigured": "Nenhum host configurado", - "checking": "VERIFICANDO", - "commandPalette": "Paleta de Comandos", - "done": "Concluído", - "clear": "Limpar", - "dragToResizeColumns": "Arraste para redimensionar as colunas", - "hostsAvailable": "Hosts Disponíveis", - "removeSection": "Remover seção", - "addSection": "Adicionar uma seção", - "allSectionsShown": "Tudo já está no painel.", - "fromPlugins": "De plugins", - "dropHere": "Solte uma seção aqui", - "dragToReorder": "Arraste as seções para reordená-las", - "clearActivityConfirm": "Limpar sua atividade recente?", - "resetConfirm": "Restaurar o layout padrão do painel?", "onlineCount_one": "{{count}} online", "onlineCount_many": "{{count}} online", "onlineCount_other": "{{count}} online", @@ -1221,425 +1078,48 @@ "hostCount_other": "{{count}} hosts" }, "admin": { - "sectionGeneral": "Geral", - "sectionUsers": "Usuários", - "sectionSessions": "Sessões", - "sectionRoles": "Funções", - "sectionDatabase": "Banco de dados", - "sectionApiKeys": "Chaves de API", - "sectionAuditLog": "Log de Auditoria", - "sectionSsl": "Certificado HTTPS", - "sectionBranding": "Marca Própria", - "brandingAppName": "Nome do Aplicativo", - "brandingAppNameDesc": "Exibido na tela de login e na aba do navegador. Deixe vazio para usar \"Termix\".", - "brandingTagline": "Slogan", - "brandingTaglineDesc": "Exibido abaixo do nome do aplicativo na tela de login. Deixe vazio para usar o slogan padrão.", - "brandingLogo": "Logotipo", - "brandingLogoDesc": "PNG, JPEG ou WEBP, até 750 KB. Substitui o ícone padrão na tela de login e na aba do navegador.", - "brandingLogoUpload": "Enviar logotipo", - "brandingLogoReset": "Restaurar padrão", - "brandingLogoInvalid": "Imagem inválida. Use um arquivo PNG, JPEG ou WEBP de até 750 KB.", - "brandingSaved": "Configurações de marca própria salvas", - "brandingSaveFailed": "Falha ao salvar as configurações de marca própria", - "sslDescription": "O certificado que o Termix serve via HTTPS. Envie o seu aqui ou obtenha e renove um da Let's Encrypt na seção Certificados ACME.", - "sslDocsLink": "Ver documentação de SSL", - "sslCertStatus": "Status do Certificado", - "sslCertStatusNone": "Sem certificado", - "sslCertStatusValid": "Válido", - "sslCertStatusExpiring": "Expira em breve", - "sslCertStatusExpired": "Expirado", - "sslCertExpiresAt": "Expira em {{date}}", - "sslInfoNote": "Após emitir ou enviar um certificado, o Termix ativará automaticamente o HTTPS na SSL_PORT (padrão 8443) além da porta HTTP existente. Certifique-se de que essa porta esteja publicada/mapeada para este contêiner para que seja acessível.", - "sslManualCert": "Certificado (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Chave Privada (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Cole seu certificado e chave privada existentes, incluindo a cadeia completa se exigido por sua CA.", - "sslManualUpload": "Enviar e Instalar Certificado", - "sslManualUploadLoading": "Enviando certificado...", - "sslManualUploadSuccess": "Certificado enviado e instalado com sucesso", - "sslManualUploadFailed": "Falha ao enviar o certificado", - "sslManualRequiresFields": "Certificado e chave privada são obrigatórios", - "auditLogTotal": "{{total}} entradas no total", - "auditLogEmpty": "Nenhuma entrada de log de auditoria encontrada", - "auditLogSuccess": "Sucesso", - "auditLogFailed": "Falha", - "auditLogClearFilters": "Limpar Filtros", - "auditLogPage": "Página {{page}} de {{totalPages}} ({{total}} no total)", - "auditLogIp": "IP", - "auditLogResourceId": "ID do Recurso", - "auditLogFilterUser": "Usuário", - "auditLogFilterAction": "Ação", - "auditLogFilterResourceType": "Tipo de Recurso", - "auditLogFilterStatus": "Status", - "auditLogFilterFrom": "De", - "auditLogFilterTo": "Até", - "auditLogFilterAll": "Todos", - "allowRegistration": "Permitir Registro de Usuários", - "allowRegistrationDesc": "Permitir que novos usuários se registrem com nome de usuário e senha", - "allowPasswordLogin": "Permitir Login com Senha", - "allowPasswordLoginDesc": "Login com nome de usuário e senha", - "externalAutoProvision": "Criar contas externas automaticamente", - "externalAutoProvisionDesc": "Crie uma conta na primeira vez que alguém fizer login por meio de um método externo, como SSO ou LDAP. Quando desativado, apenas pessoas que já possuem uma conta podem fazer login dessa forma", - "secondFactorAfterExternalLogin": "Solicitar segundo fator após logins externos (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Desativado: um segundo fator cadastrado é solicitado apenas após login com senha e outros logins locais, como antes. Ativado: é solicitado após todos os métodos de login, incluindo SSO e LDAP.", - "allowPasswordReset": "Permitir Redefinição de Senha", - "allowPasswordResetDesc": "Código de redefinição via logs do Docker", - "auditForwardingTitle": "Encaminhar para SIEM", - "auditForwardingDesc": "Envie uma cópia de cada entrada de auditoria para um coletor externo em formato NDJSON. Os logs locais permanecem como a fonte da verdade.", - "auditForwardingEnvNotice": "Uma variável de ambiente também configura o encaminhamento; a URL salva aqui tem precedência.", - "auditForwardingToken": "Token Bearer (opcional)", - "auditForwardingTokenStored": "Token Bearer (armazenado)", - "auditForwardingSaved": "Configurações de encaminhamento de auditoria salvas", - "auditForwardingSaveError": "Falha ao salvar configurações de encaminhamento de auditoria", - "sessionTimeout": "Tempo Limite da Sessão", - "hours": "horas", - "sessionTimeoutRange": "Mín. 1h, máx. 720h", - "monitoringDefaults": "Padrões de Monitoramento", - "statusCheck": "Verificação de Status", - "sec": "seg", - "logLevel": "Nível de Log", "usersCount_one": "{{count}} usuário", "usersCount_many": "{{count}} usuários", - "usersCount_other": "{{count}} usuários", - "searchUsers": "Pesquisar usuários...", - "noUsers": "Nenhum usuário", - "noUsersMatch": "Nenhum usuário corresponde à sua pesquisa", - "pageOf": "Página {{page}} de {{total}}", - "createUser": "Criar", - "newRole": "Novo Cargo", - "roleName": "Nome", - "roleDisplayName": "Nome para Exibição", - "roleDescription": "Descrição", "rolesCount_one": "{{count}} função", "rolesCount_many": "{{count}} funções", - "rolesCount_other": "{{count}} funções", - "createRole": "Criar", - "creating": "Criando...", - "exportDatabase": "Exportar Banco de Dados", - "exportDatabaseDesc": "Baixe um backup portátil SQLite de todos os hosts, credenciais e configurações", - "export": "Exportar", - "exporting": "Exportando...", - "importDatabase": "Importar Banco de Dados", - "importDatabaseDesc": "Restaure a partir de um backup portátil .sqlite em qualquer backend de banco de dados", - "importDatabaseSelected": "Selecionado: {{name}}", - "selectFile": "Selecionar Arquivo", - "changeFile": "Alterar", - "import": "Importar", - "importing": "Importando...", "apiKeysCount_one": "{{count}} chave", "apiKeysCount_many": "{{count}} chaves", - "apiKeysCount_other": "{{count}} chaves", - "apiKeysDocsLink": "Ver documentação", - "apiKeysCliHint": "Use uma chave de API com o CLI do Termix para gerenciar servidores a partir do seu terminal.", - "apiKeysCliLink": "Ver documentação do CLI", - "newApiKey": "Nova Chave de API", - "apiKeyCreatedWarning": "Chave criada — copie agora, ela não será exibida novamente.", - "apiKeyName": "Nome", - "apiKeyUser": "Usuário", - "apiKeySelectUser": "Selecione um usuário...", - "apiKeyExpiresAt": "Expira em", - "createKey": "Criar chave", - "apiKeyNoExpiry": "Sem expiração", - "revokedBadge": "REVOGADA", - "authTypeDual": "Autenticação dupla", - "authTypeExternal": "Externa", - "authTypeLocal": "Local", - "adminStatusAdministrator": "Administrador", - "adminStatusRegularUser": "Usuário comum", - "adminBadge": "ADMIN", - "systemBadge": "SIST", - "customBadge": "PERSONALIZADO", - "youBadge": "VOCÊ", "sessionsActive_one": "{{count}} ativo", "sessionsActive_many": "{{count}} ativos", - "sessionsActive_other": "{{count}} ativos", - "sessionActive": "Ativo: {{time}}", - "sessionExpires": "Exp: {{time}}", - "revokeAll": "Todas", - "revokeAllSessionsSuccess": "Todas as sessões do usuário foram revogadas", - "revokeAllSessionsFailed": "Falha ao revogar sessões", - "revokeSessionFailed": "Falha ao revogar sessão", - "addRole": "Adicionar função", - "noCustomRoles": "Nenhuma função personalizada definida", - "removeRoleFailed": "Falha ao remover função", - "assignRoleFailed": "Falha ao atribuir função", - "userAdminAccess": "Administrador", - "userAdminAccessDesc": "Acesso total a todas as configurações administrativas", - "userRoles": "Funções", - "revokeAllUserSessions": "Revogar todas as sessões", - "revokeAllUserSessionsDesc": "Forçar novo login em todos os dispositivos", - "revoke": "Revogar", - "deleteUserWarning": "A exclusão deste usuário é permanente.", - "deleteUser": "Excluir {{username}}", - "deleting": "Excluindo...", - "deleteUserFailed": "Falha ao excluir usuário", - "deleteUserSuccess": "Usuário \"{{username}}\" excluído", - "deleteRoleSuccess": "Função \"{{name}}\" excluída", - "revokeKeySuccess": "Chave \"{{name}}\" revogada", - "revokeKeyFailed": "Falha ao revogar chave", - "copiedToClipboard": "Copiado para a área de transferência", - "done": "Concluído", - "createUserTitle": "Criar usuário", - "createUserDesc": "Crie uma nova conta local.", - "createUserUsername": "Nome de usuário", - "createUserPassword": "Senha", - "createUserPasswordHint": "Mínimo de 6 caracteres.", - "createUserEnterUsername": "Digite o nome de usuário", - "createUserSubmit": "Criar usuário", - "editUserTitle": "Gerenciar usuário: {{username}}", - "editUserDesc": "Edite funções, status de administrador, sessões e configurações da conta.", - "editUserUsername": "Nome de usuário", - "editUserAuthType": "Tipo de autenticação", - "editUserAdminStatus": "Status de administrador", - "editUserUserId": "ID do usuário", - "linkAccountTitle": "Vincular contas", - "linkAccountDesc": "Mesclar a conta externa {{username}} com uma conta local existente.", - "linkAccountDescLocal": "Vincular a conta local {{username}} a uma conta existente apenas externa.", - "linkAccountWarningTitle": "Isso irá:", - "linkAccountEffect1": "Excluir a conta exclusiva externa", - "linkAccountEffect2": "Adicionar o login externo à conta de destino", - "linkAccountEffect3": "Permitir login tanto externo quanto por senha", - "linkAccountTargetUsername": "Nome de usuário da conta local", - "linkAccountTargetPlaceholder": "Digite o nome de usuário da conta local para vincular", - "linkAccountExternalUsername": "Nome de usuário da conta externa", - "linkAccountExternalPlaceholder": "Digite o nome de usuário da conta exclusiva externa para mesclar", - "linkAccountExternalNotFound": "Nenhuma conta exclusiva externa encontrada com esse nome de usuário", - "linkAccounts": "Vincular contas", - "linkAccountSuccess": "Contas vinculadas com sucesso", - "linkAccountFailed": "Falha ao vincular contas", - "linkAccountInProgress": "Vinculando...", - "unlinkAccountTitle": "Desvincular login externo", - "unlinkAccountDesc": "Remover o login externo de {{username}}. Eles só poderão fazer login com sua senha.", - "unlinkAccountWarning": "Isso removerá o login externo desta conta. O usuário deve ter uma senha definida para continuar fazendo login.", - "unlinkAccount": "Desvincular login externo", - "unlinkAccountInProgress": "Desvinculando...", - "unlinkAccountSuccess": "Login externo desvinculado", - "unlinkAccountFailed": "Falha ao desvincular login externo", - "updateRegistrationFailed": "Falha ao atualizar a configuração de registro", - "updatePasswordLoginFailed": "Falha ao atualizar a configuração de login por senha", - "updateSecondFactorAfterExternalLoginFailed": "Falha ao atualizar a configuração do segundo fator", - "updatePasswordResetFailed": "Falha ao atualizar a configuração de redefinição de senha", - "sessionTimeoutRange2": "O tempo limite da sessão deve ser entre 1 e 720 horas", - "sessionTimeoutSaved": "Tempo limite da sessão salvo", - "sessionTimeoutSaveFailed": "Falha ao salvar o tempo limite da sessão", - "monitoringIntervalInvalid": "Valores de intervalo inválidos", - "monitoringSaved": "Configurações de monitoramento salvas", - "monitoringSaveFailed": "Falha ao salvar as configurações de monitoramento", - "logLevelUpdateFailed": "Falha ao atualizar o nível de log", - "createUserRequired": "Nome de usuário e senha são obrigatórios", - "createUserPasswordTooShort": "A senha deve ter pelo menos 6 caracteres", - "createUserSuccess": "Usuário \"{{username}}\" criado", - "createUserFailed": "Falha ao criar usuário", - "updateAdminStatusFailed": "Falha ao atualizar o status de administrador", - "allSessionsRevoked": "Todas as sessões revogadas", - "revokeSessionsFailed": "Falha ao revogar sessões", - "manageUserData": "Gerenciar dados do usuário", - "backToUsers": "Voltar para usuários", - "manageTabAccount": "Conta", - "manageTabHosts": "Hosts", - "manageTabCredentials": "Credenciais", - "manageTabSessions": "Sessões", - "manageTabDanger": "Perigo", - "manageEditorBack": "Voltar para os dados de {{username}}", - "dataLockedBadge": "BLOQUEADO", - "dataLockedNotice": "Os dados de {{username}} permanecem bloqueados até o próximo login. Seus hosts, credenciais e snippets não podem ser visualizados ou editados até então.", - "resetPasswordTitle": "Redefinir senha", - "resetPasswordExternalOnly": "Este usuário faz login por meio de um provedor externo e não possui senha.", - "resetPasswordPlaceholder": "Nova senha", - "resetPasswordBtn": "Redefinir", - "resetPasswordWorking": "Redefinindo...", - "resetPasswordSuccess": "Senha redefinida", - "resetPasswordSuccessWiped": "Senha redefinida. Os dados criptografados do usuário foram apagados.", - "resetPasswordFailed": "Falha ao redefinir senha", - "resetPasswordConfirmWipe": "{{username}} não fez login desde a atualização de criptografia, portanto, seus dados não podem ser recuperados. Redefinir agora excluirá seus hosts, credenciais e snippets. Continuar?", - "manageApiKeys": "Chaves de API", - "apiKeyNamePlaceholder": "Nome da chave", - "apiKeyCopyNotice": "Copie esta chave agora, ela não será exibida novamente.", - "noApiKeysForUser": "Nenhuma chave de API", - "apiKeyDeleteFailed": "Falha ao excluir chave de API", - "exportUserData": "Exportação de dados", - "exportUserDataDesc": "Baixe os hosts, credenciais e dados do gerenciador de arquivos deste usuário como JSON. Segredos são descriptografados.", - "exportUserDataSuccess": "Dados do usuário exportados", - "exportUserDataFailed": "Falha ao exportar dados do usuário", "hostsCount_one": "{{count}} host", "hostsCount_many": "{{count}} hosts", "hostsCount_other": "{{count}} hosts", - "addHostForUser": "Adicionar Host", - "noHostsForUser": "Este usuário não tem hosts", - "connectToHost": "Conectar", - "deleteHostConfirm": "Excluir o host \"{{name}}\" pertencente a {{username}}?", - "hostDeletedSuccess": "Host excluído", - "hostDeleteFailed": "Falha ao excluir host", "credentialsCount_one": "{{count}} credencial", "credentialsCount_many": "{{count}} credenciais", "credentialsCount_other": "{{count}} credenciais", - "addCredentialForUser": "Adicionar Credencial", - "noCredentialsForUser": "Este usuário não tem credenciais", - "deleteCredentialConfirm": "Excluir a credencial \"{{name}}\" pertencente a {{username}}?", - "credentialDeletedSuccess": "Credencial excluída", - "credentialDeleteFailed": "Falha ao excluir credencial", - "noSessionsForUser": "Nenhuma sessão ativa", - "deleteSuccessorLabel": "Transferir hosts e credenciais para", - "deleteSuccessorMe": "Eu (o administrador que está excluindo)", - "deleteSuccessorNone": "Ninguém, excluí-los", - "deleteSuccessorDesc": "Tudo o que este usuário compartilhou continuará funcionando sob o novo proprietário; escolher ninguém remove seus hosts, credenciais e compartilhamentos.", - "deleteUserDangerDesc": "Excluir permanentemente {{username}} e todos os seus dados (hosts, credenciais, snippets, histórico). Isso não pode ser desfeito.", - "deleteUserConfirm": "Excluir permanentemente {{username}} e todos os seus dados?", - "deleteUserAdminBlocked": "Remova o status de administrador antes de excluir este usuário.", - "createRoleRequired": "Nome e nome de exibição são obrigatórios", - "createRoleSuccess": "Função \"{{name}}\" criada", - "createRoleFailed": "Falha ao criar função", - "apiKeyNameRequired": "O nome da chave é obrigatório", - "apiKeyUserRequired": "O ID do usuário é obrigatório", - "apiKeyCreatedSuccess": "Chave de API \"{{name}}\" criada", - "apiKeyCreateFailed": "Falha ao criar chave de API", - "exportSuccess": "Banco de dados exportado com sucesso", - "exportFailed": "Falha na exportação do banco de dados", - "importSelectFile": "Selecione um arquivo primeiro", - "importCompleted": "Importação concluída: {{total}} itens importados, {{skipped}} ignorados", - "importFailed": "Falha na importação: {{error}}", - "importError": "Falha na importação do banco de dados", - "sectionHostDefaults": "Padrões de Host", "rolePermissions": { "count_one": "{{count}} permissão", "count_many": "{{count}} permissões", - "count_other": "{{count}} permissões", - "editAction": "Editar permissões", - "loadError": "Falha ao carregar o catálogo de permissões", - "saved": "Permissões da função salvas", - "saveError": "Falha ao salvar permissões da função", - "save": "Salvar", - "saving": "Salvando...", - "pluginDisabled": "Plugin desativado", "groups": { "hosts": "Hosts", "credentials": "Credenciais", "admin": "Administração" } - }, - "notificationPrivateEndpoints": "Hosts privados de notificação permitidos", - "notificationPrivateEndpointsDesc": "Hosts privados exatos que os canais de notificação podem contatar. Separe-os com vírgulas.", - "updateNotificationEndpointsFailed": "Falha ao atualizar a lista de permissão de endpoints de notificação", - "secondFactorsSectionTitle": "Fatores secundários", - "secondFactorsNone": "Nenhum fator secundário cadastrado", - "secondFactorUnavailable": "Indisponível", - "resetSecondFactors": "Redefinir fatores secundários", - "resetSecondFactorsConfirm": "Remover todos os fatores secundários de {{username}}? Eles podem fazer login com sua senha ou SSO e cadastrar novamente.", - "secondFactorsResetSuccess": "Fatores secundários redefinidos", - "secondFactorsResetFailed": "Falha ao redefinir fatores secundários", - "passwordLoginForced": "O login por senha está desativado, mas nenhum outro método de login está habilitado, então ele permanece ativo por enquanto. Ninguém fica bloqueado.", - "sslNotRenewed": "Nada renova este certificado. Ele expira em {{date}}. Ative a renovação automática na seção de Certificados ACME ou faça upload de um novo antes disso.", - "sslSelfSigned": "Certificado autoassinado criado pelo Termix. Os navegadores emitirão um aviso sobre ele.", - "sslRenewedBy": "Renovado automaticamente por {{plugin}}", - "sslIssuer": "Emitido por {{issuer}}", - "sslNames": "Cobre {{names}}", - "sslManualTitle": "Fazer upload de um certificado", - "updateExternalAutoProvisionFailed": "Falha ao atualizar a configuração de criação automática", - "hostTags": "Tags de host predefinidas", - "hostTagsDesc": "Tags que todos os usuários veem como sugestões no editor de host. Pressione Espaço ou Enter para adicionar uma. Remover uma tag aqui não a remove dos hosts.", - "hostTagsError": "Não foi possível carregar ou salvar as sugestões de tags de host.", - "revokeAllSessionsConfirm": "Desconectar {{username}} em todos os lugares?", - "revokeSessionConfirm": "Desconectar esta sessão?", - "revokeSession": "Desconectar", - "deleteRoleConfirm": "Excluir a função {{name}}?", - "revokeKeyConfirm": "Revogar a chave de API {{name}}?", - "revokeKey": "Revogar" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Onde", - "who": "Quem", - "hostLabel": "Host", - "hostPlaceholder": "192.168.1.1 ou example.com", - "portLabel": "Porta", - "usernameLabel": "Nome de usuário", - "usernamePlaceholder": "nome de usuário", - "authLabel": "Autenticação", - "passwordLabel": "Senha", - "passwordPlaceholder": "senha", - "privateKeyLabel": "Chave privada", - "privateKeyPlaceholder": "Cole a chave privada...", - "credentialLabel": "Credencial", - "credentialPlaceholder": "Selecionar uma credencial salva", - "protocolLabel": "Protocolo", - "domainLabel": "Domínio", - "domainPlaceholder": "opcional", - "connectToAction": "Conectar a {{name}}", - "sshProtocol": "SSH", - "noTarget": "Nada instalado pode se conectar a este tipo de host" + "usernameLabel": "Nome de usuário" }, "keybindings": { - "description": "Vincule teclas a ações no terminal e no app, ou altere os atalhos integrados.", - "defaultsHeading": "Atalhos Integrados", - "fixedHeading": "Atalhos do App", - "fixed": { - "splitRight": "Dividir à direita", - "splitDown": "Dividir para baixo", - "zoomPane": "Ampliar o painel em foco", - "navigatePane": "Mover entre painéis", - "nextTab": "Próxima aba", - "previousTab": "Aba anterior", - "jumpTab": "Ir para a aba", - "previousView": "Voltar à visualização anterior da barra lateral", - "fullscreen": "Alternar tela cheia" - }, - "customHeading": "Atalhos Personalizados", - "addBinding": "Adicionar Atalho", - "addBindingTitle": "Adicionar Atalho", - "editBindingTitle": "Editar Atalho", - "loading": "Carregando...", - "noCustomBindings": "Nenhum atalho personalizado ainda", - "defaultBadge": "Padrão", - "customizedBadge": "Personalizado", - "customize": "Personalizar", - "resetToDefault": "Restaurar padrão", - "resetAllToDefaults": "Restaurar todos os padrões", - "cancel": "Cancelar", - "saveBinding": "Salvar atalho", - "saveError": "Falha ao salvar atalhos de teclado", - "pressKeysToRecord": "Combinação de teclas", - "pressKeysPlaceholder": "Clique e pressione as teclas", - "recording": "Pressione as teclas...", - "comboRequiredError": "Pressione uma combinação de teclas primeiro", - "conflictWarning": "Esta combinação já está vinculada a {{combo}}. Salvar fará com que ambas sejam ativadas.", - "actionLabel": "Ação", "actionNextTab": "Mudar para a próxima aba", "actionPreviousTab": "Mudar para a aba anterior", "actionOpenCommandPalette": "Abrir pesquisa rápida", - "actionReconnectSession": "Reconectar sessão atual", - "unavailableAction": "{{type}} (indisponível)", - "actionRequiredError": "Escolha uma ação primeiro", - "deleteConfirm": "Excluir esta vinculação de tecla?", - "resetAllConfirm": "Restaurar todas as vinculações de tecla aos padrões?" + "actionReconnectSession": "Reconectar sessão atual" }, "userProfile": { - "storageModeLocal": "Navegador", - "storageModeCloud": "Banco de dados", - "storageModeDescription": "O navegador armazena as configurações apenas neste navegador. O banco de dados sincroniza com o servidor e carrega em qualquer dispositivo.", - "resetToDefaults": "Restaurar padrões", - "resetToDefaultsSuccess": "Configurações restauradas aos padrões.", - "storageModeSwitch": "Armazenamento de preferências", - "sectionAccount": "Conta", - "desktopProfileTitle": "Apenas neste dispositivo", - "desktopProfileDescription": "Este perfil reside neste dispositivo e faz login de forma independente. Vincule-o a um servidor Termix para usar os mesmos hosts e configurações em todos os dispositivos.", - "sectionInterface": "Interface", - "interfacePresetDesc": "Quanto detalhe o Termix exibe. Todas as funcionalidades permanecem disponíveis.", "preset_simple": "Simples", "preset_simple_desc": "Apenas o essencial.", "preset_balanced": "Equilibrado", "preset_balanced_desc": "O layout padrão.", "preset_advanced": "Avançado", "preset_advanced_desc": "Tudo ativado, densamente organizado.", - "presetClearOverrides": "Restaurar tudo", - "presetOverridesTitle": "Personalizado", - "presetRevertArea": "Reverter", - "presetConfirmTitle": "Mudar para {{preset}}?", - "presetConfirmDesc": "Isso restaura sua barra lateral, navegação, layout do painel, barra de ferramentas do terminal e visualização do gerenciador de arquivos. Seus hosts, credenciais e página inicial não são alterados.", - "presetConfirmApply": "Aplicar predefinição", - "runSetupAgainDesc": "Percorra novamente a configuração inicial.", - "runSetupAgainButton": "Executar configuração", "uiArea_chrome": "Interface do app", "uiArea_hostList": "Lista de hosts", "uiArea_credentialList": "Lista de credenciais", @@ -1648,127 +1128,14 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Gerenciador de arquivos", "uiArea_hostEditor": "Editor de host", - "sectionAppearance": "Aparência", - "sectionSecurity": "Segurança", - "sectionApiKeys": "Chaves de API", - "sectionData": "Dados", - "usernameLabel": "Nome de usuário", - "roleLabel": "Função", - "roleAdministrator": "Administrador", - "authMethodLabel": "Método de autenticação", - "authMethodLocal": "Local", - "twoFaLabel": "2FA", - "twoFaOn": "Ativado", - "twoFaOff": "Desativado", - "versionLabel": "Versão", - "cliTitle": "Termix CLI", - "cliDescription": "Abra terminais, execute comandos e mova arquivos diretamente do seu shell.", - "cliLearnMore": "Saiba mais", - "deleteAccount": "Excluir Conta", - "deleteAccountDescription": "Excluir sua conta permanentemente", - "deleteButton": "Excluir", - "deleteAccountPermanent": "Esta ação é permanente e não pode ser desfeita.", - "deleteAccountWarning": "Todas as sessões, hosts, credenciais e configurações serão excluídas permanentemente.", - "confirmPasswordDeletePlaceholder": "Digite sua senha para confirmar", "languageLabel": "Idioma", "themeLabel": "Tema", "fontSizeLabel": "Tamanho da Fonte", "interfaceFontLabel": "Fonte da Interface", "interfaceFontDescription": "Altera a fonte da interface do aplicativo. Os perfis de terminal mantêm suas próprias configurações de fonte.", "accentColorLabel": "Cor de Destaque", - "keyboardShortcuts": "Atalhos de Teclado", - "keyboardShortcutsDescription": "Personalize os atalhos de copiar, colar e comandos do terminal", - "manageShortcuts": "Gerenciar", - "commandPalette": "Paleta de Comandos", - "commandPaletteDesc": "Ativar atalho de teclado", - "reopenTabsOnLogin": "Reabrir Abas ao Fazer Login", - "reopenTabsOnLoginDesc": "Restaure suas abas abertas ao fazer login ou atualizar a página, mesmo de outro dispositivo", - "confirmTabClose": "Confirmar Fechamento de Aba", - "confirmTabCloseDesc": "Perguntar antes de fechar abas do terminal", - "showTabNumbers": "Mostrar Números das Abas", - "showTabNumbersDesc": "Exibir um número em cada aba para ajudar a diferenciá-las", - "settingsAppRail": "Barra Lateral de Apps", - "sidebarSettingsMoved": "As configurações de exibição da barra lateral de hosts foram movidas para o painel Personalizar barra lateral, acessado pela barra de ferramentas de Hosts.", - "showHostTags": "Mostrar Tags de Host", - "showHostTagsDesc": "Exibir tags na lista de hosts", - "statusColors": "Cores de Status Reais", - "statusColorsDesc": "Usar verde/vermelho para status online/offline em vez da cor de destaque", - "pinAppRail": "Fixar Barra Lateral de Apps", - "pinAppRailDesc": "Manter a barra lateral de apps à esquerda sempre expandida em vez de expandir ao passar o mouse", - "expandAppRailOnHover": "Expandir Barra Lateral de Apps ao Passar o Mouse", - "expandAppRailOnHoverDesc": "Permitir que a barra lateral de apps à esquerda se expanda quando o ponteiro passar sobre ela", - "appRailHoverPushesContent": "Empurrar o conteúdo ao expandir", - "appRailHoverPushesContentDesc": "Abrir espaço para a barra expandida em vez de sobrepor a página. Sessões abertas, como desktop remoto, serão redimensionadas a cada vez", - "showPinAppRailButton": "Mostrar Botão Fixar Barra Lateral de Apps", - "showPinAppRailButtonDesc": "Exibir um botão na barra lateral de apps para fixá-la aberta. Desativado por padrão.", - "settingsNavigation": "Navegação", - "navigationTabsDesc": "Escolha quais abas aparecem na barra lateral de apps", - "settingsUpdates": "Atualizações", - "disableUpdateChecks": "Desativar Verificações de Atualização", - "disableUpdateChecksDesc": "Parar de verificar atualizações", - "changePassword": "Alterar Senha", - "currentPasswordLabel": "Senha Atual", - "currentPasswordPlaceholder": "Senha atual", - "newPasswordLabel": "Nova Senha", - "newPasswordPlaceholder": "Nova senha", - "confirmPasswordLabel": "Confirmar Nova Senha", - "confirmPasswordPlaceholder": "Confirmar nova senha", - "updatePassword": "Atualizar Senha", - "createApiKeyTitle": "Criar Chave de API", - "createApiKeyDescription": "Gerar uma nova chave de API para acesso programático.", - "apiKeyNameLabel": "Nome", - "apiKeyNamePlaceholder": "ex. Pipeline de CI", - "expiryDateLabel": "Data de Expiração", - "optional": "opcional", - "cancel": "Cancelar", - "createKey": "Criar Chave", - "apiKeyCreatedWarning": "Chave criada - copie agora, ela não será exibida novamente.", - "copyApiKey": "Copiar chave de API", - "copiedToClipboard": "Copiado para a área de transferência", "apiKeyCount_one": "{{count}} chave", "apiKeyCount_many": "{{count}} chaves", - "apiKeyCount_other": "{{count}} chaves", - "newKey": "Nova Chave", - "noApiKeys": "Nenhuma chave de API ainda.", - "apiKeyActive": "Ativa", - "apiKeyUsageHint": "Inclua sua chave no", - "apiKeyUsageHintHeader": "cabeçalho.", - "apiKeyPermissionsHint": "As chaves herdam as permissões do usuário que as criou.", - "exportData": "Exportar Meus Dados", - "exportDataDesc": "Faça o download de um backup dos seus hosts, credenciais e configurações para transferir para outro dispositivo", - "export": "Exportar", - "exporting": "Exportando...", - "importData": "Importar Meus Dados", - "importDataDesc": "Restaure seus hosts, credenciais e configurações a partir de um arquivo de backup .sqlite", - "importDataSelected": "Selecionado: {{name}}", - "selectFile": "Selecionar Arquivo", - "changeFile": "Alterar", - "import": "Importar", - "importing": "Importando...", - "exportSuccess": "Dados exportados com sucesso", - "exportFailed": "Falha na exportação dos dados", - "importSelectFile": "Por favor, selecione um arquivo primeiro", - "importCompleted": "Importação concluída: {{total}} itens importados, {{skipped}} ignorados", - "importFailed": "Falha na importação: {{error}}", - "roleUser": "Usuário", - "authMethodDual": "Autenticação Dupla", - "authMethodExternal": "Externa", - "done": "Concluído", - "apiKeyNameRequired": "O nome da chave é obrigatório", - "apiKeyCreated": "Chave de API \"{{name}}\" criada", - "apiKeyCreateFailed": "Falha ao criar chave de API", - "apiKeyUser": "Usuário", - "apiKeyExpires": "Expira", - "apiKeyRevoked": "Chave de API \"{{name}}\" revogada", - "apiKeyRevokeFailed": "Falha ao revogar chave de API", - "passwordFieldsRequired": "A senha atual e a nova senha são obrigatórias", - "passwordMismatch": "As senhas não coincidem", - "passwordTooShort": "A senha deve ter pelo menos 6 caracteres", - "passwordUpdated": "Senha atualizada com sucesso", - "passwordUpdateFailed": "Falha ao atualizar a senha", - "deletePasswordRequired": "A senha é obrigatória para excluir sua conta", - "deleteFailed": "Falha ao excluir a conta", - "deleting": "Excluindo...", "colorPickerTooltip": "Abrir seletor de cores", "themeSystem": "Sistema", "themeLight": "Claro", @@ -1779,18 +1146,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Conectado ao {{server}}", - "linkedProfileDescription": "Este dispositivo usa sua conta no servidor e mantém uma cópia dos seus dados, para que continue funcionando offline.", - "manageSync": "Gerenciar sincronização", - "setUpSync": "Vincular a um servidor", - "settingsTabsAndShortcuts": "Abas e Atalhos", - "onBetaTitle": "Você está na versão beta", - "onBetaDescription": "Obrigado por testar. Nos diga o que quebrou.", - "tryBetaTitle": "Experimente novos recursos antes", - "tryBetaDescription": "Participe do programa beta em Atualizações.", - "sendBetaFeedback": "Enviar feedback da beta", - "openUpdates": "Atualizações" + "themeGruvbox": "Gruvbox" } } }, @@ -2055,8 +1411,7 @@ "hasDependents": "{{name}} é necessário por {{list}}. Desative-os ou desinstale-os primeiro.", "missingDependencies": "{{name}} precisa de {{list}}, que não está instalado.", "consentChanged": "O que este plugin solicita mudou desde que você verificou. Confira a lista novamente.", - "upload": "Não foi possível ler {{name}}: {{error}}", - "developerMode": "Não foi possível alterar o modo de desenvolvedor: {{error}}" + "upload": "Não foi possível ler {{name}}: {{error}}" }, "data": { "title": "Dados armazenados", @@ -2188,13 +1543,7 @@ "browsePlugins": "Navegar por plugins", "loading": "Carregando", "developer": { - "title": "Modo de desenvolvedor de plugins", - "hint": "Permite que administradores instalem plugins a partir de um arquivo .tmxplug na aba Plugins, sem as verificações do registro. Use-o para construir e testar seus próprios plugins.", - "enableTitle": "Ativar o modo de desenvolvedor?", - "enableBody": "Administradores poderão instalar plugins a partir de arquivos que o Termix não verificou. Um plugin pode fazer qualquer coisa que suas capacidades permitam, então ative isso apenas enquanto estiver construindo ou testando plugins.", - "enable": "Ativar", - "installFromFile": "Instalar a partir de arquivo", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS está definido, então a instalação a partir de arquivo permanece bloqueada." + "installFromFile": "Instalar a partir de arquivo" }, "count": { "downloads_one": "{{formatted}} download", @@ -2233,71 +1582,7 @@ "secretSet": "Definido", "secretNotSet": "Não definido", "secretReplace": "Substituir", - "pluginSettingsSaved": "Configurações salvas", - "pluginSettingsInvalid": "Algumas configurações não puderam ser salvas. Verifique os campos destacados.", - "pluginSettingsSaveFailed": "Falha ao salvar configurações", - "pluginSettingsLoadFailed": "Falha ao carregar configurações", - "featureUnavailable": "{{name}} está indisponível no momento. Essas configurações são salvas, mas não terão efeito.", - "account": "Conta", - "security": "Segurança", - "apiKeys": "Chaves de API", - "data": "Dados e sincronização", - "interface": "Interface", - "appearance": "Aparência", - "keybindings": "Atalhos de teclado", - "adminGeneral": "Geral", - "adminUsers": "Usuários", - "adminSessions": "Sessões", - "adminRoles": "Funções", - "adminHostDefaults": "Padrões de host", - "adminBranding": "Marca", - "adminDatabase": "Banco de dados", - "adminSsl": "SSL", - "adminApiKeys": "Chaves de API", - "adminAuditLog": "Log de auditoria", - "bandYou": "Sua conta", - "bandApp": "Este aplicativo", - "bandPlugins": "Plugins", - "bandInstance": "Este servidor", - "searchPlaceholder": "Pesquisar configurações", - "noResults": "Nenhuma configuração corresponde.", - "pages": "Páginas", - "instanceSettings": "Configurações do servidor", - "nothingHere": "Nada para configurar aqui.", - "searchPage": "Pesquisar nesta página", - "noPageMatches": "Nada nesta página corresponde.", - "updates": { - "title": "Atualizações", - "betaProgram": "Programa beta", - "betaIntro": "As versões beta são compilações iniciais da próxima versão do Termix. Elas são lançadas às terças e sextas-feiras quando há novidades para testar. Podem conter bugs, e seu feedback é o que torna a versão estável melhor.", - "termixBetas": "Versões beta do Termix", - "termixBetasHint": "Avise-me sobre novos betas, não apenas versões estáveis.", - "runningBetaBuild": "Você está executando uma versão beta. Para sair, volte para uma imagem ou instalador estável.", - "howToInstall": "Como obter a versão beta", - "desktopInstall": "Baixe o instalador beta e instale-o por cima deste.", - "downloadBeta": "Baixar {{version}}", - "dockerInstall": "Altere sua imagem para a tag beta e reinicie o container:", - "copy": "Copiar", - "copied": "Copiado", - "copyFailed": "Não foi possível copiar", - "learnMore": "Saiba mais sobre betas", - "feedback": "Feedback", - "feedbackHint": "Encontrou um bug ou tem uma ideia? Ela vai direto para os desenvolvedores com sua versão preenchida.", - "sendFeedback": "Enviar feedback beta", - "releases": "Lançamentos", - "thisVersion": "Esta versão", - "newestStable": "Última versão estável", - "newestBeta": "Última versão beta", - "noRelease": "Nenhuma no momento", - "pluginBetas": "Versões beta de plugins", - "pluginBetasIntro": "Cada plugin pode usar betas independentemente. Para testar um, abra-o e pressione Testar beta.", - "openPlugins": "Abrir Plugins", - "waitingForStable": "De volta à versão estável. Permanece na {{version}} até que uma versão estável mais recente esteja disponível.", - "backToStable": "Voltar à versão estável", - "allPluginsBeta": "Usar betas para todos os plugins", - "allPluginsStable": "Todos os plugins de volta à versão estável", - "saveFailed": "Não foi possível salvar a alteração" - } + "featureUnavailable": "{{name}} está indisponível no momento. Essas configurações são salvas, mas não terão efeito." }, "managerCard": { "refresh": "Atualizar", @@ -2307,86 +1592,16 @@ "filter": "Filtrar..." }, "sync": { - "server": "Servidor Termix", - "account": "Conta", - "status": "Status", - "never": "nunca", - "justNow": "agora mesmo", "minutesAgo_one": "{{count}} minuto atrás", "minutesAgo_many": "{{count}} minutos atrás", "minutesAgo_other": "{{count}} minutos atrás", "hoursAgo_one": "{{count}} hora atrás", "hoursAgo_many": "{{count}} horas atrás", "hoursAgo_other": "{{count}} horas atrás", - "actionFailed": "Isso não funcionou. Tente novamente.", - "unlinkedTitle": "Apenas este dispositivo", - "unlinkedBody": "O Termix funciona de forma independente neste dispositivo. Vincule-o ao seu servidor Termix para manter tudo sincronizado.", - "unlinkedPointHosts": "Seus hosts, credenciais, snippets e configurações acompanham você em todos os dispositivos.", - "unlinkedPointOffline": "Tudo continua funcionando quando o servidor não está acessível e sincroniza depois.", - "unlinkedPointAccount": "Você faz login com sua conta do servidor, e os hosts que outras pessoas compartilharam com você também aparecem aqui.", - "linkButton": "Vincular a um servidor", - "state": { - "syncing": "Sincronizando", - "offline": "Servidor inacessível", - "error": "Sincronização interrompida", - "signedOut": "Desconectado", - "synced": "Sincronizado {{time}}" - }, "pending_one": "{{count}} alteração aguardando sincronização", "pending_many": "{{count}} alterações aguardando sincronização", "pending_other": "{{count}} alterações aguardando sincronização", - "signInAgain": "Fazer login novamente", - "syncNow": "Sincronizar agora", - "unlink": "Desvincular", - "unlinked": "Este dispositivo não está mais vinculado", - "unlinkTitle": "Desvincular este dispositivo?", - "unlinkDescription": "Isso interrompe a sincronização e faz logout do servidor. Hosts compartilhados com você por outras pessoas são removidos deste dispositivo de qualquer forma.", - "unlinkKeepTitle": "Manter meus dados aqui", - "unlinkKeepBody": "Seus hosts, credenciais e configurações permanecem neste dispositivo e continuam funcionando independentemente.", - "unlinkRemoveTitle": "Remover dados sincronizados", - "unlinkRemoveBody": "Tudo que veio do servidor é removido deste dispositivo. Apenas os hosts mantidos localmente neste dispositivo permanecem.", - "conflictsTitle": "Conflitos", - "conflictsDescription": "Estes foram alterados aqui e no servidor ao mesmo tempo. A versão do servidor está em uso. Mantenha a sua para enviá-la ao servidor em vez disso.", - "keepMine": "Manter a minha", - "keepServer": "Manter a do servidor", - "errorsTitle": "Não sincronizado", - "errorsDescription": "O servidor não aceitou essas alterações. Elas permanecem neste dispositivo.", - "errorPermission": "Sua conta no servidor não tem permissão para fazer essa alteração.", - "retry": "Tentar novamente", - "whatSyncs": "O que é sincronizado", - "whatSyncsDescription": "Desative qualquer item que você queira manter apenas neste dispositivo.", - "coreGroup": "Termix", - "notOnServer": "O servidor não possui isso", - "notOnDevice": "Ainda não neste dispositivo", - "localOnlyHint": "Você também pode manter hosts ou pastas individuais neste dispositivo através de suas configurações.", - "originTitle": "Origem das conexões", - "originDescription": "Conecte-se aos hosts a partir deste dispositivo ou através do servidor. Você pode alterar isso para cada host.", - "originLocal": "Este dispositivo", - "originRemote": "O servidor", - "entities": { - "hosts": "Hosts", - "sshCredentials": "Credenciais", - "sshFolders": "Pastas", - "userPreferences": "Preferências", - "pluginUserSettings": "Configurações de plugins", - "sharedHosts": "Hosts compartilhados com você", - "sharedCredentials": "Credenciais compartilhadas com você", - "vaultProfiles": "Perfis de Vault", - "snippetFolders": "Pastas de snippets", - "snippets": "Snippets", - "dashboardServiceLinks": "Links de serviços", - "homepageItems": "Itens da página inicial", - "networkTopology": "Mapa de rede", - "workspaces": "Espaços de trabalho", - "hostDefaults": "Padrões de host", - "hostDefaultsAdmin": "Padrões de host do servidor", - "aiProviders": "Provedores de IA", - "homepageLayouts": "Layouts da página inicial", - "accountProfile": "Perfil da conta" - }, "proxy": { - "title": "Proxy reverso", - "description": "Necessário apenas quando algo como Cloudflare Access ou uma página de login fica na frente do seu servidor.", "headersTitle": "Cabeçalhos extras", "headersHint": "Enviados com cada solicitação ao servidor, por exemplo, um token de serviço do Cloudflare Access.", "headerName": "Nome do cabeçalho", @@ -2399,8 +1614,7 @@ "username": "Nome de usuário", "password": "Senha", "allowInvalidCertificate": "Confiar em um certificado autoassinado", - "allowInvalidCertificateHint": "Apenas para seu próprio servidor, quando seu certificado não é de uma autoridade conhecida.", - "saved": "Salvo" + "allowInvalidCertificateHint": "Apenas para seu próprio servidor, quando seu certificado não é de uma autoridade conhecida." }, "problems": { "invalidUrl": "Isso não parece ser um endereço web.", @@ -2440,6 +1654,27 @@ "linking": "Vinculando e executando a primeira sincronização...", "linked": "Vinculado. Seus dados estão sendo sincronizados agora.", "signedInAgain": "Login realizado. A sincronização está em execução novamente." + }, + "entities": { + "hosts": "Hosts", + "sshCredentials": "Credenciais", + "sshFolders": "Pastas", + "userPreferences": "Preferências", + "pluginUserSettings": "Configurações de plugins", + "sharedHosts": "Hosts compartilhados com você", + "sharedCredentials": "Credenciais compartilhadas com você", + "vaultProfiles": "Perfis de Vault", + "snippetFolders": "Pastas de snippets", + "snippets": "Snippets", + "dashboardServiceLinks": "Links de serviços", + "homepageItems": "Itens da página inicial", + "networkTopology": "Mapa de rede", + "workspaces": "Espaços de trabalho", + "hostDefaults": "Padrões de host", + "hostDefaultsAdmin": "Padrões de host do servidor", + "aiProviders": "Provedores de IA", + "homepageLayouts": "Layouts da página inicial", + "accountProfile": "Perfil da conta" } }, "hostDefaults": { @@ -2456,34 +1691,15 @@ "resetTitle": "Este host define seu próprio valor. Clique para usar o padrão de {{source}} novamente", "clearTitle": "Definido neste nível. Clique para limpar e usar {{source}} em vez disso", "inheritedTitle": "Segue o padrão de {{source}}", - "titleAdmin": "Padrões de host do servidor", - "titleUser": "Meus padrões de host", - "titleFolder": "Padrões da pasta: {{name}}", - "descriptionAdmin": "Padrões para cada host neste servidor. Os próprios padrões de um usuário, os padrões de uma pasta ou o próprio host ainda podem definir um valor diferente. Altere um campo para defini-lo aqui ou limpe-o para deixá-lo sem definição.", - "descriptionUser": "Padrões para todos os seus hosts, sobrepondo os do servidor. Uma pasta ou o próprio host ainda podem definir um valor diferente. Altere um campo para defini-lo aqui ou limpe-o para deixá-lo sem definição.", - "descriptionFolder": "Padrões para os hosts nesta pasta e suas subpastas, sobrepondo os seus. Um host ainda pode definir um valor diferente. Altere um campo para defini-lo aqui ou limpe-o para deixá-lo sem definição.", - "save": "Salvar padrões", "saved_one": "Padrões salvos. {{count}} host foi atualizado.", "saved_many": "Padrões salvos. {{count}} hosts foram atualizados.", "saved_other": "Padrões salvos. {{count}} hosts foram atualizados.", - "savedInBackground": "Padrões salvos. Os hosts estão sendo atualizados em segundo plano.", "appliedToHosts_one": "{{count}} host foi atualizado com os novos padrões.", "appliedToHosts_many": "{{count}} hosts foram atualizados com os novos padrões.", "appliedToHosts_other": "{{count}} hosts foram atualizados com os novos padrões.", - "saveFailed": "Não foi possível salvar os padrões", - "loadFailed": "Não foi possível carregar os padrões", - "confirmTitle": "Salvar padrões?", "confirmChanges_one": "{{count}} host segue esses padrões e será alterado.", "confirmChanges_many": "{{count}} hosts seguem esses padrões e serão alterados.", "confirmChanges_other": "{{count}} hosts seguem esses padrões e serão alterados.", - "confirmNoChanges": "Nenhum host existente será alterado. Novos hosts começarão com esses padrões.", - "menuMyDefaults": "Meus padrões de host", - "folderDefaultsAction": "Padrões da pasta", - "adminSectionDescription": "Defina os padrões que cada host neste servidor segue, para todas as configurações que um host possui, incluindo as de cada plugin. Usuários e pastas podem definir os seus próprios por cima, e qualquer host ainda pode usar seu próprio valor.", - "editServerDefaults": "Editar padrões do servidor", - "resetMenu": "Redefinir", - "resetAll": "Redefinir tudo para os padrões", - "resetCore": "Redefinir conexão e SSH para os padrões", "resetDone_one": "{{count}} host agora segue seus padrões.", "resetDone_many": "{{count}} hosts agora seguem seus padrões.", "resetDone_other": "{{count}} hosts agora seguem seus padrões." @@ -2498,50 +1714,16 @@ "fields": { "secretSaved": "Salvo. Digite para substituí-lo." }, - "sharing": { - "revokeConfirm": "Remover acesso para {{name}}?", - "revoke": "Remover acesso" - }, "manage": { - "searchSettings": "Pesquisar configurações", - "noMatchingSettings": "Nenhuma configuração corresponde.", - "sections": "Seções", - "sectionNeedsAttention": "Algo aqui precisa de atenção", "needsAttention_one": "Uma coisa precisa de atenção.", "needsAttention_many": "{{count}} coisas precisam de atenção.", "needsAttention_other": "{{count}} coisas precisam de atenção.", - "bandHost": "Host", - "bandFeatures": "Protocolos e plugins", - "bandCredential": "Credencial", - "sshConnection": "Conexão SSH", - "errorAddressRequired": "Um endereço é obrigatório.", - "errorPortRange": "Use uma porta entre 1 e 65535.", - "defaults": "Padrões", - "searchHosts": "Pesquisar hosts", - "searchCredentials": "Pesquisar credenciais", - "searchDefaults": "Pesquisar padrões", - "addCredential": "Adicionar credencial", - "nothingMatches": "Nada corresponde", - "nothingYet": "Nada aqui ainda", - "emptyHostsHint": "Adicione um host e ele aparecerá aqui, na pasta que você escolher.", - "emptyCredentialsHint": "As credenciais salvas podem ser reutilizadas por qualquer host.", - "collapse": "Recolher", - "expand": "Expandir", - "cannotBeUndone": "Isso não pode ser desfeito.", - "hostNotFound": "Não foi possível encontrar esse host. Tente atualizar a lista.", "hostCount_one": "{{count}} host", "hostCount_many": "{{count}} hosts", "hostCount_other": "{{count}} hosts", "credentialCount_one": "{{count}} credencial", "credentialCount_many": "{{count}} credenciais", - "credentialCount_other": "{{count}} credenciais", - "newHost": "Novo host", - "newCredential": "Nova credencial", - "advanced": "Avançado", - "pickHost": "Escolha um host para editar", - "pickCredential": "Escolha uma credencial para editar", - "pickDefaults": "Escolha um nível de padrões para editar", - "pickHint": "Tudo sobre uma conexão está aqui, agrupado para facilitar a busca." + "credentialCount_other": "{{count}} credenciais" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/pt_PT.json b/src/ui/locales/translated/pt_PT.json index 2a8d5441d..3fa9a5f94 100644 --- a/src/ui/locales/translated/pt_PT.json +++ b/src/ui/locales/translated/pt_PT.json @@ -141,7 +141,6 @@ "continue": "Continuar", "error": "Erro", "unsavedChanges": "Alterações não guardadas", - "more": "Mais", "loading": "A carregar...", "host": "Servidor", "selectHost": "Selecionar um servidor...", @@ -154,7 +153,6 @@ "cancel": "Cancelar", "username": "Nome de utilizador", "login": "Iniciar sessão", - "logout": "Terminar sessão", "register": "Registar", "password": "Palavra-passe", "confirmPassword": "Confirmar palavra-passe", @@ -165,8 +163,6 @@ "rename": "Renomear", "edit": "Editar", "confirm": "Confirmar", - "next": "Seguinte", - "previous": "Anterior", "refresh": "Atualizar", "language": "Idioma", "backendReconnected": "Conexão ao servidor restaurada", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Leia sobre cada um" }, "desktopUpdates": { - "title": "Aplicação desktop", - "mode": "Atualizações", - "modeHint": "Como esta aplicação recebe novas versões.", - "manualModeHint": "Esta cópia não pode atualizar-se automaticamente, pelo que o Termix apenas informa quando há uma nova versão disponível.", "modeAutomatic": "Automático", "modePrompt": "Perguntar primeiro", "modeNever": "Nunca", @@ -247,15 +239,6 @@ "onboardingTitle": "Atualizações da aplicação", "onboardingBody": "A aplicação desktop pode agora atualizar-se automaticamente. Escolha como deseja receber as novas versões. Pode alterar isto mais tarde em Definições, Atualizações.", "onboardingManual": "Esta cópia da aplicação foi instalada de uma forma que não permite atualizações automáticas, pelo que o Termix irá informar quando houver uma nova versão disponível com um link para a transferir.", - "status": "Versão {{version}}", - "statusIdle": "Ainda não verificado", - "statusChecking": "A verificar atualizações", - "statusAvailable": "A versão {{version}} está disponível", - "statusDownloading": "A transferir {{version}} ({{progress}}%)", - "statusReady": "A versão {{version}} está pronta. Reinicie para instalar.", - "statusUpToDate": "Tem a versão mais recente", - "statusError": "Não foi possível verificar atualizações. Tente novamente mais tarde.", - "checkNow": "Verificar agora", "download": "Transferir", "restart": "Reiniciar agora", "later": "Mais tarde", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Fechar", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Copiar palavra-passe", - "copySudoPassword": "Copiar palavra-passe sudo", - "passwordCopied": "Palavra-passe copiada para a área de transferência", - "failedToCopyPassword": "Falha ao copiar palavra-passe", - "refreshTab": "Atualizar ligação", - "renameTab": "Renomear aba", "dashboard": "Painel", "quickConnect": "Ligação rápida", - "openAsTabHint": "Ctrl+clique ou clique do meio para abrir como aba", - "openAsTab": "Abrir como aba", - "openInRightDock": "Abrir no painel direito", - "closeRightDock": "Fechar painel direito", - "toggleRightDock": "Alternar painel direito", "hosts": "Hosts", "credentials": "Credenciais", "connections": "Conexões", - "keepSideMenuOpen": "Manter menu aberto", - "collapseSideMenu": "Recolher menu", - "roleAdministrator": "Administrador", - "roleUser": "Utilizador", "sync": "Sincronizar", "reconnectDisconnectedTerminals": "Reconectar todos os terminais desconetados", "reconnectingTerminals_one": "A reconectar {{count}} terminal", @@ -300,31 +268,12 @@ "reconnectTerminalsFailed_other": "Não foi possível iniciar a reconexão de {{count}} terminais", "fullscreenUnsupported": "O ecrã inteiro não é suportado por este navegador", "fullscreenFailed": "Não foi possível alternar o ecrã inteiro", - "resetSidebarWidth": "Repor largura", - "collapseSidebar": "Recolher barra lateral", - "openSidebar": "Abrir barra lateral", "confirmCloseHost": "Fechar {{host}}?", - "enterFullscreen": "Entrar em ecrã inteiro (Ctrl+Shift+F)", - "exitFullscreen": "Sair do ecrã inteiro (Ctrl+Shift+F)", - "group": { - "objects": "Seus", - "tools": "Ferramentas", - "system": "Sistema" - }, - "searchEverything": "Pesquisar hosts, separadores e ações", - "search": "Pesquisar", "hiddenCount_one": "{{count}} oculto", "hiddenCount_many": "{{count}} ocultos", "hiddenCount_other": "{{count}} ocultos", - "showInRail": "Mostrar na barra lateral", - "moveUp": "Mover para cima", - "moveDown": "Mover para baixo", - "resetRailOrder": "Repor ordem", - "hideFromRail": "Ocultar da barra lateral", - "openSettings": "Abrir definições", "settings": "Definições", "manage": "Gerir", - "mobileNavigation": "Navegação", "plugins": "Plugins" }, "hosts": { @@ -930,35 +879,14 @@ "importSummary": "Importação concluída: {{imported}} importados, {{updated}} atualizados, {{failed}} falhados", "importHostsFailed": "Falha ao importar hosts" }, - "commandPalette": { - "searchPlaceholder": "Pesquisar hosts, comandos ou definições...", - "quickActions": "Ações Rápidas", - "navigation": "Navegação", - "orShortcut": "ou", - "addNewHost": "Adicionar Novo Host", - "adminSettings": "Definições de Administrador", - "addCredential": "Adicionar Credencial", - "recentActivity": "Atividade Recente", - "serversAndHosts": "Servidores e Hosts", - "noHostsFound": "Nenhum host encontrado para \"{{search}}\"", - "links": "Links", - "navigate": "Navegar", - "select": "Selecionar", - "pluginActions": "Mais ações", - "noTargetTab": "Nenhuma aba de terminal está aberta", - "documentation": "Documentação" - }, "splitScreen": { "title": "Ecrã dividido", "defaultLabel": "Divisão {{number}}", "splitRight": "Dividir à direita", "splitDown": "Dividir para baixo", - "addToSplit": "Adicionar a {{split}}", "paneEmptyItem": "Painel {{index}}: vazio", "paneItem": "Painel {{index}}: {{label}}", "paneNumber": "Painel {{index}}", - "newPaneRight": "Novo painel à direita", - "newPaneBelow": "Novo painel abaixo", "emptyTitle": "Painel vazio", "emptyHint": "Escolha algo para mostrar aqui. Enquanto este painel estiver selecionado, tudo o que abrir na barra lateral também se abrirá aqui.", "openTabs": "Abrir abas", @@ -975,7 +903,6 @@ "clearPane": "Esvaziar este painel", "zoom": "Ampliar painel", "unzoom": "Restaurar layout", - "unsplit": "Remover divisão", "layouts": "Layouts", "applyLayout": "Alterar layout", "maxPanes_one": "Uma divisão pode conter até {{count}} painel", @@ -985,8 +912,6 @@ "dropHere": "Largar para mostrar aqui", "paneActions": "Ações do painel", "dividerHint": "Arraste para redimensionar. Clique duas vezes para equalizar.", - "openInSplit": "Abrir em divisão", - "openInNewSplit": "Nova divisão com a aba atual", "shortcuts": "Atalhos", "shortcutNavigate": "Mover entre painéis", "presets": { @@ -1000,23 +925,6 @@ "grid6": "Grelha de seis" } }, - "connections": { - "noConnections": "Sem ligações", - "noConnectionsDesc": "Abra um terminal, gestor de ficheiros ou ambiente de trabalho remoto para ver as ligações aqui", - "connectedFor": "Conectado há {{duration}}", - "connected": "Conectado", - "disconnected": "Desconectado", - "reconnect": "Reconectar", - "sectionOpen": "Aberto", - "sectionBackground": "Em segundo plano", - "backgroundDesc": "As sessões persistem durante {{minutes}} minutos após a desconexão e podem ser reconectadas.", - "expiresIn": "Expira em {{duration}}", - "search": "Pesquisar conexões...", - "noSearchResults": "Nenhuma conexão corresponde à sua pesquisa", - "rename": "Renomear sessão", - "forgetConfirm": "Terminar a sessão em segundo plano de {{name}}?", - "forget": "Terminar sessão" - }, "sshAuth": { "totpRequired": "Autenticação de Dois Fatores Necessária", "totpCodeLabel": "Código de Verificação", @@ -1154,65 +1062,14 @@ "placeholders": { "keyPassword": "palavra-passe da chave", "pastePrivateKey": "Cole a sua chave privada aqui...", - "enterPassword": "Introduza a sua palavra-passe", - "apiKeyName": "ex.: Pipeline CI", - "credentialName": "ex.: Chave SSH de Produção", - "optionalDetails": "Detalhes opcionais...", - "sshUsername": "ex.: root ou deploy", - "hostAddress": "10.0.0.1 ou exemplo.com", - "hostName": "ex.: Servidor Web de Produção" + "enterPassword": "Introduza a sua palavra-passe" }, "dashboard": { - "title": "Painel de Controlo", - "github": "GitHub", - "reportBug": "Reportar um erro", - "discord": "Discord", - "docs": "Documentação", - "donate": "Doar", - "serverOverview": "Visão Geral do Servidor", - "version": "Versão", "updateAvailable": "Atualização Disponível", - "beta": "Beta", - "uptime": "Tempo de Atividade", - "database": "Base de Dados", - "healthy": "Saudável", - "error": "Erro", - "totalHosts": "Total de Hosts", - "totalCredentials": "Total de Credenciais", - "recentActivity": "Atividade Recente", - "reset": "Redefinir", - "noRecentActivity": "Sem atividade recente", - "quickActions": "Ações Rápidas", - "addHost": "Adicionar Host", - "addCredential": "Adicionar Credencial", - "adminSettings": "Definições de Administrador", - "userProfile": "Perfil do Utilizador", - "serverStats": "Estatísticas do Servidor", - "customizeLayout": "Personalizar Painel de Controlo", - "justNow": "agora mesmo" + "beta": "Beta" }, "dashboardTab": { "stable": "ESTÁVEL", - "registerNewServer": "Registar um novo servidor", - "storeSshKeysOrPasswords": "Armazenar chaves SSH ou palavras-passe", - "manageUsersAndRoles": "Gerir utilizadores e funções", - "manageYourAccount": "Gerir a sua conta", - "hostStatus": "Estado do Host", - "noHostsConfigured": "Nenhum host configurado", - "checking": "A VERIFICAR", - "commandPalette": "Paleta de Comandos", - "done": "Concluído", - "clear": "Limpar", - "dragToResizeColumns": "Arraste para redimensionar as colunas", - "hostsAvailable": "Hosts Disponíveis", - "removeSection": "Remover secção", - "addSection": "Adicionar uma secção", - "allSectionsShown": "Tudo já está no painel.", - "fromPlugins": "De plugins", - "dropHere": "Largue uma secção aqui", - "dragToReorder": "Arraste as secções para as reordenar", - "clearActivityConfirm": "Limpar a sua atividade recente?", - "resetConfirm": "Repor o painel para o layout predefinido?", "onlineCount_one": "{{count}} online", "onlineCount_many": "{{count}} online", "onlineCount_other": "{{count}} online", @@ -1221,425 +1078,48 @@ "hostCount_other": "{{count}} hosts" }, "admin": { - "sectionGeneral": "Geral", - "sectionUsers": "Utilizadores", - "sectionSessions": "Sessões", - "sectionRoles": "Funções", - "sectionDatabase": "Base de Dados", - "sectionApiKeys": "Chaves API", - "sectionAuditLog": "Registo de Auditoria", - "sectionSsl": "Certificado HTTPS", - "sectionBranding": "Marca Própria", - "brandingAppName": "Nome da Aplicação", - "brandingAppNameDesc": "Exibido no ecrã de login e na aba do navegador. Deixe vazio para usar \"Termix\".", - "brandingTagline": "Slogan", - "brandingTaglineDesc": "Exibido abaixo do nome da aplicação no ecrã de login. Deixe vazio para usar o slogan predefinido.", - "brandingLogo": "Logótipo", - "brandingLogoDesc": "PNG, JPEG ou WEBP, até 750 KB. Substitui o ícone predefinido no ecrã de login e na aba do navegador.", - "brandingLogoUpload": "Carregar logótipo", - "brandingLogoReset": "Repor para o predefinido", - "brandingLogoInvalid": "Imagem inválida. Utilize um ficheiro PNG, JPEG ou WEBP com até 750 KB.", - "brandingSaved": "Definições de marca própria guardadas", - "brandingSaveFailed": "Falha ao guardar as definições de marca própria", - "sslDescription": "O certificado que o Termix serve via HTTPS. Carregue o seu próprio aqui, ou obtenha e renove um da Let's Encrypt na secção de Certificados ACME.", - "sslDocsLink": "Ver documentação SSL", - "sslCertStatus": "Estado do Certificado", - "sslCertStatusNone": "Sem certificado", - "sslCertStatusValid": "Válido", - "sslCertStatusExpiring": "Expira em breve", - "sslCertStatusExpired": "Expirado", - "sslCertExpiresAt": "Expira a {{date}}", - "sslInfoNote": "Após emitir ou carregar um certificado, o Termix ativará automaticamente o HTTPS na SSL_PORT (predefinido 8443), além da porta HTTP existente. Certifique-se de que essa porta está publicada/mapeada para este contentor para que seja acessível.", - "sslManualCert": "Certificado (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Chave Privada (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Cole o seu certificado e chave privada existentes, incluindo a cadeia completa se exigido pela sua CA.", - "sslManualUpload": "Carregar e Instalar Certificado", - "sslManualUploadLoading": "A carregar certificado...", - "sslManualUploadSuccess": "Certificado carregado e instalado com sucesso", - "sslManualUploadFailed": "Falha ao carregar o certificado", - "sslManualRequiresFields": "São necessários o certificado e a chave privada", - "auditLogTotal": "{{total}} entradas no total", - "auditLogEmpty": "Nenhuma entrada de registo de auditoria encontrada", - "auditLogSuccess": "Sucesso", - "auditLogFailed": "Falha", - "auditLogClearFilters": "Limpar Filtros", - "auditLogPage": "Página {{page}} de {{totalPages}} ({{total}} no total)", - "auditLogIp": "IP", - "auditLogResourceId": "ID do Recurso", - "auditLogFilterUser": "Utilizador", - "auditLogFilterAction": "Ação", - "auditLogFilterResourceType": "Tipo de Recurso", - "auditLogFilterStatus": "Estado", - "auditLogFilterFrom": "De", - "auditLogFilterTo": "Até", - "auditLogFilterAll": "Todos", - "allowRegistration": "Permitir Registo de Utilizadores", - "allowRegistrationDesc": "Permitir que novos utilizadores se registem com um nome de utilizador e palavra-passe", - "allowPasswordLogin": "Permitir Início de Sessão com Palavra-passe", - "allowPasswordLoginDesc": "Início de sessão com nome de utilizador e palavra-passe", - "externalAutoProvision": "Criar automaticamente contas externas", - "externalAutoProvisionDesc": "Criar uma conta na primeira vez que alguém inicia sessão através de um método externo, como SSO ou LDAP. Quando desativado, apenas pessoas que já tenham uma conta podem iniciar sessão dessa forma", - "secondFactorAfterExternalLogin": "Pedir um segundo fator após inícios de sessão externos (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Desativado: um segundo fator registado é apenas pedido após inícios de sessão com palavra-passe e outros métodos locais, como antes. Ativado: é pedido após todos os métodos de início de sessão, incluindo SSO e LDAP.", - "allowPasswordReset": "Permitir Redefinição de Palavra-passe", - "allowPasswordResetDesc": "Código de redefinição via registos do Docker", - "auditForwardingTitle": "Encaminhar para SIEM", - "auditForwardingDesc": "Enviar uma cópia de cada entrada de auditoria para um coletor externo em formato NDJSON. Os registos locais permanecem a fonte de verdade.", - "auditForwardingEnvNotice": "Uma variável de ambiente também configura o encaminhamento; a URL guardada aqui tem precedência.", - "auditForwardingToken": "Token Bearer (opcional)", - "auditForwardingTokenStored": "Token Bearer (guardado)", - "auditForwardingSaved": "Definições de encaminhamento de auditoria guardadas", - "auditForwardingSaveError": "Falha ao guardar definições de encaminhamento de auditoria", - "sessionTimeout": "Tempo Limite da Sessão", - "hours": "horas", - "sessionTimeoutRange": "Mín. 1h, máx. 720h", - "monitoringDefaults": "Definições Predefinidas de Monitorização", - "statusCheck": "Verificação de Estado", - "sec": "seg", - "logLevel": "Nível de Registo", "usersCount_one": "{{count}} utilizador", "usersCount_many": "{{count}} utilizadores", - "usersCount_other": "{{count}} utilizadores", - "searchUsers": "Pesquisar utilizadores...", - "noUsers": "Sem utilizadores", - "noUsersMatch": "Nenhum utilizador corresponde à sua pesquisa", - "pageOf": "Página {{page}} de {{total}}", - "createUser": "Criar", - "newRole": "Nova Função", - "roleName": "Nome", - "roleDisplayName": "Nome para Exibir", - "roleDescription": "Descrição", "rolesCount_one": "{{count}} função", "rolesCount_many": "{{count}} funções", - "rolesCount_other": "{{count}} funções", - "createRole": "Criar", - "creating": "A criar...", - "exportDatabase": "Exportar Base de Dados", - "exportDatabaseDesc": "Descarregar uma cópia de segurança portátil SQLite de todos os servidores, credenciais e definições", - "export": "Exportar", - "exporting": "A exportar...", - "importDatabase": "Importar Base de Dados", - "importDatabaseDesc": "Restaurar a partir de uma cópia de segurança portátil .sqlite em qualquer backend de base de dados", - "importDatabaseSelected": "Selecionado: {{name}}", - "selectFile": "Selecionar Ficheiro", - "changeFile": "Alterar", - "import": "Importar", - "importing": "A importar...", "apiKeysCount_one": "{{count}} chave", "apiKeysCount_many": "{{count}} chaves", - "apiKeysCount_other": "{{count}} chaves", - "apiKeysDocsLink": "Ver documentação", - "apiKeysCliHint": "Utilize uma chave API com a CLI do Termix para gerir servidores a partir do seu terminal.", - "apiKeysCliLink": "Ver documentação da CLI", - "newApiKey": "Nova Chave API", - "apiKeyCreatedWarning": "Chave criada — copie-a agora, não será mostrada novamente.", - "apiKeyName": "Nome", - "apiKeyUser": "Utilizador", - "apiKeySelectUser": "Selecionar um utilizador...", - "apiKeyExpiresAt": "Expira em", - "createKey": "Criar Chave", - "apiKeyNoExpiry": "Sem expiração", - "revokedBadge": "REVOGADA", - "authTypeDual": "Autenticação Dupla", - "authTypeExternal": "Externa", - "authTypeLocal": "Local", - "adminStatusAdministrator": "Administrador", - "adminStatusRegularUser": "Utilizador Normal", - "adminBadge": "ADMIN", - "systemBadge": "SIST", - "customBadge": "PERSONALIZADO", - "youBadge": "VOCÊ", "sessionsActive_one": "{{count}} ativa", "sessionsActive_many": "{{count}} ativas", - "sessionsActive_other": "{{count}} ativas", - "sessionActive": "Ativa: {{time}}", - "sessionExpires": "Exp: {{time}}", - "revokeAll": "Todas", - "revokeAllSessionsSuccess": "Todas as sessões do utilizador foram revogadas", - "revokeAllSessionsFailed": "Falha ao revogar sessões", - "revokeSessionFailed": "Falha ao revogar sessão", - "addRole": "Adicionar função", - "noCustomRoles": "Nenhuma função personalizada definida", - "removeRoleFailed": "Falha ao remover função", - "assignRoleFailed": "Falha ao atribuir função", - "userAdminAccess": "Administrador", - "userAdminAccessDesc": "Acesso total a todas as definições de administração", - "userRoles": "Funções", - "revokeAllUserSessions": "Revogar Todas as Sessões", - "revokeAllUserSessionsDesc": "Forçar novo login em todos os dispositivos", - "revoke": "Revogar", - "deleteUserWarning": "A eliminação deste utilizador é permanente.", - "deleteUser": "Eliminar {{username}}", - "deleting": "A eliminar...", - "deleteUserFailed": "Falha ao eliminar utilizador", - "deleteUserSuccess": "Utilizador \"{{username}}\" eliminado", - "deleteRoleSuccess": "Função \"{{name}}\" eliminada", - "revokeKeySuccess": "Chave \"{{name}}\" revogada", - "revokeKeyFailed": "Falha ao revogar chave", - "copiedToClipboard": "Copiado para a área de transferência", - "done": "Concluído", - "createUserTitle": "Criar Utilizador", - "createUserDesc": "Criar uma nova conta local.", - "createUserUsername": "Nome de utilizador", - "createUserPassword": "Palavra-passe", - "createUserPasswordHint": "Mínimo de 6 caracteres.", - "createUserEnterUsername": "Introduza o nome de utilizador", - "createUserSubmit": "Criar Utilizador", - "editUserTitle": "Gerir Utilizador: {{username}}", - "editUserDesc": "Editar funções, estado de administrador, sessões e definições da conta.", - "editUserUsername": "Nome de utilizador", - "editUserAuthType": "Tipo de Autenticação", - "editUserAdminStatus": "Estado de Administrador", - "editUserUserId": "ID do Utilizador", - "linkAccountTitle": "Ligar Contas", - "linkAccountDesc": "Unir a conta externa {{username}} com uma conta local existente.", - "linkAccountDescLocal": "Ligar uma conta local {{username}} com uma conta existente apenas externa.", - "linkAccountWarningTitle": "Isto irá:", - "linkAccountEffect1": "Eliminar a conta exclusiva externa", - "linkAccountEffect2": "Adicionar o início de sessão externo à conta de destino", - "linkAccountEffect3": "Permitir início de sessão externo e por palavra-passe", - "linkAccountTargetUsername": "Nome de Utilizador da Conta Local", - "linkAccountTargetPlaceholder": "Introduza o nome de utilizador da conta local para ligar", - "linkAccountExternalUsername": "Nome de Utilizador da Conta Externa", - "linkAccountExternalPlaceholder": "Introduza o nome de utilizador da conta exclusiva externa para fundir", - "linkAccountExternalNotFound": "Nenhuma conta exclusiva externa encontrada com esse nome de utilizador", - "linkAccounts": "Ligar Contas", - "linkAccountSuccess": "Contas ligadas com sucesso", - "linkAccountFailed": "Falha ao ligar as contas", - "linkAccountInProgress": "A ligar...", - "unlinkAccountTitle": "Desligar Início de Sessão Externo", - "unlinkAccountDesc": "Remover o início de sessão externo de {{username}}. O utilizador só poderá iniciar sessão com a palavra-passe.", - "unlinkAccountWarning": "Isto irá remover o início de sessão externo desta conta. O utilizador deve ter uma palavra-passe definida para continuar a iniciar sessão.", - "unlinkAccount": "Desligar Início de Sessão Externo", - "unlinkAccountInProgress": "A desligar...", - "unlinkAccountSuccess": "Início de sessão externo desligado", - "unlinkAccountFailed": "Falha ao desligar o início de sessão externo", - "updateRegistrationFailed": "Falha ao atualizar a definição de registo", - "updatePasswordLoginFailed": "Falha ao atualizar a definição de início de sessão por palavra-passe", - "updateSecondFactorAfterExternalLoginFailed": "Falha ao atualizar a definição do segundo fator", - "updatePasswordResetFailed": "Falha ao atualizar a definição de redefinição de palavra-passe", - "sessionTimeoutRange2": "O tempo limite da sessão deve estar entre 1 e 720 horas", - "sessionTimeoutSaved": "Tempo limite da sessão guardado", - "sessionTimeoutSaveFailed": "Falha ao guardar o tempo limite da sessão", - "monitoringIntervalInvalid": "Valores de intervalo inválidos", - "monitoringSaved": "Definições de monitorização guardadas", - "monitoringSaveFailed": "Falha ao guardar as definições de monitorização", - "logLevelUpdateFailed": "Falha ao atualizar o nível de registo", - "createUserRequired": "O nome de utilizador e a palavra-passe são obrigatórios", - "createUserPasswordTooShort": "A palavra-passe deve ter pelo menos 6 caracteres", - "createUserSuccess": "Utilizador \"{{username}}\" criado", - "createUserFailed": "Falha ao criar o utilizador", - "updateAdminStatusFailed": "Falha ao atualizar o estado de administrador", - "allSessionsRevoked": "Todas as sessões revogadas", - "revokeSessionsFailed": "Falha ao revogar as sessões", - "manageUserData": "Gerir dados do utilizador", - "backToUsers": "Voltar aos utilizadores", - "manageTabAccount": "Conta", - "manageTabHosts": "Servidores", - "manageTabCredentials": "Credenciais", - "manageTabSessions": "Sessões", - "manageTabDanger": "Perigo", - "manageEditorBack": "Voltar aos dados de {{username}}", - "dataLockedBadge": "BLOQUEADO", - "dataLockedNotice": "Os dados de {{username}} permanecem bloqueados até ao próximo início de sessão. Os seus servidores, credenciais e comandos não podem ser visualizados ou editados até lá.", - "resetPasswordTitle": "Redefinir Palavra-Passe", - "resetPasswordExternalOnly": "Este utilizador inicia sessão através de um fornecedor externo e não tem palavra-passe.", - "resetPasswordPlaceholder": "Nova palavra-passe", - "resetPasswordBtn": "Redefinir", - "resetPasswordWorking": "A redefinir...", - "resetPasswordSuccess": "Palavra-passe redefinida", - "resetPasswordSuccessWiped": "Palavra-passe redefinida. Os dados encriptados do utilizador foram apagados.", - "resetPasswordFailed": "Falha ao redefinir a palavra-passe", - "resetPasswordConfirmWipe": "{{username}} não iniciou sessão desde a atualização de encriptação, pelo que os seus dados não podem ser recuperados. A redefinição agora eliminará os seus servidores, credenciais e comandos. Continuar?", - "manageApiKeys": "Chaves API", - "apiKeyNamePlaceholder": "Nome da chave", - "apiKeyCopyNotice": "Copie esta chave agora, não será mostrada novamente.", - "noApiKeysForUser": "Sem chaves API", - "apiKeyDeleteFailed": "Falha ao eliminar a chave API", - "exportUserData": "Exportação de dados", - "exportUserDataDesc": "Descarregar os hosts, credenciais e dados do gestor de ficheiros deste utilizador como JSON. Os segredos são descriptografados.", - "exportUserDataSuccess": "Dados do utilizador exportados", - "exportUserDataFailed": "Falha ao exportar os dados do utilizador", "hostsCount_one": "{{count}} servidor", "hostsCount_many": "{{count}} servidores", "hostsCount_other": "{{count}} servidores", - "addHostForUser": "Adicionar Host", - "noHostsForUser": "Este utilizador não tem hosts", - "connectToHost": "Ligar", - "deleteHostConfirm": "Eliminar o host \"{{name}}\" pertencente a {{username}}?", - "hostDeletedSuccess": "Host eliminado", - "hostDeleteFailed": "Falha ao eliminar o host", "credentialsCount_one": "{{count}} credencial", "credentialsCount_many": "{{count}} credenciais", "credentialsCount_other": "{{count}} credenciais", - "addCredentialForUser": "Adicionar Credencial", - "noCredentialsForUser": "Este utilizador não tem credenciais", - "deleteCredentialConfirm": "Eliminar a credencial \"{{name}}\" pertencente a {{username}}?", - "credentialDeletedSuccess": "Credencial eliminada", - "credentialDeleteFailed": "Falha ao eliminar a credencial", - "noSessionsForUser": "Sem sessões ativas", - "deleteSuccessorLabel": "Transferir hosts e credenciais para", - "deleteSuccessorMe": "Eu (o administrador que elimina)", - "deleteSuccessorNone": "Ninguém, eliminá-los", - "deleteSuccessorDesc": "Tudo o que este utilizador partilhou continua a funcionar sob o novo proprietário; escolher ninguém remove os seus hosts, credenciais e partilhas.", - "deleteUserDangerDesc": "Eliminar permanentemente {{username}} e todos os seus dados (hosts, credenciais, snippets, histórico). Isto não pode ser desfeito.", - "deleteUserConfirm": "Eliminar permanentemente {{username}} e todos os seus dados?", - "deleteUserAdminBlocked": "Remover o estatuto de administrador antes de eliminar este utilizador.", - "createRoleRequired": "O nome e o nome de exibição são obrigatórios", - "createRoleSuccess": "Função \"{{name}}\" criada", - "createRoleFailed": "Falha ao criar a função", - "apiKeyNameRequired": "O nome da chave é obrigatório", - "apiKeyUserRequired": "O ID do utilizador é obrigatório", - "apiKeyCreatedSuccess": "Chave API \"{{name}}\" criada", - "apiKeyCreateFailed": "Falha ao criar a chave API", - "exportSuccess": "Base de dados exportada com sucesso", - "exportFailed": "Falha na exportação da base de dados", - "importSelectFile": "Selecione primeiro um ficheiro", - "importCompleted": "Importação concluída: {{total}} itens importados, {{skipped}} ignorados", - "importFailed": "Falha na importação: {{error}}", - "importError": "Falha na importação da base de dados", - "sectionHostDefaults": "Definições padrão do host", "rolePermissions": { "count_one": "{{count}} permissão", "count_many": "{{count}} permissões", - "count_other": "{{count}} permissões", - "editAction": "Editar permissões", - "loadError": "Falha ao carregar o catálogo de permissões", - "saved": "Permissões da função guardadas", - "saveError": "Falha ao guardar as permissões da função", - "save": "Guardar", - "saving": "A guardar...", - "pluginDisabled": "Plugin desativado", "groups": { "hosts": "Hosts", "credentials": "Credenciais", "admin": "Administração" } - }, - "notificationPrivateEndpoints": "Hosts privados de notificação permitidos", - "notificationPrivateEndpointsDesc": "Hosts privados exatos que os canais de notificação podem contactar. Separe-os com vírgulas.", - "updateNotificationEndpointsFailed": "Falha ao atualizar a lista de permissão de endpoints de notificação", - "secondFactorsSectionTitle": "Segundos fatores", - "secondFactorsNone": "Nenhum segundo fator registado", - "secondFactorUnavailable": "Indisponível", - "resetSecondFactors": "Repor segundos fatores", - "resetSecondFactorsConfirm": "Remover todos os segundos fatores de {{username}}? Podem iniciar sessão com a palavra-passe ou SSO e registar novamente.", - "secondFactorsResetSuccess": "Fatores secundários reiniciados", - "secondFactorsResetFailed": "Falha ao reiniciar fatores secundários", - "passwordLoginForced": "O início de sessão por palavra-passe está desativado, mas nenhum outro método de autenticação está ativo, por isso permanece ativado por agora. Ninguém fica bloqueado.", - "sslNotRenewed": "Nada renova este certificado. Expira a {{date}}. Ative a renovação automática na secção de Certificados ACME ou carregue um novo antes dessa data.", - "sslSelfSigned": "Certificado auto-assinado criado pelo Termix. Os navegadores vão emitir um aviso.", - "sslRenewedBy": "Renovado automaticamente por {{plugin}}", - "sslIssuer": "Emitido por {{issuer}}", - "sslNames": "Cobre {{names}}", - "sslManualTitle": "Carregar um certificado", - "updateExternalAutoProvisionFailed": "Falha ao atualizar a definição de criação automática", - "hostTags": "Etiquetas de host predefinidas", - "hostTagsDesc": "Etiquetas que todos os utilizadores veem como sugestões no editor de hosts. Prima Espaço ou Enter para adicionar uma. Remover uma etiqueta aqui não a remove dos hosts.", - "hostTagsError": "Não foi possível carregar ou guardar as sugestões de etiquetas de host.", - "revokeAllSessionsConfirm": "Terminar sessão de {{username}} em todos os dispositivos?", - "revokeSessionConfirm": "Terminar esta sessão?", - "revokeSession": "Terminar sessão", - "deleteRoleConfirm": "Eliminar a função {{name}}?", - "revokeKeyConfirm": "Revogar a chave de API {{name}}?", - "revokeKey": "Revogar" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Onde", - "who": "Quem", - "hostLabel": "Host", - "hostPlaceholder": "192.168.1.1 ou example.com", - "portLabel": "Porta", - "usernameLabel": "Nome de utilizador", - "usernamePlaceholder": "nome de utilizador", - "authLabel": "Autenticação", - "passwordLabel": "Palavra-passe", - "passwordPlaceholder": "palavra-passe", - "privateKeyLabel": "Chave privada", - "privateKeyPlaceholder": "Colar chave privada...", - "credentialLabel": "Credencial", - "credentialPlaceholder": "Selecionar uma credencial guardada", - "protocolLabel": "Protocolo", - "domainLabel": "Domínio", - "domainPlaceholder": "opcional", - "connectToAction": "Ligar a {{name}}", - "sshProtocol": "SSH", - "noTarget": "Nada instalado consegue ligar-se a este tipo de host" + "usernameLabel": "Nome de utilizador" }, "keybindings": { - "description": "Associar teclas a ações no terminal e na aplicação, ou alterar os atalhos integrados.", - "defaultsHeading": "Atalhos Integrados", - "fixedHeading": "Atalhos da Aplicação", - "fixed": { - "splitRight": "Dividir à direita", - "splitDown": "Dividir para baixo", - "zoomPane": "Ampliar o painel em foco", - "navigatePane": "Mover entre painéis", - "nextTab": "Próxima separação", - "previousTab": "Separação anterior", - "jumpTab": "Ir para a separação", - "previousView": "Voltar à vista anterior da barra lateral", - "fullscreen": "Alternar ecrã inteiro" - }, - "customHeading": "Atalhos Personalizados", - "addBinding": "Adicionar Atalho", - "addBindingTitle": "Adicionar Atalho", - "editBindingTitle": "Editar Atalho", - "loading": "A carregar...", - "noCustomBindings": "Ainda não há atalhos personalizados", - "defaultBadge": "Predefinição", - "customizedBadge": "Personalizado", - "customize": "Personalizar", - "resetToDefault": "Restaurar predefinições", - "resetAllToDefaults": "Restaurar todas as predefinições", - "cancel": "Cancelar", - "saveBinding": "Guardar atalho", - "saveError": "Falha ao guardar atalhos do teclado", - "pressKeysToRecord": "Combinação de teclas", - "pressKeysPlaceholder": "Clique e prima as teclas", - "recording": "Prima as teclas...", - "comboRequiredError": "Prima primeiro uma combinação de teclas", - "conflictWarning": "Esta combinação já está associada a {{combo}}. Ao guardar, ambas serão ativadas.", - "actionLabel": "Ação", "actionNextTab": "Mudar para a próxima separador", "actionPreviousTab": "Mudar para o separador anterior", "actionOpenCommandPalette": "Abrir pesquisa rápida", - "actionReconnectSession": "Reconectar sessão atual", - "unavailableAction": "{{type}} (não disponível)", - "actionRequiredError": "Selecione primeiro uma ação", - "deleteConfirm": "Eliminar esta associação de teclas?", - "resetAllConfirm": "Restaurar todas as associações de teclas às predefinições?" + "actionReconnectSession": "Reconectar sessão atual" }, "userProfile": { - "storageModeLocal": "Navegador", - "storageModeCloud": "Base de dados", - "storageModeDescription": "O navegador guarda as definições apenas neste navegador. A base de dados sincroniza com o servidor e carrega em qualquer dispositivo.", - "resetToDefaults": "Restaurar Predefinições", - "resetToDefaultsSuccess": "Definições restauradas para as predefinições.", - "storageModeSwitch": "Armazenamento de Preferências", - "sectionAccount": "Conta", - "desktopProfileTitle": "Apenas neste dispositivo", - "desktopProfileDescription": "Este perfil reside neste dispositivo e inicia sessão de forma independente. Ligue-o a um servidor Termix para usar os mesmos hosts e definições em todos os dispositivos.", - "sectionInterface": "Interface", - "interfacePresetDesc": "Quanto detalhe o Termix mostra. Todas as funcionalidades permanecem disponíveis.", "preset_simple": "Simples", "preset_simple_desc": "Apenas o essencial.", "preset_balanced": "Equilibrado", "preset_balanced_desc": "O layout padrão.", "preset_advanced": "Avançado", "preset_advanced_desc": "Tudo ativado, densamente compactado.", - "presetClearOverrides": "Restaurar tudo", - "presetOverridesTitle": "Personalizado", - "presetRevertArea": "Reverter", - "presetConfirmTitle": "Mudar para {{preset}}?", - "presetConfirmDesc": "Isto restaura a barra lateral, navegação, layout do painel, barra de ferramentas do terminal e vista do gestor de ficheiros. Os seus hosts, credenciais e página inicial não são alterados.", - "presetConfirmApply": "Aplicar predefinição", - "runSetupAgainDesc": "Repetir a configuração inicial.", - "runSetupAgainButton": "Executar configuração", "uiArea_chrome": "Interface da aplicação", "uiArea_hostList": "Lista de hosts", "uiArea_credentialList": "Lista de credenciais", @@ -1648,127 +1128,14 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Gestor de ficheiros", "uiArea_hostEditor": "Editor de hosts", - "sectionAppearance": "Aparência", - "sectionSecurity": "Segurança", - "sectionApiKeys": "Chaves API", - "sectionData": "Dados", - "usernameLabel": "Nome de utilizador", - "roleLabel": "Função", - "roleAdministrator": "Administrador", - "authMethodLabel": "Método de autenticação", - "authMethodLocal": "Local", - "twoFaLabel": "2FA", - "twoFaOn": "Ativado", - "twoFaOff": "Desativado", - "versionLabel": "Versão", - "cliTitle": "Termix CLI", - "cliDescription": "Abra terminais, execute comandos e mova ficheiros a partir do seu próprio shell.", - "cliLearnMore": "Saiba Mais", - "deleteAccount": "Eliminar Conta", - "deleteAccountDescription": "Eliminar permanentemente a sua conta", - "deleteButton": "Eliminar", - "deleteAccountPermanent": "Esta ação é permanente e não pode ser desfeita.", - "deleteAccountWarning": "Todas as sessões, hosts, credenciais e definições serão eliminadas permanentemente.", - "confirmPasswordDeletePlaceholder": "Introduza a sua palavra-passe para confirmar", "languageLabel": "Idioma", "themeLabel": "Tema", "fontSizeLabel": "Tamanho da Fonte", "interfaceFontLabel": "Fonte da Interface", "interfaceFontDescription": "Altera a fonte da interface da aplicação. Os perfis do terminal mantêm as suas próprias definições de fonte.", "accentColorLabel": "Cor de Destaque", - "keyboardShortcuts": "Atalhos de Teclado", - "keyboardShortcutsDescription": "Personalize os atalhos de cópia, colagem e comandos do terminal", - "manageShortcuts": "Gerir", - "commandPalette": "Paleta de Comandos", - "commandPaletteDesc": "Ativar atalho de teclado", - "reopenTabsOnLogin": "Reabrir Separadores ao Iniciar Sessão", - "reopenTabsOnLoginDesc": "Restaure os seus separadores abertos ao iniciar sessão ou atualizar a página, mesmo a partir de outro dispositivo", - "confirmTabClose": "Confirmar Fecho de Separador", - "confirmTabCloseDesc": "Pedir confirmação antes de fechar separadores do terminal", - "showTabNumbers": "Mostrar Números dos Separadores", - "showTabNumbersDesc": "Exibir um número em cada separador para ajudar a distingui-los", - "settingsAppRail": "Barra Lateral de Aplicações", - "sidebarSettingsMoved": "As definições de exibição da barra lateral de hosts foram movidas para o painel Personalizar barra lateral, aberto a partir da barra de ferramentas de Hosts.", - "showHostTags": "Mostrar Etiquetas de Host", - "showHostTagsDesc": "Exibir etiquetas na lista de hosts", - "statusColors": "Cores de Estado Reais", - "statusColorsDesc": "Usar verde/vermelho para o estado online/offline em vez da cor de destaque", - "pinAppRail": "Fixar Barra Lateral de Aplicações", - "pinAppRailDesc": "Manter a barra lateral de aplicações sempre expandida em vez de expandir ao passar o rato", - "expandAppRailOnHover": "Expandir Barra Lateral ao Passar o Rato", - "expandAppRailOnHoverDesc": "Permitir que a barra lateral de aplicações se expanda quando o ponteiro passar por cima", - "appRailHoverPushesContent": "Empurrar o conteúdo ao expandir", - "appRailHoverPushesContentDesc": "Fazer espaço para a barra expandida em vez de abrir sobre a página. Sessões abertas, como desktop remoto, redimensionam-se cada vez", - "showPinAppRailButton": "Mostrar Botão de Fixar Barra Lateral", - "showPinAppRailButtonDesc": "Exibir um botão na barra lateral para a fixar aberta. Desativado por predefinição.", - "settingsNavigation": "Navegação", - "navigationTabsDesc": "Escolha quais os separadores que aparecem na barra lateral de aplicações", - "settingsUpdates": "Atualizações", - "disableUpdateChecks": "Desativar Verificações de Atualização", - "disableUpdateChecksDesc": "Parar de verificar atualizações", - "changePassword": "Alterar Palavra-passe", - "currentPasswordLabel": "Palavra-passe Atual", - "currentPasswordPlaceholder": "Palavra-passe atual", - "newPasswordLabel": "Nova Palavra-passe", - "newPasswordPlaceholder": "Nova palavra-passe", - "confirmPasswordLabel": "Confirmar Nova Palavra-passe", - "confirmPasswordPlaceholder": "Confirmar nova palavra-passe", - "updatePassword": "Atualizar Palavra-passe", - "createApiKeyTitle": "Criar Chave API", - "createApiKeyDescription": "Gerar uma nova chave API para acesso programático.", - "apiKeyNameLabel": "Nome", - "apiKeyNamePlaceholder": "ex. Pipeline CI", - "expiryDateLabel": "Data de Expiração", - "optional": "opcional", - "cancel": "Cancelar", - "createKey": "Criar Chave", - "apiKeyCreatedWarning": "Chave criada - copie-a agora, não será mostrada novamente.", - "copyApiKey": "Copiar chave API", - "copiedToClipboard": "Copiado para a área de transferência", "apiKeyCount_one": "{{count}} chave", "apiKeyCount_many": "{{count}} chaves", - "apiKeyCount_other": "{{count}} chaves", - "newKey": "Nova Chave", - "noApiKeys": "Ainda não há chaves API.", - "apiKeyActive": "Ativa", - "apiKeyUsageHint": "Inclua a sua chave no", - "apiKeyUsageHintHeader": "cabeçalho.", - "apiKeyPermissionsHint": "As chaves herdam as permissões do utilizador que as criou.", - "exportData": "Exportar os Meus Dados", - "exportDataDesc": "Descarregue uma cópia de segurança dos seus hosts, credenciais e definições para transferir para outro dispositivo", - "export": "Exportar", - "exporting": "A exportar...", - "importData": "Importar os Meus Dados", - "importDataDesc": "Restaure os seus hosts, credenciais e definições a partir de um ficheiro de cópia de segurança .sqlite", - "importDataSelected": "Selecionado: {{name}}", - "selectFile": "Selecionar Ficheiro", - "changeFile": "Alterar", - "import": "Importar", - "importing": "A importar...", - "exportSuccess": "Dados exportados com sucesso", - "exportFailed": "Falha na exportação de dados", - "importSelectFile": "Por favor, selecione primeiro um ficheiro", - "importCompleted": "Importação concluída: {{total}} itens importados, {{skipped}} ignorados", - "importFailed": "Falha na importação: {{error}}", - "roleUser": "Utilizador", - "authMethodDual": "Autenticação Dupla", - "authMethodExternal": "Externa", - "done": "Concluído", - "apiKeyNameRequired": "O nome da chave é obrigatório", - "apiKeyCreated": "Chave API \"{{name}}\" criada", - "apiKeyCreateFailed": "Falha ao criar a chave API", - "apiKeyUser": "Utilizador", - "apiKeyExpires": "Expira", - "apiKeyRevoked": "Chave API \"{{name}}\" revogada", - "apiKeyRevokeFailed": "Falha ao revogar a chave API", - "passwordFieldsRequired": "As palavras-passe atual e nova são obrigatórias", - "passwordMismatch": "As palavras-passe não coincidem", - "passwordTooShort": "A palavra-passe deve ter pelo menos 6 caracteres", - "passwordUpdated": "Palavra-passe atualizada com sucesso", - "passwordUpdateFailed": "Falha ao atualizar a palavra-passe", - "deletePasswordRequired": "A palavra-passe é necessária para eliminar a sua conta", - "deleteFailed": "Falha ao eliminar a conta", - "deleting": "A eliminar...", "colorPickerTooltip": "Abrir seletor de cores", "themeSystem": "Sistema", "themeLight": "Claro", @@ -1779,18 +1146,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Sessão iniciada em {{server}}", - "linkedProfileDescription": "Este dispositivo utiliza a sua conta no servidor e mantém uma cópia dos seus dados, por isso continua a funcionar offline.", - "manageSync": "Gerir sincronização", - "setUpSync": "Ligar a um servidor", - "settingsTabsAndShortcuts": "Separadores e Atalhos", - "onBetaTitle": "Está numa versão beta", - "onBetaDescription": "Obrigado por testar. Diga-nos o que falha.", - "tryBetaTitle": "Experimente novas funcionalidades em primeira mão", - "tryBetaDescription": "Junte-se ao programa beta em Atualizações.", - "sendBetaFeedback": "Enviar feedback da beta", - "openUpdates": "Atualizações" + "themeGruvbox": "Gruvbox" } } }, @@ -2055,8 +1411,7 @@ "hasDependents": "{{name}} é necessário por {{list}}. Desative-os ou desinstale-os primeiro.", "missingDependencies": "{{name}} precisa de {{list}}, que não está instalado.", "consentChanged": "O que este plugin solicita mudou desde que o consultou. Verifique a lista novamente.", - "upload": "Não foi possível ler {{name}}: {{error}}", - "developerMode": "Não foi possível alterar o modo de desenvolvedor: {{error}}" + "upload": "Não foi possível ler {{name}}: {{error}}" }, "data": { "title": "Dados armazenados", @@ -2188,13 +1543,7 @@ "browsePlugins": "Navegar por plugins", "loading": "A carregar", "developer": { - "title": "Modo de desenvolvedor de plugins", - "hint": "Permite aos administradores instalar plugins a partir de um ficheiro .tmxplug na aba Plugins, sem as verificações do registo. Use-o para criar e testar os seus próprios plugins.", - "enableTitle": "Ativar o modo de desenvolvedor?", - "enableBody": "Os administradores poderão instalar plugins a partir de ficheiros que o Termix não verificou. Um plugin pode fazer qualquer coisa que as suas capacidades permitam, por isso ative apenas enquanto estiver a criar ou testar plugins.", - "enable": "Ativar", - "installFromFile": "Instalar a partir de ficheiro", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS está definido, por isso a instalação a partir de ficheiro permanece bloqueada." + "installFromFile": "Instalar a partir de ficheiro" }, "count": { "downloads_one": "{{formatted}} descarga", @@ -2233,71 +1582,7 @@ "secretSet": "Definido", "secretNotSet": "Não definido", "secretReplace": "Substituir", - "pluginSettingsSaved": "Definições guardadas", - "pluginSettingsInvalid": "Algumas definições não puderam ser guardadas. Verifique os campos destacados.", - "pluginSettingsSaveFailed": "Falha ao guardar definições", - "pluginSettingsLoadFailed": "Falha ao carregar definições", - "featureUnavailable": "{{name}} está indisponível de momento. Estas definições são guardadas, mas não terão efeito.", - "account": "Conta", - "security": "Segurança", - "apiKeys": "Chaves API", - "data": "Dados e sincronização", - "interface": "Interface", - "appearance": "Aparência", - "keybindings": "Atalhos de teclado", - "adminGeneral": "Geral", - "adminUsers": "Utilizadores", - "adminSessions": "Sessões", - "adminRoles": "Funções", - "adminHostDefaults": "Predefinições de host", - "adminBranding": "Marca", - "adminDatabase": "Base de dados", - "adminSsl": "SSL", - "adminApiKeys": "Chaves API", - "adminAuditLog": "Registo de auditoria", - "bandYou": "A sua conta", - "bandApp": "Esta aplicação", - "bandPlugins": "Plugins", - "bandInstance": "Este servidor", - "searchPlaceholder": "Pesquisar definições", - "noResults": "Nenhuma definição corresponde.", - "pages": "Páginas", - "instanceSettings": "Definições do servidor", - "nothingHere": "Nada para definir aqui.", - "searchPage": "Pesquisar nesta página", - "noPageMatches": "Nada nesta página corresponde.", - "updates": { - "title": "Atualizações", - "betaProgram": "Programa beta", - "betaIntro": "As versões beta são compilações antecipadas da próxima versão do Termix. São lançadas às terças e sextas-feiras quando há novidades para experimentar. Podem conter erros, e o seu feedback é o que torna a versão estável melhor.", - "termixBetas": "Versões beta do Termix", - "termixBetasHint": "Informe-me sobre novas versões beta, não apenas sobre lançamentos estáveis.", - "runningBetaBuild": "Está a executar uma compilação beta. Para sair, volte a uma imagem ou instalador estável.", - "howToInstall": "Como obter a versão beta", - "desktopInstall": "Descarregue o instalador beta e instale-o por cima deste.", - "downloadBeta": "Descarregar {{version}}", - "dockerInstall": "Altere a sua imagem para a tag beta e reinicie o contentor:", - "copy": "Copiar", - "copied": "Copiado", - "copyFailed": "Não foi possível copiar", - "learnMore": "Saber mais sobre versões beta", - "feedback": "Feedback", - "feedbackHint": "Encontrou um erro ou tem uma ideia? Vai diretamente para os desenvolvedores com a sua versão preenchida.", - "sendFeedback": "Enviar feedback beta", - "releases": "Lançamentos", - "thisVersion": "Esta versão", - "newestStable": "Última versão estável", - "newestBeta": "Última versão beta", - "noRelease": "Nenhuma no momento", - "pluginBetas": "Versões beta de plugins", - "pluginBetasIntro": "Cada plugin pode usar versões beta de forma independente. Para experimentar um, abra-o e prima Experimentar beta.", - "openPlugins": "Abrir Plugins", - "waitingForStable": "De volta à versão estável. Mantém-se na {{version}} até que um lançamento estável seja mais recente.", - "backToStable": "Voltar à versão estável", - "allPluginsBeta": "Usar versões beta para todos os plugins", - "allPluginsStable": "Todos os plugins de volta à versão estável", - "saveFailed": "Não foi possível guardar a alteração" - } + "featureUnavailable": "{{name}} está indisponível de momento. Estas definições são guardadas, mas não terão efeito." }, "managerCard": { "refresh": "Atualizar", @@ -2307,86 +1592,16 @@ "filter": "Filtrar..." }, "sync": { - "server": "Servidor Termix", - "account": "Conta", - "status": "Estado", - "never": "nunca", - "justNow": "agora mesmo", "minutesAgo_one": "{{count}} minuto atrás", "minutesAgo_many": "{{count}} minutos atrás", "minutesAgo_other": "{{count}} minutos atrás", "hoursAgo_one": "{{count}} hora atrás", "hoursAgo_many": "{{count}} horas atrás", "hoursAgo_other": "{{count}} horas atrás", - "actionFailed": "Isto não funcionou. Tente novamente.", - "unlinkedTitle": "Apenas neste dispositivo", - "unlinkedBody": "O Termix funciona de forma independente neste dispositivo. Ligue-o ao seu servidor Termix para manter tudo sincronizado.", - "unlinkedPointHosts": "Os seus hosts, credenciais, snippets e definições acompanham-no em todos os dispositivos.", - "unlinkedPointOffline": "Tudo continua a funcionar quando o servidor não está acessível e sincroniza-se mais tarde.", - "unlinkedPointAccount": "Inicia sessão com a sua conta do servidor, e os hosts que outras pessoas partilharam consigo também aparecem aqui.", - "linkButton": "Ligar a um servidor", - "state": { - "syncing": "A sincronizar", - "offline": "Servidor inacessível", - "error": "Sincronização interrompida", - "signedOut": "Sessão terminada", - "synced": "Sincronizado {{time}}" - }, "pending_one": "{{count}} alteração à espera de sincronização", "pending_many": "{{count}} alterações à espera de sincronização", "pending_other": "{{count}} alterações à espera de sincronização", - "signInAgain": "Iniciar sessão novamente", - "syncNow": "Sincronizar agora", - "unlink": "Desligar", - "unlinked": "Este dispositivo já não está ligado", - "unlinkTitle": "Desvincular este dispositivo?", - "unlinkDescription": "Isto interrompe a sincronização e termina a sessão no servidor. Os hosts partilhados consigo por outros serão removidos deste dispositivo de qualquer forma.", - "unlinkKeepTitle": "Manter os meus dados aqui", - "unlinkKeepBody": "Os seus hosts, credenciais e definições permanecem neste dispositivo e continuam a funcionar de forma independente.", - "unlinkRemoveTitle": "Remover dados sincronizados", - "unlinkRemoveBody": "Tudo o que veio do servidor é removido deste dispositivo. Apenas os hosts mantidos localmente neste dispositivo permanecem.", - "conflictsTitle": "Conflitos", - "conflictsDescription": "Estes foram alterados aqui e no servidor ao mesmo tempo. A versão do servidor está em uso. Mantenha a sua para a enviar para o servidor em vez disso.", - "keepMine": "Manter a minha", - "keepServer": "Manter a do servidor", - "errorsTitle": "Não sincronizado", - "errorsDescription": "O servidor não aceitou estas alterações. Elas permanecem neste dispositivo.", - "errorPermission": "A sua conta no servidor não tem permissão para fazer esta alteração.", - "retry": "Tentar novamente", - "whatSyncs": "O que é sincronizado", - "whatSyncsDescription": "Desative qualquer item que queira manter apenas neste dispositivo.", - "coreGroup": "Termix", - "notOnServer": "O servidor não tem isto", - "notOnDevice": "Ainda não neste dispositivo", - "localOnlyHint": "Também pode manter hosts ou pastas individuais neste dispositivo através das respetivas definições.", - "originTitle": "Origem das ligações", - "originDescription": "Ligue-se aos hosts a partir deste dispositivo ou através do servidor. Pode alterar isto para cada host.", - "originLocal": "Este dispositivo", - "originRemote": "O servidor", - "entities": { - "hosts": "Hosts", - "sshCredentials": "Credenciais", - "sshFolders": "Pastas", - "userPreferences": "Preferências", - "pluginUserSettings": "Definições de plugins", - "sharedHosts": "Hosts partilhados consigo", - "sharedCredentials": "Credenciais partilhadas consigo", - "vaultProfiles": "Perfis do Vault", - "snippetFolders": "Pastas de snippets", - "snippets": "Snippets", - "dashboardServiceLinks": "Ligações a serviços", - "homepageItems": "Itens da página inicial", - "networkTopology": "Mapa de rede", - "workspaces": "Espaços de trabalho", - "hostDefaults": "Definições predefinidas de hosts", - "hostDefaultsAdmin": "Definições predefinidas de hosts do servidor", - "aiProviders": "Provedores de IA", - "homepageLayouts": "Layouts da página inicial", - "accountProfile": "Perfil da conta" - }, "proxy": { - "title": "Proxy reverso", - "description": "Apenas necessário quando algo como o Cloudflare Access ou uma página de login fica à frente do seu servidor.", "headersTitle": "Cabeçalhos extra", "headersHint": "Enviados com cada pedido ao servidor, por exemplo, um token de serviço do Cloudflare Access.", "headerName": "Nome do cabeçalho", @@ -2399,8 +1614,7 @@ "username": "Nome de utilizador", "password": "Palavra-passe", "allowInvalidCertificate": "Confiar num certificado autoassinado", - "allowInvalidCertificateHint": "Apenas para o seu próprio servidor, quando o seu certificado não é de uma autoridade conhecida.", - "saved": "Guardado" + "allowInvalidCertificateHint": "Apenas para o seu próprio servidor, quando o seu certificado não é de uma autoridade conhecida." }, "problems": { "invalidUrl": "Isto não parece ser um endereço web.", @@ -2440,6 +1654,27 @@ "linking": "A ligar e a executar a primeira sincronização...", "linked": "Ligado. Os seus dados estão agora a sincronizar.", "signedInAgain": "Sessão iniciada. A sincronização está novamente em execução." + }, + "entities": { + "hosts": "Hosts", + "sshCredentials": "Credenciais", + "sshFolders": "Pastas", + "userPreferences": "Preferências", + "pluginUserSettings": "Definições de plugins", + "sharedHosts": "Hosts partilhados consigo", + "sharedCredentials": "Credenciais partilhadas consigo", + "vaultProfiles": "Perfis do Vault", + "snippetFolders": "Pastas de snippets", + "snippets": "Snippets", + "dashboardServiceLinks": "Ligações a serviços", + "homepageItems": "Itens da página inicial", + "networkTopology": "Mapa de rede", + "workspaces": "Espaços de trabalho", + "hostDefaults": "Definições predefinidas de hosts", + "hostDefaultsAdmin": "Definições predefinidas de hosts do servidor", + "aiProviders": "Provedores de IA", + "homepageLayouts": "Layouts da página inicial", + "accountProfile": "Perfil da conta" } }, "hostDefaults": { @@ -2456,34 +1691,15 @@ "resetTitle": "Este host define o seu próprio valor. Clique para usar novamente a predefinição de {{source}}", "clearTitle": "Definido a este nível. Clique para limpar e usar {{source}} em vez disso", "inheritedTitle": "Segue a predefinição de {{source}}", - "titleAdmin": "Predefinições de hosts do servidor", - "titleUser": "As minhas predefinições de hosts", - "titleFolder": "Predefinições da pasta: {{name}}", - "descriptionAdmin": "Predefinições para cada host neste servidor. As próprias predefinições de um utilizador, as predefinições de uma pasta ou o próprio host ainda podem definir um valor diferente. Altere um campo para o definir aqui, ou limpe-o para o deixar sem definir.", - "descriptionUser": "Predefinições para todos os seus hosts, sobrepondo as do servidor. Uma pasta ou o próprio host ainda podem definir um valor diferente. Altere um campo para o definir aqui, ou limpe-o para o deixar sem definir.", - "descriptionFolder": "Predefinições para os hosts nesta pasta e nas suas subpastas, sobrepondo as suas. Um host ainda pode definir um valor diferente. Altere um campo para o definir aqui, ou limpe-o para o deixar sem definir.", - "save": "Guardar predefinições", "saved_one": "Predefinições guardadas. {{count}} host foi atualizado.", "saved_many": "Predefinições guardadas. {{count}} hosts foram atualizados.", "saved_other": "Predefinições guardadas. {{count}} hosts foram atualizados.", - "savedInBackground": "Predefinições guardadas. Os hosts estão a ser atualizados em segundo plano.", "appliedToHosts_one": "{{count}} host foi atualizado com as novas predefinições.", "appliedToHosts_many": "{{count}} hosts foram atualizados com as novas predefinições.", "appliedToHosts_other": "{{count}} hosts foram atualizados com as novas predefinições.", - "saveFailed": "Não foi possível guardar as predefinições", - "loadFailed": "Não foi possível carregar as predefinições", - "confirmTitle": "Guardar predefinições?", "confirmChanges_one": "{{count}} host segue estas predefinições e será alterado.", "confirmChanges_many": "{{count}} hosts seguem estas predefinições e serão alterados.", "confirmChanges_other": "{{count}} hosts seguem estas predefinições e serão alterados.", - "confirmNoChanges": "Nenhuma alteração em hosts existentes. Novos hosts começarão com estas predefinições.", - "menuMyDefaults": "As minhas predefinições de hosts", - "folderDefaultsAction": "Predefinições da pasta", - "adminSectionDescription": "Defina as predefinições que cada host neste servidor segue, para cada definição que um host tem, incluindo as de cada plugin. Utilizadores e pastas podem definir as suas próprias por cima, e qualquer host ainda pode usar o seu próprio valor.", - "editServerDefaults": "Editar predefinições do servidor", - "resetMenu": "Repor", - "resetAll": "Repor tudo para os predefinições", - "resetCore": "Repor ligação e SSH para os predefinições", "resetDone_one": "{{count}} servidor segue agora as suas predefinições.", "resetDone_many": "{{count}} servidores seguem agora as suas predefinições.", "resetDone_other": "{{count}} servidores seguem agora as suas predefinições." @@ -2498,50 +1714,16 @@ "fields": { "secretSaved": "Guardado. Escreva para substituir." }, - "sharing": { - "revokeConfirm": "Remover acesso para {{name}}?", - "revoke": "Remover acesso" - }, "manage": { - "searchSettings": "Pesquisar definições", - "noMatchingSettings": "Nenhuma definição corresponde.", - "sections": "Secções", - "sectionNeedsAttention": "Algo aqui precisa de atenção", "needsAttention_one": "Uma coisa precisa de atenção.", "needsAttention_many": "{{count}} coisas precisam de atenção.", "needsAttention_other": "{{count}} coisas precisam de atenção.", - "bandHost": "Servidor", - "bandFeatures": "Protocolos e plugins", - "bandCredential": "Credencial", - "sshConnection": "Ligação SSH", - "errorAddressRequired": "É necessário um endereço.", - "errorPortRange": "Utilize uma porta entre 1 e 65535.", - "defaults": "Predefinições", - "searchHosts": "Pesquisar servidores", - "searchCredentials": "Pesquisar credenciais", - "searchDefaults": "Pesquisar predefinições", - "addCredential": "Adicionar credencial", - "nothingMatches": "Nada corresponde", - "nothingYet": "Ainda nada aqui", - "emptyHostsHint": "Adicione um servidor e ele aparecerá aqui, na pasta que lhe atribuir.", - "emptyCredentialsHint": "As credenciais guardadas podem ser reutilizadas por qualquer servidor.", - "collapse": "Recolher", - "expand": "Expandir", - "cannotBeUndone": "Isto não pode ser desfeito.", - "hostNotFound": "Não foi possível encontrar esse servidor. Tente atualizar a lista.", "hostCount_one": "{{count}} servidor", "hostCount_many": "{{count}} servidores", "hostCount_other": "{{count}} servidores", "credentialCount_one": "{{count}} credencial", "credentialCount_many": "{{count}} credenciais", - "credentialCount_other": "{{count}} credenciais", - "newHost": "Novo servidor", - "newCredential": "Nova credencial", - "advanced": "Avançado", - "pickHost": "Selecione um servidor para editar", - "pickCredential": "Selecione uma credencial para editar", - "pickDefaults": "Selecione um nível de predefinições para editar", - "pickHint": "Tudo sobre uma ligação está aqui, agrupado para facilitar a pesquisa." + "credentialCount_other": "{{count}} credenciais" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/ro_RO.json b/src/ui/locales/translated/ro_RO.json index e4d48cf86..71b8b3e9c 100644 --- a/src/ui/locales/translated/ro_RO.json +++ b/src/ui/locales/translated/ro_RO.json @@ -141,7 +141,6 @@ "continue": "Continuă", "error": "Eroare", "unsavedChanges": "Modificări nesalvate", - "more": "Mai multe", "loading": "Se încarcă...", "host": "Gazdă", "selectHost": "Selectați o gazdă...", @@ -154,7 +153,6 @@ "cancel": "Anulează", "username": "Nume utilizator", "login": "Autentificare", - "logout": "Deconectare", "register": "Înregistrare", "password": "Parolă", "confirmPassword": "Confirmă parola", @@ -165,8 +163,6 @@ "rename": "Redenumește", "edit": "Editează", "confirm": "Confirmă", - "next": "Înainte", - "previous": "Înapoi", "refresh": "Reîmprospătează", "language": "Limba", "backendReconnected": "Conexiunea la server a fost restabilită", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Citește despre fiecare" }, "desktopUpdates": { - "title": "Aplicație desktop", - "mode": "Actualizări", - "modeHint": "Cum primește această aplicație versiuni noi.", - "manualModeHint": "Această copie nu se poate actualiza singură, așa că Termix îți va anunța doar când apare o versiune nouă.", "modeAutomatic": "Automat", "modePrompt": "Întreabă mai întâi", "modeNever": "Niciodată", @@ -247,15 +239,6 @@ "onboardingTitle": "Actualizări aplicație", "onboardingBody": "Aplicația desktop se poate actualiza acum singură. Alege cum vrei să primești versiunile noi. Poți modifica această setare ulterior în Setări, Actualizări.", "onboardingManual": "Această copie a aplicației a fost instalată într-un mod care nu permite actualizarea automată, așa că Termix îți va anunța când apare o versiune nouă, cu un link pentru descărcare.", - "status": "Versiunea {{version}}", - "statusIdle": "Nu s-a verificat încă", - "statusChecking": "Se verifică actualizările", - "statusAvailable": "Versiunea {{version}} este disponibilă", - "statusDownloading": "Se descarcă {{version}} ({{progress}}%)", - "statusReady": "Versiunea {{version}} este gata. Repornește pentru a o instala.", - "statusUpToDate": "Ai cea mai nouă versiune", - "statusError": "Nu s-au putut verifica actualizările. Încearcă din nou mai târziu.", - "checkNow": "Verifică acum", "download": "Descarcă", "restart": "Repornire acum", "later": "Mai târziu", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Închide", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Copiază parola", - "copySudoPassword": "Copiază parola sudo", - "passwordCopied": "Parola a fost copiată în clipboard", - "failedToCopyPassword": "Nu s-a putut copia parola", - "refreshTab": "Reîmprospătează conexiunea", - "renameTab": "Redenumește fila", "dashboard": "Panou de control", "quickConnect": "Conectare rapidă", - "openAsTabHint": "Ctrl+click sau click cu butonul din mijloc pentru a deschide ca filă", - "openAsTab": "Deschide ca filă", - "openInRightDock": "Deschide în bara laterală dreaptă", - "closeRightDock": "Închide bara laterală dreaptă", - "toggleRightDock": "Comută bara laterală dreaptă", "hosts": "Gazde", "credentials": "Credențiale", "connections": "Conexiuni", - "keepSideMenuOpen": "Menține meniul deschis", - "collapseSideMenu": "Restrânge meniul", - "roleAdministrator": "Administrator", - "roleUser": "Utilizator", "sync": "Sincronizare", "reconnectDisconnectedTerminals": "Reconectează toate terminalele deconectate", "reconnectingTerminals_one": "Se reconectează {{count}} terminal", @@ -300,31 +268,12 @@ "reconnectTerminalsFailed_other": "Nu s-a putut începe reconectarea {{count}} terminale", "fullscreenUnsupported": "Modul ecran complet nu este suportat de acest browser", "fullscreenFailed": "Nu s-a putut comuta modul ecran complet", - "resetSidebarWidth": "Resetează lățimea", - "collapseSidebar": "Restrânge bara laterală", - "openSidebar": "Deschide bara laterală", "confirmCloseHost": "Închide {{host}}?", - "enterFullscreen": "Intră în ecran complet (Ctrl+Shift+F)", - "exitFullscreen": "Ieși din ecran complet (Ctrl+Shift+F)", - "group": { - "objects": "Ale tale", - "tools": "Unelte", - "system": "Sistem" - }, - "searchEverything": "Caută gazde, file și acțiuni", - "search": "Caută", "hiddenCount_one": "{{count}} ascuns", "hiddenCount_few": "{{count}} ascunse", "hiddenCount_other": "{{count}} ascunse", - "showInRail": "Afișează în bara laterală", - "moveUp": "Mută în sus", - "moveDown": "Mută în jos", - "resetRailOrder": "Resetează ordinea", - "hideFromRail": "Ascunde din bara laterală", - "openSettings": "Deschide setările", "settings": "Setări", "manage": "Gestionează", - "mobileNavigation": "Navigare", "plugins": "Plugin-uri" }, "hosts": { @@ -930,35 +879,14 @@ "importSummary": "Import finalizat: {{imported}} importate, {{updated}} actualizate, {{failed}} eșuate", "importHostsFailed": "Nu s-au putut importa gazdele" }, - "commandPalette": { - "searchPlaceholder": "Caută gazde, comenzi sau setări...", - "quickActions": "Acțiuni rapide", - "navigation": "Navigare", - "orShortcut": "sau", - "addNewHost": "Adaugă gazdă nouă", - "adminSettings": "Setări administrator", - "addCredential": "Adaugă acreditare", - "recentActivity": "Activitate recentă", - "serversAndHosts": "Servere și gazde", - "noHostsFound": "Nicio gazdă găsită pentru „{{search}}”", - "links": "Legături", - "navigate": "Navigare", - "select": "Selectează", - "pluginActions": "Mai multe acțiuni", - "noTargetTab": "Niciun tab de terminal nu este deschis", - "documentation": "Documentație" - }, "splitScreen": { "title": "Ecran divizat", "defaultLabel": "Divizare {{number}}", "splitRight": "Divizează la dreapta", "splitDown": "Divizează în jos", - "addToSplit": "Adaugă la {{split}}", "paneEmptyItem": "Panou {{index}}: gol", "paneItem": "Panou {{index}}: {{label}}", "paneNumber": "Panou {{index}}", - "newPaneRight": "Panou nou la dreapta", - "newPaneBelow": "Panou nou mai jos", "emptyTitle": "Panou gol", "emptyHint": "Alege ceva de afișat aici. Când acest panou este selectat, orice deschizi din bara laterală se va deschide și aici.", "openTabs": "Tab-uri deschise", @@ -975,7 +903,6 @@ "clearPane": "Golește acest panou", "zoom": "Mărește panoul", "unzoom": "Restaurează aspectul", - "unsplit": "Anulează divizarea", "layouts": "Aspecte", "applyLayout": "Schimbă aspectul", "maxPanes_one": "O divizare poate conține până la {{count}} panou", @@ -985,8 +912,6 @@ "dropHere": "Plasează pentru a afișa aici", "paneActions": "Acțiuni panou", "dividerHint": "Trage pentru a redimensiona. Dublu-clic pentru a egaliza.", - "openInSplit": "Deschide în divizare", - "openInNewSplit": "Divizare nouă cu tab-ul curent", "shortcuts": "Comenzi rapide", "shortcutNavigate": "Mută între panouri", "presets": { @@ -1000,23 +925,6 @@ "grid6": "Grilă de șase" } }, - "connections": { - "noConnections": "Nicio conexiune", - "noConnectionsDesc": "Deschide un terminal, un manager de fișiere sau un desktop remote pentru a vedea conexiunile aici", - "connectedFor": "Conectat de {{duration}}", - "connected": "Conectat", - "disconnected": "Deconectat", - "reconnect": "Reconectare", - "sectionOpen": "Deschise", - "sectionBackground": "Fundal", - "backgroundDesc": "Sesiunile persistă timp de {{minutes}} minute după deconectare și pot fi reconectate.", - "expiresIn": "Expiră în {{duration}}", - "search": "Caută conexiuni...", - "noSearchResults": "Nicio conexiune nu se potrivește cu căutarea", - "rename": "Redenumește sesiunea", - "forgetConfirm": "Închei sesiunea de fundal pentru {{name}}?", - "forget": "Încheie sesiunea" - }, "sshAuth": { "totpRequired": "Autentificarea cu doi factori este necesară", "totpCodeLabel": "Cod de verificare", @@ -1154,65 +1062,14 @@ "placeholders": { "keyPassword": "parola cheii", "pastePrivateKey": "Lipiți cheia privată aici...", - "enterPassword": "Introduceți parola", - "apiKeyName": "de ex., CI Pipeline", - "credentialName": "de ex. Cheie SSH Producție", - "optionalDetails": "Detalii opționale...", - "sshUsername": "de ex. root sau deploy", - "hostAddress": "10.0.0.1 sau example.com", - "hostName": "de ex. Server Web Producție" + "enterPassword": "Introduceți parola" }, "dashboard": { - "title": "Panou de control", - "github": "GitHub", - "reportBug": "Raportează o eroare", - "discord": "Discord", - "docs": "Documentație", - "donate": "Donează", - "serverOverview": "Prezentare generală server", - "version": "Versiune", "updateAvailable": "Actualizare disponibilă", - "beta": "Beta", - "uptime": "Timp de funcționare", - "database": "Bază de date", - "healthy": "Funcțional", - "error": "Eroare", - "totalHosts": "Total gazde", - "totalCredentials": "Total credentiale", - "recentActivity": "Activitate recentă", - "reset": "Resetează", - "noRecentActivity": "Nicio activitate recentă", - "quickActions": "Acțiuni rapide", - "addHost": "Adaugă gazdă", - "addCredential": "Adaugă credentiale", - "adminSettings": "Setări administrator", - "userProfile": "Profil utilizator", - "serverStats": "Statistici server", - "customizeLayout": "Personalizează panoul de control", - "justNow": "acum" + "beta": "Beta" }, "dashboardTab": { "stable": "STABIL", - "registerNewServer": "Înregistrează un server nou", - "storeSshKeysOrPasswords": "Salvează chei SSH sau parole", - "manageUsersAndRoles": "Gestionează utilizatorii și rolurile", - "manageYourAccount": "Gestionează-ți contul", - "hostStatus": "Starea gazdei", - "noHostsConfigured": "Nicio gazdă configurată", - "checking": "VERIFICARE", - "commandPalette": "Paletă de comenzi", - "done": "Gata", - "clear": "Șterge", - "dragToResizeColumns": "Trage pentru a redimensiona coloanele", - "hostsAvailable": "Gazde disponibile", - "removeSection": "Elimină secțiunea", - "addSection": "Adaugă o secțiune", - "allSectionsShown": "Totul este deja pe tabloul de bord.", - "fromPlugins": "Din plugin-uri", - "dropHere": "Plasează o secțiune aici", - "dragToReorder": "Trage secțiunile pentru a le rearanja", - "clearActivityConfirm": "Ștergi activitatea recentă?", - "resetConfirm": "Resetezi tabloul de bord la aspectul implicit?", "onlineCount_one": "{{count}} online", "onlineCount_few": "{{count}} online", "onlineCount_other": "{{count}} online", @@ -1221,425 +1078,48 @@ "hostCount_other": "{{count}} gazde" }, "admin": { - "sectionGeneral": "General", - "sectionUsers": "Utilizatori", - "sectionSessions": "Sesiuni", - "sectionRoles": "Roluri", - "sectionDatabase": "Bază de date", - "sectionApiKeys": "Chei API", - "sectionAuditLog": "Jurnal de audit", - "sectionSsl": "Certificat HTTPS", - "sectionBranding": "Etichetă albă", - "brandingAppName": "Nume aplicație", - "brandingAppNameDesc": "Afișat pe ecranul de autentificare și în fila browserului. Lasă gol pentru a folosi „Termix”.", - "brandingTagline": "Slogan", - "brandingTaglineDesc": "Afișat sub numele aplicației pe ecranul de autentificare. Lasă gol pentru a folosi sloganul implicit.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG sau WEBP, până la 750 KB. Înlocuiește pictograma implicită de pe ecranul de autentificare și în fila browserului.", - "brandingLogoUpload": "Încarcă logo", - "brandingLogoReset": "Resetează la implicit", - "brandingLogoInvalid": "Imagine nevalidă. Folosește un fișier PNG, JPEG sau WEBP de până la 750 KB.", - "brandingSaved": "Setările de branding au fost salvate", - "brandingSaveFailed": "Salvarea setărilor de branding a eșuat", - "sslDescription": "Certificatul pe care Termix îl servește prin HTTPS. Încarcă propriul tău aici sau obține și reînnoiește unul de la Let's Encrypt în secțiunea Certificate ACME.", - "sslDocsLink": "Vezi documentația SSL", - "sslCertStatus": "Starea certificatului", - "sslCertStatusNone": "Fără certificat", - "sslCertStatusValid": "Valid", - "sslCertStatusExpiring": "Expiră în curând", - "sslCertStatusExpired": "Expirat", - "sslCertExpiresAt": "Expiră la {{date}}", - "sslInfoNote": "După emiterea sau încărcarea unui certificat, Termix va activa automat HTTPS pe SSL_PORT (implicit 8443), în plus față de portul HTTP existent. Asigură-te că acest port este publicat/mapat către acest container pentru a fi accesibil.", - "sslManualCert": "Certificat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Cheie privată (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Lipește certificatul și cheia privată existente, inclusiv lanțul complet dacă este necesar de către CA-ul tău.", - "sslManualUpload": "Încarcă și instalează certificatul", - "sslManualUploadLoading": "Se încarcă certificatul...", - "sslManualUploadSuccess": "Certificatul a fost încărcat și instalat cu succes", - "sslManualUploadFailed": "Încărcarea certificatului a eșuat", - "sslManualRequiresFields": "Sunt necesare certificatul și cheia privată", - "auditLogTotal": "{{total}} intrări în total", - "auditLogEmpty": "Nu s-au găsit intrări în jurnalul de audit", - "auditLogSuccess": "Succes", - "auditLogFailed": "Eșuat", - "auditLogClearFilters": "Șterge filtrele", - "auditLogPage": "Pagina {{page}} din {{totalPages}} ({{total}} în total)", - "auditLogIp": "IP", - "auditLogResourceId": "ID resursă", - "auditLogFilterUser": "Utilizator", - "auditLogFilterAction": "Acțiune", - "auditLogFilterResourceType": "Tip resursă", - "auditLogFilterStatus": "Stare", - "auditLogFilterFrom": "De la", - "auditLogFilterTo": "Până la", - "auditLogFilterAll": "Toate", - "allowRegistration": "Permite înregistrarea utilizatorilor", - "allowRegistrationDesc": "Permite utilizatorilor noi să se înregistreze singuri cu un nume de utilizator și o parolă", - "allowPasswordLogin": "Permite autentificarea cu parolă", - "allowPasswordLoginDesc": "Autentificare cu nume de utilizator și parolă", - "externalAutoProvision": "Creează automat conturi externe", - "externalAutoProvisionDesc": "Creează un cont la prima autentificare prin o metodă externă, cum ar fi SSO sau LDAP. Dacă este dezactivat, doar persoanele care au deja un cont se pot autentifica în acest mod", - "secondFactorAfterExternalLogin": "Solicită un al doilea factor după autentificările externe (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Dacă este dezactivat, un al doilea factor înregistrat este solicitat doar după autentificările cu parolă și alte metode locale, ca înainte. Dacă este activat, este solicitat după fiecare metodă de autentificare, inclusiv SSO și LDAP.", - "allowPasswordReset": "Permite resetarea parolei", - "allowPasswordResetDesc": "Cod de resetare prin logurile Docker", - "auditForwardingTitle": "Redirecționează către SIEM", - "auditForwardingDesc": "Trimite o copie a fiecărei intrări din jurnalul de audit către un colector extern în format NDJSON. Logurile locale rămân sursa de adevăr.", - "auditForwardingEnvNotice": "O variabilă de mediu configurează, de asemenea, redirecționarea; URL-ul salvat aici are prioritate.", - "auditForwardingToken": "Token bearer (opțional)", - "auditForwardingTokenStored": "Token bearer (salvat)", - "auditForwardingSaved": "Setările de redirecționare a jurnalului de audit au fost salvate", - "auditForwardingSaveError": "Salvarea setărilor de redirecționare a jurnalului de audit a eșuat", - "sessionTimeout": "Timp de expirare a sesiunii", - "hours": "ore", - "sessionTimeoutRange": "Min 1h, max 720h", - "monitoringDefaults": "Setări implicite de monitorizare", - "statusCheck": "Verificare stare", - "sec": "sec", - "logLevel": "Nivel de logare", "usersCount_one": "{{count}} utilizator", "usersCount_few": "{{count}} utilizatori", - "usersCount_other": "{{count}} utilizatori", - "searchUsers": "Caută utilizatori...", - "noUsers": "Niciun utilizator", - "noUsersMatch": "Niciun utilizator nu se potrivește cu căutarea", - "pageOf": "Pagina {{page}} din {{total}}", - "createUser": "Creează", - "newRole": "Rol nou", - "roleName": "Nume", - "roleDisplayName": "Nume afișat", - "roleDescription": "Descriere", "rolesCount_one": "{{count}} rol", "rolesCount_few": "{{count}} roluri", - "rolesCount_other": "{{count}} roluri", - "createRole": "Creează", - "creating": "Se creează...", - "exportDatabase": "Exportă baza de date", - "exportDatabaseDesc": "Descarcă o copie de rezervă SQLite portabilă cu toți gazdele, credentialele și setările", - "export": "Exportă", - "exporting": "Se exportă...", - "importDatabase": "Importă baza de date", - "importDatabaseDesc": "Restaurează dintr-o copie de rezervă .sqlite portabilă pe orice backend de bază de date", - "importDatabaseSelected": "Selectat: {{name}}", - "selectFile": "Selectează fișier", - "changeFile": "Schimbă", - "import": "Importă", - "importing": "Se importă...", "apiKeysCount_one": "{{count}} cheie", "apiKeysCount_few": "{{count}} chei", - "apiKeysCount_other": "{{count}} chei", - "apiKeysDocsLink": "Vezi documentația", - "apiKeysCliHint": "Folosește o cheie API cu Termix CLI pentru a gestiona serverele din terminal.", - "apiKeysCliLink": "Vezi documentația CLI", - "newApiKey": "Cheie API nouă", - "apiKeyCreatedWarning": "Cheia a fost creată - copiați-o acum, nu va mai fi afișată.", - "apiKeyName": "Nume", - "apiKeyUser": "Utilizator", - "apiKeySelectUser": "Selectați un utilizator...", - "apiKeyExpiresAt": "Expiră la", - "createKey": "Creează cheie", - "apiKeyNoExpiry": "Fără expirare", - "revokedBadge": "REVOCATĂ", - "authTypeDual": "Autentificare duală", - "authTypeExternal": "Externă", - "authTypeLocal": "Locală", - "adminStatusAdministrator": "Administrator", - "adminStatusRegularUser": "Utilizator obișnuit", - "adminBadge": "ADMIN", - "systemBadge": "SISTEM", - "customBadge": "PERSONALIZAT", - "youBadge": "DUMNEAVOASTRĂ", "sessionsActive_one": "{{count}} activ", "sessionsActive_few": "{{count}} active", - "sessionsActive_other": "{{count}} active", - "sessionActive": "Activă: {{time}}", - "sessionExpires": "Exp: {{time}}", - "revokeAll": "Toate", - "revokeAllSessionsSuccess": "Toate sesiunile pentru utilizator au fost revocate", - "revokeAllSessionsFailed": "Nu s-au putut revoca sesiunile", - "revokeSessionFailed": "Nu s-a putut revoca sesiunea", - "addRole": "Adaugă rol", - "noCustomRoles": "Nu sunt definite roluri personalizate", - "removeRoleFailed": "Nu s-a putut elimina rolul", - "assignRoleFailed": "Nu s-a putut atribui rolul", - "userAdminAccess": "Administrator", - "userAdminAccessDesc": "Acces complet la toate setările de administrator", - "userRoles": "Roluri", - "revokeAllUserSessions": "Revocă toate sesiunile", - "revokeAllUserSessionsDesc": "Forțează reconectarea pe toate dispozitivele", - "revoke": "Revocă", - "deleteUserWarning": "Ștergerea acestui utilizator este permanentă.", - "deleteUser": "Șterge {{username}}", - "deleting": "Se șterge...", - "deleteUserFailed": "Nu s-a putut șterge utilizatorul", - "deleteUserSuccess": "Utilizatorul „{{username}}” a fost șters", - "deleteRoleSuccess": "Rolul „{{name}}” a fost șters", - "revokeKeySuccess": "Cheia „{{name}}” a fost revocată", - "revokeKeyFailed": "Nu s-a putut revoca cheia", - "copiedToClipboard": "Copiat în clipboard", - "done": "Gata", - "createUserTitle": "Creează utilizator", - "createUserDesc": "Creați un nou cont local.", - "createUserUsername": "Nume utilizator", - "createUserPassword": "Parolă", - "createUserPasswordHint": "Minimum 6 caractere.", - "createUserEnterUsername": "Introduceți numele de utilizator", - "createUserSubmit": "Creează utilizator", - "editUserTitle": "Gestionează utilizatorul: {{username}}", - "editUserDesc": "Editați rolurile, statutul de administrator, sesiunile și setările contului.", - "editUserUsername": "Nume utilizator", - "editUserAuthType": "Tip autentificare", - "editUserAdminStatus": "Statut administrator", - "editUserUserId": "ID utilizator", - "linkAccountTitle": "Asociază conturi", - "linkAccountDesc": "Fusionați contul extern {{username}} cu un cont local existent.", - "linkAccountDescLocal": "Asociați un cont local {{username}} cu un cont existent doar extern.", - "linkAccountWarningTitle": "Acest lucru va:", - "linkAccountEffect1": "Șterge contul doar extern", - "linkAccountEffect2": "Adaugă autentificarea externă la contul țintă", - "linkAccountEffect3": "Permite autentificarea atât externă, cât și cu parolă", - "linkAccountTargetUsername": "Numele de utilizator al contului local", - "linkAccountTargetPlaceholder": "Introduceți numele de utilizator al contului local la care să fie legat", - "linkAccountExternalUsername": "Numele de utilizator al contului extern", - "linkAccountExternalPlaceholder": "Introduceți numele de utilizator al contului doar extern de fuzionat", - "linkAccountExternalNotFound": "Nu s-a găsit niciun cont doar extern cu acest nume de utilizator", - "linkAccounts": "Legare conturi", - "linkAccountSuccess": "Conturile au fost legate cu succes", - "linkAccountFailed": "Eșec la legarea conturilor", - "linkAccountInProgress": "Se leagă...", - "unlinkAccountTitle": "Dezlegare autentificare externă", - "unlinkAccountDesc": "Eliminați autentificarea externă de la {{username}}. Vor putea să se autentifice doar cu parola lor.", - "unlinkAccountWarning": "Aceasta va elimina autentificarea externă de la acest cont. Utilizatorul trebuie să aibă o parolă setată pentru a continua să se autentifice.", - "unlinkAccount": "Dezlegare autentificare externă", - "unlinkAccountInProgress": "Se dezleagă...", - "unlinkAccountSuccess": "Autentificarea externă a fost dezlegată", - "unlinkAccountFailed": "Eșec la dezlegarea autentificării externe", - "updateRegistrationFailed": "Eșec la actualizarea setării de înregistrare", - "updatePasswordLoginFailed": "Eșec la actualizarea setării de autentificare cu parolă", - "updateSecondFactorAfterExternalLoginFailed": "Eșec la actualizarea setării factorului secundar", - "updatePasswordResetFailed": "Eșec la actualizarea setării de resetare a parolei", - "sessionTimeoutRange2": "Timpul de expirare al sesiunii trebuie să fie între 1 și 720 de ore", - "sessionTimeoutSaved": "Timpul de expirare al sesiunii a fost salvat", - "sessionTimeoutSaveFailed": "Eșec la salvarea timpului de expirare al sesiunii", - "monitoringIntervalInvalid": "Valori de interval nevalide", - "monitoringSaved": "Setările de monitorizare au fost salvate", - "monitoringSaveFailed": "Eșec la salvarea setărilor de monitorizare", - "logLevelUpdateFailed": "Eșec la actualizarea nivelului de jurnal", - "createUserRequired": "Numele de utilizator și parola sunt obligatorii", - "createUserPasswordTooShort": "Parola trebuie să aibă cel puțin 6 caractere", - "createUserSuccess": "Utilizatorul „{{username}}” a fost creat", - "createUserFailed": "Eșec la crearea utilizatorului", - "updateAdminStatusFailed": "Eșec la actualizarea statutului de administrator", - "allSessionsRevoked": "Toate sesiunile au fost revocate", - "revokeSessionsFailed": "Eșec la revocarea sesiunilor", - "manageUserData": "Gestionarea datelor utilizatorului", - "backToUsers": "Înapoi la utilizatori", - "manageTabAccount": "Cont", - "manageTabHosts": "Gazde", - "manageTabCredentials": "Credențiale", - "manageTabSessions": "Sesiuni", - "manageTabDanger": "Pericol", - "manageEditorBack": "Înapoi la datele lui {{username}}", - "dataLockedBadge": "BLOCAT", - "dataLockedNotice": "Datele lui {{username}} rămân blocate până când se autentifică din nou. Gazdele, credențialele și fragmentele lor nu pot fi vizualizate sau editate până atunci.", - "resetPasswordTitle": "Resetare parolă", - "resetPasswordExternalOnly": "Acest utilizator se autentifică printr-un furnizor extern și nu are parolă.", - "resetPasswordPlaceholder": "Parola nouă", - "resetPasswordBtn": "Resetare", - "resetPasswordWorking": "Se resetează...", - "resetPasswordSuccess": "Parola a fost resetată", - "resetPasswordSuccessWiped": "Parola a fost resetată. Datele criptate ale utilizatorului au fost șterse.", - "resetPasswordFailed": "Eșec la resetarea parolei", - "resetPasswordConfirmWipe": "{{username}} nu s-a autentificat de la actualizarea de criptare, așa că datele lor nu pot fi recuperate. Resetarea acum va șterge gazdele, credențialele și fragmentele lor. Continuați?", - "manageApiKeys": "Chei API", - "apiKeyNamePlaceholder": "Numele cheii", - "apiKeyCopyNotice": "Copiați această cheie acum, nu va mai fi afișată.", - "noApiKeysForUser": "Nicio cheie API", - "apiKeyDeleteFailed": "Ștergerea cheii API a eșuat", - "exportUserData": "Export date", - "exportUserDataDesc": "Descărcați gazdele, acreditările și datele managerului de fișiere ale acestui utilizator ca JSON. Secretelor li se face decriptare.", - "exportUserDataSuccess": "Datele utilizatorului au fost exportate", - "exportUserDataFailed": "Exportul datelor utilizatorului a eșuat", "hostsCount_one": "{{count}} gazdă", "hostsCount_few": "{{count}} gazde", "hostsCount_other": "{{count}} gazde", - "addHostForUser": "Adaugă gazdă", - "noHostsForUser": "Acest utilizator nu are gazde", - "connectToHost": "Conectare", - "deleteHostConfirm": "Ștergeți gazda „{{name}}” care aparține lui {{username}}?", - "hostDeletedSuccess": "Gazda a fost ștearsă", - "hostDeleteFailed": "Ștergerea gazdei a eșuat", "credentialsCount_one": "{{count}} acreditare", "credentialsCount_few": "{{count}} acreditări", "credentialsCount_other": "{{count}} acreditări", - "addCredentialForUser": "Adaugă acreditare", - "noCredentialsForUser": "Acest utilizator nu are acreditări", - "deleteCredentialConfirm": "Ștergeți acreditarea „{{name}}” care aparține lui {{username}}?", - "credentialDeletedSuccess": "Acreditarea a fost ștearsă", - "credentialDeleteFailed": "Ștergerea acreditării a eșuat", - "noSessionsForUser": "Nicio sesiune activă", - "deleteSuccessorLabel": "Preia gazdele și acreditările către", - "deleteSuccessorMe": "Eu (administratorul care șterge)", - "deleteSuccessorNone": "Nimeni, șterge-le", - "deleteSuccessorDesc": "Tot ce a partajat acest utilizator va continua să funcționeze sub noul proprietar; alegerea nimănui va șterge gazdele, acreditările și partajările acestuia.", - "deleteUserDangerDesc": "Ștergeți definitiv pe {{username}} și toate datele acestuia (gazde, acreditări, fragmente, istoric). Această acțiune nu poate fi anulată.", - "deleteUserConfirm": "Ștergeți definitiv pe {{username}} și toate datele acestuia?", - "deleteUserAdminBlocked": "Eliminați statutul de administrator înainte de a șterge acest utilizator.", - "createRoleRequired": "Numele și numele afișat sunt obligatorii", - "createRoleSuccess": "Rolul „{{name}}” a fost creat", - "createRoleFailed": "Crearea rolului a eșuat", - "apiKeyNameRequired": "Numele cheii este obligatoriu", - "apiKeyUserRequired": "ID-ul utilizatorului este obligatoriu", - "apiKeyCreatedSuccess": "Cheia API „{{name}}” a fost creată", - "apiKeyCreateFailed": "Crearea cheii API a eșuat", - "exportSuccess": "Baza de date a fost exportată cu succes", - "exportFailed": "Exportul bazei de date a eșuat", - "importSelectFile": "Selectați mai întâi un fișier", - "importCompleted": "Importul s-a finalizat: {{total}} elemente importate, {{skipped}} ignorate", - "importFailed": "Importul a eșuat: {{error}}", - "importError": "Importul bazei de date a eșuat", - "sectionHostDefaults": "Setări implicite pentru gazde", "rolePermissions": { "count_one": "{{count}} permisiune", "count_few": "{{count}} permisiuni", - "count_other": "{{count}} permisiuni", - "editAction": "Editează permisiunile", - "loadError": "Încărcarea catalogului de permisiuni a eșuat", - "saved": "Permisiunile rolului au fost salvate", - "saveError": "Salvarea permisiunilor rolului a eșuat", - "save": "Salvează", - "saving": "Se salvează...", - "pluginDisabled": "Plugin dezactivat", "groups": { "hosts": "Gazde", "credentials": "Acreditări", "admin": "Administrare" } - }, - "notificationPrivateEndpoints": "Gazde private permise pentru notificări", - "notificationPrivateEndpointsDesc": "Gazdele private exacte pe care canalele de notificare le pot contacta. Separați-le prin virgule.", - "updateNotificationEndpointsFailed": "Actualizarea listei de permisiuni pentru punctele de acces la notificări a eșuat", - "secondFactorsSectionTitle": "Factori secundari", - "secondFactorsNone": "Niciun factor secundar înregistrat", - "secondFactorUnavailable": "Indisponibil", - "resetSecondFactors": "Resetează factorii secundari", - "resetSecondFactorsConfirm": "Eliminați toți factorii secundari pentru {{username}}? Acesta se poate autentifica cu parola sau SSO și se poate înregistra din nou.", - "secondFactorsResetSuccess": "Factorii secundari au fost resetați", - "secondFactorsResetFailed": "Resetarea factorilor secundari a eșuat", - "passwordLoginForced": "Autentificarea cu parolă este dezactivată, dar niciun alt metodă de autentificare nu este activată, așa că rămâne activată pentru moment. Nimeni nu va fi blocat.", - "sslNotRenewed": "Nimic nu reînnoiește acest certificat. Expiră pe {{date}}. Activează reînnoirea automată în secțiunea ACME Certificates sau încarcă unul nou înainte de această dată.", - "sslSelfSigned": "Certificat auto-semnat creat de Termix. Navigatoarele vor afișa avertismente.", - "sslRenewedBy": "Reînnoit automat de {{plugin}}", - "sslIssuer": "Emitent: {{issuer}}", - "sslNames": "Acoperă {{names}}", - "sslManualTitle": "Încarcă un certificat", - "updateExternalAutoProvisionFailed": "Actualizarea setării de creare automată a eșuat", - "hostTags": "Etichete predefinite pentru host-uri", - "hostTagsDesc": "Etichete pe care fiecare utilizator le vede ca sugestii în editorul de host-uri. Apasă Space sau Enter pentru a adăuga una. Ștergerea unei etichete aici nu o elimină de la host-uri.", - "hostTagsError": "Nu s-au putut încărca sau salva sugestiile de etichete pentru host-uri.", - "revokeAllSessionsConfirm": "Deconectezi {{username}} de peste tot?", - "revokeSessionConfirm": "Deconectezi această sesiune?", - "revokeSession": "Deconectare", - "deleteRoleConfirm": "Ștergi rolul {{name}}?", - "revokeKeyConfirm": "Revoci cheia API {{name}}?", - "revokeKey": "Revocare" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Unde", - "who": "Cine", - "hostLabel": "Host", - "hostPlaceholder": "192.168.1.1 sau example.com", - "portLabel": "Port", - "usernameLabel": "Nume utilizator", - "usernamePlaceholder": "nume_utilizator", - "authLabel": "Autentificare", - "passwordLabel": "Parolă", - "passwordPlaceholder": "parolă", - "privateKeyLabel": "Cheie privată", - "privateKeyPlaceholder": "Lipește cheia privată...", - "credentialLabel": "Credențial", - "credentialPlaceholder": "Selectează un credențial salvat", - "protocolLabel": "Protocol", - "domainLabel": "Domeniu", - "domainPlaceholder": "opțional", - "connectToAction": "Conectează-te la {{name}}", - "sshProtocol": "SSH", - "noTarget": "Nimic instalat nu se poate conecta la acest tip de host" + "usernameLabel": "Nume utilizator" }, "keybindings": { - "description": "Asociază tastele cu acțiuni în terminal și aplicație, sau modifică scurtăturile integrate.", - "defaultsHeading": "Scurtături integrate", - "fixedHeading": "Scurtături aplicație", - "fixed": { - "splitRight": "Împarte în dreapta", - "splitDown": "Împarte în jos", - "zoomPane": "Mărește panoul activ", - "navigatePane": "Mută-te între panouri", - "nextTab": "Tab-ul următor", - "previousTab": "Tab-ul anterior", - "jumpTab": "Sari la tab", - "previousView": "Înapoi la vederea anterioară din bara laterală", - "fullscreen": "Comută ecran complet" - }, - "customHeading": "Scurtături personalizate", - "addBinding": "Adaugă scurtătură", - "addBindingTitle": "Adaugă scurtătură", - "editBindingTitle": "Editează scurtătură", - "loading": "Se încarcă...", - "noCustomBindings": "Încă nu există scurtături personalizate", - "defaultBadge": "Implicit", - "customizedBadge": "Personalizat", - "customize": "Personalizează", - "resetToDefault": "Resetează la valorile implicite", - "resetAllToDefaults": "Resetează totul la valorile implicite", - "cancel": "Anulează", - "saveBinding": "Salvează scurtătura", - "saveError": "Salvarea scurtăturilor de tastatură a eșuat", - "pressKeysToRecord": "Combinație de taste", - "pressKeysPlaceholder": "Faceți clic și apăsați tastele", - "recording": "Apăsați tastele...", - "comboRequiredError": "Apăsați mai întâi o combinație de taste", - "conflictWarning": "Această combinație este deja asociată cu {{combo}}. Salvarea va activa ambele acțiuni.", - "actionLabel": "Acțiune", "actionNextTab": "Comută la fila următoare", "actionPreviousTab": "Comută la fila anterioară", "actionOpenCommandPalette": "Deschide căutarea rapidă", - "actionReconnectSession": "Reconectează sesiunea curentă", - "unavailableAction": "{{type}} (indisponibil)", - "actionRequiredError": "Alegeți mai întâi o acțiune", - "deleteConfirm": "Ștergeți această asociere de taste?", - "resetAllConfirm": "Resetați fiecare asociere de taste la valoarea implicită?" + "actionReconnectSession": "Reconectează sesiunea curentă" }, "userProfile": { - "storageModeLocal": "Browser", - "storageModeCloud": "Bază de date", - "storageModeDescription": "Browserul stochează setările doar în acest browser. Baza de date sincronizează cu serverul și se încarcă pe orice dispozitiv.", - "resetToDefaults": "Resetează la valorile implicite", - "resetToDefaultsSuccess": "Setările au fost resetate la valorile implicite.", - "storageModeSwitch": "Stocarea preferințelor", - "sectionAccount": "Cont", - "desktopProfileTitle": "Doar pe acest dispozitiv", - "desktopProfileDescription": "Acest profil există doar pe acest dispozitiv și se autentifică independent. Conectați-l la un server Termix pentru a utiliza aceleași gazde și setări pe fiecare dispozitiv.", - "sectionInterface": "Interfață", - "interfacePresetDesc": "Cât de multe detalii afișează Termix. Fiecare funcție rămâne disponibilă.", "preset_simple": "Simplă", "preset_simple_desc": "Doar esențialul.", "preset_balanced": "Echilibrată", "preset_balanced_desc": "Aspectul standard.", "preset_advanced": "Avansată", "preset_advanced_desc": "Totul activ, compact.", - "presetClearOverrides": "Resetează totul", - "presetOverridesTitle": "Personalizat", - "presetRevertArea": "Revino", - "presetConfirmTitle": "Comutați la {{preset}}?", - "presetConfirmDesc": "Aceasta resetează bara laterală, navigarea, aspectul panoului de control, bara de instrumente a terminalului și vizualizarea managerului de fișiere. Gazdele, acreditările și pagina de start nu sunt afectate.", - "presetConfirmApply": "Aplică presetarea", - "runSetupAgainDesc": "Parcurgeți din nou configurarea inițială.", - "runSetupAgainButton": "Rulează configurarea", "uiArea_chrome": "Interfața aplicației", "uiArea_hostList": "Lista de gazde", "uiArea_credentialList": "Lista de acreditări", @@ -1648,127 +1128,14 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Manager de fișiere", "uiArea_hostEditor": "Editor de gazde", - "sectionAppearance": "Aspect", - "sectionSecurity": "Securitate", - "sectionApiKeys": "Chei API", - "sectionData": "Date", - "usernameLabel": "Nume de utilizator", - "roleLabel": "Rol", - "roleAdministrator": "Administrator", - "authMethodLabel": "Metoda de autentificare", - "authMethodLocal": "Local", - "twoFaLabel": "2FA", - "twoFaOn": "Activat", - "twoFaOff": "Dezactivat", - "versionLabel": "Versiune", - "cliTitle": "Termix CLI", - "cliDescription": "Deschide terminale, execută comenzi și mută fișiere direct din shell-ul tău.", - "cliLearnMore": "Află mai multe", - "deleteAccount": "Șterge contul", - "deleteAccountDescription": "Șterge definitiv contul tău", - "deleteButton": "Șterge", - "deleteAccountPermanent": "Această acțiune este permanentă și nu poate fi anulată.", - "deleteAccountWarning": "Toate sesiunile, gazdele, acreditările și setările vor fi șterse definitiv.", - "confirmPasswordDeletePlaceholder": "Introdu parola pentru confirmare", "languageLabel": "Limba", "themeLabel": "Temă", "fontSizeLabel": "Dimensiune font", "interfaceFontLabel": "Font interfață", "interfaceFontDescription": "Modifică fontul interfeței aplicației. Profilele de terminal își păstrează propriile setări de font.", "accentColorLabel": "Culoare accent", - "keyboardShortcuts": "Scurtături tastatură", - "keyboardShortcutsDescription": "Personalizează scurtăturile pentru copiere, lipire și comenzi în terminal", - "manageShortcuts": "Gestionează", - "commandPalette": "Paletă de comenzi", - "commandPaletteDesc": "Activează scurtătura de tastatură", - "reopenTabsOnLogin": "Redeschide filele la autentificare", - "reopenTabsOnLoginDesc": "Restaurează filele deschise când te autentifici sau reîmprospătezi pagina, chiar și de pe un alt dispozitiv", - "confirmTabClose": "Confirmă închiderea filelor", - "confirmTabCloseDesc": "Cere confirmare înainte de a închide filele de terminal", - "showTabNumbers": "Afișează numerele filelor", - "showTabNumbersDesc": "Afișează un număr pe fiecare filă pentru a le distinge mai ușor", - "settingsAppRail": "Bara laterală aplicații", - "sidebarSettingsMoved": "Setările de afișare ale barei laterale a gazdelor s-au mutat în panoul Personalizare bară laterală, accesibil din bara de instrumente a Gazdelor.", - "showHostTags": "Afișează etichetele gazdelor", - "showHostTagsDesc": "Afișează etichetele în lista de gazde", - "statusColors": "Culori reale de stare", - "statusColorsDesc": "Folosește verde/roșu pentru starea online/offline în loc de culoarea accent", - "pinAppRail": "Fixează bara laterală aplicații", - "pinAppRailDesc": "Păstrează bara laterală din stânga mereu extinsă, în loc să se extindă doar la trecerea cu mouse-ul", - "expandAppRailOnHover": "Extinde bara laterală la trecerea cu mouse-ul", - "expandAppRailOnHoverDesc": "Permite extinderea barei laterale din stânga când cursorul trece peste ea", - "appRailHoverPushesContent": "Mută conținutul când se extinde", - "appRailHoverPushesContentDesc": "Fă loc pentru bara extinsă în loc să o deschizi peste pagină. Sesiunile deschise, precum desktopul remote, se redimensionează de fiecare dată", - "showPinAppRailButton": "Afișează butonul de fixare a barei laterale", - "showPinAppRailButtonDesc": "Afișează un buton în bara laterală pentru a o fixa deschisă. Dezactivat implicit.", - "settingsNavigation": "Navigare", - "navigationTabsDesc": "Alege care file apar în bara laterală a aplicațiilor", - "settingsUpdates": "Actualizări", - "disableUpdateChecks": "Dezactivează verificarea actualizărilor", - "disableUpdateChecksDesc": "Oprește verificarea actualizărilor", - "changePassword": "Schimbă parola", - "currentPasswordLabel": "Parola curentă", - "currentPasswordPlaceholder": "Parola curentă", - "newPasswordLabel": "Parola nouă", - "newPasswordPlaceholder": "Parola nouă", - "confirmPasswordLabel": "Confirmă parola nouă", - "confirmPasswordPlaceholder": "Confirmă parola nouă", - "updatePassword": "Actualizează parola", - "createApiKeyTitle": "Creează cheie API", - "createApiKeyDescription": "Generează o nouă cheie API pentru acces programatic.", - "apiKeyNameLabel": "Nume", - "apiKeyNamePlaceholder": "ex. Pipeline CI", - "expiryDateLabel": "Data expirării", - "optional": "opțional", - "cancel": "Anulează", - "createKey": "Creează cheie", - "apiKeyCreatedWarning": "Cheia a fost creată – copiaz-o acum, nu va mai fi afișată.", - "copyApiKey": "Copiază cheia API", - "copiedToClipboard": "Copiat în clipboard", "apiKeyCount_one": "{{count}} cheie", "apiKeyCount_few": "{{count}} chei", - "apiKeyCount_other": "{{count}} chei", - "newKey": "Cheie nouă", - "noApiKeys": "Încă nu există chei API.", - "apiKeyActive": "Activă", - "apiKeyUsageHint": "Include cheia în antetul", - "apiKeyUsageHintHeader": "header.", - "apiKeyPermissionsHint": "Cheile moștenesc permisiunile utilizatorului care le-a creat.", - "exportData": "Exportă datele mele", - "exportDataDesc": "Descarcă o copie de siguranță cu gazdele, acreditările și setările pentru a le transfera pe un alt dispozitiv", - "export": "Exportă", - "exporting": "Se exportă...", - "importData": "Importă datele mele", - "importDataDesc": "Restaurează gazdele, acreditările și setările dintr-un fișier de backup .sqlite", - "importDataSelected": "Selectat: {{name}}", - "selectFile": "Selectează fișierul", - "changeFile": "Schimbă", - "import": "Importă", - "importing": "Se importă...", - "exportSuccess": "Datele au fost exportate cu succes", - "exportFailed": "Exportarea datelor a eșuat", - "importSelectFile": "Selectează mai întâi un fișier", - "importCompleted": "Import finalizat: {{total}} elemente importate, {{skipped}} ignorate", - "importFailed": "Importul a eșuat: {{error}}", - "roleUser": "Utilizator", - "authMethodDual": "Autentificare duală", - "authMethodExternal": "Externă", - "done": "Gata", - "apiKeyNameRequired": "Numele cheii este obligatoriu", - "apiKeyCreated": "Cheia API „{{name}}” a fost creată", - "apiKeyCreateFailed": "Crearea cheii API a eșuat", - "apiKeyUser": "Utilizator", - "apiKeyExpires": "Expiră", - "apiKeyRevoked": "Cheia API „{{name}}” a fost revocată", - "apiKeyRevokeFailed": "Revocarea cheii API a eșuat", - "passwordFieldsRequired": "Parola curentă și cea nouă sunt obligatorii", - "passwordMismatch": "Parolele nu coincid", - "passwordTooShort": "Parola trebuie să aibă cel puțin 6 caractere", - "passwordUpdated": "Parola a fost actualizată cu succes", - "passwordUpdateFailed": "Actualizarea parolei a eșuat", - "deletePasswordRequired": "Parola este necesară pentru a-ți șterge contul", - "deleteFailed": "Ștergerea contului a eșuat", - "deleting": "Se șterge...", "colorPickerTooltip": "Deschide selectorul de culori", "themeSystem": "Sistem", "themeLight": "Luminos", @@ -1779,18 +1146,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Autentificat la {{server}}", - "linkedProfileDescription": "Acest dispozitiv folosește contul tău de pe server și păstrează o copie a datelor tale, astfel încât funcționează și offline.", - "manageSync": "Gestionează sincronizarea", - "setUpSync": "Conectează la un server", - "settingsTabsAndShortcuts": "File și scurtături", - "onBetaTitle": "Ești pe o versiune beta", - "onBetaDescription": "Mulțumim pentru testare. Spune-ne ce nu funcționează.", - "tryBetaTitle": "Testează funcțiile noi în avans", - "tryBetaDescription": "Alătură-te programului beta în Actualizări.", - "sendBetaFeedback": "Trimite feedback pentru beta", - "openUpdates": "Actualizări" + "themeGruvbox": "Gruvbox" } } }, @@ -2055,8 +1411,7 @@ "hasDependents": "{{name}} este necesar pentru {{list}}. Dezactivează-le sau dezinstalează-le mai întâi.", "missingDependencies": "{{name}} are nevoie de {{list}}, care nu este instalat.", "consentChanged": "Ceea ce solicită acest plugin s-a schimbat de când l-ai verificat. Verifică din nou lista.", - "upload": "Nu s-a putut citi {{name}}: {{error}}", - "developerMode": "Nu s-a putut modifica modul dezvoltator: {{error}}" + "upload": "Nu s-a putut citi {{name}}: {{error}}" }, "data": { "title": "Date stocate", @@ -2188,13 +1543,7 @@ "browsePlugins": "Răsfoiește plugin-urile", "loading": "Se încarcă", "developer": { - "title": "Modul dezvoltator plugin-uri", - "hint": "Permite administratorilor să instaleze plugin-uri dintr-un fișier .tmxplug în fila Plugin-uri, fără verificările registrului. Folosește-l pentru a construi și testa propriile plugin-uri.", - "enableTitle": "Activezi modul dezvoltator?", - "enableBody": "Administratorii vor putea instala plugin-uri din fișiere care nu au fost verificate de Termix. Un plugin poate face orice îi permit capabilitățile sale, așa că activează această opțiune doar când construiești sau testezi plugin-uri.", - "enable": "Activează", - "installFromFile": "Instalează din fișier", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS este setat, așa că instalarea din fișier rămâne blocată." + "installFromFile": "Instalează din fișier" }, "count": { "downloads_one": "{{formatted}} descărcare", @@ -2233,71 +1582,7 @@ "secretSet": "Setat", "secretNotSet": "Nesetat", "secretReplace": "Înlocuiește", - "pluginSettingsSaved": "Setări salvate", - "pluginSettingsInvalid": "Unele setări nu au putut fi salvate. Verifică câmpurile evidențiate.", - "pluginSettingsSaveFailed": "Salvarea setărilor a eșuat", - "pluginSettingsLoadFailed": "Încărcarea setărilor a eșuat", - "featureUnavailable": "{{name}} nu este disponibil în acest moment. Aceste setări sunt salvate, dar nu vor avea efect.", - "account": "Cont", - "security": "Securitate", - "apiKeys": "Chei API", - "data": "Date și sincronizare", - "interface": "Interfață", - "appearance": "Aspect", - "keybindings": "Scurtături de tastatură", - "adminGeneral": "General", - "adminUsers": "Utilizatori", - "adminSessions": "Sesiuni", - "adminRoles": "Roluri", - "adminHostDefaults": "Setări implicite pentru host", - "adminBranding": "Branding", - "adminDatabase": "Bază de date", - "adminSsl": "SSL", - "adminApiKeys": "Chei API", - "adminAuditLog": "Jurnal de audit", - "bandYou": "Contul tău", - "bandApp": "Această aplicație", - "bandPlugins": "Plugin-uri", - "bandInstance": "Acest server", - "searchPlaceholder": "Caută în setări", - "noResults": "Nicio setare nu corespunde.", - "pages": "Pagini", - "instanceSettings": "Setări server", - "nothingHere": "Nu este nimic de configurat aici.", - "searchPage": "Caută în această pagină", - "noPageMatches": "Nimic de pe această pagină nu se potrivește.", - "updates": { - "title": "Actualizări", - "betaProgram": "Program beta", - "betaIntro": "Versiunile beta sunt construcții timpurii ale următoarei versiuni Termix. Acestea apar marți și vineri când există ceva nou de încercat. Pot avea erori, iar feedback-ul tău este ceea ce face ca versiunea stabilă să fie mai bună.", - "termixBetas": "Versiuni beta Termix", - "termixBetasHint": "Anunță-mă despre noile versiuni beta, nu doar despre cele stabile.", - "runningBetaBuild": "Rulezi o versiune beta. Pentru a ieși, comută înapoi la o imagine sau un instalator stabil.", - "howToInstall": "Cum să obții versiunea beta", - "desktopInstall": "Descarcă instalatorul beta și instalează-l peste cel actual.", - "downloadBeta": "Descarcă {{version}}", - "dockerInstall": "Schimbă imaginea în tag-ul beta și restartează containerul:", - "copy": "Copiază", - "copied": "Copiat", - "copyFailed": "Nu s-a putut copia", - "learnMore": "Află mai multe despre versiunile beta", - "feedback": "Feedback", - "feedbackHint": "Ai găsit o eroare sau ai o idee? Aceasta va ajunge direct la dezvoltatori cu versiunea ta completată.", - "sendFeedback": "Trimite feedback pentru versiunea beta", - "releases": "Versiuni", - "thisVersion": "Această versiune", - "newestStable": "Cea mai nouă versiune stabilă", - "newestBeta": "Cea mai nouă versiune beta", - "noRelease": "Niciuna momentan", - "pluginBetas": "Versiuni beta pentru plugin-uri", - "pluginBetasIntro": "Fiecare plugin poate folosi versiuni beta independent. Pentru a încerca unul, deschide-l și apasă Încearcă versiunea beta.", - "openPlugins": "Deschide Plugin-urile", - "waitingForStable": "Înapoi la versiunea stabilă. Rămâne pe {{version}} până când o versiune stabilă este mai nouă.", - "backToStable": "Înapoi la versiunea stabilă", - "allPluginsBeta": "Folosește versiuni beta pentru toate plugin-urile", - "allPluginsStable": "Toate plugin-urile înapoi la versiunea stabilă", - "saveFailed": "Nu s-a putut salva modificarea" - } + "featureUnavailable": "{{name}} nu este disponibil în acest moment. Aceste setări sunt salvate, dar nu vor avea efect." }, "managerCard": { "refresh": "Reîmprospătează", @@ -2307,86 +1592,16 @@ "filter": "Filtrează..." }, "sync": { - "server": "Server Termix", - "account": "Cont", - "status": "Stare", - "never": "niciodată", - "justNow": "acum", "minutesAgo_one": "{{count}} minut în urmă", "minutesAgo_few": "{{count}} minute în urmă", "minutesAgo_other": "{{count}} minute în urmă", "hoursAgo_one": "{{count}} oră în urmă", "hoursAgo_few": "{{count}} ore în urmă", "hoursAgo_other": "{{count}} ore în urmă", - "actionFailed": "Nu a funcționat. Încearcă din nou.", - "unlinkedTitle": "Doar pe acest dispozitiv", - "unlinkedBody": "Termix funcționează independent pe acest dispozitiv. Conectează-l la serverul tău Termix pentru a menține totul sincronizat.", - "unlinkedPointHosts": "Gazdele, credențialele, fragmentele și setările tale te urmează pe fiecare dispozitiv.", - "unlinkedPointOffline": "Totul funcționează și când serverul nu poate fi atins, și se sincronizează ulterior.", - "unlinkedPointAccount": "Te autentifici cu contul tău de server, iar gazdele pe care alți oameni le-au partajat cu tine apar și aici.", - "linkButton": "Conectează la un server", - "state": { - "syncing": "Sincronizare", - "offline": "Serverul nu poate fi atins", - "error": "Sincronizarea a fost oprită", - "signedOut": "Deconectat", - "synced": "Sincronizat {{time}}" - }, "pending_one": "{{count}} modificare în așteptarea sincronizării", "pending_few": "{{count}} modificări în așteptarea sincronizării", "pending_other": "{{count}} modificări în așteptarea sincronizării", - "signInAgain": "Autentifică-te din nou", - "syncNow": "Sincronizează acum", - "unlink": "Deconectează", - "unlinked": "Acest dispozitiv nu mai este conectat", - "unlinkTitle": "Dezlegarea acestui dispozitiv?", - "unlinkDescription": "Sincronizarea se oprește și se deconectează de pe server. Gazdele partajate cu dvs. de alții sunt eliminate de pe acest dispozitiv în orice caz.", - "unlinkKeepTitle": "Păstrează datele mele aici", - "unlinkKeepBody": "Gazdele, acreditările și setările dvs. rămân pe acest dispozitiv și continuă să funcționeze independent.", - "unlinkRemoveTitle": "Elimină datele sincronizate", - "unlinkRemoveBody": "Tot ce a provenit de pe server este eliminat de pe acest dispozitiv. Rămân doar gazdele păstrate local pe acest dispozitiv.", - "conflictsTitle": "Conflicte", - "conflictsDescription": "Acestea au fost modificate aici și pe server în același timp. Versiunea de pe server este cea utilizată. Păstrați-vă versiunea pentru a o trimite pe server în schimb.", - "keepMine": "Păstrează a mea", - "keepServer": "Păstrează cea de pe server", - "errorsTitle": "Nu sunt sincronizate", - "errorsDescription": "Serverul nu a acceptat aceste modificări. Ele rămân pe acest dispozitiv.", - "errorPermission": "Contul dvs. de pe server nu are permisiunea de a face această modificare.", - "retry": "Încearcă din nou", - "whatSyncs": "Ce se sincronizează", - "whatSyncsDescription": "Dezactivați orice doriți să păstrați doar pe acest dispozitiv.", - "coreGroup": "Termix", - "notOnServer": "Serverul nu are acest lucru", - "notOnDevice": "Încă nu pe acest dispozitiv", - "localOnlyHint": "Puteți păstra, de asemenea, gazde sau foldere individuale pe acest dispozitiv din setările lor.", - "originTitle": "De unde încep conexiunile", - "originDescription": "Conectați-vă la gazde de pe acest dispozitiv sau prin intermediul serverului. Puteți modifica acest lucru pentru fiecare gazdă.", - "originLocal": "Acest dispozitiv", - "originRemote": "Serverul", - "entities": { - "hosts": "Gazde", - "sshCredentials": "Acreditări", - "sshFolders": "Foldere", - "userPreferences": "Preferințe", - "pluginUserSettings": "Setări plugin", - "sharedHosts": "Gazde partajate cu dvs.", - "sharedCredentials": "Acreditări partajate cu dvs.", - "vaultProfiles": "Profiluri Vault", - "snippetFolders": "Foldere de snippet-uri", - "snippets": "Snippet-uri", - "dashboardServiceLinks": "Legături la servicii", - "homepageItems": "Elemente pagină principală", - "networkTopology": "Hartă de rețea", - "workspaces": "Spații de lucru", - "hostDefaults": "Setări implicite gazdă", - "hostDefaultsAdmin": "Setări implicite gazdă server", - "aiProviders": "Furnizori AI", - "homepageLayouts": "Aspecte pagină principală", - "accountProfile": "Profil cont" - }, "proxy": { - "title": "Proxy invers", - "description": "Necesar doar când ceva precum Cloudflare Access sau o pagină de autentificare se află în fața serverului dvs.", "headersTitle": "Antete suplimentare", "headersHint": "Trimise cu fiecare cerere către server, de exemplu un token de serviciu Cloudflare Access.", "headerName": "Nume antet", @@ -2399,8 +1614,7 @@ "username": "Nume utilizator", "password": "Parolă", "allowInvalidCertificate": "Încredere într-un certificat auto-semnat", - "allowInvalidCertificateHint": "Doar pentru serverul dvs. propriu, când certificatul său nu provine de la o autoritate cunoscută.", - "saved": "Salvat" + "allowInvalidCertificateHint": "Doar pentru serverul dvs. propriu, când certificatul său nu provine de la o autoritate cunoscută." }, "problems": { "invalidUrl": "Acesta nu pare a fi o adresă web.", @@ -2440,6 +1654,27 @@ "linking": "Se conectează și se rulează prima sincronizare...", "linked": "Conectat. Datele dvs. se sincronizează acum.", "signedInAgain": "Autentificat. Sincronizarea rulează din nou." + }, + "entities": { + "hosts": "Gazde", + "sshCredentials": "Acreditări", + "sshFolders": "Foldere", + "userPreferences": "Preferințe", + "pluginUserSettings": "Setări plugin", + "sharedHosts": "Gazde partajate cu dvs.", + "sharedCredentials": "Acreditări partajate cu dvs.", + "vaultProfiles": "Profiluri Vault", + "snippetFolders": "Foldere de snippet-uri", + "snippets": "Snippet-uri", + "dashboardServiceLinks": "Legături la servicii", + "homepageItems": "Elemente pagină principală", + "networkTopology": "Hartă de rețea", + "workspaces": "Spații de lucru", + "hostDefaults": "Setări implicite gazdă", + "hostDefaultsAdmin": "Setări implicite gazdă server", + "aiProviders": "Furnizori AI", + "homepageLayouts": "Aspecte pagină principală", + "accountProfile": "Profil cont" } }, "hostDefaults": { @@ -2456,34 +1691,15 @@ "resetTitle": "Această gazdă își setează propria valoare. Faceți clic pentru a folosi din nou valoarea implicită din {{source}}", "clearTitle": "Setat la acest nivel. Faceți clic pentru a-l șterge și a folosi {{source}} în schimb", "inheritedTitle": "Urmărește valoarea implicită din {{source}}", - "titleAdmin": "Setări implicite pentru gazdele serverului", - "titleUser": "Setările mele implicite pentru gazde", - "titleFolder": "Setări implicite pentru dosar: {{name}}", - "descriptionAdmin": "Setări implicite pentru fiecare gazdă de pe acest server. Setările proprii ale unui utilizator, setările unui dosar sau gazda însăși pot seta încă o valoare diferită. Modificați un câmp pentru a-l seta aici sau ștergeți-l pentru a-l lăsa nesetat.", - "descriptionUser": "Setări implicite pentru toate gazdele dvs., peste cele ale serverului. Un dosar sau gazda însăși pot seta încă o valoare diferită. Modificați un câmp pentru a-l seta aici sau ștergeți-l pentru a-l lăsa nesetat.", - "descriptionFolder": "Setări implicite pentru gazdele din acest dosar și subdosarele sale, peste cele proprii. O gazdă poate seta încă o valoare diferită. Modificați un câmp pentru a-l seta aici sau ștergeți-l pentru a-l lăsa nesetat.", - "save": "Salvează setările implicite", "saved_one": "Setările implicite au fost salvate. {{count}} gazdă a fost actualizată.", "saved_few": "Setările implicite au fost salvate. {{count}} gazde au fost actualizate.", "saved_other": "Setările implicite au fost salvate. {{count}} gazde au fost actualizate.", - "savedInBackground": "Setările implicite au fost salvate. Gazdele se actualizează în fundal.", "appliedToHosts_one": "{{count}} gazdă a fost actualizată cu noile setări implicite.", "appliedToHosts_few": "{{count}} gazde au fost actualizate cu noile setări implicite.", "appliedToHosts_other": "{{count}} gazde au fost actualizate cu noile setări implicite.", - "saveFailed": "Nu s-au putut salva setările implicite", - "loadFailed": "Nu s-au putut încărca setările implicite", - "confirmTitle": "Salvare setări implicite?", "confirmChanges_one": "{{count}} gazdă urmează aceste setări implicite și se va modifica.", "confirmChanges_few": "{{count}} gazde urmează aceste setări implicite și se vor modifica.", "confirmChanges_other": "{{count}} gazde urmează aceste setări implicite și se vor modifica.", - "confirmNoChanges": "Nicio modificare pentru gazdele existente. Gazdele noi vor începe cu aceste setări implicite.", - "menuMyDefaults": "Setările mele implicite pentru gazde", - "folderDefaultsAction": "Setări implicite pentru dosar", - "adminSectionDescription": "Setați valorile implicite pe care le urmează fiecare gazdă de pe acest server, pentru fiecare setare pe care o are o gazdă, inclusiv pentru fiecare plugin. Utilizatorii și dosarele își pot seta propriile valori peste acestea, iar orice gazdă își poate folosi propria valoare.", - "editServerDefaults": "Editare setări implicite ale serverului", - "resetMenu": "Resetare", - "resetAll": "Totul la valorile implicite", - "resetCore": "Conexiunea și SSH la valorile implicite", "resetDone_one": "{{count}} gazdă urmează acum valorile implicite.", "resetDone_few": "{{count}} gazde urmează acum valorile implicite.", "resetDone_other": "{{count}} gazde urmează acum valorile implicite." @@ -2498,50 +1714,16 @@ "fields": { "secretSaved": "Salvat. Tastează pentru a-l înlocui." }, - "sharing": { - "revokeConfirm": "Elimin accesul pentru {{name}}?", - "revoke": "Elimină accesul" - }, "manage": { - "searchSettings": "Caută în setări", - "noMatchingSettings": "Nicio setare nu corespunde.", - "sections": "Secțiuni", - "sectionNeedsAttention": "Aici ceva necesită atenție", "needsAttention_one": "Un element necesită atenție.", "needsAttention_few": "{{count}} elemente necesită atenție.", "needsAttention_other": "{{count}} elemente necesită atenție.", - "bandHost": "Gazdă", - "bandFeatures": "Protocoale și pluginuri", - "bandCredential": "Credențial", - "sshConnection": "Conexiune SSH", - "errorAddressRequired": "Este necesară o adresă.", - "errorPortRange": "Folosește un port între 1 și 65535.", - "defaults": "Valorile implicite", - "searchHosts": "Caută gazde", - "searchCredentials": "Caută credențiale", - "searchDefaults": "Caută valori implicite", - "addCredential": "Adaugă credențial", - "nothingMatches": "Nimic nu corespunde", - "nothingYet": "Încă nimic aici", - "emptyHostsHint": "Adaugă o gazdă și aceasta va apărea aici, în folderul pe care i-l asignezi.", - "emptyCredentialsHint": "Credențialele salvate pot fi reutilizate de orice gazdă.", - "collapse": "Restrânge", - "expand": "Extinde", - "cannotBeUndone": "Aceasta nu poate fi anulată.", - "hostNotFound": "Nu am putut găsi acea gazdă. Încearcă să reîmprospătezi lista.", "hostCount_one": "{{count}} gazdă", "hostCount_few": "{{count}} gazde", "hostCount_other": "{{count}} gazde", "credentialCount_one": "{{count}} credențial", "credentialCount_few": "{{count}} credențiale", - "credentialCount_other": "{{count}} credențiale", - "newHost": "Gazdă nouă", - "newCredential": "Credențial nou", - "advanced": "Avansat", - "pickHost": "Alege o gazdă de editat", - "pickCredential": "Alege un credențial de editat", - "pickDefaults": "Alege un nivel de valori implicite de editat", - "pickHint": "Tot ce ține de o conexiune se află aici, grupat pentru a fi ușor de găsit." + "credentialCount_other": "{{count}} credențiale" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/ru_RU.json b/src/ui/locales/translated/ru_RU.json index ac8c8cf8e..d3d026224 100644 --- a/src/ui/locales/translated/ru_RU.json +++ b/src/ui/locales/translated/ru_RU.json @@ -141,7 +141,6 @@ "continue": "Продолжить", "error": "Ошибка", "unsavedChanges": "Несохранённые изменения", - "more": "Ещё", "loading": "Загрузка...", "host": "Хост", "selectHost": "Выберите хост...", @@ -154,7 +153,6 @@ "cancel": "Отмена", "username": "Имя пользователя", "login": "Вход", - "logout": "Выход", "register": "Регистрация", "password": "Пароль", "confirmPassword": "Подтвердите пароль", @@ -165,8 +163,6 @@ "rename": "Переименовать", "edit": "Изменить", "confirm": "Подтвердить", - "next": "Далее", - "previous": "Назад", "refresh": "Обновить", "language": "Язык", "backendReconnected": "Соединение с сервером восстановлено", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Подробнее о каждом" }, "desktopUpdates": { - "title": "Десктопное приложение", - "mode": "Обновления", - "modeHint": "Как приложение получает новые версии.", - "manualModeHint": "Эта копия не может обновляться автоматически, поэтому Termix только уведомляет вас о выходе новой версии.", "modeAutomatic": "Автоматически", "modePrompt": "Спрашивать", "modeNever": "Никогда", @@ -247,15 +239,6 @@ "onboardingTitle": "Обновления приложения", "onboardingBody": "Десктопное приложение теперь может обновляться самостоятельно. Выберите, как вы хотите получать новые версии. Это можно изменить позже в Настройках, раздел Обновления.", "onboardingManual": "Эта копия приложения была установлена таким образом, что не может обновляться автоматически, поэтому Termix будет уведомлять вас о выходе новой версии со ссылкой для скачивания.", - "status": "Версия {{version}}", - "statusIdle": "Ещё не проверено", - "statusChecking": "Проверка обновлений", - "statusAvailable": "Доступна версия {{version}}", - "statusDownloading": "Скачивание {{version}} ({{progress}}%)", - "statusReady": "Версия {{version}} готова. Перезапустите приложение для установки.", - "statusUpToDate": "У вас установлена последняя версия", - "statusError": "Не удалось проверить наличие обновлений. Попробуйте позже.", - "checkNow": "Проверить сейчас", "download": "Скачать", "restart": "Перезапустить сейчас", "later": "Позже", @@ -269,26 +252,11 @@ "terminal": "Терминал", "close": "Закрыть", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Копировать пароль", - "copySudoPassword": "Копировать пароль sudo", - "passwordCopied": "Пароль скопирован в буфер обмена", - "failedToCopyPassword": "Не удалось скопировать пароль", - "refreshTab": "Обновить соединение", - "renameTab": "Переименовать вкладку", "dashboard": "Панель управления", "quickConnect": "Быстрое подключение", - "openAsTabHint": "Ctrl+клик или клик средней кнопкой мыши для открытия на вкладке", - "openAsTab": "Открыть на вкладке", - "openInRightDock": "Открыть в правой панели", - "closeRightDock": "Закрыть правую панель", - "toggleRightDock": "Переключить правую панель", "hosts": "Хосты", "credentials": "Учётные данные", "connections": "Подключения", - "keepSideMenuOpen": "Держать меню открытым", - "collapseSideMenu": "Свернуть меню", - "roleAdministrator": "Администратор", - "roleUser": "Пользователь", "sync": "Синхронизация", "reconnectDisconnectedTerminals": "Переподключить все отключённые терминалы", "reconnectingTerminals_one": "Переподключение {{count}} терминала", @@ -302,32 +270,13 @@ "reconnectTerminalsFailed_other": "Не удалось начать переподключение {{count}} терминалов", "fullscreenUnsupported": "Полноэкранный режим не поддерживается этим браузером", "fullscreenFailed": "Не удалось переключить полноэкранный режим", - "resetSidebarWidth": "Сбросить ширину", - "collapseSidebar": "Свернуть боковую панель", - "openSidebar": "Открыть боковую панель", "confirmCloseHost": "Закрыть {{host}}?", - "enterFullscreen": "Войти в полноэкранный режим (Ctrl+Shift+F)", - "exitFullscreen": "Выйти из полноэкранного режима (Ctrl+Shift+F)", - "group": { - "objects": "Мои", - "tools": "Инструменты", - "system": "Система" - }, - "searchEverything": "Поиск хостов, вкладок и действий", - "search": "Поиск", "hiddenCount_one": "{{count}} скрыт", "hiddenCount_few": "{{count}} скрыты", "hiddenCount_many": "{{count}} скрыто", "hiddenCount_other": "{{count}} скрыто", - "showInRail": "Показать в боковой панели", - "moveUp": "Переместить вверх", - "moveDown": "Переместить вниз", - "resetRailOrder": "Сбросить порядок", - "hideFromRail": "Скрыть из боковой панели", - "openSettings": "Открыть настройки", "settings": "Настройки", "manage": "Управление", - "mobileNavigation": "Навигация", "plugins": "Плагины" }, "hosts": { @@ -943,35 +892,14 @@ "importSummary": "Импорт завершен: {{imported}} импортировано, {{updated}} обновлено, {{failed}} не удалось", "importHostsFailed": "Не удалось импортировать хосты" }, - "commandPalette": { - "searchPlaceholder": "Поиск хостов, команд или настроек...", - "quickActions": "Быстрые действия", - "navigation": "Навигация", - "orShortcut": "или", - "addNewHost": "Добавить хост", - "adminSettings": "Настройки администратора", - "addCredential": "Добавить учётные данные", - "recentActivity": "Недавняя активность", - "serversAndHosts": "Серверы и хосты", - "noHostsFound": "Не найдено хостов, соответствующих запросу «{{search}}»", - "links": "Ссылки", - "navigate": "Навигация", - "select": "Выбрать", - "pluginActions": "Другие действия", - "noTargetTab": "Вкладки терминала не открыты", - "documentation": "Документация" - }, "splitScreen": { "title": "Разделённый экран", "defaultLabel": "Разделение {{number}}", "splitRight": "Разделить вправо", "splitDown": "Разделить вниз", - "addToSplit": "Добавить в {{split}}", "paneEmptyItem": "Панель {{index}}: пусто", "paneItem": "Панель {{index}}: {{label}}", "paneNumber": "Панель {{index}}", - "newPaneRight": "Новая панель справа", - "newPaneBelow": "Новая панель снизу", "emptyTitle": "Пустая панель", "emptyHint": "Выберите, что отобразить здесь. Пока эта панель выбрана, всё, что вы открываете из боковой панели, также откроется здесь.", "openTabs": "Открытые вкладки", @@ -988,7 +916,6 @@ "clearPane": "Очистить эту панель", "zoom": "Развернуть панель", "unzoom": "Восстановить раскладку", - "unsplit": "Убрать разделение", "layouts": "Раскладки", "applyLayout": "Изменить раскладку", "maxPanes_one": "Разделение может содержать до {{count}} панели", @@ -999,8 +926,6 @@ "dropHere": "Перетащите, чтобы показать здесь", "paneActions": "Действия с панелью", "dividerHint": "Перетащите для изменения размера. Дважды щёлкните, чтобы выровнять.", - "openInSplit": "Открыть в разделённом экране", - "openInNewSplit": "Новое разделение с текущей вкладкой", "shortcuts": "Горячие клавиши", "shortcutNavigate": "Перемещение между панелями", "presets": { @@ -1014,23 +939,6 @@ "grid6": "Сетка 2×3" } }, - "connections": { - "noConnections": "Нет подключений", - "noConnectionsDesc": "Откройте терминал, файловый менеджер или удалённый рабочий стол, чтобы увидеть подключения здесь", - "connectedFor": "Подключено {{duration}}", - "connected": "Подключено", - "disconnected": "Отключено", - "reconnect": "Переподключиться", - "sectionOpen": "Открытые", - "sectionBackground": "Фоновые", - "backgroundDesc": "Сессии сохраняются в течение {{minutes}} минут после отключения и могут быть восстановлены.", - "expiresIn": "Истекает через {{duration}}", - "search": "Поиск подключений...", - "noSearchResults": "Подключения не найдены", - "rename": "Переименовать сессию", - "forgetConfirm": "Завершить фоновую сессию для {{name}}?", - "forget": "Завершить сессию" - }, "sshAuth": { "totpRequired": "Требуется двухфакторная аутентификация", "totpCodeLabel": "Код подтверждения", @@ -1168,65 +1076,14 @@ "placeholders": { "keyPassword": "пароль ключа", "pastePrivateKey": "Вставьте ваш закрытый ключ здесь...", - "enterPassword": "Введите ваш пароль", - "apiKeyName": "например, CI Pipeline", - "credentialName": "например, Production SSH Key", - "optionalDetails": "Дополнительные сведения...", - "sshUsername": "например, root или deploy", - "hostAddress": "10.0.0.1 или example.com", - "hostName": "например, Web Server Production" + "enterPassword": "Введите ваш пароль" }, "dashboard": { - "title": "Панель управления", - "github": "GitHub", - "reportBug": "Сообщить об ошибке", - "discord": "Discord", - "docs": "Документация", - "donate": "Пожертвовать", - "serverOverview": "Обзор сервера", - "version": "Версия", "updateAvailable": "Доступно обновление", - "beta": "Бета", - "uptime": "Время работы", - "database": "База данных", - "healthy": "Работает", - "error": "Ошибка", - "totalHosts": "Всего хостов", - "totalCredentials": "Всего учетных данных", - "recentActivity": "Последняя активность", - "reset": "Сбросить", - "noRecentActivity": "Нет недавней активности", - "quickActions": "Быстрые действия", - "addHost": "Добавить хост", - "addCredential": "Добавить учетные данные", - "adminSettings": "Настройки администратора", - "userProfile": "Профиль пользователя", - "serverStats": "Статистика сервера", - "customizeLayout": "Настроить панель управления", - "justNow": "только что" + "beta": "Бета" }, "dashboardTab": { "stable": "СТАБИЛЬНАЯ", - "registerNewServer": "Зарегистрировать новый сервер", - "storeSshKeysOrPasswords": "Хранить SSH-ключи или пароли", - "manageUsersAndRoles": "Управлять пользователями и ролями", - "manageYourAccount": "Управлять своей учетной записью", - "hostStatus": "Статус хоста", - "noHostsConfigured": "Хосты не настроены", - "checking": "ПРОВЕРКА", - "commandPalette": "Палитра команд", - "done": "Готово", - "clear": "Очистить", - "dragToResizeColumns": "Перетащите, чтобы изменить ширину столбцов", - "hostsAvailable": "Доступные хосты", - "removeSection": "Удалить раздел", - "addSection": "Добавить раздел", - "allSectionsShown": "Все разделы уже отображаются на панели.", - "fromPlugins": "Из плагинов", - "dropHere": "Перетащите раздел сюда", - "dragToReorder": "Перетащите разделы, чтобы изменить их порядок", - "clearActivityConfirm": "Очистить недавнюю активность?", - "resetConfirm": "Сбросить панель к стандартному виду?", "onlineCount_one": "{{count}} онлайн", "onlineCount_few": "{{count}} онлайн", "onlineCount_many": "{{count}} онлайн", @@ -1237,432 +1094,55 @@ "hostCount_other": "{{count}} хостов" }, "admin": { - "sectionGeneral": "Общие", - "sectionUsers": "Пользователи", - "sectionSessions": "Сессии", - "sectionRoles": "Роли", - "sectionDatabase": "База данных", - "sectionApiKeys": "API-ключи", - "sectionAuditLog": "Журнал аудита", - "sectionSsl": "HTTPS-сертификат", - "sectionBranding": "Белая этикетка", - "brandingAppName": "Название приложения", - "brandingAppNameDesc": "Отображается на экране входа и во вкладке браузера. Оставьте пустым, чтобы использовать «Termix».", - "brandingTagline": "Слоган", - "brandingTaglineDesc": "Отображается под названием приложения на экране входа. Оставьте пустым, чтобы использовать стандартный слоган.", - "brandingLogo": "Логотип", - "brandingLogoDesc": "PNG, JPEG или WEBP, до 750 КБ. Заменяет стандартную иконку на экране входа и во вкладке браузера.", - "brandingLogoUpload": "Загрузить логотип", - "brandingLogoReset": "Сбросить к стандартному", - "brandingLogoInvalid": "Неверное изображение. Используйте файл PNG, JPEG или WEBP размером до 750 КБ.", - "brandingSaved": "Настройки брендинга сохранены", - "brandingSaveFailed": "Не удалось сохранить настройки брендинга", - "sslDescription": "Сертификат, который Termix использует для HTTPS. Загрузите свой собственный здесь или получите и обновите его от Let's Encrypt в разделе ACME-сертификатов.", - "sslDocsLink": "Просмотреть документацию по SSL", - "sslCertStatus": "Статус сертификата", - "sslCertStatusNone": "Нет сертификата", - "sslCertStatusValid": "Действителен", - "sslCertStatusExpiring": "Скоро истекает", - "sslCertStatusExpired": "Истек", - "sslCertExpiresAt": "Истекает {{date}}", - "sslInfoNote": "После выпуска или загрузки сертификата Termix автоматически включит HTTPS на SSL_PORT (по умолчанию 8443) в дополнение к существующему HTTP-порту. Убедитесь, что этот порт опубликован/отображен для этого контейнера, чтобы он был доступен.", - "sslManualCert": "Сертификат (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Закрытый ключ (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Вставьте существующий сертификат и закрытый ключ, включая полную цепочку, если это требуется вашим центром сертификации.", - "sslManualUpload": "Загрузить и установить сертификат", - "sslManualUploadLoading": "Загрузка сертификата...", - "sslManualUploadSuccess": "Сертификат успешно загружен и установлен", - "sslManualUploadFailed": "Не удалось загрузить сертификат", - "sslManualRequiresFields": "Требуется сертификат и закрытый ключ", - "auditLogTotal": "{{total}} записей всего", - "auditLogEmpty": "Записи журнала аудита не найдены", - "auditLogSuccess": "Успешно", - "auditLogFailed": "Не удалось", - "auditLogClearFilters": "Очистить фильтры", - "auditLogPage": "Страница {{page}} из {{totalPages}} ({{total}} всего)", - "auditLogIp": "IP", - "auditLogResourceId": "ID ресурса", - "auditLogFilterUser": "Пользователь", - "auditLogFilterAction": "Действие", - "auditLogFilterResourceType": "Тип ресурса", - "auditLogFilterStatus": "Статус", - "auditLogFilterFrom": "С", - "auditLogFilterTo": "По", - "auditLogFilterAll": "Все", - "allowRegistration": "Разрешить регистрацию пользователей", - "allowRegistrationDesc": "Позволять новым пользователям регистрироваться самостоятельно, указывая имя пользователя и пароль", - "allowPasswordLogin": "Разрешить вход по паролю", - "allowPasswordLoginDesc": "Вход по имени пользователя и паролю", - "externalAutoProvision": "Автоматическое создание внешних учетных записей", - "externalAutoProvisionDesc": "Создавать учетную запись при первом входе через внешний метод аутентификации, например SSO или LDAP. Если отключено, войти таким образом смогут только пользователи, у которых уже есть учетная запись", - "secondFactorAfterExternalLogin": "Запрашивать второй фактор после внешних входов (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Если отключено, второй фактор запрашивается только после входа по паролю и других локальных методов, как и раньше. Если включено, он запрашивается после любого метода входа, включая SSO и LDAP.", - "allowPasswordReset": "Разрешить сброс пароля", - "allowPasswordResetDesc": "Код сброса через логи Docker", - "auditForwardingTitle": "Переадресация в SIEM", - "auditForwardingDesc": "Отправлять копию каждой записи журнала аудита во внешний коллектор в формате NDJSON. Локальные журналы остаются основным источником данных.", - "auditForwardingEnvNotice": "Переадресацию также можно настроить через переменную окружения; URL, сохраненный здесь, имеет приоритет.", - "auditForwardingToken": "Токен Bearer (необязательно)", - "auditForwardingTokenStored": "Токен Bearer (сохранен)", - "auditForwardingSaved": "Настройки переадресации журнала аудита сохранены", - "auditForwardingSaveError": "Не удалось сохранить настройки переадресации журнала аудита", - "sessionTimeout": "Тайм-аут сессии", - "hours": "часов", - "sessionTimeoutRange": "Мин. 1 ч, макс. 720 ч", - "monitoringDefaults": "Параметры мониторинга по умолчанию", - "statusCheck": "Проверка статуса", - "sec": "сек", - "logLevel": "Уровень логирования", "usersCount_one": "{{count}} пользователь", "usersCount_few": "{{count}} пользователя", "usersCount_many": "{{count}} пользователей", - "usersCount_other": "{{count}} пользователя", - "searchUsers": "Поиск пользователей...", - "noUsers": "Нет пользователей", - "noUsersMatch": "Пользователи, соответствующие вашему запросу, не найдены", - "pageOf": "Страница {{page}} из {{total}}", - "createUser": "Создать", - "newRole": "Новая роль", - "roleName": "Имя", - "roleDisplayName": "Отображаемое имя", - "roleDescription": "Описание", "rolesCount_one": "{{count}} роль", "rolesCount_few": "{{count}} роли", "rolesCount_many": "{{count}} ролей", - "rolesCount_other": "{{count}} роли", - "createRole": "Создать", - "creating": "Создание...", - "exportDatabase": "Экспорт базы данных", - "exportDatabaseDesc": "Скачать портативную резервную копию SQLite со всеми хостами, учетными данными и настройками", - "export": "Экспорт", - "exporting": "Экспорт...", - "importDatabase": "Импорт базы данных", - "importDatabaseDesc": "Восстановить из портативной резервной копии .sqlite на любом бэкенде базы данных", - "importDatabaseSelected": "Выбрано: {{name}}", - "selectFile": "Выбрать файл", - "changeFile": "Изменить", - "import": "Импорт", - "importing": "Импорт...", "apiKeysCount_one": "{{count}} ключ", "apiKeysCount_few": "{{count}} ключа", "apiKeysCount_many": "{{count}} ключей", - "apiKeysCount_other": "{{count}} ключа", - "apiKeysDocsLink": "Просмотр документации", - "apiKeysCliHint": "Используйте API-ключ с Termix CLI для управления серверами из терминала.", - "apiKeysCliLink": "Просмотр документации по CLI", - "newApiKey": "Новый API-ключ", - "apiKeyCreatedWarning": "Ключ создан — скопируйте его сейчас, он больше не будет показан.", - "apiKeyName": "Имя", - "apiKeyUser": "Пользователь", - "apiKeySelectUser": "Выберите пользователя...", - "apiKeyExpiresAt": "Срок действия", - "createKey": "Создать ключ", - "apiKeyNoExpiry": "Бессрочно", - "revokedBadge": "ОТЗЫВАН", - "authTypeDual": "Двойная аутентификация", - "authTypeExternal": "Внешняя", - "authTypeLocal": "Локальная", - "adminStatusAdministrator": "Администратор", - "adminStatusRegularUser": "Обычный пользователь", - "adminBadge": "АДМИН", - "systemBadge": "СИСТ", - "customBadge": "ПОЛЬЗОВАТЕЛЬСКИЙ", - "youBadge": "ВЫ", "sessionsActive_one": "{{count}} активен", "sessionsActive_few": "{{count}} активны", "sessionsActive_many": "{{count}} активно", - "sessionsActive_other": "{{count}} активно", - "sessionActive": "Активна: {{time}}", - "sessionExpires": "Ист.: {{time}}", - "revokeAll": "Все", - "revokeAllSessionsSuccess": "Все сессии пользователя отозваны", - "revokeAllSessionsFailed": "Не удалось отозвать сессии", - "revokeSessionFailed": "Не удалось отозвать сессию", - "addRole": "Добавить роль", - "noCustomRoles": "Пользовательские роли не определены", - "removeRoleFailed": "Не удалось удалить роль", - "assignRoleFailed": "Не удалось назначить роль", - "userAdminAccess": "Администратор", - "userAdminAccessDesc": "Полный доступ ко всем настройкам администратора", - "userRoles": "Роли", - "revokeAllUserSessions": "Отозвать все сессии", - "revokeAllUserSessionsDesc": "Принудительный повторный вход на всех устройствах", - "revoke": "Отозвать", - "deleteUserWarning": "Удаление этого пользователя необратимо.", - "deleteUser": "Удалить {{username}}", - "deleting": "Удаление...", - "deleteUserFailed": "Не удалось удалить пользователя", - "deleteUserSuccess": "Пользователь «{{username}}» удалён", - "deleteRoleSuccess": "Роль «{{name}}» удалена", - "revokeKeySuccess": "Ключ «{{name}}» отозван", - "revokeKeyFailed": "Не удалось отозвать ключ", - "copiedToClipboard": "Скопировано в буфер обмена", - "done": "Готово", - "createUserTitle": "Создать пользователя", - "createUserDesc": "Создайте новую локальную учётную запись.", - "createUserUsername": "Имя пользователя", - "createUserPassword": "Пароль", - "createUserPasswordHint": "Минимум 6 символов.", - "createUserEnterUsername": "Введите имя пользователя", - "createUserSubmit": "Создать пользователя", - "editUserTitle": "Управление пользователем: {{username}}", - "editUserDesc": "Изменение ролей, статуса администратора, сессий и настроек учётной записи.", - "editUserUsername": "Имя пользователя", - "editUserAuthType": "Тип аутентификации", - "editUserAdminStatus": "Статус администратора", - "editUserUserId": "ID пользователя", - "linkAccountTitle": "Привязка учётных записей", - "linkAccountDesc": "Объедините внешнюю учётную запись {{username}} с существующей локальной учётной записью.", - "linkAccountDescLocal": "Привяжите локальную учётную запись {{username}} к существующей внешней учётной записи.", - "linkAccountWarningTitle": "Это приведет к:", - "linkAccountEffect1": "Удалению учетной записи, доступной только через внешний провайдер", - "linkAccountEffect2": "Добавлению внешнего входа в целевую учетную запись", - "linkAccountEffect3": "Возможности входа как через внешний провайдер, так и по паролю", - "linkAccountTargetUsername": "Имя пользователя локальной учетной записи", - "linkAccountTargetPlaceholder": "Введите имя пользователя локальной учетной записи для привязки", - "linkAccountExternalUsername": "Имя пользователя внешней учетной записи", - "linkAccountExternalPlaceholder": "Введите имя пользователя внешней учетной записи для объединения", - "linkAccountExternalNotFound": "Внешняя учетная запись с таким именем пользователя не найдена", - "linkAccounts": "Привязать учетные записи", - "linkAccountSuccess": "Учетные записи успешно привязаны", - "linkAccountFailed": "Не удалось привязать учетные записи", - "linkAccountInProgress": "Привязка...", - "unlinkAccountTitle": "Отвязать внешний вход", - "unlinkAccountDesc": "Удалить внешний вход у {{username}}. Пользователь сможет входить только по паролю.", - "unlinkAccountWarning": "Это удалит внешний вход из этой учетной записи. У пользователя должен быть установлен пароль, чтобы он мог продолжать входить в систему.", - "unlinkAccount": "Отвязать внешний вход", - "unlinkAccountInProgress": "Отвязка...", - "unlinkAccountSuccess": "Внешний вход отвязан", - "unlinkAccountFailed": "Не удалось отвязать внешний вход", - "updateRegistrationFailed": "Не удалось обновить настройку регистрации", - "updatePasswordLoginFailed": "Не удалось обновить настройку входа по паролю", - "updateSecondFactorAfterExternalLoginFailed": "Не удалось обновить настройку второго фактора", - "updatePasswordResetFailed": "Не удалось обновить настройку сброса пароля", - "sessionTimeoutRange2": "Время ожидания сессии должно быть от 1 до 720 часов", - "sessionTimeoutSaved": "Время ожидания сессии сохранено", - "sessionTimeoutSaveFailed": "Не удалось сохранить время ожидания сессии", - "monitoringIntervalInvalid": "Недопустимые значения интервала", - "monitoringSaved": "Настройки мониторинга сохранены", - "monitoringSaveFailed": "Не удалось сохранить настройки мониторинга", - "logLevelUpdateFailed": "Не удалось обновить уровень логирования", - "createUserRequired": "Имя пользователя и пароль обязательны", - "createUserPasswordTooShort": "Пароль должен содержать не менее 6 символов", - "createUserSuccess": "Пользователь «{{username}}» создан", - "createUserFailed": "Не удалось создать пользователя", - "updateAdminStatusFailed": "Не удалось обновить статус администратора", - "allSessionsRevoked": "Все сессии отозваны", - "revokeSessionsFailed": "Не удалось отозвать сессии", - "manageUserData": "Управление данными пользователя", - "backToUsers": "Назад к пользователям", - "manageTabAccount": "Учетная запись", - "manageTabHosts": "Хосты", - "manageTabCredentials": "Учетные данные", - "manageTabSessions": "Сессии", - "manageTabDanger": "Опасные действия", - "manageEditorBack": "Назад к данным {{username}}", - "dataLockedBadge": "ЗАБЛОКИРОВАНО", - "dataLockedNotice": "Данные {{username}} остаются заблокированными до следующего входа. Их хосты, учетные данные и сниппеты нельзя просматривать или редактировать до этого момента.", - "resetPasswordTitle": "Сброс пароля", - "resetPasswordExternalOnly": "Этот пользователь входит через внешний провайдер и не имеет пароля.", - "resetPasswordPlaceholder": "Новый пароль", - "resetPasswordBtn": "Сбросить", - "resetPasswordWorking": "Сброс...", - "resetPasswordSuccess": "Пароль сброшен", - "resetPasswordSuccessWiped": "Пароль сброшен. Зашифрованные данные пользователя удалены.", - "resetPasswordFailed": "Не удалось сбросить пароль", - "resetPasswordConfirmWipe": "{{username}} не входил в систему после обновления шифрования, поэтому его данные невозможно восстановить. Сброс сейчас удалит его хосты, учетные данные и сниппеты. Продолжить?", - "manageApiKeys": "Ключи API", - "apiKeyNamePlaceholder": "Имя ключа", - "apiKeyCopyNotice": "Скопируйте этот ключ сейчас, он больше не будет показан.", - "noApiKeysForUser": "Нет ключей API", - "apiKeyDeleteFailed": "Не удалось удалить ключ API", - "exportUserData": "Экспорт данных", - "exportUserDataDesc": "Скачать хосты, учетные данные и данные файлового менеджера этого пользователя в формате JSON. Секреты будут расшифрованы.", - "exportUserDataSuccess": "Данные пользователя экспортированы", - "exportUserDataFailed": "Не удалось экспортировать данные пользователя", "hostsCount_one": "{{count}} хост", "hostsCount_few": "{{count}} хоста", "hostsCount_many": "{{count}} хостов", "hostsCount_other": "{{count}} хоста", - "addHostForUser": "Добавить хост", - "noHostsForUser": "У этого пользователя нет хостов", - "connectToHost": "Подключиться", - "deleteHostConfirm": "Удалить хост «{{name}}», принадлежащий {{username}}?", - "hostDeletedSuccess": "Хост удален", - "hostDeleteFailed": "Не удалось удалить хост", "credentialsCount_one": "{{count}} учётные данные", "credentialsCount_few": "{{count}} учётных данных", "credentialsCount_many": "{{count}} учётных данных", "credentialsCount_other": "{{count}} учётных данных", - "addCredentialForUser": "Добавить учетные данные", - "noCredentialsForUser": "У этого пользователя нет учетных данных", - "deleteCredentialConfirm": "Удалить учетные данные «{{name}}», принадлежащие {{username}}?", - "credentialDeletedSuccess": "Учетные данные удалены", - "credentialDeleteFailed": "Не удалось удалить учетные данные", - "noSessionsForUser": "Нет активных сессий", - "deleteSuccessorLabel": "Передать хосты и учетные данные", - "deleteSuccessorMe": "Мне (удаляющему администратору)", - "deleteSuccessorNone": "Никому, удалить их", - "deleteSuccessorDesc": "Все, чем этот пользователь делился, продолжит работать у нового владельца; выбор «Никому» удалит их хосты, учетные данные и общие ресурсы.", - "deleteUserDangerDesc": "Безвозвратно удалить {{username}} и все его данные (хосты, учетные данные, сниппеты, историю). Это действие нельзя отменить.", - "deleteUserConfirm": "Безвозвратно удалить {{username}} и все его данные?", - "deleteUserAdminBlocked": "Снимите статус администратора перед удалением этого пользователя.", - "createRoleRequired": "Имя и отображаемое имя обязательны", - "createRoleSuccess": "Роль «{{name}}» создана", - "createRoleFailed": "Не удалось создать роль", - "apiKeyNameRequired": "Имя ключа обязательно", - "apiKeyUserRequired": "ID пользователя обязателен", - "apiKeyCreatedSuccess": "Ключ API «{{name}}» создан", - "apiKeyCreateFailed": "Не удалось создать ключ API", - "exportSuccess": "База данных успешно экспортирована", - "exportFailed": "Не удалось экспортировать базу данных", - "importSelectFile": "Сначала выберите файл", - "importCompleted": "Импорт завершен: импортировано {{total}} элементов, пропущено {{skipped}}", - "importFailed": "Не удалось импортировать: {{error}}", - "importError": "Не удалось импортировать базу данных", - "sectionHostDefaults": "Параметры хоста по умолчанию", "rolePermissions": { "count_one": "{{count}} разрешение", "count_few": "{{count}} разрешения", "count_many": "{{count}} разрешений", - "count_other": "{{count}} разрешения", - "editAction": "Изменить разрешения", - "loadError": "Не удалось загрузить каталог разрешений", - "saved": "Разрешения роли сохранены", - "saveError": "Не удалось сохранить разрешения роли", - "save": "Сохранить", - "saving": "Сохранение...", - "pluginDisabled": "Плагин отключен", "groups": { "hosts": "Хосты", "credentials": "Учетные данные", "admin": "Администрирование" } - }, - "notificationPrivateEndpoints": "Разрешенные частные хосты уведомлений", - "notificationPrivateEndpointsDesc": "Точные частные хосты, к которым могут обращаться каналы уведомлений. Разделяйте их запятыми.", - "updateNotificationEndpointsFailed": "Не удалось обновить белый список конечных точек уведомлений", - "secondFactorsSectionTitle": "Двухфакторная аутентификация", - "secondFactorsNone": "Двухфакторная аутентификация не настроена", - "secondFactorUnavailable": "Недоступно", - "resetSecondFactors": "Сбросить двухфакторную аутентификацию", - "resetSecondFactorsConfirm": "Удалить все факторы двухфакторной аутентификации для {{username}}? Они смогут войти с помощью пароля или SSO и настроить их заново.", - "secondFactorsResetSuccess": "Вторые факторы сброшены", - "secondFactorsResetFailed": "Не удалось сбросить вторые факторы", - "passwordLoginForced": "Вход по паролю отключен, но другие методы входа не настроены, поэтому он временно остается включенным. Никто не останется без доступа.", - "sslNotRenewed": "Ничто не обновляет этот сертификат. Он истекает {{date}}. Включите автоматическое обновление в разделе сертификатов ACME или загрузите новый сертификат до этой даты.", - "sslSelfSigned": "Самподписанный сертификат, созданный Termix. Браузеры будут выдавать предупреждения.", - "sslRenewedBy": "Автоматически обновлен через {{plugin}}", - "sslIssuer": "Выдан {{issuer}}", - "sslNames": "Охватывает {{names}}", - "sslManualTitle": "Загрузить сертификат", - "updateExternalAutoProvisionFailed": "Не удалось обновить настройку автоматического создания", - "hostTags": "Предопределенные теги хостов", - "hostTagsDesc": "Теги, которые все пользователи видят как предложения в редакторе хостов. Нажмите Пробел или Enter, чтобы добавить тег. Удаление тега здесь не удаляет его из хостов.", - "hostTagsError": "Не удалось загрузить или сохранить предложения тегов хостов.", - "revokeAllSessionsConfirm": "Выйти для пользователя {{username}} на всех устройствах?", - "revokeSessionConfirm": "Выйти из этой сессии?", - "revokeSession": "Выйти", - "deleteRoleConfirm": "Удалить роль {{name}}?", - "revokeKeyConfirm": "Отозвать API-ключ {{name}}?", - "revokeKey": "Отозвать" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Куда", - "who": "Кто", - "hostLabel": "Хост", - "hostPlaceholder": "192.168.1.1 или example.com", - "portLabel": "Порт", - "usernameLabel": "Имя пользователя", - "usernamePlaceholder": "имя_пользователя", - "authLabel": "Аутентификация", - "passwordLabel": "Пароль", - "passwordPlaceholder": "пароль", - "privateKeyLabel": "Закрытый ключ", - "privateKeyPlaceholder": "Вставьте закрытый ключ...", - "credentialLabel": "Учетные данные", - "credentialPlaceholder": "Выберите сохраненные учетные данные", - "protocolLabel": "Протокол", - "domainLabel": "Домен", - "domainPlaceholder": "необязательно", - "connectToAction": "Подключиться к {{name}}", - "sshProtocol": "SSH", - "noTarget": "Ни одна установленная программа не может подключиться к этому типу хоста" + "usernameLabel": "Имя пользователя" }, "keybindings": { - "description": "Привяжите клавиши к действиям в терминале и приложении или измените встроенные сочетания клавиш.", - "defaultsHeading": "Встроенные сочетания", - "fixedHeading": "Сочетания приложения", - "fixed": { - "splitRight": "Разделить вправо", - "splitDown": "Разделить вниз", - "zoomPane": "Увеличить активную панель", - "navigatePane": "Переключаться между панелями", - "nextTab": "Следующая вкладка", - "previousTab": "Предыдущая вкладка", - "jumpTab": "Перейти к вкладке", - "previousView": "Вернуться к предыдущему виду боковой панели", - "fullscreen": "Переключить полноэкранный режим" - }, - "customHeading": "Пользовательские сочетания", - "addBinding": "Добавить сочетание", - "addBindingTitle": "Добавить сочетание", - "editBindingTitle": "Изменить сочетание", - "loading": "Загрузка...", - "noCustomBindings": "Пользовательских сочетаний пока нет", - "defaultBadge": "По умолчанию", - "customizedBadge": "Изменено", - "customize": "Настроить", - "resetToDefault": "Сбросить по умолчанию", - "resetAllToDefaults": "Сбросить все по умолчанию", - "cancel": "Отмена", - "saveBinding": "Сохранить сочетание клавиш", - "saveError": "Не удалось сохранить сочетания клавиш", - "pressKeysToRecord": "Сочетание клавиш", - "pressKeysPlaceholder": "Нажмите клавиши", - "recording": "Нажмите клавиши...", - "comboRequiredError": "Сначала введите сочетание клавиш", - "conflictWarning": "Это сочетание уже назначено на {{combo}}. Сохранение приведет к срабатыванию обоих действий.", - "actionLabel": "Действие", "actionNextTab": "Переключиться на следующую вкладку", "actionPreviousTab": "Переключиться на предыдущую вкладку", "actionOpenCommandPalette": "Открыть быстрый поиск", - "actionReconnectSession": "Переподключить текущую сессию", - "unavailableAction": "{{type}} (недоступно)", - "actionRequiredError": "Сначала выберите действие", - "deleteConfirm": "Удалить это сочетание клавиш?", - "resetAllConfirm": "Сбросить все сочетания клавиш к значениям по умолчанию?" + "actionReconnectSession": "Переподключить текущую сессию" }, "userProfile": { - "storageModeLocal": "Браузер", - "storageModeCloud": "База данных", - "storageModeDescription": "Браузер хранит настройки только в этом браузере. База данных синхронизирует их с сервером и загружает на любом устройстве.", - "resetToDefaults": "Сбросить к значениям по умолчанию", - "resetToDefaultsSuccess": "Настройки сброшены к значениям по умолчанию.", - "storageModeSwitch": "Хранение настроек", - "sectionAccount": "Аккаунт", - "desktopProfileTitle": "Только это устройство", - "desktopProfileDescription": "Этот профиль существует только на этом устройстве и входит в систему самостоятельно. Свяжите его с сервером Termix, чтобы использовать одни и те же хосты и настройки на всех устройствах.", - "sectionInterface": "Интерфейс", - "interfacePresetDesc": "Уровень детализации, который показывает Termix. Все функции остаются доступными.", "preset_simple": "Простой", "preset_simple_desc": "Только самое необходимое.", "preset_balanced": "Сбалансированный", "preset_balanced_desc": "Стандартная раскладка.", "preset_advanced": "Расширенный", "preset_advanced_desc": "Всё включено, компактно.", - "presetClearOverrides": "Сбросить все", - "presetOverridesTitle": "Настроено", - "presetRevertArea": "Отменить", - "presetConfirmTitle": "Переключиться на {{preset}}?", - "presetConfirmDesc": "Это сбросит боковую панель, навигацию, раскладку панели управления, панель инструментов терминала и вид файлового менеджера. Ваши хосты, учетные данные и домашняя страница не будут затронуты.", - "presetConfirmApply": "Применить пресет", - "runSetupAgainDesc": "Повторно пройти начальную настройку.", - "runSetupAgainButton": "Запустить настройку", "uiArea_chrome": "Интерфейс приложения", "uiArea_hostList": "Список хостов", "uiArea_credentialList": "Список учетных данных", @@ -1671,128 +1151,15 @@ "uiArea_terminal": "Терминал", "uiArea_fileManager": "Файловый менеджер", "uiArea_hostEditor": "Редактор хоста", - "sectionAppearance": "Внешний вид", - "sectionSecurity": "Безопасность", - "sectionApiKeys": "Ключи API", - "sectionData": "Данные", - "usernameLabel": "Имя пользователя", - "roleLabel": "Роль", - "roleAdministrator": "Администратор", - "authMethodLabel": "Метод аутентификации", - "authMethodLocal": "Локальный", - "twoFaLabel": "2FA", - "twoFaOn": "Вкл.", - "twoFaOff": "Выкл.", - "versionLabel": "Версия", - "cliTitle": "Termix CLI", - "cliDescription": "Открывайте терминалы, запускайте команды и перемещайте файлы прямо из своей оболочки.", - "cliLearnMore": "Подробнее", - "deleteAccount": "Удалить аккаунт", - "deleteAccountDescription": "Безвозвратно удалить ваш аккаунт", - "deleteButton": "Удалить", - "deleteAccountPermanent": "Это действие необратимо.", - "deleteAccountWarning": "Все сеансы, хосты, учетные данные и настройки будут удалены безвозвратно.", - "confirmPasswordDeletePlaceholder": "Введите пароль для подтверждения", "languageLabel": "Язык", "themeLabel": "Тема", "fontSizeLabel": "Размер шрифта", "interfaceFontLabel": "Шрифт интерфейса", "interfaceFontDescription": "Изменяет шрифт интерфейса приложения. Профили терминала сохраняют собственные настройки шрифта.", "accentColorLabel": "Акцентный цвет", - "keyboardShortcuts": "Горячие клавиши", - "keyboardShortcutsDescription": "Настройте сочетания клавиш для копирования, вставки и команд в терминале", - "manageShortcuts": "Настроить", - "commandPalette": "Палитра команд", - "commandPaletteDesc": "Включить сочетание клавиш", - "reopenTabsOnLogin": "Восстанавливать вкладки при входе", - "reopenTabsOnLoginDesc": "Восстанавливайте открытые вкладки при входе в систему или обновлении страницы, даже с другого устройства", - "confirmTabClose": "Подтверждать закрытие вкладки", - "confirmTabCloseDesc": "Спрашивать перед закрытием вкладок терминала", - "showTabNumbers": "Показывать номера вкладок", - "showTabNumbersDesc": "Отображать номер на каждой вкладке для удобства различения", - "settingsAppRail": "Боковая панель приложений", - "sidebarSettingsMoved": "Настройки отображения боковой панели хостов перенесены в панель «Настроить боковую панель», которая открывается из панели инструментов хостов.", - "showHostTags": "Показывать теги хостов", - "showHostTagsDesc": "Отображать теги в списке хостов", - "statusColors": "Реальные цвета статуса", - "statusColorsDesc": "Использовать зеленый/красный для статуса онлайн/офлайн вместо акцентного цвета", - "pinAppRail": "Закрепить боковую панель приложений", - "pinAppRailDesc": "Держать левую боковую панель приложений всегда развернутой, вместо раскрытия при наведении", - "expandAppRailOnHover": "Разворачивать боковую панель при наведении", - "expandAppRailOnHoverDesc": "Разрешить разворачивание левой боковой панели приложений при наведении указателя", - "appRailHoverPushesContent": "Сдвигать контент при расширении", - "appRailHoverPushesContentDesc": "Освободить место для расширенной панели вместо наложения на страницу. Открытые сессии, например удалённый рабочий стол, будут каждый раз изменять размер", - "showPinAppRailButton": "Показывать кнопку закрепления панели", - "showPinAppRailButtonDesc": "Показывать кнопку для закрепления панели в открытом состоянии. По умолчанию выключено.", - "settingsNavigation": "Навигация", - "navigationTabsDesc": "Выберите, какие вкладки отображаются в боковой панели приложений", - "settingsUpdates": "Обновления", - "disableUpdateChecks": "Отключить проверку обновлений", - "disableUpdateChecksDesc": "Перестать проверять наличие обновлений", - "changePassword": "Изменить пароль", - "currentPasswordLabel": "Текущий пароль", - "currentPasswordPlaceholder": "Текущий пароль", - "newPasswordLabel": "Новый пароль", - "newPasswordPlaceholder": "Новый пароль", - "confirmPasswordLabel": "Подтвердите новый пароль", - "confirmPasswordPlaceholder": "Подтвердите новый пароль", - "updatePassword": "Обновить пароль", - "createApiKeyTitle": "Создать ключ API", - "createApiKeyDescription": "Создайте новый ключ API для программного доступа.", - "apiKeyNameLabel": "Имя", - "apiKeyNamePlaceholder": "напр. CI Pipeline", - "expiryDateLabel": "Дата истечения срока", - "optional": "необязательно", - "cancel": "Отмена", - "createKey": "Создать ключ", - "apiKeyCreatedWarning": "Ключ создан — скопируйте его сейчас, он больше не будет показан.", - "copyApiKey": "Скопировать API-ключ", - "copiedToClipboard": "Скопировано в буфер обмена", "apiKeyCount_one": "{{count}} ключ", "apiKeyCount_few": "{{count}} ключа", "apiKeyCount_many": "{{count}} ключей", - "apiKeyCount_other": "{{count}} ключа", - "newKey": "Новый ключ", - "noApiKeys": "API-ключей пока нет.", - "apiKeyActive": "Активен", - "apiKeyUsageHint": "Добавьте ваш ключ в", - "apiKeyUsageHintHeader": "заголовок.", - "apiKeyPermissionsHint": "Ключи наследуют права пользователя, который их создал.", - "exportData": "Экспорт моих данных", - "exportDataDesc": "Скачайте резервную копию ваших хостов, учетных данных и настроек для переноса на другое устройство", - "export": "Экспорт", - "exporting": "Экспорт...", - "importData": "Импорт моих данных", - "importDataDesc": "Восстановите хосты, учетные данные и настройки из файла резервной копии .sqlite", - "importDataSelected": "Выбрано: {{name}}", - "selectFile": "Выбрать файл", - "changeFile": "Изменить", - "import": "Импорт", - "importing": "Импорт...", - "exportSuccess": "Данные успешно экспортированы", - "exportFailed": "Ошибка экспорта данных", - "importSelectFile": "Сначала выберите файл", - "importCompleted": "Импорт завершен: импортировано {{total}} элементов, пропущено {{skipped}}", - "importFailed": "Ошибка импорта: {{error}}", - "roleUser": "Пользователь", - "authMethodDual": "Двухфакторная аутентификация", - "authMethodExternal": "Внешняя", - "done": "Готово", - "apiKeyNameRequired": "Укажите имя ключа", - "apiKeyCreated": "API-ключ «{{name}}» создан", - "apiKeyCreateFailed": "Не удалось создать API-ключ", - "apiKeyUser": "Пользователь", - "apiKeyExpires": "Истекает", - "apiKeyRevoked": "API-ключ «{{name}}» отозван", - "apiKeyRevokeFailed": "Не удалось отозвать API-ключ", - "passwordFieldsRequired": "Укажите текущий и новый пароли", - "passwordMismatch": "Пароли не совпадают", - "passwordTooShort": "Пароль должен содержать не менее 6 символов", - "passwordUpdated": "Пароль успешно обновлен", - "passwordUpdateFailed": "Не удалось обновить пароль", - "deletePasswordRequired": "Для удаления учетной записи необходимо ввести пароль", - "deleteFailed": "Не удалось удалить учетную запись", - "deleting": "Удаление...", "colorPickerTooltip": "Открыть палитру цветов", "themeSystem": "Системная", "themeLight": "Светлая", @@ -1803,18 +1170,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Выполнен вход в {{server}}", - "linkedProfileDescription": "Это устройство использует ваш аккаунт на сервере и хранит копию ваших данных, поэтому оно продолжает работать в автономном режиме.", - "manageSync": "Настроить синхронизацию", - "setUpSync": "Привязать к серверу", - "settingsTabsAndShortcuts": "Вкладки и сочетания клавиш", - "onBetaTitle": "Вы используете бета-версию", - "onBetaDescription": "Спасибо за тестирование. Сообщите нам о любых ошибках.", - "tryBetaTitle": "Попробуйте новые функции первыми", - "tryBetaDescription": "Присоединитесь к бета-программе в разделе «Обновления».", - "sendBetaFeedback": "Отправить отзыв о бета-версии", - "openUpdates": "Обновления" + "themeGruvbox": "Gruvbox" } } }, @@ -2091,8 +1447,7 @@ "hasDependents": "{{name}} требуется для {{list}}. Сначала отключите или удалите их.", "missingDependencies": "{{name}} требует {{list}}, который не установлен.", "consentChanged": "Список запрашиваемых разрешений изменился с момента последнего просмотра. Проверьте его снова.", - "upload": "Не удалось прочитать {{name}}: {{error}}", - "developerMode": "Не удалось изменить режим разработчика: {{error}}" + "upload": "Не удалось прочитать {{name}}: {{error}}" }, "data": { "title": "Хранимые данные", @@ -2231,13 +1586,7 @@ "browsePlugins": "Просмотр плагинов", "loading": "Загрузка", "developer": { - "title": "Режим разработчика плагинов", - "hint": "Позволяет администраторам устанавливать плагины из файлов .tmxplug во вкладке «Плагины» без проверки реестра. Используйте это для создания и тестирования собственных плагинов.", - "enableTitle": "Включить режим разработчика?", - "enableBody": "Администраторы смогут устанавливать плагины из файлов, которые Termix не проверял. Плагин может выполнять любые действия, разрешённые его возможностями, поэтому включайте это только при разработке или тестировании плагинов.", - "enable": "Включить", - "installFromFile": "Установить из файла", - "signedOnly": "Установлена переменная TERMIX_REQUIRE_SIGNED_PLUGINS, поэтому установка из файла заблокирована." + "installFromFile": "Установить из файла" }, "count": { "downloads_one": "{{formatted}} загрузка", @@ -2277,71 +1626,7 @@ "secretSet": "Установлено", "secretNotSet": "Не установлено", "secretReplace": "Заменить", - "pluginSettingsSaved": "Настройки сохранены", - "pluginSettingsInvalid": "Некоторые настройки не удалось сохранить. Проверьте выделенные поля.", - "pluginSettingsSaveFailed": "Не удалось сохранить настройки", - "pluginSettingsLoadFailed": "Не удалось загрузить настройки", - "featureUnavailable": "{{name}} сейчас недоступен. Эти настройки сохранены, но не будут применены.", - "account": "Аккаунт", - "security": "Безопасность", - "apiKeys": "API-ключи", - "data": "Данные и синхронизация", - "interface": "Интерфейс", - "appearance": "Внешний вид", - "keybindings": "Сочетания клавиш", - "adminGeneral": "Общие", - "adminUsers": "Пользователи", - "adminSessions": "Сессии", - "adminRoles": "Роли", - "adminHostDefaults": "Настройки хоста по умолчанию", - "adminBranding": "Брендинг", - "adminDatabase": "База данных", - "adminSsl": "SSL", - "adminApiKeys": "API-ключи", - "adminAuditLog": "Журнал аудита", - "bandYou": "Ваш аккаунт", - "bandApp": "Это приложение", - "bandPlugins": "Плагины", - "bandInstance": "Этот сервер", - "searchPlaceholder": "Поиск настроек", - "noResults": "Настройки не найдены.", - "pages": "Страницы", - "instanceSettings": "Настройки сервера", - "nothingHere": "Здесь нечего настраивать.", - "searchPage": "Поиск на этой странице", - "noPageMatches": "На этой странице ничего не найдено.", - "updates": { - "title": "Обновления", - "betaProgram": "Бета-программа", - "betaIntro": "Бета-версии — это ранние сборки следующей версии Termix. Они выходят по вторникам и пятницам, когда появляются новые функции для тестирования. В них могут быть ошибки, и именно ваши отзывы помогают сделать стабильную версию лучше.", - "termixBetas": "Бета-версии Termix", - "termixBetasHint": "Сообщать о новых бета-версиях, а не только о стабильных.", - "runningBetaBuild": "Вы используете бета-сборку. Чтобы вернуться к стабильной версии, переключитесь на стабильный образ или установщик.", - "howToInstall": "Как получить бета-версию", - "desktopInstall": "Скачайте установщик бета-версии и установите его поверх текущей.", - "downloadBeta": "Скачать {{version}}", - "dockerInstall": "Измените тег образа на бета-версию и перезапустите контейнер:", - "copy": "Копировать", - "copied": "Скопировано", - "copyFailed": "Не удалось скопировать", - "learnMore": "Узнать больше о бета-версиях", - "feedback": "Отзывы", - "feedbackHint": "Нашли ошибку или есть идея? Сообщение отправится напрямую разработчикам с указанием вашей версии.", - "sendFeedback": "Отправить отзыв о бета-версии", - "releases": "Релизы", - "thisVersion": "Текущая версия", - "newestStable": "Последняя стабильная", - "newestBeta": "Последняя бета", - "noRelease": "Сейчас нет", - "pluginBetas": "Бета-версии плагинов", - "pluginBetasIntro": "Каждый плагин может использовать бета-версии самостоятельно. Чтобы попробовать, откройте плагин и нажмите «Попробовать бета-версию».", - "openPlugins": "Открыть плагины", - "waitingForStable": "Вернулись к стабильной версии. Останется на {{version}}, пока не выйдет более новая стабильная версия.", - "backToStable": "Вернуться к стабильной", - "allPluginsBeta": "Использовать бета-версии для всех плагинов", - "allPluginsStable": "Все плагины возвращены к стабильным версиям", - "saveFailed": "Не удалось сохранить изменения" - } + "featureUnavailable": "{{name}} сейчас недоступен. Эти настройки сохранены, но не будут применены." }, "managerCard": { "refresh": "Обновить", @@ -2351,11 +1636,6 @@ "filter": "Фильтр..." }, "sync": { - "server": "Сервер Termix", - "account": "Аккаунт", - "status": "Статус", - "never": "никогда", - "justNow": "только что", "minutesAgo_one": "{{count}} минуту назад", "minutesAgo_few": "{{count}} минуты назад", "minutesAgo_many": "{{count}} минут назад", @@ -2364,76 +1644,11 @@ "hoursAgo_few": "{{count}} часа назад", "hoursAgo_many": "{{count}} часов назад", "hoursAgo_other": "{{count}} часов назад", - "actionFailed": "Не удалось выполнить действие. Попробуйте еще раз.", - "unlinkedTitle": "Только это устройство", - "unlinkedBody": "Termix работает автономно на этом устройстве. Свяжите его с вашим сервером Termix, чтобы синхронизировать все данные.", - "unlinkedPointHosts": "Ваши хосты, учетные данные, сниппеты и настройки будут доступны на каждом устройстве.", - "unlinkedPointOffline": "Все продолжает работать, когда сервер недоступен, и синхронизируется позже.", - "unlinkedPointAccount": "Вы входите в систему с помощью учетной записи сервера, и хосты, которыми с вами поделились другие пользователи, также появятся здесь.", - "linkButton": "Связать с сервером", - "state": { - "syncing": "Синхронизация", - "offline": "Сервер недоступен", - "error": "Синхронизация остановлена", - "signedOut": "Выход выполнен", - "synced": "Синхронизировано {{time}}" - }, "pending_one": "{{count}} изменение ожидает синхронизации", "pending_few": "{{count}} изменения ожидают синхронизации", "pending_many": "{{count}} изменений ожидают синхронизации", "pending_other": "{{count}} изменений ожидают синхронизации", - "signInAgain": "Войти снова", - "syncNow": "Синхронизировать сейчас", - "unlink": "Разорвать связь", - "unlinked": "Это устройство больше не связано", - "unlinkTitle": "Отвязать это устройство?", - "unlinkDescription": "Синхронизация будет остановлена, и вы выйдете из сервера. Хосты, которыми с вами поделились другие пользователи, будут удалены с этого устройства в любом случае.", - "unlinkKeepTitle": "Оставить мои данные здесь", - "unlinkKeepBody": "Ваши хосты, учётные данные и настройки останутся на этом устройстве и будут работать автономно.", - "unlinkRemoveTitle": "Удалить синхронизированные данные", - "unlinkRemoveBody": "Всё, что пришло с сервера, будет удалено с этого устройства. Останутся только хосты, сохранённые локально.", - "conflictsTitle": "Конфликты", - "conflictsDescription": "Эти элементы были изменены одновременно здесь и на сервере. Сейчас используется версия с сервера. Выберите «Оставить мою», чтобы отправить свою версию на сервер.", - "keepMine": "Оставить мою", - "keepServer": "Оставить серверную", - "errorsTitle": "Не синхронизировано", - "errorsDescription": "Сервер не принял эти изменения. Они остались на этом устройстве.", - "errorPermission": "Ваша учётная запись на сервере не имеет прав для внесения этого изменения.", - "retry": "Повторить попытку", - "whatSyncs": "Что синхронизируется", - "whatSyncsDescription": "Отключите синхронизацию для тех элементов, которые хотите хранить только на этом устройстве.", - "coreGroup": "Termix", - "notOnServer": "Этого нет на сервере", - "notOnDevice": "Ещё нет на этом устройстве", - "localOnlyHint": "Вы также можете хранить отдельные хосты или папки только на этом устройстве через их настройки.", - "originTitle": "Откуда начинаются подключения", - "originDescription": "Подключайтесь к хостам напрямую с этого устройства или через сервер. Это можно настроить для каждого хоста отдельно.", - "originLocal": "Это устройство", - "originRemote": "Сервер", - "entities": { - "hosts": "Хосты", - "sshCredentials": "Учётные данные", - "sshFolders": "Папки", - "userPreferences": "Настройки", - "pluginUserSettings": "Настройки плагинов", - "sharedHosts": "Хосты, которыми с вами поделились", - "sharedCredentials": "Учётные данные, которыми с вами поделились", - "vaultProfiles": "Профили Vault", - "snippetFolders": "Папки сниппетов", - "snippets": "Сниппеты", - "dashboardServiceLinks": "Ссылки на сервисы", - "homepageItems": "Элементы домашней страницы", - "networkTopology": "Схема сети", - "workspaces": "Рабочие пространства", - "hostDefaults": "Настройки хостов по умолчанию", - "hostDefaultsAdmin": "Настройки хостов сервера по умолчанию", - "aiProviders": "Поставщики ИИ", - "homepageLayouts": "Макеты домашней страницы", - "accountProfile": "Профиль учётной записи" - }, "proxy": { - "title": "Обратный прокси", - "description": "Требуется только если перед вашим сервером стоит Cloudflare Access или страница входа.", "headersTitle": "Дополнительные заголовки", "headersHint": "Отправляются с каждым запросом к серверу, например, токен сервиса Cloudflare Access.", "headerName": "Имя заголовка", @@ -2446,8 +1661,7 @@ "username": "Имя пользователя", "password": "Пароль", "allowInvalidCertificate": "Доверять самоподписанному сертификату", - "allowInvalidCertificateHint": "Только для вашего собственного сервера, если его сертификат не выдан известным центром сертификации.", - "saved": "Сохранено" + "allowInvalidCertificateHint": "Только для вашего собственного сервера, если его сертификат не выдан известным центром сертификации." }, "problems": { "invalidUrl": "Это не похоже на веб-адрес.", @@ -2489,6 +1703,27 @@ "linking": "Привязка и запуск первой синхронизации...", "linked": "Привязано. Ваши данные синхронизируются.", "signedInAgain": "Выполнен вход. Синхронизация возобновлена." + }, + "entities": { + "hosts": "Хосты", + "sshCredentials": "Учётные данные", + "sshFolders": "Папки", + "userPreferences": "Настройки", + "pluginUserSettings": "Настройки плагинов", + "sharedHosts": "Хосты, которыми с вами поделились", + "sharedCredentials": "Учётные данные, которыми с вами поделились", + "vaultProfiles": "Профили Vault", + "snippetFolders": "Папки сниппетов", + "snippets": "Сниппеты", + "dashboardServiceLinks": "Ссылки на сервисы", + "homepageItems": "Элементы домашней страницы", + "networkTopology": "Схема сети", + "workspaces": "Рабочие пространства", + "hostDefaults": "Настройки хостов по умолчанию", + "hostDefaultsAdmin": "Настройки хостов сервера по умолчанию", + "aiProviders": "Поставщики ИИ", + "homepageLayouts": "Макеты домашней страницы", + "accountProfile": "Профиль учётной записи" } }, "hostDefaults": { @@ -2505,37 +1740,18 @@ "resetTitle": "Этот хост задаёт своё значение. Нажмите, чтобы снова использовать значение по умолчанию из {{source}}", "clearTitle": "Задано на этом уровне. Нажмите, чтобы очистить и использовать {{source}} вместо этого", "inheritedTitle": "Использует значение по умолчанию из {{source}}", - "titleAdmin": "Значения по умолчанию для хостов на сервере", - "titleUser": "Мои значения по умолчанию для хостов", - "titleFolder": "Значения по умолчанию для папки: {{name}}", - "descriptionAdmin": "Значения по умолчанию для каждого хоста на этом сервере. Пользователь, папка или сам хост могут задать другое значение. Измените поле, чтобы задать значение здесь, или очистите его, чтобы оставить незаданным.", - "descriptionUser": "Значения по умолчанию для всех ваших хостов, переопределяющие серверные. Папка или сам хост могут задать другое значение. Измените поле, чтобы задать значение здесь, или очистите его, чтобы оставить незаданным.", - "descriptionFolder": "Значения по умолчанию для хостов в этой папке и её подпапках, переопределяющие ваши собственные. Хост может задать другое значение. Измените поле, чтобы задать значение здесь, или очистите его, чтобы оставить незаданным.", - "save": "Сохранить значения по умолчанию", "saved_one": "Значения по умолчанию сохранены. Обновлён {{count}} хост.", "saved_few": "Значения по умолчанию сохранены. Обновлено {{count}} хоста.", "saved_many": "Значения по умолчанию сохранены. Обновлено {{count}} хостов.", "saved_other": "Значения по умолчанию сохранены. Обновлено {{count}} хоста.", - "savedInBackground": "Значения по умолчанию сохранены. Хосты обновляются в фоновом режиме.", "appliedToHosts_one": "{{count}} хост обновлён новыми значениями по умолчанию.", "appliedToHosts_few": "{{count}} хоста обновлены новыми значениями по умолчанию.", "appliedToHosts_many": "{{count}} хостов обновлены новыми значениями по умолчанию.", "appliedToHosts_other": "{{count}} хоста обновлены новыми значениями по умолчанию.", - "saveFailed": "Не удалось сохранить значения по умолчанию", - "loadFailed": "Не удалось загрузить значения по умолчанию", - "confirmTitle": "Сохранить значения по умолчанию?", "confirmChanges_one": "{{count}} хост использует эти значения по умолчанию и будет изменён.", "confirmChanges_few": "{{count}} хоста используют эти значения по умолчанию и будут изменены.", "confirmChanges_many": "{{count}} хостов используют эти значения по умолчанию и будут изменены.", "confirmChanges_other": "{{count}} хоста используют эти значения по умолчанию и будут изменены.", - "confirmNoChanges": "Существующие хосты не изменятся. Новые хосты будут создаваться с этими значениями по умолчанию.", - "menuMyDefaults": "Мои значения по умолчанию для хостов", - "folderDefaultsAction": "Значения по умолчанию для папки", - "adminSectionDescription": "Задайте значения по умолчанию, которые будут использоваться каждым хостом на этом сервере для всех настроек хоста, включая настройки каждого плагина. Пользователи и папки могут задать свои значения поверх них, а любой хост может использовать своё собственное значение.", - "editServerDefaults": "Изменить значения по умолчанию на сервере", - "resetMenu": "Сбросить", - "resetAll": "Сбросить всё по умолчанию", - "resetCore": "Сбросить параметры подключения и SSH", "resetDone_one": "{{count}} хост теперь использует значения по умолчанию.", "resetDone_few": "{{count}} хоста теперь используют значения по умолчанию.", "resetDone_many": "{{count}} хостов теперь используют значения по умолчанию.", @@ -2551,38 +1767,11 @@ "fields": { "secretSaved": "Сохранено. Введите новый текст, чтобы заменить." }, - "sharing": { - "revokeConfirm": "Удалить доступ для {{name}}?", - "revoke": "Удалить доступ" - }, "manage": { - "searchSettings": "Поиск настроек", - "noMatchingSettings": "Подходящих настроек не найдено.", - "sections": "Разделы", - "sectionNeedsAttention": "Здесь требуется внимание", "needsAttention_one": "Один элемент требует внимания.", "needsAttention_few": "{{count}} элемента требуют внимания.", "needsAttention_many": "{{count}} элементов требуют внимания.", "needsAttention_other": "{{count}} элементов требуют внимания.", - "bandHost": "Хост", - "bandFeatures": "Протоколы и плагины", - "bandCredential": "Учётные данные", - "sshConnection": "Подключение по SSH", - "errorAddressRequired": "Необходимо указать адрес.", - "errorPortRange": "Используйте порт от 1 до 65535.", - "defaults": "По умолчанию", - "searchHosts": "Поиск хостов", - "searchCredentials": "Поиск учётных данных", - "searchDefaults": "Поиск значений по умолчанию", - "addCredential": "Добавить учётные данные", - "nothingMatches": "Ничего не найдено", - "nothingYet": "Здесь пока пусто", - "emptyHostsHint": "Добавьте хост, и он появится здесь, в той папке, которую вы ему назначите.", - "emptyCredentialsHint": "Сохранённые учётные данные можно использовать для любого хоста.", - "collapse": "Свернуть", - "expand": "Развернуть", - "cannotBeUndone": "Это действие нельзя отменить.", - "hostNotFound": "Хост не найден. Попробуйте обновить список.", "hostCount_one": "{{count}} хост", "hostCount_few": "{{count}} хоста", "hostCount_many": "{{count}} хостов", @@ -2590,14 +1779,7 @@ "credentialCount_one": "{{count}} учётная запись", "credentialCount_few": "{{count}} учётные записи", "credentialCount_many": "{{count}} учётных записей", - "credentialCount_other": "{{count}} учётных записей", - "newHost": "Новый хост", - "newCredential": "Новые учётные данные", - "advanced": "Дополнительно", - "pickHost": "Выберите хост для редактирования", - "pickCredential": "Выберите учётные данные для редактирования", - "pickDefaults": "Выберите уровень значений по умолчанию для редактирования", - "pickHint": "Все параметры подключения находятся здесь, сгруппированные для удобства поиска." + "credentialCount_other": "{{count}} учётных записей" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/sk_SK.json b/src/ui/locales/translated/sk_SK.json index f6086bd09..09d6c6470 100644 --- a/src/ui/locales/translated/sk_SK.json +++ b/src/ui/locales/translated/sk_SK.json @@ -141,7 +141,6 @@ "continue": "Pokračovať", "error": "Chyba", "unsavedChanges": "Neuložené zmeny", - "more": "Viac", "loading": "Načítava sa...", "host": "Hostiteľ", "selectHost": "Vyberte hostiteľa...", @@ -154,7 +153,6 @@ "cancel": "Zrušiť", "username": "Meno používateľa", "login": "Prihlásiť sa", - "logout": "Odhlásiť sa", "register": "Registrovať", "password": "Heslo", "confirmPassword": "Potvrdiť heslo", @@ -165,8 +163,6 @@ "rename": "Premenovať", "edit": "Upraviť", "confirm": "Potvrdiť", - "next": "Ďalej", - "previous": "Predchádzajúce", "refresh": "Obnoviť", "language": "Jazyk", "backendReconnected": "Pripojenie k serveru obnovené", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Prečítajte si o každom z nich" }, "desktopUpdates": { - "title": "Desktopová aplikácia", - "mode": "Aktualizácie", - "modeHint": "Ako táto aplikácia získava nové verzie.", - "manualModeHint": "Tento inštalátor sa nedokáže aktualizovať sám, preto vás Termix iba upozorní, keď je k dispozícii nová verzia.", "modeAutomatic": "Automaticky", "modePrompt": "Najprv sa opýtať", "modeNever": "Nikdy", @@ -247,15 +239,6 @@ "onboardingTitle": "Aktualizácie aplikácie", "onboardingBody": "Desktopová aplikácia sa teraz dokáže aktualizovať sama. Vyberte si, ako chcete dostávať nové verzie. Toto môžete neskôr zmeniť v Nastaveniach, Aktualizácie.", "onboardingManual": "Táto kópia aplikácie bola nainštalovaná spôsobom, ktorý neumožňuje samostatnú aktualizáciu, preto vás Termix upozorní, keď je k dispozícii nová verzia, a poskytne odkaz na jej stiahnutie.", - "status": "Verzia {{version}}", - "statusIdle": "Ešte nebola skontrolovaná", - "statusChecking": "Kontrola aktualizácií", - "statusAvailable": "Verzia {{version}} je k dispozícii", - "statusDownloading": "Sťahovanie {{version}} ({{progress}} %)", - "statusReady": "Verzia {{version}} je pripravená. Reštartujte ju pre inštaláciu.", - "statusUpToDate": "Máte najnovšiu verziu", - "statusError": "Nepodarilo sa skontrolovať aktualizácie. Skúste to znova neskôr.", - "checkNow": "Skontrolovať teraz", "download": "Stiahnuť", "restart": "Reštartovať teraz", "later": "Neskôr", @@ -269,26 +252,11 @@ "terminal": "Terminál", "close": "Zavrieť", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopírovať heslo", - "copySudoPassword": "Kopírovať sudo heslo", - "passwordCopied": "Heslo skopírované do schránky", - "failedToCopyPassword": "Kopírovanie hesla zlyhalo", - "refreshTab": "Obnoviť pripojenie", - "renameTab": "Premenovať kartu", "dashboard": "Nástenka", "quickConnect": "Rýchle pripojenie", - "openAsTabHint": "Ctrl+klik alebo stredné tlačidlo myši pre otvorenie ako karta", - "openAsTab": "Otvoriť ako kartu", - "openInRightDock": "Otvoriť v pravom paneli", - "closeRightDock": "Zavrieť pravý panel", - "toggleRightDock": "Prepnúť pravý panel", "hosts": "Hostitelia", "credentials": "Poverenia", "connections": "Pripojenia", - "keepSideMenuOpen": "Nezavrieť ponuku", - "collapseSideMenu": "Zavrieť ponuku", - "roleAdministrator": "Správca", - "roleUser": "Používateľ", "sync": "Synchronizácia", "reconnectDisconnectedTerminals": "Znova pripojiť všetky odpojené terminály", "reconnectingTerminals_one": "Znova pripájam {{count}} terminál", @@ -302,32 +270,13 @@ "reconnectTerminalsFailed_other": "Nepodarilo sa spustiť znovupripojenie {{count}} terminálu", "fullscreenUnsupported": "Tento prehliadač nepodporuje režim na celú obrazovku", "fullscreenFailed": "Nepodarilo sa prepnúť režim na celú obrazovku", - "resetSidebarWidth": "Obnoviť šírku", - "collapseSidebar": "Zavrieť bočný panel", - "openSidebar": "Otvoriť bočný panel", "confirmCloseHost": "Zavrieť {{host}}?", - "enterFullscreen": "Režim na celú obrazovku (Ctrl+Shift+F)", - "exitFullscreen": "Ukončiť režim na celú obrazovku (Ctrl+Shift+F)", - "group": { - "objects": "Moje", - "tools": "Nástroje", - "system": "Systém" - }, - "searchEverything": "Hľadať hostiteľov, karty a akcie", - "search": "Hľadať", "hiddenCount_one": "{{count}} skrytý", "hiddenCount_few": "{{count}} skryté", "hiddenCount_many": "{{count}} skrytých", "hiddenCount_other": "{{count}} skrytých", - "showInRail": "Zobraziť v bočnom paneli", - "moveUp": "Posunúť hore", - "moveDown": "Posunúť dole", - "resetRailOrder": "Obnoviť poradie", - "hideFromRail": "Skryť z bočného panela", - "openSettings": "Otvoriť nastavenia", "settings": "Nastavenia", "manage": "Spravovať", - "mobileNavigation": "Navigácia", "plugins": "Pluginy" }, "hosts": { @@ -943,35 +892,14 @@ "importSummary": "Import dokončený: {{imported}} importovaných, {{updated}} aktualizovaných, {{failed}} zlyhalých", "importHostsFailed": "Nepodarilo sa importovať hostiteľov" }, - "commandPalette": { - "searchPlaceholder": "Hľadať hostiteľov, príkazy alebo nastavenia...", - "quickActions": "Rýchle akcie", - "navigation": "Navigácia", - "orShortcut": "alebo", - "addNewHost": "Pridať nový hostiteľ", - "adminSettings": "Nastavenia správcu", - "addCredential": "Pridať poverenie", - "recentActivity": "Nedávna aktivita", - "serversAndHosts": "Servery a hostitelia", - "noHostsFound": "Nenašli sa žiadni hostitelia zodpovedajúci „{{search}}“", - "links": "Odkazy", - "navigate": "Navigácia", - "select": "Vybrať", - "pluginActions": "Ďalšie akcie", - "noTargetTab": "Nie je otvorený žiadny terminálový záložka", - "documentation": "Dokumentácia" - }, "splitScreen": { "title": "Rozdelená obrazovka", "defaultLabel": "Rozdelenie {{number}}", "splitRight": "Rozdeliť vpravo", "splitDown": "Rozdeliť dole", - "addToSplit": "Pridať do {{split}}", "paneEmptyItem": "Panel {{index}}: prázdny", "paneItem": "Panel {{index}}: {{label}}", "paneNumber": "Panel {{index}}", - "newPaneRight": "Nový panel vpravo", - "newPaneBelow": "Nový panel dole", "emptyTitle": "Prázdny panel", "emptyHint": "Vyberte si, čo sa má tu zobraziť. Kým je tento panel vybraný, všetko, čo otvoríte z bočného panela, sa otvorí aj tu.", "openTabs": "Otvorené záložky", @@ -988,7 +916,6 @@ "clearPane": "Vyprázdniť tento panel", "zoom": "Zväčšiť panel", "unzoom": "Obnoviť rozloženie", - "unsplit": "Zrušiť rozdelenie", "layouts": "Rozloženia", "applyLayout": "Zmeniť rozloženie", "maxPanes_one": "Rozdelenie môže obsahovať až {{count}} panel", @@ -999,8 +926,6 @@ "dropHere": "Pretiahnuť pre zobrazenie tu", "paneActions": "Akcie panela", "dividerHint": "Ťahaním zmeníte veľkosť. Dvojklikom zarovnate.", - "openInSplit": "Otvoriť v rozdelení", - "openInNewSplit": "Nové rozdelenie s aktuálnou záložkou", "shortcuts": "Klávesové skratky", "shortcutNavigate": "Presúvanie medzi panelmi", "presets": { @@ -1014,23 +939,6 @@ "grid6": "Mriežka šiestich" } }, - "connections": { - "noConnections": "Žiadne pripojenia", - "noConnectionsDesc": "Otvorte terminál, správcu súborov alebo vzdialenú plochu, aby sa pripojenia zobrazili tu", - "connectedFor": "Pripojené po dobu {{duration}}", - "connected": "Pripojené", - "disconnected": "Odpojené", - "reconnect": "Znova pripojiť", - "sectionOpen": "Otvorené", - "sectionBackground": "Na pozadí", - "backgroundDesc": "Relácie pretrvajú {{minutes}} minút po odpojení a je možné sa znova pripojiť.", - "expiresIn": "Vyprší o {{duration}}", - "search": "Vyhľadať pripojenia...", - "noSearchResults": "Žiadne pripojenia nevyhovujú vášmu vyhľadávaniu", - "rename": "Premenovať reláciu", - "forgetConfirm": "Ukončiť reláciu na pozadí pre {{name}}?", - "forget": "Ukončiť reláciu" - }, "sshAuth": { "totpRequired": "Vyžaduje sa dvojfaktorové overenie", "totpCodeLabel": "Overovací kód", @@ -1168,65 +1076,14 @@ "placeholders": { "keyPassword": "heslo k kľúču", "pastePrivateKey": "Sem vložte svoj súkromný kľúč...", - "enterPassword": "Zadajte svoje heslo", - "apiKeyName": "napr. CI Pipeline", - "credentialName": "napr. Produkčný SSH kľúč", - "optionalDetails": "Voliteľné podrobnosti...", - "sshUsername": "napr. root alebo deploy", - "hostAddress": "10.0.0.1 alebo example.com", - "hostName": "napr. Produkčný webový server" + "enterPassword": "Zadajte svoje heslo" }, "dashboard": { - "title": "Prehľad", - "github": "GitHub", - "reportBug": "Nahlásiť chybu", - "discord": "Discord", - "docs": "Dokumentácia", - "donate": "Prispieť", - "serverOverview": "Prehľad servera", - "version": "Verzia", "updateAvailable": "Dostupná aktualizácia", - "beta": "Beta", - "uptime": "Doba prevádzky", - "database": "Databáza", - "healthy": "Bez problémov", - "error": "Chyba", - "totalHosts": "Celkový počet hostov", - "totalCredentials": "Celkový počet poverení", - "recentActivity": "Nedávna aktivita", - "reset": "Obnoviť", - "noRecentActivity": "Žiadna nedávna aktivita", - "quickActions": "Rýchle akcie", - "addHost": "Pridať hosta", - "addCredential": "Pridať poverenie", - "adminSettings": "Nastavenia administrátora", - "userProfile": "Profil používateľa", - "serverStats": "Štatistiky servera", - "customizeLayout": "Prispôsobiť prehľad", - "justNow": "práve teraz" + "beta": "Beta" }, "dashboardTab": { "stable": "STABILNÁ", - "registerNewServer": "Registrovať nový server", - "storeSshKeysOrPasswords": "Ukladať SSH kľúče alebo heslá", - "manageUsersAndRoles": "Spravovať používateľov a role", - "manageYourAccount": "Spravovať svoj účet", - "hostStatus": "Stav hosta", - "noHostsConfigured": "Nie sú nakonfigurovaní žiadni hostia", - "checking": "SKÚŠAM", - "commandPalette": "Paleta príkazov", - "done": "Hotovo", - "clear": "Vymazať", - "dragToResizeColumns": "Ťahajte pre zmenu veľkosti stĺpcov", - "hostsAvailable": "Dostupné hosty", - "removeSection": "Odstrániť sekciu", - "addSection": "Pridať sekciu", - "allSectionsShown": "Všetko je už na dashboardi.", - "fromPlugins": "Z pluginov", - "dropHere": "Sem presuňte sekciu", - "dragToReorder": "Ťahajte sekcie pre ich preusporiadanie", - "clearActivityConfirm": "Vymazať vašu nedávnu aktivitu?", - "resetConfirm": "Obnoviť dashboard na predvolaný rozloženie?", "onlineCount_one": "{{count}} online", "onlineCount_few": "{{count}} online", "onlineCount_many": "{{count}} online", @@ -1237,432 +1094,55 @@ "hostCount_other": "{{count}} hostov" }, "admin": { - "sectionGeneral": "Všeobecné", - "sectionUsers": "Používatelia", - "sectionSessions": "Sessie", - "sectionRoles": "Role", - "sectionDatabase": "Databáza", - "sectionApiKeys": "API kľúče", - "sectionAuditLog": "Auditný log", - "sectionSsl": "HTTPS certifikát", - "sectionBranding": "White Label", - "brandingAppName": "Názov aplikácie", - "brandingAppNameDesc": "Zobrazené na prihlasovacej obrazovke a v karte prehliadača. Nechajte prázdne pre použitie \"Termix\".", - "brandingTagline": "Heslo", - "brandingTaglineDesc": "Zobrazené pod názvom aplikácie na prihlasovacej obrazovke. Nechajte prázdne pre použitie predvoleného hesla.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG alebo WEBP, do 750 KB. Nahradí predvolenú ikonu na prihlasovacej obrazovke a v karte prehliadača.", - "brandingLogoUpload": "Nahrať logo", - "brandingLogoReset": "Obnoviť na predvolené", - "brandingLogoInvalid": "Neplatný obrázok. Použite súbor PNG, JPEG alebo WEBP do 750 KB.", - "brandingSaved": "Nastavenia branding sú uložené", - "brandingSaveFailed": "Nepodarilo sa uložiť nastavenia branding", - "sslDescription": "Certifikát, ktorý Termix poskytuje cez HTTPS. Nahrajte svoj vlastný tu, alebo získajte a obnovte jeden od Let's Encrypt v sekcii ACME Certifikáty.", - "sslDocsLink": "Zobraziť dokumentáciu SSL", - "sslCertStatus": "Stav certifikátu", - "sslCertStatusNone": "Žiadny certifikát", - "sslCertStatusValid": "Platný", - "sslCertStatusExpiring": "Vyprší čoskoro", - "sslCertStatusExpired": "Vypršal", - "sslCertExpiresAt": "Vyprší {{date}}", - "sslInfoNote": "Po vydání alebo nahraní certifikátu, Termix automaticky povolí HTTPS na SSL_PORT (predvolene 8443) okrem existujúceho HTTP portu. Uistite sa, že tento port je publikovaný/priradený k tomuto kontajneru, aby bol dostupný.", - "sslManualCert": "Certifikát (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Súkromný kľúč (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Vložte svoj existujúci certifikát a súkromný kľúč, vrátane úplného reťazca, ak to vyžaduje vaša CA.", - "sslManualUpload": "Nahrať & Nainštalovať certifikát", - "sslManualUploadLoading": "Nahrávanie certifikátu...", - "sslManualUploadSuccess": "Certifikát bol úspešne nahraný a nainštalovaný", - "sslManualUploadFailed": "Nahrávanie certifikátu zlyhalo", - "sslManualRequiresFields": "Certifikát a súkromný kľúč sú povinné", - "auditLogTotal": "{{total}} celkových záznamov", - "auditLogEmpty": "Nenašli sa žiadne záznamy auditného logu", - "auditLogSuccess": "Úspech", - "auditLogFailed": "Zlyhanie", - "auditLogClearFilters": "Vymazať filtre", - "auditLogPage": "Strana {{page}} z {{totalPages}} ({{total}} celkom)", - "auditLogIp": "IP", - "auditLogResourceId": "ID zdroja", - "auditLogFilterUser": "Používateľ", - "auditLogFilterAction": "Akcia", - "auditLogFilterResourceType": "Typ zdroja", - "auditLogFilterStatus": "Stav", - "auditLogFilterFrom": "Od", - "auditLogFilterTo": "Do", - "auditLogFilterAll": "Všetky", - "allowRegistration": "Povoliť registráciu používateľov", - "allowRegistrationDesc": "Umožniť novým používateľom samostatnú registráciu pomocou používateľského mena a hesla", - "allowPasswordLogin": "Povoliť prihlásenie heslom", - "allowPasswordLoginDesc": "Prihlásenie pomocou používateľského mena a hesla", - "externalAutoProvision": "Automatické vytváranie externých účtov", - "externalAutoProvisionDesc": "Vytvoriť účet pri prvom prihlásení cez externú metódu, ako je SSO alebo LDAP. Ak je vypnuté, prihlásiť sa týmto spôsobom môžu iba používatelia, ktorí už majú účet", - "secondFactorAfterExternalLogin": "Vyžiadať druhý faktor po externom prihlásení (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Ak je vypnuté, o druhý faktor sa požiada iba po prihlásení heslom a iných lokálnych prihláseniach, ako doteraz. Ak je zapnuté, vyžaduje sa po každej metóde prihlásenia, vrátane SSO a LDAP.", - "allowPasswordReset": "Povoliť obnovenie hesla", - "allowPasswordResetDesc": "Obnovovací kód cez Docker logy", - "auditForwardingTitle": "Posielanie do SIEM", - "auditForwardingDesc": "Odoslať kópiu každého záznamu auditu do externého zberača vo formáte NDJSON. Lokálne logy zostávajú primárnym zdrojom pravdy.", - "auditForwardingEnvNotice": "Presmerovanie je možné konfigurovať aj prostredníctvom environmentálnej premennej; URL adresa uložená tu má prednosť.", - "auditForwardingToken": "Bearer token (voliteľné)", - "auditForwardingTokenStored": "Bearer token (uložený)", - "auditForwardingSaved": "Nastavenia presmerovania auditu boli uložené", - "auditForwardingSaveError": "Nepodarilo sa uložiť nastavenia presmerovania auditu", - "sessionTimeout": "Časový limit relácie", - "hours": "hodín", - "sessionTimeoutRange": "Min 1 h, max 720 h", - "monitoringDefaults": "Predvolené hodnoty monitorovania", - "statusCheck": "Kontrola stavu", - "sec": "s", - "logLevel": "Úroveň logovania", "usersCount_one": "{{count}} používateľ", "usersCount_few": "{{count}} používatelia", "usersCount_many": "{{count}} používateľov", - "usersCount_other": "{{count}} používateľov", - "searchUsers": "Vyhľadať používateľov...", - "noUsers": "Žiadni používatelia", - "noUsersMatch": "Žiadny používateľ nevyhovuje vášmu vyhľadávaniu", - "pageOf": "Strana {{page}} z {{total}}", - "createUser": "Vytvoriť", - "newRole": "Nová rola", - "roleName": "Názov", - "roleDisplayName": "Zobrazovaný názov", - "roleDescription": "Popis", "rolesCount_one": "{{count}} rola", "rolesCount_few": "{{count}} role", "rolesCount_many": "{{count}} rolí", - "rolesCount_other": "{{count}} rolí", - "createRole": "Vytvoriť", - "creating": "Vytváranie...", - "exportDatabase": "Exportovať databázu", - "exportDatabaseDesc": "Stiahnuť prenosnú zálohu SQLite všetkých hostiteľov, poverení a nastavení", - "export": "Exportovať", - "exporting": "Exportuje sa...", - "importDatabase": "Importovať databázu", - "importDatabaseDesc": "Obnoviť z prenosnej zálohy .sqlite na ľubovoľnom backendi databázy", - "importDatabaseSelected": "Vybraný: {{name}}", - "selectFile": "Vybrať súbor", - "changeFile": "Zmeniť", - "import": "Importovať", - "importing": "Importuje sa...", "apiKeysCount_one": "{{count}} kľúč", "apiKeysCount_few": "{{count}} kľúče", "apiKeysCount_many": "{{count}} kľúčov", - "apiKeysCount_other": "{{count}} kľúčov", - "apiKeysDocsLink": "Zobraziť dokumentáciu", - "apiKeysCliHint": "Použite API kľúč s Termix CLI na správu serverov z vášho terminálu.", - "apiKeysCliLink": "Zobraziť dokumentáciu CLI", - "newApiKey": "Nový API kľúč", - "apiKeyCreatedWarning": "Kľúč vytvorený – skopírujte ho teraz, už sa nezobrazí znova.", - "apiKeyName": "Názov", - "apiKeyUser": "Používateľ", - "apiKeySelectUser": "Vyberte používateľa...", - "apiKeyExpiresAt": "Platnosť do", - "createKey": "Vytvoriť kľúč", - "apiKeyNoExpiry": "Bez expirácie", - "revokedBadge": "ZRUŠENÝ", - "authTypeDual": "Duálne overenie", - "authTypeExternal": "Externé", - "authTypeLocal": "Lokálne", - "adminStatusAdministrator": "Administrátor", - "adminStatusRegularUser": "Bežný používateľ", - "adminBadge": "ADMIN", - "systemBadge": "SYS", - "customBadge": "VLASTNÝ", - "youBadge": "VY", "sessionsActive_one": "{{count}} aktívny", "sessionsActive_few": "{{count}} aktívne", "sessionsActive_many": "{{count}} aktívnych", - "sessionsActive_other": "{{count}} aktívnych", - "sessionActive": "Aktívne: {{time}}", - "sessionExpires": "Platnosť: {{time}}", - "revokeAll": "Všetky", - "revokeAllSessionsSuccess": "Všetky relácie používateľa boli zrušené", - "revokeAllSessionsFailed": "Nepodarilo sa zrušiť relácie", - "revokeSessionFailed": "Nepodarilo sa zrušiť reláciu", - "addRole": "Pridať rolu", - "noCustomRoles": "Nie sú definované žiadne vlastné roly", - "removeRoleFailed": "Nepodarilo sa odstrániť rolu", - "assignRoleFailed": "Nepodarilo sa priradiť rolu", - "userAdminAccess": "Administrátor", - "userAdminAccessDesc": "Plný prístup ku všetkým nastaveniam administrátora", - "userRoles": "Roly", - "revokeAllUserSessions": "Zrušiť všetky relácie", - "revokeAllUserSessionsDesc": "Vynútiť opätovné prihlásenie na všetkých zariadeniach", - "revoke": "Zrušiť", - "deleteUserWarning": "Odstránenie tohto používateľa je trvalé.", - "deleteUser": "Odstrániť {{username}}", - "deleting": "Odstraňuje sa...", - "deleteUserFailed": "Nepodarilo sa odstrániť používateľa", - "deleteUserSuccess": "Používateľ „{{username}}“ bol odstránený", - "deleteRoleSuccess": "Rola „{{name}}“ bola odstránená", - "revokeKeySuccess": "Kľúč „{{name}}“ bol zrušený", - "revokeKeyFailed": "Nepodarilo sa zrušiť kľúč", - "copiedToClipboard": "Skopírované do schránky", - "done": "Hotovo", - "createUserTitle": "Vytvoriť používateľa", - "createUserDesc": "Vytvorte nový lokálny účet.", - "createUserUsername": "Meno používateľa", - "createUserPassword": "Heslo", - "createUserPasswordHint": "Minimálne 6 znakov.", - "createUserEnterUsername": "Zadajte meno používateľa", - "createUserSubmit": "Vytvoriť používateľa", - "editUserTitle": "Spravovať používateľa: {{username}}", - "editUserDesc": "Upravte roly, stav administrátora, relácie a nastavenia účtu.", - "editUserUsername": "Meno používateľa", - "editUserAuthType": "Typ overenia", - "editUserAdminStatus": "Stav administrátora", - "editUserUserId": "ID používateľa", - "linkAccountTitle": "Prepojiť účty", - "linkAccountDesc": "Zlúčte externý účet {{username}} s existujúcim lokálnym účtom.", - "linkAccountDescLocal": "Prepojte lokálny účet {{username}} s existujúcim účtom iba pre externé overenie.", - "linkAccountWarningTitle": "Toto spôsobí:", - "linkAccountEffect1": "Zmazať účet určený len pre externé prihlásenie", - "linkAccountEffect2": "Pridať jeho externé prihlásenie k cieľovému účtu", - "linkAccountEffect3": "Povoliť prihlásenie pomocou externého poskytovateľa aj hesla", - "linkAccountTargetUsername": "Meno používateľa lokálneho účtu", - "linkAccountTargetPlaceholder": "Zadajte meno používateľa lokálneho účtu, ku ktorému chcete prepojiť", - "linkAccountExternalUsername": "Meno používateľa externého účtu", - "linkAccountExternalPlaceholder": "Zadajte meno používateľa účtu určeného len pre externé prihlásenie, ktorý chcete zlúčiť", - "linkAccountExternalNotFound": "Nenašiel sa žiadny účet určený len pre externé prihlásenie s týmto menom používateľa", - "linkAccounts": "Prepojiť účty", - "linkAccountSuccess": "Účty boli úspešne prepojené", - "linkAccountFailed": "Prepojenie účtov zlyhalo", - "linkAccountInProgress": "Prepojenie...", - "unlinkAccountTitle": "Odpojiť externé prihlásenie", - "unlinkAccountDesc": "Odstrániť externé prihlásenie z účtu {{username}}. Používateľ sa bude môcť prihlásiť iba pomocou hesla.", - "unlinkAccountWarning": "Týmto sa z tohto účtu odstráni externé prihlásenie. Používateľ musí mať nastavené heslo, aby sa mohol naďalej prihlasovať.", - "unlinkAccount": "Odpojiť externé prihlásenie", - "unlinkAccountInProgress": "Odpojovanie...", - "unlinkAccountSuccess": "Externé prihlásenie bolo odpojené", - "unlinkAccountFailed": "Odpojenie externého prihlásenia zlyhalo", - "updateRegistrationFailed": "Aktualizácia nastavenia registrácie zlyhala", - "updatePasswordLoginFailed": "Aktualizácia nastavenia prihlásenia pomocou hesla zlyhala", - "updateSecondFactorAfterExternalLoginFailed": "Aktualizácia nastavenia druhého faktora zlyhala", - "updatePasswordResetFailed": "Aktualizácia nastavenia obnovenia hesla zlyhala", - "sessionTimeoutRange2": "Časový limit relácie musí byť medzi 1 a 720 hodinami", - "sessionTimeoutSaved": "Časový limit relácie bol uložený", - "sessionTimeoutSaveFailed": "Uloženie časového limitu relácie zlyhalo", - "monitoringIntervalInvalid": "Neplatné hodnoty intervalu", - "monitoringSaved": "Nastavenia monitorovania boli uložené", - "monitoringSaveFailed": "Uloženie nastavení monitorovania zlyhalo", - "logLevelUpdateFailed": "Aktualizácia úrovne protokolovania zlyhala", - "createUserRequired": "Meno používateľa a heslo sú povinné", - "createUserPasswordTooShort": "Heslo musí mať aspoň 6 znakov", - "createUserSuccess": "Používateľ „{{username}}“ bol vytvorený", - "createUserFailed": "Vytvorenie používateľa zlyhalo", - "updateAdminStatusFailed": "Aktualizácia stavu administrátora zlyhala", - "allSessionsRevoked": "Všetky relácie boli odvolané", - "revokeSessionsFailed": "Odvolanie relácií zlyhalo", - "manageUserData": "Spravovať údaje používateľa", - "backToUsers": "Späť na používateľov", - "manageTabAccount": "Účet", - "manageTabHosts": "Hostitelia", - "manageTabCredentials": "Prihlasovacie údaje", - "manageTabSessions": "Relácie", - "manageTabDanger": "Nebezpečné", - "manageEditorBack": "Späť na údaje používateľa {{username}}", - "dataLockedBadge": "UZAMKNUTÉ", - "dataLockedNotice": "Údaje používateľa {{username}} zostávajú zamknuté do jeho ďalšieho prihlásenia. Jeho hostitelia, prihlasovacie údaje a úryvky kódu nie je možné zobraziť ani upravovať.", - "resetPasswordTitle": "Obnoviť heslo", - "resetPasswordExternalOnly": "Tento používateľ sa prihlasuje cez externého poskytovateľa a nemá nastavené heslo.", - "resetPasswordPlaceholder": "Nové heslo", - "resetPasswordBtn": "Obnoviť", - "resetPasswordWorking": "Obnovovanie...", - "resetPasswordSuccess": "Heslo bolo obnovené", - "resetPasswordSuccessWiped": "Heslo bolo obnovené. Šifrované údaje používateľa boli vymazané.", - "resetPasswordFailed": "Obnovenie hesla zlyhalo", - "resetPasswordConfirmWipe": "Používateľ {{username}} sa neprihlásil od aktualizácie šifrovania, preto jeho údaje nie je možné obnoviť. Obnovenie teraz vymaže jeho hostiteľov, prihlasovacie údaje a úryvky kódu. Pokračovať?", - "manageApiKeys": "Kľúče API", - "apiKeyNamePlaceholder": "Názov kľúča", - "apiKeyCopyNotice": "Tento kľúč skopírujte teraz, už sa nezobrazí znova.", - "noApiKeysForUser": "Žiadne API kľúče", - "apiKeyDeleteFailed": "Nepodarilo sa odstrániť API kľúč", - "exportUserData": "Export dát", - "exportUserDataDesc": "Stiahnite si hostov, poverenia a dáta správcu súborov tohto používateľa ako JSON. Tajomstvá sú dešifrované.", - "exportUserDataSuccess": "Dáta používateľa exportované", - "exportUserDataFailed": "Nepodarilo sa exportovať dáta používateľa", "hostsCount_one": "{{count}} hostiteľ", "hostsCount_few": "{{count}} hostitelia", "hostsCount_many": "{{count}} hostiteľov", "hostsCount_other": "{{count}} hostiteľov", - "addHostForUser": "Pridať hosta", - "noHostsForUser": "Tento používateľ nemá žiadnych hostov", - "connectToHost": "Pripojiť", - "deleteHostConfirm": "Odstrániť hosta „{{name}}“ patriaciho používateľovi {{username}}?", - "hostDeletedSuccess": "Host odstránený", - "hostDeleteFailed": "Nepodarilo sa odstrániť hosta", "credentialsCount_one": "{{count}} poverenie", "credentialsCount_few": "{{count}} poverenia", "credentialsCount_many": "{{count}} poverení", "credentialsCount_other": "{{count}} poverení", - "addCredentialForUser": "Pridať poverenie", - "noCredentialsForUser": "Tento používateľ nemá žiadne poverenia", - "deleteCredentialConfirm": "Odstrániť poverenie „{{name}}“ patriace používateľovi {{username}}?", - "credentialDeletedSuccess": "Poverenie odstránené", - "credentialDeleteFailed": "Nepodarilo sa odstrániť poverenie", - "noSessionsForUser": "Žiadne aktívne relácie", - "deleteSuccessorLabel": "Prevzatie hostov a poverení na", - "deleteSuccessorMe": "Mňa (odstraňujúci administrátor)", - "deleteSuccessorNone": "Nikoho, odstrániť ich", - "deleteSuccessorDesc": "Všetko, čo tento používateľ zdieľal, bude fungovať pod novým vlastníkom; výberom nikoho sa odstránia jeho hostia, poverenia a zdieľania.", - "deleteUserDangerDesc": "Trvalo odstrániť používateľa {{username}} a všetky jeho dáta (hostia, poverenia, útržky, históriu). Tuto akciu nie je možné vrátiť späť.", - "deleteUserConfirm": "Trvalo odstrániť používateľa {{username}} a všetky jeho dáta?", - "deleteUserAdminBlocked": "Pred odstránením tohto používateľa odstráňte jeho administrátorský status.", - "createRoleRequired": "Meno a zobrazované meno sú povinné", - "createRoleSuccess": "Rola „{{name}}“ vytvorená", - "createRoleFailed": "Nepodarilo sa vytvoriť rolu", - "apiKeyNameRequired": "Názov kľúča je povinný", - "apiKeyUserRequired": "ID používateľa je povinné", - "apiKeyCreatedSuccess": "API kľúč „{{name}}“ vytvorený", - "apiKeyCreateFailed": "Nepodarilo sa vytvoriť API kľúč", - "exportSuccess": "Databáza úspešne exportovaná", - "exportFailed": "Export databázy zlyhal", - "importSelectFile": "Najprv vyberte súbor", - "importCompleted": "Import dokončený: {{total}} položiek importovaných, {{skipped}} preskočených", - "importFailed": "Import zlyhal: {{error}}", - "importError": "Import databázy zlyhal", - "sectionHostDefaults": "Predvolené hodnoty hostov", "rolePermissions": { "count_one": "{{count}} oprávnenie", "count_few": "{{count}} oprávnenia", "count_many": "{{count}} oprávnení", - "count_other": "{{count}} oprávnení", - "editAction": "Upraviť oprávnenia", - "loadError": "Nepodarilo sa načítať katalóg oprávnení", - "saved": "Oprávnenia role uložené", - "saveError": "Nepodarilo sa uložiť oprávnenia role", - "save": "Uložiť", - "saving": "Ukladá sa...", - "pluginDisabled": "Plugin je deaktivovaný", "groups": { "hosts": "Hostia", "credentials": "Poverenia", "admin": "Administrácia" } - }, - "notificationPrivateEndpoints": "Povolené súkromné hosty pre upozornenia", - "notificationPrivateEndpointsDesc": "Presné súkromné hosty, ktoré môžu kontaktovať kanály upozornení. Oddelte ich čiarkami.", - "updateNotificationEndpointsFailed": "Nepodarilo sa aktualizovať povolený zoznam koncových bodov upozornení", - "secondFactorsSectionTitle": "Druhé faktory", - "secondFactorsNone": "Žiadne druhé faktory nie sú zaregistrované", - "secondFactorUnavailable": "Nedostupné", - "resetSecondFactors": "Obnoviť druhé faktory", - "resetSecondFactorsConfirm": "Odstrániť všetky druhé faktory pre používateľa {{username}}? Môžu sa prihlásiť pomocou hesla alebo SSO a zaregistrovať sa znova.", - "secondFactorsResetSuccess": "Druhé faktory boli obnovené", - "secondFactorsResetFailed": "Obnovenie druhých faktorov zlyhalo", - "passwordLoginForced": "Prihlásenie pomocou hesla je vypnuté, ale žiadna iná metóda prihlásenia nie je povolená, takže zostáva zatiaľ zapnuté. Nikto nebude zamknutý.", - "sslNotRenewed": "Tento certifikát sa automaticky obnovuje. Vyprší dňa {{date}}. Zapnite automatickú obnovu v sekcii ACME Certifikáty alebo nahrajte nový certifikát pred týmto dátumom.", - "sslSelfSigned": "Samopodpísaný certifikát vytvorený aplikáciou Termix. Prehľadače budú upozorňovať na jeho nebezpečenstvo.", - "sslRenewedBy": "Automaticky obnovené pluginom {{plugin}}", - "sslIssuer": "Vydal {{issuer}}", - "sslNames": "Pokrýva {{names}}", - "sslManualTitle": "Nahrať certifikát", - "updateExternalAutoProvisionFailed": "Aktualizácia nastavenia automatického vytvárania zlyhala", - "hostTags": "Preddefinované značky hostiteľa", - "hostTagsDesc": "Značky, ktoré vidia všetci používatelia ako návrhy v editore hostiteľa. Stlačte Medzerník alebo Enter na pridanie. Odstránenie značky tu ju neodstráni z hostiteľov.", - "hostTagsError": "Nepodarilo sa načítať alebo uložiť návrhy značiek hostiteľa.", - "revokeAllSessionsConfirm": "Odhlásiť používateľa {{username}} všade?", - "revokeSessionConfirm": "Odhlásiť túto reláciu?", - "revokeSession": "Odhlásiť", - "deleteRoleConfirm": "Odstrániť rolu {{name}}?", - "revokeKeyConfirm": "Zrušiť API kľúč {{name}}?", - "revokeKey": "Zrušiť" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Kde", - "who": "Kto", - "hostLabel": "Hostiteľ", - "hostPlaceholder": "192.168.1.1 alebo example.com", - "portLabel": "Port", - "usernameLabel": "Meno používateľa", - "usernamePlaceholder": "meno_používateľa", - "authLabel": "Overenie", - "passwordLabel": "Heslo", - "passwordPlaceholder": "heslo", - "privateKeyLabel": "Súkromný kľúč", - "privateKeyPlaceholder": "Vložiť súkromný kľúč...", - "credentialLabel": "Poverenie", - "credentialPlaceholder": "Vybrať uložené poverenie", - "protocolLabel": "Protokol", - "domainLabel": "Doména", - "domainPlaceholder": "voliteľné", - "connectToAction": "Pripojiť sa k {{name}}", - "sshProtocol": "SSH", - "noTarget": "Nič nainštalované sa nedokáže pripojiť k tomuto typu hostiteľa" + "usernameLabel": "Meno používateľa" }, "keybindings": { - "description": "Priradiť klávesy k akciám v termináli a aplikácii alebo zmeniť vstavané skratky.", - "defaultsHeading": "Vstavané skratky", - "fixedHeading": "Skratky aplikácie", - "fixed": { - "splitRight": "Rozdeliť doprava", - "splitDown": "Rozdeliť nadol", - "zoomPane": "Zväčšiť zameraný panel", - "navigatePane": "Presun medzi panelmi", - "nextTab": "Ďalší záložka", - "previousTab": "Predchádzajúca záložka", - "jumpTab": "Preskočiť na záložku", - "previousView": "Späť na predchádzajúci pohľad bočného panela", - "fullscreen": "Prepnúť celú obrazovku" - }, - "customHeading": "Vlastné skratky", - "addBinding": "Pridať skratku", - "addBindingTitle": "Pridať skratku", - "editBindingTitle": "Upraviť skratku", - "loading": "Načítava sa...", - "noCustomBindings": "Zatiaľ žiadne vlastné skratky", - "defaultBadge": "Predvolené", - "customizedBadge": "Prispôsobené", - "customize": "Prispôsobiť", - "resetToDefault": "Obnoviť predvolené", - "resetAllToDefaults": "Obnoviť všetky na predvolené", - "cancel": "Zrušiť", - "saveBinding": "Uložiť klávesovú skratku", - "saveError": "Nepodarilo sa uložiť klávesové skratky", - "pressKeysToRecord": "Kombinácia klávesov", - "pressKeysPlaceholder": "Kliknite a stlačte klávesy", - "recording": "Stlačte klávesy...", - "comboRequiredError": "Najprv stlačte kombináciu klávesov", - "conflictWarning": "Táto kombinácia je už priradená k {{combo}}. Uložením sa spustí obe akcie.", - "actionLabel": "Akcia", "actionNextTab": "Prepnúť na ďalšiu kartu", "actionPreviousTab": "Prepnúť na predchádzajúcu kartu", "actionOpenCommandPalette": "Otvoriť rýchle vyhľadávanie", - "actionReconnectSession": "Znova pripojiť aktuálnu reláciu", - "unavailableAction": "{{type}} (nedostupné)", - "actionRequiredError": "Najprv vyberte akciu", - "deleteConfirm": "Odstrániť toto priradenie klávesov?", - "resetAllConfirm": "Obnoviť všetky priradenia klávesov na predvolené?" + "actionReconnectSession": "Znova pripojiť aktuálnu reláciu" }, "userProfile": { - "storageModeLocal": "Prehliadač", - "storageModeCloud": "Databáza", - "storageModeDescription": "Prehliadač ukladá nastavenia len v tomto prehliadači. Databáza synchronizuje údaje so serverom a načíta ich na akomkoľvek zariadení.", - "resetToDefaults": "Obnoviť predvolené hodnoty", - "resetToDefaultsSuccess": "Nastavenia boli obnovené na predvolené hodnoty.", - "storageModeSwitch": "Ukladanie preferencií", - "sectionAccount": "Účet", - "desktopProfileTitle": "Len toto zariadenie", - "desktopProfileDescription": "Tento profil existuje len na tomto zariadení a prihlasuje sa samostatne. Prepojte ho so serverom Termix, aby ste mohli používať rovnaké hostov a nastavenia na všetkých zariadeniach.", - "sectionInterface": "Rozhranie", - "interfacePresetDesc": "Koľko detailov Termix zobrazuje. Všetky funkcie zostávajú dostupné.", "preset_simple": "Jednoduché", "preset_simple_desc": "Len základné funkcie.", "preset_balanced": "Vyvážené", "preset_balanced_desc": "Štandardné rozloženie.", "preset_advanced": "Pokročilé", "preset_advanced_desc": "Všetko zapnuté, husto zabalené.", - "presetClearOverrides": "Obnoviť všetky", - "presetOverridesTitle": "Prispôsobené", - "presetRevertArea": "Vrátiť späť", - "presetConfirmTitle": "Prepnúť na {{preset}}?", - "presetConfirmDesc": "Tým sa obnoví bočný panel, navigácia, rozloženie dashboardu, panel nástrojov terminálu a zobrazenie správcu súborov. Hostia, poverenia a domovská stránka zostanú nezmenené.", - "presetConfirmApply": "Aplikovať predvolenú sadu", - "runSetupAgainDesc": "Prejsť znovu prvým spustením nastavenia.", - "runSetupAgainButton": "Spustiť nastavenie", "uiArea_chrome": "Rám aplikácie", "uiArea_hostList": "Zoznam hostov", "uiArea_credentialList": "Zoznam poverení", @@ -1671,128 +1151,15 @@ "uiArea_terminal": "Terminál", "uiArea_fileManager": "Správca súborov", "uiArea_hostEditor": "Editor hostov", - "sectionAppearance": "Vzhľad", - "sectionSecurity": "Zabezpečenie", - "sectionApiKeys": "API kľúče", - "sectionData": "Údaje", - "usernameLabel": "Meno používateľa", - "roleLabel": "Rola", - "roleAdministrator": "Administrátor", - "authMethodLabel": "Metóda overovania", - "authMethodLocal": "Lokálne", - "twoFaLabel": "2FA", - "twoFaOn": "Zapnuté", - "twoFaOff": "Vypnuté", - "versionLabel": "Verzia", - "cliTitle": "Termix CLI", - "cliDescription": "Otvárajte terminály, spúšťajte príkazy a presúvajte súbory priamo z vášho shellu.", - "cliLearnMore": "Zistiť viac", - "deleteAccount": "Odstrániť účet", - "deleteAccountDescription": "Trvalo odstrániť váš účet", - "deleteButton": "Odstrániť", - "deleteAccountPermanent": "Táto akcia je trvalá a nemožno ju vrátiť späť.", - "deleteAccountWarning": "Všetky relácie, hostitelia, poverenia a nastavenia budú trvalo odstránené.", - "confirmPasswordDeletePlaceholder": "Zadajte svoje heslo na potvrdenie", "languageLabel": "Jazyk", "themeLabel": "Téma", "fontSizeLabel": "Veľkosť písma", "interfaceFontLabel": "Písmo rozhrania", "interfaceFontDescription": "Zmení písmo používateľského rozhrania aplikácie. Profily terminálu si zachovávajú vlastné nastavenia písma.", "accentColorLabel": "Akcentová farba", - "keyboardShortcuts": "Klávesové skratky", - "keyboardShortcutsDescription": "Prispôsobte skratky pre kopírovanie, vkladanie a príkazy v termináli", - "manageShortcuts": "Spravovať", - "commandPalette": "Paleta príkazov", - "commandPaletteDesc": "Povoliť klávesovú skratku", - "reopenTabsOnLogin": "Znova otvoriť karty pri prihlásení", - "reopenTabsOnLoginDesc": "Obnovte otvorené karty pri prihlásení alebo obnovení stránky, aj z iného zariadenia", - "confirmTabClose": "Potvrdiť zatvorenie karty", - "confirmTabCloseDesc": "Opýtať sa pred zatvorením kariet terminálu", - "showTabNumbers": "Zobraziť čísla kariet", - "showTabNumbersDesc": "Zobraziť číslo na každej karte pre ľahšiu identifikáciu", - "settingsAppRail": "Panel aplikácií", - "sidebarSettingsMoved": "Nastavenia zobrazenia bočného panela hostiteľov sa presunuli do panelu Prispôsobiť bočný panel, ktorý sa otvorí z panela nástrojov Hostitelia.", - "showHostTags": "Zobraziť štítky hostiteľov", - "showHostTagsDesc": "Zobraziť štítky v zozname hostiteľov", - "statusColors": "Skutočné farby stavu", - "statusColorsDesc": "Použiť zelenú/červenú farbu pre stav online/offline namiesto akcentovej farby", - "pinAppRail": "Pripnúť panel aplikácií", - "pinAppRailDesc": "Nechať ľavý bočný panel aplikácií stále rozbalený namiesto rozbalenia pri najatí", - "expandAppRailOnHover": "Rozbaliť panel aplikácií pri najatí", - "expandAppRailOnHoverDesc": "Povoliť rozbalenie ľavého bočného panela aplikácií pri najatí kurzorom", - "appRailHoverPushesContent": "Posunúť obsah pri rozšírení", - "appRailHoverPushesContentDesc": "Uvoľniť miesto pre rozšírený panel namiesto jeho otvorenia nad stránkou. Otvorené relácie, ako napríklad vzdialená plocha, sa pri každom rozšírení zmenšia.", - "showPinAppRailButton": "Zobraziť tlačidlo pre pripnutie panela aplikácií", - "showPinAppRailButtonDesc": "Zobraziť tlačidlo v paneli aplikácií na jeho pripnutie. Predvolene vypnuté.", - "settingsNavigation": "Navigácia", - "navigationTabsDesc": "Vyberte, ktoré karty sa zobrazia v paneli aplikácií", - "settingsUpdates": "Aktualizácie", - "disableUpdateChecks": "Zakázať kontrolu aktualizácií", - "disableUpdateChecksDesc": "Zastaviť kontrolu aktualizácií", - "changePassword": "Zmeniť heslo", - "currentPasswordLabel": "Aktuálne heslo", - "currentPasswordPlaceholder": "Aktuálne heslo", - "newPasswordLabel": "Nové heslo", - "newPasswordPlaceholder": "Nové heslo", - "confirmPasswordLabel": "Potvrdiť nové heslo", - "confirmPasswordPlaceholder": "Potvrdiť nové heslo", - "updatePassword": "Aktualizovať heslo", - "createApiKeyTitle": "Vytvoriť API kľúč", - "createApiKeyDescription": "Vygenerovať nový API kľúč pre programový prístup.", - "apiKeyNameLabel": "Názov", - "apiKeyNamePlaceholder": "napr. CI Pipeline", - "expiryDateLabel": "Dátum vypršania platnosti", - "optional": "voliteľné", - "cancel": "Zrušiť", - "createKey": "Vytvoriť kľúč", - "apiKeyCreatedWarning": "Kľúč vytvorený – skopírujte ho teraz, pretože sa už nezobrazí znova.", - "copyApiKey": "Kopírovať API kľúč", - "copiedToClipboard": "Skopírované do schránky", "apiKeyCount_one": "{{count}} kľúč", "apiKeyCount_few": "{{count}} kľúče", "apiKeyCount_many": "{{count}} kľúčov", - "apiKeyCount_other": "{{count}} kľúčov", - "newKey": "Nový kľúč", - "noApiKeys": "Zatiaľ žiadne API kľúče.", - "apiKeyActive": "Aktívny", - "apiKeyUsageHint": "Zahrňte svoj kľúč do", - "apiKeyUsageHintHeader": "hlavičky.", - "apiKeyPermissionsHint": "Kľúče dedia oprávnenia používateľa, ktorý ich vytvoril.", - "exportData": "Exportovať moje údaje", - "exportDataDesc": "Stiahnite si zálohu svojich hostiteľov, prihlasovacích údajov a nastavení na presunutie na iné zariadenie", - "export": "Exportovať", - "exporting": "Exportuje sa...", - "importData": "Importovať moje údaje", - "importDataDesc": "Obnovte svoje hostiteľy, prihlasovacie údaje a nastavenia zo záložného súboru .sqlite", - "importDataSelected": "Vybraný: {{name}}", - "selectFile": "Vybrať súbor", - "changeFile": "Zmeniť", - "import": "Importovať", - "importing": "Importuje sa...", - "exportSuccess": "Údaje boli úspešne exportované", - "exportFailed": "Export údajov zlyhal", - "importSelectFile": "Najprv vyberte súbor", - "importCompleted": "Import dokončený: {{total}} položiek importovaných, {{skipped}} preskočených", - "importFailed": "Import zlyhal: {{error}}", - "roleUser": "Používateľ", - "authMethodDual": "Duálne overenie", - "authMethodExternal": "Externé", - "done": "Hotovo", - "apiKeyNameRequired": "Názov kľúča je povinný", - "apiKeyCreated": "API kľúč „{{name}}“ vytvorený", - "apiKeyCreateFailed": "Vytvorenie API kľúča zlyhalo", - "apiKeyUser": "Používateľ", - "apiKeyExpires": "Platnosť končí", - "apiKeyRevoked": "API kľúč „{{name}}“ zrušený", - "apiKeyRevokeFailed": "Zrušenie API kľúča zlyhalo", - "passwordFieldsRequired": "Sú vyžadované aktuálne aj nové heslo", - "passwordMismatch": "Heslá sa nezhodujú", - "passwordTooShort": "Heslo musí mať aspoň 6 znakov", - "passwordUpdated": "Heslo bolo úspešne aktualizované", - "passwordUpdateFailed": "Aktualizácia hesla zlyhala", - "deletePasswordRequired": "Na vymazanie účtu je potrebné zadať heslo", - "deleteFailed": "Vymazanie účtu zlyhalo", - "deleting": "Vymazáva sa...", "colorPickerTooltip": "Otvoriť výber farby", "themeSystem": "Systém", "themeLight": "Svetlá", @@ -1803,18 +1170,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Prihlásený do {{server}}", - "linkedProfileDescription": "Toto zariadenie používa váš účet na serveri a udržiava kópiu vašich údajov, takže funguje aj offline.", - "manageSync": "Spravovať synchronizáciu", - "setUpSync": "Prepojiť so serverom", - "settingsTabsAndShortcuts": "Karty a klávesové skratky", - "onBetaTitle": "Používate beta verziu", - "onBetaDescription": "Ďakujeme za testovanie. Dajte nám vedieť, čo nefunguje.", - "tryBetaTitle": "Skúšajte nové funkcie skôr", - "tryBetaDescription": "Pripojte sa k beta programu v Aktualizáciách.", - "sendBetaFeedback": "Poslať spätnú väzbu k beta verzii", - "openUpdates": "Aktualizácie" + "themeGruvbox": "Gruvbox" } } }, @@ -2091,8 +1447,7 @@ "hasDependents": "{{name}} je potrebný pre {{list}}. Najprv ich vypnite alebo odinštalujte.", "missingDependencies": "{{name}} potrebuje {{list}}, ktorý nie je nainštalovaný.", "consentChanged": "Požiadavky tohto pluginu sa zmenili od posledného zobrazenia. Skontrolujte zoznam znova.", - "upload": "Nepodarilo sa prečítať {{name}}: {{error}}", - "developerMode": "Nepodarilo sa zmeniť režim vývojára: {{error}}" + "upload": "Nepodarilo sa prečítať {{name}}: {{error}}" }, "data": { "title": "Uložené údaje", @@ -2231,13 +1586,7 @@ "browsePlugins": "Prezerať pluginy", "loading": "Načítava sa", "developer": { - "title": "Režim vývojára pluginov", - "hint": "Umožňuje správcum inštalovať pluginy z .tmxplug súboru v karte Pluginy bez kontroly registra. Použite ho na vývoj a testovanie vlastných pluginov.", - "enableTitle": "Zapnúť režim vývojára?", - "enableBody": "Správcovia budú môcť inštalovať pluginy zo súborov, ktoré Termix nekontroloval. Plugin môže robiť čokoľvek, čo mu jeho schopnosti umožňujú, preto zapnite túto možnosť len počas vývoja alebo testovania pluginov.", - "enable": "Zapnúť", - "installFromFile": "Inštalovať zo súboru", - "signedOnly": "Je nastavené TERMIX_REQUIRE_SIGNED_PLUGINS, preto je inštalácia zo súboru zablokovaná." + "installFromFile": "Inštalovať zo súboru" }, "count": { "downloads_one": "{{formatted}} stiahnutie", @@ -2277,71 +1626,7 @@ "secretSet": "Nastavené", "secretNotSet": "Nenastavené", "secretReplace": "Nahradiť", - "pluginSettingsSaved": "Nastavenia uložené", - "pluginSettingsInvalid": "Niektoré nastavenia sa nepodarilo uložiť. Skontrolujte zvýraznené polia.", - "pluginSettingsSaveFailed": "Nepodarilo sa uložiť nastavenia", - "pluginSettingsLoadFailed": "Nepodarilo sa načítať nastavenia", - "featureUnavailable": "{{name}} je momentálne nedostupné. Tieto nastavenia sú uložené, ale nebudú mať účinok.", - "account": "Účet", - "security": "Bezpečnosť", - "apiKeys": "API kľúče", - "data": "Údaje a synchronizácia", - "interface": "Rozhranie", - "appearance": "Vzhľad", - "keybindings": "Klávesové skratky", - "adminGeneral": "Všeobecné", - "adminUsers": "Používatelia", - "adminSessions": "Relácie", - "adminRoles": "Role", - "adminHostDefaults": "Predvolené hodnoty hostiteľa", - "adminBranding": "Značka", - "adminDatabase": "Databáza", - "adminSsl": "SSL", - "adminApiKeys": "API kľúče", - "adminAuditLog": "Auditný záznam", - "bandYou": "Váš účet", - "bandApp": "Táto aplikácia", - "bandPlugins": "Pluginy", - "bandInstance": "Tento server", - "searchPlaceholder": "Vyhľadať nastavenia", - "noResults": "Žiadne nastavenia nezodpovedajú.", - "pages": "Stránky", - "instanceSettings": "Nastavenia servera", - "nothingHere": "Tu nie je čo nastavovať.", - "searchPage": "Vyhľadať na tejto stránke", - "noPageMatches": "Na tejto stránke sa nič nenašlo.", - "updates": { - "title": "Aktualizácie", - "betaProgram": "Beta program", - "betaIntro": "Bety sú predbežné verzie ďalšej verzie Termix. Vychádzajú v utorok a v piatok, keď je čo nové vyskúšať. Môžu obsahovať chyby a vaša spätná väzba pomáha zlepšiť stabilnú verziu.", - "termixBetas": "Termix bety", - "termixBetasHint": "Upozorňuj ma na nové bety, nielen na stabilné verzie.", - "runningBetaBuild": "Používate beta verziu. Ak chcete prejsť na stabilnú verziu, prepnete späť na stabilný obraz alebo inštalátor.", - "howToInstall": "Ako získať beta verziu", - "desktopInstall": "Stiahnite si beta inštalátor a nainštalujte ho nad túto verziu.", - "downloadBeta": "Stiahnuť {{version}}", - "dockerInstall": "Zmeňte svoj obraz na beta tag a reštartujte kontajner:", - "copy": "Kopírovať", - "copied": "Skopírované", - "copyFailed": "Nepodarilo sa skopírovať", - "learnMore": "Zistiť viac o betách", - "feedback": "Spätná väzba", - "feedbackHint": "Našli ste chybu alebo máte nápad? Priamo prejde vývojárom s vyplnenou vašou verziou.", - "sendFeedback": "Odoslať spätnú väzbu k beta verzii", - "releases": "Verzie", - "thisVersion": "Táto verzia", - "newestStable": "Najnovšia stabilná verzia", - "newestBeta": "Najnovšia beta verzia", - "noRelease": "Momentálne žiadna", - "pluginBetas": "Plugin bety", - "pluginBetasIntro": "Každý plugin môže používať bety samostatne. Ak chcete vyskúšať, otvorte ho a stlačte Skúsiť beta.", - "openPlugins": "Otvoriť pluginy", - "waitingForStable": "Späť na stabilnú verziu. Zostáva na {{version}} kým nebude stabilná verzia novšia.", - "backToStable": "Späť na stabilnú verziu", - "allPluginsBeta": "Používať bety pre všetky pluginy", - "allPluginsStable": "Všetky pluginy späť na stabilnú verziu", - "saveFailed": "Nepodarilo sa uložiť zmenu" - } + "featureUnavailable": "{{name}} je momentálne nedostupné. Tieto nastavenia sú uložené, ale nebudú mať účinok." }, "managerCard": { "refresh": "Obnoviť", @@ -2351,11 +1636,6 @@ "filter": "Filtrovať..." }, "sync": { - "server": "Termix server", - "account": "Účet", - "status": "Stav", - "never": "nikdy", - "justNow": "práve teraz", "minutesAgo_one": "pred {{count}} minútou", "minutesAgo_few": "pred {{count}} minútami", "minutesAgo_many": "pred {{count}} minútami", @@ -2364,76 +1644,11 @@ "hoursAgo_few": "pred {{count}} hodinami", "hoursAgo_many": "pred {{count}} hodinami", "hoursAgo_other": "pred {{count}} hodinami", - "actionFailed": "To nefungovalo. Skúste to znova.", - "unlinkedTitle": "Len toto zariadenie", - "unlinkedBody": "Termix funguje samostatne na tomto zariadení. Prepojte ho so svojím Termix serverom, aby ste mali všetko synchronizované.", - "unlinkedPointHosts": "Vaše hosty, poverenia, útržky a nastavenia vás nasledujú na každé zariadenie.", - "unlinkedPointOffline": "Všetko stále funguje, keď nie je možné dosiahnuť server, a neskôr sa synchronizuje.", - "unlinkedPointAccount": "Prihlásite sa pomocou svojho serverového účtu a hosty, ktoré vám ľudia zdieľali, sa tiež zobrazia tu.", - "linkButton": "Prepojiť so serverom", - "state": { - "syncing": "Synchronizácia", - "offline": "Server nie je dostupný", - "error": "Synchronizácia zastavená", - "signedOut": "Odhlásený", - "synced": "Synchronizované {{time}}" - }, "pending_one": "{{count}} zmena čaká na synchronizáciu", "pending_few": "{{count}} zmeny čakajú na synchronizáciu", "pending_many": "{{count}} zmien čaká na synchronizáciu", "pending_other": "{{count}} zmien čaká na synchronizáciu", - "signInAgain": "Prihlásiť sa znova", - "syncNow": "Synchronizovať teraz", - "unlink": "Odpojiť", - "unlinked": "Toto zariadenie už nie je prepojené", - "unlinkTitle": "Odpojiť toto zariadenie?", - "unlinkDescription": "Tým sa zastaví synchronizácia a odhlási sa zo servera. Hosty, ktoré vám zdieľali iní používatelia, sa z tohto zariadenia odstránia v každom prípade.", - "unlinkKeepTitle": "Zostať s mojimi dátami", - "unlinkKeepBody": "Vaše hosty, poverenia a nastavenia zostanú na tomto zariadení a budú fungovať nezávisle.", - "unlinkRemoveTitle": "Odstrániť synchronizované dáta", - "unlinkRemoveBody": "Všetko, čo prišlo zo servera, sa z tohto zariadenia odstráni. Zostanú len hosty, ktoré sú uložené iba na tomto zariadení.", - "conflictsTitle": "Konflikty", - "conflictsDescription": "Tieto položky boli zmenené súčasne na tomto zariadení aj na serveri. Používa sa verzia zo servera. Ak chcete odoslať svoju verziu na server, vyberte možnosť Zostať s mojimi dátami.", - "keepMine": "Zostať s mojimi dátami", - "keepServer": "Zostať s verziou zo servera", - "errorsTitle": "Nesynchronizované", - "errorsDescription": "Server tieto zmeny neprijal. Zostávajú na tomto zariadení.", - "errorPermission": "Váš účet na serveri nemá povolenie na vykonanie tejto zmeny.", - "retry": "Skúsiť znova", - "whatSyncs": "Čo sa synchronizuje", - "whatSyncsDescription": "Vypnite akúkoľvek položku, ktorú chcete ponechať iba na tomto zariadení.", - "coreGroup": "Termix", - "notOnServer": "Server túto položku nemá", - "notOnDevice": "Ešte nie na tomto zariadení", - "localOnlyHint": "Jednotlivé hosty alebo priečinky môžete ponechať iba na tomto zariadení aj v ich nastaveniach.", - "originTitle": "Kde začínajú pripojenia", - "originDescription": "Pripájajte sa k hostom z tohto zariadenia alebo cez server. Toto môžete zmeniť pre každého hosta zvlášť.", - "originLocal": "Toto zariadenie", - "originRemote": "Server", - "entities": { - "hosts": "Hosty", - "sshCredentials": "Poverenia", - "sshFolders": "Priečinky", - "userPreferences": "Predvoľby", - "pluginUserSettings": "Nastavenia pluginov", - "sharedHosts": "Hosty zdieľané s vami", - "sharedCredentials": "Poverenia zdieľané s vami", - "vaultProfiles": "Profily Vault", - "snippetFolders": "Priečinky snippetov", - "snippets": "Snippety", - "dashboardServiceLinks": "Odkazy na služby", - "homepageItems": "Položky domovskej stránky", - "networkTopology": "Sieťová mapa", - "workspaces": "Pracovné priestory", - "hostDefaults": "Predvolené hodnoty hostov", - "hostDefaultsAdmin": "Predvolené hodnoty hostov servera", - "aiProviders": "Poskytovatelia AI", - "homepageLayouts": "Rozloženia domovskej stránky", - "accountProfile": "Profil účtu" - }, "proxy": { - "title": "Reverzný proxy server", - "description": "Potrebné len vtedy, ak sa pred vaším serverom nachádza niečo ako Cloudflare Access alebo prihlasovacia stránka.", "headersTitle": "Ďalšie hlavičky", "headersHint": "Odosielané s každým požiadavkou na server, napríklad token služby Cloudflare Access.", "headerName": "Názov hlavičky", @@ -2446,8 +1661,7 @@ "username": "Meno", "password": "Heslo", "allowInvalidCertificate": "Dôverovať samopodpísanému certifikátu", - "allowInvalidCertificateHint": "Len pre váš vlastný server, ak jeho certifikát nie je od známej autority.", - "saved": "Uložené" + "allowInvalidCertificateHint": "Len pre váš vlastný server, ak jeho certifikát nie je od známej autority." }, "problems": { "invalidUrl": "To nevyzerá ako webová adresa.", @@ -2489,6 +1703,27 @@ "linking": "Prepojenie a spúšťanie prvej synchronizácie...", "linked": "Prepojené. Vaše údaje sa teraz synchronizujú.", "signedInAgain": "Prihlásené. Synchronizácia beží znova." + }, + "entities": { + "hosts": "Hosty", + "sshCredentials": "Poverenia", + "sshFolders": "Priečinky", + "userPreferences": "Predvoľby", + "pluginUserSettings": "Nastavenia pluginov", + "sharedHosts": "Hosty zdieľané s vami", + "sharedCredentials": "Poverenia zdieľané s vami", + "vaultProfiles": "Profily Vault", + "snippetFolders": "Priečinky snippetov", + "snippets": "Snippety", + "dashboardServiceLinks": "Odkazy na služby", + "homepageItems": "Položky domovskej stránky", + "networkTopology": "Sieťová mapa", + "workspaces": "Pracovné priestory", + "hostDefaults": "Predvolené hodnoty hostov", + "hostDefaultsAdmin": "Predvolené hodnoty hostov servera", + "aiProviders": "Poskytovatelia AI", + "homepageLayouts": "Rozloženia domovskej stránky", + "accountProfile": "Profil účtu" } }, "hostDefaults": { @@ -2505,37 +1740,18 @@ "resetTitle": "Tento host nastavuje vlastnú hodnotu. Kliknutím znova použijete predvolenú hodnotu z {{source}}", "clearTitle": "Nastavené na tejto úrovni. Kliknutím to vymažete a použijete {{source}}", "inheritedTitle": "Nasleduje predvolenú hodnotu z {{source}}", - "titleAdmin": "Predvolené hodnoty hostov servera", - "titleUser": "Moje predvolené hodnoty hostov", - "titleFolder": "Predvolené hodnoty priečinka: {{name}}", - "descriptionAdmin": "Predvolené hodnoty pre každý host na tomto serveri. Používateľ môže mať vlastné predvolené hodnoty, priečinok môže mať vlastné alebo host môže mať vlastnú hodnotu. Zmeňte pole pre nastavenie hodnoty tu, alebo ho vyprázdnite pre ponechanie nenastavené.", - "descriptionUser": "Predvolené hodnoty pre všetky vaše hosty, nad rámec tých serverových. Priečinok alebo host môže mať vlastnú hodnotu. Zmeňte pole pre nastavenie hodnoty tu, alebo ho vyprázdnite pre ponechanie nenastavené.", - "descriptionFolder": "Predvolené hodnoty pre hosty v tomto priečinku a jeho podpriečinkoch, nad rámec vašich vlastných. Host môže mať vlastnú hodnotu. Zmeňte pole pre nastavenie hodnoty tu, alebo ho vyprázdnite pre ponechanie nenastavené.", - "save": "Uložiť predvolené hodnoty", "saved_one": "Predvolené hodnoty uložené. {{count}} host bol aktualizovaný.", "saved_few": "Predvolené hodnoty uložené. {{count}} hostov bolo aktualizovaných.", "saved_many": "Predvolené hodnoty uložené. {{count}} hostov bolo aktualizovaných.", "saved_other": "Predvolené hodnoty uložené. {{count}} hostov bolo aktualizovaných.", - "savedInBackground": "Predvolené hodnoty uložené. Hosty sa aktualizujú na pozadí.", "appliedToHosts_one": "{{count}} host bol aktualizovaný s novými predvolenými hodnotami.", "appliedToHosts_few": "{{count}} hostov bolo aktualizovaných s novými predvolenými hodnotami.", "appliedToHosts_many": "{{count}} hostov bolo aktualizovaných s novými predvolenými hodnotami.", "appliedToHosts_other": "{{count}} hostov bolo aktualizovaných s novými predvolenými hodnotami.", - "saveFailed": "Nepodarilo sa uložiť predvolené hodnoty", - "loadFailed": "Nepodarilo sa načítať predvolené hodnoty", - "confirmTitle": "Uložiť predvolené hodnoty?", "confirmChanges_one": "{{count}} host nasleduje tieto predvolené hodnoty a zmení sa.", "confirmChanges_few": "{{count}} hostov nasleduje tieto predvolené hodnoty a zmenia sa.", "confirmChanges_many": "{{count}} hostov nasleduje tieto predvolené hodnoty a zmenia sa.", "confirmChanges_other": "{{count}} hostov nasleduje tieto predvolené hodnoty a zmenia sa.", - "confirmNoChanges": "Žiadny existujúci host sa nezmení. Nové hosty začnú s týmito predvolenými hodnotami.", - "menuMyDefaults": "Moje predvolené hodnoty hostov", - "folderDefaultsAction": "Predvolené hodnoty priečinka", - "adminSectionDescription": "Nastavte predvolené hodnoty, ktorým bude každý host na tomto serveri nasledovať, pre každé nastavenie, ktoré host má, vrátane každého pluginu. Používatelia a priečinky môžu nastaviť vlastné nad rámec týchto, a akýkoľvek host môže stále používať vlastnú hodnotu.", - "editServerDefaults": "Upraviť predvolené hodnoty servera", - "resetMenu": "Resetovať", - "resetAll": "Nastaviť všetko na predvolené hodnoty", - "resetCore": "Nastaviť pripojenie a SSH na predvolené hodnoty", "resetDone_one": "{{count}} host teraz používa svoje predvolené hodnoty.", "resetDone_few": "{{count}} hosty teraz používajú svoje predvolené hodnoty.", "resetDone_many": "{{count}} hostov teraz používa svoje predvolené hodnoty.", @@ -2551,38 +1767,11 @@ "fields": { "secretSaved": "Uložené. Pre nahradenie zadajte novú hodnotu." }, - "sharing": { - "revokeConfirm": "Odobrať prístup pre {{name}}?", - "revoke": "Odobrať prístup" - }, "manage": { - "searchSettings": "Vyhľadávať nastavenia", - "noMatchingSettings": "Žiadne nastavenia nevyhovujú.", - "sections": "Sekcie", - "sectionNeedsAttention": "Niečo tu vyžaduje pozornosť", "needsAttention_one": "Jedna vec vyžaduje pozornosť.", "needsAttention_few": "{{count}} veci vyžadujú pozornosť.", "needsAttention_many": "{{count}} vecí vyžaduje pozornosť.", "needsAttention_other": "{{count}} vecí vyžaduje pozornosť.", - "bandHost": "Host", - "bandFeatures": "Protokoly a pluginy", - "bandCredential": "Poverenie", - "sshConnection": "SSH pripojenie", - "errorAddressRequired": "Adresa je povinná.", - "errorPortRange": "Použite port v rozsahu od 1 do 65535.", - "defaults": "Predvolené hodnoty", - "searchHosts": "Vyhľadávať hosty", - "searchCredentials": "Vyhľadávať poverenia", - "searchDefaults": "Vyhľadávať predvolené hodnoty", - "addCredential": "Pridať poverenie", - "nothingMatches": "Nič nevyhovuje", - "nothingYet": "Zatiaľ tu nič nie je", - "emptyHostsHint": "Pridajte hosta a zobrazí sa tu, v ktoromkoľvek priečinku, ktorý mu priradíte.", - "emptyCredentialsHint": "Uložené poverenia môžu byť opakovane použité akýmkoľvek hostom.", - "collapse": "Zbaliť", - "expand": "Rozbaliť", - "cannotBeUndone": "Tento krok nemožno vrátiť späť.", - "hostNotFound": "Tento host sa nenašiel. Skúste obnoviť zoznam.", "hostCount_one": "{{count}} host", "hostCount_few": "{{count}} hosty", "hostCount_many": "{{count}} hostov", @@ -2590,14 +1779,7 @@ "credentialCount_one": "{{count}} poverenie", "credentialCount_few": "{{count}} poverenia", "credentialCount_many": "{{count}} poverení", - "credentialCount_other": "{{count}} poverení", - "newHost": "Nový host", - "newCredential": "Nové poverenie", - "advanced": "Rozšírené", - "pickHost": "Vyberte hosta na úpravu", - "pickCredential": "Vyberte poverenie na úpravu", - "pickDefaults": "Vyberte úroveň predvolených hodnôt na úpravu", - "pickHint": "Všetko o pripojení je tu, zoradené do skupín pre jednoduché nájdenie." + "credentialCount_other": "{{count}} poverení" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/sl_SI.json b/src/ui/locales/translated/sl_SI.json index 4b286dc7f..0101f3ce7 100644 --- a/src/ui/locales/translated/sl_SI.json +++ b/src/ui/locales/translated/sl_SI.json @@ -141,7 +141,6 @@ "continue": "Nadaljuj", "error": "Napaka", "unsavedChanges": "Neshranjene spremembe", - "more": "Več", "loading": "Nalaganje...", "host": "Gostitelj", "selectHost": "Izberite gostitelja...", @@ -154,7 +153,6 @@ "cancel": "Prekliči", "username": "Uporabniško ime", "login": "Prijava", - "logout": "Odjava", "register": "Registracija", "password": "Geslo", "confirmPassword": "Potrdi geslo", @@ -165,8 +163,6 @@ "rename": "Preimenuj", "edit": "Uredi", "confirm": "Potrdi", - "next": "Naprej", - "previous": "Prejšnji", "refresh": "Osveži", "language": "Jezik", "backendReconnected": "Povezava s strežnikom obnovljena", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Preberite o vsakem posebej" }, "desktopUpdates": { - "title": "Namizna aplikacija", - "mode": "Posodobitve", - "modeHint": "Kako ta aplikacija prejema nove različice.", - "manualModeHint": "Ta kopija se ne more samodejno posodobiti, zato vas Termix le obvesti, ko je na voljo nova različica.", "modeAutomatic": "Samodejno", "modePrompt": "Vprašaj najprej", "modeNever": "Nikoli", @@ -247,15 +239,6 @@ "onboardingTitle": "Posodobitve aplikacije", "onboardingBody": "Namizna aplikacija se lahko zdaj samodejno posodablja. Izberite, kako želite prejemati nove različice. To lahko kasneje spremenite v Nastavitvah, Posodobitve.", "onboardingManual": "Ta kopija aplikacije je bila nameščena na način, ki ne omogoča samodejnega posodabljanja, zato vas bo Termix obvestil, ko je na voljo nova različica, s povezavo za prenos.", - "status": "Različica {{version}}", - "statusIdle": "Še ni bilo preverjeno", - "statusChecking": "Preverjanje za posodobitve", - "statusAvailable": "Na voljo je različica {{version}}", - "statusDownloading": "Prenašanje {{version}} ({{progress}} %)", - "statusReady": "Različica {{version}} je pripravljena. Ponovno zaženite za namestitev.", - "statusUpToDate": "Imate najnovejšo različico", - "statusError": "Preverjanje za posodobitve ni bilo mogoče. Poskusite znova kasneje.", - "checkNow": "Preveri zdaj", "download": "Prenesi", "restart": "Ponovno zaženi zdaj", "later": "Kasneje", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Zapri", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopiraj geslo", - "copySudoPassword": "Kopiraj sudo geslo", - "passwordCopied": "Geslo je kopirano v odložišče", - "failedToCopyPassword": "Kopiranje gesla ni uspelo", - "refreshTab": "Osveži povezavo", - "renameTab": "Preimenuj zavihek", "dashboard": "Nadzorna plošča", "quickConnect": "Hitra povezava", - "openAsTabHint": "Ctrl+klik ali srednji klik za odprtje kot zavihek", - "openAsTab": "Odpri kot zavihek", - "openInRightDock": "Odpri v desnem oknu", - "closeRightDock": "Zapri desno okno", - "toggleRightDock": "Preklopi desno okno", "hosts": "Gostitelji", "credentials": "Poverila", "connections": "Povezave", - "keepSideMenuOpen": "Obdrži meni odprt", - "collapseSideMenu": "Strni meni", - "roleAdministrator": "Upravitelj", - "roleUser": "Uporabnik", "sync": "Usklajevanje", "reconnectDisconnectedTerminals": "Ponovno poveži vse prekinjene terminale", "reconnectingTerminals_one": "Ponovno povezovanje {{count}} terminala", @@ -302,32 +270,13 @@ "reconnectTerminalsFailed_other": "Ni bilo mogoče začeti ponovnega povezovanja {{count}} terminalov", "fullscreenUnsupported": "Celozaslonski način ni podprt v tem brskalniku", "fullscreenFailed": "Ni bilo mogoče preklopiti celozaslonskega načina", - "resetSidebarWidth": "Ponastavi širino", - "collapseSidebar": "Strni stransko vrstico", - "openSidebar": "Odpri stransko vrstico", "confirmCloseHost": "Zapreti {{host}}?", - "enterFullscreen": "Vstopi v celozaslonski način (Ctrl+Shift+F)", - "exitFullscreen": "Izhod iz celozaslonskega načina (Ctrl+Shift+F)", - "group": { - "objects": "Vaši", - "tools": "Orodja", - "system": "Sistem" - }, - "searchEverything": "Išči gostitelje, zavihke in ukaze", - "search": "Iskanje", "hiddenCount_one": "{{count}} skrit", "hiddenCount_two": "{{count}} skrita", "hiddenCount_few": "{{count}} skrite", "hiddenCount_other": "{{count}} skritih", - "showInRail": "Prikaži v stranski vrstici", - "moveUp": "Premakni gor", - "moveDown": "Premakni dol", - "resetRailOrder": "Ponastavi vrstni red", - "hideFromRail": "Skrij iz stranske vrstice", - "openSettings": "Odpri nastavitve", "settings": "Nastavitve", "manage": "Upravljanje", - "mobileNavigation": "Navigacija", "plugins": "Vtičniki" }, "hosts": { @@ -943,35 +892,14 @@ "importSummary": "Uvoz končan: {{imported}} uvoženih, {{updated}} posodobljenih, {{failed}} neuspešnih", "importHostsFailed": "Uvoz gostiteljev ni uspel" }, - "commandPalette": { - "searchPlaceholder": "Išči gostitelje, ukaze ali nastavitve...", - "quickActions": "Hitri ukazi", - "navigation": "Navigacija", - "orShortcut": "ali", - "addNewHost": "Dodaj novega gostitelja", - "adminSettings": "Nastavitve skrbnika", - "addCredential": "Dodaj poverilnico", - "recentActivity": "Nedavna aktivnost", - "serversAndHosts": "Strežniki in gostitelji", - "noHostsFound": "Ni najdenih gostiteljev, ki bi ustrezali iskanju \"{{search}}\"", - "links": "Povezave", - "navigate": "Navigacija", - "select": "Izberi", - "pluginActions": "Vej ukaze", - "noTargetTab": "Zavihek terminala ni odprt", - "documentation": "Dokumentacija" - }, "splitScreen": { "title": "Razdeljen zaslon", "defaultLabel": "Razdelitev {{number}}", "splitRight": "Razdeli desno", "splitDown": "Razdeli navzdol", - "addToSplit": "Dodaj v {{split}}", "paneEmptyItem": "Okno {{index}}: prazno", "paneItem": "Okno {{index}}: {{label}}", "paneNumber": "Okno {{index}}", - "newPaneRight": "Novo okno na desni", - "newPaneBelow": "Novo okno spodaj", "emptyTitle": "Prazno okno", "emptyHint": "Izberite, kaj želite prikazati tukaj. Ko je to okno izbrano, se vse, kar odprete iz stranske vrstice, odpre tudi tukaj.", "openTabs": "Odprti zavihki", @@ -988,7 +916,6 @@ "clearPane": "Izprazni to okno", "zoom": "Povečaj okno", "unzoom": "Obnovi razporeditev", - "unsplit": "Ponovno združi", "layouts": "Razporeditve", "applyLayout": "Spremeni razporeditev", "maxPanes_one": "Razdelitev lahko vsebuje največ {{count}} okno", @@ -999,8 +926,6 @@ "dropHere": "Spusti za prikaz tukaj", "paneActions": "Ukazi za okno", "dividerHint": "Povlecite za spremembo velikosti. Dvakrat kliknite za enakomerno porazdelitev.", - "openInSplit": "Odpri v razdelitvi", - "openInNewSplit": "Nova razdelitev s trenutnim zavihkom", "shortcuts": "Bližnjice", "shortcutNavigate": "Premikanje med okni", "presets": { @@ -1014,23 +939,6 @@ "grid6": "Mreža šestih" } }, - "connections": { - "noConnections": "Ni povezav", - "noConnectionsDesc": "Odprite terminal, upravitelj datotek ali oddaljeno namizje, da boste povezave videli tukaj", - "connectedFor": "Povezan {{duration}}", - "connected": "Povezano", - "disconnected": "Prekinjeno", - "reconnect": "Ponovno poveži", - "sectionOpen": "Odprto", - "sectionBackground": "Ozadje", - "backgroundDesc": "Seje ostanejo aktivne {{minutes}} minut po prekinitvi povezave in jih je mogoče ponovno vzpostaviti.", - "expiresIn": "Poteče čez {{duration}}", - "search": "Išči povezave...", - "noSearchResults": "Ni povezav, ki bi ustrezale iskanju", - "rename": "Preimenuj sejo", - "forgetConfirm": "Želite končati sejo v ozadju za {{name}}?", - "forget": "Končaj sejo" - }, "sshAuth": { "totpRequired": "Zahtevano je dvofaktorsko preverjanje pristnosti", "totpCodeLabel": "Potrditvena koda", @@ -1168,65 +1076,14 @@ "placeholders": { "keyPassword": "geslo za ključ", "pastePrivateKey": "Prilepite svoj zasebni ključ sem...", - "enterPassword": "Vnesite svoje geslo", - "apiKeyName": "npr. CI cevovod", - "credentialName": "npr. Proizvodni SSH ključ", - "optionalDetails": "Neobvezni podrobnosti...", - "sshUsername": "npr. root ali deploy", - "hostAddress": "10.0.0.1 ali example.com", - "hostName": "npr. Spletni strežnik za proizvodnjo" + "enterPassword": "Vnesite svoje geslo" }, "dashboard": { - "title": "Nadzorna plošča", - "github": "GitHub", - "reportBug": "Prijava napake", - "discord": "Discord", - "docs": "Dokumentacija", - "donate": "Doniraj", - "serverOverview": "Pregled strežnika", - "version": "Različica", "updateAvailable": "Na voljo posodobitev", - "beta": "Beta", - "uptime": "Čas delovanja", - "database": "Podatkovna zbirka", - "healthy": "Zdravo", - "error": "Napaka", - "totalHosts": "Skupno število gostiteljev", - "totalCredentials": "Skupno število poverilnic", - "recentActivity": "Nedavna aktivnost", - "reset": "Ponastavi", - "noRecentActivity": "Ni nedavne aktivnosti", - "quickActions": "Hitra dejanja", - "addHost": "Dodaj gostitelja", - "addCredential": "Dodaj poverilnico", - "adminSettings": "Nastavitve administratorja", - "userProfile": "Uporabniški profil", - "serverStats": "Statistika strežnika", - "customizeLayout": "Prilagodi nadzorno ploščo", - "justNow": "pravkar" + "beta": "Beta" }, "dashboardTab": { "stable": "STABILNO", - "registerNewServer": "Registrirajte nov strežnik", - "storeSshKeysOrPasswords": "Shranite SSH ključe ali gesla", - "manageUsersAndRoles": "Upravljajte uporabnike in vloge", - "manageYourAccount": "Upravljajte svoj račun", - "hostStatus": "Stanje gostitelja", - "noHostsConfigured": "Ni konfiguriranih gostiteljev", - "checking": "PREVERJANJE", - "commandPalette": "Paleta ukazov", - "done": "Končano", - "clear": "Počisti", - "dragToResizeColumns": "Povlecite za spremembo velikosti stolpcev", - "hostsAvailable": "Razpoložljivi gostitelji", - "removeSection": "Odstrani razdelek", - "addSection": "Dodaj razdelek", - "allSectionsShown": "Vse je že na nadzorni plošči.", - "fromPlugins": "Iz vtičnikov", - "dropHere": "Spustite razdelek sem", - "dragToReorder": "Povlecite razdelke za spremembo vrstnega reda", - "clearActivityConfirm": "Želite počistiti nedavno aktivnost?", - "resetConfirm": "Želite ponastaviti nadzorno ploščo na privzto razporeditev?", "onlineCount_one": "{{count}} na spletu", "onlineCount_two": "{{count}} na spletu", "onlineCount_few": "{{count}} na spletu", @@ -1237,432 +1094,55 @@ "hostCount_other": "{{count}} gostiteljev" }, "admin": { - "sectionGeneral": "Splošno", - "sectionUsers": "Uporabniki", - "sectionSessions": "Seje", - "sectionRoles": "Vloge", - "sectionDatabase": "Baza podatkov", - "sectionApiKeys": "API ključi", - "sectionAuditLog": "Dnevnik pregleda", - "sectionSsl": "HTTPS certifikat", - "sectionBranding": "Bela oznaka", - "brandingAppName": "Ime aplikacije", - "brandingAppNameDesc": "Prikazano na prijavnem zaslonu in zavihku brskalnika. Pustite prazno za uporabo \"Termix\".", - "brandingTagline": "Podnaslov", - "brandingTaglineDesc": "Prikazano pod imenom aplikacije na prijavnem zaslonu. Pustite prazno za uporabo privzetega podnaslova.", - "brandingLogo": "Logotip", - "brandingLogoDesc": "PNG, JPEG ali WEBP, do 750 KB. Zamenja privzto ikono na prijavnem zaslonu in zavihku brskalnika.", - "brandingLogoUpload": "Naloži logotip", - "brandingLogoReset": "Ponastavi na privzeto", - "brandingLogoInvalid": "Neveljavna slika. Uporabite datoteko PNG, JPEG ali WEBP do 750 KB.", - "brandingSaved": "Nastavitve blagovne znamke so shranjene", - "brandingSaveFailed": "Shranjevanje nastavitev blagovne znamke ni uspelo", - "sslDescription": "Certifikat, ki ga Termix ponuja prek HTTPS. Naložite svoj tukaj ali pridobite in podaljšajte certifikat od Let's Encrypt v razdelku ACME Certificates.", - "sslDocsLink": "Oglejte si dokumentacijo za SSL", - "sslCertStatus": "Stanje certifikata", - "sslCertStatusNone": "Brez certifikata", - "sslCertStatusValid": "Veljaven", - "sslCertStatusExpiring": "Kmalu poteka", - "sslCertStatusExpired": "Potekel", - "sslCertExpiresAt": "Poteka {{date}}", - "sslInfoNote": "Po izdaji ali nalaganju certifikata bo Termix samodejno omogočil HTTPS na SSL_PORT (privzeto 8443) poleg obstoječega HTTP vrat. Prepričajte se, da je ta vrat objavljen/preslikan na ta kontejner, da je dosegljiv.", - "sslManualCert": "Certifikat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Zasebni ključ (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Prilepite svoj obstoječi certifikat in zasebni ključ, vključno z verigo, če tega zahteva vaš CA.", - "sslManualUpload": "Naloži in namesti certifikat", - "sslManualUploadLoading": "Nalaganje certifikata...", - "sslManualUploadSuccess": "Certifikat je bil uspešno naložen in nameščen", - "sslManualUploadFailed": "Nalaganje certifikata ni uspelo", - "sslManualRequiresFields": "Certifikat in zasebni ključ sta obvezna", - "auditLogTotal": "{{total}} skupno vnosov", - "auditLogEmpty": "Ni najdenih vnosov dnevnika pregleda", - "auditLogSuccess": "Uspešno", - "auditLogFailed": "Ni uspelo", - "auditLogClearFilters": "Počisti filtre", - "auditLogPage": "Stran {{page}} od {{totalPages}} ({{total}} skupno)", - "auditLogIp": "IP", - "auditLogResourceId": "ID vira", - "auditLogFilterUser": "Uporabnik", - "auditLogFilterAction": "Dejanje", - "auditLogFilterResourceType": "Vrsta vira", - "auditLogFilterStatus": "Stanje", - "auditLogFilterFrom": "Od", - "auditLogFilterTo": "Do", - "auditLogFilterAll": "Vsi", - "allowRegistration": "Dovoli registracijo uporabnikov", - "allowRegistrationDesc": "Omogoči novim uporabnikom samostojno registracijo z uporabniškim imenom in geslom", - "allowPasswordLogin": "Dovoli prijavo z geslom", - "allowPasswordLoginDesc": "Prijava z uporabniškim imenom in geslom", - "externalAutoProvision": "Samodejno ustvari zunanje račune", - "externalAutoProvisionDesc": "Ustvari račun ob prvi prijavi prek zunanje metode, kot sta SSO ali LDAP. Če je izklopljeno, se lahko na ta način prijavijo le uporabniki, ki že imajo račun.", - "secondFactorAfterExternalLogin": "Zahtevaj drugi dejavnik po zunanjih prijavah (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Če je izklopljeno, se za vpisan drugi dejavnik vpraša le po prijavi z geslom in drugih lokalnih prijavah, kot prej. Če je vklopljeno, se zahteva po vsaki metodi prijave, vključno s SSO in LDAP.", - "allowPasswordReset": "Dovoli ponastavitev gesla", - "allowPasswordResetDesc": "Koda za ponastavitev prek Docker dnevnika", - "auditForwardingTitle": "Posreduj v SIEM", - "auditForwardingDesc": "Pošlji kopijo vsakega vnosa revizijskega dnevnika v zunanji zbirnik v formatu NDJSON. Lokalni dnevniki ostanejo vir resnice.", - "auditForwardingEnvNotice": "Posredovanje lahko konfigurirate tudi s spremenljivko okolja; URL, shranjen tukaj, ima prednost.", - "auditForwardingToken": "Bearer žeton (neobvezno)", - "auditForwardingTokenStored": "Bearer žeton (shranjen)", - "auditForwardingSaved": "Nastavitve posredovanja revizijskega dnevnika so shranjene", - "auditForwardingSaveError": "Shranjevanje nastavitev posredovanja revizijskega dnevnika ni uspelo", - "sessionTimeout": "Časovna omejitev seje", - "hours": "ur", - "sessionTimeoutRange": "Min 1 h, max 720 h", - "monitoringDefaults": "Privzete nastavitve spremljanja", - "statusCheck": "Preverjanje stanja", - "sec": "s", - "logLevel": "Raven dnevnika", "usersCount_one": "{{count}} uporabnik", "usersCount_two": "{{count}} uporabnika", "usersCount_few": "{{count}} uporabniki", - "usersCount_other": "{{count}} uporabnikov", - "searchUsers": "Išči uporabnike...", - "noUsers": "Ni uporabnikov", - "noUsersMatch": "Noben uporabnik ne ustreza vaši iskalni poizvedbi", - "pageOf": "Stran {{page}} od {{total}}", - "createUser": "Ustvari", - "newRole": "Nova vloga", - "roleName": "Ime", - "roleDisplayName": "Prikazno ime", - "roleDescription": "Opis", "rolesCount_one": "{{count}} vloga", "rolesCount_two": "{{count}} vlogi", "rolesCount_few": "{{count}} vloge", - "rolesCount_other": "{{count}} vlog", - "createRole": "Ustvari", - "creating": "Ustvarjanje...", - "exportDatabase": "Izvozi bazo podatkov", - "exportDatabaseDesc": "Prenesite prenosno SQLite varnostno kopijo vseh gostiteljev, poverilnic in nastavitev", - "export": "Izvozi", - "exporting": "Izvažanje...", - "importDatabase": "Uvozi bazo podatkov", - "importDatabaseDesc": "Obnovi iz prenosne .sqlite varnostne kopije na katerem koli strežniku baz podatkov", - "importDatabaseSelected": "Izbrano: {{name}}", - "selectFile": "Izberi datoteko", - "changeFile": "Spremeni", - "import": "Uvozi", - "importing": "Uvažanje...", "apiKeysCount_one": "{{count}} ključ", "apiKeysCount_two": "{{count}} ključa", "apiKeysCount_few": "{{count}} ključi", - "apiKeysCount_other": "{{count}} ključev", - "apiKeysDocsLink": "Oglejte si dokumentacijo", - "apiKeysCliHint": "Uporabite API ključ s Termix CLI za upravljanje strežnikov iz terminala.", - "apiKeysCliLink": "Oglejte si dokumentacijo CLI", - "newApiKey": "Nov API ključ", - "apiKeyCreatedWarning": "Ključ ustvarjen – kopirajte ga zdaj, saj se ne bo več prikazal.", - "apiKeyName": "Ime", - "apiKeyUser": "Uporabnik", - "apiKeySelectUser": "Izberite uporabnika...", - "apiKeyExpiresAt": "Potekne", - "createKey": "Ustvari ključ", - "apiKeyNoExpiry": "Brez poteka", - "revokedBadge": "PREKLICAN", - "authTypeDual": "Dvojna avtentikacija", - "authTypeExternal": "Zunanja", - "authTypeLocal": "Lokalna", - "adminStatusAdministrator": "Upravitelj", - "adminStatusRegularUser": "Navaden uporabnik", - "adminBadge": "UPRAVITELJ", - "systemBadge": "SISTEM", - "customBadge": "PRILAGOJENO", - "youBadge": "VI", "sessionsActive_one": "{{count}} aktivna", "sessionsActive_two": "{{count}} aktivni", "sessionsActive_few": "{{count}} aktivne", - "sessionsActive_other": "{{count}} aktivnih", - "sessionActive": "Aktivna: {{time}}", - "sessionExpires": "Potek: {{time}}", - "revokeAll": "Vse", - "revokeAllSessionsSuccess": "Vse seje za uporabnika so preklicane", - "revokeAllSessionsFailed": "Preklic sej ni uspel", - "revokeSessionFailed": "Preklic seje ni uspel", - "addRole": "Dodaj vlogo", - "noCustomRoles": "Ni definiranih prilagojenih vlog", - "removeRoleFailed": "Odstranjevanje vloge ni uspelo", - "assignRoleFailed": "Dodeljevanje vloge ni uspelo", - "userAdminAccess": "Upravitelj", - "userAdminAccessDesc": "Popoln dostop do vseh nastavitv upravitelja", - "userRoles": "Vloge", - "revokeAllUserSessions": "Prekliči vse seje", - "revokeAllUserSessionsDesc": "Vsilitev ponovne prijave na vseh napravah", - "revoke": "Prekliči", - "deleteUserWarning": "Izbris tega uporabnika je trajen.", - "deleteUser": "Izbriši {{username}}", - "deleting": "Brišem...", - "deleteUserFailed": "Izbris uporabnika ni uspel", - "deleteUserSuccess": "Uporabnik \"{{username}}\" je izbrisan", - "deleteRoleSuccess": "Vloga \"{{name}}\" je izbrisana", - "revokeKeySuccess": "Ključ \"{{name}}\" je preklican", - "revokeKeyFailed": "Preklic ključa ni uspel", - "copiedToClipboard": "Kopirano v odložišče", - "done": "Končano", - "createUserTitle": "Ustvari uporabnika", - "createUserDesc": "Ustvarite nov lokalni račun.", - "createUserUsername": "Uporabniško ime", - "createUserPassword": "Geslo", - "createUserPasswordHint": "Najmanj 6 znakov.", - "createUserEnterUsername": "Vnesite uporabniško ime", - "createUserSubmit": "Ustvari uporabnika", - "editUserTitle": "Upravljanje uporabnika: {{username}}", - "editUserDesc": "Uredite vloge, status upravitelja, seje in nastavitve računa.", - "editUserUsername": "Uporabniško ime", - "editUserAuthType": "Vrsta avtentikacije", - "editUserAdminStatus": "Status upravitelja", - "editUserUserId": "ID uporabnika", - "linkAccountTitle": "Poveži račune", - "linkAccountDesc": "Združite zunanji račun {{username}} z obstoječim lokalnim računom.", - "linkAccountDescLocal": "Povežite lokalni račun {{username}} z obstoječim računom, ki je le zunanji.", - "linkAccountWarningTitle": "To bo:", - "linkAccountEffect1": "Izbriši račun, ki je dostopen le prek zunanjega ponudnika", - "linkAccountEffect2": "Dodaj zunanjo prijavo ciljnemu računu", - "linkAccountEffect3": "Omogoči prijavo tako prek zunanjega ponudnika kot z geslom", - "linkAccountTargetUsername": "Uporabniško ime lokalnega računa", - "linkAccountTargetPlaceholder": "Vnesite uporabniško ime lokalnega računa, ki ga želite povezati", - "linkAccountExternalUsername": "Uporabniško ime zunanjega računa", - "linkAccountExternalPlaceholder": "Vnesite uporabniško ime računa, dostopnega le prek zunanjega ponudnika, ki ga želite združiti", - "linkAccountExternalNotFound": "Za to uporabniško ime ni bilo najdenega računa, dostopnega le prek zunanjega ponudnika", - "linkAccounts": "Poveži račune", - "linkAccountSuccess": "Računi so bili uspešno povezani", - "linkAccountFailed": "Povezovanje računov ni uspelo", - "linkAccountInProgress": "Povezovanje...", - "unlinkAccountTitle": "Prekini povezavo z zunanjo prijavo", - "unlinkAccountDesc": "Odstrani zunanjo prijavo za uporabnika {{username}}. Uporabnik se bo lahko prijavil le s svojim geslom.", - "unlinkAccountWarning": "To bo odstranilo zunanjo prijavo s tega računa. Uporabnik mora imeti nastavljeno geslo, da se lahko še naprej prijavlja.", - "unlinkAccount": "Prekini povezavo z zunanjo prijavo", - "unlinkAccountInProgress": "Prekinjanje povezave...", - "unlinkAccountSuccess": "Povezava z zunanjo prijavo je bila prekinjena", - "unlinkAccountFailed": "Prekinitev povezave z zunanjo prijavo ni uspela", - "updateRegistrationFailed": "Posodabljanje nastavitve registracije ni uspelo", - "updatePasswordLoginFailed": "Posodabljanje nastavitve prijave z geslom ni uspelo", - "updateSecondFactorAfterExternalLoginFailed": "Posodabljanje nastavitve drugega dejavnika ni uspelo", - "updatePasswordResetFailed": "Posodabljanje nastavitve ponastavitve gesla ni uspelo", - "sessionTimeoutRange2": "Časovna omejitev seje mora biti med 1 in 720 urami", - "sessionTimeoutSaved": "Časovna omejitev seje je bila shranjena", - "sessionTimeoutSaveFailed": "Shranjevanje časovne omejitve seje ni uspelo", - "monitoringIntervalInvalid": "Neveljavne vrednosti intervala", - "monitoringSaved": "Nastavitve spremljanja so bile shranjene", - "monitoringSaveFailed": "Shranjevanje nastavitev spremljanja ni uspelo", - "logLevelUpdateFailed": "Posodabljanje ravni dnevnika ni uspelo", - "createUserRequired": "Uporabniško ime in geslo sta obvezna", - "createUserPasswordTooShort": "Geslo mora vsebovati vsaj 6 znakov", - "createUserSuccess": "Uporabnik \"{{username}}\" je bil ustvarjen", - "createUserFailed": "Ustvarjanje uporabnika ni uspelo", - "updateAdminStatusFailed": "Posodabljanje statusa skrbnika ni uspelo", - "allSessionsRevoked": "Vse seje so bile preklicane", - "revokeSessionsFailed": "Preklic sej ni uspel", - "manageUserData": "Upravljanje podatkov uporabnika", - "backToUsers": "Nazaj na uporabnike", - "manageTabAccount": "Račun", - "manageTabHosts": "Gostitelji", - "manageTabCredentials": "Poverilnice", - "manageTabSessions": "Seje", - "manageTabDanger": "Nevarno", - "manageEditorBack": "Nazaj na podatke uporabnika {{username}}", - "dataLockedBadge": "ZAKLENJENO", - "dataLockedNotice": "Podatki uporabnika {{username}} ostanejo zaklenjeni do njegove naslednje prijave. Do takrat njegovih gostiteljev, poverilnic in odlomkov ni mogoče ogledati ali urejati.", - "resetPasswordTitle": "Ponastavi geslo", - "resetPasswordExternalOnly": "Ta uporabnik se prijavlja prek zunanjega ponudnika in nima gesla.", - "resetPasswordPlaceholder": "Novo geslo", - "resetPasswordBtn": "Ponastavi", - "resetPasswordWorking": "Ponastavljanje...", - "resetPasswordSuccess": "Geslo je bilo ponastavljeno", - "resetPasswordSuccessWiped": "Geslo je bilo ponastavljeno. Šifrirani podatki uporabnika so bili izbrisani.", - "resetPasswordFailed": "Ponastavljanje gesla ni uspelo", - "resetPasswordConfirmWipe": "Uporabnik {{username}} se ni prijavil od nadgradnje šifriranja, zato njegovih podatkov ni mogoče obnoviti. Ponastavitev zdaj bo izbrisala njegove gostitelje, poverilnice in odlomke. Nadaljuj?", - "manageApiKeys": "API ključi", - "apiKeyNamePlaceholder": "Ime ključa", - "apiKeyCopyNotice": "Kopirajte ta ključ zdaj, saj se ne bo več prikazal.", - "noApiKeysForUser": "Brez API ključev", - "apiKeyDeleteFailed": "Izbris API ključa ni uspel", - "exportUserData": "Izvoz podatkov", - "exportUserDataDesc": "Prenesite gostitelje, poverilnice in podatke upravitelja datotek tega uporabnika kot JSON. Tajnosti so odkodirane.", - "exportUserDataSuccess": "Podatki uporabnika izvoženi", - "exportUserDataFailed": "Izvoz podatkov uporabnika ni uspel", "hostsCount_one": "{{count}} gostitelj", "hostsCount_two": "{{count}} gostitelja", "hostsCount_few": "{{count}} gostitelji", "hostsCount_other": "{{count}} gostiteljev", - "addHostForUser": "Dodaj gostitelja", - "noHostsForUser": "Ta uporabnik nima gostiteljev", - "connectToHost": "Poveži", - "deleteHostConfirm": "Izbrišete gostitelja \"{{name}}\", ki pripada uporabniku {{username}}?", - "hostDeletedSuccess": "Gostitelj izbrisan", - "hostDeleteFailed": "Izbris gostitelja ni uspel", "credentialsCount_one": "{{count}} poverilnica", "credentialsCount_two": "{{count}} poverilnici", "credentialsCount_few": "{{count}} poverilnice", "credentialsCount_other": "{{count}} poverilnic", - "addCredentialForUser": "Dodaj poverilnico", - "noCredentialsForUser": "Ta uporabnik nima poverilnic", - "deleteCredentialConfirm": "Izbrišete poverilnico \"{{name}}\", ki pripada uporabniku {{username}}?", - "credentialDeletedSuccess": "Poverilnica izbrisana", - "credentialDeleteFailed": "Izbris poverilnice ni uspel", - "noSessionsForUser": "Ni aktivnih sej", - "deleteSuccessorLabel": "Predajte gostitelje in poverilnice", - "deleteSuccessorMe": "Meni (upravljalec, ki briše)", - "deleteSuccessorNone": "Nikomur, izbrišite jih", - "deleteSuccessorDesc": "Vse, kar je ta uporabnik delil, bo še naprej delovalo pod novim lastnikom; izbira »nikomur« odstrani njegove gostitelje, poverilnice in deljene vire.", - "deleteUserDangerDesc": "Trajno izbrišite uporabnika {{username}} in vse njegove podatke (gostitelje, poverilnice, odlomke, zgodovino). Tega ni mogoče razveljaviti.", - "deleteUserConfirm": "Trajno izbrišete uporabnika {{username}} in vse njegove podatke?", - "deleteUserAdminBlocked": "Pred brisanjem tega uporabnika odstranite status upravitelja.", - "createRoleRequired": "Ime in prikažno ime sta obvezna", - "createRoleSuccess": "Vloga \"{{name}}\" ustvarjena", - "createRoleFailed": "Ustvarjanje vloge ni uspelo", - "apiKeyNameRequired": "Ime ključa je obvezno", - "apiKeyUserRequired": "ID uporabnika je obvezen", - "apiKeyCreatedSuccess": "API ključ \"{{name}}\" ustvarjen", - "apiKeyCreateFailed": "Ustvarjanje API ključa ni uspelo", - "exportSuccess": "Baza podatkov je bila uspešno izvožena", - "exportFailed": "Izvoz baze podatkov ni uspel", - "importSelectFile": "Najprej izberite datoteko", - "importCompleted": "Uvoz končan: uvoženih {{total}} elementov, preskočenih {{skipped}}", - "importFailed": "Uvoz ni uspel: {{error}}", - "importError": "Uvoz baze podatkov ni uspel", - "sectionHostDefaults": "Privzete nastavitve gostitelja", "rolePermissions": { "count_one": "{{count}} dovoljenje", "count_two": "{{count}} dovoljenji", "count_few": "{{count}} dovoljenja", - "count_other": "{{count}} dovoljenj", - "editAction": "Uredi dovoljenja", - "loadError": "Nalaganje kataloga dovoljenj ni uspelo", - "saved": "Dovoljenja vloge shranjena", - "saveError": "Shranjevanje dovoljenj vloge ni uspelo", - "save": "Shrani", - "saving": "Shranjevanje ...", - "pluginDisabled": "Vtičnik onemogočen", "groups": { "hosts": "Gostitelji", "credentials": "Poverilnice", "admin": "Upravljanje" } - }, - "notificationPrivateEndpoints": "Dovoljeni zasebni gostitelji obvestil", - "notificationPrivateEndpointsDesc": "Natančni zasebni gostitelji, ki jih lahko kontaktirajo kanali za obvestila. Ločite jih z vejicami.", - "updateNotificationEndpointsFailed": "Posodabljanje dovoljenega seznama končnih točk obvestil ni uspelo", - "secondFactorsSectionTitle": "Drugi dejavniki", - "secondFactorsNone": "Ni vpisanih drugih dejavnikov", - "secondFactorUnavailable": "Ni na voljo", - "resetSecondFactors": "Ponastavi druge dejavnike", - "resetSecondFactorsConfirm": "Odstranite vse druge dejavnike za uporabnika {{username}}? Prijaviti se lahko z geslom ali SSO in jih ponovno vpisati.", - "secondFactorsResetSuccess": "Dvofaktorska preverjanja ponastavljena", - "secondFactorsResetFailed": "Ponastavljanje dvofaktorskih preverjanj ni uspelo", - "passwordLoginForced": "Prijava z geslom je izklopljena, vendar nobena druga metoda prijave ni omogočena, zato ostaja vklopljena. Nikogar ne bo zaklenilo.", - "sslNotRenewed": "To potrdilo se ne podaljšuje samodejno. Potekne {{date}}. Omogočite samodejno podaljševanje v razdelku ACME Certificates ali naložite novo potrdilo pred tem datumom.", - "sslSelfSigned": "Samopodpisano potrdilo, ki ga je ustvaril Termix. Brskalniki bodo opozorili nanj.", - "sslRenewedBy": "Samodejno podaljšano s strani {{plugin}}", - "sslIssuer": "Izdal {{issuer}}", - "sslNames": "Pokriva {{names}}", - "sslManualTitle": "Naloži potrdilo", - "updateExternalAutoProvisionFailed": "Posodabljanje nastavitve samodejnega ustvarjanja ni uspelo", - "hostTags": "Vnaprej določene oznake gostiteljev", - "hostTagsDesc": "Oznake, ki jih vsi uporabniki vidijo kot predloge v urejevalniku gostiteljev. Pritisnite presledek ali Enter za dodajanje. Odstranitev oznake tukaj je ne odstrani iz gostiteljev.", - "hostTagsError": "Nalaganje ali shranjevanje predlog oznak gostiteljev ni uspelo.", - "revokeAllSessionsConfirm": "Odjaviti uporabnika {{username}} povsod?", - "revokeSessionConfirm": "Odjaviti to sejo?", - "revokeSession": "Odjava", - "deleteRoleConfirm": "Izbrisati vlogo {{name}}?", - "revokeKeyConfirm": "Preklicati API ključ {{name}}?", - "revokeKey": "Preklic" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Kje", - "who": "Kdo", - "hostLabel": "Gostitelj", - "hostPlaceholder": "192.168.1.1 ali example.com", - "portLabel": "Vrata", - "usernameLabel": "Uporabniško ime", - "usernamePlaceholder": "uporabniško ime", - "authLabel": "Preverjanje", - "passwordLabel": "Geslo", - "passwordPlaceholder": "geslo", - "privateKeyLabel": "Zasebni ključ", - "privateKeyPlaceholder": "Prilepite zasebni ključ...", - "credentialLabel": "Poverilnica", - "credentialPlaceholder": "Izberite shranjeno poverilnico", - "protocolLabel": "Protokol", - "domainLabel": "Domena", - "domainPlaceholder": "izbirno", - "connectToAction": "Poveži se z {{name}}", - "sshProtocol": "SSH", - "noTarget": "Nič nameščenega ne more vzpostaviti povezave s tem tipom gostitelja" + "usernameLabel": "Uporabniško ime" }, "keybindings": { - "description": "Povežite tipke z dejanji v terminalu in aplikaciji ali spremenite vgrajene bližnjice.", - "defaultsHeading": "Vgrajene bližnjice", - "fixedHeading": "Bližnjice aplikacije", - "fixed": { - "splitRight": "Razdeli desno", - "splitDown": "Razdeli navzdol", - "zoomPane": "Povečaj osredotočeno okno", - "navigatePane": "Premik med okni", - "nextTab": "Naslednji zavihek", - "previousTab": "Prejšnji zavihek", - "jumpTab": "Skoči na zavihek", - "previousView": "Nazaj na prejšnji pogled stranske vrstice", - "fullscreen": "Preklopi celozaslonski način" - }, - "customHeading": "Prilagojene bližnjice", - "addBinding": "Dodaj bližnjico", - "addBindingTitle": "Dodaj bližnjico", - "editBindingTitle": "Uredi bližnjico", - "loading": "Nalaganje...", - "noCustomBindings": "Še ni prilagojenih bližnjic", - "defaultBadge": "Privzeto", - "customizedBadge": "Prilagojeno", - "customize": "Prilagodi", - "resetToDefault": "Ponastavi na privzeto", - "resetAllToDefaults": "Ponastavi vse na privzeto", - "cancel": "Prekliči", - "saveBinding": "Shrani bližnjico", - "saveError": "Shranjevanje bližnjic tipkovnice ni uspelo", - "pressKeysToRecord": "Kombinacija tipk", - "pressKeysPlaceholder": "Kliknite in pritisnite tipke", - "recording": "Pritisnite tipke...", - "comboRequiredError": "Najprej pritisnite kombinacijo tipk", - "conflictWarning": "Ta kombinacija je že dodeljena ukazu {{combo}}. Shranjevanje bo povzročilo, da se izvedeta oba.", - "actionLabel": "Ukaz", "actionNextTab": "Preklopi na naslednji zavihek", "actionPreviousTab": "Preklopi na prejšnji zavihek", "actionOpenCommandPalette": "Odpri hitro iskanje", - "actionReconnectSession": "Ponovno poveži trenutno sejo", - "unavailableAction": "{{type}} (ni na voljo)", - "actionRequiredError": "Najprej izberite ukaz", - "deleteConfirm": "Izbrišete to dodelitev tipk?", - "resetAllConfirm": "Ponastavite vse dodelitve tipk na privzete?" + "actionReconnectSession": "Ponovno poveži trenutno sejo" }, "userProfile": { - "storageModeLocal": "Brskalnik", - "storageModeCloud": "Baza podatkov", - "storageModeDescription": "Brskalnik shrani nastavitve samo v tem brskalniku. Baza podatkov sinhronizira nastavitve na strežnik in jih naloži na kateri koli napravi.", - "resetToDefaults": "Ponastavi na privzeto", - "resetToDefaultsSuccess": "Nastavitve so ponastavljene na privzete.", - "storageModeSwitch": "Shranjevanje nastavitev", - "sectionAccount": "Račun", - "desktopProfileTitle": "Samo ta naprava", - "desktopProfileDescription": "Ta profil je shranjen le na tej napravi in se samostojno prijavi. Povežite ga s strežnikom Termix, da boste na vseh napravah uporabljali iste gostitelje in nastavitve.", - "sectionInterface": "Vmesnik", - "interfacePresetDesc": "Koliko podrobnosti Termix prikaže. Vse funkcije ostanejo na voljo.", "preset_simple": "Preprosto", "preset_simple_desc": "Samo osnovno.", "preset_balanced": "Uravnoteženo", "preset_balanced_desc": "Standardna razporeditev.", "preset_advanced": "Napredno", "preset_advanced_desc": "Vse vklopljeno, gosto zloženo.", - "presetClearOverrides": "Ponastavi vse", - "presetOverridesTitle": "Prilagojeno", - "presetRevertArea": "Razveljavi", - "presetConfirmTitle": "Preklopite na {{preset}}?", - "presetConfirmDesc": "To bo ponastavilo vašo stransko vrstico, navigacijo, razporeditev nadzorne plošče, orodno vrstico terminala in pogled upravitelja datotek. Vaši gostitelji, poverilnice in domača stran ostanejo nespremenjeni.", - "presetConfirmApply": "Uporabi prednastavitev", - "runSetupAgainDesc": "Ponovno opravite postopek prve namestitve.", - "runSetupAgainButton": "Zaženi namestitev", "uiArea_chrome": "Okvir aplikacije", "uiArea_hostList": "Seznam gostiteljev", "uiArea_credentialList": "Seznam poverilnic", @@ -1671,128 +1151,15 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Upravitelj datotek", "uiArea_hostEditor": "Urejevalnik gostiteljev", - "sectionAppearance": "Videz", - "sectionSecurity": "Varnost", - "sectionApiKeys": "API ključi", - "sectionData": "Podatki", - "usernameLabel": "Uporabniško ime", - "roleLabel": "Vloga", - "roleAdministrator": "Upravitelj", - "authMethodLabel": "Način preverjanja pristnosti", - "authMethodLocal": "Lokalno", - "twoFaLabel": "2FA", - "twoFaOn": "Vklopljeno", - "twoFaOff": "Izklopljeno", - "versionLabel": "Različica", - "cliTitle": "Termix CLI", - "cliDescription": "Odpirajte termnale, izvajajte ukaze in premikajte datoteke iz lastne lupine.", - "cliLearnMore": "Več informacij", - "deleteAccount": "Izbriši račun", - "deleteAccountDescription": "Trajno izbrišite svoj račun", - "deleteButton": "Izbriši", - "deleteAccountPermanent": "Ta dejanje je trajno in ga ni mogoče razveljaviti.", - "deleteAccountWarning": "Vse seje, gostitelji, poverilnice in nastavitve bodo trajno izbrisane.", - "confirmPasswordDeletePlaceholder": "Vnesite geslo za potrditev", "languageLabel": "Jezik", "themeLabel": "Tema", "fontSizeLabel": "Velikost pisave", "interfaceFontLabel": "Pisava vmesnika", "interfaceFontDescription": "Spremeni pisavo vmesnika aplikacije. Profili terminala ohranijo svoje nastavitve pisave.", "accentColorLabel": "Poudarkovna barva", - "keyboardShortcuts": "Bližnjice na tipkovnici", - "keyboardShortcutsDescription": "Prilagodite bližnjice za kopiranje, prilepanje in ukaze v terminalu", - "manageShortcuts": "Upravljanje", - "commandPalette": "Paleta ukazov", - "commandPaletteDesc": "Omogoči bližnjico na tipkovnici", - "reopenTabsOnLogin": "Ponovno odpiranje zavihkov ob prijavi", - "reopenTabsOnLoginDesc": "Obnovite odprte zavihke ob prijavi ali osvežitvi strani, tudi z druge naprave", - "confirmTabClose": "Potrditev zapiranja zavihka", - "confirmTabCloseDesc": "Vprašaj pred zapiranjem zavihkov terminala", - "showTabNumbers": "Prikaži številke zavihkov", - "showTabNumbersDesc": "Prikažite številko na vsakem zavihku za lažje razlikovanje", - "settingsAppRail": "Leva vrstica aplikacij", - "sidebarSettingsMoved": "Nastavitve prikaza stranske vrstice gostiteljev so se preselile v ploščo Prilagodi stransko vrstico, ki se odpre iz orodne vrstice Gostitelji.", - "showHostTags": "Prikaži oznake gostiteljev", - "showHostTagsDesc": "Prikaži oznake v seznamu gostiteljev", - "statusColors": "Prave barve stanja", - "statusColorsDesc": "Uporabite zeleno/rdečo za stanje na spletu/izven spleta namesto poudarkovne barve", - "pinAppRail": "Pripni levo vrstico aplikacij", - "pinAppRailDesc": "Pustite levo vrstico aplikacij vedno razširjeno namesto razširitve ob drsenju miške", - "expandAppRailOnHover": "Razširi levo vrstico aplikacij ob drsenju miške", - "expandAppRailOnHoverDesc": "Dovoli razširitev leve vrstice aplikacij, ko se kazalec premakne nanjo", - "appRailHoverPushesContent": "Potisni vsebino ob razširitvi", - "appRailHoverPushesContentDesc": "Namesto da bi se razširjena vrstica odprla čez stran, ustvari prostor zanje. Odprte seje, kot je oddaljena namizna površina, se bodo vsakič prilagodile velikosti.", - "showPinAppRailButton": "Prikaži gumb za pripinjanje leve vrstice aplikacij", - "showPinAppRailButtonDesc": "Prikažite gumb v levi vrstici aplikacij za njeno pripinjanje. Privzeto izklopljeno.", - "settingsNavigation": "Navigacija", - "navigationTabsDesc": "Izberite, kateri zavihki se prikažejo v levi vrstici aplikacij", - "settingsUpdates": "Posodobitve", - "disableUpdateChecks": "Onemogoči preverjanje posodobitev", - "disableUpdateChecksDesc": "Ustavi preverjanje posodobitev", - "changePassword": "Spremeni geslo", - "currentPasswordLabel": "Trenutno geslo", - "currentPasswordPlaceholder": "Trenutno geslo", - "newPasswordLabel": "Novo geslo", - "newPasswordPlaceholder": "Novo geslo", - "confirmPasswordLabel": "Potrdi novo geslo", - "confirmPasswordPlaceholder": "Potrdi novo geslo", - "updatePassword": "Posodobi geslo", - "createApiKeyTitle": "Ustvari API ključ", - "createApiKeyDescription": "Ustvarite nov API ključ za programski dostop.", - "apiKeyNameLabel": "Ime", - "apiKeyNamePlaceholder": "npr. CI cevovod", - "expiryDateLabel": "Datum poteka", - "optional": "izbirno", - "cancel": "Prekliči", - "createKey": "Ustvari ključ", - "apiKeyCreatedWarning": "Ključ ustvarjen – kopirajte ga zdaj, saj se ne bo več prikazal.", - "copyApiKey": "Kopiraj API ključ", - "copiedToClipboard": "Kopirano v odložišče", "apiKeyCount_one": "{{count}} ključ", "apiKeyCount_two": "{{count}} ključa", "apiKeyCount_few": "{{count}} ključi", - "apiKeyCount_other": "{{count}} ključev", - "newKey": "Nov ključ", - "noApiKeys": "Še ni API ključev.", - "apiKeyActive": "Aktiven", - "apiKeyUsageHint": "Vključite svoj ključ v", - "apiKeyUsageHintHeader": "glavo.", - "apiKeyPermissionsHint": "Ključi podedujejo dovoljenja uporabnika, ki jih je ustvaril.", - "exportData": "Izvozi moje podatke", - "exportDataDesc": "Prenesite varnostno kopijo svojih gostiteljev, poverilnic in nastavitev za prenos na drugo napravo", - "export": "Izvozi", - "exporting": "Izvažanje...", - "importData": "Uvozi moje podatke", - "importDataDesc": "Obnovite svoje gostitelje, poverilnice in nastavitve iz datoteke varnostne kopije .sqlite", - "importDataSelected": "Izbrano: {{name}}", - "selectFile": "Izberi datoteko", - "changeFile": "Spremeni", - "import": "Uvozi", - "importing": "Uvažanje...", - "exportSuccess": "Podatki so bili uspešno izvoženi", - "exportFailed": "Izvoz podatkov ni uspel", - "importSelectFile": "Najprej izberite datoteko", - "importCompleted": "Uvoz končan: uvoženih je bilo {{total}} elementov, preskočenih {{skipped}}", - "importFailed": "Uvoz ni uspel: {{error}}", - "roleUser": "Uporabnik", - "authMethodDual": "Dvojna avtentikacija", - "authMethodExternal": "Zunanja", - "done": "Končano", - "apiKeyNameRequired": "Ime ključa je obvezno", - "apiKeyCreated": "API ključ \"{{name}}\" je bil ustvarjen", - "apiKeyCreateFailed": "Ustvarjanje API ključa ni uspelo", - "apiKeyUser": "Uporabnik", - "apiKeyExpires": "Potekne", - "apiKeyRevoked": "API ključ \"{{name}}\" je bil preklican", - "apiKeyRevokeFailed": "Preklic API ključa ni uspel", - "passwordFieldsRequired": "Trenutno in novo geslo sta obvezna", - "passwordMismatch": "Gesli se ne ujemata", - "passwordTooShort": "Geslo mora vsebovati vsaj 6 znakov", - "passwordUpdated": "Geslo je bilo uspešno posodobljeno", - "passwordUpdateFailed": "Posodabljanje gesla ni uspelo", - "deletePasswordRequired": "Za brisanje računa je potrebno geslo", - "deleteFailed": "Brisanje računa ni uspelo", - "deleting": "Brisanje...", "colorPickerTooltip": "Odpri izbirnik barv", "themeSystem": "Sistem", "themeLight": "Svetla", @@ -1803,18 +1170,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Prijavljeni v {{server}}", - "linkedProfileDescription": "Ta naprava uporablja vaš račun na strežniku in hrani kopijo vaših podatkov, zato deluje tudi brez povezave.", - "manageSync": "Upravljanje sinhronizacije", - "setUpSync": "Poveži s strežnikom", - "settingsTabsAndShortcuts": "Zavihki in bližnjice", - "onBetaTitle": "Uporabljate beta različico", - "onBetaDescription": "Hvala za testiranje. Povejte nam, kaj ne deluje.", - "tryBetaTitle": "Preizkusite nove funkcije zgodaj", - "tryBetaDescription": "Pridružite se beta programu v posodobitvah.", - "sendBetaFeedback": "Pošlji povratne informacije za beta različico", - "openUpdates": "Posodobitve" + "themeGruvbox": "Gruvbox" } } }, @@ -2091,8 +1447,7 @@ "hasDependents": "{{name}} potrebujejo {{list}}. Najprej jih izklopite ali odstranite.", "missingDependencies": "{{name}} potrebuje {{list}}, ki ni nameščen.", "consentChanged": "Od kod zahteva ta vtičnik se je spremenil od zadnjega pregleda. Preverite seznam znova.", - "upload": "Branja {{name}} ni bilo mogoče izvesti: {{error}}", - "developerMode": "Spremembe razvoja ni bilo mogoče izvesti: {{error}}" + "upload": "Branja {{name}} ni bilo mogoče izvesti: {{error}}" }, "data": { "title": "Shranjeni podatki", @@ -2231,13 +1586,7 @@ "browsePlugins": "Brskaj po vtičnikih", "loading": "Nalaganje", "developer": { - "title": "Način razvijalca vtičnikov", - "hint": "Omogoča skrbnikom nameščanje vtičnikov iz datoteke .tmxplug na zavihku Vtičniki, brez preverjanja registra. Uporabite ga za gradnjo in testiranje lastnih vtičnikov.", - "enableTitle": "Vklopiti način razvijalca?", - "enableBody": "Skrbniki bodo lahko nameščali vtičnike iz datotek, ki jih Termix ni preveril. Vtičnik lahko naredi vse, kar omogočajo njegove zmogljivosti, zato tega vklopite le med gradnjo ali testiranjem vtičnikov.", - "enable": "Vklopi", - "installFromFile": "Namesti iz datoteke", - "signedOnly": "Nastavljena je spremenljivka TERMIX_REQUIRE_SIGNED_PLUGINS, zato je nameščanje iz datoteke blokirano." + "installFromFile": "Namesti iz datoteke" }, "count": { "downloads_one": "{{formatted}} prenos", @@ -2277,71 +1626,7 @@ "secretSet": "Nastavljeno", "secretNotSet": "Ni nastavljeno", "secretReplace": "Zamenjaj", - "pluginSettingsSaved": "Nastavitve shranjene", - "pluginSettingsInvalid": "Nekaterih nastavitev ni bilo mogoče shraniti. Preverite poudarjena polja.", - "pluginSettingsSaveFailed": "Shranjevanje nastavitev ni uspelo", - "pluginSettingsLoadFailed": "Nalaganje nastavitev ni uspelo", - "featureUnavailable": "{{name}} trenutno ni na voljo. Te nastavitve so shranjene, vendar ne bodo imele učinka.", - "account": "Račun", - "security": "Varnost", - "apiKeys": "API ključi", - "data": "Podatki in sinhronizacija", - "interface": "Vmesnik", - "appearance": "Videz", - "keybindings": "Bližnjice", - "adminGeneral": "Splošno", - "adminUsers": "Uporabniki", - "adminSessions": "Seje", - "adminRoles": "Vloge", - "adminHostDefaults": "Privzete nastavitve gostitelja", - "adminBranding": "Blagovna znamka", - "adminDatabase": "Baza podatkov", - "adminSsl": "SSL", - "adminApiKeys": "API ključi", - "adminAuditLog": "Dnevnik pregleda", - "bandYou": "Vaš račun", - "bandApp": "Ta aplikacija", - "bandPlugins": "Vtičniki", - "bandInstance": "Ta strežnik", - "searchPlaceholder": "Išči nastavitve", - "noResults": "Ni ujemajočih nastavitev.", - "pages": "Strani", - "instanceSettings": "Nastavitve strežnika", - "nothingHere": "Tukaj ni nič za nastaviti.", - "searchPage": "Išči na tej strani", - "noPageMatches": "Na tej strani ni ujemov.", - "updates": { - "title": "Posodobitve", - "betaProgram": "Beta program", - "betaIntro": "Bete so zgodnje različice naslednje verzije Termixa. Izdajajo se ob torkih in petkih, ko je kaj novega za preizkus. Lahko vsebujejo napake, vaša povratna informacija pa prispeva k boljši stabilni različici.", - "termixBetas": "Termix bete", - "termixBetasHint": "Obvesti me o novih betah, ne le o stabilnih različicah.", - "runningBetaBuild": "Uporabljate beta različico. Za izhod preklopite nazaj na stabilno sliko ali namestitveni program.", - "howToInstall": "Kako dobiti beta različico", - "desktopInstall": "Prenesite beta namestitveni program in ga namestite namesto trenutnega.", - "downloadBeta": "Prenesi {{version}}", - "dockerInstall": "Spremenite sliko na beta oznako in ponovno zaženite kontejner:", - "copy": "Kopiraj", - "copied": "Kopirano", - "copyFailed": "Kopiranje ni uspelo", - "learnMore": "Več o betah", - "feedback": "Povratne informacije", - "feedbackHint": "Ste našli napako ali imate idejo? Pošlje se neposredno razvijalcem z že izpolnjeno verzijo.", - "sendFeedback": "Pošlji povratne informacije za beta", - "releases": "Različice", - "thisVersion": "Trenutna različica", - "newestStable": "Najnovejša stabilna", - "newestBeta": "Najnovejša beta", - "noRelease": "Trenutno ni", - "pluginBetas": "Beta vtičniki", - "pluginBetasIntro": "Vsak vtičnik lahko samostojno uporablja bete. Za preizkus ga odprite in pritisnite Preizkusi beta.", - "openPlugins": "Odpri vtičnike", - "waitingForStable": "Nazaj na stabilno. Ostane na {{version}}, dokler ni na voljo novejša stabilna različica.", - "backToStable": "Nazaj na stabilno", - "allPluginsBeta": "Uporabi bete za vse vtičnike", - "allPluginsStable": "Vsi vtičniki nazaj na stabilno", - "saveFailed": "Shranjevanje spremembe ni uspelo" - } + "featureUnavailable": "{{name}} trenutno ni na voljo. Te nastavitve so shranjene, vendar ne bodo imele učinka." }, "managerCard": { "refresh": "Osveži", @@ -2351,11 +1636,6 @@ "filter": "Filtriraj..." }, "sync": { - "server": "Termix strežnik", - "account": "Račun", - "status": "Stanje", - "never": "nikoli", - "justNow": "pravkar", "minutesAgo_one": "pred {{count}} minuto", "minutesAgo_two": "pred {{count}} minutama", "minutesAgo_few": "pred {{count}} minutami", @@ -2364,76 +1644,11 @@ "hoursAgo_two": "pred {{count}} urama", "hoursAgo_few": "pred {{count}} urami", "hoursAgo_other": "pred {{count}} urami", - "actionFailed": "To ni delovalo. Poskusite znova.", - "unlinkedTitle": "Samo ta naprava", - "unlinkedBody": "Termix deluje samostojno na tej napravi. Povežite ga s svojim Termix strežnikom, da boste vse ohranili sinhronizirano.", - "unlinkedPointHosts": "Vaši gostitelji, poverilnice, odlomki in nastavitve vas spremljajo na vsako napravo.", - "unlinkedPointOffline": "Vse še vedno deluje, ko strežnika ni mogoče doseči, in se kasneje sinhronizira.", - "unlinkedPointAccount": "Vpišete se s svojim računom na strežniku, tukaj pa se prikažejo tudi gostitelji, ki so jih z vami delili drugi.", - "linkButton": "Poveži s strežnikom", - "state": { - "syncing": "Sinhroniziranje", - "offline": "Strežnika ni mogoče doseči", - "error": "Sinhroniziranje ustavljeno", - "signedOut": "Odjavljen", - "synced": "Sinhronizirano {{time}}" - }, "pending_one": "{{count}} sprememba čaka na sinhronizacijo", "pending_two": "{{count}} spremembi čakata na sinhronizacijo", "pending_few": "{{count}} spremembe čakajo na sinhronizacijo", "pending_other": "{{count}} sprememb čaka na sinhronizacijo", - "signInAgain": "Ponovna prijava", - "syncNow": "Sinhroniziraj zdaj", - "unlink": "Prekini povezavo", - "unlinked": "Ta naprava ni več povezana", - "unlinkTitle": "Prekiniti povezavo s to napravo?", - "unlinkDescription": "Sinhronizacija se ustavi in odjavite se s strežnika. Strežniki, ki vam jih drugi delijo, bodo s te naprave odstranjeni v vsakem primeru.", - "unlinkKeepTitle": "Ohrani moje podatke tukaj", - "unlinkKeepBody": "Vaši strežniki, poverilnice in nastavitve ostanejo na tej napravi in bodo delovale samostojno.", - "unlinkRemoveTitle": "Odstrani sinhronizirane podatke", - "unlinkRemoveBody": "Vse, kar je prišlo s strežnika, bo odstranjeno s te naprave. Ohranjeni bodo le strežniki, ki so bili shranjeni le na tej napravi.", - "conflictsTitle": "Sukobi", - "conflictsDescription": "Ti so bili spremenjeni tukaj in na strežniku hkrati. Uporablja se različica s strežnika. Če želite namesto tega poslati svojo različico na strežnik, jo ohranite.", - "keepMine": "Ohrani mojo različico", - "keepServer": "Ohrani različico s strežnika", - "errorsTitle": "Ni sinhronizirano", - "errorsDescription": "Strežnik ni sprejel teh sprememb. Te ostanejo na tej napravi.", - "errorPermission": "Vaš račun na strežniku nima dovoljenja za to spremembo.", - "retry": "Poskusi znova", - "whatSyncs": "Kaj se sinhronizira", - "whatSyncsDescription": "Izklopite vse, kar želite obdržati le na tej napravi.", - "coreGroup": "Termix", - "notOnServer": "Strežnik tega nima", - "notOnDevice": "Še ni na tej napravi", - "localOnlyHint": "Posamezne strežnike ali mape lahko ohranite le na tej napravi tudi prek njihovih nastavitev.", - "originTitle": "Kje se začnejo povezave", - "originDescription": "Povežite se s strežniki iz te naprave ali prek strežnika. To lahko spremenite za vsak strežnik posebej.", - "originLocal": "Ta naprava", - "originRemote": "Strežnik", - "entities": { - "hosts": "Strežniki", - "sshCredentials": "Poverilnice", - "sshFolders": "Mape", - "userPreferences": "Nastavitve", - "pluginUserSettings": "Nastavitve vtičnikov", - "sharedHosts": "Strežniki, deljeni z vami", - "sharedCredentials": "Poverilnice, deljene z vami", - "vaultProfiles": "Profili varne shrambe", - "snippetFolders": "Mape odlomkov", - "snippets": "Odlomki", - "dashboardServiceLinks": "Povezave do storitev", - "homepageItems": "Elementi domače strani", - "networkTopology": "Omrežna karta", - "workspaces": "Delovni prostori", - "hostDefaults": "Privzete nastavitve strežnikov", - "hostDefaultsAdmin": "Privzete nastavitve strežnikov na strežniku", - "aiProviders": "Ponudniki AI", - "homepageLayouts": "Razporeditve domače strani", - "accountProfile": "Profil računa" - }, "proxy": { - "title": "Obratni proxy", - "description": "Potreben je le, ko je pred vašim strežnikom nekaj, kot je Cloudflare Access ali stran za prijavo.", "headersTitle": "Dodatne glave", "headersHint": "Pošljejo se z vsako zahtevo na strežnik, na primer žeton storitve Cloudflare Access.", "headerName": "Ime glave", @@ -2446,8 +1661,7 @@ "username": "Uporabniško ime", "password": "Geslo", "allowInvalidCertificate": "Zaupaj samopodpisani certifikat", - "allowInvalidCertificateHint": "Samo za vaš lastni strežnik, ko njegov certifikat ni od znanega izdajatelja.", - "saved": "Shranjeno" + "allowInvalidCertificateHint": "Samo za vaš lastni strežnik, ko njegov certifikat ni od znanega izdajatelja." }, "problems": { "invalidUrl": "To ne izgleda kot spletni naslov.", @@ -2489,6 +1703,27 @@ "linking": "Povezovanje in zagon prve sinhronizacije...", "linked": "Povezano. Vaši podatki se zdaj sinhronizirajo.", "signedInAgain": "Prijavljeno. Sinhronizacija se ponovno izvaja." + }, + "entities": { + "hosts": "Strežniki", + "sshCredentials": "Poverilnice", + "sshFolders": "Mape", + "userPreferences": "Nastavitve", + "pluginUserSettings": "Nastavitve vtičnikov", + "sharedHosts": "Strežniki, deljeni z vami", + "sharedCredentials": "Poverilnice, deljene z vami", + "vaultProfiles": "Profili varne shrambe", + "snippetFolders": "Mape odlomkov", + "snippets": "Odlomki", + "dashboardServiceLinks": "Povezave do storitev", + "homepageItems": "Elementi domače strani", + "networkTopology": "Omrežna karta", + "workspaces": "Delovni prostori", + "hostDefaults": "Privzete nastavitve strežnikov", + "hostDefaultsAdmin": "Privzete nastavitve strežnikov na strežniku", + "aiProviders": "Ponudniki AI", + "homepageLayouts": "Razporeditve domače strani", + "accountProfile": "Profil računa" } }, "hostDefaults": { @@ -2505,37 +1740,18 @@ "resetTitle": "Ta gostitelj uporablja lastno vrednost. Kliknite, da znova uporabite privzeto vrednost iz {{source}}", "clearTitle": "Nastavljeno na tej ravni. Kliknite za brisanje in uporabo {{source}} namesto tega", "inheritedTitle": "Sledi privzeti vrednosti iz {{source}}", - "titleAdmin": "Privzete nastavitve strežniških gostiteljev", - "titleUser": "Moje privzete nastavitve gostiteljev", - "titleFolder": "Privzete nastavitve mape: {{name}}", - "descriptionAdmin": "Privzete nastavitve za vse gostitelje na tem strežniku. Lastne nastavitve uporabnika, nastavitve mape ali sam gostitelj lahko še vedno določijo drugo vrednost. Spremenite polje, da ga nastavite tukaj, ali ga počistite, da ostane nedefinirano.", - "descriptionUser": "Privzete nastavitve za vse vaše gostitelje, ki nadomestijo nastavitve strežnika. Mapa ali sam gostitelj lahko še vedno določita drugo vrednost. Spremenite polje, da ga nastavite tukaj, ali ga počistite, da ostane nedefinirano.", - "descriptionFolder": "Privzete nastavitve za gostitelje v tej mapi in njenih podmapah, ki nadomestijo vaše lastne nastavitve. Sam gostitelj lahko še vedno določi drugo vrednost. Spremenite polje, da ga nastavite tukaj, ali ga počistite, da ostane nedefinirano.", - "save": "Shrani privzete nastavitve", "saved_one": "Privzete nastavitve shranjene. Posodobljen je bil {{count}} gostitelj.", "saved_two": "Privzete nastavitve shranjene. Posodobljena sta bila {{count}} gostitelja.", "saved_few": "Privzete nastavitve shranjene. Posodobljenih je bilo {{count}} gostiteljev.", "saved_other": "Privzete nastavitve shranjene. Posodobljenih je bilo {{count}} gostiteljev.", - "savedInBackground": "Privzete nastavitve shranjene. Gostitelji se posodabljajo v ozadju.", "appliedToHosts_one": "{{count}} gost je bil posodobljen z novimi privzetimi nastavitvami.", "appliedToHosts_two": "{{count}} gosta sta bila posodobljena z novimi privzetimi nastavitvami.", "appliedToHosts_few": "{{count}} gostje so bili posodobljeni z novimi privzetimi nastavitvami.", "appliedToHosts_other": "{{count}} gostov je bilo posodobljenih z novimi privzetimi nastavitvami.", - "saveFailed": "Ni bilo mogoče shraniti privzetih nastavitev", - "loadFailed": "Ni bilo mogoče naložiti privzetih nastavitev", - "confirmTitle": "Shraniti privzete nastavitve?", "confirmChanges_one": "{{count}} gost sledi tem privzetim nastavitvam in se bo spremenil.", "confirmChanges_two": "{{count}} gosta sledita tem privzetim nastavitvam in se bosta spremenila.", "confirmChanges_few": "{{count}} gostje sledijo tem privzetim nastavitvam in se bodo spremenili.", "confirmChanges_other": "{{count}} gostov sledi tem privzetim nastavitvam in se bodo spremenili.", - "confirmNoChanges": "Obstoječi gostje se ne bodo spremenili. Novi gostje bodo začeli s temi privzetimi nastavitvami.", - "menuMyDefaults": "Moje privzete nastavitve gostov", - "folderDefaultsAction": "Privzete nastavitve mape", - "adminSectionDescription": "Nastavite privzete vrednosti, ki jih sledi vsak gost na tem strežniku, za vsako nastavitev, ki jo ima gost, vključno z nastavitvami posameznih vtičnikov. Uporabniki in mape lahko dodajo svoje nastavitve na vrh, posamezni gostje pa lahko še vedno uporabljajo svoje lastne vrednosti.", - "editServerDefaults": "Uredi privzete nastavitve strežnika", - "resetMenu": "Ponastavi", - "resetAll": "Vse na privzeto", - "resetCore": "Povezava in SSH na privzeto", "resetDone_one": "{{count}} gostitelj zdaj uporablja privzete nastavitve.", "resetDone_two": "{{count}} gostitelja zdaj uporabljata privzeti nastavitvi.", "resetDone_few": "{{count}} gostitelji zdaj uporabljajo privzete nastavitve.", @@ -2551,38 +1767,11 @@ "fields": { "secretSaved": "Shranjeno. Vnesite za zamenjavo." }, - "sharing": { - "revokeConfirm": "Odstraniti dostop za {{name}}?", - "revoke": "Odstrani dostop" - }, "manage": { - "searchSettings": "Išči nastavitve", - "noMatchingSettings": "Ni ujemajočih nastavitev.", - "sections": "Oddelki", - "sectionNeedsAttention": "Nekaj tukaj potrebuje pozornost", "needsAttention_one": "Ena stvar potrebuje pozornost.", "needsAttention_two": "Dve stvari potrebujeta pozornost.", "needsAttention_few": "{{count}} stvari potrebujejo pozornost.", "needsAttention_other": "{{count}} stvari potrebuje pozornost.", - "bandHost": "Gostitelj", - "bandFeatures": "Protokoli in vtičniki", - "bandCredential": "Poverilnica", - "sshConnection": "SSH povezava", - "errorAddressRequired": "Naslov je obvezen.", - "errorPortRange": "Uporabite vrata med 1 in 65535.", - "defaults": "Privzeto", - "searchHosts": "Išči gostitelje", - "searchCredentials": "Išči poverilnice", - "searchDefaults": "Išči privzete nastavitve", - "addCredential": "Dodaj poverilnico", - "nothingMatches": "Ni ujemajočih", - "nothingYet": "Tukaj še ni ničesar", - "emptyHostsHint": "Dodajte gostitelja in bo prikazan tukaj, v kateri koli mapi, ki mu jo dodelite.", - "emptyCredentialsHint": "Shranjene poverilnice lahko ponovno uporabi kateri koli gostitelj.", - "collapse": "Strni", - "expand": "Razširi", - "cannotBeUndone": "Tega ni mogoče razveljaviti.", - "hostNotFound": "Tega gostitelja ni bilo mogoče najti. Poskusite osvežiti seznam.", "hostCount_one": "{{count}} gostitelj", "hostCount_two": "{{count}} gostitelja", "hostCount_few": "{{count}} gostitelji", @@ -2590,14 +1779,7 @@ "credentialCount_one": "{{count}} poverilnica", "credentialCount_two": "{{count}} poverilnici", "credentialCount_few": "{{count}} poverilnice", - "credentialCount_other": "{{count}} poverilnic", - "newHost": "Nov gostitelj", - "newCredential": "Nova poverilnica", - "advanced": "Napredno", - "pickHost": "Izberite gostitelja za urejanje", - "pickCredential": "Izberite poverilnico za urejanje", - "pickDefaults": "Izberite raven privzetih nastavitev za urejanje", - "pickHint": "Vse o povezavi je tukaj, razvrščeno, da jo lahko najdete." + "credentialCount_other": "{{count}} poverilnic" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/sr_SP.json b/src/ui/locales/translated/sr_SP.json index 8375f694a..3eaf75227 100644 --- a/src/ui/locales/translated/sr_SP.json +++ b/src/ui/locales/translated/sr_SP.json @@ -141,7 +141,6 @@ "continue": "Настави", "error": "Грешка", "unsavedChanges": "Несачуване промене", - "more": "Више", "loading": "Учитавање...", "host": "Домаћин", "selectHost": "Изаберите домаћина...", @@ -154,7 +153,6 @@ "cancel": "Откажи", "username": "Корисничко име", "login": "Пријава", - "logout": "Одјава", "register": "Регистрација", "password": "Лозинка", "confirmPassword": "Потврда лозинке", @@ -165,8 +163,6 @@ "rename": "Преименуј", "edit": "Уреди", "confirm": "Потврди", - "next": "Следеће", - "previous": "Претходно", "refresh": "Освежи", "language": "Језик", "backendReconnected": "Веза са сервером је обновљена", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Прочитајте о сваком од њих" }, "desktopUpdates": { - "title": "Десктоп апликација", - "mode": "Ажурирања", - "modeHint": "Како ова апликација добија нове верзије.", - "manualModeHint": "Ова копија не може сама да се ажурира, па Termix само обавештава када је нова верзија доступна.", "modeAutomatic": "Аутоматски", "modePrompt": "Питај прво", "modeNever": "Никад", @@ -247,15 +239,6 @@ "onboardingTitle": "Ажурирања апликације", "onboardingBody": "Десктоп апликација се сада може сама ажурирати. Изаберите како желите да стигну нове верзије. Ово можете касније променити у Подешавањима, Ажурирања.", "onboardingManual": "Ова копија апликације је инсталирана на начин који не дозвољава аутоматско ажурирање, па ће вас Termix обавестити када је нова верзија доступна, заједно са везом за преузимање.", - "status": "Верзија {{version}}", - "statusIdle": "Још није проверено", - "statusChecking": "Провера за ажурирања", - "statusAvailable": "Верзија {{version}} је доступна", - "statusDownloading": "Преузимање {{version}} ({{progress}}%)", - "statusReady": "Верзија {{version}} је спремна. Поново покрените да бисте је инсталирали.", - "statusUpToDate": "Имате најновију верзију", - "statusError": "Није могуће проверити за ажурирања. Покушајте поново касније.", - "checkNow": "Провери сада", "download": "Преузми", "restart": "Поново покрените сада", "later": "Касније", @@ -269,26 +252,11 @@ "terminal": "Терминал", "close": "Затвори", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Копирај лозинку", - "copySudoPassword": "Копирај sudo лозинку", - "passwordCopied": "Лозинка је копирана у оставу", - "failedToCopyPassword": "Копирање лозинке није успело", - "refreshTab": "Освежи везу", - "renameTab": "Преименуј картицу", "dashboard": "Контролна табла", "quickConnect": "Брзо повезивање", - "openAsTabHint": "Ctrl+клик или средњи клик за отварање као картицу", - "openAsTab": "Отвори као картицу", - "openInRightDock": "Отвори у десној траци", - "closeRightDock": "Затвори десну траку", - "toggleRightDock": "Укљ/искљ десну траку", "hosts": "Хостови", "credentials": "Потврде идентитета", "connections": "Везе", - "keepSideMenuOpen": "Задржи мени отвореним", - "collapseSideMenu": "Скупи мени", - "roleAdministrator": "Администратор", - "roleUser": "Корисник", "sync": "Синхронизација", "reconnectDisconnectedTerminals": "Повези све прекинуте терминале", "reconnectingTerminals_one": "Повезивање {{count}} терминала", @@ -300,31 +268,12 @@ "reconnectTerminalsFailed_other": "Није могуће покренути поновно повезивање {{count}} терминала", "fullscreenUnsupported": "Цео екран није подржан у овом прегледачу", "fullscreenFailed": "Није могуће укључити/искључити цео екран", - "resetSidebarWidth": "Ресетуј ширину", - "collapseSidebar": "Скупи бочну траку", - "openSidebar": "Отвори бочну траку", "confirmCloseHost": "Затвори {{host}}?", - "enterFullscreen": "Уђи у цео екран (Ctrl+Shift+F)", - "exitFullscreen": "Изађи из целог екрана (Ctrl+Shift+F)", - "group": { - "objects": "Моји", - "tools": "Алати", - "system": "Систем" - }, - "searchEverything": "Претражи хостове, картице и акције", - "search": "Претрага", "hiddenCount_one": "{{count}} сакривено", "hiddenCount_few": "{{count}} сакривена", "hiddenCount_other": "{{count}} сакривено", - "showInRail": "Прикажи у бочној траци", - "moveUp": "Помери нагоре", - "moveDown": "Помери надоле", - "resetRailOrder": "Ресетуј редослед", - "hideFromRail": "Сакриј из бочне траке", - "openSettings": "Отвори подешавања", "settings": "Подешавања", "manage": "Управљај", - "mobileNavigation": "Навигација", "plugins": "Прилози" }, "hosts": { @@ -930,35 +879,14 @@ "importSummary": "Увоз завршен: {{imported}} увезено, {{updated}} ажурирано, {{failed}} неуспешно", "importHostsFailed": "Неуспешан увоз хостова" }, - "commandPalette": { - "searchPlaceholder": "Претражи хостове, команде или подешавања...", - "quickActions": "Брзе акције", - "navigation": "Навигација", - "orShortcut": "или", - "addNewHost": "Додај нови хост", - "adminSettings": "Администраторска подешавања", - "addCredential": "Додај акредитиве", - "recentActivity": "Скорашња активност", - "serversAndHosts": "Сервери и хостови", - "noHostsFound": "Није пронађен хост који одговара „{{search}}“", - "links": "Линкови", - "navigate": "Навигација", - "select": "Изабери", - "pluginActions": "Више акција", - "noTargetTab": "Ниједан терминалски таб није отворен", - "documentation": "Документација" - }, "splitScreen": { "title": "Подељен екран", "defaultLabel": "Подела {{number}}", "splitRight": "Подели десно", "splitDown": "Подели доле", - "addToSplit": "Додај у {{split}}", "paneEmptyItem": "Панел {{index}}: празан", "paneItem": "Панел {{index}}: {{label}}", "paneNumber": "Панел {{index}}", - "newPaneRight": "Нови панел десно", - "newPaneBelow": "Нови панел испод", "emptyTitle": "Празан панел", "emptyHint": "Изаберите шта да се прикаже овде. Док је овај панел изабран, све што отворите из бочног менија ће се отворити овде.", "openTabs": "Отворени табови", @@ -975,7 +903,6 @@ "clearPane": "Испразни овај панел", "zoom": "Увећај панел", "unzoom": "Врати распоред", - "unsplit": "Уједини панеле", "layouts": "Распоређивања", "applyLayout": "Промени распоред", "maxPanes_one": "Пodela може да садржи до {{count}} панела", @@ -985,8 +912,6 @@ "dropHere": "Остави да се прикаже овде", "paneActions": "Акције панела", "dividerHint": "Превуците за промену величине. Двоструки клик за једнаку величину.", - "openInSplit": "Отвори у подељеном екрану", - "openInNewSplit": "Нова подела са тренутним табом", "shortcuts": "Пречице", "shortcutNavigate": "Кретање између панела", "presets": { @@ -1000,23 +925,6 @@ "grid6": "Мрежа од шест" } }, - "connections": { - "noConnections": "Нема веза", - "noConnectionsDesc": "Отворите терминал, управник датотека или удаљени десктоп да бисте видели везе овде", - "connectedFor": "Повезан {{duration}}", - "connected": "Повезан", - "disconnected": "Прекинуто", - "reconnect": "Поново повези", - "sectionOpen": "Отворено", - "sectionBackground": "Позадина", - "backgroundDesc": "Сесије трају {{minutes}} минута након прекида и могу се поново покренути.", - "expiresIn": "Истиче за {{duration}}", - "search": "Претражи везе...", - "noSearchResults": "Нема веза које одговарају претрази", - "rename": "Преименуј сесију", - "forgetConfirm": "Завршити сесију у позадини за {{name}}?", - "forget": "Заврши сесију" - }, "sshAuth": { "totpRequired": "Потребна је двофакторска аутентификација", "totpCodeLabel": "Код за верификацију", @@ -1154,65 +1062,14 @@ "placeholders": { "keyPassword": "лозинка кључа", "pastePrivateKey": "Налепите свој приватни кључ овде...", - "enterPassword": "Унесите своју лозинку", - "apiKeyName": "нпр. CI Pipeline", - "credentialName": "нпр. SSH кључ за продукцију", - "optionalDetails": "Опционе детаље...", - "sshUsername": "нпр. root или deploy", - "hostAddress": "10.0.0.1 или example.com", - "hostName": "нпр. Веб сервер за продукцију" + "enterPassword": "Унесите своју лозинку" }, "dashboard": { - "title": "Контролна табла", - "github": "GitHub", - "reportBug": "Пријави грешку", - "discord": "Discord", - "docs": "Документација", - "donate": "Донирај", - "serverOverview": "Преглед сервера", - "version": "Верзија", "updateAvailable": "Доступно ажурирање", - "beta": "Бета", - "uptime": "Време рада", - "database": "База података", - "healthy": "Здраво", - "error": "Грешка", - "totalHosts": "Укупан број хостова", - "totalCredentials": "Укупан број акредитива", - "recentActivity": "Скорашња активност", - "reset": "Ресетуј", - "noRecentActivity": "Нема скорашње активности", - "quickActions": "Брзе акције", - "addHost": "Додај хост", - "addCredential": "Додај акредитив", - "adminSettings": "Администраторска подешавања", - "userProfile": "Профил корисника", - "serverStats": "Статистика сервера", - "customizeLayout": "Прилагоди контролну таблу", - "justNow": "управо сада" + "beta": "Бета" }, "dashboardTab": { "stable": "СТАБИЛНО", - "registerNewServer": "Региструј нови сервер", - "storeSshKeysOrPasswords": "Сачувај SSH кључеве или лозинке", - "manageUsersAndRoles": "Управљај корисницима и улогама", - "manageYourAccount": "Управљај својим налогом", - "hostStatus": "Статус хоста", - "noHostsConfigured": "Није конфигурисан ниједан хост", - "checking": "ПРОВЕРАВА СЕ", - "commandPalette": "Палета команди", - "done": "Готово", - "clear": "Очисти", - "dragToResizeColumns": "Превуци за промену величине колона", - "hostsAvailable": "Доступни хостови", - "removeSection": "Уклони секцију", - "addSection": "Додај секцију", - "allSectionsShown": "Све је већ приказано на таблу.", - "fromPlugins": "Из додатака", - "dropHere": "Овде испустите секцију", - "dragToReorder": "Превуци секције за промену редоследа", - "clearActivityConfirm": "Очистити вашу недавну активност?", - "resetConfirm": "Ресетовати таблу на подразумевани распоред?", "onlineCount_one": "{{count}} активан", "onlineCount_few": "{{count}} активна", "onlineCount_other": "{{count}} активних", @@ -1221,425 +1078,48 @@ "hostCount_other": "{{count}} хостова" }, "admin": { - "sectionGeneral": "Опште", - "sectionUsers": "Корисници", - "sectionSessions": "Сесије", - "sectionRoles": "Улоге", - "sectionDatabase": "База података", - "sectionApiKeys": "API кључеви", - "sectionAuditLog": "Аудитни дневник", - "sectionSsl": "HTTPS сертификат", - "sectionBranding": "Бела ознака", - "brandingAppName": "Назив апликације", - "brandingAppNameDesc": "Приказује се на екрану за пријаву и картици прегледача. Оставите празно да бисте користили „Termix“.", - "brandingTagline": "Слоган", - "brandingTaglineDesc": "Приказује се испод назива апликације на екрану за пријаву. Оставите празно да бисте користили подразумевани слоган.", - "brandingLogo": "Лого", - "brandingLogoDesc": "PNG, JPEG или WEBP, до 750 KB. Замењује подразумевану икону на екрану за пријаву и картици прегледача.", - "brandingLogoUpload": "Отпреми лого", - "brandingLogoReset": "Врати на подразумевано", - "brandingLogoInvalid": "Неважећа слика. Користите PNG, JPEG или WEBP фајл до 750 KB.", - "brandingSaved": "Подешавања брендирања су сачувана", - "brandingSaveFailed": "Чување подешавања брендирања није успело", - "sslDescription": "Сертификат који Termix користи за HTTPS. Отпремите свој овде или добијте и обновите сертификат од Let's Encrypt у секцији ACME сертификати.", - "sslDocsLink": "Погледај SSL документацију", - "sslCertStatus": "Статус сертификата", - "sslCertStatusNone": "Нема сертификата", - "sslCertStatusValid": "Важећи", - "sslCertStatusExpiring": "Истиче ускоро", - "sslCertStatusExpired": "Истекao", - "sslCertExpiresAt": "Истиче {{date}}", - "sslInfoNote": "Након издавања или отпремања сертификата, Termix ће аутоматски омогућити HTTPS на SSL_PORT (подразумевано 8443) поред постојећег HTTP порта. Уверите се да је тај порт објављен/мапиран на овај контејнер како би био доступан.", - "sslManualCert": "Сертификат (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Приватни кључ (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Залепите ваш постојећи сертификат и приватни кључ, укључујући цео ланац ако то захтева ваша CA.", - "sslManualUpload": "Отпреми и инсталирај сертификат", - "sslManualUploadLoading": "Отпремање сертификата...", - "sslManualUploadSuccess": "Сертификат је успешно отпремљен и инсталиран", - "sslManualUploadFailed": "Отпремање сертификата није успело", - "sslManualRequiresFields": "Сертификат и приватни кључ су обавезни", - "auditLogTotal": "{{total}} укупно ставки", - "auditLogEmpty": "Није пронађена ниједна ставка у аудитном дневнику", - "auditLogSuccess": "Успешно", - "auditLogFailed": "Није успело", - "auditLogClearFilters": "Очисти филтере", - "auditLogPage": "Страна {{page}} од {{totalPages}} ({{total}} укупно)", - "auditLogIp": "IP", - "auditLogResourceId": "ID ресурса", - "auditLogFilterUser": "Корисник", - "auditLogFilterAction": "Акција", - "auditLogFilterResourceType": "Врста ресурса", - "auditLogFilterStatus": "Статус", - "auditLogFilterFrom": "Од", - "auditLogFilterTo": "До", - "auditLogFilterAll": "Све", - "allowRegistration": "Дозволи регистрацију корисника", - "allowRegistrationDesc": "Дозволи новим корисницима да се сами региструју помоћу корисничког имена и лозинке", - "allowPasswordLogin": "Дозволи пријаву лозинком", - "allowPasswordLoginDesc": "Пријава корисничким именом и лозинком", - "externalAutoProvision": "Аутоматско креирање спољних налога", - "externalAutoProvisionDesc": "Направи налог први пут када се неко пријави кроз спољну пријаву као што су SSO или LDAP. Када је искључено, само особе које већ имају налог могу се тако пријавити", - "secondFactorAfterExternalLogin": "Питај за други фактор након спољних пријава (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Када је искључено, други фактор се тражи само након пријаве лозинком и других локалних пријава, као и раније. Када је укључено, тражи се након сваке методе пријаве, укључујући SSO и LDAP.", - "allowPasswordReset": "Дозволи ресетовање лозинке", - "allowPasswordResetDesc": "Код за ресетовање преко Docker логова", - "auditForwardingTitle": "Преноси на SIEM", - "auditForwardingDesc": "Пошаљи копију сваког уноса из дневника ревизије спољном прикупљачу у NDJSON формату. Локални дневници остају извор истине.", - "auditForwardingEnvNotice": "Промењива окружења такође конфигурише пренос; URL сачуван овде има предност.", - "auditForwardingToken": "Bearer токен (опционо)", - "auditForwardingTokenStored": "Bearer токен (сачуван)", - "auditForwardingSaved": "Подешавања преноса дневника ревизије су сачувана", - "auditForwardingSaveError": "Неуспешно чување подешавања преноса дневника ревизије", - "sessionTimeout": "Истек сесије", - "hours": "сати", - "sessionTimeoutRange": "Мин 1 сат, макс 720 сати", - "monitoringDefaults": "Подразумевана подешавања мониторинга", - "statusCheck": "Провера статуса", - "sec": "сек", - "logLevel": "Ниво дневника", "usersCount_one": "{{count}} корисник", "usersCount_few": "{{count}} корисника", - "usersCount_other": "{{count}} корисника", - "searchUsers": "Претражи кориснике...", - "noUsers": "Нема корисника", - "noUsersMatch": "Нема корисника који одговарају вашој претрази", - "pageOf": "Страница {{page}} од {{total}}", - "createUser": "Направи", - "newRole": "Нова улога", - "roleName": "Име", - "roleDisplayName": "Приказано име", - "roleDescription": "Опис", "rolesCount_one": "{{count}} улога", "rolesCount_few": "{{count}} улога", - "rolesCount_other": "{{count}} улога", - "createRole": "Направи", - "creating": "Креирање...", - "exportDatabase": "Извези базу података", - "exportDatabaseDesc": "Преузми преносиви SQLite резервни примерак свих хостова, акредитива и подешавања", - "export": "Извези", - "exporting": "Извоз...", - "importDatabase": "Увези базу података", - "importDatabaseDesc": "Врати из преносивог .sqlite резервног примерка на било ком позадинском систему базе података", - "importDatabaseSelected": "Изабрано: {{name}}", - "selectFile": "Изабери датотеку", - "changeFile": "Промени", - "import": "Увези", - "importing": "Увоз...", "apiKeysCount_one": "{{count}} кључ", "apiKeysCount_few": "{{count}} кључева", - "apiKeysCount_other": "{{count}} кључева", - "apiKeysDocsLink": "Погледај документацију", - "apiKeysCliHint": "Користи API кључ са Termix CLI за управљање серверима из терминала.", - "apiKeysCliLink": "Погледај CLI документацију", - "newApiKey": "Нови API кључ", - "apiKeyCreatedWarning": "Кључ је креиран - копирајте га одмах, јер се више неће приказати.", - "apiKeyName": "Име", - "apiKeyUser": "Корисник", - "apiKeySelectUser": "Изаберите корисника...", - "apiKeyExpiresAt": "Истиче", - "createKey": "Креирај кључ", - "apiKeyNoExpiry": "Без истека", - "revokedBadge": "ОПОВУКНУТ", - "authTypeDual": "Двострука аутентификација", - "authTypeExternal": "Спољна", - "authTypeLocal": "Локална", - "adminStatusAdministrator": "Администратор", - "adminStatusRegularUser": "Обичан корисник", - "adminBadge": "АДМИН", - "systemBadge": "СИСТ", - "customBadge": "ПРИЛАГОЂЕНО", - "youBadge": "ВИ", "sessionsActive_one": "{{count}} активно", "sessionsActive_few": "{{count}} активна", - "sessionsActive_other": "{{count}} активно", - "sessionActive": "Активно: {{time}}", - "sessionExpires": "Ист: {{time}}", - "revokeAll": "Све", - "revokeAllSessionsSuccess": "Све сесије за корисника су оповуците", - "revokeAllSessionsFailed": "Неуспешно опозивање сесија", - "revokeSessionFailed": "Неуспешно опозивање сесије", - "addRole": "Додај улогу", - "noCustomRoles": "Нису дефинисане прилагођене улоге", - "removeRoleFailed": "Неуспешно уклањање улоге", - "assignRoleFailed": "Неуспешно додељивање улоге", - "userAdminAccess": "Администратор", - "userAdminAccessDesc": "Пун приступ свим администраторским подешавањима", - "userRoles": "Улоге", - "revokeAllUserSessions": "Опозови све сесије", - "revokeAllUserSessionsDesc": "Присили поновно пријављивање на свим уређајима", - "revoke": "Опозови", - "deleteUserWarning": "Брисање овог корисника је трајно.", - "deleteUser": "Обриши {{username}}", - "deleting": "Брисање...", - "deleteUserFailed": "Неуспешно брисање корисника", - "deleteUserSuccess": "Корисник „{{username}}“ је обрисан", - "deleteRoleSuccess": "Улога „{{name}}“ је обрисана", - "revokeKeySuccess": "Кључ „{{name}}“ је опозван", - "revokeKeyFailed": "Неуспешно опозивање кључа", - "copiedToClipboard": "Копирано у оставу", - "done": "Готово", - "createUserTitle": "Креирај корисника", - "createUserDesc": "Креирајте нови локални налог.", - "createUserUsername": "Корисничко име", - "createUserPassword": "Лозинка", - "createUserPasswordHint": "Минимум 6 карактера.", - "createUserEnterUsername": "Унесите корисничко име", - "createUserSubmit": "Креирај корисника", - "editUserTitle": "Управљај корисником: {{username}}", - "editUserDesc": "Уредите улоге, администраторски статус, сесије и подешавања налога.", - "editUserUsername": "Корисничко име", - "editUserAuthType": "Врста аутентификације", - "editUserAdminStatus": "Администраторски статус", - "editUserUserId": "ИД корисника", - "linkAccountTitle": "Повезивање налога", - "linkAccountDesc": "Спојите спољни налог {{username}} са постојећим локалним налогом.", - "linkAccountDescLocal": "Повезите локални налог {{username}} са постојећим налогом који је само спољни.", - "linkAccountWarningTitle": "Ово ће:", - "linkAccountEffect1": "Обрисати налог који постоји само споља", - "linkAccountEffect2": "Додати спољну пријаву на циљни налог", - "linkAccountEffect3": "Дозволити пријаву и спољним налогом и лозинком", - "linkAccountTargetUsername": "Корисничко име локалног налога", - "linkAccountTargetPlaceholder": "Унесите корисничко име локалног налога за повезивање", - "linkAccountExternalUsername": "Корисничко име спољног налога", - "linkAccountExternalPlaceholder": "Унесите корисничко име налога који постоји само споља за спајање", - "linkAccountExternalNotFound": "Није пронађен налог који постоји само споља са тим корисничким именом", - "linkAccounts": "Повезивање налога", - "linkAccountSuccess": "Налози су успешно повезани", - "linkAccountFailed": "Повезивање налога није успело", - "linkAccountInProgress": "Повезивање...", - "unlinkAccountTitle": "Откажи спољну пријаву", - "unlinkAccountDesc": "Уклоните спољну пријаву са {{username}}. Корисник ће се моћи пријавити само помоћу лозинке.", - "unlinkAccountWarning": "Ово ће уклонити спољну пријаву са овог налога. Корисник мора имати постављену лозинку да би се и даље могао пријавити.", - "unlinkAccount": "Откажи спољну пријаву", - "unlinkAccountInProgress": "Откажује се...", - "unlinkAccountSuccess": "Спољна пријава је отказана", - "unlinkAccountFailed": "Отказивање спољне пријаве није успело", - "updateRegistrationFailed": "Ажурирање подешавања регистрације није успело", - "updatePasswordLoginFailed": "Ажурирање подешавања пријаве лозинком није успело", - "updateSecondFactorAfterExternalLoginFailed": "Ажурирање подешавања другог фактора није успело", - "updatePasswordResetFailed": "Ажурирање подешавања ресетовања лозинке није успело", - "sessionTimeoutRange2": "Време истека сесије мора бити између 1 и 720 сати", - "sessionTimeoutSaved": "Време истека сесије је сачувано", - "sessionTimeoutSaveFailed": "Чување времена истека сесије није успело", - "monitoringIntervalInvalid": "Неисправне вредности интервала", - "monitoringSaved": "Подешавања праћења су сачувана", - "monitoringSaveFailed": "Чување подешавања праћења није успело", - "logLevelUpdateFailed": "Ажурирање нивоа бележења није успело", - "createUserRequired": "Корисничко име и лозинка су обавезни", - "createUserPasswordTooShort": "Лозинка мора имати најмање 6 карактера", - "createUserSuccess": "Корисник „{{username}}“ је креиран", - "createUserFailed": "Креирање корисника није успело", - "updateAdminStatusFailed": "Ажурирање админ статусa није успело", - "allSessionsRevoked": "Све сесије су поништене", - "revokeSessionsFailed": "Поништавање сесија није успело", - "manageUserData": "Управљање корисничким подацима", - "backToUsers": "Назад на кориснике", - "manageTabAccount": "Налог", - "manageTabHosts": "Хостови", - "manageTabCredentials": "Акредитиви", - "manageTabSessions": "Сесије", - "manageTabDanger": "Опасност", - "manageEditorBack": "Назад на податке корисника {{username}}", - "dataLockedBadge": "ЗАКЉУЧАНО", - "dataLockedNotice": "Подаци корисника {{username}} остају закључани до његове следеће пријаве. Његови хостови, акредитиви и фрагменти не могу се прегледати или уређивати до тада.", - "resetPasswordTitle": "Ресетуј лозинку", - "resetPasswordExternalOnly": "Овај корисник се пријављује преко спољног провајдера и нема лозинку.", - "resetPasswordPlaceholder": "Нова лозинка", - "resetPasswordBtn": "Ресетуј", - "resetPasswordWorking": "Ресетује се...", - "resetPasswordSuccess": "Лозинка је ресетована", - "resetPasswordSuccessWiped": "Лозинка је ресетована. Шифровани подаци корисника су обрисани.", - "resetPasswordFailed": "Ресетовање лозинке није успело", - "resetPasswordConfirmWipe": "Корисник {{username}} се није пријавио од ажурирања шифровања, па његови подаци не могу бити повраћени. Ресетовање сада ће обрисати његове хостове, акредитиве и фрагменте. Наставити?", - "manageApiKeys": "API кључеви", - "apiKeyNamePlaceholder": "Назив кључа", - "apiKeyCopyNotice": "Копирајте овај кључ сада, јер се више неће приказати.", - "noApiKeysForUser": "Нема API кључева", - "apiKeyDeleteFailed": "Неуспешно брисање API кључа", - "exportUserData": "Извоз података", - "exportUserDataDesc": "Преузмите хостове, акредитиве и податке фајл менаџера овог корисника као JSON. Тајне су дешифроване.", - "exportUserDataSuccess": "Подаци корисника су извезени", - "exportUserDataFailed": "Неуспешан извоз података корисника", "hostsCount_one": "{{count}} хост", "hostsCount_few": "{{count}} хостова", "hostsCount_other": "{{count}} хостова", - "addHostForUser": "Додај хост", - "noHostsForUser": "Овај корисник нема хостове", - "connectToHost": "Повежи се", - "deleteHostConfirm": "Обриши хост „{{name}}“ који припада кориснику {{username}}?", - "hostDeletedSuccess": "Хост је обрисан", - "hostDeleteFailed": "Неуспешно брисање хоста", "credentialsCount_one": "{{count}} акредитив", "credentialsCount_few": "{{count}} акредитива", "credentialsCount_other": "{{count}} акредитива", - "addCredentialForUser": "Додај акредитив", - "noCredentialsForUser": "Овај корисник нема акредитиве", - "deleteCredentialConfirm": "Обриши акредитив „{{name}}“ који припада кориснику {{username}}?", - "credentialDeletedSuccess": "Акредитив је обрисан", - "credentialDeleteFailed": "Неуспешно брисање акредитива", - "noSessionsForUser": "Нема активних сесија", - "deleteSuccessorLabel": "Пренеси хостове и акредитиве на", - "deleteSuccessorMe": "Мене (администратора који брише)", - "deleteSuccessorNone": "Никога, обриши их", - "deleteSuccessorDesc": "Све што је овај корисник делио наставља да ради под новим власником; избор „никога“ уклања његове хостове, акредитиве и дељења.", - "deleteUserDangerDesc": "Трајно обриши корисника {{username}} и све његове податке (хостове, акредитиве, фрагменте, историју). Ово се не може поништити.", - "deleteUserConfirm": "Трајно обрисати корисника {{username}} и све његове податке?", - "deleteUserAdminBlocked": "Уклони администраторски статус пре брисања овог корисника.", - "createRoleRequired": "Име и приказно име су обавезни", - "createRoleSuccess": "Улога „{{name}}“ је креирана", - "createRoleFailed": "Неуспешно креирање улоге", - "apiKeyNameRequired": "Име кључа је обавезно", - "apiKeyUserRequired": "ID корисника је обавезан", - "apiKeyCreatedSuccess": "API кључ „{{name}}“ је креиран", - "apiKeyCreateFailed": "Неуспешно креирање API кључа", - "exportSuccess": "База података је успешно извезена", - "exportFailed": "Извоз базе података није успео", - "importSelectFile": "Прво изаберите фајл", - "importCompleted": "Увоз је завршен: {{total}} ставки унето, {{skipped}} прескочено", - "importFailed": "Увоз није успео: {{error}}", - "importError": "Увоз базе података није успео", - "sectionHostDefaults": "Подразумевани подаци за хостове", "rolePermissions": { "count_one": "{{count}} дозвола", "count_few": "{{count}} дозвола", - "count_other": "{{count}} дозвола", - "editAction": "Уреди дозволе", - "loadError": "Неуспешно учитавање каталога дозвола", - "saved": "Дозволе улоге су сачуване", - "saveError": "Неуспешно чување дозвола улоге", - "save": "Сачувај", - "saving": "Чување...", - "pluginDisabled": "Прикључак је онемогућен", "groups": { "hosts": "Хостови", "credentials": "Акредитиви", "admin": "Администрација" } - }, - "notificationPrivateEndpoints": "Дозвољени приватни хостови за обавештења", - "notificationPrivateEndpointsDesc": "Прецизни приватни хостови које канали за обавештења могу контактирати. Раздвојите их зарезима.", - "updateNotificationEndpointsFailed": "Неуспешно ажурирање листе дозвољених адреса за обавештења", - "secondFactorsSectionTitle": "Други фактори", - "secondFactorsNone": "Ниједан други фактор није пријављен", - "secondFactorUnavailable": "Није доступно", - "resetSecondFactors": "Ресетуј друге факторе", - "resetSecondFactorsConfirm": "Уклонити сваки други фактор за корисника {{username}}? Може се пријавити лозинком или SSO и поново пријавити.", - "secondFactorsResetSuccess": "Други фактори су ресетовани", - "secondFactorsResetFailed": "Ресетовање других фактора није успело", - "passwordLoginForced": "Пријава лозинком је искључена, али ниједан други метод пријаве није омогућен, па остаје укључена за сада. Нико неће бити закључан.", - "sslNotRenewed": "Ништа не обнавља овај сертификат. Истиче {{date}}. Укључите аутоматско обнављање у одељку ACME сертификати или отпремите нови пре тога.", - "sslSelfSigned": "Самопотписани сертификат који је направио Termix. Прегледачи ће упозорити на њега.", - "sslRenewedBy": "Аутоматски обновљено од стране {{plugin}}", - "sslIssuer": "Издао {{issuer}}", - "sslNames": "Покрива {{names}}", - "sslManualTitle": "Отпреми сертификат", - "updateExternalAutoProvisionFailed": "Ажурирање подешавања аутоматског креирања није успело", - "hostTags": "Унапред дефинисане ознаке за хостове", - "hostTagsDesc": "Ознаке које сваки корисник види као предлоге у уређивачу хостова. Притисните Размак или Enter да додате једну. Уклањање ознаке овде не уклања је са хостова.", - "hostTagsError": "Није могуће учитати или сачувати предлоге ознака за хостове.", - "revokeAllSessionsConfirm": "Одјавити {{username}} свуда?", - "revokeSessionConfirm": "Одјавити ову сесију?", - "revokeSession": "Одјави се", - "deleteRoleConfirm": "Обрисати улогу {{name}}?", - "revokeKeyConfirm": "Опозвати API кључ {{name}}?", - "revokeKey": "Опозови" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Где", - "who": "Ко", - "hostLabel": "Хост", - "hostPlaceholder": "192.168.1.1 или example.com", - "portLabel": "Порт", - "usernameLabel": "Корисничко име", - "usernamePlaceholder": "корисничко име", - "authLabel": "Аутентификација", - "passwordLabel": "Лозинка", - "passwordPlaceholder": "лозинка", - "privateKeyLabel": "Приватни кључ", - "privateKeyPlaceholder": "Залепите приватни кључ...", - "credentialLabel": "Акредитив", - "credentialPlaceholder": "Изаберите сачувани акредитив", - "protocolLabel": "Протокол", - "domainLabel": "Домен", - "domainPlaceholder": "опционо", - "connectToAction": "Повежи се са {{name}}", - "sshProtocol": "SSH", - "noTarget": "Ништа инсталирано не може да се повеже са овим типом хоста" + "usernameLabel": "Корисничко име" }, "keybindings": { - "description": "Повезите тастере са акцијама у терминалу и апликацији, или промените уграђене пречице.", - "defaultsHeading": "Уграђене пречице", - "fixedHeading": "Пречице апликације", - "fixed": { - "splitRight": "Подијели десно", - "splitDown": "Подијели надоле", - "zoomPane": "Зумирај фокусирану панел", - "navigatePane": "Кретање између панела", - "nextTab": "Следећи таб", - "previousTab": "Претходни таб", - "jumpTab": "Скочи на таб", - "previousView": "Назад на претходни приказ бочне траке", - "fullscreen": "Укључи/искључи целу екран" - }, - "customHeading": "Прилагођене пречице", - "addBinding": "Додај пречицу", - "addBindingTitle": "Додај пречицу", - "editBindingTitle": "Уреди пречицу", - "loading": "Учитавање...", - "noCustomBindings": "Још нема прилагођених пречица", - "defaultBadge": "Подразумевано", - "customizedBadge": "Прилагођено", - "customize": "Прилагоди", - "resetToDefault": "Врати на подразумевано", - "resetAllToDefaults": "Врати све на подразумевано", - "cancel": "Откажи", - "saveBinding": "Сачувај пречицу", - "saveError": "Није успело чување пречица са тастатуре", - "pressKeysToRecord": "Комбинација тастера", - "pressKeysPlaceholder": "Кликните и притисните тастере", - "recording": "Притисните тастере...", - "comboRequiredError": "Прво притисните комбинацију тастера", - "conflictWarning": "Ова комбинација је већ додељена за {{combo}}. Чување ће покренути обе акције.", - "actionLabel": "Акција", "actionNextTab": "Пређи на следећи таб", "actionPreviousTab": "Пређи на претходни таб", "actionOpenCommandPalette": "Отвори брзу претрагу", - "actionReconnectSession": "Повези тренутну сесију поново", - "unavailableAction": "{{type}} (није доступно)", - "actionRequiredError": "Прво изаберите акцију", - "deleteConfirm": "Избрисати ово мапирање тастера?", - "resetAllConfirm": "Вратити сва мапирања тастера на подразумевана?" + "actionReconnectSession": "Повези тренутну сесију поново" }, "userProfile": { - "storageModeLocal": "Прегледач", - "storageModeCloud": "База података", - "storageModeDescription": "Прегледач чува подешавања само у овом прегледачу. База података синхронизује са сервером и учитава се на било ком уређају.", - "resetToDefaults": "Врати на подразумевана", - "resetToDefaultsSuccess": "Подешавања су враћена на подразумевана.", - "storageModeSwitch": "Складиштење преференција", - "sectionAccount": "Налог", - "desktopProfileTitle": "Само на овом уређају", - "desktopProfileDescription": "Овај профил постоји само на овом уређају и самостално се пријављује. Повежите га са Termix сервером да бисте користили исте хостове и подешавања на свим уређајима.", - "sectionInterface": "Интерфејс", - "interfacePresetDesc": "Колико детаља Termix приказује. Свака функција остаје доступна.", "preset_simple": "Једноставан", "preset_simple_desc": "Само основно.", "preset_balanced": "Умерен", "preset_balanced_desc": "Стандардни распоред.", "preset_advanced": "Напредан", "preset_advanced_desc": "Све укључено, густо спаковано.", - "presetClearOverrides": "Врати све", - "presetOverridesTitle": "Прилагођено", - "presetRevertArea": "Врати", - "presetConfirmTitle": "Прелазак на {{preset}}?", - "presetConfirmDesc": "Ово враћа бочну траку, навигацију, распоред табле, алатну траку терминала и приказ управника датотека. Вашим хостовима, акредитивима и почетној страници ништа се не мења.", - "presetConfirmApply": "Примени предлошак", - "runSetupAgainDesc": "Поново прођите кроз постављање за први пут.", - "runSetupAgainButton": "Покрени постављање", "uiArea_chrome": "Интерфејс апликације", "uiArea_hostList": "Листа хостова", "uiArea_credentialList": "Листа акредитива", @@ -1648,127 +1128,14 @@ "uiArea_terminal": "Терминал", "uiArea_fileManager": "Управник датотека", "uiArea_hostEditor": "Уређивач хостова", - "sectionAppearance": "Изглед", - "sectionSecurity": "Безбедност", - "sectionApiKeys": "API кључеви", - "sectionData": "Подаци", - "usernameLabel": "Корисничко име", - "roleLabel": "Улога", - "roleAdministrator": "Администратор", - "authMethodLabel": "Метода аутентификације", - "authMethodLocal": "Локално", - "twoFaLabel": "2FA", - "twoFaOn": "Укључено", - "twoFaOff": "Искључено", - "versionLabel": "Верзија", - "cliTitle": "Termix CLI", - "cliDescription": "Отварајте терминале, покрените команде и крећите датотеке из сопствене шкољке.", - "cliLearnMore": "Сазнајте више", - "deleteAccount": "Обриши налог", - "deleteAccountDescription": "Трајно обришите свој налог", - "deleteButton": "Обриши", - "deleteAccountPermanent": "Ова акција је трајна и не може се поништити.", - "deleteAccountWarning": "Све сесије, хостови, акредитиви и подешавања биће трајно обрисани.", - "confirmPasswordDeletePlaceholder": "Унесите лозинку за потврду", "languageLabel": "Језик", "themeLabel": "Тема", "fontSizeLabel": "Величина фонта", "interfaceFontLabel": "Фонт интерфејса", "interfaceFontDescription": "Менја фонт интерфејса апликације. Профили терминала задржавају сопствена подешавања фонта.", "accentColorLabel": "Акцентна боја", - "keyboardShortcuts": "Пречице на тастатури", - "keyboardShortcutsDescription": "Прилагодите пречице за копирање, лепљење и команде у терминалу", - "manageShortcuts": "Управљај", - "commandPalette": "Палета команди", - "commandPaletteDesc": "Омогући пречицу на тастатури", - "reopenTabsOnLogin": "Поново отвори картице пријавом", - "reopenTabsOnLoginDesc": "Вратите отворене картице пријавом или освежавањем странице, чак и са другог уређаја", - "confirmTabClose": "Потврди затварање картице", - "confirmTabCloseDesc": "Питај пре затварања картица терминала", - "showTabNumbers": "Прикажи бројеве картица", - "showTabNumbersDesc": "Прикажи број на свакој картици како би се лакше разликовале", - "settingsAppRail": "Лента апликација", - "sidebarSettingsMoved": "Подешавања приказа бочне траке хостова су премештена у панел Прилагоди бочну траку, који се отвара са алатне траке Хостови.", - "showHostTags": "Прикажи ознаке хостова", - "showHostTagsDesc": "Прикажи ознаке у листи хостова", - "statusColors": "Стварне боје статуса", - "statusColorsDesc": "Користи зелено/црвено за статус онлайн/офлајн уместо акцентне боје", - "pinAppRail": "Закачи ленту апликација", - "pinAppRailDesc": "Задржи леву бочну траку апликација увек проширеном уместо проширења при прелазу миша", - "expandAppRailOnHover": "Прошири ленту апликација при прелазу миша", - "expandAppRailOnHoverDesc": "Дозволи левој бочној траци апликација да се прошири када се показивач миша пребацу преко ње", - "appRailHoverPushesContent": "Помери садржај при проширењу", - "appRailHoverPushesContentDesc": "Ослободи простор за проширену траку уместо да се отвара преко странице. Отворене сесије, као што је удаљена радна површина, ће се поново величати сваки пут", - "showPinAppRailButton": "Прикажи дугме за закачивање ленте апликација", - "showPinAppRailButtonDesc": "Прикажи дугме у ленти апликација за њено закачивање. Подразумевано искључено.", - "settingsNavigation": "Навигација", - "navigationTabsDesc": "Изаберите које картице се појављују у ленти апликација", - "settingsUpdates": "Ажурирања", - "disableUpdateChecks": "Онемогући проверу ажурирања", - "disableUpdateChecksDesc": "Престани да провераваш ажурирања", - "changePassword": "Промени лозинку", - "currentPasswordLabel": "Тренутна лозинка", - "currentPasswordPlaceholder": "Тренутна лозинка", - "newPasswordLabel": "Нова лозинка", - "newPasswordPlaceholder": "Нова лозинка", - "confirmPasswordLabel": "Потврди нову лозинку", - "confirmPasswordPlaceholder": "Потврди нову лозинку", - "updatePassword": "Ажурирај лозинку", - "createApiKeyTitle": "Направи API кључ", - "createApiKeyDescription": "Генериши нови API кључ за програмски приступ.", - "apiKeyNameLabel": "Име", - "apiKeyNamePlaceholder": "нпр. CI Pipeline", - "expiryDateLabel": "Датум истека", - "optional": "опционо", - "cancel": "Откажи", - "createKey": "Направи кључ", - "apiKeyCreatedWarning": "Кључ је направљен — копирајте га сада, јер се више неће приказивати.", - "copyApiKey": "Копирај API кључ", - "copiedToClipboard": "Копирано у оставу", "apiKeyCount_one": "{{count}} кључ", "apiKeyCount_few": "{{count}} кључева", - "apiKeyCount_other": "{{count}} кључева", - "newKey": "Нови кључ", - "noApiKeys": "Још нема API кључева.", - "apiKeyActive": "Активан", - "apiKeyUsageHint": "Укључите свој кључ у", - "apiKeyUsageHintHeader": "заглавље.", - "apiKeyPermissionsHint": "Кључеви наслеђују дозволе корисника који их прави.", - "exportData": "Извези моје податке", - "exportDataDesc": "Преузмите резервну копију својих хостова, акредитива и подешавања како бисте их пренели на други уређај", - "export": "Извези", - "exporting": "Извози се...", - "importData": "Увези моје податке", - "importDataDesc": "Вратите своје хостове, акредитиве и подешавања из .sqlite резервне копије", - "importDataSelected": "Изабрано: {{name}}", - "selectFile": "Изаберите датотеку", - "changeFile": "Промени", - "import": "Увези", - "importing": "Увози се...", - "exportSuccess": "Подаци су успешно извезени", - "exportFailed": "Извоз података није успео", - "importSelectFile": "Прво изаберите датотеку", - "importCompleted": "Увоз је завршен: {{total}} ставки је увезено, {{skipped}} је прескочено", - "importFailed": "Увоз није успео: {{error}}", - "roleUser": "Корисник", - "authMethodDual": "Двострука аутентификација", - "authMethodExternal": "Спољна", - "done": "Завршено", - "apiKeyNameRequired": "Назив кључа је обавезан", - "apiKeyCreated": "API кључ „{{name}}“ је направљен", - "apiKeyCreateFailed": "Није успело прављење API кључа", - "apiKeyUser": "Корисник", - "apiKeyExpires": "Истеже", - "apiKeyRevoked": "API кључ „{{name}}“ је поништен", - "apiKeyRevokeFailed": "Није успело поништавање API кључа", - "passwordFieldsRequired": "Тренутна и нова лозинка су обавезне", - "passwordMismatch": "Лозинке се не подударају", - "passwordTooShort": "Лозинка мора имати најмање 6 знакова", - "passwordUpdated": "Лозинка је успешно ажурирана", - "passwordUpdateFailed": "Није успело ажурирање лозинке", - "deletePasswordRequired": "Лозинка је потребна за брисање налога", - "deleteFailed": "Није успело брисање налога", - "deleting": "Брише се...", "colorPickerTooltip": "Отвори бирач боја", "themeSystem": "Систем", "themeLight": "Светла", @@ -1779,18 +1146,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Пријављени сте на {{server}}", - "linkedProfileDescription": "Овај уређај користи ваш налог на серверу и чува копију ваших података, па ради и без интернета.", - "manageSync": "Управљајте синхронизацијом", - "setUpSync": "Повезајте са сервером", - "settingsTabsAndShortcuts": "Картице и пречице", - "onBetaTitle": "Користите бета верзију", - "onBetaDescription": "Хвала вам што тестираете. Јавите нам шта не ради како треба.", - "tryBetaTitle": "Испробајте нове функције раније", - "tryBetaDescription": "Придружите се бета програму у Ажурирањима.", - "sendBetaFeedback": "Пошаљите повратне информације о бети", - "openUpdates": "Ажурирања" + "themeGruvbox": "Gruvbox" } } }, @@ -2055,8 +1411,7 @@ "hasDependents": "{{name}} је потребан за {{list}}. Прво искључите или деинсталирајте те додатке.", "missingDependencies": "{{name}} захтева {{list}}, који није инсталиран.", "consentChanged": "Шта овај додат тражи се променило од када сте га последњи пут проверили. Поново проверите листу.", - "upload": "Није могуће прочитати {{name}}: {{error}}", - "developerMode": "Није могуће променити режим за програмере: {{error}}" + "upload": "Није могуће прочитати {{name}}: {{error}}" }, "data": { "title": "Сачувани подаци", @@ -2188,13 +1543,7 @@ "browsePlugins": "Прегледај плугине", "loading": "Учитавање", "developer": { - "title": "Режим за програмере плугина", - "hint": "Омогућава администраторима да инсталирају плугине из .tmxplug фајла у картици Плугини, без провера регистра. Користите га за изградњу и тестирање сопствених плугина.", - "enableTitle": "Укључити режим за програмере?", - "enableBody": "Администратори ће моћи да инсталирају плугине из фајлова које Termix није проверио. Плугин може да уради све што његове могућности дозвољавају, па укључите ово само док градите или тестираете плугине.", - "enable": "Укључи", - "installFromFile": "Инсталирај из фајла", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS је подешен, па је инсталација из фајла и даље блокирана." + "installFromFile": "Инсталирај из фајла" }, "count": { "downloads_one": "{{formatted}} преузимање", @@ -2233,71 +1582,7 @@ "secretSet": "Постављено", "secretNotSet": "Није постављено", "secretReplace": "Замени", - "pluginSettingsSaved": "Поставке сачуване", - "pluginSettingsInvalid": "Неке поставке нису могле да се сачувају. Провери поља означена наранџастом бојом.", - "pluginSettingsSaveFailed": "Чување поставки није успело", - "pluginSettingsLoadFailed": "Учитавање поставки није успело", - "featureUnavailable": "{{name}} тренутно није доступан. Ове поставке су сачуване, али неће имати ефекта.", - "account": "Налог", - "security": "Безбедност", - "apiKeys": "API кључеви", - "data": "Подаци и синхронизација", - "interface": "Интерфејс", - "appearance": "Изглед", - "keybindings": "Пречице на тастатури", - "adminGeneral": "Опште", - "adminUsers": "Корисници", - "adminSessions": "Сесије", - "adminRoles": "Улоге", - "adminHostDefaults": "Подразумеване поставке хоста", - "adminBranding": "Брендирање", - "adminDatabase": "База података", - "adminSsl": "SSL", - "adminApiKeys": "API кључеви", - "adminAuditLog": "Аудитни дневник", - "bandYou": "Твој налог", - "bandApp": "Ова апликација", - "bandPlugins": "Плугини", - "bandInstance": "Овај сервер", - "searchPlaceholder": "Претражи поставке", - "noResults": "Нема подударних поставки.", - "pages": "Странице", - "instanceSettings": "Поставке сервера", - "nothingHere": "Нема ништа за подешавање овде.", - "searchPage": "Претражи ову страницу", - "noPageMatches": "Ништа на овој страници не одговара.", - "updates": { - "title": "Ажурирања", - "betaProgram": "Бета програм", - "betaIntro": "Бете су раније верзије следеће Termix верзије. Излазе у уторке и петкове када има нечега новог за тестирање. Могу имати грешке, а ваша повратна информација је оно што чини стабилну верзију бољом.", - "termixBetas": "Termix бете", - "termixBetasHint": "Обавести ме о новим бета верзијама, не само о стабилним издањима.", - "runningBetaBuild": "Користите бета верзију. Да бисте напустили бету, вратите се на стабилну слику или инсталациони програм.", - "howToInstall": "Како добити бета верзију", - "desktopInstall": "Преузмите инсталациони програм за бета верзију и инсталирајте га преко тренутне верзије.", - "downloadBeta": "Преузми {{version}}", - "dockerInstall": "Промените слику на бета ознаку и поново покрените контејнер:", - "copy": "Копирај", - "copied": "Копирано", - "copyFailed": "Није могуће копирати", - "learnMore": "Сазнајте више о бета верзијама", - "feedback": "Повратна информација", - "feedbackHint": "Пронашли сте грешку или имате идеју? Она одмах стиже до програмера са вашом верзијом већ попуњеном.", - "sendFeedback": "Пошаљи повратну информацију за бету", - "releases": "Издања", - "thisVersion": "Ова верзија", - "newestStable": "Најновија стабилна", - "newestBeta": "Најновија бета", - "noRelease": "Тренутно нема", - "pluginBetas": "Бете за додатке", - "pluginBetasIntro": "Сваки додатак може самостално користити бете. Да бисте тестирали, отворите га и притисните Пробај бету.", - "openPlugins": "Отвори додатке", - "waitingForStable": "Враћено на стабилну верзију. Остaje на {{version}} док се не појави новија стабилна верзија.", - "backToStable": "Назад на стабилну", - "allPluginsBeta": "Користи бете за све додатке", - "allPluginsStable": "Сви додатци враћени на стабилну верзију", - "saveFailed": "Није могуће сачувати промену" - } + "featureUnavailable": "{{name}} тренутно није доступан. Ове поставке су сачуване, али неће имати ефекта." }, "managerCard": { "refresh": "Освежи", @@ -2307,86 +1592,16 @@ "filter": "Филтер..." }, "sync": { - "server": "Termix сервер", - "account": "Налог", - "status": "Статус", - "never": "никада", - "justNow": "управо сада", "minutesAgo_one": "пре {{count}} минута", "minutesAgo_few": "пре {{count}} минута", "minutesAgo_other": "пре {{count}} минута", "hoursAgo_one": "пре {{count}} сата", "hoursAgo_few": "пре {{count}} сати", "hoursAgo_other": "пре {{count}} сати", - "actionFailed": "То није успело. Покушајте поново.", - "unlinkedTitle": "Само на овом уређају", - "unlinkedBody": "Termix ради самостално на овом уређају. Повезајте га са вашим Termix сервером да бисте све држали усклађеним.", - "unlinkedPointHosts": "Ваши хостови, акредитиви, фрагменти и подешавања прате вас на сваки уређај.", - "unlinkedPointOffline": "Све и даље ради када сервер није доступан, а касније се синхронизује.", - "unlinkedPointAccount": "Пријављујете се са налогом сервера, а хостови које су вам други поделили такође се приказују овде.", - "linkButton": "Повези са сервером", - "state": { - "syncing": "Синхронизација", - "offline": "Сервер није доступан", - "error": "Синхронизација заустављена", - "signedOut": "Одјављен", - "synced": "Синхронизовано {{time}}" - }, "pending_one": "{{count}} промена чека на синхронизацију", "pending_few": "{{count}} промене чекају на синхронизацију", "pending_other": "{{count}} промена чека на синхронизацију", - "signInAgain": "Пријави се поново", - "syncNow": "Синхронизуј сада", - "unlink": "Прекини везу", - "unlinked": "Овај уређај више није повезан", - "unlinkTitle": "Прекинути повезивање са овим уређајем?", - "unlinkDescription": "Синхронизација ће бити прекинута и одјавићете се са сервера. Хостови које су вам други поделили биће уклоњени са овог уређаја у сваком случају.", - "unlinkKeepTitle": "Задржи моје податке овде", - "unlinkKeepBody": "Ваши хостови, акредитиви и подешавања остају на овом уређају и настављају да раде самостално.", - "unlinkRemoveTitle": "Уклони синхронизоване податке", - "unlinkRemoveBody": "Све што је дошло са сервера биће уклоњено са овог уређаја. Остaju само хостови који су задржани локално.", - "conflictsTitle": "Сукоби", - "conflictsDescription": "Ови подаци су промењени и овде и на серверу у исто време. Верзија са сервера је тренутно у употреби. Изберите „Задржи моју“ да бисте је послали на сервер уместо ње.", - "keepMine": "Задржи моју", - "keepServer": "Задржи са сервера", - "errorsTitle": "Није синхронизовано", - "errorsDescription": "Сервер није прихватио ове промене. Оне остају на овом уређају.", - "errorPermission": "Ваш налог на серверу нема дозволе за ову промену.", - "retry": "Покушај поново", - "whatSyncs": "Шта се синхронизује", - "whatSyncsDescription": "Искључите све што желите да задржите само на овом уређају.", - "coreGroup": "Termix", - "notOnServer": "Сервер нема ово", - "notOnDevice": "Још увек није на овом уређају", - "localOnlyHint": "Можете такође да задржите појединачне хостове или фасцикле само на овом уређају кроз њихова подешавања.", - "originTitle": "Почетак везе", - "originDescription": "Повежите се са хостовима са овог уређаја или преко сервера. Ово можете променити за сваког хоста посебно.", - "originLocal": "Овај уређај", - "originRemote": "Сервер", - "entities": { - "hosts": "Хостови", - "sshCredentials": "Акредитиви", - "sshFolders": "Фасцикле", - "userPreferences": "Преференције", - "pluginUserSettings": "Подешавања додатака", - "sharedHosts": "Хостови подељени са вама", - "sharedCredentials": "Акредитиви подељени са вама", - "vaultProfiles": "Профили Vault-а", - "snippetFolders": "Фасцикле фрагмената", - "snippets": "Фрагменти", - "dashboardServiceLinks": "Везе ка услугама", - "homepageItems": "Ставке на почетној страни", - "networkTopology": "Мрежна мапа", - "workspaces": "Радни простори", - "hostDefaults": "Подразумевана подешавања хостова", - "hostDefaultsAdmin": "Подразумевана подешавања хостова на серверу", - "aiProviders": "AI провајдери", - "homepageLayouts": "Распореде почетне стране", - "accountProfile": "Профил налога" - }, "proxy": { - "title": "Реверзни прокси", - "description": "Потребно само када нешто попут Cloudflare Access-а или странице за пријаву стоји испред вашег сервера.", "headersTitle": "Додатне заглавља", "headersHint": "Шаљу се са сваким захтевом ка серверу, на пример Cloudflare Access сервисни токен.", "headerName": "Назив заглавља", @@ -2399,8 +1614,7 @@ "username": "Корисничко име", "password": "Лозинка", "allowInvalidCertificate": "Веруј самознатом сертификату", - "allowInvalidCertificateHint": "Само за ваш сопствени сервер, када његов сертификат није од познатог издаваоца.", - "saved": "Сачувано" + "allowInvalidCertificateHint": "Само за ваш сопствени сервер, када његов сертификат није од познатог издаваоца." }, "problems": { "invalidUrl": "Ово не личи на веб адресу.", @@ -2440,6 +1654,27 @@ "linking": "Повезивање и покретање прве синхронизације...", "linked": "Повезано. Ваши подаци се сада синхронизују.", "signedInAgain": "Пријављено. Синхронизација поново ради." + }, + "entities": { + "hosts": "Хостови", + "sshCredentials": "Акредитиви", + "sshFolders": "Фасцикле", + "userPreferences": "Преференције", + "pluginUserSettings": "Подешавања додатака", + "sharedHosts": "Хостови подељени са вама", + "sharedCredentials": "Акредитиви подељени са вама", + "vaultProfiles": "Профили Vault-а", + "snippetFolders": "Фасцикле фрагмената", + "snippets": "Фрагменти", + "dashboardServiceLinks": "Везе ка услугама", + "homepageItems": "Ставке на почетној страни", + "networkTopology": "Мрежна мапа", + "workspaces": "Радни простори", + "hostDefaults": "Подразумевана подешавања хостова", + "hostDefaultsAdmin": "Подразумевана подешавања хостова на серверу", + "aiProviders": "AI провајдери", + "homepageLayouts": "Распореде почетне стране", + "accountProfile": "Профил налога" } }, "hostDefaults": { @@ -2456,34 +1691,15 @@ "resetTitle": "Овај хост користи сопствену вредност. Кликните да поново користите подразумевану вредност из {{source}}", "clearTitle": "Подешено на овом нивоу. Кликните да обришете и користите {{source}} уместо тога", "inheritedTitle": "Праћи подразумевану вредност из {{source}}", - "titleAdmin": "Подразумевана вредност за хостове на серверу", - "titleUser": "Моја подразумевана вредност за хостове", - "titleFolder": "Подразумевана вредност за фасциклу: {{name}}", - "descriptionAdmin": "Подразумевана вредност за сваки хост на овом серверу. Корисник може да подеси своју вредност, фасцикла или сам хост могу да подесе другу вредност. Промени поље да га подесиш овде или обриши да га оставиш неподељеним.", - "descriptionUser": "Подразумевана вредност за све ваше хостове, преко серверских. Фасцикла или сам хост могу да подесе другу вредност. Промени поље да га подесиш овде или обриши да га оставиш неподељеним.", - "descriptionFolder": "Подразумевана вредност за хостове у овој фасцикли и њеним подфасциклама, преко ваших. Хост може да подеси другу вредност. Промени поље да га подесиш овде или обриши да га оставиш неподељеним.", - "save": "Сачувај подразумеване вредности", "saved_one": "Подразумеване вредности сачуване. {{count}} хост је ажуриран.", "saved_few": "Подразумеване вредности сачуване. {{count}} хостова је ажурирано.", "saved_other": "Подразумеване вредности сачуване. {{count}} хостова је ажурирано.", - "savedInBackground": "Подразумеване вредности сачуване. Хостови се ажурирају у позадини.", "appliedToHosts_one": "{{count}} хост је ажуриран са новим подразумеваним вредностима.", "appliedToHosts_few": "{{count}} хостова је ажурирано са новим подразумеваним вредностима.", "appliedToHosts_other": "{{count}} хостова је ажурирано са новим подразумеваним вредностима.", - "saveFailed": "Не могу да сачувам подразумеване вредности", - "loadFailed": "Не могу да учитам подразумеване вредности", - "confirmTitle": "Сачувај подразумеване вредности?", "confirmChanges_one": "{{count}} хост прати ове подразумеване вредности и биће промењен.", "confirmChanges_few": "{{count}} хостова прати ове подразумеване вредности и биће промењени.", "confirmChanges_other": "{{count}} хостова прати ове подразумеване вредности и биће промењени.", - "confirmNoChanges": "Нема промена постојећих хостова. Нови хостови ће почети са овим подразумеваним вредностима.", - "menuMyDefaults": "Моја подразумевана вредност за хостове", - "folderDefaultsAction": "Подразумевана вредност за фасциклу", - "adminSectionDescription": "Подесите подразумеване вредности које прати сваки хост на овом серверу, за сваку поставку коју хост има, укључујући сваки додатак. Корисници и фасцикле могу да подесе своје вредности изнад тога, а било који хост може да користи сопствену вредност.", - "editServerDefaults": "Уреди подразумеване вредности сервера", - "resetMenu": "Ресетуј", - "resetAll": "Све на подразумевано", - "resetCore": "Веза и SSH на подразумевано", "resetDone_one": "{{count}} хост сада користи подразумеване вредности.", "resetDone_few": "{{count}} хоста сада користе подразумеване вредности.", "resetDone_other": "{{count}} хостова сада користи подразумеване вредности." @@ -2498,50 +1714,16 @@ "fields": { "secretSaved": "Сачувано. Унесите да бисте га заменили." }, - "sharing": { - "revokeConfirm": "Уклонити приступ за {{name}}?", - "revoke": "Уклони приступ" - }, "manage": { - "searchSettings": "Претражи подешавања", - "noMatchingSettings": "Нема подешавања која се поклапају.", - "sections": "Секције", - "sectionNeedsAttention": "Нешто овде захтева пажњу", "needsAttention_one": "Једна ствар захтева пажњу.", "needsAttention_few": "{{count}} ствари захтевају пажњу.", "needsAttention_other": "{{count}} ствари захтева пажњу.", - "bandHost": "Хост", - "bandFeatures": "Протоколи и додаци", - "bandCredential": "Акредитив", - "sshConnection": "SSH веза", - "errorAddressRequired": "Адреса је обавезна.", - "errorPortRange": "Користите порт између 1 и 65535.", - "defaults": "Подразумевано", - "searchHosts": "Претражи хостове", - "searchCredentials": "Претражи акредитиве", - "searchDefaults": "Претражи подразумеване вредности", - "addCredential": "Додај акредитив", - "nothingMatches": "Ништа се не поклапа", - "nothingYet": "Овде још нема ништа", - "emptyHostsHint": "Додајте хост и он ће се појавити овде, у било којем фолдеру који му доделите.", - "emptyCredentialsHint": "Сачувани акредитиви могу се поново користити за било који хост.", - "collapse": "Скупи", - "expand": "Прошири", - "cannotBeUndone": "Ово се не може поништити.", - "hostNotFound": "Тај хост није пронађен. Покушајте да освежите листу.", "hostCount_one": "{{count}} хост", "hostCount_few": "{{count}} хоста", "hostCount_other": "{{count}} хостова", "credentialCount_one": "{{count}} акредитив", "credentialCount_few": "{{count}} акредитива", - "credentialCount_other": "{{count}} акредитива", - "newHost": "Нови хост", - "newCredential": "Нови акредитив", - "advanced": "Напредно", - "pickHost": "Изаберите хост за уређивање", - "pickCredential": "Изаберите акредитив за уређивање", - "pickDefaults": "Изаберите ниво подразумеваних вредности за уређивање", - "pickHint": "Све о вези се налази овде, груписано тако да можете лако да је пронађете." + "credentialCount_other": "{{count}} акредитива" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/sv_SE.json b/src/ui/locales/translated/sv_SE.json index 7caa229d6..ef38415d5 100644 --- a/src/ui/locales/translated/sv_SE.json +++ b/src/ui/locales/translated/sv_SE.json @@ -141,7 +141,6 @@ "continue": "Fortsätt", "error": "Fel", "unsavedChanges": "Osparade ändringar", - "more": "Mer", "loading": "Laddar...", "host": "Värd", "selectHost": "Välj en värd...", @@ -154,7 +153,6 @@ "cancel": "Avbryt", "username": "Användarnamn", "login": "Logga in", - "logout": "Logga ut", "register": "Registrera", "password": "Lösenord", "confirmPassword": "Bekräfta lösenord", @@ -165,8 +163,6 @@ "rename": "Byt namn", "edit": "Redigera", "confirm": "Bekräfta", - "next": "Nästa", - "previous": "Föregående", "refresh": "Uppdatera", "language": "Språk", "backendReconnected": "Serveranslutningen återställd", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Läs om varje plugin" }, "desktopUpdates": { - "title": "Skrivbordsapp", - "mode": "Uppdateringar", - "modeHint": "Hur den här appen får nya versioner.", - "manualModeHint": "Den här kopian kan inte uppdatera sig själv, så Termix meddelar dig bara när en ny version finns tillgänglig.", "modeAutomatic": "Automatisk", "modePrompt": "Fråga först", "modeNever": "Aldrig", @@ -247,15 +239,6 @@ "onboardingTitle": "Appuppdateringar", "onboardingBody": "Skrivbordsappen kan nu uppdatera sig själv. Välj hur du vill att nya versioner ska levereras. Du kan ändra detta senare i Inställningar, Uppdateringar.", "onboardingManual": "Den här kopian av appen installerades på ett sätt som inte kan uppdatera sig själv, så Termix kommer att meddela dig när en ny version finns tillgänglig med en länk för att ladda ner den.", - "status": "Version {{version}}", - "statusIdle": "Har inte kontrollerats ännu", - "statusChecking": "Söker efter uppdateringar", - "statusAvailable": "Version {{version}} finns tillgänglig", - "statusDownloading": "Laddar ner {{version}} ({{progress}} %)", - "statusReady": "Version {{version}} är klar. Starta om för att installera den.", - "statusUpToDate": "Du har den senaste versionen", - "statusError": "Kunde inte söka efter uppdateringar. Försök igen senare.", - "checkNow": "Kontrollera nu", "download": "Ladda ner", "restart": "Starta om nu", "later": "Senare", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Stäng", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Kopiera lösenord", - "copySudoPassword": "Kopiera sudo-lösenord", - "passwordCopied": "Lösenordet har kopierats till urklipp", - "failedToCopyPassword": "Misslyckades med att kopiera lösenordet", - "refreshTab": "Uppdatera anslutning", - "renameTab": "Byt namn på flik", "dashboard": "Instrumentpanel", "quickConnect": "Snabbanslutning", - "openAsTabHint": "Ctrl+klick eller medelklick för att öppna som en flik", - "openAsTab": "Öppna som flik", - "openInRightDock": "Öppna i höger docka", - "closeRightDock": "Stäng höger docka", - "toggleRightDock": "Växla höger docka", "hosts": "Värdar", "credentials": "Inloggningsuppgifter", "connections": "Anslutningar", - "keepSideMenuOpen": "Håll menyn öppen", - "collapseSideMenu": "Dölj menyn", - "roleAdministrator": "Administratör", - "roleUser": "Användare", "sync": "Synkronisera", "reconnectDisconnectedTerminals": "Återanslut alla frånkopplade terminaler", "reconnectingTerminals_one": "Återansluter {{count}} terminal", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "Kunde inte starta återanslutning av {{count}} terminaler", "fullscreenUnsupported": "Helskärm stöds inte av den här webbläsaren", "fullscreenFailed": "Kunde inte växla till/från helskärm", - "resetSidebarWidth": "Återställ bredd", - "collapseSidebar": "Dölj sidofältet", - "openSidebar": "Öppna sidofältet", "confirmCloseHost": "Stäng {{host}}?", - "enterFullscreen": "Gå till helskärm (Ctrl+Shift+F)", - "exitFullscreen": "Avsluta helskärm (Ctrl+Shift+F)", - "group": { - "objects": "Dina", - "tools": "Verktyg", - "system": "System" - }, - "searchEverything": "Sök bland värdar, flikar och åtgärder", - "search": "Sök", "hiddenCount_one": "{{count}} dold", "hiddenCount_other": "{{count}} dolda", - "showInRail": "Visa i sidofältet", - "moveUp": "Flytta upp", - "moveDown": "Flytta ner", - "resetRailOrder": "Återställ ordning", - "hideFromRail": "Dölj från sidofältet", - "openSettings": "Öppna inställningar", "settings": "Inställningar", "manage": "Hantera", - "mobileNavigation": "Navigation", "plugins": "Plugins" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "Import klar: {{imported}} importerade, {{updated}} uppdaterade, {{failed}} misslyckade", "importHostsFailed": "Kunde inte importera värdar" }, - "commandPalette": { - "searchPlaceholder": "Sök bland värdar, kommandon eller inställningar...", - "quickActions": "Snabbåtgärder", - "navigation": "Navigation", - "orShortcut": "eller", - "addNewHost": "Lägg till ny värd", - "adminSettings": "Administratörsinställningar", - "addCredential": "Lägg till inloggningsuppgifter", - "recentActivity": "Senaste aktiviteten", - "serversAndHosts": "Servrar & värdar", - "noHostsFound": "Inga värdar hittades som matchar \"{{search}}\"", - "links": "Länkar", - "navigate": "Navigera", - "select": "Välj", - "pluginActions": "Fler åtgärder", - "noTargetTab": "Ingen terminalflik är öppen", - "documentation": "Dokumentation" - }, "splitScreen": { "title": "Delad skärm", "defaultLabel": "Delning {{number}}", "splitRight": "Dela åt höger", "splitDown": "Dela nedåt", - "addToSplit": "Lägg till i {{split}}", "paneEmptyItem": "Fönster {{index}}: tomt", "paneItem": "Fönster {{index}}: {{label}}", "paneNumber": "Fönster {{index}}", - "newPaneRight": "Nytt fönster till höger", - "newPaneBelow": "Nytt fönster nedanför", "emptyTitle": "Tomt fönster", "emptyHint": "Välj något att visa här. När detta fönster är valt öppnas allt du väljer från sidofältet också här.", "openTabs": "Öppna flikar", @@ -962,7 +890,6 @@ "clearPane": "Töm detta fönster", "zoom": "Zooma fönster", "unzoom": "Återställ layout", - "unsplit": "Avsluta delning", "layouts": "Layouter", "applyLayout": "Ändra layout", "maxPanes_one": "En delning kan innehålla upp till {{count}} panel", @@ -971,8 +898,6 @@ "dropHere": "Släpp för att visa här", "paneActions": "Fönsteråtgärder", "dividerHint": "Dra för att ändra storlek. Dubbelklicka för att jämna ut.", - "openInSplit": "Öppna i delad vy", - "openInNewSplit": "Ny delad vy med nuvarande flik", "shortcuts": "Genvägar", "shortcutNavigate": "Flytta mellan fönster", "presets": { @@ -986,23 +911,6 @@ "grid6": "Rutnät med sex" } }, - "connections": { - "noConnections": "Inga anslutningar", - "noConnectionsDesc": "Öppna en terminal, filhanterare eller fjärrskrivbord för att se anslutningar här", - "connectedFor": "Ansluten i {{duration}}", - "connected": "Ansluten", - "disconnected": "Frånkopplad", - "reconnect": "Återanslut", - "sectionOpen": "Öppna", - "sectionBackground": "Bakgrund", - "backgroundDesc": "Sessioner finns kvar i {{minutes}} minuter efter frånkoppling och kan återanslutas.", - "expiresIn": "Upphör om {{duration}}", - "search": "Sök bland anslutningar...", - "noSearchResults": "Inga anslutningar matchar din sökning", - "rename": "Byt namn på session", - "forgetConfirm": "Avsluta bakgrundssessionen för {{name}}?", - "forget": "Avsluta session" - }, "sshAuth": { "totpRequired": "Tvåfaktorsautentisering krävs", "totpCodeLabel": "Verifieringskod", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "nyckellösenord", "pastePrivateKey": "Klistra in din privata nyckel här...", - "enterPassword": "Ange ditt lösenord", - "apiKeyName": "t.ex. CI Pipeline", - "credentialName": "t.ex. Produktions-SSH-nyckel", - "optionalDetails": "Valfria detaljer...", - "sshUsername": "t.ex. root eller deploy", - "hostAddress": "10.0.0.1 eller example.com", - "hostName": "t.ex. Webbserver Produktion" + "enterPassword": "Ange ditt lösenord" }, "dashboard": { - "title": "Instrumentpanel", - "github": "GitHub", - "reportBug": "Rapportera ett fel", - "discord": "Discord", - "docs": "Dokumentation", - "donate": "Donera", - "serverOverview": "Översikt över server", - "version": "Version", "updateAvailable": "Uppdatering tillgänglig", - "beta": "Beta", - "uptime": "Drifttid", - "database": "Databas", - "healthy": "Frisk", - "error": "Fel", - "totalHosts": "Totalt antal värdar", - "totalCredentials": "Totalt antal inloggningsuppgifter", - "recentActivity": "Senaste aktiviteten", - "reset": "Återställ", - "noRecentActivity": "Ingen sen aktivitet", - "quickActions": "Snabbkommandon", - "addHost": "Lägg till värd", - "addCredential": "Lägg till inloggningsuppgift", - "adminSettings": "Administratörsinställningar", - "userProfile": "Användarprofil", - "serverStats": "Serverstatistik", - "customizeLayout": "Anpassa instrumentpanelen", - "justNow": "just nu" + "beta": "Beta" }, "dashboardTab": { "stable": "STABIL", - "registerNewServer": "Registrera en ny server", - "storeSshKeysOrPasswords": "Lagra SSH-nycklar eller lösenord", - "manageUsersAndRoles": "Hantera användare och roller", - "manageYourAccount": "Hantera ditt konto", - "hostStatus": "Värdstatus", - "noHostsConfigured": "Inga värdar konfigurerade", - "checking": "KONTROLLERAR", - "commandPalette": "Kommandopalette", - "done": "Klar", - "clear": "Rensa", - "dragToResizeColumns": "Dra för att ändra kolumnbredd", - "hostsAvailable": "Tillgängliga värdar", - "removeSection": "Ta bort sektion", - "addSection": "Lägg till en sektion", - "allSectionsShown": "Allt finns redan på instrumentpanelen.", - "fromPlugins": "Från plugins", - "dropHere": "Släpp en sektion här", - "dragToReorder": "Dra sektionerna för att ändra ordningen", - "clearActivityConfirm": "Vill du rensa din senaste aktivitet?", - "resetConfirm": "Vill du återställa instrumentpanelen till standardlayouten?", "onlineCount_one": "{{count}} online", "onlineCount_other": "{{count}} online", "hostCount_one": "{{count}} värd", "hostCount_other": "{{count}} värdar" }, "admin": { - "sectionGeneral": "Allmänt", - "sectionUsers": "Användare", - "sectionSessions": "Sessioner", - "sectionRoles": "Roller", - "sectionDatabase": "Databas", - "sectionApiKeys": "API-nycklar", - "sectionAuditLog": "Revisionslogg", - "sectionSsl": "HTTPS-certifikat", - "sectionBranding": "White Label", - "brandingAppName": "Applikationsnamn", - "brandingAppNameDesc": "Visas på inloggningsskärmen och i webbläsarfliken. Lämna tomt för att använda \"Termix\".", - "brandingTagline": "Tagline", - "brandingTaglineDesc": "Visas under applikationsnamnet på inloggningsskärmen. Lämna tomt för att använda standardtaglinen.", - "brandingLogo": "Logotyp", - "brandingLogoDesc": "PNG, JPEG eller WEBP, upp till 750 KB. Ersätter standardikonen på inloggningsskärmen och i webbläsarfliken.", - "brandingLogoUpload": "Ladda upp logotyp", - "brandingLogoReset": "Återställ till standard", - "brandingLogoInvalid": "Ogiltig bild. Använd en PNG-, JPEG- eller WEBP-fil på upp till 750 KB.", - "brandingSaved": "White Label-inställningar sparade", - "brandingSaveFailed": "Kunde inte spara White Label-inställningarna", - "sslDescription": "Certifikatet som Termix använder för HTTPS. Ladda upp ditt eget här, eller hämta och förnya ett från Let's Encrypt i avsnittet ACME-certifikat.", - "sslDocsLink": "Visa SSL-dokumentation", - "sslCertStatus": "Certifikatstatus", - "sslCertStatusNone": "Inget certifikat", - "sslCertStatusValid": "Giltigt", - "sslCertStatusExpiring": "Går snart ut", - "sslCertStatusExpired": "Utgånget", - "sslCertExpiresAt": "Går ut {{date}}", - "sslInfoNote": "Efter att ett certifikat har utfärdats eller laddats upp aktiverar Termix automatiskt HTTPS på SSL_PORT (standard 8443) utöver den befintliga HTTP-porten. Se till att porten är publicerad/mappad till denna container så att den är nåbar.", - "sslManualCert": "Certifikat (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Privat nyckel (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Klistra in ditt befintliga certifikat och privata nyckel, inklusive en fullständig kedja om det krävs av din certifikatutfärdare.", - "sslManualUpload": "Ladda upp och installera certifikat", - "sslManualUploadLoading": "Laddar upp certifikat...", - "sslManualUploadSuccess": "Certifikatet har laddats upp och installerats", - "sslManualUploadFailed": "Uppladdningen av certifikatet misslyckades", - "sslManualRequiresFields": "Certifikat och privat nyckel krävs", - "auditLogTotal": "{{total}} poster totalt", - "auditLogEmpty": "Inga poster i revisionsloggen hittades", - "auditLogSuccess": "Lyckades", - "auditLogFailed": "Misslyckades", - "auditLogClearFilters": "Rensa filter", - "auditLogPage": "Sida {{page}} av {{totalPages}} ({{total}} totalt)", - "auditLogIp": "IP", - "auditLogResourceId": "Resurs-ID", - "auditLogFilterUser": "Användare", - "auditLogFilterAction": "Åtgärd", - "auditLogFilterResourceType": "Resurstyp", - "auditLogFilterStatus": "Status", - "auditLogFilterFrom": "Från", - "auditLogFilterTo": "Till", - "auditLogFilterAll": "Alla", - "allowRegistration": "Tillåt användarregistrering", - "allowRegistrationDesc": "Låt nya användare registrera sig själva med användarnamn och lösenord", - "allowPasswordLogin": "Tillåt inloggning med lösenord", - "allowPasswordLoginDesc": "Inloggning med användarnamn och lösenord", - "externalAutoProvision": "Skapa externa konton automatiskt", - "externalAutoProvisionDesc": "Skapa ett konto första gången någon loggar in via en extern inloggningsmetod som SSO eller LDAP. När det är inaktiverat kan endast personer som redan har ett konto logga in på det sättet.", - "secondFactorAfterExternalLogin": "Be om en andra faktor efter extern inloggning (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "När det är inaktiverat begärs en registrerad andra faktor endast efter inloggning med lösenord och andra lokala metoder, som tidigare. När det är aktiverat begärs den efter varje inloggningsmetod, inklusive SSO och LDAP.", - "allowPasswordReset": "Tillåt återställning av lösenord", - "allowPasswordResetDesc": "Återställningskod via Docker-loggar", - "auditForwardingTitle": "Vidarebefordra till SIEM", - "auditForwardingDesc": "Skicka en kopia av varje granskningspost till en extern samlare som NDJSON. De lokala loggarna förblir den enda källan för sanningen.", - "auditForwardingEnvNotice": "En miljövariabel konfigurerar också vidarebefordran; URL:en som sparas här har företräde.", - "auditForwardingToken": "Bearer-token (valfritt)", - "auditForwardingTokenStored": "Bearer-token (sparad)", - "auditForwardingSaved": "Inställningar för vidarebefordran av granskningsloggar sparade", - "auditForwardingSaveError": "Misslyckades med att spara inställningar för vidarebefordran av granskningsloggar", - "sessionTimeout": "Sessionstidsgräns", - "hours": "timmar", - "sessionTimeoutRange": "Min 1 h, max 720 h", - "monitoringDefaults": "Standardinställningar för övervakning", - "statusCheck": "Statuskontroll", - "sec": "sek", - "logLevel": "Loggnivå", "usersCount_one": "{{count}} användare", - "usersCount_other": "{{count}} användare", - "searchUsers": "Sök bland användare...", - "noUsers": "Inga användare", - "noUsersMatch": "Inga användare matchar din sökning", - "pageOf": "Sida {{page}} av {{total}}", - "createUser": "Skapa", - "newRole": "Ny roll", - "roleName": "Namn", - "roleDisplayName": "Visningsnamn", - "roleDescription": "Beskrivning", "rolesCount_one": "{{count}} roll", - "rolesCount_other": "{{count}} roller", - "createRole": "Skapa", - "creating": "Skapar...", - "exportDatabase": "Exportera databas", - "exportDatabaseDesc": "Ladda ner en portabel SQLite-säkerhetskopia av alla värdar, inloggningsuppgifter och inställningar", - "export": "Exportera", - "exporting": "Exporterar...", - "importDatabase": "Importera databas", - "importDatabaseDesc": "Återställ från en portabel .sqlite-säkerhetskopia på valfri databasbackend", - "importDatabaseSelected": "Vald: {{name}}", - "selectFile": "Välj fil", - "changeFile": "Ändra", - "import": "Importera", - "importing": "Importerar...", "apiKeysCount_one": "{{count}} nyckel", - "apiKeysCount_other": "{{count}} nycklar", - "apiKeysDocsLink": "Visa dokumentation", - "apiKeysCliHint": "Använd en API-nyckel med Termix CLI för att hantera servrar från din terminal.", - "apiKeysCliLink": "Visa CLI-dokumentation", - "newApiKey": "Ny API-nyckel", - "apiKeyCreatedWarning": "Nyckel skapad – kopiera den nu, den visas inte igen.", - "apiKeyName": "Namn", - "apiKeyUser": "Användare", - "apiKeySelectUser": "Välj en användare...", - "apiKeyExpiresAt": "Utlöper", - "createKey": "Skapa nyckel", - "apiKeyNoExpiry": "Inget utgångsdatum", - "revokedBadge": "ÅTERDRAGEN", - "authTypeDual": "Dubbelautentisering", - "authTypeExternal": "Extern", - "authTypeLocal": "Lokal", - "adminStatusAdministrator": "Administratör", - "adminStatusRegularUser": "Vanlig användare", - "adminBadge": "ADMIN", - "systemBadge": "SYS", - "customBadge": "ANPASSAD", - "youBadge": "DU", "sessionsActive_one": "{{count}} aktiv", - "sessionsActive_other": "{{count}} aktiva", - "sessionActive": "Aktiv: {{time}}", - "sessionExpires": "Utl: {{time}}", - "revokeAll": "Alla", - "revokeAllSessionsSuccess": "Alla sessioner för användaren har återkallats", - "revokeAllSessionsFailed": "Kunde inte återkalla sessioner", - "revokeSessionFailed": "Kunde inte återkalla session", - "addRole": "Lägg till roll", - "noCustomRoles": "Inga anpassade roller definierade", - "removeRoleFailed": "Kunde inte ta bort roll", - "assignRoleFailed": "Kunde inte tilldela roll", - "userAdminAccess": "Administratör", - "userAdminAccessDesc": "Fullständig åtkomst till alla administratörsinställningar", - "userRoles": "Roller", - "revokeAllUserSessions": "Återkalla alla sessioner", - "revokeAllUserSessionsDesc": "Tvinga inloggning på alla enheter", - "revoke": "Återkalla", - "deleteUserWarning": "Att ta bort denna användare är permanent.", - "deleteUser": "Ta bort {{username}}", - "deleting": "Tar bort...", - "deleteUserFailed": "Kunde inte ta bort användare", - "deleteUserSuccess": "Användaren \"{{username}}\" har tagits bort", - "deleteRoleSuccess": "Rollen \"{{name}}\" har tagits bort", - "revokeKeySuccess": "Nyckeln \"{{name}}\" har återkallats", - "revokeKeyFailed": "Kunde inte återkalla nyckel", - "copiedToClipboard": "Kopierat till urklipp", - "done": "Klar", - "createUserTitle": "Skapa användare", - "createUserDesc": "Skapa ett nytt lokalt konto.", - "createUserUsername": "Användarnamn", - "createUserPassword": "Lösenord", - "createUserPasswordHint": "Minst 6 tecken.", - "createUserEnterUsername": "Ange användarnamn", - "createUserSubmit": "Skapa användare", - "editUserTitle": "Hantera användare: {{username}}", - "editUserDesc": "Redigera roller, administratörsstatus, sessioner och kontoinställningar.", - "editUserUsername": "Användarnamn", - "editUserAuthType": "Autentiseringstyp", - "editUserAdminStatus": "Administratörsstatus", - "editUserUserId": "Användar-ID", - "linkAccountTitle": "Länka konton", - "linkAccountDesc": "Slå samman det externa kontot {{username}} med ett befintligt lokalt konto.", - "linkAccountDescLocal": "Länka ett lokalt konto {{username}} med ett befintligt konto som bara är externt.", - "linkAccountWarningTitle": "Detta kommer att:", - "linkAccountEffect1": "Ta bort kontot som endast använder extern inloggning", - "linkAccountEffect2": "Lägg till dess externa inloggning till målkontot", - "linkAccountEffect3": "Tillåt både extern inloggning och inloggning med lösenord", - "linkAccountTargetUsername": "Användarnamn för lokalt konto", - "linkAccountTargetPlaceholder": "Ange användarnamnet för det lokala kontot du vill länka till", - "linkAccountExternalUsername": "Användarnamn för externt konto", - "linkAccountExternalPlaceholder": "Ange användarnamnet för det externa kontot som ska slås samman", - "linkAccountExternalNotFound": "Inget konto som endast använder extern inloggning hittades med det användarnamnet", - "linkAccounts": "Länka konton", - "linkAccountSuccess": "Konton länkade", - "linkAccountFailed": "Misslyckades med att länka konton", - "linkAccountInProgress": "Länkar...", - "unlinkAccountTitle": "Koppla bort extern inloggning", - "unlinkAccountDesc": "Ta bort extern inloggning från {{username}}. De kommer endast att kunna logga in med sitt lösenord.", - "unlinkAccountWarning": "Detta kommer att ta bort extern inloggning från detta konto. Användaren måste ha ett lösenord inställt för att kunna fortsätta logga in.", - "unlinkAccount": "Koppla bort extern inloggning", - "unlinkAccountInProgress": "Kopplar bort...", - "unlinkAccountSuccess": "Extern inloggning kopplad bort", - "unlinkAccountFailed": "Misslyckades med att koppla bort extern inloggning", - "updateRegistrationFailed": "Misslyckades med att uppdatera registreringsinställningen", - "updatePasswordLoginFailed": "Misslyckades med att uppdatera inställningen för inloggning med lösenord", - "updateSecondFactorAfterExternalLoginFailed": "Misslyckades med att uppdatera inställningen för andra faktor", - "updatePasswordResetFailed": "Misslyckades med att uppdatera inställningen för återställning av lösenord", - "sessionTimeoutRange2": "Sessionstiden måste vara mellan 1 och 720 timmar", - "sessionTimeoutSaved": "Sessionstid sparad", - "sessionTimeoutSaveFailed": "Misslyckades med att spara sessionstid", - "monitoringIntervalInvalid": "Ogiltiga intervallvärden", - "monitoringSaved": "Övervakningsinställningar sparade", - "monitoringSaveFailed": "Misslyckades med att spara övervakningsinställningar", - "logLevelUpdateFailed": "Misslyckades med att uppdatera loggningsnivå", - "createUserRequired": "Användarnamn och lösenord krävs", - "createUserPasswordTooShort": "Lösenordet måste vara minst 6 tecken", - "createUserSuccess": "Användaren \"{{username}}\" skapad", - "createUserFailed": "Misslyckades med att skapa användare", - "updateAdminStatusFailed": "Misslyckades med att uppdatera administratörsstatus", - "allSessionsRevoked": "Alla sessioner återkallade", - "revokeSessionsFailed": "Misslyckades med att återkalla sessioner", - "manageUserData": "Hantera användardata", - "backToUsers": "Tillbaka till användare", - "manageTabAccount": "Konto", - "manageTabHosts": "Värdar", - "manageTabCredentials": "Inloggningsuppgifter", - "manageTabSessions": "Sessioner", - "manageTabDanger": "Farligt", - "manageEditorBack": "Tillbaka till {{username}}s data", - "dataLockedBadge": "LÅST", - "dataLockedNotice": "{{username}}s data förblir låst tills de nästa gång loggar in. Deras värdar, inloggningsuppgifter och kommandon kan inte visas eller redigeras fram till dess.", - "resetPasswordTitle": "Återställ lösenord", - "resetPasswordExternalOnly": "Denna användare loggar in via en extern leverantör och har inget lösenord.", - "resetPasswordPlaceholder": "Nytt lösenord", - "resetPasswordBtn": "Återställ", - "resetPasswordWorking": "Återställer...", - "resetPasswordSuccess": "Lösenord återställt", - "resetPasswordSuccessWiped": "Lösenord återställt. Användarens krypterade data har raderats.", - "resetPasswordFailed": "Misslyckades med att återställa lösenord", - "resetPasswordConfirmWipe": "{{username}} har inte loggat in sedan krypteringsuppgraderingen, så deras data kan inte återställas. Om du återställer nu kommer deras värdar, inloggningsuppgifter och kommandon att raderas. Vill du fortsätta?", - "manageApiKeys": "API-nycklar", - "apiKeyNamePlaceholder": "Nyckelnamn", - "apiKeyCopyNotice": "Kopiera denna nyckel nu, den visas inte igen.", - "noApiKeysForUser": "Inga API-nycklar", - "apiKeyDeleteFailed": "Misslyckades med att ta bort API-nyckel", - "exportUserData": "Dataexport", - "exportUserDataDesc": "Ladda ner denna användares värdar, inloggningsuppgifter och filhanteringsdata som JSON. Hemligheter avkrypteras.", - "exportUserDataSuccess": "Användardata exporterad", - "exportUserDataFailed": "Misslyckades med att exportera användardata", "hostsCount_one": "{{count}} värd", "hostsCount_other": "{{count}} värdar", - "addHostForUser": "Lägg till värd", - "noHostsForUser": "Denna användare har inga värdar", - "connectToHost": "Anslut", - "deleteHostConfirm": "Ta bort värd \"{{name}}\" som tillhör {{username}}?", - "hostDeletedSuccess": "Värd borttagen", - "hostDeleteFailed": "Misslyckades med att ta bort värd", "credentialsCount_one": "{{count}} inloggningsuppgift", "credentialsCount_other": "{{count}} inloggningsuppgifter", - "addCredentialForUser": "Lägg till inloggningsuppgift", - "noCredentialsForUser": "Denna användare har inga inloggningsuppgifter", - "deleteCredentialConfirm": "Ta bort inloggningsuppgiften \"{{name}}\" som tillhör {{username}}?", - "credentialDeletedSuccess": "Inloggningsuppgift borttagen", - "credentialDeleteFailed": "Misslyckades med att ta bort inloggningsuppgift", - "noSessionsForUser": "Inga aktiva sessioner", - "deleteSuccessorLabel": "Överlämna värdar och inloggningsuppgifter till", - "deleteSuccessorMe": "Jag (den administratör som tar bort)", - "deleteSuccessorNone": "Ingen, ta bort dem", - "deleteSuccessorDesc": "Allt som denna användare delade fortsätter att fungera under den nya ägaren; att välja ingen tar bort deras värdar, inloggningsuppgifter och delningar.", - "deleteUserDangerDesc": "Ta bort {{username}} och all deras data (värdar, inloggningsuppgifter, kodsnuttar, historik) permanent. Detta kan inte ångras.", - "deleteUserConfirm": "Ta bort {{username}} och all deras data permanent?", - "deleteUserAdminBlocked": "Ta bort administratörsstatus innan du tar bort denna användare.", - "createRoleRequired": "Namn och visningsnamn krävs", - "createRoleSuccess": "Roll \"{{name}}\" skapad", - "createRoleFailed": "Misslyckades med att skapa roll", - "apiKeyNameRequired": "Nyckelnamn krävs", - "apiKeyUserRequired": "Användar-ID krävs", - "apiKeyCreatedSuccess": "API-nyckel \"{{name}}\" skapad", - "apiKeyCreateFailed": "Misslyckades med att skapa API-nyckel", - "exportSuccess": "Databasen exporterades korrekt", - "exportFailed": "Export av databas misslyckades", - "importSelectFile": "Välj en fil först", - "importCompleted": "Importen slutförd: {{total}} objekt importerade, {{skipped}} hoppade över", - "importFailed": "Importen misslyckades: {{error}}", - "importError": "Import av databas misslyckades", - "sectionHostDefaults": "Standardvärden för värdar", "rolePermissions": { "count_one": "{{count}} behörighet", - "count_other": "{{count}} behörigheter", - "editAction": "Redigera behörigheter", - "loadError": "Misslyckades med att ladda behörighetskatalogen", - "saved": "Rollbehörigheter sparade", - "saveError": "Misslyckades med att spara rollbehörigheter", - "save": "Spara", - "saving": "Sparar...", - "pluginDisabled": "Tillägg inaktiverat", "groups": { "hosts": "Värdar", "credentials": "Inloggningsuppgifter", "admin": "Administration" } - }, - "notificationPrivateEndpoints": "Tillåtna privata värdar för aviseringar", - "notificationPrivateEndpointsDesc": "Exakta privata värdar som aviseringkanaler får kontakta. Separera dem med kommatecken.", - "updateNotificationEndpointsFailed": "Misslyckades med att uppdatera tillåtelselistan för aviseringändpunkter", - "secondFactorsSectionTitle": "Andra faktorer", - "secondFactorsNone": "Inga andra faktorer registrerade", - "secondFactorUnavailable": "Otillgänglig", - "resetSecondFactors": "Återställ andra faktorer", - "resetSecondFactorsConfirm": "Ta bort alla andra faktorer för {{username}}? De kan logga in med sitt lösenord eller SSO och registrera sig igen.", - "secondFactorsResetSuccess": "Andra faktorer återställda", - "secondFactorsResetFailed": "Misslyckades med att återställa andra faktorer", - "passwordLoginForced": "Inloggning med lösenord är inaktiverat, men ingen annan inloggningsmetod är aktiverad, så det hålls på för tillfället. Ingen låses ut.", - "sslNotRenewed": "Ingentjen förnyar detta certifikat. Det löper ut {{date}}. Aktivera automatisk förnyelse i avsnittet ACME-certifikat, eller ladda upp ett nytt innan dess.", - "sslSelfSigned": "Självsignerat certifikat skapat av Termix. Webbläsare kommer att varna för det.", - "sslRenewedBy": "Förnyat automatiskt av {{plugin}}", - "sslIssuer": "Utfärdat av {{issuer}}", - "sslNames": "Täcker {{names}}", - "sslManualTitle": "Ladda upp ett certifikat", - "updateExternalAutoProvisionFailed": "Misslyckades med att uppdatera inställningen för automatisk skapande", - "hostTags": "Fördefinierade värdtaggar", - "hostTagsDesc": "Taggar som alla användare ser som förslag i värdredigeraren. Tryck på Mellanslag eller Retur för att lägga till en. Om du tar bort en tagg här tas den inte bort från värden.", - "hostTagsError": "Kunde inte läsa in eller spara förslag på värdtaggar.", - "revokeAllSessionsConfirm": "Logga ut {{username}} överallt?", - "revokeSessionConfirm": "Logga ut denna session?", - "revokeSession": "Logga ut", - "deleteRoleConfirm": "Ta bort rollen {{name}}?", - "revokeKeyConfirm": "Återkalla API-nyckeln {{name}}?", - "revokeKey": "Återkalla" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Var", - "who": "Vem", - "hostLabel": "Värd", - "hostPlaceholder": "192.168.1.1 eller example.com", - "portLabel": "Port", - "usernameLabel": "Användarnamn", - "usernamePlaceholder": "användarnamn", - "authLabel": "Autentisering", - "passwordLabel": "Lösenord", - "passwordPlaceholder": "lösenord", - "privateKeyLabel": "Privat nyckel", - "privateKeyPlaceholder": "Klistra in privat nyckel...", - "credentialLabel": "Inloggningsuppgift", - "credentialPlaceholder": "Välj en sparad inloggningsuppgift", - "protocolLabel": "Protokoll", - "domainLabel": "Domän", - "domainPlaceholder": "valfritt", - "connectToAction": "Anslut till {{name}}", - "sshProtocol": "SSH", - "noTarget": "Inget installerat kan ansluta till denna värdtyp" + "usernameLabel": "Användarnamn" }, "keybindings": { - "description": "Bind tangenter till åtgärder i terminalen och appen, eller ändra de inbyggda genvägarna.", - "defaultsHeading": "Inbyggda genvägar", - "fixedHeading": "Appgenvägar", - "fixed": { - "splitRight": "Dela åt höger", - "splitDown": "Dela nedåt", - "zoomPane": "Zooma den fokuserade panelen", - "navigatePane": "Flytta mellan paneler", - "nextTab": "Nästa flik", - "previousTab": "Föregående flik", - "jumpTab": "Hoppa till flik", - "previousView": "Tillbaka till föregående sidovyn", - "fullscreen": "Växla till helskärm" - }, - "customHeading": "Anpassade genvägar", - "addBinding": "Lägg till genväg", - "addBindingTitle": "Lägg till genväg", - "editBindingTitle": "Redigera genväg", - "loading": "Läser in...", - "noCustomBindings": "Inga anpassade genvägar än", - "defaultBadge": "Standard", - "customizedBadge": "Anpassad", - "customize": "Anpassa", - "resetToDefault": "Återställ till standard", - "resetAllToDefaults": "Återställ alla till standard", - "cancel": "Avbryt", - "saveBinding": "Spara genväg", - "saveError": "Kunde inte spara tangentbordsgenvägar", - "pressKeysToRecord": "Tangentkombination", - "pressKeysPlaceholder": "Klicka och tryck på tangenter", - "recording": "Tryck på tangenter...", - "comboRequiredError": "Tryck på en tangentkombination först", - "conflictWarning": "Denna kombination är redan kopplad till {{combo}}. Om du sparar kommer båda att utlösas.", - "actionLabel": "Åtgärd", "actionNextTab": "Byt till nästa flik", "actionPreviousTab": "Byt till föregående flik", "actionOpenCommandPalette": "Öppna snabb sökning", - "actionReconnectSession": "Återanslut nuvarande session", - "unavailableAction": "{{type}} (ej tillgänglig)", - "actionRequiredError": "Välj en åtgärd först", - "deleteConfirm": "Ta bort denna tangentbindning?", - "resetAllConfirm": "Återställ alla tangentbindningar till standard?" + "actionReconnectSession": "Återanslut nuvarande session" }, "userProfile": { - "storageModeLocal": "Webbläsare", - "storageModeCloud": "Databas", - "storageModeDescription": "Webbläsaren sparar inställningar endast i denna webbläsare. Databasen synkroniserar med servern och laddas på alla enheter.", - "resetToDefaults": "Återställ till standard", - "resetToDefaultsSuccess": "Inställningar har återställts till standard.", - "storageModeSwitch": "Lagring av preferenser", - "sectionAccount": "Konto", - "desktopProfileTitle": "Endast denna enhet", - "desktopProfileDescription": "Denna profil finns på denna enhet och loggar in självständigt. Länka den till en Termix-server för att använda samma värdar och inställningar på alla enheter.", - "sectionInterface": "Gränssnitt", - "interfacePresetDesc": "Hur mycket detaljer Termix visar. Alla funktioner förblir tillgängliga.", "preset_simple": "Enkel", "preset_simple_desc": "Endast det nödvändigaste.", "preset_balanced": "Balanserad", "preset_balanced_desc": "Den vanliga layouten.", "preset_advanced": "Avancerad", "preset_advanced_desc": "Allt på, tätt packat.", - "presetClearOverrides": "Återställ alla", - "presetOverridesTitle": "Anpassad", - "presetRevertArea": "Återgå", - "presetConfirmTitle": "Byt till {{preset}}?", - "presetConfirmDesc": "Detta återställer din sidofält, navigering, dashboard-layout, terminalverktygsfält och filhanterarvy. Dina värdar, inloggningsuppgifter och startsida påverkas inte.", - "presetConfirmApply": "Tillämpa förinställning", - "runSetupAgainDesc": "Gå igenom installationsguiden igen.", - "runSetupAgainButton": "Kör installation", "uiArea_chrome": "Appgränssnitt", "uiArea_hostList": "Värdlista", "uiArea_credentialList": "Inloggningsuppgiftslista", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Filhanterare", "uiArea_hostEditor": "Värdredigerare", - "sectionAppearance": "Utseende", - "sectionSecurity": "Säkerhet", - "sectionApiKeys": "API-nycklar", - "sectionData": "Data", - "usernameLabel": "Användarnamn", - "roleLabel": "Roll", - "roleAdministrator": "Administratör", - "authMethodLabel": "Autentiseringsmetod", - "authMethodLocal": "Lokal", - "twoFaLabel": "2FA", - "twoFaOn": "På", - "twoFaOff": "Av", - "versionLabel": "Version", - "cliTitle": "Termix CLI", - "cliDescription": "Öppna terminaler, kör kommandon och flytta filer från din egen skal.", - "cliLearnMore": "Läs mer", - "deleteAccount": "Ta bort konto", - "deleteAccountDescription": "Ta bort ditt konto permanent", - "deleteButton": "Ta bort", - "deleteAccountPermanent": "Denna åtgärd är permanent och kan inte ångras.", - "deleteAccountWarning": "Alla sessioner, värdar, inloggningsuppgifter och inställningar tas bort permanent.", - "confirmPasswordDeletePlaceholder": "Ange ditt lösenord för att bekräfta", "languageLabel": "Språk", "themeLabel": "Tema", "fontSizeLabel": "Teckenstorlek", "interfaceFontLabel": "Gränssnittstypsnitt", "interfaceFontDescription": "Ändrar typsnittet i applikationens gränssnitt. Terminalprofiler behåller sina egna typsnittsinställningar.", "accentColorLabel": "Accentfärg", - "keyboardShortcuts": "Tangentbordsgenvägar", - "keyboardShortcutsDescription": "Anpassa genvägar för kopiera, klistra in och kommandon i terminalen", - "manageShortcuts": "Hantera", - "commandPalette": "Kommandopalette", - "commandPaletteDesc": "Aktivera tangentbordsgenväg", - "reopenTabsOnLogin": "Återöppna flikar vid inloggning", - "reopenTabsOnLoginDesc": "Återställ dina öppna flikar när du loggar in eller uppdaterar sidan, även från en annan enhet", - "confirmTabClose": "Bekräfta stängning av flik", - "confirmTabCloseDesc": "Fråga innan terminalflikar stängs", - "showTabNumbers": "Visa fliknummer", - "showTabNumbersDesc": "Visa ett nummer på varje flik för att underlätta distinktionen mellan dem", - "settingsAppRail": "App-lista", - "sidebarSettingsMoved": "Inställningarna för visning av värdlistan har flyttats till panelen Anpassa lista, som öppnas från verktygsfältet för Värdar.", - "showHostTags": "Visa värdtaggar", - "showHostTagsDesc": "Visa taggar i värdlistan", - "statusColors": "Verkliga statusfärger", - "statusColorsDesc": "Använd grönt/rött för online/offline-status istället för accentfärgen", - "pinAppRail": "Fäst app-lista", - "pinAppRailDesc": "Håll den vänstra app-listan alltid utökad istället för att utöka vid hovring", - "expandAppRailOnHover": "Utöka app-lista vid hovring", - "expandAppRailOnHoverDesc": "Tillåt att den vänstra app-listan utökas när pekaren flyttas över den", - "appRailHoverPushesContent": "Flytta innehåll vid utökning", - "appRailHoverPushesContentDesc": "Gör plats för det utökade fältet istället för att öppna det över sidan. Öppna sessioner, som fjärrskrivbord, ändrar storlek varje gång", - "showPinAppRailButton": "Visa knapp för att fästa app-lista", - "showPinAppRailButtonDesc": "Visa en knapp i app-listan för att fästa den öppen. Avstängd som standard.", - "settingsNavigation": "Navigation", - "navigationTabsDesc": "Välj vilka flikar som visas i app-listan", - "settingsUpdates": "Uppdateringar", - "disableUpdateChecks": "Inaktivera uppdateringskontroller", - "disableUpdateChecksDesc": "Sluta kontrollera efter uppdateringar", - "changePassword": "Ändra lösenord", - "currentPasswordLabel": "Nuvarande lösenord", - "currentPasswordPlaceholder": "Nuvarande lösenord", - "newPasswordLabel": "Nytt lösenord", - "newPasswordPlaceholder": "Nytt lösenord", - "confirmPasswordLabel": "Bekräfta nytt lösenord", - "confirmPasswordPlaceholder": "Bekräfta nytt lösenord", - "updatePassword": "Uppdatera lösenord", - "createApiKeyTitle": "Skapa API-nyckel", - "createApiKeyDescription": "Generera en ny API-nyckel för programmatisk åtkomst.", - "apiKeyNameLabel": "Namn", - "apiKeyNamePlaceholder": "t.ex. CI-pipeline", - "expiryDateLabel": "Utgångsdatum", - "optional": "valfritt", - "cancel": "Avbryt", - "createKey": "Skapa nyckel", - "apiKeyCreatedWarning": "Nyckel skapad – kopiera den nu, den visas inte igen.", - "copyApiKey": "Kopiera API-nyckel", - "copiedToClipboard": "Kopierat till urklipp", "apiKeyCount_one": "{{count}} nyckel", - "apiKeyCount_other": "{{count}} nycklar", - "newKey": "Ny nyckel", - "noApiKeys": "Inga API-nycklar ännu.", - "apiKeyActive": "Aktiv", - "apiKeyUsageHint": "Lägg till din nyckel i", - "apiKeyUsageHintHeader": "huvudet.", - "apiKeyPermissionsHint": "Nycklar ärver behörigheterna från den användare som skapade dem.", - "exportData": "Exportera mina data", - "exportDataDesc": "Ladda ner en säkerhetskopia av dina värdar, inloggningsuppgifter och inställningar för att överföra till en annan enhet", - "export": "Exportera", - "exporting": "Exporterar...", - "importData": "Importera mina data", - "importDataDesc": "Återställ dina värdar, inloggningsuppgifter och inställningar från en .sqlite-säkerhetskopia", - "importDataSelected": "Vald: {{name}}", - "selectFile": "Välj fil", - "changeFile": "Ändra", - "import": "Importera", - "importing": "Importerar...", - "exportSuccess": "Data exporterades korrekt", - "exportFailed": "Export av data misslyckades", - "importSelectFile": "Välj en fil först", - "importCompleted": "Importen slutförd: {{total}} objekt importerade, {{skipped}} hoppade över", - "importFailed": "Importen misslyckades: {{error}}", - "roleUser": "Användare", - "authMethodDual": "Dubbelautentisering", - "authMethodExternal": "Extern", - "done": "Klar", - "apiKeyNameRequired": "Nyckelnamn krävs", - "apiKeyCreated": "API-nyckeln \"{{name}}\" skapad", - "apiKeyCreateFailed": "Misslyckades med att skapa API-nyckel", - "apiKeyUser": "Användare", - "apiKeyExpires": "Utgår", - "apiKeyRevoked": "API-nyckeln \"{{name}}\" återkallad", - "apiKeyRevokeFailed": "Misslyckades med att återkalla API-nyckel", - "passwordFieldsRequired": "Nuvarande och nytt lösenord krävs", - "passwordMismatch": "Lösenorden matchar inte", - "passwordTooShort": "Lösenordet måste vara minst 6 tecken", - "passwordUpdated": "Lösenordet uppdaterades korrekt", - "passwordUpdateFailed": "Misslyckades med att uppdatera lösenordet", - "deletePasswordRequired": "Lösenord krävs för att ta bort ditt konto", - "deleteFailed": "Misslyckades med att ta bort kontot", - "deleting": "Tar bort...", "colorPickerTooltip": "Öppna färgväljaren", "themeSystem": "System", "themeLight": "Ljus", @@ -1755,18 +1122,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Inloggad på {{server}}", - "linkedProfileDescription": "Den här enheten använder ditt konto på servern och behåller en kopia av dina data, så den fungerar även offline.", - "manageSync": "Hantera synkronisering", - "setUpSync": "Länka till en server", - "settingsTabsAndShortcuts": "Flikar och genvägar", - "onBetaTitle": "Du använder en betaversion", - "onBetaDescription": "Tack för att du testar. Berätta vad som går sönder.", - "tryBetaTitle": "Testa nya funktioner i förväg", - "tryBetaDescription": "Gå med i betaprogrammet under Uppdateringar.", - "sendBetaFeedback": "Skicka feedback om betan", - "openUpdates": "Uppdateringar" + "themeGruvbox": "Gruvbox" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "{{name}} behövs av {{list}}. Stäng av eller avinstallera dem först.", "missingDependencies": "{{name}} behöver {{list}}, som inte är installerat.", "consentChanged": "Vad detta plugin begär har ändrats sedan du tittade. Kontrollera listan igen.", - "upload": "Kunde inte läsa {{name}}: {{error}}", - "developerMode": "Kunde inte ändra utvecklarläge: {{error}}" + "upload": "Kunde inte läsa {{name}}: {{error}}" }, "data": { "title": "Lagrad data", @@ -2145,13 +1500,7 @@ "browsePlugins": "Bläddra bland plugins", "loading": "Laddar", "developer": { - "title": "Plugin-utvecklarläge", - "hint": "Låter administratörer installera plugins från en .tmxplug-fil i fliken Plugins, utan registrets kontroller. Använd det för att bygga och testa dina egna plugins.", - "enableTitle": "Vill du aktivera utvecklarläge?", - "enableBody": "Administratörer kommer att kunna installera plugins från filer som Termix inte har kontrollerat. Ett plugin kan göra vad dess funktioner tillåter, så aktivera detta bara när du bygger eller testar plugins.", - "enable": "Aktivera", - "installFromFile": "Installera från fil", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS är inställt, så installation från fil förblir blockerad." + "installFromFile": "Installera från fil" }, "count": { "downloads_one": "{{formatted}} nedladdning", @@ -2189,71 +1538,7 @@ "secretSet": "Angiven", "secretNotSet": "Inte angiven", "secretReplace": "Ersätt", - "pluginSettingsSaved": "Inställningar sparade", - "pluginSettingsInvalid": "Vissa inställningar kunde inte sparas. Kontrollera de markerade fälten.", - "pluginSettingsSaveFailed": "Misslyckades att spara inställningar", - "pluginSettingsLoadFailed": "Misslyckades att ladda inställningar", - "featureUnavailable": "{{name}} är inte tillgänglig just nu. Dessa inställningar sparas men kommer inte att träda i kraft.", - "account": "Konto", - "security": "Säkerhet", - "apiKeys": "API-nycklar", - "data": "Data och synkronisering", - "interface": "Gränssnitt", - "appearance": "Utseende", - "keybindings": "Tangentbindningar", - "adminGeneral": "Allmänt", - "adminUsers": "Användare", - "adminSessions": "Sessioner", - "adminRoles": "Roller", - "adminHostDefaults": "Standardvärden för värdar", - "adminBranding": "Varumärkesprofil", - "adminDatabase": "Databas", - "adminSsl": "SSL", - "adminApiKeys": "API-nycklar", - "adminAuditLog": "Revisionslogg", - "bandYou": "Ditt konto", - "bandApp": "Den här appen", - "bandPlugins": "Plugins", - "bandInstance": "Den här servern", - "searchPlaceholder": "Sök i inställningar", - "noResults": "Inga inställningar matchar.", - "pages": "Sidor", - "instanceSettings": "Serverinställningar", - "nothingHere": "Inget att ställa in här.", - "searchPage": "Sök på den här sidan", - "noPageMatches": "Inget på den här sidan matchar.", - "updates": { - "title": "Uppdateringar", - "betaProgram": "Betaprogram", - "betaIntro": "Beta-versioner är tidiga versioner av nästa Termix-version. De släpps på tisdagar och fredagar när det finns något nytt att testa. De kan innehålla buggar, och din feedback är det som gör den stabila versionen bättre.", - "termixBetas": "Termix beta-versioner", - "termixBetasHint": "Informera mig om nya beta-versioner, inte bara stabila versioner.", - "runningBetaBuild": "Du kör en beta-version. För att avsluta, byt tillbaka till en stabil version eller installationsprogram.", - "howToInstall": "Så här får du tag i beta-versionen", - "desktopInstall": "Ladda ner beta-installationsprogrammet och installera det över den nuvarande.", - "downloadBeta": "Ladda ner {{version}}", - "dockerInstall": "Ändra din bild till betatagg och starta om containern:", - "copy": "Kopiera", - "copied": "Kopierad", - "copyFailed": "Kunde inte kopiera", - "learnMore": "Läs mer om beta-versioner", - "feedback": "Feedback", - "feedbackHint": "Hittade du en bugg eller har du en idé? Den skickas direkt till utvecklarna med din version ifylld.", - "sendFeedback": "Skicka feedback om beta-versionen", - "releases": "Versioner", - "thisVersion": "Den här versionen", - "newestStable": "Senaste stabila versionen", - "newestBeta": "Senaste beta-versionen", - "noRelease": "Ingen just nu", - "pluginBetas": "Plugin-betaversioner", - "pluginBetasIntro": "Varje plugin kan använda beta-versioner på egen hand. För att testa ett, öppna det och tryck på Testa beta.", - "openPlugins": "Öppna plugins", - "waitingForStable": "Tillbaka till stabil version. Stannar på {{version}} tills en stabil version är nyare.", - "backToStable": "Tillbaka till stabil version", - "allPluginsBeta": "Använd beta-versioner för alla plugins", - "allPluginsStable": "Alla plugins tillbaka till stabil version", - "saveFailed": "Kunde inte spara ändringen" - } + "featureUnavailable": "{{name}} är inte tillgänglig just nu. Dessa inställningar sparas men kommer inte att träda i kraft." }, "managerCard": { "refresh": "Uppdatera", @@ -2263,83 +1548,13 @@ "filter": "Filtrera..." }, "sync": { - "server": "Termix-server", - "account": "Konto", - "status": "Status", - "never": "aldrig", - "justNow": "just nu", "minutesAgo_one": "{{count}} minut sedan", "minutesAgo_other": "{{count}} minuter sedan", "hoursAgo_one": "{{count}} timme sedan", "hoursAgo_other": "{{count}} timmar sedan", - "actionFailed": "Det fungerade inte. Försök igen.", - "unlinkedTitle": "Endast den här enheten", - "unlinkedBody": "Termix fungerar självständigt på den här enheten. Länka den till din Termix-server för att hålla allt synkroniserat.", - "unlinkedPointHosts": "Dina värdmaskiner, inloggningsuppgifter, kommandon och inställningar följer med dig till varje enhet.", - "unlinkedPointOffline": "Allt fungerar fortfarande när servern inte kan nås, och synkroniseras senare.", - "unlinkedPointAccount": "Du loggar in med ditt serverkonto, och värdmaskiner som andra delat med dig visas också här.", - "linkButton": "Länka till en server", - "state": { - "syncing": "Synkroniserar", - "offline": "Servern kan inte nås", - "error": "Synkronisering stoppad", - "signedOut": "Utloggad", - "synced": "Synkroniserad {{time}}" - }, "pending_one": "{{count}} ändring väntar på synkronisering", "pending_other": "{{count}} ändringar väntar på synkronisering", - "signInAgain": "Logga in igen", - "syncNow": "Synkronisera nu", - "unlink": "Koppla bort", - "unlinked": "Den här enheten är inte längre länkad", - "unlinkTitle": "Vill du koppla bort denna enhet?", - "unlinkDescription": "Synkroniseringen stoppas och du loggas ut från servern. Värdar som andra delat med dig tas bort från denna enhet i alla fall.", - "unlinkKeepTitle": "Behåll mina data här", - "unlinkKeepBody": "Dina värdar, inloggningsuppgifter och inställningar stannar kvar på denna enhet och fungerar oberoende.", - "unlinkRemoveTitle": "Ta bort synkroniserade data", - "unlinkRemoveBody": "Allt som kom från servern tas bort från denna enhet. Endast värdar som behållits lokalt på enheten stannar kvar.", - "conflictsTitle": "Konflikter", - "conflictsDescription": "Dessa ändrades både här och på servern samtidigt. Serverns version används. Välj att behålla din version för att skicka den till servern istället.", - "keepMine": "Behåll min version", - "keepServer": "Behåll serverns version", - "errorsTitle": "Inte synkroniserat", - "errorsDescription": "Servern accepterade inte dessa ändringar. De stannar kvar på denna enhet.", - "errorPermission": "Ditt konto på servern har inte behörighet att göra denna ändring.", - "retry": "Försök igen", - "whatSyncs": "Vad som synkroniseras", - "whatSyncsDescription": "Stäng av allt du vill behålla endast på denna enhet.", - "coreGroup": "Termix", - "notOnServer": "Servern har inte detta", - "notOnDevice": "Inte på denna enhet ännu", - "localOnlyHint": "Du kan också behålla enskilda värdar eller mappar lokalt på denna enhet via deras inställningar.", - "originTitle": "Var anslutningar startar", - "originDescription": "Anslut till värdar från denna enhet, eller via servern. Du kan ändra detta per värd.", - "originLocal": "Denna enhet", - "originRemote": "Servern", - "entities": { - "hosts": "Värdar", - "sshCredentials": "Inloggningsuppgifter", - "sshFolders": "Mappar", - "userPreferences": "Inställningar", - "pluginUserSettings": "Inställningar för tillägg", - "sharedHosts": "Värdar delade med dig", - "sharedCredentials": "Inloggningsuppgifter delade med dig", - "vaultProfiles": "Vault-profiler", - "snippetFolders": "Mappar för kodsnuttar", - "snippets": "Kodsnuttar", - "dashboardServiceLinks": "Länkar till tjänster", - "homepageItems": "Objekt på startsidan", - "networkTopology": "Nätverkskarta", - "workspaces": "Arbetsytor", - "hostDefaults": "Standardvärden för värdar", - "hostDefaultsAdmin": "Standardvärden för servervärdar", - "aiProviders": "AI-leverantörer", - "homepageLayouts": "Layouter för startsidan", - "accountProfile": "Kontoprofil" - }, "proxy": { - "title": "Omvänd proxy", - "description": "Endast nödvändigt när något som Cloudflare Access eller en inloggningssida sitter framför din server.", "headersTitle": "Extra rubriker", "headersHint": "Skickas med varje begäran till servern, till exempel en Cloudflare Access-service-token.", "headerName": "Rubriknamn", @@ -2352,8 +1567,7 @@ "username": "Användarnamn", "password": "Lösenord", "allowInvalidCertificate": "Lita på ett självsignerat certifikat", - "allowInvalidCertificateHint": "Endast för din egen server, när dess certifikat inte kommer från en känd auktoritet.", - "saved": "Sparat" + "allowInvalidCertificateHint": "Endast för din egen server, när dess certifikat inte kommer från en känd auktoritet." }, "problems": { "invalidUrl": "Det ser inte ut som en webbadress.", @@ -2391,6 +1605,27 @@ "linking": "Länkar och kör första synkroniseringen...", "linked": "Länkad. Dina data synkroniseras nu.", "signedInAgain": "Inloggad. Synkroniseringen körs igen." + }, + "entities": { + "hosts": "Värdar", + "sshCredentials": "Inloggningsuppgifter", + "sshFolders": "Mappar", + "userPreferences": "Inställningar", + "pluginUserSettings": "Inställningar för tillägg", + "sharedHosts": "Värdar delade med dig", + "sharedCredentials": "Inloggningsuppgifter delade med dig", + "vaultProfiles": "Vault-profiler", + "snippetFolders": "Mappar för kodsnuttar", + "snippets": "Kodsnuttar", + "dashboardServiceLinks": "Länkar till tjänster", + "homepageItems": "Objekt på startsidan", + "networkTopology": "Nätverkskarta", + "workspaces": "Arbetsytor", + "hostDefaults": "Standardvärden för värdar", + "hostDefaultsAdmin": "Standardvärden för servervärdar", + "aiProviders": "AI-leverantörer", + "homepageLayouts": "Layouter för startsidan", + "accountProfile": "Kontoprofil" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "Denna värd ställer in sitt eget värde. Klicka för att återanvända standardvärdet från {{source}}", "clearTitle": "Inställt på denna nivå. Klicka för att rensa det och använda {{source}} istället", "inheritedTitle": "Följer standardvärdet från {{source}}", - "titleAdmin": "Serverns standardinställningar för värdar", - "titleUser": "Mina standardinställningar för värdar", - "titleFolder": "Standardinställningar för mapp: {{name}}", - "descriptionAdmin": "Standardinställningar för varje värd på denna server. En användares egna standardinställningar, en mapps standardinställningar eller värden själv kan fortfarande ställa in ett annat värde. Ändra ett fält för att ställa in det här, eller rensa det för att lämna det inställt.", - "descriptionUser": "Standardinställningar för alla dina värdar, ovanpå serverns. En mapp eller värden själv kan fortfarande ställa in ett annat värde. Ändra ett fält för att ställa in det här, eller rensa det för att lämna det inställt.", - "descriptionFolder": "Standardinställningar för värdarna i denna mapp och dess undermappar, ovanpå dina egna. En värd kan fortfarande ställa in ett annat värde. Ändra ett fält för att ställa in det här, eller rensa det för att lämna det inställt.", - "save": "Spara standardinställningar", "saved_one": "Standardinställningar sparade. {{count}} värd uppdaterades.", "saved_other": "Standardinställningar sparade. {{count}} värdar uppdaterades.", - "savedInBackground": "Standardinställningar sparade. Värdar uppdateras i bakgrunden.", "appliedToHosts_one": "{{count}} värd uppdaterades med de nya standardinställningarna.", "appliedToHosts_other": "{{count}} värdar uppdaterades med de nya standardinställningarna.", - "saveFailed": "Kunde inte spara standardinställningarna", - "loadFailed": "Kunde inte ladda standardinställningarna", - "confirmTitle": "Spara standardinställningar?", "confirmChanges_one": "{{count}} värd följer dessa standardinställningar och kommer att ändras.", "confirmChanges_other": "{{count}} värdar följer dessa standardinställningar och kommer att ändras.", - "confirmNoChanges": "Inga befintliga värdar ändras. Nya värdar kommer att starta med dessa standardinställningar.", - "menuMyDefaults": "Mina standardinställningar för värdar", - "folderDefaultsAction": "Standardinställningar för mapp", - "adminSectionDescription": "Ställ in standardinställningarna som varje värd på denna server följer, för varje inställning en värd har, inklusive varje plugins. Användare och mappar kan ställa in sina egna ovanpå, och vilken värd som helst kan fortfarande använda sitt eget värde.", - "editServerDefaults": "Redigera serverns standardinställningar", - "resetMenu": "Återställ", - "resetAll": "Återställ allt till standardvärden", - "resetCore": "Återställ anslutning och SSH till standardvärden", "resetDone_one": "{{count}} värd följer nu sina standardvärden.", "resetDone_other": "{{count}} värdar följer nu sina standardvärden." }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "Sparat. Skriv för att ersätta det." }, - "sharing": { - "revokeConfirm": "Ta bort åtkomst för {{name}}?", - "revoke": "Ta bort åtkomst" - }, "manage": { - "searchSettings": "Sök i inställningar", - "noMatchingSettings": "Inga inställningar matchar.", - "sections": "Sektioner", - "sectionNeedsAttention": "Något här behöver uppmärksamhet", "needsAttention_one": "En sak behöver uppmärksamhet.", "needsAttention_other": "{{count}} saker behöver uppmärksamhet.", - "bandHost": "Värd", - "bandFeatures": "Protokoll och plugins", - "bandCredential": "Inloggningsuppgift", - "sshConnection": "SSH-anslutning", - "errorAddressRequired": "En adress krävs.", - "errorPortRange": "Använd en port mellan 1 och 65535.", - "defaults": "Standardvärden", - "searchHosts": "Sök i värdar", - "searchCredentials": "Sök i inloggningsuppgifter", - "searchDefaults": "Sök i standardvärden", - "addCredential": "Lägg till inloggningsuppgift", - "nothingMatches": "Inget matchar", - "nothingYet": "Inget här ännu", - "emptyHostsHint": "Lägg till en värd så visas den här, i vilken mapp du än anger.", - "emptyCredentialsHint": "Inloggningsuppgifter du sparar kan återanvändas av alla värdar.", - "collapse": "Komprimera", - "expand": "Expandera", - "cannotBeUndone": "Detta kan inte ångras.", - "hostNotFound": "Kunde inte hitta den värden. Försök uppdatera listan.", "hostCount_one": "{{count}} värd", "hostCount_other": "{{count}} värdar", "credentialCount_one": "{{count}} inloggningsuppgift", - "credentialCount_other": "{{count}} inloggningsuppgifter", - "newHost": "Ny värd", - "newCredential": "Ny inloggningsuppgift", - "advanced": "Avancerat", - "pickHost": "Välj en värd att redigera", - "pickCredential": "Välj en inloggningsuppgift att redigera", - "pickDefaults": "Välj en nivå av standardvärden att redigera", - "pickHint": "Allt om en anslutning finns här, grupperat så att du lätt hittar det." + "credentialCount_other": "{{count}} inloggningsuppgifter" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/th_TH.json b/src/ui/locales/translated/th_TH.json index 7809d00f5..a29c8ff3e 100644 --- a/src/ui/locales/translated/th_TH.json +++ b/src/ui/locales/translated/th_TH.json @@ -141,7 +141,6 @@ "continue": "ดำเนินการต่อ", "error": "ข้อผิดพลาด", "unsavedChanges": "มีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก", - "more": "เพิ่มเติม", "loading": "กำลังโหลด...", "host": "โฮสต์", "selectHost": "เลือกโฮสต์...", @@ -154,7 +153,6 @@ "cancel": "ยกเลิก", "username": "ชื่อผู้ใช้", "login": "เข้าสู่ระบบ", - "logout": "ออกจากระบบ", "register": "ลงทะเบียน", "password": "รหัสผ่าน", "confirmPassword": "ยืนยันรหัสผ่าน", @@ -165,8 +163,6 @@ "rename": "เปลี่ยนชื่อ", "edit": "แก้ไข", "confirm": "ยืนยัน", - "next": "ถัดไป", - "previous": "ก่อนหน้า", "refresh": "รีเฟรช", "language": "ภาษา", "backendReconnected": "การเชื่อมต่อเซิร์ฟเวอร์ได้รับการกู้คืน", @@ -234,10 +230,6 @@ "pluginsDocsLink": "อ่านเกี่ยวกับแต่ละตัว" }, "desktopUpdates": { - "title": "แอปเดสก์ท็อป", - "mode": "การอัปเดต", - "modeHint": "วิธีที่แอปนี้รับเวอร์ชันใหม่", - "manualModeHint": "สำเนาของแอปนี้ไม่สามารถอัปเดตเองได้ ดังนั้น Termix จะแจ้งเตือนคุณเมื่อมีเวอร์ชันใหม่เท่านั้น", "modeAutomatic": "อัตโนมัติ", "modePrompt": "ถามก่อน", "modeNever": "ไม่เลย", @@ -247,15 +239,6 @@ "onboardingTitle": "การอัปเดตแอป", "onboardingBody": "แอปเดสก์ท็อปสามารถอัปเดตตัวเองได้แล้ว เลือกวิธีที่คุณต้องการรับเวอร์ชันใหม่ คุณสามารถเปลี่ยนการตั้งค่านี้ได้ในภายหลังที่เมนู การตั้งค่า > การอัปเดต", "onboardingManual": "แอปนี้ถูกติดตั้งในรูปแบบที่ไม่สามารถอัปเดตตัวเองได้ ดังนั้น Termix จะแจ้งเตือนเมื่อมีเวอร์ชันใหม่พร้อมลิงก์สำหรับดาวน์โหลด", - "status": "เวอร์ชัน {{version}}", - "statusIdle": "ยังไม่ได้ตรวจสอบ", - "statusChecking": "กำลังตรวจสอบการอัปเดต", - "statusAvailable": "มีเวอร์ชัน {{version}} ให้ใช้งาน", - "statusDownloading": "กำลังดาวน์โหลด {{version}} ({{progress}}%)", - "statusReady": "เวอร์ชัน {{version}} พร้อมใช้งานแล้ว รีสตาร์ทเพื่อติดตั้ง", - "statusUpToDate": "คุณใช้เวอร์ชันล่าสุดแล้ว", - "statusError": "ไม่สามารถตรวจสอบการอัปเดตได้ โปรดลองอีกครั้งในภายหลัง", - "checkNow": "ตรวจสอบเลย", "download": "ดาวน์โหลด", "restart": "รีสตาร์ทเลย", "later": "ภายหลัง", @@ -269,26 +252,11 @@ "terminal": "เทอร์มินัล", "close": "ปิด", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "คัดลอกรหัสผ่าน", - "copySudoPassword": "คัดลอกรหัสผ่าน Sudo", - "passwordCopied": "คัดลอกรหัสผ่านไปยังคลิปบอร์ดแล้ว", - "failedToCopyPassword": "คัดลอกรหัสผ่านไม่สำเร็จ", - "refreshTab": "รีเฟรชการเชื่อมต่อ", - "renameTab": "เปลี่ยนชื่อแท็บ", "dashboard": "แดชบอร์ด", "quickConnect": "เชื่อมต่อด่วน", - "openAsTabHint": "กด Ctrl+คลิก หรือคลิกกลางเพื่อเปิดเป็นแท็บ", - "openAsTab": "เปิดเป็นแท็บ", - "openInRightDock": "เปิดในแถบด้านขวา", - "closeRightDock": "ปิดแถบด้านขวา", - "toggleRightDock": "สลับแถบด้านขวา", "hosts": "โฮสต์", "credentials": "ข้อมูลเข้าสู่ระบบ", "connections": "การเชื่อมต่อ", - "keepSideMenuOpen": "คงเมนูเปิดไว้", - "collapseSideMenu": "ยุบเมนู", - "roleAdministrator": "ผู้ดูแลระบบ", - "roleUser": "ผู้ใช้", "sync": "ซิงค์", "reconnectDisconnectedTerminals": "เชื่อมต่อเทอร์มินัลที่ขาดการเชื่อมต่อทั้งหมดใหม่", "reconnectingTerminals_other": "กำลังเชื่อมต่อเทอร์มินัล {{count}} ใหม่", @@ -296,29 +264,10 @@ "reconnectTerminalsFailed_other": "ไม่สามารถเริ่มเชื่อมต่อเทอร์มินัล {{count}} ใหม่ได้", "fullscreenUnsupported": "เบราว์เซอร์นี้ไม่รองรับโหมดเต็มหน้าจอ", "fullscreenFailed": "ไม่สามารถสลับโหมดเต็มหน้าจอได้", - "resetSidebarWidth": "รีเซ็ตความกว้าง", - "collapseSidebar": "ยุบแถบด้านข้าง", - "openSidebar": "เปิดแถบด้านข้าง", "confirmCloseHost": "ปิด {{host}} หรือไม่?", - "enterFullscreen": "เข้าสู่โหมดเต็มหน้าจอ (Ctrl+Shift+F)", - "exitFullscreen": "ออกจากโหมดเต็มหน้าจอ (Ctrl+Shift+F)", - "group": { - "objects": "ของคุณ", - "tools": "เครื่องมือ", - "system": "ระบบ" - }, - "searchEverything": "ค้นหาโฮสต์ แท็บ และการทำงาน", - "search": "ค้นหา", "hiddenCount_other": "ซ่อน {{count}} รายการ", - "showInRail": "แสดงในแถบด้านข้าง", - "moveUp": "เลื่อนขึ้น", - "moveDown": "เลื่อนลง", - "resetRailOrder": "รีเซ็ตลำดับ", - "hideFromRail": "ซ่อนจากแถบด้านข้าง", - "openSettings": "เปิดการตั้งค่า", "settings": "การตั้งค่า", "manage": "จัดการ", - "mobileNavigation": "การนำทาง", "plugins": "ปลั๊กอิน" }, "hosts": { @@ -904,35 +853,14 @@ "importSummary": "การนำเข้าเสร็จสิ้น: นำเข้า {{imported}} อัปเดต {{updated}} ล้มเหลว {{failed}}", "importHostsFailed": "ไม่สามารถนำเข้าโฮสต์ได้" }, - "commandPalette": { - "searchPlaceholder": "ค้นหาโฮสต์ คำสั่ง หรือการตั้งค่า...", - "quickActions": "การดำเนินการด่วน", - "navigation": "การนำทาง", - "orShortcut": "หรือ", - "addNewHost": "เพิ่มโฮสต์ใหม่", - "adminSettings": "การตั้งค่าผู้ดูแลระบบ", - "addCredential": "เพิ่มข้อมูลรับรอง", - "recentActivity": "กิจกรรมล่าสุด", - "serversAndHosts": "เซิร์ฟเวอร์และโฮสต์", - "noHostsFound": "ไม่พบโฮสต์ที่ตรงกับ \"{{search}}\"", - "links": "ลิงก์", - "navigate": "นำทาง", - "select": "เลือก", - "pluginActions": "การดำเนินการอื่นๆ", - "noTargetTab": "ไม่มีแท็บเทอร์มินัลที่เปิดอยู่", - "documentation": "เอกสารประกอบ" - }, "splitScreen": { "title": "แบ่งหน้าจอ", "defaultLabel": "แบ่ง {{number}}", "splitRight": "แบ่งไปทางขวา", "splitDown": "แบ่งลงด้านล่าง", - "addToSplit": "เพิ่มไปยัง {{split}}", "paneEmptyItem": "ช่อง {{index}}: ว่าง", "paneItem": "ช่อง {{index}}: {{label}}", "paneNumber": "ช่อง {{index}}", - "newPaneRight": "ช่องใหม่ทางขวา", - "newPaneBelow": "ช่องใหม่ด้านล่าง", "emptyTitle": "ช่องว่าง", "emptyHint": "เลือกสิ่งที่จะแสดงที่นี่ เมื่อช่องนี้ถูกเลือก สิ่งที่คุณเปิดจากแถบด้านข้างจะเปิดที่นี่ด้วย", "openTabs": "แท็บที่เปิดอยู่", @@ -949,7 +877,6 @@ "clearPane": "ล้างช่องนี้", "zoom": "ขยายช่อง", "unzoom": "คืนค่าเลย์เอาต์", - "unsplit": "ยกเลิกการแบ่ง", "layouts": "เลย์เอาต์", "applyLayout": "เปลี่ยนเลย์เอาต์", "maxPanes_other": "การแบ่งหน้าจอสามารถรองรับได้สูงสุด {{count}} ช่อง", @@ -957,8 +884,6 @@ "dropHere": "วางเพื่อแสดงที่นี่", "paneActions": "การดำเนินการของช่อง", "dividerHint": "ลากเพื่อปรับขนาด ดับเบิลคลิกเพื่อปรับให้เท่ากัน", - "openInSplit": "เปิดในการแบ่งหน้าจอ", - "openInNewSplit": "แบ่งหน้าจอใหม่พร้อมแท็บปัจจุบัน", "shortcuts": "ทางลัด", "shortcutNavigate": "ย้ายระหว่างช่อง", "presets": { @@ -972,23 +897,6 @@ "grid6": "ตารางหกช่อง" } }, - "connections": { - "noConnections": "ไม่มีเชื่อมต่อ", - "noConnectionsDesc": "เปิดเทอร์มินัล ตัวจัดการไฟล์ หรือเดสก์ท็อปรีโมตเพื่อดูการเชื่อมต่อที่นี่", - "connectedFor": "เชื่อมต่อแล้ว {{duration}}", - "connected": "เชื่อมต่อแล้ว", - "disconnected": "ตัดการเชื่อมต่อ", - "reconnect": "เชื่อมต่อใหม่", - "sectionOpen": "เปิดใช้งาน", - "sectionBackground": "พื้นหลัง", - "backgroundDesc": "เซสชันจะคงอยู่เป็นเวลา {{minutes}} นาทีหลังจากตัดการเชื่อมต่อและสามารถเชื่อมต่อใหม่ได้", - "expiresIn": "หมดอายุใน {{duration}}", - "search": "ค้นหาการเชื่อมต่อ...", - "noSearchResults": "ไม่พบการเชื่อมต่อที่ตรงกับคำค้นหาของคุณ", - "rename": "เปลี่ยนชื่อเซสชัน", - "forgetConfirm": "ต้องการปิดเซสชันพื้นหลังสำหรับ {{name}} หรือไม่?", - "forget": "ปิดเซสชัน" - }, "sshAuth": { "totpRequired": "จำเป็นต้องใช้การตรวจสอบสิทธิ์สองปัจจัย", "totpCodeLabel": "รหัสยืนยัน", @@ -1126,474 +1034,46 @@ "placeholders": { "keyPassword": "รหัสผ่านของคีย์", "pastePrivateKey": "วางคีย์ส่วนตัวของคุณที่นี่...", - "enterPassword": "กรอกรหัสผ่านของคุณ", - "apiKeyName": "เช่น CI Pipeline", - "credentialName": "เช่น คีย์ SSH สำหรับ Production", - "optionalDetails": "รายละเอียดเพิ่มเติม (ไม่บังคับ)...", - "sshUsername": "เช่น root หรือ deploy", - "hostAddress": "10.0.0.1 หรือ example.com", - "hostName": "เช่น Web Server Production" + "enterPassword": "กรอกรหัสผ่านของคุณ" }, "dashboard": { - "title": "แดชบอร์ด", - "github": "GitHub", - "reportBug": "รายงานข้อบกพร่อง", - "discord": "Discord", - "docs": "เอกสาร", - "donate": "บริจาค", - "serverOverview": "ภาพรวมของเซิร์ฟเวอร์", - "version": "เวอร์ชัน", "updateAvailable": "มีอัปเดตใหม่", - "beta": "เบต้า", - "uptime": "เวลาทำงานต่อเนื่อง", - "database": "ฐานข้อมูล", - "healthy": "ปกติ", - "error": "ข้อผิดพลาด", - "totalHosts": "จำนวนโฮสต์ทั้งหมด", - "totalCredentials": "จำนวนข้อมูลเข้าสู่ระบบทั้งหมด", - "recentActivity": "กิจกรรมล่าสุด", - "reset": "รีเซ็ต", - "noRecentActivity": "ไม่มีกิจกรรมล่าสุด", - "quickActions": "การดำเนินการด่วน", - "addHost": "เพิ่มโฮสต์", - "addCredential": "เพิ่มข้อมูลเข้าสู่ระบบ", - "adminSettings": "การตั้งค่าผู้ดูแลระบบ", - "userProfile": "โปรไฟล์ผู้ใช้", - "serverStats": "สถิติเซิร์ฟเวอร์", - "customizeLayout": "ปรับแต่งแดชบอร์ด", - "justNow": "เมื่อสักครู่" + "beta": "เบต้า" }, "dashboardTab": { "stable": "เสถียร", - "registerNewServer": "ลงทะเบียนเซิร์ฟเวอร์ใหม่", - "storeSshKeysOrPasswords": "จัดเก็บคีย์ SSH หรือรหัสผ่าน", - "manageUsersAndRoles": "จัดการผู้ใช้และบทบาท", - "manageYourAccount": "จัดการบัญชีของคุณ", - "hostStatus": "สถานะโฮสต์", - "noHostsConfigured": "ไม่ได้กำหนดค่าโฮสต์", - "checking": "กำลังตรวจสอบ", - "commandPalette": "พาเลตคำสั่ง", - "done": "เสร็จสิ้น", - "clear": "ล้าง", - "dragToResizeColumns": "ลากเพื่อปรับขนาดคอลัมน์", - "hostsAvailable": "โฮสต์ที่พร้อมใช้งาน", - "removeSection": "ลบส่วนนี้", - "addSection": "เพิ่มส่วนใหม่", - "allSectionsShown": "แสดงทุกอย่างบนแดชบอร์ดแล้ว", - "fromPlugins": "จากปลั๊กอิน", - "dropHere": "วางส่วนที่นี่", - "dragToReorder": "ลากส่วนเพื่อเรียงลำดับใหม่", - "clearActivityConfirm": "ล้างกิจกรรมล่าสุดของคุณหรือไม่?", - "resetConfirm": "รีเซ็ตแดชบอร์ดเป็นเลย์เอาต์เริ่มต้นหรือไม่?", "onlineCount_other": "{{count}} ออนไลน์", "hostCount_other": "{{count}} โฮสต์" }, "admin": { - "sectionGeneral": "ทั่วไป", - "sectionUsers": "ผู้ใช้", - "sectionSessions": "เซสชัน", - "sectionRoles": "บทบาท", - "sectionDatabase": "ฐานข้อมูล", - "sectionApiKeys": "คีย์ API", - "sectionAuditLog": "บันทึกการตรวจสอบ", - "sectionSsl": "ใบรับรอง HTTPS", - "sectionBranding": "ไวท์เลเบล", - "brandingAppName": "ชื่อแอปพลิเคชัน", - "brandingAppNameDesc": "แสดงบนหน้าเข้าสู่ระบบและแท็บเบราว์เซอร์ ทิ้งว่างไว้เพื่อใช้ \"Termix\"", - "brandingTagline": "สโลแกน", - "brandingTaglineDesc": "แสดงใต้ชื่อแอปพลิเคชันบนหน้าเข้าสู่ระบบ ทิ้งว่างไว้เพื่อใช้สโลแกนเริ่มต้น", - "brandingLogo": "โลโก้", - "brandingLogoDesc": "PNG, JPEG หรือ WEBP ขนาดไม่เกิน 750 KB แทนที่ไอคอนเริ่มต้นบนหน้าเข้าสู่ระบบและแท็บเบราว์เซอร์", - "brandingLogoUpload": "อัปโหลดโลโก้", - "brandingLogoReset": "รีเซ็ตเป็นค่าเริ่มต้น", - "brandingLogoInvalid": "รูปภาพไม่ถูกต้อง ใช้ไฟล์ PNG, JPEG หรือ WEBP ขนาดไม่เกิน 750 KB", - "brandingSaved": "บันทึกการตั้งค่าแบรนด์เรียบร้อยแล้ว", - "brandingSaveFailed": "บันทึกการตั้งค่าแบรนด์ไม่สำเร็จ", - "sslDescription": "ใบรับรองที่ Termix ใช้ให้บริการผ่าน HTTPS อัปโหลดของคุณเองที่นี่ หรือขอและต่ออายุจาก Let's Encrypt ในส่วนใบรับรอง ACME", - "sslDocsLink": "ดูเอกสาร SSL", - "sslCertStatus": "สถานะใบรับรอง", - "sslCertStatusNone": "ไม่มีใบรับรอง", - "sslCertStatusValid": "ถูกต้อง", - "sslCertStatusExpiring": "กำลังจะหมดอายุ", - "sslCertStatusExpired": "หมดอายุแล้ว", - "sslCertExpiresAt": "หมดอายุ {{date}}", - "sslInfoNote": "หลังจากออกหรืออัปโหลดใบรับรอง Termix จะเปิดใช้งาน HTTPS บน SSL_PORT (ค่าเริ่มต้น 8443) เพิ่มเติมจากพอร์ต HTTP ที่มีอยู่ ตรวจสอบให้แน่ใจว่าพอร์ตนี้ถูกเผยแพร่/แมปไปยังคอนเทนเนอร์นี้เพื่อให้เข้าถึงได้", - "sslManualCert": "ใบรับรอง (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "คีย์ส่วนตัว (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "วางใบรับรองและคีย์ส่วนตัวที่มีอยู่ รวมถึงโซ่เต็มหาก CA ของคุณต้องการ", - "sslManualUpload": "อัปโหลดและติดตั้งใบรับรอง", - "sslManualUploadLoading": "กำลังอัปโหลดใบรับรอง...", - "sslManualUploadSuccess": "อัปโหลดและติดตั้งใบรับรองเรียบร้อยแล้ว", - "sslManualUploadFailed": "อัปโหลดใบรับรองไม่สำเร็จ", - "sslManualRequiresFields": "จำเป็นต้องมีใบรับรองและคีย์ส่วนตัว", - "auditLogTotal": "รายการทั้งหมด {{total}} รายการ", - "auditLogEmpty": "ไม่พบรายการบันทึกการตรวจสอบ", - "auditLogSuccess": "สำเร็จ", - "auditLogFailed": "ไม่สำเร็จ", - "auditLogClearFilters": "ล้างตัวกรอง", - "auditLogPage": "หน้า {{page}} จาก {{totalPages}} (ทั้งหมด {{total}})", - "auditLogIp": "IP", - "auditLogResourceId": "รหัสทรัพยากร", - "auditLogFilterUser": "ผู้ใช้", - "auditLogFilterAction": "การกระทำ", - "auditLogFilterResourceType": "ประเภททรัพยากร", - "auditLogFilterStatus": "สถานะ", - "auditLogFilterFrom": "ตั้งแต่", - "auditLogFilterTo": "ถึง", - "auditLogFilterAll": "ทั้งหมด", - "allowRegistration": "อนุญาตให้ผู้ใช้ลงทะเบียน", - "allowRegistrationDesc": "อนุญาตให้ผู้ใช้ใหม่ลงทะเบียนด้วยตนเองโดยใช้ชื่อผู้ใช้และรหัสผ่าน", - "allowPasswordLogin": "อนุญาตให้เข้าสู่ระบบด้วยรหัสผ่าน", - "allowPasswordLoginDesc": "เข้าสู่ระบบด้วยชื่อผู้ใช้และรหัสผ่าน", - "externalAutoProvision": "สร้างบัญชีภายนอกอัตโนมัติ", - "externalAutoProvisionDesc": "สร้างบัญชีเมื่อผู้ใช้เข้าสู่ระบบผ่านช่องทางภายนอกเช่น SSO หรือ LDAP เป็นครั้งแรก หากปิดใช้งาน เฉพาะผู้ใช้ที่มีบัญชีอยู่แล้วเท่านั้นที่สามารถเข้าสู่ระบบผ่านช่องทางนี้ได้", - "secondFactorAfterExternalLogin": "ขอการยืนยันตัวตนสองขั้นตอนหลังเข้าสู่ระบบผ่านช่องทางภายนอก (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "หากปิดใช้งาน การยืนยันตัวตนสองขั้นตอนจะขอเฉพาะหลังเข้าสู่ระบบด้วยรหัสผ่านหรือช่องทางภายในเท่านั้น หากเปิดใช้งาน จะขอการยืนยันตัวตนสองขั้นตอนหลังเข้าสู่ระบบทุกช่องทาง รวมถึง SSO และ LDAP", - "allowPasswordReset": "อนุญาตให้รีเซ็ตรหัสผ่าน", - "allowPasswordResetDesc": "รีเซ็ตรหัสผ่านผ่าน Docker logs", - "auditForwardingTitle": "ส่งต่อไปยัง SIEM", - "auditForwardingDesc": "ส่งสำเนาของทุกบันทึกการตรวจสอบไปยังเครื่องรวบรวมภายนอกในรูปแบบ NDJSON บันทึกภายในยังคงเป็นแหล่งข้อมูลหลัก", - "auditForwardingEnvNotice": "ตัวแปรสภาพแวดล้อมยังใช้กำหนดการส่งต่อได้ แต่ URL ที่บันทึกที่นี่จะมีลำดับความสำคัญสูงกว่า", - "auditForwardingToken": "โทเค็น Bearer (ไม่บังคับ)", - "auditForwardingTokenStored": "โทเค็น Bearer (บันทึกแล้ว)", - "auditForwardingSaved": "บันทึกการตั้งค่าการส่งต่อบันทึกการตรวจสอบเรียบร้อยแล้ว", - "auditForwardingSaveError": "ไม่สามารถบันทึกการตั้งค่าการส่งต่อบันทึกการตรวจสอบได้", - "sessionTimeout": "หมดอายุเซสชัน", - "hours": "ชั่วโมง", - "sessionTimeoutRange": "ขั้นต่ำ 1 ชม. สูงสุด 720 ชม.", - "monitoringDefaults": "ค่าเริ่มต้นการตรวจสอบ", - "statusCheck": "การตรวจสอบสถานะ", - "sec": "วินาที", - "logLevel": "ระดับบันทึก", - "usersCount_other": "ผู้ใช้ {{count}} คน", - "searchUsers": "ค้นหาผู้ใช้...", - "noUsers": "ไม่มีผู้ใช้", - "noUsersMatch": "ไม่พบผู้ใช้ที่ตรงกับการค้นหาของคุณ", - "pageOf": "หน้า {{page}} จาก {{total}}", - "createUser": "สร้าง", - "newRole": "บทบาทใหม่", - "roleName": "ชื่อ", - "roleDisplayName": "ชื่อที่แสดง", - "roleDescription": "คำอธิบาย", - "rolesCount_other": "บทบาท {{count}} บทบาท", - "createRole": "สร้าง", - "creating": "กำลังสร้าง...", - "exportDatabase": "ส่งออกฐานข้อมูล", - "exportDatabaseDesc": "ดาวน์โหลดไฟล์สำรอง SQLite ที่พกพาได้ของโฮสต์ บัญชีผู้ใช้ และการตั้งค่าทั้งหมด", - "export": "ส่งออก", - "exporting": "กำลังส่งออก...", - "importDatabase": "นำเข้าฐานข้อมูล", - "importDatabaseDesc": "กู้คืนจากไฟล์สำรอง .sqlite ที่พกพาได้บนระบบฐานข้อมูลใดก็ได้", - "importDatabaseSelected": "เลือกแล้ว: {{name}}", - "selectFile": "เลือกไฟล์", - "changeFile": "เปลี่ยน", - "import": "นำเข้า", - "importing": "กำลังนำเข้า...", - "apiKeysCount_other": "คีย์ {{count}} คีย์", - "apiKeysDocsLink": "ดูเอกสาร", - "apiKeysCliHint": "ใช้คีย์ API กับ Termix CLI เพื่อจัดการเซิร์ฟเวอร์จากเทอร์มินัลของคุณ", - "apiKeysCliLink": "ดูเอกสาร CLI", - "newApiKey": "คีย์ API ใหม่", - "apiKeyCreatedWarning": "สร้างคีย์แล้ว - คัดลอกตอนนี้ เพราะจะไม่แสดงอีก", - "apiKeyName": "ชื่อ", - "apiKeyUser": "ผู้ใช้", - "apiKeySelectUser": "เลือกผู้ใช้...", - "apiKeyExpiresAt": "หมดอายุเมื่อ", - "createKey": "สร้างคีย์", - "apiKeyNoExpiry": "ไม่หมดอายุ", - "revokedBadge": "เพิกถอนแล้ว", - "authTypeDual": "การยืนยันสองขั้นตอน", - "authTypeExternal": "ภายนอก", - "authTypeLocal": "ภายใน", - "adminStatusAdministrator": "ผู้ดูแลระบบ", - "adminStatusRegularUser": "ผู้ใช้ทั่วไป", - "adminBadge": "ผู้ดูแลระบบ", - "systemBadge": "ระบบ", - "customBadge": "กำหนดเอง", - "youBadge": "คุณ", - "sessionsActive_other": "ใช้งานอยู่ {{count}} รายการ", - "sessionActive": "ใช้งาน: {{time}}", - "sessionExpires": "หมดอายุ: {{time}}", - "revokeAll": "ทั้งหมด", - "revokeAllSessionsSuccess": "เพิกถอนเซสชันทั้งหมดของผู้ใช้แล้ว", - "revokeAllSessionsFailed": "เพิกถอนเซสชันไม่สำเร็จ", - "revokeSessionFailed": "เพิกถอนเซสชันไม่สำเร็จ", - "addRole": "เพิ่มบทบาท", - "noCustomRoles": "ไม่ได้กำหนดบทบาทกำหนดเอง", - "removeRoleFailed": "ลบบทบาทไม่สำเร็จ", - "assignRoleFailed": "มอบหมายบทบาทไม่สำเร็จ", - "userAdminAccess": "ผู้ดูแลระบบ", - "userAdminAccessDesc": "เข้าถึงการตั้งค่าผู้ดูแลระบบทั้งหมด", - "userRoles": "บทบาท", - "revokeAllUserSessions": "เพิกถอนเซสชันทั้งหมด", - "revokeAllUserSessionsDesc": "บังคับให้เข้าสู่ระบบใหม่บนอุปกรณ์ทั้งหมด", - "revoke": "เพิกถอน", - "deleteUserWarning": "การลบผู้ใช้นี้เป็นการถาวร", - "deleteUser": "ลบ {{username}}", - "deleting": "กำลังลบ...", - "deleteUserFailed": "ลบผู้ใช้ไม่สำเร็จ", - "deleteUserSuccess": "ลบผู้ใช้ \"{{username}}\" แล้ว", - "deleteRoleSuccess": "ลบบทบาท \"{{name}}\" แล้ว", - "revokeKeySuccess": "เพิกถอนคีย์ \"{{name}}\" แล้ว", - "revokeKeyFailed": "เพิกถอนคีย์ไม่สำเร็จ", - "copiedToClipboard": "คัดลอกไปยังคลิปบอร์ดแล้ว", - "done": "เสร็จสิ้น", - "createUserTitle": "สร้างผู้ใช้", - "createUserDesc": "สร้างบัญชีภายในใหม่", - "createUserUsername": "ชื่อผู้ใช้", - "createUserPassword": "รหัสผ่าน", - "createUserPasswordHint": "อย่างน้อย 6 ตัวอักษร", - "createUserEnterUsername": "ใส่ชื่อผู้ใช้", - "createUserSubmit": "สร้างผู้ใช้", - "editUserTitle": "จัดการผู้ใช้: {{username}}", - "editUserDesc": "แก้ไขบทบาท สถานะผู้ดูแลระบบ เซสชัน และการตั้งค่าบัญชี", - "editUserUsername": "ชื่อผู้ใช้", - "editUserAuthType": "ประเภทการยืนยัน", - "editUserAdminStatus": "สถานะผู้ดูแลระบบ", - "editUserUserId": "รหัสผู้ใช้", - "linkAccountTitle": "เชื่อมโยงบัญชี", - "linkAccountDesc": "รวมบัญชีภายนอก {{username}} เข้ากับบัญชีภายในที่มีอยู่", - "linkAccountDescLocal": "เชื่อมโยงบัญชีภายใน {{username}} เข้ากับบัญชีภายนอกที่มีอยู่", - "linkAccountWarningTitle": "สิ่งที่จะเกิดขึ้น:", - "linkAccountEffect1": "ลบบัญชีที่เข้าสู่ระบบผ่านภายนอกเท่านั้น", - "linkAccountEffect2": "เพิ่มการเข้าสู่ระบบภายนอกไปยังบัญชีเป้าหมาย", - "linkAccountEffect3": "อนุญาตให้เข้าสู่ระบบได้ทั้งผ่านภายนอกและรหัสผ่าน", - "linkAccountTargetUsername": "ชื่อผู้ใช้บัญชีท้องถิ่น", - "linkAccountTargetPlaceholder": "กรอกชื่อผู้ใช้บัญชีท้องถิ่นที่ต้องการเชื่อมโยง", - "linkAccountExternalUsername": "ชื่อผู้ใช้บัญชีภายนอก", - "linkAccountExternalPlaceholder": "กรอกชื่อผู้ใช้บัญชีภายนอกที่ต้องการรวมเข้าด้วยกัน", - "linkAccountExternalNotFound": "ไม่พบบัญชีที่เข้าสู่ระบบผ่านภายนอกเท่านั้นด้วยชื่อนี้", - "linkAccounts": "เชื่อมโยงบัญชี", - "linkAccountSuccess": "เชื่อมโยงบัญชีสำเร็จแล้ว", - "linkAccountFailed": "ไม่สามารถเชื่อมโยงบัญชีได้", - "linkAccountInProgress": "กำลังเชื่อมโยง...", - "unlinkAccountTitle": "ยกเลิกการเชื่อมโยงการเข้าสู่ระบบภายนอก", - "unlinkAccountDesc": "ลบการเข้าสู่ระบบภายนอกออกจาก {{username}} ผู้ใช้จะสามารถเข้าสู่ระบบได้เฉพาะด้วยรหัสผ่านเท่านั้น", - "unlinkAccountWarning": "การดำเนินการนี้จะลบการเข้าสู่ระบบภายนอกออกจากบัญชีนี้ ผู้ใช้จำเป็นต้องตั้งรหัสผ่านไว้เพื่อเข้าสู่ระบบต่อ", - "unlinkAccount": "ยกเลิกการเชื่อมโยงการเข้าสู่ระบบภายนอก", - "unlinkAccountInProgress": "กำลังยกเลิกการเชื่อมโยง...", - "unlinkAccountSuccess": "ยกเลิกการเชื่อมโยงการเข้าสู่ระบบภายนอกแล้ว", - "unlinkAccountFailed": "ไม่สามารถยกเลิกการเชื่อมโยงการเข้าสู่ระบบภายนอกได้", - "updateRegistrationFailed": "ไม่สามารถอัปเดตการตั้งค่าการลงทะเบียนได้", - "updatePasswordLoginFailed": "ไม่สามารถอัปเดตการตั้งค่าการเข้าสู่ระบบด้วยรหัสผ่านได้", - "updateSecondFactorAfterExternalLoginFailed": "ไม่สามารถอัปเดตการตั้งค่าปัจจัยยืนยันตัวตนที่สองได้", - "updatePasswordResetFailed": "ไม่สามารถอัปเดตการตั้งค่าการรีเซ็ตรหัสผ่านได้", - "sessionTimeoutRange2": "เวลาหมดเซสชันต้องอยู่ระหว่าง 1 ถึง 720 ชั่วโมง", - "sessionTimeoutSaved": "บันทึกเวลาหมดเซสชันแล้ว", - "sessionTimeoutSaveFailed": "ไม่สามารถบันทึกเวลาหมดเซสชันได้", - "monitoringIntervalInvalid": "ค่าช่วงเวลาไม่ถูกต้อง", - "monitoringSaved": "บันทึกการตั้งค่าการตรวจสอบแล้ว", - "monitoringSaveFailed": "ไม่สามารถบันทึกการตั้งค่าการตรวจสอบได้", - "logLevelUpdateFailed": "ไม่สามารถอัปเดตระดับบันทึกได้", - "createUserRequired": "จำเป็นต้องระบุชื่อผู้ใช้และรหัสผ่าน", - "createUserPasswordTooShort": "รหัสผ่านต้องมีอย่างน้อย 6 ตัวอักษร", - "createUserSuccess": "สร้างผู้ใช้ \"{{username}}\" สำเร็จแล้ว", - "createUserFailed": "ไม่สามารถสร้างผู้ใช้ได้", - "updateAdminStatusFailed": "ไม่สามารถอัปเดตสถานะผู้ดูแลระบบได้", - "allSessionsRevoked": "เพิกถอนเซสชันทั้งหมดแล้ว", - "revokeSessionsFailed": "ไม่สามารถเพิกถอนเซสชันได้", - "manageUserData": "จัดการข้อมูลผู้ใช้", - "backToUsers": "กลับไปยังผู้ใช้", - "manageTabAccount": "บัญชี", - "manageTabHosts": "โฮสต์", - "manageTabCredentials": "ข้อมูลรับรอง", - "manageTabSessions": "เซสชัน", - "manageTabDanger": "อันตราย", - "manageEditorBack": "กลับไปยังข้อมูลของ {{username}}", - "dataLockedBadge": "ถูกล็อก", - "dataLockedNotice": "ข้อมูลของ {{username}} จะยังคงถูกล็อกจนกว่าจะเข้าสู่ระบบครั้งถัดไป ไม่สามารถดูหรือแก้ไขโฮสต์ ข้อมูลรับรอง และสคริปต์ได้จนกว่าจะถึงเวลานั้น", - "resetPasswordTitle": "รีเซ็ตรหัสผ่าน", - "resetPasswordExternalOnly": "ผู้ใช้รายนี้เข้าสู่ระบบผ่านผู้ให้บริการภายนอกและไม่มีรหัสผ่าน", - "resetPasswordPlaceholder": "รหัสผ่านใหม่", - "resetPasswordBtn": "รีเซ็ต", - "resetPasswordWorking": "กำลังรีเซ็ต...", - "resetPasswordSuccess": "รีเซ็ตรหัสผ่านแล้ว", - "resetPasswordSuccessWiped": "รีเซ็ตรหัสผ่านแล้ว ข้อมูลที่เข้ารหัสของผู้ใช้ถูกลบออก", - "resetPasswordFailed": "ไม่สามารถรีเซ็ตรหัสผ่านได้", - "resetPasswordConfirmWipe": "{{username}} ไม่ได้เข้าสู่ระบบตั้งแต่การอัปเกรดการเข้ารหัส ดังนั้นข้อมูลจึงไม่สามารถกู้คืนได้ การรีเซ็ตตอนนี้จะลบโฮสต์ ข้อมูลรับรอง และสคริปต์ของผู้ใช้ ต้องการดำเนินการต่อหรือไม่?", - "manageApiKeys": "คีย์ API", - "apiKeyNamePlaceholder": "ชื่อคีย์", - "apiKeyCopyNotice": "คัดลอกคีย์นี้ทันที เพราะจะไม่แสดงอีก", - "noApiKeysForUser": "ไม่มีคีย์ API", - "apiKeyDeleteFailed": "ลบคีย์ API ไม่สำเร็จ", - "exportUserData": "ส่งออกข้อมูล", - "exportUserDataDesc": "ดาวน์โหลดโฮสต์ ข้อมูลการเข้าสู่ระบบ และข้อมูลตัวจัดการไฟล์ของผู้ใช้นี้เป็นไฟล์ JSON ข้อมูลลับจะถูกถอดรหัส", - "exportUserDataSuccess": "ส่งออกข้อมูลผู้ใช้เรียบร้อยแล้ว", - "exportUserDataFailed": "ส่งออกข้อมูลผู้ใช้ไม่สำเร็จ", "hostsCount_other": "โฮสต์ {{count}} ตัว", - "addHostForUser": "เพิ่มโฮสต์", - "noHostsForUser": "ผู้ใช้รายนี้ไม่มีโฮสต์", - "connectToHost": "เชื่อมต่อ", - "deleteHostConfirm": "ต้องการลบโฮสต์ \"{{name}}\" ของ {{username}} หรือไม่?", - "hostDeletedSuccess": "ลบโฮสต์เรียบร้อยแล้ว", - "hostDeleteFailed": "ลบโฮสต์ไม่สำเร็จ", "credentialsCount_other": "ข้อมูลเข้าสู่ระบบ {{count}} รายการ", - "addCredentialForUser": "เพิ่มข้อมูลการเข้าสู่ระบบ", - "noCredentialsForUser": "ผู้ใช้รายนี้ไม่มีข้อมูลการเข้าสู่ระบบ", - "deleteCredentialConfirm": "ต้องการลบข้อมูลการเข้าสู่ระบบ \"{{name}}\" ของ {{username}} หรือไม่?", - "credentialDeletedSuccess": "ลบข้อมูลการเข้าสู่ระบบเรียบร้อยแล้ว", - "credentialDeleteFailed": "ลบข้อมูลการเข้าสู่ระบบไม่สำเร็จ", - "noSessionsForUser": "ไม่มีเซสชันที่ใช้งานอยู่", - "deleteSuccessorLabel": "โอนโฮสต์และข้อมูลการเข้าสู่ระบบให้", - "deleteSuccessorMe": "ฉัน (ผู้ดูแลระบบที่กำลังลบ)", - "deleteSuccessorNone": "ไม่มีใคร ลบทั้งหมด", - "deleteSuccessorDesc": "ทุกอย่างที่ผู้ใช้รายนี้แชร์ไว้จะยังคงใช้งานได้ภายใต้เจ้าของใหม่ หากเลือกไม่มีใคร โฮสต์ ข้อมูลการเข้าสู่ระบบ และการแชร์ทั้งหมดจะถูกลบออก", - "deleteUserDangerDesc": "ลบ {{username}} และข้อมูลทั้งหมดอย่างถาวร (โฮสต์ ข้อมูลการเข้าสู่ระบบ สนิปเป็ต ประวัติ) การดำเนินการนี้ไม่สามารถย้อนกลับได้", - "deleteUserConfirm": "ต้องการลบ {{username}} และข้อมูลทั้งหมดอย่างถาวรหรือไม่?", - "deleteUserAdminBlocked": "ยกเลิกสถานะผู้ดูแลระบบก่อนลบผู้ใช้รายนี้", - "createRoleRequired": "จำเป็นต้องระบุชื่อและชื่อแสดง", - "createRoleSuccess": "สร้างบทบาท \"{{name}}\" เรียบร้อยแล้ว", - "createRoleFailed": "สร้างบทบาทไม่สำเร็จ", - "apiKeyNameRequired": "จำเป็นต้องระบุชื่อคีย์", - "apiKeyUserRequired": "จำเป็นต้องระบุรหัสผู้ใช้", - "apiKeyCreatedSuccess": "สร้างคีย์ API \"{{name}}\" เรียบร้อยแล้ว", - "apiKeyCreateFailed": "สร้างคีย์ API ไม่สำเร็จ", - "exportSuccess": "ส่งออกฐานข้อมูลเรียบร้อยแล้ว", - "exportFailed": "ส่งออกฐานข้อมูลไม่สำเร็จ", - "importSelectFile": "กรุณาเลือกไฟล์ก่อน", - "importCompleted": "นำเข้าเสร็จสิ้น: นำเข้า {{total}} รายการ ข้าม {{skipped}} รายการ", - "importFailed": "นำเข้าไม่สำเร็จ: {{error}}", - "importError": "นำเข้าฐานข้อมูลไม่สำเร็จ", - "sectionHostDefaults": "ค่าเริ่มต้นของโฮสต์", "rolePermissions": { - "count_other": "สิทธิ์ {{count}} รายการ", - "editAction": "แก้ไขสิทธิ์", - "loadError": "โหลดแคตตาล็อกสิทธิ์ไม่สำเร็จ", - "saved": "บันทึกสิทธิ์ของบทบาทเรียบร้อยแล้ว", - "saveError": "บันทึกสิทธิ์ของบทบาทไม่สำเร็จ", - "save": "บันทึก", - "saving": "กำลังบันทึก...", - "pluginDisabled": "ปลั๊กอินถูกปิดใช้งาน", "groups": { "hosts": "โฮสต์", "credentials": "ข้อมูลการเข้าสู่ระบบ", "admin": "การดูแลระบบ" } - }, - "notificationPrivateEndpoints": "โฮสต์การแจ้งเตือนส่วนตัวที่อนุญาต", - "notificationPrivateEndpointsDesc": "โฮสต์ส่วนตัวที่ช่องทางการแจ้งเตือนสามารถติดต่อได้โดยตรง คั่นด้วยเครื่องหมายจุลภาค", - "updateNotificationEndpointsFailed": "อัปเดตรายการอนุญาตจุดสิ้นสุดการแจ้งเตือนไม่สำเร็จ", - "secondFactorsSectionTitle": "ปัจจัยยืนยันตัวตนขั้นที่สอง", - "secondFactorsNone": "ไม่ได้ลงทะเบียนปัจจัยยืนยันตัวตนขั้นที่สอง", - "secondFactorUnavailable": "ไม่สามารถใช้งานได้", - "resetSecondFactors": "รีเซ็ตปัจจัยยืนยันตัวตนขั้นที่สอง", - "resetSecondFactorsConfirm": "ต้องการลบปัจจัยยืนยันตัวตนขั้นที่สองทั้งหมดของ {{username}} หรือไม่? พวกเขาสามารถเข้าสู่ระบบด้วยรหัสผ่านหรือ SSO และลงทะเบียนใหม่ได้", - "secondFactorsResetSuccess": "รีเซ็ตปัจจัยยืนยันตัวตนขั้นที่สองสำเร็จ", - "secondFactorsResetFailed": "ไม่สามารถรีเซ็ตปัจจัยยืนยันตัวตนขั้นที่สองได้", - "passwordLoginForced": "การเข้าสู่ระบบด้วยรหัสผ่านถูกปิดใช้งาน แต่ไม่มีวิธีการเข้าสู่ระบบอื่นที่เปิดใช้งาน จึงยังคงเปิดไว้ชั่วคราวเพื่อไม่ให้ผู้ใช้ถูกตัดการเข้าถึง", - "sslNotRenewed": "ไม่มีระบบใดต่ออายุใบรับรองนี้ ใบรับรองจะหมดอายุในวันที่ {{date}} เปิดใช้งานการต่ออายุอัตโนมัติในส่วนใบรับรอง ACME หรืออัปโหลดใบรับรองใหม่ก่อนวันหมดอายุ", - "sslSelfSigned": "ใบรับรองที่ลงนามด้วยตนเองโดย Termix เบราว์เซอร์จะแสดงคำเตือนเกี่ยวกับใบรับรองนี้", - "sslRenewedBy": "ต่ออายุอัตโนมัติโดย {{plugin}}", - "sslIssuer": "ออกโดย {{issuer}}", - "sslNames": "ครอบคลุม {{names}}", - "sslManualTitle": "อัปโหลดใบรับรอง", - "updateExternalAutoProvisionFailed": "ไม่สามารถอัปเดตการตั้งค่าสร้างอัตโนมัติได้", - "hostTags": "แท็กโฮสต์ที่กำหนดไว้ล่วงหน้า", - "hostTagsDesc": "แท็กที่ผู้ใช้ทุกคนเห็นเป็นคำแนะนำในตัวแก้ไขโฮสต์ กด Space หรือ Enter เพื่อเพิ่มแท็ก การลบแท็กที่นี่จะไม่ลบออกจากโฮสต์", - "hostTagsError": "ไม่สามารถโหลดหรือบันทึกคำแนะนำแท็กโฮสต์ได้", - "revokeAllSessionsConfirm": "ออกจากระบบผู้ใช้ {{username}} ทุกที่หรือไม่?", - "revokeSessionConfirm": "ออกจากระบบเซสชันนี้หรือไม่?", - "revokeSession": "ออกจากระบบ", - "deleteRoleConfirm": "ลบบทบาท {{name}} หรือไม่?", - "revokeKeyConfirm": "เพิกถอนคีย์ API {{name}} หรือไม่?", - "revokeKey": "เพิกถอน" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "ที่ใด", - "who": "ใคร", - "hostLabel": "โฮสต์", - "hostPlaceholder": "192.168.1.1 หรือ example.com", - "portLabel": "พอร์ต", - "usernameLabel": "ชื่อผู้ใช้", - "usernamePlaceholder": "ชื่อผู้ใช้", - "authLabel": "การยืนยันตัวตน", - "passwordLabel": "รหัสผ่าน", - "passwordPlaceholder": "รหัสผ่าน", - "privateKeyLabel": "คีย์ส่วนตัว", - "privateKeyPlaceholder": "วางคีย์ส่วนตัว...", - "credentialLabel": "ข้อมูลรับรอง", - "credentialPlaceholder": "เลือกข้อมูลรับรองที่บันทึกไว้", - "protocolLabel": "โปรโตคอล", - "domainLabel": "โดเมน", - "domainPlaceholder": "ไม่บังคับ", - "connectToAction": "เชื่อมต่อกับ {{name}}", - "sshProtocol": "SSH", - "noTarget": "ไม่มีโปรแกรมที่ติดตั้งอยู่สามารถเชื่อมต่อกับประเภทโฮสต์นี้ได้" + "usernameLabel": "ชื่อผู้ใช้" }, "keybindings": { - "description": "ผูกคีย์กับแอ็กชันในเทอร์มินัลและแอปพลิเคชัน หรือเปลี่ยนทางลัดที่มีอยู่แล้ว", - "defaultsHeading": "ทางลัดที่มีอยู่แล้ว", - "fixedHeading": "ทางลัดแอปพลิเคชัน", - "fixed": { - "splitRight": "แบ่งหน้าจอไปทางขวา", - "splitDown": "แบ่งหน้าจอไปทางลง", - "zoomPane": "ขยายหน้าต่างที่โฟกัสอยู่", - "navigatePane": "ย้ายระหว่างหน้าต่าง", - "nextTab": "แท็บถัดไป", - "previousTab": "แท็บก่อนหน้า", - "jumpTab": "ข้ามไปยังแท็บ", - "previousView": "กลับไปยังมุมมองแถบด้านข้างก่อนหน้า", - "fullscreen": "สลับโหมดเต็มหน้าจอ" - }, - "customHeading": "ทางลัดที่กำหนดเอง", - "addBinding": "เพิ่มทางลัด", - "addBindingTitle": "เพิ่มทางลัด", - "editBindingTitle": "แก้ไขทางลัด", - "loading": "กำลังโหลด...", - "noCustomBindings": "ยังไม่มีทางลัดที่กำหนดเอง", - "defaultBadge": "ค่าเริ่มต้น", - "customizedBadge": "กำหนดเองแล้ว", - "customize": "ปรับแต่ง", - "resetToDefault": "คืนค่าเริ่มต้น", - "resetAllToDefaults": "คืนค่าทั้งหมดเป็นค่าเริ่มต้น", - "cancel": "ยกเลิก", - "saveBinding": "บันทึกทางลัด", - "saveError": "บันทึกทางลัดคีย์บอร์ดไม่สำเร็จ", - "pressKeysToRecord": "ชุดคีย์", - "pressKeysPlaceholder": "คลิกแล้วกดคีย์", - "recording": "กดคีย์...", - "comboRequiredError": "กดชุดคีย์ก่อน", - "conflictWarning": "ชุดคีย์นี้ถูกกำหนดไว้แล้วสำหรับ {{combo}} การบันทึกจะทำให้ทั้งคู่ทำงานพร้อมกัน", - "actionLabel": "การกระทำ", "actionNextTab": "สลับไปยังแท็บถัดไป", "actionPreviousTab": "สลับไปยังแท็บก่อนหน้า", "actionOpenCommandPalette": "เปิดการค้นหาด่วน", - "actionReconnectSession": "เชื่อมต่อเซสชันปัจจุบันใหม่", - "unavailableAction": "{{type}} (ไม่พร้อมใช้งาน)", - "actionRequiredError": "เลือกการกระทำก่อน", - "deleteConfirm": "ลบการกำหนดคีย์นี้หรือไม่", - "resetAllConfirm": "คืนค่าการกำหนดคีย์ทั้งหมดเป็นค่าเริ่มต้นหรือไม่" + "actionReconnectSession": "เชื่อมต่อเซสชันปัจจุบันใหม่" }, "userProfile": { - "storageModeLocal": "เบราว์เซอร์", - "storageModeCloud": "ฐานข้อมูล", - "storageModeDescription": "เบราว์เซอร์จะเก็บการตั้งค่าในเบราว์เซอร์นี้เท่านั้น ฐานข้อมูลจะซิงค์ไปยังเซิร์ฟเวอร์และโหลดได้บนอุปกรณ์ใดก็ได้", - "resetToDefaults": "คืนค่าเป็นค่าเริ่มต้น", - "resetToDefaultsSuccess": "คืนค่าการตั้งค่าเป็นค่าเริ่มต้นแล้ว", - "storageModeSwitch": "ที่เก็บการตั้งค่า", - "sectionAccount": "บัญชี", - "desktopProfileTitle": "เฉพาะอุปกรณ์นี้", - "desktopProfileDescription": "โปรไฟล์นี้ทำงานบนอุปกรณ์นี้และเข้าสู่ระบบด้วยตัวเอง เชื่อมต่อกับเซิร์ฟเวอร์ Termix เพื่อใช้โฮสต์และการตั้งค่าเดียวกันบนทุกอุปกรณ์", - "sectionInterface": "ส่วนติดต่อ", - "interfacePresetDesc": "ระดับรายละเอียดที่ Termix แสดง ทุกฟีเจอร์ยังคงใช้งานได้", "preset_simple": "เรียบง่าย", "preset_simple_desc": "เฉพาะสิ่งจำเป็น", "preset_balanced": "สมดุล", "preset_balanced_desc": "เลย์เอาต์มาตรฐาน", "preset_advanced": "ขั้นสูง", "preset_advanced_desc": "เปิดทุกอย่าง จัดวางอย่างหนาแน่น", - "presetClearOverrides": "คืนค่าทั้งหมด", - "presetOverridesTitle": "ปรับแต่งแล้ว", - "presetRevertArea": "ย้อนกลับ", - "presetConfirmTitle": "สลับเป็น {{preset}} หรือไม่", - "presetConfirmDesc": "การดำเนินการนี้จะคืนค่าแถบด้านข้าง การนำทาง เลย์เอาต์แดชบอร์ด เครื่องมือเทอร์มินัล และมุมมองตัวจัดการไฟล์ โฮสต์ ข้อมูลประจำตัว และหน้าแรกของคุณจะไม่ได้รับผลกระทบ", - "presetConfirmApply": "ใช้ชุดค่าเริ่มต้น", - "runSetupAgainDesc": "ทำขั้นตอนการตั้งค่าครั้งแรกอีกครั้ง", - "runSetupAgainButton": "เรียกใช้การตั้งค่า", "uiArea_chrome": "กรอบแอป", "uiArea_hostList": "รายการโฮสต์", "uiArea_credentialList": "รายการข้อมูลประจำตัว", @@ -1602,125 +1082,12 @@ "uiArea_terminal": "เทอร์มินัล", "uiArea_fileManager": "ตัวจัดการไฟล์", "uiArea_hostEditor": "ตัวแก้ไขโฮสต์", - "sectionAppearance": "รูปลักษณ์", - "sectionSecurity": "ความปลอดภัย", - "sectionApiKeys": "คีย์ API", - "sectionData": "ข้อมูล", - "usernameLabel": "ชื่อผู้ใช้", - "roleLabel": "บทบาท", - "roleAdministrator": "ผู้ดูแลระบบ", - "authMethodLabel": "วิธีการตรวจสอบสิทธิ์", - "authMethodLocal": "Local", - "twoFaLabel": "2FA", - "twoFaOn": "เปิด", - "twoFaOff": "ปิด", - "versionLabel": "เวอร์ชัน", - "cliTitle": "Termix CLI", - "cliDescription": "เปิดเทอร์มินัล รันคำสั่ง และย้ายไฟล์จาก shell ของคุณเอง", - "cliLearnMore": "เรียนรู้เพิ่มเติม", - "deleteAccount": "ลบบัญชี", - "deleteAccountDescription": "ลบบัญชีของคุณอย่างถาวร", - "deleteButton": "ลบ", - "deleteAccountPermanent": "การดำเนินการนี้ถาวรและไม่สามารถย้อนกลับได้", - "deleteAccountWarning": "เซสชัน โฮสต์ ข้อมูลการเข้าสู่ระบบ และการตั้งค่าทั้งหมดจะถูกลบอย่างถาวร", - "confirmPasswordDeletePlaceholder": "ป้อนรหัสผ่านเพื่อยืนยัน", "languageLabel": "ภาษา", "themeLabel": "ธีม", "fontSizeLabel": "ขนาดฟอนต์", "interfaceFontLabel": "ฟอนต์ส่วนติดต่อ", "interfaceFontDescription": "เปลี่ยนฟอนต์ส่วนติดต่อของแอปพลิเคชัน โปรไฟล์เทอร์มินัลจะยังคงใช้การตั้งค่าฟอนต์ของตัวเอง", "accentColorLabel": "สีเน้น", - "keyboardShortcuts": "ทางลัดแป้นพิมพ์", - "keyboardShortcutsDescription": "ปรับแต่งทางลัดสำหรับการคัดลอก วาง และคำสั่งในเทอร์มินัล", - "manageShortcuts": "จัดการ", - "commandPalette": "พาเลตคำสั่ง", - "commandPaletteDesc": "เปิดใช้งานทางลัดแป้นพิมพ์", - "reopenTabsOnLogin": "เปิดแท็บใหม่เมื่อเข้าสู่ระบบ", - "reopenTabsOnLoginDesc": "กู้คืนแท็บที่เปิดค้างไว้เมื่อคุณเข้าสู่ระบบหรือรีเฟรชหน้า แม้จากอุปกรณ์อื่น", - "confirmTabClose": "ยืนยันการปิดแท็บ", - "confirmTabCloseDesc": "ถามก่อนปิดแท็บเทอร์มินัล", - "showTabNumbers": "แสดงหมายเลขแท็บ", - "showTabNumbersDesc": "แสดงหมายเลขบนแต่ละแท็บเพื่อช่วยแยกแยะ", - "settingsAppRail": "แถบแอป", - "sidebarSettingsMoved": "การตั้งค่าการแสดงผลแถบด้านข้างโฮสต์ได้ย้ายไปยังแผงปรับแต่งแถบด้านข้าง ซึ่งเปิดจากแถบเครื่องมือโฮสต์", - "showHostTags": "แสดงแท็กโฮสต์", - "showHostTagsDesc": "แสดงแท็กในรายการโฮสต์", - "statusColors": "สีสถานะจริง", - "statusColorsDesc": "ใช้สีเขียว/แดงสำหรับสถานะออนไลน์/ออฟไลน์ แทนที่จะใช้สีเน้น", - "pinAppRail": "ตรึงแถบแอป", - "pinAppRailDesc": "คงแถบแอปด้านซ้ายให้ขยายไว้เสมอ แทนที่จะขยายเมื่อวางเมาส์", - "expandAppRailOnHover": "ขยายแถบแอปเมื่อวางเมาส์", - "expandAppRailOnHoverDesc": "อนุญาตให้แถบแอปด้านซ้ายขยายเมื่อตัวชี้เมาส์เคลื่อนผ่าน", - "appRailHoverPushesContent": "ดันเนื้อหาเมื่อขยาย", - "appRailHoverPushesContentDesc": "สร้างพื้นที่สำหรับแถบที่ขยายแทนการเปิดทับหน้า เซสชันที่เปิดอยู่เช่นเดสก์ท็อประยะไกลจะปรับขนาดทุกครั้ง", - "showPinAppRailButton": "แสดงปุ่มตรึงแถบแอป", - "showPinAppRailButtonDesc": "แสดงปุ่มในแถบแอปเพื่อตรึงให้เปิดค้าง ปิดโดยค่าเริ่มต้น", - "settingsNavigation": "การนำทาง", - "navigationTabsDesc": "เลือกแท็บที่จะแสดงในแถบแอป", - "settingsUpdates": "อัปเดต", - "disableUpdateChecks": "ปิดการตรวจสอบอัปเดต", - "disableUpdateChecksDesc": "หยุดการตรวจสอบอัปเดต", - "changePassword": "เปลี่ยนรหัสผ่าน", - "currentPasswordLabel": "รหัสผ่านปัจจุบัน", - "currentPasswordPlaceholder": "รหัสผ่านปัจจุบัน", - "newPasswordLabel": "รหัสผ่านใหม่", - "newPasswordPlaceholder": "รหัสผ่านใหม่", - "confirmPasswordLabel": "ยืนยันรหัสผ่านใหม่", - "confirmPasswordPlaceholder": "ยืนยันรหัสผ่านใหม่", - "updatePassword": "อัปเดตรหัสผ่าน", - "createApiKeyTitle": "สร้างคีย์ API", - "createApiKeyDescription": "สร้างคีย์ API ใหม่สำหรับการเข้าถึงผ่านโปรแกรม", - "apiKeyNameLabel": "ชื่อ", - "apiKeyNamePlaceholder": "เช่น CI Pipeline", - "expiryDateLabel": "วันหมดอายุ", - "optional": "ไม่บังคับ", - "cancel": "ยกเลิก", - "createKey": "สร้างคีย์", - "apiKeyCreatedWarning": "สร้างคีย์แล้ว - คัดลอกตอนนี้ เพราะจะไม่แสดงอีก", - "copyApiKey": "คัดลอกคีย์ API", - "copiedToClipboard": "คัดลอกไปยังคลิปบอร์ดแล้ว", - "apiKeyCount_other": "คีย์ {{count}} คีย์", - "newKey": "คีย์ใหม่", - "noApiKeys": "ยังไม่มีคีย์ API", - "apiKeyActive": "ใช้งานอยู่", - "apiKeyUsageHint": "รวมคีย์ของคุณใน", - "apiKeyUsageHintHeader": "ส่วนหัว (header)", - "apiKeyPermissionsHint": "คีย์จะสืบทอดสิทธิ์จากผู้ใช้ที่สร้าง", - "exportData": "ส่งออกข้อมูลของฉัน", - "exportDataDesc": "ดาวน์โหลดข้อมูลสำรองของโฮสต์ ข้อมูลการเข้าสู่ระบบ และการตั้งค่า เพื่อโอนไปยังอุปกรณ์อื่น", - "export": "ส่งออก", - "exporting": "กำลังส่งออก...", - "importData": "นำเข้าข้อมูลของฉัน", - "importDataDesc": "กู้คืนโฮสต์ ข้อมูลการเข้าสู่ระบบ และการตั้งค่าจากไฟล์สำรอง .sqlite", - "importDataSelected": "เลือกแล้ว: {{name}}", - "selectFile": "เลือกไฟล์", - "changeFile": "เปลี่ยน", - "import": "นำเข้า", - "importing": "กำลังนำเข้า...", - "exportSuccess": "ส่งออกข้อมูลสำเร็จ", - "exportFailed": "การส่งออกข้อมูลล้มเหลว", - "importSelectFile": "กรุณาเลือกไฟล์ก่อน", - "importCompleted": "การนำเข้าเสร็จสิ้น: นำเข้า {{total}} รายการ, ข้าม {{skipped}} รายการ", - "importFailed": "การนำเข้าล้มเหลว: {{error}}", - "roleUser": "ผู้ใช้", - "authMethodDual": "การยืนยันตัวตนสองชั้น", - "authMethodExternal": "ภายนอก", - "done": "เสร็จสิ้น", - "apiKeyNameRequired": "จำเป็นต้องระบุชื่อคีย์", - "apiKeyCreated": "สร้างคีย์ API \"{{name}}\" สำเร็จ", - "apiKeyCreateFailed": "การสร้างคีย์ API ล้มเหลว", - "apiKeyUser": "ผู้ใช้", - "apiKeyExpires": "หมดอายุ", - "apiKeyRevoked": "เพิกถอนคีย์ API \"{{name}}\" แล้ว", - "apiKeyRevokeFailed": "การเพิกถอนคีย์ API ล้มเหลว", - "passwordFieldsRequired": "จำเป็นต้องระบุรหัสผ่านปัจจุบันและรหัสผ่านใหม่", - "passwordMismatch": "รหัสผ่านไม่ตรงกัน", - "passwordTooShort": "รหัสผ่านต้องมีอย่างน้อย 6 ตัวอักษร", - "passwordUpdated": "อัปเดตรหัสผ่านสำเร็จ", - "passwordUpdateFailed": "การอัปเดตรหัสผ่านล้มเหลว", - "deletePasswordRequired": "จำเป็นต้องระบุรหัสผ่านเพื่อลบบัญชีของคุณ", - "deleteFailed": "การลบบัญชีล้มเหลว", - "deleting": "กำลังลบ...", "colorPickerTooltip": "เปิดตัวเลือกสี", "themeSystem": "ระบบ", "themeLight": "สว่าง", @@ -1731,18 +1098,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "ลงชื่อเข้าใช้ {{server}} แล้ว", - "linkedProfileDescription": "อุปกรณ์นี้ใช้บัญชีของคุณบนเซิร์ฟเวอร์และเก็บสำเนาข้อมูลไว้ เพื่อให้ใช้งานได้แม้จะออฟไลน์", - "manageSync": "จัดการการซิงค์", - "setUpSync": "เชื่อมต่อกับเซิร์ฟเวอร์", - "settingsTabsAndShortcuts": "แท็บและทางลัด", - "onBetaTitle": "คุณกำลังใช้เวอร์ชันเบต้า", - "onBetaDescription": "ขอบคุณที่ช่วยทดสอบ แจ้งให้เราทราบหากพบปัญหา", - "tryBetaTitle": "ทดลองใช้ฟีเจอร์ใหม่ก่อนใคร", - "tryBetaDescription": "เข้าร่วมโปรแกรมเบต้าในส่วนอัปเดต", - "sendBetaFeedback": "ส่งความคิดเห็นเกี่ยวกับเบต้า", - "openUpdates": "อัปเดต" + "themeGruvbox": "Gruvbox" } } }, @@ -1983,8 +1339,7 @@ "hasDependents": "{{name}} จำเป็นสำหรับ {{list}} กรุณาปิดใช้งานหรือถอนการติดตั้งรายการเหล่านั้นก่อน", "missingDependencies": "{{name}} ต้องการ {{list}} ซึ่งไม่ได้ติดตั้งอยู่", "consentChanged": "สิ่งที่ปลั๊กอินนี้ขอสิทธิ์ได้เปลี่ยนไปตั้งแต่คุณดูครั้งล่าสุด กรุณาตรวจสอบรายการอีกครั้ง", - "upload": "ไม่สามารถอ่าน {{name}} ได้: {{error}}", - "developerMode": "ไม่สามารถเปลี่ยนโหมดนักพัฒนาได้: {{error}}" + "upload": "ไม่สามารถอ่าน {{name}} ได้: {{error}}" }, "data": { "title": "ข้อมูลที่เก็บไว้", @@ -2102,13 +1457,7 @@ "browsePlugins": "เรียกดูปลั๊กอิน", "loading": "กำลังโหลด", "developer": { - "title": "โหมดนักพัฒนาปลั๊กอิน", - "hint": "อนุญาตให้แอดมินติดตั้งปลั๊กอินจากไฟล์ .tmxplug ในแท็บปลั๊กอิน โดยไม่ต้องตรวจสอบจากทะเบียน ใช้สำหรับสร้างและทดสอบปลั๊กอินของคุณเอง", - "enableTitle": "เปิดโหมดนักพัฒนาหรือไม่?", - "enableBody": "แอดมินจะสามารถติดตั้งปลั๊กอินจากไฟล์ที่ Termix ยังไม่ได้ตรวจสอบ ปลั๊กอินสามารถทำอะไรก็ได้ตามความสามารถของมัน ดังนั้นควรเปิดเฉพาะเมื่อคุณกำลังสร้างหรือทดสอบปลั๊กอินเท่านั้น", - "enable": "เปิดใช้งาน", - "installFromFile": "ติดตั้งจากไฟล์", - "signedOnly": "ตั้งค่า TERMIX_REQUIRE_SIGNED_PLUGINS ไว้แล้ว จึงยังคงบล็อกการติดตั้งจากไฟล์" + "installFromFile": "ติดตั้งจากไฟล์" }, "count": { "downloads_other": "{{formatted}} ดาวน์โหลด", @@ -2145,71 +1494,7 @@ "secretSet": "ตั้งค่าแล้ว", "secretNotSet": "ไม่ได้ตั้งค่า", "secretReplace": "แทนที่", - "pluginSettingsSaved": "บันทึกการตั้งค่าแล้ว", - "pluginSettingsInvalid": "ไม่สามารถบันทึกการตั้งค่าบางอย่างได้ ตรวจสอบช่องที่เน้นไว้", - "pluginSettingsSaveFailed": "บันทึกการตั้งค่าไม่สำเร็จ", - "pluginSettingsLoadFailed": "โหลดการตั้งค่าไม่สำเร็จ", - "featureUnavailable": "{{name}} ไม่พร้อมใช้งานในขณะนี้ การตั้งค่าเหล่านี้จะถูกบันทึกไว้แต่จะไม่ถูกนำไปใช้", - "account": "บัญชี", - "security": "ความปลอดภัย", - "apiKeys": "คีย์ API", - "data": "ข้อมูลและการซิงค์", - "interface": "ส่วนติดต่อผู้ใช้", - "appearance": "รูปลักษณ์", - "keybindings": "การกำหนดปุ่มลัด", - "adminGeneral": "ทั่วไป", - "adminUsers": "ผู้ใช้", - "adminSessions": "เซสชัน", - "adminRoles": "บทบาท", - "adminHostDefaults": "ค่าเริ่มต้นของโฮสต์", - "adminBranding": "แบรนด์ดิ้ง", - "adminDatabase": "ฐานข้อมูล", - "adminSsl": "SSL", - "adminApiKeys": "คีย์ API", - "adminAuditLog": "บันทึกการตรวจสอบ", - "bandYou": "บัญชีของคุณ", - "bandApp": "แอปนี้", - "bandPlugins": "ปลั๊กอิน", - "bandInstance": "เซิร์ฟเวอร์นี้", - "searchPlaceholder": "ค้นหาการตั้งค่า", - "noResults": "ไม่พบการตั้งค่าที่ตรงกัน", - "pages": "หน้า", - "instanceSettings": "การตั้งค่าเซิร์ฟเวอร์", - "nothingHere": "ไม่มีอะไรให้ตั้งค่าที่นี่", - "searchPage": "ค้นหาในหน้านี้", - "noPageMatches": "ไม่มีอะไรในหน้านี้ที่ตรงกัน", - "updates": { - "title": "อัปเดต", - "betaProgram": "โปรแกรมเบต้า", - "betaIntro": "เบต้าคือเวอร์ชันทดลองใช้งานล่วงหน้าของ Termix รุ่นถัดไป จะออกทุกวันอังคารและศุกร์เมื่อมีฟีเจอร์ใหม่ให้ลองใช้ อาจมีข้อบกพร่องได้ และความคิดเห็นของคุณคือสิ่งที่ทำให้เวอร์ชันเสถียรดีขึ้น", - "termixBetas": "Termix เบต้า", - "termixBetasHint": "แจ้งเตือนฉันเมื่อมีเบต้าใหม่ ไม่ใช่แค่เวอร์ชันเสถียร", - "runningBetaBuild": "คุณกำลังใช้เวอร์ชันเบต้า หากต้องการออก ให้สลับกลับไปใช้ภาพหรือโปรแกรมติดตั้งเวอร์ชันเสถียร", - "howToInstall": "วิธีรับเวอร์ชันเบต้า", - "desktopInstall": "ดาวน์โหลดโปรแกรมติดตั้งเบต้าและติดตั้งทับเวอร์ชันปัจจุบัน", - "downloadBeta": "ดาวน์โหลด {{version}}", - "dockerInstall": "เปลี่ยนแท็กของภาพเป็นเบต้าและรีสตาร์ทคอนเทนเนอร์:", - "copy": "คัดลอก", - "copied": "คัดลอกแล้ว", - "copyFailed": "ไม่สามารถคัดลอกได้", - "learnMore": "เรียนรู้เพิ่มเติมเกี่ยวกับเบต้า", - "feedback": "ความคิดเห็น", - "feedbackHint": "พบข้อบกพร่องหรือมีไอเดีย? ส่งตรงถึงผู้พัฒนาโดยระบุเวอร์ชันของคุณอัตโนมัติ", - "sendFeedback": "ส่งความคิดเห็นเบต้า", - "releases": "เวอร์ชันที่เผยแพร่", - "thisVersion": "เวอร์ชันนี้", - "newestStable": "เวอร์ชันเสถียรล่าสุด", - "newestBeta": "เวอร์ชันเบต้าล่าสุด", - "noRelease": "ไม่มีในขณะนี้", - "pluginBetas": "ปลั๊กอินเบต้า", - "pluginBetasIntro": "แต่ละปลั๊กอินสามารถใช้เบต้าได้แยกกัน หากต้องการลอง ให้เปิดปลั๊กอินแล้วกด ลองเบต้า", - "openPlugins": "เปิดปลั๊กอิน", - "waitingForStable": "กลับสู่เวอร์ชันเสถียรแล้ว จะคงอยู่ที่ {{version}} จนกว่าจะมีเวอร์ชันเสถียรที่ใหม่กว่า", - "backToStable": "กลับสู่เวอร์ชันเสถียร", - "allPluginsBeta": "ใช้เบต้าสำหรับปลั๊กอินทั้งหมด", - "allPluginsStable": "ปลั๊กอินทั้งหมดกลับสู่เวอร์ชันเสถียร", - "saveFailed": "ไม่สามารถบันทึกการเปลี่ยนแปลงได้" - } + "featureUnavailable": "{{name}} ไม่พร้อมใช้งานในขณะนี้ การตั้งค่าเหล่านี้จะถูกบันทึกไว้แต่จะไม่ถูกนำไปใช้" }, "managerCard": { "refresh": "รีเฟรช", @@ -2219,80 +1504,10 @@ "filter": "กรอง..." }, "sync": { - "server": "เซิร์ฟเวอร์ Termix", - "account": "บัญชี", - "status": "สถานะ", - "never": "ไม่เคย", - "justNow": "เมื่อสักครู่", "minutesAgo_other": "{{count}} นาทีที่แล้ว", "hoursAgo_other": "{{count}} ชั่วโมงที่แล้ว", - "actionFailed": "ไม่สำเร็จ ลองอีกครั้ง", - "unlinkedTitle": "เฉพาะอุปกรณ์นี้", - "unlinkedBody": "Termix ทำงานได้เองบนอุปกรณ์นี้ เชื่อมต่อกับเซิร์ฟเวอร์ Termix ของคุณเพื่อรักษาทุกอย่างให้สอดคล้องกัน", - "unlinkedPointHosts": "โฮสต์ ข้อมูลประจำตัว สนิปเป็ต และการตั้งค่าของคุณจะติดตามคุณไปยังทุกอุปกรณ์", - "unlinkedPointOffline": "ทุกอย่างยังคงทำงานได้เมื่อไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้ และจะซิงค์เมื่อเชื่อมต่อได้อีกครั้ง", - "unlinkedPointAccount": "คุณลงชื่อเข้าใช้ด้วยบัญชีเซิร์ฟเวอร์ของคุณ และโฮสต์ที่ผู้อื่นแชร์กับคุณก็จะแสดงที่นี่เช่นกัน", - "linkButton": "เชื่อมต่อกับเซิร์ฟเวอร์", - "state": { - "syncing": "กำลังซิงค์", - "offline": "ไม่สามารถเข้าถึงเซิร์ฟเวอร์", - "error": "ซิงค์หยุดทำงาน", - "signedOut": "ออกจากระบบแล้ว", - "synced": "ซิงค์แล้ว {{time}}" - }, "pending_other": "การเปลี่ยนแปลง {{count}} รายการรอซิงค์", - "signInAgain": "ลงชื่อเข้าใช้อีกครั้ง", - "syncNow": "ซิงค์ตอนนี้", - "unlink": "ยกเลิกการเชื่อมต่อ", - "unlinked": "อุปกรณ์นี้ไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์อีกต่อไป", - "unlinkTitle": "ยกเลิกการเชื่อมโยงอุปกรณ์นี้หรือไม่", - "unlinkDescription": "การดำเนินการนี้จะหยุดการซิงค์และออกจากระบบเซิร์ฟเวอร์ โฮสต์ที่ผู้อื่นแชร์กับคุณจะถูกนำออกจากอุปกรณ์นี้ไม่ว่าจะเลือกอย่างไร", - "unlinkKeepTitle": "เก็บข้อมูลของฉันไว้ที่นี่", - "unlinkKeepBody": "โฮสต์ ข้อมูลประจำตัว และการตั้งค่าของคุณจะยังคงอยู่บนอุปกรณ์นี้และทำงานต่อได้เอง", - "unlinkRemoveTitle": "ลบข้อมูลที่ซิงค์แล้ว", - "unlinkRemoveBody": "ทุกอย่างที่มาจากเซิร์ฟเวอร์จะถูกนำออกจากอุปกรณ์นี้ เฉพาะโฮสต์ที่เก็บไว้บนอุปกรณ์นี้เท่านั้นที่จะยังคงอยู่", - "conflictsTitle": "ความขัดแย้ง", - "conflictsDescription": "รายการเหล่านี้ถูกแก้ไขทั้งบนอุปกรณ์นี้และบนเซิร์ฟเวอร์ในเวลาเดียวกัน เวอร์ชันของเซิร์ฟเวอร์กำลังถูกใช้งานอยู่ เลือกเก็บเวอร์ชันของคุณเพื่อส่งไปยังเซิร์ฟเวอร์แทน", - "keepMine": "เก็บของฉัน", - "keepServer": "เก็บของเซิร์ฟเวอร์", - "errorsTitle": "ไม่ซิงค์", - "errorsDescription": "เซิร์ฟเวอร์ไม่ยอมรับการเปลี่ยนแปลงเหล่านี้ รายการเหล่านี้จะยังคงอยู่บนอุปกรณ์นี้", - "errorPermission": "บัญชีของคุณบนเซิร์ฟเวอร์ไม่มีสิทธิ์ทำการเปลี่ยนแปลงนี้", - "retry": "ลองอีกครั้ง", - "whatSyncs": "สิ่งที่ซิงค์", - "whatSyncsDescription": "ปิดใช้งานสิ่งที่คุณต้องการเก็บไว้เฉพาะบนอุปกรณ์นี้", - "coreGroup": "Termix", - "notOnServer": "เซิร์ฟเวอร์ไม่มีรายการนี้", - "notOnDevice": "ยังไม่มีบนอุปกรณ์นี้", - "localOnlyHint": "คุณสามารถเก็บโฮสต์หรือโฟลเดอร์เฉพาะรายการไว้บนอุปกรณ์นี้ได้จากการตั้งค่าของรายการนั้นๆ", - "originTitle": "จุดเริ่มต้นของการเชื่อมต่อ", - "originDescription": "เชื่อมต่อโฮสต์จากอุปกรณ์นี้ หรือผ่านเซิร์ฟเวอร์ คุณสามารถเปลี่ยนการตั้งค่านี้ได้สำหรับแต่ละโฮสต์", - "originLocal": "อุปกรณ์นี้", - "originRemote": "เซิร์ฟเวอร์", - "entities": { - "hosts": "โฮสต์", - "sshCredentials": "ข้อมูลประจำตัว", - "sshFolders": "โฟลเดอร์", - "userPreferences": "การตั้งค่า", - "pluginUserSettings": "การตั้งค่าปลั๊กอิน", - "sharedHosts": "โฮสต์ที่แชร์กับคุณ", - "sharedCredentials": "ข้อมูลประจำตัวที่แชร์กับคุณ", - "vaultProfiles": "โปรไฟล์ Vault", - "snippetFolders": "โฟลเดอร์ Snippet", - "snippets": "Snippets", - "dashboardServiceLinks": "ลิงก์บริการ", - "homepageItems": "รายการหน้าแรก", - "networkTopology": "แผนผังเครือข่าย", - "workspaces": "พื้นที่ทำงาน", - "hostDefaults": "ค่าเริ่มต้นของโฮสต์", - "hostDefaultsAdmin": "ค่าเริ่มต้นของโฮสต์เซิร์ฟเวอร์", - "aiProviders": "ผู้ให้บริการ AI", - "homepageLayouts": "เลย์เอาต์หน้าแรก", - "accountProfile": "โปรไฟล์บัญชี" - }, "proxy": { - "title": "Reverse proxy", - "description": "จำเป็นเฉพาะเมื่อมีสิ่งกีดขวางเช่น Cloudflare Access หรือหน้าเข้าสู่ระบบอยู่ด้านหน้าเซิร์ฟเวอร์ของคุณ", "headersTitle": "Headers เพิ่มเติม", "headersHint": "ส่งพร้อมกับทุกคำขอไปยังเซิร์ฟเวอร์ เช่น service token ของ Cloudflare Access", "headerName": "ชื่อ Header", @@ -2305,8 +1520,7 @@ "username": "ชื่อผู้ใช้", "password": "รหัสผ่าน", "allowInvalidCertificate": "เชื่อถือใบรับรองที่ลงนามด้วยตนเอง", - "allowInvalidCertificateHint": "ใช้เฉพาะกับเซิร์ฟเวอร์ของคุณเอง เมื่อใบรับรองไม่ได้มาจากหน่วยงานที่เชื่อถือได้", - "saved": "บันทึกแล้ว" + "allowInvalidCertificateHint": "ใช้เฉพาะกับเซิร์ฟเวอร์ของคุณเอง เมื่อใบรับรองไม่ได้มาจากหน่วยงานที่เชื่อถือได้" }, "problems": { "invalidUrl": "ดูเหมือนว่าจะไม่ใช่ที่อยู่เว็บ", @@ -2342,6 +1556,27 @@ "linking": "กำลังเชื่อมโยงและดำเนินการซิงค์ครั้งแรก...", "linked": "เชื่อมโยงสำเร็จ ข้อมูลของคุณกำลังซิงค์อยู่", "signedInAgain": "เข้าสู่ระบบสำเร็จ การซิงค์กำลังทำงานอีกครั้ง" + }, + "entities": { + "hosts": "โฮสต์", + "sshCredentials": "ข้อมูลประจำตัว", + "sshFolders": "โฟลเดอร์", + "userPreferences": "การตั้งค่า", + "pluginUserSettings": "การตั้งค่าปลั๊กอิน", + "sharedHosts": "โฮสต์ที่แชร์กับคุณ", + "sharedCredentials": "ข้อมูลประจำตัวที่แชร์กับคุณ", + "vaultProfiles": "โปรไฟล์ Vault", + "snippetFolders": "โฟลเดอร์ Snippet", + "snippets": "Snippets", + "dashboardServiceLinks": "ลิงก์บริการ", + "homepageItems": "รายการหน้าแรก", + "networkTopology": "แผนผังเครือข่าย", + "workspaces": "พื้นที่ทำงาน", + "hostDefaults": "ค่าเริ่มต้นของโฮสต์", + "hostDefaultsAdmin": "ค่าเริ่มต้นของโฮสต์เซิร์ฟเวอร์", + "aiProviders": "ผู้ให้บริการ AI", + "homepageLayouts": "เลย์เอาต์หน้าแรก", + "accountProfile": "โปรไฟล์บัญชี" } }, "hostDefaults": { @@ -2358,28 +1593,9 @@ "resetTitle": "โฮสต์นี้ตั้งค่าค่าของตัวเอง คลิกเพื่อใช้ค่าเริ่มต้นจาก {{source}} อีกครั้ง", "clearTitle": "ตั้งค่าในระดับนี้ คลิกเพื่อล้างและใช้ {{source}} แทน", "inheritedTitle": "ใช้ค่าเริ่มต้นจาก {{source}}", - "titleAdmin": "ค่าเริ่มต้นของโฮสต์ระดับเซิร์ฟเวอร์", - "titleUser": "ค่าเริ่มต้นของโฮสต์ของฉัน", - "titleFolder": "ค่าเริ่มต้นของโฟลเดอร์: {{name}}", - "descriptionAdmin": "ค่าเริ่มต้นสำหรับทุกโฮสต์บนเซิร์ฟเวอร์นี้ ค่าเริ่มต้นของผู้ใช้ โฟลเดอร์ หรือโฮสต์เองยังสามารถตั้งค่าอื่นได้ เปลี่ยนช่องเพื่อตั้งค่าที่นี่ หรือล้างเพื่อปล่อยให้เป็นค่าเริ่มต้น", - "descriptionUser": "ค่าเริ่มต้นสำหรับโฮสต์ทั้งหมดของคุณ ทับค่าของเซิร์ฟเวอร์ โฟลเดอร์หรือโฮสต์เองยังสามารถตั้งค่าอื่นได้ เปลี่ยนช่องเพื่อตั้งค่าที่นี่ หรือล้างเพื่อปล่อยให้เป็นค่าเริ่มต้น", - "descriptionFolder": "ค่าเริ่มต้นสำหรับโฮสต์ในโฟลเดอร์นี้และโฟลเดอร์ย่อย ทับค่าของคุณเอง โฮสต์ยังสามารถตั้งค่าอื่นได้ เปลี่ยนช่องเพื่อตั้งค่าที่นี่ หรือล้างเพื่อปล่อยให้เป็นค่าเริ่มต้น", - "save": "บันทึกค่าเริ่มต้น", "saved_other": "บันทึกค่าเริ่มต้นแล้ว อัปเดตโฮสต์ {{count}} โฮสต์", - "savedInBackground": "บันทึกค่าเริ่มต้นแล้ว กำลังอัปเดตโฮสต์ในพื้นหลัง", "appliedToHosts_other": "อัปเดตโฮสต์ {{count}} โฮสต์ด้วยค่าเริ่มต้นใหม่", - "saveFailed": "ไม่สามารถบันทึกค่าเริ่มต้นได้", - "loadFailed": "ไม่สามารถโหลดค่าเริ่มต้นได้", - "confirmTitle": "บันทึกค่าเริ่มต้น?", "confirmChanges_other": "โฮสต์ {{count}} โฮสต์ใช้ค่าเริ่มต้นเหล่านี้และจะเปลี่ยนแปลง", - "confirmNoChanges": "ไม่มีโฮสต์ที่มีอยู่เปลี่ยนแปลง โฮสต์ใหม่จะเริ่มด้วยค่าเริ่มต้นเหล่านี้", - "menuMyDefaults": "ค่าเริ่มต้นของโฮสต์ของฉัน", - "folderDefaultsAction": "ค่าเริ่มต้นของโฟลเดอร์", - "adminSectionDescription": "ตั้งค่าค่าเริ่มต้นที่ทุกโฮสต์บนเซิร์ฟเวอร์นี้ใช้ สำหรับทุกการตั้งค่าของโฮสต์ รวมถึงของปลั๊กอินแต่ละตัว ผู้ใช้และโฟลเดอร์สามารถตั้งค่าของตัวเองทับได้ และโฮสต์ใดๆ ก็ยังสามารถใช้ค่าของตัวเองได้", - "editServerDefaults": "แก้ไขค่าเริ่มต้นของเซิร์ฟเวอร์", - "resetMenu": "รีเซ็ต", - "resetAll": "รีเซ็ตทั้งหมดเป็นค่าเริ่มต้น", - "resetCore": "รีเซ็ตการเชื่อมต่อและ SSH เป็นค่าเริ่มต้น", "resetDone_other": "โฮสต์ {{count}} ตัวใช้ค่าเริ่มต้นแล้ว" }, "panel": { @@ -2392,44 +1608,10 @@ "fields": { "secretSaved": "บันทึกแล้ว พิมพ์เพื่อแทนที่" }, - "sharing": { - "revokeConfirm": "ลบสิทธิ์การเข้าถึงของ {{name}} หรือไม่?", - "revoke": "ลบสิทธิ์การเข้าถึง" - }, "manage": { - "searchSettings": "ค้นหาการตั้งค่า", - "noMatchingSettings": "ไม่พบการตั้งค่าที่ตรงกัน", - "sections": "ส่วนต่างๆ", - "sectionNeedsAttention": "มีบางอย่างที่นี่ต้องการความสนใจ", "needsAttention_other": "มี {{count}} รายการที่ต้องการความสนใจ", - "bandHost": "โฮสต์", - "bandFeatures": "โปรโตคอลและปลั๊กอิน", - "bandCredential": "ข้อมูลรับรอง", - "sshConnection": "การเชื่อมต่อ SSH", - "errorAddressRequired": "จำเป็นต้องระบุที่อยู่", - "errorPortRange": "ใช้พอร์ตระหว่าง 1 ถึง 65535", - "defaults": "ค่าเริ่มต้น", - "searchHosts": "ค้นหาโฮสต์", - "searchCredentials": "ค้นหาข้อมูลรับรอง", - "searchDefaults": "ค้นหาค่าเริ่มต้น", - "addCredential": "เพิ่มข้อมูลรับรอง", - "nothingMatches": "ไม่มีอะไรตรงกัน", - "nothingYet": "ยังไม่มีอะไรที่นี่", - "emptyHostsHint": "เพิ่มโฮสต์และมันจะแสดงที่นี่ ในโฟลเดอร์ที่คุณกำหนดให้", - "emptyCredentialsHint": "ข้อมูลรับรองที่คุณบันทึกไว้สามารถนำกลับมาใช้ใหม่โดยโฮสต์ใดๆ", - "collapse": "ยุบ", - "expand": "ขยาย", - "cannotBeUndone": "ไม่สามารถยกเลิกการดำเนินการนี้ได้", - "hostNotFound": "ไม่พบโฮสต์นั้น ลองรีเฟรชรายการ", "hostCount_other": "โฮสต์ {{count}} ตัว", - "credentialCount_other": "ข้อมูลรับรอง {{count}} รายการ", - "newHost": "โฮสต์ใหม่", - "newCredential": "ข้อมูลรับรองใหม่", - "advanced": "ขั้นสูง", - "pickHost": "เลือกโฮสต์เพื่อแก้ไข", - "pickCredential": "เลือกข้อมูลรับรองเพื่อแก้ไข", - "pickDefaults": "เลือกระดับค่าเริ่มต้นเพื่อแก้ไข", - "pickHint": "ทุกอย่างเกี่ยวกับการเชื่อมต่อยังอยู่ที่นี่ จัดกลุ่มเพื่อให้คุณค้นหาได้ง่าย" + "credentialCount_other": "ข้อมูลรับรอง {{count}} รายการ" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/tr_TR.json b/src/ui/locales/translated/tr_TR.json index 6b6a6a795..472f61003 100644 --- a/src/ui/locales/translated/tr_TR.json +++ b/src/ui/locales/translated/tr_TR.json @@ -141,7 +141,6 @@ "continue": "Devam et", "error": "Hata", "unsavedChanges": "Kaydedilmemiş değişiklikler", - "more": "Daha fazla", "loading": "Yükleniyor...", "host": "Sunucu", "selectHost": "Bir sunucu seçin...", @@ -154,7 +153,6 @@ "cancel": "İptal", "username": "Kullanıcı adı", "login": "Giriş yap", - "logout": "Çıkış yap", "register": "Kayıt ol", "password": "Şifre", "confirmPassword": "Şifreyi onayla", @@ -165,8 +163,6 @@ "rename": "Yeniden adlandır", "edit": "Düzenle", "confirm": "Onayla", - "next": "İleri", - "previous": "Önceki", "refresh": "Yenile", "language": "Dil", "backendReconnected": "Sunucu bağlantısı yeniden kuruldu", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Her biri hakkında bilgi edinin" }, "desktopUpdates": { - "title": "Masaüstü uygulaması", - "mode": "Güncellemeler", - "modeHint": "Bu uygulamanın yeni sürümleri nasıl alır.", - "manualModeHint": "Bu kopya kendini güncelleyemez, bu yüzden Termix yalnızca yeni bir sürüm çıktığında size bildirir.", "modeAutomatic": "Otomatik", "modePrompt": "Önce sor", "modeNever": "Asla", @@ -247,15 +239,6 @@ "onboardingTitle": "Uygulama güncellemeleri", "onboardingBody": "Masaüstü uygulaması artık kendini güncelleyebilir. Yeni sürümlerin nasıl geleceğini seçin. Bunu daha sonra Ayarlar > Güncellemeler bölümünden değiştirebilirsiniz.", "onboardingManual": "Bu uygulama kopyası kendini güncelleyemeyecek şekilde kurulmuş, bu yüzden Termix yeni bir sürüm çıktığında size indirme bağlantısıyla birlikte bildirimde bulunacaktır.", - "status": "Sürüm {{version}}", - "statusIdle": "Henüz kontrol edilmedi", - "statusChecking": "Güncellemeler kontrol ediliyor", - "statusAvailable": "{{version}} sürümü mevcut", - "statusDownloading": "{{version}} indiriliyor ({{progress}}%)", - "statusReady": "{{version}} sürümü hazır. Yüklemek için yeniden başlatın.", - "statusUpToDate": "En yeni sürüme sahipsiniz", - "statusError": "Güncellemeler kontrol edilemedi. Daha sonra tekrar deneyin.", - "checkNow": "Şimdi kontrol et", "download": "İndir", "restart": "Şimdi yeniden başlat", "later": "Daha sonra", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Kapat", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Şifreyi Kopyala", - "copySudoPassword": "Sudo Şifresini Kopyala", - "passwordCopied": "Şifre panoya kopyalandı", - "failedToCopyPassword": "Şifre kopyalanamadı", - "refreshTab": "Bağlantıyı yenile", - "renameTab": "Sekmeyi yeniden adlandır", "dashboard": "Gösterge Paneli", "quickConnect": "Hızlı Bağlan", - "openAsTabHint": "Sekme olarak açmak için Ctrl+tıklayın veya orta tıklayın", - "openAsTab": "Sekme olarak aç", - "openInRightDock": "Sağ kenar çubuğunda aç", - "closeRightDock": "Sağ kenar çubuğunu kapat", - "toggleRightDock": "Sağ kenar çubuğunu aç/kapat", "hosts": "Ana Bilgisayarlar", "credentials": "Kimlik Bilgileri", "connections": "Bağlantılar", - "keepSideMenuOpen": "Menüyü Açık Tut", - "collapseSideMenu": "Menüyü Daralt", - "roleAdministrator": "Yönetici", - "roleUser": "Kullanıcı", "sync": "Senkronize Et", "reconnectDisconnectedTerminals": "Bağlantısı kesilen tüm terminalleri yeniden bağla", "reconnectingTerminals_one": "{{count}} terminal yeniden bağlanıyor", @@ -298,30 +266,11 @@ "reconnectTerminalsFailed_other": "{{count}} terminalin yeniden bağlanması başlatılamadı", "fullscreenUnsupported": "Bu tarayıcı tam ekranı desteklemiyor", "fullscreenFailed": "Tam ekran geçişi yapılamadı", - "resetSidebarWidth": "Genişliği sıfırla", - "collapseSidebar": "Kenar çubuğunu daralt", - "openSidebar": "Kenar çubuğunu aç", "confirmCloseHost": "{{host}} kapatılsın mı?", - "enterFullscreen": "Tam ekrana geç (Ctrl+Shift+F)", - "exitFullscreen": "Tam ekrandan çık (Ctrl+Shift+F)", - "group": { - "objects": "Sizin", - "tools": "Araçlar", - "system": "Sistem" - }, - "searchEverything": "Ana bilgisayarları, sekmeleri ve eylemleri ara", - "search": "Ara", "hiddenCount_one": "{{count}} gizli", "hiddenCount_other": "{{count}} gizli", - "showInRail": "Kenar çubuğunda göster", - "moveUp": "Yukarı taşı", - "moveDown": "Aşağı taşı", - "resetRailOrder": "Sıralamayı sıfırla", - "hideFromRail": "Kenar çubuğundan gizle", - "openSettings": "Ayarları aç", "settings": "Ayarlar", "manage": "Yönet", - "mobileNavigation": "Gezinme", "plugins": "Eklentiler" }, "hosts": { @@ -917,35 +866,14 @@ "importSummary": "İçe aktarma tamamlandı: {{imported}} içe aktarıldı, {{updated}} güncellendi, {{failed}} başarısız oldu", "importHostsFailed": "Ana bilgisayarlar içe aktarılamadı" }, - "commandPalette": { - "searchPlaceholder": "Ana bilgisayarları, komutları veya ayarları ara...", - "quickActions": "Hızlı İşlemler", - "navigation": "Gezinme", - "orShortcut": "veya", - "addNewHost": "Yeni Sunucu Ekle", - "adminSettings": "Yönetici Ayarları", - "addCredential": "Kimlik Bilgisi Ekle", - "recentActivity": "Son Aktiviteler", - "serversAndHosts": "Sunucular ve Hostlar", - "noHostsFound": "\"{{search}}\" ile eşleşen host bulunamadı", - "links": "Bağlantılar", - "navigate": "Gezin", - "select": "Seç", - "pluginActions": "Diğer işlemler", - "noTargetTab": "Açık terminal sekmesi yok", - "documentation": "Dokümantasyon" - }, "splitScreen": { "title": "Bölünmüş ekran", "defaultLabel": "Bölüm {{number}}", "splitRight": "Sağa böl", "splitDown": "Aşağıya böl", - "addToSplit": "{{split}} bölümüne ekle", "paneEmptyItem": "Bölüm {{index}}: boş", "paneItem": "Bölüm {{index}}: {{label}}", "paneNumber": "Bölüm {{index}}", - "newPaneRight": "Sağda yeni bölüm", - "newPaneBelow": "Altta yeni bölüm", "emptyTitle": "Boş bölüm", "emptyHint": "Burada gösterilecek bir şey seçin. Bu bölüm seçiliyken, kenar çubuğundan açtığınız her şey burada da açılır.", "openTabs": "Açık sekmeler", @@ -962,7 +890,6 @@ "clearPane": "Bu bölümü boşalt", "zoom": "Bölümü büyüt", "unzoom": "Düzeni geri yükle", - "unsplit": "Bölümü kaldır", "layouts": "Düzenler", "applyLayout": "Düzeni değiştir", "maxPanes_one": "Bir bölünmüş görünüm en fazla {{count}} bölme içerebilir", @@ -971,8 +898,6 @@ "dropHere": "Burada göstermek için bırak", "paneActions": "Bölüm işlemleri", "dividerHint": "Boyutlandırmak için sürükleyin. Eşit boyutlandırmak için çift tıklayın.", - "openInSplit": "Bölünmüş ekranda aç", - "openInNewSplit": "Mevcut sekmeyle yeni bölüm", "shortcuts": "Kısayollar", "shortcutNavigate": "Paneller arasında geçiş yap", "presets": { @@ -986,23 +911,6 @@ "grid6": "Altılı ızgara" } }, - "connections": { - "noConnections": "Bağlantı yok", - "noConnectionsDesc": "Burada bağlantıları görmek için bir terminal, dosya yöneticisi veya uzak masaüstü açın", - "connectedFor": "Bağlantı süresi: {{duration}}", - "connected": "Bağlı", - "disconnected": "Bağlantı Kesildi", - "reconnect": "Yeniden Bağlan", - "sectionOpen": "Açık", - "sectionBackground": "Arka Plan", - "backgroundDesc": "Oturumlar, bağlantı kesildikten sonra {{minutes}} dakika boyunca devam eder ve yeniden bağlanılabilir.", - "expiresIn": "{{duration}} içinde sona eriyor", - "search": "Bağlantıları ara...", - "noSearchResults": "Aramanızla eşleşen bağlantı bulunamadı", - "rename": "Oturumu yeniden adlandır", - "forgetConfirm": "{{name}} için arka plan oturumu sonlandırılsın mı?", - "forget": "Oturumu sonlandır" - }, "sshAuth": { "totpRequired": "İki Faktörlü Kimlik Doğrulama Gerekli", "totpCodeLabel": "Doğrulama Kodu", @@ -1140,483 +1048,55 @@ "placeholders": { "keyPassword": "anahtar şifresi", "pastePrivateKey": "Özel anahtarınızı buraya yapıştırın...", - "enterPassword": "Şifrenizi girin", - "apiKeyName": "ör. CI Pipeline", - "credentialName": "ör. Üretim SSH Anahtarı", - "optionalDetails": "İsteğe bağlı ayrıntılar...", - "sshUsername": "ör. root veya deploy", - "hostAddress": "10.0.0.1 veya example.com", - "hostName": "ör. Web Sunucusu Üretim" + "enterPassword": "Şifrenizi girin" }, "dashboard": { - "title": "Gösterge Paneli", - "github": "GitHub", - "reportBug": "Hata bildir", - "discord": "Discord", - "docs": "Dokümanlar", - "donate": "Bağış Yap", - "serverOverview": "Sunucu Genel Bakış", - "version": "Sürüm", "updateAvailable": "Güncelleme Mevcut", - "beta": "Beta", - "uptime": "Çalışma Süresi", - "database": "Veritabanı", - "healthy": "Sağlıklı", - "error": "Hata", - "totalHosts": "Toplam Sunucu", - "totalCredentials": "Toplam Kimlik Bilgisi", - "recentActivity": "Son Aktiviteler", - "reset": "Sıfırla", - "noRecentActivity": "Son aktiviteler yok", - "quickActions": "Hızlı İşlemler", - "addHost": "Sunucu Ekle", - "addCredential": "Kimlik Bilgisi Ekle", - "adminSettings": "Yönetici Ayarları", - "userProfile": "Kullanıcı Profili", - "serverStats": "Sunucu İstatistikleri", - "customizeLayout": "Gösterge Panelini Özelleştir", - "justNow": "az önce" + "beta": "Beta" }, "dashboardTab": { "stable": "KARARLI", - "registerNewServer": "Yeni bir sunucu kaydet", - "storeSshKeysOrPasswords": "SSH anahtarlarını veya şifreleri sakla", - "manageUsersAndRoles": "Kullanıcıları ve rolleri yönet", - "manageYourAccount": "Hesabınızı yönetin", - "hostStatus": "Sunucu Durumu", - "noHostsConfigured": "Yapılandırılmış sunucu yok", - "checking": "KONTROL EDİLİYOR", - "commandPalette": "Komut Paleti", - "done": "Tamam", - "clear": "Temizle", - "dragToResizeColumns": "Sütunları yeniden boyutlandırmak için sürükleyin", - "hostsAvailable": "Ulaşılabilir Sunucular", - "removeSection": "Bölümü kaldır", - "addSection": "Bölüm ekle", - "allSectionsShown": "Her şey zaten kontrol panelinde.", - "fromPlugins": "Eklentilerden", - "dropHere": "Bir bölümü buraya bırakın", - "dragToReorder": "Sıralamayı değiştirmek için bölümleri sürükleyin", - "clearActivityConfirm": "Son aktiviteleriniz temizlensin mi?", - "resetConfirm": "Kontrol paneli varsayılan düzenine sıfırlansın mı?", "onlineCount_one": "{{count}} çevrimiçi", "onlineCount_other": "{{count}} çevrimiçi", "hostCount_one": "{{count}} sunucu", "hostCount_other": "{{count}} sunucu" }, "admin": { - "sectionGeneral": "Genel", - "sectionUsers": "Kullanıcılar", - "sectionSessions": "Oturumlar", - "sectionRoles": "Roller", - "sectionDatabase": "Veritabanı", - "sectionApiKeys": "API Anahtarları", - "sectionAuditLog": "Denetim Günlüğü", - "sectionSsl": "HTTPS sertifikası", - "sectionBranding": "Beyaz Etiket", - "brandingAppName": "Uygulama Adı", - "brandingAppNameDesc": "Giriş ekranında ve tarayıcı sekmesinde gösterilir. \"Termix\" kullanmak için boş bırakın.", - "brandingTagline": "Slogan", - "brandingTaglineDesc": "Giriş ekranında uygulama adının altında gösterilir. Varsayılan sloganı kullanmak için boş bırakın.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG veya WEBP, en fazla 750 KB. Giriş ekranındaki ve tarayıcı sekmesindeki varsayılan simgeyi değiştirir.", - "brandingLogoUpload": "Logo yükle", - "brandingLogoReset": "Varsayılana sıfırla", - "brandingLogoInvalid": "Geçersiz resim. 750 KB'ye kadar PNG, JPEG veya WEBP dosyası kullanın.", - "brandingSaved": "Marka ayarları kaydedildi", - "brandingSaveFailed": "Marka ayarları kaydedilemedi", - "sslDescription": "Termix'in HTTPS üzerinden sunduğu sertifika. Kendi sertifikanızı buradan yükleyin veya ACME Sertifikaları bölümünden Let's Encrypt üzerinden bir tane alın ve yenileyin.", - "sslDocsLink": "SSL belgelerini görüntüle", - "sslCertStatus": "Sertifika Durumu", - "sslCertStatusNone": "Sertifika yok", - "sslCertStatusValid": "Geçerli", - "sslCertStatusExpiring": "Yakında süresi dolacak", - "sslCertStatusExpired": "Süresi dolmuş", - "sslCertExpiresAt": "{{date}} tarihinde sona erecek", - "sslInfoNote": "Bir sertifika yayınladıktan veya yükledikten sonra, Termix mevcut HTTP portuna ek olarak SSL_PORT'ta (varsayılan 8443) HTTPS'yi otomatik olarak etkinleştirecektir. Bu portun bu konteynıra yayınlanmış/haritalanmış olduğundan emin olun.", - "sslManualCert": "Sertifika (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Özel Anahtar (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Mevcut sertifikanızı ve özel anahtarınızı, CA'nız tarafından gerektiriliyorsa tam zinciri de dahil olmak üzere yapıştırın.", - "sslManualUpload": "Sertifikayı Yükle ve Yükle", - "sslManualUploadLoading": "Sertifika yükleniyor...", - "sslManualUploadSuccess": "Sertifika başarıyla yüklendi ve kuruldu", - "sslManualUploadFailed": "Sertifika yükleme başarısız oldu", - "sslManualRequiresFields": "Sertifika ve özel anahtar gereklidir", - "auditLogTotal": "Toplam {{total}} giriş", - "auditLogEmpty": "Denetim günlüğü girişi bulunamadı", - "auditLogSuccess": "Başarılı", - "auditLogFailed": "Başarısız", - "auditLogClearFilters": "Filtreleri Temizle", - "auditLogPage": "{{total}} toplamda {{page}}/{{totalPages}}. sayfa", - "auditLogIp": "IP", - "auditLogResourceId": "Kaynak Kimliği", - "auditLogFilterUser": "Kullanıcı", - "auditLogFilterAction": "Eylem", - "auditLogFilterResourceType": "Kaynak Türü", - "auditLogFilterStatus": "Durum", - "auditLogFilterFrom": "Başlangıç", - "auditLogFilterTo": "Bitiş", - "auditLogFilterAll": "Tümü", - "allowRegistration": "Kullanıcı Kaydına İzin Ver", - "allowRegistrationDesc": "Yeni kullanıcıların kullanıcı adı ve şifre ile kendi kendine kayıt olmasına izin ver", - "allowPasswordLogin": "Şifre ile Girişe İzin Ver", - "allowPasswordLoginDesc": "Kullanıcı adı/şifre girişi", - "externalAutoProvision": "Harici hesapları otomatik oluştur", - "externalAutoProvisionDesc": "Birinin SSO veya LDAP gibi harici bir giriş yöntemiyle ilk kez giriş yapması durumunda bir hesap oluştur. Kapalıyken, yalnızca zaten hesabı olan kişiler bu şekilde giriş yapabilir", - "secondFactorAfterExternalLogin": "Harici girişlerden sonra ikinci faktör iste (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Kapalıyken, kayıtlı ikinci faktör yalnızca şifre ve diğer yerel girişlerden sonra istenir, daha önceki gibi. Açıkken, SSO ve LDAP dahil olmak üzere her giriş yönteminin ardından istenir.", - "allowPasswordReset": "Şifre Sıfırlamaya İzin Ver", - "allowPasswordResetDesc": "Docker günlükleri üzerinden sıfırlama kodu", - "auditForwardingTitle": "SIEM'e Yönlendir", - "auditForwardingDesc": "Her denetim girdisinden bir kopyayı NDJSON formatında harici bir toplayıcıya gönder. Yerel günlükler gerçekliğin kaynağı olarak kalır.", - "auditForwardingEnvNotice": "Bir ortam değişkeni de yönlendirmeyi yapılandırır; burada kaydedilen URL önceliklidir.", - "auditForwardingToken": "Bearer belirteci (isteğe bağlı)", - "auditForwardingTokenStored": "Bearer belirteci (kaydedildi)", - "auditForwardingSaved": "Denetim yönlendirme ayarları kaydedildi", - "auditForwardingSaveError": "Denetim yönlendirme ayarları kaydedilemedi", - "sessionTimeout": "Oturum Zaman Aşımı", - "hours": "saat", - "sessionTimeoutRange": "Min 1s, max 720s", - "monitoringDefaults": "İzleme Varsayılanları", - "statusCheck": "Durum Kontrolü", - "sec": "sn", - "logLevel": "Günlük Seviyesi", "usersCount_one": "{{count}} kullanıcı", - "usersCount_other": "{{count}} kullanıcı", - "searchUsers": "Kullanıcıları ara...", - "noUsers": "Kullanıcı yok", - "noUsersMatch": "Aramanıza uygun kullanıcı bulunamadı", - "pageOf": "{{total}}/{{page}}. sayfa", - "createUser": "Oluştur", - "newRole": "Yeni Rol", - "roleName": "Ad", - "roleDisplayName": "Görünen Ad", - "roleDescription": "Açıklama", "rolesCount_one": "{{count}} rol", - "rolesCount_other": "{{count}} rol", - "createRole": "Oluştur", - "creating": "Oluşturuluyor...", - "exportDatabase": "Veritabanını Dışa Aktar", - "exportDatabaseDesc": "Tüm ana bilgisayarların, kimlik bilgilerinin ve ayarların taşınabilir bir SQLite yedeğini indir", - "export": "Dışa Aktar", - "exporting": "Dışa aktarılıyor...", - "importDatabase": "Veritabanını İçe Aktar", - "importDatabaseDesc": "Herhangi bir veritabanı altyapısında taşınabilir bir .sqlite yedeğinden geri yükle", - "importDatabaseSelected": "Seçili: {{name}}", - "selectFile": "Dosya Seç", - "changeFile": "Değiştir", - "import": "İçe Aktar", - "importing": "İçe aktarılıyor...", "apiKeysCount_one": "{{count}} anahtar", - "apiKeysCount_other": "{{count}} anahtar", - "apiKeysDocsLink": "Belgelere göz at", - "apiKeysCliHint": "Sunucuları terminalinizden yönetmek için Termix CLI ile bir API anahtarı kullanın.", - "apiKeysCliLink": "CLI belgelerine göz at", - "newApiKey": "Yeni API Anahtarı", - "apiKeyCreatedWarning": "Anahtar oluşturuldu - şimdi kopyalayın, bir daha gösterilmeyecek.", - "apiKeyName": "Ad", - "apiKeyUser": "Kullanıcı", - "apiKeySelectUser": "Bir kullanıcı seçin...", - "apiKeyExpiresAt": "Son Kullanma Tarihi", - "createKey": "Anahtar Oluştur", - "apiKeyNoExpiry": "Süresiz", - "revokedBadge": "İPTAL EDİLDİ", - "authTypeDual": "Çift Kimlik Doğrulama", - "authTypeExternal": "Harici", - "authTypeLocal": "Yerel", - "adminStatusAdministrator": "Yönetici", - "adminStatusRegularUser": "Standart Kullanıcı", - "adminBadge": "YÖNETİCİ", - "systemBadge": "SİSTEM", - "customBadge": "ÖZEL", - "youBadge": "SİZ", "sessionsActive_one": "{{count}} aktif", - "sessionsActive_other": "{{count}} aktif", - "sessionActive": "Aktif: {{time}}", - "sessionExpires": "Bitiş: {{time}}", - "revokeAll": "Tümü", - "revokeAllSessionsSuccess": "Kullanıcının tüm oturumları iptal edildi", - "revokeAllSessionsFailed": "Oturumlar iptal edilemedi", - "revokeSessionFailed": "Oturum iptal edilemedi", - "addRole": "Rol ekle", - "noCustomRoles": "Tanımlanmış özel rol yok", - "removeRoleFailed": "Rol kaldırılmadı", - "assignRoleFailed": "Rol atanamadı", - "userAdminAccess": "Yönetici", - "userAdminAccessDesc": "Tüm yönetici ayarlarına tam erişim", - "userRoles": "Roller", - "revokeAllUserSessions": "Tüm Oturumları İptal Et", - "revokeAllUserSessionsDesc": "Tüm cihazlarda yeniden giriş zorunluluğu", - "revoke": "İptal Et", - "deleteUserWarning": "Bu kullanıcıyı silmek kalıcıdır.", - "deleteUser": "{{username}} kullanıcısını sil", - "deleting": "Siliniyor...", - "deleteUserFailed": "Kullanıcı silinemedi", - "deleteUserSuccess": "\"{{username}}\" kullanıcısı silindi", - "deleteRoleSuccess": "\"{{name}}\" rolü silindi", - "revokeKeySuccess": "\"{{name}}\" anahtarı iptal edildi", - "revokeKeyFailed": "Anahtar iptal edilemedi", - "copiedToClipboard": "Panoya kopyalandı", - "done": "Tamam", - "createUserTitle": "Kullanıcı Oluştur", - "createUserDesc": "Yeni bir yerel hesap oluşturun.", - "createUserUsername": "Kullanıcı Adı", - "createUserPassword": "Şifre", - "createUserPasswordHint": "En az 6 karakter.", - "createUserEnterUsername": "Kullanıcı adı girin", - "createUserSubmit": "Kullanıcı Oluştur", - "editUserTitle": "Kullanıcıyı Yönet: {{username}}", - "editUserDesc": "Rolleri, yönetici durumunu, oturumları ve hesap ayarlarını düzenleyin.", - "editUserUsername": "Kullanıcı Adı", - "editUserAuthType": "Kimlik Doğrulama Türü", - "editUserAdminStatus": "Yönetici Durumu", - "editUserUserId": "Kullanıcı Kimliği", - "linkAccountTitle": "Hesapları Bağla", - "linkAccountDesc": "{{username}} harici hesabını mevcut bir yerel hesapla birleştirin.", - "linkAccountDescLocal": "{{username}} yerel hesabını mevcut bir yalnızca harici hesapla bağlayın.", - "linkAccountWarningTitle": "Bu işlem şunları yapacak:", - "linkAccountEffect1": "Sadece harici hesap silinecek", - "linkAccountEffect2": "Harici oturum açma hedef hesaba eklenecek", - "linkAccountEffect3": "Hem harici hem de şifre ile oturum açmaya izin verilecek", - "linkAccountTargetUsername": "Yerel Hesap Kullanıcı Adı", - "linkAccountTargetPlaceholder": "Bağlanacak yerel hesap kullanıcı adını girin", - "linkAccountExternalUsername": "Harici Hesap Kullanıcı Adı", - "linkAccountExternalPlaceholder": "Birleştirilecek sadece harici hesap kullanıcı adını girin", - "linkAccountExternalNotFound": "Bu kullanıcı adına sahip sadece harici bir hesap bulunamadı", - "linkAccounts": "Hesapları Bağla", - "linkAccountSuccess": "Hesaplar başarıyla bağlandı", - "linkAccountFailed": "Hesaplar bağlanamadı", - "linkAccountInProgress": "Bağlanıyor...", - "unlinkAccountTitle": "Harici Oturum Açmayı Kaldır", - "unlinkAccountDesc": "{{username}} kullanıcısından harici oturum açmayı kaldırın. Kullanıcı yalnızca şifresiyle giriş yapabilecektir.", - "unlinkAccountWarning": "Bu işlem, bu hesapta harici oturum açmayı kaldıracaktır. Kullanıcının giriş yapmaya devam edebilmesi için bir şifresi olmalıdır.", - "unlinkAccount": "Harici Oturum Açmayı Kaldır", - "unlinkAccountInProgress": "Bağlantı kaldırılıyor...", - "unlinkAccountSuccess": "Harici oturum açma bağlantısı kaldırıldı", - "unlinkAccountFailed": "Harici oturum açma bağlantısı kaldırılamadı", - "updateRegistrationFailed": "Kayıt ayarı güncellenemedi", - "updatePasswordLoginFailed": "Şifre ile giriş ayarı güncellenemedi", - "updateSecondFactorAfterExternalLoginFailed": "İkinci doğrulama faktörü ayarı güncellenemedi", - "updatePasswordResetFailed": "Şifre sıfırlama ayarı güncellenemedi", - "sessionTimeoutRange2": "Oturum zaman aşımı 1 ile 720 saat arasında olmalıdır", - "sessionTimeoutSaved": "Oturum zaman aşımı kaydedildi", - "sessionTimeoutSaveFailed": "Oturum zaman aşımı kaydedilemedi", - "monitoringIntervalInvalid": "Geçersiz aralık değerleri", - "monitoringSaved": "İzleme ayarları kaydedildi", - "monitoringSaveFailed": "İzleme ayarları kaydedilemedi", - "logLevelUpdateFailed": "Günlük düzeyi güncellenemedi", - "createUserRequired": "Kullanıcı adı ve şifre gereklidir", - "createUserPasswordTooShort": "Şifre en az 6 karakter olmalıdır", - "createUserSuccess": "\"{{username}}\" kullanıcısı oluşturuldu", - "createUserFailed": "Kullanıcı oluşturulamadı", - "updateAdminStatusFailed": "Yönetici durumu güncellenemedi", - "allSessionsRevoked": "Tüm oturumlar iptal edildi", - "revokeSessionsFailed": "Oturumlar iptal edilemedi", - "manageUserData": "Kullanıcı verilerini yönet", - "backToUsers": "Kullanıcılara dön", - "manageTabAccount": "Hesap", - "manageTabHosts": "Sunucular", - "manageTabCredentials": "Kimlik Bilgileri", - "manageTabSessions": "Oturumlar", - "manageTabDanger": "Tehlike", - "manageEditorBack": "{{username}} kullanıcısının verilerine dön", - "dataLockedBadge": "KİLİTLİ", - "dataLockedNotice": "{{username}} kullanıcısının verileri, bir sonraki giriş yapana kadar kilitli kalır. O ana kadar sunucuları, kimlik bilgileri ve kod parçacıkları görüntülenemez veya düzenlenemez.", - "resetPasswordTitle": "Şifreyi Sıfırla", - "resetPasswordExternalOnly": "Bu kullanıcı harici bir sağlayıcı üzerinden giriş yapıyor ve şifresi yok.", - "resetPasswordPlaceholder": "Yeni şifre", - "resetPasswordBtn": "Sıfırla", - "resetPasswordWorking": "Sıfırlanıyor...", - "resetPasswordSuccess": "Şifre sıfırlandı", - "resetPasswordSuccessWiped": "Şifre sıfırlandı. Kullanıcının şifreli verileri silindi.", - "resetPasswordFailed": "Şifre sıfırlanamadı", - "resetPasswordConfirmWipe": "{{username}} kullanıcısı, şifreleme yükseltmesinden beri giriş yapmadığı için verileri kurtarılamaz. Şimdi sıfırlarsanız sunucuları, kimlik bilgileri ve kod parçacıkları silinecektir. Devam etmek istiyor musunuz?", - "manageApiKeys": "API Anahtarları", - "apiKeyNamePlaceholder": "Anahtar adı", - "apiKeyCopyNotice": "Bu anahtarı şimdi kopyalayın, tekrar gösterilmeyecek.", - "noApiKeysForUser": "API anahtarı yok", - "apiKeyDeleteFailed": "API anahtarı silinemedi", - "exportUserData": "Veri Dışa Aktarma", - "exportUserDataDesc": "Bu kullanıcının ana bilgisayarlarını, kimlik bilgilerini ve dosya yöneticisi verilerini JSON olarak indirin. Gizli bilgiler şifresi çözülür.", - "exportUserDataSuccess": "Kullanıcı verileri dışa aktarıldı", - "exportUserDataFailed": "Kullanıcı verileri dışa aktarılamadı", "hostsCount_one": "{{count}} ana bilgisayar", "hostsCount_other": "{{count}} ana bilgisayar", - "addHostForUser": "Ana Bilgisayar Ekle", - "noHostsForUser": "Bu kullanıcının ana bilgisayarı yok", - "connectToHost": "Bağlan", - "deleteHostConfirm": "{{username}}'e ait \"{{name}}\" ana bilgisayarı silinsin mi?", - "hostDeletedSuccess": "Ana bilgisayar silindi", - "hostDeleteFailed": "Ana bilgisayar silinemedi", "credentialsCount_one": "{{count}} kimlik bilgisi", "credentialsCount_other": "{{count}} kimlik bilgisi", - "addCredentialForUser": "Kimlik Bilgisi Ekle", - "noCredentialsForUser": "Bu kullanıcının kimlik bilgisi yok", - "deleteCredentialConfirm": "{{username}}'e ait \"{{name}}\" kimlik bilgisi silinsin mi?", - "credentialDeletedSuccess": "Kimlik bilgisi silindi", - "credentialDeleteFailed": "Kimlik bilgisi silinemedi", - "noSessionsForUser": "Aktif oturum yok", - "deleteSuccessorLabel": "Ana bilgisayarları ve kimlik bilgilerini devret:", - "deleteSuccessorMe": "Ben (silen yönetici)", - "deleteSuccessorNone": "Kimse, silinsin", - "deleteSuccessorDesc": "Bu kullanıcının paylaştığı her şey yeni sahibi altında çalışmaya devam eder; kimse seçilirse ana bilgisayarları, kimlik bilgileri ve paylaşımları kaldırılır.", - "deleteUserDangerDesc": "{{username}} kullanıcısını ve tüm verilerini (ana bilgisayarlar, kimlik bilgileri, kod parçacıkları, geçmiş) kalıcı olarak silin. Bu işlem geri alınamaz.", - "deleteUserConfirm": "{{username}} kullanıcısını ve tüm verilerini kalıcı olarak silmek istiyor musunuz?", - "deleteUserAdminBlocked": "Bu kullanıcıyı silmeden önce yönetici durumunu kaldırın.", - "createRoleRequired": "Ad ve görünen ad zorunludur", - "createRoleSuccess": "\"{{name}}\" rolü oluşturuldu", - "createRoleFailed": "Rol oluşturulamadı", - "apiKeyNameRequired": "Anahtar adı zorunludur", - "apiKeyUserRequired": "Kullanıcı kimliği zorunludur", - "apiKeyCreatedSuccess": "\"{{name}}\" API anahtarı oluşturuldu", - "apiKeyCreateFailed": "API anahtarı oluşturulamadı", - "exportSuccess": "Veritabanı başarıyla dışa aktarıldı", - "exportFailed": "Veritabanı dışa aktarımı başarısız oldu", - "importSelectFile": "Lütfen önce bir dosya seçin", - "importCompleted": "İçe aktarma tamamlandı: {{total}} öğe içe aktarıldı, {{skipped}} atlandı", - "importFailed": "İçe aktarma başarısız oldu: {{error}}", - "importError": "Veritabanı içe aktarımı başarısız oldu", - "sectionHostDefaults": "Ana Bilgisayar Varsayılanları", "rolePermissions": { "count_one": "{{count}} izin", - "count_other": "{{count}} izin", - "editAction": "İzinleri düzenle", - "loadError": "İzinler kataloğu yüklenemedi", - "saved": "Rol izinleri kaydedildi", - "saveError": "Rol izinleri kaydedilemedi", - "save": "Kaydet", - "saving": "Kaydediliyor...", - "pluginDisabled": "Eklenti devre dışı", "groups": { "hosts": "Ana Bilgisayarlar", "credentials": "Kimlik Bilgileri", "admin": "Yönetim" } - }, - "notificationPrivateEndpoints": "İzin verilen özel bildirim ana bilgisayarları", - "notificationPrivateEndpointsDesc": "Bildirim kanallarının iletişime geçebileceği tam özel ana bilgisayarlar. Virgülle ayırın.", - "updateNotificationEndpointsFailed": "Bildirim uç noktası izin listesini güncellemek başarısız oldu", - "secondFactorsSectionTitle": "İkinci faktörler", - "secondFactorsNone": "Kayıtlı ikinci faktör yok", - "secondFactorUnavailable": "Kullanılamıyor", - "resetSecondFactors": "İkinci faktörleri sıfırla", - "resetSecondFactorsConfirm": "{{username}} için tüm ikinci faktörler kaldırılsın mı? Şifreleri veya SSO ile oturum açabilir ve tekrar kayıt olabilirler.", - "secondFactorsResetSuccess": "İkinci faktörler sıfırlandı", - "secondFactorsResetFailed": "İkinci faktörler sıfırlanamadı", - "passwordLoginForced": "Şifre ile giriş kapalı, ancak başka bir giriş yöntemi etkinleştirilmediği için şimdilik açık kalıyor. Kimse kilitlenmez.", - "sslNotRenewed": "Bu sertifikayı yenileyen bir şey yok. {{date}} tarihinde sona erecek. ACME Sertifikaları bölümünden otomatik yenilemeyi açın veya o tarihten önce yeni bir sertifika yükleyin.", - "sslSelfSigned": "Termix tarafından oluşturulan kendi kendine imzalı sertifika. Tarayıcılar bununla ilgili uyarı verecektir.", - "sslRenewedBy": "{{plugin}} tarafından otomatik olarak yenilendi", - "sslIssuer": "{{issuer}} tarafından düzenlendi", - "sslNames": "{{names}} adlarını kapsar", - "sslManualTitle": "Sertifika yükle", - "updateExternalAutoProvisionFailed": "Otomatik oluşturma ayarı güncellenemedi", - "hostTags": "Önceden tanımlanmış ana bilgisayar etiketleri", - "hostTagsDesc": "Her kullanıcının ana bilgisayar düzenleyicisinde öneri olarak gördüğü etiketler. Eklemek için Boşluk veya Enter tuşuna basın. Burada bir etiketi kaldırmak, onu ana bilgisayarlardan kaldırmaz.", - "hostTagsError": "Ana bilgisayar etiketi önerileri yüklenemedi veya kaydedilemedi.", - "revokeAllSessionsConfirm": "{{username}} kullanıcısı her yerden çıkış yapsın mı?", - "revokeSessionConfirm": "Bu oturumdan çıkış yapsın mı?", - "revokeSession": "Çıkış yap", - "deleteRoleConfirm": "{{name}} rolü silinsin mi?", - "revokeKeyConfirm": "{{name}} API anahtarı iptal edilsin mi?", - "revokeKey": "İptal et" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Nerede", - "who": "Kim", - "hostLabel": "Ana Bilgisayar", - "hostPlaceholder": "192.168.1.1 veya example.com", - "portLabel": "Bağlantı Noktası", - "usernameLabel": "Kullanıcı Adı", - "usernamePlaceholder": "kullanıcı adı", - "authLabel": "Kimlik Doğrulama", - "passwordLabel": "Şifre", - "passwordPlaceholder": "şifre", - "privateKeyLabel": "Özel Anahtar", - "privateKeyPlaceholder": "Özel anahtarı yapıştırın...", - "credentialLabel": "Kimlik Bilgisi", - "credentialPlaceholder": "Kayıtlı bir kimlik bilgisi seçin", - "protocolLabel": "Protokol", - "domainLabel": "Alan Adı", - "domainPlaceholder": "isteğe bağlı", - "connectToAction": "{{name}} adresine bağlan", - "sshProtocol": "SSH", - "noTarget": "Bu ana bilgisayar türüne bağlanabilecek hiçbir şey yüklü değil" + "usernameLabel": "Kullanıcı Adı" }, "keybindings": { - "description": "Terminalde ve uygulamada eylemlere tuşlar atayın veya yerleşik kısayolları değiştirin.", - "defaultsHeading": "Yerleşik Kısayollar", - "fixedHeading": "Uygulama Kısayolları", - "fixed": { - "splitRight": "Sağa böl", - "splitDown": "Aşağıya böl", - "zoomPane": "Odaklanan paneli yakınlaştır", - "navigatePane": "Paneller arasında geçiş yap", - "nextTab": "Sonraki sekme", - "previousTab": "Önceki sekme", - "jumpTab": "Sekmeye atla", - "previousView": "Önceki kenar çubuğu görünümüne geri dön", - "fullscreen": "Tam ekranı aç/kapat" - }, - "customHeading": "Özel Kısayollar", - "addBinding": "Kısayol Ekle", - "addBindingTitle": "Kısayol Ekle", - "editBindingTitle": "Kısayolu Düzenle", - "loading": "Yükleniyor...", - "noCustomBindings": "Henüz özel kısayol yok", - "defaultBadge": "Varsayılan", - "customizedBadge": "Özelleştirilmiş", - "customize": "Özelleştir", - "resetToDefault": "Varsayılana sıfırla", - "resetAllToDefaults": "Tümünü varsayılana sıfırla", - "cancel": "İptal", - "saveBinding": "Kısayolu Kaydet", - "saveError": "Klavye kısayolları kaydedilemedi", - "pressKeysToRecord": "Tuş kombinasyonu", - "pressKeysPlaceholder": "Tıklayın ve tuşlara basın", - "recording": "Tuşlara basın...", - "comboRequiredError": "Önce bir tuş kombinasyonu girin", - "conflictWarning": "Bu kombinasyon zaten {{combo}} ile eşleştirilmiş. Kaydetmek her ikisinin de tetiklenmesine neden olur.", - "actionLabel": "Eylem", "actionNextTab": "Sonraki sekmeye geç", "actionPreviousTab": "Önceki sekmeye geç", "actionOpenCommandPalette": "Hızlı aramayı aç", - "actionReconnectSession": "Mevcut oturumu yeniden bağla", - "unavailableAction": "{{type}} (kullanılamıyor)", - "actionRequiredError": "Önce bir eylem seçin", - "deleteConfirm": "Bu tuş ataması silinsin mi?", - "resetAllConfirm": "Tüm tuş atamaları varsayılana sıfırlansın mı?" + "actionReconnectSession": "Mevcut oturumu yeniden bağla" }, "userProfile": { - "storageModeLocal": "Tarayıcı", - "storageModeCloud": "Veritabanı", - "storageModeDescription": "Tarayıcı ayarları yalnızca bu tarayıcıda saklar. Veritabanı sunucuya senkronize eder ve her cihazda yüklenir.", - "resetToDefaults": "Varsayılana Sıfırla", - "resetToDefaultsSuccess": "Ayarlar varsayılana sıfırlandı.", - "storageModeSwitch": "Tercih Depolama", - "sectionAccount": "Hesap", - "desktopProfileTitle": "Yalnızca bu cihaz", - "desktopProfileDescription": "Bu profil bu cihazda bulunur ve kendi başına oturum açar. Her cihazda aynı ana bilgisayarları ve ayarları kullanmak için bir Termix sunucusuna bağlayın.", - "sectionInterface": "Arayüz", - "interfacePresetDesc": "Termix'in ne kadar ayrıntı gösterdiği. Her özellik erişilebilir kalır.", "preset_simple": "Basit", "preset_simple_desc": "Yalnızca temel özellikler.", "preset_balanced": "Dengeli", "preset_balanced_desc": "Standart düzen.", "preset_advanced": "Gelişmiş", "preset_advanced_desc": "Her şey açık, sıkı paketlenmiş.", - "presetClearOverrides": "Tümünü sıfırla", - "presetOverridesTitle": "Özelleştirilmiş", - "presetRevertArea": "Geri al", - "presetConfirmTitle": "{{preset}}'e geçilsin mi?", - "presetConfirmDesc": "Bu, kenar çubuğunuzu, gezinmenizi, kontrol paneli düzeninizi, terminal araç çubuğunuzu ve dosya yöneticisi görünümünüzü sıfırlar. Ana bilgisayarlarınız, kimlik bilgileriniz ve ana sayfanız etkilenmez.", - "presetConfirmApply": "Ön ayarı uygula", - "runSetupAgainDesc": "İlk açılış kurulumunu tekrar geçin.", - "runSetupAgainButton": "Kurulumu çalıştır", "uiArea_chrome": "Uygulama çerçevesi", "uiArea_hostList": "Ana bilgisayar listesi", "uiArea_credentialList": "Kimlik bilgisi listesi", @@ -1625,126 +1105,13 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Dosya yöneticisi", "uiArea_hostEditor": "Ana bilgisayar düzenleyicisi", - "sectionAppearance": "Görünüm", - "sectionSecurity": "Güvenlik", - "sectionApiKeys": "API Anahtarları", - "sectionData": "Veri", - "usernameLabel": "Kullanıcı adı", - "roleLabel": "Rol", - "roleAdministrator": "Yönetici", - "authMethodLabel": "Kimlik Doğrulama Yöntemi", - "authMethodLocal": "Yerel", - "twoFaLabel": "2FA", - "twoFaOn": "Açık", - "twoFaOff": "Kapalı", - "versionLabel": "Sürüm", - "cliTitle": "Termix CLI", - "cliDescription": "Kendi kabuğunuzdan terminaller açın, komutlar çalıştırın ve dosyaları taşıyın.", - "cliLearnMore": "Daha Fazla Bilgi", - "deleteAccount": "Hesabı Sil", - "deleteAccountDescription": "Hesabınızı kalıcı olarak silin", - "deleteButton": "Sil", - "deleteAccountPermanent": "Bu işlem kalıcıdır ve geri alınamaz.", - "deleteAccountWarning": "Tüm oturumlar, ana bilgisayarlar, kimlik bilgileri ve ayarlar kalıcı olarak silinecektir.", - "confirmPasswordDeletePlaceholder": "Onaylamak için şifrenizi girin", "languageLabel": "Dil", "themeLabel": "Tema", "fontSizeLabel": "Yazı Boyutu", "interfaceFontLabel": "Arayüz Yazı Tipi", "interfaceFontDescription": "Uygulama arayüzü yazı tipini değiştirir. Terminal profilleri kendi yazı tipi ayarlarını korur.", "accentColorLabel": "Vurgu Rengi", - "keyboardShortcuts": "Klavye Kısayolları", - "keyboardShortcutsDescription": "Terminal kopyalama, yapıştırma ve komut kısayollarını özelleştirin", - "manageShortcuts": "Yönet", - "commandPalette": "Komut Paleti", - "commandPaletteDesc": "Klavye kısayolunu etkinleştir", - "reopenTabsOnLogin": "Giriş Yaparken Sekmeleri Yeniden Aç", - "reopenTabsOnLoginDesc": "Başka bir cihazdan bile giriş yaptığınızda veya sayfayı yenilediğinizde açık sekmelerinizi geri yükleyin", - "confirmTabClose": "Sekme Kapatmayı Onayla", - "confirmTabCloseDesc": "Terminal sekmelerini kapatmadan önce sor", - "showTabNumbers": "Sekme Numaralarını Göster", - "showTabNumbersDesc": "Ayrıştırmaya yardımcı olmak için her sekmede bir numara göster", - "settingsAppRail": "Uygulama Rayı", - "sidebarSettingsMoved": "Ana bilgisayar kenar çubuğu görüntüleme ayarları, Ana Bilgisayarlar araç çubuğundan açılan Özelleştir kenar çubuğu paneline taşındı.", - "showHostTags": "Ana Bilgisayar Etiketlerini Göster", - "showHostTagsDesc": "Ana bilgisayar listesinde etiketleri göster", - "statusColors": "Gerçek Durum Renkleri", - "statusColorsDesc": "Vurgu rengi yerine çevrimiçi/çevrimdışı durum için yeşil/kırmızı kullan", - "pinAppRail": "Uygulama Rayını Sabitle", - "pinAppRailDesc": "Sol kenar çubuğu uygulama rayını üzerine gelindiğinde genişletmek yerine her zaman açık tut", - "expandAppRailOnHover": "Üzerine Gelindiğinde Uygulama Rayını Genişlet", - "expandAppRailOnHoverDesc": "İmleç üzerine geldiğinde sol kenar çubuğu uygulama rayının genişlemesine izin ver", - "appRailHoverPushesContent": "Genişlediğinde içeriği kaydır", - "appRailHoverPushesContentDesc": "Genişletilmiş kenar çubuğu için sayfa üzerinde açmak yerine yer aç. Uzak masaüstü gibi açık oturumlar her seferinde yeniden boyutlandırılır", - "showPinAppRailButton": "Uygulama Rayını Sabitleme Düğmesini Göster", - "showPinAppRailButtonDesc": "Açık tutmak için uygulama rayında bir düğme göster. Varsayılan olarak kapalıdır.", - "settingsNavigation": "Gezinme", - "navigationTabsDesc": "Uygulama rayında hangi sekmelerin görüneceğini seçin", - "settingsUpdates": "Güncellemeler", - "disableUpdateChecks": "Güncelleme Kontrollerini Devre Dışı Bırak", - "disableUpdateChecksDesc": "Güncelleme kontrolünü durdur", - "changePassword": "Şifreyi Değiştir", - "currentPasswordLabel": "Mevcut Şifre", - "currentPasswordPlaceholder": "Mevcut şifre", - "newPasswordLabel": "Yeni Şifre", - "newPasswordPlaceholder": "Yeni şifre", - "confirmPasswordLabel": "Yeni Şifreyi Onayla", - "confirmPasswordPlaceholder": "Yeni şifreyi onayla", - "updatePassword": "Şifreyi Güncelle", - "createApiKeyTitle": "API Anahtarı Oluştur", - "createApiKeyDescription": "Programlı erişim için yeni bir API anahtarı oluşturun.", - "apiKeyNameLabel": "Ad", - "apiKeyNamePlaceholder": "örn. CI Pipeline", - "expiryDateLabel": "Son Kullanma Tarihi", - "optional": "isteğe bağlı", - "cancel": "İptal", - "createKey": "Anahtar Oluştur", - "apiKeyCreatedWarning": "Anahtar oluşturuldu - şimdi kopyalayın, bir daha gösterilmeyecek.", - "copyApiKey": "API anahtarını kopyala", - "copiedToClipboard": "Panoya kopyalandı", "apiKeyCount_one": "{{count}} anahtar", - "apiKeyCount_other": "{{count}} anahtar", - "newKey": "Yeni Anahtar", - "noApiKeys": "Henüz API anahtarı yok.", - "apiKeyActive": "Aktif", - "apiKeyUsageHint": "Anahtarınızı şu başlığa ekleyin:", - "apiKeyUsageHintHeader": "header.", - "apiKeyPermissionsHint": "Anahtarlar, oluşturan kullanıcının izinlerini devralır.", - "exportData": "Verilerimi Dışa Aktar", - "exportDataDesc": "Sunucularınızı, kimlik bilgilerinizi ve ayarlarınızı başka bir cihaza aktarmak için yedeklemesini indirin", - "export": "Dışa Aktar", - "exporting": "Dışa aktarılıyor...", - "importData": "Verilerimi İçe Aktar", - "importDataDesc": "Sunucularınızı, kimlik bilgilerinizi ve ayarlarınızı bir .sqlite yedek dosyasından geri yükleyin", - "importDataSelected": "Seçili: {{name}}", - "selectFile": "Dosya Seç", - "changeFile": "Değiştir", - "import": "İçe Aktar", - "importing": "İçe aktarılıyor...", - "exportSuccess": "Veriler başarıyla dışa aktarıldı", - "exportFailed": "Veri dışa aktarma başarısız oldu", - "importSelectFile": "Lütfen önce bir dosya seçin", - "importCompleted": "İçe aktarma tamamlandı: {{total}} öğe içe aktarıldı, {{skipped}} atlandı", - "importFailed": "İçe aktarma başarısız oldu: {{error}}", - "roleUser": "Kullanıcı", - "authMethodDual": "Çift Kimlik Doğrulama", - "authMethodExternal": "Harici", - "done": "Tamam", - "apiKeyNameRequired": "Anahtar adı gereklidir", - "apiKeyCreated": "\"{{name}}\" API anahtarı oluşturuldu", - "apiKeyCreateFailed": "API anahtarı oluşturulamadı", - "apiKeyUser": "Kullanıcı", - "apiKeyExpires": "Süresi doluyor", - "apiKeyRevoked": "\"{{name}}\" API anahtarı iptal edildi", - "apiKeyRevokeFailed": "API anahtarı iptal edilemedi", - "passwordFieldsRequired": "Mevcut ve yeni şifreler gereklidir", - "passwordMismatch": "Şifreler eşleşmiyor", - "passwordTooShort": "Şifre en az 6 karakter olmalıdır", - "passwordUpdated": "Şifre başarıyla güncellendi", - "passwordUpdateFailed": "Şifre güncellenemedi", - "deletePasswordRequired": "Hesabınızı silmek için şifre gereklidir", - "deleteFailed": "Hesap silinemedi", - "deleting": "Siliniyor...", "colorPickerTooltip": "Renk seçiciyi aç", "themeSystem": "Sistem", "themeLight": "Açık", @@ -1755,18 +1122,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Bu cihaz {{server}} hesabınızla giriş yaptı", - "linkedProfileDescription": "Bu cihaz, sunucudaki hesabınızı kullanır ve verilerinizin bir kopyasını tutar, böylece çevrimdışı çalışmaya devam eder.", - "manageSync": "Senkronizasyonu yönet", - "setUpSync": "Bir sunucuya bağla", - "settingsTabsAndShortcuts": "Sekmeler ve Kısayollar", - "onBetaTitle": "Beta sürümündesiniz", - "onBetaDescription": "Test ettiğiniz için teşekkürler. Bozulan yerleri bize bildirin.", - "tryBetaTitle": "Yeni özellikleri erken deneyin", - "tryBetaDescription": "Güncellemeler bölümünden beta programına katılın.", - "sendBetaFeedback": "Beta geri bildirimi gönder", - "openUpdates": "Güncellemeler" + "themeGruvbox": "Gruvbox" } } }, @@ -2019,8 +1375,7 @@ "hasDependents": "{{name}}, {{list}} tarafından kullanılıyor. Önce bunları kapatın veya kaldırın.", "missingDependencies": "{{name}}, yüklü olmayan {{list}}'e ihtiyaç duyuyor.", "consentChanged": "Bu eklentinin istedikleri, baktığınızdan beri değişti. Listeyi tekrar kontrol edin.", - "upload": "{{name}} okunamadı: {{error}}", - "developerMode": "Geliştirici modu değiştirilemedi: {{error}}" + "upload": "{{name}} okunamadı: {{error}}" }, "data": { "title": "Saklanan veriler", @@ -2145,13 +1500,7 @@ "browsePlugins": "Eklentilere göz at", "loading": "Yükleniyor", "developer": { - "title": "Eklenti geliştirici modu", - "hint": "Yöneticilerin, kayıt defteri kontrolleri olmadan, Eklentiler sekmesinden .tmxplug dosyasından eklenti yüklemesine olanak tanır. Kendi eklentilerinizi oluşturmak ve test etmek için kullanın.", - "enableTitle": "Geliştirici modu açılsın mı?", - "enableBody": "Yöneticiler, Termix'in kontrol etmediği dosyalardan eklenti yükleyebilecek. Bir eklenti, yeteneklerine izin verdiği her şeyi yapabilir, bu yüzden bu modu yalnızca eklenti geliştirirken veya test ederken açın.", - "enable": "Aç", - "installFromFile": "Dosyadan yükle", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS ayarlı olduğu için dosyadan yükleme engelleniyor." + "installFromFile": "Dosyadan yükle" }, "count": { "downloads_one": "{{formatted}} indirme", @@ -2189,71 +1538,7 @@ "secretSet": "Ayarlandı", "secretNotSet": "Ayarlanmadı", "secretReplace": "Değiştir", - "pluginSettingsSaved": "Ayarlar kaydedildi", - "pluginSettingsInvalid": "Bazı ayarlar kaydedilemedi. Vurgulanmış alanları kontrol edin.", - "pluginSettingsSaveFailed": "Ayarlar kaydedilemedi", - "pluginSettingsLoadFailed": "Ayarlar yüklenemedi", - "featureUnavailable": "{{name}} şu anda kullanılamıyor. Bu ayarlar kaydedildi ancak etkisi olmayacak.", - "account": "Hesap", - "security": "Güvenlik", - "apiKeys": "API anahtarları", - "data": "Veri ve senkronizasyon", - "interface": "Arayüz", - "appearance": "Görünüm", - "keybindings": "Kısayol tuşları", - "adminGeneral": "Genel", - "adminUsers": "Kullanıcılar", - "adminSessions": "Oturumlar", - "adminRoles": "Roller", - "adminHostDefaults": "Ana bilgisayar varsayılanları", - "adminBranding": "Markalama", - "adminDatabase": "Veritabanı", - "adminSsl": "SSL", - "adminApiKeys": "API anahtarları", - "adminAuditLog": "Denetim günlüğü", - "bandYou": "Hesabınız", - "bandApp": "Bu uygulama", - "bandPlugins": "Eklentiler", - "bandInstance": "Bu sunucu", - "searchPlaceholder": "Ayarları ara", - "noResults": "Eşleşen ayar bulunamadı.", - "pages": "Sayfalar", - "instanceSettings": "Sunucu ayarları", - "nothingHere": "Burada ayarlanacak bir şey yok.", - "searchPage": "Bu sayfada ara", - "noPageMatches": "Bu sayfada eşleşen bir şey yok.", - "updates": { - "title": "Güncellemeler", - "betaProgram": "Beta programı", - "betaIntro": "Beta sürümleri, bir sonraki Termix sürümünün erken yapılarıdır. Denenecek yeni bir şey olduğunda Salı ve Cuma günleri yayınlanırlar. Hata içerebilirler ve geri bildirimleriniz kararlı sürümü daha iyi hale getirir.", - "termixBetas": "Termix beta sürümleri", - "termixBetasHint": "Sadece kararlı sürümleri değil, yeni beta sürümlerini de bana bildir.", - "runningBetaBuild": "Bir beta sürümü kullanıyorsunuz. Çıkmak için kararlı bir imaja veya yükleyiciye geri geçin.", - "howToInstall": "Beta sürümünü nasıl alırım", - "desktopInstall": "Beta yükleyicisini indirin ve mevcut sürümün üzerine kurun.", - "downloadBeta": "{{version}} sürümünü indir", - "dockerInstall": "İmajınızı beta etiketine değiştirin ve konteyneri yeniden başlatın:", - "copy": "Kopyala", - "copied": "Kopyalandı", - "copyFailed": "Kopyalanamadı", - "learnMore": "Beta sürümleri hakkında daha fazla bilgi edinin", - "feedback": "Geri bildirim", - "feedbackHint": "Bir hata mı buldunuz veya bir fikriniz mi var? Sürüm bilgilerinizle birlikte doğrudan geliştiricilere iletilir.", - "sendFeedback": "Beta geri bildirimi gönder", - "releases": "Sürümler", - "thisVersion": "Bu sürüm", - "newestStable": "En yeni kararlı sürüm", - "newestBeta": "En yeni beta sürümü", - "noRelease": "Şu anda yok", - "pluginBetas": "Eklenti beta sürümleri", - "pluginBetasIntro": "Her eklenti kendi beta sürümlerini kullanabilir. Denemek için eklentiyi açın ve Beta'yı dene butonuna basın.", - "openPlugins": "Eklentileri Aç", - "waitingForStable": "Kararlı sürüme döndünüz. {{version}} sürümünde kalır, kararlı bir sürüm daha yeni olana kadar.", - "backToStable": "Kararlı sürüme dön", - "allPluginsBeta": "Tüm eklentiler için beta sürümlerini kullan", - "allPluginsStable": "Tüm eklentiler kararlı sürüme döndü", - "saveFailed": "Değişiklik kaydedilemedi" - } + "featureUnavailable": "{{name}} şu anda kullanılamıyor. Bu ayarlar kaydedildi ancak etkisi olmayacak." }, "managerCard": { "refresh": "Yenile", @@ -2263,83 +1548,13 @@ "filter": "Filtrele..." }, "sync": { - "server": "Termix sunucusu", - "account": "Hesap", - "status": "Durum", - "never": "asla", - "justNow": "az önce", "minutesAgo_one": "{{count}} dakika önce", "minutesAgo_other": "{{count}} dakika önce", "hoursAgo_one": "{{count}} saat önce", "hoursAgo_other": "{{count}} saat önce", - "actionFailed": "Bu işe yaramadı. Tekrar deneyin.", - "unlinkedTitle": "Sadece bu cihaz", - "unlinkedBody": "Termix bu cihazda kendi başına çalışır. Her şeyi senkronize tutmak için Termix sunucunuza bağlayın.", - "unlinkedPointHosts": "Ana bilgisayarlarınız, kimlik bilgileriniz, komut parçacıklarınız ve ayarlarınız her cihaza sizinle birlikte gelir.", - "unlinkedPointOffline": "Sunucuya ulaşılamadığında her şey yine de çalışır ve daha sonra senkronize olur.", - "unlinkedPointAccount": "Sunucu hesabınızla giriş yaparsınız ve sizinle paylaşılan ana bilgisayarlar da burada görünür.", - "linkButton": "Bir sunucuya bağla", - "state": { - "syncing": "Senkronize ediliyor", - "offline": "Sunucuya ulaşılamıyor", - "error": "Senkronizasyon durdu", - "signedOut": "Çıkış yapıldı", - "synced": "{{time}}'da senkronize edildi" - }, "pending_one": "Senkronize edilmek için bekleyen {{count}} değişiklik", "pending_other": "Senkronize edilmek için bekleyen {{count}} değişiklik", - "signInAgain": "Tekrar giriş yap", - "syncNow": "Şimdi senkronize et", - "unlink": "Bağlantıyı kaldır", - "unlinked": "Bu cihaz artık bağlı değil", - "unlinkTitle": "Bu cihazın bağlantısı kesilsin mi?", - "unlinkDescription": "Eşzamanlama durur ve sunucudan çıkış yapılır. Başkaları tarafından sizinle paylaşılan ana bilgisayarlar her durumda bu cihazdan kaldırılır.", - "unlinkKeepTitle": "Verilerimi burada tut", - "unlinkKeepBody": "Ana bilgisayarlarınız, kimlik bilgileriniz ve ayarlarınız bu cihazda kalır ve bağımsız olarak çalışmaya devam eder.", - "unlinkRemoveTitle": "Eşzamanlanan verileri kaldır", - "unlinkRemoveBody": "Sunucudan gelen her şey bu cihazdan kaldırılır. Sadece bu cihazda tutulan ana bilgisayarlar kalır.", - "conflictsTitle": "Çakışmalar", - "conflictsDescription": "Bu öğeler burada ve sunucuda aynı anda değiştirildi. Sunucu sürümü kullanımda. Bunun yerine sunucuya göndermek için kendi sürümünüzü tutun.", - "keepMine": "Kendi sürümümü tut", - "keepServer": "Sunucu sürümünü tut", - "errorsTitle": "Eşzamanlanmadı", - "errorsDescription": "Sunucu bu değişiklikleri kabul etmedi. Bu değişiklikler bu cihazda kalır.", - "errorPermission": "Sunucudaki hesabınız bu değişikliği yapmaya yetkili değil.", - "retry": "Tekrar dene", - "whatSyncs": "Neler eşzamanlanır", - "whatSyncsDescription": "Sadece bu cihazda tutmak istediğiniz her şeyi kapatın.", - "coreGroup": "Termix", - "notOnServer": "Sunucuda bu yok", - "notOnDevice": "Henüz bu cihazda değil", - "localOnlyHint": "Tekil ana bilgisayarları veya klasörleri de ayarlarından bu cihazda tutabilirsiniz.", - "originTitle": "Bağlantıların başladığı yer", - "originDescription": "Ana bilgisayarlara bu cihazdan veya sunucu üzerinden bağlanın. Bunu her ana bilgisayar için ayrı ayrı değiştirebilirsiniz.", - "originLocal": "Bu cihaz", - "originRemote": "Sunucu", - "entities": { - "hosts": "Ana bilgisayarlar", - "sshCredentials": "Kimlik bilgileri", - "sshFolders": "Klasörler", - "userPreferences": "Tercihler", - "pluginUserSettings": "Eklenti ayarları", - "sharedHosts": "Sizinle paylaşılan ana bilgisayarlar", - "sharedCredentials": "Sizinle paylaşılan kimlik bilgileri", - "vaultProfiles": "Vault profilleri", - "snippetFolders": "Kod parçası klasörleri", - "snippets": "Kod parçaları", - "dashboardServiceLinks": "Hizmet bağlantıları", - "homepageItems": "Ana sayfa öğeleri", - "networkTopology": "Ağ haritası", - "workspaces": "Çalışma alanları", - "hostDefaults": "Ana bilgisayar varsayılanları", - "hostDefaultsAdmin": "Sunucu ana bilgisayar varsayılanları", - "aiProviders": "AI sağlayıcıları", - "homepageLayouts": "Ana sayfa düzenleri", - "accountProfile": "Hesap profili" - }, "proxy": { - "title": "Ters proxy", - "description": "Sadece sunucunuzun önünde Cloudflare Access veya bir giriş sayfası gibi bir şey olduğunda gereklidir.", "headersTitle": "Ek başlıklar", "headersHint": "Sunucuya yapılan her istekle birlikte gönderilir, örneğin bir Cloudflare Access hizmet belirteci.", "headerName": "Başlık adı", @@ -2352,8 +1567,7 @@ "username": "Kullanıcı adı", "password": "Şifre", "allowInvalidCertificate": "Kendi kendine imzalı bir sertifikaya güven", - "allowInvalidCertificateHint": "Sadece kendi sunucunuz için, sertifikası tanınan bir otoriteden gelmediğinde.", - "saved": "Kaydedildi" + "allowInvalidCertificateHint": "Sadece kendi sunucunuz için, sertifikası tanınan bir otoriteden gelmediğinde." }, "problems": { "invalidUrl": "Bu bir web adresi gibi görünmüyor.", @@ -2391,6 +1605,27 @@ "linking": "Bağlanıyor ve ilk eşitleme çalıştırılıyor...", "linked": "Bağlandı. Verileriniz şimdi eşitleniyor.", "signedInAgain": "Giriş yapıldı. Eşitleme tekrar çalışıyor." + }, + "entities": { + "hosts": "Ana bilgisayarlar", + "sshCredentials": "Kimlik bilgileri", + "sshFolders": "Klasörler", + "userPreferences": "Tercihler", + "pluginUserSettings": "Eklenti ayarları", + "sharedHosts": "Sizinle paylaşılan ana bilgisayarlar", + "sharedCredentials": "Sizinle paylaşılan kimlik bilgileri", + "vaultProfiles": "Vault profilleri", + "snippetFolders": "Kod parçası klasörleri", + "snippets": "Kod parçaları", + "dashboardServiceLinks": "Hizmet bağlantıları", + "homepageItems": "Ana sayfa öğeleri", + "networkTopology": "Ağ haritası", + "workspaces": "Çalışma alanları", + "hostDefaults": "Ana bilgisayar varsayılanları", + "hostDefaultsAdmin": "Sunucu ana bilgisayar varsayılanları", + "aiProviders": "AI sağlayıcıları", + "homepageLayouts": "Ana sayfa düzenleri", + "accountProfile": "Hesap profili" } }, "hostDefaults": { @@ -2407,31 +1642,12 @@ "resetTitle": "Bu ana bilgisayar kendi değerini ayarlar. {{source}} kaynağından varsayılanı tekrar kullanmak için tıklayın", "clearTitle": "Bu düzeyde ayarlandı. Temizlemek ve bunun yerine {{source}} kullanmak için tıklayın", "inheritedTitle": "{{source}} kaynağındaki varsayılana uyar", - "titleAdmin": "Sunucu ana bilgisayar varsayılanları", - "titleUser": "Ana bilgisayar varsayılanlarım", - "titleFolder": "Klasör varsayılanları: {{name}}", - "descriptionAdmin": "Bu sunucudaki her ana bilgisayar için varsayılanlar. Bir kullanıcının kendi varsayılanları, bir klasörün varsayılanları veya ana bilgisayarın kendisi yine de farklı bir değer ayarlayabilir. Burada ayarlamak için bir alanı değiştirin veya ayarlanmamış bırakmak için temizleyin.", - "descriptionUser": "Sunucunun varsayılanlarının üzerine tüm ana bilgisayarlarınız için varsayılanlar. Bir klasör veya ana bilgisayarın kendisi yine de farklı bir değer ayarlayabilir. Burada ayarlamak için bir alanı değiştirin veya ayarlanmamış bırakmak için temizleyin.", - "descriptionFolder": "Bu klasördeki ve alt klasörlerindeki ana bilgisayarlar için varsayılanlar, kendi varsayılanlarınızın üzerine. Bir ana bilgisayar yine de farklı bir değer ayarlayabilir. Burada ayarlamak için bir alanı değiştirin veya ayarlanmamış bırakmak için temizleyin.", - "save": "Varsayılanları kaydet", "saved_one": "Varsayılanlar kaydedildi. {{count}} ana bilgisayar güncellendi.", "saved_other": "Varsayılanlar kaydedildi. {{count}} ana bilgisayar güncellendi.", - "savedInBackground": "Varsayılanlar kaydedildi. Ana bilgisayarlar arka planda güncelleniyor.", "appliedToHosts_one": "{{count}} ana bilgisayar yeni varsayılanlarla güncellendi.", "appliedToHosts_other": "{{count}} ana bilgisayar yeni varsayılanlarla güncellendi.", - "saveFailed": "Varsayılanlar kaydedilemedi", - "loadFailed": "Varsayılanlar yüklenemedi", - "confirmTitle": "Varsayılanlar kaydedilsin mi?", "confirmChanges_one": "{{count}} ana bilgisayar bu varsayılanları takip eder ve değişecektir.", "confirmChanges_other": "{{count}} ana bilgisayar bu varsayılanları takip eder ve değişecektir.", - "confirmNoChanges": "Mevcut ana bilgisayarda değişiklik yok. Yeni ana bilgisayarlar bu varsayılanlarla başlayacak.", - "menuMyDefaults": "Ana bilgisayar varsayılanlarım", - "folderDefaultsAction": "Klasör varsayılanları", - "adminSectionDescription": "Bu sunucudaki her ana bilgisayarın takip edeceği varsayılanları, bir ana bilgisayarın sahip olduğu her ayar için, her eklentininki dahil ayarlayın. Kullanıcılar ve klasörler kendi üzerine kendi varsayılanlarını ayarlayabilir ve herhangi bir ana bilgisayar yine de kendi değerini kullanabilir.", - "editServerDefaults": "Sunucu varsayılanlarını düzenle", - "resetMenu": "Sıfırla", - "resetAll": "Her şeyi varsayılana döndür", - "resetCore": "Bağlantı ve SSH ayarlarını varsayılana döndür", "resetDone_one": "{{count}} sunucu artık varsayılan ayarlarını kullanıyor.", "resetDone_other": "{{count}} sunucu artık varsayılan ayarlarını kullanıyor." }, @@ -2445,47 +1661,13 @@ "fields": { "secretSaved": "Kaydedildi. Değiştirmek için yazın." }, - "sharing": { - "revokeConfirm": "{{name}} kullanıcısının erişimi kaldırılsın mı?", - "revoke": "Erişimi kaldır" - }, "manage": { - "searchSettings": "Ayarları ara", - "noMatchingSettings": "Eşleşen ayar bulunamadı.", - "sections": "Bölümler", - "sectionNeedsAttention": "Burada dikkat edilmesi gereken bir şey var", "needsAttention_one": "Bir konu dikkat gerektiriyor.", "needsAttention_other": "{{count}} konu dikkat gerektiriyor.", - "bandHost": "Sunucu", - "bandFeatures": "Protokoller ve eklentiler", - "bandCredential": "Kimlik bilgisi", - "sshConnection": "SSH bağlantısı", - "errorAddressRequired": "Bir adres gereklidir.", - "errorPortRange": "1 ile 65535 arasında bir port kullanın.", - "defaults": "Varsayılanlar", - "searchHosts": "Sunucuları ara", - "searchCredentials": "Kimlik bilgilerini ara", - "searchDefaults": "Varsayılanları ara", - "addCredential": "Kimlik bilgisi ekle", - "nothingMatches": "Hiçbir şey eşleşmiyor", - "nothingYet": "Burada henüz bir şey yok", - "emptyHostsHint": "Bir sunucu ekleyin, belirlediğiniz klasörde burada görünecektir.", - "emptyCredentialsHint": "Kaydettiğiniz kimlik bilgileri herhangi bir sunucu tarafından yeniden kullanılabilir.", - "collapse": "Daralt", - "expand": "Genişlet", - "cannotBeUndone": "Bu işlem geri alınamaz.", - "hostNotFound": "Bu sunucu bulunamadı. Listeyi yenilemeyi deneyin.", "hostCount_one": "{{count}} sunucu", "hostCount_other": "{{count}} sunucu", "credentialCount_one": "{{count}} kimlik bilgisi", - "credentialCount_other": "{{count}} kimlik bilgisi", - "newHost": "Yeni sunucu", - "newCredential": "Yeni kimlik bilgisi", - "advanced": "Gelişmiş", - "pickHost": "Düzenlemek için bir sunucu seçin", - "pickCredential": "Düzenlemek için bir kimlik bilgisi seçin", - "pickDefaults": "Düzenlemek için bir varsayılan düzeyi seçin", - "pickHint": "Bir bağlantıyla ilgili her şey, bulabilmeniz için gruplandırılmış şekilde burada bulunur." + "credentialCount_other": "{{count}} kimlik bilgisi" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/uk_UA.json b/src/ui/locales/translated/uk_UA.json index 1bfc048e9..e91795b73 100644 --- a/src/ui/locales/translated/uk_UA.json +++ b/src/ui/locales/translated/uk_UA.json @@ -141,7 +141,6 @@ "continue": "Продовжити", "error": "Помилка", "unsavedChanges": "Незбережені зміни", - "more": "Більше", "loading": "Завантаження...", "host": "Хост", "selectHost": "Оберіть хост...", @@ -154,7 +153,6 @@ "cancel": "Скасувати", "username": "Ім’я користувача", "login": "Увійти", - "logout": "Вийти", "register": "Реєстрація", "password": "Пароль", "confirmPassword": "Підтвердження пароля", @@ -165,8 +163,6 @@ "rename": "Перейменувати", "edit": "Редагувати", "confirm": "Підтвердити", - "next": "Далі", - "previous": "Назад", "refresh": "Оновити", "language": "Мова", "backendReconnected": "З’єднання з сервером відновлено", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Детальніше про кожен" }, "desktopUpdates": { - "title": "Настільний додаток", - "mode": "Оновлення", - "modeHint": "Як цей додаток отримує нові версії.", - "manualModeHint": "Ця копія не може оновлюватися сама, тому Termix лише повідомляє вас, коли виходить нова версія.", "modeAutomatic": "Автоматично", "modePrompt": "Спочатку запитати", "modeNever": "Ніколи", @@ -247,15 +239,6 @@ "onboardingTitle": "Оновлення додатка", "onboardingBody": "Настільний додаток тепер може оновлюватися самостійно. Оберіть, як ви хочете отримувати нові версії. Це можна змінити пізніше в Налаштуваннях, Оновлення.", "onboardingManual": "Ця копія додатка була встановлена таким чином, що не підтримує автоматичне оновлення, тому Termix повідомить вас про вихід нової версії та надасть посилання для завантаження.", - "status": "Версія {{version}}", - "statusIdle": "Ще не перевірено", - "statusChecking": "Перевірка наявності оновлень", - "statusAvailable": "Доступна версія {{version}}", - "statusDownloading": "Завантаження {{version}} ({{progress}}%)", - "statusReady": "Версія {{version}} готова. Перезапустіть, щоб встановити її.", - "statusUpToDate": "У вас остання версія", - "statusError": "Не вдалося перевірити наявність оновлень. Спробуйте пізніше.", - "checkNow": "Перевірити зараз", "download": "Завантажити", "restart": "Перезапустити зараз", "later": "Пізніше", @@ -269,26 +252,11 @@ "terminal": "Термінал", "close": "Закрити", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Копіювати пароль", - "copySudoPassword": "Копіювати пароль sudo", - "passwordCopied": "Пароль скопійовано в буфер обміну", - "failedToCopyPassword": "Не вдалося скопіювати пароль", - "refreshTab": "Оновити з’єднання", - "renameTab": "Перейменувати вкладку", "dashboard": "Панель керування", "quickConnect": "Швидке підключення", - "openAsTabHint": "Ctrl+клік або клік середньою кнопкою миші, щоб відкрити як вкладку", - "openAsTab": "Відкрити як вкладку", - "openInRightDock": "Відкрити на правій панелі", - "closeRightDock": "Закрити праву панель", - "toggleRightDock": "Перемкнути праву панель", "hosts": "Хости", "credentials": "Облікові дані", "connections": "З'єднання", - "keepSideMenuOpen": "Залишати меню відкритим", - "collapseSideMenu": "Згорнути меню", - "roleAdministrator": "Адміністратор", - "roleUser": "Користувач", "sync": "Синхронізація", "reconnectDisconnectedTerminals": "Підключити всі відключені термінали", "reconnectingTerminals_one": "Підключення {{count}} термінала", @@ -302,32 +270,13 @@ "reconnectTerminalsFailed_other": "Не вдалося запустити підключення {{count}} терміналів", "fullscreenUnsupported": "Повноекранний режим не підтримується цим браузером", "fullscreenFailed": "Не вдалося перемкнути повноекранний режим", - "resetSidebarWidth": "Скинути ширину", - "collapseSidebar": "Згорнути бічну панель", - "openSidebar": "Відкрити бічну панель", "confirmCloseHost": "Закрити {{host}}?", - "enterFullscreen": "Повноекранний режим (Ctrl+Shift+F)", - "exitFullscreen": "Вийти з повноекранного режиму (Ctrl+Shift+F)", - "group": { - "objects": "Мої", - "tools": "Інструменти", - "system": "Система" - }, - "searchEverything": "Пошук хостів, вкладок та дій", - "search": "Пошук", "hiddenCount_one": "{{count}} приховано", "hiddenCount_few": "{{count}} приховано", "hiddenCount_many": "{{count}} приховано", "hiddenCount_other": "{{count}} приховано", - "showInRail": "Показати на бічній панелі", - "moveUp": "Перемістити вгору", - "moveDown": "Перемістити вниз", - "resetRailOrder": "Скинути порядок", - "hideFromRail": "Приховати з бічної панелі", - "openSettings": "Відкрити налаштування", "settings": "Налаштування", "manage": "Керування", - "mobileNavigation": "Навігація", "plugins": "Плагіни" }, "hosts": { @@ -943,35 +892,14 @@ "importSummary": "Імпорт завершено: {{imported}} імпортовано, {{updated}} оновлено, {{failed}} не вдалося", "importHostsFailed": "Не вдалося імпортувати хости" }, - "commandPalette": { - "searchPlaceholder": "Пошук хостів, команд або налаштувань...", - "quickActions": "Швидкі дії", - "navigation": "Навігація", - "orShortcut": "або", - "addNewHost": "Додати новий хост", - "adminSettings": "Налаштування адміністратора", - "addCredential": "Додати облікові дані", - "recentActivity": "Остання активність", - "serversAndHosts": "Сервери та хости", - "noHostsFound": "Не знайдено хостів, що відповідають \"{{search}}\"", - "links": "Посилання", - "navigate": "Навігація", - "select": "Вибрати", - "pluginActions": "Більше дій", - "noTargetTab": "Вкладки терміналу не відкрито", - "documentation": "Документація" - }, "splitScreen": { "title": "Розділений екран", "defaultLabel": "Розділ {{number}}", "splitRight": "Розділити праворуч", "splitDown": "Розділити вниз", - "addToSplit": "Додати до {{split}}", "paneEmptyItem": "Панель {{index}}: порожня", "paneItem": "Панель {{index}}: {{label}}", "paneNumber": "Панель {{index}}", - "newPaneRight": "Нова панель праворуч", - "newPaneBelow": "Нова панель нижче", "emptyTitle": "Порожня панель", "emptyHint": "Оберіть, що відобразити тут. Поки ця панель активна, все, що ви відкриваєте з бічної панелі, також відкривається тут.", "openTabs": "Відкриті вкладки", @@ -988,7 +916,6 @@ "clearPane": "Очистити цю панель", "zoom": "Збільшити панель", "unzoom": "Відновити розташування", - "unsplit": "Об’єднати", "layouts": "Розташування", "applyLayout": "Змінити розташування", "maxPanes_one": "Розділ може містити до {{count}} панелі", @@ -999,8 +926,6 @@ "dropHere": "Перетягнути, щоб показати тут", "paneActions": "Дії з панеллю", "dividerHint": "Перетягніть, щоб змінити розмір. Подвійне клацання для вирівнювання.", - "openInSplit": "Відкрити в розділі", - "openInNewSplit": "Новий розділ із поточною вкладкою", "shortcuts": "Сполучення клавіш", "shortcutNavigate": "Перемикання між панелями", "presets": { @@ -1014,23 +939,6 @@ "grid6": "Сітка з шести" } }, - "connections": { - "noConnections": "Немає підключень", - "noConnectionsDesc": "Відкрийте термінал, файловий менеджер або віддалений робочий стіл, щоб побачити підключення тут", - "connectedFor": "Підключено протягом {{duration}}", - "connected": "Підключено", - "disconnected": "Відключено", - "reconnect": "Перепідключитися", - "sectionOpen": "Відкриті", - "sectionBackground": "Фонові", - "backgroundDesc": "Сесії зберігаються протягом {{minutes}} хвилин після відключення і можуть бути відновлені.", - "expiresIn": "Діє ще {{duration}}", - "search": "Пошук підключень...", - "noSearchResults": "Не знайдено підключень за вашим запитом", - "rename": "Перейменувати сесію", - "forgetConfirm": "Завершити фонову сесію для {{name}}?", - "forget": "Завершити сесію" - }, "sshAuth": { "totpRequired": "Потрібна двофакторна автентифікація", "totpCodeLabel": "Код підтвердження", @@ -1168,65 +1076,14 @@ "placeholders": { "keyPassword": "пароль ключа", "pastePrivateKey": "Вставте свій приватний ключ сюди...", - "enterPassword": "Введіть свій пароль", - "apiKeyName": "напр., CI Pipeline", - "credentialName": "напр., SSH-ключ для продакшену", - "optionalDetails": "Додаткові деталі...", - "sshUsername": "напр., root або deploy", - "hostAddress": "10.0.0.1 або example.com", - "hostName": "напр., Веб-сервер продакшену" + "enterPassword": "Введіть свій пароль" }, "dashboard": { - "title": "Панель керування", - "github": "GitHub", - "reportBug": "Повідомити про помилку", - "discord": "Discord", - "docs": "Документація", - "donate": "Підтримати", - "serverOverview": "Огляд сервера", - "version": "Версія", "updateAvailable": "Доступне оновлення", - "beta": "Бета", - "uptime": "Час роботи", - "database": "База даних", - "healthy": "Нормально", - "error": "Помилка", - "totalHosts": "Всього хостів", - "totalCredentials": "Всього облікових даних", - "recentActivity": "Остання активність", - "reset": "Скинути", - "noRecentActivity": "Немає недавньої активності", - "quickActions": "Швидкі дії", - "addHost": "Додати хост", - "addCredential": "Додати облікові дані", - "adminSettings": "Налаштування адміністратора", - "userProfile": "Профіль користувача", - "serverStats": "Статистика сервера", - "customizeLayout": "Налаштувати панель керування", - "justNow": "щойно" + "beta": "Бета" }, "dashboardTab": { "stable": "СТАБІЛЬНА", - "registerNewServer": "Зареєструвати новий сервер", - "storeSshKeysOrPasswords": "Зберігати SSH-ключі або паролі", - "manageUsersAndRoles": "Керувати користувачами та ролями", - "manageYourAccount": "Керувати своїм обліковим записом", - "hostStatus": "Стан хоста", - "noHostsConfigured": "Хости не налаштовано", - "checking": "ПЕРЕВІРКА", - "commandPalette": "Палітра команд", - "done": "Готово", - "clear": "Очистити", - "dragToResizeColumns": "Перетягніть, щоб змінити ширину стовпців", - "hostsAvailable": "Доступні хости", - "removeSection": "Видалити розділ", - "addSection": "Додати розділ", - "allSectionsShown": "Усе вже відображається на панелі керування.", - "fromPlugins": "З плагінів", - "dropHere": "Перетягніть розділ сюди", - "dragToReorder": "Перетягніть розділи, щоб змінити їх порядок", - "clearActivityConfirm": "Очистити вашу недавню активність?", - "resetConfirm": "Скинути панель керування до типового вигляду?", "onlineCount_one": "{{count}} онлайн", "onlineCount_few": "{{count}} онлайн", "onlineCount_many": "{{count}} онлайн", @@ -1237,432 +1094,55 @@ "hostCount_other": "{{count}} хоста" }, "admin": { - "sectionGeneral": "Загальні", - "sectionUsers": "Користувачі", - "sectionSessions": "Сесії", - "sectionRoles": "Ролі", - "sectionDatabase": "База даних", - "sectionApiKeys": "Ключі API", - "sectionAuditLog": "Журнал аудиту", - "sectionSsl": "Сертифікат HTTPS", - "sectionBranding": "Білий лейбл", - "brandingAppName": "Назва програми", - "brandingAppNameDesc": "Відображається на екрані входу та на вкладці браузера. Залиште порожнім, щоб використовувати «Termix».", - "brandingTagline": "Слоган", - "brandingTaglineDesc": "Відображається під назвою програми на екрані входу. Залиште порожнім, щоб використовувати типовий слоган.", - "brandingLogo": "Логотип", - "brandingLogoDesc": "PNG, JPEG або WEBP, до 750 КБ. Замінює типову іконку на екрані входу та на вкладці браузера.", - "brandingLogoUpload": "Завантажити логотип", - "brandingLogoReset": "Скинути до типового", - "brandingLogoInvalid": "Недійсний зображення. Використовуйте файл PNG, JPEG або WEBP розміром до 750 КБ.", - "brandingSaved": "Налаштування брендування збережено", - "brandingSaveFailed": "Не вдалося зберегти налаштування брендування", - "sslDescription": "Сертифікат, який Termix використовує для HTTPS. Завантажте свій власний тут або отримайте та оновіть сертифікат від Let's Encrypt у розділі ACME Certificates.", - "sslDocsLink": "Переглянути документацію SSL", - "sslCertStatus": "Стан сертифіката", - "sslCertStatusNone": "Немає сертифіката", - "sslCertStatusValid": "Дійсний", - "sslCertStatusExpiring": "Скоро закінчиться", - "sslCertStatusExpired": "Термін дії минув", - "sslCertExpiresAt": "Закінчується {{date}}", - "sslInfoNote": "Після видачі або завантаження сертифіката Termix автоматично увімкне HTTPS на SSL_PORT (за замовчуванням 8443) крім існуючого HTTP-порту. Переконайтеся, що цей порт опубліковано/відображено для цього контейнера, щоб він був доступний.", - "sslManualCert": "Сертифікат (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Приватний ключ (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Вставте ваш існуючий сертифікат та приватний ключ, включаючи повний ланцюжок, якщо це вимагає ваш CA.", - "sslManualUpload": "Завантажити та встановити сертифікат", - "sslManualUploadLoading": "Завантаження сертифіката...", - "sslManualUploadSuccess": "Сертифікат успішно завантажено та встановлено", - "sslManualUploadFailed": "Не вдалося завантажити сертифікат", - "sslManualRequiresFields": "Сертифікат та приватний ключ є обов'язковими", - "auditLogTotal": "{{total}} записів всього", - "auditLogEmpty": "Записів журналу аудиту не знайдено", - "auditLogSuccess": "Успіх", - "auditLogFailed": "Невдача", - "auditLogClearFilters": "Очистити фільтри", - "auditLogPage": "Сторінка {{page}} з {{totalPages}} ({{total}} всього)", - "auditLogIp": "IP", - "auditLogResourceId": "ID ресурсу", - "auditLogFilterUser": "Користувач", - "auditLogFilterAction": "Дія", - "auditLogFilterResourceType": "Тип ресурсу", - "auditLogFilterStatus": "Статус", - "auditLogFilterFrom": "З", - "auditLogFilterTo": "До", - "auditLogFilterAll": "Усі", - "allowRegistration": "Дозволити реєстрацію користувачів", - "allowRegistrationDesc": "Дозволити новим користувачам самостійно реєструватися за допомогою імені користувача та пароля", - "allowPasswordLogin": "Дозволити вхід за паролем", - "allowPasswordLoginDesc": "Вхід за іменем користувача та паролем", - "externalAutoProvision": "Автоматичне створення зовнішніх облікових записів", - "externalAutoProvisionDesc": "Створювати обліковий запис при першому вході через зовнішній метод, наприклад SSO або LDAP. Якщо вимкнено, увійти таким чином можуть лише ті, хто вже має обліковий запис", - "secondFactorAfterExternalLogin": "Запитувати другий фактор після зовнішнього входу (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Якщо вимкнено, другий фактор запитується лише після входу за паролем та інших локальних входів, як і раніше. Якщо увімкнено, він запитується після кожного методу входу, включаючи SSO та LDAP.", - "allowPasswordReset": "Дозволити скидання пароля", - "allowPasswordResetDesc": "Код скидання через логи Docker", - "auditForwardingTitle": "Переадресація в SIEM", - "auditForwardingDesc": "Надсилати копію кожного запису журналу аудиту зовнішньому збирачу у форматі NDJSON. Локальні журнали залишаються основним джерелом даних.", - "auditForwardingEnvNotice": "Переадресацію також можна налаштувати через змінну середовища; URL-адреса, збережена тут, має пріоритет.", - "auditForwardingToken": "Токен Bearer (необов'язково)", - "auditForwardingTokenStored": "Токен Bearer (збережено)", - "auditForwardingSaved": "Налаштування переадресації журналу аудиту збережено", - "auditForwardingSaveError": "Не вдалося зберегти налаштування переадресації журналу аудиту", - "sessionTimeout": "Час очікування сесії", - "hours": "годин", - "sessionTimeoutRange": "Мін. 1 год., макс. 720 год.", - "monitoringDefaults": "Типові налаштування моніторингу", - "statusCheck": "Перевірка статусу", - "sec": "сек", - "logLevel": "Рівень логування", "usersCount_one": "{{count}} користувач", "usersCount_few": "{{count}} користувачі", "usersCount_many": "{{count}} користувачів", - "usersCount_other": "{{count}} користувача", - "searchUsers": "Пошук користувачів...", - "noUsers": "Користувачів немає", - "noUsersMatch": "Не знайдено користувачів, що відповідають пошуку", - "pageOf": "Сторінка {{page}} з {{total}}", - "createUser": "Створити", - "newRole": "Нова роль", - "roleName": "Назва", - "roleDisplayName": "Відображуване ім'я", - "roleDescription": "Опис", "rolesCount_one": "{{count}} роль", "rolesCount_few": "{{count}} ролі", "rolesCount_many": "{{count}} ролей", - "rolesCount_other": "{{count}} ролі", - "createRole": "Створити", - "creating": "Створення...", - "exportDatabase": "Експорт бази даних", - "exportDatabaseDesc": "Завантажити портативну резервну копію SQLite всіх хостів, облікових даних та налаштувань", - "export": "Експорт", - "exporting": "Експорт...", - "importDatabase": "Імпорт бази даних", - "importDatabaseDesc": "Відновити з портативної резервної копії .sqlite на будь-якому бекенді бази даних", - "importDatabaseSelected": "Вибрано: {{name}}", - "selectFile": "Обрати файл", - "changeFile": "Змінити", - "import": "Імпорт", - "importing": "Імпорт...", "apiKeysCount_one": "{{count}} ключ", "apiKeysCount_few": "{{count}} ключі", "apiKeysCount_many": "{{count}} ключів", - "apiKeysCount_other": "{{count}} ключа", - "apiKeysDocsLink": "Переглянути документацію", - "apiKeysCliHint": "Використовуйте API-ключ із Termix CLI для керування серверами з терміналу.", - "apiKeysCliLink": "Переглянути документацію CLI", - "newApiKey": "Новий API-ключ", - "apiKeyCreatedWarning": "Ключ створено — скопіюйте його зараз, він більше не буде відображатися.", - "apiKeyName": "Назва", - "apiKeyUser": "Користувач", - "apiKeySelectUser": "Оберіть користувача...", - "apiKeyExpiresAt": "Термін дії", - "createKey": "Створити ключ", - "apiKeyNoExpiry": "Без терміну дії", - "revokedBadge": "АНУЛЬОВАНО", - "authTypeDual": "Подвійна автентифікація", - "authTypeExternal": "Зовнішня", - "authTypeLocal": "Локальна", - "adminStatusAdministrator": "Адміністратор", - "adminStatusRegularUser": "Звичайний користувач", - "adminBadge": "АДМІН", - "systemBadge": "СИСТ", - "customBadge": "Корист.", - "youBadge": "ВИ", "sessionsActive_one": "{{count}} активний", "sessionsActive_few": "{{count}} активних", "sessionsActive_many": "{{count}} активних", - "sessionsActive_other": "{{count}} активних", - "sessionActive": "Активна: {{time}}", - "sessionExpires": "Термін: {{time}}", - "revokeAll": "Усі", - "revokeAllSessionsSuccess": "Усі сесії користувача анульовано", - "revokeAllSessionsFailed": "Не вдалося анулювати сесії", - "revokeSessionFailed": "Не вдалося анулювати сесію", - "addRole": "Додати роль", - "noCustomRoles": "Користувацькі ролі не визначено", - "removeRoleFailed": "Не вдалося видалити роль", - "assignRoleFailed": "Не вдалося призначити роль", - "userAdminAccess": "Адміністратор", - "userAdminAccessDesc": "Повний доступ до всіх налаштувань адміністратора", - "userRoles": "Ролі", - "revokeAllUserSessions": "Анулювати всі сесії", - "revokeAllUserSessionsDesc": "Примусовий повторний вхід на всіх пристроях", - "revoke": "Анулювати", - "deleteUserWarning": "Видалення цього користувача є незворотнім.", - "deleteUser": "Видалити {{username}}", - "deleting": "Видалення...", - "deleteUserFailed": "Не вдалося видалити користувача", - "deleteUserSuccess": "Користувача «{{username}}» видалено", - "deleteRoleSuccess": "Роль «{{name}}» видалено", - "revokeKeySuccess": "Ключ «{{name}}» анульовано", - "revokeKeyFailed": "Не вдалося анулювати ключ", - "copiedToClipboard": "Скопійовано в буфер обміну", - "done": "Готово", - "createUserTitle": "Створити користувача", - "createUserDesc": "Створіть новий локальний обліковий запис.", - "createUserUsername": "Ім'я користувача", - "createUserPassword": "Пароль", - "createUserPasswordHint": "Мінімум 6 символів.", - "createUserEnterUsername": "Введіть ім'я користувача", - "createUserSubmit": "Створити користувача", - "editUserTitle": "Керування користувачем: {{username}}", - "editUserDesc": "Редагування ролей, статусу адміністратора, сесій та налаштувань облікового запису.", - "editUserUsername": "Ім'я користувача", - "editUserAuthType": "Тип автентифікації", - "editUserAdminStatus": "Статус адміністратора", - "editUserUserId": "ID користувача", - "linkAccountTitle": "Пов'язати облікові записи", - "linkAccountDesc": "Об'єднати зовнішній обліковий запис {{username}} із наявним локальним обліковим записом.", - "linkAccountDescLocal": "Пов'язати локальний обліковий запис {{username}} із наявним обліковим записом, що використовується лише для зовнішньої автентифікації.", - "linkAccountWarningTitle": "Це призведе до:", - "linkAccountEffect1": "Видалення акаунта, доступний лише через зовнішній провайдер", - "linkAccountEffect2": "Додавання зовнішнього входу до цільового акаунта", - "linkAccountEffect3": "Дозвол входу як через зовнішній провайдер, так і за паролем", - "linkAccountTargetUsername": "Ім'я користувача локального акаунта", - "linkAccountTargetPlaceholder": "Введіть ім'я користувача локального акаунта для прив'язки", - "linkAccountExternalUsername": "Ім'я користувача зовнішнього акаунта", - "linkAccountExternalPlaceholder": "Введіть ім'я користувача акаунта, доступного лише через зовнішній провайдер, для об'єднання", - "linkAccountExternalNotFound": "Акаунт, доступний лише через зовнішній провайдер, з таким ім'ям користувача не знайдено", - "linkAccounts": "Прив'язати акаунти", - "linkAccountSuccess": "Акаунти успішно прив'язано", - "linkAccountFailed": "Не вдалося прив'язати акаунти", - "linkAccountInProgress": "Прив'язка...", - "unlinkAccountTitle": "Від'єднати зовнішній вхід", - "unlinkAccountDesc": "Видалити зовнішній вхід для {{username}}. Користувач зможе входити лише за паролем.", - "unlinkAccountWarning": "Це видалить зовнішній вхід з цього акаунта. У користувача має бути встановлений пароль, щоб він міг продовжувати входити.", - "unlinkAccount": "Від'єднати зовнішній вхід", - "unlinkAccountInProgress": "Від'єднання...", - "unlinkAccountSuccess": "Зовнішній вхід від'єднано", - "unlinkAccountFailed": "Не вдалося від'єднати зовнішній вхід", - "updateRegistrationFailed": "Не вдалося оновити налаштування реєстрації", - "updatePasswordLoginFailed": "Не вдалося оновити налаштування входу за паролем", - "updateSecondFactorAfterExternalLoginFailed": "Не вдалося оновити налаштування другого фактора", - "updatePasswordResetFailed": "Не вдалося оновити налаштування скидання пароля", - "sessionTimeoutRange2": "Тайм-аут сесії має бути від 1 до 720 годин", - "sessionTimeoutSaved": "Тайм-аут сесії збережено", - "sessionTimeoutSaveFailed": "Не вдалося зберегти тайм-аут сесії", - "monitoringIntervalInvalid": "Невірні значення інтервалу", - "monitoringSaved": "Налаштування моніторингу збережено", - "monitoringSaveFailed": "Не вдалося зберегти налаштування моніторингу", - "logLevelUpdateFailed": "Не вдалося оновити рівень логів", - "createUserRequired": "Ім'я користувача та пароль обов'язкові", - "createUserPasswordTooShort": "Пароль має містити щонайменше 6 символів", - "createUserSuccess": "Користувача «{{username}}» створено", - "createUserFailed": "Не вдалося створити користувача", - "updateAdminStatusFailed": "Не вдалося оновити статус адміністратора", - "allSessionsRevoked": "Всі сесії анульовано", - "revokeSessionsFailed": "Не вдалося анулювати сесії", - "manageUserData": "Керування даними користувача", - "backToUsers": "Назад до користувачів", - "manageTabAccount": "Акаунт", - "manageTabHosts": "Хости", - "manageTabCredentials": "Облікові дані", - "manageTabSessions": "Сесії", - "manageTabDanger": "Небезпечні дії", - "manageEditorBack": "Назад до даних {{username}}", - "dataLockedBadge": "ЗАБЛОКОВАНО", - "dataLockedNotice": "Дані {{username}} залишаються заблокованими до його наступного входу. Їх хости, облікові дані та снипети не можна переглядати або редагувати до того часу.", - "resetPasswordTitle": "Скинути пароль", - "resetPasswordExternalOnly": "Цей користувач входить через зовнішній провайдер і не має пароля.", - "resetPasswordPlaceholder": "Новий пароль", - "resetPasswordBtn": "Скинути", - "resetPasswordWorking": "Скидання...", - "resetPasswordSuccess": "Пароль скинуто", - "resetPasswordSuccessWiped": "Пароль скинуто. Зашифровані дані користувача видалено.", - "resetPasswordFailed": "Не вдалося скинути пароль", - "resetPasswordConfirmWipe": "{{username}} не входив у систему після оновлення шифрування, тому його дані неможливо відновити. Скидання зараз видалить його хости, облікові дані та снипети. Продовжити?", - "manageApiKeys": "Ключі API", - "apiKeyNamePlaceholder": "Назва ключа", - "apiKeyCopyNotice": "Скопіюйте цей ключ зараз, він більше не буде показано.", - "noApiKeysForUser": "Немає ключів API", - "apiKeyDeleteFailed": "Не вдалося видалити ключ API", - "exportUserData": "Експорт даних", - "exportUserDataDesc": "Завантажте хости, облікові дані та дані файлового менеджера цього користувача у форматі JSON. Таємні дані буде розшифровано.", - "exportUserDataSuccess": "Дані користувача експортовано", - "exportUserDataFailed": "Не вдалося експортувати дані користувача", "hostsCount_one": "{{count}} хост", "hostsCount_few": "{{count}} хости", "hostsCount_many": "{{count}} хостів", "hostsCount_other": "{{count}} хоста", - "addHostForUser": "Додати хост", - "noHostsForUser": "У цього користувача немає хостів", - "connectToHost": "Підключитися", - "deleteHostConfirm": "Видалити хост «{{name}}», що належить {{username}}?", - "hostDeletedSuccess": "Хост видалено", - "hostDeleteFailed": "Не вдалося видалити хост", "credentialsCount_one": "{{count}} облікові дані", "credentialsCount_few": "{{count}} облікові дані", "credentialsCount_many": "{{count}} облікових даних", "credentialsCount_other": "{{count}} облікових даних", - "addCredentialForUser": "Додати облікові дані", - "noCredentialsForUser": "У цього користувача немає облікових даних", - "deleteCredentialConfirm": "Видалити облікові дані «{{name}}», що належать {{username}}?", - "credentialDeletedSuccess": "Облікові дані видалено", - "credentialDeleteFailed": "Не вдалося видалити облікові дані", - "noSessionsForUser": "Немає активних сесій", - "deleteSuccessorLabel": "Передати хости та облікові дані", - "deleteSuccessorMe": "Мені (адміністратору, який видаляє)", - "deleteSuccessorNone": "Нікому, видалити їх", - "deleteSuccessorDesc": "Все, що цей користувач розділяв, продовжить працювати у нового власника; вибір «нікому» видаляє його хости, облікові дані та спільні ресурси.", - "deleteUserDangerDesc": "Назавжди видалити {{username}} та всі його дані (хости, облікові дані, фрагменти, історію). Цю дію неможливо скасувати.", - "deleteUserConfirm": "Назавжди видалити {{username}} та всі його дані?", - "deleteUserAdminBlocked": "Зніміть статус адміністратора перед видаленням цього користувача.", - "createRoleRequired": "Ім’я та відображуване ім’я є обов’язковими", - "createRoleSuccess": "Роль «{{name}}» створено", - "createRoleFailed": "Не вдалося створити роль", - "apiKeyNameRequired": "Назва ключа є обов’язковою", - "apiKeyUserRequired": "Ідентифікатор користувача є обов’язковим", - "apiKeyCreatedSuccess": "Ключ API «{{name}}» створено", - "apiKeyCreateFailed": "Не вдалося створити ключ API", - "exportSuccess": "Базу даних успішно експортовано", - "exportFailed": "Не вдалося експортувати базу даних", - "importSelectFile": "Спочатку виберіть файл", - "importCompleted": "Імпорт завершено: імпортовано {{total}} елементів, пропущено {{skipped}}", - "importFailed": "Не вдалося імпортувати: {{error}}", - "importError": "Не вдалося імпортувати базу даних", - "sectionHostDefaults": "Типові налаштування хостів", "rolePermissions": { "count_one": "{{count}} дозвіл", "count_few": "{{count}} дозволи", "count_many": "{{count}} дозволів", - "count_other": "{{count}} дозволу", - "editAction": "Редагувати дозволи", - "loadError": "Не вдалося завантажити каталог дозволів", - "saved": "Дозволи ролі збережено", - "saveError": "Не вдалося зберегти дозволи ролі", - "save": "Зберегти", - "saving": "Збереження...", - "pluginDisabled": "Плагін вимкнено", "groups": { "hosts": "Хости", "credentials": "Облікові дані", "admin": "Адміністрування" } - }, - "notificationPrivateEndpoints": "Дозволені приватні хости сповіщень", - "notificationPrivateEndpointsDesc": "Точні приватні хости, до яких можуть звертатися канали сповіщень. Розділяйте їх комами.", - "updateNotificationEndpointsFailed": "Не вдалося оновити список дозволених точок кінцевого доступу для сповіщень", - "secondFactorsSectionTitle": "Другі фактори", - "secondFactorsNone": "Немає зареєстрованих других факторів", - "secondFactorUnavailable": "Недоступно", - "resetSecondFactors": "Скинути другі фактори", - "resetSecondFactorsConfirm": "Видалити всі другі фактори для {{username}}? Вони зможуть увійти за допомогою пароля або SSO та зареєструватися знову.", - "secondFactorsResetSuccess": "Другі фактори скинуто", - "secondFactorsResetFailed": "Не вдалося скинути другі фактори", - "passwordLoginForced": "Вхід за паролем вимкнено, але жоден інший метод входу не увімкнено, тому поки що він залишається активним. Ніхто не залишиться без доступу.", - "sslNotRenewed": "Цей сертифікат ніхто не оновлює. Він діє до {{date}}. Увімкніть автоматичне оновлення в розділі ACME Certificates або завантажте новий сертифікат до цього часу.", - "sslSelfSigned": "Сертифікат, підписаний самим собою, створений Termix. Браузери видаватимуть попередження.", - "sslRenewedBy": "Автоматично оновлено за допомогою {{plugin}}", - "sslIssuer": "Видано {{issuer}}", - "sslNames": "Покриває {{names}}", - "sslManualTitle": "Завантажити сертифікат", - "updateExternalAutoProvisionFailed": "Не вдалося оновити налаштування автоматичного створення", - "hostTags": "Попередньо визначені мітки хостів", - "hostTagsDesc": "Мітки, які бачать усі користувачі як пропозиції в редакторі хоста. Натисніть Пробіл або Enter, щоб додати одну. Видалення мітки тут не видаляє її з хостів.", - "hostTagsError": "Не вдалося завантажити або зберегти пропозиції міток хостів.", - "revokeAllSessionsConfirm": "Вийти з акаунту {{username}} скрізь?", - "revokeSessionConfirm": "Вийти з цієї сесії?", - "revokeSession": "Вийти", - "deleteRoleConfirm": "Видалити роль {{name}}?", - "revokeKeyConfirm": "Анулювати API-ключ {{name}}?", - "revokeKey": "Анулювати" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Куди", - "who": "Хто", - "hostLabel": "Хост", - "hostPlaceholder": "192.168.1.1 або example.com", - "portLabel": "Порт", - "usernameLabel": "Ім'я користувача", - "usernamePlaceholder": "ім'я користувача", - "authLabel": "Автентифікація", - "passwordLabel": "Пароль", - "passwordPlaceholder": "пароль", - "privateKeyLabel": "Приватний ключ", - "privateKeyPlaceholder": "Вставте приватний ключ...", - "credentialLabel": "Облікові дані", - "credentialPlaceholder": "Оберіть збережені облікові дані", - "protocolLabel": "Протокол", - "domainLabel": "Домен", - "domainPlaceholder": "необов'язково", - "connectToAction": "Підключитися до {{name}}", - "sshProtocol": "SSH", - "noTarget": "Жодна встановлена програма не може підключатися до цього типу хоста" + "usernameLabel": "Ім'я користувача" }, "keybindings": { - "description": "Прив'яжіть клавіші до дій у терміналі та додатку або змініть вбудовані скорочення.", - "defaultsHeading": "Вбудовані скорочення", - "fixedHeading": "Скорочення додатка", - "fixed": { - "splitRight": "Розділити вправо", - "splitDown": "Розділити вниз", - "zoomPane": "Збільшити активну панель", - "navigatePane": "Переміщатися між панелями", - "nextTab": "Наступна вкладка", - "previousTab": "Попередня вкладка", - "jumpTab": "Перейти до вкладки", - "previousView": "Назад до попереднього вигляду бічної панелі", - "fullscreen": "Перемкнути повноекранний режим" - }, - "customHeading": "Користувацькі скорочення", - "addBinding": "Додати скорочення", - "addBindingTitle": "Додати скорочення", - "editBindingTitle": "Редагувати скорочення", - "loading": "Завантаження...", - "noCustomBindings": "Ще немає користувацьких скорочень", - "defaultBadge": "За замовчуванням", - "customizedBadge": "Налаштовано", - "customize": "Налаштувати", - "resetToDefault": "Скинути до типових", - "resetAllToDefaults": "Скинути все до типових", - "cancel": "Скасувати", - "saveBinding": "Зберегти скорочення", - "saveError": "Не вдалося зберегти клавіатурні скорочення", - "pressKeysToRecord": "Комбінація клавіш", - "pressKeysPlaceholder": "Натисніть та введіть клавіші", - "recording": "Натисніть клавіші...", - "comboRequiredError": "Спочатку натисніть комбінацію клавіш", - "conflictWarning": "Ця комбінація вже прив’язана до {{combo}}. Збереження призведе до виконання обох дій.", - "actionLabel": "Дія", "actionNextTab": "Перейти до наступної вкладки", "actionPreviousTab": "Перейти до попередньої вкладки", "actionOpenCommandPalette": "Відкрити швидкий пошук", - "actionReconnectSession": "Перепідключити поточну сесію", - "unavailableAction": "{{type}} (недоступно)", - "actionRequiredError": "Спочатку оберіть дію", - "deleteConfirm": "Видалити це прив’язування клавіш?", - "resetAllConfirm": "Скинути всі прив’язки клавіш до типових?" + "actionReconnectSession": "Перепідключити поточну сесію" }, "userProfile": { - "storageModeLocal": "Браузер", - "storageModeCloud": "База даних", - "storageModeDescription": "Браузер зберігає налаштування лише в цьому браузері. База даних синхронізується з сервером і завантажується на будь-якому пристрої.", - "resetToDefaults": "Скинути до типових", - "resetToDefaultsSuccess": "Налаштування скинуто до типових.", - "storageModeSwitch": "Зберігання налаштувань", - "sectionAccount": "Обліковий запис", - "desktopProfileTitle": "Лише на цьому пристрої", - "desktopProfileDescription": "Цей профіль існує лише на цьому пристрої та входить самостійно. Прив’яжіть його до сервера Termix, щоб використовувати ті самі хости та налаштування на кожному пристрої.", - "sectionInterface": "Інтерфейс", - "interfacePresetDesc": "Як багато деталей показує Termix. Кожна функція залишається доступною.", "preset_simple": "Простий", "preset_simple_desc": "Лише основне.", "preset_balanced": "Збалансований", "preset_balanced_desc": "Стандартний макет.", "preset_advanced": "Розширений", "preset_advanced_desc": "Все увімкнено, щільно упаковано.", - "presetClearOverrides": "Скинути все", - "presetOverridesTitle": "Налаштовано", - "presetRevertArea": "Скасувати зміни", - "presetConfirmTitle": "Перейти до {{preset}}?", - "presetConfirmDesc": "Це скине ваш бічний панель, навігацію, макет панелі керування, панель інструментів терміналу та вигляд файлового менеджера. Ваші хости, облікові дані та головна сторінка не торкнуться.", - "presetConfirmApply": "Застосувати шаблон", - "runSetupAgainDesc": "Пройдіть налаштування першого запуску ще раз.", - "runSetupAgainButton": "Запустити налаштування", "uiArea_chrome": "Інтерфейс програми", "uiArea_hostList": "Список хостів", "uiArea_credentialList": "Список облікових даних", @@ -1671,128 +1151,15 @@ "uiArea_terminal": "Термінал", "uiArea_fileManager": "Файловий менеджер", "uiArea_hostEditor": "Редактор хоста", - "sectionAppearance": "Зовнішній вигляд", - "sectionSecurity": "Безпека", - "sectionApiKeys": "Ключі API", - "sectionData": "Дані", - "usernameLabel": "Ім’я користувача", - "roleLabel": "Роль", - "roleAdministrator": "Адміністратор", - "authMethodLabel": "Метод автентифікації", - "authMethodLocal": "Локальний", - "twoFaLabel": "2FA", - "twoFaOn": "Увімкнено", - "twoFaOff": "Вимкнено", - "versionLabel": "Версія", - "cliTitle": "Termix CLI", - "cliDescription": "Відкривайте термінали, виконуйте команди та переміщуйте файли з власної оболонки.", - "cliLearnMore": "Детальніше", - "deleteAccount": "Видалити обліковий запис", - "deleteAccountDescription": "Назавжди видалити ваш обліковий запис", - "deleteButton": "Видалити", - "deleteAccountPermanent": "Ця дія є незворотною.", - "deleteAccountWarning": "Усі сесії, хости, облікові дані та налаштування будуть назавжди видалені.", - "confirmPasswordDeletePlaceholder": "Введіть пароль для підтвердження", "languageLabel": "Мова", "themeLabel": "Тема", "fontSizeLabel": "Розмір шрифту", "interfaceFontLabel": "Шрифт інтерфейсу", "interfaceFontDescription": "Змінює шрифт інтерфейсу програми. Профілі терміналу зберігають власні налаштування шрифту.", "accentColorLabel": "Акцентний колір", - "keyboardShortcuts": "Клавіатурні скорочення", - "keyboardShortcutsDescription": "Налаштуйте скорочення для копіювання, вставки та команд у терміналі", - "manageShortcuts": "Керувати", - "commandPalette": "Палітра команд", - "commandPaletteDesc": "Увімкнути клавіатурне скорочення", - "reopenTabsOnLogin": "Відновлювати вкладки при вході", - "reopenTabsOnLoginDesc": "Відновлюйте відкриті вкладки при вході або оновленні сторінки, навіть з іншого пристрою", - "confirmTabClose": "Підтверджувати закриття вкладки", - "confirmTabCloseDesc": "Запитувати підтвердження перед закриттям вкладок терміналу", - "showTabNumbers": "Показувати номери вкладок", - "showTabNumbersDesc": "Відображати номер на кожній вкладці для легшого розрізнення", - "settingsAppRail": "Панель додатків", - "sidebarSettingsMoved": "Налаштування відображення бічної панелі хостів переміщені до панелі «Налаштувати бічну панель», яка відкривається з панелі інструментів «Хости».", - "showHostTags": "Показувати теги хостів", - "showHostTagsDesc": "Відображати теги у списку хостів", - "statusColors": "Реальні кольори статусу", - "statusColorsDesc": "Використовувати зелений/червоний для статусу онлайн/офлайн замість акцентного кольору", - "pinAppRail": "Закріпити панель додатків", - "pinAppRailDesc": "Залишати ліву бічну панель додатків завжди розгорнутою замість розгортання при наведенні", - "expandAppRailOnHover": "Розгортати панель додатків при наведенні", - "expandAppRailOnHoverDesc": "Дозволити розгортання лівої бічної панелі додатків при наведенні вказівника", - "appRailHoverPushesContent": "Зсувати контент при розгортанні", - "appRailHoverPushesContentDesc": "Залишати місце для розгорнутої панелі замість того, щоб накладати її на сторінку. Відкриті сесії, наприклад віддалений робочий стіл, щоразу змінюватимуть розмір", - "showPinAppRailButton": "Показувати кнопку закріплення панелі додатків", - "showPinAppRailButtonDesc": "Показувати кнопку для закріплення панелі додатків у відкритому стані. Вимкнено за замовчуванням.", - "settingsNavigation": "Навігація", - "navigationTabsDesc": "Оберіть, які вкладки відображатимуться на панелі додатків", - "settingsUpdates": "Оновлення", - "disableUpdateChecks": "Вимкнути перевірку оновлень", - "disableUpdateChecksDesc": "Припинити перевірку наявності оновлень", - "changePassword": "Змінити пароль", - "currentPasswordLabel": "Поточний пароль", - "currentPasswordPlaceholder": "Поточний пароль", - "newPasswordLabel": "Новий пароль", - "newPasswordPlaceholder": "Новий пароль", - "confirmPasswordLabel": "Підтвердити новий пароль", - "confirmPasswordPlaceholder": "Підтвердити новий пароль", - "updatePassword": "Оновити пароль", - "createApiKeyTitle": "Створити API-ключ", - "createApiKeyDescription": "Згенеруйте новий API-ключ для програмного доступу.", - "apiKeyNameLabel": "Назва", - "apiKeyNamePlaceholder": "напр. CI Pipeline", - "expiryDateLabel": "Дата закінчення", - "optional": "необов'язково", - "cancel": "Скасувати", - "createKey": "Створити ключ", - "apiKeyCreatedWarning": "Ключ створено — скопіюйте його зараз, він більше не відобразиться.", - "copyApiKey": "Копіювати API-ключ", - "copiedToClipboard": "Скопійовано в буфер обміну", "apiKeyCount_one": "{{count}} ключ", "apiKeyCount_few": "{{count}} ключі", "apiKeyCount_many": "{{count}} ключів", - "apiKeyCount_other": "{{count}} ключа", - "newKey": "Новий ключ", - "noApiKeys": "Ще немає API-ключів.", - "apiKeyActive": "Активний", - "apiKeyUsageHint": "Додайте свій ключ у", - "apiKeyUsageHintHeader": "заголовок.", - "apiKeyPermissionsHint": "Ключі успадковують дозволи користувача, який їх створив.", - "exportData": "Експортувати мої дані", - "exportDataDesc": "Завантажте резервну копію ваших хостів, облікових даних та налаштувань для перенесення на інший пристрій", - "export": "Експорт", - "exporting": "Експортування...", - "importData": "Імпортувати мої дані", - "importDataDesc": "Відновіть свої хости, облікові дані та налаштування з файлу резервної копії .sqlite", - "importDataSelected": "Вибрано: {{name}}", - "selectFile": "Обрати файл", - "changeFile": "Змінити", - "import": "Імпорт", - "importing": "Імпортування...", - "exportSuccess": "Дані успішно експортовано", - "exportFailed": "Помилка експорту даних", - "importSelectFile": "Спочатку оберіть файл", - "importCompleted": "Імпорт завершено: імпортовано {{total}} елементів, пропущено {{skipped}}", - "importFailed": "Помилка імпорту: {{error}}", - "roleUser": "Користувач", - "authMethodDual": "Подвійна автентифікація", - "authMethodExternal": "Зовнішня", - "done": "Готово", - "apiKeyNameRequired": "Назва ключа є обов'язковою", - "apiKeyCreated": "API-ключ «{{name}}» створено", - "apiKeyCreateFailed": "Не вдалося створити API-ключ", - "apiKeyUser": "Користувач", - "apiKeyExpires": "Закінчується", - "apiKeyRevoked": "API-ключ «{{name}}» анульовано", - "apiKeyRevokeFailed": "Не вдалося анулювати API-ключ", - "passwordFieldsRequired": "Потрібно вказати поточний та новий паролі", - "passwordMismatch": "Паролі не збігаються", - "passwordTooShort": "Пароль має містити щонайменше 6 символів", - "passwordUpdated": "Пароль успішно оновлено", - "passwordUpdateFailed": "Не вдалося оновити пароль", - "deletePasswordRequired": "Для видалення облікового запису потрібно ввести пароль", - "deleteFailed": "Не вдалося видалити обліковий запис", - "deleting": "Видалення...", "colorPickerTooltip": "Відкрити палітру кольорів", "themeSystem": "Системна", "themeLight": "Світла", @@ -1803,18 +1170,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Увійдено в {{server}}", - "linkedProfileDescription": "Цей пристрій використовує ваш обліковий запис на сервері та зберігає копію ваших даних, тому працює навіть без інтернету.", - "manageSync": "Керування синхронізацією", - "setUpSync": "Підключити до сервера", - "settingsTabsAndShortcuts": "Вкладки та скорочення", - "onBetaTitle": "Ви використовуєте бета-версію", - "onBetaDescription": "Дякуємо за тестування. Повідомте нам про помилки.", - "tryBetaTitle": "Спробуйте нові функції раніше", - "tryBetaDescription": "Приєднуйтесь до бета-програми в розділі Оновлення.", - "sendBetaFeedback": "Надіслати відгук про бета-версію", - "openUpdates": "Оновлення" + "themeGruvbox": "Gruvbox" } } }, @@ -2091,8 +1447,7 @@ "hasDependents": "{{name}} потрібен для {{list}}. Спочатку вимкніть або видаліть їх.", "missingDependencies": "{{name}} потребує {{list}}, який не встановлено.", "consentChanged": "Список дозволів цього плагіна змінився з моменту вашого останнього перегляду. Перевірте список ще раз.", - "upload": "Не вдалося прочитати {{name}}: {{error}}", - "developerMode": "Не вдалося змінити режим розробника: {{error}}" + "upload": "Не вдалося прочитати {{name}}: {{error}}" }, "data": { "title": "Збережені дані", @@ -2231,13 +1586,7 @@ "browsePlugins": "Переглянути плагіни", "loading": "Завантаження", "developer": { - "title": "Режим розробника плагінів", - "hint": "Дозволяє адміністраторам встановлювати плагіни з файлу .tmxplug на вкладці «Плагіни», без перевірки реєстром. Використовуйте це для створення та тестування власних плагінів.", - "enableTitle": "Увімкнути режим розробника?", - "enableBody": "Адміністратори зможуть встановлювати плагіни з файлів, які Termix не перевіряв. Плагін може виконувати будь-які дії, дозволені його можливостями, тому увімкніть це лише під час розробки або тестування плагінів.", - "enable": "Увімкнути", - "installFromFile": "Встановити з файлу", - "signedOnly": "Встановлено TERMIX_REQUIRE_SIGNED_PLUGINS, тому встановлення з файлу заблоковано." + "installFromFile": "Встановити з файлу" }, "count": { "downloads_one": "{{formatted}} завантаження", @@ -2277,71 +1626,7 @@ "secretSet": "Встановлено", "secretNotSet": "Не встановлено", "secretReplace": "Замінити", - "pluginSettingsSaved": "Налаштування збережено", - "pluginSettingsInvalid": "Деякі налаштування не вдалося зберегти. Перевірте виділені поля.", - "pluginSettingsSaveFailed": "Не вдалося зберегти налаштування", - "pluginSettingsLoadFailed": "Не вдалося завантажити налаштування", - "featureUnavailable": "{{name}} зараз недоступний. Ці налаштування збережено, але не набудуть чинності.", - "account": "Обліковий запис", - "security": "Безпека", - "apiKeys": "API-ключі", - "data": "Дані та синхронізація", - "interface": "Інтерфейс", - "appearance": "Зовнішній вигляд", - "keybindings": "Комбінації клавіш", - "adminGeneral": "Загальні", - "adminUsers": "Користувачі", - "adminSessions": "Сесії", - "adminRoles": "Ролі", - "adminHostDefaults": "Налаштування хоста за замовчуванням", - "adminBranding": "Брендинг", - "adminDatabase": "База даних", - "adminSsl": "SSL", - "adminApiKeys": "API-ключі", - "adminAuditLog": "Журнал аудиту", - "bandYou": "Ваш обліковий запис", - "bandApp": "Цей додаток", - "bandPlugins": "Плагіни", - "bandInstance": "Цей сервер", - "searchPlaceholder": "Пошук налаштувань", - "noResults": "Налаштувань не знайдено.", - "pages": "Сторінки", - "instanceSettings": "Налаштування сервера", - "nothingHere": "Тут нічого налаштовувати.", - "searchPage": "Пошук на цій сторінці", - "noPageMatches": "Нічого на цій сторінці не відповідає.", - "updates": { - "title": "Оновлення", - "betaProgram": "Бета-програма", - "betaIntro": "Бета-версії — це ранні збірки наступної версії Termix. Вони виходять у вівторки та п’ятниці, коли є щось нове для випробування. У них можуть бути помилки, і ваші відгуки допомагають зробити стабільну версію кращою.", - "termixBetas": "Бета-версії Termix", - "termixBetasHint": "Повідомляти про нові бета-версії, а не лише про стабільні релізи.", - "runningBetaBuild": "Ви використовуєте бета-збірку. Щоб повернутися до стабільної версії, перейдіть на стабільний образ або інсталятор.", - "howToInstall": "Як отримати бета-версію", - "desktopInstall": "Завантажте бета-інсталятор і встановіть його поверх поточної версії.", - "downloadBeta": "Завантажити {{version}}", - "dockerInstall": "Змініть тег образу на бета-версію та перезапустіть контейнер:", - "copy": "Копіювати", - "copied": "Скопійовано", - "copyFailed": "Не вдалося скопіювати", - "learnMore": "Дізнатися більше про бета-версії", - "feedback": "Відгуки", - "feedbackHint": "Знайшли помилку чи маєте ідею? Ваше повідомлення надійде розробникам із зазначеною версією.", - "sendFeedback": "Надіслати відгук про бета-версію", - "releases": "Релізи", - "thisVersion": "Поточна версія", - "newestStable": "Остання стабільна", - "newestBeta": "Остання бета-версія", - "noRelease": "Наразі немає", - "pluginBetas": "Бета-версії плагінів", - "pluginBetasIntro": "Кожен плагін може використовувати бета-версії самостійно. Щоб випробувати, відкрийте плагін і натисніть «Спробувати бета-версію».", - "openPlugins": "Відкрити плагіни", - "waitingForStable": "Повернуто до стабільної версії. Залишається на {{version}}, доки не з’явиться новіша стабільна версія.", - "backToStable": "Повернутися до стабільної версії", - "allPluginsBeta": "Використовувати бета-версії для всіх плагінів", - "allPluginsStable": "Повернути всі плагіни до стабільних версій", - "saveFailed": "Не вдалося зберегти зміни" - } + "featureUnavailable": "{{name}} зараз недоступний. Ці налаштування збережено, але не набудуть чинності." }, "managerCard": { "refresh": "Оновити", @@ -2351,11 +1636,6 @@ "filter": "Фільтр..." }, "sync": { - "server": "Сервер Termix", - "account": "Обліковий запис", - "status": "Стан", - "never": "ніколи", - "justNow": "щойно", "minutesAgo_one": "{{count}} хвилина тому", "minutesAgo_few": "{{count}} хвилини тому", "minutesAgo_many": "{{count}} хвилин тому", @@ -2364,76 +1644,11 @@ "hoursAgo_few": "{{count}} години тому", "hoursAgo_many": "{{count}} годин тому", "hoursAgo_other": "{{count}} годин тому", - "actionFailed": "Це не спрацювало. Спробуйте ще раз.", - "unlinkedTitle": "Лише на цьому пристрої", - "unlinkedBody": "Termix працює самостійно на цьому пристрої. Підключіть його до сервера Termix, щоб синхронізувати всі дані.", - "unlinkedPointHosts": "Ваші хости, облікові дані, фрагменти та налаштування будуть доступні на кожному пристрої.", - "unlinkedPointOffline": "Все продовжує працювати, коли сервер недоступний, і синхронізується пізніше.", - "unlinkedPointAccount": "Ви вхідите за допомогою облікового запису сервера, а хости, якими з вами поділилися інші, також відображатимуться тут.", - "linkButton": "Підключити до сервера", - "state": { - "syncing": "Синхронізація", - "offline": "Сервер недоступний", - "error": "Синхронізацію зупинено", - "signedOut": "Вийшли з системи", - "synced": "Синхронізовано {{time}}" - }, "pending_one": "{{count}} зміна очікує на синхронізацію", "pending_few": "{{count}} зміни очікують на синхронізацію", "pending_many": "{{count}} змін очікують на синхронізацію", "pending_other": "{{count}} змін очікують на синхронізацію", - "signInAgain": "Увійти знову", - "syncNow": "Синхронізувати зараз", - "unlink": "Від’єднати", - "unlinked": "Цей пристрій більше не підключено", - "unlinkTitle": "Роз'єднати цей пристрій?", - "unlinkDescription": "Синхронізація зупиниться, і ви вийдете з сервера. Хости, які інші користувачі поділилися з вами, буде видалено з цього пристрою в будь-якому разі.", - "unlinkKeepTitle": "Залишити мої дані тут", - "unlinkKeepBody": "Ваші хости, облікові дані та налаштування залишаться на цьому пристрої і продовжать працювати самостійно.", - "unlinkRemoveTitle": "Видалити синхронізовані дані", - "unlinkRemoveBody": "Все, що прийшло з сервера, буде видалено з цього пристрою. Залишаться лише хости, які зберігаються виключно на цьому пристрої.", - "conflictsTitle": "Конфлікти", - "conflictsDescription": "Ці елементи були змінені тут і на сервері одночасно. Використовується версія з сервера. Натисніть «Залишити мою», щоб надіслати свою версію на сервер.", - "keepMine": "Залишити мою", - "keepServer": "Залишити серверну", - "errorsTitle": "Не синхронізовано", - "errorsDescription": "Сервер не прийняв ці зміни. Вони залишаться на цьому пристрої.", - "errorPermission": "Ваш обліковий запис на сервері не має дозволу на внесення цієї зміни.", - "retry": "Спробувати ще раз", - "whatSyncs": "Що синхронізується", - "whatSyncsDescription": "Вимкніть те, що хочете зберігати лише на цьому пристрої.", - "coreGroup": "Termix", - "notOnServer": "На сервері цього немає", - "notOnDevice": "Ще немає на цьому пристрої", - "localOnlyHint": "Ви також можете зберігати окремі хости або папки лише на цьому пристрої через їхні налаштування.", - "originTitle": "Початок підключення", - "originDescription": "Підключайтеся до хостів з цього пристрою або через сервер. Це можна змінити для кожного хоста окремо.", - "originLocal": "Цей пристрій", - "originRemote": "Сервер", - "entities": { - "hosts": "Хости", - "sshCredentials": "Облікові дані", - "sshFolders": "Папки", - "userPreferences": "Налаштування", - "pluginUserSettings": "Налаштування плагінів", - "sharedHosts": "Хости, поділені з вами", - "sharedCredentials": "Облікові дані, поділені з вами", - "vaultProfiles": "Профілі Vault", - "snippetFolders": "Папки фрагментів", - "snippets": "Фрагменти", - "dashboardServiceLinks": "Посилання на сервіси", - "homepageItems": "Елементи домашньої сторінки", - "networkTopology": "Схема мережі", - "workspaces": "Робочі області", - "hostDefaults": "Типові налаштування хостів", - "hostDefaultsAdmin": "Типові налаштування хостів сервера", - "aiProviders": "Постачальники ШІ", - "homepageLayouts": "Макети домашньої сторінки", - "accountProfile": "Профіль облікового запису" - }, "proxy": { - "title": "Зворотний проксі", - "description": "Потрібно лише тоді, коли перед вашим сервером стоїть щось на кшталт Cloudflare Access або сторінка входу.", "headersTitle": "Додаткові заголовки", "headersHint": "Надсилаються з кожним запитом до сервера, наприклад, токен сервісу Cloudflare Access.", "headerName": "Назва заголовка", @@ -2446,8 +1661,7 @@ "username": "Ім'я користувача", "password": "Пароль", "allowInvalidCertificate": "Довіряти сертифікату самопідпису", - "allowInvalidCertificateHint": "Тільки для вашого власного сервера, якщо його сертифікат не видано відомим центром сертифікації.", - "saved": "Збережено" + "allowInvalidCertificateHint": "Тільки для вашого власного сервера, якщо його сертифікат не видано відомим центром сертифікації." }, "problems": { "invalidUrl": "Це не схоже на веб-адресу.", @@ -2489,6 +1703,27 @@ "linking": "Зв'язуємо та запускаємо першу синхронізацію...", "linked": "Зв'язано. Ваші дані синхронізуються.", "signedInAgain": "Увійдено. Синхронізація відновлена." + }, + "entities": { + "hosts": "Хости", + "sshCredentials": "Облікові дані", + "sshFolders": "Папки", + "userPreferences": "Налаштування", + "pluginUserSettings": "Налаштування плагінів", + "sharedHosts": "Хости, поділені з вами", + "sharedCredentials": "Облікові дані, поділені з вами", + "vaultProfiles": "Профілі Vault", + "snippetFolders": "Папки фрагментів", + "snippets": "Фрагменти", + "dashboardServiceLinks": "Посилання на сервіси", + "homepageItems": "Елементи домашньої сторінки", + "networkTopology": "Схема мережі", + "workspaces": "Робочі області", + "hostDefaults": "Типові налаштування хостів", + "hostDefaultsAdmin": "Типові налаштування хостів сервера", + "aiProviders": "Постачальники ШІ", + "homepageLayouts": "Макети домашньої сторінки", + "accountProfile": "Профіль облікового запису" } }, "hostDefaults": { @@ -2505,37 +1740,18 @@ "resetTitle": "Цей хост встановлює власне значення. Натисніть, щоб знову використовувати значення за замовчуванням із {{source}}", "clearTitle": "Встановлено на цьому рівні. Натисніть, щоб очистити та використовувати {{source}} замість цього", "inheritedTitle": "Використовує значення за замовчуванням із {{source}}", - "titleAdmin": "Значення за замовчуванням для хостів сервера", - "titleUser": "Мої значення за замовчуванням для хостів", - "titleFolder": "Значення за замовчуванням для теки: {{name}}", - "descriptionAdmin": "Значення за замовчуванням для кожного хоста на цьому сервері. Користувач, тека або сам хост можуть встановити інше значення. Змініть поле, щоб встановити значення тут, або очистіть його, щоб залишити невстановленим.", - "descriptionUser": "Значення за замовчуванням для всіх ваших хостів, що перебивають серверні. Тека або сам хост можуть встановити інше значення. Змініть поле, щоб встановити значення тут, або очистіть його, щоб залишити невстановленим.", - "descriptionFolder": "Значення за замовчуванням для хостів у цій теці та її підтеках, що перебивають ваші власні. Хост може встановити інше значення. Змініть поле, щоб встановити значення тут, або очистіть його, щоб залишити невстановленим.", - "save": "Зберегти значення за замовчуванням", "saved_one": "Значення за замовчуванням збережено. Оновлено {{count}} хост.", "saved_few": "Значення за замовчуванням збережено. Оновлено {{count}} хости.", "saved_many": "Значення за замовчуванням збережено. Оновлено {{count}} хостів.", "saved_other": "Значення за замовчуванням збережено. Оновлено {{count}} хостів.", - "savedInBackground": "Значення за замовчуванням збережено. Хости оновлюються у фоновому режимі.", "appliedToHosts_one": "{{count}} хост оновлено новими значеннями за замовчуванням.", "appliedToHosts_few": "{{count}} хости оновлено новими значеннями за замовчуванням.", "appliedToHosts_many": "{{count}} хостів оновлено новими значеннями за замовчуванням.", "appliedToHosts_other": "{{count}} хостів оновлено новими значеннями за замовчуванням.", - "saveFailed": "Не вдалося зберегти значення за замовчуванням", - "loadFailed": "Не вдалося завантажити значення за замовчуванням", - "confirmTitle": "Зберегти значення за замовчуванням?", "confirmChanges_one": "{{count}} хост використовує ці значення за замовчуванням і буде змінено.", "confirmChanges_few": "{{count}} хости використовують ці значення за замовчуванням і будуть змінено.", "confirmChanges_many": "{{count}} хостів використовують ці значення за замовчуванням і будуть змінено.", "confirmChanges_other": "{{count}} хостів використовують ці значення за замовчуванням і будуть змінено.", - "confirmNoChanges": "Існуючі хости не змінюються. Нові хости почнуть з цих значень за замовчуванням.", - "menuMyDefaults": "Мої значення за замовчуванням для хостів", - "folderDefaultsAction": "Значення за замовчуванням для теки", - "adminSectionDescription": "Встановіть значення за замовчуванням, якими керується кожен хост на цьому сервері, для кожної налаштування хоста, включаючи налаштування кожного плагіна. Користувачі та теки можуть встановити свої власні значення, а будь-який хост може використовувати своє власне значення.", - "editServerDefaults": "Редагувати значення за замовчуванням сервера", - "resetMenu": "Скинути", - "resetAll": "Все до значень за замовчуванням", - "resetCore": "Підключення та SSH до значень за замовчуванням", "resetDone_one": "{{count}} хост тепер використовує значення за замовчуванням.", "resetDone_few": "{{count}} хости тепер використовують значення за замовчуванням.", "resetDone_many": "{{count}} хостів тепер використовують значення за замовчуванням.", @@ -2551,38 +1767,11 @@ "fields": { "secretSaved": "Збережено. Введіть текст, щоб замінити його." }, - "sharing": { - "revokeConfirm": "Видалити доступ для {{name}}?", - "revoke": "Видалити доступ" - }, "manage": { - "searchSettings": "Пошук налаштувань", - "noMatchingSettings": "Налаштувань не знайдено.", - "sections": "Розділи", - "sectionNeedsAttention": "Тут щось потребує уваги", "needsAttention_one": "Одна річ потребує уваги.", "needsAttention_few": "{{count}} речі потребують уваги.", "needsAttention_many": "{{count}} речей потребують уваги.", "needsAttention_other": "{{count}} речей потребує уваги.", - "bandHost": "Хост", - "bandFeatures": "Протоколи та плагіни", - "bandCredential": "Облікові дані", - "sshConnection": "SSH-підключення", - "errorAddressRequired": "Необхідно вказати адресу.", - "errorPortRange": "Використовуйте порт від 1 до 65535.", - "defaults": "Значення за замовчуванням", - "searchHosts": "Пошук хостів", - "searchCredentials": "Пошук облікових даних", - "searchDefaults": "Пошук значень за замовчуванням", - "addCredential": "Додати облікові дані", - "nothingMatches": "Нічого не знайдено", - "nothingYet": "Тут ще нічого немає", - "emptyHostsHint": "Додайте хост, і він з’явиться тут, у тій папці, яку ви йому призначите.", - "emptyCredentialsHint": "Збережені облікові дані можна використовувати будь-якому хосту.", - "collapse": "Згорнути", - "expand": "Розгорнути", - "cannotBeUndone": "Цю дію неможливо скасувати.", - "hostNotFound": "Не вдалося знайти цей хост. Спробуйте оновити список.", "hostCount_one": "{{count}} хост", "hostCount_few": "{{count}} хости", "hostCount_many": "{{count}} хостів", @@ -2590,14 +1779,7 @@ "credentialCount_one": "{{count}} облікові дані", "credentialCount_few": "{{count}} облікові дані", "credentialCount_many": "{{count}} облікових даних", - "credentialCount_other": "{{count}} облікових даних", - "newHost": "Новий хост", - "newCredential": "Нові облікові дані", - "advanced": "Додатково", - "pickHost": "Виберіть хост для редагування", - "pickCredential": "Виберіть облікові дані для редагування", - "pickDefaults": "Виберіть рівень значень за замовчуванням для редагування", - "pickHint": "Усе, що стосується підключення, знаходиться тут, згруповане для зручного пошуку." + "credentialCount_other": "{{count}} облікових даних" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/vi_VN.json b/src/ui/locales/translated/vi_VN.json index 2a1802969..d4ede9625 100644 --- a/src/ui/locales/translated/vi_VN.json +++ b/src/ui/locales/translated/vi_VN.json @@ -141,7 +141,6 @@ "continue": "Tiếp tục", "error": "Lỗi", "unsavedChanges": "Thay đổi chưa lưu", - "more": "Thêm", "loading": "Đang tải...", "host": "Máy chủ", "selectHost": "Chọn một máy chủ...", @@ -154,7 +153,6 @@ "cancel": "Hủy", "username": "Tên đăng nhập", "login": "Đăng nhập", - "logout": "Đăng xuất", "register": "Đăng ký", "password": "Mật khẩu", "confirmPassword": "Xác nhận mật khẩu", @@ -165,8 +163,6 @@ "rename": "Đổi tên", "edit": "Chỉnh sửa", "confirm": "Xác nhận", - "next": "Tiếp theo", - "previous": "Trước đó", "refresh": "Làm mới", "language": "Ngôn ngữ", "backendReconnected": "Đã khôi phục kết nối máy chủ", @@ -234,10 +230,6 @@ "pluginsDocsLink": "Đọc về từng plugin" }, "desktopUpdates": { - "title": "Ứng dụng máy tính để bàn", - "mode": "Cập nhật", - "modeHint": "Cách ứng dụng này nhận các phiên bản mới.", - "manualModeHint": "Bản cài đặt này không thể tự động cập nhật, nên Termix chỉ thông báo cho bạn khi có phiên bản mới.", "modeAutomatic": "Tự động", "modePrompt": "Hỏi trước", "modeNever": "Không bao giờ", @@ -247,15 +239,6 @@ "onboardingTitle": "Cập nhật ứng dụng", "onboardingBody": "Ứng dụng máy tính để bàn giờ có thể tự động cập nhật. Chọn cách bạn muốn nhận các phiên bản mới. Bạn có thể thay đổi điều này sau trong Cài đặt, mục Cập nhật.", "onboardingManual": "Bản cài đặt ứng dụng này được cài đặt theo cách không thể tự động cập nhật, nên Termix sẽ thông báo cho bạn khi có phiên bản mới kèm theo liên kết tải xuống.", - "status": "Phiên bản {{version}}", - "statusIdle": "Chưa kiểm tra", - "statusChecking": "Đang kiểm tra cập nhật", - "statusAvailable": "Phiên bản {{version}} đã sẵn sàng", - "statusDownloading": "Đang tải xuống {{version}} ({{progress}}%)", - "statusReady": "Phiên bản {{version}} đã sẵn sàng. Khởi động lại để cài đặt.", - "statusUpToDate": "Bạn đang dùng phiên bản mới nhất", - "statusError": "Không thể kiểm tra cập nhật. Vui lòng thử lại sau.", - "checkNow": "Kiểm tra ngay", "download": "Tải xuống", "restart": "Khởi động lại ngay", "later": "Để sau", @@ -269,26 +252,11 @@ "terminal": "Terminal", "close": "Đóng", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "Sao chép mật khẩu", - "copySudoPassword": "Sao chép mật khẩu Sudo", - "passwordCopied": "Đã sao chép mật khẩu vào clipboard", - "failedToCopyPassword": "Không thể sao chép mật khẩu", - "refreshTab": "Làm mới kết nối", - "renameTab": "Đổi tên tab", "dashboard": "Bảng điều khiển", "quickConnect": "Kết nối nhanh", - "openAsTabHint": "Ctrl+click hoặc click chuột giữa để mở dưới dạng tab", - "openAsTab": "Mở dưới dạng tab", - "openInRightDock": "Mở trong dock bên phải", - "closeRightDock": "Đóng dock bên phải", - "toggleRightDock": "Bật/tắt dock bên phải", "hosts": "Hosts", "credentials": "Thông tin đăng nhập", "connections": "Kết nối", - "keepSideMenuOpen": "Giữ menu mở", - "collapseSideMenu": "Thu gọn menu", - "roleAdministrator": "Quản trị viên", - "roleUser": "Người dùng", "sync": "Đồng bộ", "reconnectDisconnectedTerminals": "Kết nối lại tất cả các terminal đã ngắt kết nối", "reconnectingTerminals_other": "Đang kết nối lại {{count}} terminal", @@ -296,29 +264,10 @@ "reconnectTerminalsFailed_other": "Không thể bắt đầu kết nối lại {{count}} terminal", "fullscreenUnsupported": "Trình duyệt này không hỗ trợ chế độ toàn màn hình", "fullscreenFailed": "Không thể chuyển đổi chế độ toàn màn hình", - "resetSidebarWidth": "Đặt lại chiều rộng", - "collapseSidebar": "Thu gọn thanh bên", - "openSidebar": "Mở thanh bên", "confirmCloseHost": "Đóng {{host}}?", - "enterFullscreen": "Vào chế độ toàn màn hình (Ctrl+Shift+F)", - "exitFullscreen": "Thoát chế độ toàn màn hình (Ctrl+Shift+F)", - "group": { - "objects": "Của bạn", - "tools": "Công cụ", - "system": "Hệ thống" - }, - "searchEverything": "Tìm kiếm máy chủ, tab và hành động", - "search": "Tìm kiếm", "hiddenCount_other": "{{count}} mục ẩn", - "showInRail": "Hiển thị trong thanh bên", - "moveUp": "Di chuyển lên", - "moveDown": "Di chuyển xuống", - "resetRailOrder": "Đặt lại thứ tự", - "hideFromRail": "Ẩn khỏi thanh bên", - "openSettings": "Mở cài đặt", "settings": "Cài đặt", "manage": "Quản lý", - "mobileNavigation": "Điều hướng", "plugins": "Plugin" }, "hosts": { @@ -904,35 +853,14 @@ "importSummary": "Nhập xong: {{imported}} đã nhập, {{updated}} đã cập nhật, {{failed}} thất bại", "importHostsFailed": "Không thể nhập máy chủ" }, - "commandPalette": { - "searchPlaceholder": "Tìm kiếm máy chủ, lệnh hoặc cài đặt...", - "quickActions": "Hành động nhanh", - "navigation": "Điều hướng", - "orShortcut": "hoặc", - "addNewHost": "Thêm máy chủ mới", - "adminSettings": "Cài đặt quản trị", - "addCredential": "Thêm thông tin đăng nhập", - "recentActivity": "Hoạt động gần đây", - "serversAndHosts": "Máy chủ & Host", - "noHostsFound": "Không tìm thấy host nào khớp với \"{{search}}\"", - "links": "Liên kết", - "navigate": "Điều hướng", - "select": "Chọn", - "pluginActions": "Hành động khác", - "noTargetTab": "Không có tab terminal nào đang mở", - "documentation": "Tài liệu" - }, "splitScreen": { "title": "Chia màn hình", "defaultLabel": "Chia {{number}}", "splitRight": "Chia sang phải", "splitDown": "Chia xuống dưới", - "addToSplit": "Thêm vào {{split}}", "paneEmptyItem": "Khung {{index}}: trống", "paneItem": "Khung {{index}}: {{label}}", "paneNumber": "Khung {{index}}", - "newPaneRight": "Khung mới bên phải", - "newPaneBelow": "Khung mới bên dưới", "emptyTitle": "Khung trống", "emptyHint": "Chọn nội dung để hiển thị ở đây. Khi khung này được chọn, bất kỳ mục nào bạn mở từ thanh bên cũng sẽ mở trong khung này.", "openTabs": "Tab đang mở", @@ -949,7 +877,6 @@ "clearPane": "Xóa nội dung khung này", "zoom": "Phóng to khung", "unzoom": "Khôi phục bố cục", - "unsplit": "Hủy chia", "layouts": "Bố cục", "applyLayout": "Thay đổi bố cục", "maxPanes_other": "Một phân tách có thể chứa tối đa {{count}} ngăn", @@ -957,8 +884,6 @@ "dropHere": "Thả để hiển thị ở đây", "paneActions": "Hành động khung", "dividerHint": "Kéo để thay đổi kích thước. Nhấp đúp để cân bằng.", - "openInSplit": "Mở trong vùng chia", - "openInNewSplit": "Vùng chia mới với tab hiện tại", "shortcuts": "Phím tắt", "shortcutNavigate": "Di chuyển giữa các khung", "presets": { @@ -972,23 +897,6 @@ "grid6": "Lưới sáu khung" } }, - "connections": { - "noConnections": "Không có kết nối", - "noConnectionsDesc": "Mở terminal, trình quản lý tệp hoặc máy tính từ xa để xem kết nối ở đây", - "connectedFor": "Đã kết nối trong {{duration}}", - "connected": "Đã kết nối", - "disconnected": "Đã ngắt kết nối", - "reconnect": "Kết nối lại", - "sectionOpen": "Đang mở", - "sectionBackground": "Nền", - "backgroundDesc": "Phiên làm việc sẽ tồn tại trong {{minutes}} phút sau khi ngắt kết nối và có thể được kết nối lại.", - "expiresIn": "Hết hạn sau {{duration}}", - "search": "Tìm kiếm kết nối...", - "noSearchResults": "Không có kết nối nào khớp với tìm kiếm của bạn", - "rename": "Đổi tên phiên làm việc", - "forgetConfirm": "Kết thúc phiên nền cho {{name}}?", - "forget": "Kết thúc phiên làm việc" - }, "sshAuth": { "totpRequired": "Yêu cầu Xác thực Hai Yếu tố", "totpCodeLabel": "Mã xác minh", @@ -1126,474 +1034,46 @@ "placeholders": { "keyPassword": "mật khẩu khóa", "pastePrivateKey": "Dán khóa riêng của bạn vào đây...", - "enterPassword": "Nhập mật khẩu của bạn", - "apiKeyName": "ví dụ: CI Pipeline", - "credentialName": "ví dụ: Khóa SSH Sản xuất", - "optionalDetails": "Chi tiết tùy chọn...", - "sshUsername": "ví dụ: root hoặc deploy", - "hostAddress": "10.0.0.1 hoặc example.com", - "hostName": "ví dụ: Máy chủ Web Sản xuất" + "enterPassword": "Nhập mật khẩu của bạn" }, "dashboard": { - "title": "Bảng điều khiển", - "github": "GitHub", - "reportBug": "Báo cáo lỗi", - "discord": "Discord", - "docs": "Tài liệu", - "donate": "Quyên góp", - "serverOverview": "Tổng quan Máy chủ", - "version": "Phiên bản", "updateAvailable": "Có bản cập nhật", - "beta": "Beta", - "uptime": "Thời gian hoạt động", - "database": "Cơ sở dữ liệu", - "healthy": "Hoạt động tốt", - "error": "Lỗi", - "totalHosts": "Tổng số Máy chủ", - "totalCredentials": "Tổng số Thông tin xác thực", - "recentActivity": "Hoạt động gần đây", - "reset": "Đặt lại", - "noRecentActivity": "Không có hoạt động gần đây", - "quickActions": "Hành động nhanh", - "addHost": "Thêm Máy chủ", - "addCredential": "Thêm Thông tin xác thực", - "adminSettings": "Cài đặt Quản trị viên", - "userProfile": "Hồ sơ Người dùng", - "serverStats": "Thống kê Máy chủ", - "customizeLayout": "Tùy chỉnh Bảng điều khiển", - "justNow": "vừa xong" + "beta": "Beta" }, "dashboardTab": { "stable": "ỔN ĐỊNH", - "registerNewServer": "Đăng ký máy chủ mới", - "storeSshKeysOrPasswords": "Lưu trữ khóa SSH hoặc mật khẩu", - "manageUsersAndRoles": "Quản lý người dùng và vai trò", - "manageYourAccount": "Quản lý tài khoản của bạn", - "hostStatus": "Trạng thái Máy chủ", - "noHostsConfigured": "Chưa cấu hình máy chủ nào", - "checking": "ĐANG KIỂM TRA", - "commandPalette": "Bảng lệnh", - "done": "Xong", - "clear": "Xóa", - "dragToResizeColumns": "Kéo để thay đổi kích thước cột", - "hostsAvailable": "Máy chủ khả dụng", - "removeSection": "Xóa phần", - "addSection": "Thêm một phần", - "allSectionsShown": "Tất cả đã có trên bảng điều khiển.", - "fromPlugins": "Từ plugin", - "dropHere": "Thả một phần vào đây", - "dragToReorder": "Kéo các phần để sắp xếp lại", - "clearActivityConfirm": "Xóa hoạt động gần đây của bạn?", - "resetConfirm": "Đặt lại bảng điều khiển về bố cục mặc định?", "onlineCount_other": "{{count}} đang trực tuyến", "hostCount_other": "{{count}} máy chủ" }, "admin": { - "sectionGeneral": "Chung", - "sectionUsers": "Người dùng", - "sectionSessions": "Phiên làm việc", - "sectionRoles": "Vai trò", - "sectionDatabase": "Cơ sở dữ liệu", - "sectionApiKeys": "Khóa API", - "sectionAuditLog": "Nhật ký kiểm toán", - "sectionSsl": "Chứng chỉ HTTPS", - "sectionBranding": "White Label", - "brandingAppName": "Tên ứng dụng", - "brandingAppNameDesc": "Hiển thị trên màn hình đăng nhập và tab trình duyệt. Để trống để sử dụng \"Termix\".", - "brandingTagline": "Khẩu hiệu", - "brandingTaglineDesc": "Hiển thị dưới tên ứng dụng trên màn hình đăng nhập. Để trống để sử dụng khẩu hiệu mặc định.", - "brandingLogo": "Logo", - "brandingLogoDesc": "PNG, JPEG hoặc WEBP, tối đa 750 KB. Thay thế biểu tượng mặc định trên màn hình đăng nhập và tab trình duyệt.", - "brandingLogoUpload": "Tải lên logo", - "brandingLogoReset": "Đặt lại về mặc định", - "brandingLogoInvalid": "Hình ảnh không hợp lệ. Hãy sử dụng tệp PNG, JPEG hoặc WEBP có dung lượng tối đa 750 KB.", - "brandingSaved": "Đã lưu cài đặt thương hiệu", - "brandingSaveFailed": "Không thể lưu cài đặt thương hiệu", - "sslDescription": "Chứng chỉ mà Termix cung cấp qua HTTPS. Tải chứng chỉ của bạn lên đây, hoặc nhận và gia hạn từ Let's Encrypt trong phần Chứng chỉ ACME.", - "sslDocsLink": "Xem tài liệu SSL", - "sslCertStatus": "Trạng thái chứng chỉ", - "sslCertStatusNone": "Không có chứng chỉ", - "sslCertStatusValid": "Hợp lệ", - "sslCertStatusExpiring": "Sắp hết hạn", - "sslCertStatusExpired": "Đã hết hạn", - "sslCertExpiresAt": "Hết hạn {{date}}", - "sslInfoNote": "Sau khi phát hành hoặc tải lên chứng chỉ, Termix sẽ tự động bật HTTPS trên SSL_PORT (mặc định là 8443) bên cạnh cổng HTTP hiện có. Hãy đảm bảo rằng cổng này được xuất/bản đồ hóa với container này để có thể truy cập được.", - "sslManualCert": "Chứng chỉ (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "Khóa riêng (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "Dán chứng chỉ và khóa riêng hiện có của bạn, bao gồm toàn bộ chuỗi nếu CA của bạn yêu cầu.", - "sslManualUpload": "Tải lên & Cài đặt chứng chỉ", - "sslManualUploadLoading": "Đang tải lên chứng chỉ...", - "sslManualUploadSuccess": "Chứng chỉ đã được tải lên và cài đặt thành công", - "sslManualUploadFailed": "Tải lên chứng chỉ thất bại", - "sslManualRequiresFields": "Chứng chỉ và khóa riêng là bắt buộc", - "auditLogTotal": "{{total}} mục tổng cộng", - "auditLogEmpty": "Không tìm thấy mục nhật ký kiểm toán nào", - "auditLogSuccess": "Thành công", - "auditLogFailed": "Thất bại", - "auditLogClearFilters": "Xóa bộ lọc", - "auditLogPage": "Trang {{page}} trong số {{totalPages}} ({{total}} mục tổng cộng)", - "auditLogIp": "IP", - "auditLogResourceId": "ID tài nguyên", - "auditLogFilterUser": "Người dùng", - "auditLogFilterAction": "Hành động", - "auditLogFilterResourceType": "Loại tài nguyên", - "auditLogFilterStatus": "Trạng thái", - "auditLogFilterFrom": "Từ", - "auditLogFilterTo": "Đến", - "auditLogFilterAll": "Tất cả", - "allowRegistration": "Cho phép đăng ký người dùng", - "allowRegistrationDesc": "Cho phép người dùng mới tự đăng ký bằng tên người dùng và mật khẩu", - "allowPasswordLogin": "Cho phép đăng nhập bằng mật khẩu", - "allowPasswordLoginDesc": "Đăng nhập bằng tên người dùng/mật khẩu", - "externalAutoProvision": "Tự động tạo tài khoản bên ngoài", - "externalAutoProvisionDesc": "Tạo tài khoản khi người dùng đăng nhập lần đầu qua phương thức bên ngoài như SSO hoặc LDAP. Khi tắt, chỉ những người đã có tài khoản mới có thể đăng nhập theo cách này", - "secondFactorAfterExternalLogin": "Yêu cầu xác thực hai yếu tố sau khi đăng nhập bên ngoài (SSO, GitHub, Google, LDAP)", - "secondFactorAfterExternalLoginDesc": "Khi tắt, xác thực hai yếu tố chỉ được yêu cầu sau khi đăng nhập bằng mật khẩu và các phương thức nội bộ khác, giống như trước đây. Khi bật, nó sẽ được yêu cầu sau mọi phương thức đăng nhập, bao gồm cả SSO và LDAP.", - "allowPasswordReset": "Cho phép đặt lại mật khẩu", - "allowPasswordResetDesc": "Mã đặt lại qua nhật ký Docker", - "auditForwardingTitle": "Chuyển tiếp đến SIEM", - "auditForwardingDesc": "Gửi bản sao của mọi mục nhật ký kiểm toán đến bộ thu thập bên ngoài dưới dạng NDJSON. Nhật ký cục bộ vẫn là nguồn dữ liệu chính xác.", - "auditForwardingEnvNotice": "Một biến môi trường cũng cấu hình việc chuyển tiếp; URL được lưu ở đây sẽ có ưu tiên cao hơn.", - "auditForwardingToken": "Token Bearer (tùy chọn)", - "auditForwardingTokenStored": "Token Bearer (đã lưu)", - "auditForwardingSaved": "Đã lưu cài đặt chuyển tiếp nhật ký kiểm toán", - "auditForwardingSaveError": "Không thể lưu cài đặt chuyển tiếp nhật ký kiểm toán", - "sessionTimeout": "Thời gian hết hạn phiên", - "hours": "giờ", - "sessionTimeoutRange": "Tối thiểu 1 giờ, tối đa 720 giờ", - "monitoringDefaults": "Cài đặt mặc định cho giám sát", - "statusCheck": "Kiểm tra trạng thái", - "sec": "giây", - "logLevel": "Cấp độ nhật ký", - "usersCount_other": "{{count}} người dùng", - "searchUsers": "Tìm kiếm người dùng...", - "noUsers": "Không có người dùng", - "noUsersMatch": "Không có người dùng nào khớp với tìm kiếm của bạn", - "pageOf": "Trang {{page}} trong tổng số {{total}}", - "createUser": "Tạo mới", - "newRole": "Vai trò mới", - "roleName": "Tên", - "roleDisplayName": "Tên hiển thị", - "roleDescription": "Mô tả", - "rolesCount_other": "{{count}} vai trò", - "createRole": "Tạo mới", - "creating": "Đang tạo...", - "exportDatabase": "Xuất cơ sở dữ liệu", - "exportDatabaseDesc": "Tải xuống bản sao lưu SQLite di động của tất cả các máy chủ, thông tin đăng nhập và cài đặt", - "export": "Xuất", - "exporting": "Đang xuất...", - "importDatabase": "Nhập cơ sở dữ liệu", - "importDatabaseDesc": "Khôi phục từ bản sao lưu .sqlite di động trên bất kỳ nền tảng cơ sở dữ liệu nào", - "importDatabaseSelected": "Đã chọn: {{name}}", - "selectFile": "Chọn tệp", - "changeFile": "Thay đổi", - "import": "Nhập", - "importing": "Đang nhập...", - "apiKeysCount_other": "{{count}} khóa", - "apiKeysDocsLink": "Xem tài liệu", - "apiKeysCliHint": "Sử dụng khóa API với Termix CLI để quản lý máy chủ từ thiết bị đầu cuối của bạn.", - "apiKeysCliLink": "Xem tài liệu CLI", - "newApiKey": "Khóa API mới", - "apiKeyCreatedWarning": "Khóa đã được tạo - sao chép ngay bây giờ, nó sẽ không được hiển thị lại.", - "apiKeyName": "Tên", - "apiKeyUser": "Người dùng", - "apiKeySelectUser": "Chọn một người dùng...", - "apiKeyExpiresAt": "Hết hạn lúc", - "createKey": "Tạo khóa", - "apiKeyNoExpiry": "Không hết hạn", - "revokedBadge": "ĐÃ HỦY", - "authTypeDual": "Xác thực kép", - "authTypeExternal": "Bên ngoài", - "authTypeLocal": "Cục bộ", - "adminStatusAdministrator": "Quản trị viên", - "adminStatusRegularUser": "Người dùng thường", - "adminBadge": "QUẢN TRỊ", - "systemBadge": "HỆ THỐNG", - "customBadge": "TÙY CHỈNH", - "youBadge": "BẠN", - "sessionsActive_other": "{{count}} phiên đang hoạt động", - "sessionActive": "Hoạt động: {{time}}", - "sessionExpires": "Hết hạn: {{time}}", - "revokeAll": "Tất cả", - "revokeAllSessionsSuccess": "Đã hủy tất cả phiên của người dùng", - "revokeAllSessionsFailed": "Không thể hủy phiên", - "revokeSessionFailed": "Không thể hủy phiên", - "addRole": "Thêm vai trò", - "noCustomRoles": "Không có vai trò tùy chỉnh nào được định nghĩa", - "removeRoleFailed": "Không thể xóa vai trò", - "assignRoleFailed": "Không thể gán vai trò", - "userAdminAccess": "Quản trị viên", - "userAdminAccessDesc": "Quyền truy cập đầy đủ vào tất cả cài đặt quản trị", - "userRoles": "Vai trò", - "revokeAllUserSessions": "Hủy tất cả phiên", - "revokeAllUserSessionsDesc": "Buộc đăng nhập lại trên tất cả thiết bị", - "revoke": "Hủy", - "deleteUserWarning": "Việc xóa người dùng này là vĩnh viễn.", - "deleteUser": "Xóa {{username}}", - "deleting": "Đang xóa...", - "deleteUserFailed": "Không thể xóa người dùng", - "deleteUserSuccess": "Đã xóa người dùng \"{{username}}\"", - "deleteRoleSuccess": "Đã xóa vai trò \"{{name}}\"", - "revokeKeySuccess": "Đã hủy khóa \"{{name}}\"", - "revokeKeyFailed": "Không thể hủy khóa", - "copiedToClipboard": "Đã sao chép vào bộ nhớ tạm", - "done": "Xong", - "createUserTitle": "Tạo người dùng", - "createUserDesc": "Tạo một tài khoản cục bộ mới.", - "createUserUsername": "Tên đăng nhập", - "createUserPassword": "Mật khẩu", - "createUserPasswordHint": "Tối thiểu 6 ký tự.", - "createUserEnterUsername": "Nhập tên đăng nhập", - "createUserSubmit": "Tạo người dùng", - "editUserTitle": "Quản lý người dùng: {{username}}", - "editUserDesc": "Chỉnh sửa vai trò, trạng thái quản trị, phiên và cài đặt tài khoản.", - "editUserUsername": "Tên đăng nhập", - "editUserAuthType": "Loại xác thực", - "editUserAdminStatus": "Trạng thái quản trị", - "editUserUserId": "ID người dùng", - "linkAccountTitle": "Liên kết tài khoản", - "linkAccountDesc": "Hợp nhất tài khoản bên ngoài {{username}} với một tài khoản cục bộ hiện có.", - "linkAccountDescLocal": "Liên kết tài khoản cục bộ {{username}} với một tài khoản chỉ dành cho bên ngoài hiện có.", - "linkAccountWarningTitle": "Điều này sẽ:", - "linkAccountEffect1": "Xóa tài khoản chỉ dùng đăng nhập bên ngoài", - "linkAccountEffect2": "Thêm phương thức đăng nhập bên ngoài vào tài khoản đích", - "linkAccountEffect3": "Cho phép đăng nhập bằng cả tài khoản bên ngoài và mật khẩu", - "linkAccountTargetUsername": "Tên đăng nhập tài khoản cục bộ", - "linkAccountTargetPlaceholder": "Nhập tên đăng nhập của tài khoản cục bộ để liên kết", - "linkAccountExternalUsername": "Tên đăng nhập tài khoản bên ngoài", - "linkAccountExternalPlaceholder": "Nhập tên đăng nhập của tài khoản chỉ dùng đăng nhập bên ngoài để hợp nhất", - "linkAccountExternalNotFound": "Không tìm thấy tài khoản chỉ dùng đăng nhập bên ngoài với tên đăng nhập này", - "linkAccounts": "Liên kết tài khoản", - "linkAccountSuccess": "Liên kết tài khoản thành công", - "linkAccountFailed": "Không thể liên kết tài khoản", - "linkAccountInProgress": "Đang liên kết...", - "unlinkAccountTitle": "Hủy liên kết đăng nhập bên ngoài", - "unlinkAccountDesc": "Xóa phương thức đăng nhập bên ngoài khỏi {{username}}. Người dùng sẽ chỉ có thể đăng nhập bằng mật khẩu.", - "unlinkAccountWarning": "Điều này sẽ xóa phương thức đăng nhập bên ngoài khỏi tài khoản này. Người dùng phải đặt mật khẩu để tiếp tục đăng nhập.", - "unlinkAccount": "Hủy liên kết đăng nhập bên ngoài", - "unlinkAccountInProgress": "Đang hủy liên kết...", - "unlinkAccountSuccess": "Đã hủy liên kết đăng nhập bên ngoài", - "unlinkAccountFailed": "Không thể hủy liên kết đăng nhập bên ngoài", - "updateRegistrationFailed": "Không thể cập nhật cài đặt đăng ký", - "updatePasswordLoginFailed": "Không thể cập nhật cài đặt đăng nhập bằng mật khẩu", - "updateSecondFactorAfterExternalLoginFailed": "Không thể cập nhật cài đặt xác thực hai yếu tố", - "updatePasswordResetFailed": "Không thể cập nhật cài đặt đặt lại mật khẩu", - "sessionTimeoutRange2": "Thời gian hết hạn phiên phải từ 1 đến 720 giờ", - "sessionTimeoutSaved": "Đã lưu thời gian hết hạn phiên", - "sessionTimeoutSaveFailed": "Không thể lưu thời gian hết hạn phiên", - "monitoringIntervalInvalid": "Giá trị khoảng thời gian không hợp lệ", - "monitoringSaved": "Đã lưu cài đặt giám sát", - "monitoringSaveFailed": "Không thể lưu cài đặt giám sát", - "logLevelUpdateFailed": "Không thể cập nhật mức độ nhật ký", - "createUserRequired": "Tên đăng nhập và mật khẩu là bắt buộc", - "createUserPasswordTooShort": "Mật khẩu phải có ít nhất 6 ký tự", - "createUserSuccess": "Đã tạo người dùng \"{{username}}\"", - "createUserFailed": "Không thể tạo người dùng", - "updateAdminStatusFailed": "Không thể cập nhật trạng thái quản trị viên", - "allSessionsRevoked": "Đã thu hồi tất cả phiên", - "revokeSessionsFailed": "Không thể thu hồi phiên", - "manageUserData": "Quản lý dữ liệu người dùng", - "backToUsers": "Quay lại danh sách người dùng", - "manageTabAccount": "Tài khoản", - "manageTabHosts": "Máy chủ", - "manageTabCredentials": "Thông tin đăng nhập", - "manageTabSessions": "Phiên", - "manageTabDanger": "Nguy hiểm", - "manageEditorBack": "Quay lại dữ liệu của {{username}}", - "dataLockedBadge": "ĐÃ KHÓA", - "dataLockedNotice": "Dữ liệu của {{username}} vẫn bị khóa cho đến khi họ đăng nhập lần sau. Máy chủ, thông tin đăng nhập và đoạn lệnh của họ không thể xem hoặc chỉnh sửa cho đến lúc đó.", - "resetPasswordTitle": "Đặt lại mật khẩu", - "resetPasswordExternalOnly": "Người dùng này đăng nhập qua nhà cung cấp bên ngoài và không có mật khẩu.", - "resetPasswordPlaceholder": "Mật khẩu mới", - "resetPasswordBtn": "Đặt lại", - "resetPasswordWorking": "Đang đặt lại...", - "resetPasswordSuccess": "Đã đặt lại mật khẩu", - "resetPasswordSuccessWiped": "Đã đặt lại mật khẩu. Dữ liệu được mã hóa của người dùng đã bị xóa.", - "resetPasswordFailed": "Không thể đặt lại mật khẩu", - "resetPasswordConfirmWipe": "{{username}} chưa đăng nhập kể từ khi nâng cấp mã hóa, nên dữ liệu của họ không thể khôi phục. Đặt lại bây giờ sẽ xóa máy chủ, thông tin đăng nhập và đoạn lệnh của họ. Tiếp tục?", - "manageApiKeys": "Khóa API", - "apiKeyNamePlaceholder": "Tên khóa", - "apiKeyCopyNotice": "Sao chép khóa này ngay, nó sẽ không được hiển thị lại.", - "noApiKeysForUser": "Không có khóa API", - "apiKeyDeleteFailed": "Không thể xóa khóa API", - "exportUserData": "Xuất dữ liệu", - "exportUserDataDesc": "Tải xuống dữ liệu máy chủ, thông tin đăng nhập và trình quản lý tệp của người dùng này dưới dạng JSON. Các bí mật sẽ được giải mã.", - "exportUserDataSuccess": "Đã xuất dữ liệu người dùng", - "exportUserDataFailed": "Không thể xuất dữ liệu người dùng", "hostsCount_other": "{{count}} máy chủ", - "addHostForUser": "Thêm máy chủ", - "noHostsForUser": "Người dùng này không có máy chủ nào", - "connectToHost": "Kết nối", - "deleteHostConfirm": "Xóa máy chủ \"{{name}}\" thuộc về {{username}}?", - "hostDeletedSuccess": "Đã xóa máy chủ", - "hostDeleteFailed": "Không thể xóa máy chủ", "credentialsCount_other": "{{count}} thông tin đăng nhập", - "addCredentialForUser": "Thêm thông tin đăng nhập", - "noCredentialsForUser": "Người dùng này không có thông tin đăng nhập nào", - "deleteCredentialConfirm": "Xóa thông tin đăng nhập \"{{name}}\" thuộc về {{username}}?", - "credentialDeletedSuccess": "Đã xóa thông tin đăng nhập", - "credentialDeleteFailed": "Không thể xóa thông tin đăng nhập", - "noSessionsForUser": "Không có phiên hoạt động", - "deleteSuccessorLabel": "Chuyển giao máy chủ và thông tin đăng nhập cho", - "deleteSuccessorMe": "Tôi (quản trị viên đang xóa)", - "deleteSuccessorNone": "Không ai, xóa chúng", - "deleteSuccessorDesc": "Tất cả những gì người dùng này đã chia sẻ sẽ tiếp tục hoạt động dưới quyền chủ sở hữu mới; chọn không ai sẽ xóa máy chủ, thông tin đăng nhập và các mục chia sẻ của họ.", - "deleteUserDangerDesc": "Xóa vĩnh viễn {{username}} và tất cả dữ liệu của họ (máy chủ, thông tin đăng nhập, đoạn lệnh, lịch sử). Thao tác này không thể hoàn tác.", - "deleteUserConfirm": "Xóa vĩnh viễn {{username}} và tất cả dữ liệu của họ?", - "deleteUserAdminBlocked": "Bỏ trạng thái quản trị viên trước khi xóa người dùng này.", - "createRoleRequired": "Bắt buộc nhập tên và tên hiển thị", - "createRoleSuccess": "Đã tạo vai trò \"{{name}}\"", - "createRoleFailed": "Không thể tạo vai trò", - "apiKeyNameRequired": "Bắt buộc nhập tên khóa", - "apiKeyUserRequired": "Bắt buộc nhập ID người dùng", - "apiKeyCreatedSuccess": "Đã tạo khóa API \"{{name}}\"", - "apiKeyCreateFailed": "Không thể tạo khóa API", - "exportSuccess": "Đã xuất cơ sở dữ liệu thành công", - "exportFailed": "Xuất cơ sở dữ liệu thất bại", - "importSelectFile": "Vui lòng chọn tệp trước", - "importCompleted": "Nhập hoàn tất: {{total}} mục đã nhập, {{skipped}} mục bị bỏ qua", - "importFailed": "Nhập thất bại: {{error}}", - "importError": "Nhập cơ sở dữ liệu thất bại", - "sectionHostDefaults": "Cài đặt mặc định cho máy chủ", "rolePermissions": { - "count_other": "{{count}} quyền", - "editAction": "Chỉnh sửa quyền", - "loadError": "Không thể tải danh mục quyền", - "saved": "Đã lưu quyền vai trò", - "saveError": "Không thể lưu quyền vai trò", - "save": "Lưu", - "saving": "Đang lưu...", - "pluginDisabled": "Plugin bị vô hiệu hóa", "groups": { "hosts": "Máy chủ", "credentials": "Thông tin đăng nhập", "admin": "Quản trị" } - }, - "notificationPrivateEndpoints": "Máy chủ thông báo riêng được phép", - "notificationPrivateEndpointsDesc": "Các máy chủ riêng chính xác mà kênh thông báo có thể liên hệ. Tách chúng bằng dấu phẩy.", - "updateNotificationEndpointsFailed": "Không thể cập nhật danh sách cho phép điểm cuối thông báo", - "secondFactorsSectionTitle": "Yếu tố xác thực thứ hai", - "secondFactorsNone": "Chưa đăng ký yếu tố xác thực thứ hai nào", - "secondFactorUnavailable": "Không khả dụng", - "resetSecondFactors": "Đặt lại yếu tố xác thực thứ hai", - "resetSecondFactorsConfirm": "Xóa mọi yếu tố xác thực thứ hai của {{username}}? Họ có thể đăng nhập bằng mật khẩu hoặc SSO và đăng ký lại.", - "secondFactorsResetSuccess": "Đã đặt lại yếu tố xác thực thứ hai", - "secondFactorsResetFailed": "Không thể đặt lại yếu tố xác thực thứ hai", - "passwordLoginForced": "Đăng nhập bằng mật khẩu đã tắt, nhưng không có phương thức đăng nhập nào khác được bật, nên nó vẫn đang hoạt động tạm thời. Không ai bị khóa tài khoản cả.", - "sslNotRenewed": "Không có gì gia hạn chứng chỉ này. Nó sẽ hết hạn vào {{date}}. Hãy bật gia hạn tự động trong phần Chứng chỉ ACME, hoặc tải lên chứng chỉ mới trước thời điểm đó.", - "sslSelfSigned": "Chứng chỉ tự ký do Termix tạo. Trình duyệt sẽ cảnh báo về chứng chỉ này.", - "sslRenewedBy": "Đã được {{plugin}} tự động gia hạn", - "sslIssuer": "Do {{issuer}} cấp", - "sslNames": "Áp dụng cho {{names}}", - "sslManualTitle": "Tải lên chứng chỉ", - "updateExternalAutoProvisionFailed": "Không thể cập nhật cài đặt tự động tạo", - "hostTags": "Thẻ máy chủ được định nghĩa trước", - "hostTagsDesc": "Các thẻ mà mọi người dùng đều thấy dưới dạng gợi ý trong trình chỉnh sửa máy chủ. Nhấn Space hoặc Enter để thêm thẻ. Xóa thẻ ở đây sẽ không xóa nó khỏi các máy chủ.", - "hostTagsError": "Không thể tải hoặc lưu các gợi ý thẻ máy chủ.", - "revokeAllSessionsConfirm": "Đăng xuất {{username}} ở mọi nơi?", - "revokeSessionConfirm": "Đăng xuất phiên làm việc này?", - "revokeSession": "Đăng xuất", - "deleteRoleConfirm": "Xóa vai trò {{name}}?", - "revokeKeyConfirm": "Thu hồi khóa API {{name}}?", - "revokeKey": "Thu hồi" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "Nơi nào", - "who": "Ai", - "hostLabel": "Máy chủ", - "hostPlaceholder": "192.168.1.1 hoặc example.com", - "portLabel": "Cổng", - "usernameLabel": "Tên người dùng", - "usernamePlaceholder": "tên người dùng", - "authLabel": "Xác thực", - "passwordLabel": "Mật khẩu", - "passwordPlaceholder": "mật khẩu", - "privateKeyLabel": "Khóa riêng", - "privateKeyPlaceholder": "Dán khóa riêng...", - "credentialLabel": "Thông tin đăng nhập", - "credentialPlaceholder": "Chọn thông tin đăng nhập đã lưu", - "protocolLabel": "Giao thức", - "domainLabel": "Tên miền", - "domainPlaceholder": "tùy chọn", - "connectToAction": "Kết nối đến {{name}}", - "sshProtocol": "SSH", - "noTarget": "Không có thành phần nào được cài đặt có thể kết nối với loại máy chủ này" + "usernameLabel": "Tên người dùng" }, "keybindings": { - "description": "Gán phím cho các hành động trong terminal và ứng dụng, hoặc thay đổi phím tắt có sẵn.", - "defaultsHeading": "Phím tắt có sẵn", - "fixedHeading": "Phím tắt ứng dụng", - "fixed": { - "splitRight": "Chia màn hình sang phải", - "splitDown": "Chia màn hình xuống dưới", - "zoomPane": "Phóng to vùng đang tập trung", - "navigatePane": "Di chuyển giữa các vùng", - "nextTab": "Thẻ tiếp theo", - "previousTab": "Thẻ trước đó", - "jumpTab": "Nhảy đến thẻ", - "previousView": "Quay lại chế độ xem thanh bên trước đó", - "fullscreen": "Bật/tắt toàn màn hình" - }, - "customHeading": "Phím tắt tùy chỉnh", - "addBinding": "Thêm phím tắt", - "addBindingTitle": "Thêm phím tắt", - "editBindingTitle": "Chỉnh sửa phím tắt", - "loading": "Đang tải...", - "noCustomBindings": "Chưa có phím tắt tùy chỉnh nào", - "defaultBadge": "Mặc định", - "customizedBadge": "Đã tùy chỉnh", - "customize": "Tùy chỉnh", - "resetToDefault": "Khôi phục mặc định", - "resetAllToDefaults": "Khôi phục tất cả về mặc định", - "cancel": "Hủy", - "saveBinding": "Lưu phím tắt", - "saveError": "Không thể lưu phím tắt", - "pressKeysToRecord": "Tổ hợp phím", - "pressKeysPlaceholder": "Nhấp và nhấn phím", - "recording": "Nhấn phím...", - "comboRequiredError": "Hãy nhấn tổ hợp phím trước", - "conflictWarning": "Tổ hợp này đã được gán cho {{combo}}. Việc lưu sẽ khiến cả hai cùng kích hoạt.", - "actionLabel": "Hành động", "actionNextTab": "Chuyển sang tab tiếp theo", "actionPreviousTab": "Chuyển sang tab trước", "actionOpenCommandPalette": "Mở tìm kiếm nhanh", - "actionReconnectSession": "Kết nối lại phiên hiện tại", - "unavailableAction": "{{type}} (không khả dụng)", - "actionRequiredError": "Hãy chọn hành động trước", - "deleteConfirm": "Xóa phím tắt này?", - "resetAllConfirm": "Khôi phục mọi phím tắt về mặc định?" + "actionReconnectSession": "Kết nối lại phiên hiện tại" }, "userProfile": { - "storageModeLocal": "Trình duyệt", - "storageModeCloud": "Cơ sở dữ liệu", - "storageModeDescription": "Trình duyệt lưu cài đặt chỉ trên trình duyệt này. Cơ sở dữ liệu đồng bộ với máy chủ và tải trên mọi thiết bị.", - "resetToDefaults": "Khôi phục về mặc định", - "resetToDefaultsSuccess": "Đã khôi phục cài đặt về mặc định.", - "storageModeSwitch": "Lưu trữ tùy chọn", - "sectionAccount": "Tài khoản", - "desktopProfileTitle": "Chỉ thiết bị này", - "desktopProfileDescription": "Hồ sơ này chỉ tồn tại trên thiết bị này và tự đăng nhập. Liên kết nó với máy chủ Termix để sử dụng cùng các host và cài đặt trên mọi thiết bị.", - "sectionInterface": "Giao diện", - "interfacePresetDesc": "Mức độ chi tiết Termix hiển thị. Mọi tính năng vẫn khả dụng.", "preset_simple": "Đơn giản", "preset_simple_desc": "Chỉ những điều cần thiết.", "preset_balanced": "Cân bằng", "preset_balanced_desc": "Bố cục tiêu chuẩn.", "preset_advanced": "Nâng cao", "preset_advanced_desc": "Bật tất cả, sắp xếp chặt chẽ.", - "presetClearOverrides": "Khôi phục tất cả", - "presetOverridesTitle": "Đã tùy chỉnh", - "presetRevertArea": "Hoàn tác", - "presetConfirmTitle": "Chuyển sang {{preset}}?", - "presetConfirmDesc": "Điều này sẽ đặt lại thanh bên, điều hướng, bố cục bảng điều khiển, thanh công cụ terminal và chế độ xem trình quản lý tệp. Các host, thông tin đăng nhập và trang chủ của bạn sẽ không bị ảnh hưởng.", - "presetConfirmApply": "Áp dụng mẫu", - "runSetupAgainDesc": "Thực hiện lại quy trình thiết lập ban đầu.", - "runSetupAgainButton": "Chạy thiết lập", "uiArea_chrome": "Giao diện ứng dụng", "uiArea_hostList": "Danh sách host", "uiArea_credentialList": "Danh sách thông tin đăng nhập", @@ -1602,125 +1082,12 @@ "uiArea_terminal": "Terminal", "uiArea_fileManager": "Trình quản lý tệp", "uiArea_hostEditor": "Trình chỉnh sửa host", - "sectionAppearance": "Giao diện", - "sectionSecurity": "Bảo mật", - "sectionApiKeys": "Khóa API", - "sectionData": "Dữ liệu", - "usernameLabel": "Tên người dùng", - "roleLabel": "Vai trò", - "roleAdministrator": "Quản trị viên", - "authMethodLabel": "Phương thức xác thực", - "authMethodLocal": "Cục bộ", - "twoFaLabel": "Xác thực 2 yếu tố", - "twoFaOn": "Bật", - "twoFaOff": "Tắt", - "versionLabel": "Phiên bản", - "cliTitle": "Termix CLI", - "cliDescription": "Mở terminal, chạy lệnh và di chuyển tệp từ shell của riêng bạn.", - "cliLearnMore": "Tìm hiểu thêm", - "deleteAccount": "Xóa tài khoản", - "deleteAccountDescription": "Xóa vĩnh viễn tài khoản của bạn", - "deleteButton": "Xóa", - "deleteAccountPermanent": "Hành động này là vĩnh viễn và không thể hoàn tác.", - "deleteAccountWarning": "Tất cả phiên, máy chủ, thông tin đăng nhập và cài đặt sẽ bị xóa vĩnh viễn.", - "confirmPasswordDeletePlaceholder": "Nhập mật khẩu của bạn để xác nhận", "languageLabel": "Ngôn ngữ", "themeLabel": "Giao diện", "fontSizeLabel": "Cỡ chữ", "interfaceFontLabel": "Phông chữ giao diện", "interfaceFontDescription": "Thay đổi phông chữ của giao diện ứng dụng. Hồ sơ terminal giữ nguyên cài đặt phông chữ riêng của chúng.", "accentColorLabel": "Màu nhấn", - "keyboardShortcuts": "Phím tắt", - "keyboardShortcutsDescription": "Tùy chỉnh phím tắt sao chép, dán và lệnh trong terminal", - "manageShortcuts": "Quản lý", - "commandPalette": "Bảng lệnh", - "commandPaletteDesc": "Bật phím tắt", - "reopenTabsOnLogin": "Mở lại tab khi đăng nhập", - "reopenTabsOnLoginDesc": "Khôi phục các tab đang mở khi bạn đăng nhập hoặc làm mới trang, ngay cả từ thiết bị khác", - "confirmTabClose": "Xác nhận khi đóng tab", - "confirmTabCloseDesc": "Hỏi trước khi đóng tab terminal", - "showTabNumbers": "Hiển thị số tab", - "showTabNumbersDesc": "Hiển thị một số trên mỗi tab để giúp phân biệt chúng", - "settingsAppRail": "Thanh ứng dụng", - "sidebarSettingsMoved": "Cài đặt hiển thị thanh bên máy chủ đã được chuyển sang bảng Tùy chỉnh thanh bên, mở từ thanh công cụ Máy chủ.", - "showHostTags": "Hiển thị thẻ máy chủ", - "showHostTagsDesc": "Hiển thị thẻ trong danh sách máy chủ", - "statusColors": "Màu trạng thái thực", - "statusColorsDesc": "Sử dụng màu xanh lá/xanh đỏ cho trạng thái trực tuyến/ngoại tuyến thay vì màu nhấn", - "pinAppRail": "Ghim thanh ứng dụng", - "pinAppRailDesc": "Giữ thanh ứng dụng bên trái luôn mở rộng thay vì mở rộng khi di chuột", - "expandAppRailOnHover": "Mở rộng thanh ứng dụng khi di chuột", - "expandAppRailOnHoverDesc": "Cho phép thanh ứng dụng bên trái mở rộng khi con trỏ di chuột qua", - "appRailHoverPushesContent": "Đẩy nội dung khi mở rộng", - "appRailHoverPushesContentDesc": "Tạo không gian cho thanh bên mở rộng thay vì hiển thị chồng lên trang. Các phiên đang mở, như máy từ xa, sẽ thay đổi kích thước mỗi lần.", - "showPinAppRailButton": "Hiển thị nút ghim thanh ứng dụng", - "showPinAppRailButtonDesc": "Hiển thị một nút trong thanh ứng dụng để ghim nó mở. Tắt theo mặc định.", - "settingsNavigation": "Điều hướng", - "navigationTabsDesc": "Chọn tab nào xuất hiện trong thanh ứng dụng", - "settingsUpdates": "Cập nhật", - "disableUpdateChecks": "Tắt kiểm tra cập nhật", - "disableUpdateChecksDesc": "Ngừng kiểm tra cập nhật", - "changePassword": "Đổi mật khẩu", - "currentPasswordLabel": "Mật khẩu hiện tại", - "currentPasswordPlaceholder": "Mật khẩu hiện tại", - "newPasswordLabel": "Mật khẩu mới", - "newPasswordPlaceholder": "Mật khẩu mới", - "confirmPasswordLabel": "Xác nhận mật khẩu mới", - "confirmPasswordPlaceholder": "Xác nhận mật khẩu mới", - "updatePassword": "Cập nhật mật khẩu", - "createApiKeyTitle": "Tạo khóa API", - "createApiKeyDescription": "Tạo khóa API mới để truy cập theo chương trình.", - "apiKeyNameLabel": "Tên", - "apiKeyNamePlaceholder": "ví dụ: CI Pipeline", - "expiryDateLabel": "Ngày hết hạn", - "optional": "tùy chọn", - "cancel": "Hủy", - "createKey": "Tạo Key", - "apiKeyCreatedWarning": "Key đã được tạo - hãy sao chép ngay, nó sẽ không hiển thị lại.", - "copyApiKey": "Sao chép API key", - "copiedToClipboard": "Đã sao chép vào clipboard", - "apiKeyCount_other": "{{count}} khóa", - "newKey": "Key mới", - "noApiKeys": "Chưa có API key nào.", - "apiKeyActive": "Hoạt động", - "apiKeyUsageHint": "Bao gồm key của bạn trong", - "apiKeyUsageHintHeader": "header.", - "apiKeyPermissionsHint": "Keys kế thừa quyền của người dùng tạo ra chúng.", - "exportData": "Xuất dữ liệu của tôi", - "exportDataDesc": "Tải xuống bản sao lưu các host, thông tin đăng nhập và cài đặt của bạn để chuyển sang thiết bị khác", - "export": "Xuất", - "exporting": "Đang xuất...", - "importData": "Nhập dữ liệu của tôi", - "importDataDesc": "Khôi phục các host, thông tin đăng nhập và cài đặt của bạn từ tệp sao lưu .sqlite", - "importDataSelected": "Đã chọn: {{name}}", - "selectFile": "Chọn tệp", - "changeFile": "Thay đổi", - "import": "Nhập", - "importing": "Đang nhập...", - "exportSuccess": "Xuất dữ liệu thành công", - "exportFailed": "Xuất dữ liệu thất bại", - "importSelectFile": "Vui lòng chọn một tệp trước", - "importCompleted": "Nhập hoàn tất: {{total}} mục đã nhập, {{skipped}} mục bị bỏ qua", - "importFailed": "Nhập thất bại: {{error}}", - "roleUser": "Người dùng", - "authMethodDual": "Xác thực kép", - "authMethodExternal": "Bên ngoài", - "done": "Xong", - "apiKeyNameRequired": "Tên key là bắt buộc", - "apiKeyCreated": "API key \"{{name}}\" đã được tạo", - "apiKeyCreateFailed": "Tạo API key thất bại", - "apiKeyUser": "Người dùng", - "apiKeyExpires": "Hết hạn", - "apiKeyRevoked": "API key \"{{name}}\" đã bị thu hồi", - "apiKeyRevokeFailed": "Thu hồi API key thất bại", - "passwordFieldsRequired": "Mật khẩu hiện tại và mật khẩu mới là bắt buộc", - "passwordMismatch": "Mật khẩu không khớp", - "passwordTooShort": "Mật khẩu phải có ít nhất 6 ký tự", - "passwordUpdated": "Cập nhật mật khẩu thành công", - "passwordUpdateFailed": "Cập nhật mật khẩu thất bại", - "deletePasswordRequired": "Mật khẩu là bắt buộc để xóa tài khoản của bạn", - "deleteFailed": "Xóa tài khoản thất bại", - "deleting": "Đang xóa...", "colorPickerTooltip": "Mở bộ chọn màu", "themeSystem": "Hệ thống", "themeLight": "Sáng", @@ -1731,18 +1098,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "Đã đăng nhập vào {{server}}", - "linkedProfileDescription": "Thiết bị này sử dụng tài khoản của bạn trên máy chủ và lưu trữ bản sao dữ liệu, giúp nó vẫn hoạt động khi không có kết nối mạng.", - "manageSync": "Quản lý đồng bộ", - "setUpSync": "Liên kết với máy chủ", - "settingsTabsAndShortcuts": "Thẻ và Phím tắt", - "onBetaTitle": "Bạn đang dùng phiên bản beta", - "onBetaDescription": "Cảm ơn bạn đã thử nghiệm. Hãy cho chúng tôi biết nếu có lỗi xảy ra.", - "tryBetaTitle": "Thử tính năng mới sớm", - "tryBetaDescription": "Tham gia chương trình beta trong mục Cập nhật.", - "sendBetaFeedback": "Gửi phản hồi về phiên bản beta", - "openUpdates": "Cập nhật" + "themeGruvbox": "Gruvbox" } } }, @@ -1983,8 +1339,7 @@ "hasDependents": "{{name}} được cần bởi {{list}}. Tắt hoặc gỡ cài đặt chúng trước.", "missingDependencies": "{{name}} cần {{list}}, nhưng chưa được cài đặt.", "consentChanged": "Những gì plugin này yêu cầu đã thay đổi kể từ khi bạn xem. Vui lòng kiểm tra danh sách lại.", - "upload": "Không thể đọc {{name}}: {{error}}", - "developerMode": "Không thể thay đổi chế độ nhà phát triển: {{error}}" + "upload": "Không thể đọc {{name}}: {{error}}" }, "data": { "title": "Dữ liệu đã lưu", @@ -2102,13 +1457,7 @@ "browsePlugins": "Duyệt plugin", "loading": "Đang tải", "developer": { - "title": "Chế độ nhà phát triển plugin", - "hint": "Cho phép quản trị viên cài đặt plugin từ tệp .tmxplug trong tab Plugin, mà không cần kiểm tra sổ đăng ký. Sử dụng nó để xây dựng và kiểm tra plugin của riêng bạn.", - "enableTitle": "Bật chế độ nhà phát triển?", - "enableBody": "Quản trị viên sẽ có thể cài đặt plugin từ các tệp mà Termix chưa kiểm tra. Một plugin có thể làm bất cứ điều gì khả năng của nó cho phép, vì vậy chỉ bật tính năng này khi bạn đang xây dựng hoặc kiểm tra plugin.", - "enable": "Bật", - "installFromFile": "Cài đặt từ tệp", - "signedOnly": "TERMIX_REQUIRE_SIGNED_PLUGINS được đặt, vì vậy việc cài đặt từ tệp vẫn bị chặn." + "installFromFile": "Cài đặt từ tệp" }, "count": { "downloads_other": "{{formatted}} lượt tải xuống", @@ -2145,71 +1494,7 @@ "secretSet": "Đã đặt", "secretNotSet": "Chưa đặt", "secretReplace": "Thay thế", - "pluginSettingsSaved": "Đã lưu cài đặt", - "pluginSettingsInvalid": "Không thể lưu một số cài đặt. Vui lòng kiểm tra các trường được đánh dấu.", - "pluginSettingsSaveFailed": "Không thể lưu cài đặt", - "pluginSettingsLoadFailed": "Không thể tải cài đặt", - "featureUnavailable": "{{name}} hiện không khả dụng. Các cài đặt này đã được lưu nhưng sẽ không có hiệu lực.", - "account": "Tài khoản", - "security": "Bảo mật", - "apiKeys": "Khóa API", - "data": "Dữ liệu và đồng bộ", - "interface": "Giao diện", - "appearance": "Giao diện", - "keybindings": "Phím tắt", - "adminGeneral": "Chung", - "adminUsers": "Người dùng", - "adminSessions": "Phiên làm việc", - "adminRoles": "Vai trò", - "adminHostDefaults": "Cài đặt mặc định cho máy chủ", - "adminBranding": "Thương hiệu", - "adminDatabase": "Cơ sở dữ liệu", - "adminSsl": "SSL", - "adminApiKeys": "Khóa API", - "adminAuditLog": "Nhật ký kiểm toán", - "bandYou": "Tài khoản của bạn", - "bandApp": "Ứng dụng này", - "bandPlugins": "Plugin", - "bandInstance": "Máy chủ này", - "searchPlaceholder": "Tìm kiếm cài đặt", - "noResults": "Không có cài đặt nào phù hợp.", - "pages": "Trang", - "instanceSettings": "Cài đặt máy chủ", - "nothingHere": "Không có gì để cài đặt ở đây.", - "searchPage": "Tìm kiếm trên trang này", - "noPageMatches": "Không có kết quả phù hợp trên trang này.", - "updates": { - "title": "Cập nhật", - "betaProgram": "Chương trình Beta", - "betaIntro": "Phiên bản Beta là các bản dựng sớm của phiên bản Termix tiếp theo. Chúng được phát hành vào thứ Ba và thứ Sáu khi có tính năng mới để thử nghiệm. Chúng có thể chứa lỗi, và phản hồi của bạn sẽ giúp bản phát hành ổn định trở nên tốt hơn.", - "termixBetas": "Termix Beta", - "termixBetasHint": "Thông báo cho tôi về các bản Beta mới, không chỉ bản phát hành ổn định.", - "runningBetaBuild": "Bạn đang chạy một bản dựng Beta. Để thoát, hãy chuyển lại về bản ảnh hoặc trình cài đặt ổn định.", - "howToInstall": "Cách nhận bản Beta", - "desktopInstall": "Tải xuống trình cài đặt Beta và cài đặt đè lên bản hiện tại.", - "downloadBeta": "Tải xuống {{version}}", - "dockerInstall": "Thay đổi thẻ (tag) của hình ảnh thành Beta và khởi động lại container:", - "copy": "Sao chép", - "copied": "Đã sao chép", - "copyFailed": "Không thể sao chép", - "learnMore": "Tìm hiểu thêm về Beta", - "feedback": "Phản hồi", - "feedbackHint": "Tìm thấy lỗi hay có ý tưởng? Phản hồi sẽ được gửi trực tiếp đến nhà phát triển với phiên bản của bạn đã được điền sẵn.", - "sendFeedback": "Gửi phản hồi Beta", - "releases": "Bản phát hành", - "thisVersion": "Phiên bản hiện tại", - "newestStable": "Bản ổn định mới nhất", - "newestBeta": "Bản Beta mới nhất", - "noRelease": "Hiện không có", - "pluginBetas": "Plugin Beta", - "pluginBetasIntro": "Mỗi plugin có thể sử dụng Beta độc lập. Để thử, hãy mở plugin và nhấn Thử Beta.", - "openPlugins": "Mở Plugin", - "waitingForStable": "Đã quay lại bản ổn định. Giữ nguyên {{version}} cho đến khi có bản phát hành ổn định mới hơn.", - "backToStable": "Quay lại bản ổn định", - "allPluginsBeta": "Sử dụng Beta cho tất cả plugin", - "allPluginsStable": "Tất cả plugin quay lại bản ổn định", - "saveFailed": "Không thể lưu thay đổi" - } + "featureUnavailable": "{{name}} hiện không khả dụng. Các cài đặt này đã được lưu nhưng sẽ không có hiệu lực." }, "managerCard": { "refresh": "Làm mới", @@ -2219,80 +1504,10 @@ "filter": "Lọc..." }, "sync": { - "server": "Máy chủ Termix", - "account": "Tài khoản", - "status": "Trạng thái", - "never": "chưa bao giờ", - "justNow": "vừa xong", "minutesAgo_other": "{{count}} phút trước", "hoursAgo_other": "{{count}} giờ trước", - "actionFailed": "Hành động không thành công. Hãy thử lại.", - "unlinkedTitle": "Chỉ thiết bị này", - "unlinkedBody": "Termix hoạt động độc lập trên thiết bị này. Kết nối nó với máy chủ Termix của bạn để đồng bộ mọi thứ.", - "unlinkedPointHosts": "Máy chủ, thông tin đăng nhập, đoạn lệnh và cài đặt của bạn sẽ theo bạn đến mọi thiết bị.", - "unlinkedPointOffline": "Mọi thứ vẫn hoạt động khi không thể kết nối với máy chủ và sẽ đồng bộ lại sau.", - "unlinkedPointAccount": "Bạn đăng nhập bằng tài khoản máy chủ của mình, và các máy chủ mà người khác chia sẻ với bạn cũng sẽ hiển thị ở đây.", - "linkButton": "Kết nối với máy chủ", - "state": { - "syncing": "Đang đồng bộ", - "offline": "Không thể kết nối đến máy chủ", - "error": "Đồng bộ đã dừng", - "signedOut": "Đã đăng xuất", - "synced": "Đã đồng bộ {{time}}" - }, "pending_other": "{{count}} thay đổi đang chờ đồng bộ", - "signInAgain": "Đăng nhập lại", - "syncNow": "Đồng bộ ngay", - "unlink": "Hủy kết nối", - "unlinked": "Thiết bị này không còn được kết nối", - "unlinkTitle": "Hủy liên kết thiết bị này?", - "unlinkDescription": "Hành động này sẽ dừng đồng bộ hóa và đăng xuất khỏi máy chủ. Các máy chủ được người khác chia sẻ với bạn sẽ bị xóa khỏi thiết bị này trong mọi trường hợp.", - "unlinkKeepTitle": "Giữ dữ liệu của tôi ở đây", - "unlinkKeepBody": "Các máy chủ, thông tin đăng nhập và cài đặt của bạn sẽ vẫn ở trên thiết bị này và tiếp tục hoạt động độc lập.", - "unlinkRemoveTitle": "Xóa dữ liệu đã đồng bộ", - "unlinkRemoveBody": "Tất cả dữ liệu từ máy chủ sẽ bị xóa khỏi thiết bị này. Chỉ giữ lại các máy chủ được lưu cục bộ trên thiết bị.", - "conflictsTitle": "Xung đột", - "conflictsDescription": "Những mục này đã được thay đổi trên thiết bị và máy chủ cùng lúc. Phiên bản trên máy chủ đang được sử dụng. Chọn giữ phiên bản của bạn để gửi nó lên máy chủ thay thế.", - "keepMine": "Giữ của tôi", - "keepServer": "Giữ của máy chủ", - "errorsTitle": "Chưa đồng bộ", - "errorsDescription": "Máy chủ không chấp nhận những thay đổi này. Chúng vẫn ở trên thiết bị này.", - "errorPermission": "Tài khoản của bạn trên máy chủ không được phép thực hiện thay đổi này.", - "retry": "Thử lại", - "whatSyncs": "Những gì được đồng bộ", - "whatSyncsDescription": "Tắt bất kỳ mục nào bạn muốn giữ riêng trên thiết bị này.", - "coreGroup": "Termix", - "notOnServer": "Máy chủ không có mục này", - "notOnDevice": "Chưa có trên thiết bị này", - "localOnlyHint": "Bạn cũng có thể giữ riêng từng máy chủ hoặc thư mục trên thiết bị này từ cài đặt của chúng.", - "originTitle": "Nơi bắt đầu kết nối", - "originDescription": "Kết nối đến máy chủ từ thiết bị này, hoặc thông qua máy chủ. Bạn có thể thay đổi tùy chọn này cho từng máy chủ.", - "originLocal": "Thiết bị này", - "originRemote": "Máy chủ", - "entities": { - "hosts": "Máy chủ", - "sshCredentials": "Thông tin đăng nhập", - "sshFolders": "Thư mục", - "userPreferences": "Tùy chọn", - "pluginUserSettings": "Cài đặt plugin", - "sharedHosts": "Máy chủ được chia sẻ với bạn", - "sharedCredentials": "Thông tin đăng nhập được chia sẻ với bạn", - "vaultProfiles": "Hồ sơ Vault", - "snippetFolders": "Thư mục Snippet", - "snippets": "Snippets", - "dashboardServiceLinks": "Liên kết dịch vụ", - "homepageItems": "Mục trang chủ", - "networkTopology": "Sơ đồ mạng", - "workspaces": "Không gian làm việc", - "hostDefaults": "Cài đặt mặc định máy chủ", - "hostDefaultsAdmin": "Cài đặt mặc định máy chủ của quản trị viên", - "aiProviders": "Nhà cung cấp AI", - "homepageLayouts": "Bố cục trang chủ", - "accountProfile": "Hồ sơ tài khoản" - }, "proxy": { - "title": "Proxy ngược", - "description": "Chỉ cần thiết khi có thành phần như Cloudflare Access hoặc trang đăng nhập đặt trước máy chủ của bạn.", "headersTitle": "Tiêu đề bổ sung", "headersHint": "Được gửi kèm với mọi yêu cầu đến máy chủ, ví dụ như token dịch vụ Cloudflare Access.", "headerName": "Tên tiêu đề", @@ -2305,8 +1520,7 @@ "username": "Tên người dùng", "password": "Mật khẩu", "allowInvalidCertificate": "Tin tưởng chứng chỉ tự ký", - "allowInvalidCertificateHint": "Chỉ dành cho máy chủ của riêng bạn, khi chứng chỉ của nó không đến từ cơ quan cấp chứng chỉ được biết đến.", - "saved": "Đã lưu" + "allowInvalidCertificateHint": "Chỉ dành cho máy chủ của riêng bạn, khi chứng chỉ của nó không đến từ cơ quan cấp chứng chỉ được biết đến." }, "problems": { "invalidUrl": "Điều này không giống một địa chỉ web.", @@ -2342,6 +1556,27 @@ "linking": "Đang liên kết và chạy đồng bộ hóa đầu tiên...", "linked": "Đã liên kết. Dữ liệu của bạn đang được đồng bộ hóa.", "signedInAgain": "Đã đăng nhập. Đồng bộ hóa đang chạy lại." + }, + "entities": { + "hosts": "Máy chủ", + "sshCredentials": "Thông tin đăng nhập", + "sshFolders": "Thư mục", + "userPreferences": "Tùy chọn", + "pluginUserSettings": "Cài đặt plugin", + "sharedHosts": "Máy chủ được chia sẻ với bạn", + "sharedCredentials": "Thông tin đăng nhập được chia sẻ với bạn", + "vaultProfiles": "Hồ sơ Vault", + "snippetFolders": "Thư mục Snippet", + "snippets": "Snippets", + "dashboardServiceLinks": "Liên kết dịch vụ", + "homepageItems": "Mục trang chủ", + "networkTopology": "Sơ đồ mạng", + "workspaces": "Không gian làm việc", + "hostDefaults": "Cài đặt mặc định máy chủ", + "hostDefaultsAdmin": "Cài đặt mặc định máy chủ của quản trị viên", + "aiProviders": "Nhà cung cấp AI", + "homepageLayouts": "Bố cục trang chủ", + "accountProfile": "Hồ sơ tài khoản" } }, "hostDefaults": { @@ -2358,28 +1593,9 @@ "resetTitle": "Máy chủ này đặt giá trị riêng của nó. Nhấp để sử dụng lại giá trị mặc định từ {{source}}", "clearTitle": "Đặt ở cấp độ này. Nhấp để xóa và sử dụng {{source}} thay thế", "inheritedTitle": "Theo mặc định từ {{source}}", - "titleAdmin": "Mặc định máy chủ", - "titleUser": "Mặc định của tôi", - "titleFolder": "Mặc định thư mục: {{name}}", - "descriptionAdmin": "Giá trị mặc định cho mọi máy chủ trên máy chủ này. Người dùng, thư mục hoặc chính máy chủ vẫn có thể đặt giá trị khác. Thay đổi một trường để đặt giá trị tại đây, hoặc xóa nó để để trống.", - "descriptionUser": "Giá trị mặc định cho tất cả máy chủ của bạn, ghi đè lên mặc định của máy chủ. Thư mục hoặc chính máy chủ vẫn có thể đặt giá trị khác. Thay đổi một trường để đặt giá trị tại đây, hoặc xóa nó để để trống.", - "descriptionFolder": "Giá trị mặc định cho các máy chủ trong thư mục này và các thư mục con, ghi đè lên mặc định của bạn. Chính máy chủ vẫn có thể đặt giá trị khác. Thay đổi một trường để đặt giá trị tại đây, hoặc xóa nó để để trống.", - "save": "Lưu mặc định", "saved_other": "Đã lưu mặc định. {{count}} máy chủ đã được cập nhật.", - "savedInBackground": "Đã lưu mặc định. Các máy chủ đang được cập nhật trong nền.", "appliedToHosts_other": "{{count}} máy chủ đã được cập nhật với các giá trị mặc định mới.", - "saveFailed": "Không thể lưu các giá trị mặc định", - "loadFailed": "Không thể tải các giá trị mặc định", - "confirmTitle": "Lưu mặc định?", "confirmChanges_other": "{{count}} máy chủ theo các giá trị mặc định này và sẽ thay đổi.", - "confirmNoChanges": "Không có máy chủ hiện tại nào thay đổi. Các máy chủ mới sẽ bắt đầu với các giá trị mặc định này.", - "menuMyDefaults": "Mặc định của tôi", - "folderDefaultsAction": "Mặc định thư mục", - "adminSectionDescription": "Đặt các giá trị mặc định mà mọi máy chủ trên máy chủ này sẽ theo, cho mọi cài đặt của máy chủ, bao gồm cả của từng plugin. Người dùng và thư mục có thể đặt giá trị riêng của họ lên trên, và bất kỳ máy chủ nào vẫn có thể sử dụng giá trị riêng của nó.", - "editServerDefaults": "Chỉnh sửa mặc định máy chủ", - "resetMenu": "Đặt lại", - "resetAll": "Đặt lại tất cả về mặc định", - "resetCore": "Đặt lại kết nối và SSH về mặc định", "resetDone_other": "{{count}} máy chủ hiện đang sử dụng cài đặt mặc định." }, "panel": { @@ -2392,44 +1608,10 @@ "fields": { "secretSaved": "Đã lưu. Nhập để thay thế." }, - "sharing": { - "revokeConfirm": "Gỡ quyền truy cập cho {{name}}?", - "revoke": "Gỡ quyền truy cập" - }, "manage": { - "searchSettings": "Tìm kiếm cài đặt", - "noMatchingSettings": "Không có cài đặt nào khớp.", - "sections": "Mục", - "sectionNeedsAttention": "Có điều gì đó ở đây cần chú ý", "needsAttention_other": "{{count}} mục cần chú ý.", - "bandHost": "Máy chủ", - "bandFeatures": "Giao thức và plugin", - "bandCredential": "Thông tin đăng nhập", - "sshConnection": "Kết nối SSH", - "errorAddressRequired": "Bắt buộc phải có địa chỉ.", - "errorPortRange": "Sử dụng cổng từ 1 đến 65535.", - "defaults": "Mặc định", - "searchHosts": "Tìm kiếm máy chủ", - "searchCredentials": "Tìm kiếm thông tin đăng nhập", - "searchDefaults": "Tìm kiếm mặc định", - "addCredential": "Thêm thông tin đăng nhập", - "nothingMatches": "Không có kết quả nào khớp", - "nothingYet": "Chưa có gì ở đây", - "emptyHostsHint": "Thêm một máy chủ và nó sẽ hiển thị ở đây, trong bất kỳ thư mục nào bạn chỉ định.", - "emptyCredentialsHint": "Thông tin đăng nhập bạn lưu có thể được tái sử dụng bởi bất kỳ máy chủ nào.", - "collapse": "Thu gọn", - "expand": "Mở rộng", - "cannotBeUndone": "Thao tác này không thể hoàn tác.", - "hostNotFound": "Không tìm thấy máy chủ đó. Hãy thử làm mới danh sách.", "hostCount_other": "{{count}} máy chủ", - "credentialCount_other": "{{count}} thông tin đăng nhập", - "newHost": "Máy chủ mới", - "newCredential": "Thông tin đăng nhập mới", - "advanced": "Nâng cao", - "pickHost": "Chọn một máy chủ để chỉnh sửa", - "pickCredential": "Chọn một thông tin đăng nhập để chỉnh sửa", - "pickDefaults": "Chọn mức độ mặc định để chỉnh sửa", - "pickHint": "Mọi thứ về một kết nối đều nằm ở đây, được nhóm lại để bạn dễ tìm." + "credentialCount_other": "{{count}} thông tin đăng nhập" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/zh_CN.json b/src/ui/locales/translated/zh_CN.json index 1cde406fe..05994ca62 100644 --- a/src/ui/locales/translated/zh_CN.json +++ b/src/ui/locales/translated/zh_CN.json @@ -141,7 +141,6 @@ "continue": "继续", "error": "错误", "unsavedChanges": "未保存的更改", - "more": "更多", "loading": "加载中...", "host": "主机", "selectHost": "选择主机...", @@ -154,7 +153,6 @@ "cancel": "取消", "username": "用户名", "login": "登录", - "logout": "登出", "register": "注册", "password": "密码", "confirmPassword": "确认密码", @@ -165,8 +163,6 @@ "rename": "重命名", "edit": "编辑", "confirm": "确认", - "next": "下一步", - "previous": "上一步", "refresh": "刷新", "language": "语言", "backendReconnected": "服务器连接已恢复", @@ -234,10 +230,6 @@ "pluginsDocsLink": "阅读每个插件的说明" }, "desktopUpdates": { - "title": "桌面应用", - "mode": "更新", - "modeHint": "此应用如何获取新版本。", - "manualModeHint": "此副本无法自动更新,因此 Termix 仅在新版本发布时通知您。", "modeAutomatic": "自动", "modePrompt": "先询问", "modeNever": "从不", @@ -247,15 +239,6 @@ "onboardingTitle": "应用更新", "onboardingBody": "桌面应用现在可以自动更新。请选择您希望接收新版本的方式。您稍后可以在“设置”>“更新”中更改此选项。", "onboardingManual": "此应用副本的安装方式不支持自动更新,因此 Termix 会在新版本发布时通知您,并提供下载链接。", - "status": "版本 {{version}}", - "statusIdle": "尚未检查", - "statusChecking": "正在检查更新", - "statusAvailable": "版本 {{version}} 可用", - "statusDownloading": "正在下载 {{version}} ({{progress}}%)", - "statusReady": "版本 {{version}} 已就绪。重启即可安装。", - "statusUpToDate": "您已拥有最新版本", - "statusError": "无法检查更新。请稍后重试。", - "checkNow": "立即检查", "download": "下载", "restart": "立即重启", "later": "稍后", @@ -269,26 +252,11 @@ "terminal": "终端", "close": "关闭", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "复制密码", - "copySudoPassword": "复制 Sudo 密码", - "passwordCopied": "密码已复制到剪贴板", - "failedToCopyPassword": "复制密码失败", - "refreshTab": "刷新连接", - "renameTab": "重命名标签页", "dashboard": "仪表板", "quickConnect": "快速连接", - "openAsTabHint": "Ctrl+点击或中键点击以标签页形式打开", - "openAsTab": "以标签页形式打开", - "openInRightDock": "在右侧停靠栏中打开", - "closeRightDock": "关闭右侧停靠栏", - "toggleRightDock": "切换右侧停靠栏", "hosts": "主机", "credentials": "凭据", "connections": "连接", - "keepSideMenuOpen": "保持菜单展开", - "collapseSideMenu": "折叠菜单", - "roleAdministrator": "管理员", - "roleUser": "用户", "sync": "同步", "reconnectDisconnectedTerminals": "重新连接所有已断开的终端", "reconnectingTerminals_other": "正在重新连接 {{count}} 个终端", @@ -296,29 +264,10 @@ "reconnectTerminalsFailed_other": "无法开始重新连接 {{count}} 个终端", "fullscreenUnsupported": "此浏览器不支持全屏", "fullscreenFailed": "无法切换全屏", - "resetSidebarWidth": "重置宽度", - "collapseSidebar": "折叠侧边栏", - "openSidebar": "打开侧边栏", "confirmCloseHost": "关闭 {{host}}?", - "enterFullscreen": "进入全屏 (Ctrl+Shift+F)", - "exitFullscreen": "退出全屏 (Ctrl+Shift+F)", - "group": { - "objects": "我的", - "tools": "工具", - "system": "系统" - }, - "searchEverything": "搜索主机、标签页和操作", - "search": "搜索", "hiddenCount_other": "{{count}} 个已隐藏", - "showInRail": "在侧边栏中显示", - "moveUp": "上移", - "moveDown": "下移", - "resetRailOrder": "重置顺序", - "hideFromRail": "从侧边栏隐藏", - "openSettings": "打开设置", "settings": "设置", "manage": "管理", - "mobileNavigation": "导航", "plugins": "插件" }, "hosts": { @@ -904,35 +853,14 @@ "importSummary": "导入完成:{{imported}} 已导入,{{updated}} 已更新,{{failed}} 失败", "importHostsFailed": "导入主机失败" }, - "commandPalette": { - "searchPlaceholder": "搜索主机、命令或设置...", - "quickActions": "快速操作", - "navigation": "导航", - "orShortcut": "或", - "addNewHost": "添加新主机", - "adminSettings": "管理员设置", - "addCredential": "添加凭据", - "recentActivity": "最近活动", - "serversAndHosts": "服务器与主机", - "noHostsFound": "未找到匹配“{{search}}”的主机", - "links": "链接", - "navigate": "导航", - "select": "选择", - "pluginActions": "更多操作", - "noTargetTab": "没有打开的终端标签页", - "documentation": "文档" - }, "splitScreen": { "title": "分屏", "defaultLabel": "分屏 {{number}}", "splitRight": "向右分屏", "splitDown": "向下分屏", - "addToSplit": "添加到 {{split}}", "paneEmptyItem": "窗格 {{index}}:空", "paneItem": "窗格 {{index}}:{{label}}", "paneNumber": "窗格 {{index}}", - "newPaneRight": "在右侧新建窗格", - "newPaneBelow": "在下方新建窗格", "emptyTitle": "空窗格", "emptyHint": "选择要在此处显示的内容。当此窗格处于选中状态时,从侧边栏打开的任何内容也会在此处打开。", "openTabs": "打开的标签页", @@ -949,7 +877,6 @@ "clearPane": "清空此窗格", "zoom": "放大窗格", "unzoom": "恢复布局", - "unsplit": "取消分屏", "layouts": "布局", "applyLayout": "更改布局", "maxPanes_other": "一个分屏最多可容纳 {{count}} 个窗格", @@ -957,8 +884,6 @@ "dropHere": "拖放至此显示", "paneActions": "窗格操作", "dividerHint": "拖动以调整大小。双击以平均分配。", - "openInSplit": "在分屏中打开", - "openInNewSplit": "使用当前标签页新建分屏", "shortcuts": "快捷键", "shortcutNavigate": "在窗格间移动", "presets": { @@ -972,23 +897,6 @@ "grid6": "六宫格" } }, - "connections": { - "noConnections": "无连接", - "noConnectionsDesc": "打开终端、文件管理器或远程桌面以在此处查看连接", - "connectedFor": "已连接 {{duration}}", - "connected": "已连接", - "disconnected": "已断开", - "reconnect": "重新连接", - "sectionOpen": "已打开", - "sectionBackground": "后台", - "backgroundDesc": "断开连接后,会话将在 {{minutes}} 分钟内保持活跃,并可重新连接。", - "expiresIn": "{{duration}} 后过期", - "search": "搜索连接...", - "noSearchResults": "没有匹配的连接", - "rename": "重命名会话", - "forgetConfirm": "要结束 {{name}} 的后台会话吗?", - "forget": "结束会话" - }, "sshAuth": { "totpRequired": "需要双因素认证", "totpCodeLabel": "验证码", @@ -1126,474 +1034,46 @@ "placeholders": { "keyPassword": "密钥密码", "pastePrivateKey": "在此粘贴您的私钥...", - "enterPassword": "输入您的密码", - "apiKeyName": "例如:CI 流水线", - "credentialName": "例如:生产环境 SSH 密钥", - "optionalDetails": "可选详情...", - "sshUsername": "例如:root 或 deploy", - "hostAddress": "10.0.0.1 或 example.com", - "hostName": "例如:Web 服务器 生产环境" + "enterPassword": "输入您的密码" }, "dashboard": { - "title": "仪表板", - "github": "GitHub", - "reportBug": "报告错误", - "discord": "Discord", - "docs": "文档", - "donate": "捐赠", - "serverOverview": "服务器概览", - "version": "版本", "updateAvailable": "可用更新", - "beta": "测试版", - "uptime": "运行时间", - "database": "数据库", - "healthy": "正常", - "error": "错误", - "totalHosts": "主机总数", - "totalCredentials": "凭据总数", - "recentActivity": "最近活动", - "reset": "重置", - "noRecentActivity": "无最近活动", - "quickActions": "快捷操作", - "addHost": "添加主机", - "addCredential": "添加凭据", - "adminSettings": "管理员设置", - "userProfile": "用户资料", - "serverStats": "服务器统计", - "customizeLayout": "自定义仪表板", - "justNow": "刚刚" + "beta": "测试版" }, "dashboardTab": { "stable": "稳定版", - "registerNewServer": "注册新服务器", - "storeSshKeysOrPasswords": "存储 SSH 密钥或密码", - "manageUsersAndRoles": "管理用户和角色", - "manageYourAccount": "管理您的账户", - "hostStatus": "主机状态", - "noHostsConfigured": "未配置主机", - "checking": "检查中", - "commandPalette": "命令面板", - "done": "完成", - "clear": "清除", - "dragToResizeColumns": "拖拽以调整列宽", - "hostsAvailable": "可用主机", - "removeSection": "移除区块", - "addSection": "添加区块", - "allSectionsShown": "所有内容已显示在仪表板上。", - "fromPlugins": "来自插件", - "dropHere": "将区块拖放到此处", - "dragToReorder": "拖拽区块以重新排序", - "clearActivityConfirm": "清除您的最近活动?", - "resetConfirm": "将仪表板重置为默认布局?", "onlineCount_other": "{{count}} 在线", "hostCount_other": "{{count}} 台主机" }, "admin": { - "sectionGeneral": "常规", - "sectionUsers": "用户", - "sectionSessions": "会话", - "sectionRoles": "角色", - "sectionDatabase": "数据库", - "sectionApiKeys": "API 密钥", - "sectionAuditLog": "审计日志", - "sectionSsl": "HTTPS 证书", - "sectionBranding": "白标", - "brandingAppName": "应用名称", - "brandingAppNameDesc": "显示在登录屏幕和浏览器标签页上。留空则使用“Termix”。", - "brandingTagline": "标语", - "brandingTaglineDesc": "显示在登录屏幕的应用名称下方。留空则使用默认标语。", - "brandingLogo": "徽标", - "brandingLogoDesc": "PNG、JPEG 或 WEBP 格式,最大 750 KB。将替换登录屏幕和浏览器标签页上的默认图标。", - "brandingLogoUpload": "上传徽标", - "brandingLogoReset": "恢复默认", - "brandingLogoInvalid": "无效的图片。请使用不超过 750 KB 的 PNG、JPEG 或 WEBP 文件。", - "brandingSaved": "白标设置已保存", - "brandingSaveFailed": "保存白标设置失败", - "sslDescription": "Termix 通过 HTTPS 提供的证书。您可以在此处上传自己的证书,或在 ACME 证书部分从 Let's Encrypt 获取和续期证书。", - "sslDocsLink": "查看 SSL 文档", - "sslCertStatus": "证书状态", - "sslCertStatusNone": "无证书", - "sslCertStatusValid": "有效", - "sslCertStatusExpiring": "即将过期", - "sslCertStatusExpired": "已过期", - "sslCertExpiresAt": "于 {{date}} 过期", - "sslInfoNote": "颁发或上传证书后,Termix 将自动在 SSL_PORT(默认 8443)上启用 HTTPS,此外还有现有的 HTTP 端口。请确保该端口已发布/映射到此容器,以便可以访问。", - "sslManualCert": "证书 (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "私钥 (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "粘贴您现有的证书和私钥,如果您的 CA 要求,请包含完整的证书链。", - "sslManualUpload": "上传并安装证书", - "sslManualUploadLoading": "正在上传证书...", - "sslManualUploadSuccess": "证书上传并安装成功", - "sslManualUploadFailed": "证书上传失败", - "sslManualRequiresFields": "需要提供证书和私钥", - "auditLogTotal": "共 {{total}} 条记录", - "auditLogEmpty": "未找到审计日志记录", - "auditLogSuccess": "成功", - "auditLogFailed": "失败", - "auditLogClearFilters": "清除筛选条件", - "auditLogPage": "第 {{page}} 页,共 {{totalPages}} 页(共 {{total}} 条)", - "auditLogIp": "IP", - "auditLogResourceId": "资源 ID", - "auditLogFilterUser": "用户", - "auditLogFilterAction": "操作", - "auditLogFilterResourceType": "资源类型", - "auditLogFilterStatus": "状态", - "auditLogFilterFrom": "起始时间", - "auditLogFilterTo": "结束时间", - "auditLogFilterAll": "全部", - "allowRegistration": "允许用户注册", - "allowRegistrationDesc": "允许新用户通过用户名和密码自行注册", - "allowPasswordLogin": "允许密码登录", - "allowPasswordLoginDesc": "用户名/密码登录", - "externalAutoProvision": "自动创建外部账户", - "externalAutoProvisionDesc": "当用户首次通过 SSO 或 LDAP 等外部方式登录时,自动为其创建账户。关闭此选项后,只有已拥有账户的用户才能通过外部方式登录", - "secondFactorAfterExternalLogin": "外部登录(SSO、GitHub、Google、LDAP)后要求二次验证", - "secondFactorAfterExternalLoginDesc": "关闭时,仅在密码和其他本地登录后要求已注册的二次验证,与之前相同。开启时,所有登录方式(包括 SSO 和 LDAP)后均要求二次验证", - "allowPasswordReset": "允许重置密码", - "allowPasswordResetDesc": "通过 Docker 日志获取重置码", - "auditForwardingTitle": "转发至 SIEM", - "auditForwardingDesc": "将每条审计日志的副本以 NDJSON 格式发送至外部收集器。本地日志仍为权威数据源", - "auditForwardingEnvNotice": "环境变量也可配置转发功能;此处保存的 URL 优先级更高", - "auditForwardingToken": "Bearer 令牌(可选)", - "auditForwardingTokenStored": "Bearer 令牌(已保存)", - "auditForwardingSaved": "审计转发设置已保存", - "auditForwardingSaveError": "保存审计转发设置失败", - "sessionTimeout": "会话超时", - "hours": "小时", - "sessionTimeoutRange": "最小 1 小时,最大 720 小时", - "monitoringDefaults": "监控默认设置", - "statusCheck": "状态检查", - "sec": "秒", - "logLevel": "日志级别", - "usersCount_other": "{{count}} 个用户", - "searchUsers": "搜索用户...", - "noUsers": "暂无用户", - "noUsersMatch": "没有用户匹配您的搜索", - "pageOf": "第 {{page}} 页,共 {{total}} 页", - "createUser": "创建", - "newRole": "新建角色", - "roleName": "名称", - "roleDisplayName": "显示名称", - "roleDescription": "描述", - "rolesCount_other": "{{count}} 个角色", - "createRole": "创建", - "creating": "创建中...", - "exportDatabase": "导出数据库", - "exportDatabaseDesc": "下载包含所有主机、凭据和设置的便携式 SQLite 备份", - "export": "导出", - "exporting": "导出中...", - "importDatabase": "导入数据库", - "importDatabaseDesc": "从任何数据库后端的便携式 .sqlite 备份中恢复", - "importDatabaseSelected": "已选择:{{name}}", - "selectFile": "选择文件", - "changeFile": "更改", - "import": "导入", - "importing": "导入中...", - "apiKeysCount_other": "{{count}} 个密钥", - "apiKeysDocsLink": "查看文档", - "apiKeysCliHint": "在 Termix CLI 中使用 API 密钥,以便从终端管理服务器", - "apiKeysCliLink": "查看 CLI 文档", - "newApiKey": "新建 API 密钥", - "apiKeyCreatedWarning": "密钥已创建 - 请立即复制,之后将不再显示。", - "apiKeyName": "名称", - "apiKeyUser": "用户", - "apiKeySelectUser": "选择用户...", - "apiKeyExpiresAt": "过期时间", - "createKey": "创建密钥", - "apiKeyNoExpiry": "永不过期", - "revokedBadge": "已撤销", - "authTypeDual": "双重认证", - "authTypeExternal": "外部", - "authTypeLocal": "本地", - "adminStatusAdministrator": "管理员", - "adminStatusRegularUser": "普通用户", - "adminBadge": "管理员", - "systemBadge": "系统", - "customBadge": "自定义", - "youBadge": "本人", - "sessionsActive_other": "{{count}} 个活跃", - "sessionActive": "活跃:{{time}}", - "sessionExpires": "过期:{{time}}", - "revokeAll": "全部", - "revokeAllSessionsSuccess": "已撤销该用户的所有会话", - "revokeAllSessionsFailed": "撤销会话失败", - "revokeSessionFailed": "撤销会话失败", - "addRole": "添加角色", - "noCustomRoles": "未定义自定义角色", - "removeRoleFailed": "移除角色失败", - "assignRoleFailed": "分配角色失败", - "userAdminAccess": "管理员", - "userAdminAccessDesc": "完全访问所有管理设置", - "userRoles": "角色", - "revokeAllUserSessions": "撤销所有会话", - "revokeAllUserSessionsDesc": "强制所有设备重新登录", - "revoke": "撤销", - "deleteUserWarning": "删除此用户后无法恢复。", - "deleteUser": "删除 {{username}}", - "deleting": "正在删除...", - "deleteUserFailed": "删除用户失败", - "deleteUserSuccess": "用户 \"{{username}}\" 已删除", - "deleteRoleSuccess": "角色 \"{{name}}\" 已删除", - "revokeKeySuccess": "密钥 \"{{name}}\" 已撤销", - "revokeKeyFailed": "撤销密钥失败", - "copiedToClipboard": "已复制到剪贴板", - "done": "完成", - "createUserTitle": "创建用户", - "createUserDesc": "创建一个新的本地账户。", - "createUserUsername": "用户名", - "createUserPassword": "密码", - "createUserPasswordHint": "至少 6 个字符。", - "createUserEnterUsername": "输入用户名", - "createUserSubmit": "创建用户", - "editUserTitle": "管理用户:{{username}}", - "editUserDesc": "编辑角色、管理员状态、会话和账户设置。", - "editUserUsername": "用户名", - "editUserAuthType": "认证类型", - "editUserAdminStatus": "管理员状态", - "editUserUserId": "用户 ID", - "linkAccountTitle": "关联账户", - "linkAccountDesc": "将外部账户 {{username}} 与现有的本地账户合并。", - "linkAccountDescLocal": "将本地账户 {{username}} 与现有的仅外部账户关联。", - "linkAccountWarningTitle": "此操作将:", - "linkAccountEffect1": "删除仅外部登录的账户", - "linkAccountEffect2": "将其外部登录方式添加到目标账户", - "linkAccountEffect3": "允许同时使用外部登录和密码登录", - "linkAccountTargetUsername": "本地账户用户名", - "linkAccountTargetPlaceholder": "输入要关联的本地账户用户名", - "linkAccountExternalUsername": "外部账户用户名", - "linkAccountExternalPlaceholder": "输入要合并的仅外部登录账户的用户名", - "linkAccountExternalNotFound": "未找到使用该用户名的仅外部登录账户", - "linkAccounts": "关联账户", - "linkAccountSuccess": "账户关联成功", - "linkAccountFailed": "账户关联失败", - "linkAccountInProgress": "关联中...", - "unlinkAccountTitle": "取消关联外部登录", - "unlinkAccountDesc": "从 {{username}} 移除外部登录方式。此后该用户只能通过密码登录。", - "unlinkAccountWarning": "此操作将从该账户移除外部登录方式。用户必须设置密码才能继续登录。", - "unlinkAccount": "取消关联外部登录", - "unlinkAccountInProgress": "取消关联中...", - "unlinkAccountSuccess": "外部登录已取消关联", - "unlinkAccountFailed": "取消关联外部登录失败", - "updateRegistrationFailed": "更新注册设置失败", - "updatePasswordLoginFailed": "更新密码登录设置失败", - "updateSecondFactorAfterExternalLoginFailed": "更新二次验证设置失败", - "updatePasswordResetFailed": "更新密码重置设置失败", - "sessionTimeoutRange2": "会话超时时间必须在 1 到 720 小时之间", - "sessionTimeoutSaved": "会话超时时间已保存", - "sessionTimeoutSaveFailed": "保存会话超时时间失败", - "monitoringIntervalInvalid": "无效的间隔值", - "monitoringSaved": "监控设置已保存", - "monitoringSaveFailed": "保存监控设置失败", - "logLevelUpdateFailed": "更新日志级别失败", - "createUserRequired": "用户名和密码为必填项", - "createUserPasswordTooShort": "密码长度至少为 6 个字符", - "createUserSuccess": "用户“{{username}}”已创建", - "createUserFailed": "创建用户失败", - "updateAdminStatusFailed": "更新管理员状态失败", - "allSessionsRevoked": "所有会话已撤销", - "revokeSessionsFailed": "撤销会话失败", - "manageUserData": "管理用户数据", - "backToUsers": "返回用户列表", - "manageTabAccount": "账户", - "manageTabHosts": "主机", - "manageTabCredentials": "凭据", - "manageTabSessions": "会话", - "manageTabDanger": "危险操作", - "manageEditorBack": "返回 {{username}} 的数据", - "dataLockedBadge": "已锁定", - "dataLockedNotice": "{{username}} 的数据将保持锁定状态,直到其下次登录。在此之前,无法查看或编辑其主机、凭据和代码片段。", - "resetPasswordTitle": "重置密码", - "resetPasswordExternalOnly": "该用户通过外部提供商登录,没有设置密码。", - "resetPasswordPlaceholder": "新密码", - "resetPasswordBtn": "重置", - "resetPasswordWorking": "重置中...", - "resetPasswordSuccess": "密码已重置", - "resetPasswordSuccessWiped": "密码已重置。用户的加密数据已被清除。", - "resetPasswordFailed": "重置密码失败", - "resetPasswordConfirmWipe": "{{username}} 自加密升级后尚未登录,因此其数据无法恢复。现在重置将删除其主机、凭据和代码片段。是否继续?", - "manageApiKeys": "API 密钥", - "apiKeyNamePlaceholder": "密钥名称", - "apiKeyCopyNotice": "请立即复制此密钥,之后将不再显示。", - "noApiKeysForUser": "无 API 密钥", - "apiKeyDeleteFailed": "删除 API 密钥失败", - "exportUserData": "数据导出", - "exportUserDataDesc": "将此用户的服务器、凭据和文件管理器数据作为 JSON 下载。密钥将被解密。", - "exportUserDataSuccess": "用户数据已导出", - "exportUserDataFailed": "导出用户数据失败", "hostsCount_other": "{{count}} 个主机", - "addHostForUser": "添加服务器", - "noHostsForUser": "该用户没有服务器", - "connectToHost": "连接", - "deleteHostConfirm": "删除属于 {{username}} 的服务器“{{name}}”?", - "hostDeletedSuccess": "服务器已删除", - "hostDeleteFailed": "删除服务器失败", "credentialsCount_other": "{{count}} 个凭据", - "addCredentialForUser": "添加凭据", - "noCredentialsForUser": "该用户没有凭据", - "deleteCredentialConfirm": "删除属于 {{username}} 的凭据“{{name}}”?", - "credentialDeletedSuccess": "凭据已删除", - "credentialDeleteFailed": "删除凭据失败", - "noSessionsForUser": "无活跃会话", - "deleteSuccessorLabel": "将服务器和凭据移交给", - "deleteSuccessorMe": "我(执行删除的管理员)", - "deleteSuccessorNone": "无人,直接删除", - "deleteSuccessorDesc": "该用户共享的所有内容在新所有者下将继续有效;选择“无人”将删除其服务器、凭据和共享。", - "deleteUserDangerDesc": "永久删除 {{username}} 及其所有数据(服务器、凭据、代码片段、历史记录)。此操作无法撤销。", - "deleteUserConfirm": "永久删除 {{username}} 及其所有数据?", - "deleteUserAdminBlocked": "删除此用户前请先移除其管理员身份。", - "createRoleRequired": "名称和显示名称为必填项", - "createRoleSuccess": "角色“{{name}}”已创建", - "createRoleFailed": "创建角色失败", - "apiKeyNameRequired": "密钥名称为必填项", - "apiKeyUserRequired": "用户 ID 为必填项", - "apiKeyCreatedSuccess": "API 密钥“{{name}}”已创建", - "apiKeyCreateFailed": "创建 API 密钥失败", - "exportSuccess": "数据库导出成功", - "exportFailed": "数据库导出失败", - "importSelectFile": "请先选择一个文件", - "importCompleted": "导入完成:已导入 {{total}} 项,跳过 {{skipped}} 项", - "importFailed": "导入失败:{{error}}", - "importError": "数据库导入失败", - "sectionHostDefaults": "服务器默认设置", "rolePermissions": { - "count_other": "{{count}} 个权限", - "editAction": "编辑权限", - "loadError": "加载权限目录失败", - "saved": "角色权限已保存", - "saveError": "保存角色权限失败", - "save": "保存", - "saving": "正在保存...", - "pluginDisabled": "插件已禁用", "groups": { "hosts": "服务器", "credentials": "凭据", "admin": "管理" } - }, - "notificationPrivateEndpoints": "允许的通知私有主机", - "notificationPrivateEndpointsDesc": "通知渠道可以联系的确切私有主机。用逗号分隔。", - "updateNotificationEndpointsFailed": "更新通知端点白名单失败", - "secondFactorsSectionTitle": "第二因素", - "secondFactorsNone": "未注册任何第二因素", - "secondFactorUnavailable": "不可用", - "resetSecondFactors": "重置第二因素", - "resetSecondFactorsConfirm": "移除 {{username}} 的所有第二因素?他们可以使用密码或 SSO 登录并重新注册。", - "secondFactorsResetSuccess": "二次验证已重置", - "secondFactorsResetFailed": "重置二次验证失败", - "passwordLoginForced": "密码登录已关闭,但未启用其他登录方式,因此暂时保持开启,以免用户无法登录。", - "sslNotRenewed": "没有自动续期此证书。它将于 {{date}} 过期。请在 ACME 证书部分开启自动续期,或在此之前上传新证书。", - "sslSelfSigned": "由 Termix 生成的自签名证书。浏览器会显示警告。", - "sslRenewedBy": "由 {{plugin}} 自动续期", - "sslIssuer": "由 {{issuer}} 颁发", - "sslNames": "涵盖 {{names}}", - "sslManualTitle": "上传证书", - "updateExternalAutoProvisionFailed": "更新自动创建设置失败", - "hostTags": "预定义主机标签", - "hostTagsDesc": "所有用户在主机编辑器中看到的建议标签。按空格或回车添加标签。在此处删除标签不会从主机中移除它。", - "hostTagsError": "无法加载或保存主机标签建议。", - "revokeAllSessionsConfirm": "让 {{username}} 在所有设备退出登录?", - "revokeSessionConfirm": "退出此会话?", - "revokeSession": "退出登录", - "deleteRoleConfirm": "删除 {{name}} 角色?", - "revokeKeyConfirm": "撤销 API 密钥 {{name}}?", - "revokeKey": "撤销" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "位置", - "who": "用户", - "hostLabel": "主机", - "hostPlaceholder": "192.168.1.1 或 example.com", - "portLabel": "端口", - "usernameLabel": "用户名", - "usernamePlaceholder": "用户名", - "authLabel": "认证", - "passwordLabel": "密码", - "passwordPlaceholder": "密码", - "privateKeyLabel": "私钥", - "privateKeyPlaceholder": "粘贴私钥...", - "credentialLabel": "凭据", - "credentialPlaceholder": "选择已保存的凭据", - "protocolLabel": "协议", - "domainLabel": "域", - "domainPlaceholder": "可选", - "connectToAction": "连接到 {{name}}", - "sshProtocol": "SSH", - "noTarget": "未安装可连接到此类型主机的组件" + "usernameLabel": "用户名" }, "keybindings": { - "description": "将按键绑定到终端和应用中的操作,或更改内置快捷键。", - "defaultsHeading": "内置快捷键", - "fixedHeading": "应用快捷键", - "fixed": { - "splitRight": "向右分屏", - "splitDown": "向下分屏", - "zoomPane": "放大当前窗格", - "navigatePane": "在窗格间切换", - "nextTab": "下一个标签页", - "previousTab": "上一个标签页", - "jumpTab": "跳转到标签页", - "previousView": "返回上一个侧边栏视图", - "fullscreen": "切换全屏" - }, - "customHeading": "自定义快捷键", - "addBinding": "添加快捷键", - "addBindingTitle": "添加快捷键", - "editBindingTitle": "编辑快捷键", - "loading": "加载中...", - "noCustomBindings": "暂无自定义快捷键", - "defaultBadge": "默认", - "customizedBadge": "已自定义", - "customize": "自定义", - "resetToDefault": "恢复默认", - "resetAllToDefaults": "全部恢复默认", - "cancel": "取消", - "saveBinding": "保存快捷键", - "saveError": "保存键盘快捷键失败", - "pressKeysToRecord": "按键组合", - "pressKeysPlaceholder": "点击并按下按键", - "recording": "按下按键...", - "comboRequiredError": "请先按下按键组合", - "conflictWarning": "此组合已绑定到 {{combo}}。保存后两者将同时触发。", - "actionLabel": "操作", "actionNextTab": "切换到下一个标签页", "actionPreviousTab": "切换到上一个标签页", "actionOpenCommandPalette": "打开快速搜索", - "actionReconnectSession": "重新连接当前会话", - "unavailableAction": "{{type}}(不可用)", - "actionRequiredError": "请先选择一个操作", - "deleteConfirm": "删除此快捷键绑定?", - "resetAllConfirm": "将所有快捷键恢复为默认值?" + "actionReconnectSession": "重新连接当前会话" }, "userProfile": { - "storageModeLocal": "浏览器", - "storageModeCloud": "数据库", - "storageModeDescription": "浏览器仅在当前浏览器中存储设置。数据库会将设置同步到服务器,并可在任何设备上加载。", - "resetToDefaults": "恢复默认设置", - "resetToDefaultsSuccess": "设置已恢复为默认值。", - "storageModeSwitch": "偏好设置存储", - "sectionAccount": "账户", - "desktopProfileTitle": "仅限此设备", - "desktopProfileDescription": "此配置文件仅存在于当前设备,并独立登录。将其链接到 Termix 服务器,即可在所有设备上使用相同的主机和设置。", - "sectionInterface": "界面", - "interfacePresetDesc": "Termix 显示详细程度的预设。所有功能均可用。", "preset_simple": "简洁", "preset_simple_desc": "仅显示基本内容。", "preset_balanced": "均衡", "preset_balanced_desc": "标准布局。", "preset_advanced": "高级", "preset_advanced_desc": "显示所有内容,布局紧凑。", - "presetClearOverrides": "全部重置", - "presetOverridesTitle": "已自定义", - "presetRevertArea": "还原", - "presetConfirmTitle": "切换到 {{preset}}?", - "presetConfirmDesc": "这将重置您的侧边栏、导航、仪表板布局、终端工具栏和文件管理器视图。您的主机、凭据和主页不会受到影响。", - "presetConfirmApply": "应用预设", - "runSetupAgainDesc": "重新运行首次运行设置向导。", - "runSetupAgainButton": "运行设置向导", "uiArea_chrome": "应用框架", "uiArea_hostList": "主机列表", "uiArea_credentialList": "凭据列表", @@ -1602,125 +1082,12 @@ "uiArea_terminal": "终端", "uiArea_fileManager": "文件管理器", "uiArea_hostEditor": "主机编辑器", - "sectionAppearance": "外观", - "sectionSecurity": "安全", - "sectionApiKeys": "API 密钥", - "sectionData": "数据", - "usernameLabel": "用户名", - "roleLabel": "角色", - "roleAdministrator": "管理员", - "authMethodLabel": "认证方式", - "authMethodLocal": "本地", - "twoFaLabel": "双重验证", - "twoFaOn": "已开启", - "twoFaOff": "已关闭", - "versionLabel": "版本", - "cliTitle": "Termix CLI", - "cliDescription": "从您自己的 Shell 中打开终端、运行命令和传输文件。", - "cliLearnMore": "了解更多", - "deleteAccount": "删除账户", - "deleteAccountDescription": "永久删除您的账户", - "deleteButton": "删除", - "deleteAccountPermanent": "此操作不可撤销。", - "deleteAccountWarning": "所有会话、主机、凭据和设置都将被永久删除。", - "confirmPasswordDeletePlaceholder": "输入密码以确认", "languageLabel": "语言", "themeLabel": "主题", "fontSizeLabel": "字体大小", "interfaceFontLabel": "界面字体", "interfaceFontDescription": "更改应用程序界面字体。终端配置文件保留其各自的字体设置。", "accentColorLabel": "强调色", - "keyboardShortcuts": "键盘快捷键", - "keyboardShortcutsDescription": "自定义终端复制、粘贴和命令快捷键", - "manageShortcuts": "管理", - "commandPalette": "命令面板", - "commandPaletteDesc": "启用键盘快捷键", - "reopenTabsOnLogin": "登录时重新打开标签页", - "reopenTabsOnLoginDesc": "在您登录或刷新页面时恢复已打开的标签页,即使是从另一台设备登录", - "confirmTabClose": "关闭标签页前确认", - "confirmTabCloseDesc": "关闭终端标签页前进行询问", - "showTabNumbers": "显示标签页编号", - "showTabNumbersDesc": "在每个标签页上显示编号,以便区分", - "settingsAppRail": "应用侧栏", - "sidebarSettingsMoved": "主机侧栏显示设置已移至“自定义侧栏”面板,可从主机工具栏打开。", - "showHostTags": "显示主机标签", - "showHostTagsDesc": "在主机列表中显示标签", - "statusColors": "真实状态颜色", - "statusColorsDesc": "使用绿色/红色表示在线/离线状态,而不是强调色", - "pinAppRail": "固定应用侧栏", - "pinAppRailDesc": "保持左侧应用侧栏始终展开,而不是悬停时展开", - "expandAppRailOnHover": "悬停时展开应用侧栏", - "expandAppRailOnHoverDesc": "允许鼠标悬停在左侧应用侧栏上时展开", - "appRailHoverPushesContent": "展开时推动内容", - "appRailHoverPushesContentDesc": "为展开的侧边栏腾出空间,而不是覆盖在页面上。远程桌面等打开的会话将随之调整大小", - "showPinAppRailButton": "显示固定应用侧栏按钮", - "showPinAppRailButtonDesc": "在应用侧栏中显示一个用于固定展开的按钮。默认关闭。", - "settingsNavigation": "导航", - "navigationTabsDesc": "选择哪些标签页显示在应用侧栏中", - "settingsUpdates": "更新", - "disableUpdateChecks": "禁用更新检查", - "disableUpdateChecksDesc": "停止检查更新", - "changePassword": "更改密码", - "currentPasswordLabel": "当前密码", - "currentPasswordPlaceholder": "当前密码", - "newPasswordLabel": "新密码", - "newPasswordPlaceholder": "新密码", - "confirmPasswordLabel": "确认新密码", - "confirmPasswordPlaceholder": "确认新密码", - "updatePassword": "更新密码", - "createApiKeyTitle": "创建 API 密钥", - "createApiKeyDescription": "生成一个新的 API 密钥以进行程序化访问。", - "apiKeyNameLabel": "名称", - "apiKeyNamePlaceholder": "例如:CI 流水线", - "expiryDateLabel": "过期日期", - "optional": "选填", - "cancel": "取消", - "createKey": "创建密钥", - "apiKeyCreatedWarning": "密钥已创建 - 请立即复制,之后将不再显示。", - "copyApiKey": "复制 API 密钥", - "copiedToClipboard": "已复制到剪贴板", - "apiKeyCount_other": "{{count}} 个密钥", - "newKey": "新建密钥", - "noApiKeys": "暂无 API 密钥。", - "apiKeyActive": "有效", - "apiKeyUsageHint": "将您的密钥包含在", - "apiKeyUsageHintHeader": "请求头中。", - "apiKeyPermissionsHint": "密钥继承创建用户的权限。", - "exportData": "导出我的数据", - "exportDataDesc": "下载主机、凭据和设置的备份,以便迁移到其他设备", - "export": "导出", - "exporting": "正在导出...", - "importData": "导入我的数据", - "importDataDesc": "从 .sqlite 备份文件恢复您的主机、凭据和设置", - "importDataSelected": "已选择:{{name}}", - "selectFile": "选择文件", - "changeFile": "更改", - "import": "导入", - "importing": "正在导入...", - "exportSuccess": "数据导出成功", - "exportFailed": "数据导出失败", - "importSelectFile": "请先选择一个文件", - "importCompleted": "导入完成:已导入 {{total}} 项,跳过 {{skipped}} 项", - "importFailed": "导入失败:{{error}}", - "roleUser": "用户", - "authMethodDual": "双重认证", - "authMethodExternal": "外部认证", - "done": "完成", - "apiKeyNameRequired": "密钥名称为必填项", - "apiKeyCreated": "API 密钥“{{name}}”已创建", - "apiKeyCreateFailed": "创建 API 密钥失败", - "apiKeyUser": "用户", - "apiKeyExpires": "过期时间", - "apiKeyRevoked": "API 密钥“{{name}}”已撤销", - "apiKeyRevokeFailed": "撤销 API 密钥失败", - "passwordFieldsRequired": "当前密码和新密码均为必填项", - "passwordMismatch": "两次输入的密码不一致", - "passwordTooShort": "密码长度至少为 6 个字符", - "passwordUpdated": "密码更新成功", - "passwordUpdateFailed": "更新密码失败", - "deletePasswordRequired": "删除账户需要输入密码", - "deleteFailed": "删除账户失败", - "deleting": "正在删除...", "colorPickerTooltip": "打开颜色选择器", "themeSystem": "跟随系统", "themeLight": "浅色", @@ -1731,18 +1098,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "已登录到 {{server}}", - "linkedProfileDescription": "此设备使用您在服务器上的账户并保留数据副本,因此即使离线也能正常工作。", - "manageSync": "管理同步", - "setUpSync": "链接到服务器", - "settingsTabsAndShortcuts": "标签页与快捷键", - "onBetaTitle": "您正在使用测试版", - "onBetaDescription": "感谢您的测试。请告诉我们遇到的问题。", - "tryBetaTitle": "抢先体验新功能", - "tryBetaDescription": "在“更新”中参加测试计划。", - "sendBetaFeedback": "发送测试版反馈", - "openUpdates": "更新" + "themeGruvbox": "Gruvbox" } } }, @@ -1983,8 +1339,7 @@ "hasDependents": "{{name}} 被 {{list}} 依赖。请先禁用或卸载它们。", "missingDependencies": "{{name}} 需要 {{list}},但未安装。", "consentChanged": "自您上次查看以来,此插件请求的权限已更改。请再次检查列表。", - "upload": "无法读取 {{name}}:{{error}}", - "developerMode": "无法更改开发者模式:{{error}}" + "upload": "无法读取 {{name}}:{{error}}" }, "data": { "title": "存储的数据", @@ -2102,13 +1457,7 @@ "browsePlugins": "浏览插件", "loading": "加载中", "developer": { - "title": "插件开发者模式", - "hint": "允许管理员在插件选项卡中从 .tmxplug 文件安装插件,无需经过注册表检查。用于构建和测试您自己的插件。", - "enableTitle": "要开启开发者模式吗?", - "enableBody": "管理员将能够安装 Termix 未检查的文件中的插件。插件可以执行其能力允许的任何操作,因此仅在构建或测试插件时开启此功能。", - "enable": "开启", - "installFromFile": "从文件安装", - "signedOnly": "已设置 TERMIX_REQUIRE_SIGNED_PLUGINS,因此从文件安装仍处于阻止状态。" + "installFromFile": "从文件安装" }, "count": { "downloads_other": "{{formatted}} 次下载", @@ -2145,71 +1494,7 @@ "secretSet": "已设置", "secretNotSet": "未设置", "secretReplace": "替换", - "pluginSettingsSaved": "设置已保存", - "pluginSettingsInvalid": "部分设置无法保存。请检查高亮显示的字段。", - "pluginSettingsSaveFailed": "保存设置失败", - "pluginSettingsLoadFailed": "加载设置失败", - "featureUnavailable": "{{name}} 当前不可用。这些设置已保存,但不会生效。", - "account": "账户", - "security": "安全", - "apiKeys": "API 密钥", - "data": "数据与同步", - "interface": "界面", - "appearance": "外观", - "keybindings": "快捷键", - "adminGeneral": "常规", - "adminUsers": "用户", - "adminSessions": "会话", - "adminRoles": "角色", - "adminHostDefaults": "主机默认值", - "adminBranding": "品牌定制", - "adminDatabase": "数据库", - "adminSsl": "SSL", - "adminApiKeys": "API 密钥", - "adminAuditLog": "审计日志", - "bandYou": "您的账户", - "bandApp": "此应用", - "bandPlugins": "插件", - "bandInstance": "此服务器", - "searchPlaceholder": "搜索设置", - "noResults": "没有匹配的设置。", - "pages": "页面", - "instanceSettings": "服务器设置", - "nothingHere": "此处无需设置。", - "searchPage": "搜索此页面", - "noPageMatches": "此页面无匹配内容。", - "updates": { - "title": "更新", - "betaProgram": "测试版计划", - "betaIntro": "测试版是 Termix 下一版本的早期构建。当有新功能可供尝试时,它们会在周二和周五发布。测试版可能存在错误,您的反馈有助于完善稳定版。", - "termixBetas": "Termix 测试版", - "termixBetasHint": "通知我新的测试版,而不仅仅是稳定版。", - "runningBetaBuild": "您正在运行测试版构建。要退出,请切换回稳定版镜像或安装程序。", - "howToInstall": "如何获取测试版", - "desktopInstall": "下载测试版安装程序并覆盖当前版本安装。", - "downloadBeta": "下载 {{version}}", - "dockerInstall": "将镜像更改为测试版标签并重启容器:", - "copy": "复制", - "copied": "已复制", - "copyFailed": "无法复制", - "learnMore": "了解更多关于测试版的信息", - "feedback": "反馈", - "feedbackHint": "发现错误或有想法?反馈将直接发送给开发人员,并自动填入您的版本信息。", - "sendFeedback": "发送测试版反馈", - "releases": "版本", - "thisVersion": "当前版本", - "newestStable": "最新稳定版", - "newestBeta": "最新测试版", - "noRelease": "暂无", - "pluginBetas": "插件测试版", - "pluginBetasIntro": "每个插件可以独立使用测试版。要尝试,请打开插件并点击“试用测试版”。", - "openPlugins": "打开插件", - "waitingForStable": "已返回稳定版。在出现更新的稳定版之前,将保持 {{version}}。", - "backToStable": "返回稳定版", - "allPluginsBeta": "所有插件使用测试版", - "allPluginsStable": "所有插件返回稳定版", - "saveFailed": "无法保存更改" - } + "featureUnavailable": "{{name}} 当前不可用。这些设置已保存,但不会生效。" }, "managerCard": { "refresh": "刷新", @@ -2219,80 +1504,10 @@ "filter": "筛选..." }, "sync": { - "server": "Termix 服务器", - "account": "账户", - "status": "状态", - "never": "从未", - "justNow": "刚刚", "minutesAgo_other": "{{count}} 分钟前", "hoursAgo_other": "{{count}} 小时前", - "actionFailed": "操作失败。请重试。", - "unlinkedTitle": "仅限此设备", - "unlinkedBody": "Termix 在此设备上独立运行。将其链接到您的 Termix 服务器以保持所有数据同步。", - "unlinkedPointHosts": "您的主机、凭据、代码片段和设置将跟随您到每一台设备。", - "unlinkedPointOffline": "当服务器无法连接时,一切仍然正常工作,并在稍后同步。", - "unlinkedPointAccount": "您使用服务器账户登录,其他人共享给您的主机也会显示在这里。", - "linkButton": "链接到服务器", - "state": { - "syncing": "同步中", - "offline": "服务器无法连接", - "error": "同步已停止", - "signedOut": "已退出登录", - "synced": "已于 {{time}} 同步" - }, "pending_other": "{{count}} 项更改等待同步", - "signInAgain": "重新登录", - "syncNow": "立即同步", - "unlink": "取消链接", - "unlinked": "此设备已不再链接", - "unlinkTitle": "取消关联此设备?", - "unlinkDescription": "这将停止同步并退出服务器登录。无论选择如何,其他用户与您共享的主机都将从此设备移除。", - "unlinkKeepTitle": "保留我的数据", - "unlinkKeepBody": "您的主机、凭据和设置将保留在此设备上,并继续独立运行。", - "unlinkRemoveTitle": "移除已同步的数据", - "unlinkRemoveBody": "所有来自服务器的数据都将从此设备移除。仅保留仅存储在此设备上的主机。", - "conflictsTitle": "冲突", - "conflictsDescription": "这些项目在此设备和服务器上同时被修改。当前使用的是服务器版本。选择“保留我的”可将您的版本发送到服务器。", - "keepMine": "保留我的", - "keepServer": "保留服务器版本", - "errorsTitle": "未同步", - "errorsDescription": "服务器未接受这些更改。它们将保留在此设备上。", - "errorPermission": "您在服务器上的账户无权进行此更改。", - "retry": "重试", - "whatSyncs": "同步内容", - "whatSyncsDescription": "关闭任何您希望仅保留在此设备上的项目。", - "coreGroup": "Termix", - "notOnServer": "服务器上没有此项", - "notOnDevice": "尚未同步到此设备", - "localOnlyHint": "您也可以从单个主机或文件夹的设置中,选择仅将其保留在此设备上。", - "originTitle": "连接起点", - "originDescription": "从此设备直接连接主机,或通过服务器连接。您可以为每个主机单独设置。", - "originLocal": "此设备", - "originRemote": "服务器", - "entities": { - "hosts": "主机", - "sshCredentials": "凭据", - "sshFolders": "文件夹", - "userPreferences": "偏好设置", - "pluginUserSettings": "插件设置", - "sharedHosts": "与您共享的主机", - "sharedCredentials": "与您共享的凭据", - "vaultProfiles": "Vault 配置文件", - "snippetFolders": "代码片段文件夹", - "snippets": "代码片段", - "dashboardServiceLinks": "服务链接", - "homepageItems": "主页项目", - "networkTopology": "网络拓扑图", - "workspaces": "工作区", - "hostDefaults": "主机默认设置", - "hostDefaultsAdmin": "服务器主机默认设置", - "aiProviders": "AI 提供商", - "homepageLayouts": "主页布局", - "accountProfile": "账户资料" - }, "proxy": { - "title": "反向代理", - "description": "仅在服务器前有 Cloudflare Access 或登录页面等中间层时才需要。", "headersTitle": "额外标头", "headersHint": "随每次请求发送到服务器,例如 Cloudflare Access 服务令牌。", "headerName": "标头名称", @@ -2305,8 +1520,7 @@ "username": "用户名", "password": "密码", "allowInvalidCertificate": "信任自签名证书", - "allowInvalidCertificateHint": "仅适用于您自己的服务器,且其证书不受知名机构信任时。", - "saved": "已保存" + "allowInvalidCertificateHint": "仅适用于您自己的服务器,且其证书不受知名机构信任时。" }, "problems": { "invalidUrl": "这看起来不像一个有效的网址。", @@ -2342,6 +1556,27 @@ "linking": "正在链接并运行首次同步...", "linked": "已链接。您的数据正在同步。", "signedInAgain": "已登录。同步已恢复运行。" + }, + "entities": { + "hosts": "主机", + "sshCredentials": "凭据", + "sshFolders": "文件夹", + "userPreferences": "偏好设置", + "pluginUserSettings": "插件设置", + "sharedHosts": "与您共享的主机", + "sharedCredentials": "与您共享的凭据", + "vaultProfiles": "Vault 配置文件", + "snippetFolders": "代码片段文件夹", + "snippets": "代码片段", + "dashboardServiceLinks": "服务链接", + "homepageItems": "主页项目", + "networkTopology": "网络拓扑图", + "workspaces": "工作区", + "hostDefaults": "主机默认设置", + "hostDefaultsAdmin": "服务器主机默认设置", + "aiProviders": "AI 提供商", + "homepageLayouts": "主页布局", + "accountProfile": "账户资料" } }, "hostDefaults": { @@ -2358,28 +1593,9 @@ "resetTitle": "此主机设置了其自身的值。点击以再次使用来自 {{source}} 的默认值", "clearTitle": "在此级别设置。点击以清除并使用 {{source}} 代替", "inheritedTitle": "遵循来自 {{source}} 的默认值", - "titleAdmin": "服务器主机默认设置", - "titleUser": "我的主机默认设置", - "titleFolder": "文件夹默认设置:{{name}}", - "descriptionAdmin": "此服务器上所有主机的默认设置。用户自己的默认设置、文件夹的默认设置或主机本身仍可以设置不同的值。修改字段以在此处设置,或清除字段以保留未设置状态。", - "descriptionUser": "您所有主机的默认设置,覆盖服务器默认设置。文件夹或主机本身仍可以设置不同的值。修改字段以在此处设置,或清除字段以保留未设置状态。", - "descriptionFolder": "此文件夹及其子文件夹中主机的默认设置,覆盖您自己的默认设置。主机本身仍可以设置不同的值。修改字段以在此处设置,或清除字段以保留未设置状态。", - "save": "保存默认设置", "saved_other": "默认设置已保存。已更新 {{count}} 个主机。", - "savedInBackground": "默认设置已保存。正在后台更新主机。", "appliedToHosts_other": "已使用新默认设置更新 {{count}} 个主机。", - "saveFailed": "无法保存默认设置", - "loadFailed": "无法加载默认设置", - "confirmTitle": "保存默认设置?", "confirmChanges_other": "{{count}} 个主机遵循这些默认设置并将发生变更。", - "confirmNoChanges": "现有主机无变更。新主机将使用这些默认设置开始。", - "menuMyDefaults": "我的主机默认设置", - "folderDefaultsAction": "文件夹默认设置", - "adminSectionDescription": "设置此服务器上每个主机遵循的默认值,涵盖主机拥有的每个设置,包括每个插件的设置。用户和文件夹可以在其之上设置自己的默认值,任何主机仍可以使用其自身的值。", - "editServerDefaults": "编辑服务器默认设置", - "resetMenu": "重置", - "resetAll": "全部恢复为默认值", - "resetCore": "连接和 SSH 恢复为默认值", "resetDone_other": "{{count}} 个主机现在使用其默认值。" }, "panel": { @@ -2392,44 +1608,10 @@ "fields": { "secretSaved": "已保存。输入以替换。" }, - "sharing": { - "revokeConfirm": "移除 {{name}} 的访问权限?", - "revoke": "移除访问权限" - }, "manage": { - "searchSettings": "搜索设置", - "noMatchingSettings": "没有匹配的设置。", - "sections": "部分", - "sectionNeedsAttention": "此处有内容需要关注", "needsAttention_other": "{{count}} 项需要关注。", - "bandHost": "主机", - "bandFeatures": "协议和插件", - "bandCredential": "凭据", - "sshConnection": "SSH 连接", - "errorAddressRequired": "必须提供地址。", - "errorPortRange": "请使用 1 到 65535 之间的端口。", - "defaults": "默认值", - "searchHosts": "搜索主机", - "searchCredentials": "搜索凭据", - "searchDefaults": "搜索默认值", - "addCredential": "添加凭据", - "nothingMatches": "没有匹配项", - "nothingYet": "此处暂无内容", - "emptyHostsHint": "添加一个主机,它就会显示在这里,位于你指定的文件夹中。", - "emptyCredentialsHint": "保存的凭据可供任何主机重复使用。", - "collapse": "折叠", - "expand": "展开", - "cannotBeUndone": "此操作无法撤销。", - "hostNotFound": "找不到该主机。请尝试刷新列表。", "hostCount_other": "{{count}} 个主机", - "credentialCount_other": "{{count}} 个凭据", - "newHost": "新建主机", - "newCredential": "新建凭据", - "advanced": "高级", - "pickHost": "选择一个主机进行编辑", - "pickCredential": "选择一个凭据进行编辑", - "pickDefaults": "选择一个默认值级别进行编辑", - "pickHint": "连接的所有设置都在这里,已分组以便查找。" + "credentialCount_other": "{{count}} 个凭据" }, "rbac": { "roles": { diff --git a/src/ui/locales/translated/zh_TW.json b/src/ui/locales/translated/zh_TW.json index fd2ba814e..cec0c0f39 100644 --- a/src/ui/locales/translated/zh_TW.json +++ b/src/ui/locales/translated/zh_TW.json @@ -141,7 +141,6 @@ "continue": "繼續", "error": "錯誤", "unsavedChanges": "未儲存的變更", - "more": "更多", "loading": "載入中...", "host": "主機", "selectHost": "選擇主機...", @@ -154,7 +153,6 @@ "cancel": "取消", "username": "使用者名稱", "login": "登入", - "logout": "登出", "register": "註冊", "password": "密碼", "confirmPassword": "確認密碼", @@ -165,8 +163,6 @@ "rename": "重新命名", "edit": "編輯", "confirm": "確認", - "next": "下一步", - "previous": "上一步", "refresh": "重新整理", "language": "語言", "backendReconnected": "伺服器連線已恢復", @@ -234,10 +230,6 @@ "pluginsDocsLink": "閱讀各外掛說明" }, "desktopUpdates": { - "title": "桌面應用程式", - "mode": "更新", - "modeHint": "此應用程式如何取得新版本。", - "manualModeHint": "此副本無法自行更新,因此 Termix 僅會在新版本發布時通知您。", "modeAutomatic": "自動", "modePrompt": "先詢問", "modeNever": "永不", @@ -247,15 +239,6 @@ "onboardingTitle": "應用程式更新", "onboardingBody": "桌面應用程式現在可以自行更新。選擇您希望接收新版本的方式。您之後可以在「設定」>「更新」中更改此設定。", "onboardingManual": "此應用程式副本的安裝方式無法自行更新,因此 Termix 會在新版本發布時通知您,並提供下載連結。", - "status": "版本 {{version}}", - "statusIdle": "尚未檢查", - "statusChecking": "正在檢查更新", - "statusAvailable": "版本 {{version}} 可供使用", - "statusDownloading": "正在下載 {{version}} ({{progress}}%)", - "statusReady": "版本 {{version}} 已準備就緒。重新啟動以安裝。", - "statusUpToDate": "您已擁有最新版本", - "statusError": "無法檢查更新。請稍後再試。", - "checkNow": "立即檢查", "download": "下載", "restart": "立即重新啟動", "later": "稍後", @@ -269,26 +252,11 @@ "terminal": "終端機", "close": "關閉", "hostTabTitle": "{{username}}@{{ip}}:{{port}}", - "copyPassword": "複製密碼", - "copySudoPassword": "複製 Sudo 密碼", - "passwordCopied": "密碼已複製到剪貼簿", - "failedToCopyPassword": "複製密碼失敗", - "refreshTab": "重新整理連線", - "renameTab": "重新命名分頁", "dashboard": "儀表板", "quickConnect": "快速連線", - "openAsTabHint": "按住 Ctrl 並點擊或按下滑鼠中鍵以分頁開啟", - "openAsTab": "以分頁開啟", - "openInRightDock": "在右側停靠區開啟", - "closeRightDock": "關閉右側停靠區", - "toggleRightDock": "切換右側停靠區", "hosts": "主機", "credentials": "憑證", "connections": "連線", - "keepSideMenuOpen": "保持選單開啟", - "collapseSideMenu": "收合選單", - "roleAdministrator": "管理員", - "roleUser": "使用者", "sync": "同步", "reconnectDisconnectedTerminals": "重新連線所有已斷線的終端機", "reconnectingTerminals_other": "正在重新連線 {{count}} 個終端機", @@ -296,29 +264,10 @@ "reconnectTerminalsFailed_other": "無法開始重新連線 {{count}} 個終端機", "fullscreenUnsupported": "此瀏覽器不支援全螢幕", "fullscreenFailed": "無法切換全螢幕", - "resetSidebarWidth": "重設寬度", - "collapseSidebar": "收合側邊欄", - "openSidebar": "開啟側邊欄", "confirmCloseHost": "關閉 {{host}}?", - "enterFullscreen": "進入全螢幕 (Ctrl+Shift+F)", - "exitFullscreen": "退出全螢幕 (Ctrl+Shift+F)", - "group": { - "objects": "我的", - "tools": "工具", - "system": "系統" - }, - "searchEverything": "搜尋主機、分頁與動作", - "search": "搜尋", "hiddenCount_other": "{{count}} 個已隱藏", - "showInRail": "在側邊欄顯示", - "moveUp": "上移", - "moveDown": "下移", - "resetRailOrder": "重設順序", - "hideFromRail": "從側邊欄隱藏", - "openSettings": "開啟設定", "settings": "設定", "manage": "管理", - "mobileNavigation": "導覽", "plugins": "外掛" }, "hosts": { @@ -904,35 +853,14 @@ "importSummary": "匯入完成:{{imported}} 個已匯入,{{updated}} 個已更新,{{failed}} 個失敗", "importHostsFailed": "匯入主機失敗" }, - "commandPalette": { - "searchPlaceholder": "搜尋主機、命令或設定...", - "quickActions": "快速操作", - "navigation": "導覽", - "orShortcut": "或", - "addNewHost": "新增主機", - "adminSettings": "管理員設定", - "addCredential": "新增憑證", - "recentActivity": "近期活動", - "serversAndHosts": "伺服器與主機", - "noHostsFound": "找不到符合「{{search}}」的主機", - "links": "連結", - "navigate": "導覽", - "select": "選取", - "pluginActions": "更多操作", - "noTargetTab": "未開啟任何終端機分頁", - "documentation": "說明文件" - }, "splitScreen": { "title": "分割畫面", "defaultLabel": "分割 {{number}}", "splitRight": "向右分割", "splitDown": "向下分割", - "addToSplit": "新增至 {{split}}", "paneEmptyItem": "窗格 {{index}}:空白", "paneItem": "窗格 {{index}}:{{label}}", "paneNumber": "窗格 {{index}}", - "newPaneRight": "在右側新增窗格", - "newPaneBelow": "在下方新增窗格", "emptyTitle": "空白窗格", "emptyHint": "選取要在此顯示的內容。當此窗格被選取時,從側邊欄開啟的任何內容也會在此開啟。", "openTabs": "開啟的分頁", @@ -949,7 +877,6 @@ "clearPane": "清空此窗格", "zoom": "放大窗格", "unzoom": "還原版面配置", - "unsplit": "取消分割", "layouts": "版面配置", "applyLayout": "變更版面配置", "maxPanes_other": "分割畫面最多可容納 {{count}} 個窗格", @@ -957,8 +884,6 @@ "dropHere": "拖放至此處顯示", "paneActions": "窗格操作", "dividerHint": "拖曳以調整大小。雙擊以平均分配。", - "openInSplit": "在分割畫面中開啟", - "openInNewSplit": "使用目前分頁建立新分割", "shortcuts": "快捷鍵", "shortcutNavigate": "在窗格間移動", "presets": { @@ -972,23 +897,6 @@ "grid6": "六格網格" } }, - "connections": { - "noConnections": "沒有連線", - "noConnectionsDesc": "開啟終端機、檔案管理器或遠端桌面,即可在此查看連線", - "connectedFor": "已連線 {{duration}}", - "connected": "已連線", - "disconnected": "已斷線", - "reconnect": "重新連線", - "sectionOpen": "開啟", - "sectionBackground": "背景", - "backgroundDesc": "斷線後,工作階段會保留 {{minutes}} 分鐘,並可重新連線。", - "expiresIn": "剩餘 {{duration}} 過期", - "search": "搜尋連線...", - "noSearchResults": "沒有符合搜尋條件的連線", - "rename": "重新命名工作階段", - "forgetConfirm": "要結束 {{name}} 的背景工作階段嗎?", - "forget": "結束工作階段" - }, "sshAuth": { "totpRequired": "需要雙重驗證", "totpCodeLabel": "驗證碼", @@ -1126,474 +1034,46 @@ "placeholders": { "keyPassword": "金鑰密碼", "pastePrivateKey": "在此貼上您的私密金鑰...", - "enterPassword": "輸入您的密碼", - "apiKeyName": "例如:CI Pipeline", - "credentialName": "例如:Production SSH Key", - "optionalDetails": "選填詳細資訊...", - "sshUsername": "例如:root 或 deploy", - "hostAddress": "10.0.0.1 或 example.com", - "hostName": "例如:Web Server Production" + "enterPassword": "輸入您的密碼" }, "dashboard": { - "title": "儀表板", - "github": "GitHub", - "reportBug": "回報錯誤", - "discord": "Discord", - "docs": "文件", - "donate": "贊助", - "serverOverview": "伺服器概覽", - "version": "版本", "updateAvailable": "有可用更新", - "beta": "Beta", - "uptime": "正常運作時間", - "database": "資料庫", - "healthy": "正常", - "error": "錯誤", - "totalHosts": "主機總數", - "totalCredentials": "憑證總數", - "recentActivity": "近期活動", - "reset": "重設", - "noRecentActivity": "無近期活動", - "quickActions": "快速操作", - "addHost": "新增主機", - "addCredential": "新增憑證", - "adminSettings": "管理員設定", - "userProfile": "使用者個人資料", - "serverStats": "伺服器統計", - "customizeLayout": "自訂儀表板", - "justNow": "剛剛" + "beta": "Beta" }, "dashboardTab": { "stable": "穩定版", - "registerNewServer": "註冊新伺服器", - "storeSshKeysOrPasswords": "儲存 SSH 金鑰或密碼", - "manageUsersAndRoles": "管理使用者與角色", - "manageYourAccount": "管理您的帳號", - "hostStatus": "主機狀態", - "noHostsConfigured": "未設定任何主機", - "checking": "檢查中", - "commandPalette": "命令面板", - "done": "完成", - "clear": "清除", - "dragToResizeColumns": "拖曳以調整欄位寬度", - "hostsAvailable": "可用主機", - "removeSection": "移除區塊", - "addSection": "新增區塊", - "allSectionsShown": "所有內容已顯示於儀表板上。", - "fromPlugins": "來自外掛", - "dropHere": "將區塊拖曳至此", - "dragToReorder": "拖曳區塊以重新排序", - "clearActivityConfirm": "清除您的近期活動?", - "resetConfirm": "將儀表板重設為預設版面配置?", "onlineCount_other": "{{count}} 個線上", "hostCount_other": "{{count}} 個主機" }, "admin": { - "sectionGeneral": "一般", - "sectionUsers": "使用者", - "sectionSessions": "工作階段", - "sectionRoles": "角色", - "sectionDatabase": "資料庫", - "sectionApiKeys": "API 金鑰", - "sectionAuditLog": "稽核日誌", - "sectionSsl": "HTTPS 憑證", - "sectionBranding": "白標", - "brandingAppName": "應用程式名稱", - "brandingAppNameDesc": "顯示於登入畫面與瀏覽器分頁。留空則使用「Termix」。", - "brandingTagline": "標語", - "brandingTaglineDesc": "顯示於登入畫面應用程式名稱下方。留空則使用預設標語。", - "brandingLogo": "標誌", - "brandingLogoDesc": "PNG、JPEG 或 WEBP 格式,最大 750 KB。將取代登入畫面與瀏覽器分頁上的預設圖示。", - "brandingLogoUpload": "上傳標誌", - "brandingLogoReset": "重設為預設", - "brandingLogoInvalid": "無效的圖片。請使用 PNG、JPEG 或 WEBP 格式,且大小不超過 750 KB。", - "brandingSaved": "品牌設定已儲存", - "brandingSaveFailed": "儲存品牌設定失敗", - "sslDescription": "Termix 透過 HTTPS 提供的憑證。您可在此上傳自有憑證,或在 ACME 憑證區塊中從 Let's Encrypt 取得並續期。", - "sslDocsLink": "查看 SSL 文件", - "sslCertStatus": "憑證狀態", - "sslCertStatusNone": "無憑證", - "sslCertStatusValid": "有效", - "sslCertStatusExpiring": "即將過期", - "sslCertStatusExpired": "已過期", - "sslCertExpiresAt": "於 {{date}} 過期", - "sslInfoNote": "發行或上傳憑證後,Termix 將自動在 SSL_PORT(預設 8443)啟用 HTTPS,與現有的 HTTP 埠並存。請確保該埠已發布/映射至此容器,以便存取。", - "sslManualCert": "憑證 (PEM)", - "sslManualCertPlaceholder": "-----BEGIN CERTIFICATE-----", - "sslManualKey": "私鑰 (PEM)", - "sslManualKeyPlaceholder": "-----BEGIN PRIVATE KEY-----", - "sslManualDesc": "貼上您現有的憑證與私鑰,若您的憑證授權中心要求,請包含完整鏈結。", - "sslManualUpload": "上傳並安裝憑證", - "sslManualUploadLoading": "正在上傳憑證...", - "sslManualUploadSuccess": "憑證已成功上傳並安裝", - "sslManualUploadFailed": "憑證上傳失敗", - "sslManualRequiresFields": "必須提供憑證與私鑰", - "auditLogTotal": "共 {{total}} 筆記錄", - "auditLogEmpty": "找不到稽核日誌記錄", - "auditLogSuccess": "成功", - "auditLogFailed": "失敗", - "auditLogClearFilters": "清除篩選條件", - "auditLogPage": "第 {{page}} 頁,共 {{totalPages}} 頁(共 {{total}} 筆)", - "auditLogIp": "IP", - "auditLogResourceId": "資源 ID", - "auditLogFilterUser": "使用者", - "auditLogFilterAction": "動作", - "auditLogFilterResourceType": "資源類型", - "auditLogFilterStatus": "狀態", - "auditLogFilterFrom": "起始時間", - "auditLogFilterTo": "結束時間", - "auditLogFilterAll": "全部", - "allowRegistration": "允許使用者註冊", - "allowRegistrationDesc": "允許新使用者使用使用者名稱和密碼自行註冊", - "allowPasswordLogin": "允許密碼登入", - "allowPasswordLoginDesc": "使用者名稱/密碼登入", - "externalAutoProvision": "自動建立外部帳戶", - "externalAutoProvisionDesc": "當使用者首次透過外部登入(如 SSO 或 LDAP)時建立帳戶。關閉時,僅限已擁有帳戶的使用者才能以此方式登入", - "secondFactorAfterExternalLogin": "外部登入(SSO、GitHub、Google、LDAP)後要求第二因素驗證", - "secondFactorAfterExternalLoginDesc": "關閉時,僅在密碼及其他本機登入後要求已註冊的第二因素驗證,與以往相同。開啟時,所有登入方式(包括 SSO 和 LDAP)後皆會要求第二因素驗證", - "allowPasswordReset": "允許密碼重設", - "allowPasswordResetDesc": "透過 Docker 日誌取得重設代碼", - "auditForwardingTitle": "轉送至 SIEM", - "auditForwardingDesc": "將每筆稽核記錄的副本以 NDJSON 格式傳送至外部收集器。本機日誌仍為唯一資料來源", - "auditForwardingEnvNotice": "環境變數也可用於設定轉送;此處儲存的 URL 具有優先權", - "auditForwardingToken": "Bearer 權杖(選填)", - "auditForwardingTokenStored": "Bearer 權杖(已儲存)", - "auditForwardingSaved": "稽核轉送設定已儲存", - "auditForwardingSaveError": "儲存稽核轉送設定失敗", - "sessionTimeout": "工作階段逾時", - "hours": "小時", - "sessionTimeoutRange": "最短 1 小時,最長 720 小時", - "monitoringDefaults": "監控預設值", - "statusCheck": "狀態檢查", - "sec": "秒", - "logLevel": "日誌層級", - "usersCount_other": "{{count}} 位使用者", - "searchUsers": "搜尋使用者...", - "noUsers": "沒有使用者", - "noUsersMatch": "沒有符合搜尋條件的使用者", - "pageOf": "第 {{page}} 頁,共 {{total}} 頁", - "createUser": "建立", - "newRole": "新增角色", - "roleName": "名稱", - "roleDisplayName": "顯示名稱", - "roleDescription": "說明", - "rolesCount_other": "{{count}} 個角色", - "createRole": "建立", - "creating": "建立中...", - "exportDatabase": "匯出資料庫", - "exportDatabaseDesc": "下載包含所有主機、憑證與設定的可攜式 SQLite 備份", - "export": "匯出", - "exporting": "匯出中...", - "importDatabase": "匯入資料庫", - "importDatabaseDesc": "從任何資料庫後端的可攜式 .sqlite 備份還原", - "importDatabaseSelected": "已選取:{{name}}", - "selectFile": "選取檔案", - "changeFile": "變更", - "import": "匯入", - "importing": "匯入中...", - "apiKeysCount_other": "{{count}} 個金鑰", - "apiKeysDocsLink": "查看說明文件", - "apiKeysCliHint": "在 Termix CLI 中使用 API 金鑰,即可從終端機管理伺服器", - "apiKeysCliLink": "查看 CLI 說明文件", - "newApiKey": "新增 API 金鑰", - "apiKeyCreatedWarning": "金鑰已建立 - 請立即複製,此後將不再顯示。", - "apiKeyName": "名稱", - "apiKeyUser": "使用者", - "apiKeySelectUser": "選擇使用者...", - "apiKeyExpiresAt": "過期時間", - "createKey": "建立金鑰", - "apiKeyNoExpiry": "永不過期", - "revokedBadge": "已撤銷", - "authTypeDual": "雙重驗證", - "authTypeExternal": "外部", - "authTypeLocal": "本機", - "adminStatusAdministrator": "管理員", - "adminStatusRegularUser": "一般使用者", - "adminBadge": "管理員", - "systemBadge": "系統", - "customBadge": "自訂", - "youBadge": "您", - "sessionsActive_other": "{{count}} 個活躍", - "sessionActive": "活躍:{{time}}", - "sessionExpires": "過期:{{time}}", - "revokeAll": "全部", - "revokeAllSessionsSuccess": "已撤銷該使用者的所有工作階段", - "revokeAllSessionsFailed": "撤銷工作階段失敗", - "revokeSessionFailed": "撤銷工作階段失敗", - "addRole": "新增角色", - "noCustomRoles": "未定義自訂角色", - "removeRoleFailed": "移除角色失敗", - "assignRoleFailed": "指派角色失敗", - "userAdminAccess": "管理員", - "userAdminAccessDesc": "擁有所有管理設定的完整存取權限", - "userRoles": "角色", - "revokeAllUserSessions": "撤銷所有工作階段", - "revokeAllUserSessionsDesc": "強制所有裝置重新登入", - "revoke": "撤銷", - "deleteUserWarning": "刪除使用者後無法復原。", - "deleteUser": "刪除 {{username}}", - "deleting": "刪除中...", - "deleteUserFailed": "刪除使用者失敗", - "deleteUserSuccess": "使用者「{{username}}」已刪除", - "deleteRoleSuccess": "角色「{{name}}」已刪除", - "revokeKeySuccess": "金鑰「{{name}}」已撤銷", - "revokeKeyFailed": "撤銷金鑰失敗", - "copiedToClipboard": "已複製到剪貼簿", - "done": "完成", - "createUserTitle": "建立使用者", - "createUserDesc": "建立新的本機帳戶。", - "createUserUsername": "使用者名稱", - "createUserPassword": "密碼", - "createUserPasswordHint": "至少 6 個字元。", - "createUserEnterUsername": "輸入使用者名稱", - "createUserSubmit": "建立使用者", - "editUserTitle": "管理使用者:{{username}}", - "editUserDesc": "編輯角色、管理員狀態、工作階段與帳戶設定。", - "editUserUsername": "使用者名稱", - "editUserAuthType": "驗證類型", - "editUserAdminStatus": "管理員狀態", - "editUserUserId": "使用者 ID", - "linkAccountTitle": "連結帳戶", - "linkAccountDesc": "將外部帳戶 {{username}} 與現有的本機帳戶合併。", - "linkAccountDescLocal": "將本機帳戶 {{username}} 與現有的純外部帳戶連結。", - "linkAccountWarningTitle": "這將執行以下操作:", - "linkAccountEffect1": "刪除僅限外部登入的帳號", - "linkAccountEffect2": "將其外部登入方式加入目標帳號", - "linkAccountEffect3": "允許同時使用外部登入與密碼登入", - "linkAccountTargetUsername": "本機帳號使用者名稱", - "linkAccountTargetPlaceholder": "輸入要連結的本機帳號使用者名稱", - "linkAccountExternalUsername": "外部帳號使用者名稱", - "linkAccountExternalPlaceholder": "輸入要合併的僅限外部登入帳號的使用者名稱", - "linkAccountExternalNotFound": "找不到具有該使用者名稱的僅限外部登入帳號", - "linkAccounts": "連結帳號", - "linkAccountSuccess": "帳號連結成功", - "linkAccountFailed": "帳號連結失敗", - "linkAccountInProgress": "正在連結...", - "unlinkAccountTitle": "解除外部登入連結", - "unlinkAccountDesc": "從 {{username}} 移除外部登入方式。之後他們將只能使用密碼登入。", - "unlinkAccountWarning": "這將從此帳號移除外部登入方式。使用者必須設定密碼才能繼續登入。", - "unlinkAccount": "解除外部登入連結", - "unlinkAccountInProgress": "正在解除連結...", - "unlinkAccountSuccess": "已解除外部登入連結", - "unlinkAccountFailed": "解除外部登入連結失敗", - "updateRegistrationFailed": "更新註冊設定失敗", - "updatePasswordLoginFailed": "更新密碼登入設定失敗", - "updateSecondFactorAfterExternalLoginFailed": "更新第二因素驗證設定失敗", - "updatePasswordResetFailed": "更新密碼重設設定失敗", - "sessionTimeoutRange2": "工作階段逾時時間必須介於 1 到 720 小時之間", - "sessionTimeoutSaved": "工作階段逾時時間已儲存", - "sessionTimeoutSaveFailed": "儲存工作階段逾時時間失敗", - "monitoringIntervalInvalid": "間隔值無效", - "monitoringSaved": "監控設定已儲存", - "monitoringSaveFailed": "儲存監控設定失敗", - "logLevelUpdateFailed": "更新記錄層級失敗", - "createUserRequired": "使用者名稱與密碼為必填欄位", - "createUserPasswordTooShort": "密碼長度至少需為 6 個字元", - "createUserSuccess": "使用者「{{username}}」已建立", - "createUserFailed": "建立使用者失敗", - "updateAdminStatusFailed": "更新管理員狀態失敗", - "allSessionsRevoked": "所有工作階段已撤銷", - "revokeSessionsFailed": "撤銷工作階段失敗", - "manageUserData": "管理使用者資料", - "backToUsers": "返回使用者列表", - "manageTabAccount": "帳號", - "manageTabHosts": "主機", - "manageTabCredentials": "憑證", - "manageTabSessions": "工作階段", - "manageTabDanger": "危險操作", - "manageEditorBack": "返回 {{username}} 的資料", - "dataLockedBadge": "已鎖定", - "dataLockedNotice": "{{username}} 的資料將保持鎖定狀態,直到他們下次登入為止。在此之前,無法查看或編輯其主機、憑證與程式碼片段。", - "resetPasswordTitle": "重設密碼", - "resetPasswordExternalOnly": "此使用者透過外部提供者登入,且未設定密碼。", - "resetPasswordPlaceholder": "新密碼", - "resetPasswordBtn": "重設", - "resetPasswordWorking": "正在重設...", - "resetPasswordSuccess": "密碼已重設", - "resetPasswordSuccessWiped": "密碼已重設。使用者的加密資料已被清除。", - "resetPasswordFailed": "重設密碼失敗", - "resetPasswordConfirmWipe": "{{username}} 在加密升級後尚未登入,因此其資料無法恢復。現在重設將刪除其主機、憑證與程式碼片段。是否繼續?", - "manageApiKeys": "API 金鑰", - "apiKeyNamePlaceholder": "金鑰名稱", - "apiKeyCopyNotice": "請立即複製此金鑰,之後將不再顯示。", - "noApiKeysForUser": "沒有 API 金鑰", - "apiKeyDeleteFailed": "刪除 API 金鑰失敗", - "exportUserData": "匯出資料", - "exportUserDataDesc": "將此使用者的主機、憑證與檔案管理器資料以 JSON 格式下載。密碼等機密資訊會先解密。", - "exportUserDataSuccess": "使用者資料已匯出", - "exportUserDataFailed": "匯出使用者資料失敗", "hostsCount_other": "{{count}} 個主機", - "addHostForUser": "新增主機", - "noHostsForUser": "此使用者沒有主機", - "connectToHost": "連線", - "deleteHostConfirm": "要刪除屬於 {{username}} 的主機「{{name}}」嗎?", - "hostDeletedSuccess": "主機已刪除", - "hostDeleteFailed": "刪除主機失敗", "credentialsCount_other": "{{count}} 個憑證", - "addCredentialForUser": "新增憑證", - "noCredentialsForUser": "此使用者沒有憑證", - "deleteCredentialConfirm": "要刪除屬於 {{username}} 的憑證「{{name}}」嗎?", - "credentialDeletedSuccess": "憑證已刪除", - "credentialDeleteFailed": "刪除憑證失敗", - "noSessionsForUser": "沒有進行中的工作階段", - "deleteSuccessorLabel": "將主機與憑證移交給", - "deleteSuccessorMe": "我(執行刪除的管理員)", - "deleteSuccessorNone": "不交給任何人,直接刪除", - "deleteSuccessorDesc": "此使用者分享的所有內容在新擁有者名下仍可正常使用;若選擇不交給任何人,則會刪除其主機、憑證與分享項目。", - "deleteUserDangerDesc": "永久刪除 {{username}} 及其所有資料(主機、憑證、程式碼片段、歷史記錄)。此操作無法復原。", - "deleteUserConfirm": "要永久刪除 {{username}} 及其所有資料嗎?", - "deleteUserAdminBlocked": "請先移除管理員身份,再刪除此使用者。", - "createRoleRequired": "名稱與顯示名稱為必填欄位", - "createRoleSuccess": "角色「{{name}}」已建立", - "createRoleFailed": "建立角色失敗", - "apiKeyNameRequired": "金鑰名稱為必填欄位", - "apiKeyUserRequired": "使用者 ID 為必填欄位", - "apiKeyCreatedSuccess": "API 金鑰「{{name}}」已建立", - "apiKeyCreateFailed": "建立 API 金鑰失敗", - "exportSuccess": "資料庫匯出成功", - "exportFailed": "資料庫匯出失敗", - "importSelectFile": "請先選擇檔案", - "importCompleted": "匯入完成:已匯入 {{total}} 項,跳過 {{skipped}} 項", - "importFailed": "匯入失敗:{{error}}", - "importError": "資料庫匯入失敗", - "sectionHostDefaults": "主機預設值", "rolePermissions": { - "count_other": "{{count}} 個權限", - "editAction": "編輯權限", - "loadError": "載入權限目錄失敗", - "saved": "角色權限已儲存", - "saveError": "儲存角色權限失敗", - "save": "儲存", - "saving": "儲存中...", - "pluginDisabled": "外掛已停用", "groups": { "hosts": "主機", "credentials": "憑證", "admin": "管理" } - }, - "notificationPrivateEndpoints": "允許的私人通知主機", - "notificationPrivateEndpointsDesc": "通知頻道可連線的私人主機清單。請以逗號分隔。", - "updateNotificationEndpointsFailed": "更新通知端點白名單失敗", - "secondFactorsSectionTitle": "第二因素驗證", - "secondFactorsNone": "未註冊任何第二因素驗證", - "secondFactorUnavailable": "不可用", - "resetSecondFactors": "重設第二因素驗證", - "resetSecondFactorsConfirm": "要移除 {{username}} 的所有第二因素驗證嗎?他們可以改用密碼或 SSO 登入,並重新註冊。", - "secondFactorsResetSuccess": "已重設第二因素驗證", - "secondFactorsResetFailed": "重設第二因素驗證失敗", - "passwordLoginForced": "密碼登入已關閉,但由於未啟用其他登入方式,因此暫時保持開啟狀態,以免任何人被鎖定無法登入。", - "sslNotRenewed": "此憑證沒有自動續期機制。它將於 {{date}} 過期。請在 ACME 憑證區段開啟自動續期,或在此之前上傳新的憑證。", - "sslSelfSigned": "由 Termix 產生的自簽名憑證。瀏覽器會顯示警告。", - "sslRenewedBy": "由 {{plugin}} 自動續期", - "sslIssuer": "由 {{issuer}} 發行", - "sslNames": "涵蓋 {{names}}", - "sslManualTitle": "上傳憑證", - "updateExternalAutoProvisionFailed": "更新自動建立設定失敗", - "hostTags": "預先定義的主機標籤", - "hostTagsDesc": "所有使用者在編輯主機時會看到的建議標籤。按空白鍵或 Enter 鍵新增標籤。在此移除標籤不會將其從主機中刪除。", - "hostTagsError": "無法載入或儲存主機標籤建議。", - "revokeAllSessionsConfirm": "要將 {{username}} 在所有裝置上登出嗎?", - "revokeSessionConfirm": "要登出此工作階段嗎?", - "revokeSession": "登出", - "deleteRoleConfirm": "要刪除 {{name}} 角色嗎?", - "revokeKeyConfirm": "要撤銷 API 金鑰 {{name}} 嗎?", - "revokeKey": "撤銷" + } }, "newUi": { "sidebar": { "quickConnect": { - "where": "位置", - "who": "使用者", - "hostLabel": "主機", - "hostPlaceholder": "192.168.1.1 或 example.com", - "portLabel": "連接埠", - "usernameLabel": "使用者名稱", - "usernamePlaceholder": "使用者名稱", - "authLabel": "驗證", - "passwordLabel": "密碼", - "passwordPlaceholder": "密碼", - "privateKeyLabel": "私密金鑰", - "privateKeyPlaceholder": "貼上私密金鑰...", - "credentialLabel": "憑證", - "credentialPlaceholder": "選擇已儲存的憑證", - "protocolLabel": "通訊協定", - "domainLabel": "網域", - "domainPlaceholder": "選填", - "connectToAction": "連線至 {{name}}", - "sshProtocol": "SSH", - "noTarget": "未安裝任何可連線至此類主機的元件" + "usernameLabel": "使用者名稱" }, "keybindings": { - "description": "將按鍵綁定至終端機與應用程式的動作,或變更內建快捷鍵。", - "defaultsHeading": "內建快捷鍵", - "fixedHeading": "應用程式快捷鍵", - "fixed": { - "splitRight": "向右分割", - "splitDown": "向下分割", - "zoomPane": "放大目前焦點的面板", - "navigatePane": "在面板間移動", - "nextTab": "下一個分頁", - "previousTab": "上一個分頁", - "jumpTab": "跳至分頁", - "previousView": "返回上一個側邊欄檢視", - "fullscreen": "切換全螢幕" - }, - "customHeading": "自訂快捷鍵", - "addBinding": "新增快捷鍵", - "addBindingTitle": "新增快捷鍵", - "editBindingTitle": "編輯快捷鍵", - "loading": "載入中...", - "noCustomBindings": "尚無自訂快捷鍵", - "defaultBadge": "預設", - "customizedBadge": "已自訂", - "customize": "自訂", - "resetToDefault": "恢復預設值", - "resetAllToDefaults": "全部恢復預設值", - "cancel": "取消", - "saveBinding": "儲存快捷鍵", - "saveError": "儲存鍵盤快捷鍵失敗", - "pressKeysToRecord": "按鍵組合", - "pressKeysPlaceholder": "點擊並按下按鍵", - "recording": "請按下按鍵...", - "comboRequiredError": "請先按下按鍵組合", - "conflictWarning": "此組合已綁定至 {{combo}}。儲存後兩者都會觸發。", - "actionLabel": "動作", "actionNextTab": "切換至下一個分頁", "actionPreviousTab": "切換至上一個分頁", "actionOpenCommandPalette": "開啟快速搜尋", - "actionReconnectSession": "重新連線目前工作階段", - "unavailableAction": "{{type}}(不可用)", - "actionRequiredError": "請先選擇動作", - "deleteConfirm": "要刪除此快捷鍵嗎?", - "resetAllConfirm": "要將所有快捷鍵恢復為預設值嗎?" + "actionReconnectSession": "重新連線目前工作階段" }, "userProfile": { - "storageModeLocal": "瀏覽器", - "storageModeCloud": "資料庫", - "storageModeDescription": "瀏覽器僅將設定儲存在本機瀏覽器中。資料庫會同步至伺服器,並可在任何裝置上載入。", - "resetToDefaults": "恢復預設值", - "resetToDefaultsSuccess": "設定已恢復為預設值。", - "storageModeSwitch": "偏好設定儲存位置", - "sectionAccount": "帳戶", - "desktopProfileTitle": "僅限此裝置", - "desktopProfileDescription": "此設定檔僅存在於此裝置,並獨立登入。將其連結至 Termix 伺服器,即可在所有裝置上使用相同的主機與設定。", - "sectionInterface": "介面", - "interfacePresetDesc": "Termix 顯示的詳細程度。所有功能仍可使用。", "preset_simple": "簡易", "preset_simple_desc": "僅顯示基本功能。", "preset_balanced": "平衡", "preset_balanced_desc": "標準版面配置。", "preset_advanced": "進階", "preset_advanced_desc": "開啟所有功能,版面緊湊。", - "presetClearOverrides": "全部恢復", - "presetOverridesTitle": "已自訂", - "presetRevertArea": "還原", - "presetConfirmTitle": "要切換至「{{preset}}」嗎?", - "presetConfirmDesc": "這將重置您的側邊欄、導覽列、儀表板版面、終端機工具列與檔案管理器檢視。您的主機、憑證與首頁不會受到影響。", - "presetConfirmApply": "套用預設方案", - "runSetupAgainDesc": "再次執行首次設定流程。", - "runSetupAgainButton": "執行設定", "uiArea_chrome": "應用程式框架", "uiArea_hostList": "主機清單", "uiArea_credentialList": "憑證清單", @@ -1602,125 +1082,12 @@ "uiArea_terminal": "終端機", "uiArea_fileManager": "檔案管理器", "uiArea_hostEditor": "主機編輯器", - "sectionAppearance": "外觀", - "sectionSecurity": "安全性", - "sectionApiKeys": "API 金鑰", - "sectionData": "資料", - "usernameLabel": "使用者名稱", - "roleLabel": "角色", - "roleAdministrator": "管理員", - "authMethodLabel": "驗證方式", - "authMethodLocal": "本機", - "twoFaLabel": "雙重驗證", - "twoFaOn": "開啟", - "twoFaOff": "關閉", - "versionLabel": "版本", - "cliTitle": "Termix CLI", - "cliDescription": "從您自己的 Shell 開啟終端機、執行指令並移動檔案。", - "cliLearnMore": "了解更多", - "deleteAccount": "刪除帳戶", - "deleteAccountDescription": "永久刪除您的帳戶", - "deleteButton": "刪除", - "deleteAccountPermanent": "此操作是永久性的,無法復原。", - "deleteAccountWarning": "所有工作階段、主機、憑證和設定都將被永久刪除。", - "confirmPasswordDeletePlaceholder": "輸入密碼以確認", "languageLabel": "語言", "themeLabel": "主題", "fontSizeLabel": "字型大小", "interfaceFontLabel": "介面字型", "interfaceFontDescription": "變更應用程式介面的字型。終端機設定檔會保留其各自的字型設定。", "accentColorLabel": "強調色", - "keyboardShortcuts": "鍵盤快捷鍵", - "keyboardShortcutsDescription": "自訂終端機的複製、貼上和指令快捷鍵", - "manageShortcuts": "管理", - "commandPalette": "指令面板", - "commandPaletteDesc": "啟用鍵盤快捷鍵", - "reopenTabsOnLogin": "登入時重新開啟分頁", - "reopenTabsOnLoginDesc": "當您登入或重新整理頁面時,恢復您開啟的分頁,即使從其他裝置亦然", - "confirmTabClose": "確認關閉分頁", - "confirmTabCloseDesc": "關閉終端機分頁前進行確認", - "showTabNumbers": "顯示分頁編號", - "showTabNumbersDesc": "在每個分頁上顯示編號,以便區分", - "settingsAppRail": "應用程式列", - "sidebarSettingsMoved": "主機側邊欄的顯示設定已移至「自訂側邊欄」面板,可從「主機」工具列開啟。", - "showHostTags": "顯示主機標籤", - "showHostTagsDesc": "在主機清單中顯示標籤", - "statusColors": "真實狀態色彩", - "statusColorsDesc": "使用綠色/紅色表示線上/離線狀態,而非強調色", - "pinAppRail": "固定應用程式列", - "pinAppRailDesc": "保持左側應用程式列始終展開,而非在懸停時展開", - "expandAppRailOnHover": "懸停時展開應用程式列", - "expandAppRailOnHoverDesc": "允許游標移至左側應用程式列時將其展開", - "appRailHoverPushesContent": "展開時推擠內容", - "appRailHoverPushesContentDesc": "為展開的側邊欄騰出空間,而非覆蓋在頁面上方。開啟的會話(如遠端桌面)將隨之調整大小", - "showPinAppRailButton": "顯示固定應用程式列按鈕", - "showPinAppRailButtonDesc": "在應用程式列中顯示一個按鈕以將其固定開啟。預設為關閉。", - "settingsNavigation": "導覽", - "navigationTabsDesc": "選擇在應用程式列中顯示哪些分頁", - "settingsUpdates": "更新", - "disableUpdateChecks": "停用更新檢查", - "disableUpdateChecksDesc": "停止檢查更新", - "changePassword": "變更密碼", - "currentPasswordLabel": "目前密碼", - "currentPasswordPlaceholder": "目前密碼", - "newPasswordLabel": "新密碼", - "newPasswordPlaceholder": "新密碼", - "confirmPasswordLabel": "確認新密碼", - "confirmPasswordPlaceholder": "確認新密碼", - "updatePassword": "更新密碼", - "createApiKeyTitle": "建立 API 金鑰", - "createApiKeyDescription": "產生新的 API 金鑰以進行程式化存取。", - "apiKeyNameLabel": "名稱", - "apiKeyNamePlaceholder": "例如:CI Pipeline", - "expiryDateLabel": "到期日", - "optional": "選填", - "cancel": "取消", - "createKey": "建立金鑰", - "apiKeyCreatedWarning": "金鑰已建立 - 請立即複製,之後將不再顯示。", - "copyApiKey": "複製 API 金鑰", - "copiedToClipboard": "已複製到剪貼簿", - "apiKeyCount_other": "{{count}} 個金鑰", - "newKey": "新增金鑰", - "noApiKeys": "尚無 API 金鑰。", - "apiKeyActive": "啟用中", - "apiKeyUsageHint": "將您的金鑰包含在", - "apiKeyUsageHintHeader": "標頭中。", - "apiKeyPermissionsHint": "金鑰會繼承建立者的權限。", - "exportData": "匯出我的資料", - "exportDataDesc": "下載您的主機、憑證與設定備份,以便轉移至其他裝置", - "export": "匯出", - "exporting": "正在匯出...", - "importData": "匯入我的資料", - "importDataDesc": "從 .sqlite 備份檔案還原您的主機、憑證與設定", - "importDataSelected": "已選取:{{name}}", - "selectFile": "選取檔案", - "changeFile": "變更", - "import": "匯入", - "importing": "正在匯入...", - "exportSuccess": "資料匯出成功", - "exportFailed": "資料匯出失敗", - "importSelectFile": "請先選取檔案", - "importCompleted": "匯入完成:已匯入 {{total}} 個項目,跳過 {{skipped}} 個", - "importFailed": "匯入失敗:{{error}}", - "roleUser": "使用者", - "authMethodDual": "雙重驗證", - "authMethodExternal": "外部", - "done": "完成", - "apiKeyNameRequired": "金鑰名稱為必填", - "apiKeyCreated": "API 金鑰「{{name}}」已建立", - "apiKeyCreateFailed": "建立 API 金鑰失敗", - "apiKeyUser": "使用者", - "apiKeyExpires": "到期", - "apiKeyRevoked": "API 金鑰「{{name}}」已撤銷", - "apiKeyRevokeFailed": "撤銷 API 金鑰失敗", - "passwordFieldsRequired": "目前密碼與新密碼皆為必填", - "passwordMismatch": "密碼不一致", - "passwordTooShort": "密碼至少需要 6 個字元", - "passwordUpdated": "密碼更新成功", - "passwordUpdateFailed": "更新密碼失敗", - "deletePasswordRequired": "刪除帳號需要輸入密碼", - "deleteFailed": "刪除帳號失敗", - "deleting": "正在刪除...", "colorPickerTooltip": "開啟色彩選擇器", "themeSystem": "系統", "themeLight": "淺色", @@ -1731,18 +1098,7 @@ "themeSolarized": "Solarized", "themeTokyoNight": "Tokyo Night", "themeOneDark": "One Dark", - "themeGruvbox": "Gruvbox", - "linkedProfileTitle": "已登入 {{server}}", - "linkedProfileDescription": "此裝置使用您在伺服器上的帳戶,並保留資料副本,因此即使離線也能正常運作。", - "manageSync": "管理同步", - "setUpSync": "連結至伺服器", - "settingsTabsAndShortcuts": "分頁與捷徑", - "onBetaTitle": "您正在使用測試版", - "onBetaDescription": "感謝您參與測試。請告訴我們哪些功能出錯了。", - "tryBetaTitle": "搶先體驗新功能", - "tryBetaDescription": "在「更新」中參加測試計畫。", - "sendBetaFeedback": "傳送測試版意見回饋", - "openUpdates": "更新" + "themeGruvbox": "Gruvbox" } } }, @@ -1983,8 +1339,7 @@ "hasDependents": "{{name}} 被 {{list}} 所依賴。請先停用或解除安裝這些項目。", "missingDependencies": "{{name}} 需要 {{list}},但目前未安裝。", "consentChanged": "此外掛所需的權限自您上次查看後已變更。請再次檢查清單。", - "upload": "無法讀取 {{name}}:{{error}}", - "developerMode": "無法變更開發者模式:{{error}}" + "upload": "無法讀取 {{name}}:{{error}}" }, "data": { "title": "已儲存的資料", @@ -2102,13 +1457,7 @@ "browsePlugins": "瀏覽外掛", "loading": "載入中", "developer": { - "title": "外掛開發者模式", - "hint": "允許管理員在外掛分頁中從 .tmxplug 檔案安裝外掛,無需經過登錄檢查。適用於建構與測試您自己的外掛。", - "enableTitle": "要啟用開發者模式嗎?", - "enableBody": "管理員將能安裝未經 Termix 檢查的外掛檔案。外掛可執行其權限允許的任何操作,因此僅在建構或測試外掛時才應啟用此模式。", - "enable": "啟用", - "installFromFile": "從檔案安裝", - "signedOnly": "已設定 TERMIX_REQUIRE_SIGNED_PLUGINS,因此無法從檔案安裝。" + "installFromFile": "從檔案安裝" }, "count": { "downloads_other": "{{formatted}} 次下載", @@ -2145,71 +1494,7 @@ "secretSet": "已設定", "secretNotSet": "未設定", "secretReplace": "取代", - "pluginSettingsSaved": "設定已儲存", - "pluginSettingsInvalid": "部分設定無法儲存。請檢查高亮的欄位。", - "pluginSettingsSaveFailed": "儲存設定失敗", - "pluginSettingsLoadFailed": "載入設定失敗", - "featureUnavailable": "{{name}} 目前無法使用。這些設定已儲存,但不會生效。", - "account": "帳戶", - "security": "安全性", - "apiKeys": "API 金鑰", - "data": "資料與同步", - "interface": "介面", - "appearance": "外觀", - "keybindings": "鍵盤快捷鍵", - "adminGeneral": "一般", - "adminUsers": "使用者", - "adminSessions": "工作階段", - "adminRoles": "角色", - "adminHostDefaults": "主機預設值", - "adminBranding": "品牌設定", - "adminDatabase": "資料庫", - "adminSsl": "SSL", - "adminApiKeys": "API 金鑰", - "adminAuditLog": "稽核日誌", - "bandYou": "您的帳戶", - "bandApp": "此應用程式", - "bandPlugins": "插件", - "bandInstance": "此伺服器", - "searchPlaceholder": "搜尋設定", - "noResults": "沒有符合的設定。", - "pages": "頁面", - "instanceSettings": "伺服器設定", - "nothingHere": "此處無可設定項目。", - "searchPage": "搜尋此頁面", - "noPageMatches": "此頁面上沒有符合的結果。", - "updates": { - "title": "更新", - "betaProgram": "測試版計畫", - "betaIntro": "測試版是下一版 Termix 的早期建構版本。當有新功能可供試用時,它們會在週二和週五發布。測試版可能會有錯誤,您的回饋能讓穩定版變得更好。", - "termixBetas": "Termix 測試版", - "termixBetasHint": "告訴我新的測試版,而不只是穩定版。", - "runningBetaBuild": "您正在執行測試版建構。若要離開,請切換回穩定版映像檔或安裝程式。", - "howToInstall": "如何取得測試版", - "desktopInstall": "下載測試版安裝程式並覆蓋安裝。", - "downloadBeta": "下載 {{version}}", - "dockerInstall": "將映像檔變更為測試版標籤並重新啟動容器:", - "copy": "複製", - "copied": "已複製", - "copyFailed": "無法複製", - "learnMore": "了解更多關於測試版的資訊", - "feedback": "回饋", - "feedbackHint": "發現錯誤或有想法嗎?這會直接傳送給開發人員,並自動填入您的版本資訊。", - "sendFeedback": "傳送測試版回饋", - "releases": "版本", - "thisVersion": "目前版本", - "newestStable": "最新穩定版", - "newestBeta": "最新測試版", - "noRelease": "目前沒有", - "pluginBetas": "外掛測試版", - "pluginBetasIntro": "每個外掛都可以獨立使用測試版。若要試用,請開啟外掛並按下「試用測試版」。", - "openPlugins": "開啟外掛", - "waitingForStable": "已回到穩定版。在穩定版更新之前,將停留在 {{version}}。", - "backToStable": "回到穩定版", - "allPluginsBeta": "所有外掛使用測試版", - "allPluginsStable": "所有外掛回到穩定版", - "saveFailed": "無法儲存變更" - } + "featureUnavailable": "{{name}} 目前無法使用。這些設定已儲存,但不會生效。" }, "managerCard": { "refresh": "重新整理", @@ -2219,80 +1504,10 @@ "filter": "篩選..." }, "sync": { - "server": "Termix 伺服器", - "account": "帳戶", - "status": "狀態", - "never": "從未", - "justNow": "剛剛", "minutesAgo_other": "{{count}} 分鐘前", "hoursAgo_other": "{{count}} 小時前", - "actionFailed": "操作失敗。請再試一次。", - "unlinkedTitle": "僅限此裝置", - "unlinkedBody": "Termix 在此裝置上可獨立運作。將其連結到您的 Termix 伺服器以保持一致。", - "unlinkedPointHosts": "您的主機、憑證、程式碼片段和設定會跟隨您到每一台裝置。", - "unlinkedPointOffline": "當無法連線到伺服器時,一切仍會正常運作,並在之後同步。", - "unlinkedPointAccount": "您使用伺服器帳戶登入,其他人與您分享的主機也會顯示在此處。", - "linkButton": "連結到伺服器", - "state": { - "syncing": "同步中", - "offline": "無法連線到伺服器", - "error": "同步已停止", - "signedOut": "已登出", - "synced": "已於 {{time}} 同步" - }, "pending_other": "{{count}} 項變更等待同步", - "signInAgain": "重新登入", - "syncNow": "立即同步", - "unlink": "取消連結", - "unlinked": "此裝置已不再連結", - "unlinkTitle": "解除此裝置的連結?", - "unlinkDescription": "這將停止同步並登出伺服器。無論如何,其他人與您分享的伺服器都會從此裝置移除。", - "unlinkKeepTitle": "保留此處的資料", - "unlinkKeepBody": "您的伺服器、憑證和設定將保留在此裝置上,並繼續獨立運作。", - "unlinkRemoveTitle": "移除已同步的資料", - "unlinkRemoveBody": "所有來自伺服器的資料都會從此裝置移除。僅保留設定為僅存在於此裝置的伺服器。", - "conflictsTitle": "衝突", - "conflictsDescription": "這些項目在此裝置和伺服器上同時被修改。目前使用的是伺服器版本。若要改為將您的版本傳送至伺服器,請選擇保留您的版本。", - "keepMine": "保留我的版本", - "keepServer": "保留伺服器版本", - "errorsTitle": "未同步", - "errorsDescription": "伺服器未接受這些變更。它們將保留在此裝置上。", - "errorPermission": "您在伺服器上的帳戶無權進行此變更。", - "retry": "重試", - "whatSyncs": "同步內容", - "whatSyncsDescription": "關閉任何您希望僅保留在此裝置上的項目。", - "coreGroup": "Termix", - "notOnServer": "伺服器上沒有此項目", - "notOnDevice": "尚未同步至此裝置", - "localOnlyHint": "您也可以從個別伺服器或資料夾的設定中,將其設定為僅保留在此裝置上。", - "originTitle": "連線起始位置", - "originDescription": "從此裝置連線至伺服器,或透過伺服器連線。您可以針對每個伺服器單獨設定。", - "originLocal": "此裝置", - "originRemote": "伺服器", - "entities": { - "hosts": "伺服器", - "sshCredentials": "憑證", - "sshFolders": "資料夾", - "userPreferences": "偏好設定", - "pluginUserSettings": "外掛設定", - "sharedHosts": "與您分享的伺服器", - "sharedCredentials": "與您分享的憑證", - "vaultProfiles": "Vault 設定檔", - "snippetFolders": "程式碼片段資料夾", - "snippets": "程式碼片段", - "dashboardServiceLinks": "服務連結", - "homepageItems": "首頁項目", - "networkTopology": "網路拓撲圖", - "workspaces": "工作區", - "hostDefaults": "伺服器預設值", - "hostDefaultsAdmin": "伺服器端預設值", - "aiProviders": "AI 服務提供者", - "homepageLayouts": "首頁版面配置", - "accountProfile": "帳戶設定檔" - }, "proxy": { - "title": "反向代理", - "description": "僅在伺服器前方有 Cloudflare Access 或登入頁面等服務時需要。", "headersTitle": "額外標頭", "headersHint": "隨每個請求傳送至伺服器,例如 Cloudflare Access 服務權杖。", "headerName": "標頭名稱", @@ -2305,8 +1520,7 @@ "username": "使用者名稱", "password": "密碼", "allowInvalidCertificate": "信任自簽名憑證", - "allowInvalidCertificateHint": "僅適用於您自己的伺服器,且其憑證並非來自知名憑證授權單位時。", - "saved": "已儲存" + "allowInvalidCertificateHint": "僅適用於您自己的伺服器,且其憑證並非來自知名憑證授權單位時。" }, "problems": { "invalidUrl": "這看起來不像有效的網址。", @@ -2342,6 +1556,27 @@ "linking": "正在連結並執行首次同步...", "linked": "已連結。您的資料正在同步。", "signedInAgain": "已登入。同步已重新執行。" + }, + "entities": { + "hosts": "伺服器", + "sshCredentials": "憑證", + "sshFolders": "資料夾", + "userPreferences": "偏好設定", + "pluginUserSettings": "外掛設定", + "sharedHosts": "與您分享的伺服器", + "sharedCredentials": "與您分享的憑證", + "vaultProfiles": "Vault 設定檔", + "snippetFolders": "程式碼片段資料夾", + "snippets": "程式碼片段", + "dashboardServiceLinks": "服務連結", + "homepageItems": "首頁項目", + "networkTopology": "網路拓撲圖", + "workspaces": "工作區", + "hostDefaults": "伺服器預設值", + "hostDefaultsAdmin": "伺服器端預設值", + "aiProviders": "AI 服務提供者", + "homepageLayouts": "首頁版面配置", + "accountProfile": "帳戶設定檔" } }, "hostDefaults": { @@ -2358,28 +1593,9 @@ "resetTitle": "此主機設有自己的值。按一下以再次使用來自 {{source}} 的預設值", "clearTitle": "在此層級設定。按一下以清除並改用 {{source}}", "inheritedTitle": "沿用來自 {{source}} 的預設值", - "titleAdmin": "伺服器主機預設值", - "titleUser": "我的主機預設值", - "titleFolder": "資料夾預設值:{{name}}", - "descriptionAdmin": "此伺服器上所有主機的預設值。使用者自己的預設值、資料夾的預設值或主機本身仍可設定不同的值。修改欄位即可在此設定,或清除欄位以保留未設定狀態。", - "descriptionUser": "您所有主機的預設值,優先於伺服器預設值。資料夾或主機本身仍可設定不同的值。修改欄位即可在此設定,或清除欄位以保留未設定狀態。", - "descriptionFolder": "此資料夾及其子資料夾中主機的預設值,優先於您自己的預設值。主機本身仍可設定不同的值。修改欄位即可在此設定,或清除欄位以保留未設定狀態。", - "save": "儲存預設值", "saved_other": "預設值已儲存。已更新 {{count}} 個主機。", - "savedInBackground": "預設值已儲存。正在背景更新主機。", "appliedToHosts_other": "已使用新的預設值更新 {{count}} 個主機。", - "saveFailed": "無法儲存預設值", - "loadFailed": "無法載入預設值", - "confirmTitle": "儲存預設值?", "confirmChanges_other": "{{count}} 個主機遵循這些預設值,將會變更。", - "confirmNoChanges": "現有主機無變更。新主機將以這些預設值開始。", - "menuMyDefaults": "我的主機預設值", - "folderDefaultsAction": "資料夾預設值", - "adminSectionDescription": "設定此伺服器上所有主機遵循的預設值,涵蓋主機擁有的所有設定,包括每個外掛程式的設定。使用者和資料夾可在其上設定自己的預設值,任何主機仍可使用其自己的值。", - "editServerDefaults": "編輯伺服器預設值", - "resetMenu": "重設", - "resetAll": "全部重設為預設值", - "resetCore": "連線與 SSH 重設為預設值", "resetDone_other": "{{count}} 個主機已套用預設值。" }, "panel": { @@ -2392,44 +1608,10 @@ "fields": { "secretSaved": "已儲存。輸入以取代。" }, - "sharing": { - "revokeConfirm": "要移除 {{name}} 的存取權限嗎?", - "revoke": "移除存取權限" - }, "manage": { - "searchSettings": "搜尋設定", - "noMatchingSettings": "沒有符合的設定。", - "sections": "區段", - "sectionNeedsAttention": "此處有項目需要處理", "needsAttention_other": "{{count}} 個項目需要處理。", - "bandHost": "主機", - "bandFeatures": "通訊協定與外掛", - "bandCredential": "憑證", - "sshConnection": "SSH 連線", - "errorAddressRequired": "必須提供位址。", - "errorPortRange": "請使用 1 到 65535 之間的埠號。", - "defaults": "預設值", - "searchHosts": "搜尋主機", - "searchCredentials": "搜尋憑證", - "searchDefaults": "搜尋預設值", - "addCredential": "新增憑證", - "nothingMatches": "沒有符合項目", - "nothingYet": "此處尚無內容", - "emptyHostsHint": "新增主機後,它會顯示在您指定的資料夾中。", - "emptyCredentialsHint": "儲存的憑證可由任何主機重複使用。", - "collapse": "收合", - "expand": "展開", - "cannotBeUndone": "此操作無法復原。", - "hostNotFound": "找不到該主機。請嘗試重新整理清單。", "hostCount_other": "{{count}} 個主機", - "credentialCount_other": "{{count}} 個憑證", - "newHost": "新增主機", - "newCredential": "新增憑證", - "advanced": "進階", - "pickHost": "選取要編輯的主機", - "pickCredential": "選取要編輯的憑證", - "pickDefaults": "選取要編輯的預設值層級", - "pickHint": "連線的所有設定都位於此處,並分組以便查找。" + "credentialCount_other": "{{count}} 個憑證" }, "rbac": { "roles": { diff --git a/src/ui/locales/translations-lock.json b/src/ui/locales/translations-lock.json index bff1b9acb..35616cc01 100644 --- a/src/ui/locales/translations-lock.json +++ b/src/ui/locales/translations-lock.json @@ -132,7 +132,6 @@ "common.continue": "2e02623966f9", "common.error": "7f2f6a15cf8d", "common.unsavedChanges": "29267269c048", - "common.more": "4bab2d8fe13f", "common.loading": "b04ba49f8486", "common.host": "3960ec4ca5fb", "common.selectHost": "8c64dec3063b", @@ -145,7 +144,6 @@ "common.cancel": "77dfd2135f4d", "common.username": "84c29015de33", "common.login": "4e5a2893bdcc", - "common.logout": "e43d612e11f1", "common.register": "d672995a1465", "common.password": "8be3c943b160", "common.confirmPassword": "c2d404cb7bad", @@ -156,8 +154,6 @@ "common.rename": "d3f4cb898fbe", "common.edit": "5301648dcf6b", "common.confirm": "04a212215ef9", - "common.next": "bc981983e7f5", - "common.previous": "50f94286ba30", "common.refresh": "56e3badc4e6c", "common.language": "89b86ab0e66f", "common.backendReconnected": "0016b98e77c5", @@ -221,10 +217,6 @@ "onboarding.desktopLinkBody": "488f5897a248", "onboarding.desktopLinked": "19146658b07d", "onboarding.pluginsDocsLink": "e4ffb8fd289c", - "desktopUpdates.title": "f7a44c6b8856", - "desktopUpdates.mode": "c76d18079a07", - "desktopUpdates.modeHint": "6492b43953cd", - "desktopUpdates.manualModeHint": "ce2956d8ed40", "desktopUpdates.modeAutomatic": "ac9041e76816", "desktopUpdates.modePrompt": "1aeb84dfd695", "desktopUpdates.modeNever": "80c3052d33cc", @@ -234,15 +226,6 @@ "desktopUpdates.onboardingTitle": "16213f85d7a6", "desktopUpdates.onboardingBody": "0a3a54812d10", "desktopUpdates.onboardingManual": "3350626ad97f", - "desktopUpdates.status": "4033fb7f46f8", - "desktopUpdates.statusIdle": "82bd72a326cc", - "desktopUpdates.statusChecking": "78948b2a07ee", - "desktopUpdates.statusAvailable": "7ed7afe08d2a", - "desktopUpdates.statusDownloading": "91ac5aba3d05", - "desktopUpdates.statusReady": "f01885602d2f", - "desktopUpdates.statusUpToDate": "aff2a7fb6524", - "desktopUpdates.statusError": "7c5c7ec5e1e0", - "desktopUpdates.checkNow": "2ce5dd0d6f18", "desktopUpdates.download": "a479c9c34e87", "desktopUpdates.restart": "af2c3d8ef2fe", "desktopUpdates.later": "56e2f5d3634e", @@ -254,26 +237,11 @@ "nav.terminal": "a1f52cdcb3f2", "nav.close": "bbfa773e5a63", "nav.hostTabTitle": "489199250a85", - "nav.copyPassword": "f9bbc2a4fd3e", - "nav.copySudoPassword": "5db7feecda98", - "nav.passwordCopied": "b46570b4b56d", - "nav.failedToCopyPassword": "1041d1934407", - "nav.refreshTab": "e260210e1a48", - "nav.renameTab": "21c5e586d950", "nav.dashboard": "d87f47b47e4d", "nav.quickConnect": "075ecb7a787f", - "nav.openAsTabHint": "2885d62d09e0", - "nav.openAsTab": "1419eb7a160b", - "nav.openInRightDock": "a986a01a4253", - "nav.closeRightDock": "029c85719158", - "nav.toggleRightDock": "4443e316308e", "nav.hosts": "53103abbf692", "nav.credentials": "dd097a229701", "nav.connections": "8f3509b64e0e", - "nav.keepSideMenuOpen": "f2bfde646c2e", - "nav.collapseSideMenu": "276a246accaf", - "nav.roleAdministrator": "1eda23758be9", - "nav.roleUser": "9f8a2389a20c", "nav.sync": "905f63092ff2", "nav.reconnectDisconnectedTerminals": "b5d39c5dc9b3", "nav.reconnectingTerminals": "f729283b0f06", @@ -281,27 +249,10 @@ "nav.reconnectTerminalsFailed": "ab2768afd6c2", "nav.fullscreenUnsupported": "b2a761fa8f32", "nav.fullscreenFailed": "6eb57792509e", - "nav.resetSidebarWidth": "7348c793da82", - "nav.collapseSidebar": "9e6876286e45", - "nav.openSidebar": "24d219905fb8", "nav.confirmCloseHost": "ed92aad47100", - "nav.enterFullscreen": "312c81b9f1a7", - "nav.exitFullscreen": "803ff6b69dd0", - "nav.group.objects": "755844bc3946", - "nav.group.tools": "4fa8cc860c52", - "nav.group.system": "bc0792d8dc81", - "nav.searchEverything": "22aea42d2b5d", - "nav.search": "bce06414177f", "nav.hiddenCount": "b95e58c10b91", - "nav.showInRail": "914e4685995d", - "nav.moveUp": "b4f57cd0cd5c", - "nav.moveDown": "260ff8ae7182", - "nav.resetRailOrder": "b74221691b94", - "nav.hideFromRail": "4a6971a46e51", - "nav.openSettings": "fd7108f8312a", "nav.settings": "c7f73bb54d92", "nav.manage": "bf58d17e561b", - "nav.mobileNavigation": "cf03cf2e9cdf", "nav.plugins": "ab2e26dd8b88", "hosts.hosts": "53103abbf692", "hosts.noHosts": "f6b7ddca2845", @@ -866,32 +817,13 @@ "hosts.importTooMany": "b2ad2fe22c6d", "hosts.importSummary": "1033ca25dba1", "hosts.importHostsFailed": "72e0d6f1ebac", - "commandPalette.searchPlaceholder": "b0b87fb731b5", - "commandPalette.quickActions": "c40810f5c31d", - "commandPalette.navigation": "cf03cf2e9cdf", - "commandPalette.orShortcut": "1758356db217", - "commandPalette.addNewHost": "664db98dd8ce", - "commandPalette.adminSettings": "2bf73c3604d6", - "commandPalette.addCredential": "efd6c2d5a3ca", - "commandPalette.recentActivity": "8aebf36d41d7", - "commandPalette.serversAndHosts": "09f5046f2130", - "commandPalette.noHostsFound": "7dff2993b2b8", - "commandPalette.links": "014bcd654c60", - "commandPalette.navigate": "1eee3afea23e", - "commandPalette.select": "8598222918d3", - "commandPalette.pluginActions": "a1e34f91579d", - "commandPalette.noTargetTab": "126ecffc7c71", - "commandPalette.documentation": "9e9cf3221a30", "splitScreen.title": "ac28f6d34458", "splitScreen.defaultLabel": "52cc1335402a", "splitScreen.splitRight": "a8dc745cc04e", "splitScreen.splitDown": "7eef505bfb26", - "splitScreen.addToSplit": "5d497fb078e1", "splitScreen.paneEmptyItem": "385714ff13a1", "splitScreen.paneItem": "41910e3a953f", "splitScreen.paneNumber": "7561cf001ed8", - "splitScreen.newPaneRight": "84201f1c7216", - "splitScreen.newPaneBelow": "5ee66d43d7fd", "splitScreen.emptyTitle": "9b4e241588ea", "splitScreen.emptyHint": "822e4906f158", "splitScreen.openTabs": "b4d5aeafe19f", @@ -908,7 +840,6 @@ "splitScreen.clearPane": "2eb6ba49325e", "splitScreen.zoom": "06a1fb36dbec", "splitScreen.unzoom": "17676e60cb51", - "splitScreen.unsplit": "1bf80d9c0b33", "splitScreen.layouts": "28e6f54e33a1", "splitScreen.applyLayout": "8aa223981d77", "splitScreen.maxPanes": "84cc7503cf22", @@ -916,8 +847,6 @@ "splitScreen.dropHere": "d1fb7a38dc72", "splitScreen.paneActions": "5a0535178503", "splitScreen.dividerHint": "46d966b28114", - "splitScreen.openInSplit": "a9eeb4f8bc0b", - "splitScreen.openInNewSplit": "89aae3cccbb8", "splitScreen.shortcuts": "90c93523ff95", "splitScreen.shortcutNavigate": "7e440b331918", "splitScreen.presets.columns2": "c1fab49da358", @@ -928,21 +857,6 @@ "splitScreen.presets.grid4": "120f49dc6aea", "splitScreen.presets.grid5": "149fb017749d", "splitScreen.presets.grid6": "1213a5f52ad9", - "connections.noConnections": "141a0213ea52", - "connections.noConnectionsDesc": "6109506d6047", - "connections.connectedFor": "b9b094b18ae7", - "connections.connected": "c2f9b7b4897f", - "connections.disconnected": "771e05f27b99", - "connections.reconnect": "6988b16a8fd2", - "connections.sectionOpen": "cf9b77061f7b", - "connections.sectionBackground": "64dd60fe1a04", - "connections.backgroundDesc": "4137bf71fe2b", - "connections.expiresIn": "e7dfa3187451", - "connections.search": "55b34618a4bf", - "connections.noSearchResults": "0e685812539c", - "connections.rename": "25fc9fbf4106", - "connections.forgetConfirm": "6917f2068baa", - "connections.forget": "8c0f4c330029", "sshAuth.totpRequired": "4bf1a963edf7", "sshAuth.totpCodeLabel": "50cdc18b7b3e", "sshAuth.totpVerify": "dda6ac27b9d3", @@ -1068,453 +982,32 @@ "placeholders.keyPassword": "76ccbbc5e1c7", "placeholders.pastePrivateKey": "855c77c2aa1d", "placeholders.enterPassword": "1378167d5266", - "placeholders.apiKeyName": "ae7f282909d5", - "placeholders.credentialName": "48dd140aa875", - "placeholders.optionalDetails": "5c32a236590d", - "placeholders.sshUsername": "408c8848c079", - "placeholders.hostAddress": "17279f983a3c", - "placeholders.hostName": "028df722e3c3", - "dashboard.title": "d87f47b47e4d", - "dashboard.github": "5442e2b64fa0", - "dashboard.reportBug": "fbb446a61a44", - "dashboard.discord": "bccc14ee7da1", - "dashboard.docs": "68a4194227be", - "dashboard.donate": "95345e276ffb", - "dashboard.serverOverview": "0221052a1e13", - "dashboard.version": "2da600bf9404", "dashboard.updateAvailable": "67fd3a94d031", "dashboard.beta": "f03b60f7e52b", - "dashboard.uptime": "6aafa80cab6f", - "dashboard.database": "61074f1c958d", - "dashboard.healthy": "80ea156e1b83", - "dashboard.error": "7f2f6a15cf8d", - "dashboard.totalHosts": "ff550b44a0f8", - "dashboard.totalCredentials": "2c008f31e696", - "dashboard.recentActivity": "8aebf36d41d7", - "dashboard.reset": "44c57abd888a", - "dashboard.noRecentActivity": "6a52f1d4b635", - "dashboard.quickActions": "c40810f5c31d", - "dashboard.addHost": "3cd09f32f09e", - "dashboard.addCredential": "efd6c2d5a3ca", - "dashboard.adminSettings": "2bf73c3604d6", - "dashboard.userProfile": "5f38c2b87329", - "dashboard.serverStats": "593820d78285", - "dashboard.customizeLayout": "388a2bc81e93", - "dashboard.justNow": "a7f8e7cc0d43", "dashboardTab.stable": "7ce3adafad3e", - "dashboardTab.registerNewServer": "60c413423035", - "dashboardTab.storeSshKeysOrPasswords": "6e302d83b700", - "dashboardTab.manageUsersAndRoles": "5238719435e0", - "dashboardTab.manageYourAccount": "4c61b38087ec", - "dashboardTab.hostStatus": "0e4b94cc7f6f", - "dashboardTab.noHostsConfigured": "686b08e64594", - "dashboardTab.checking": "140e02c7084f", - "dashboardTab.commandPalette": "5843727a5928", - "dashboardTab.done": "e9b450d14bc2", - "dashboardTab.clear": "719ea396ad92", - "dashboardTab.dragToResizeColumns": "d3ed139352ff", - "dashboardTab.hostsAvailable": "d81451a36a64", - "dashboardTab.removeSection": "e7eaff78b315", - "dashboardTab.addSection": "d10b3b78f3b6", - "dashboardTab.allSectionsShown": "9766e562bf6c", - "dashboardTab.fromPlugins": "016e033ae506", - "dashboardTab.dropHere": "b2117e454255", - "dashboardTab.dragToReorder": "0a2e015b48f1", - "dashboardTab.clearActivityConfirm": "b387ffb6c9f5", - "dashboardTab.resetConfirm": "48f26dc07935", "dashboardTab.onlineCount": "95d81e3c41e5", "dashboardTab.hostCount": "4279c8d92ede", - "admin.sectionGeneral": "9239ee2cda84", - "admin.sectionUsers": "57f2b181d0a5", - "admin.sectionSessions": "e11e37a9253b", - "admin.sectionRoles": "47dcc27d6e87", - "admin.sectionDatabase": "61074f1c958d", - "admin.sectionApiKeys": "e18ffc8d675b", - "admin.sectionAuditLog": "28dd7536f7a6", - "admin.sectionSsl": "e926c87b3695", - "admin.sectionBranding": "169ebd8a8a9b", - "admin.brandingAppName": "5c6b271ce0be", - "admin.brandingAppNameDesc": "5b310ac2f3ed", - "admin.brandingTagline": "b0f794835fa0", - "admin.brandingTaglineDesc": "428e00100e82", - "admin.brandingLogo": "83fce8327410", - "admin.brandingLogoDesc": "b3caa72d5018", - "admin.brandingLogoUpload": "a564e951ed29", - "admin.brandingLogoReset": "39c90eb758c5", - "admin.brandingLogoInvalid": "c1e040df497a", - "admin.brandingSaved": "7fde4cbb7d77", - "admin.brandingSaveFailed": "0e37dd61615d", - "admin.sslDescription": "cf7142171574", - "admin.sslDocsLink": "18d914946c2e", - "admin.sslCertStatus": "7a18cce868f0", - "admin.sslCertStatusNone": "e95da41b6eb6", - "admin.sslCertStatusValid": "a4aefa35c3b5", - "admin.sslCertStatusExpiring": "74bbe7512058", - "admin.sslCertStatusExpired": "a689a999a5e6", - "admin.sslCertExpiresAt": "790c8e7e16e8", - "admin.sslInfoNote": "d45248889999", - "admin.sslManualCert": "5ad5b90c347a", - "admin.sslManualCertPlaceholder": "b2f60a22d5e8", - "admin.sslManualKey": "59027f199bc8", - "admin.sslManualKeyPlaceholder": "f908016d4cb9", - "admin.sslManualDesc": "6d7ccf33d3da", - "admin.sslManualUpload": "47abf7425822", - "admin.sslManualUploadLoading": "2e6308afb880", - "admin.sslManualUploadSuccess": "956b594f4779", - "admin.sslManualUploadFailed": "ec585765fa53", - "admin.sslManualRequiresFields": "16bf521b076f", - "admin.auditLogTotal": "7ae03792e293", - "admin.auditLogEmpty": "26759012fc12", - "admin.auditLogSuccess": "42a8f651d79f", - "admin.auditLogFailed": "09fef5d8d9a3", - "admin.auditLogClearFilters": "381c4bf1d409", - "admin.auditLogPage": "9449213ec105", - "admin.auditLogIp": "ea424d38af72", - "admin.auditLogResourceId": "542bc18985de", - "admin.auditLogFilterUser": "9f8a2389a20c", - "admin.auditLogFilterAction": "97c89a4d6630", - "admin.auditLogFilterResourceType": "1a4838822911", - "admin.auditLogFilterStatus": "bae7d5be7082", - "admin.auditLogFilterFrom": "3f66052a107e", - "admin.auditLogFilterTo": "ae79ea1e9c63", - "admin.auditLogFilterAll": "6a72085653e4", - "admin.allowRegistration": "25679f27f72a", - "admin.allowRegistrationDesc": "79799ca046e0", - "admin.allowPasswordLogin": "7688a7e8ce06", - "admin.allowPasswordLoginDesc": "f129394ed0b0", - "admin.externalAutoProvision": "ba718a8e69b8", - "admin.externalAutoProvisionDesc": "47d7a4d601f7", - "admin.secondFactorAfterExternalLogin": "74a5e5602c8a", - "admin.secondFactorAfterExternalLoginDesc": "7e9d88765df7", - "admin.allowPasswordReset": "665332131753", - "admin.allowPasswordResetDesc": "4ebc66e78afa", - "admin.auditForwardingTitle": "c3fed65e1d69", - "admin.auditForwardingDesc": "c2ea0706e196", - "admin.auditForwardingEnvNotice": "23b99a8a18f0", - "admin.auditForwardingToken": "f6e536120551", - "admin.auditForwardingTokenStored": "b3943f5d9316", - "admin.auditForwardingSaved": "c4f32803f283", - "admin.auditForwardingSaveError": "84a60740a121", - "admin.sessionTimeout": "3304bb85db3d", - "admin.hours": "5aedee0964c6", - "admin.sessionTimeoutRange": "edf70602488e", - "admin.monitoringDefaults": "700148620f34", - "admin.statusCheck": "a0480cd6b19c", - "admin.sec": "920a25ef686c", - "admin.logLevel": "3831d4e3e5ac", "admin.usersCount": "3df18cd657b5", - "admin.searchUsers": "8cdc4c093098", - "admin.noUsers": "c4b060bd59d9", - "admin.noUsersMatch": "60b1457c6d2b", - "admin.pageOf": "3a7003871fba", - "admin.createUser": "6e157c5da441", - "admin.newRole": "261071b7ac94", - "admin.roleName": "709a23220f2c", - "admin.roleDisplayName": "8d6b34815ba4", - "admin.roleDescription": "55f8ebc805e6", "admin.rolesCount": "3a738603113c", - "admin.createRole": "6e157c5da441", - "admin.creating": "28ea7667d026", - "admin.exportDatabase": "e10f93a0ac2f", - "admin.exportDatabaseDesc": "c1665bc24591", - "admin.export": "f3e4fadb9e37", - "admin.exporting": "d16aded01f80", - "admin.importDatabase": "d37e06ed5670", - "admin.importDatabaseDesc": "b7c77666cfe9", - "admin.importDatabaseSelected": "4a543b4a077b", - "admin.selectFile": "5c0c87ff4242", - "admin.changeFile": "64fbd995d3b6", - "admin.import": "d6fbc9d2bdd5", - "admin.importing": "b7353a71e042", "admin.apiKeysCount": "ad1ddfee8beb", - "admin.apiKeysDocsLink": "19abc6f6f7fa", - "admin.apiKeysCliHint": "61ef1a08fb89", - "admin.apiKeysCliLink": "4e82ccb7fc14", - "admin.newApiKey": "de00b312d96f", - "admin.apiKeyCreatedWarning": "633604265b0b", - "admin.apiKeyName": "709a23220f2c", - "admin.apiKeyUser": "9f8a2389a20c", - "admin.apiKeySelectUser": "d93f6216a58a", - "admin.apiKeyExpiresAt": "764a14539120", - "admin.createKey": "06dca185711e", - "admin.apiKeyNoExpiry": "39d436aabad4", - "admin.revokedBadge": "cfd92d62c5a0", - "admin.authTypeDual": "50b1880519ec", - "admin.authTypeExternal": "8d10c693b773", - "admin.authTypeLocal": "dc99d54d9990", - "admin.adminStatusAdministrator": "1eda23758be9", - "admin.adminStatusRegularUser": "ff7c49e28df3", - "admin.adminBadge": "b521caa6e1db", - "admin.systemBadge": "8c2868cc1816", - "admin.customBadge": "63d55e50dde7", - "admin.youBadge": "af319eaa7d4b", "admin.sessionsActive": "a088eaff58b4", - "admin.sessionActive": "295618b37dcb", - "admin.sessionExpires": "1f20b825369d", - "admin.revokeAll": "6a72085653e4", - "admin.revokeAllSessionsSuccess": "f4db5f9296bb", - "admin.revokeAllSessionsFailed": "42c8d125be64", - "admin.revokeSessionFailed": "8be6abd89b18", - "admin.addRole": "d8d5d55c4c9d", - "admin.noCustomRoles": "f04f8fe6bb5a", - "admin.removeRoleFailed": "0f6bc59a8339", - "admin.assignRoleFailed": "db79e65653d7", - "admin.userAdminAccess": "1eda23758be9", - "admin.userAdminAccessDesc": "27b2709add90", - "admin.userRoles": "47dcc27d6e87", - "admin.revokeAllUserSessions": "b84b88e35028", - "admin.revokeAllUserSessionsDesc": "36f4987df43b", - "admin.revoke": "0be720759ff0", - "admin.deleteUserWarning": "392e080c17cd", - "admin.deleteUser": "2847683b18b0", - "admin.deleting": "e16cac651b17", - "admin.deleteUserFailed": "121656f1031d", - "admin.deleteUserSuccess": "599b0cf80a1b", - "admin.deleteRoleSuccess": "7aa487ba64e1", - "admin.revokeKeySuccess": "d3a8b44fa1f2", - "admin.revokeKeyFailed": "0dcffac9b736", - "admin.copiedToClipboard": "0e7383487387", - "admin.done": "e9b450d14bc2", - "admin.createUserTitle": "b25c91fe6103", - "admin.createUserDesc": "05b5433c7687", - "admin.createUserUsername": "84c29015de33", - "admin.createUserPassword": "8be3c943b160", - "admin.createUserPasswordHint": "7758ac8f2f57", - "admin.createUserEnterUsername": "818fdf11a5db", - "admin.createUserSubmit": "b25c91fe6103", - "admin.editUserTitle": "d789fd5e1208", - "admin.editUserDesc": "75cec2f9d487", - "admin.editUserUsername": "84c29015de33", - "admin.editUserAuthType": "72dc5381324e", - "admin.editUserAdminStatus": "663c2e326e43", - "admin.editUserUserId": "23bf49dab136", - "admin.linkAccountTitle": "7a7543d4fc8f", - "admin.linkAccountDesc": "541dfb7a24b9", - "admin.linkAccountDescLocal": "00b8c526d56c", - "admin.linkAccountWarningTitle": "a291220bace8", - "admin.linkAccountEffect1": "ebd24df5f721", - "admin.linkAccountEffect2": "874b37b5a98a", - "admin.linkAccountEffect3": "b69a5804be96", - "admin.linkAccountTargetUsername": "7ea985cff075", - "admin.linkAccountTargetPlaceholder": "ab8315ffb043", - "admin.linkAccountExternalUsername": "ffa0b35d4695", - "admin.linkAccountExternalPlaceholder": "5a084a2e83a6", - "admin.linkAccountExternalNotFound": "01a23aff3d3a", - "admin.linkAccounts": "7a7543d4fc8f", - "admin.linkAccountSuccess": "95bbd7df8326", - "admin.linkAccountFailed": "4c8ca55bf406", - "admin.linkAccountInProgress": "42c3d866e520", - "admin.unlinkAccountTitle": "569d806d0067", - "admin.unlinkAccountDesc": "dc5a160f709c", - "admin.unlinkAccountWarning": "7e851d333ad8", - "admin.unlinkAccount": "569d806d0067", - "admin.unlinkAccountInProgress": "4ad317c18641", - "admin.unlinkAccountSuccess": "0406784505a4", - "admin.unlinkAccountFailed": "31aad030b37c", - "admin.updateRegistrationFailed": "4cff683ad27d", - "admin.updatePasswordLoginFailed": "40edca52360a", - "admin.updateSecondFactorAfterExternalLoginFailed": "9067124ded1d", - "admin.updatePasswordResetFailed": "38f3d38eba16", - "admin.sessionTimeoutRange2": "c0e5cebead3c", - "admin.sessionTimeoutSaved": "ac1a394b0c70", - "admin.sessionTimeoutSaveFailed": "a26164200813", - "admin.monitoringIntervalInvalid": "1e77d9e0eea3", - "admin.monitoringSaved": "fc1a2db8533d", - "admin.monitoringSaveFailed": "6f693458049d", - "admin.logLevelUpdateFailed": "7d38e671e8bf", - "admin.createUserRequired": "30c83c7a64b6", - "admin.createUserPasswordTooShort": "c017527b229f", - "admin.createUserSuccess": "a2de1843c699", - "admin.createUserFailed": "22e17ff0c033", - "admin.updateAdminStatusFailed": "93ec1fca9c0f", - "admin.allSessionsRevoked": "7e9b039c95f5", - "admin.revokeSessionsFailed": "42c8d125be64", - "admin.manageUserData": "c4ab496fe54f", - "admin.backToUsers": "359a3bdb3f29", - "admin.manageTabAccount": "85dfa32c97d8", - "admin.manageTabHosts": "53103abbf692", - "admin.manageTabCredentials": "dd097a229701", - "admin.manageTabSessions": "e11e37a9253b", - "admin.manageTabDanger": "58d17582a05d", - "admin.manageEditorBack": "5ba90723cd0c", - "admin.dataLockedBadge": "da6bac290137", - "admin.dataLockedNotice": "772528c86d11", - "admin.resetPasswordTitle": "3fb75e3bfe4d", - "admin.resetPasswordExternalOnly": "b5108df8cc3b", - "admin.resetPasswordPlaceholder": "d850ee188c7c", - "admin.resetPasswordBtn": "44c57abd888a", - "admin.resetPasswordWorking": "ee41f75047a1", - "admin.resetPasswordSuccess": "591d7d05f9b3", - "admin.resetPasswordSuccessWiped": "8358c2db3bee", - "admin.resetPasswordFailed": "34a79a4d0809", - "admin.resetPasswordConfirmWipe": "98bd50fde87b", - "admin.manageApiKeys": "e18ffc8d675b", - "admin.apiKeyNamePlaceholder": "72eb2605ba74", - "admin.apiKeyCopyNotice": "76212bd1b42b", - "admin.noApiKeysForUser": "3831f937f4ed", - "admin.apiKeyDeleteFailed": "c9af2c73dbd1", - "admin.exportUserData": "fd369935a258", - "admin.exportUserDataDesc": "d1f0ebc6b8c8", - "admin.exportUserDataSuccess": "3aa011780b6e", - "admin.exportUserDataFailed": "bef12abea77b", "admin.hostsCount": "4279c8d92ede", - "admin.addHostForUser": "3cd09f32f09e", - "admin.noHostsForUser": "4060d08e1d3f", - "admin.connectToHost": "b65463cb6a42", - "admin.deleteHostConfirm": "cbe3ad2b463d", - "admin.hostDeletedSuccess": "ef031cbb2fad", - "admin.hostDeleteFailed": "91f123a6b4e2", "admin.credentialsCount": "fd38fd5772a6", - "admin.addCredentialForUser": "efd6c2d5a3ca", - "admin.noCredentialsForUser": "aec6c7853f72", - "admin.deleteCredentialConfirm": "8276281e994c", - "admin.credentialDeletedSuccess": "85c5af0727d6", - "admin.credentialDeleteFailed": "42454841b448", - "admin.noSessionsForUser": "0dcbde78f64e", - "admin.deleteSuccessorLabel": "b4125f2b25cb", - "admin.deleteSuccessorMe": "2be1d8137d69", - "admin.deleteSuccessorNone": "3e0a1ffbf354", - "admin.deleteSuccessorDesc": "4c4a1ead2a9e", - "admin.deleteUserDangerDesc": "9a1df5cf5440", - "admin.deleteUserConfirm": "efca6b2aa51f", - "admin.deleteUserAdminBlocked": "02605544afbf", - "admin.createRoleRequired": "8eafcb61d1fe", - "admin.createRoleSuccess": "21821e73844b", - "admin.createRoleFailed": "6edfd75fed05", - "admin.apiKeyNameRequired": "c5ce86ba437f", - "admin.apiKeyUserRequired": "3d379b641cc6", - "admin.apiKeyCreatedSuccess": "a03548c19b9e", - "admin.apiKeyCreateFailed": "5e78089eaca9", - "admin.exportSuccess": "a2f72875143f", - "admin.exportFailed": "a703d4b1828d", - "admin.importSelectFile": "2a2f31ba0a71", - "admin.importCompleted": "45783a937627", - "admin.importFailed": "e13a1393cbaf", - "admin.importError": "0ecb526e9dbe", - "admin.sectionHostDefaults": "eb6a69dbc1bd", "admin.rolePermissions.count": "bc592c069e4d", - "admin.rolePermissions.editAction": "376cd254eee5", - "admin.rolePermissions.loadError": "7c716b86e9d2", - "admin.rolePermissions.saved": "07098a3ac54a", - "admin.rolePermissions.saveError": "fdb7f1eab6b2", - "admin.rolePermissions.save": "efc007a393f6", - "admin.rolePermissions.saving": "ae7e887517b0", - "admin.rolePermissions.pluginDisabled": "8e970c1c58b9", "admin.rolePermissions.groups.hosts": "53103abbf692", "admin.rolePermissions.groups.credentials": "dd097a229701", "admin.rolePermissions.groups.admin": "b8be3d126431", - "admin.notificationPrivateEndpoints": "f526173e3fcb", - "admin.notificationPrivateEndpointsDesc": "d9d22df81c18", - "admin.updateNotificationEndpointsFailed": "240ce51aa164", - "admin.secondFactorsSectionTitle": "7dbf1a3969e4", - "admin.secondFactorsNone": "8dc2c5bf313a", - "admin.secondFactorUnavailable": "2c9c1f79142d", - "admin.resetSecondFactors": "c6b5db92b257", - "admin.resetSecondFactorsConfirm": "c1de2149ac72", - "admin.secondFactorsResetSuccess": "641e11816986", - "admin.secondFactorsResetFailed": "8adf5836a5fb", - "admin.passwordLoginForced": "27c0adc963bd", - "admin.sslNotRenewed": "e154eeaba770", - "admin.sslSelfSigned": "0f284cf005cb", - "admin.sslRenewedBy": "d9e66c31c489", - "admin.sslIssuer": "c7d31b1a27bc", - "admin.sslNames": "f7e7c72d4d4d", - "admin.sslManualTitle": "4c1ebdccd7a7", - "admin.updateExternalAutoProvisionFailed": "86e7137f42fe", - "admin.hostTags": "0a41bf33315d", - "admin.hostTagsDesc": "1b26b73ac9ea", - "admin.hostTagsError": "edb4bd65d6c4", - "admin.revokeAllSessionsConfirm": "001db679dafc", - "admin.revokeSessionConfirm": "c55fd56c34e3", - "admin.revokeSession": "dc1649a16c14", - "admin.deleteRoleConfirm": "36cd9c1211e0", - "admin.revokeKeyConfirm": "3570cd627bcb", - "admin.revokeKey": "0be720759ff0", - "newUi.sidebar.quickConnect.where": "525f61b67292", - "newUi.sidebar.quickConnect.who": "7d531617dd39", - "newUi.sidebar.quickConnect.hostLabel": "3960ec4ca5fb", - "newUi.sidebar.quickConnect.hostPlaceholder": "c210fe3c65ac", - "newUi.sidebar.quickConnect.portLabel": "fe035157cda2", "newUi.sidebar.quickConnect.usernameLabel": "84c29015de33", - "newUi.sidebar.quickConnect.usernamePlaceholder": "249ba3600002", - "newUi.sidebar.quickConnect.authLabel": "35d0f5fbca4b", - "newUi.sidebar.quickConnect.passwordLabel": "8be3c943b160", - "newUi.sidebar.quickConnect.passwordPlaceholder": "5baa61e4c9b9", - "newUi.sidebar.quickConnect.privateKeyLabel": "ade5ddaf2557", - "newUi.sidebar.quickConnect.privateKeyPlaceholder": "052f4732d2d7", - "newUi.sidebar.quickConnect.credentialLabel": "8bede3eae88d", - "newUi.sidebar.quickConnect.credentialPlaceholder": "62ced91091d1", - "newUi.sidebar.quickConnect.protocolLabel": "1ed77c3f7ffc", - "newUi.sidebar.quickConnect.domainLabel": "9b10914d8b0a", - "newUi.sidebar.quickConnect.domainPlaceholder": "48a7b8889e15", - "newUi.sidebar.quickConnect.connectToAction": "0b963ad29aaa", - "newUi.sidebar.quickConnect.sshProtocol": "839226786b62", - "newUi.sidebar.quickConnect.noTarget": "5533f6b9605b", - "newUi.sidebar.keybindings.description": "c8c3d76965d6", - "newUi.sidebar.keybindings.defaultsHeading": "f2e825a523e3", - "newUi.sidebar.keybindings.fixedHeading": "0021b8a1f2f0", - "newUi.sidebar.keybindings.fixed.splitRight": "a8dc745cc04e", - "newUi.sidebar.keybindings.fixed.splitDown": "7eef505bfb26", - "newUi.sidebar.keybindings.fixed.zoomPane": "4e017b004f12", - "newUi.sidebar.keybindings.fixed.navigatePane": "7e440b331918", - "newUi.sidebar.keybindings.fixed.nextTab": "84c508a2e8de", - "newUi.sidebar.keybindings.fixed.previousTab": "75dd51095a88", - "newUi.sidebar.keybindings.fixed.jumpTab": "21a9bd681dd8", - "newUi.sidebar.keybindings.fixed.previousView": "17da504aa219", - "newUi.sidebar.keybindings.fixed.fullscreen": "751fc48b0655", - "newUi.sidebar.keybindings.customHeading": "6f300ac40b87", - "newUi.sidebar.keybindings.addBinding": "4ae23d8ab201", - "newUi.sidebar.keybindings.addBindingTitle": "4ae23d8ab201", - "newUi.sidebar.keybindings.editBindingTitle": "87b7db78eedd", - "newUi.sidebar.keybindings.loading": "b04ba49f8486", - "newUi.sidebar.keybindings.noCustomBindings": "39a1cc2eb605", - "newUi.sidebar.keybindings.defaultBadge": "808d7dca8a74", - "newUi.sidebar.keybindings.customizedBadge": "78cdab3abf9d", - "newUi.sidebar.keybindings.customize": "239dce622324", - "newUi.sidebar.keybindings.resetToDefault": "39c90eb758c5", - "newUi.sidebar.keybindings.resetAllToDefaults": "517991967ca9", - "newUi.sidebar.keybindings.cancel": "77dfd2135f4d", - "newUi.sidebar.keybindings.saveBinding": "9fa057151487", - "newUi.sidebar.keybindings.saveError": "a448aaffc008", - "newUi.sidebar.keybindings.pressKeysToRecord": "cc1f2fd45339", - "newUi.sidebar.keybindings.pressKeysPlaceholder": "309aabc9288b", - "newUi.sidebar.keybindings.recording": "80b97fbea7b1", - "newUi.sidebar.keybindings.comboRequiredError": "8ae5b557e76d", - "newUi.sidebar.keybindings.conflictWarning": "5dd94aaddbfa", - "newUi.sidebar.keybindings.actionLabel": "97c89a4d6630", "newUi.sidebar.keybindings.actionNextTab": "e14d4f8a1810", "newUi.sidebar.keybindings.actionPreviousTab": "79a5bdbd910a", "newUi.sidebar.keybindings.actionOpenCommandPalette": "1097c4484696", "newUi.sidebar.keybindings.actionReconnectSession": "91c8499dbb05", - "newUi.sidebar.keybindings.unavailableAction": "9070f64d814e", - "newUi.sidebar.keybindings.actionRequiredError": "a88ae4610fb9", - "newUi.sidebar.keybindings.deleteConfirm": "0d2af5d032e0", - "newUi.sidebar.keybindings.resetAllConfirm": "423c6025fe38", - "newUi.sidebar.userProfile.storageModeLocal": "54a2cf5e634d", - "newUi.sidebar.userProfile.storageModeCloud": "61074f1c958d", - "newUi.sidebar.userProfile.storageModeDescription": "e9b9081177fc", - "newUi.sidebar.userProfile.resetToDefaults": "299ef4aaf33b", - "newUi.sidebar.userProfile.resetToDefaultsSuccess": "5833c9206872", - "newUi.sidebar.userProfile.storageModeSwitch": "4509fa79442a", - "newUi.sidebar.userProfile.sectionAccount": "85dfa32c97d8", - "newUi.sidebar.userProfile.desktopProfileTitle": "8d317af82964", - "newUi.sidebar.userProfile.desktopProfileDescription": "3f42ab0d2155", - "newUi.sidebar.userProfile.sectionInterface": "7b4db7ef1fa2", - "newUi.sidebar.userProfile.interfacePresetDesc": "db9ca5a4ab2b", "newUi.sidebar.userProfile.preset_simple": "de72ea9e60d3", "newUi.sidebar.userProfile.preset_simple_desc": "eb393807bc43", "newUi.sidebar.userProfile.preset_balanced": "03342dbb856b", "newUi.sidebar.userProfile.preset_balanced_desc": "e0125e2a98d1", "newUi.sidebar.userProfile.preset_advanced": "4d064726954a", "newUi.sidebar.userProfile.preset_advanced_desc": "db40150f50ff", - "newUi.sidebar.userProfile.presetClearOverrides": "a21b0fec0731", - "newUi.sidebar.userProfile.presetOverridesTitle": "78cdab3abf9d", - "newUi.sidebar.userProfile.presetRevertArea": "272607a7bd01", - "newUi.sidebar.userProfile.presetConfirmTitle": "211722da657e", - "newUi.sidebar.userProfile.presetConfirmDesc": "809fe71a031a", - "newUi.sidebar.userProfile.presetConfirmApply": "e095aab25700", - "newUi.sidebar.userProfile.runSetupAgainDesc": "a6fd5400fc0a", - "newUi.sidebar.userProfile.runSetupAgainButton": "4fb40a9c2617", "newUi.sidebar.userProfile.uiArea_chrome": "f8cdca1bbaf6", "newUi.sidebar.userProfile.uiArea_hostList": "62b1d2ae2ae7", "newUi.sidebar.userProfile.uiArea_credentialList": "aa668ea63a8f", @@ -1523,125 +1016,13 @@ "newUi.sidebar.userProfile.uiArea_terminal": "a1f52cdcb3f2", "newUi.sidebar.userProfile.uiArea_fileManager": "8914e546b593", "newUi.sidebar.userProfile.uiArea_hostEditor": "5a1fd79e819e", - "newUi.sidebar.userProfile.sectionAppearance": "41def7a0febe", - "newUi.sidebar.userProfile.sectionSecurity": "f25ce1b8a399", - "newUi.sidebar.userProfile.sectionApiKeys": "e18ffc8d675b", - "newUi.sidebar.userProfile.sectionData": "e5e429bcc9c2", - "newUi.sidebar.userProfile.usernameLabel": "84c29015de33", - "newUi.sidebar.userProfile.roleLabel": "c3f104d13657", - "newUi.sidebar.userProfile.roleAdministrator": "1eda23758be9", - "newUi.sidebar.userProfile.authMethodLabel": "3d42f8771acd", - "newUi.sidebar.userProfile.authMethodLocal": "dc99d54d9990", - "newUi.sidebar.userProfile.twoFaLabel": "e8442a3a9ebf", - "newUi.sidebar.userProfile.twoFaOn": "e0049a66519c", - "newUi.sidebar.userProfile.twoFaOff": "e3de5ab0ca4c", - "newUi.sidebar.userProfile.versionLabel": "2da600bf9404", - "newUi.sidebar.userProfile.cliTitle": "5fb9bd428955", - "newUi.sidebar.userProfile.cliDescription": "f675b1eb07ae", - "newUi.sidebar.userProfile.cliLearnMore": "378cbbf54cbb", - "newUi.sidebar.userProfile.deleteAccount": "ee1b9a9f2347", - "newUi.sidebar.userProfile.deleteAccountDescription": "00bb96a37c75", - "newUi.sidebar.userProfile.deleteButton": "f6fdbe48dc54", - "newUi.sidebar.userProfile.deleteAccountPermanent": "19b555c90c15", - "newUi.sidebar.userProfile.deleteAccountWarning": "7e95b00a12bc", - "newUi.sidebar.userProfile.confirmPasswordDeletePlaceholder": "f08a0268f912", "newUi.sidebar.userProfile.languageLabel": "89b86ab0e66f", "newUi.sidebar.userProfile.themeLabel": "a797e30923ac", "newUi.sidebar.userProfile.fontSizeLabel": "b456f452a115", "newUi.sidebar.userProfile.interfaceFontLabel": "7f587ba745fd", "newUi.sidebar.userProfile.interfaceFontDescription": "8bfbcb4bfa23", "newUi.sidebar.userProfile.accentColorLabel": "2bef525f9fb9", - "newUi.sidebar.userProfile.keyboardShortcuts": "b465751c05fb", - "newUi.sidebar.userProfile.keyboardShortcutsDescription": "adc425e81d4a", - "newUi.sidebar.userProfile.manageShortcuts": "bf58d17e561b", - "newUi.sidebar.userProfile.commandPalette": "5843727a5928", - "newUi.sidebar.userProfile.commandPaletteDesc": "ff1ca22acbe3", - "newUi.sidebar.userProfile.reopenTabsOnLogin": "01e201536bd8", - "newUi.sidebar.userProfile.reopenTabsOnLoginDesc": "8325d39069ff", - "newUi.sidebar.userProfile.confirmTabClose": "afe888ecde4c", - "newUi.sidebar.userProfile.confirmTabCloseDesc": "c7f9d24163fc", - "newUi.sidebar.userProfile.showTabNumbers": "a951e5f695b5", - "newUi.sidebar.userProfile.showTabNumbersDesc": "19a92f48b4b5", - "newUi.sidebar.userProfile.settingsAppRail": "5451a755bf2b", - "newUi.sidebar.userProfile.sidebarSettingsMoved": "7fe607efd9e1", - "newUi.sidebar.userProfile.showHostTags": "aece9cf894f6", - "newUi.sidebar.userProfile.showHostTagsDesc": "708eab85e44f", - "newUi.sidebar.userProfile.statusColors": "40e2707eacdd", - "newUi.sidebar.userProfile.statusColorsDesc": "a3c8f000be6c", - "newUi.sidebar.userProfile.pinAppRail": "896dfe24e316", - "newUi.sidebar.userProfile.pinAppRailDesc": "a4d0991b406d", - "newUi.sidebar.userProfile.expandAppRailOnHover": "228e9335ce0c", - "newUi.sidebar.userProfile.expandAppRailOnHoverDesc": "28bb0786dd5e", - "newUi.sidebar.userProfile.appRailHoverPushesContent": "9952dbb9ef41", - "newUi.sidebar.userProfile.appRailHoverPushesContentDesc": "1809fa430fde", - "newUi.sidebar.userProfile.showPinAppRailButton": "87668cbd4e95", - "newUi.sidebar.userProfile.showPinAppRailButtonDesc": "46591231864b", - "newUi.sidebar.userProfile.settingsNavigation": "cf03cf2e9cdf", - "newUi.sidebar.userProfile.navigationTabsDesc": "0c9f38298a13", - "newUi.sidebar.userProfile.settingsUpdates": "c76d18079a07", - "newUi.sidebar.userProfile.disableUpdateChecks": "8956265edb55", - "newUi.sidebar.userProfile.disableUpdateChecksDesc": "46ac5bb45431", - "newUi.sidebar.userProfile.changePassword": "49289db43e66", - "newUi.sidebar.userProfile.currentPasswordLabel": "4d5967896006", - "newUi.sidebar.userProfile.currentPasswordPlaceholder": "19dff4dad0a7", - "newUi.sidebar.userProfile.newPasswordLabel": "4894cb39ee41", - "newUi.sidebar.userProfile.newPasswordPlaceholder": "d850ee188c7c", - "newUi.sidebar.userProfile.confirmPasswordLabel": "68dcd71ce6ba", - "newUi.sidebar.userProfile.confirmPasswordPlaceholder": "f85039fd8e49", - "newUi.sidebar.userProfile.updatePassword": "61dcf34e7092", - "newUi.sidebar.userProfile.createApiKeyTitle": "b68d55deeb07", - "newUi.sidebar.userProfile.createApiKeyDescription": "0ff02a46555f", - "newUi.sidebar.userProfile.apiKeyNameLabel": "709a23220f2c", - "newUi.sidebar.userProfile.apiKeyNamePlaceholder": "612cb356d769", - "newUi.sidebar.userProfile.expiryDateLabel": "8d007050838a", - "newUi.sidebar.userProfile.optional": "48a7b8889e15", - "newUi.sidebar.userProfile.cancel": "77dfd2135f4d", - "newUi.sidebar.userProfile.createKey": "06dca185711e", - "newUi.sidebar.userProfile.apiKeyCreatedWarning": "633604265b0b", - "newUi.sidebar.userProfile.copyApiKey": "0c1a43787e11", - "newUi.sidebar.userProfile.copiedToClipboard": "0e7383487387", "newUi.sidebar.userProfile.apiKeyCount": "ad1ddfee8beb", - "newUi.sidebar.userProfile.newKey": "128dc1e73e0d", - "newUi.sidebar.userProfile.noApiKeys": "2923b77f9188", - "newUi.sidebar.userProfile.apiKeyActive": "a733b809d2f1", - "newUi.sidebar.userProfile.apiKeyUsageHint": "c6954402f78e", - "newUi.sidebar.userProfile.apiKeyUsageHintHeader": "c22bbb610619", - "newUi.sidebar.userProfile.apiKeyPermissionsHint": "d1192094f6b9", - "newUi.sidebar.userProfile.exportData": "609211e83fd7", - "newUi.sidebar.userProfile.exportDataDesc": "b0be8f8f4130", - "newUi.sidebar.userProfile.export": "f3e4fadb9e37", - "newUi.sidebar.userProfile.exporting": "d16aded01f80", - "newUi.sidebar.userProfile.importData": "5efa4de24aa3", - "newUi.sidebar.userProfile.importDataDesc": "10ec3246a639", - "newUi.sidebar.userProfile.importDataSelected": "4a543b4a077b", - "newUi.sidebar.userProfile.selectFile": "5c0c87ff4242", - "newUi.sidebar.userProfile.changeFile": "64fbd995d3b6", - "newUi.sidebar.userProfile.import": "d6fbc9d2bdd5", - "newUi.sidebar.userProfile.importing": "b7353a71e042", - "newUi.sidebar.userProfile.exportSuccess": "ece96190314f", - "newUi.sidebar.userProfile.exportFailed": "4520e9c8e728", - "newUi.sidebar.userProfile.importSelectFile": "2a2f31ba0a71", - "newUi.sidebar.userProfile.importCompleted": "45783a937627", - "newUi.sidebar.userProfile.importFailed": "e13a1393cbaf", - "newUi.sidebar.userProfile.roleUser": "9f8a2389a20c", - "newUi.sidebar.userProfile.authMethodDual": "50b1880519ec", - "newUi.sidebar.userProfile.authMethodExternal": "8d10c693b773", - "newUi.sidebar.userProfile.done": "e9b450d14bc2", - "newUi.sidebar.userProfile.apiKeyNameRequired": "c5ce86ba437f", - "newUi.sidebar.userProfile.apiKeyCreated": "a03548c19b9e", - "newUi.sidebar.userProfile.apiKeyCreateFailed": "5e78089eaca9", - "newUi.sidebar.userProfile.apiKeyUser": "9f8a2389a20c", - "newUi.sidebar.userProfile.apiKeyExpires": "a99be3da0c9d", - "newUi.sidebar.userProfile.apiKeyRevoked": "67df56a9d08e", - "newUi.sidebar.userProfile.apiKeyRevokeFailed": "db3a5f4081b1", - "newUi.sidebar.userProfile.passwordFieldsRequired": "d5c2d3f81e3d", - "newUi.sidebar.userProfile.passwordMismatch": "d69c3b1ac54b", - "newUi.sidebar.userProfile.passwordTooShort": "c017527b229f", - "newUi.sidebar.userProfile.passwordUpdated": "6170b108ed85", - "newUi.sidebar.userProfile.passwordUpdateFailed": "7833048c6129", - "newUi.sidebar.userProfile.deletePasswordRequired": "637b2e1ef1ee", - "newUi.sidebar.userProfile.deleteFailed": "fce7f388a2d7", - "newUi.sidebar.userProfile.deleting": "e16cac651b17", "newUi.sidebar.userProfile.colorPickerTooltip": "402f95aeba34", "newUi.sidebar.userProfile.themeSystem": "bc0792d8dc81", "newUi.sidebar.userProfile.themeLight": "a36ef8aba229", @@ -1653,17 +1034,6 @@ "newUi.sidebar.userProfile.themeTokyoNight": "d9130c11b4aa", "newUi.sidebar.userProfile.themeOneDark": "98242ce22841", "newUi.sidebar.userProfile.themeGruvbox": "7d09b28faa00", - "newUi.sidebar.userProfile.linkedProfileTitle": "bf19e56b5ba3", - "newUi.sidebar.userProfile.linkedProfileDescription": "f5fd6a66cd35", - "newUi.sidebar.userProfile.manageSync": "2f1b7b8f9655", - "newUi.sidebar.userProfile.setUpSync": "3ac39c8e77e2", - "newUi.sidebar.userProfile.settingsTabsAndShortcuts": "3e077f933ca7", - "newUi.sidebar.userProfile.onBetaTitle": "88214689e396", - "newUi.sidebar.userProfile.onBetaDescription": "abdd292c42f4", - "newUi.sidebar.userProfile.tryBetaTitle": "766d11323018", - "newUi.sidebar.userProfile.tryBetaDescription": "a9307da04cbd", - "newUi.sidebar.userProfile.sendBetaFeedback": "41c219930a54", - "newUi.sidebar.userProfile.openUpdates": "c76d18079a07", "plugins.capabilities.credentials:read.title": "d2339bb71ae9", "plugins.capabilities.credentials:read.consequence": "706398198e4f", "plugins.capabilities.ssh:connect.title": "bcefe248563e", @@ -1815,7 +1185,6 @@ "plugins.manager.errors.missingDependencies": "3dc68e4fd1bd", "plugins.manager.errors.consentChanged": "f19dd16f275a", "plugins.manager.errors.upload": "485ecb494a75", - "plugins.manager.errors.developerMode": "876974ebb146", "plugins.manager.data.title": "c82ab98db74e", "plugins.manager.data.delete": "cfbcfa19afaf", "plugins.manager.data.loadFailed": "f3385ba498bf", @@ -1925,13 +1294,7 @@ "plugins.manager.managedByServer": "a316d0e73b59", "plugins.manager.browsePlugins": "47f0c9fabcc5", "plugins.manager.loading": "8f26c6520d61", - "plugins.manager.developer.title": "6bf91b20d654", - "plugins.manager.developer.hint": "6703cc742b9e", - "plugins.manager.developer.enableTitle": "687777c8d283", - "plugins.manager.developer.enableBody": "5a0ad5d7b0b1", - "plugins.manager.developer.enable": "26563efc2a04", "plugins.manager.developer.installFromFile": "98a3d702a4cf", - "plugins.manager.developer.signedOnly": "c77cc6700613", "plugins.manager.count.downloads": "1f0ddccbcd84", "plugins.manager.count.downloadsHint": "3282a2be25c0", "plugins.manager.unverified": "eb27a190c073", @@ -1960,143 +1323,15 @@ "settings.secretSet": "448ab73ba1c2", "settings.secretNotSet": "93039e609d94", "settings.secretReplace": "a7cf7b25a703", - "settings.pluginSettingsSaved": "aef97bb06af4", - "settings.pluginSettingsInvalid": "6b371e2e69b2", - "settings.pluginSettingsSaveFailed": "b3cc6cc8bb3e", - "settings.pluginSettingsLoadFailed": "2b016097e026", "settings.featureUnavailable": "35366ff6e7ac", - "settings.account": "85dfa32c97d8", - "settings.security": "f25ce1b8a399", - "settings.apiKeys": "94fcf3c2dc0d", - "settings.data": "6d269f455dc9", - "settings.interface": "7b4db7ef1fa2", - "settings.appearance": "41def7a0febe", - "settings.keybindings": "2cc8ec97bf02", - "settings.adminGeneral": "9239ee2cda84", - "settings.adminUsers": "57f2b181d0a5", - "settings.adminSessions": "e11e37a9253b", - "settings.adminRoles": "47dcc27d6e87", - "settings.adminHostDefaults": "5226e227b450", - "settings.adminBranding": "d17dc3843de8", - "settings.adminDatabase": "61074f1c958d", - "settings.adminSsl": "78bb8826fcc2", - "settings.adminApiKeys": "94fcf3c2dc0d", - "settings.adminAuditLog": "3cfc5f1cc987", - "settings.bandYou": "4ab291020939", - "settings.bandApp": "c078223b5c36", - "settings.bandPlugins": "ab2e26dd8b88", - "settings.bandInstance": "d75b2349294e", - "settings.searchPlaceholder": "9a6f37a7bf9c", - "settings.noResults": "a8d9de4d8084", - "settings.pages": "600584c2d5cc", - "settings.instanceSettings": "28af3cc7375d", - "settings.nothingHere": "636407238242", - "settings.searchPage": "93dcfb0cdbd4", - "settings.noPageMatches": "0948c24bd00d", - "settings.updates.title": "c76d18079a07", - "settings.updates.betaProgram": "7b4f2a8f8860", - "settings.updates.betaIntro": "778044338a8e", - "settings.updates.termixBetas": "f6df52163e39", - "settings.updates.termixBetasHint": "8b25cf7216f4", - "settings.updates.runningBetaBuild": "0b806f76948e", - "settings.updates.howToInstall": "ae9075ee36b8", - "settings.updates.desktopInstall": "5be3cbb01893", - "settings.updates.downloadBeta": "4615feac03ed", - "settings.updates.dockerInstall": "d5c1fbf55889", - "settings.updates.copy": "af74f7c5362a", - "settings.updates.copied": "8e3df45a49db", - "settings.updates.copyFailed": "4dfbe46077fc", - "settings.updates.learnMore": "c46535b8bb39", - "settings.updates.feedback": "c8d7677e1949", - "settings.updates.feedbackHint": "24cb1414dbe4", - "settings.updates.sendFeedback": "41c219930a54", - "settings.updates.releases": "8fa41d59c259", - "settings.updates.thisVersion": "78651b403608", - "settings.updates.newestStable": "c7afc1ece05b", - "settings.updates.newestBeta": "e71a3d9241b3", - "settings.updates.noRelease": "f265ab5764ca", - "settings.updates.pluginBetas": "56ff09b039d0", - "settings.updates.pluginBetasIntro": "d848b1f4d596", - "settings.updates.openPlugins": "2e86ed994ecd", - "settings.updates.waitingForStable": "ec7c8e376620", - "settings.updates.backToStable": "10fb7c0fef33", - "settings.updates.allPluginsBeta": "5f4aadecc84a", - "settings.updates.allPluginsStable": "263d393bcd09", - "settings.updates.saveFailed": "33e8832e7c8a", "managerCard.refresh": "56e3badc4e6c", "managerCard.retry": "9f5cd8a2e880", "managerCard.sudoHint": "1d2fada3a59c", "managerCard.noData": "d802d232a85b", "managerCard.filter": "ac3231045a93", - "sync.server": "938371f0ee7f", - "sync.account": "85dfa32c97d8", - "sync.status": "bae7d5be7082", - "sync.never": "85777c03b725", - "sync.justNow": "a7f8e7cc0d43", "sync.minutesAgo": "7d2faeb5cd9b", "sync.hoursAgo": "af59e9ea6e0a", - "sync.actionFailed": "fa9c0cf87f18", - "sync.unlinkedTitle": "8d317af82964", - "sync.unlinkedBody": "ee9cad9e57f6", - "sync.unlinkedPointHosts": "f0923fc387ca", - "sync.unlinkedPointOffline": "b6bf6807c22d", - "sync.unlinkedPointAccount": "75d7f6ef6c9a", - "sync.linkButton": "3ac39c8e77e2", - "sync.state.syncing": "4ae6fa22bc99", - "sync.state.offline": "aaec782537df", - "sync.state.error": "389a634baae5", - "sync.state.signedOut": "1b8337c8ac42", - "sync.state.synced": "887db97a2ab6", "sync.pending": "7cec7988c39d", - "sync.signInAgain": "7842ff560609", - "sync.syncNow": "2b7d938e6787", - "sync.unlink": "0dc2913c6ee9", - "sync.unlinked": "fc360eef225a", - "sync.unlinkTitle": "c4a679bf83e0", - "sync.unlinkDescription": "d19091d1caf2", - "sync.unlinkKeepTitle": "9b674dec15ec", - "sync.unlinkKeepBody": "bfbd3524930d", - "sync.unlinkRemoveTitle": "771f1d637f00", - "sync.unlinkRemoveBody": "f68e336a3262", - "sync.conflictsTitle": "1e6b4f9a091e", - "sync.conflictsDescription": "fff179507dda", - "sync.keepMine": "213e4075842a", - "sync.keepServer": "9b6cfc1c2e1f", - "sync.errorsTitle": "4c205136560d", - "sync.errorsDescription": "9b563e6bdc67", - "sync.errorPermission": "ef3936f35fc9", - "sync.retry": "042c862e4467", - "sync.whatSyncs": "2a52ac56e18e", - "sync.whatSyncsDescription": "769a6dc813de", - "sync.coreGroup": "dcd052c8f982", - "sync.notOnServer": "ea37efa664ff", - "sync.notOnDevice": "b947d23163c8", - "sync.localOnlyHint": "2656a2de19b7", - "sync.originTitle": "1c3a1e06c800", - "sync.originDescription": "7b10359bcac8", - "sync.originLocal": "fa5a6dd9d249", - "sync.originRemote": "c13527ef1965", - "sync.entities.hosts": "53103abbf692", - "sync.entities.sshCredentials": "dd097a229701", - "sync.entities.sshFolders": "19adc47be34b", - "sync.entities.userPreferences": "9dfd349ebee5", - "sync.entities.pluginUserSettings": "d7eea83b0fa6", - "sync.entities.sharedHosts": "71f786379c4e", - "sync.entities.sharedCredentials": "ffe3fb9387fc", - "sync.entities.vaultProfiles": "b3e202571f4e", - "sync.entities.snippetFolders": "806f985a73a1", - "sync.entities.snippets": "ae05fb5b1e39", - "sync.entities.dashboardServiceLinks": "c3da091f892c", - "sync.entities.homepageItems": "497ed337d7f7", - "sync.entities.networkTopology": "a16ce3d52e6e", - "sync.entities.workspaces": "205b4561ed36", - "sync.entities.hostDefaults": "5226e227b450", - "sync.entities.hostDefaultsAdmin": "1d59702ddc37", - "sync.entities.aiProviders": "897a9f91733c", - "sync.entities.homepageLayouts": "b742c800b285", - "sync.entities.accountProfile": "50abcef6ad21", - "sync.proxy.title": "0f84a78a9069", - "sync.proxy.description": "dfb758117006", "sync.proxy.headersTitle": "229b31053a90", "sync.proxy.headersHint": "fd22e57e49df", "sync.proxy.headerName": "b46f85a9b7d6", @@ -2110,7 +1345,6 @@ "sync.proxy.password": "8be3c943b160", "sync.proxy.allowInvalidCertificate": "9d6c2e21cb7d", "sync.proxy.allowInvalidCertificateHint": "6590101b1e9a", - "sync.proxy.saved": "c0ae8f6ea841", "sync.problems.invalidUrl": "8c467ed1d9b7", "sync.problems.unreachable": "1a611ed452e7", "sync.problems.unreachableWithReason": "13157237e7a1", @@ -2151,28 +1385,9 @@ "hostDefaults.resetTitle": "ff733963467b", "hostDefaults.clearTitle": "f11cd33aa6b9", "hostDefaults.inheritedTitle": "505a59f206d6", - "hostDefaults.titleAdmin": "1d59702ddc37", - "hostDefaults.titleUser": "d39c602d890e", - "hostDefaults.titleFolder": "47a9a15c84f1", - "hostDefaults.descriptionAdmin": "896077372234", - "hostDefaults.descriptionUser": "6f0457d7547b", - "hostDefaults.descriptionFolder": "d2b230d4e600", - "hostDefaults.save": "90df04c57d11", "hostDefaults.saved": "9bd07c9bab7c", - "hostDefaults.savedInBackground": "39cf1609c84a", "hostDefaults.appliedToHosts": "ed8b557c45b2", - "hostDefaults.saveFailed": "a26d02bc0930", - "hostDefaults.loadFailed": "ae7fdb7c4222", - "hostDefaults.confirmTitle": "41515690811a", "hostDefaults.confirmChanges": "11972279d5ca", - "hostDefaults.confirmNoChanges": "f08c7c04a0ec", - "hostDefaults.menuMyDefaults": "d39c602d890e", - "hostDefaults.folderDefaultsAction": "052fba84d32f", - "hostDefaults.adminSectionDescription": "32bca1d07870", - "hostDefaults.editServerDefaults": "bc9542395285", - "hostDefaults.resetMenu": "44c57abd888a", - "hostDefaults.resetAll": "b6a1d0f0a817", - "hostDefaults.resetCore": "5cbd7dc04882", "hostDefaults.resetDone": "dfe62c1ec991", "panel.clearSearch": "67300d0fed7c", "panel.gridView": "701c483f813c", @@ -2180,41 +1395,28 @@ "panel.compactRows": "b17f552f3b98", "panel.comfortableRows": "4c5b39191ead", "fields.secretSaved": "81d793988e7a", - "sharing.revokeConfirm": "90f3d8b9560a", - "sharing.revoke": "a13a9514ccdc", - "manage.searchSettings": "9a6f37a7bf9c", - "manage.noMatchingSettings": "a8d9de4d8084", - "manage.sections": "7ff5a6dafd80", - "manage.sectionNeedsAttention": "596b4e24bd30", "manage.needsAttention": "75674c819d3e", - "manage.bandHost": "3960ec4ca5fb", - "manage.bandFeatures": "7d2fc674d02f", - "manage.bandCredential": "8bede3eae88d", - "manage.sshConnection": "84bcce7f86e3", - "manage.errorAddressRequired": "14e84bda2c6e", - "manage.errorPortRange": "2c49ad5f6332", - "manage.defaults": "428819bf9e83", - "manage.searchHosts": "04b67ee09bd2", - "manage.searchCredentials": "1bbe998b3e26", - "manage.searchDefaults": "46d64eceb7a1", - "manage.addCredential": "69cfb687ff69", - "manage.nothingMatches": "17e7aebf9715", - "manage.nothingYet": "e892255d168b", - "manage.emptyHostsHint": "a0e701ba6d64", - "manage.emptyCredentialsHint": "3bc280dfa8e6", - "manage.collapse": "9cf188d3a677", - "manage.expand": "9869e506c38f", - "manage.cannotBeUndone": "ad25261d32e5", - "manage.hostNotFound": "ca7f10b846b7", "manage.hostCount": "4279c8d92ede", "manage.credentialCount": "fd38fd5772a6", - "manage.newHost": "3e324c4f8929", - "manage.newCredential": "65b2a9b18c5a", - "manage.advanced": "4d064726954a", - "manage.pickHost": "6f37a8818271", - "manage.pickCredential": "174509bcc2c5", - "manage.pickDefaults": "13b4c82008f3", - "manage.pickHint": "1f5b76685f45", "rbac.roles.admin": "4e7afebcfbae", - "rbac.roles.user": "9f8a2389a20c" + "rbac.roles.user": "9f8a2389a20c", + "sync.entities.hosts": "53103abbf692", + "sync.entities.sshCredentials": "dd097a229701", + "sync.entities.sshFolders": "19adc47be34b", + "sync.entities.userPreferences": "9dfd349ebee5", + "sync.entities.pluginUserSettings": "d7eea83b0fa6", + "sync.entities.sharedHosts": "71f786379c4e", + "sync.entities.sharedCredentials": "ffe3fb9387fc", + "sync.entities.vaultProfiles": "b3e202571f4e", + "sync.entities.snippetFolders": "806f985a73a1", + "sync.entities.snippets": "ae05fb5b1e39", + "sync.entities.dashboardServiceLinks": "c3da091f892c", + "sync.entities.homepageItems": "497ed337d7f7", + "sync.entities.networkTopology": "a16ce3d52e6e", + "sync.entities.workspaces": "205b4561ed36", + "sync.entities.hostDefaults": "5226e227b450", + "sync.entities.hostDefaultsAdmin": "1d59702ddc37", + "sync.entities.aiProviders": "897a9f91733c", + "sync.entities.homepageLayouts": "b742c800b285", + "sync.entities.accountProfile": "50abcef6ad21" } diff --git a/src/ui/settings/appearance/LookSettings.tsx b/src/ui/look/LookSettings.tsx similarity index 100% rename from src/ui/settings/appearance/LookSettings.tsx rename to src/ui/look/LookSettings.tsx diff --git a/src/ui/look/RepairView.tsx b/src/ui/look/RepairView.tsx index 6379aa59a..72cbfc70d 100644 --- a/src/ui/look/RepairView.tsx +++ b/src/ui/look/RepairView.tsx @@ -2,16 +2,15 @@ import { useState } from "react"; import { useTranslation } from "react-i18next"; import { toast } from "sonner"; import { - ArrowLeft, Check, Copy, Download, LayoutTemplate, Palette, + History, Power, RefreshCw, RotateCcw, - Settings, TriangleAlert, } from "lucide-react"; import { Button } from "@/components/button"; @@ -23,11 +22,8 @@ import { PluginConsentPrompt } from "@/plugins/PluginConsentPrompt"; import { usePluginsManager } from "@/plugins/use-plugins-manager"; import { PluginIconBox } from "@/plugins/plugin-bits"; import { getPluginRecord } from "@/plugin-host/plugin-store"; -import { - ShellConfirmCapture, - useShellController, -} from "@/shell/controller/ShellControllerProvider"; -import { TabStage } from "@/shell/stage/TabStage"; +import { restoreBundledPlugin } from "@/api/plugins-api"; +import { ShellConfirmCapture } from "@/shell/controller/ShellControllerProvider"; import { chooseDefaultLook, chooseLayout, @@ -50,10 +46,12 @@ function AdminTools({ status, installOpen, setInstallOpen, + onRetry, }: { status: RepairStatus; installOpen: boolean; setInstallOpen: (open: boolean) => void; + onRetry: () => void; }) { const { t } = useTranslation(); const manager = usePluginsManager(); @@ -94,6 +92,21 @@ function AdminTools({ {t("looks.repair.disable", { name: entry.name })} )} + {entry?.installed && entry.bundled && !entry.managedByServer && ( + + )} -
- - - - -
- ); - } - const safe = status.reason === "safe-url" || status.reason === "safe-env"; return ( @@ -298,24 +287,12 @@ export function RepairView({ {t("looks.repair.resetEveryone")} )} - {isAdmin && ( )} diff --git a/src/ui/look/layout-registry.ts b/src/ui/look/layout-registry.ts index c1f4068ac..c1e44229d 100644 --- a/src/ui/look/layout-registry.ts +++ b/src/ui/look/layout-registry.ts @@ -2,13 +2,10 @@ import { useSyncExternalStore, type ComponentType } from "react"; import type { TFunction } from "i18next"; import { createRegistry } from "@/lib/registry"; -/** The layout core ships with, used when nothing else is chosen or installed. */ -export const BUILTIN_LAYOUT_ID = "default"; - /** A layout someone can choose, known from a manifest before its code loads. */ export interface LayoutDescriptor { id: string; - /** i18n key: core's for the built-in, the plugin namespace's for plugins. */ + /** i18n key in the plugin namespace, or plain text. */ label: string; description?: string; defaultTheme?: string; @@ -16,7 +13,7 @@ export interface LayoutDescriptor { pluginId?: string; } -/** A layout whose code is running, from app.registerLayout or core. */ +/** A layout whose code is running, from app.registerLayout. */ export interface RegisteredLayout { id: string; pluginId?: string; @@ -26,13 +23,7 @@ export interface RegisteredLayout { defaultTheme?: string; } -const BUILTIN_DESCRIPTOR: LayoutDescriptor = { - id: BUILTIN_LAYOUT_ID, - label: "looks.builtinLayout", -}; - -let pluginLayouts: LayoutDescriptor[] = []; -let descriptorSnapshot: LayoutDescriptor[] = [BUILTIN_DESCRIPTOR]; +let descriptorSnapshot: LayoutDescriptor[] = []; const descriptorListeners = new Set<() => void>(); const registered = createRegistry(); @@ -42,7 +33,7 @@ export const getRegisteredLayout = registered.get; export const useRegisteredLayouts = registered.useList; export const resetRegisteredLayouts = registered.reset; -/** Every layout that can be chosen: the built-in, then plugin layouts. */ +/** Every layout that can be chosen, from the installed plugins. */ export function listLayouts(): LayoutDescriptor[] { return descriptorSnapshot; } @@ -57,12 +48,8 @@ export function setPluginLayouts(layouts: LayoutDescriptor[]): void { JSON.stringify( list.map((l) => [l.id, l.pluginId, l.label, l.defaultTheme]), ); - if (key(layouts) === key(pluginLayouts)) return; - pluginLayouts = layouts; - descriptorSnapshot = [ - BUILTIN_DESCRIPTOR, - ...layouts.filter((layout) => layout.id !== BUILTIN_LAYOUT_ID), - ]; + if (key(layouts) === key(descriptorSnapshot)) return; + descriptorSnapshot = layouts; for (const listener of descriptorListeners) listener(); } @@ -78,7 +65,7 @@ export function useLayouts(): LayoutDescriptor[] { } export function layoutLabel(layout: LayoutDescriptor, t: TFunction): string { - if (!layout.pluginId) return t(layout.label); + if (!layout.pluginId) return layout.label; return t(`${layout.pluginId}:${layout.label}`, { defaultValue: layout.label, }); diff --git a/src/ui/look/resolve-look.ts b/src/ui/look/resolve-look.ts index de425447a..cb1b83746 100644 --- a/src/ui/look/resolve-look.ts +++ b/src/ui/look/resolve-look.ts @@ -1,25 +1,20 @@ import type { LookResponse } from "@/api/look-api"; -import { BUILTIN_LAYOUT_ID } from "./layout-registry"; /** The theme a fresh install starts in when nothing else says otherwise. */ export const FALLBACK_THEME = "dark"; /** * The layout to show: the user's choice, else the admin default, else the - * default look, else core's built-in. Without an answer from the server the - * last layout this browser showed stands in. + * default look. Empty when none of them names one, which the repair view + * answers. Without an answer from the server the last layout this browser + * showed stands in. */ export function resolveLayoutId( look: LookResponse | null, lastShown: string | null = null, ): string { - if (!look) return lastShown ?? BUILTIN_LAYOUT_ID; - return ( - look.layoutId ?? - look.defaults.layout ?? - look.defaultLook.layout ?? - BUILTIN_LAYOUT_ID - ); + if (!look) return lastShown ?? ""; + return look.layoutId ?? look.defaults.layout ?? look.defaultLook.layout ?? ""; } /** diff --git a/src/ui/manage/EditorPane.tsx b/src/ui/manage/EditorPane.tsx deleted file mode 100644 index ecdeb427c..000000000 --- a/src/ui/manage/EditorPane.tsx +++ /dev/null @@ -1,411 +0,0 @@ -/* eslint-disable react-refresh/only-export-components */ -import type React from "react"; -import { - createContext, - useCallback, - useContext, - useEffect, - useLayoutEffect, - useRef, - useState, - type ReactNode, - type RefObject, -} from "react"; -import { useTranslation } from "react-i18next"; -import { Search } from "lucide-react"; -import { GroupHeading, PANEL, PanelSearch } from "@/components/panel-layout"; -import { TabStrip } from "@/components/tab-strip"; -import { EmptyState } from "@/components/empty-state"; -import { HIDDEN_ATTR, useSettingsPageFilter } from "@/settings/page-filter"; -import { cn } from "@/lib/utils"; - -/** True while the editor is searched, so every lazy section mounts. */ -const SearchingContext = createContext(false); - -export interface EditorNavItem { - id: string; - label: string; - icon?: ReactNode; - /** Marks a section holding something that needs fixing. */ - error?: boolean; -} - -export interface EditorNavBand { - id: string; - label: string; - items: EditorNavItem[]; -} - -/** - * The element that really scrolls: the editor's own area, or the page around - * it when the editor is embedded somewhere that scrolls itself. - */ -function scroller(el: HTMLElement): HTMLElement { - let node: HTMLElement | null = el; - while (node) { - const overflow = getComputedStyle(node).overflowY; - if ( - (overflow === "auto" || overflow === "scroll") && - node.scrollHeight > node.clientHeight + 1 - ) { - return node; - } - node = node.parentElement; - } - return el; -} - -/** Which section is in view, and a way to jump to one. */ -export function useScrollSpy( - containerRef: RefObject, - ids: string[], -): { active: string; scrollTo: (id: string) => void } { - const [active, setActive] = useState(ids[0] ?? ""); - const idsKey = ids.join("|"); - // A jump scrolls past every section between; the spy waits it out. - const lockUntil = useRef(0); - - useEffect(() => { - const container = containerRef.current; - if (!container) return; - const onScroll = () => { - if (Date.now() < lockUntil.current) return; - const area = scroller(container); - const top = area.getBoundingClientRect().top; - let current = ids[0] ?? ""; - for (const id of ids) { - const el = container.querySelector( - `[data-section="${id}"]`, - ); - if (!el) continue; - if (el.getBoundingClientRect().top - top <= 24) current = id; - } - if ( - area.scrollHeight > area.clientHeight && - area.scrollTop + area.clientHeight >= area.scrollHeight - 8 - ) { - current = ids[ids.length - 1] ?? current; - } - setActive(current); - }; - onScroll(); - // Captured on the document so an outer scroller is heard too. - document.addEventListener("scroll", onScroll, { - passive: true, - capture: true, - }); - return () => - document.removeEventListener("scroll", onScroll, { capture: true }); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [containerRef, idsKey]); - - return { - active: ids.includes(active) ? active : (ids[0] ?? ""), - scrollTo: (id: string) => { - const container = containerRef.current; - const el = container?.querySelector( - `[data-section="${id}"]`, - ); - if (!container || !el) return; - lockUntil.current = Date.now() + 600; - setActive(id); - const area = scroller(container); - const target = () => - el.getBoundingClientRect().top - - area.getBoundingClientRect().top + - area.scrollTop - - 8; - let lastTop = target(); - let lastHeight = area.scrollHeight; - area.scrollTo?.({ top: lastTop, behavior: "smooth" }); - // Sections above can still be mounting, which moves the target or - // cuts the scroll short. Follow it until the scroll lands and the - // layout stops changing, unless the user scrolls first. - const started = Date.now(); - let changedAt = started; - let userScrolled = false; - const onUser = () => { - userScrolled = true; - }; - area.addEventListener("wheel", onUser, { passive: true }); - area.addEventListener("touchstart", onUser, { passive: true }); - const done = () => { - area.removeEventListener("wheel", onUser); - area.removeEventListener("touchstart", onUser); - }; - const follow = () => { - const now = Date.now(); - if (userScrolled || !el.isConnected || now - started > 5000) { - return done(); - } - const top = target(); - // Keep the spy quiet for the whole trip, not just the first scroll. - lockUntil.current = now + 600; - if (Math.abs(top - lastTop) > 4 || area.scrollHeight !== lastHeight) { - lastTop = top; - lastHeight = area.scrollHeight; - changedAt = now; - area.scrollTo?.({ top, behavior: "smooth" }); - } - const reachable = Math.min( - lastTop, - area.scrollHeight - area.clientHeight, - ); - if ( - Math.abs(area.scrollTop - reachable) <= 2 && - now - changedAt > 400 - ) { - setActive(id); - return done(); - } - requestAnimationFrame(follow); - }; - requestAnimationFrame(follow); - }, - }; -} - -/** Resolves once the element's height holds still for a few frames. */ -function untilLayoutSettles(el: HTMLElement | null, max = 800): Promise { - return new Promise((resolve) => { - if (!el || typeof requestAnimationFrame === "undefined") return resolve(); - const started = Date.now(); - let last = -1; - let still = 0; - const check = () => { - const height = el.scrollHeight; - still = height === last ? still + 1 : 0; - last = height; - if (still >= 3 || Date.now() - started > max) return resolve(); - requestAnimationFrame(check); - }; - requestAnimationFrame(check); - }); -} - -/** Wraps a section so the nav can find it. */ -export function EditorSection({ - id, - label, - showHeading = true, - children, -}: { - id: string; - label?: string; - showHeading?: boolean; - children: ReactNode; -}) { - return ( -
- {showHeading && label && } - {children} -
- ); -} - -/** - * Mounts its children the first time they scroll near view, so a long editor - * does not start every section's requests at once. - */ -export function LazySection({ children }: { children: ReactNode }) { - const ref = useRef(null); - const searching = useContext(SearchingContext); - const [shown, setShown] = useState( - () => typeof IntersectionObserver === "undefined", - ); - useEffect(() => { - if (searching) setShown(true); - }, [searching]); - useLayoutEffect(() => { - if (shown) return; - const el = ref.current; - if (!el) return; - const observer = new IntersectionObserver( - (entries) => { - if (entries.some((entry) => entry.isIntersecting)) { - setShown(true); - observer.disconnect(); - } - }, - { rootMargin: "400px 0px" }, - ); - observer.observe(el); - return () => observer.disconnect(); - }, [shown]); - return ( -
- {shown && children} -
- ); -} - -/** - * An editor laid out like the settings screen: a section nav beside one - * scrolling form, and the actions pinned under it. - */ -export function EditorPane({ - bands, - banner, - footer, - errorCount = 0, - revealRef, - children, - className, -}: { - bands: EditorNavBand[]; - /** Filled with a function that scrolls a section into view. */ - revealRef?: React.MutableRefObject<((id: string) => void) | null>; - /** Sits above the form, inside the scroll area. */ - banner?: ReactNode; - /** Usually Cancel and Save, pinned at the bottom. */ - footer?: ReactNode; - /** Shown beside the footer so a problem in a hidden section is not missed. */ - errorCount?: number; - children: ReactNode; - className?: string; -}) { - const { t } = useTranslation(); - const scrollRef = useRef(null); - const formRef = useRef(null); - const [query, setQuery] = useState(""); - const [hiddenIds, setHiddenIds] = useState>(new Set()); - const searching = query.trim().length > 0; - const onFiltered = useCallback((root: HTMLElement) => { - const next = new Set(); - for (const el of root.querySelectorAll( - `[data-section][${HIDDEN_ATTR}]`, - )) { - if (el.dataset.section) next.add(el.dataset.section); - } - setHiddenIds((prev) => - prev.size === next.size && [...next].every((id) => prev.has(id)) - ? prev - : next, - ); - }, []); - const anyShown = useSettingsPageFilter( - formRef, - query, - "editor", - "[data-section]", - onFiltered, - ); - const visibleBands = bands - .map((band) => ({ - ...band, - items: band.items.filter((item) => !hiddenIds.has(item.id)), - })) - .filter((band) => band.items.length > 0); - const ids = visibleBands.flatMap((band) => band.items.map((item) => item.id)); - const { active, scrollTo } = useScrollSpy(scrollRef, ids); - const showNav = bands.flatMap((band) => band.items).length > 1; - // A jump mounts every lazy section first and scrolls once the form stops - // growing. Mounting them on the way down made the scroll stall and restart. - const [mountAll, setMountAll] = useState(false); - const jump = (id: string) => { - if (mountAll) return scrollTo(id); - setMountAll(true); - void untilLayoutSettles(scrollRef.current).then(() => scrollTo(id)); - }; - if (revealRef) revealRef.current = jump; - - return ( -
- {showNav && ( - - )} - -
-
-
- -
-
- {showNav && ( -
- - band.items.map((item) => ({ id: item.id, label: item.label })), - )} - activeTab={active} - onTabChange={jump} - /> -
- )} -
- {!anyShown && ( - - )} -
- {banner} - - {children} - -
-
- {(footer || errorCount > 0) && ( -
- {errorCount > 0 && ( - - {t("manage.needsAttention", { count: errorCount })} - - )} -
{footer}
-
- )} -
-
- ); -} diff --git a/src/ui/manage/ManageList.tsx b/src/ui/manage/ManageList.tsx deleted file mode 100644 index 8c714b7e2..000000000 --- a/src/ui/manage/ManageList.tsx +++ /dev/null @@ -1,467 +0,0 @@ -import { useEffect, useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; -import { - ChevronDown, - ChevronRight, - Folder, - FolderOpen, - Globe, - KeyRound, - Plus, - Server, - SlidersHorizontal, - User, -} from "lucide-react"; -import { Button } from "@/components/button"; -import { EmptyState } from "@/components/empty-state"; -import { PanelSearch } from "@/components/panel-layout"; -import { cn } from "@/lib/utils"; -import { rem } from "@/lib/rem"; -import type { Credential, Host } from "@/types/ui-types"; -import { defaultsRows, type DefaultsRow } from "./defaults-rows"; -import { - allFolderPaths, - allParentIds, - buildCredentialManageTree, - buildHostManageTree, - flattenTree, - type ManageRow, -} from "./manage-tree"; -import type { ManageMode } from "./manage-requests"; -import { - getStatusClasses, - useStatusColorScheme, -} from "@/hooks/use-status-color-scheme"; - -function indent(depth: number) { - return 6 + depth * 13; -} - -/** Rules marking each open ancestor, so deep rows still read as nested. */ -function Guides({ depth }: { depth: number }) { - if (depth === 0) return null; - return ( - <> - {Array.from({ length: depth }, (_, i) => ( - - ))} - - ); -} - -const rowFocus = - "focus-visible:relative focus-visible:z-10 focus-visible:ring-1 focus-visible:ring-ring"; - -/** The list column of the Manage tab. */ -export function ManageList({ - editing, - mode, - onMode, - hosts, - credentials, - canEditInstanceDefaults, - isOnline, - selectedKey, - onPickHost, - onPickCredential, - onPickDefaults, - onAdd, -}: { - editing: boolean; - mode: ManageMode; - onMode: (mode: ManageMode) => void; - hosts: Host[]; - credentials: Credential[]; - canEditInstanceDefaults: boolean; - isOnline: (host: Host) => boolean; - /** "h:", "c:" or a defaults row key. */ - selectedKey: string | null; - onPickHost: (host: Host) => void; - onPickCredential: (credential: Credential) => void; - onPickDefaults: (row: DefaultsRow) => void; - onAdd: () => void; -}) { - const { t } = useTranslation(); - const [query, setQuery] = useState(""); - const needle = query.trim().toLowerCase(); - - const tree = useMemo( - () => - mode === "credentials" - ? buildCredentialManageTree(credentials) - : buildHostManageTree(hosts, isOnline), - [mode, hosts, credentials, isOnline], - ); - - // Everything starts open; closing something is remembered while mounted. - const [open, setOpen] = useState>(new Set()); - useEffect(() => { - setOpen(new Set([...allFolderPaths(tree), ...allParentIds(tree)])); - // Rebuilt only when the side changes, so toggles survive an edit. - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [mode]); - - const toggle = (key: string) => - setOpen((prev) => { - const next = new Set(prev); - if (next.has(key)) next.delete(key); - else next.add(key); - return next; - }); - - const rows = useMemo( - () => (mode === "defaults" ? [] : flattenTree(tree, open, needle)), - [mode, tree, open, needle], - ); - - const defaults = useMemo( - () => - defaultsRows(hosts, canEditInstanceDefaults, t).filter( - (row) => !needle || row.label.toLowerCase().includes(needle), - ), - [hosts, canEditInstanceDefaults, t, needle], - ); - - const pick = (id: string) => { - if (mode === "hosts") { - const host = hosts.find((h) => h.id === id); - if (host) onPickHost(host); - } else { - const credential = credentials.find((c) => c.id === id); - if (credential) onPickCredential(credential); - } - }; - - const empty = mode === "defaults" ? defaults.length === 0 : rows.length === 0; - - return ( -
- -
-
- - {mode !== "defaults" && ( - - )} -
-
- -
- {empty ? ( - - ) : mode === "defaults" ? ( - defaults.map((row) => { - const Icon = - row.level === "admin" - ? Globe - : row.level === "user" - ? User - : Folder; - const selected = selectedKey === row.key; - return ( - - ); - }) - ) : ( - rows.map((row) => - row.kind === "folder" ? ( - toggle(row.folder.path)} - /> - ) : ( - toggle(row.item.id)} - onPick={() => pick(row.item.id)} - /> - ), - ) - )} -
-
- ); -} - -function FolderRow({ - row, - open, - locked, - showOnline, - onToggle, -}: { - row: Extract; - open: boolean; - /** Search forces folders open, so the chevron stops responding. */ - locked: boolean; - showOnline: boolean; - onToggle: () => void; -}) { - const Icon = open ? FolderOpen : Folder; - return ( -
- - -
- ); -} - -function ItemRow({ - row, - isHost, - selected, - open, - locked, - onToggle, - onPick, -}: { - row: Extract; - isHost: boolean; - selected: boolean; - open: boolean; - locked: boolean; - onToggle: () => void; - onPick: () => void; -}) { - const { t } = useTranslation(); - const scheme = useStatusColorScheme(); - const nests = row.item.children.length > 0; - const Icon = isHost ? Server : KeyRound; - - return ( -
- -
-
- {nests ? ( - - ) : ( - - )} -
- - -
-
- ); -} diff --git a/src/ui/manage/ManageTab.tsx b/src/ui/manage/ManageTab.tsx deleted file mode 100644 index 16d75fdcf..000000000 --- a/src/ui/manage/ManageTab.tsx +++ /dev/null @@ -1,588 +0,0 @@ -import { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import { useTranslation } from "react-i18next"; -import { KeyRound, LibraryBig, Plus, Server, Trash2 } from "lucide-react"; -import { toast } from "sonner"; -import type { HostDraft } from "@termix-ssh/plugin-sdk/frontend"; -import { Button } from "@/components/button"; -import { EmptyState } from "@/components/empty-state"; -import { FakeSwitch } from "@/components/section-card"; -import { BackButton, PanelShell } from "@/components/panel-layout"; -import { useConfirm } from "@/components/surface/surface-scope"; -import { useUiPreference } from "@/contexts/UiPreferencesContext"; -import { usePermissions } from "@/hooks/use-permissions"; -import { useServerStatus } from "@/lib/ServerStatusContext"; -import { - deleteCredential, - deleteSSHHost, - getCredentialDetails, - getCredentials, - getSSHHosts, - type SSHHostWithStatus, -} from "@/main-axios"; -import { getFolderDefaultsId } from "@/api/host-defaults-api"; -import { invalidateHostsAndStatusCaches } from "@/lib/hosts-request-cache"; -import { registerTabCloseGuard } from "@/shell/tab-close-guards"; -import { HostEditor } from "@/sidebar/HostEditor"; -import { CredentialEditorView } from "@/sidebar/CredentialEditorView"; -import { - HostDefaultsEditorView, - hostDefaultsTitle, - type HostDefaultsEditorTarget, -} from "@/sidebar/host-defaults/HostDefaultsEditorView"; -import { mapCredentials, sshHostToHost } from "@/sidebar/HostManagerData"; -import { - hostProtocolFlags, - type HostProtocols, -} from "@/sidebar/host-protocols"; -import { canDeleteHost } from "@/sidebar/host-permissions"; -import type { Credential, Host } from "@/types/ui-types"; -import { ManageList } from "./ManageList"; -import type { DefaultsRow } from "./defaults-rows"; -import { - MANAGE_REQUEST_EVENT, - takePendingManageRequest, - type ManageMode, - type ManageRequest, -} from "./manage-requests"; -import { docsUrl } from "@/lib/docs"; - -type Editing = - | { - kind: "host"; - host: Host | null; - draft?: HostDraft; - key: number; - protocols: HostProtocols; - } - | { kind: "credential"; credential: Credential | null; key: number } - | { kind: "defaults"; target: HostDefaultsEditorTarget; rowKey: string }; - -const TAB_ID = "host-manager"; - -/** Fetches a credential with its secrets marked as stored, for the editor. */ -async function loadCredentialForEdit(cred: Credential): Promise { - try { - const full = (await getCredentialDetails(Number(cred.id))) as { - hasKey?: boolean; - hasKeyPassword?: boolean; - password?: string; - certPublicKey?: string; - }; - return { - ...cred, - value: full.hasKey ? "existing_key" : (full.password ?? ""), - password: full.password ?? "", - passphrase: full.hasKeyPassword ? "existing_key_password" : "", - publicKey: full.certPublicKey ?? cred.publicKey, - }; - } catch { - return cred; - } -} - -/** - * Hosts, credentials and host defaults, edited at full width: a list on the - * left, the thing you picked on the right. - */ -export function ManageTab() { - const { t } = useTranslation(); - const confirm = useConfirm(); - const { has } = usePermissions(); - const { statuses } = useServerStatus(); - const presetMode = useUiPreference("hostEditor", "mode"); - - const [mode, setMode] = useState("hosts"); - const [hosts, setHosts] = useState([]); - const [credentials, setCredentials] = useState([]); - const [editing, setEditing] = useState(null); - const [dirty, setDirty] = useState(false); - // Starts from the preset and stays where the user puts it this session. - const [advanced, setAdvanced] = useState(presetMode !== "simple"); - // The host a credential was opened from, so Back returns to it. - const [returnHost, setReturnHost] = useState(null); - - const hostsRef = useRef(hosts); - hostsRef.current = hosts; - const credentialsRef = useRef(credentials); - credentialsRef.current = credentials; - const dirtyRef = useRef(dirty); - dirtyRef.current = dirty; - - const reloadHosts = useCallback(() => { - return getSSHHosts() - .then((raw) => { - const list = raw.map(sshHostToHost); - hostsRef.current = list; - setHosts(list); - }) - .catch(() => {}); - }, []); - const reloadCredentials = useCallback(() => { - return getCredentials() - .then((res) => { - const list = mapCredentials(res); - credentialsRef.current = list; - setCredentials(list); - }) - .catch(() => {}); - }, []); - - const loaded = useRef>(Promise.resolve()); - - useEffect(() => { - loaded.current = Promise.all([reloadHosts(), reloadCredentials()]); - }, [reloadHosts, reloadCredentials]); - - useEffect(() => { - window.addEventListener("termix:hosts-changed", reloadHosts); - window.addEventListener("ssh-hosts:changed", reloadHosts); - window.addEventListener("hosts:refresh", reloadHosts); - window.addEventListener("termix:credentials-changed", reloadCredentials); - return () => { - window.removeEventListener("termix:hosts-changed", reloadHosts); - window.removeEventListener("ssh-hosts:changed", reloadHosts); - window.removeEventListener("hosts:refresh", reloadHosts); - window.removeEventListener( - "termix:credentials-changed", - reloadCredentials, - ); - }; - }, [reloadHosts, reloadCredentials]); - - /** Asks before throwing away unsaved changes. True means go ahead. */ - const confirmDiscard = useCallback(async () => { - if (!dirtyRef.current) return true; - return confirm({ - title: t("common.unsavedChanges"), - description: t("hosts.unsavedChangesDescription"), - confirmLabel: t("hosts.discardChanges"), - cancelLabel: t("hosts.keepEditing"), - }); - }, [confirm, t]); - - useEffect( - () => registerTabCloseGuard(TAB_ID, confirmDiscard), - [confirmDiscard], - ); - - const openHost = useCallback((host: Host | null, draft?: HostDraft) => { - setMode("hosts"); - setReturnHost(null); - setDirty(false); - setEditing({ - kind: "host", - host, - draft, - key: Date.now(), - protocols: hostProtocolFlags(host), - }); - }, []); - - const openCredential = useCallback(async (credential: Credential | null) => { - setMode("credentials"); - setDirty(false); - const full = credential ? await loadCredentialForEdit(credential) : null; - setEditing({ kind: "credential", credential: full, key: Date.now() }); - }, []); - - const openDefaults = useCallback( - async (row: Pick) => { - setMode("defaults"); - setReturnHost(null); - setDirty(false); - const rowKey = - row.level === "folder" ? `folder:${row.folderName}` : row.level; - if (row.level === "folder" && row.folderName) { - try { - const folderId = await getFolderDefaultsId(row.folderName); - setEditing({ - kind: "defaults", - rowKey, - target: { level: "folder", folderId, folderName: row.folderName }, - }); - } catch { - toast.error(t("hostDefaults.loadFailed")); - } - return; - } - setEditing({ kind: "defaults", rowKey, target: { level: row.level } }); - }, - [t], - ); - - const apply = useCallback( - async (request: ManageRequest | null) => { - if (!request) return; - if (!(await confirmDiscard())) return; - await loaded.current; - if (request.kind === "host") { - const find = () => - hostsRef.current.find((h) => h.id === request.hostId) ?? null; - let host = request.hostId ? find() : null; - // Our list can lag the sidebar's, so refetch once before giving up. - if (request.hostId && !host) { - invalidateHostsAndStatusCaches(); - await reloadHosts(); - host = find(); - if (!host) { - toast.error(t("manage.hostNotFound")); - return; - } - } - openHost(host, request.draft); - } else if (request.kind === "credential") { - const find = () => - credentialsRef.current.find( - (c) => String(c.id) === String(request.credentialId), - ) ?? null; - let credential = request.credentialId ? find() : null; - if (request.credentialId && !credential) { - await reloadCredentials(); - credential = find(); - } - void openCredential(credential); - } else if (request.kind === "defaults") { - void openDefaults(request); - } else { - setDirty(false); - setEditing(null); - setMode(request.mode); - } - }, - [ - confirmDiscard, - openHost, - openCredential, - openDefaults, - reloadHosts, - reloadCredentials, - t, - ], - ); - - // The request that opened this tab was parked before it mounted. - useEffect(() => { - void apply(takePendingManageRequest()); - const onRequest = () => void apply(takePendingManageRequest()); - window.addEventListener(MANAGE_REQUEST_EVENT, onRequest); - return () => window.removeEventListener(MANAGE_REQUEST_EVENT, onRequest); - }, [apply]); - - const guarded = - (fn: (...args: A) => void) => - async (...args: A) => { - if (await confirmDiscard()) fn(...args); - }; - - const close = () => { - setDirty(false); - setEditing(null); - }; - - const backFromCredential = () => { - if (returnHost) { - const host = returnHost; - setReturnHost(null); - openHost(host === "new" ? null : host); - return; - } - close(); - }; - - const editCredentialFromHost = async (credentialId: string) => { - const cred = credentials.find((c) => String(c.id) === String(credentialId)); - if (!cred || editing?.kind !== "host") return; - if (!(await confirmDiscard())) return; - setReturnHost(editing.host ?? "new"); - await openCredential(cred); - }; - - const deleteCurrent = async () => { - if (editing?.kind === "host" && editing.host) { - const host = editing.host; - const ok = await confirm({ - title: t("hosts.deleteHostConfirm", { name: host.name || host.ip }), - description: t("manage.cannotBeUndone"), - }); - if (!ok) return; - try { - await deleteSSHHost(Number(host.id)); - window.dispatchEvent(new CustomEvent("termix:hosts-changed")); - toast.success(t("hosts.deletedCount", { count: 1 })); - close(); - } catch { - toast.error(t("hosts.failedToDeleteCount", { count: 1 })); - } - } else if (editing?.kind === "credential" && editing.credential) { - const cred = editing.credential; - const ok = await confirm({ - title: t("credentials.deleteCredentialConfirm", { name: cred.name }), - description: t("manage.cannotBeUndone"), - }); - if (!ok) return; - try { - await deleteCredential(Number(cred.id)); - setCredentials((prev) => prev.filter((c) => c.id !== cred.id)); - window.dispatchEvent(new CustomEvent("termix:credentials-changed")); - toast.success(t("credentials.deletedCredential", { name: cred.name })); - close(); - } catch { - toast.error(t("credentials.failedToDeleteCredential")); - } - } - }; - - const isOnline = useCallback( - (host: Host) => statuses.get(Number(host.id))?.status === "online", - [statuses], - ); - - const existingFolders = useMemo( - () => - [ - ...new Set( - credentials.map((c) => c.folder).filter((f): f is string => !!f), - ), - ].sort(), - [credentials], - ); - - const selectedKey = !editing - ? null - : editing.kind === "host" - ? editing.host - ? `h:${editing.host.id}` - : null - : editing.kind === "credential" - ? editing.credential - ? `c:${editing.credential.id}` - : null - : editing.rowKey; - - const status = !editing - ? mode === "hosts" - ? t("manage.hostCount", { count: hosts.length }) - : mode === "credentials" - ? t("manage.credentialCount", { count: credentials.length }) - : t("manage.defaults") - : editing.kind === "host" - ? editing.host - ? editing.host.name || editing.host.ip - : t("manage.newHost") - : editing.kind === "credential" - ? editing.credential - ? editing.credential.name - : t("manage.newCredential") - : hostDefaultsTitle(editing.target, t); - - const canDelete = - (editing?.kind === "host" && - !!editing.host && - canDeleteHost(editing.host)) || - (editing?.kind === "credential" && !!editing.credential); - - const renderEditor = () => { - if (!editing) return null; - if (editing.kind === "defaults") { - return ( - - ); - } - if (editing.kind === "credential") { - return ( - { - const id = String((saved as { id: number | string }).id); - void reloadCredentials(); - if (options?.assignToHost && returnHost) { - const host = returnHost; - setReturnHost(null); - setDirty(false); - setMode("hosts"); - const next = - host === "new" ? null : { ...host, credentialId: id }; - setEditing({ - kind: "host", - host: next, - key: Date.now(), - protocols: hostProtocolFlags(next), - }); - return; - } - if (returnHost) { - backFromCredential(); - return; - } - close(); - }} - /> - ); - } - return ( - { - const updated = sshHostToHost(saved as unknown as SSHHostWithStatus); - setHosts((prev) => { - const idx = prev.findIndex((h) => h.id === updated.id); - if (idx < 0) return [...prev, updated]; - const next = [...prev]; - next[idx] = updated; - return next; - }); - window.dispatchEvent(new CustomEvent("termix:hosts-changed")); - close(); - }} - protocols={editing.protocols} - onProtocolChange={(p) => - setEditing((current) => - current?.kind === "host" - ? { ...current, protocols: { ...current.protocols, ...p } } - : current, - ) - } - onDirtyChange={setDirty} - hosts={hosts} - credentials={credentials} - onEditCredential={(id) => void editCredentialFromHost(id)} - /> - ); - }; - - return ( - } - title={t("nav.manage")} - status={status} - scroll={false} - docs={docsUrl( - mode === "credentials" - ? "credentials" - : mode === "hosts" - ? "hosts" - : "hostDefaults", - )} - leading={ - editing ? ( - - - void guarded( - editing.kind === "credential" ? backFromCredential : close, - )() - } - /> - - ) : undefined - } - actions={ - <> - {editing?.kind === "host" && ( - - )} - {canDelete && ( - - )} - - } - > -
- - void guarded(() => { - setMode(next); - close(); - })() - } - hosts={hosts} - credentials={credentials} - canEditInstanceDefaults={has("admin.settings.manage")} - isOnline={isOnline} - selectedKey={selectedKey} - onPickHost={(host) => void guarded(() => openHost(host))()} - onPickCredential={(cred) => - void guarded(() => void openCredential(cred))() - } - onPickDefaults={(row) => void guarded(() => void openDefaults(row))()} - onAdd={() => - void guarded(() => - mode === "credentials" - ? void openCredential(null) - : openHost(null), - )() - } - /> - - {editing ? ( -
- {renderEditor()} -
- ) : ( -
- - mode === "hosts" - ? openHost(null) - : void openCredential(null) - } - > - - {mode === "hosts" - ? t("hosts.addHost") - : t("manage.addCredential")} - - ) : undefined - } - /> -
- )} -
-
- ); -} diff --git a/src/ui/manage/defaults-rows.ts b/src/ui/manage/defaults-rows.ts deleted file mode 100644 index 13965d51c..000000000 --- a/src/ui/manage/defaults-rows.ts +++ /dev/null @@ -1,43 +0,0 @@ -import type { Host } from "@/types/ui-types"; -import type { HostDefaultsLevel } from "@/types/host-defaults"; - -export interface DefaultsRow { - key: string; - level: HostDefaultsLevel; - folderName?: string; - label: string; -} - -/** The levels of host defaults a user can open: instance, their own, folders. */ -export function defaultsRows( - hosts: Host[], - canEditInstance: boolean, - t: (key: string, options?: Record) => string, -): DefaultsRow[] { - const rows: DefaultsRow[] = []; - if (canEditInstance) - rows.push({ - key: "admin", - level: "admin", - label: t("hostDefaults.titleAdmin"), - }); - rows.push({ key: "user", level: "user", label: t("hostDefaults.titleUser") }); - const folders = new Set(); - for (const host of hosts) { - if (!host.folder) continue; - let path = ""; - for (const part of host.folder.split(" / ")) { - path = path ? `${path} / ${part}` : part; - folders.add(path); - } - } - for (const folder of [...folders].sort((a, b) => a.localeCompare(b))) { - rows.push({ - key: `folder:${folder}`, - level: "folder", - folderName: folder, - label: folder, - }); - } - return rows; -} diff --git a/src/ui/manage/host-validation.ts b/src/ui/manage/host-validation.ts deleted file mode 100644 index 9b8b0b169..000000000 --- a/src/ui/manage/host-validation.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { HostEditorForm, HostProtocols } from "@/sidebar/HostEditorData"; - -/** Field keys mapped to an i18n key saying what is wrong. */ -export type HostFormErrors = Partial>; - -function validPort(port: unknown): boolean { - const n = Number(port); - return Number.isInteger(n) && n >= 1 && n <= 65535; -} - -/** What has to be fixed before a host can be saved. */ -export function validateHostForm( - form: Pick, - protocols: Pick, -): HostFormErrors { - const errors: HostFormErrors = {}; - if (!form.ip.trim()) errors.ip = "manage.errorAddressRequired"; - if (protocols.enableSsh && !validPort(form.sshPort)) - errors.sshPort = "manage.errorPortRange"; - return errors; -} diff --git a/src/ui/manage/manage-tree.ts b/src/ui/manage/manage-tree.ts deleted file mode 100644 index 9862c4da9..000000000 --- a/src/ui/manage/manage-tree.ts +++ /dev/null @@ -1,256 +0,0 @@ -import type { Credential, Host } from "@/types/ui-types"; - -/** - * The Manage list as a tree: folders from the " / " path, sub-hosts under - * their parent host. - */ - -export type ManageItem = { - id: string; - name: string; - /** IP for a host, username for a credential. */ - note: string; - /** Extra search text, e.g. tags. */ - search: string; - online?: boolean; - children: ManageItem[]; -}; - -export type ManageFolder = { - /** Full " / " path, unique across the tree. */ - path: string; - /** Last segment, what the row shows. */ - name: string; - folders: ManageFolder[]; - items: ManageItem[]; -}; - -export type ManageRow = - | { - kind: "folder"; - depth: number; - folder: ManageFolder; - count: number; - online: number; - } - | { kind: "item"; depth: number; item: ManageItem; folderPath: string }; - -function emptyFolder(path: string, name: string): ManageFolder { - return { path, name, folders: [], items: [] }; -} - -/** Walks to the folder at `path`, creating each missing segment on the way. */ -function folderAt( - root: ManageFolder, - index: Map, - path: string, -) { - if (!path) return root; - const existing = index.get(path); - if (existing) return existing; - - let current = root; - let accumulated = ""; - for (const part of path.split(" / ")) { - const trimmed = part.trim(); - if (!trimmed) continue; - accumulated = accumulated ? `${accumulated} / ${trimmed}` : trimmed; - let next = index.get(accumulated); - if (!next) { - next = emptyFolder(accumulated, trimmed); - index.set(accumulated, next); - current.folders.push(next); - } - current = next; - } - return current; -} - -export function buildHostManageTree( - hosts: Host[], - isOnline: (host: Host) => boolean = (host) => host.online, -): ManageFolder { - const root = emptyFolder("", ""); - const index = new Map(); - - const toItem = (host: Host): ManageItem => ({ - id: host.id, - name: host.name || host.ip, - note: host.ip, - search: `${host.username} ${(host.tags ?? []).join(" ")}`, - online: isOnline(host), - children: [], - }); - - const items = new Map(hosts.map((h) => [h.id, toItem(h)])); - - // A parent that is gone or would close a loop drops the host back to its - // folder, the same as buildHostTree. - const byId = new Map(hosts.map((h) => [h.id, h])); - const isDescendant = (candidate: string, ancestor: string) => { - const seen = new Set(); - let current: string | null | undefined = candidate; - while (current) { - if (current === ancestor) return true; - if (seen.has(current)) return false; - seen.add(current); - current = byId.get(current)?.parentHostId; - } - return false; - }; - - const nested = new Set(); - for (const host of hosts) { - if (!host.parentHostId) continue; - const parent = items.get(host.parentHostId); - if (!parent) continue; - if (isDescendant(host.parentHostId, host.id)) continue; - parent.children.push(items.get(host.id)!); - nested.add(host.id); - } - - for (const host of hosts) { - if (nested.has(host.id)) continue; - folderAt(root, index, host.folder ?? "").items.push(items.get(host.id)!); - } - return sortFolder(root); -} - -export function buildCredentialManageTree( - credentials: Credential[], -): ManageFolder { - const root = emptyFolder("", ""); - const index = new Map(); - - for (const cred of credentials) { - folderAt(root, index, cred.folder ?? "").items.push({ - id: cred.id, - name: cred.name, - note: cred.username, - search: `${cred.type} ${(cred.tags ?? []).join(" ")}`, - children: [], - }); - } - return sortFolder(root); -} - -function sortFolder(folder: ManageFolder): ManageFolder { - folder.folders.sort((a, b) => a.name.localeCompare(b.name)); - folder.items.sort((a, b) => a.name.localeCompare(b.name)); - folder.folders.forEach(sortFolder); - return folder; -} - -function itemMatches(item: ManageItem, needle: string): boolean { - if (`${item.name} ${item.note} ${item.search}`.toLowerCase().includes(needle)) - return true; - return item.children.some((child) => itemMatches(child, needle)); -} - -/** Total items in a folder and its subfolders, plus how many are online. */ -export function folderCounts(folder: ManageFolder): { - count: number; - online: number; -} { - let count = 0; - let online = 0; - const walk = (item: ManageItem) => { - count++; - if (item.online) online++; - item.children.forEach(walk); - }; - folder.items.forEach(walk); - for (const child of folder.folders) { - const sub = folderCounts(child); - count += sub.count; - online += sub.online; - } - return { count, online }; -} - -/** The rows actually drawn. While searching, folders holding a match open on their own. */ -export function flattenTree( - folder: ManageFolder, - open: Set, - needle: string, - depth = 0, - rows: ManageRow[] = [], -): ManageRow[] { - for (const child of folder.folders) { - const counts = folderCounts(child); - const matching = filterFolder(child, needle); - if (!matching) continue; - rows.push({ - kind: "folder", - depth, - folder: child, - count: counts.count, - online: counts.online, - }); - if (needle || open.has(child.path)) - flattenTree(matching, open, needle, depth + 1, rows); - } - - for (const item of folder.items) { - if (needle && !itemMatches(item, needle)) continue; - pushItem(item, folder.path, depth, open, needle, rows); - } - return rows; -} - -function pushItem( - item: ManageItem, - folderPath: string, - depth: number, - open: Set, - needle: string, - rows: ManageRow[], -) { - rows.push({ kind: "item", depth, item, folderPath }); - if (item.children.length === 0) return; - if (!needle && !open.has(item.id)) return; - for (const child of item.children) { - if (needle && !itemMatches(child, needle)) continue; - pushItem(child, folderPath, depth + 1, open, needle, rows); - } -} - -/** Drops folders with nothing matching, so search never leaves empty headers. */ -function filterFolder( - folder: ManageFolder, - needle: string, -): ManageFolder | null { - if (!needle) return folder; - const folders = folder.folders - .map((child) => filterFolder(child, needle)) - .filter((child): child is ManageFolder => child !== null); - const items = folder.items.filter((item) => itemMatches(item, needle)); - if (folders.length === 0 && items.length === 0) return null; - return { ...folder, folders, items }; -} - -/** Every folder path in the tree, for expand-all and the default open set. */ -export function allFolderPaths( - folder: ManageFolder, - out: string[] = [], -): string[] { - for (const child of folder.folders) { - out.push(child.path); - allFolderPaths(child, out); - } - return out; -} - -/** Every parent host id, so sub-hosts can start expanded too. */ -export function allParentIds( - folder: ManageFolder, - out: string[] = [], -): string[] { - const walk = (item: ManageItem) => { - if (item.children.length > 0) out.push(item.id); - item.children.forEach(walk); - }; - folder.items.forEach(walk); - folder.folders.forEach((child) => allParentIds(child, out)); - return out; -} diff --git a/src/ui/plugin-host/sdk-ui.ts b/src/ui/plugin-host/sdk-ui.ts index 726726947..1c9d6e894 100644 --- a/src/ui/plugin-host/sdk-ui.ts +++ b/src/ui/plugin-host/sdk-ui.ts @@ -353,3 +353,497 @@ export { type ConnectionGateProps, } from "@/components/connection/ConnectionGate"; export { type ConnectionUnavailable } from "@/components/connection/ConnectionScreen"; + +// For shell-level plugins such as a layout: the API client, shared types and +// the shell's own state. These reach into core, so they may change with a core +// release. An ordinary plugin should not need them. +export { APP_VERSION } from "@/lib/app-version"; +// The palette's own input has to share the Command it sits in, so cmdk is +// the shell's copy. +export { Command as CommandPrimitive } from "cmdk"; +export { + buildExportPayload, + hostKey, + maskSecrets, + pluginSecretKeys, + type ExportPayload, + type FieldGroup, +} from "@/sidebar/host-export-payload"; +export { + type AuthOverrideProtocol, + SSH_AUTH_PROTOCOL, +} from "@/types/auth-protocols"; +export { + CREDENTIAL_ROW_FIELD_KEYS, + type CredentialDensity, + type CredentialRowFields, + type CredentialSidebarFilterState, + type CredentialSidebarPreferences, + type CredentialSortKey, + type CredentialTrayTrigger, + defaultCredentialRowFields, + defaultCredentialSidebarPreferences, + sanitizeCredentialSidebarPreferences, +} from "@/types/credential-sidebar-preferences"; +export { + CORE_HOST_DEFAULTS, + CORE_NAMESPACE, + type DefaultOverrides, + defaultValuesEqual, + findCoreHostDefault, + type HostDefaultsLevel, + type ResolvedHostDefault, + splitDefaultKey, +} from "@/types/host-defaults"; +export { + defaultHostRowFields, + defaultHostSidebarPreferences, + type HostClickBehavior, + type HostDensity, + type HostGroupKey, + type HostRowFields, + type HostSidebarFilterState, + type HostSidebarPreferences, + type HostTrayTrigger, + sanitizeHostSidebarPreferences, + type SortKey, +} from "@/types/host-sidebar-preferences"; +export type { + HostData, + HostProtocolAuthInput, + ProxyNode, + SSHHost, + SSHHostData, +} from "@/types"; +export { + UI_AREA_KEYS, + type UiAreaKey, + type UiPreset, +} from "@/types/ui-preferences"; +export type { + AdminSection, + Credential, + DashboardCardId, + FontSizeId, + Host, + HostFolder, + SharePermissionLevel, + Tab, + TabType, + ThemeId, + ToolsTab, + UiFontId, +} from "@/types/ui-types"; +export { + type AuditLog, + type AuditLogFilters, + getAuditForwarding, + getAuditLogActions, + getAuditLogs, + updateAuditForwarding, +} from "@/api/audit-log-api"; +export { + getUserSecondFactors, + resetUserSecondFactors, + type UserSecondFactorSummary, +} from "@/api/auth-methods-api"; +export { getCredentials } from "@/api/credentials-api"; +export { + getFolderDefaultsId, + getHostDefaultsLevel, + type HostDefaultsChange, + type HostDefaultsTarget, + previewHostDefaultsLevel, + resetHostToDefaults, + resolveHostDefaults, + saveHostDefaultsLevel, + waitForDefaultsJob, +} from "@/api/host-defaults-api"; +export { getHostTags, saveHostTags } from "@/api/host-tags-api"; +export { + getSessionTimeoutMinutes, + getUserPreferences, + parseCustomKeybindings, + saveUserPreferences, +} from "@/api/open-tabs-api"; +export { + getDeveloperMode, + getPluginAdminSettings, + getPluginHostSettings, + getPlugins, + getPluginUserSettings, + type PluginSettingsErrors, + type PluginSettingsField, + PluginSettingsValidationError, + type PluginSummary, + setAllPluginChannels, + setDeveloperMode, + setPluginOptions, + updatePluginAdminSettings, + updatePluginHostSettings, + updatePluginUserSettings, +} from "@/api/plugins-api"; +export { + getNotificationPrivateEndpoints, + setNotificationPrivateEndpoints, +} from "@/api/private-endpoints-api"; +export { + type CredentialPermissionLevel, + type FolderAccessRule, + getCredentialAccess, + getFolderAccess, + getRoles, + revokeCredentialAccess, + revokeFolderAccess, + shareCredential, + type ShareTarget, +} from "@/api/rbac-api"; +export { + type BrandingSettings, + getBranding, + updateBranding, +} from "@/api/settings-api"; +export { + getSyncConflicts, + getSyncErrors, + retrySyncErrors, + settleSyncConflict, + type SyncBasicAuth, + type SyncConflictItem, + type SyncEntityInfo, + type SyncErrorItem, + syncNow, + type SyncProxyHeader, + type SyncStatus, + unlinkServer, + updateSyncSettings, +} from "@/api/sync-api"; +export { + getChannelReleases, + getUpdateChannel, + type ReleaseInfo, + setUpdateChannel, + type UpdateChannelState, +} from "@/api/system-status-api"; +export { + getTlsStatus, + type TlsStatus, + uploadTlsCertificate, +} from "@/api/tls-api"; +export { + Command, + CommandEmpty, + CommandGroup, + CommandItem, + CommandList, +} from "@/components/command"; +export { usePluginDocsUrl } from "@/components/docs-link"; +export { + DEFAULT_FOLDER_COLOR, + DEFAULT_FOLDER_ICON, + FolderIconEl, + HexColorPicker, + IconPicker, +} from "@/components/folder-style"; +export { useTheme } from "@/components/theme-provider"; +export { VersionBadge } from "@/components/version-badge"; +export { useBranding } from "@/contexts/BrandingContext"; +export { + useAreaPreferences, + useUiPreference, + useUiPreferencesContext, +} from "@/contexts/UiPreferencesContext"; +export { + getRegisteredDashboardCard, + useRegisteredDashboardCards, +} from "@/dashboard/dashboard-cards-registry"; +export { useActionSlot } from "@/hooks/use-action-slot"; +export { useInstalledPlugins } from "@/hooks/use-installed-plugins"; +export { usePageVisibleInterval } from "@/hooks/use-page-visible-interval"; +export { usePermissions } from "@/hooks/use-permissions"; +export { + getStatusClasses, + useStatusColorScheme, +} from "@/hooks/use-status-color-scheme"; +export { useSyncStatus } from "@/hooks/use-sync-status"; +export { useSshAuthProviders } from "@/hooks/useSshAuthProviders"; +export { changeAppLanguage, normalizeLanguageCode } from "@/i18n/i18n"; +export { LANGUAGES } from "@/i18n/languages"; +export { + getLiveHostStatus, + useHostStatus, + useServerStatus, + useServerStatusMeta, +} from "@/lib/ServerStatusContext"; +export { activityTarget } from "@/lib/activity-types"; +export { applyPresetSideEffects } from "@/lib/apply-ui-preset"; +export { getDatabaseTransferUrl } from "@/lib/database-transfer-url"; +export { + canConfigureUpdates, + type DesktopUpdateMode, + desktopUpdates, + type DesktopUpdateState, + useDesktopUpdate, +} from "@/lib/desktop-updates"; +export { type DocsPage, docsUrl } from "@/lib/docs"; +export { getErrorMessage } from "@/lib/error-message"; +export { + getDefaultConnectionTab, + resolveHostTabType, +} from "@/lib/host-connection-tabs"; +export { + DefaultsOnly, + HostDefaultsContext, + type HostDefaultsContextValue, + HostOnly, +} from "@/lib/host-defaults-context"; +export { + invalidateHostsAndStatusCaches, + invalidateServerStatusCache, +} from "@/lib/hosts-request-cache"; +export { reportBetaFeedbackUrl, reportCoreIssueUrl } from "@/lib/issue-url"; +export { notifySyncChanged } from "@/lib/linked-server"; +export { + clearLocalAdaptivePreferences, + getPreferredHostAction, + recordHostActionPreference, +} from "@/lib/local-adaptive-preferences"; +export { pluginKey, pluginName } from "@/lib/plugin-i18n"; +export { PluginIcon } from "@/lib/plugin-icon"; +export { rem } from "@/lib/rem"; +export { getConnectedRemoteApi } from "@/lib/remote-server-api"; +export { roleLabel } from "@/lib/role-label"; +export type { StatusValue } from "@/lib/server-status-store"; +export { parseServerTime } from "@/lib/server-time"; +export { refreshSyncStatus, setSyncStatus } from "@/lib/sync-status"; +export { tabJumpHotkeyKeys } from "@/lib/tab-jump-hotkey"; +export { + ACCENT_PRESET_COLORS, + applyAccentColor, + applyFontSize, + applyUiFont, + DASHBOARD_CARDS, + FONT_SIZES, + UI_FONTS, +} from "@/lib/theme"; +export { registerLayout } from "@/look/layout-registry"; +export { useChooseTheme } from "@/look/use-look-theme"; +export { + type AccessRecord, + type ActiveSessionInfo, + adminCreateUser, + adminCreateUserCredential, + adminCreateUserHost, + adminDeleteUserCredential, + adminDeleteUserHost, + adminExportUserData, + adminGetHostPassword, + adminGetUserCredentials, + adminGetUserHosts, + adminResetUserPassword, + adminUpdateUserCredential, + adminUpdateUserHost, + type ApiKey, + assignRoleToUser, + bulkImportSSHHosts, + bulkUpdateSSHHosts, + changePassword, + createApiKey, + createCredential, + type CreatedApiKey, + createRole, + createSSHHost, + deleteAccount, + deleteAllHostsInFolder, + deleteApiKey, + deleteCredential, + deleteOpenTab, + deleteRole, + deleteSSHHost, + deleteUser, + deployCredentialToHost, + duplicateCredential, + exportAllSSHHosts, + generateKeyPair, + generatePublicKeyFromPrivate, + getActiveSessions, + getApiKeys, + getCredentialDetails, + getCredentialSidebarPreferences, + getExternalAutoProvision, + getHostAccess, + getHostAuthOverride, + getHostPassword, + getHostSidebarPreferences, + getLogLevel, + getPasswordLoginAllowed, + getPasswordResetAllowed, + getPermissionsCatalog, + getRegistrationAllowed, + getSecondFactorAfterExternalLogin, + getSessions, + getSessionTimeout, + getSSHFolders, + getSSHHosts, + getStatusCheckSettings, + getUserInfo, + getUserList, + getUserRoles, + importSSHConfigHosts, + type LinkedAccountInfo, + linkExternalToPasswordAccount, + logoutUser, + makeUserAdmin, + type OpenTabRecord, + type PermissionCatalogEntry, + releaseUrlFrom, + removeAdminStatus, + removeRoleFromUser, + renameCredentialFolder, + renameFolder, + reorderCredentials, + reorderFolders, + reorderSSHHosts, + resetRecentActivity, + revokeAllUserSessions, + revokeHostAccess, + revokeSession, + type Role, + saveCredentialSidebarPreferences, + saveHostSidebarPreferences, + setHostAuthOverride, + shareFolder, + shareHost, + type SSHHostWithStatus, + unlinkExternalFromPasswordAccount, + updateCredential, + updateExternalAutoProvision, + updateFolderMetadata, + updateHostAccess, + updateLogLevel, + updatePasswordLoginAllowed, + updatePasswordResetAllowed, + updateRegistrationAllowed, + updateRole, + updateSecondFactorAfterExternalLogin, + updateSessionTimeout, + updateSSHHost, + updateStatusCheckSettings, + type UserPreferences, + type UserRole, +} from "@/main-axios"; +export { + MANAGE_REQUEST_EVENT, + type ManageMode, + type ManageRequest, + requestFromLegacyEvent, + requestManage, + takePendingManageRequest, +} from "@/manage/manage-requests"; +export { useSshAuthEditors } from "@/plugin-host/auth-registry"; +export { usePluginStore } from "@/plugin-host/plugin-store"; +export { shell } from "@/plugin-host/shell-bridge"; +export { OPEN_PLUGINS_EVENT } from "@/plugins/open-plugins"; +export { isPrerelease } from "@/plugins/plugin-model"; +export { usePluginHostSections } from "@/settings/HostPluginSections"; +export { SettingsFieldRow } from "@/settings/SettingsFields"; +export { LookSettings } from "@/look/LookSettings"; +export { useThemeOptions } from "@/settings/appearance/appearance-controls"; +export { + hasVisibleFields, + isFieldShown, +} from "@/settings/settings-fields-util"; +export { LinkServerDialog } from "@/settings/sync/LinkServerDialog"; +export { ProxySettingsFields } from "@/settings/sync/ProxySettingsFields"; +export { useShellController } from "@/shell/controller/ShellControllerProvider"; +export { + type KeybindingActionDef, + useKeybindingActions, + useKeybindingDefaults, +} from "@/shell/keybinding-registry"; +export { + filterPaletteItems, + loadPaletteGroup, + paletteEntriesFor, + type PaletteItemDef, + usePaletteEntries, + usePaletteGroups, +} from "@/shell/palette-registry"; +export { getPanel, usePanels } from "@/shell/panel-registry"; +export { SplitLayoutMenu } from "@/shell/split/SplitLayoutMenu"; +export { + beginSplitDrag, + endSplitDrag, + isSplitDragging, + moveSplitDrag, +} from "@/shell/split/split-drag"; +export { + canJoinSplit, + isSplitTab, + type SplitSummary, + type TabSplitAction, +} from "@/shell/split/split-tabs"; +export { + openInSplit, + type SplitOpenTarget, + useSplitTargets, +} from "@/shell/split/split-targets"; +export { MAX_PANES } from "@/shell/split/split-tree"; +export { registerTabCloseGuard } from "@/shell/tab-close-guards"; +export { useTabHandlesVersion } from "@/shell/tab-handles"; +export { + getTabType, + isPersistentTabType, + isSessionTabType, + type TabShellCallbacks, +} from "@/shell/tab-registry"; +export { + markTabSurfaceUsed, + preloadTabSurface, + tabIcon, +} from "@/shell/tabUtils"; +export { AuthEnrollmentSections } from "@/sidebar/AuthEnrollmentSections"; +export { mapCredentials, sshHostToHost } from "@/sidebar/HostManagerData"; +export { + getHostEditorSection, + makeHostSshSubTabs, + makeHostTabs, + useHostEditorSections, +} from "@/sidebar/HostManagerTabs"; +export { + actionOrder, + defaultConnectAction, + type HostActionDef, + hostActionsFor, + hostBadgesFor, + hostMenuItemsFor, + listHostActions, + runHostAction, + useHostActions, + useHostBadges, + useHostContextMenuItems, +} from "@/sidebar/host-contributions"; +export { useEditorDefaultKeys } from "@/sidebar/host-defaults/catalog"; +export { + enabledHostProtocols, + type HostProtocolDef, + hostProtocolFlags, + type HostProtocols, + listHostProtocols, + protocolEnabled, + protocolPort, + useHostProtocols, + withProtocolSettings, +} from "@/sidebar/host-protocols"; +export { quickConnectTargets } from "@/sidebar/quick-connect-host"; +export { + groupRailItems, + isCoreRailView, + moveRailItem, + promotableIds, + type RailGroup, + type RailItemDef, + railItemLabel, + rightDockableIds, + useRailItems, +} from "@/sidebar/rail-items"; diff --git a/src/ui/plugin-host/testing-host.tsx b/src/ui/plugin-host/testing-host.tsx index 342644be1..14793cb8e 100644 --- a/src/ui/plugin-host/testing-host.tsx +++ b/src/ui/plugin-host/testing-host.tsx @@ -1,3 +1,4 @@ +/* eslint-disable react-refresh/only-export-components */ /** * The Termix side of @termix-ssh/plugin-sdk/testing's renderWithApp. * @@ -462,3 +463,43 @@ export async function renderPlugin( }, }; } + +// Registries a shell-level plugin's own tests fill directly, since they +// render parts of the shell without activating a plugin. +export { + registerHostAction, + resetHostContributions, +} from "@/sidebar/host-contributions"; +export { registerHostProtocol } from "@/sidebar/host-protocols"; +export { + RAIL_ITEMS, + registerRailItem, + resetRegisteredRailItems, +} from "@/sidebar/rail-items"; +export { + declareActionSlot, + registerAction, + registerSlotContribution, + resetActionRegistry, +} from "@/shell/action-registry"; +export { trackTabHandle } from "@/shell/tab-handles"; +export { + registerKeybindingAction, + registerKeybindingDefault, + resetKeybindingRegistry, +} from "@/shell/keybinding-registry"; +export { LOCAL_ADAPTIVE_PREFERENCES_KEY } from "@/lib/local-adaptive-preferences"; +export { HostPluginSections } from "@/settings/HostPluginSections"; +export { + registerDashboardCard, + resetDashboardCards, +} from "@/dashboard/dashboard-cards-registry"; +export { + resetPluginStore, + setPluginSummaries, +} from "@/plugin-host/plugin-store"; +export { setPermissionsForTesting } from "@/hooks/use-permissions"; +export { getRegisteredLayout } from "@/look/layout-registry"; +export { ShellControllerProvider } from "@/shell/controller/ShellControllerProvider"; +export { ServerStatusProvider } from "@/lib/ServerStatusContext"; +export { TabPortals } from "@/shell/stage/TabPortals"; diff --git a/src/ui/settings/DesktopUpdatesCard.tsx b/src/ui/settings/DesktopUpdatesCard.tsx deleted file mode 100644 index 12b92218a..000000000 --- a/src/ui/settings/DesktopUpdatesCard.tsx +++ /dev/null @@ -1,162 +0,0 @@ -import { useState } from "react"; -import { useTranslation } from "react-i18next"; -import { toast } from "sonner"; -import { ExternalLink, MonitorDown } from "lucide-react"; -import { Button } from "@/components/button"; -import { SectionCard, SettingRow } from "@/components/section-card"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/select"; -import { - canConfigureUpdates, - desktopUpdates, - useDesktopUpdate, - type DesktopUpdateMode, - type DesktopUpdateState, -} from "@/lib/desktop-updates"; - -const MODES: DesktopUpdateMode[] = ["automatic", "prompt", "never"]; - -function StatusText({ state }: { state: DesktopUpdateState }) { - const { t } = useTranslation(); - const version = state.version; - switch (state.status) { - case "checking": - return <>{t("desktopUpdates.statusChecking")}; - case "available": - return <>{t("desktopUpdates.statusAvailable", { version })}; - case "downloading": - return ( - <> - {t("desktopUpdates.statusDownloading", { - version, - progress: state.progress ?? 0, - })} - - ); - case "downloaded": - return <>{t("desktopUpdates.statusReady", { version })}; - case "up-to-date": - return <>{t("desktopUpdates.statusUpToDate")}; - case "error": - return <>{t("desktopUpdates.statusError")}; - default: - return <>{t("desktopUpdates.statusIdle")}; - } -} - -/** Desktop only: how this install updates itself. */ -export function DesktopUpdatesCard() { - const { t } = useTranslation(); - const state = useDesktopUpdate(); - const [busy, setBusy] = useState(false); - - if (!canConfigureUpdates(state)) return null; - const bridge = desktopUpdates(); - - const run = async (action: () => Promise | undefined) => { - setBusy(true); - try { - await action(); - } catch { - toast.error(t("settings.updates.saveFailed")); - } finally { - setBusy(false); - } - }; - - const modeLabel = (mode: DesktopUpdateMode) => - mode === "automatic" - ? t("desktopUpdates.modeAutomatic") - : mode === "prompt" - ? t("desktopUpdates.modePrompt") - : t("desktopUpdates.modeNever"); - - return ( - } - rowId="updates-desktop" - > - - - - } - > - {state.status === "downloaded" ? ( - - ) : state.status === "available" && state.kind === "auto" ? ( - - ) : state.status === "available" && state.releaseUrl ? ( -
- ) : ( - - )} - - - ); -} diff --git a/src/ui/settings/FeatureSettingsSections.tsx b/src/ui/settings/FeatureSettingsSections.tsx deleted file mode 100644 index 8b05c2e07..000000000 --- a/src/ui/settings/FeatureSettingsSections.tsx +++ /dev/null @@ -1,232 +0,0 @@ -/* eslint-disable react-refresh/only-export-components */ -/** - * Manifest-declared settings shown as ordinary sections in the profile and - * admin panels, one per feature, named after it. - */ - -import { useCallback, useEffect, useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; -import { Loader2 } from "lucide-react"; -import { toast } from "sonner"; -import { Button } from "@/components/button"; -import { SectionCard } from "@/components/section-card"; -import { AccordionSection } from "@/sidebar/AdminSettingsShared"; -import { pluginKey, pluginName } from "@/lib/plugin-i18n"; -import { PluginIcon } from "@/lib/plugin-icon"; -import { - getPluginAdminSettings, - getPluginUserSettings, - updatePluginAdminSettings, - updatePluginUserSettings, - PluginSettingsValidationError, - type PluginSettingsErrors, - type PluginSettingsField, - type PluginSummary, -} from "@/api/plugins-api"; -import { useInstalledPlugins } from "@/hooks/use-installed-plugins"; -import { SettingsFieldRow } from "./SettingsFields"; -import { hasVisibleFields, isFieldShown } from "./settings-fields-util"; - -export type FeatureSettingsScope = "admin" | "user"; - -export type FeatureSectionId = `feature:${string}`; - -export function featureSectionId(pluginId: string): FeatureSectionId { - return `feature:${pluginId}`; -} - -/** Enabled features with fields in this scope, sorted by name. */ -export function useFeatureSettings( - scope: FeatureSettingsScope, -): PluginSummary[] { - const plugins = useInstalledPlugins(); - - return useMemo( - () => - plugins - .filter( - (plugin) => - plugin.enabled && - hasVisibleFields(plugin.contributes?.settings?.[scope] ?? []), - ) - .sort((a, b) => a.name.localeCompare(b.name)), - [plugins, scope], - ); -} - -export function FeatureSettingsSection({ - plugin, - scope, - open, - onToggle, -}: { - plugin: PluginSummary; - scope: FeatureSettingsScope; - open: boolean; - onToggle: () => void; -}) { - const { t } = useTranslation(); - return ( - } - open={open} - onToggle={onToggle} - > - - - ); -} - -export function FeatureSettingsForm({ - plugin, - scope, - fields, -}: { - plugin: PluginSummary; - scope: FeatureSettingsScope; - fields: PluginSettingsField[]; -}) { - const { t } = useTranslation(); - const [values, setValues] = useState>({}); - const [errors, setErrors] = useState({}); - const [loading, setLoading] = useState(true); - const [saving, setSaving] = useState(false); - const [dirty, setDirty] = useState(false); - const running = plugin.enabled && plugin.state !== "failed"; - - const load = useCallback(async () => { - setLoading(true); - try { - const loaded = - scope === "admin" - ? await getPluginAdminSettings(plugin.id) - : await getPluginUserSettings(plugin.id); - setValues(loaded); - setErrors({}); - setDirty(false); - } catch { - toast.error(t("settings.pluginSettingsLoadFailed")); - } finally { - setLoading(false); - } - }, [plugin.id, scope, t]); - - useEffect(() => { - void load(); - }, [load]); - - const setValue = (key: string, value: unknown) => { - setValues((current) => ({ ...current, [key]: value })); - setErrors((current) => { - if (!current[key]) return current; - const next = { ...current }; - delete next[key]; - return next; - }); - setDirty(true); - }; - - const save = async () => { - setSaving(true); - try { - const saved = - scope === "admin" - ? await updatePluginAdminSettings(plugin.id, values) - : await updatePluginUserSettings(plugin.id, values); - setValues(saved); - setErrors({}); - setDirty(false); - toast.success(t("settings.pluginSettingsSaved")); - } catch (error) { - if (error instanceof PluginSettingsValidationError) { - setErrors(error.errors); - toast.error(t("settings.pluginSettingsInvalid")); - } else { - toast.error(t("settings.pluginSettingsSaveFailed")); - } - } finally { - setSaving(false); - } - }; - - // Groups appear in the order of their first field, so the manifest sets the layout. - const groups = useMemo(() => { - const ordered: { key?: string; fields: PluginSettingsField[] }[] = []; - for (const field of fields) { - const existing = ordered.find((group) => group.key === field.group); - if (existing) existing.fields.push(field); - else ordered.push({ key: field.group, fields: [field] }); - } - return ordered; - }, [fields]); - - if (loading) { - return ( -
- - {t("common.loading")} -
- ); - } - - const rows = (group: PluginSettingsField[]) => - group - .filter((field) => isFieldShown(field, values)) - .map((field) => ( - - )); - - const icon = ; - - return ( -
- {!running && ( -
- {t("settings.featureUnavailable", { - name: pluginName(t, plugin), - })} -
- )} - - {groups.map((group, index) => - group.key ? ( - - {rows(group.fields)} - - ) : ( -
{rows(group.fields)}
- ), - )} - -
- -
-
- ); -} diff --git a/src/ui/settings/KeybindingsSettings.tsx b/src/ui/settings/KeybindingsSettings.tsx deleted file mode 100644 index d68eebc3b..000000000 --- a/src/ui/settings/KeybindingsSettings.tsx +++ /dev/null @@ -1,478 +0,0 @@ -import { Select2 } from "@/components/select2"; -import { useEffect, useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; -import { toast } from "sonner"; -import { - getUserPreferences, - parseCustomKeybindings, -} from "@/api/open-tabs-api"; -import { saveUserPreferences } from "@/main-axios"; -import { - useKeybindingActions, - useKeybindingDefaults, - type KeybindingActionDef, -} from "@/shell/keybinding-registry"; -import type { - CustomKeybinding, - KeybindingAction, - KeyCombo, -} from "@/types/keybindings"; -import { InlineView, useConfirm } from "@/components/surface/surface-scope"; -import { GroupHeading } from "@/components/panel-layout"; -import { Button } from "@/components/button"; -import { Input } from "@/components/input"; -import { Keyboard, Pencil, Plus, RotateCcw, Trash2 } from "lucide-react"; -import { FixedShortcutsList } from "@/sidebar/FixedShortcutsList"; - -function formatCombo(combo: KeyCombo): string { - const parts: string[] = []; - if (combo.ctrl) parts.push("Ctrl"); - if (combo.alt) parts.push("Alt"); - if (combo.shift) parts.push("Shift"); - if (combo.meta) parts.push("Cmd"); - parts.push(combo.key.length === 1 ? combo.key.toUpperCase() : combo.key); - return parts.join(" + "); -} - -function generateId(): string { - return typeof crypto !== "undefined" && "randomUUID" in crypto - ? crypto.randomUUID() - : `kb-${Date.now()}-${Math.random().toString(36).slice(2)}`; -} - -/** An action without the keys an editor cleared, so it saves clean. */ -function withoutEmpty(action: KeybindingAction): KeybindingAction { - const out: KeybindingAction = { type: action.type }; - for (const [key, value] of Object.entries(action)) { - if (key !== "type" && value !== undefined && value !== null) { - out[key] = value; - } - } - return out; -} - -/** - * Settings > Keybindings. The actions come from the keybinding registry: - * the shell's own and whatever the running plugins register, each with its - * own parameter editor. A saved binding whose plugin is off stays in the - * list and keeps working once the plugin is back. - */ -export function KeybindingsSettings() { - const { t } = useTranslation(); - const confirm = useConfirm(); - const actions = useKeybindingActions(); - const defaults = useKeybindingDefaults(); - const [bindings, setBindings] = useState([]); - const [loading, setLoading] = useState(false); - const [formOpen, setFormOpen] = useState(false); - const [editingId, setEditingId] = useState(null); - const [overridesDefaultId, setOverridesDefaultId] = useState< - string | undefined - >(undefined); - - const [recordedCombo, setRecordedCombo] = useState(null); - const [recording, setRecording] = useState(false); - const [draft, setDraft] = useState({ type: "" }); - - const actionById = useMemo( - () => new Map(actions.map((action) => [action.id, action])), - [actions], - ); - const draftDef: KeybindingActionDef | undefined = actionById.get(draft.type); - - useEffect(() => { - setLoading(true); - getUserPreferences() - .then((prefs) => - setBindings(parseCustomKeybindings(prefs.customKeybindings)), - ) - .catch(() => setBindings([])) - .finally(() => setLoading(false)); - }, []); - - const conflictWarning = useMemo(() => { - if (!recordedCombo) return null; - const conflict = bindings.find( - (kb) => - kb.id !== editingId && - kb.enabled && - kb.combo.ctrl === recordedCombo.ctrl && - kb.combo.alt === recordedCombo.alt && - kb.combo.shift === recordedCombo.shift && - kb.combo.meta === recordedCombo.meta && - kb.combo.key === recordedCombo.key, - ); - if (conflict) { - return t("newUi.sidebar.keybindings.conflictWarning", { - combo: formatCombo(conflict.combo), - }); - } - return null; - }, [recordedCombo, bindings, editingId, t]); - - function actionLabel(type: string): string { - const def = actionById.get(type); - return def - ? t(def.labelKey) - : t("newUi.sidebar.keybindings.unavailableAction", { type }); - } - - function resetForm() { - setEditingId(null); - setOverridesDefaultId(undefined); - setRecordedCombo(null); - setRecording(false); - setDraft({ type: actions[0]?.id ?? "" }); - } - - function openAddForm() { - resetForm(); - setFormOpen(true); - } - - function openEditForm(kb: CustomKeybinding) { - setEditingId(kb.id); - setOverridesDefaultId(kb.overridesDefaultId); - setRecordedCombo(kb.combo); - setRecording(false); - setDraft({ ...kb.action }); - setFormOpen(true); - } - - function openOverrideDefaultForm(defaultId: string, combo: KeyCombo) { - resetForm(); - setOverridesDefaultId(defaultId); - setRecordedCombo(combo); - setFormOpen(true); - } - - async function persist(updated: CustomKeybinding[]) { - try { - await saveUserPreferences({ - customKeybindings: JSON.stringify(updated), - }); - setBindings(updated); - window.dispatchEvent(new Event("customKeybindingsChanged")); - } catch { - toast.error(t("newUi.sidebar.keybindings.saveError")); - } - } - - async function handleDelete(id: string) { - const ok = await confirm({ - title: t("newUi.sidebar.keybindings.deleteConfirm"), - }); - if (ok) persist(bindings.filter((kb) => kb.id !== id)); - } - - async function handleResetAll() { - const ok = await confirm({ - title: t("newUi.sidebar.keybindings.resetAllConfirm"), - confirmLabel: t("newUi.sidebar.keybindings.resetAllToDefaults"), - }); - if (ok) persist([]); - } - - function startRecording(inputEl: HTMLInputElement) { - setRecording(true); - const handler = (e: KeyboardEvent) => { - e.preventDefault(); - e.stopPropagation(); - if (["Control", "Alt", "Shift", "Meta"].includes(e.key)) { - return; - } - const isAlnum = /^[a-zA-Z0-9]$/.test(e.key); - const combo: KeyCombo = { - key: isAlnum ? e.key.toLowerCase() : e.code, - isCode: !isAlnum, - ctrl: e.ctrlKey, - alt: e.altKey, - shift: e.shiftKey, - meta: e.metaKey, - }; - setRecordedCombo(combo); - setRecording(false); - inputEl.removeEventListener("keydown", handler, true); - inputEl.blur(); - }; - inputEl.addEventListener("keydown", handler, true); - } - - function handleSave() { - if (!recordedCombo) { - toast.error(t("newUi.sidebar.keybindings.comboRequiredError")); - return; - } - if (!draftDef) { - toast.error(t("newUi.sidebar.keybindings.actionRequiredError")); - return; - } - const action = withoutEmpty(draft); - const problem = draftDef.validate?.(action); - if (problem) { - toast.error(t(problem)); - return; - } - - const now = new Date().toISOString(); - const existing = editingId - ? bindings.find((kb) => kb.id === editingId) - : undefined; - - const newBinding: CustomKeybinding = { - id: editingId ?? generateId(), - combo: recordedCombo, - action, - enabled: true, - overridesDefaultId, - createdAt: existing?.createdAt ?? now, - updatedAt: now, - }; - - const updated = editingId - ? bindings.map((kb) => (kb.id === editingId ? newBinding : kb)) - : [...bindings, newBinding]; - - persist(updated); - setFormOpen(false); - resetForm(); - } - - const customOnlyBindings = bindings.filter((kb) => !kb.overridesDefaultId); - const Editor = draftDef?.editor; - - return ( - <> -
-

- {t("newUi.sidebar.keybindings.description")} -

- {defaults.length > 0 && ( -
- - {defaults.map((def) => { - const override = bindings.find( - (kb) => kb.overridesDefaultId === def.id, - ); - return ( -
-
- - {override - ? formatCombo(override.combo) - : formatCombo(def.combo)} - - - {t(def.descriptionKey)} - -
-
- {override ? ( - <> - - {t("newUi.sidebar.keybindings.customizedBadge")} - - - - - ) : ( - <> - - {t("newUi.sidebar.keybindings.defaultBadge")} - - - - )} -
-
- ); - })} -
- )} - -
- - - {t("newUi.sidebar.keybindings.addBinding")} - - } - /> - {loading ? ( - - {t("newUi.sidebar.keybindings.loading")} - - ) : customOnlyBindings.length === 0 ? ( - - {t("newUi.sidebar.keybindings.noCustomBindings")} - - ) : ( - customOnlyBindings.map((kb) => { - const Summary = actionById.get(kb.action.type)?.summary; - return ( -
-
- - {formatCombo(kb.combo)} - - - {actionLabel(kb.action.type)} - {Summary && ( - <> - {" "} - {}} /> - - )} - -
-
- - -
-
- ); - }) - )} -
- - -
- - } - title={ - editingId || overridesDefaultId - ? t("newUi.sidebar.keybindings.editBindingTitle") - : t("newUi.sidebar.keybindings.addBindingTitle") - } - footer={ -
- - -
- } - > -
-
- - startRecording(e.currentTarget)} - className="font-mono cursor-pointer" - /> - {conflictWarning && ( - {conflictWarning} - )} -
- -
- - setDraft({ type: e.target.value })} - className="h-8 border border-border bg-background px-2 text-xs outline-none focus:ring-1 focus:ring-ring" - > - {!draftDef && draft.type && ( - - )} - {actions.map((action) => ( - - ))} - -
- - {Editor && } -
-
- - ); -} diff --git a/src/ui/settings/SettingsTab.tsx b/src/ui/settings/SettingsTab.tsx deleted file mode 100644 index 2b878b571..000000000 --- a/src/ui/settings/SettingsTab.tsx +++ /dev/null @@ -1,429 +0,0 @@ -import { useEffect, useMemo, useRef, useState } from "react"; -import { useTranslation } from "react-i18next"; -import { - Bug, - ChevronDown, - ExternalLink, - Search, - Settings as SettingsIcon, -} from "lucide-react"; -import { - GroupHeading, - PANEL, - PanelSearch, - PanelShell, -} from "@/components/panel-layout"; -import { SurfaceScope } from "@/components/surface/surface-scope"; -import { EmptyState } from "@/components/empty-state"; -import { isElectron } from "@/lib/electron"; -import { reportCoreIssueUrl } from "@/lib/issue-url"; -import { cn } from "@/lib/utils"; -import { pluginKey, pluginName } from "@/lib/plugin-i18n"; -import { PluginIcon } from "@/lib/plugin-icon"; -import type { Host } from "@/types/ui-types"; -import type { UserPreferences } from "@/main-axios"; -import { UserProfilePanel } from "@/sidebar/UserProfilePanel"; -import { AdminSettingsPanel } from "@/sidebar/AdminSettingsPanel"; -import { - FeatureSettingsForm, - useFeatureSettings, -} from "./FeatureSettingsSections"; -import { KeybindingsSettings } from "./KeybindingsSettings"; -import { UpdatesSettings } from "./UpdatesSettings"; -import { SettingsEmbedContext } from "./settings-embed"; -import { useSettingsPageFilter } from "./page-filter"; -import { - CORE_SETTINGS_PAGES, - SETTINGS_BAND_ORDER, - searchSettingsPages, - visibleSettingsPages, - type SettingsBand, - type SettingsPage, -} from "./settings-pages"; -import { usePluginDocsUrl } from "@/components/docs-link"; -import { docsUrl } from "@/lib/docs"; - -export interface SettingsTabProps { - /** The page to open, from the tab's data. */ - section?: string; - /** Changes on every open request, so asking for the same page again still goes there. */ - sectionAt?: string | number; - /** An element id on that page to scroll to, as "id@nonce". */ - reveal?: string; - username: string; - isAdmin: boolean; - onLogout?: () => void; - userPrefs?: UserPreferences; - onPrefsChange?: (prefs: Partial) => void; - onOpenHostTab?: (host: Host) => void; -} - -const BAND_LABEL: Record = { - you: "settings.bandYou", - app: "settings.bandApp", - plugins: "settings.bandPlugins", - instance: "settings.bandInstance", -}; - -/** Scrolls to the first text on the page containing the query and marks it. */ -function revealText(container: HTMLElement, needle: string): boolean { - const lower = needle.toLowerCase(); - const walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT); - let node = walker.nextNode(); - while (node) { - if (node.textContent?.toLowerCase().includes(lower)) { - const el = node.parentElement; - if (el && el.offsetParent !== null) { - el.scrollIntoView?.({ block: "center", behavior: "smooth" }); - el.classList.add("settings-search-hit"); - window.setTimeout( - () => el.classList.remove("settings-search-hit"), - 1600, - ); - return true; - } - } - node = walker.nextNode(); - } - return false; -} - -/** Everything that configures the app, one page at a time. */ -export function SettingsTab({ - section, - sectionAt, - reveal, - username, - isAdmin, - onLogout, - userPrefs, - onPrefsChange, - onOpenHostTab, -}: SettingsTabProps) { - const { t } = useTranslation(); - const userFeatures = useFeatureSettings("user"); - const adminFeatures = useFeatureSettings("admin"); - const [query, setQuery] = useState(""); - const [navOpen, setNavOpen] = useState(false); - const [pageQuery, setPageQuery] = useState(""); - const contentRef = useRef(null); - const pageRef = useRef(null); - - const pages = useMemo(() => { - const plugins = new Map(); - for (const plugin of [...userFeatures, ...(isAdmin ? adminFeatures : [])]) { - if (plugins.has(plugin.id)) continue; - const fields = [ - ...(plugin.contributes?.settings?.user ?? []), - ...(isAdmin ? (plugin.contributes?.settings?.admin ?? []) : []), - ]; - plugins.set(plugin.id, { - id: `plugin:${plugin.id}`, - band: "plugins", - labelKey: pluginKey(plugin.id, "plugin.name"), - label: pluginName(t, plugin), - icon: SettingsIcon, - pluginId: plugin.id, - searchKeys: fields.flatMap((field) => - [field.labelKey, field.descriptionKey] - .filter((key): key is string => !!key) - .map((key) => pluginKey(plugin.id, key)), - ), - }); - } - return visibleSettingsPages( - [ - ...CORE_SETTINGS_PAGES, - ...[...plugins.values()].sort((a, b) => - (a.label ?? "").localeCompare(b.label ?? ""), - ), - ], - { isAdmin, isElectron: isElectron() }, - ); - }, [userFeatures, adminFeatures, isAdmin, t]); - - const [current, setCurrent] = useState(section ?? "account"); - useEffect(() => { - if (section) setCurrent(section); - }, [section, sectionAt]); - - // The page renders lazily, so the target may take a moment to appear. - useEffect(() => { - const target = reveal?.split("@")[0]; - if (!target) return; - let tries = 0; - let timer = 0; - const attempt = () => { - const el = contentRef.current?.querySelector( - `#${CSS.escape(target)}`, - ); - if (el) { - el.scrollIntoView?.({ block: "start", behavior: "smooth" }); - el.classList.add("settings-search-hit"); - timer = window.setTimeout( - () => el.classList.remove("settings-search-hit"), - 1600, - ); - return; - } - if (++tries < 15) timer = window.setTimeout(attempt, 120); - }; - timer = window.setTimeout(attempt, 60); - return () => window.clearTimeout(timer); - }, [reveal]); - - const page = - pages.find((p) => p.id === current) ?? - pages.find((p) => p.id === "account")!; - const pageHasMatches = useSettingsPageFilter(pageRef, pageQuery, page.id); - const hits = searchSettingsPages(pages, query, (key) => t(key)); - const pageLabel = (p: SettingsPage) => p.label ?? t(p.labelKey); - - const go = (id: string) => { - setCurrent(id); - setNavOpen(false); - setPageQuery(""); - contentRef.current?.scrollTo?.({ top: 0 }); - const needle = query.trim(); - if (!needle) return; - let tries = 0; - const attempt = () => { - if (!contentRef.current) return; - if (revealText(contentRef.current, needle) || ++tries > 12) return; - window.setTimeout(attempt, 150); - }; - window.setTimeout(attempt, 60); - }; - - const pluginDocs = usePluginDocsUrl(page.pluginId); - const pageDocs = page.pluginId - ? pluginDocs - : page.docs - ? docsUrl(page.docs) - : null; - - const pluginFeature = page.pluginId - ? { - user: userFeatures.find((p) => p.id === page.pluginId), - admin: isAdmin - ? adminFeatures.find((p) => p.id === page.pluginId) - : undefined, - } - : null; - - const nav = ( -
-
- -
- {query.trim() && hits.length === 0 && ( -

- {t("settings.noResults")} -

- )} - {SETTINGS_BAND_ORDER.map((band) => { - const items = hits.filter((hit) => hit.page.band === band); - const reportBug = - band === "you" && - (!query.trim() || - t("dashboard.reportBug") - .toLowerCase() - .includes(query.trim().toLowerCase())); - if (items.length === 0 && !reportBug) return null; - return ( -
- - {items.map(({ page: item, match }) => { - const on = item.id === page.id; - const Icon = item.icon; - return ( - - ); - })} - {reportBug && ( - - - - {t("dashboard.reportBug")} - - - - )} -
- ); - })} -
- ); - - const showProfile = !!page.profileSection && page.id !== "keybindings"; - const showAdmin = !!page.adminSection; - - return ( - } - title={t("nav.settings")} - status={pageLabel(page)} - scroll={false} - docs={pageDocs} - actions={ - - } - > -
- - - -
-
- -
-
-
- {!pageHasMatches && ( - - )} -
- -
- -
- {isAdmin && ( -
- -
- )} -
- {page.id === "keybindings" && } - {page.id === "updates" && } - {pluginFeature && ( - <> - {pluginFeature.user && ( - - )} - {pluginFeature.admin && ( - <> - - - - )} - {!pluginFeature.user && !pluginFeature.admin && ( - - )} - - )} -
-
-
-
-
- ); -} diff --git a/src/ui/settings/UpdatesSettings.tsx b/src/ui/settings/UpdatesSettings.tsx deleted file mode 100644 index dd4930e0a..000000000 --- a/src/ui/settings/UpdatesSettings.tsx +++ /dev/null @@ -1,330 +0,0 @@ -import { useCallback, useEffect, useState } from "react"; -import { useTranslation } from "react-i18next"; -import { toast } from "sonner"; -import { Copy, ExternalLink, FlaskConical, Puzzle, Tag } from "lucide-react"; -import { Button } from "@/components/button"; -import { FakeSwitch, SectionCard, SettingRow } from "@/components/section-card"; -import { - getChannelReleases, - getUpdateChannel, - setUpdateChannel, - type ReleaseInfo, - type UpdateChannelState, -} from "@/api/system-status-api"; -import { - getPlugins, - setAllPluginChannels, - setPluginOptions, - type PluginSummary, -} from "@/api/plugins-api"; -import { reportBetaFeedbackUrl } from "@/lib/issue-url"; -import { isElectron } from "@/lib/electron"; -import { isPrerelease } from "@/plugins/plugin-model"; -import { OPEN_PLUGINS_EVENT } from "@/plugins/open-plugins"; -import { docsUrl } from "@/lib/docs"; -import { pluginName } from "@/lib/plugin-i18n"; -import { DesktopUpdatesCard } from "./DesktopUpdatesCard"; - -const DOCKER_BETA_IMAGE = "ghcr.io/termix-ssh/termix:beta"; - -function onBeta(plugin: PluginSummary): boolean { - return plugin.channel === "beta" || isPrerelease(plugin.version); -} - -function ReleaseRow({ - label, - release, -}: { - label: string; - release: ReleaseInfo | null; -}) { - const { t } = useTranslation(); - return ( - - {release && ( - - v{release.version} - - - )} - - ); -} - -function InstanceUpdates() { - const { t } = useTranslation(); - const [channel, setChannel] = useState(null); - const [releases, setReleases] = useState<{ - stable: ReleaseInfo | null; - beta: ReleaseInfo | null; - } | null>(null); - const [plugins, setPlugins] = useState([]); - const [busy, setBusy] = useState(false); - const version = import.meta.env.VITE_APP_VERSION || undefined; - - const loadPlugins = useCallback(async () => { - try { - setPlugins(await getPlugins()); - } catch { - setPlugins([]); - } - }, []); - - useEffect(() => { - getUpdateChannel() - .then(setChannel) - .catch(() => setChannel(null)); - getChannelReleases() - .then(setReleases) - .catch(() => setReleases({ stable: null, beta: null })); - void loadPlugins(); - }, [loadPlugins]); - - const betaPlugins = plugins.filter(onBeta); - const runningBetas = plugins - .filter((plugin) => isPrerelease(plugin.version)) - .map((plugin) => ({ id: plugin.id, version: plugin.version })); - const joined = channel?.channel === "beta"; - - const changeChannel = async (next: boolean) => { - setBusy(true); - try { - setChannel(await setUpdateChannel(next ? "beta" : "stable")); - } catch { - toast.error(t("settings.updates.saveFailed")); - } finally { - setBusy(false); - } - }; - - const changePlugins = async (action: () => Promise) => { - setBusy(true); - try { - await action(); - } catch { - toast.error(t("settings.updates.saveFailed")); - } finally { - await loadPlugins(); - setBusy(false); - } - }; - - const copyImage = async () => { - try { - await navigator.clipboard.writeText(DOCKER_BETA_IMAGE); - toast.success(t("settings.updates.copied")); - } catch { - toast.error(t("settings.updates.copyFailed")); - } - }; - - return ( -
- } - rowId="updates-beta" - > -

- {t("settings.updates.betaIntro")} -

- - void changeChannel(next)} - /> - - {joined && !channel?.runningBeta && ( -
- - {t("settings.updates.howToInstall")} - - {isElectron() ? ( - - {t("settings.updates.desktopInstall")}{" "} - {releases?.beta && ( - - {t("settings.updates.downloadBeta", { - version: releases.beta.version, - })} - - )} - - ) : ( - <> - - {t("settings.updates.dockerInstall")} - -
- - {DOCKER_BETA_IMAGE} - - -
- - )} - - {t("settings.updates.learnMore")} - - -
- )} - - - -
- - } - rowId="updates-releases" - > - - - {version ? `v${version}` : "-"} - - - - - - - } - rowId="updates-plugins" - > -

- {t("settings.updates.pluginBetasIntro")}{" "} - -

- {betaPlugins.map((plugin) => ( - - {plugin.channel === "beta" && ( - - )} - - ))} - {plugins.length > 0 && ( -
- - -
- )} -
-
- ); -} - -export function UpdatesSettings({ isAdmin }: { isAdmin: boolean }) { - return ( -
- - {isAdmin && } -
- ); -} diff --git a/src/ui/settings/page-filter.ts b/src/ui/settings/page-filter.ts deleted file mode 100644 index 991d4bc46..000000000 --- a/src/ui/settings/page-filter.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { useEffect, useState, type RefObject } from "react"; - -export const HIDDEN_ATTR = "data-search-hidden"; -const HIGHLIGHT = "settings-search"; -const BLOCK = ".bg-card, [data-setting-row]"; - -function matches(el: Element, needle: string) { - return (el.textContent ?? "").toLowerCase().includes(needle); -} - -/** Visible blocks with no other block above them inside root. */ -function topBlocks(root: HTMLElement, blocks: Element[], selector: string) { - return blocks.filter((el) => { - let parent = el.parentElement; - while (parent && parent !== root) { - if (parent.matches(selector) || parent.classList.contains("hidden")) - return false; - parent = parent.parentElement; - } - return true; - }); -} - -/** - * Hides the cards and rows on a settings page that do not contain the query. - * A card whose own text matches keeps every row; otherwise only its matching - * rows stay. Returns how many cards are still showing. - */ -export function filterSettingsPage( - root: HTMLElement, - query: string, - blockSelector: string = BLOCK, -): number { - for (const el of root.querySelectorAll(`[${HIDDEN_ATTR}]`)) { - el.removeAttribute(HIDDEN_ATTR); - } - const needle = query.trim().toLowerCase(); - const blocks = [...root.querySelectorAll(blockSelector)]; - const cards = topBlocks(root, blocks, blockSelector); - if (!needle) return cards.length; - - let shown = 0; - for (const card of cards) { - if (!matches(card, needle)) { - card.setAttribute(HIDDEN_ATTR, ""); - continue; - } - shown++; - const rows = [...card.querySelectorAll("[data-setting-row]")].filter( - (row) => row !== card, - ); - if (!rows.some((row) => matches(row, needle))) continue; - for (const row of rows) { - if (!matches(row, needle)) row.setAttribute(HIDDEN_ATTR, ""); - } - for (const inner of card.querySelectorAll(".bg-card")) { - if (inner !== card && !matches(inner, needle)) { - inner.setAttribute(HIDDEN_ATTR, ""); - } - } - } - return shown; -} - -type HighlightRegistry = Map; - -function highlights(): HighlightRegistry | undefined { - const css = (globalThis as { CSS?: { highlights?: HighlightRegistry } }).CSS; - return css?.highlights; -} - -/** Marks every match with the CSS highlight API where the browser has it. */ -function highlightMatches(root: HTMLElement, query: string) { - const registry = highlights(); - const Highlight = ( - globalThis as { Highlight?: new (...r: Range[]) => unknown } - ).Highlight; - if (!registry || !Highlight) return; - registry.delete(HIGHLIGHT); - const needle = query.trim().toLowerCase(); - if (!needle) return; - const ranges: Range[] = []; - const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT); - for (let node = walker.nextNode(); node; node = walker.nextNode()) { - const text = node.textContent?.toLowerCase() ?? ""; - let at = text.indexOf(needle); - while (at !== -1) { - const range = document.createRange(); - range.setStart(node, at); - range.setEnd(node, at + needle.length); - ranges.push(range); - at = text.indexOf(needle, at + needle.length); - } - } - registry.set(HIGHLIGHT, new Highlight(...ranges)); -} - -/** - * Keeps a settings page filtered while its content loads and changes. - * Returns false when the query hides everything. - */ -export function useSettingsPageFilter( - rootRef: RefObject, - query: string, - pageKey: string, - blockSelector: string = BLOCK, - onFiltered?: (root: HTMLElement) => void, -): boolean { - const [anyShown, setAnyShown] = useState(true); - useEffect(() => { - const root = rootRef.current; - if (!root) return; - let frame = 0; - const run = () => { - cancelAnimationFrame(frame); - frame = requestAnimationFrame(() => { - setAnyShown( - filterSettingsPage(root, query, blockSelector) > 0 || !query.trim(), - ); - highlightMatches(root, query); - onFiltered?.(root); - }); - }; - run(); - if (!query.trim()) return () => cancelAnimationFrame(frame); - const observer = new MutationObserver(run); - observer.observe(root, { - childList: true, - subtree: true, - characterData: true, - }); - return () => { - observer.disconnect(); - cancelAnimationFrame(frame); - highlights()?.delete(HIGHLIGHT); - }; - }, [rootRef, query, pageKey, blockSelector, onFiltered]); - return anyShown; -} diff --git a/src/ui/settings/settings-embed.ts b/src/ui/settings/settings-embed.ts deleted file mode 100644 index 2316ccfa4..000000000 --- a/src/ui/settings/settings-embed.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { createContext, useContext } from "react"; - -/** - * True inside a Settings tab page. Panels built from accordion sections then - * show only the open one, flat, since the page already names it. - */ -export const SettingsEmbedContext = createContext(false); - -export function useSettingsEmbedded(): boolean { - return useContext(SettingsEmbedContext); -} diff --git a/src/ui/settings/settings-pages.ts b/src/ui/settings/settings-pages.ts deleted file mode 100644 index b6372a6a4..000000000 --- a/src/ui/settings/settings-pages.ts +++ /dev/null @@ -1,264 +0,0 @@ -import { - Database, - FileText, - FlaskConical, - Globe, - KeyRound, - Keyboard, - Lock, - Monitor, - Palette, - Server, - Settings, - Shield, - SlidersHorizontal, - User, - Users, - type LucideIcon, -} from "lucide-react"; -import type { AdminSection } from "@/types/ui-types"; -import type { DocsPage } from "@/lib/docs"; -import { SETTINGS_SEARCH_INDEX } from "./settings-search-index"; - -export type SettingsBand = "you" | "app" | "plugins" | "instance"; - -export const SETTINGS_BAND_ORDER: SettingsBand[] = [ - "you", - "app", - "plugins", - "instance", -]; - -export interface SettingsPage { - id: string; - band: SettingsBand; - labelKey: string; - /** Already translated, for plugin pages named after the plugin. */ - label?: string; - icon: LucideIcon; - /** Only for admins. */ - admin?: boolean; - /** Also shown to non-admins in the desktop app. */ - desktopToo?: boolean; - /** Left out of the desktop app. */ - browserOnly?: boolean; - /** The profile section this page shows. */ - profileSection?: string; - /** The admin section this page shows. */ - adminSection?: AdminSection; - /** A plugin's settings page. */ - pluginId?: string; - /** The docs page for this settings page. Plugin pages use the plugin's docs. */ - docs?: DocsPage; - /** i18n keys whose text search matches. */ - searchKeys: string[]; -} - -function core( - page: Omit & { indexId?: string }, -): SettingsPage { - return { - ...page, - searchKeys: SETTINGS_SEARCH_INDEX[page.indexId ?? page.id] ?? [], - }; -} - -export const CORE_SETTINGS_PAGES: SettingsPage[] = [ - core({ - id: "account", - docs: "account", - band: "you", - labelKey: "settings.account", - icon: User, - profileSection: "account", - }), - core({ - id: "security", - docs: "accountSecurity", - band: "you", - labelKey: "settings.security", - icon: Shield, - profileSection: "security", - browserOnly: true, - }), - core({ - id: "api-keys", - docs: "apiKeys", - band: "you", - labelKey: "settings.apiKeys", - icon: KeyRound, - profileSection: "api-keys", - }), - core({ - id: "data", - docs: "accountData", - band: "you", - labelKey: "settings.data", - icon: Database, - profileSection: "data", - }), - core({ - id: "interface", - docs: "interfaceSettings", - band: "app", - labelKey: "settings.interface", - icon: SlidersHorizontal, - profileSection: "interface", - }), - core({ - id: "appearance", - docs: "appearance", - band: "app", - labelKey: "settings.appearance", - icon: Palette, - profileSection: "appearance", - }), - core({ - id: "keybindings", - docs: "keybindings", - band: "app", - labelKey: "settings.keybindings", - icon: Keyboard, - profileSection: "keybindings", - }), - core({ - id: "admin-general", - docs: "adminGeneral", - band: "instance", - labelKey: "settings.adminGeneral", - icon: Settings, - admin: true, - adminSection: "general", - }), - core({ - id: "updates", - docs: "updating", - band: "instance", - labelKey: "settings.updates.title", - icon: FlaskConical, - admin: true, - desktopToo: true, - }), - core({ - id: "admin-users", - docs: "users", - band: "instance", - labelKey: "settings.adminUsers", - icon: Users, - admin: true, - adminSection: "users", - }), - core({ - id: "admin-sessions", - docs: "sessions", - band: "instance", - labelKey: "settings.adminSessions", - icon: Monitor, - admin: true, - adminSection: "sessions", - }), - core({ - id: "admin-roles", - docs: "roles", - band: "instance", - labelKey: "settings.adminRoles", - icon: Lock, - admin: true, - adminSection: "roles", - }), - core({ - id: "admin-host-defaults", - docs: "hostDefaults", - band: "instance", - labelKey: "settings.adminHostDefaults", - icon: Server, - admin: true, - adminSection: "host-defaults", - }), - core({ - id: "admin-branding", - docs: "branding", - band: "instance", - labelKey: "settings.adminBranding", - icon: Palette, - admin: true, - adminSection: "branding", - }), - core({ - id: "admin-database", - docs: "adminDatabase", - band: "instance", - labelKey: "settings.adminDatabase", - icon: Database, - admin: true, - adminSection: "database", - }), - core({ - id: "admin-ssl", - docs: "adminSsl", - band: "instance", - labelKey: "settings.adminSsl", - icon: Globe, - admin: true, - adminSection: "ssl", - }), - core({ - id: "admin-api-keys", - docs: "apiKeys", - band: "instance", - labelKey: "settings.adminApiKeys", - icon: KeyRound, - admin: true, - adminSection: "api-keys", - }), - core({ - id: "admin-audit-log", - docs: "auditLog", - band: "instance", - labelKey: "settings.adminAuditLog", - icon: FileText, - admin: true, - adminSection: "audit-log", - }), -]; - -/** The pages this user can reach, in nav order. */ -export function visibleSettingsPages( - pages: SettingsPage[], - { isAdmin, isElectron }: { isAdmin: boolean; isElectron: boolean }, -): SettingsPage[] { - return pages.filter( - (page) => - (!page.admin || isAdmin || (page.desktopToo && isElectron)) && - (!page.browserOnly || !isElectron), - ); -} - -export interface SettingsSearchHit { - page: SettingsPage; - /** The first matching phrase, to show under the page name. */ - match: string; -} - -/** Pages whose name or any label on them contains the query. */ -export function searchSettingsPages( - pages: SettingsPage[], - query: string, - translate: (key: string) => string, -): SettingsSearchHit[] { - const needle = query.trim().toLowerCase(); - if (!needle) return pages.map((page) => ({ page, match: "" })); - const hits: SettingsSearchHit[] = []; - for (const page of pages) { - const label = page.label ?? translate(page.labelKey); - if (label.toLowerCase().includes(needle)) { - hits.push({ page, match: "" }); - continue; - } - const phrase = page.searchKeys - .map((key) => translate(key)) - .find((text) => text.toLowerCase().includes(needle)); - if (phrase) hits.push({ page, match: phrase }); - } - return hits; -} diff --git a/src/ui/settings/settings-search-index.ts b/src/ui/settings/settings-search-index.ts deleted file mode 100644 index 0de7a98d8..000000000 --- a/src/ui/settings/settings-search-index.ts +++ /dev/null @@ -1,488 +0,0 @@ -// Generated by scripts/generate-settings-search-index.cjs. Do not edit. - -/** The i18n keys each core settings section shows, for search. */ -export const SETTINGS_SEARCH_INDEX: Record = { - "account": [ - "newUi.sidebar.userProfile.authMethodLabel", - "newUi.sidebar.userProfile.cliDescription", - "newUi.sidebar.userProfile.cliLearnMore", - "newUi.sidebar.userProfile.cliTitle", - "newUi.sidebar.userProfile.deleteAccount", - "newUi.sidebar.userProfile.deleteAccountDescription", - "newUi.sidebar.userProfile.deleteButton", - "newUi.sidebar.userProfile.desktopProfileDescription", - "newUi.sidebar.userProfile.desktopProfileTitle", - "newUi.sidebar.userProfile.linkedProfileDescription", - "newUi.sidebar.userProfile.linkedProfileTitle", - "newUi.sidebar.userProfile.manageSync", - "newUi.sidebar.userProfile.onBetaDescription", - "newUi.sidebar.userProfile.onBetaTitle", - "newUi.sidebar.userProfile.openUpdates", - "newUi.sidebar.userProfile.roleLabel", - "newUi.sidebar.userProfile.sectionAccount", - "newUi.sidebar.userProfile.sendBetaFeedback", - "newUi.sidebar.userProfile.setUpSync", - "newUi.sidebar.userProfile.tryBetaDescription", - "newUi.sidebar.userProfile.tryBetaTitle", - "newUi.sidebar.userProfile.twoFaLabel", - "newUi.sidebar.userProfile.twoFaOff", - "newUi.sidebar.userProfile.twoFaOn", - "newUi.sidebar.userProfile.usernameLabel", - "newUi.sidebar.userProfile.versionLabel", - ], - "admin-api-keys": [ - "admin.apiKeyCreatedWarning", - "admin.apiKeyExpiresAt", - "admin.apiKeyName", - "admin.apiKeyNoExpiry", - "admin.apiKeySelectUser", - "admin.apiKeyUser", - "admin.apiKeysCliHint", - "admin.apiKeysCliLink", - "admin.apiKeysCount_other", - "admin.apiKeysDocsLink", - "admin.copiedToClipboard", - "admin.createKey", - "admin.createRole", - "admin.creating", - "admin.done", - "admin.newApiKey", - "admin.revokeKey", - "admin.revokeKeyConfirm", - "admin.revokeKeyFailed", - "admin.revokeKeySuccess", - "admin.revokedBadge", - "admin.sectionApiKeys", - "common.cancel", - "placeholders.apiKeyName", - ], - "admin-audit-log": [ - "admin.auditForwardingDesc", - "admin.auditForwardingEnvNotice", - "admin.auditForwardingSaveError", - "admin.auditForwardingSaved", - "admin.auditForwardingTitle", - "admin.auditForwardingToken", - "admin.auditForwardingTokenStored", - "admin.auditLogClearFilters", - "admin.auditLogEmpty", - "admin.auditLogFailed", - "admin.auditLogFilterAction", - "admin.auditLogFilterAll", - "admin.auditLogFilterFrom", - "admin.auditLogFilterResourceType", - "admin.auditLogFilterStatus", - "admin.auditLogFilterTo", - "admin.auditLogFilterUser", - "admin.auditLogIp", - "admin.auditLogPage", - "admin.auditLogResourceId", - "admin.auditLogSuccess", - "admin.auditLogTotal", - "admin.sectionAuditLog", - "common.save", - ], - "admin-branding": [ - "admin.brandingAppName", - "admin.brandingAppNameDesc", - "admin.brandingLogo", - "admin.brandingLogoDesc", - "admin.brandingLogoInvalid", - "admin.brandingLogoReset", - "admin.brandingLogoUpload", - "admin.brandingTagline", - "admin.brandingTaglineDesc", - "admin.sectionBranding", - "common.loading", - "common.save", - "common.saving", - ], - "admin-database": [ - "admin.changeFile", - "admin.export", - "admin.exportDatabase", - "admin.exportDatabaseDesc", - "admin.exporting", - "admin.import", - "admin.importDatabase", - "admin.importDatabaseDesc", - "admin.importDatabaseSelected", - "admin.importing", - "admin.sectionDatabase", - "admin.selectFile", - ], - "admin-general": [ - "admin.allowPasswordLogin", - "admin.allowPasswordLoginDesc", - "admin.allowPasswordReset", - "admin.allowPasswordResetDesc", - "admin.allowRegistration", - "admin.allowRegistrationDesc", - "admin.externalAutoProvision", - "admin.externalAutoProvisionDesc", - "admin.hours", - "admin.logLevel", - "admin.monitoringDefaults", - "admin.notificationPrivateEndpoints", - "admin.notificationPrivateEndpointsDesc", - "admin.passwordLoginForced", - "admin.sec", - "admin.secondFactorAfterExternalLogin", - "admin.secondFactorAfterExternalLoginDesc", - "admin.sectionGeneral", - "admin.sessionTimeout", - "admin.sessionTimeoutRange", - "admin.statusCheck", - "common.save", - "plugins.manager.developer.enable", - "plugins.manager.developer.enableBody", - "plugins.manager.developer.enableTitle", - "plugins.manager.developer.hint", - "plugins.manager.developer.signedOnly", - "plugins.manager.developer.title", - "plugins.manager.errors.developerMode", - ], - "admin-host-defaults": [ - "admin.hostTags", - "admin.hostTagsDesc", - "admin.hostTagsError", - "admin.sectionHostDefaults", - "common.remove", - "hostDefaults.adminSectionDescription", - "hostDefaults.editServerDefaults", - "hosts.addTag", - ], - "admin-roles": [ - "admin.createRole", - "admin.creating", - "admin.customBadge", - "admin.deleteRoleConfirm", - "admin.deleteRoleSuccess", - "admin.newRole", - "admin.roleDescription", - "admin.roleDisplayName", - "admin.roleName", - "admin.rolePermissions.count_other", - "admin.rolePermissions.editAction", - "admin.rolePermissions.loadError", - "admin.rolePermissions.pluginDisabled", - "admin.rolePermissions.save", - "admin.rolePermissions.saveError", - "admin.rolePermissions.saved", - "admin.rolePermissions.saving", - "admin.rolesCount_other", - "admin.sectionRoles", - "admin.systemBadge", - "common.cancel", - "common.optional", - ], - "admin-sessions": [ - "admin.revokeAll", - "admin.revokeAllSessionsConfirm", - "admin.revokeAllSessionsFailed", - "admin.revokeAllSessionsSuccess", - "admin.revokeSession", - "admin.revokeSessionConfirm", - "admin.revokeSessionFailed", - "admin.sectionSessions", - "admin.sessionActive", - "admin.sessionExpires", - "admin.sessionsActive_other", - "admin.youBadge", - ], - "admin-ssl": [ - "admin.sectionSsl", - "admin.sslCertExpiresAt", - "admin.sslCertStatus", - "admin.sslCertStatusExpired", - "admin.sslCertStatusExpiring", - "admin.sslCertStatusNone", - "admin.sslCertStatusValid", - "admin.sslDescription", - "admin.sslDocsLink", - "admin.sslInfoNote", - "admin.sslIssuer", - "admin.sslManualCert", - "admin.sslManualCertPlaceholder", - "admin.sslManualDesc", - "admin.sslManualKey", - "admin.sslManualKeyPlaceholder", - "admin.sslManualTitle", - "admin.sslManualUpload", - "admin.sslManualUploadLoading", - "admin.sslNames", - "admin.sslNotRenewed", - "admin.sslRenewedBy", - "admin.sslSelfSigned", - ], - "admin-users": [ - "admin.addRole", - "admin.adminBadge", - "admin.adminStatusAdministrator", - "admin.adminStatusRegularUser", - "admin.assignRoleFailed", - "admin.authTypeDual", - "admin.authTypeExternal", - "admin.authTypeLocal", - "admin.createUser", - "admin.createUserDesc", - "admin.createUserEnterUsername", - "admin.createUserPassword", - "admin.createUserPasswordHint", - "admin.createUserSubmit", - "admin.createUserTitle", - "admin.createUserUsername", - "admin.creating", - "admin.deleteUser", - "admin.deleteUserConfirm", - "admin.deleteUserFailed", - "admin.deleteUserSuccess", - "admin.deleteUserWarning", - "admin.deleting", - "admin.editUserAdminStatus", - "admin.editUserAuthType", - "admin.editUserDesc", - "admin.editUserTitle", - "admin.editUserUserId", - "admin.editUserUsername", - "admin.linkAccountDesc", - "admin.linkAccountDescLocal", - "admin.linkAccountEffect1", - "admin.linkAccountEffect2", - "admin.linkAccountEffect3", - "admin.linkAccountExternalNotFound", - "admin.linkAccountExternalPlaceholder", - "admin.linkAccountExternalUsername", - "admin.linkAccountFailed", - "admin.linkAccountInProgress", - "admin.linkAccountSuccess", - "admin.linkAccountTargetPlaceholder", - "admin.linkAccountTargetUsername", - "admin.linkAccountTitle", - "admin.linkAccountWarningTitle", - "admin.linkAccounts", - "admin.manageUserData", - "admin.noCustomRoles", - "admin.noUsers", - "admin.noUsersMatch", - "admin.pageOf", - "admin.removeRoleFailed", - "admin.revoke", - "admin.revokeAllUserSessions", - "admin.revokeAllUserSessionsDesc", - "admin.searchUsers", - "admin.sectionUsers", - "admin.unlinkAccount", - "admin.unlinkAccountDesc", - "admin.unlinkAccountFailed", - "admin.unlinkAccountInProgress", - "admin.unlinkAccountSuccess", - "admin.unlinkAccountTitle", - "admin.unlinkAccountWarning", - "admin.userAdminAccess", - "admin.userAdminAccessDesc", - "admin.userRoles", - "admin.usersCount_other", - "common.cancel", - "common.loading", - "common.next", - "common.previous", - "manage.cannotBeUndone", - "placeholders.enterPassword", - ], - "api-keys": [ - "admin.revokeKey", - "admin.revokeKeyConfirm", - "newUi.sidebar.userProfile.apiKeyActive", - "newUi.sidebar.userProfile.apiKeyCount_other", - "newUi.sidebar.userProfile.apiKeyCreateFailed", - "newUi.sidebar.userProfile.apiKeyCreated", - "newUi.sidebar.userProfile.apiKeyCreatedWarning", - "newUi.sidebar.userProfile.apiKeyExpires", - "newUi.sidebar.userProfile.apiKeyNameLabel", - "newUi.sidebar.userProfile.apiKeyNamePlaceholder", - "newUi.sidebar.userProfile.apiKeyNameRequired", - "newUi.sidebar.userProfile.apiKeyPermissionsHint", - "newUi.sidebar.userProfile.apiKeyRevokeFailed", - "newUi.sidebar.userProfile.apiKeyRevoked", - "newUi.sidebar.userProfile.apiKeyUsageHint", - "newUi.sidebar.userProfile.apiKeyUsageHintHeader", - "newUi.sidebar.userProfile.apiKeyUser", - "newUi.sidebar.userProfile.cancel", - "newUi.sidebar.userProfile.copiedToClipboard", - "newUi.sidebar.userProfile.copyApiKey", - "newUi.sidebar.userProfile.createApiKeyDescription", - "newUi.sidebar.userProfile.createApiKeyTitle", - "newUi.sidebar.userProfile.createKey", - "newUi.sidebar.userProfile.done", - "newUi.sidebar.userProfile.expiryDateLabel", - "newUi.sidebar.userProfile.newKey", - "newUi.sidebar.userProfile.noApiKeys", - "newUi.sidebar.userProfile.optional", - "newUi.sidebar.userProfile.sectionApiKeys", - ], - "appearance": [ - "looks.layoutLabel", - "newUi.sidebar.userProfile.accentColorLabel", - "newUi.sidebar.userProfile.appRailHoverPushesContent", - "newUi.sidebar.userProfile.appRailHoverPushesContentDesc", - "newUi.sidebar.userProfile.colorPickerTooltip", - "newUi.sidebar.userProfile.commandPalette", - "newUi.sidebar.userProfile.commandPaletteDesc", - "newUi.sidebar.userProfile.confirmTabClose", - "newUi.sidebar.userProfile.confirmTabCloseDesc", - "newUi.sidebar.userProfile.disableUpdateChecks", - "newUi.sidebar.userProfile.disableUpdateChecksDesc", - "newUi.sidebar.userProfile.expandAppRailOnHover", - "newUi.sidebar.userProfile.expandAppRailOnHoverDesc", - "newUi.sidebar.userProfile.fontSizeLabel", - "newUi.sidebar.userProfile.interfaceFontDescription", - "newUi.sidebar.userProfile.interfaceFontLabel", - "newUi.sidebar.userProfile.keyboardShortcuts", - "newUi.sidebar.userProfile.keyboardShortcutsDescription", - "newUi.sidebar.userProfile.languageLabel", - "newUi.sidebar.userProfile.manageShortcuts", - "newUi.sidebar.userProfile.navigationTabsDesc", - "newUi.sidebar.userProfile.pinAppRail", - "newUi.sidebar.userProfile.pinAppRailDesc", - "newUi.sidebar.userProfile.reopenTabsOnLogin", - "newUi.sidebar.userProfile.reopenTabsOnLoginDesc", - "newUi.sidebar.userProfile.sectionAppearance", - "newUi.sidebar.userProfile.settingsAppRail", - "newUi.sidebar.userProfile.settingsNavigation", - "newUi.sidebar.userProfile.settingsTabsAndShortcuts", - "newUi.sidebar.userProfile.settingsUpdates", - "newUi.sidebar.userProfile.showPinAppRailButton", - "newUi.sidebar.userProfile.showPinAppRailButtonDesc", - "newUi.sidebar.userProfile.showTabNumbers", - "newUi.sidebar.userProfile.showTabNumbersDesc", - "newUi.sidebar.userProfile.sidebarSettingsMoved", - "newUi.sidebar.userProfile.themeLabel", - ], - "data": [ - "newUi.sidebar.userProfile.cancel", - "newUi.sidebar.userProfile.changeFile", - "newUi.sidebar.userProfile.confirmPasswordDeletePlaceholder", - "newUi.sidebar.userProfile.confirmPasswordLabel", - "newUi.sidebar.userProfile.deleteAccount", - "newUi.sidebar.userProfile.deleteAccountPermanent", - "newUi.sidebar.userProfile.deleteAccountWarning", - "newUi.sidebar.userProfile.deleting", - "newUi.sidebar.userProfile.export", - "newUi.sidebar.userProfile.exportData", - "newUi.sidebar.userProfile.exportDataDesc", - "newUi.sidebar.userProfile.exporting", - "newUi.sidebar.userProfile.import", - "newUi.sidebar.userProfile.importData", - "newUi.sidebar.userProfile.importDataDesc", - "newUi.sidebar.userProfile.importDataSelected", - "newUi.sidebar.userProfile.importing", - "newUi.sidebar.userProfile.sectionData", - "newUi.sidebar.userProfile.selectFile", - ], - "interface": [ - "newUi.sidebar.userProfile.interfacePresetDesc", - "newUi.sidebar.userProfile.presetClearOverrides", - "newUi.sidebar.userProfile.presetConfirmApply", - "newUi.sidebar.userProfile.presetConfirmDesc", - "newUi.sidebar.userProfile.presetConfirmTitle", - "newUi.sidebar.userProfile.presetOverridesTitle", - "newUi.sidebar.userProfile.presetRevertArea", - "newUi.sidebar.userProfile.runSetupAgainButton", - "newUi.sidebar.userProfile.runSetupAgainDesc", - "newUi.sidebar.userProfile.sectionInterface", - ], - "keybindings": [ - "newUi.sidebar.keybindings.actionLabel", - "newUi.sidebar.keybindings.actionRequiredError", - "newUi.sidebar.keybindings.addBinding", - "newUi.sidebar.keybindings.addBindingTitle", - "newUi.sidebar.keybindings.cancel", - "newUi.sidebar.keybindings.comboRequiredError", - "newUi.sidebar.keybindings.conflictWarning", - "newUi.sidebar.keybindings.customHeading", - "newUi.sidebar.keybindings.customize", - "newUi.sidebar.keybindings.customizedBadge", - "newUi.sidebar.keybindings.defaultBadge", - "newUi.sidebar.keybindings.defaultsHeading", - "newUi.sidebar.keybindings.deleteConfirm", - "newUi.sidebar.keybindings.description", - "newUi.sidebar.keybindings.editBindingTitle", - "newUi.sidebar.keybindings.loading", - "newUi.sidebar.keybindings.noCustomBindings", - "newUi.sidebar.keybindings.pressKeysPlaceholder", - "newUi.sidebar.keybindings.pressKeysToRecord", - "newUi.sidebar.keybindings.recording", - "newUi.sidebar.keybindings.resetAllConfirm", - "newUi.sidebar.keybindings.resetAllToDefaults", - "newUi.sidebar.keybindings.resetToDefault", - "newUi.sidebar.keybindings.saveBinding", - "newUi.sidebar.keybindings.saveError", - "newUi.sidebar.keybindings.unavailableAction", - ], - "security": [ - "newUi.sidebar.userProfile.changePassword", - "newUi.sidebar.userProfile.confirmPasswordLabel", - "newUi.sidebar.userProfile.confirmPasswordPlaceholder", - "newUi.sidebar.userProfile.currentPasswordLabel", - "newUi.sidebar.userProfile.currentPasswordPlaceholder", - "newUi.sidebar.userProfile.newPasswordLabel", - "newUi.sidebar.userProfile.newPasswordPlaceholder", - "newUi.sidebar.userProfile.passwordFieldsRequired", - "newUi.sidebar.userProfile.passwordMismatch", - "newUi.sidebar.userProfile.passwordTooShort", - "newUi.sidebar.userProfile.passwordUpdateFailed", - "newUi.sidebar.userProfile.passwordUpdated", - "newUi.sidebar.userProfile.sectionSecurity", - "newUi.sidebar.userProfile.updatePassword", - ], - "updates": [ - "desktopUpdates.checkNow", - "desktopUpdates.download", - "desktopUpdates.manualModeHint", - "desktopUpdates.mode", - "desktopUpdates.modeAutomatic", - "desktopUpdates.modeHint", - "desktopUpdates.modeNever", - "desktopUpdates.modePrompt", - "desktopUpdates.restart", - "desktopUpdates.status", - "desktopUpdates.statusAvailable", - "desktopUpdates.statusChecking", - "desktopUpdates.statusDownloading", - "desktopUpdates.statusError", - "desktopUpdates.statusIdle", - "desktopUpdates.statusReady", - "desktopUpdates.statusUpToDate", - "desktopUpdates.title", - "settings.updates.allPluginsBeta", - "settings.updates.allPluginsStable", - "settings.updates.backToStable", - "settings.updates.betaIntro", - "settings.updates.betaProgram", - "settings.updates.copied", - "settings.updates.copy", - "settings.updates.copyFailed", - "settings.updates.desktopInstall", - "settings.updates.dockerInstall", - "settings.updates.downloadBeta", - "settings.updates.feedback", - "settings.updates.feedbackHint", - "settings.updates.howToInstall", - "settings.updates.learnMore", - "settings.updates.newestBeta", - "settings.updates.newestStable", - "settings.updates.noRelease", - "settings.updates.openPlugins", - "settings.updates.pluginBetas", - "settings.updates.pluginBetasIntro", - "settings.updates.releases", - "settings.updates.runningBetaBuild", - "settings.updates.saveFailed", - "settings.updates.sendFeedback", - "settings.updates.termixBetas", - "settings.updates.termixBetasHint", - "settings.updates.thisVersion", - "settings.updates.waitingForStable", - ], -}; diff --git a/src/ui/settings/sync/SyncPanel.tsx b/src/ui/settings/sync/SyncPanel.tsx deleted file mode 100644 index a68a9ac64..000000000 --- a/src/ui/settings/sync/SyncPanel.tsx +++ /dev/null @@ -1,635 +0,0 @@ -import { InlineView } from "@/components/surface/surface-scope"; -import { - useCallback, - useEffect, - useMemo, - useState, - type ReactNode, -} from "react"; -import { useTranslation } from "react-i18next"; -import { toast } from "sonner"; -import { - AlertTriangle, - Cloud, - CloudOff, - Loader2, - RefreshCw, - Unlink, -} from "lucide-react"; -import { Button } from "@/components/button"; -import { Switch } from "@/components/switch"; -import { useSyncStatus } from "@/hooks/use-sync-status"; -import { refreshSyncStatus, setSyncStatus } from "@/lib/sync-status"; -import { notifySyncChanged } from "@/lib/linked-server"; -import { invalidateServerStatusCache } from "@/lib/hosts-request-cache"; -import { - getSyncConflicts, - getSyncErrors, - retrySyncErrors, - settleSyncConflict, - syncNow, - unlinkServer, - updateSyncSettings, - type SyncBasicAuth, - type SyncConflictItem, - type SyncEntityInfo, - type SyncErrorItem, - type SyncProxyHeader, - type SyncStatus, -} from "@/api/sync-api"; -import { LinkServerDialog } from "./LinkServerDialog"; -import { ProxySettingsFields } from "./ProxySettingsFields"; - -type DesktopSettings = { defaultConnectionOrigin: "local" | "remote" }; - -function Section({ - title, - description, - children, -}: { - title: string; - description?: string; - children: ReactNode; -}) { - return ( -
-
- - {title} - - {description && ( - - {description} - - )} -
- {children} -
- ); -} - -function useRelativeTime() { - const { t } = useTranslation(); - return (value: string | null | undefined) => { - if (!value) return t("sync.never"); - const seconds = Math.max( - 0, - Math.round((Date.now() - new Date(value).getTime()) / 1000), - ); - if (seconds < 60) return t("sync.justNow"); - if (seconds < 3600) - return t("sync.minutesAgo", { count: Math.round(seconds / 60) }); - if (seconds < 86400) - return t("sync.hoursAgo", { count: Math.round(seconds / 3600) }); - return new Date(value).toLocaleString(); - }; -} - -function entityLabel( - t: (key: string, options?: Record) => string, - entity: SyncEntityInfo, -): string { - return t(`sync.entities.${entity.type}`, { defaultValue: entity.type }); -} - -export function SyncPanel() { - const { t } = useTranslation(); - const status = useSyncStatus(); - const relativeTime = useRelativeTime(); - const [linkOpen, setLinkOpen] = useState(false); - const [reloginOpen, setReloginOpen] = useState(false); - const [unlinkOpen, setUnlinkOpen] = useState(false); - const [keepData, setKeepData] = useState(true); - const [busy, setBusy] = useState(null); - const [conflicts, setConflicts] = useState([]); - const [errors, setErrors] = useState([]); - const [desktopSettings, setDesktopSettings] = useState({ - defaultConnectionOrigin: "local", - }); - const [proxyDraft, setProxyDraft] = useState<{ - customHeaders: SyncProxyHeader[]; - basicAuth: SyncBasicAuth | null; - allowInvalidCertificate: boolean; - } | null>(null); - - const apply = useCallback((next: SyncStatus) => { - setSyncStatus(next); - notifySyncChanged(); - }, []); - - useEffect(() => { - window.electronAPI - ?.invoke?.("get-desktop-settings") - .then((settings) => { - if (settings) setDesktopSettings(settings as DesktopSettings); - }) - .catch(() => {}); - }, []); - - const conflictCount = status?.conflicts ?? 0; - const errorCount = status?.errors ?? 0; - useEffect(() => { - if (!status?.linked) return; - getSyncConflicts() - .then(setConflicts) - .catch(() => {}); - }, [status?.linked, conflictCount, status?.lastSyncAt]); - useEffect(() => { - if (!status?.linked) return; - getSyncErrors() - .then(setErrors) - .catch(() => {}); - }, [status?.linked, errorCount, status?.lastSyncAt]); - - const run = async (key: string, action: () => Promise) => { - setBusy(key); - try { - await action(); - } catch { - toast.error(t("sync.actionFailed")); - } finally { - setBusy(null); - } - }; - - const groups = useMemo(() => { - const byOwner = new Map(); - for (const entity of status?.entities ?? []) { - const key = entity.owner === "core" ? "core" : entity.owner; - const list = byOwner.get(key) ?? []; - list.push(entity); - byOwner.set(key, list); - } - return [...byOwner.entries()].sort(([a], [b]) => - a === "core" ? -1 : b === "core" ? 1 : a.localeCompare(b), - ); - }, [status?.entities]); - - if (!status) { - return ( -
- -
- ); - } - - const linkDialog = ( - - ); - - if (!status.linked) { - return ( -
-
-
- - {t("sync.unlinkedTitle")} -
-

- {t("sync.unlinkedBody")} -

-
    -
  • {t("sync.unlinkedPointHosts")}
  • -
  • {t("sync.unlinkedPointOffline")}
  • -
  • {t("sync.unlinkedPointAccount")}
  • -
- -
- {linkDialog} -
- ); - } - - const state = status.status ?? "idle"; - const stateText = - state === "syncing" - ? t("sync.state.syncing") - : state === "offline" - ? t("sync.state.offline") - : state === "error" - ? t("sync.state.error") - : state === "signed_out" - ? t("sync.state.signedOut") - : t("sync.state.synced", { time: relativeTime(status.lastSyncAt) }); - - const toggleType = (type: string, enabled: boolean) => - run(`type:${type}`, async () => { - const disabled = new Set( - (status.entities ?? []) - .filter((entity) => !entity.enabled) - .map((entity) => entity.type), - ); - if (enabled) disabled.delete(type); - else disabled.add(type); - apply(await updateSyncSettings({ disabledTypes: [...disabled] })); - }); - - const handleOriginChange = async (origin: "local" | "remote") => { - const next = { ...desktopSettings, defaultConnectionOrigin: origin }; - setDesktopSettings(next); - await window.electronAPI?.invoke?.("save-desktop-settings", next); - invalidateServerStatusCache(); - window.dispatchEvent(new CustomEvent("hosts:refresh")); - }; - - const draft = proxyDraft ?? { - customHeaders: status.customHeaders ?? [], - basicAuth: status.basicAuth ?? null, - allowInvalidCertificate: !!status.allowInvalidCertificate, - }; - - return ( -
-
-
- -
- - {status.serverName || t("sync.server")} - - - {status.serverUrl} - -
-
-
-
- - {t("sync.account")} - - - {status.account?.username || "-"} - -
-
- - {t("sync.status")} - - - {state === "syncing" && ( - - )} - {stateText} - -
-
- {status.lastError && state !== "idle" && state !== "syncing" && ( -

- {status.lastError} -

- )} - {!!status.pending && ( -

- {t("sync.pending", { count: status.pending })} -

- )} -
- {state === "signed_out" ? ( - - ) : ( - - )} - -
-
- - {conflicts.length > 0 && ( -
- {conflicts.map((conflict) => ( -
-
- - {conflict.name} - - - {t(`sync.entities.${conflict.entityType}`, { - defaultValue: conflict.entityType, - })} - -
-
- - -
-
- ))} -
- )} - - {errors.length > 0 && ( -
- {errors.map((error) => ( -
- -
- - {t(`sync.entities.${error.entityType}`, { - defaultValue: error.entityType, - })} - - - {error.reason === "permission" - ? t("sync.errorPermission") - : error.reason} - -
-
- ))} - -
- )} - -
- {groups.map(([owner, entities]) => ( -
- - {owner === "core" - ? t("sync.coreGroup") - : (entities[0]?.ownerName ?? owner)} - - {entities.map((entity) => ( -
-
- {entityLabel(t, entity)} - {!entity.onServer && ( - - {t("sync.notOnServer")} - - )} - {entity.onServer && !entity.onDevice && ( - - {t("sync.notOnDevice")} - - )} -
- - void toggleType(entity.type, checked) - } - /> -
- ))} -
- ))} -

- {t("sync.localOnlyHint")} -

-
- -
-
- {(["local", "remote"] as const).map((origin) => ( - - ))} -
-
- -
- setProxyDraft({ ...draft, ...next })} - /> -
-
- - {t("sync.proxy.allowInvalidCertificate")} - - - {t("sync.proxy.allowInvalidCertificateHint")} - -
- - setProxyDraft({ ...draft, allowInvalidCertificate: checked }) - } - /> -
- {proxyDraft && ( - - )} -
- - - - - - -
- } - > -

- {t("sync.unlinkDescription")} -

-
- {( - [ - { - value: true, - title: t("sync.unlinkKeepTitle"), - body: t("sync.unlinkKeepBody"), - }, - { - value: false, - title: t("sync.unlinkRemoveTitle"), - body: t("sync.unlinkRemoveBody"), - }, - ] as const - ).map((option) => ( - - ))} -
- - - {linkDialog} - - ); -} diff --git a/src/ui/shell/CommandPalette.tsx b/src/ui/shell/CommandPalette.tsx deleted file mode 100644 index 8f3af229e..000000000 --- a/src/ui/shell/CommandPalette.tsx +++ /dev/null @@ -1,604 +0,0 @@ -import React, { useEffect, useRef, useState } from "react"; -import { Command as CommandPrimitive } from "cmdk"; -import { useTranslation } from "react-i18next"; -import { cn } from "@/lib/utils"; -import { Kbd } from "@/components/kbd"; -import { - Command, - CommandItem, - CommandList, - CommandGroup, - CommandEmpty, -} from "@/components/command"; -import { - BookOpen, - Bug, - Clock, - FlaskConical, - Folder, - Globe, - KeyRound, - MessagesSquare, - Pencil, - Plus, - Search, - Server, - Settings, - ShieldCheck, -} from "lucide-react"; -import { getRecentActivity, type RecentActivityItem } from "@/main-axios"; -import type { Host, TabType, Tab } from "@/types/ui-types"; -import { canEditHost } from "@/sidebar/host-permissions"; -import { useRailItems } from "@/sidebar/rail-items"; -import { - defaultConnectAction, - hostActionsFor, - runHostAction, - useHostActions, -} from "@/sidebar/host-contributions"; -import { - filterPaletteItems, - loadPaletteGroup, - paletteEntriesFor, - usePaletteEntries, - usePaletteGroups, - type PaletteItemDef, -} from "./palette-registry"; -import { activityTarget } from "@/lib/activity-types"; -import { reportBetaFeedbackUrl, reportCoreIssueUrl } from "@/lib/issue-url"; -import { isPrerelease } from "@/plugins/plugin-model"; -import { shell } from "@/plugin-host/shell-bridge"; -import { getLiveHostStatus } from "@/lib/ServerStatusContext"; -import { docsUrl } from "@/lib/docs"; -import { parseServerTime } from "@/lib/server-time"; - -interface CommandPaletteProps { - /** Opens settings, optionally at one section. */ - onOpenSettings?: (section?: string) => void; - /** Opens a host in the editor. */ - onEditHost?: (host: Host) => void; - isOpen: boolean; - setIsOpen: (isOpen: boolean) => void; - hosts: Host[]; - terminalTabs?: Tab[]; - activeTabId?: string; - onOpenTab: (type: TabType, label?: string, pendingEvent?: string) => void; - /** Opens a sidebar panel. Kept separate from onOpenTab, which is TabType-shaped. */ - onOpenPanel?: (view: string) => void; -} - -export function CommandPalette({ - isOpen, - setIsOpen, - hosts, - terminalTabs = [], - activeTabId = "", - onOpenTab, - onOpenPanel, - onOpenSettings, - onEditHost, -}: CommandPaletteProps) { - const { t } = useTranslation(); - const railItems = useRailItems(); - const hostActions = useHostActions(); - const paletteEntries = usePaletteEntries(); - const inputRef = useRef(null); - const [search, setSearch] = useState(""); - const [recentActivity, setRecentActivity] = useState( - [], - ); - const paletteGroups = usePaletteGroups(); - const [groupItems, setGroupItems] = useState< - Record - >({}); - const [selectedValue, setSelectedValue] = useState(""); - - useEffect(() => { - if (isOpen) { - setTimeout(() => inputRef.current?.focus(), 50); - setSearch(""); - getRecentActivity(5) - .then(setRecentActivity) - .catch(() => {}); - } - }, [isOpen]); - - useEffect(() => { - if (!isOpen) return; - let cancelled = false; - for (const group of paletteGroups) { - void loadPaletteGroup(group).then((items) => { - if (!cancelled) { - setGroupItems((prev) => ({ ...prev, [group.id]: items })); - } - }); - } - return () => { - cancelled = true; - }; - }, [isOpen, paletteGroups]); - - useEffect(() => { - if (!isOpen) return; - - const handleKeyDown = (e: KeyboardEvent) => { - if (e.key === "Escape") { - e.preventDefault(); - e.stopPropagation(); - setIsOpen(false); - } - }; - window.addEventListener("keydown", handleKeyDown, true); - return () => window.removeEventListener("keydown", handleKeyDown, true); - }, [isOpen, setIsOpen]); - - const query = search.trim().toLowerCase(); - const searching = query.length > 0; - // Without a query the list is a short starting point, not every host. - const filteredHosts = searching - ? hosts.filter( - (h) => - h.name.toLowerCase().includes(query) || - h.ip.toLowerCase().includes(query) || - h.username.toLowerCase().includes(query) || - h.folder?.toLowerCase().includes(query) || - h.tags?.some((tag) => tag.toLowerCase().includes(query)), - ) - : hosts.slice(0, 6); - - // Group hosts by folder; ungrouped hosts appear first. - const groupedHosts: { folder: string | null; hosts: Host[] }[] = []; - const folderMap = new Map(); - const ungrouped: Host[] = []; - for (const h of filteredHosts) { - if (h.folder && searching) { - if (!folderMap.has(h.folder)) folderMap.set(h.folder, []); - folderMap.get(h.folder)!.push(h); - } else { - ungrouped.push(h); - } - } - if (ungrouped.length > 0) - groupedHosts.push({ folder: null, hosts: ungrouped }); - for (const [folder, fhosts] of folderMap) { - groupedHosts.push({ folder, hosts: fhosts }); - } - - useEffect(() => { - if (!isOpen) return; - const firstHost = filteredHosts[0]; - setSelectedValue(searching && firstHost ? `host-${firstHost.id}` : ""); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [isOpen, search]); - - const activeTargetTab = - terminalTabs.find((tab) => tab.id === activeTabId) ?? terminalTabs[0]; - - const handleAction = (action: () => void) => { - action(); - setIsOpen(false); - }; - - const matches = (...texts: (string | undefined)[]) => - !searching || texts.some((text) => text?.toLowerCase().includes(query)); - - const destinations = railItems.filter((item) => matches(t(item.labelKey))); - - const quickActions = [ - { - id: "quick-action-add-host", - label: t("commandPalette.addNewHost"), - icon: Plus, - run: () => onOpenTab("host-manager", undefined, "host-manager:add-host"), - }, - { - id: "quick-action-add-credential", - label: t("commandPalette.addCredential"), - icon: KeyRound, - run: () => - onOpenTab("host-manager", undefined, "host-manager:add-credential"), - }, - { - id: "quick-action-settings", - label: t("nav.settings"), - icon: Settings, - run: () => - onOpenSettings ? onOpenSettings() : onOpenTab("user-profile"), - }, - { - id: "quick-action-admin-settings", - label: t("commandPalette.adminSettings"), - icon: ShieldCheck, - run: () => - onOpenSettings - ? onOpenSettings("admin-general") - : onOpenTab("admin-settings"), - }, - ].filter((action) => matches(action.label)); - - const globalEntries = paletteEntriesFor(paletteEntries, "global").filter( - (entry) => matches(t(entry.titleKey), ...(entry.keywords ?? [])), - ); - - const links = [ - { - id: "link-docs", - label: t("commandPalette.documentation"), - icon: BookOpen, - url: docsUrl(), - }, - { - id: "link-github", - label: "GitHub", - icon: Globe, - url: "https://github.com/Termix-SSH/Termix", - }, - { - id: "link-discord", - label: "Discord", - icon: MessagesSquare, - url: "https://discord.com/invite/jVQGdvHDrf", - }, - { - id: "link-report-bug", - label: t("dashboard.reportBug"), - icon: Bug, - url: reportCoreIssueUrl(import.meta.env.VITE_APP_VERSION || undefined), - }, - ...(isPrerelease(import.meta.env.VITE_APP_VERSION) - ? [ - { - id: "link-beta-feedback", - label: t("newUi.sidebar.userProfile.sendBetaFeedback"), - icon: FlaskConical, - url: reportBetaFeedbackUrl(import.meta.env.VITE_APP_VERSION), - }, - ] - : []), - ].filter((link) => matches(link.label)); - - const rowClass = "group gap-2 rounded-none"; - const iconClass = "size-3.5 shrink-0 text-muted-foreground"; - const hostButton = - "flex size-6 items-center justify-center border border-border text-muted-foreground transition-colors hover:border-accent-brand hover:text-accent-brand"; - - if (!isOpen) return null; - - return ( -
setIsOpen(false)} - > -
e.stopPropagation()} - > - -
- - - ESC -
- - - - {t("commandPalette.noHostsFound", { search })} - - - {!searching && recentActivity.length > 0 && ( - - {recentActivity.slice(0, 4).map((item) => { - const Icon = activityTarget(item.type)?.icon ?? Server; - return ( - - handleAction(() => { - const target = activityTarget(item.type); - if (target) onOpenTab(target.tab, item.hostName); - }) - } - className={rowClass} - > - - {item.hostName} - - - {parseServerTime(item.timestamp).toLocaleDateString()} - - - ); - })} - - )} - - {filteredHosts.length > 0 && ( - - {groupedHosts.map(({ folder, hosts: groupHosts }) => ( -
- {folder && ( -
- - {folder} -
- )} - {groupHosts.map((host) => { - const online = - getLiveHostStatus(Number(host.id)) === "online"; - return ( - - handleAction(() => { - const action = defaultConnectAction( - hostActions, - host, - ); - if (action) runHostAction(action, host, shell); - }) - } - className={rowClass} - > - - {host.name} - - {host.username}@{host.ip} - - {host.isShared && ( - - {t("hosts.sharing.sharedBadge")} - - )} - - {hostActionsFor(hostActions, host).map((action) => { - const Icon = action.icon; - const label = - action.label?.(host) ?? t(action.titleKey); - return ( - - ); - })} - {paletteEntriesFor( - paletteEntries, - "host", - host, - ).map((entry) => { - const Icon = entry.icon; - return ( - - ); - })} - {canEditHost(host) && ( - - )} - - - ); - })} -
- ))} -
- )} - - {paletteGroups.map((group) => { - const items = filterPaletteItems( - groupItems[group.id] ?? [], - search, - group.showWhenEmpty, - ); - if (items.length === 0) return null; - return ( - - {items.map((item) => { - const Icon = item.icon; - const blocked = !!item.needsTarget && !activeTargetTab; - return ( - { - if (blocked) return; - handleAction(() => - item.run({ targetTab: activeTargetTab, shell }), - ); - }} - className={cn( - rowClass, - blocked && "pointer-events-none opacity-50", - )} - > - {Icon && } - {item.title} - {item.description && ( - - {item.description} - - )} - {(blocked || item.hint) && ( - - {blocked - ? t("commandPalette.noTargetTab") - : item.hint} - - )} - - ); - })} - - ); - })} - - {onOpenPanel && destinations.length > 0 && ( - - {destinations.map((item) => { - const Icon = item.icon; - return ( - - handleAction(() => - item.kind === "tab" - ? onOpenTab(item.id as TabType) - : onOpenPanel(item.id), - ) - } - className={rowClass} - > - - {t(item.labelKey)} - - ); - })} - - )} - - {quickActions.length > 0 && ( - - {quickActions.map((action) => { - const Icon = action.icon; - return ( - handleAction(action.run)} - className={rowClass} - > - - {action.label} - - ); - })} - - )} - - {globalEntries.length > 0 && ( - - {globalEntries.map((entry) => { - const Icon = entry.icon; - return ( - handleAction(() => entry.run(shell))} - className={rowClass} - > - {Icon && } - {t(entry.titleKey)} - - ); - })} - - )} - - {links.length > 0 && ( - - {links.map((link) => { - const Icon = link.icon; - return ( - window.open(link.url, "_blank")} - className={rowClass} - > - - {link.label} - - ); - })} - - )} -
- -
- - ↑↓ - {t("commandPalette.navigate")} - - - ↵ - {t("commandPalette.select")} - - - Ctrl - + - K - - {t("commandPalette.orShortcut")} - - ⇧⇧ - -
-
-
-
- ); -} diff --git a/src/ui/shell/DockPanel.tsx b/src/ui/shell/DockPanel.tsx deleted file mode 100644 index cc4933766..000000000 --- a/src/ui/shell/DockPanel.tsx +++ /dev/null @@ -1,175 +0,0 @@ -/* eslint-disable react-refresh/only-export-components */ -import type React from "react"; -import { useTranslation } from "react-i18next"; -import { - ChevronLeft, - ChevronRight, - PanelRight, - RotateCcw, - SquareArrowOutUpRight, -} from "lucide-react"; -import { PANEL } from "@/components/panel-layout"; -import type { EditingWidth } from "@/components/surface/surface-scope"; -import { cn } from "@/lib/utils"; -import { rem } from "@/lib/rem"; - -export const DOCK_DEFAULT_WIDTH = 291; -export const DOCK_MIN_WIDTH = 160; -export const DOCK_MAX_WIDTH = 480; -const EDITING_WIDTH = 560; -const WIDE_EDITING_WIDTH = 760; - -/** The width a dock renders at, in Normal-size pixels. */ -export function dockWidth(width: number, editing: EditingWidth): number { - if (editing === "wide") return WIDE_EDITING_WIDTH; - if (editing) return Math.max(width, EDITING_WIDTH); - return width; -} - -function HeaderButton({ - title, - onClick, - children, -}: { - title: string; - onClick: () => void; - children: React.ReactNode; -}) { - return ( - - ); -} - -/** The shared header and frame of the left sidebar and the right dock. */ -export function DockPanel({ - side, - title, - open, - width, - editing = false, - dragging = false, - fill = false, - onResizeStart, - onClose, - onOpenAsTab, - onMoveToRightDock, - onResetWidth, - children, -}: { - side: "left" | "right"; - title: string; - open: boolean; - width: number; - editing?: EditingWidth; - dragging?: boolean; - /** Fill the parent instead of sizing itself, as in the mobile sheet. */ - fill?: boolean; - onResizeStart?: (e: React.MouseEvent) => void; - onClose: () => void; - onOpenAsTab?: () => void; - onMoveToRightDock?: () => void; - onResetWidth?: () => void; - children: React.ReactNode; -}) { - const { t } = useTranslation(); - const CollapseIcon = side === "left" ? ChevronLeft : ChevronRight; - - return ( -
-
- - {title} - - {onOpenAsTab && ( - - - - )} - {onMoveToRightDock && ( - - - - )} - {onResetWidth && ( - - - - )} - - - -
- -
- {children} -
- - {open && onResizeStart && !editing && ( -
- )} -
- ); -} - -/** The thin strip that reopens a collapsed left dock. */ -export function DockReopenStrip({ onClick }: { onClick: () => void }) { - const { t } = useTranslation(); - return ( - - ); -} diff --git a/src/ui/shell/MobileBar.tsx b/src/ui/shell/MobileBar.tsx deleted file mode 100644 index 7ee5372ad..000000000 --- a/src/ui/shell/MobileBar.tsx +++ /dev/null @@ -1,301 +0,0 @@ -/* eslint-disable react-refresh/only-export-components */ -import { useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; -import { - LogOut, - MoreHorizontal, - Search, - Settings, - SquareArrowOutUpRight, - X, -} from "lucide-react"; -import type { TabType } from "@/types/ui-types"; -import type { RailView } from "@/sidebar/AppRail"; -import { - groupRailItems, - useRailItems, - type RailItemDef, -} from "@/sidebar/rail-items"; -import { useHiddenRailTabs } from "@/sidebar/hidden-rail-tabs"; -import { RailBadge } from "@/sidebar/RailBadge"; -import { cn } from "@/lib/utils"; -import { isElectron } from "@/lib/electron"; - -const PRIMARY_COUNT = 4; - -/** The four bar slots: flagged items first, then the rest in rail order. */ -export function pickPrimaryItems(items: RailItemDef[]): RailItemDef[] { - const usable = items.filter((item) => item.kind !== "tab"); - return [ - ...usable.filter((item) => item.mobilePrimary), - ...usable.filter((item) => !item.mobilePrimary), - ].slice(0, PRIMARY_COUNT); -} - -/** - * The rail on a phone: the most used destinations on the bar, everything else - * in a sheet behind More with search, settings and logout. - */ -export function MobileBar({ - railView, - sidebarOpen, - username, - onRailClick, - onOpenTab, - onOpenSettings, - onOpenPalette, - onLogout, -}: { - railView: RailView; - sidebarOpen: boolean; - username: string; - onRailClick: (view: RailView) => void; - onOpenTab: (type: TabType) => void; - onOpenSettings: () => void; - onOpenPalette: () => void; - onLogout: () => void; -}) { - const { t } = useTranslation(); - const [moreOpen, setMoreOpen] = useState(false); - const railItems = useRailItems(); - const hidden = useHiddenRailTabs(); - - const visible = useMemo( - () => railItems.filter((item) => !hidden.has(item.id)), - [railItems, hidden], - ); - const main = visible.filter((item) => item.placement !== "footer"); - const footer = visible.filter((item) => item.placement === "footer"); - const primary = useMemo(() => pickPrimaryItems(main), [main]); - const bands = useMemo(() => groupRailItems(main), [main]); - const badged = footer.find((item) => item.useBadge); - - const close = () => setMoreOpen(false); - const open = (item: RailItemDef) => { - close(); - if (item.kind === "tab") onOpenTab(item.id as TabType); - else onRailClick(item.id as RailView); - }; - - return ( - <> - - - {moreOpen && ( -
- -
- -
- { - close(); - onOpenPalette(); - }} - /> - {bands.map((band) => ( -
-
- {t(`nav.group.${band.group}`)} -
- {band.items.map((item) => ( - { - close(); - onOpenTab(item.id as TabType); - } - : undefined - } - onClick={() => open(item)} - /> - ))} -
- ))} - -
- {footer.map((item) => ( - open(item)} - /> - ))} - { - close(); - onOpenSettings(); - }} - /> - {!isElectron() && ( - { - close(); - onLogout(); - }} - /> - )} -
-
-
- - )} - - ); -} - -function BarButton({ - icon: Icon, - label, - active, - useBadge, - onClick, -}: { - icon: React.ElementType; - label: string; - active?: boolean; - useBadge?: () => number | null | undefined; - onClick: () => void; -}) { - return ( - - ); -} - -function SheetRow({ - icon: Icon, - label, - hint, - useBadge, - active, - onClick, - onOpenAsTab, -}: { - icon: React.ElementType; - label: string; - hint?: string; - useBadge?: () => number | null | undefined; - active?: boolean; - onClick: () => void; - onOpenAsTab?: () => void; -}) { - const { t } = useTranslation(); - return ( -
- - {onOpenAsTab && ( - - )} -
- ); -} diff --git a/src/ui/shell/ShellRoot.tsx b/src/ui/shell/ShellRoot.tsx index 875503957..1f6a4ce0c 100644 --- a/src/ui/shell/ShellRoot.tsx +++ b/src/ui/shell/ShellRoot.tsx @@ -1,80 +1,15 @@ -import { lazy, Suspense } from "react"; import { isElectron } from "@/lib/electron"; import { ServerStatusProvider } from "@/lib/ServerStatusContext"; import { ComponentSlot } from "@/shell/ActionSlot"; import { OnboardingHost } from "@/onboarding/OnboardingHost"; import { DesktopUpdateToasts } from "@/shell/DesktopUpdateToasts"; -import { getTabType } from "@/shell/tab-registry"; import { TabPortals } from "@/shell/stage/TabPortals"; import { LayoutHost } from "@/shell/layout/LayoutHost"; -import { - ShellControllerProvider, - useShellController, -} from "@/shell/controller/ShellControllerProvider"; - -// Not needed for first paint. -const CommandPalette = lazy(() => - import("@/shell/CommandPalette").then((m) => ({ - default: m.CommandPalette, - })), -); - -/** Core's palette, opened by any layout through the shell's palette.open(). */ -function ShellPalette() { - const shell = useShellController(); - const { tabs, hosts, palette } = shell; - if (!palette.isOpen) return null; - return ( - - shell.regions.railClick(view)} - onEditHost={hosts.edit} - onOpenSettings={(section) => - tabs.openSingleton( - "settings", - undefined, - undefined, - section ? { section } : undefined, - ) - } - onOpenTab={(type, label, pendingEvent) => { - if ( - [ - "dashboard", - "host-manager", - "user-profile", - "admin-settings", - "plugins", - ].includes(type) - ) { - tabs.openSingleton(type, pendingEvent); - } else if (getTabType(type)?.multiInstance) { - tabs.openMultiInstance(type); - } else if (getTabType(type)?.singleton) { - // A singleton plugin tab, optionally preselecting a host. - tabs.openSingleton( - type, - undefined, - label ? hosts.list.find((h) => h.name === label) : undefined, - ); - } else if (label) { - const host = hosts.list.find((h) => h.name === label); - if (host) tabs.open(host, type); - } - }} - /> - - ); -} +import { ShellControllerProvider } from "@/shell/controller/ShellControllerProvider"; /** * The signed-in app: the shell's state, the chosen layout, every tab's - * content and the pieces core always owns (palette, overlays, onboarding). + * content and the pieces core always owns (overlays, onboarding). */ export function ShellRoot({ username, @@ -89,7 +24,6 @@ export function ShellRoot({ - {isElectron() && } diff --git a/src/ui/shell/TabBar.tsx b/src/ui/shell/TabBar.tsx deleted file mode 100644 index 82c38269d..000000000 --- a/src/ui/shell/TabBar.tsx +++ /dev/null @@ -1,905 +0,0 @@ -import { - useRef, - useEffect, - useLayoutEffect, - useState, - useCallback, -} from "react"; -import { useTranslation } from "react-i18next"; -import { useReducedMotion } from "motion/react"; -import { Button } from "@/components/button"; -import { Separator } from "@/components/separator"; -import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuTrigger, -} from "@/components/dropdown-menu"; -import { - ChevronDown, - ChevronUp, - RefreshCw, - X, - Plus, - Pencil, - Columns2, - Rows2, - Ungroup, - Maximize2, - Minimize2, - PanelRight, -} from "lucide-react"; -import { tabIcon } from "@/shell/tabUtils"; -import { isSessionTabType } from "@/shell/tab-registry"; -import { isElectron } from "@/lib/electron"; -import type { Tab, TabType } from "@/types/ui-types"; -import { ActionSlot } from "@/shell/ActionSlot"; -import { useTabHandlesVersion } from "@/shell/tab-handles"; -import { - canJoinSplit, - isSplitTab, - type SplitSummary, - type TabSplitAction, -} from "@/shell/split/split-tabs"; -import { MAX_PANES } from "@/shell/split/split-tree"; -import { SplitLayoutMenu } from "@/shell/split/SplitLayoutMenu"; -import { - beginSplitDrag, - endSplitDrag, - isSplitDragging, - moveSplitDrag, -} from "@/shell/split/split-drag"; - -/** How far below the bar a dragged tab has to go before it drags into the view. */ -const DRAG_OUT_DISTANCE = 16; - -/** - * Tabs holding a live connection that can be refreshed: the registered - * session tabs. - */ -function isConnectionTab(type: TabType): boolean { - return isSessionTabType(type); -} - -export function TabBar({ - tabs, - activeTabId, - splits, - activeSplitFull, - onSetActiveTab, - onCloseTab, - onRefreshTab, - onReconnectDisconnected, - onReorderTabs, - onSplitAction, - onRenameTab, - isAppFullscreen, - onToggleAppFullscreen, - rightDockOpen, - onToggleRightDock, - showTabNumbers, -}: { - tabs: Tab[]; - activeTabId: string; - /** Every split tab and its panes, for the "Add to split" entries. */ - splits: SplitSummary[]; - /** The active tab is a split with no room for another pane. */ - activeSplitFull: boolean; - onSetActiveTab: (id: string) => void; - onCloseTab: (id: string) => void; - onRefreshTab: (id: string) => void; - onReconnectDisconnected?: () => void; - onReorderTabs: (tabs: Tab[]) => void; - onSplitAction: (action: TabSplitAction) => void; - onRenameTab?: (tabId: string, newLabel: string) => void; - isAppFullscreen: boolean; - onToggleAppFullscreen: () => void; - rightDockOpen?: boolean; - onToggleRightDock?: () => void; - showTabNumbers?: boolean; -}) { - const { t } = useTranslation(); - // Re-renders when a tab's handle attaches, for buttons whose when reads it. - useTabHandlesVersion(); - const reduceMotion = useReducedMotion(); - const [open, setOpen] = useState(true); - const [dragTabId, setDragTabId] = useState(null); - const [dragTargetIndex, setDragTargetIndex] = useState(null); - const [dragPos, setDragPos] = useState<{ x: number; y: number } | null>(null); - const [draggingOut, setDraggingOut] = useState(false); - const [contextTabId, setContextTabId] = useState(null); - const [contextPos, setContextPos] = useState<{ x: number; y: number } | null>( - null, - ); - const [renamingTabId, setRenamingTabId] = useState(null); - const [renameValue, setRenameValue] = useState(""); - const renameInputRef = useRef(null); - - const tabBarRef = useRef(null); - const tabEls = useRef>(new Map()); - const dragData = useRef<{ - id: string; - index: number; - startX: number; - startY: number; - offsetX: number; - width: number; - barTop: number; - barHeight: number; - x: number; - y: number; - } | null>(null); - const dragTargetRef = useRef(null); - const didDrag = useRef(false); - // Hand-rolled instead of a Framer layoutId: a shared layoutId matched - // multiple tabs sharing the same indicator element across re-renders, and - // reordering tabs (which doesn't change which tab is active) could make it - // measure the wrong tab's rect or animate a spurious slide. Measuring the - // active tab's own DOM node directly is always correct. - const [indicatorRect, setIndicatorRect] = useState<{ - left: number; - width: number; - } | null>(null); - const skipIndicatorAnimRef = useRef(false); - - const activeIsSplit = isSplitTab(tabs.find((tab) => tab.id === activeTabId)); - - const measureIndicator = useCallback(() => { - const el = activeTabId ? tabEls.current.get(activeTabId) : null; - if (!el) { - setIndicatorRect(null); - return; - } - setIndicatorRect({ left: el.offsetLeft, width: el.offsetWidth }); - }, [activeTabId]); - - // useLayoutEffect so the indicator is measured for the new tab order before - // paint -- with useEffect there was a frame right after a drag-drop reorder - // where the indicator (which stays hidden during the drag) reappeared at - // its pre-reorder position before this caught up, flashing at the old spot. - useLayoutEffect(() => { - measureIndicator(); - }, [measureIndicator, tabs, dragTargetIndex]); - - useEffect(() => { - const el = tabBarRef.current; - if (!el || typeof ResizeObserver === "undefined") return; - const observer = new ResizeObserver(measureIndicator); - observer.observe(el); - return () => observer.disconnect(); - }, [measureIndicator]); - - useEffect(() => { - if (!skipIndicatorAnimRef.current) return; - const id = requestAnimationFrame(() => { - skipIndicatorAnimRef.current = false; - }); - return () => cancelAnimationFrame(id); - }, [indicatorRect]); - - useEffect(() => { - const el = tabBarRef.current; - if (!el) return; - const handleWheel = (e: WheelEvent) => { - if (e.deltaY !== 0) { - e.preventDefault(); - el.scrollLeft += e.deltaY; - } - }; - el.addEventListener("wheel", handleWheel, { passive: false }); - return () => el.removeEventListener("wheel", handleWheel); - }, []); - - useEffect(() => { - if (!dragTabId) return; - - function onPointerMove(e: PointerEvent) { - if (!dragData.current || !tabBarRef.current) return; - const d = dragData.current; - if (Math.abs(e.clientX - d.startX) > 5) didDrag.current = true; - - const barRect = tabBarRef.current.getBoundingClientRect(); - - // Dragged down out of the bar: the tab heads for the view to be split. - const dragged = tabs.find((t) => t.id === d.id); - if ( - canJoinSplit(dragged) && - e.clientY > barRect.bottom + DRAG_OUT_DISTANCE - ) { - didDrag.current = true; - if (isSplitDragging()) moveSplitDrag(e.clientX, e.clientY); - else - beginSplitDrag( - { - kind: "tab", - tabId: d.id, - label: dragged!.customLabel || dragged!.label, - }, - e.clientX, - e.clientY, - ); - setDraggingOut(true); - dragTargetRef.current = d.index; - setDragTargetIndex(d.index); - return; - } - if (isSplitDragging()) { - endSplitDrag(false); - setDraggingOut(false); - } - - const x = Math.max( - barRect.left + 2, - Math.min(barRect.right - d.width - 6, e.clientX - d.offsetX), - ); - const y = d.barTop; - setDragPos({ x, y }); - - const centerX = e.clientX - d.offsetX + d.width / 2; - let newTarget = d.index; - tabEls.current.forEach((el, id) => { - if (id === d.id) return; - const rect = el.getBoundingClientRect(); - const mid = rect.left + rect.width / 2; - const idx = tabs.findIndex((t) => t.id === id); - if (idx < d.index && centerX < mid) - newTarget = Math.min(newTarget, idx); - if (idx > d.index && centerX > mid) - newTarget = Math.max(newTarget, idx); - }); - - if (tabs[0].type === "dashboard") newTarget = Math.max(1, newTarget); - dragTargetRef.current = newTarget; - setDragTargetIndex(newTarget); - } - - function endDrag(commit: boolean) { - if (!dragData.current) return; - const { id, index } = dragData.current; - const to = dragTargetRef.current ?? index; - const droppedOut = isSplitDragging(); - if (droppedOut) endSplitDrag(commit); - setDraggingOut(false); - if (commit && !droppedOut && to !== index) { - const next = [...tabs]; - if (next[0].id !== id) next.splice(to, 0, next.splice(index, 1)[0]); - skipIndicatorAnimRef.current = true; - onReorderTabs(next); - } - dragData.current = null; - dragTargetRef.current = null; - setDragTabId(null); - setDragTargetIndex(null); - setDragPos(null); - setTimeout(() => { - didDrag.current = false; - }, 0); - } - - function onPointerUp() { - endDrag(true); - } - - // The browser can abort a pointer gesture without ever firing pointerup - // (OS/browser cancels it, focus leaves the window, capture is lost some - // other way). Without this, dragTabId stays stuck non-null forever and - // every tab keeps rendering with a stale translateX from the aborted - // drag, which can visually butt two tabs together with no seam between - // them until something else forces a re-render. - function onPointerCancel() { - endDrag(false); - } - - window.addEventListener("pointermove", onPointerMove); - window.addEventListener("pointerup", onPointerUp); - window.addEventListener("pointercancel", onPointerCancel); - window.addEventListener("lostpointercapture", onPointerCancel); - return () => { - window.removeEventListener("pointermove", onPointerMove); - window.removeEventListener("pointerup", onPointerUp); - window.removeEventListener("pointercancel", onPointerCancel); - window.removeEventListener("lostpointercapture", onPointerCancel); - }; - }, [dragTabId, tabs, onReorderTabs]); - - useEffect(() => { - if (!contextTabId) return; - function onDown(e: MouseEvent) { - if (!(e.target as HTMLElement).closest("[data-context-menu]")) { - setContextTabId(null); - setContextPos(null); - } - } - window.addEventListener("mousedown", onDown); - return () => window.removeEventListener("mousedown", onDown); - }, [contextTabId]); - - useEffect(() => { - if (renamingTabId) { - setTimeout(() => renameInputRef.current?.focus(), 0); - } - }, [renamingTabId]); - - function commitRename() { - if (!renamingTabId) return; - const trimmed = renameValue.trim(); - if (trimmed) onRenameTab?.(renamingTabId, trimmed); - setRenamingTabId(null); - } - - const dragIdx = tabs.findIndex((t) => t.id === dragTabId); - const target = dragTargetIndex ?? dragIdx; - - return ( -
-
-
- {indicatorRect && !dragTabId && ( - - )} - {tabs.map((tab, index) => { - const active = tab.id === activeTabId; - const isDragging = dragTabId === tab.id; - let translateX = 0; - if ( - dragTabId && - !isDragging && - dragIdx !== -1 && - target !== null && - target !== dragIdx - ) { - const draggedWidth = - tabEls.current.get(dragTabId)?.offsetWidth ?? 0; - if (dragIdx < target && index > dragIdx && index <= target) - translateX = -draggedWidth; - else if (dragIdx > target && index < dragIdx && index >= target) - translateX = draggedWidth; - } - - return ( -
{ - if (el) tabEls.current.set(tab.id, el); - else tabEls.current.delete(tab.id); - }} - onClick={() => - !dragTabId && !didDrag.current && onSetActiveTab(tab.id) - } - onMouseDown={(e) => { - if (e.button === 1 && tab.type !== "dashboard") { - e.preventDefault(); - onCloseTab(tab.id); - } - }} - onContextMenu={(e) => { - if (tab.type === "dashboard") return; - e.preventDefault(); - setContextTabId(tab.id); - setContextPos({ x: e.clientX, y: e.clientY }); - }} - onPointerDown={(e) => { - if (e.button !== 0 || tab.type === "dashboard") return; - e.preventDefault(); - const el = tabEls.current.get(tab.id); - if (!el || !tabBarRef.current) return; - const rect = el.getBoundingClientRect(); - const barRect = tabBarRef.current.getBoundingClientRect(); - dragData.current = { - id: tab.id, - index, - startX: e.clientX, - startY: e.clientY, - offsetX: e.clientX - rect.left, - width: rect.width, - barTop: barRect.top, - barHeight: barRect.height, - x: rect.left, - y: barRect.top, - }; - setDragTabId(tab.id); - setDragTargetIndex(index); - setDragPos({ x: rect.left, y: barRect.top }); - (e.currentTarget as HTMLElement).setPointerCapture( - e.pointerId, - ); - }} - style={{ - // Only set a transform while a drag is actually shifting - // tabs around. Leaving a permanent translateX(0) on every - // tab gives each one its own transform node, which opts it - // out of the pixel snapping a plain box gets when painted. - // The 1px seam then lands on a fractional device pixel at - // non-100% zoom and anti-aliases down to nothing, so two - // tabs look merged into one. - transform: - dragTabId && !isDragging - ? `translateX(${translateX}px)` - : undefined, - transition: - dragTabId && !isDragging ? "transform 200ms ease" : "none", - opacity: isDragging ? 0 : 1, - cursor: - tab.type === "dashboard" - ? "pointer" - : isDragging - ? "grabbing" - : "grab", - userSelect: "none", - }} - className={`group/tab relative flex items-center gap-2 shrink-0 transition-colors border-r border-border text-sm - ${index === 0 && tab.type !== "dashboard" ? "border-l border-border" : ""} - ${ - tab.type === "dashboard" - ? `px-2.5 md:px-3.5 ${active ? "bg-surface text-foreground" : "text-muted-foreground hover:text-foreground hover:bg-surface"}` - : `px-2.5 md:px-4 font-medium ${active ? "bg-surface text-foreground" : "text-muted-foreground hover:text-foreground hover:bg-surface"}` - }`} - > - {showTabNumbers && tab.type !== "dashboard" && ( - - {tabs.slice(0, index).filter((t) => t.type !== "dashboard") - .length + 1} - - )} - {tabIcon(tab.type)} - {tab.type !== "dashboard" && renamingTabId === tab.id ? ( - setRenameValue(e.target.value)} - onBlur={commitRename} - onKeyDown={(e) => { - if (e.key === "Enter") commitRename(); - else if (e.key === "Escape") setRenamingTabId(null); - }} - onPointerDown={(e) => e.stopPropagation()} - onClick={(e) => e.stopPropagation()} - className="bg-transparent border-b border-accent-brand outline-none text-sm w-28 min-w-0" - style={{ fontWeight: "inherit" }} - /> - ) : ( - tab.type !== "dashboard" && tab.label - )} - {tab.type !== "dashboard" && renamingTabId !== tab.id && ( -
- {isConnectionTab(tab.type) && ( - - )} - {/* Plugins add small buttons here, invoked with the tab's surface handle. */} - [tab.terminalRef?.current, tab]} - renderItem={(contribution, invoke) => ( - - )} - /> - -
- )} -
- ); - })} - - {dragTabId && - dragPos && - !draggingOut && - (() => { - const tab = tabs.find((t) => t.id === dragTabId)!; - const active = tab.id === activeTabId; - const dragTabWidth = tabEls.current.get(dragTabId)?.offsetWidth; - const dragTabHeight = tabEls.current.get(dragTabId)?.offsetHeight; - return ( -
- {tabIcon(tab.type)} - {tab.type !== "dashboard" && tab.label} -
- ); - })()} -
- -
- - - - - - - {tabs.map((tab, index) => ( -
onSetActiveTab(tab.id)} - className={`flex items-center justify-between px-2 py-2 text-xs cursor-default hover:bg-accent hover:text-accent-foreground ${tab.id === activeTabId ? "text-foreground" : "text-muted-foreground"}`} - > -
- {showTabNumbers && tab.type !== "dashboard" && ( - - {tabs - .slice(0, index) - .filter((t) => t.type !== "dashboard").length + 1} - - )} - {tabIcon(tab.type)} - - {tab.type === "dashboard" - ? t("nav.dashboard") - : tab.label} - -
- {tab.type !== "dashboard" && ( - - )} -
- ))} -
-
- - onSplitAction({ kind: "splitActive", edge })} - onPreset={(presetId) => onSplitAction({ kind: "preset", presetId })} - /> - {onToggleRightDock && ( - <> - - - - )} - {!isElectron() && ( - <> - - - - )} - - -
-
- {!open && ( - - )} - - {/* Right-click context menu */} - {contextTabId && - contextPos && - (() => { - const ctxTab = tabs.find((t) => t.id === contextTabId); - if (!ctxTab) return null; - const joinable = canJoinSplit(ctxTab); - const itemClass = - "flex items-center gap-2 w-full px-3 py-1.5 text-xs text-left hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:pointer-events-none"; - const runSplit = (action: TabSplitAction) => { - onSplitAction(action); - setContextTabId(null); - }; - const menuTop = Math.min(contextPos.y, window.innerHeight - 160); - const menuLeft = Math.min(contextPos.x, window.innerWidth - 240); - return ( -
-
- {ctxTab.label} -
-
- {isConnectionTab(ctxTab.type) && ( - - )} - {onReconnectDisconnected && ( - - )} - {/* Plugins add entries here, invoked with the tab's surface handle. */} - [ctxTab.terminalRef?.current, ctxTab]} - renderItem={(contribution, invoke) => ( - - )} - /> - - {isSplitTab(ctxTab) && ( - <> -
- - - )} - {joinable && ( - <> -
- - - {splits.map((split) => ( -
-
-
- {t("splitScreen.addToSplit", { split: split.label })} -
- {split.panes.map((pane) => ( - - ))} - {(["right", "bottom"] as const).map((edge) => ( - - ))} -
- ))} - - )} -
- -
- ); - })()} -
- ); -} diff --git a/src/ui/shell/controller/ShellControllerProvider.tsx b/src/ui/shell/controller/ShellControllerProvider.tsx index 1794f9f28..0ee19474a 100644 --- a/src/ui/shell/controller/ShellControllerProvider.tsx +++ b/src/ui/shell/controller/ShellControllerProvider.tsx @@ -21,7 +21,11 @@ import type { Host, TabType } from "@/types/ui-types"; import { requestManage } from "@/manage/manage-requests"; import { useRailItems } from "@/sidebar/rail-items"; import { usePanels } from "@/shell/panel-registry"; -import { getTabType, type TabShellCallbacks } from "@/shell/tab-registry"; +import { + getTabType, + useTabTypes, + type TabShellCallbacks, +} from "@/shell/tab-registry"; import { usePluginStore } from "@/plugin-host/plugin-store"; import { setShellCallbacks } from "@/plugin-host/shell-bridge"; import { @@ -83,6 +87,7 @@ export function ShellControllerProvider({ // Re-render when plugins add or remove rail items, panels or tabs. useRailItems(); usePanels(); + useTabTypes(); const { settled: pluginsSettled } = usePluginStore(); const isMobile = useIsMobile(); const [stageStore] = useState(createTabStageStore); diff --git a/src/ui/shell/controller/use-regions.ts b/src/ui/shell/controller/use-regions.ts index 60db53959..964f7dd76 100644 --- a/src/ui/shell/controller/use-regions.ts +++ b/src/ui/shell/controller/use-regions.ts @@ -3,7 +3,6 @@ import { useCallback, useEffect, useRef, useState } from "react"; import type { EditingWidth } from "@/components/surface/surface-scope"; import { remScale } from "@/lib/rem"; import { rightDockableIds } from "@/sidebar/rail-items"; -import { DOCK_DEFAULT_WIDTH } from "@/shell/DockPanel"; import type { ShellRegions } from "./types"; const MIN_WIDTH = 160; @@ -48,6 +47,9 @@ function startDockDrag( } /** The left sidebar and the right dock: what they show, open state and size. */ +/** A dock's width after Reset width, in Normal-size pixels. */ +export const DOCK_DEFAULT_WIDTH = 291; + export function useRegions(isMobile: boolean): ShellRegions { const [sidebarOpen, setSidebarOpen] = useState(true); const [railView, setRailView] = useState("hosts"); diff --git a/src/ui/shell/layout/LayoutHost.tsx b/src/ui/shell/layout/LayoutHost.tsx index 3233ebba6..cbe75f296 100644 --- a/src/ui/shell/layout/LayoutHost.tsx +++ b/src/ui/shell/layout/LayoutHost.tsx @@ -12,9 +12,6 @@ import { layoutStatus } from "@/look/layout-status"; import { safeLayoutInUrl } from "@/look/resolve-look"; import { useLookTheme } from "@/look/use-look-theme"; import { RepairView } from "@/look/RepairView"; -import { registerBuiltinLayout } from "./builtin"; - -registerBuiltinLayout(); /** Catches a crash while a layout draws, so the repair view can take over. */ class LayoutErrorBoundary extends Component< diff --git a/src/ui/shell/layout/builtin/DefaultLayout.tsx b/src/ui/shell/layout/builtin/DefaultLayout.tsx deleted file mode 100644 index 2e7003e12..000000000 --- a/src/ui/shell/layout/builtin/DefaultLayout.tsx +++ /dev/null @@ -1,396 +0,0 @@ -import { lazy, Suspense } from "react"; -import { useTranslation } from "react-i18next"; -import { Sheet, SheetContent } from "@/components/sheet"; -import { SurfaceScope } from "@/components/surface/surface-scope"; -import { MobileBar } from "@/shell/MobileBar"; -import { AppRail } from "@/sidebar/AppRail"; -import { ComponentSlot } from "@/shell/ActionSlot"; -import { - isCoreRailView, - railItemLabel, - promotableIds, - rightDockableIds, -} from "@/sidebar/rail-items"; -import { DockPanel, DockReopenStrip } from "@/shell/DockPanel"; -import { TabBar } from "@/shell/TabBar"; -import { requestManage, type ManageMode } from "@/manage/manage-requests"; -import { getTabType } from "@/shell/tab-registry"; -import { getPanel, usePanels } from "@/shell/panel-registry"; -import { PluginViewPlaceholder } from "@/plugin-host/PluginViewPlaceholder"; -import type { TabType } from "@/types/ui-types"; -import { - ShellConfirmCapture, - useShellController, -} from "@/shell/controller/ShellControllerProvider"; -import { TabStage } from "@/shell/stage/TabStage"; - -const HostsPanel = lazy(() => - import("@/sidebar/HostsPanel").then((m) => ({ default: m.HostsPanel })), -); -const QuickConnectPanel = lazy(() => - import("@/sidebar/QuickConnectPanel").then((m) => ({ - default: m.QuickConnectPanel, - })), -); -const SyncPanel = lazy(() => - import("@/settings/sync/SyncPanel").then((m) => ({ - default: m.SyncPanel, - })), -); -const CredentialsPanel = lazy(() => - import("@/sidebar/CredentialsPanel").then((m) => ({ - default: m.CredentialsPanel, - })), -); -const ConnectionsPanel = lazy(() => - import("@/sidebar/ConnectionsPanel").then((m) => ({ - default: m.ConnectionsPanel, - })), -); - -function SidebarPanelFallback() { - return ( -
-
-
- ); -} - -/** - * The look Termix has always had: icon rail, left sidebar, tab bar, right - * dock and the mobile bottom bar. Built in until it moves to its own plugin. - */ -export function DefaultLayout() { - const { t } = useTranslation(); - const shell = useShellController(); - const registeredPanels = usePanels(); - const { tabs, regions, hosts, isMobile } = shell; - const { left, right } = regions; - const closeOnMobile = () => { - if (isMobile) left.setOpen(false); - }; - - // Every panel gets its own surface, so its inline views and confirms stay - // inside it. Only the left dock widens for them. - const panelScope = ( - view: string, - owned: boolean, - shown: boolean, - children: React.ReactNode, - className = "", - ) => ( - - {children} - - ); - - /** - * Sidebar panel content, shared between the desktop sidebar, the mobile - * sheet and the right dock. Takes the view rather than reading the left - * dock's so both docks can render from the same code. - * - * `owned` marks the dock responsible for the panels that stay mounted while - * hidden (hosts, credentials, fleets). Only one dock may own them, otherwise - * two live instances fight over the shared editing state. - */ - const renderSidebarPanels = (railView: string, owned = true) => ( - }> -
- {owned && ( - <> - {panelScope( - "hosts", - owned, - railView === "hosts", - { - tabs.connectHost(host, type, options); - closeOnMobile(); - }} - onEditHost={hosts.edit} - onCloseSidebar={() => left.setOpen(false)} - hostTree={hosts.tree ?? undefined} - loading={hosts.loading} - onEditingChange={regions.panelEditingSetter("hosts")} - active={railView === "hosts"} - />, - )} - {panelScope( - "credentials", - owned, - railView === "credentials", - , - )} - - )} - - {railView === "quick-connect" && - panelScope( - "quick-connect", - owned, - true, - { - tabs.open(host, type); - closeOnMobile(); - }} - />, - )} - - {registeredPanels.map((panel) => { - const shown = railView === panel.id; - // A kept-mounted panel lives in the owning dock only, so two live - // copies never fight over the same state. - if (panel.keepMounted ? !owned : !shown) return null; - const Panel = panel.component; - return panelScope( - panel.id, - owned, - shown, -
- undefined - } - activeTabType={tabs.active?.type ?? undefined} - placement={owned ? "left" : "right"} - /> -
, - ); - })} - - {!isCoreRailView(railView) && !getPanel(railView) && ( - - )} - - {railView === "connections" && - panelScope( - "connections", - owned, - true, -
- { - tabs.setActive(tabId); - closeOnMobile(); - }} - onCloseTab={tabs.close} - onReopenTab={(record, restoredSessionId) => { - const host = record.hostId - ? hosts.list.find((h) => h.id === String(record.hostId)) - : undefined; - if (!host && !getTabType(record.tabType)?.hostless) return; - tabs.setBackground((prev) => - prev.filter((r) => r.id !== record.id), - ); - if (host) { - const effectiveSessionId = - restoredSessionId ?? record.backendSessionId ?? null; - tabs.open(host, record.tabType as TabType, { - instanceId: record.id, - restoredSessionId: effectiveSessionId, - savedLabel: record.label, - }); - } else { - tabs.openSingleton(record.tabType as TabType); - } - closeOnMobile(); - }} - onForgetBackground={(recordId) => { - tabs.setBackground((prev) => - prev.filter((r) => r.id !== recordId), - ); - }} - onRenameTab={tabs.rename} - onReorderTabs={tabs.setList} - /> -
, - )} - - {railView === "sync" && - panelScope( - "sync", - owned, - true, -
- -
, - )} -
-
- ); - - const sidebarPanelContent = renderSidebarPanels(left.view); - - const dockProps = (view: string) => ({ - // Titles come from the shared rail definitions so they stay translated - // and in step with the rail itself. - title: railItemLabel(view, t), - onOpenAsTab: isMobile - ? undefined - : view === "hosts" || view === "credentials" - ? () => requestManage({ kind: "browse", mode: view as ManageMode }) - : promotableIds().includes(view) - ? () => tabs.openSingleton(view as TabType) - : undefined, - }); - - return ( -
-
- {/* Skinny icon rail, desktop only */} - tabs.openSingleton("settings")} - onOpenNavigationSettings={() => - tabs.openSingleton("settings", undefined, undefined, { - section: "appearance", - reveal: "settings-navigation", - revealAt: Date.now(), - }) - } - onOpenPalette={shell.palette.open} - onLogout={shell.logout} - /> - - {/* Desktop: inline resizable sidebar */} - {!isMobile && ( - left.setOpen(false)} - onMoveToRightDock={ - rightDockableIds().includes(left.view) - ? () => regions.openInRightDock(left.view) - : undefined - } - onResetWidth={left.resetWidth} - > - {sidebarPanelContent} - - )} - - {/* Mobile: sidebar as overlay sheet */} - {isMobile && ( - - - left.setOpen(false)} - > - {sidebarPanelContent} - - - - )} - - {/* Main content area */} -
- {!isMobile && !left.open && ( - left.setOpen(true)} /> - )} - - -
- - -
-
- - {/* Bottom nav bar, mobile only. The desktop app keeps the rail. */} - {!shell.isElectron && ( - tabs.openSingleton(type)} - onOpenSettings={() => tabs.openSingleton("settings")} - onOpenPalette={shell.palette.open} - onLogout={() => shell.logout({ manual: true })} - /> - )} -
- - {/* Right dock, desktop only, holds a second reference panel */} - {!isMobile && right.view && ( - right.setView(null)} - onResetWidth={right.resetWidth} - > - {renderSidebarPanels(right.view, false)} - - )} - - {/* Plugin panels pinned to the right edge, sized by the plugin */} - -
-
- ); -} diff --git a/src/ui/shell/layout/builtin/index.ts b/src/ui/shell/layout/builtin/index.ts deleted file mode 100644 index adcf3ee54..000000000 --- a/src/ui/shell/layout/builtin/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { BUILTIN_LAYOUT_ID, registerLayout } from "@/look/layout-registry"; -import { DefaultLayout } from "./DefaultLayout"; - -let registered = false; - -/** Core's own layout, there whatever plugins are installed. */ -export function registerBuiltinLayout(): void { - if (registered) return; - registered = true; - registerLayout({ id: BUILTIN_LAYOUT_ID, component: DefaultLayout }); -} diff --git a/src/ui/shell/stage/TabPortals.tsx b/src/ui/shell/stage/TabPortals.tsx index 79fd3f393..7436227c2 100644 --- a/src/ui/shell/stage/TabPortals.tsx +++ b/src/ui/shell/stage/TabPortals.tsx @@ -50,7 +50,6 @@ export function TabPortals() { > {renderTabContent(tab, { shell: shell.callbacks, - settings: shell.settings, panelTargetTab: targetTerminal, isVisible: inPane || activeInline, isFocusedPane, diff --git a/src/ui/shell/tabUtils.tsx b/src/ui/shell/tabUtils.tsx index 027ffdc01..5b1c2e47e 100644 --- a/src/ui/shell/tabUtils.tsx +++ b/src/ui/shell/tabUtils.tsx @@ -1,16 +1,5 @@ /* eslint-disable react-refresh/only-export-components */ -import { - requestFromLegacyEvent, - requestManage, -} from "@/manage/manage-requests"; -import { - LayoutDashboard, - LayoutPanelLeft, - Puzzle, - LibraryBig, - Server, - Settings, -} from "lucide-react"; +import { LayoutPanelLeft, Puzzle, Server, Settings } from "lucide-react"; import { lazy, memo, Suspense } from "react"; import { useTranslation } from "react-i18next"; import type { Tab, TabType } from "@/types/ui-types"; @@ -23,27 +12,15 @@ import { type TabTypeDef, } from "./tab-registry"; import { getPanel, type PanelDef } from "./panel-registry"; -import type { SettingsTabProps } from "@/settings/SettingsTab"; import { markAdaptiveResourceUsed, runAdaptiveBackgroundTask, } from "@/lib/adaptive-resource-budget"; // Heavy tab surfaces, kept out of the AppShell critical path. -const ManageTab = lazy(() => - import("@/manage/ManageTab").then((m) => ({ default: m.ManageTab })), -); -const SettingsTab = lazy(() => - import("@/settings/SettingsTab").then((m) => ({ default: m.SettingsTab })), -); const PluginsTab = lazy(() => import("@/plugins/PluginsTab").then((m) => ({ default: m.PluginsTab })), ); -const DashboardTab = lazy(() => - import("@/dashboard/DashboardTab").then((m) => ({ - default: m.DashboardTab, - })), -); /** Download a likely next tab without starting a connection or mounting UI. */ export function preloadTabSurface(type: TabType): void { @@ -104,11 +81,6 @@ function PanelTabFrame({ children }: { children: React.ReactNode }) { export function tabIcon(type: TabType) { switch (type) { - case "dashboard": - return ; - case "host-manager": - return ; - case "settings": case "user-profile": case "admin-settings": return ; @@ -176,29 +148,6 @@ const RegisteredTab = memo(function RegisteredTab({ ); }); -const DashboardTabHost = memo(function DashboardTabHost({ - shell, - isVisible, -}: { - shell: TabShellCallbacks; - isVisible: boolean; -}) { - return withTabSuspense( - { - // "Add host" and friends say what to open in the Manage tab. - const request = pendingEvent - ? requestFromLegacyEvent(pendingEvent) - : null; - if (request) requestManage(request); - else shell.openSingletonTab(type); - }} - onOpenTab={(host, type) => shell.openTab(host, type)} - isVisible={isVisible} - />, - ); -}); - /** A rail panel opened as a tab when its plugin registers no tab of its own. */ const PanelAsTab = memo(function PanelAsTab({ panel, @@ -229,8 +178,6 @@ function noop() {} export interface TabRenderContext { shell: TabShellCallbacks; - /** What the Settings tab needs from the shell. */ - settings?: Omit; /** The terminal a panel shown as a tab sends commands to. */ panelTargetTab?: Tab; isVisible?: boolean; @@ -247,43 +194,12 @@ export function renderTabContent(tab: Tab, context: TabRenderContext) { } = context; switch (tab.type) { - case "dashboard": - return ; - case "split-screen": return null; - case "host-manager": - return withTabSuspense(); - case "plugins": return withTabSuspense(); - case "settings": - return context.settings - ? withTabSuspense( - , - ) - : null; - case "user-profile": case "admin-settings": return null; diff --git a/src/ui/sidebar/AdminApiKeysSection.tsx b/src/ui/sidebar/AdminApiKeysSection.tsx deleted file mode 100644 index 95b8ae1cf..000000000 --- a/src/ui/sidebar/AdminApiKeysSection.tsx +++ /dev/null @@ -1,259 +0,0 @@ -import { useConfirm } from "@/components/surface/surface-scope"; -import type { Dispatch, SetStateAction } from "react"; -import { useTranslation } from "react-i18next"; -import { copyToClipboard } from "@/lib/clipboard"; -import { deleteApiKey, type ApiKey } from "@/main-axios"; -import { Button } from "@/components/button"; -import { Input } from "@/components/input"; -import { Copy, Network, Plus, RefreshCw, Trash2 } from "lucide-react"; -import { toast } from "sonner"; -import { AccordionSection } from "./AdminSettingsShared"; -import type { AdminUser } from "./AdminManagementSections"; -import { Select2 } from "@/components/select2"; -import { DocsLink } from "@/components/docs-link"; - -type AdminApiKeysSectionProps = { - open: boolean; - onToggle: () => void; - apiKeys: ApiKey[]; - setApiKeys: Dispatch>; - loadApiKeys: () => void; - showCreateKey: boolean; - setShowCreateKey: Dispatch>; - createdKeyToken: string | null; - setCreatedKeyToken: Dispatch>; - newKeyName: string; - setNewKeyName: Dispatch>; - newKeyUserId: string; - setNewKeyUserId: Dispatch>; - newKeyExpiry: string; - setNewKeyExpiry: Dispatch>; - users: AdminUser[]; - handleCreateApiKey: () => void; - newKeyLoading: boolean; -}; - -export function AdminApiKeysSection({ - open, - onToggle, - apiKeys, - setApiKeys, - loadApiKeys, - showCreateKey, - setShowCreateKey, - createdKeyToken, - setCreatedKeyToken, - newKeyName, - setNewKeyName, - newKeyUserId, - setNewKeyUserId, - newKeyExpiry, - setNewKeyExpiry, - users, - handleCreateApiKey, - newKeyLoading, -}: AdminApiKeysSectionProps) { - const { t } = useTranslation(); - const confirm = useConfirm(); - - return ( - } - open={open} - onToggle={onToggle} - > -
-
- - {t("admin.apiKeysCount", { count: apiKeys.length })}{" "} - {t("admin.apiKeysDocsLink")} -
- {t("admin.apiKeysCliHint")}{" "} - {t("admin.apiKeysCliLink")} -
-
- - -
-
- {showCreateKey && ( -
- - {t("admin.newApiKey")} - - {createdKeyToken ? ( -
- - {t("admin.apiKeyCreatedWarning")} - -
- - {createdKeyToken} - - -
- -
- ) : ( - <> -
- - setNewKeyName(e.target.value)} - className="text-xs" - /> -
-
- - setNewKeyUserId(e.target.value)} - > - - {users.map((u) => ( - - ))} - -
-
- - setNewKeyExpiry(e.target.value)} - className="text-xs" - /> -
-
- - -
- - )} -
- )} - {apiKeys.map((key) => ( -
-
-
- - {key.name} - - {!key.isActive && ( - - {t("admin.revokedBadge")} - - )} -
- - {t("admin.apiKeyUser")}: {key.username} - - - {key.tokenPrefix}… - - - {key.createdAt.split("T")[0]} - - {key.expiresAt - ? key.expiresAt.split("T")[0] - : t("admin.apiKeyNoExpiry")} - - -
- -
- ))} -
-
- ); -} diff --git a/src/ui/sidebar/AdminAuditLogSection.tsx b/src/ui/sidebar/AdminAuditLogSection.tsx deleted file mode 100644 index d9e0a273b..000000000 --- a/src/ui/sidebar/AdminAuditLogSection.tsx +++ /dev/null @@ -1,491 +0,0 @@ -import { useState, useEffect, useCallback, useRef } from "react"; -import { useTranslation } from "react-i18next"; -import { Button } from "@/components/button"; -import { Input } from "@/components/input"; -import { - ChevronLeft, - ChevronRight, - ClipboardList, - RefreshCw, - X, -} from "lucide-react"; -import { AccordionSection } from "./AdminSettingsShared"; -import { - getAuditLogs, - getAuditLogActions, - getAuditForwarding, - updateAuditForwarding, - type AuditLog, - type AuditLogFilters, -} from "@/api/audit-log-api"; -import { toast } from "sonner"; -import type { AdminUser } from "./AdminManagementSections"; -import { Select2 } from "@/components/select2"; -import { parseServerTime } from "@/lib/server-time"; - -const RESOURCE_TYPES = [ - "user", - "host", - "credential", - "plugin", - "session", - "api_key", - "setting", -]; - -type AdminAuditLogSectionProps = { - open: boolean; - onToggle: () => void; - users: AdminUser[]; -}; - -export function AdminAuditLogSection({ - open, - onToggle, - users, -}: AdminAuditLogSectionProps) { - const { t } = useTranslation(); - - const [logs, setLogs] = useState([]); - const [forwardUrl, setForwardUrl] = useState(""); - const [forwardToken, setForwardToken] = useState(""); - const [forwardHasToken, setForwardHasToken] = useState(false); - const [forwardEnvConfigured, setForwardEnvConfigured] = useState(false); - const [forwardSaving, setForwardSaving] = useState(false); - - useEffect(() => { - if (!open) return; - getAuditForwarding() - .then((settings) => { - setForwardUrl(settings.url); - setForwardHasToken(settings.hasToken); - setForwardEnvConfigured(settings.envConfigured); - }) - .catch(() => {}); - }, [open]); - - async function handleSaveForwarding() { - setForwardSaving(true); - try { - const result = await updateAuditForwarding( - forwardUrl, - forwardToken || undefined, - ); - setForwardHasToken(result.hasToken || (!!result.url && forwardHasToken)); - setForwardToken(""); - toast.success(t("admin.auditForwardingSaved")); - } catch { - toast.error(t("admin.auditForwardingSaveError")); - } finally { - setForwardSaving(false); - } - } - const [total, setTotal] = useState(0); - const [page, setPage] = useState(1); - const [totalPages, setTotalPages] = useState(1); - const [loading, setLoading] = useState(false); - const [expandedId, setExpandedId] = useState(null); - const [actions, setActions] = useState([]); - - const [filterUserId, setFilterUserId] = useState(""); - const [filterAction, setFilterAction] = useState(""); - const [filterResourceType, setFilterResourceType] = useState(""); - const [filterSuccess, setFilterSuccess] = useState<"" | "true" | "false">(""); - const [filterStartDate, setFilterStartDate] = useState(""); - const [filterEndDate, setFilterEndDate] = useState(""); - - const debounceRef = useRef | null>(null); - - const fetchLogs = useCallback( - async (filters: AuditLogFilters, pg: number) => { - setLoading(true); - try { - const result = await getAuditLogs({ ...filters, page: pg, limit: 50 }); - setLogs(result.logs); - setTotal(result.total); - setTotalPages(result.totalPages); - } catch { - // non-fatal - } finally { - setLoading(false); - } - }, - [], - ); - - const buildFilters = useCallback((): AuditLogFilters => { - const f: AuditLogFilters = {}; - if (filterUserId) f.userId = filterUserId; - if (filterAction) f.action = filterAction; - if (filterResourceType) f.resourceType = filterResourceType; - if (filterSuccess !== "") f.success = filterSuccess === "true"; - if (filterStartDate) f.startDate = filterStartDate; - if (filterEndDate) f.endDate = filterEndDate; - return f; - }, [ - filterUserId, - filterAction, - filterResourceType, - filterSuccess, - filterStartDate, - filterEndDate, - ]); - - useEffect(() => { - if (!open) return; - getAuditLogActions() - .then((r) => setActions(r.actions)) - .catch(() => {}); - fetchLogs(buildFilters(), 1); - setPage(1); - }, [open, buildFilters, fetchLogs]); - - useEffect(() => { - if (!open) return; - if (debounceRef.current) clearTimeout(debounceRef.current); - debounceRef.current = setTimeout(() => { - setPage(1); - fetchLogs(buildFilters(), 1); - }, 300); - return () => { - if (debounceRef.current) clearTimeout(debounceRef.current); - }; - }, [ - open, - buildFilters, - fetchLogs, - filterUserId, - filterAction, - filterResourceType, - filterSuccess, - filterStartDate, - filterEndDate, - ]); - - function clearFilters() { - setFilterUserId(""); - setFilterAction(""); - setFilterResourceType(""); - setFilterSuccess(""); - setFilterStartDate(""); - setFilterEndDate(""); - } - - function handlePageChange(newPage: number) { - setPage(newPage); - fetchLogs(buildFilters(), newPage); - } - - function formatTimestamp(ts: string) { - try { - return parseServerTime(ts).toLocaleString(undefined, { - year: "numeric", - month: "short", - day: "numeric", - hour: "2-digit", - minute: "2-digit", - second: "2-digit", - }); - } catch { - return ts; - } - } - - const hasFilters = - filterUserId || - filterAction || - filterResourceType || - filterSuccess !== "" || - filterStartDate || - filterEndDate; - - return ( - } - open={open} - onToggle={onToggle} - > -
- {/* SIEM forwarding */} -
- - {t("admin.auditForwardingTitle")} - -

- {t("admin.auditForwardingDesc")} - {forwardEnvConfigured && ( - <> {t("admin.auditForwardingEnvNotice")} - )} -

- setForwardUrl(e.target.value)} - className="text-[10px] h-7" - /> - setForwardToken(e.target.value)} - className="text-[10px] h-7" - /> - -
- - {/* Filters */} -
-
- - setFilterUserId(e.target.value)} - > - - {(Array.isArray(users) ? users : []).map((u) => ( - - ))} - -
- -
- - setFilterAction(e.target.value)} - > - - {actions.map((a) => ( - - ))} - -
- -
- - setFilterResourceType(e.target.value)} - > - - {RESOURCE_TYPES.map((r) => ( - - ))} - -
- -
- - - setFilterSuccess(e.target.value as "" | "true" | "false") - } - > - - - - -
- -
- - setFilterStartDate(e.target.value)} - className="text-[10px] h-7" - /> -
- -
- - setFilterEndDate(e.target.value)} - className="text-[10px] h-7" - /> -
-
- - {/* Toolbar */} -
- - {t("admin.auditLogTotal", { total })} - -
- {hasFilters && ( - - )} - -
-
- - {/* Log table */} - {logs.length === 0 && !loading ? ( -
- {t("admin.auditLogEmpty")} -
- ) : ( -
- {logs.map((log) => ( -
- setExpandedId(expandedId === log.id ? null : log.id) - } - > -
- -
-
- - {(log.action || "unknown").replace(/_/g, " ")} - - - {log.resourceType} - - {log.resourceName && ( - - {log.resourceName} - - )} -
-
- - {log.username} - - - {formatTimestamp(log.timestamp)} - -
-
- - {log.success - ? t("admin.auditLogSuccess") - : t("admin.auditLogFailed")} - -
- - {expandedId === log.id && ( -
- {log.ipAddress && ( - - {t("admin.auditLogIp")}: {log.ipAddress} - - )} - {log.resourceId && ( - - {t("admin.auditLogResourceId")}: {log.resourceId} - - )} - {log.details && ( - - {log.details} - - )} - {log.errorMessage && ( - - {log.errorMessage} - - )} -
- )} -
- ))} -
- )} - - {/* Pagination */} - {totalPages > 1 && ( -
- - - {t("admin.auditLogPage", { page, totalPages, total })} - - -
- )} -
-
- ); -} diff --git a/src/ui/sidebar/AdminBrandingSection.tsx b/src/ui/sidebar/AdminBrandingSection.tsx deleted file mode 100644 index a736eb241..000000000 --- a/src/ui/sidebar/AdminBrandingSection.tsx +++ /dev/null @@ -1,154 +0,0 @@ -import { useRef } from "react"; -import { useTranslation } from "react-i18next"; -import { PaintbrushIcon } from "lucide-react"; -import { Button } from "@/components/button"; -import { Input } from "@/components/input"; -import type { BrandingSettings } from "@/api/settings-api"; -import { AccordionSection } from "./AdminSettingsShared"; -import { - BRANDING_LOGO_ACCEPT, - isAcceptedBrandingLogoFile, -} from "./branding-logo-file"; - -export function AdminBrandingSection({ - open, - onToggle, - settings, - setSettings, - saving, - onSave, - onResetLogo, -}: { - open: boolean; - onToggle: () => void; - settings: BrandingSettings | null; - setSettings: (settings: BrandingSettings) => void; - saving: boolean; - onSave: () => void; - onResetLogo: () => void; -}) { - const { t } = useTranslation(); - const fileInputRef = useRef(null); - - function handleFileChange(event: React.ChangeEvent) { - const file = event.target.files?.[0]; - event.target.value = ""; - if (!file || !settings) return; - if (!isAcceptedBrandingLogoFile(file)) { - alert(t("admin.brandingLogoInvalid")); - return; - } - const reader = new FileReader(); - reader.onload = () => { - if (typeof reader.result === "string") { - setSettings({ ...settings, logo: reader.result }); - } - }; - reader.readAsDataURL(file); - } - - return ( - } - open={open} - onToggle={onToggle} - > - {settings === null ? ( -
- {t("common.loading")} -
- ) : ( -
-
- - -
- -
-
- - {t("admin.brandingLogo")} - - - {t("admin.brandingLogoDesc")} - -
-
- {settings.logo ? ( - - ) : ( -
- )} - - - {settings.logo && ( - - )} -
-
- -
- -
-
- )} - - ); -} diff --git a/src/ui/sidebar/AdminHostTags.tsx b/src/ui/sidebar/AdminHostTags.tsx deleted file mode 100644 index 90736c975..000000000 --- a/src/ui/sidebar/AdminHostTags.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import { useEffect, useState } from "react"; -import { useTranslation } from "react-i18next"; -import { toast } from "sonner"; -import { X } from "lucide-react"; -import { getHostTags, saveHostTags } from "@/api/host-tags-api"; - -export function AdminHostTags() { - const { t } = useTranslation(); - const [tags, setTags] = useState([]); - const [input, setInput] = useState(""); - const [loaded, setLoaded] = useState(false); - const [saving, setSaving] = useState(false); - - useEffect(() => { - let cancelled = false; - getHostTags() - .then((list) => { - if (cancelled) return; - setTags(list); - setLoaded(true); - }) - .catch(() => { - if (!cancelled) toast.error(t("admin.hostTagsError")); - }); - return () => { - cancelled = true; - }; - }, [t]); - - async function save(next: string[]) { - const previous = tags; - setTags(next); - setSaving(true); - try { - setTags(await saveHostTags(next)); - window.dispatchEvent(new Event("termix:host-tags-changed")); - } catch { - setTags(previous); - toast.error(t("admin.hostTagsError")); - } finally { - setSaving(false); - } - } - - function add(raw: string) { - const tag = raw.trim(); - setInput(""); - if (!tag || tags.includes(tag)) return; - void save([...tags, tag]); - } - - return ( -
- - - {t("admin.hostTagsDesc")} - -
- {tags.map((tag) => ( - - {tag} - - - ))} - setInput(e.target.value)} - onBlur={() => add(input)} - onKeyDown={(e) => { - if (e.nativeEvent.isComposing) return; - if ((e.key === " " || e.key === "Enter") && input.trim()) { - e.preventDefault(); - add(input); - } else if (e.key === "Backspace" && !input && tags.length > 0) { - void save(tags.slice(0, -1)); - } - }} - /> -
-
- ); -} diff --git a/src/ui/sidebar/AdminManagementSections.tsx b/src/ui/sidebar/AdminManagementSections.tsx deleted file mode 100644 index ce052c7e3..000000000 --- a/src/ui/sidebar/AdminManagementSections.tsx +++ /dev/null @@ -1,822 +0,0 @@ -import { useConfirm } from "@/components/surface/surface-scope"; -import { useState, type Dispatch, type SetStateAction } from "react"; -import { useTranslation } from "react-i18next"; -import { - deleteRole, - deleteUser, - getPermissionsCatalog, - revokeAllUserSessions, - revokeSession, - updateRole, -} from "@/main-axios"; -import type { PermissionCatalogEntry, Role } from "@/main-axios"; -import { pluginKey } from "@/lib/plugin-i18n"; -import { PluginIcon } from "@/lib/plugin-icon"; -import { Button } from "@/components/button"; -import { Input } from "@/components/input"; -import { PanelSearch } from "@/components/panel-layout"; -import { - Activity, - Check, - KeyRound, - Pencil, - Plus, - RefreshCw, - Settings2, - Share2, - Trash2, - Unlink, - User, -} from "lucide-react"; -import { toast } from "sonner"; -import { AccordionSection } from "./AdminSettingsShared"; -import { roleLabel } from "@/lib/role-label"; - -export type AdminUser = { - id: string; - username: string; - isAdmin: boolean; - isExternal: boolean; - passwordHash?: string; - dataUnlocked?: boolean; - secondFactorEnabled?: boolean; -}; - -export type AdminSession = { - id: string; - userId: string; - username?: string; - deviceType: string; - deviceInfo: string; - createdAt: string; - expiresAt: string; - lastActiveAt: string; - isRevoked?: boolean; - isCurrentSession?: boolean; -}; - -type ApiErrorLike = { - response?: { - data?: { - error?: string; - }; - }; -}; - -function apiErrorMessage(error: unknown, fallback: string) { - return (error as ApiErrorLike).response?.data?.error || fallback; -} - -type UsersSectionProps = { - open: boolean; - onToggle: () => void; - users: AdminUser[]; - setUsers: Dispatch>; - loadUsers: () => void; - setCreateUserOpen: Dispatch>; - setEditUserTarget: Dispatch>; - setEditUserOpen: Dispatch>; - setLinkAccountTarget: Dispatch< - SetStateAction<{ id: string; username: string; isExternal: boolean } | null> - >; - setLinkAccountOpen: Dispatch>; - setUnlinkAccountTarget: Dispatch< - SetStateAction<{ id: string; username: string } | null> - >; - setUnlinkAccountOpen: Dispatch>; - onManageUser: (user: AdminUser) => void; - search: string; - onSearchChange: (value: string) => void; - page: number; - pageSize: number; - total: number; - onPageChange: Dispatch>; -}; - -export function AdminUsersSection({ - open, - onToggle, - users, - setUsers, - loadUsers, - setCreateUserOpen, - setEditUserTarget, - setEditUserOpen, - setLinkAccountTarget, - setLinkAccountOpen, - setUnlinkAccountTarget, - setUnlinkAccountOpen, - onManageUser, - search, - onSearchChange, - page, - pageSize, - total, - onPageChange, -}: UsersSectionProps) { - const { t } = useTranslation(); - const confirm = useConfirm(); - const pageCount = Math.max(1, Math.ceil(total / pageSize)); - const hasPrev = page > 0; - const hasNext = page + 1 < pageCount; - - return ( - } - open={open} - onToggle={onToggle} - > -
-
- - {t("admin.usersCount", { count: total })} - -
- - -
-
-
- -
- {users.map((user) => { - const authLabel = - user.isExternal && user.passwordHash - ? t("admin.authTypeDual") - : user.isExternal - ? t("admin.authTypeExternal") - : t("admin.authTypeLocal"); - return ( -
-
-
- {user.username[0].toUpperCase()} -
-
- - {user.username} - -
- {user.isAdmin && ( - - {t("admin.adminBadge")} - - )} - - {authLabel} - -
-
-
-
- - - {user.isExternal && user.passwordHash ? ( - - ) : ( - - )} - -
-
- ); - })} - {users.length === 0 && ( -
- {search ? t("admin.noUsersMatch") : t("admin.noUsers")} -
- )} - {pageCount > 1 && ( -
- - - {t("admin.pageOf", { page: page + 1, total: pageCount })} - - -
- )} -
-
- ); -} - -type SessionsSectionProps = { - open: boolean; - onToggle: () => void; - sessions: AdminSession[]; - setSessions: Dispatch>; - loadSessions: () => void; -}; - -export function AdminSessionsSection({ - open, - onToggle, - sessions, - setSessions, - loadSessions, -}: SessionsSectionProps) { - const { t } = useTranslation(); - const confirm = useConfirm(); - - return ( - } - open={open} - onToggle={onToggle} - > -
-
- - {t("admin.sessionsActive", { count: sessions.length })} - - -
- {sessions.map((session) => ( -
-
-
- - {session.username} - - {session.isCurrentSession && ( - - {t("admin.youBadge")} - - )} -
- - {session.deviceInfo} - - - {t("admin.sessionActive", { time: session.lastActiveAt })} - - - {t("admin.sessionExpires", { time: session.expiresAt })} - -
-
- - -
-
- ))} -
-
- ); -} - -type RolesSectionProps = { - open: boolean; - onToggle: () => void; - roles: Role[]; - setRoles: Dispatch>; - showCreateRole: boolean; - setShowCreateRole: Dispatch>; - newRoleName: string; - setNewRoleName: Dispatch>; - newRoleDisplayName: string; - setNewRoleDisplayName: Dispatch>; - newRoleDescription: string; - setNewRoleDescription: Dispatch>; - handleCreateRole: () => void; - createRoleLoading: boolean; -}; - -export function AdminRolesSection({ - open, - onToggle, - roles, - setRoles, - showCreateRole, - setShowCreateRole, - newRoleName, - setNewRoleName, - newRoleDisplayName, - setNewRoleDisplayName, - newRoleDescription, - setNewRoleDescription, - handleCreateRole, - createRoleLoading, -}: RolesSectionProps) { - const { t } = useTranslation(); - const confirm = useConfirm(); - const [catalog, setCatalog] = useState([]); - const [editingRoleId, setEditingRoleId] = useState(null); - const [editingPermissions, setEditingPermissions] = useState>( - new Set(), - ); - const [savingPermissions, setSavingPermissions] = useState(false); - - function rolePermissions(role: Role): string[] { - if (Array.isArray(role.permissions)) return role.permissions; - if (typeof role.permissions === "string") { - try { - return JSON.parse(role.permissions) as string[]; - } catch { - return []; - } - } - return []; - } - - async function openPermissionsEditor(role: Role) { - if (editingRoleId === role.id) { - setEditingRoleId(null); - return; - } - try { - if (catalog.length === 0) { - const res = await getPermissionsCatalog(); - setCatalog(res.catalog ?? []); - } - setEditingPermissions(new Set(rolePermissions(role))); - setEditingRoleId(role.id); - } catch { - toast.error(t("admin.rolePermissions.loadError")); - } - } - - function togglePermission(permission: string) { - setEditingPermissions((prev) => { - const next = new Set(prev); - if (next.has(permission)) next.delete(permission); - else next.add(permission); - return next; - }); - } - - async function savePermissions(role: Role) { - setSavingPermissions(true); - try { - const permissions = [...editingPermissions]; - await updateRole(role.id, { permissions }); - setRoles((prev) => - prev.map((entry) => - entry.id === role.id ? { ...entry, permissions } : entry, - ), - ); - setEditingRoleId(null); - toast.success(t("admin.rolePermissions.saved")); - } catch { - toast.error(t("admin.rolePermissions.saveError")); - } finally { - setSavingPermissions(false); - } - } - - return ( - } - open={open} - onToggle={onToggle} - > -
-
- - {t("admin.rolesCount", { count: roles.length })} - - -
- {showCreateRole && ( -
- - {t("admin.newRole")} - -
- - setNewRoleName(e.target.value)} - className="text-xs" - /> -
-
- - setNewRoleDisplayName(e.target.value)} - className="text-xs" - /> -
-
- -