diff --git a/api/routes.py b/api/routes.py
index fd8b0f38..589f2afc 100644
--- a/api/routes.py
+++ b/api/routes.py
@@ -9204,6 +9204,15 @@ _LOGIN_LOCALE = {
"invalid_pw": "M\u1eadt kh\u1ea9u kh\u00f4ng h\u1ee3p l\u1ec7",
"conn_failed": "K\u1ebft n\u1ed1i th\u1ea5t b\u1ea1i",
},
+ "cs": {
+ "lang": "cs-CZ",
+ "title": "P\u0159ihl\u00e1sit se",
+ "subtitle": "Zadejte heslo pro pokra\u010dov\u00e1n\u00ed",
+ "placeholder": "Heslo",
+ "btn": "P\u0159ihl\u00e1sit se",
+ "invalid_pw": "Neplatn\u00e9 heslo",
+ "conn_failed": "P\u0159ipojen\u00ed selhalo",
+ },
}
diff --git a/static/i18n.js b/static/i18n.js
index 88832e47..d04a8e81 100644
--- a/static/i18n.js
+++ b/static/i18n.js
@@ -18102,6 +18102,1651 @@ const LOCALES = {
outline_loading: 'Chargement\u2026',
},
+ cs: {
+ _label: 'Čeština',
+ _lang: 'cs',
+ _speech: 'cs-CZ',
+ copy_relative_path: 'Kopírovat relativní cestu',
+ cron_schedule_hour_label: 'Hodina',
+ cron_schedule_minute_label: 'Minuta',
+ cron_schedule_weekday_label: 'Den v týdnu',
+ cron_schedule_month_day_label: 'Den v měsíci',
+ cron_schedule_time_label: 'Čas',
+ cron_schedule_conj_on: 'v',
+ cron_schedule_conj_on_day: 'v den',
+ cron_schedule_conj_at: 'v',
+ cron_schedule_conj_at_minute: 'v minutě',
+ cron_weekday_sun: 'Neděle',
+ cron_weekday_mon: 'Pondělí',
+ cron_weekday_tue: 'Úterý',
+ cron_weekday_wed: 'Středa',
+ cron_weekday_thu: 'Čtvrtek',
+ cron_weekday_fri: 'Pátek',
+ cron_weekday_sat: 'Sobota',
+ cron_schedule_time_hint: 'Čas je serverový; cron běží na straně serveru.',
+ active_conversation_meta: (title, count) => `${title} · ${count} zpráv${count === 1 ? 'a' : ''}`,
+ active_conversation_none: 'Žádná aktivní konverzace není vybrána.',
+ add: 'Přidat',
+ add_failed: 'Přidání selhalo: ',
+ agent_soul: 'Duch agenta',
+ all_uploads_failed: (n) => `Všech ${n} nahrávání selhalo`,
+ approval_skip_all: '⚡ Přeskočit vše pro tuto relaci',
+ approval_skip_all_title: 'Přeskočit všechny výzvy ke schválení pro tuto relaci',
+ archive_extracted: (n, c) => `Rozbaleno ${n} souborů z ${c} archivů`,
+ auth_ack_save_failed: 'Nepodařilo se aktualizovat potvrzení: ',
+ auth_acknowledged_label: 'Zkontroloval jsem toto riziko; zobrazit méně urgentní varování v navigaci.',
+ auth_disabled: 'Auth zakázáno — ochrana heslem odstraněna',
+ auth_disabled_warning_message: 'Tato instance je přístupná bez autentifikace.',
+ auth_status_passkey_only: 'Pouze passkey',
+ auth_status_password: 'Heslová autentifikace',
+ auth_status_unauthenticated: 'Neautentifikováno',
+ auth_warning_badge: 'Auth zakázáno',
+ bg_error_multi: (count) => `${count} relací narazilo na chybu`,
+ bg_error_single: (title) => `"${title}" narazil na chybu`,
+ cancel: 'Zrušit',
+ checkpoint_date: 'Datum',
+ checkpoint_diff_files_changed: (n) => `${n} souborů změněno`,
+ checkpoint_diff_no_changes: 'Žádné rozdíly mezi tímto kontrolním bodem a aktuálním pracovním prostorem.',
+ checkpoint_diff_title: 'Změny v kontrolním bodě',
+ checkpoint_empty: 'Pro tento pracovní prostor nebyl nalezen žádný kontrolní bod.',
+ checkpoint_error: 'Nepodařilo se načíst kontrolní body',
+ checkpoint_files: 'Soubory',
+ checkpoint_loading: 'Načítám kontrolní body…',
+ checkpoint_message: 'Zpráva',
+ checkpoint_restore: 'Obnovit',
+ checkpoint_restore_confirm_message: (ckpt) => `Obnovit pracovní prostor do kontrolního bodu "${ckpt}"? Toto přepíše soubory uloženými verzemi. Soubory přidané po tomto kontrolním bodě nebudou smazány.`,
+ checkpoint_restore_confirm_title: 'Obnovit kontrolní bod?',
+ checkpoint_restored: 'Kontrolní bod obnoven',
+ checkpoint_title: 'Kontrolní body',
+ checkpoint_view_diff: 'Zobrazit rozdíly',
+ clear_conversation_btn_tooltip: 'Vymazat všechny zprávy v této konverzaci',
+ clear_conversation_message: 'Vymazat všechny zprávy? Toto nelze vrátit zpět.',
+ clear_conversation_title: 'Vymazat konverzaci',
+ clear_failed: 'Vymazání selhalo: ',
+ close_menu: 'Zavřít nabídku',
+ cmd_reasoning: 'Přepnout viditelnost přemýšlení (zobrazit/skrýt), nastavit úroveň úsilí nebo zkontrolovat aktuální stav',
+ cmd_yolo: 'Přepnout YOLO režim (přeskočit schválení)',
+ composer_compression_will_queue: 'Napište zprávu — bude zařazena do fronty a odeslána po kompresi',
+ composer_control_attach: 'Přiložit',
+ composer_control_bg_badge: 'Odznak na pozadí',
+ composer_control_context: 'Kontext',
+ composer_control_mic: 'Mikrofon',
+ composer_control_mobile_config: 'Mobilní konfigurace',
+ composer_control_model: 'Model',
+ composer_control_profile: 'Profil',
+ composer_control_quota_chip: 'Čip kvóty',
+ composer_control_reasoning: 'Uvažování',
+ composer_control_saved_prompts: 'Uložené výzvy',
+ composer_control_status: 'Stav',
+ composer_control_toolsets: 'Sady nástrojů',
+ composer_control_voice_mode: 'Hlasový režim',
+ composer_control_workspace: 'Pracovní prostor',
+ composer_control_yolo: 'YOLO',
+ composer_disabled_clarify: 'Odpovězte na žádost o upřesnění',
+ composer_disabled_compression: 'Čekám na dokončení komprese',
+ composer_disabled_empty: 'Napište zprávu k odeslání',
+ composer_interrupt: 'Přerušit a odeslat',
+ composer_mobile_context: 'Kontext',
+ composer_mobile_model: 'Model',
+ composer_mobile_quota: 'Kvóta',
+ composer_mobile_reasoning: 'Uvažování',
+ composer_mobile_workspace: 'Pracovní prostor',
+ composer_queue: 'Zařadit zprávu do fronty',
+ composer_send: 'Odeslat zprávu',
+ composer_steer: 'Řídit aktuální odpověď',
+ composer_stop: 'Zastavit generování',
+ content_required: 'Obsah je povinný',
+ create_failed: 'Vytvoření selhalo: ',
+ create_job: 'Vytvořit úlohu',
+ created: 'Vytvořeno ',
+ cron_all_runs: 'Všechna spuštění',
+ cron_attention_copy_diagnostics: 'Kopírovat diagnostiku',
+ cron_attention_croniter_hint: 'Runtime gateway možná postrádá balíček croniter. Restartujte gateway s podporou cron a poté pokračujte v této úloze.',
+ cron_attention_desc: 'Tato opakující se úloha nemá čas dalšího spuštění. Plánovač možná nedokázal vypočítat další spuštění.',
+ cron_attention_resume: 'Obnovit a přepočítat',
+ cron_attention_run_once: 'Spustit jednou nyní',
+ cron_collapse_output: 'Sbalit výstup',
+ cron_collapse_prompt: 'Sbalit výzvu',
+ cron_completion_status: (name, status) => `Cron „${name}“ ${status}`,
+ cron_delete_confirm_message: 'Toto nelze vrátit zpět.',
+ cron_delete_confirm_title: 'Smazat cron úlohu',
+ cron_deliver_custom: 'Vlastní cíl doručení',
+ cron_deliver_label: 'Doručit výstup do',
+ cron_deliver_local: 'Lokálně (pouze uložit výstup)',
+ cron_diagnostics_copied: 'Diagnostika cronu zkopírována',
+ cron_duplicate: 'Duplikovat',
+ cron_duplicated: 'Úloha duplikována (pozastavena)',
+ cron_expand_output: 'Rozbalit výstup',
+ cron_expand_prompt: 'Rozbalit výzvu',
+ cron_hide_runs: 'Skrýt spuštění',
+ cron_job_created: 'Úloha vytvořena',
+ cron_job_deleted: 'Úloha smazána',
+ cron_job_name_placeholder: 'Název úlohy',
+ cron_job_paused: 'Úloha pozastavena',
+ cron_job_resumed: 'Úloha obnovena',
+ cron_job_triggered: 'Úloha spuštěna',
+ cron_job_updated: 'Úloha aktualizována',
+ cron_jobs_project: 'Cron úlohy',
+ cron_last: 'Poslední',
+ cron_last_output: 'Poslední výstup',
+ cron_mode_agent: 'Agent',
+ cron_mode_label: 'Režim',
+ cron_mode_script: 'Skript',
+ cron_model_hint: 'Přepsat výchozí model pro tuto úlohu.',
+ cron_model_label: 'Přepsání modelu',
+ cron_model_no_agent_hint: 'Úlohy bez agenta spouštějí nakonfigurovaný skript přímo; model se nepoužívá.',
+ cron_model_use_default: 'Výchozí (použít výchozí nastavení profilu/systému)',
+ cron_name_label: 'Název',
+ cron_name_placeholder: 'Volitelné',
+ cron_next: 'Další',
+ cron_no_jobs: 'Nebyly nalezeny žádné naplánované úlohy.',
+ cron_no_runs_yet: '(zatím žádná spuštění)',
+ cron_pause: 'Pozastavit',
+ cron_profile_label: 'Profil',
+ cron_profile_server_default: 'výchozí serveru',
+ cron_profile_server_default_hint: 'Používá výchozí profil WebUI serveru v době spuštění. Stávající úlohy bez profilu si zachovávají toto starší chování.',
+ cron_prompt_label: 'Výzva',
+ cron_prompt_placeholder: 'Výzva',
+ cron_prompt_required: 'Výzva je povinná',
+ cron_resume: 'Obnovit',
+ cron_run_now: 'Spustit nyní',
+ cron_schedule_hint: "Použijte 'every 1h' nebo cron výraz pro opakující se úlohy. Holé doby trvání jako '30m' se spustí jednou.",
+ cron_schedule_label: 'Rozvrh',
+ cron_schedule_once_warning: "Formy doby trvání jako '30m' se spustí jednou a po spuštění se odeberou. Použijte 'every 30m' pro zachování opakující se úlohy.",
+ cron_schedule_placeholder: 'Rozvrh',
+ cron_schedule_preset_custom: 'Vlastní',
+ cron_schedule_preset_daily: 'Denně',
+ cron_schedule_preset_hourly: 'Každou hodinu',
+ cron_schedule_preset_label: 'Předvolba',
+ cron_schedule_preset_monthly: 'Měsíčně',
+ cron_schedule_preset_weekdays: 'V pracovní dny',
+ cron_schedule_preset_weekly: 'Týdně',
+ cron_schedule_required: 'Rozvrh je povinný',
+ cron_schedule_required_example: 'Rozvrh je povinný (např. "0 9 * * *" nebo "every 1h")',
+ cron_script_badge_title: 'Skript úloha (bez agenta)',
+ cron_script_card_title: 'Skript',
+ cron_script_job_banner: 'Spouští skript podle rozvrhu — stdout je doručen do cíle. Bez agenta, výzvy nebo dovedností.',
+ cron_script_output: 'Výstup skriptu',
+ cron_script_path_hint: 'Řešeno v ~/.hermes/scripts/ pokud není absolutní cesta. Upravte soubor skriptu na serveru pro změnu chování.',
+ cron_script_path_label: 'Cesta skriptu',
+ cron_skills_edit_hint: 'Seznam dovedností nelze po vytvoření upravovat.',
+ cron_skills_label: 'Dovednosti',
+ cron_skills_placeholder: 'Přidat dovednosti (volitelné)…',
+ cron_status_active: 'aktivní',
+ cron_status_error: 'chyba',
+ cron_status_needs_attention: 'vyžaduje pozornost',
+ cron_status_off: 'vypnuto',
+ cron_status_paused: 'pozastaveno',
+ cron_status_running: 'běží…',
+ cron_toast_notifications_disabled: 'Zakázáno',
+ cron_toast_notifications_enabled: 'Povoleno',
+ cron_toast_notifications_hint: 'Zobrazit toast po dokončení tohoto cronu. Odznak Úloh a nový ukazatel běhu se stále aktualizují když je toto vypnuto.',
+ cron_toast_notifications_label: 'Dokončovací notifikace',
+ cron_view_full_output: 'Zobrazit celý výstup',
+ cron_workdir_label: 'Pracovní adresář',
+ csv_error: 'Nepodařilo se načíst CSV soubor',
+ csv_header_note: 'První řádek zobrazen jako záhlaví tabulky',
+ csv_loading: 'Načítám CSV',
+ csv_no_data: 'CSV soubor nemá dostatek dat pro vykreslení jako tabulka',
+ csv_too_large: 'CSV soubor je příliš velký pro vložené vykreslení',
+ current_password_incorrect: 'Současné heslo je nesprávné.',
+ current_password_label: 'Současné heslo',
+ current_password_placeholder: 'Zadejte současné heslo…',
+ current_password_required: 'Současné heslo je povinné pro změnu nebo zakázání autentifikace.',
+ current_task_list: 'Aktuální seznam úkolů',
+ dashboard_loopback_warning: 'Dashboard je na serveru pouze loopback. Buď prohlížejte ze serveru samotného nebo ho restartujte s --host 0.0.0.0 (nebezpečné).',
+ default: 'výchozí',
+ disable: 'Zakázat',
+ disable_auth: 'Zakázat autentifikaci',
+ disable_auth_confirm_message: 'Kdokoliv bude moci přistupovat k této instanci.',
+ disable_auth_confirm_title: 'Zakázat ochranu heslem',
+ disable_auth_failed: 'Nepodařilo se zakázat autentifikaci: ',
+ disable_auth_typed_confirm: 'Zadejte DISABLE AUTH pro potvrzení',
+ discard_file_edits_message: 'Přepnutí pracovních prostorů zahodí neuložené úpravy souborů v náhledu.',
+ discard_file_edits_title: 'Zahodit úpravy souborů?',
+ dismiss: 'Zavřít',
+ done: 'Hotovo',
+ download_transcript: 'Stáhnout jako Markdown',
+ editing: 'Úpravy',
+ empty_dir: '(prázdný)',
+ empty_subtitle: 'Zeptejte se na cokoliv, spouštějte příkazy, prozkoumávejte soubory nebo spravujte naplánované úlohy.',
+ empty_title: 'Jak vám mohu pomoci?',
+ error_prefix: 'Chyba: ',
+ excalidraw_download: 'Stáhnout',
+ excalidraw_empty: 'Prázdný diagram',
+ excalidraw_error: 'Nepodařilo se načíst Excalidraw soubor',
+ excalidraw_invalid: 'Neplatný formát Excalidraw souboru',
+ excalidraw_label: 'Diagram',
+ excalidraw_loading: 'Načítám diagram',
+ excalidraw_render_error: 'Nepodařilo se vykreslit diagram',
+ excalidraw_simplified: 'Zjednodušený SVG náhled — není pixelově identický s plátnem Excalidraw',
+ excalidraw_too_large: 'Excalidraw soubor je příliš velký pro vložené vykreslení',
+ export_session_html: 'HTML',
+ export_session_html_tooltip: 'Exportovat jako samostatnou HTML stránku',
+ export_session_json: 'JSON',
+ export_session_json_tooltip: 'Exportovat celou relaci jako JSON',
+ ext_gallery_after_install: 'Po instalaci',
+ ext_gallery_author: 'Autor',
+ ext_gallery_capabilities: 'Schopnosti',
+ ext_gallery_install: 'Instalovat',
+ ext_gallery_install_followup: 'Rozšíření nainstalováno. Viz karta pro další kroky.',
+ ext_gallery_install_ok: 'Rozšíření úspěšně nainstalováno.',
+ ext_gallery_install_restart_required: 'Rozšíření nainstalováno. Je vyžadován restart pro aplikaci.',
+ ext_gallery_installed: 'Nainstalováno',
+ ext_gallery_installing: 'Instaluji…',
+ ext_gallery_local_app_label: 'Lokální aplikace',
+ ext_gallery_local_component_required: 'Toto rozšíření má lokální komponent. Po instalaci spusťte požadovanou lokální aplikaci nebo sidecar.',
+ ext_gallery_native_host_required: 'Je vyžadován nativní hostitel',
+ ext_gallery_next_step: 'Další krok',
+ ext_gallery_open_setup_guide: 'Otevřít průvodce nastavením',
+ ext_gallery_permissions_empty: 'Nejsou deklarována žádná další oprávnění.',
+ ext_gallery_permissions_hide: 'Skrýt oprávnění',
+ ext_gallery_permissions_show: 'Oprávnění',
+ ext_gallery_required_suffix: 'Je vyžadován {0}',
+ ext_gallery_restart_required: 'Je vyžadován restart',
+ ext_gallery_sidecar_required: 'Je vyžadován sidecar',
+ ext_gallery_uninstall: 'Odinstalovat',
+ ext_gallery_uninstall_ok: 'Rozšíření odinstalováno.',
+ ext_gallery_uninstalling: 'Odinstalovávám…',
+ ext_gallery_version: 'Verze',
+ external_notes_auto: 'auto',
+ external_notes_auto_recall_hint: 'Automatické připomenutí relace je nezměněno; tento zásuvný panel pouze zobrazuje nakonfigurované zdroje a dostupné nástroje pro čtení/hledání.',
+ external_notes_configured_hint: 'Názvy nástrojů se očekávají z tohoto nakonfigurovaného zdroje; živá schémata se zobrazí, když je WebUI runtime zpřístupní.',
+ external_notes_empty: 'Nejsou viditelné žádné zdroje poznámek nebo znalostí MCP. Nakonfigurujte Joplin, Obsidian, Notion, llm-wiki nebo jiný server poznámek pro jeho zobrazení zde.',
+ external_notes_no_tools: 'Pro tento zdroj nejsou aktuálně viditelné žádné nástroje pro čtení/hledání.',
+ external_notes_recent_ai: 'Nedávno použito AI',
+ external_notes_recent_ai_reason: 'Automatické připomenutí',
+ external_notes_search_empty: 'Pro náhled poznámek zde vyhledejte nakonfigurovaný zdroj poznámek.',
+ external_notes_search_placeholder: 'Hledat poznámky…',
+ external_notes_sources: 'Poznámky třetích stran',
+ external_notes_tool_count: (count) => `${count} dostupných nástrojů pro poznámky`,
+ filter_conversations: 'Filtrovat konverzace...',
+ first_token_time: 'Čas do prvního tokenu',
+ folder_add_as_space_btn: 'Přidat jako prostor',
+ folder_add_as_space_msg: 'Přidat tuto složku jako nový prostor do seznamu pracovních prostorů?',
+ folder_add_as_space_title: 'Přidat jako prostor?',
+ folder_create_failed: 'Vytvoření složky selhalo: ',
+ folder_created: 'Vytvořena složka ',
+ font_size_default: 'Výchozí',
+ font_size_large: 'Velká',
+ font_size_small: 'Malá',
+ font_size_xlarge: 'Extra velká',
+ gateway_endpoint_unreachable: 'Koncový bod gateway není dosažitelný',
+ gateway_last_active: 'Naposledy aktivní: ',
+ gateway_load_failed: 'Nepodařilo se načíst stav gateway',
+ gateway_metadata_stale: 'Metadata gateway jsou zastaralá',
+ gateway_not_configured: 'Gateway není nakonfigurován',
+ gateway_not_running: 'Gateway neběží',
+ gateway_running_label: 'Běží',
+ gateway_session_count: (n) => `${n} ${n === 1 ? 'relace' : 'relací'}`,
+ import: 'Importovat',
+ import_session_json_tooltip: 'Importovat relaci z JSON',
+ insights_activity_by_day: 'Aktivita podle dne',
+ insights_activity_by_hour: 'Aktivita podle hodiny',
+ insights_cache_hit: 'Úspěšnost prompt-cache',
+ insights_cost: 'Odhadované náklady',
+ insights_daily_tokens: 'Denní tokeny',
+ insights_footer: 'Zobrazeny údaje za posledních {days} dnů',
+ insights_input_tokens: 'Vstup',
+ insights_messages: 'Zprávy',
+ insights_model_cache: 'Mezipaměť',
+ insights_model_cost: 'Náklady',
+ insights_model_health_cost_per_m: 'Náklady / 1M',
+ insights_model_health_provider: 'Poskytovatel',
+ insights_model_health_replacement: 'Průvodce náhrady',
+ insights_model_health_title: 'Srovnání zdraví modelů',
+ insights_model_name: 'Model',
+ insights_model_sessions: 'Relace',
+ insights_model_share: 'Podíl',
+ insights_model_tokens: 'Tokeny',
+ insights_models: 'Modely',
+ insights_no_cost: 'Nedostupné',
+ insights_no_usage_data: 'Zatím žádná data o využití',
+ insights_output_tokens: 'Výstup',
+ insights_peak_hour: 'Špička: {hour}',
+ insights_sessions: 'Relace',
+ insights_skill_usage_col_patches: 'Záplaty',
+ insights_skill_usage_col_share: 'Podíl použití %',
+ insights_skill_usage_col_skill: 'Dovednost',
+ insights_skill_usage_col_uses: 'Použití',
+ insights_skill_usage_col_views: 'Zobrazení',
+ insights_skill_usage_footer: 'Počty z ~/.hermes/skills/',
+ insights_skill_usage_no_data: 'Zatím žádná data o použití dovedností',
+ insights_skill_usage_no_data_hint: 'Dovednosti se zde zobrazí po použití v konverzacích.',
+ insights_skill_usage_skills_used: 'Použité dovednosti',
+ insights_skill_usage_sub: 'Frekvence volání nástrojů',
+ insights_skill_usage_title: 'Použití dovedností',
+ insights_skill_usage_total: 'Celkem volání',
+ insights_title: 'Analýza využití',
+ insights_token_breakdown: 'Rozložení tokenů',
+ insights_tokens: 'Tokeny',
+ insights_total: 'Celkem',
+ kanban_add_comment: 'Přidat komentář',
+ kanban_add_dependency: 'Přidat závislost',
+ kanban_all_assignees: 'Všichni přiřazení',
+ kanban_all_tenants: 'Všichni tenanti',
+ kanban_archive_board: 'Archivovat aktuální desku…',
+ kanban_archive_board_confirm: 'Archivovat desku "{name}"? Úkoly zůstávají na disku a desku lze obnovit z kanban/boards/_archived/.',
+ kanban_assignee: 'Přiřazený',
+ kanban_assignee_other_label: 'Jiný (CLI jízdní pruhy / odstraněné profily)',
+ kanban_assignee_placeholder: 'Volitelné — nechte prázdné pro jakéhokoliv pracovníka',
+ kanban_assignee_profiles_label: 'Hermes profily',
+ kanban_assignee_unassigned: '— Nepřiřazeno (nebude automaticky spuštěno) —',
+ kanban_back_to_board: 'Zpět na desku',
+ kanban_block: 'Blokovat',
+ kanban_board: 'Deska',
+ kanban_board_archived: 'Deska archivována',
+ kanban_board_color: 'Barva (volitelná)',
+ kanban_board_description: 'Popis (volitelný)',
+ kanban_board_icon: 'Ikona (emoji, volitelná)',
+ kanban_board_name: 'Název',
+ kanban_board_name_required: 'Název je povinný',
+ kanban_board_slug: 'Slug (malá písmena, pomlčky)',
+ kanban_board_slug_required: 'Slug je povinný',
+ kanban_bulk_action: 'Hromadná akce',
+ kanban_card_archive: 'archivovat',
+ kanban_card_complete: 'dokončit',
+ kanban_children: 'Potomci',
+ kanban_clear_filters: 'Vymazat filtry',
+ kanban_comments_count: 'Komentáře ({0})',
+ kanban_dependency_placeholder: 'ID úkolu k propojení',
+ kanban_dependency_self: 'Úkol nemůže záviset sám na sobě',
+ kanban_description: 'Popis',
+ kanban_description_placeholder: 'Volitelné — co je třeba udělat, kritéria přijetí, odkazy',
+ kanban_dispatch_auto_blocked: 'auto-blokovaný',
+ kanban_dispatch_crashed: 'padl',
+ kanban_dispatch_preview_prefix: 'Náhled:',
+ kanban_dispatch_promoted: 'povýšen',
+ kanban_dispatch_reclaimed: 'získán zpět',
+ kanban_dispatch_run_prefix: 'Odesláno:',
+ kanban_dispatch_skipped_nonspawnable: 'přeskočeno (neznámý profil)',
+ kanban_dispatch_skipped_unassigned: 'přeskočeno (bez přiřazení)',
+ kanban_dispatch_spawned: 'vytvořen',
+ kanban_dispatch_timed_out: 'vypršel čas',
+ kanban_edit_task: 'Upravit úkol',
+ kanban_empty: 'Prázdné',
+ kanban_events_count: 'Události ({0})',
+ kanban_include_archived: 'Zahrnout archivované',
+ kanban_lanes_by_profile: 'Jízdní pruhy podle profilu',
+ kanban_links: 'Odkazy',
+ kanban_max_runtime_hint: 'Nechte prázdné pro neomezené.',
+ kanban_max_runtime_invalid: 'Maximální doba běhu musí být celé číslo v sekundách větší než 0.',
+ kanban_max_runtime_seconds: 'Maximální doba běhu (sekundy)',
+ kanban_new_board: 'Nová deska…',
+ kanban_new_task: 'Nový úkol',
+ kanban_no_comments: 'Žádné komentáře',
+ kanban_no_data: 'Žádná data Kanban',
+ kanban_no_description: 'Bez popisu',
+ kanban_no_events: 'Žádné události',
+ kanban_no_matching_tasks: 'Žádné odpovídající úkoly',
+ kanban_no_runs: 'Žádná spuštění',
+ kanban_nudge_dispatcher: 'Náhled dispečera',
+ kanban_only_mine: 'Pouze mé',
+ kanban_parents: 'Rodiče',
+ kanban_parents_modal: 'Závislosti rodičů',
+ kanban_parents_placeholder: 'ID nadřazeného úkolu',
+ kanban_priority: 'Priorita',
+ kanban_priority_hint: 'Vyšší čísla běží první. Výchozí je 0.',
+ kanban_read_only: 'Zobrazení pouze pro čtení',
+ kanban_ready_needs_assignee: 'Zvolili jste Nepřiřazeno + Připraveno. Dispečer tento úkol přeskočí. Odešlete znovu pro potvrzení nebo zvolte profil.',
+ kanban_refresh: 'Obnovit',
+ kanban_remove_dependency: 'Odebrat závislost',
+ kanban_rename_board: 'Přejmenovat aktuální desku…',
+ kanban_run_dispatcher: 'Spustit dispečera',
+ kanban_run_dispatcher_confirm: 'Toto získá úkoly ve stavu Připraveno na této desce a vytvoří pracovní dílčí procesy (jeden na úkol, až 8 na kliknutí). Pokračovat?',
+ kanban_runs_count: 'Spuštění ({0})',
+ kanban_search_tasks: 'Hledat úkoly',
+ kanban_skills: 'Dovednosti',
+ kanban_skills_placeholder: 'Názvy dovedností oddělené čárkami, např. python,git',
+ kanban_stats: 'Statistiky',
+ kanban_status: 'Stav',
+ kanban_status_archived: 'Archivováno',
+ kanban_status_blocked: 'Blokováno',
+ kanban_status_done: 'Hotovo',
+ kanban_status_original_hint: 'Skutečný stav: {0}. Toto dialog pouze podporuje úpravy Triage/Todo/Ready.',
+ kanban_status_ready: 'Připraveno',
+ kanban_status_running: 'Běží',
+ kanban_status_todo: 'K udělání',
+ kanban_status_triage: 'Třídění',
+ kanban_task: 'Úkol',
+ kanban_tasks_hidden_by_filters: 'Úkoly skryté filtry',
+ kanban_tenant: 'Nájemce',
+ kanban_tenant_placeholder: 'Volitelné — slug projektu nebo týmu',
+ kanban_title: 'Název',
+ kanban_title_required: 'Název je povinný.',
+ kanban_unassigned: 'nepřiřazeno',
+ kanban_unavailable: 'Kanban není dostupný',
+ kanban_unblock: 'Odblokovat',
+ kanban_view_consolidated: 'Konsolidované zobrazení',
+ kanban_view_consolidated_saved: 'Zobrazení Kanban: konsolidované',
+ kanban_view_lanes: 'Jízdní pruhy podle profilu',
+ kanban_view_lanes_saved: 'Zobrazení Kanban: jízdní pruhy podle profilu',
+ kanban_view_update_failed: 'Nepodařilo se aktualizovat zobrazení Kanban: ',
+ kanban_visible_tasks: 'Viditelných úkolů: {0}',
+ kanban_work_queue_hint: 'Toto je fronta úkolů Hermes agenta. Vytvořte nebo triážujte úkol, přiřaďte ho, přesuňte do stavu Připraveno a nechte dispečera ho získat.',
+ kanban_worker_log: 'Pracovní log',
+ kanban_workspace_dir: 'Adresář',
+ kanban_workspace_kind: 'Typ pracovního prostoru',
+ kanban_workspace_path: 'Cesta pracovního prostoru',
+ kanban_workspace_path_placeholder: 'Cesta k pracovnímu prostoru',
+ kanban_workspace_path_required: 'Cesta pracovního prostoru je povinná pro ne-scratch pracovní prostory.',
+ kanban_workspace_scratch: 'Scratch',
+ kanban_workspace_worktree: 'Worktree',
+ linked_files: 'Propojené soubory',
+ login_btn: 'Přihlásit se',
+ login_conn_failed: 'Připojení selhalo',
+ login_invalid_pw: 'Neplatné heslo',
+ login_placeholder: 'Heslo',
+ login_subtitle: 'Zadejte heslo pro pokračování',
+ login_title: 'Přihlášení',
+ logs_auto_refresh: 'Automatická obnova (5s)',
+ logs_copied: 'Logy zkopírovány',
+ logs_copy_all: 'Kopírovat vše',
+ logs_empty: 'Zatím žádné logy.',
+ logs_file: 'Soubor',
+ logs_filter_active: 'zobrazeno (filtr aktivní)',
+ logs_load_failed: 'Načtení logů selhalo',
+ logs_loading: 'Načítám logy…',
+ logs_no_mtime: 'ještě nepsáno',
+ logs_severity: 'Závažnost',
+ logs_severity_all: 'Všechny',
+ logs_severity_errors: 'Chyby',
+ logs_severity_warnings: 'Varování+',
+ logs_status_idle: 'Zvolte soubor logu pro zobrazení posledních řádků.',
+ logs_tail: 'Tail',
+ logs_title: 'Logy',
+ logs_truncated_hint: 'Zobrazen konec velkého log souboru; starší bajty byly přeskočeny pro udržení paměti.',
+ logs_wrap: 'Zalamovat řádky',
+ manage_profiles: 'Spravovat profily',
+ markdown_table_filter: 'Filtrovat tabulku',
+ markdown_table_sort_column: 'Řadit sloupec',
+ mcp_disable_server: 'Zakázat tento MCP server',
+ mcp_enable_server: 'Povolit tento MCP server',
+ media_audio_label: 'Zvuk',
+ media_download: 'Stáhnout',
+ media_svg_label: 'Diagram',
+ media_video_label: 'Video',
+ memory_notes_label: 'paměť (poznámky)',
+ memory_saved: 'Paměť uložena',
+ my_notes: 'Moje poznámky',
+ name_required: 'Název je povinný',
+ never: 'nikdy',
+ new_conversation: 'Nová konverzace',
+ new_file: 'Nový soubor',
+ new_file_prompt: 'Nový název souboru (např. notes.md):',
+ new_file_prompt_title: 'Nový název souboru v {0}:',
+ new_folder: 'Nová složka',
+ new_folder_prompt: 'Nový název složky:',
+ new_folder_prompt_title: 'Nový název složky v {0}:',
+ new_job: 'Nová úloha',
+ new_profile: 'Nový profil',
+ new_skill: 'Nová dovednost',
+ no_notes_yet: 'Zatím žádné poznámky.',
+ no_profile_yet: 'Zatím žádný profil.',
+ no_soul_yet: 'Zatím není definována žádná duše.',
+ not_available: 'Nedostupné',
+ notifications_denied: 'Notifikace jsou v tomto prohlížeči blokovány. Povolte je v nastavení prohlížeče.',
+ notifications_enable_btn: 'Povolit notifikace',
+ notifications_enabled_toast: 'Notifikace povoleny.',
+ notifications_permission_status: (status) => `Povolení: ${status}`,
+ notifications_test_btn: 'Odeslat test',
+ notifications_unsupported: 'Notifikace nejsou v tomto prohlížeči podporovány.',
+ oauth_codex_error: 'OAuth přihlášení selhalo',
+ oauth_codex_expired: 'Kód vypršel, prosím zkuste znovu',
+ oauth_codex_polling: 'Čekám na autorizaci…',
+ oauth_codex_step1: 'Krok 1: Navštivte tuto URL a zadejte kód',
+ oauth_codex_step2: 'Krok 2: Zadejte tento kód na stránce',
+ oauth_codex_success: 'Codex OAuth přihlášení úspěšné!',
+ oauth_login_codex: 'Přihlásit se přes Codex (ChatGPT)',
+ onboarding_api_key_help_keyless: 'Většina instalací LM Studio / Ollama / vLLM běží bez klíče — nechte prázdné pokud váš server nevyžaduje autentifikaci. Pro ověření použijte tlačítko Test připojení.',
+ onboarding_api_key_help_prefix: 'Uloženo jako tajemství v souboru .env vašeho Herma pomocí',
+ onboarding_api_key_label: 'API klíč',
+ onboarding_api_key_label_optional: 'API klíč (volitelný)',
+ onboarding_api_key_placeholder: 'Nechte prázdné pro zachování existujícího uloženého klíče',
+ onboarding_api_key_placeholder_optional: 'Nechte prázdné pro servery bez klíče',
+ onboarding_back: 'Zpět',
+ onboarding_badge: 'PRVNÍ SPUŠTĚNÍ',
+ onboarding_base_url_help: 'Použijte toto pro OpenAI-kompatibilní routery, samostatně hostované servery, LiteLLM, Ollama, LM Studio, vLLM nebo podobné koncové body.',
+ onboarding_base_url_label: 'Základní URL',
+ onboarding_base_url_placeholder: 'https://vas-endpoint.example/v1',
+ onboarding_check_agent: 'Hermes Agent',
+ onboarding_check_agent_missing: 'Chybí nebo částečně importovatelný',
+ onboarding_check_agent_ready: 'Detekován a importovatelný',
+ onboarding_check_password: 'Heslo',
+ onboarding_check_password_disabled: 'Ještě nepovoleno',
+ onboarding_check_password_enabled: 'Již povoleno',
+ onboarding_check_provider: 'Konfigurace poskytovatele',
+ onboarding_check_provider_partial: 'Uloženo ale neúplné',
+ onboarding_check_provider_pending: 'Vyžaduje ověření',
+ onboarding_check_provider_ready: 'Připraveno k chatu',
+ onboarding_config_file: 'Konfigurační soubor:',
+ onboarding_continue: 'Pokračovat',
+ onboarding_current_provider: 'Aktuální nastavení:',
+ onboarding_custom_model_help: 'Pro vlastní koncové body zadejte přesné ID modelu, které váš server očekává.',
+ onboarding_custom_model_placeholder: 'název-vašeho-modelu',
+ onboarding_env_file: 'Soubor .env:',
+ onboarding_error_base_url_required: 'Základní URL je povinná pro vlastní koncové body.',
+ onboarding_error_choose_model: 'Před pokračováním zvolte model.',
+ onboarding_error_choose_workspace: 'Před pokračováním zvolte pracovní prostor.',
+ onboarding_error_model_required: 'Model je povinný.',
+ onboarding_error_probe_failed: 'Nepodařilo se ověřit nakonfigurovanou základní URL.',
+ onboarding_error_provider_required: 'Před pokračováním zvolte režim nastavení.',
+ onboarding_error_workspace_required: 'Pracovní prostor je povinný.',
+ onboarding_finish_help: 'Dokončení ukládá onboarding_completed do nastavení a přenese vás do normální aplikace.',
+ onboarding_lead: 'Rychlé vedené nastavení ověří Herma, uloží skutečnou konfiguraci poskytovatele, zvolí pracovní prostor a model a volitelně ochrání aplikaci heslem.',
+ onboarding_missing_imports: 'Chybějící importy:',
+ onboarding_model_label: 'Výchozí model',
+ onboarding_not_set: 'Nenastaveno',
+ onboarding_notice_finish: 'Nastavení můžete znovu otevřít později a změnit cokoliv.',
+ onboarding_notice_password_enabled: 'Heslo je již nakonfigurováno. Zadejte nové pouze pokud ho chcete nahradit.',
+ onboarding_notice_password_recommended: 'Volitelné ale doporučené pokud budete vystavovat UI mimo localhost.',
+ onboarding_notice_setup_already_ready: 'Je detekováno funkční nastavení poskytovatele Herma. Můžete ho zachovat nebo nahradit zde.',
+ onboarding_notice_setup_required: 'Zvolte jednoduchou cestu poskytovatele zde. Pokročilé OAuth toky stále patří do CLI Herma.',
+ onboarding_notice_system_ready: 'Hermes Agent se jeví jako dosažitelný z Web UI.',
+ onboarding_notice_system_unavailable: 'Hermes Agent ještě není plně dostupný. Bootstrap ho může nainstalovat, ale nastavení poskytovatele může stále vyžadovat terminál.',
+ onboarding_notice_workspace: 'Tyto hodnoty znovu používají stejná nastavení API jako normální aplikace.',
+ onboarding_oauth_provider_not_ready_body: 'Tato instance je nakonfigurována používat {provider}, který používá OAuth namísto API klíče. Spusťte hermes auth nebo hermes model v terminálu pro autentifikaci a poté znovu načtěte Web UI.',
+ onboarding_oauth_provider_not_ready_title: 'OAuth poskytovatel ještě není autentifikován',
+ onboarding_oauth_provider_ready_body: 'Tato instance je nakonfigurována používat OAuth poskytovatele ({provider}), který byl nastaven přes Hermes CLI. Žádný API klíč zde není potřeba — klikněte Pokračovat pro dokončení nastavení.',
+ onboarding_oauth_provider_ready_title: 'Poskytovatel již autentifikován',
+ onboarding_oauth_switch_hint: 'Nebo zvolte jiného poskytovatele níže pro přepnutí na nastavení s API klíčem:',
+ onboarding_open: 'Otevřít Herma',
+ onboarding_password_help: 'Hesla jsou ukládána přes existující API nastavení a hashovaná na serveru.',
+ onboarding_password_keep_existing: 'Zachovat aktuální heslo',
+ onboarding_password_label: 'Heslo (volitelné)',
+ onboarding_password_placeholder: 'Nechte prázdné pro přeskočení',
+ onboarding_password_remains_disabled: 'Zůstane zakázáno',
+ onboarding_password_skipped: 'Přeskočeno prozatím',
+ onboarding_password_will_enable: 'Bude povoleno',
+ onboarding_password_will_replace: 'Bude nahrazeno',
+ onboarding_probe_error_connect_refused: 'Připojení odmítnuto — server pravděpodobně neběží na této adrese. Z Dockeru zkuste IP hostitele místo localhostu.',
+ onboarding_probe_error_dns: 'Nelze přeložit hostitele. Zkontrolujte URL nebo použijte IP adresu hostitele.',
+ onboarding_probe_error_generic: 'Nelze dosáhnout nakonfigurované základní URL.',
+ onboarding_probe_error_http_4xx: 'Koncový bod vrátil chybu klienta. Zkontrolujte autentifikaci a cestu URL (obvykle končí na /v1).',
+ onboarding_probe_error_http_5xx: 'Koncový bod vrátil chybu serveru. Zkontrolujte logy serveru LM Studio / Ollama.',
+ onboarding_probe_error_invalid_url: 'Základní URL musí začínat http:// nebo https://.',
+ onboarding_probe_error_parse: 'Koncový bod nevrátil seznam modelů v očekávaném tvaru. Ověřte že URL ukazuje na kořen OpenAI-kompatibilního API.',
+ onboarding_probe_error_timeout: 'Koncový bod včas neodpověděl. Zkontrolujte že server běží a URL je správná.',
+ onboarding_probe_error_unreachable: 'Nelze dosáhnout nakonfigurované základní URL.',
+ onboarding_probe_ok: 'Připojeno. Dostupných {n} modelů.',
+ onboarding_probe_probing: 'Testuji připojení…',
+ onboarding_probe_test_button: 'Test připojení',
+ onboarding_provider_label: 'Režim nastavení',
+ onboarding_quick_setup_badge: 'rychlé nastavení',
+ onboarding_skipped: 'Nastavení přeskočeno — používám existující konfiguraci.',
+ onboarding_step_finish_desc: 'Zkontrolujte a vstupte do aplikace.',
+ onboarding_step_finish_title: 'Dokončit',
+ onboarding_step_password_desc: 'Chraňte Web UI před jeho sdílením.',
+ onboarding_step_password_title: 'Volitelné heslo',
+ onboarding_step_setup_desc: 'Uložte minimální konfiguraci poskytovatele Herma.',
+ onboarding_step_setup_title: 'Nastavení poskytovatele',
+ onboarding_step_system_desc: 'Ověřte dostupnost a viditelnost konfigurace agenta Herma.',
+ onboarding_step_system_title: 'Systémová kontrola',
+ onboarding_step_workspace_desc: 'Zvolte výchozí nastavení pro nové relace a chat.',
+ onboarding_step_workspace_title: 'Pracovní prostor + model',
+ onboarding_title: 'Vítejte v Hermes Web UI',
+ onboarding_unknown: 'Neznámý',
+ onboarding_workspace_help: 'Zvolte model který má Hermes používat pro nové chaty po dokončení nastavení.',
+ onboarding_workspace_label: 'Pracovní prostor',
+ onboarding_workspace_or_path: 'Nebo zadejte cestu pracovního prostoru',
+ onboarding_workspace_placeholder: '/home/you/workspace',
+ open_in_browser: 'Otevřít v prohlížeči',
+ outline_empty: 'Zatím žádné otázky.',
+ outline_loading: 'Načítám…',
+ outline_title: 'Osnova',
+ password_env_var_locked: 'Proměnná prostředí HERMES_WEBUI_PASSWORD je aktuálně nastavena a má přednost. Zrušte ji a restartujte server pro správu hesla odtud.',
+ password_env_var_locked_placeholder: 'Uzamčeno: je nastavena proměnná prostředí HERMES_WEBUI_PASSWORD',
+ password_placeholder: 'Zadejte nové heslo…',
+ personal_memory: 'Osobní paměť',
+ plugins_active_provider: 'Aktivní (poskytovatel)',
+ plugins_disabled: 'Zakázáno',
+ plugins_enable_toggle: 'Povolit',
+ plugins_enabled: 'Povoleno',
+ plugins_load_failed: 'Nepodařilo se načíst pluginy: ',
+ plugins_no_description: 'Nebyl poskytnut žádný popis.',
+ plugins_no_hooks: 'Žádné registrované háčky životního cyklu',
+ plugins_provider_no_hooks: 'Plugin poskytovatele — žádné háčky viditelné pro agenta',
+ plugins_registered_hooks: 'Registrované háčky',
+ plugins_unnamed: 'Nepojmenovaný plugin',
+ profile_active: 'AKTIVNÍ',
+ profile_api_key_label: 'API klíč',
+ profile_api_key_placeholder: 'API klíč (volitelný)',
+ profile_api_keys_configured: 'API klíče nakonfigurovány',
+ profile_base_url_label: 'Základní URL',
+ profile_base_url_placeholder: 'Základní URL (volitelná, např. http://localhost:11434)',
+ profile_base_url_rule: 'Základní URL musí začínat http:// nebo https://',
+ profile_clone_label: 'Klonovat konfiguraci z aktivního profilu',
+ profile_created: (name) => `Profil vytvořen: ${name}`,
+ profile_default_label: '(výchozí)',
+ profile_delete_confirm_message: 'Všechny relace, konfigurace, dovednosti a paměť tohoto profilu budou trvale smazány. Toto nelze vrátit zpět.',
+ profile_delete_confirm_title: (name) => `Smazat profil "${name}"?`,
+ profile_delete_title: 'Smazat tento profil',
+ profile_deleted: (name) => `Profil smazán: ${name}`,
+ profile_gateway_running: 'Gateway běží',
+ profile_gateway_stopped: 'Gateway zastaven',
+ profile_model_hint: 'Zvolte z nakonfigurovaných poskytovatelů a modelů pro tento nový profil.',
+ profile_model_label: 'Model / poskytovatel',
+ profile_model_use_default: 'Použít výchozí nastavení aktivního profilu',
+ profile_name_label: 'Název',
+ profile_name_placeholder: 'Název profilu (malá písmena, a-z 0-9 pomlčky)',
+ profile_name_rule: 'Pouze malá písmena, čísla, pomlčky a podtržítka',
+ profile_no_configuration: 'Bez konfigurace',
+ profile_skill_count: (count) => `${count} dovedností${count === 1 ? '' : 'í'}`,
+ profile_switch_title: 'Přepnout na tento profil',
+ profile_switched: (name) => `Přepnuto na profil: ${name}`,
+ profile_switched_new_conversation: (name) => `Přepnuto na profil: ${name} — zahájena nová konverzace`,
+ profile_use: 'Použít',
+ profiles_empty_sub: 'Zvolte profil agenta z bočního panelu pro zobrazení a úpravu jeho nastavení, nebo vytvořte nový.',
+ profiles_empty_title: 'Zvolte profil',
+ profiles_load_failed: 'Nepodařilo se načíst profily',
+ profiles_no_profiles: 'Nebyly nalezeny žádné profily.',
+ project_name_prompt: 'Název projektu:',
+ provider_category_easy_start: 'Snadný start',
+ provider_category_self_hosted: 'Otevřené / samostatně hostované',
+ provider_category_specialized: 'Specializované',
+ provider_cost_budget_clear: 'Vymazat',
+ provider_cost_budget_label: 'Měsíční rozpočet',
+ provider_cost_budget_pct: '{0}% z rozpočtu ${1} (měsíční tempo)',
+ provider_cost_budget_placeholder: 'např. 50.00',
+ provider_cost_budget_save_failed: 'Nepodařilo se uložit rozpočet',
+ provider_cost_budget_set: 'Nastavit',
+ provider_quota_account_limits_loaded: 'Limity účtu načteny.',
+ provider_quota_active_provider: 'Aktivní poskytovatel',
+ provider_quota_credential_label: 'Pověření {0}',
+ provider_quota_credential_pool: 'Fond pověření',
+ provider_quota_last_checked: 'Naposledy kontrolováno {0}',
+ provider_quota_last_checked_after_refresh: 'Naposledy kontrolováno po obnovení',
+ provider_quota_metric_limit: 'Limit',
+ provider_quota_metric_remaining: 'Zbývající',
+ provider_quota_metric_used: 'Použito',
+ provider_quota_pool_no_windows: 'Nejsou hlášena žádná okna limitů účtu.',
+ provider_quota_pool_plans: 'Plány: {0}',
+ provider_quota_pool_summary_available: '{0}/{1} dostupných',
+ provider_quota_pool_summary_checked: '{0} zkontrolováno',
+ provider_quota_pool_summary_exhausted: '{0} vyčerpáno',
+ provider_quota_pool_summary_failed: '{0} selhalo',
+ provider_quota_refresh_failed: 'Obnovení využití poskytovatele selhalo',
+ provider_quota_refresh_succeeded: 'Využití poskytovatele obnoveno',
+ provider_quota_refresh_title: 'Nyní obnovit limity využití poskytovatele',
+ provider_quota_refresh_usage: 'Obnovit využití',
+ provider_quota_refreshing: 'Obnovování…',
+ provider_quota_resets_meta: 'resetuje {0}',
+ provider_quota_retry_after: 'Zkusit znovu za {0}',
+ provider_quota_session_limit: '5-hodinový limit',
+ provider_quota_status_available: 'dostupné',
+ provider_quota_status_checked: 'zkontrolováno',
+ provider_quota_status_exhausted: 'vyčerpáno',
+ provider_quota_status_failed: 'selhalo',
+ provider_quota_status_invalid_key: 'neplatný klíč',
+ provider_quota_status_no_key: 'bez klíče',
+ provider_quota_status_unavailable: 'nedostupné',
+ provider_quota_status_unsupported: 'nepodporováno',
+ provider_quota_title: 'Kvóta aktivního poskytovatele',
+ provider_quota_unavailable: 'Stav kvóty nedostupný',
+ provider_quota_used_meta: '{0} použito',
+ provider_quota_weekly_limit: 'Týdenní limit',
+ provider_quota_window_fallback: 'Okno',
+ providers_empty: 'Nebyli nalezeni žádní konfigurovatelní poskytovatelé.',
+ providers_enter_key: 'Prosím zadejte API klíč',
+ providers_key_placeholder_new: 'sk-…',
+ providers_key_placeholder_replace: 'Zadejte nový klíč pro nahrazení…',
+ providers_key_removed: 'API klíč odstraněn',
+ providers_key_updated: 'API klíč uložen',
+ providers_models_refreshed: 'Modely obnoveny',
+ providers_oauth_config_yaml_hint: 'Token nakonfigurován přes config.yaml. Pro aktualizaci upravte sekci poskytovatele ve vašem config.yaml nebo spusťte hermes auth.',
+ providers_oauth_hint: 'Autentifikováno přes OAuth. Žádný API klíč není potřeba.',
+ providers_oauth_not_configured_hint: 'Neautentifikováno. Spusťte hermes auth v terminálu pro konfiguraci tohoto poskytovatele.',
+ providers_refresh_models: 'Obnovit modely',
+ providers_refreshing: 'Obnovování…',
+ providers_remove: 'Odebrat',
+ providers_removing: 'Odebírám…',
+ providers_save: 'Uložit',
+ providers_saving: 'Ukládám…',
+ providers_section_meta: 'Spravujte API klíče pro AI poskytovatele. Změny se okamžitě projeví.',
+ providers_section_title: 'Poskytovatelé',
+ providers_status_api_key: 'API klíč',
+ providers_status_configured: 'API klíč nakonfigurován',
+ providers_status_model: 'Model',
+ providers_status_not_configured: 'Bez API klíče',
+ providers_status_not_configured_label: 'Nenakonfigurováno',
+ providers_status_oauth: 'OAuth',
+ providers_tab_title: 'Poskytovatelé',
+ remove_failed: 'Odebrání selhalo: ',
+ remove_title: 'Odebrat',
+ save_skill: 'Uložit dovednost',
+ scheduled_jobs: 'Naplánované úlohy',
+ search: 'Hledat',
+ search_skills: 'Hledat dovednosti...',
+ session_archive: 'Archivovat konverzaci',
+ session_archive_desc: 'Skrýt tuto konverzaci dokud se nezobrazí archivované',
+ session_archive_failed: 'Archivace selhala: ',
+ session_archive_worktree_desc: 'Skrýt tuto konverzaci; zachovat její worktree na disku',
+ session_archived: 'Relace archivována',
+ session_archived_worktree: 'Relace archivována. Worktree zůstává na disku.',
+ session_batch_archive: 'Archivovat',
+ session_batch_archive_confirm: 'Archivovat {0} konverzací?',
+ session_batch_archive_worktree_confirm: 'Archivovat {0} konverzací? {1} konverzace s worktree si ponechají své adresáře worktree na disku.',
+ session_batch_delete: 'Smazat',
+ session_batch_delete_confirm: 'Smazat {0} konverzací?',
+ session_batch_delete_worktree_confirm: 'Smazat {0} konverzací? {1} konverzace s worktree zanechají své adresáře worktree na disku.',
+ session_batch_move: 'Přesunout do projektu',
+ session_child_toggle_hint: '{0} — podřízené konverzace vytvořené z této relace. Klikněte pro zobrazení nebo skrytí.',
+ session_delete: 'Smazat konverzaci',
+ session_delete_confirm: 'Smazat tuto konverzaci?',
+ session_delete_desc: 'Trvale odstranit tuto konverzaci',
+ session_delete_worktree_confirm: (path) => `Smazat tuto konverzaci? Worktree na ${path} zůstane na disku.`,
+ session_delete_worktree_desc: 'Smazat pouze WebUI konverzaci; zachovat worktree na disku',
+ session_deleted: 'Konverzace smazána',
+ session_deleted_worktree: 'Konverzace smazána. Worktree zůstává na disku.',
+ session_deselect_all: 'Odznačit vše',
+ session_duplicate: 'Duplikovat konverzaci',
+ session_duplicate_desc: 'Vytvořit kopii se stejným pracovním prostorem a modelem',
+ session_duplicate_failed: 'Duplikace selhala: ',
+ session_duplicated: 'Relace duplikována',
+ session_export_html: 'Exportovat jako HTML',
+ session_export_html_desc: 'Stáhnout tuto konverzaci jako samostatný HTML soubor',
+ session_hidden: 'Relace skryta ze seznamu',
+ session_hide_external: 'Skrýt ze seznamu',
+ session_hide_external_desc: 'Skrýt tuto importovanou relaci z WebUI bez mazání zdrojové historie.',
+ session_lineage_segment_open: 'Otevřít segment linie',
+ session_lineage_segment_untitled: 'Neoznačený segment',
+ session_lineage_static_hint: '{0} — dřívější kontextové tahy jsou zde sbaleny.',
+ session_lineage_toggle_hint: '{0} — dřívější kontextové tahy jsou zde sbaleny. Klikněte pro zobrazení nebo skrytí.',
+ session_link_copied: 'Odkaz na konverzaci zkopírován do schránky',
+ session_link_copy_failed: 'Kopírování odkazu na konverzaci selhalo: ',
+ session_meta_children: (n) => `${n} potomek${n === 1 ? '' : 'ci'}`,
+ session_meta_messages: (n) => `${n} zpráv${n === 1 ? 'a' : ''}`,
+ session_meta_segments: (n) => `${n} předchozích tah${n === 1 ? '' : 'ů'}`,
+ session_move_project: 'Přesunout do projektu',
+ session_move_project_desc_has: 'Změnit projekt této konverzace',
+ session_move_project_desc_none: 'Přiřadit projekt této konverzaci',
+ session_no_selection: 'Nejsou vybrány žádné konverzace',
+ session_pin: 'Připnout konverzaci',
+ session_pin_desc: 'Ponechat tuto konverzaci nahoře',
+ session_pin_failed: 'Připnutí selhalo: ',
+ session_readonly_title_hint: 'Importovaná relace pouze pro čtení — {0}',
+ session_restore: 'Obnovit konverzaci',
+ session_restore_desc: 'Vrátit tuto konverzaci zpět do hlavního seznamu',
+ session_restored: 'Relace obnovena',
+ session_select_all: 'Vybrat vše',
+ session_select_mode: 'Vybrat',
+ session_select_mode_desc: 'Vybrat konverzace pro hromadnou správu',
+ session_selected_count: '{0} vybráno',
+ session_stop_response: 'Zastavit odpověď',
+ session_stop_response_desc: 'Zrušit běžící odpověď této konverzace',
+ session_time_bucket_last_week: 'Minulý týden',
+ session_time_bucket_older: 'Starší',
+ session_time_bucket_this_week: 'Tento týden',
+ session_time_bucket_today: 'Dnes',
+ session_time_bucket_yesterday: 'Včera',
+ session_time_days_ago: (n) => `${n} d`,
+ session_time_hours_ago: (n) => `${n} h`,
+ session_time_last_week: '1t',
+ session_time_minutes_ago: (n) => `${n} min`,
+ session_time_unknown: 'Neznámý',
+ session_unpin: 'Odpnout konverzaci',
+ session_unpin_desc: 'Odebrat z připnutých',
+ session_worktree_remove: 'Odebrat worktree',
+ session_worktree_remove_ahead_warning: (ahead) => `${ahead} nepushnutých commitů bude ztraceno.`,
+ session_worktree_remove_confirm: (path) => `Odebrat git worktree z disku?\n\nCesta: ${path}\n\nToto smaže celý adresář worktree. Data relace zůstanou ve WebUI.`,
+ session_worktree_remove_confirm_label: 'Odebrat',
+ session_worktree_remove_desc: (path) => `Smazat git worktree na ${path} z disku`,
+ session_worktree_remove_dirty_warning: 'UPOZORNĚNÍ: Tento worktree má necommitované změny které budou ztraceny.',
+ session_worktree_remove_failed: 'Odebrání worktree selhalo: ',
+ session_worktree_remove_locked_by_stream: 'Nelze odebrat — aktivní streamovací relace používá tento worktree.',
+ session_worktree_remove_locked_by_terminal: 'Nelze odebrat — aktivní terminálová relace používá tento worktree.',
+ session_worktree_remove_not_exists: (path) => `Worktree na ${path} již neexistuje na disku.`,
+ session_worktree_remove_status_failed: 'Čtení stavu worktree selhalo: ',
+ session_worktree_remove_unsafe_blocked: 'Vyřešte lokální změny nebo nepushnuté commity před odebráním tohoto worktree.',
+ session_worktree_remove_untracked_warning: (count) => `${count} nesledovaných souborů bude trvale smazáno.`,
+ session_worktree_removed: 'Worktree odebrán.',
+ settings_auto_title_refresh_10: 'Každých 10 výměn',
+ settings_auto_title_refresh_20: 'Každých 20 výměn',
+ settings_auto_title_refresh_5: 'Každých 5 výměn',
+ settings_auto_title_refresh_off: 'Vypnuto',
+ settings_autosave_failed: 'Uložení selhalo',
+ settings_autosave_retry: 'Zkusit znovu',
+ settings_autosave_saved: 'Uloženo',
+ settings_autosave_saving: 'Ukládání…',
+ settings_aux_advanced_api_key: 'Přepsání API klíče',
+ settings_aux_advanced_api_key_clear: 'Vymazat existující přepsání API klíče',
+ settings_aux_advanced_api_key_empty_hint: 'Nechte prázdné pro použití pověření poskytovatele/výchozích.',
+ settings_aux_advanced_api_key_set_hint: 'API klíč je nastaven. Nechte prázdné pro jeho zachování, nebo použijte vymazání pro jeho odstranění.',
+ settings_aux_advanced_base_url: 'Základní URL',
+ settings_aux_advanced_base_url_desc: 'Volitelné přepsání koncového bodu poskytovatele.',
+ settings_aux_advanced_button_aria: 'Pokročilé možnosti pro {task}',
+ settings_aux_advanced_button_title: 'Pokročilé možnosti',
+ settings_aux_advanced_download_timeout: 'Časový limit stahování v sekundách',
+ settings_aux_advanced_download_timeout_desc: 'Relevantní pouze pro úlohy stahující média/obsah, např. vision. Prázdné používá výchozí.',
+ settings_aux_advanced_extra_body: 'Extra tělo JSON',
+ settings_aux_advanced_extra_body_desc: 'Volitelný JSON objekt sloučený do těla požadavku modelu.',
+ settings_aux_advanced_extra_body_invalid_json: 'Extra body musí být platný JSON',
+ settings_aux_advanced_extra_body_object_required: 'Extra body musí být JSON objekt',
+ settings_aux_advanced_max_concurrency: 'Maximální souběžnost',
+ settings_aux_advanced_max_concurrency_desc: 'Volitelný limit souběžnosti na úlohu. Prázdné používá výchozí.',
+ settings_aux_advanced_save: 'Uložit možnosti',
+ settings_aux_advanced_save_failed: 'Nepodařilo se uložit pomocné možnosti',
+ settings_aux_advanced_saved: 'Pomocné možnosti uloženy',
+ settings_aux_advanced_subtitle: 'Pokročilá konfigurace pro pomocný.',
+ settings_aux_advanced_timeout: 'Časový limit v sekundách',
+ settings_aux_advanced_timeout_desc: 'Časový limit požadavku pro tuto pomocnou úlohu. Prázdné používá výchozí Hermes.',
+ settings_aux_advanced_title: 'Možnosti {task}',
+ settings_aux_load_failed: 'Nepodařilo se načíst nastavení pomocného modelu. Ujistěte se že API agenta je dostupné.',
+ settings_aux_loading: 'Načítám pomocné modely…',
+ settings_aux_model_auto: 'auto (použít výchozí nastavení poskytovatele)',
+ settings_aux_model_custom: 'Vlastní model…',
+ settings_aux_model_custom_prompt: 'Zadejte ID modelu:',
+ settings_aux_no_changes: 'Žádné změny k aplikování',
+ settings_aux_provider_auto: 'použít hlavní model',
+ settings_aux_reset_confirm_msg: 'Toto nastaví všechny pomocné úlohy na auto (použít hlavní model).',
+ settings_aux_reset_confirm_title: 'Resetovat pomocné modely?',
+ settings_aux_reset_done: 'Pomocné modely resetovány na auto',
+ settings_aux_save_failed: 'Nepodařilo se uložit pomocný model',
+ settings_aux_saved: 'Pomocné modely aktualizovány',
+ settings_aux_task_approval: 'Schvalování',
+ settings_aux_task_approval_desc: 'chytré schvalování příkazů',
+ settings_aux_task_compression: 'Komprese',
+ settings_aux_task_compression_desc: 'sumarizace kontextu',
+ settings_aux_task_curator: 'Kurátor',
+ settings_aux_task_curator_desc: 'revize použití dovedností',
+ settings_aux_task_kanban_decomposer: 'Kanban dekompozitor',
+ settings_aux_task_kanban_decomposer_desc: 'dekompozice úkolů',
+ settings_aux_task_mcp: 'MCP',
+ settings_aux_task_mcp_desc: 'uvažování o nástrojích MCP',
+ settings_aux_task_profile_describer: 'Profil popisovač',
+ settings_aux_task_profile_describer_desc: 'souhrny profilů',
+ settings_aux_task_session_search: 'Hledání relací',
+ settings_aux_task_session_search_desc: 'připomenutí minulých konverzací',
+ settings_aux_task_skills_hub: 'Centrum dovedností',
+ settings_aux_task_skills_hub_desc: 'hledání/instalace dovedností',
+ settings_aux_task_title_generation: 'Generování názvů',
+ settings_aux_task_title_generation_desc: 'názvy relací',
+ settings_aux_task_triage_specifier: 'Triáž specifikátor',
+ settings_aux_task_triage_specifier_desc: 'specifikace triáže problémů/úkolů',
+ settings_aux_task_vision: 'Vidění',
+ settings_aux_task_vision_desc: 'analýza obrázků/screenshotů',
+ settings_aux_task_web_extract: 'Extrakce webu',
+ settings_aux_task_web_extract_desc: 'sumarizace webových stránek',
+ settings_btn_apply_aux_models: 'Aplikovat změny',
+ settings_btn_reset_aux_models: 'Resetovat vše na auto',
+ settings_btn_shutdown: 'Zastavit server',
+ settings_check_now: 'Zkontrolovat nyní',
+ settings_checking: 'Kontroluji…',
+ settings_dashboard_mode_always: 'Vždy zobrazit',
+ settings_dashboard_mode_auto: 'Automatická detekce',
+ settings_dashboard_mode_never: 'Nikdy nezobrazovat',
+ settings_dashboard_save: 'Uložit nastavení dashboard odkazu',
+ settings_default_message_mode_interrupt: 'Přerušit aktuální tah',
+ settings_default_message_mode_queue: 'Zařadit navazující zprávu',
+ settings_default_message_mode_steer: 'Steer (mezitahová oprava)',
+ settings_desc_api_redact: 'Uživatelé samostatně hostované instance mohou zakázat pro transparentnost (nedoporučeno pro sdílené instance).',
+ settings_desc_auto_scroll_follow: 'Když povoleno, zobrazení se posouvá dolů jak nové tokeny přicházejí. Když zakázáno, pozici posouvání ovládáte manuálně.',
+ settings_desc_auto_title_refresh: 'Automaticky regeneruje název relace na základě poslední výměny, udržuje ho relevantní jak konverzace pokračuje. Vyžaduje aby byl nakonfigurován LLM model pro generování názvů.',
+ settings_desc_auxiliary_models: 'Směrování vedlejších úloh pro vision, kompresi, generování názvů atd. "Auto" používá váš hlavní chatovací model.',
+ settings_desc_bot_name: 'Použito pouze pro výchozí profil. Ostatní profily používají vlastní názvy profilů.',
+ settings_desc_chat_activity_display_mode: 'Kompaktní Worklog seskupuje podpůrnou aktivitu do tichého souhrnu. Transparentní Stream zachovává každou událost přemýšlení/nástroje jako vlastní chronologicky rozbalitelný řádek.',
+ settings_desc_check_updates: 'Zobrazit banner když jsou dostupné novější verze WebUI nebo Agenta. Spouští periodické git fetch na pozadí.',
+ settings_desc_claude_code_sessions: 'Zobrazit importované relace Claude Code v bočním panelu, nebo je skrýt při zachování ostatních externích relací viditelných.',
+ settings_desc_composer_controls: 'Přepínat které ovládací prvky jsou zobrazeny v zápatí chatu. Přetáhněte čipy pro změnu pořadí každé skupiny zápatí.',
+ settings_desc_composer_situational_controls: 'Tyto ovládací prvky se ne vždy zobrazí, v závislosti na viewportu, režimu nebo stavu runtime. Stále je můžete vypnout pokud je to potřeba.',
+ settings_desc_conversation_outline: 'Zobrazit seznam otázek uživatele v aktuální konverzaci (pouze desktop). Standardně vypnuto.',
+ settings_desc_cron_sessions: 'Zobrazit výstup cron úloh jako konverzace v bočním panelu. Aktivní pouze když jsou povoleny externí relace. Standardně vypnuto; úlohy s vysokou frekvencí mohou zaplavit boční panel.',
+ settings_desc_dashboard_mode: 'Zobrazit odkaz navigačního pruhu když je oficiální hermes dashboard dosažitelný. Veřejné reverse-proxy URL jsou ukládány jako odkazy pouze v prohlížeči a nikdy nejsou kontrolovány serverem.',
+ settings_desc_default_message_mode: 'Řídí co se stane když odešlete zprávu zatímco agent běží. Fronta čeká; Přerušení ruší a začíná novou; Steer vkládá opravu mezitah bez přerušení. Pokud Steer není dostupný, návrh je obnoven pro výběr další akce.',
+ settings_desc_external_sessions: 'Zobrazit konverzace z CLI, Telegramu, Discordu, Slacku a dalších kanálů v seznamu relací. Klikněte pro import a pokračování.',
+ settings_desc_gateway_status: 'Stav Hermes gateway (Telegram, Discord, Slack atd.)',
+ settings_desc_hide_suggestions: 'Skrýt tři výchozí tlačítka návrhů na prázdné obrazovce nového chatu pro vyhnutí se náhodným klepnutím.',
+ settings_desc_ignore_agent_updates: 'Zachovat kontroly aktualizací WebUI zapnuté, ale skrýt oznámení aktualizací Agenta a přeskočit fetchování aktualizací Agenta.',
+ settings_desc_large_text_paste_as_attachment: 'Když povoleno, dlouhý vložený text se stane přílohou .md místo vyplnění kompozitoru.',
+ settings_desc_notifications: 'Zobrazit systémovou notifikaci když se odpověď dokončí zatímco je aplikace na pozadí.',
+ settings_desc_password: 'Zadejte nové heslo pro nastavení nebo změnu. Nechte prázdné pro zachování aktuálního nastavení.',
+ settings_desc_pinned_limit: 'Maximální počet aktivních konverzací které mohou být připnuty v bočním panelu. Výchozí je 3.',
+ settings_desc_previous_messaging_sessions: 'Zobrazit starší Discord, Telegram, Slack a Weixin relace které byly nahrazeny resetem nebo kompresí.',
+ settings_desc_project_quick_create: 'Když povoleno, každý čip projektu v bočním panelu získá tlačítko + pro zahájení konverzace v tomto projektu.',
+ settings_desc_quota_chip: 'Zobrazuje indikátor zbývající kvóty (např. zůstatek kreditu OpenRouter) v zápatí kompozitoru. Standardně vypnuto. Viditelné pouze na širokých displejích (>=1400px) když povoleno, pro zachování přehlednosti kompozitoru na šířce notebooku a standardního desktopu.',
+ settings_desc_raw_audio: 'Nahrávat a odesílat původní audio soubor agentovi místo prvního převodu na text. Agent ho pak může přepsat nebo zpracovat (emoce, pozadí, vlastní STT). Podobně jako hlasové zprávy na Telegramu.',
+ settings_desc_render_user_markdown: 'Když povoleno, tučné, kurzíva, odkazy a další markdown ve vašich vlastních zprávách jsou vykresleny. Standardně vypnuto; ohraničené bloky kódu a matematika jsou vždy vykresleny bez ohledu na toto nastavení.',
+ settings_desc_session_endless_scroll: 'Když povoleno, starší zprávy se načítají automaticky při posouvání nahoru. Když zakázáno, použijte tlačítko starších zpráv.',
+ settings_desc_session_jump_buttons: 'Zobrazit plovoucí tlačítka Spustit a Konec při čtení dlouhých historií relací.',
+ settings_desc_show_titlebar_profile: 'Když povoleno, přepínač profilů se objeví v levém horním záhlaví aplikace pro změnu profilů z jakékoliv karty. Standardně vypnuto; zápatí kompozitoru vždy obsahuje přepínač profilů bez ohledu na toto nastavení.',
+ settings_desc_shutdown_after_cmd: ' nebo nativní aplikace) před tím než je WebUI znovu dosažitelný.',
+ settings_desc_shutdown_before_cmd: 'Řízeně zastaví lokální WebUI server. Užitečné pokud jste spustili přes ',
+ settings_desc_shutdown_between_cmds: ' a chcete zastavit bez přepnutí do terminálu. Budete muset znovu spustit server (',
+ settings_desc_sidebar_density: 'Řídí kolik metadat seznam relací zobrazuje v levém bočním panelu.',
+ settings_desc_sound: 'Přehrát zvuk když asistent dokončí odpověď.',
+ settings_desc_structured_code: 'Když je vybráno Auto, JSON/YAML bloky s alespoň tímto počtem řádků se otevřou ve Stromovém zobrazení. Strom vždy otevře strukturovanou prohlížeč; Zdroj zachovává zvýrazněný text. Stále můžete přepínat Strom/Zdroj na každém bloku.',
+ settings_desc_sync_insights: 'Zrcadlí využití tokenů WebUI do state.db takže hermes /insights zahrnuje data relace prohlížeče. Standardně vypnuto.',
+ settings_desc_tab_visibility: 'Zvolte které karty se zobrazí v bočním panelu a liště. Přetáhněte čipy pro změnu pořadí. Chat a Nastavení jsou vždy viditelné.',
+ settings_desc_terminal_auto_expand: 'Automaticky rozbalit sbalený terminálový panel když běžící příkaz emituje nový výstup.',
+ settings_desc_token_speed: 'Zobrazuje tokeny za sekundu v záhlavích zpráv asistenta během streamování a po dokončení odpovědi. Standardně vypnuto.',
+ settings_desc_token_usage: 'Zobrazuje počet vstupních/výstupních tokenů pod každou odpovědí asistenta. Také přepínáno s /usage.',
+ settings_desc_tts: 'Zobrazit tlačítko reproduktoru na každé zprávě asistenta pro přečtení nahlas pomocí syntetizátoru řeči vašeho prohlížeče.',
+ settings_desc_tts_auto_read: 'Automaticky číst každou novou odpověď asistenta když se dokončí. Pozastaví když začnete psát.',
+ settings_desc_tts_engine: 'Zvolte engine řeči. Edge TTS používá Microsoft neurální hlasy přes server.',
+ settings_desc_tts_voice: 'Preferovaný hlas. Naplněno z dostupných hlasů vašeho prohlížeče.',
+ settings_desc_virtualize_transcript: 'Experimentální. Vykresluje pouze viditelnou část velmi dlouhých chat transcriptů (přes 80 zpráv) pro urychlení posouvání. Standardně vypnuto protože to může způsobit blikání při posouvání na dlouhých relacích s velkými bloky volání nástrojů. Zapněte to pro vyzkoušení; nechte vypnuté pro vykreslení celého transcriptu najednou (a tak vyhledávání prohlížeče (Ctrl+F) odpovídá celé konverzaci).',
+ settings_desc_voice_mode: 'Zobrazit tlačítko hlasového režimu (audio vlna) vedle mikrofonu pro diktování. Umožňuje mluvit přirozeně — Hermes automaticky odesílá po pauze a čte odpovědi nahlas. Vyžaduje prohlížeč který podporuje rozpoznávání řeči i TTS.',
+ settings_desc_webhook_sessions: 'Zobrazit webhook běhy jako konverzace v bočním panelu. Aktivní pouze když jsou povoleny externí relace. Standardně vypnuto; vysokoobjemové trasy mohou zaplavit boční panel.',
+ settings_desc_whats_new_summary: 'Mění akci Co je nového z otevření raw diff první na generování krátkého lidsky čitelného souhrnu. Regulární srovnání diff zůstává dostupné po souhrnu.',
+ settings_desc_worklog_details_expanded_default: 'Když povoleno, detaily Worklog se začínají rozbalené tak aby byly viditelné nástroje, přemýšlení a karty pokroku bez dalšího kliknutí. Když vypnuto, detaily zůstávají sbalené standardně; manuální volby sbalení/rozbalení na úroveň tahu stále vyhrávají.',
+ settings_desc_workspace_panel_open: 'Když povoleno, panel pracovního prostoru / prohlížeč souborů se otevírá automaticky s každou novou relací. Stále ho můžete kdykoliv manuálně zavřít.',
+ settings_desc_workspace_todos_tab: 'Když povoleno, záložka Úkoly se objeví v panelu pracovního prostoru. Panel Úkoly v bočním panelu zůstává dostupný.',
+ settings_dropdown_appearance: 'Vzhled',
+ settings_dropdown_conversation: 'Konverzace',
+ settings_dropdown_preferences: 'Předvolby',
+ settings_dropdown_providers: 'Poskytovatelé',
+ settings_dropdown_system: 'Systém',
+ settings_extensions_diagnostics_tab: 'Diagnostika',
+ settings_extensions_gallery_empty: 'V registru nebyla nalezena žádná rozšíření.',
+ settings_extensions_gallery_error: 'Načtení galerie selhalo.',
+ settings_extensions_gallery_loading: 'Načítám galerii…',
+ settings_extensions_gallery_tab: 'Galerie',
+ settings_extensions_installed_tab: 'Instalované',
+ settings_heading_subtitle: 'Předvolby, nástroje konverzace a systémové ovládací prvky.',
+ settings_heading_title: 'Ovládací centrum',
+ settings_help_docs_desc: 'Průvodci, referenční dokumentace konfigurace a kompletní README Hermes WebUI.',
+ settings_help_docs_label: 'Dokumentace',
+ settings_help_docs_link: 'Otevřít dokumentaci',
+ settings_help_issue_desc: 'Hledat existující zprávy nebo otevřít novou na GitHubu.',
+ settings_help_issue_label: 'Máte problém?',
+ settings_help_issue_link: 'Otevřít GitHub Issues',
+ settings_help_meta: 'Zdroje a podpora pro Hermes WebUI.',
+ settings_label_api_redact: 'Redakce citlivých dat v odpovědích API',
+ settings_label_auto_scroll_follow: 'Automatické sledování nového obsahu',
+ settings_label_auto_title_refresh: 'Adaptivní obnovení názvu',
+ settings_label_auxiliary_models: 'Pomocné modely',
+ settings_label_bot_name: 'Výchozí název asistenta',
+ settings_label_chat_activity_display_mode: 'Zobrazení aktivity',
+ settings_label_check_updates: 'Kontrolovat aktualizace',
+ settings_label_claude_code_sessions: 'Zobrazit Claude Code relace',
+ settings_label_composer_controls: 'Ovládací prvky zápatí chatu',
+ settings_label_composer_situational_controls: 'Situační ovládací prvky zápatí',
+ settings_label_conversation_outline: 'Zobrazit osnovu konverzace',
+ settings_label_cron_sessions: 'Zobrazit cron relace',
+ settings_label_dashboard_mode: 'Oficiální Hermes Dashboard',
+ settings_label_default_message_mode: 'Výchozí režim zpráv',
+ settings_label_external_sessions: 'Zobrazit externí relace',
+ settings_label_font_size: 'Velikost písma',
+ settings_label_gateway_status: 'Stav Gateway',
+ settings_label_hide_suggestions: 'Skrýt návrhy nového chatu',
+ settings_label_ignore_agent_updates: 'Ignorovat aktualizace Agenta',
+ settings_label_large_text_paste_as_attachment: 'Přiložit velký vložený text jako soubor',
+ settings_label_notifications: 'Notifikace prohlížeče',
+ settings_label_password: 'Heslo přístupu',
+ settings_label_pinned_limit: 'Limit připnutých konverzací',
+ settings_label_previous_messaging_sessions: 'Zobrazit předchozí messaging relace',
+ settings_label_project_quick_create: 'Zobrazit tlačítka nové konverzace na projekt',
+ settings_label_quota_chip: 'Zobrazit čip kvóty poskytovatele v kompozitoru',
+ settings_label_raw_audio: 'Odesílat surové audio místo přepisu',
+ settings_label_render_user_markdown: 'Vykreslovat markdown ve zprávách uživatele',
+ settings_label_session_endless_scroll: 'Načítat starší zprávy při posouvání nahoru',
+ settings_label_session_jump_buttons: 'Zobrazit tlačítka skoku relace',
+ settings_label_show_titlebar_profile: 'Zobrazit přepínač profilů v záhlaví',
+ settings_label_shutdown: 'Zastavit Hermes WebUI server',
+ settings_label_sidebar_density: 'Hustota bočního panelu',
+ settings_label_skin: 'Vzhled',
+ settings_label_sound: 'Zvuk notifikace',
+ settings_label_structured_code: 'JSON/YAML bloky kódu',
+ settings_label_structured_code_auto_lines: 'Automatický práh řádků',
+ settings_label_sync_insights: 'Synchronizovat do přehledů',
+ settings_label_tab_visibility: 'Záložky bočního panelu',
+ settings_label_terminal_auto_expand: 'Automaticky rozbalit terminál při výstupu',
+ settings_label_token_speed: 'Zobrazit rychlost tokenů (TPS)',
+ settings_label_token_usage: 'Zobrazit využití tokenů',
+ settings_label_tts: 'Text-na-řeč pro odpovědi',
+ settings_label_tts_auto_read: 'Automaticky číst odpovědi nahlas',
+ settings_label_tts_engine: 'TTS engine',
+ settings_label_tts_pitch: 'Výška řeči',
+ settings_label_tts_rate: 'Rychlost řeči',
+ settings_label_tts_voice: 'Hlas',
+ settings_label_virtualize_transcript: 'Virtualizovat dlouhé transcripty (experimentální)',
+ settings_label_voice_mode: 'Tlačítko hands-free hlasového režimu',
+ settings_label_webhook_sessions: 'Zobrazit webhook relace',
+ settings_label_whats_new_summary: 'Shrnout Co je nového s AI',
+ settings_label_worklog_details_expanded_default: 'Automaticky otevírat detaily Worklog',
+ settings_label_workspace_panel_open: 'Ve výchozím stavu otevřít panel pracovního prostoru',
+ settings_label_workspace_todos_tab: 'Zobrazit záložku Úkoly v panelu pracovního prostoru',
+ settings_load_failed: 'Načtení nastavení selhalo: ',
+ settings_main_advanced_button_aria: 'Pokročilé možnosti pro hlavní model',
+ settings_main_advanced_save_failed: 'Nepodařilo se uložit možnosti hlavního modelu',
+ settings_main_advanced_saved: 'Možnosti hlavního modelu uloženy',
+ settings_main_advanced_service_tier: 'Úroveň služby',
+ settings_main_advanced_service_tier_default: 'Výchozí / vypnuto',
+ settings_main_advanced_service_tier_desc: 'Volitelné nastavení požadavku pro poskytovatele rodiny OpenAI.',
+ settings_main_advanced_service_tier_priority: 'Priorita (rychlé)',
+ settings_main_advanced_subtitle: 'Pokročilá konfigurace pro výchozí chatovací model.',
+ settings_main_advanced_title: 'Možnosti hlavního modelu',
+ settings_option_compact_worklog: 'Kompaktní Worklog',
+ settings_option_structured_code_auto: 'Auto: Strom pro dlouhé bloky',
+ settings_option_structured_code_off: 'Zdroj standardně',
+ settings_option_structured_code_on: 'Strom standardně',
+ settings_option_transparent_stream: 'Transparentní Stream',
+ settings_plugins_empty: 'Žádné Hermes pluginy nejsou aktuálně viditelné. Nainstalujte nebo povolte pluginy z Hermes CLI/config pro jejich zobrazení zde.',
+ settings_plugins_meta: 'Zobrazit nainstalované Hermes pluginy a háčky životního cyklu, které registrují. Tento panel je pouze pro čtení.',
+ settings_plugins_title: 'Pluginy',
+ settings_save_btn: 'Uložit nastavení',
+ settings_save_failed: 'Uložení selhalo: ',
+ settings_saved: 'Nastavení uloženo',
+ settings_saved_pw: 'Nastavení uloženo — ochrana heslem povolena a tento prohlížeč zůstává přihlášen',
+ settings_saved_pw_updated: 'Nastavení uloženo — heslo aktualizováno',
+ settings_search_no_results: 'Nenalezena žádná nastavení.',
+ settings_search_placeholder: 'Hledat nastavení…',
+ settings_section_appearance_meta: 'Motiv, barvy a vizuální styl.',
+ settings_section_appearance_title: 'Vzhled',
+ settings_section_conversation_title: 'Konverzace',
+ settings_section_preferences_meta: 'Výchozí nastavení a chování UI pro Hermes Web UI.',
+ settings_section_preferences_title: 'Předvolby',
+ settings_section_system_meta: 'Verze instance a kontroly přístupu.',
+ settings_section_system_title: 'Systém',
+ settings_shutdown_confirm_btn: 'Zastavit',
+ settings_shutdown_confirm_message: 'Zastavit Hermes WebUI server?',
+ settings_shutdown_confirm_title: 'Zastavit Hermes WebUI',
+ settings_shutdown_stopped_message: 'Server zastaven. Tuto záložku můžete zavřít.',
+ settings_sidebar_density_compact: 'Kompaktní',
+ settings_sidebar_density_detailed: 'Detailní',
+ settings_tab_appearance: 'Vzhled',
+ settings_tab_conversation: 'Konverzace',
+ settings_tab_extensions: 'Rozšíření',
+ settings_tab_help: 'Nápověda',
+ settings_tab_plugins: 'Pluginy',
+ settings_tab_preferences: 'Předvolby',
+ settings_tab_system: 'Systém',
+ settings_title: 'Nastavení',
+ settings_unsaved_changes: 'Máte neuložené změny.',
+ settings_up_to_date: 'Aktuální ✓',
+ settings_update_check_failed: 'Kontrola aktualizací selhala',
+ settings_update_no_git: 'Nelze kontrolovat aktualizace (nejde o git checkout)',
+ settings_updates_available: 'Dostupných {count} aktualizací',
+ settings_updates_disabled: 'Kontroly aktualizací zakázány',
+ sign_out: 'Odhlásit se',
+ sign_out_failed: 'Odhlášení selhalo: ',
+ skill_category: 'Kategorie',
+ skill_category_placeholder: 'Volitelná, např. devops',
+ skill_content: 'Obsah SKILL.md',
+ skill_content_placeholder: 'YAML frontmatter + markdown tělo',
+ skill_created: 'Dovednost vytvořena',
+ skill_delete_confirm: 'Smazat dovednost "{0}"?',
+ skill_deleted: 'Dovednost smazána',
+ skill_disabled: 'Zakázáno',
+ skill_enabled: 'Povoleno',
+ skill_file_load_failed: 'Nelze načíst soubor: ',
+ skill_load_failed: 'Nelze načíst dovednost: ',
+ skill_metadata: 'Metadata',
+ skill_name: 'Název',
+ skill_name_required: 'Název dovednosti je povinný',
+ skill_rename_not_supported: 'Přejmenování dovednosti není podporováno. Vytvořte novou dovednost a smažte starou pro přejmenování.',
+ skill_toggle_failed: 'Přepnutí dovednosti selhalo: ',
+ skill_updated: 'Dovednost aktualizována',
+ skills_back_to: 'Zpět na {0}',
+ skills_delete: 'Smazat',
+ skills_edit: 'Upravit',
+ skills_empty_sub: 'Zvolte dovednost z bočního panelu pro zobrazení jejího obsahu, nebo vytvořte novou.',
+ skills_empty_title: 'Zvolte dovednost',
+ skills_no_match: 'Žádné odpovídající dovednosti.',
+ source_active: 'aktivní',
+ source_configured: 'nakonfigurováno',
+ status_completed: 'dokončeno',
+ status_failed: 'selhalo',
+ suggest_files: 'Jaké soubory jsou v tomto pracovním prostoru?',
+ suggest_plan: 'Pomozte mi naplánovat malý projekt.',
+ suggest_schedule: 'Co mám dnes v plánu?',
+ switch_failed: 'Přepnutí selhalo: ',
+ tab_chat: 'Chat',
+ tab_dashboard: 'Hermes Dashboard',
+ tab_insights: 'Přehledy',
+ tab_kanban: 'Kanban',
+ tab_logs: 'Logy',
+ tab_memory: 'Paměť',
+ tab_profiles: 'Profily',
+ tab_settings: 'Nastavení',
+ tab_skills: 'Dovednosti',
+ tab_tasks: 'Úkoly',
+ tab_todos: 'Úkoly',
+ tab_workspaces: 'Prostory',
+ tasks_empty_sub: 'Zvolte úlohu z bočního panelu pro zobrazení jejích detailů a běhů, nebo vytvořte novou.',
+ tasks_empty_title: 'Zvolte naplánovanou úlohu',
+ todos_no_active: 'V této relaci není aktivní seznam úkolů.',
+ tool_target_skill_suffix: 'dovednost',
+ transcript: 'Transkript',
+ tts_listen: 'Poslouchat',
+ tts_not_supported: 'Syntéza řeči není v tomto prohlížeči podporována.',
+ upload_failed: 'Nahrání selhalo: ',
+ upload_too_large: (maxMb, fileMb) => `Soubor je příliš velký (${fileMb} MB). Maximální velikost nahrávání je ${maxMb} MB.`,
+ uploaded: 'Nahráno',
+ uploading: 'Nahrávám…',
+ user_profile: 'Uživatelský profil',
+ view: 'Zobrazit',
+ voice_raw_attached: 'Audio přiloženo. Stiskněte Odeslat nebo napište více.',
+ voice_send_raw: 'Odeslat surové audio',
+ wiki_browse: 'Procházet wiki',
+ wiki_no_pages: 'Nenalezeny žádné wiki stránky',
+ wiki_not_configured: 'Wiki není nakonfigurována',
+ wiki_search_placeholder: 'Hledat stránky...',
+ worklog_thinking: 'Přemýšlím',
+ workspace_add_path_placeholder: 'Přidat cestu pracovního prostoru (např. /home/user/my-project)',
+ workspace_added: 'Pracovní prostor přidán',
+ workspace_already_saved: 'Pracovní prostor již uložen — zvolte ho ze seznamu',
+ workspace_auto_create_folder: 'Vytvořit složku pokud neexistuje',
+ workspace_busy_switch: 'Nelze přepnout pracovní prostor, zatímco agent běží',
+ workspace_choose_path: 'Zvolit cestu pracovního prostoru',
+ workspace_choose_path_meta: 'Přidat ověřenou cestu a přepnout tuto konverzaci',
+ workspace_desc: 'Přidávejte a přepínejte pracovní prostory pro vaše relace.',
+ workspace_drag_hint: 'Přetáhněte pro změnu pořadí',
+ workspace_manage: 'Spravovat pracovní prostory',
+ workspace_manage_meta: 'Otevřít panel Prostory',
+ workspace_name_label: 'Název',
+ workspace_name_placeholder: 'Volitelný přátelský název',
+ workspace_new_title: 'Nový prostor',
+ workspace_not_added: 'Pracovní prostor nebyl přidán',
+ workspace_path_label: 'Cesta',
+ workspace_path_readonly: 'Cesta nemůže být změněna. Pouze přejmenování.',
+ workspace_path_required: 'Cesta je povinná',
+ workspace_paths_validated_hint: 'Cesty jsou ověřovány jako existující adresáře před uložením.',
+ workspace_remove_confirm_message: (path) => `Odebrat "${path}"?`,
+ workspace_remove_confirm_title: 'Odebrat pracovní prostor',
+ workspace_removed: 'Pracovní prostor odebrán',
+ workspace_renamed: 'Pracovní prostor přejmenován',
+ workspace_reorder_failed: 'Změna pořadí selhala',
+ workspace_root: 'kořen pracovního prostoru',
+ workspace_switch_prompt_confirm: 'Přepnout',
+ workspace_switch_prompt_message: 'Zadejte absolutní cestu pracovního prostoru pro přidání a přepnutí této konverzace.',
+ workspace_switch_prompt_placeholder: '/Users/you/project',
+ workspace_switch_prompt_title: 'Přepnout pracovní prostor',
+ workspace_switched_to: (name) => `Přepnuto na ${name}`,
+ workspace_use: 'Použít',
+ workspace_use_title: 'Použít v aktuální relaci',
+ workspaces_empty_sub: 'Zvolte prostor z bočního panelu pro zobrazení jeho souborů a nastavení, nebo přidejte nový.',
+ workspaces_empty_title: 'Zvolte prostor',
+ yolo_disabled: 'YOLO režim VYPNUT',
+ yolo_enabled: '⚡ YOLO režim ZAPNUT — schválení přeskočena pro tuto relaci',
+ yolo_no_session: 'Žádná aktivní relace',
+ yolo_pill_label: 'YOLO',
+ yolo_pill_title_active: 'YOLO režim aktivní — klikněte pro zakázání',
+ approval_btn_always: 'Vždy povolit',
+ approval_btn_always_title: 'Vždy povolit tento vzor příkazu',
+ approval_btn_deny: 'Odmítnout',
+ approval_btn_deny_title: 'Odmítnout — tento příkaz nespouštět',
+ approval_btn_once: 'Povolit jednou',
+ approval_btn_once_title: 'Povolit tento jeden příkaz (Enter)',
+ approval_btn_session: 'Povolit relaci',
+ approval_btn_session_title: 'Povolit tuto relaci konverzace',
+ approval_desc_prefix: 'Byl zjištěn nebezpečný příkaz',
+ approval_gateway_unsupported: 'Schválení vyžadují novější gateway. Upgradujte připojený Hermes gateway.',
+ approval_gateway_unsupported_label: 'Schválení nejsou podporována',
+ approval_heading: 'Požadováno schválení',
+ approval_responding: 'Reakce\u2026',
+ auto_compress_label: 'Automatická komprese',
+ available_commands: 'Dostupné příkazy',
+ available_personalities: 'Dostupné osobnosti:',
+ bg_complete: 'Úkol na pozadí dokončen',
+ bg_failed: 'Úkol na pozadí se nezdařil:',
+ bg_label: 'Výsledek na pozadí:',
+ bg_no_answer: 'Žádná odpověď',
+ bg_running: 'Běží na pozadí...',
+ branch_failed: 'Rozvětvení selhalo: ',
+ branch_forked: 'Rozvětveno do nové relace',
+ btw_asking: 'Kladení vedlejší otázky...',
+ btw_done: 'Vedlejší otázka zodpovězena',
+ btw_failed: 'Vedlejší otázka selhala:',
+ btw_label: 'Vedlejší otázka — není v historii',
+ btw_no_answer: 'Nebyla přijata žádná odpověď.',
+ busy_interrupt_confirm: 'Přerušeno — odeslání nové zprávy',
+ busy_steer_fallback: 'Řízení není k dispozici — návrh byl obnoven',
+ cancel_failed: 'Zrušení selhalo: ',
+ cancel_unavailable: 'Zrušení není k dispozici.',
+ cancelling: 'Rušení\u2026',
+ clarify_heading: 'Zde je zapotřebí vyjasnění.',
+ clarify_hint: 'Vyberte si možnost nebo zadejte svou vlastní odpověď níže.',
+ clarify_input_placeholder: 'Sem napište odpověď',
+ clarify_other: 'Jiné',
+ clarify_responding: 'Reakce\u2026',
+ clarify_send: 'Odeslat',
+ clear: 'Vymazat',
+ cmd_background: 'Spustit výzvu na pozadí',
+ cmd_background_usage: '/background — běh paralelně bez blokování',
+ cmd_branch: 'Rozvětvit tuto konverzaci do nové relace',
+ cmd_branch_usage: '/branch [name] — rozvětvit konverzaci (volitelně s názvem)',
+ cmd_btw: 'Položit vedlejší otázku (pomíjivá)',
+ cmd_btw_usage: '/btw — položit vedlejší otázku pomocí kontextu relace',
+ cmd_clear: 'Vymazat konverzační zprávy',
+ cmd_compact_alias: 'Starší alias pro /compress',
+ cmd_compress: 'Ručně komprimovat kontext konverzace (použití: /compress [focus topic])',
+ cmd_goal: 'Nastavte nebo zkontrolujte trvalý cíl',
+ cmd_help: 'Zobrazit dostupné příkazy',
+ cmd_interrupt: 'Zrušit aktuální tah a odeslat novou zprávu',
+ cmd_interrupt_confirm: 'Přerušeno — odeslání nové zprávy',
+ cmd_interrupt_no_msg: 'Použití: /interrupt ',
+ cmd_model: 'Přepnout model (např. /model gpt-4o)',
+ cmd_new: 'Začít novou chat relaci',
+ cmd_personality: 'Přepnout osobnost agenta',
+ cmd_queue: 'Zařaď zprávu na další tah',
+ cmd_queue_confirm: 'Zpráva ve frontě',
+ cmd_queue_no_msg: 'Použití: /queue ',
+ cmd_queue_not_busy: 'Žádná aktivní úloha — stačí odeslat normálně',
+ cmd_retry: 'Znovu odeslat poslední zprávu',
+ cmd_skills: 'Seznam dostupných dovedností Hermes',
+ cmd_status: 'Zobrazit informace o relaci',
+ cmd_steer: 'Vložit opravu během tahu bez přerušení agenta',
+ cmd_steer_delivered: 'Řízení dodáno — agent to uvidí ve svém dalším výsledku nástroje',
+ cmd_steer_fallback: 'Řízení není k dispozici — návrh byl obnoven',
+ cmd_steer_no_msg: 'Použití: /steer ',
+ cmd_stop: 'Zastavit aktuální odpověď',
+ cmd_terminal: 'Otevřete terminál pracovního prostoru',
+ cmd_theme: "Přepnout vzhled (motiv: system\/dark\/light, skin: default\/ares\/mono\/graphite\/slate\/poseidon\/sisyphus\/charizard\/sienna\/catppuccin\/nous\/geist-contrast/zeus/verdigris)",
+ cmd_title: 'Získat nebo nastavit název relace',
+ cmd_undo: 'Odebrat poslední výměnu',
+ cmd_usage: 'Zapnout/vypnout zobrazení použití tokenu',
+ cmd_use: 'Vynutit dovednost pro další zprávu',
+ cmd_voice: 'Přepnout vstup mikrofonu',
+ cmd_voice_use_mic: 'Klikněte na tlačítko mikrofonu v editoru zprávy.',
+ cmd_webui_only_session: 'Tento příkaz není k dispozici pro relace importované CLI.',
+ cmd_workspace: 'Přepnout pracovní prostor podle názvu',
+ collapse_all: 'Sbalit vše',
+ command_label: 'Příkaz',
+ composer_placeholder_busy_interrupt: 'Enter = přerušení | /queue | /background | /steer',
+ composer_placeholder_busy_queue: 'Enter = fronta | /interrupt | /background | /steer',
+ composer_placeholder_busy_steer: 'Enter = řízení | /queue | /background | /interrupt',
+ compress_complete_label: 'Komprese dokončena',
+ compress_failed_label: 'Komprimace se nezdařila',
+ compress_running_label: 'Komprimace',
+ compressing: 'Vyžaduje se komprese kontextu...',
+ context_block_flush_aria: 'Kontextové bloky budou zahrnuty při odesílání',
+ context_block_name_default: 'Kontext',
+ context_block_remove: 'Odebrat kontextový blok',
+ context_block_rename_aria: 'Přejmenovat kontextový blok',
+ context_block_rename_hint: 'Klikněte nebo stiskněte Enter pro přejmenování',
+ context_compaction_label: 'Komprese kontextu',
+ conversation_cleared: 'Konverzace vymazána',
+ copied: 'Zkopírováno!',
+ copy: 'Kopírovat',
+ copy_failed: 'Kopírování selhalo',
+ copy_file_path: 'Kopírovat cestu souboru',
+ create: 'Vytvořit',
+ ctx_compress_action: '⚠ Komprimovat nyní pro uvolnění kontextu',
+ ctx_compress_hint: 'Komprimujte kontext, abyste uvolnili místo →',
+ delete_confirm: (name) => `Odstranit ${name}?`,
+ delete_dir_confirm: (name) => `Odstranit složku „${name}“ a celý její obsah?`,
+ delete_failed: 'Vymazání se nezdařilo',
+ delete_title: 'Smazat',
+ deleted: 'Odstraněno',
+ dialog_confirm_btn: 'Potvrdit',
+ dialog_confirm_title: 'Potvrdit činnost',
+ dialog_prompt_title: 'Zadejte hodnotu',
+ diff_error: 'Nelze načíst opravný soubor',
+ diff_loading: 'Načítání rozdílu',
+ diff_too_large: 'Záplatový soubor je příliš velký pro zobrazení v řádku',
+ discard: 'Zahodit',
+ double_click_rename: 'Dvakrát klikněte pro přejmenování',
+ download_folder: 'Složka pro stahování',
+ downloading: (name) => `Stahování ${name}\u2026`,
+ edit: 'Upravit',
+ edit_failed: 'Úprava se nezdařila:',
+ edit_message: 'Upravit zprávu',
+ edit_title: 'Upravit tento soubor',
+ expand_all: 'Rozbalit vše',
+ external_link_grant_expired: 'Toto externí zobrazení vypršelo. Znovu otevřete symbolický odkaz únikového cíle a znovu jej autorizujte.',
+ external_link_open_confirm: 'Tento symbolický odkaz ukazuje mimo pracovní prostor. Otevřít v externím zobrazení pouze pro čtení pro tuto relaci prohlížeče?',
+ external_link_read_only: 'Toto externí zobrazení je pouze pro čtení. Vytváření, přejmenování, přesun, odstranění, nahrávání, odhalení a akce editoru zde zůstávají zakázané.',
+ failed_colon: 'Selhalo:',
+ file_open_failed: 'Nelze otevřít soubor',
+ focus_label: 'Zaměření',
+ fork_from_here: 'Rozvětvit odtud',
+ forked_from: 'Rozvětveno z',
+ gateway_auth_label: 'Ověření brány se nezdařilo',
+ gateway_restart: 'Restartovat',
+ gateway_restart_failed: 'Restart gateway selhal',
+ gateway_restart_success: 'Restart gateway dokončen.',
+ gateway_running: 'Běží',
+ gateway_session: 'relace',
+ gateway_sessions: 'relace',
+ gateway_start: 'Spustit',
+ gateway_start_failed: 'Spuštění gateway selhalo',
+ gateway_start_success: 'Spuštění gateway dokončeno.',
+ gateway_status_load_failed: 'Načtení stavu gateway selhalo',
+ gateway_stop: 'Zastavit',
+ gateway_stop_failed: 'Zastavení gateway selhalo',
+ gateway_stop_success: 'Zastavení gateway dokončeno.',
+ goal_achieved: (reason) => `✓ Cíl dosažen: ${reason}`,
+ goal_cleared: 'Cíl vymazán.',
+ goal_continuing: (turns, max_turns, reason) => `↻ Pokračuji k cíli (${turns}/${max_turns}): ${reason}`,
+ goal_continuing_toast: 'Pokračujeme k cíli...',
+ goal_evaluating_progress: 'Vyhodnocování pokroku cíle...',
+ goal_no_goal: 'Žádný aktivní cíl.',
+ goal_paused: (goal) => `⏸ Cíl pozastaven: ${goal}`,
+ goal_paused_budget_exhausted: (turns, max_turns) => `⏸ Cíl pozastaven — využito ${turns}/${max_turns} tahů. Použijte /goal resume pro pokračování nebo /goal clear pro ukončení.`,
+ goal_resumed: (goal) => `▶ Cíl obnoven: ${goal}`,
+ goal_set: (turns, goal) => `⊙ Cíl nastaven (rozpočet ${turns} tahů): ${goal}`,
+ goal_status_active: (turns, max_turns, goal) => `⊙ Cíl (aktivní, ${turns}/${max_turns} tahů): ${goal}`,
+ goal_status_done: (turns, max_turns, goal) => `✓ Cíl splněn (${turns}/${max_turns}): ${goal}`,
+ goal_status_none: 'Žádný aktivní cíl. Nastavte jeden pomocí /goal .',
+ goal_status_paused: (turns, max_turns, reason, goal) => `⏸ Cíl (pozastaveno, ${turns}/${max_turns}${reason ? `, ${reason}` : ''}): ${goal}`,
+ goal_working_toward: 'Práce směrem k cíli...',
+ html_error: 'Vykreslení náhledu HTML se nezdařilo',
+ html_loading: 'Načítání náhledu HTML...',
+ html_open_full: 'Otevřít celou stránku',
+ html_sandbox_label: 'Náhled HTML (v sandboxu)',
+ html_too_large: 'HTML příliš velké pro vložený náhled',
+ image_load_failed: 'Nelze načíst obrázek',
+ image_pasted: 'Vložený obrázek:',
+ import_failed: 'Import selhal',
+ import_invalid_json: 'Neplatná data JSON',
+ jump_to_question: 'na odpověď',
+ jump_to_question_label: 'Skočit na začátek této odpovědi',
+ load_older_messages: '↑ Posunutím nahoru nebo kliknutím načtete starší zprávy',
+ loading: 'Načítání…',
+ mcp_add_server: 'Přidat server',
+ mcp_cancel: 'Zrušit',
+ mcp_command_required: 'Pro přenos stdio je vyžadován příkaz.',
+ mcp_delete_confirm_message: 'Odstranit MCP server „{0}“? Tuto akci nelze vrátit zpět.',
+ mcp_delete_confirm_title: 'Smazat server MCP',
+ mcp_delete_failed: 'Odstranění serveru MCP se nezdařilo.',
+ mcp_deleted: 'MCP server smazán.',
+ mcp_disabled_toast: (name) => `MCP server „${name}“ byl zakázán.`,
+ mcp_enabled_no: 'Zakázáno',
+ mcp_enabled_toast: (name) => `MCP server „${name}“ byl povolen.`,
+ mcp_enabled_yes: 'Povoleno',
+ mcp_field_args: 'Argumenty (oddělené čárkami)',
+ mcp_field_command: 'Příkaz',
+ mcp_field_name: 'Název serveru',
+ mcp_field_timeout: 'Časový limit (sekundy)',
+ mcp_field_url: 'URL',
+ mcp_load_failed: 'Načtení serverů MCP se nezdařilo.',
+ mcp_name_required: 'Je vyžadováno jméno serveru.',
+ mcp_no_servers: 'Nejsou nakonfigurovány žádné servery MCP.',
+ mcp_restart_hint: 'Změny serveru jsou zatím jen pro čtení. Upravte config.yaml a restartujte Hermes, aby se změny projevily.',
+ mcp_save: 'Uložit',
+ mcp_save_failed: 'Uložení serveru MCP se nezdařilo.',
+ mcp_saved: 'MCP server uložen.',
+ mcp_servers_desc: 'Zobrazit servery MCP nakonfigurované v config.yaml.',
+ mcp_servers_title: 'Servery MCP',
+ mcp_status_active: 'Aktivní',
+ mcp_status_configured: 'Nastavené',
+ mcp_status_disabled: 'Zakázáno',
+ mcp_status_invalid_config: 'Neplatná konfigurace',
+ mcp_status_unknown: 'Neznámé',
+ mcp_toggle_failed: 'Aktualizace serveru MCP se nezdařila.',
+ mcp_toggle_followup: 'Povolení/zakázání ovládacích prvků je záměrně odloženo, dokud nebude sémantika opakovaného načtení MCP explicitní.',
+ mcp_tool_count: '{0} nástrojů',
+ mcp_tools_desc: 'Vyhledávejte známé nástroje na aktivních serverech MCP.',
+ mcp_tools_inactive_configured_servers: (servers) => `Nakonfigurováno, ale neaktivní v tomto běhovém prostředí WebUI: ${servers}.`,
+ mcp_tools_load_failed: 'Načtení nástrojů MCP se nezdařilo.',
+ mcp_tools_next_page: 'Následující',
+ mcp_tools_next_page_aria: 'Další stránka nástrojů MCP',
+ mcp_tools_no_matches: 'Vašemu vyhledávání neodpovídají žádné nástroje MCP.',
+ mcp_tools_no_tools: 'Z aktivního běhového inventáře nejsou k dispozici žádné nástroje MCP.',
+ mcp_tools_page_size_prefix: 'Zobrazit',
+ mcp_tools_page_size_suffix: 'na stránku',
+ mcp_tools_pagination_label: 'Stránkování nástrojů MCP',
+ mcp_tools_per_page_aria: 'Nástroje MCP na stránku',
+ mcp_tools_previous_page: 'PŘEDCHOZÍ',
+ mcp_tools_previous_page_aria: 'Předchozí stránka nástrojů MCP',
+ mcp_tools_runtime_note: 'Inventář nástrojů používá pouze již známá aktivní MCP runtime data; WebUI nespouští ani nesonduje servery.',
+ mcp_tools_schema_empty: 'Žádné parametry schématu.',
+ mcp_tools_search_placeholder: 'Hledat nástroje podle názvu, serveru nebo popisu…',
+ mcp_tools_summary_matching: (query) => ` odpovídající „${query}“`,
+ mcp_tools_summary_no_matches: (query,total) => `Žádné MCP nástroje neodpovídají „${query}“ (celkem ${total} MCP nástrojů).`,
+ mcp_tools_summary_none: 'Žádné nástroje MCP k zobrazení.',
+ mcp_tools_summary_showing: (start,end,filtered,searchNote,totalNote,page,pages) => `Zobrazuji ${start}–${end} z ${filtered} MCP nástrojů${searchNote}${totalNote}. Stránka ${page} z ${pages}.`,
+ mcp_tools_summary_total_note: (total) => ` (celkem ${total} MCP nástrojů)`,
+ mcp_tools_title: 'Nástroje MCP',
+ mcp_transport_label: 'Typ transportu',
+ mcp_url_required: 'Pro přenos http je vyžadována adresa URL.',
+ mic_denied: 'Přístup k mikrofonu byl odepřen. Zkontrolujte oprávnění prohlížeče.',
+ mic_error: 'Chyba hlasového vstupu:',
+ mic_insecure_origin: 'Hlasový vstup vyžaduje zabezpečené spojení. Otevřete Hermes přes HTTPS nebo z localhost pro použití mikrofonu.',
+ mic_network: 'Rozpoznávání řeči není k dispozici.',
+ mic_no_speech: 'Žádný rozpoznaný hlas. Zkuste to znovu.',
+ model_custom_label: 'Vlastní model ID',
+ model_custom_placeholder: 'např. openai/gpt-5.4',
+ model_did_you_mean: (m) => ` — měli jste na mysli „${m}“?`,
+ model_group_configured: 'Nastavené',
+ model_not_found_label: 'Model nenalezen',
+ model_scope_advisory: 'Vztahuje se na tuto konverzaci z vaší další zprávy.',
+ model_scope_toast: 'Vztahuje se na tuto konverzaci z vaší další zprávy.',
+ model_search_no_results: 'Nenalezeny žádné modely',
+ model_search_placeholder: 'Hledat modely…',
+ model_show_all_models: 'Zobrazit všech {0} modelů',
+ model_unavailable: '(nedostupné)',
+ model_unavailable_title: 'Tento model již není ve vašem aktuálním seznamu poskytovatelů',
+ model_usage: 'Použití: /model ',
+ move_failed: 'Přesun se nezdařil.',
+ moved_to: 'Přesunuto do ',
+ n_messages: (n) => `${n} ${_i18nCsPlural(n,'zpráva','zprávy','zpráv')}`,
+ new_session: 'Vytvořena nová relace',
+ new_session_creating: 'Vytváření nové konverzace...',
+ no_active_session: 'Žádná aktivní relace',
+ no_active_task: 'Žádná aktivní úloha k zastavení.',
+ no_model_match: 'Nevyhovuje žádný model "',
+ no_personalities: 'Nebyly nalezeny žádné osobnosti (přidejte je do ~/.hermes/personalities/)',
+ no_workspace: 'Žádný pracovní prostor',
+ no_workspace_match: 'Žádná shoda pracovního prostoru "',
+ offline_autorefresh: 'Obnovím tuto stránku automaticky, když bude Hermes dosažitelný znovu.',
+ offline_browser_detail: 'Váš prohlížeč hlásí, že zařízení je offline.',
+ offline_check_now: 'Zkontrolovat teď',
+ offline_checking: 'Kontroluje se…',
+ offline_network_detail: 'Hermes není právě dosažitelný z tohoto prohlížeče.',
+ offline_stream_waiting: 'Spojení ztraceno. Čekám na obnovení…',
+ offline_title: 'Spojení ztraceno',
+ onboarding_complete: 'Onboarding dokončen!',
+ onboarding_skip: 'Přeskočit instalaci',
+ open_in_vscode: 'Otevřít ve VS Code',
+ open_in_vscode_failed: 'Otevření ve VS Code se nezdařilo: ',
+ parse_failed_note: 'interpretace se nezdařila',
+ path_copied: 'Cesta k souboru zkopírována do schránky',
+ path_copy_failed: 'Zkopírování se nezdařilo',
+ pdf_download: 'Stáhnout PDF',
+ pdf_error: 'Zobrazení náhledu PDF se nezdařilo',
+ pdf_loading: 'Načítání PDF {0}…',
+ pdf_no_pages: 'PDF nemá žádné stránky',
+ pdf_too_large: 'PDF příliš velké pro vložený náhled',
+ pdf_truncated: 'Zobrazuji prvních {0} z {1} stránek — stáhněte pro celý dokument',
+ personalities_load_failed: 'Načtení osobností se nezdařilo',
+ personality_cleared: 'Osobnost očištěna',
+ personality_set: 'Osobnost: ',
+ personality_switch_hint: '\n\nPoužijte `/personality ` pro přepnutí nebo `/personality none` pro vymazání.',
+ preserved_task_list_label: 'Zachovaný seznam úkolů',
+ provider_mismatch_label: 'Neshoda poskytovatele',
+ provider_mismatch_warning: (m,p)=>`"${m}" nemusí fungovat s vaším nakonfigurovaným poskytovatelem (${p}). Přesto odeslat, nebo spusťte \`hermes model\` v terminálu pro přepnutí.`,
+ queued_cancel: 'Zrušit zprávu ve frontě',
+ queued_count: (n) => n === 1 ? '1 ve frontě' : `${n} ve frontě`,
+ queued_label: 'Odešle po odpovědi',
+ raw_view: 'Surový',
+ reconnect_active: 'Odpověď se stále generuje. Znovu načíst, až budete připraveni?',
+ reconnect_finished: 'Když jste naposledy odešli, probíhala odezva. Zprávy mohly být aktualizovány.',
+ reference_only_label: 'Pouze jako odkaz',
+ regen_failed: 'Obnovení selhalo:',
+ regenerate: 'Znovu generovat odpověď',
+ remove: 'Odebrat',
+ rename_failed: 'Přejmenování selhalo:',
+ rename_prompt: 'Nové jméno:',
+ rename_title: 'Přejmenovat',
+ renamed_to: 'Přejmenováno na',
+ retrieval_context_label: 'Indexovaný kontext',
+ retrieval_context_preview: 'Dřívější zprávy jsou uloženy a načteny pomocí kontextových nástrojů',
+ retry_failed: 'Opakování se nezdařilo:',
+ reveal_failed: 'Nepodařilo se odhalit:',
+ reveal_in_finder: 'Otevřít ve správci souborů',
+ save: 'Uložit',
+ save_failed: 'Uložení selhalo',
+ save_title: 'Uložit změny',
+ saved: 'Uloženo',
+ saved_prompts_delete: 'Odstranit výzvu',
+ saved_prompts_empty: 'Žádné uložené prompty zatím.',
+ saved_prompts_empty_input: 'Nejprve zadejte výzvu k uložení',
+ saved_prompts_save_current: 'Uložit aktuální vstup jako prompt',
+ saved_prompts_saved: 'Prompt uložen',
+ selected_text_reply: 'Odpovědět výběrem',
+ selected_text_reply_appended: 'Vybraný text přidán do editoru zprávy',
+ selected_text_reply_title: 'Připojit vybraný text chatu jako citovaný kontext',
+ session_attention_approval: (n) => n === 1 ? 'Schválení' : `${n} schválení`,
+ session_attention_approval_title: 'Čekání na rozhodnutí o povolení',
+ session_attention_clarify: (n) => n === 1 ? 'Otázka' : `${n} ${_i18nCsPlural(n,'otázka','otázky','otázek')}`,
+ session_attention_clarify_title: 'Čekání na vaši odpověď',
+ session_attention_generic: (n) => n === 1 ? 'Upozornění' : `${n} ${_i18nCsPlural(n,'položka','položky','položek')}`,
+ session_attention_generic_title: 'Čekání na akci uživatele',
+ session_copy_link: 'Kopírovat odkaz na konverzaci',
+ session_copy_link_desc: 'Zkopírujte přímý odkaz na tuto konverzaci',
+ session_imported: 'Relace importována',
+ session_jump_end: 'Konec',
+ session_jump_end_label: 'Skok na konec relace',
+ session_jump_start: 'Začátek',
+ session_jump_start_label: 'Skok na začátek relace',
+ session_new_message: 'Nová zpráva',
+ session_new_message_label: 'Nová zpráva k dispozici, přeskoč na konec',
+ session_rename: 'Přejmenovat konverzaci',
+ session_rename_desc: 'Upravit název této konverzace',
+ session_rename_failed_no_row: 'Nelze spustit přejmenování — řádek nebyl nalezen.',
+ session_title_regenerate: 'Znovu vygenerovat název',
+ session_title_regenerate_desc: 'Požádejte Hermese, aby z konverzace vygeneroval nový název',
+ session_title_regenerate_failed: 'Obnovení názvu se nezdařilo:',
+ session_title_regenerated: (title) => `Název byl přegenerován: ${title}`,
+ session_title_regenerating: 'Probíhá regenerace názvu...',
+ session_toolsets: 'Sady nástrojů relace',
+ session_toolsets_applied: 'Sady nástrojů byly aktualizovány',
+ session_toolsets_apply: 'Použít',
+ session_toolsets_clear: 'Použít výchozí',
+ session_toolsets_cleared: 'Použití výchozích hodnot aktivního profilu',
+ session_toolsets_configured_servers: 'Nastavené MCP servers',
+ session_toolsets_custom: 'Vlastní přepsání',
+ session_toolsets_desc: 'Použít výchozí hodnoty aktivního profilu nebo zvolit vlastní seznam nástrojů pro tuto relaci',
+ session_toolsets_failed: 'Aktualizace sad nástrojů se nezdařila:',
+ session_toolsets_global: 'Výchozí hodnoty aktivního profilu',
+ session_toolsets_loading_servers: 'Načítání nakonfigurovaných serverů...',
+ session_toolsets_no_configured_servers: 'Žádné nakonfigurované servery MCP',
+ session_toolsets_placeholder: 'tool1, tool2, …',
+ session_toolsets_profile_defaults: 'Výchozí hodnoty aktivního profilu',
+ session_toolsets_use_profile_defaults: 'Použít výchozí hodnoty aktivního profilu',
+ session_worktree_badge: 'Worktree',
+ settings_desc_busy_placeholder_hint: 'Zobrazuje zástupný symbol editoru zprávy s aktuální zaneprázdněnou akcí, když je relace spuštěna a koncept je prázdný.',
+ settings_desc_fade_text_effect: 'Během odpovědi asistenta vyblednou nově streamovaná slova. Podobně jako OpenWebUI; ve výchozím nastavení vypnuto pro maximální výkon.',
+ settings_desc_max_tokens: 'Omezuje výstup asistenta pro nové streamované tahy. Ponechte prázdné pro použití záložní konfigurace aktivního profilu.',
+ settings_desc_model: 'Používá se pro nové konverzace. Stávající konverzace si zachovají svůj vybraný model.',
+ settings_desc_rtl: 'Převrátí zarovnání chatových zpráv a vstupního pole editoru pro jazyky jako arabština nebo hebrejština. Ovlivňuje pouze oblast chatu — postranní panel a další panely zůstávají zleva doprava.',
+ settings_label_busy_placeholder_hint: 'Zobrazit nápovědu zaneprázdněného zástupného symbolu',
+ settings_label_fade_text_effect: 'Efekt vyblednutí textu',
+ settings_label_language: 'Jazyk',
+ settings_label_max_tokens: 'Maximální výstupní tokeny',
+ settings_label_model: 'Výchozí model',
+ settings_label_rtl: 'Rozložení chatu zprava doleva',
+ settings_label_send_key: 'Klávesa pro odeslání',
+ settings_label_theme: 'Motiv',
+ settings_placeholder_max_tokens_fallback: 'Bez přepsání (výchozí: {0})',
+ settings_placeholder_max_tokens_none: 'Žádné přepsání',
+ slash_skill_badge: 'Dovednost',
+ slash_skill_desc: 'Vyvolat tuto dovednost',
+ status_agent_running: 'Agent běží',
+ status_ephemeral: 'Efemérní snímek — neuložen do historie přepisu.',
+ status_heading: 'Stav relace',
+ status_hermes_home: 'Domovská složka Hermes',
+ status_load_failed: 'Stav se nepodařilo načíst:',
+ status_messages: 'Zprávy',
+ status_model: 'Model',
+ status_no: 'Ne',
+ status_no_tokens: 'Nebyly použity žádné tokeny',
+ status_personality: 'osobnost',
+ status_profile: 'Profil',
+ status_provider: 'Poskytovatel',
+ status_session_id: 'ID relace',
+ status_started: 'Spuštěno',
+ status_title: 'Název',
+ status_tokens: 'Tokeny',
+ status_unknown: 'Neznámé',
+ status_updated: 'Aktualizováno',
+ status_workspace: 'Pracovní prostor',
+ status_yes: 'Ano',
+ steer_fail_agent_lacks_steer: 'Tato verze agenta nepodporuje steer',
+ steer_fail_network_error: 'Chyba sítě — zkontrolujte připojení',
+ steer_fail_no_cached_agent: 'Pro tuto relaci není uložen žádný agent — zkuste aktualizaci',
+ steer_fail_not_running: 'Agent právě neběží',
+ steer_fail_session_not_found: 'Relace nebyla nalezena — mohla vypršet',
+ steer_fail_steer_error: 'Doručení řízení se nezdařilo — agent mohl dokončit',
+ steer_fail_stream_dead: 'Stream agent ukončen',
+ steer_fail_unknown: 'Steer nedostupný',
+ steer_leftover_queued: 'Řízení ve frontě na další tah',
+ steer_recovery_dismiss: 'Zamítnout',
+ steer_recovery_retry: 'Zkusit znovu',
+ stream_stopped: 'Odpověď byla zastavena.',
+ subagent_children: 'Relace subagentů',
+ switched_to: 'Přepnuto na ',
+ switched_workspace: 'Přepnuto na pracovní prostor:',
+ symlink_link_to: 'Symbolický odkaz → {target}',
+ terminal_clear: 'Vymazat',
+ terminal_close: 'Zavřít',
+ terminal_collapse: 'Sbalit',
+ terminal_copy_failed: 'Kopírování se nezdařilo',
+ terminal_copy_output: 'Kopírovat výstup',
+ terminal_error: 'Chyba terminálu',
+ terminal_expand: 'Roztáhnout',
+ terminal_input_failed: 'Vstup terminálu se nezdařil:',
+ terminal_input_placeholder: 'Spustit příkaz:',
+ terminal_no_workspace_title: 'Vyberte pracovní prostor pro otevření terminálu',
+ terminal_open_title: 'Otevřít terminál pracovního prostoru',
+ terminal_remote_backend_unsupported: 'Vestavěný terminál je podporován pouze pro místní backendy terminálů.',
+ terminal_restart: 'Restartovat',
+ terminal_start_failed: 'Spuštění terminálu se nezdařilo:',
+ terminal_title: 'Terminál',
+ text_pasted: 'Vložený text připojen jako',
+ theme_set: 'Šablona:',
+ theme_usage: 'Použití: /theme',
+ thinking: 'myšlení',
+ title_change_hint: 'Pro přejmenování použijte `/title `.',
+ title_current: 'Aktuální titul:',
+ title_set: 'Název nastaven na',
+ token_usage_off: 'Využití tokenu vypnuto',
+ token_usage_on: 'Používání tokenu zapnuto',
+ tree_view: 'Strom',
+ type_slash: 'Pro zobrazení příkazů napište /',
+ undid_messages_suffix: 'zpráv(y)',
+ undid_n_messages: 'Odstraněno',
+ undo_exchange: 'Vrátit zpět poslední výměnu',
+ undo_failed: 'Krok zpět selhal',
+ unsaved_confirm: 'Máte neuložené změny v náhledu. Zahodit a přejít?',
+ untitled: 'Bez názvu',
+ usage_cache_hit_detail: 'Cache: {0}% ({1} čtení / {2} zápis)',
+ usage_cached_percent: '{0}% cacheované',
+ usage_default_model: 'výchozí',
+ usage_estimated_cost: 'Odhadované náklady',
+ usage_heading: 'Použití tokenů',
+ usage_input_tokens: 'Vstupní tokeny',
+ usage_load_failed: 'Načtení využití se nezdařilo:',
+ usage_output_tokens: 'Výstupní tokeny',
+ usage_personality_none: 'žádná',
+ usage_settings_tip: 'Poznámka: odhady nákladů jsou přibližné.',
+ usage_total: 'Celkem tokenů',
+ usage_unknown: 'neznámé',
+ voice_dictate: 'Diktovat',
+ voice_dictate_active: 'Zastavit diktování',
+ voice_error: 'Hlas není v tomto prohlížeči podporován',
+ voice_listening: 'Poslech…',
+ voice_mode_active: 'Hlasový režim zapnutý',
+ voice_mode_off: 'Hlasový režim vypnutý',
+ voice_mode_toggle: 'Hlasový režim',
+ voice_mode_toggle_active: 'Ukončit hlasový režim',
+ voice_recording_active: 'Zastavit nahrávání',
+ voice_speaking: 'Mluvení…',
+ voice_thinking: 'myšlení',
+ workspace_empty_dir: 'Tento pracovní prostor je prázdný.',
+ workspace_empty_no_path: 'Není vybrán žádný pracovní prostor. Nastavte pracovní prostor v Nastavení \u2192 Pracovní prostor pro procházení souborů.',
+ workspace_hidden_files_visible: 'skryté viditelné',
+ workspace_hidden_files_visible_title: 'Skryté soubory jsou viditelné — klikněte pro možnosti',
+ workspace_new_worktree_conversation: 'Nová konverzace ve worktree',
+ workspace_new_worktree_conversation_meta: 'Vytvořit izolovaný git worktree pro tento workspace.',
+ workspace_options: 'Možnosti pracovního prostoru',
+ workspace_show_hidden_files: 'Zobrazit skryté soubory',
+ workspace_show_hidden_files_desc: 'Do stromu souborů zahrňte soubory .DS_Store, .git, node_modules a další skryté / systémové soubory.',
+ workspace_switch_failed: 'Přepnutí workspace selhalo: ',
+ workspace_usage: 'Použití: /workspace ',
+ workspace_worktree_created: 'Worktree konverzace vytvořena',
+ workspace_worktree_failed: 'Vytvoření worktree selhalo: ',
+ ws_no_results: 'Nenalezeny žádné pracovní prostory',
+ ws_search_placeholder: 'Hledat pracovní prostory…',
+ you: 'Vy',
+ // tool/worklog references
+ processed_elapsed: _i18nProcessedElapsedCs,
+ tool_action_label: _i18nToolActionLabelCs,
+ tool_worklog_summary: _i18nToolWorklogSummaryCs,
+ tool_summary_join: _i18nToolSummaryJoinCs,
+ },
tr: {
@@ -23360,6 +25005,53 @@ function _i18nToolSummaryJoinVi(parts) {
return Array.isArray(parts) ? parts.filter(Boolean).join(', ') : '';
}
+// Czech (cs) tool/worklog helpers — Slavic plural forms (1 / few 2-4 / many 5+ handled by _i18nToolWorklogSummaryFromMap's singular/plural split; UI uses n===1 vs plural).
+function _i18nCsPlural(n, one, few, many) {
+ const abs = Math.abs(Number(n) || 0);
+ if (abs === 1) return one;
+ if (abs >= 2 && abs <= 4) return few;
+ return many;
+}
+const _I18N_TOOL_ACTION_TEXT_CS = {
+ shell: { running: 'Spouštění', done: 'Spuštěno', fail: 'spustit', fallback: 'příkaz' },
+ read: { running: 'Čtení', done: 'Přečteno', fail: 'přečíst', fallback: 'soubor' },
+ list: { running: 'Výpis', done: 'Vypsáno', fail: 'vypsat', fallback: 'soubory' },
+ search: { running: 'Prohledávání', done: 'Prohledáno', fail: 'prohledat', fallback: 'pracovní prostor' },
+ web: { running: 'Kontrola', done: 'Zkontrolováno', fail: 'zkontrolovat', fallback: 'webová data' },
+ write: { running: 'Aktualizace', done: 'Aktualizováno', fail: 'aktualizovat', fallback: 'soubor' },
+ skill: { running: 'Načítání', done: 'Načteno', fail: 'načíst', fallback: 'dovednost' },
+ memory: { running: 'Ukládání', done: 'Uloženo', fail: 'uložit', fallback: 'paměť' },
+ delegate: { running: 'Delegování', done: 'Delegováno', fail: 'delegovat', fallback: 'úkol' },
+ unknown: { running: 'Spouštění', done: 'Spuštěno', fail: 'spustit', fallback: 'nástroj' },
+};
+const _I18N_TOOL_SUMMARY_TEXT_CS = {
+ shell: { running: ['Spouštění příkazu', 'Spouštění {n} příkazů'], done: ['Spuštěn příkaz', 'Spuštěno {n} příkazů'] },
+ read: { running: ['Čtení souboru', 'Čtení {n} souborů'], done: ['Přečten soubor', 'Přečteno {n} souborů'] },
+ list: { running: ['Výpis souboru', 'Výpis {n} souborů'], done: ['Vypsán soubor', 'Vypsáno {n} souborů'] },
+ search: { running: ['Prohledávání prac. prostoru', 'Prohledávání prac. prostoru {n}×'], done: ['Prohledán prac. prostor', 'Prohledán prac. prostor {n}×'] },
+ web: { running: ['Kontrola webu', 'Kontrola webu {n}×'], done: ['Zkontrolován web', 'Zkontrolován web {n}×'] },
+ write: { running: ['Aktualizace souboru', 'Aktualizace {n} souborů'], done: ['Aktualizován soubor', 'Aktualizováno {n} souborů'] },
+ skill: { running: ['Načítání dovednosti', 'Načítání {n} dovedností'], done: ['Načtena dovednost', 'Načteno {n} dovedností'] },
+ memory: { running: ['Ukládání paměti', 'Ukládání {n} záznamů paměti'], done: ['Uložena paměť', 'Uloženo {n} záznamů paměti'] },
+ delegate: { running: ['Delegování úkolu', 'Delegování {n} úkolů'], done: ['Delegován úkol', 'Delegováno {n} úkolů'] },
+ unknown: { running: ['Spouštění nástroje', 'Spouštění {n} nástrojů'], done: ['Spuštěn nástroj', 'Spuštěno {n} nástrojů'] },
+};
+function _i18nProcessedElapsedCs(duration) {
+ return _i18nProcessedElapsed('Zpracováno', duration);
+}
+function _i18nToolActionLabelCs(kind, state, target, display, failed) {
+ const verbs = _I18N_TOOL_ACTION_TEXT_CS[kind] || _I18N_TOOL_ACTION_TEXT_CS.unknown;
+ const object = target || verbs.fallback || display || 'nástroj';
+ if (failed) return `Nepodařilo se ${verbs.fail || 'spustit'} ${object}`;
+ return `${verbs[state] || verbs.running} ${object}`;
+}
+function _i18nToolWorklogSummaryCs(kind, state, count) {
+ return _i18nToolWorklogSummaryFromMap(_I18N_TOOL_SUMMARY_TEXT_CS, kind, state, count);
+}
+function _i18nToolSummaryJoinCs(parts) {
+ return Array.isArray(parts) ? parts.filter(Boolean).join(', ') : '';
+}
+
// Active locale — defaults to English; overridden by loadLocale() at boot.
diff --git a/tests/test_2735_open_in_vscode.py b/tests/test_2735_open_in_vscode.py
index c510caa3..b5ecc226 100644
--- a/tests/test_2735_open_in_vscode.py
+++ b/tests/test_2735_open_in_vscode.py
@@ -229,7 +229,7 @@ class TestOpenInVsCodeI18n:
"""open_in_vscode key must appear exactly once per locale (14 total)."""
src = I18N.read_text(encoding="utf-8")
count = src.count("open_in_vscode:")
- assert count == 14, (
+ assert count == 15, (
f"Expected 14 open_in_vscode: entries (one per locale), found {count}"
)
@@ -237,7 +237,7 @@ class TestOpenInVsCodeI18n:
"""open_in_vscode_failed key must appear exactly once per locale (14 total)."""
src = I18N.read_text(encoding="utf-8")
count = src.count("open_in_vscode_failed:")
- assert count == 14, (
+ assert count == 15, (
f"Expected 14 open_in_vscode_failed: entries (one per locale), found {count}"
)
diff --git a/tests/test_5144_busy_composer_placeholder_hint.py b/tests/test_5144_busy_composer_placeholder_hint.py
index 6650fe89..9ae1c118 100644
--- a/tests/test_5144_busy_composer_placeholder_hint.py
+++ b/tests/test_5144_busy_composer_placeholder_hint.py
@@ -78,7 +78,7 @@ def test_busy_placeholder_helper_preserves_compression_and_drafts():
def test_locale_blocks_cover_new_keys():
locale_blocks = I18N_JS.count("settings_default_message_mode_steer")
- assert locale_blocks == 14
+ assert locale_blocks == 15
for key in [
"settings_label_busy_placeholder_hint",
"settings_desc_busy_placeholder_hint",
diff --git a/tests/test_auxiliary_models_settings.py b/tests/test_auxiliary_models_settings.py
index 2af243de..0e85a20b 100644
--- a/tests/test_auxiliary_models_settings.py
+++ b/tests/test_auxiliary_models_settings.py
@@ -330,7 +330,7 @@ class TestAuxiliaryModelsI18n:
"""Count of each key should equal the number of locales (12 with Turkish)."""
for key in self.REQUIRED_KEYS:
count = I18N_JS.count(f"{key}:")
- assert count == 14, (
+ assert count == 15, (
f"i18n key '{key}' found {count} times — expected 14 (one per locale)"
)
diff --git a/tests/test_czech_locale.py b/tests/test_czech_locale.py
new file mode 100644
index 00000000..bceeb612
--- /dev/null
+++ b/tests/test_czech_locale.py
@@ -0,0 +1,197 @@
+from collections import Counter
+from pathlib import Path
+import re
+
+
+REPO = Path(__file__).resolve().parent.parent
+
+
+def read(path: Path) -> str:
+ return path.read_text(encoding="utf-8")
+
+
+def extract_locale_block(src: str, locale_key: str) -> str:
+ start_match = re.search(rf"\b{re.escape(locale_key)}\s*:\s*\{{", src)
+ assert start_match, f"{locale_key} locale block not found"
+
+ start = start_match.end() - 1
+ depth = 0
+ in_single = False
+ in_double = False
+ in_backtick = False
+ escape = False
+
+ for i in range(start, len(src)):
+ ch = src[i]
+
+ if escape:
+ escape = False
+ continue
+
+ if in_single:
+ if ch == "\\":
+ escape = True
+ elif ch == "'":
+ in_single = False
+ continue
+
+ if in_double:
+ if ch == "\\":
+ escape = True
+ elif ch == '"':
+ in_double = False
+ continue
+
+ if in_backtick:
+ if ch == "\\":
+ escape = True
+ elif ch == "`":
+ in_backtick = False
+ continue
+
+ if ch == "'":
+ in_single = True
+ continue
+ if ch == '"':
+ in_double = True
+ continue
+ if ch == "`":
+ in_backtick = True
+ continue
+
+ if ch == "{":
+ depth += 1
+ continue
+ if ch == "}":
+ depth -= 1
+ if depth == 0:
+ return src[start + 1 : i]
+
+ raise AssertionError(f"{locale_key} locale block braces are not balanced")
+
+
+def locale_keys(src: str, locale_key: str) -> list[str]:
+ key_pattern = re.compile(r"^\s*([a-zA-Z0-9_]+)\s*:", re.MULTILINE)
+ return key_pattern.findall(extract_locale_block(src, locale_key))
+
+
+def test_czech_locale_block_exists():
+ src = read(REPO / "static" / "i18n.js")
+ cs_block = extract_locale_block(src, "cs")
+ assert cs_block
+ assert "_lang: 'cs'" in cs_block
+ assert "_label: 'Čeština'" in cs_block
+ assert "_speech: 'cs-CZ'" in cs_block
+
+
+def test_czech_locale_includes_representative_translations():
+ src = read(REPO / "static" / "i18n.js")
+ cs_block = extract_locale_block(src, "cs")
+ expected = [
+ "settings_title: 'Nastavení'",
+ "settings_label_language: 'Jazyk'",
+ "login_title: 'Přihlášení'",
+ "approval_heading: 'Požadováno schválení'",
+ "tab_tasks: 'Úkoly'",
+ "tab_profiles: 'Profily'",
+ "empty_title: 'Jak vám mohu pomoci?'",
+ "onboarding_title: 'Vítejte v Hermes Web UI'",
+ ]
+ for entry in expected:
+ assert entry in cs_block, f"missing expected Czech translation: {entry}"
+
+
+def test_czech_locale_matches_english_key_coverage():
+ src = read(REPO / "static" / "i18n.js")
+ en_keys = set(locale_keys(src, "en"))
+ cs_keys = set(locale_keys(src, "cs"))
+ assert sorted(en_keys - cs_keys) == []
+ assert sorted(cs_keys - en_keys) == []
+
+
+def test_czech_locale_has_no_duplicate_keys():
+ src = read(REPO / "static" / "i18n.js")
+ keys = locale_keys(src, "cs")
+
+ duplicates = sorted(k for k, count in Counter(keys).items() if count > 1)
+ assert not duplicates, f"Czech locale has duplicate keys: {duplicates}"
+
+
+def test_czech_locale_keys_use_standard_indentation():
+ src = read(REPO / "static" / "i18n.js")
+ cs_block = extract_locale_block(src, "cs")
+
+ # Enforce strict 4-space indentation for keys.
+ badly_indented = []
+ for line in cs_block.splitlines():
+ m = re.match(r"^(\s*)[a-zA-Z0-9_]+\s*:", line)
+ if m and len(m.group(1)) != 4:
+ badly_indented.append(f"{len(m.group(1))} spaces: {line.strip()}")
+ assert badly_indented == []
+
+
+def test_czech_locale_arrow_function_values_mirror_english():
+ src = read(REPO / "static" / "i18n.js")
+ en_block = extract_locale_block(src, "en")
+ cs_block = extract_locale_block(src, "cs")
+
+ value_re = re.compile(r"^\s+([a-zA-Z0-9_]+):\s*(.+?)(?:,\s*$|\s*$)", re.MULTILINE)
+ arrow_re = re.compile(r"^\s*\(?[a-zA-Z_,\s]*\)?\s*=>")
+ helper_re = re.compile(r"^_i18n[A-Za-z]+$")
+
+ def callable_values(block):
+ out = set()
+ for k, v in value_re.findall(block):
+ v = v.strip()
+ if arrow_re.match(v) or helper_re.match(v):
+ out.add(k)
+ return out
+
+ # Every key whose English value is a function must also be a function in cs
+ # (either an arrow or a named _i18n* helper reference).
+ assert callable_values(en_block) == callable_values(cs_block)
+
+
+def test_czech_locale_preserves_placeholder_patterns():
+ src = read(REPO / "static" / "i18n.js")
+ en_block = extract_locale_block(src, "en")
+ cs_block = extract_locale_block(src, "cs")
+
+ value_re = re.compile(r"^\s+([a-zA-Z0-9_]+):\s*(.+?)(?:,\s*$|\s*$)", re.MULTILINE)
+ placeholder_re = re.compile(r"\{[0-9]+\}|\$\{[a-zA-Z_][a-zA-Z0-9_]*\}")
+
+ def kv(block):
+ out = {}
+ for k, v in value_re.findall(block):
+ out[k] = v
+ return out
+
+ en_kv = kv(en_block)
+ cs_kv = kv(cs_block)
+
+ for key, en_val in en_kv.items():
+ if key not in cs_kv:
+ continue
+ en_vars = sorted(placeholder_re.findall(en_val))
+ cs_vars = sorted(placeholder_re.findall(cs_kv[key]))
+ # Skip arrow functions which might contain conditional logic and thus more template vars.
+ if "=>" not in cs_kv[key]:
+ if en_vars or cs_vars:
+ assert cs_vars == en_vars, f"Key '{key}' placeholder mismatch in cs locale"
+
+
+def test_czech_locale_has_no_double_escaped_unicode_sequences():
+ """JSON-style double escapes (\\\\u2026) render literal backslash-u in the UI."""
+ src = read(REPO / "static" / "i18n.js")
+ cs_block = extract_locale_block(src, "cs")
+ for bad in ("\\\\u2026", "\\\\u2192", "\\\\u2713"):
+ assert bad not in cs_block, f"Czech locale must not contain {bad!r}"
+
+
+def test_czech_locale_uses_real_utf8_diacritics():
+ """Czech uses á č ď é ě í ň ó ř š ť ú ů ý ž — confirm the block carries real
+ UTF-8 diacritics, not ASCII-only text (which would mean nothing was translated)."""
+ src = read(REPO / "static" / "i18n.js")
+ cs_block = extract_locale_block(src, "cs")
+ diacritics = "áčďéěíňóřšťúůýžÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ"
+ assert any(ch in cs_block for ch in diacritics), "Czech locale has no diacritics"
diff --git a/tests/test_issue1488_composer_voice_buttons.py b/tests/test_issue1488_composer_voice_buttons.py
index 5e1dc335..33c5173a 100644
--- a/tests/test_issue1488_composer_voice_buttons.py
+++ b/tests/test_issue1488_composer_voice_buttons.py
@@ -123,7 +123,7 @@ class TestComposerVoiceButtonI18n:
"voice_mode_toggle_active",
)
- LOCALES = ("en", "fr", "it", "ja", "ru", "es", "de", "zh", "zh-Hant", "pt", "ko", "tr", "pl", "vi")
+ LOCALES = ("en", "fr", "it", "ja", "ru", "es", "de", "zh", "zh-Hant", "pt", "ko", "tr", "pl", "vi", "cs")
def test_legacy_voice_toggle_key_removed(self):
"""The old key whose string was 'Voice input' caused the duplicate-
@@ -171,7 +171,7 @@ class TestComposerVoiceButtonI18n:
class TestVoiceModePreferenceGate:
"""boot.js must hide btnVoiceMode by default, surface it via Preferences."""
- LOCALES = ("en", "fr", "it", "ja", "ru", "es", "de", "zh", "zh-Hant", "pt", "ko", "tr", "pl", "vi")
+ LOCALES = ("en", "fr", "it", "ja", "ru", "es", "de", "zh", "zh-Hant", "pt", "ko", "tr", "pl", "vi", "cs")
def test_voice_mode_pref_is_localstorage_backed(self):
"""The pref reads from localStorage key 'hermes-voice-mode-button'."""
diff --git a/tests/test_issue2419_cache_usage_display.py b/tests/test_issue2419_cache_usage_display.py
index 836694ee..d3cda64b 100644
--- a/tests/test_issue2419_cache_usage_display.py
+++ b/tests/test_issue2419_cache_usage_display.py
@@ -63,8 +63,8 @@ def test_context_indicator_surfaces_cache_hit_rate():
def test_cache_usage_labels_are_localized():
src = (ROOT / "static" / "i18n.js").read_text()
- assert src.count("usage_cache_hit_detail:") == 14
- assert src.count("usage_cached_percent:") == 14
+ assert src.count("usage_cache_hit_detail:") == 15
+ assert src.count("usage_cached_percent:") == 15
assert "usage_cache_hit_detail: 'Cache: {0}% hit ({1} read / {2} write)'" in src
assert "usage_cached_percent: '{0}% cached'" in src
diff --git a/tests/test_issue2679_hide_suggestions.py b/tests/test_issue2679_hide_suggestions.py
index 33c8bbc3..3a260398 100644
--- a/tests/test_issue2679_hide_suggestions.py
+++ b/tests/test_issue2679_hide_suggestions.py
@@ -50,8 +50,8 @@ def test_panels_round_trip_and_hot_apply_hide_suggestions():
def test_hide_suggestions_i18n_all_locales_and_changelog():
js = I18N.read_text(encoding="utf-8")
- assert js.count("settings_label_hide_suggestions:") == 14
- assert js.count("settings_desc_hide_suggestions:") == 14
+ assert js.count("settings_label_hide_suggestions:") == 15
+ assert js.count("settings_desc_hide_suggestions:") == 15
changelog = CHANGELOG.read_text(encoding="utf-8")
assert "#2679" in changelog
assert "hide_empty_state_suggestions" in changelog
diff --git a/tests/test_issue3227_help_tab.py b/tests/test_issue3227_help_tab.py
index 99d58aec..37fc86de 100644
--- a/tests/test_issue3227_help_tab.py
+++ b/tests/test_issue3227_help_tab.py
@@ -6,7 +6,7 @@ PANELS_JS = (ROOT / "static" / "panels.js").read_text(encoding="utf-8")
I18N_JS = (ROOT / "static" / "i18n.js").read_text(encoding="utf-8")
STYLE_CSS = (ROOT / "static" / "style.css").read_text(encoding="utf-8")
-LOCALE_COUNT = 14 # en, it, ja, ru, es, de, zh, zh-TW, pt, ko, fr, tr, pl
+LOCALE_COUNT = 15 # en, it, ja, ru, es, de, zh, zh-Hant, pt, ko, fr, tr, pl, vi, cs
def test_help_nav_button_present():
diff --git a/tests/test_issue3242_3214_i18n_tooltips.py b/tests/test_issue3242_3214_i18n_tooltips.py
index cf5d13a4..845863af 100644
--- a/tests/test_issue3242_3214_i18n_tooltips.py
+++ b/tests/test_issue3242_3214_i18n_tooltips.py
@@ -5,7 +5,7 @@ BOOT_JS = (ROOT / "static" / "boot.js").read_text(encoding="utf-8")
I18N_JS = (ROOT / "static" / "i18n.js").read_text(encoding="utf-8")
SESSIONS_JS = (ROOT / "static" / "sessions.js").read_text(encoding="utf-8")
-LOCALE_COUNT = 14
+LOCALE_COUNT = 15
def test_raw_audio_active_recording_uses_dedicated_i18n_key():
diff --git a/tests/test_issue4325_virtualization_toggle.py b/tests/test_issue4325_virtualization_toggle.py
index 1f0fbc62..93a404ae 100644
--- a/tests/test_issue4325_virtualization_toggle.py
+++ b/tests/test_issue4325_virtualization_toggle.py
@@ -76,8 +76,8 @@ def test_panels_round_trip_and_hot_apply_virtualize_toggle():
def test_virtualize_toggle_i18n_all_locales():
js = I18N.read_text(encoding="utf-8")
- assert js.count("settings_label_virtualize_transcript:") == 14
- assert js.count("settings_desc_virtualize_transcript:") == 14
+ assert js.count("settings_label_virtualize_transcript:") == 15
+ assert js.count("settings_desc_virtualize_transcript:") == 15
# ── #4343 force-off-for-everyone migration (load_settings behavior) ──────────
diff --git a/tests/test_issue4356_no_git_update_check.py b/tests/test_issue4356_no_git_update_check.py
index be823d07..41477294 100644
--- a/tests/test_issue4356_no_git_update_check.py
+++ b/tests/test_issue4356_no_git_update_check.py
@@ -86,4 +86,4 @@ def test_i18n_no_git_key_all_locales():
# Count occurrences of the new key (should be exactly 13, one per locale)
count = content.count("settings_update_no_git")
- assert count == 14, f"Expected exactly 14 settings_update_no_git keys, found {count}"
+ assert count == 15, f"Expected exactly 15 settings_update_no_git keys, found {count}"
diff --git a/tests/test_issue4470_kanban_task_editor_fields.py b/tests/test_issue4470_kanban_task_editor_fields.py
index 66ba14fd..1bd4c68e 100644
--- a/tests/test_issue4470_kanban_task_editor_fields.py
+++ b/tests/test_issue4470_kanban_task_editor_fields.py
@@ -130,7 +130,7 @@ def test_i18n_new_keys_in_all_locales():
]
for key in required:
count = I18N_JS.count(f"{key}:")
- assert count == 14, f"Key '{key}' appears {count} times, expected 14 (one per locale)"
+ assert count == 15, f"Key '{key}' appears {count} times, expected 15 (one per locale)"
def test_backend_already_accepts_new_fields():
diff --git a/tests/test_pr1721_rtl_salvage.py b/tests/test_pr1721_rtl_salvage.py
index f7c8cb61..4824425e 100644
--- a/tests/test_pr1721_rtl_salvage.py
+++ b/tests/test_pr1721_rtl_salvage.py
@@ -112,5 +112,5 @@ def test_rtl_in_config_defaults_and_writable_keys():
def test_rtl_localized_in_all_locales():
js = I18N.read_text(encoding="utf-8")
# Count occurrences — should match the 11 locale blocks
- assert js.count("settings_label_rtl:") == 14
- assert js.count("settings_desc_rtl:") == 14
+ assert js.count("settings_label_rtl:") == 15
+ assert js.count("settings_desc_rtl:") == 15
diff --git a/tests/test_quota_chip_settings_toggle.py b/tests/test_quota_chip_settings_toggle.py
index 13387873..332265d9 100644
--- a/tests/test_quota_chip_settings_toggle.py
+++ b/tests/test_quota_chip_settings_toggle.py
@@ -88,5 +88,5 @@ def test_quota_chip_panels_round_trip():
def test_quota_chip_localized_in_all_locales():
js = I18N.read_text(encoding="utf-8")
- assert js.count("settings_label_quota_chip:") == 14, "12 locales expected"
- assert js.count("settings_desc_quota_chip:") == 14, "12 locales expected"
+ assert js.count("settings_label_quota_chip:") == 15, "12 locales expected"
+ assert js.count("settings_desc_quota_chip:") == 15, "12 locales expected"
diff --git a/tests/test_verdigris_skin.py b/tests/test_verdigris_skin.py
index 0c8c6ce4..7d8105fa 100644
--- a/tests/test_verdigris_skin.py
+++ b/tests/test_verdigris_skin.py
@@ -38,4 +38,4 @@ def test_verdigris_has_no_light_variant():
def test_verdigris_i18n_lists_skin_in_all_locales():
# There are 12 locales; each should now include verdigris as the trailing skin.
# 10 locales use ASCII closing paren, 2 Chinese locales use full-width paren.
- assert I18N_JS.count("verdigris)") + I18N_JS.count("verdigris)") == 14
+ assert I18N_JS.count("verdigris)") + I18N_JS.count("verdigris)") == 15
diff --git a/tests/test_zeus_skin.py b/tests/test_zeus_skin.py
index abca40e9..852183c8 100644
--- a/tests/test_zeus_skin.py
+++ b/tests/test_zeus_skin.py
@@ -45,4 +45,4 @@ def test_zeus_modals_are_not_navy():
def test_zeus_i18n_lists_skin_in_all_locales():
# There are 12 locales; each should include zeus in the skin list.
- assert I18N_JS.count("/zeus/") == 14
+ assert I18N_JS.count("/zeus/") == 15