mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-29 22:55:24 +00:00
* fix(sso): send the PKCE verifier for GitHub login (#1534) * fix(remote-desktop): clip cursor overflow without disabling zoom (#1535) * test(remote-desktop): preserve sessions beyond one hour (#1536) * fix(hosts): expose controls for overflowing editor tabs (#1537) * fix(hosts): expose controls for overflowing editor tabs * test(hosts): mock resize observation in admin panel tests * fix(status): skip TCP probes while host sessions are active (#1538) * fix(database): batch session activity persistence (#1539) * docs(api): describe cookie and API key authentication (#1540) * fix(snippets): repair missing note column on SQLite upgrades (#1541) * fix(docker): retain stored SSH credential association (#1543) * fix(file-manager): render transfer toasts without plugin hooks (#1546) * feat(hosts): keep compact row actions inline (#1547) * fix(auth): allow retrying unavailable second-factor interfaces (#1549) * fix(auth): reject unresolved legacy identity provisioning (#1550) * fix(desktop): ship the plugin SDK inside Mac App Store builds (#1551) * fix(tmux): pass full session info to the terminal's session picker (#1552) The tmux.sessions service reduced detected sessions to bare names, but the picker reads session.name, so every entry rendered blank and selecting one sent an empty name, which created a new session instead of attaching. * fix(ssh): read force keyboard-interactive as a boolean when resolving hosts (#1553) The column holds the text "true"/"false", and the resolver passed it through as-is. The string "false" is truthy, so the password provider treated every saved host as forced keyboard-interactive and left the password out. Jump hops are built straight from the resolved host, so a password hop whose server doesn't offer keyboard-interactive failed with "All configured authentication methods failed". * fix(database): batch database saves for bulk host writes (#1554) * fix(database): yield to the event loop between database saves Each SQLite save serializes and encrypts the whole database into new buffers, which V8 only releases once the event loop turns. Boot migrations and bulk host import write plugin settings per host and per key in an awaited loop, so hundreds of full copies piled up and the container ran out of memory. * fix(database): save once per bulk host write instead of once per row On SQLite every repository write force-saves the whole database. Boot plugin data migrations, host defaults materialization and the bulk host routes write one row per host per setting, so they serialized and encrypted the full database hundreds of times in a row. DatabaseSaveTrigger.batched wraps a function so force saves made while it runs collapse into a single save when it finishes. Nested scopes fold into the outer one, and work that outlives its scope saves normally. * feat(hosts): add instance-wide predefined tag suggestions (#1548) * feat(hosts): add shared predefined tag suggestions * style(hosts): format tag catalog routes * test(database): advance fake timers past the save yield (#1555) * fix(i18n): complete Simplified Chinese core and plugin translations (#1542) * fix(i18n): complete Chinese onboarding and navigation labels * fix(i18n): translate remaining Chinese core and plugin interfaces * fix(i18n): translate host editor tab overflow controls * fix(i18n): use consistent Chinese fleet terminology * fix(i18n): localize hardcoded controls and plugin views * fix(i18n): translate built-in homepage widget catalog * test(homepage): follow translated timezone placeholder * fix(i18n): translate plugin-provided homepage widgets * fix(i18n): localize feature settings section titles * fix: 2.8 oidc accounts unable to sign in after upgrading (#1381) * fix: plugins losing the saved ssh login when copying a host (#1391) * fix: fleets, proxmox and automations not getting the host sudo password * fix: host imports running a defaults pass and metrics restart per host (#1384) * fix: high cpu from status probes and full database saves on every sample (#1300) * fix: user data export freezing the server (#1393) * fix: op:// secret references rejected as ssh keys on credentials (#1394) * fix: slow file deletes from the trash lookups on every delete (#1390) * fix: add openapi docs and error handling to host tag routes * test: compare download stream buffers directly so it stops timing out * chore: drop em dash from host row comment * chore: update release notes for 2.9.1 * fix: restore space to add host tags and redesign predefined tags editor * fix: host key silently accepted when the host is missing from the database (#1397) * fix: clearer host login failed status label and fix its translations (#1396) * chore: add host key and status label fixes to release notes * fix: sso and ldap provider dialogs overflowing the screen and using mismatched toggles * chore: increment ver * fix(audit): store plugin entries with no acting user as a null user_id (#1556) Plugin audit entries written outside a request used the literal "system" as user_id. That column references users.id, so the insert was refused (Postgres logs it as an FK violation) and the entry was silently dropped. Write null instead and keep "system" / plugin:<id> in username. * chore: add sso/ldap dialog and audit log fixes to release notes * fix: tunnels and host settings missing from shared hosts on desktop * fix: remote desktop logins missing from shared hosts on desktop * fix: simplify host status to online/offline and keep it live without a refresh * chore: sync Crowdin translations for 2.9.1 --------- Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
239 lines
10 KiB
JSON
239 lines
10 KiB
JSON
{
|
|
"nav": {
|
|
"snippets": "Úryvky"
|
|
},
|
|
"onboarding": {
|
|
"feature_snippets": "Úryvky",
|
|
"feature_snippets_desc": "Uložte si často spouštíné příkazy a odešlete je do terminálu jedním kliknutím."
|
|
},
|
|
"permissions": {
|
|
"view": {
|
|
"title": "Zobrazit úryvky",
|
|
"description": "Prohlédněte si své vlastní úryvky, poznámky a sdílené úryvky."
|
|
},
|
|
"create": {
|
|
"title": "Vytvořit úryvky",
|
|
"description": "Vytvořte nové úryvky, poznámky a složky."
|
|
},
|
|
"edit": {
|
|
"title": "Upravit úryvky",
|
|
"description": "Přejmenujte nebo změňte existující úryvky a složky."
|
|
},
|
|
"delete": {
|
|
"title": "Smazat úryvky",
|
|
"description": "Smazat úryvky a složky."
|
|
},
|
|
"share": {
|
|
"title": "Sdílet úryvky",
|
|
"description": "Sdílejte úryvky a složky s ostatními uživateli nebo rolemi."
|
|
}
|
|
},
|
|
"settings": {
|
|
"foldersCollapsed": {
|
|
"label": "Sbalit složky ve výchozím nastavení",
|
|
"description": "Spuštění každé složky úryvků kódu sbalené při otevření panelu Úryvky kódu."
|
|
},
|
|
"showCommands": {
|
|
"label": "Zobrazit příkazy",
|
|
"description": "Zobrazit první řádek příkazu každého úryvku pod jeho názvem."
|
|
},
|
|
"confirmExecution": {
|
|
"label": "Potvrďte před spuštěním",
|
|
"description": "Zeptat se před spuštěním úryvku příkazu v terminálu."
|
|
}
|
|
},
|
|
"cancel": "Zrušit",
|
|
"loading": "Načítání...",
|
|
"searchPlaceholder": "Hledat úryvky",
|
|
"newFolder": "Nová složka",
|
|
"newSnippet": "Nový úryvek",
|
|
"noFolder": "Žádná složka",
|
|
"noSnippetsInFolder": "V této složce nejsou žádné úryvky",
|
|
"noTerminalTabsOpen": "Není otevřená žádná záložka terminálu",
|
|
"run": "Běh",
|
|
"pasteToTerminal": "Vložit do terminálu",
|
|
"copySuccess": "Zkopírováno do schránky",
|
|
"importExport": "Import / Export",
|
|
"importFailed": "Import úryvků se nezdařilo",
|
|
"nameLabel": "Jméno",
|
|
"namePlaceholder": "Název úryvku",
|
|
"descriptionLabel": "Popis",
|
|
"descriptionPlaceholder": "Volitelný popis",
|
|
"folderLabel": "Složka",
|
|
"typeLabel": "Typ",
|
|
"typeCommand": "Příkaz",
|
|
"typeNote": "Poznámka",
|
|
"commandLabel": "Příkaz",
|
|
"commandPlaceholder": "Příkaz ke spuštění, např. systemctl status $HOST",
|
|
"noteLabel": "Poznámka",
|
|
"notePlaceholder": "Text k vložení do terminálu",
|
|
"createSnippetTitle": "Vytvořit úryvek",
|
|
"createSnippetButton": "Vytvořit úryvek",
|
|
"createSuccess": "Úryvek vytvořen",
|
|
"createFailed": "Nepodařilo se vytvořit úryvek",
|
|
"editSnippetTitle": "Upravit úryvek",
|
|
"saveSnippetButton": "Uložit úryvek",
|
|
"updateSuccess": "Úryvek aktualizován",
|
|
"updateFailed": "Nepodařilo se aktualizovat úryvek",
|
|
"deleteFailed": "Nepodařilo se odstranit úryvek",
|
|
"createFolderTitle": "Vytvořit složku",
|
|
"createFolderButton": "Vytvořit složku",
|
|
"folderCreateSuccess": "Složka vytvořena",
|
|
"folderCreateFailed": "Nepodařilo se vytvořit složku",
|
|
"editFolderTitle": "Upravit složku",
|
|
"saveFolderButton": "Uložit složku",
|
|
"folderEditSuccess": "Složka aktualizována",
|
|
"folderEditFailed": "Nepodařilo se aktualizovat složku",
|
|
"folderNameLabel": "Název složky",
|
|
"folderNamePlaceholder": "Název složky",
|
|
"folderIconLabel": "Ikona",
|
|
"folderDeleteSuccess": "Složka smazána",
|
|
"folderDeleteFailed": "Složku se nepodařilo smazat",
|
|
"confirmRunMessage": "Spustit „{{name}}“?",
|
|
"confirmRunButton": "Běh",
|
|
"runSuccess": "Spuštěno „{{name}}“ na terminálu(ech) {{count}}",
|
|
"pasteSuccess": "Vloženo „{{name}}“ do terminálu(ů) {{count}}",
|
|
"admin": {
|
|
"tabTitle": "Úryvky",
|
|
"count": "úryvky {{count}}",
|
|
"add": "Přidat úryvek",
|
|
"namePlaceholder": "Název úryvku",
|
|
"contentPlaceholder": "Obsah příkazu",
|
|
"folderPlaceholder": "Složka (volitelné)",
|
|
"empty": "Tento uživatel nemá žádné úryvky",
|
|
"deleteConfirm": "Smazat úryvek „{{name}}“ patřící do {{username}}?",
|
|
"deleted": "Úryvek smazán",
|
|
"deleteFailed": "Nepodařilo se odstranit úryvek",
|
|
"requiredFields": "Název a obsah úryvku jsou povinné",
|
|
"saved": "Úryvek uložen",
|
|
"saveFailed": "Uložení úryvku se nezdařilo",
|
|
"saving": "Ukládání…",
|
|
"save": "Uložit"
|
|
},
|
|
"backToSnippets": "Zpět k úryvkům",
|
|
"settingsTitle": "Nastavení úryvků",
|
|
"settingsDisplayTitle": "Zobrazit",
|
|
"settingsBehaviorTitle": "Chování",
|
|
"typeCommandHint": "Běží v aktivním terminálu.",
|
|
"typeNoteHint": "Vloží do aktivního terminálu bez spuštění.",
|
|
"variablesHint": "Proměnné: $HOST, $USER, $PORT, $NAME, ${INPUT_1:Popis}",
|
|
"doubleClickToRun": "Dvojitým kliknutím spustíte",
|
|
"sharedBadge": "Sdílené",
|
|
"copyToClipboard": "Kopírovat do schránky",
|
|
"copyFailed": "Kopírování do schránky se nezdařilo",
|
|
"moreOptions": "Více možností",
|
|
"moreActions": "Další akce",
|
|
"moveToFolder": "Přesunout do složky",
|
|
"deleteSnippet": "Smazat úryvek",
|
|
"deleteSnippetConfirm": "Smazat úryvek „{{name}}“?",
|
|
"deleteSuccess": "Úryvek smazán",
|
|
"delete": "Vymazat",
|
|
"folderActions": "Akce se složkou",
|
|
"addSnippetHere": "Nový úryvek zde",
|
|
"deleteFolder": "Smazat složku",
|
|
"deleteFolderConfirm": "Smazat složku „{{name}}“? Její úryvky se přesunou mimo složku.",
|
|
"createFolderDescription": "Seskupte související úryvky.",
|
|
"editFolderDescription": "Změňte název, barvu nebo ikonu této složky.",
|
|
"folderColorLabel": "Barva",
|
|
"loadFailed": "Načtení úryvků se nezdařilo",
|
|
"importSkipExisting": "Importovat (přeskočit existující)",
|
|
"importOverwrite": "Importovat (přepsat existující)",
|
|
"importInvalidFile": "Tento soubor není platným exportem úryvků.",
|
|
"importSuccess": "Importováno {{imported}}, aktualizováno {{updated}}, přeskočeno {{skipped}}",
|
|
"exportSnippets": "Exportovat úryvky",
|
|
"exportSuccess": "Exportované úryvky",
|
|
"exportFailed": "Export úryvků se nezdařilo",
|
|
"expandAll": "Rozbalit všechny složky",
|
|
"collapseAll": "Sbalit všechny složky",
|
|
"docsLink": "Dokumentace",
|
|
"clearSearch": "Vymazat vyhledávání",
|
|
"noSearchResults": "Žádné úryvky neodpovídají vašemu vyhledávání",
|
|
"emptyTitle": "Zatím žádné úryvky",
|
|
"emptyDescription": "Uložte si často spouštíné příkazy a poté je spusťte v terminálu jedním kliknutím.",
|
|
"shareSnippet": "Sdílet úryvek",
|
|
"shareFolder": "Sdílet složku",
|
|
"shareExpiry": "Platnost vyprší",
|
|
"shareExpiryOptions": {
|
|
"h0": "Nikdy",
|
|
"h1": "Za 1 hodinu",
|
|
"h24": "Za 1 den",
|
|
"h168": "Za 7 dní",
|
|
"h720": "Za 30 dní"
|
|
},
|
|
"shareButton": "Podíl",
|
|
"shareSuccess": "Sdíleno s {{count}}",
|
|
"shareFailed": "Sdílení se nezdařilo",
|
|
"shareLoadFailed": "Nepodařilo se načíst podrobnosti o sdílení",
|
|
"currentAccess": "Aktuální přístup",
|
|
"notSharedYet": "Zatím s nikým nesdíleno",
|
|
"revokeAccess": "Zrušit",
|
|
"revokeSuccess": "Přístup zrušen",
|
|
"revokeFailed": "Zrušení přístupu se nezdařilo",
|
|
"close": "Blízko",
|
|
"targetHostsLabel": "Cílové hostitele",
|
|
"targetHostsHint": "Vyberte hostitele, na kterých se má tento příkaz spustit přímo, bez otevřeného terminálu. Pro spuštění v aktivním terminálu ponechte pole prázdné.",
|
|
"clearTargetHosts": "Jasný",
|
|
"noHostsAvailable": "Nejsou dostupní žádní hostitelé",
|
|
"searchHosts": "Vyhledávání hostitelů",
|
|
"runOnTargets": "Spustit na cílových hostitelích",
|
|
"executionResultTitle": "Výsledky pro „{{name}}“",
|
|
"executionResultDescription": "Výstup z každého cílového hostitele.",
|
|
"executionSuccess": "Úspěch",
|
|
"executionFailed": "Selhalo",
|
|
"directRunSuccess": "Spuštěno „{{name}}“ na hostiteli(ích) {{count}}",
|
|
"directRunPartialFail": "„{{name}}“ selhalo na některých hostitelích",
|
|
"reorderFailed": "Nepodařilo se změnit pořadí úryvků",
|
|
"dropToRemoveFromFolder": "Přetáhněte sem pro přesun ze složky",
|
|
"shareSnippetTitle": "Sdílet „{{name}}“",
|
|
"shareFolderTitle": "Sdílet složku „{{name}}“",
|
|
"shareWith": "Sdílet s",
|
|
"usersTab": "Uživatelé",
|
|
"rolesTab": "Role",
|
|
"shareSearchPlaceholder": "Vyhledávání uživatelů nebo rolí",
|
|
"shareNoMatches": "Žádné shody",
|
|
"shareWithCount": "Sdílet s {{count}}",
|
|
"shareFolderHint": "Sdílí všechny úryvky v této složce. Úryvky přidané později se nesdílejí automaticky.",
|
|
"shareFolderSummary": "Sdílené úryvky kódu {{count}} v této složce",
|
|
"grantedBy": "Uděleno",
|
|
"expired": "Platnost vypršela",
|
|
"variablesDialogTitle": "Spustit „{{name}}“",
|
|
"variablesDialogDescription": "Před spuštěním úryvku kódu vyplňte jeho potřebné hodnoty.",
|
|
"variablesPreviewLabel": "Náhled",
|
|
"variablesConfirmButton": "Běh",
|
|
"keybindings": {
|
|
"runSnippet": "Spustit existující úryvek kódu",
|
|
"snippetLabel": "Úryvek",
|
|
"selectSnippet": "Vyberte úryvek",
|
|
"snippetMissing": "úryvek nenalezen",
|
|
"snippetRequired": "Vyberte úryvek"
|
|
},
|
|
"paletteHintRun": "Spustit v aktivní kartě terminálu",
|
|
"host": {
|
|
"startupTitle": "Spustit úryvek",
|
|
"quickActionsTitle": "Rychlé akce",
|
|
"quickActionsDescription": "Rychlé akce se zobrazují jako tlačítka v panelu nástrojů Metriky hostitele pro spuštění příkazů jedním kliknutím.",
|
|
"noQuickActions": "Zatím žádné rychlé akce.",
|
|
"buttonLabel": "Štítek tlačítka",
|
|
"selectSnippet": "Vybrat úryvek...",
|
|
"addQuickAction": "Přidat akci",
|
|
"tabTitle": "Úryvky",
|
|
"startupDescription": "Spustí se v terminálu při každém připojení k tomuto hostiteli. Proměnné jako $HOST jsou vyplněny; úryvek kódu, který požaduje vstupy, je přeskočen.",
|
|
"none": "Žádný",
|
|
"removeQuickAction": "Odebrat rychlou akci"
|
|
},
|
|
"quickActions": {
|
|
"running": "Spouštění {{name}}...",
|
|
"succeeded": "{{name}} úspěšně dokončeno",
|
|
"failed": "{{name}} selhalo",
|
|
"error": "Nepodařilo se spustit {{name}}"
|
|
},
|
|
"paletteHintPaste": "Vložit do aktivní záložky terminálu",
|
|
"targetTerminals": "Zaběhnout",
|
|
"targetTerminalsHint": "volitelné, jinak aktivní záložka",
|
|
"selectAll": "Vše",
|
|
"selectNone": "Žádný",
|
|
"plugin": {
|
|
"name": "Snippets"
|
|
}
|
|
}
|